REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 4.39 MB
Close
/home/byroehnu/easepaybiz.easetack.com/node_modules/adminjs/bundle/app-bundle.development.js
Text
Base64
var AdminJS = (function (styledComponents, React$1, require$$3, reactRouterDom, reactRouter, DesignSystem, require$$1, require$$0$1) { 'use strict'; function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n.default = e; return Object.freeze(n); } function _mergeNamespaces(n, m) { m.forEach(function (e) { e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) { if (k !== 'default' && !(k in n)) { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); }); return Object.freeze(n); } var React__default$1 = /*#__PURE__*/_interopDefault(React$1); var require$$3__default = /*#__PURE__*/_interopDefault(require$$3); var DesignSystem__namespace = /*#__PURE__*/_interopNamespace(DesignSystem); var require$$1__default = /*#__PURE__*/_interopDefault(require$$1); var require$$0__default = /*#__PURE__*/_interopDefault(require$$0$1); function _typeof$3(obj) { "@babel/helpers - typeof"; return _typeof$3 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof$3(obj); } function _toPrimitive$1(input, hint) { if (_typeof$3(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof$3(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } function _toPropertyKey$1(arg) { var key = _toPrimitive$1(arg, "string"); return _typeof$3(key) === "symbol" ? key : String(key); } function _defineProperty$2(obj, key, value) { key = _toPropertyKey$1(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function getDefaultExportFromCjs (x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; } function getAugmentedNamespace(n) { if (n.__esModule) return n; var f = n.default; if (typeof f == "function") { var a = function a () { if (this instanceof a) { return Reflect.construct(f, arguments, this.constructor); } return f.apply(this, arguments); }; a.prototype = f.prototype; } else a = {}; Object.defineProperty(a, '__esModule', {value: true}); Object.keys(n).forEach(function (k) { var d = Object.getOwnPropertyDescriptor(n, k); Object.defineProperty(a, k, d.get ? d : { enumerable: true, get: function () { return n[k]; } }); }); return a; } /** * This file automatically generated from `pre-publish.js`. * Do not manually edit. */ var voidElements = { "area": true, "base": true, "br": true, "col": true, "embed": true, "hr": true, "img": true, "input": true, "link": true, "meta": true, "param": true, "source": true, "track": true, "wbr": true }; var e,t=(e=voidElements)&&"object"==typeof e&&"default"in e?e.default:e,n=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function r(e){var r={type:"tag",name:"",voidElement:!1,attrs:{},children:[]},i=e.match(/<\/?([^\s]+?)[/\s>]/);if(i&&(r.name=i[1],(t[i[1]]||"/"===e.charAt(e.length-2))&&(r.voidElement=!0),r.name.startsWith("!--"))){var s=e.indexOf("--\x3e");return {type:"comment",comment:-1!==s?e.slice(4,s):""}}for(var c=new RegExp(n),a=null;null!==(a=c.exec(e));)if(a[0].trim())if(a[1]){var o=a[1].trim(),u=[o,""];o.indexOf("=")>-1&&(u=o.split("=")),r.attrs[u[0]]=u[1],c.lastIndex--;}else a[2]&&(r.attrs[a[2]]=a[3].trim().substring(1,a[3].length-1));return r}var i$1=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,s=/^\s*$/,c=Object.create(null);function a(e,t){switch(t.type){case"text":return e+t.content;case"tag":return e+="<"+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+'="'+e[n]+'"');return t.length?" "+t.join(" "):""}(t.attrs):"")+(t.voidElement?"/>":">"),t.voidElement?e:e+t.children.reduce(a,"")+"</"+t.name+">";case"comment":return e+"\x3c!--"+t.comment+"--\x3e"}}var htmlParseStringify={parse:function(e,t){t||(t={}),t.components||(t.components=c);var n,a=[],o=[],u=-1,l=!1;if(0!==e.indexOf("<")){var m=e.indexOf("<");a.push({type:"text",content:-1===m?e:e.substring(0,m)});}return e.replace(i$1,function(i,c){if(l){if(i!=="</"+n.name+">")return;l=!1;}var m,d="/"!==i.charAt(1),f=i.startsWith("\x3c!--"),h=c+i.length,p=e.charAt(h);if(f){var v=r(i);return u<0?(a.push(v),a):((m=o[u]).children.push(v),a)}if(d&&(u++,"tag"===(n=r(i)).type&&t.components[n.name]&&(n.type="component",l=!0),n.voidElement||l||!p||"<"===p||n.children.push({type:"text",content:e.slice(h,e.indexOf("<",h))}),0===u&&a.push(n),(m=o[u-1])&&m.children.push(n),o[u]=n),(!d||n.voidElement)&&(u>-1&&(n.voidElement||n.name===i.slice(2,-1))&&(u--,n=-1===u?a:o[u]),!l&&"<"!==p&&p)){m=-1===u?a:o[u].children;var x=e.indexOf("<",h),g=e.slice(h,-1===x?void 0:x);s.test(g)&&(g=" "),(x>-1&&u+m.length>=0||" "!==g)&&m.push({type:"text",content:g});}}),a},stringify:function(e){return e.reduce(function(e,t){return e+a("",t)},"")}}; var HTML = /*@__PURE__*/getDefaultExportFromCjs(htmlParseStringify); function warn() { if (console && console.warn) { var _console; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (typeof args[0] === 'string') args[0] = "react-i18next:: ".concat(args[0]); (_console = console).warn.apply(_console, args); } } var alreadyWarned = {}; function warnOnce() { for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } if (typeof args[0] === 'string' && alreadyWarned[args[0]]) return; if (typeof args[0] === 'string') alreadyWarned[args[0]] = new Date(); warn.apply(void 0, args); } function loadNamespaces(i18n, ns, cb) { i18n.loadNamespaces(ns, function () { if (i18n.isInitialized) { cb(); } else { var initialized = function initialized() { setTimeout(function () { i18n.off('initialized', initialized); }, 0); cb(); }; i18n.on('initialized', initialized); } }); } function oldI18nextHasLoadedNamespace(ns, i18n) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var lng = i18n.languages[0]; var fallbackLng = i18n.options ? i18n.options.fallbackLng : false; var lastLng = i18n.languages[i18n.languages.length - 1]; if (lng.toLowerCase() === 'cimode') return true; var loadNotPending = function loadNotPending(l, n) { var loadState = i18n.services.backendConnector.state["".concat(l, "|").concat(n)]; return loadState === -1 || loadState === 2; }; if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18n.services.backendConnector.backend && i18n.isLanguageChangingTo && !loadNotPending(i18n.isLanguageChangingTo, ns)) return false; if (i18n.hasResourceBundle(lng, ns)) return true; if (!i18n.services.backendConnector.backend || i18n.options.resources && !i18n.options.partialBundledLanguages) return true; if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true; return false; } function hasLoadedNamespace(ns, i18n) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; if (!i18n.languages || !i18n.languages.length) { warnOnce('i18n.languages were undefined or empty', i18n.languages); return true; } var isNewerI18next = i18n.options.ignoreJSONStructure !== undefined; if (!isNewerI18next) { return oldI18nextHasLoadedNamespace(ns, i18n, options); } return i18n.hasLoadedNamespace(ns, { precheck: function precheck(i18nInstance, loadNotPending) { if (options.bindI18n && options.bindI18n.indexOf('languageChanging') > -1 && i18nInstance.services.backendConnector.backend && i18nInstance.isLanguageChangingTo && !loadNotPending(i18nInstance.isLanguageChangingTo, ns)) return false; } }); } var matchHtmlEntity = /&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34|nbsp|#160|copy|#169|reg|#174|hellip|#8230|#x2F|#47);/g; var htmlEntities = { '&': '&', '&': '&', '<': '<', '<': '<', '>': '>', '>': '>', ''': "'", ''': "'", '"': '"', '"': '"', ' ': ' ', ' ': ' ', '©': '©', '©': '©', '®': '®', '®': '®', '…': '…', '…': '…', '/': '/', '/': '/' }; var unescapeHtmlEntity = function unescapeHtmlEntity(m) { return htmlEntities[m]; }; var unescape$1 = function unescape(text) { return text.replace(matchHtmlEntity, unescapeHtmlEntity); }; function ownKeys$a(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread$a(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$a(Object(source), true).forEach(function (key) { _defineProperty$2(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$a(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var defaultOptions = { bindI18n: 'languageChanged', bindI18nStore: '', transEmptyNodeValue: '', transSupportBasicHtmlNodes: true, transWrapTextNodes: '', transKeepBasicHtmlNodesFor: ['br', 'strong', 'i', 'p'], useSuspense: true, unescape: unescape$1 }; function setDefaults() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; defaultOptions = _objectSpread$a(_objectSpread$a({}, defaultOptions), options); } function getDefaults$2() { return defaultOptions; } var i18nInstance; function setI18n(instance) { i18nInstance = instance; } function getI18n() { return i18nInstance; } var _excluded$1 = ["format"], _excluded2 = ["children", "count", "parent", "i18nKey", "context", "tOptions", "values", "defaults", "components", "ns", "i18n", "t", "shouldUnescape"]; function ownKeys$9(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread$9(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$9(Object(source), true).forEach(function (key) { _defineProperty$2(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$9(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function hasChildren(node, checkLength) { if (!node) return false; var base = node.props ? node.props.children : node.children; if (checkLength) return base.length > 0; return !!base; } function getChildren(node) { if (!node) return []; return node.props ? node.props.children : node.children; } function hasValidReactChildren(children) { if (Object.prototype.toString.call(children) !== '[object Array]') return false; return children.every(function (child) { return React$1.isValidElement(child); }); } function getAsArray(data) { return Array.isArray(data) ? data : [data]; } function mergeProps(source, target) { var newTarget = _objectSpread$9({}, target); newTarget.props = Object.assign(source.props, target.props); return newTarget; } function nodesToString(children, i18nOptions) { if (!children) return ''; var stringNode = ''; var childrenArray = getAsArray(children); var keepArray = i18nOptions.transSupportBasicHtmlNodes && i18nOptions.transKeepBasicHtmlNodesFor ? i18nOptions.transKeepBasicHtmlNodesFor : []; childrenArray.forEach(function (child, childIndex) { if (typeof child === 'string') { stringNode += "".concat(child); } else if (React$1.isValidElement(child)) { var childPropsCount = Object.keys(child.props).length; var shouldKeepChild = keepArray.indexOf(child.type) > -1; var childChildren = child.props.children; if (!childChildren && shouldKeepChild && childPropsCount === 0) { stringNode += "<".concat(child.type, "/>"); } else if (!childChildren && (!shouldKeepChild || childPropsCount !== 0)) { stringNode += "<".concat(childIndex, "></").concat(childIndex, ">"); } else if (child.props.i18nIsDynamicList) { stringNode += "<".concat(childIndex, "></").concat(childIndex, ">"); } else if (shouldKeepChild && childPropsCount === 1 && typeof childChildren === 'string') { stringNode += "<".concat(child.type, ">").concat(childChildren, "</").concat(child.type, ">"); } else { var content = nodesToString(childChildren, i18nOptions); stringNode += "<".concat(childIndex, ">").concat(content, "</").concat(childIndex, ">"); } } else if (child === null) { warn("Trans: the passed in value is invalid - seems you passed in a null child."); } else if (_typeof$3(child) === 'object') { var format = child.format, clone = _objectWithoutProperties(child, _excluded$1); var keys = Object.keys(clone); if (keys.length === 1) { var value = format ? "".concat(keys[0], ", ").concat(format) : keys[0]; stringNode += "{{".concat(value, "}}"); } else { warn("react-i18next: the passed in object contained more than one variable - the object should look like {{ value, format }} where format is optional.", child); } } else { warn("Trans: the passed in value is invalid - seems you passed in a variable like {number} - please pass in variables for interpolation as full objects like {{number}}.", child); } }); return stringNode; } function renderNodes(children, targetString, i18n, i18nOptions, combinedTOpts, shouldUnescape) { if (targetString === '') return []; var keepArray = i18nOptions.transKeepBasicHtmlNodesFor || []; var emptyChildrenButNeedsHandling = targetString && new RegExp(keepArray.join('|')).test(targetString); if (!children && !emptyChildrenButNeedsHandling) return [targetString]; var data = {}; function getData(childs) { var childrenArray = getAsArray(childs); childrenArray.forEach(function (child) { if (typeof child === 'string') return; if (hasChildren(child)) getData(getChildren(child));else if (_typeof$3(child) === 'object' && !React$1.isValidElement(child)) Object.assign(data, child); }); } getData(children); var ast = HTML.parse("<0>".concat(targetString, "</0>")); var opts = _objectSpread$9(_objectSpread$9({}, data), combinedTOpts); function renderInner(child, node, rootReactNode) { var childs = getChildren(child); var mappedChildren = mapAST(childs, node.children, rootReactNode); return hasValidReactChildren(childs) && mappedChildren.length === 0 ? childs : mappedChildren; } function pushTranslatedJSX(child, inner, mem, i, isVoid) { if (child.dummy) child.children = inner; mem.push(React$1.cloneElement(child, _objectSpread$9(_objectSpread$9({}, child.props), {}, { key: i }), isVoid ? undefined : inner)); } function mapAST(reactNode, astNode, rootReactNode) { var reactNodes = getAsArray(reactNode); var astNodes = getAsArray(astNode); return astNodes.reduce(function (mem, node, i) { var translationContent = node.children && node.children[0] && node.children[0].content && i18n.services.interpolator.interpolate(node.children[0].content, opts, i18n.language); if (node.type === 'tag') { var tmp = reactNodes[parseInt(node.name, 10)]; if (!tmp && rootReactNode.length === 1 && rootReactNode[0][node.name]) tmp = rootReactNode[0][node.name]; if (!tmp) tmp = {}; var child = Object.keys(node.attrs).length !== 0 ? mergeProps({ props: node.attrs }, tmp) : tmp; var isElement = React$1.isValidElement(child); var isValidTranslationWithChildren = isElement && hasChildren(node, true) && !node.voidElement; var isEmptyTransWithHTML = emptyChildrenButNeedsHandling && _typeof$3(child) === 'object' && child.dummy && !isElement; var isKnownComponent = _typeof$3(children) === 'object' && children !== null && Object.hasOwnProperty.call(children, node.name); if (typeof child === 'string') { var value = i18n.services.interpolator.interpolate(child, opts, i18n.language); mem.push(value); } else if (hasChildren(child) || isValidTranslationWithChildren) { var inner = renderInner(child, node, rootReactNode); pushTranslatedJSX(child, inner, mem, i); } else if (isEmptyTransWithHTML) { var _inner = mapAST(reactNodes, node.children, rootReactNode); mem.push(React$1.cloneElement(child, _objectSpread$9(_objectSpread$9({}, child.props), {}, { key: i }), _inner)); } else if (Number.isNaN(parseFloat(node.name))) { if (isKnownComponent) { var _inner2 = renderInner(child, node, rootReactNode); pushTranslatedJSX(child, _inner2, mem, i, node.voidElement); } else if (i18nOptions.transSupportBasicHtmlNodes && keepArray.indexOf(node.name) > -1) { if (node.voidElement) { mem.push(React$1.createElement(node.name, { key: "".concat(node.name, "-").concat(i) })); } else { var _inner3 = mapAST(reactNodes, node.children, rootReactNode); mem.push(React$1.createElement(node.name, { key: "".concat(node.name, "-").concat(i) }, _inner3)); } } else if (node.voidElement) { mem.push("<".concat(node.name, " />")); } else { var _inner4 = mapAST(reactNodes, node.children, rootReactNode); mem.push("<".concat(node.name, ">").concat(_inner4, "</").concat(node.name, ">")); } } else if (_typeof$3(child) === 'object' && !isElement) { var content = node.children[0] ? translationContent : null; if (content) mem.push(content); } else if (node.children.length === 1 && translationContent) { mem.push(React$1.cloneElement(child, _objectSpread$9(_objectSpread$9({}, child.props), {}, { key: i }), translationContent)); } else { mem.push(React$1.cloneElement(child, _objectSpread$9(_objectSpread$9({}, child.props), {}, { key: i }))); } } else if (node.type === 'text') { var wrapTextNodes = i18nOptions.transWrapTextNodes; var _content = shouldUnescape ? i18nOptions.unescape(i18n.services.interpolator.interpolate(node.content, opts, i18n.language)) : i18n.services.interpolator.interpolate(node.content, opts, i18n.language); if (wrapTextNodes) { mem.push(React$1.createElement(wrapTextNodes, { key: "".concat(node.name, "-").concat(i) }, _content)); } else { mem.push(_content); } } return mem; }, []); } var result = mapAST([{ dummy: true, children: children || [] }], ast, getAsArray(children || [])); return getChildren(result[0]); } function Trans$1(_ref) { var children = _ref.children, count = _ref.count, parent = _ref.parent, i18nKey = _ref.i18nKey, context = _ref.context, _ref$tOptions = _ref.tOptions, tOptions = _ref$tOptions === void 0 ? {} : _ref$tOptions, values = _ref.values, defaults = _ref.defaults, components = _ref.components, ns = _ref.ns, i18nFromProps = _ref.i18n, tFromProps = _ref.t, shouldUnescape = _ref.shouldUnescape, additionalProps = _objectWithoutProperties(_ref, _excluded2); var i18n = i18nFromProps || getI18n(); if (!i18n) { warnOnce('You will need to pass in an i18next instance by using i18nextReactModule'); return children; } var t = tFromProps || i18n.t.bind(i18n) || function (k) { return k; }; if (context) tOptions.context = context; var reactI18nextOptions = _objectSpread$9(_objectSpread$9({}, getDefaults$2()), i18n.options && i18n.options.react); var namespaces = ns || t.ns || i18n.options && i18n.options.defaultNS; namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation']; var defaultValue = defaults || nodesToString(children, reactI18nextOptions) || reactI18nextOptions.transEmptyNodeValue || i18nKey; var hashTransKey = reactI18nextOptions.hashTransKey; var key = i18nKey || (hashTransKey ? hashTransKey(defaultValue) : defaultValue); var interpolationOverride = values ? tOptions.interpolation : { interpolation: _objectSpread$9(_objectSpread$9({}, tOptions.interpolation), {}, { prefix: '#$?', suffix: '?$#' }) }; var combinedTOpts = _objectSpread$9(_objectSpread$9(_objectSpread$9(_objectSpread$9({}, tOptions), {}, { count: count }, values), interpolationOverride), {}, { defaultValue: defaultValue, ns: namespaces }); var translation = key ? t(key, combinedTOpts) : defaultValue; var content = renderNodes(components || children, translation, i18n, reactI18nextOptions, combinedTOpts, shouldUnescape); var useAsParent = parent !== undefined ? parent : reactI18nextOptions.defaultTransParent; return useAsParent ? React$1.createElement(useAsParent, additionalProps, content) : content; } function _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties$1(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey$1(descriptor.key), descriptor); } } function _createClass$1(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$1(Constructor.prototype, protoProps); if (staticProps) _defineProperties$1(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } var initReactI18next = { type: '3rdParty', init: function init(instance) { setDefaults(instance.options.react); setI18n(instance); } }; var I18nContext = React$1.createContext(); var ReportNamespaces = function () { function ReportNamespaces() { _classCallCheck$1(this, ReportNamespaces); this.usedNamespaces = {}; } _createClass$1(ReportNamespaces, [{ key: "addUsedNamespaces", value: function addUsedNamespaces(namespaces) { var _this = this; namespaces.forEach(function (ns) { if (!_this.usedNamespaces[ns]) _this.usedNamespaces[ns] = true; }); } }, { key: "getUsedNamespaces", value: function getUsedNamespaces() { return Object.keys(this.usedNamespaces); } }]); return ReportNamespaces; }(); var _excluded = ["children", "count", "parent", "i18nKey", "context", "tOptions", "values", "defaults", "components", "ns", "i18n", "t", "shouldUnescape"]; function ownKeys$8(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread$8(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$8(Object(source), true).forEach(function (key) { _defineProperty$2(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$8(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function Trans(_ref) { var children = _ref.children, count = _ref.count, parent = _ref.parent, i18nKey = _ref.i18nKey, context = _ref.context, _ref$tOptions = _ref.tOptions, tOptions = _ref$tOptions === void 0 ? {} : _ref$tOptions, values = _ref.values, defaults = _ref.defaults, components = _ref.components, ns = _ref.ns, i18nFromProps = _ref.i18n, tFromProps = _ref.t, shouldUnescape = _ref.shouldUnescape, additionalProps = _objectWithoutProperties(_ref, _excluded); var _ref2 = React$1.useContext(I18nContext) || {}, i18nFromContext = _ref2.i18n, defaultNSFromContext = _ref2.defaultNS; var i18n = i18nFromProps || i18nFromContext || getI18n(); var t = tFromProps || i18n && i18n.t.bind(i18n); return Trans$1(_objectSpread$8({ children: children, count: count, parent: parent, i18nKey: i18nKey, context: context, tOptions: tOptions, values: values, defaults: defaults, components: components, ns: ns || t && t.ns || defaultNSFromContext || i18n && i18n.options && i18n.options.defaultNS, i18n: i18n, t: tFromProps, shouldUnescape: shouldUnescape }, additionalProps)); } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function ownKeys$7(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread$7(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys$7(Object(source), true).forEach(function (key) { _defineProperty$2(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys$7(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var usePrevious$1 = function usePrevious(value, ignore) { var ref = React$1.useRef(); React$1.useEffect(function () { ref.current = ignore ? ref.current : value; }, [value, ignore]); return ref.current; }; function useTranslation$1(ns) { var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var i18nFromProps = props.i18n; var _ref = React$1.useContext(I18nContext) || {}, i18nFromContext = _ref.i18n, defaultNSFromContext = _ref.defaultNS; var i18n = i18nFromProps || i18nFromContext || getI18n(); if (i18n && !i18n.reportNamespaces) i18n.reportNamespaces = new ReportNamespaces(); if (!i18n) { warnOnce('You will need to pass in an i18next instance by using initReactI18next'); var notReadyT = function notReadyT(k, optsOrDefaultValue) { if (typeof optsOrDefaultValue === 'string') return optsOrDefaultValue; if (optsOrDefaultValue && _typeof$3(optsOrDefaultValue) === 'object' && typeof optsOrDefaultValue.defaultValue === 'string') return optsOrDefaultValue.defaultValue; return Array.isArray(k) ? k[k.length - 1] : k; }; var retNotReady = [notReadyT, {}, false]; retNotReady.t = notReadyT; retNotReady.i18n = {}; retNotReady.ready = false; return retNotReady; } if (i18n.options.react && i18n.options.react.wait !== undefined) warnOnce('It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.'); var i18nOptions = _objectSpread$7(_objectSpread$7(_objectSpread$7({}, getDefaults$2()), i18n.options.react), props); var useSuspense = i18nOptions.useSuspense, keyPrefix = i18nOptions.keyPrefix; var namespaces = ns || defaultNSFromContext || i18n.options && i18n.options.defaultNS; namespaces = typeof namespaces === 'string' ? [namespaces] : namespaces || ['translation']; if (i18n.reportNamespaces.addUsedNamespaces) i18n.reportNamespaces.addUsedNamespaces(namespaces); var ready = (i18n.isInitialized || i18n.initializedStoreOnce) && namespaces.every(function (n) { return hasLoadedNamespace(n, i18n, i18nOptions); }); function getT() { return i18n.getFixedT(null, i18nOptions.nsMode === 'fallback' ? namespaces : namespaces[0], keyPrefix); } var _useState = React$1.useState(getT), _useState2 = _slicedToArray(_useState, 2), t = _useState2[0], setT = _useState2[1]; var joinedNS = namespaces.join(); var previousJoinedNS = usePrevious$1(joinedNS); var isMounted = React$1.useRef(true); React$1.useEffect(function () { var bindI18n = i18nOptions.bindI18n, bindI18nStore = i18nOptions.bindI18nStore; isMounted.current = true; if (!ready && !useSuspense) { loadNamespaces(i18n, namespaces, function () { if (isMounted.current) setT(getT); }); } if (ready && previousJoinedNS && previousJoinedNS !== joinedNS && isMounted.current) { setT(getT); } function boundReset() { if (isMounted.current) setT(getT); } if (bindI18n && i18n) i18n.on(bindI18n, boundReset); if (bindI18nStore && i18n) i18n.store.on(bindI18nStore, boundReset); return function () { isMounted.current = false; if (bindI18n && i18n) bindI18n.split(' ').forEach(function (e) { return i18n.off(e, boundReset); }); if (bindI18nStore && i18n) bindI18nStore.split(' ').forEach(function (e) { return i18n.store.off(e, boundReset); }); }; }, [i18n, joinedNS]); var isInitial = React$1.useRef(true); React$1.useEffect(function () { if (isMounted.current && !isInitial.current) { setT(getT); } isInitial.current = false; }, [i18n, keyPrefix]); var ret = [t, i18n, ready]; ret.t = t; ret.i18n = i18n; ret.ready = ready; if (ready) return ret; if (!ready && !useSuspense) return ret; throw new Promise(function (resolve) { loadNamespaces(i18n, namespaces, function () { resolve(); }); }); } function I18nextProvider(_ref) { var i18n = _ref.i18n, defaultNS = _ref.defaultNS, children = _ref.children; var value = React$1.useMemo(function () { return { i18n: i18n, defaultNS: defaultNS }; }, [i18n, defaultNS]); return React$1.createElement(I18nContext.Provider, { value: value }, children); } let globalAny$2 = {}; try { globalAny$2 = window; } catch (error) { if (!(error instanceof ReferenceError)) { throw error; } } finally { if (!globalAny$2) { globalAny$2 = {}; } } /** * Base Params for a any function * @alias ActionParams * @memberof ViewHelpers */ /** * Params for a record action * @alias RecordActionParams * @extends ActionParams * @memberof ViewHelpers */ /** * Params for a bulk action * @alias BulkActionParams * @extends ActionParams * @memberof ViewHelpers */ /** * Params for a resource action * @alias ResourceActionParams * @extends ActionParams * @memberof ViewHelpers */ const runDate = new Date(); /** * Collection of helper methods available in the views */ class ViewHelpers { constructor({ options } = {}) { let opts = ViewHelpers.getPaths(options); opts = opts || { rootPath: '/admin' }; // when ViewHelpers are used on the frontend, paths are taken from global Redux State this.options = opts; } static getPaths(options) { return options || globalAny$2.REDUX_STATE?.paths; } /** * To each related path adds rootPath passed by the user, as well as a query string * @private * @param {Array<string>} [paths] list of parts of the url * @return {string} path * @return {query} [search=''] query string which can be fetch * from `location.search` */ urlBuilder(paths = [], search = '') { const separator = '/'; const replace = new RegExp(`${separator}{1,}`, 'g'); let { rootPath } = this.options; if (!rootPath.startsWith(separator)) { rootPath = `${separator}${rootPath}`; } const parts = [rootPath, ...paths]; return `${parts.join(separator).replace(replace, separator)}${search}`; } /** * Returns login URL * @return {string} */ loginUrl() { return this.options.loginPath; } /** * Returns logout URL * @return {string} */ logoutUrl() { return this.options.logoutPath; } /** * Returns URL for the dashboard * @return {string} */ dashboardUrl() { return this.options.rootPath; } /** * Returns URL for given page name * @param {string} pageName page name which is a unique key specified in * {@link AdminJSOptions} * @return {string} */ pageUrl(pageName) { return this.urlBuilder(['pages', pageName]); } /** * Returns url for a `edit` action in given Resource. Uses {@link recordActionUrl} * * @param {string} resourceId id to the resource * @param {string} recordId id to the record * @param {string} [search] optional query string */ editUrl(resourceId, recordId, search) { return this.recordActionUrl({ resourceId, recordId, actionName: 'edit', search }); } /** * Returns url for a `show` action in given Resource. Uses {@link recordActionUrl} * * @param {string} resourceId id to the resource * @param {string} recordId id to the record * @param {string} [search] optional query string */ showUrl(resourceId, recordId, search) { return this.recordActionUrl({ resourceId, recordId, actionName: 'show', search }); } /** * Returns url for a `delete` action in given Resource. Uses {@link recordActionUrl} * * @param {string} resourceId id to the resource * @param {string} recordId id to the record * @param {string} [search] optional query string */ deleteUrl(resourceId, recordId, search) { return this.recordActionUrl({ resourceId, recordId, actionName: 'delete', search }); } /** * Returns url for a `new` action in given Resource. Uses {@link resourceActionUrl} * * @param {string} resourceId id to the resource * @param {string} [search] optional query string */ newUrl(resourceId, search) { return this.resourceActionUrl({ resourceId, actionName: 'new', search }); } /** * Returns url for a `list` action in given Resource. Uses {@link resourceActionUrl} * * @param {string} resourceId id to the resource * @param {string} [search] optional query string */ listUrl(resourceId, search) { return this.resourceActionUrl({ resourceId, actionName: 'list', search }); } /** * Returns url for a `bulkDelete` action in given Resource. Uses {@link bulkActionUrl} * * @param {string} resourceId id to the resource * @param {Array<string>} recordIds separated by comma records * @param {string} [search] optional query string */ bulkDeleteUrl(resourceId, recordIds, search) { return this.bulkActionUrl({ resourceId, recordIds, actionName: 'bulkDelete', search }); } /** * Returns resourceAction url * * @param {ResourceActionParams} options * @param {string} options.resourceId * @param {string} options.actionName * @param {string} [options.search] optional query string * * @return {string} */ resourceActionUrl({ resourceId, actionName, search }) { return this.urlBuilder(['resources', resourceId, 'actions', actionName], search); } resourceUrl({ resourceId, search }) { return this.urlBuilder(['resources', resourceId], search); } /** * Returns recordAction url * * @param {RecordActionParams} options * @param {string} options.resourceId * @param {string} options.recordId * @param {string} options.actionName * * @return {string} */ recordActionUrl({ resourceId, recordId, actionName, search }) { return this.urlBuilder(['resources', resourceId, 'records', recordId, actionName], search); } /** * Returns bulkAction url * * @param {BulkActionParams} options * @param {string} options.resourceId * @param {Array<string>} [options.recordIds] * @param {string} options.actionName * * @return {string} */ bulkActionUrl({ resourceId, recordIds, actionName, search }) { const url = this.urlBuilder(['resources', resourceId, 'bulk', actionName]); if (recordIds && recordIds.length) { const query = new URLSearchParams(search); query.set('recordIds', recordIds.join(',')); return `${url}?${query.toString()}`; } return `${url}${search || ''}`; } /** * Returns absolute path to a given asset. * @private * * @param {string} asset * @param {Assets | undefined} assetsConfig * @return {string} */ assetPath(asset, assetsConfig) { if (this.options.assetsCDN) { const pathname = assetsConfig?.coreScripts?.[asset] ?? asset; const url = new URL(pathname, this.options.assetsCDN).href; // adding timestamp to the href invalidates the CDN cache return `${url}?date=${runDate.getTime()}`; } return this.urlBuilder(['frontend', 'assets', asset]); } } var flat$1 = flatten$2; flatten$2.flatten = flatten$2; flatten$2.unflatten = unflatten; function isBuffer$6 (obj) { return obj && obj.constructor && (typeof obj.constructor.isBuffer === 'function') && obj.constructor.isBuffer(obj) } function keyIdentity (key) { return key } function flatten$2 (target, opts) { opts = opts || {}; const delimiter = opts.delimiter || '.'; const maxDepth = opts.maxDepth; const transformKey = opts.transformKey || keyIdentity; const output = {}; function step (object, prev, currentDepth) { currentDepth = currentDepth || 1; Object.keys(object).forEach(function (key) { const value = object[key]; const isarray = opts.safe && Array.isArray(value); const type = Object.prototype.toString.call(value); const isbuffer = isBuffer$6(value); const isobject = ( type === '[object Object]' || type === '[object Array]' ); const newKey = prev ? prev + delimiter + transformKey(key) : transformKey(key); if (!isarray && !isbuffer && isobject && Object.keys(value).length && (!opts.maxDepth || currentDepth < maxDepth)) { return step(value, newKey, currentDepth + 1) } output[newKey] = value; }); } step(target); return output } function unflatten (target, opts) { opts = opts || {}; const delimiter = opts.delimiter || '.'; const overwrite = opts.overwrite || false; const transformKey = opts.transformKey || keyIdentity; const result = {}; const isbuffer = isBuffer$6(target); if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') { return target } // safely ensure that the key is // an integer. function getkey (key) { const parsedKey = Number(key); return ( isNaN(parsedKey) || key.indexOf('.') !== -1 || opts.object ) ? key : parsedKey } function addKeys (keyPrefix, recipient, target) { return Object.keys(target).reduce(function (result, key) { result[keyPrefix + delimiter + key] = target[key]; return result }, recipient) } function isEmpty (val) { const type = Object.prototype.toString.call(val); const isArray = type === '[object Array]'; const isObject = type === '[object Object]'; if (!val) { return true } else if (isArray) { return !val.length } else if (isObject) { return !Object.keys(val).length } } target = Object.keys(target).reduce(function (result, key) { const type = Object.prototype.toString.call(target[key]); const isObject = (type === '[object Object]' || type === '[object Array]'); if (!isObject || isEmpty(target[key])) { result[key] = target[key]; return result } else { return addKeys( key, result, flatten$2(target[key], opts) ) } }, {}); Object.keys(target).forEach(function (key) { const split = key.split(delimiter).map(transformKey); let key1 = getkey(split.shift()); let key2 = getkey(split[0]); let recipient = result; while (key2 !== undefined) { if (key1 === '__proto__') { return } const type = Object.prototype.toString.call(recipient[key1]); const isobject = ( type === '[object Object]' || type === '[object Array]' ); // do not write over falsey, non-undefined values if overwrite is false if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') { return } if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) { recipient[key1] = ( typeof key2 === 'number' && !opts.object ? [] : {} ); } recipient = recipient[key1]; if (split.length > 0) { key1 = getkey(split.shift()); key2 = getkey(split[0]); } } // unflatten again for 'messy objects' recipient[key1] = unflatten(target[key], opts); }); return result } var flatModule = /*@__PURE__*/getDefaultExportFromCjs(flat$1); const DELIMITER = '.'; // this is the regex used to find all existing properties starting with a key const propertyKeyRegex = (propertyPath, options) => { const delimiter = new RegExp(`\\${DELIMITER}`, 'g'); const escapedDelimiter = `\\${DELIMITER}`; // but for `nested.1.property.0` it will produce `nested(\.|\.\d+\.)1(\.|\.\d+\.)property.0` // and this is intentional because user can give an one index in property path for with deeply // nested arrays const escapedDelimiterOrIndex = `(${escapedDelimiter}|${escapedDelimiter}\\d+${escapedDelimiter})`; const path = options?.includeAllSiblings ? propertyPath.replace(delimiter, escapedDelimiterOrIndex) : propertyPath.replace(delimiter, escapedDelimiter); return new RegExp(`^${path}($|${escapedDelimiter})`, ''); }; /** * @load ./select-params.doc.md * @memberof module:flat * @param {FlattenParams} params * @param {string | Array<string>} properties * @param {GetOptions} [options] * @returns {FlattenParams} */ const selectParams = (params, properties, options) => { const propertyArray = Array.isArray(properties) ? properties : [properties]; const selected = propertyArray.filter(propertyPath => !!propertyPath).reduce((globalMemo, propertyPath) => { const regex = propertyKeyRegex(propertyPath, options); const filtered = Object.keys(params) // filter all keys which starts with property path .filter(key => key.match(regex)).reduce((memo, key) => { memo[key] = params[key]; return memo; }, {}); return { ...globalMemo, ...filtered }; }, {}); return selected; }; /** * @load ./filter-out-params.doc.md * @memberof module:flat * @param {FlattenParams} params * @param {string | Array<string>} properties * @returns {FlattenParams} */ const filterOutParams = (params, properties) => { const propertyArray = Array.isArray(properties) ? properties : [properties]; return propertyArray.filter(propertyPath => !!propertyPath).reduce((globalFiltered, propertyPath) => { const regex = propertyKeyRegex(propertyPath); return Object.keys(globalFiltered).filter(key => !key.match(regex)).reduce((memo, key) => { memo[key] = params[key]; return memo; }, {}); }, params); }; /** * @memberof module:flat * @alias PathToPartsOptions */ /** * @load ./path-to-parts.doc.md * @param {string} propertyPath * @param {PathToPartsOptions} options * @returns {PathParts} * * @memberof module:flat * @alias pathToParts */ const pathToParts = (propertyPath, options = {}) => { let allParts = propertyPath.split('.'); if (options.skipArrayIndexes) { // eslint-disable-next-line no-restricted-globals allParts = allParts.filter(part => isNaN(+part)); } return allParts.reduce((memo, part) => { if (memo.length) { return [...memo, [memo[memo.length - 1], part].join('.')]; } return [part]; }, []); }; const isObject$d = value => { // Node environment if (typeof File === 'undefined') { return typeof value === 'object' && value !== null; } // Window environment return typeof value === 'object' && !(value instanceof File) && value !== null; }; /** * @load ./set.doc.md * @memberof module:flat * @param {FlattenParams} params * @param {string} propertyPath * @param {any} [value] if not give function will only try to remove old keys * @returns {FlattenParams} */ const set = (params = {}, propertyPath, value) => { const regex = propertyKeyRegex(propertyPath); // remove all existing keys const paramsCopy = Object.keys(params).filter(key => !key.match(regex)).reduce((memo, key) => { memo[key] = params[key]; return memo; }, {}); if (typeof value !== 'undefined') { if (isObject$d(value) && !(value instanceof Date)) { const flattened = flatModule.flatten(value); if (Object.keys(flattened).length) { Object.keys(flattened).forEach(key => { paramsCopy[`${propertyPath}${DELIMITER}${key}`] = flattened[key]; }); } else if (Array.isArray(value)) { paramsCopy[propertyPath] = []; } else { paramsCopy[propertyPath] = {}; } } else { paramsCopy[propertyPath] = value; } // when user gave { "nested.value": "something" } and had "nested" set to `null`, then // nested should be removed const parts = pathToParts(propertyPath).slice(0, -1); if (parts.length) { return Object.keys(paramsCopy).filter(key => !parts.includes(key)).reduce((memo, key) => { memo[key] = paramsCopy[key]; return memo; }, {}); } } return paramsCopy; }; const TEMP_HOLDING_KEY = 'TEMP_HOLDING_KEY'; /** * @load ./get.doc.md * @memberof module:flat * @param {FlattenParams} params flatten params from which property has to be taken * @param {string} [propertyPath] name of the property * @param {GetOptions} options options * @returns {any} when property key exists directly it returns what is inside, * otherwise it tries to find any nested objects and returns * them */ const get$3 = (params = {}, propertyPath, options) => { if (!propertyPath) { return flatModule.unflatten(params); } // when object has this key - simply return it // we cannot rely on typeof params[propertyPath !== 'undefined' because params can actually be // undefined and in such case if would pass and function would return [undefined] if (Object.keys(params).find(key => key === propertyPath)) { return params[propertyPath]; } const regex = propertyKeyRegex(propertyPath, options); const selectedParams = selectParams(params, propertyPath, options); const nestedProperties = Object.keys(selectedParams).reduce((memo, key, index) => { let newKey = key.replace(regex, `${TEMP_HOLDING_KEY}${DELIMITER}`); // when user wants to take allSiblings we have to fix the indexes so nested items from // different siblings don't overlap // // Example for key `nested.1.el`: // 'nested.0.el.0.value': 'val0.0', // 'nested.0.el.1.value': 'val0.1', // 'nested.1.el.0.value': 'val1', // 'nested.1.el.1.value': 'val2', // // has to be changed to: // 'TEMP_HOLDING_KEY.0.value': 'val0.0', // 'TEMP_HOLDING_KEY.1.value': 'val0.1', // 'TEMP_HOLDING_KEY.2.value': 'val1', // 'TEMP_HOLDING_KEY.3.value': 'val2', if (options?.includeAllSiblings) { newKey = newKey.replace(new RegExp(`${TEMP_HOLDING_KEY}\\${DELIMITER}(\\d*)`), `${TEMP_HOLDING_KEY}${DELIMITER}${index}`); } memo[newKey] = selectedParams[key]; return memo; }, {}); if (Object.keys(nestedProperties).length) { return flatModule.unflatten(nestedProperties)[TEMP_HOLDING_KEY]; } return undefined; }; /** * Merges params together and returns flatten result * * @param {any} params * @param {Array<any>} ...mergeParams * @returns {FlattenParams} * @memberof module:flat */ const merge$4 = (params = {}, ...mergeParams) => { const flattenParams = flatModule.flatten(params); // reverse because we merge from right return mergeParams.reverse().reduce((globalMemo, mergeParam) => Object.keys(mergeParam).reduce((memo, key) => set(memo, key, mergeParam[key]), globalMemo), flattenParams); }; /** * @load ./remove-path.doc.md * @memberof module:flat * @param {FlattenParams} params * @param {...string} properties * @returns {FlattenParams} */ const removePath = (params, path) => { // by default simply filter out elements from the object let filtered = filterOutParams(params, path); // reverse means that we iterate from the closes parent const parentPaths = pathToParts(path).reverse(); // but if one of the parent is an array parentPaths.find((parentPath, parentIndex) => { const parent = get$3(params, parentPath); if (Array.isArray(parent)) { // previous element is stringified index like 'property.1' const previousPaths = parentPaths[parentIndex - 1].split(DELIMITER); // so this is the index: 1 const previousPathIndex = previousPaths[previousPaths.length - 1]; parent.splice(+previousPathIndex, 1); filtered = set(params, parentPath, parent); // this works just for the firstly found array item, because in case of removing the last one // it leaves `[]` as a value. return true; } return false; }); return filtered; }; /** * @module flat * @name flat * @new in version 3.3 * @load ./flat.doc.md */ const flat = { /** * Raw `flatten` function exported from original {@link https://www.npmjs.com/package/flat flat} * package. */ flatten: flatModule.flatten, /** * Raw `unflatten` function exported from original {@link https://www.npmjs.com/package/flat flat} * package. */ unflatten: flatModule.unflatten, set, get: get$3, selectParams, filterOutParams, removePath, DELIMITER, pathToParts, merge: merge$4 }; /* eslint complexity: [2, 18], max-statements: [2, 33] */ var shams = function hasSymbols() { if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } if (typeof Symbol.iterator === 'symbol') { return true; } var obj = {}; var sym = Symbol('test'); var symObj = Object(sym); if (typeof sym === 'string') { return false; } if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } // temp disabled per https://github.com/ljharb/object.assign/issues/17 // if (sym instanceof Symbol) { return false; } // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 // if (!(symObj instanceof Symbol)) { return false; } // if (typeof Symbol.prototype.toString !== 'function') { return false; } // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } var symVal = 42; obj[sym] = symVal; for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } var syms = Object.getOwnPropertySymbols(obj); if (syms.length !== 1 || syms[0] !== sym) { return false; } if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } if (typeof Object.getOwnPropertyDescriptor === 'function') { var descriptor = Object.getOwnPropertyDescriptor(obj, sym); if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } } return true; }; var origSymbol = typeof Symbol !== 'undefined' && Symbol; var hasSymbolSham = shams; var hasSymbols$1 = function hasNativeSymbols() { if (typeof origSymbol !== 'function') { return false; } if (typeof Symbol !== 'function') { return false; } if (typeof origSymbol('foo') !== 'symbol') { return false; } if (typeof Symbol('bar') !== 'symbol') { return false; } return hasSymbolSham(); }; /* eslint no-invalid-this: 1 */ var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible '; var slice$2 = Array.prototype.slice; var toStr$1 = Object.prototype.toString; var funcType = '[object Function]'; var implementation$1 = function bind(that) { var target = this; if (typeof target !== 'function' || toStr$1.call(target) !== funcType) { throw new TypeError(ERROR_MESSAGE + target); } var args = slice$2.call(arguments, 1); var bound; var binder = function () { if (this instanceof bound) { var result = target.apply( this, args.concat(slice$2.call(arguments)) ); if (Object(result) === result) { return result; } return this; } else { return target.apply( that, args.concat(slice$2.call(arguments)) ); } }; var boundLength = Math.max(0, target.length - args.length); var boundArgs = []; for (var i = 0; i < boundLength; i++) { boundArgs.push('$' + i); } bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder); if (target.prototype) { var Empty = function Empty() {}; Empty.prototype = target.prototype; bound.prototype = new Empty(); Empty.prototype = null; } return bound; }; var implementation = implementation$1; var functionBind = Function.prototype.bind || implementation; var bind$2 = functionBind; var src = bind$2.call(Function.call, Object.prototype.hasOwnProperty); var undefined$1; var $SyntaxError = SyntaxError; var $Function = Function; var $TypeError$1 = TypeError; // eslint-disable-next-line consistent-return var getEvalledConstructor = function (expressionSyntax) { try { return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')(); } catch (e) {} }; var $gOPD = Object.getOwnPropertyDescriptor; if ($gOPD) { try { $gOPD({}, ''); } catch (e) { $gOPD = null; // this is IE 8, which has a broken gOPD } } var throwTypeError = function () { throw new $TypeError$1(); }; var ThrowTypeError = $gOPD ? (function () { try { // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties arguments.callee; // IE 8 does not throw here return throwTypeError; } catch (calleeThrows) { try { // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '') return $gOPD(arguments, 'callee').get; } catch (gOPDthrows) { return throwTypeError; } } }()) : throwTypeError; var hasSymbols = hasSymbols$1(); var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto var needsEval = {}; var TypedArray = typeof Uint8Array === 'undefined' ? undefined$1 : getProto(Uint8Array); var INTRINSICS = { '%AggregateError%': typeof AggregateError === 'undefined' ? undefined$1 : AggregateError, '%Array%': Array, '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined$1 : ArrayBuffer, '%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined$1, '%AsyncFromSyncIteratorPrototype%': undefined$1, '%AsyncFunction%': needsEval, '%AsyncGenerator%': needsEval, '%AsyncGeneratorFunction%': needsEval, '%AsyncIteratorPrototype%': needsEval, '%Atomics%': typeof Atomics === 'undefined' ? undefined$1 : Atomics, '%BigInt%': typeof BigInt === 'undefined' ? undefined$1 : BigInt, '%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined$1 : BigInt64Array, '%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined$1 : BigUint64Array, '%Boolean%': Boolean, '%DataView%': typeof DataView === 'undefined' ? undefined$1 : DataView, '%Date%': Date, '%decodeURI%': decodeURI, '%decodeURIComponent%': decodeURIComponent, '%encodeURI%': encodeURI, '%encodeURIComponent%': encodeURIComponent, '%Error%': Error, '%eval%': eval, // eslint-disable-line no-eval '%EvalError%': EvalError, '%Float32Array%': typeof Float32Array === 'undefined' ? undefined$1 : Float32Array, '%Float64Array%': typeof Float64Array === 'undefined' ? undefined$1 : Float64Array, '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined$1 : FinalizationRegistry, '%Function%': $Function, '%GeneratorFunction%': needsEval, '%Int8Array%': typeof Int8Array === 'undefined' ? undefined$1 : Int8Array, '%Int16Array%': typeof Int16Array === 'undefined' ? undefined$1 : Int16Array, '%Int32Array%': typeof Int32Array === 'undefined' ? undefined$1 : Int32Array, '%isFinite%': isFinite, '%isNaN%': isNaN, '%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined$1, '%JSON%': typeof JSON === 'object' ? JSON : undefined$1, '%Map%': typeof Map === 'undefined' ? undefined$1 : Map, '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined$1 : getProto(new Map()[Symbol.iterator]()), '%Math%': Math, '%Number%': Number, '%Object%': Object, '%parseFloat%': parseFloat, '%parseInt%': parseInt, '%Promise%': typeof Promise === 'undefined' ? undefined$1 : Promise, '%Proxy%': typeof Proxy === 'undefined' ? undefined$1 : Proxy, '%RangeError%': RangeError, '%ReferenceError%': ReferenceError, '%Reflect%': typeof Reflect === 'undefined' ? undefined$1 : Reflect, '%RegExp%': RegExp, '%Set%': typeof Set === 'undefined' ? undefined$1 : Set, '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined$1 : getProto(new Set()[Symbol.iterator]()), '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined$1 : SharedArrayBuffer, '%String%': String, '%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined$1, '%Symbol%': hasSymbols ? Symbol : undefined$1, '%SyntaxError%': $SyntaxError, '%ThrowTypeError%': ThrowTypeError, '%TypedArray%': TypedArray, '%TypeError%': $TypeError$1, '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined$1 : Uint8Array, '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined$1 : Uint8ClampedArray, '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined$1 : Uint16Array, '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined$1 : Uint32Array, '%URIError%': URIError, '%WeakMap%': typeof WeakMap === 'undefined' ? undefined$1 : WeakMap, '%WeakRef%': typeof WeakRef === 'undefined' ? undefined$1 : WeakRef, '%WeakSet%': typeof WeakSet === 'undefined' ? undefined$1 : WeakSet }; try { null.error; // eslint-disable-line no-unused-expressions } catch (e) { // https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229 var errorProto = getProto(getProto(e)); INTRINSICS['%Error.prototype%'] = errorProto; } var doEval = function doEval(name) { var value; if (name === '%AsyncFunction%') { value = getEvalledConstructor('async function () {}'); } else if (name === '%GeneratorFunction%') { value = getEvalledConstructor('function* () {}'); } else if (name === '%AsyncGeneratorFunction%') { value = getEvalledConstructor('async function* () {}'); } else if (name === '%AsyncGenerator%') { var fn = doEval('%AsyncGeneratorFunction%'); if (fn) { value = fn.prototype; } } else if (name === '%AsyncIteratorPrototype%') { var gen = doEval('%AsyncGenerator%'); if (gen) { value = getProto(gen.prototype); } } INTRINSICS[name] = value; return value; }; var LEGACY_ALIASES = { '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'], '%ArrayPrototype%': ['Array', 'prototype'], '%ArrayProto_entries%': ['Array', 'prototype', 'entries'], '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'], '%ArrayProto_keys%': ['Array', 'prototype', 'keys'], '%ArrayProto_values%': ['Array', 'prototype', 'values'], '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'], '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'], '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'], '%BooleanPrototype%': ['Boolean', 'prototype'], '%DataViewPrototype%': ['DataView', 'prototype'], '%DatePrototype%': ['Date', 'prototype'], '%ErrorPrototype%': ['Error', 'prototype'], '%EvalErrorPrototype%': ['EvalError', 'prototype'], '%Float32ArrayPrototype%': ['Float32Array', 'prototype'], '%Float64ArrayPrototype%': ['Float64Array', 'prototype'], '%FunctionPrototype%': ['Function', 'prototype'], '%Generator%': ['GeneratorFunction', 'prototype'], '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'], '%Int8ArrayPrototype%': ['Int8Array', 'prototype'], '%Int16ArrayPrototype%': ['Int16Array', 'prototype'], '%Int32ArrayPrototype%': ['Int32Array', 'prototype'], '%JSONParse%': ['JSON', 'parse'], '%JSONStringify%': ['JSON', 'stringify'], '%MapPrototype%': ['Map', 'prototype'], '%NumberPrototype%': ['Number', 'prototype'], '%ObjectPrototype%': ['Object', 'prototype'], '%ObjProto_toString%': ['Object', 'prototype', 'toString'], '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'], '%PromisePrototype%': ['Promise', 'prototype'], '%PromiseProto_then%': ['Promise', 'prototype', 'then'], '%Promise_all%': ['Promise', 'all'], '%Promise_reject%': ['Promise', 'reject'], '%Promise_resolve%': ['Promise', 'resolve'], '%RangeErrorPrototype%': ['RangeError', 'prototype'], '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'], '%RegExpPrototype%': ['RegExp', 'prototype'], '%SetPrototype%': ['Set', 'prototype'], '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'], '%StringPrototype%': ['String', 'prototype'], '%SymbolPrototype%': ['Symbol', 'prototype'], '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'], '%TypedArrayPrototype%': ['TypedArray', 'prototype'], '%TypeErrorPrototype%': ['TypeError', 'prototype'], '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'], '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'], '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'], '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'], '%URIErrorPrototype%': ['URIError', 'prototype'], '%WeakMapPrototype%': ['WeakMap', 'prototype'], '%WeakSetPrototype%': ['WeakSet', 'prototype'] }; var bind$1 = functionBind; var hasOwn$1 = src; var $concat$1 = bind$1.call(Function.call, Array.prototype.concat); var $spliceApply = bind$1.call(Function.apply, Array.prototype.splice); var $replace$1 = bind$1.call(Function.call, String.prototype.replace); var $strSlice = bind$1.call(Function.call, String.prototype.slice); var $exec = bind$1.call(Function.call, RegExp.prototype.exec); /* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */ var rePropName$1 = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; var reEscapeChar$1 = /\\(\\)?/g; /** Used to match backslashes in property paths. */ var stringToPath$2 = function stringToPath(string) { var first = $strSlice(string, 0, 1); var last = $strSlice(string, -1); if (first === '%' && last !== '%') { throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`'); } else if (last === '%' && first !== '%') { throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`'); } var result = []; $replace$1(string, rePropName$1, function (match, number, quote, subString) { result[result.length] = quote ? $replace$1(subString, reEscapeChar$1, '$1') : number || match; }); return result; }; /* end adaptation */ var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { var intrinsicName = name; var alias; if (hasOwn$1(LEGACY_ALIASES, intrinsicName)) { alias = LEGACY_ALIASES[intrinsicName]; intrinsicName = '%' + alias[0] + '%'; } if (hasOwn$1(INTRINSICS, intrinsicName)) { var value = INTRINSICS[intrinsicName]; if (value === needsEval) { value = doEval(intrinsicName); } if (typeof value === 'undefined' && !allowMissing) { throw new $TypeError$1('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); } return { alias: alias, name: intrinsicName, value: value }; } throw new $SyntaxError('intrinsic ' + name + ' does not exist!'); }; var getIntrinsic = function GetIntrinsic(name, allowMissing) { if (typeof name !== 'string' || name.length === 0) { throw new $TypeError$1('intrinsic name must be a non-empty string'); } if (arguments.length > 1 && typeof allowMissing !== 'boolean') { throw new $TypeError$1('"allowMissing" argument must be a boolean'); } if ($exec(/^%?[^%]*%?$/, name) === null) { throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name'); } var parts = stringToPath$2(name); var intrinsicBaseName = parts.length > 0 ? parts[0] : ''; var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing); var intrinsicRealName = intrinsic.name; var value = intrinsic.value; var skipFurtherCaching = false; var alias = intrinsic.alias; if (alias) { intrinsicBaseName = alias[0]; $spliceApply(parts, $concat$1([0, 1], alias)); } for (var i = 1, isOwn = true; i < parts.length; i += 1) { var part = parts[i]; var first = $strSlice(part, 0, 1); var last = $strSlice(part, -1); if ( ( (first === '"' || first === "'" || first === '`') || (last === '"' || last === "'" || last === '`') ) && first !== last ) { throw new $SyntaxError('property names with quotes must have matching quotes'); } if (part === 'constructor' || !isOwn) { skipFurtherCaching = true; } intrinsicBaseName += '.' + part; intrinsicRealName = '%' + intrinsicBaseName + '%'; if (hasOwn$1(INTRINSICS, intrinsicRealName)) { value = INTRINSICS[intrinsicRealName]; } else if (value != null) { if (!(part in value)) { if (!allowMissing) { throw new $TypeError$1('base intrinsic for ' + name + ' exists, but the property is not available.'); } return void undefined$1; } if ($gOPD && (i + 1) >= parts.length) { var desc = $gOPD(value, part); isOwn = !!desc; // By convention, when a data property is converted to an accessor // property to emulate a data property that does not suffer from // the override mistake, that accessor's getter is marked with // an `originalValue` property. Here, when we detect this, we // uphold the illusion by pretending to see that original data // property, i.e., returning the value rather than the getter // itself. if (isOwn && 'get' in desc && !('originalValue' in desc.get)) { value = desc.get; } else { value = value[part]; } } else { isOwn = hasOwn$1(value, part); value = value[part]; } if (isOwn && !skipFurtherCaching) { INTRINSICS[intrinsicRealName] = value; } } } return value; }; var callBind$1 = {exports: {}}; (function (module) { var bind = functionBind; var GetIntrinsic = getIntrinsic; var $apply = GetIntrinsic('%Function.prototype.apply%'); var $call = GetIntrinsic('%Function.prototype.call%'); var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply); var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true); var $defineProperty = GetIntrinsic('%Object.defineProperty%', true); var $max = GetIntrinsic('%Math.max%'); if ($defineProperty) { try { $defineProperty({}, 'a', { value: 1 }); } catch (e) { // IE 8 has a broken defineProperty $defineProperty = null; } } module.exports = function callBind(originalFunction) { var func = $reflectApply(bind, $call, arguments); if ($gOPD && $defineProperty) { var desc = $gOPD(func, 'length'); if (desc.configurable) { // original length, plus the receiver, minus any additional arguments (after the receiver) $defineProperty( func, 'length', { value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) } ); } } return func; }; var applyBind = function applyBind() { return $reflectApply(bind, $apply, arguments); }; if ($defineProperty) { $defineProperty(module.exports, 'apply', { value: applyBind }); } else { module.exports.apply = applyBind; } } (callBind$1)); var callBindExports = callBind$1.exports; var GetIntrinsic$1 = getIntrinsic; var callBind = callBindExports; var $indexOf = callBind(GetIntrinsic$1('String.prototype.indexOf')); var callBound$1 = function callBoundIntrinsic(name, allowMissing) { var intrinsic = GetIntrinsic$1(name, !!allowMissing); if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { return callBind(intrinsic); } return intrinsic; }; var _nodeResolve_empty = {}; var _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({ __proto__: null, default: _nodeResolve_empty }); var require$$0 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1); var hasMap = typeof Map === 'function' && Map.prototype; var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null; var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null; var mapForEach = hasMap && Map.prototype.forEach; var hasSet = typeof Set === 'function' && Set.prototype; var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null; var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null; var setForEach = hasSet && Set.prototype.forEach; var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype; var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null; var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype; var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null; var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype; var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null; var booleanValueOf = Boolean.prototype.valueOf; var objectToString$2 = Object.prototype.toString; var functionToString = Function.prototype.toString; var $match = String.prototype.match; var $slice = String.prototype.slice; var $replace = String.prototype.replace; var $toUpperCase = String.prototype.toUpperCase; var $toLowerCase = String.prototype.toLowerCase; var $test = RegExp.prototype.test; var $concat = Array.prototype.concat; var $join = Array.prototype.join; var $arrSlice = Array.prototype.slice; var $floor = Math.floor; var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null; var gOPS = Object.getOwnPropertySymbols; var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null; var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object'; // ie, `has-tostringtag/shams var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol') ? Symbol.toStringTag : null; var isEnumerable = Object.prototype.propertyIsEnumerable; var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ( [].__proto__ === Array.prototype // eslint-disable-line no-proto ? function (O) { return O.__proto__; // eslint-disable-line no-proto } : null ); function addNumericSeparator(num, str) { if ( num === Infinity || num === -Infinity || num !== num || (num && num > -1000 && num < 1000) || $test.call(/e/, str) ) { return str; } var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g; if (typeof num === 'number') { var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num) if (int !== num) { var intStr = String(int); var dec = $slice.call(str, intStr.length + 1); return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, ''); } } return $replace.call(str, sepRegex, '$&_'); } var utilInspect = require$$0; var inspectCustom = utilInspect.custom; var inspectSymbol = isSymbol$5(inspectCustom) ? inspectCustom : null; var objectInspect = function inspect_(obj, options, depth, seen) { var opts = options || {}; if (has$3(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) { throw new TypeError('option "quoteStyle" must be "single" or "double"'); } if ( has$3(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number' ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity : opts.maxStringLength !== null ) ) { throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`'); } var customInspect = has$3(opts, 'customInspect') ? opts.customInspect : true; if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') { throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`'); } if ( has$3(opts, 'indent') && opts.indent !== null && opts.indent !== '\t' && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0) ) { throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`'); } if (has$3(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') { throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`'); } var numericSeparator = opts.numericSeparator; if (typeof obj === 'undefined') { return 'undefined'; } if (obj === null) { return 'null'; } if (typeof obj === 'boolean') { return obj ? 'true' : 'false'; } if (typeof obj === 'string') { return inspectString(obj, opts); } if (typeof obj === 'number') { if (obj === 0) { return Infinity / obj > 0 ? '0' : '-0'; } var str = String(obj); return numericSeparator ? addNumericSeparator(obj, str) : str; } if (typeof obj === 'bigint') { var bigIntStr = String(obj) + 'n'; return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr; } var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth; if (typeof depth === 'undefined') { depth = 0; } if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') { return isArray$f(obj) ? '[Array]' : '[Object]'; } var indent = getIndent(opts, depth); if (typeof seen === 'undefined') { seen = []; } else if (indexOf(seen, obj) >= 0) { return '[Circular]'; } function inspect(value, from, noIndent) { if (from) { seen = $arrSlice.call(seen); seen.push(from); } if (noIndent) { var newOpts = { depth: opts.depth }; if (has$3(opts, 'quoteStyle')) { newOpts.quoteStyle = opts.quoteStyle; } return inspect_(value, newOpts, depth + 1, seen); } return inspect_(value, opts, depth + 1, seen); } if (typeof obj === 'function' && !isRegExp$4(obj)) { // in older engines, regexes are callable var name = nameOf(obj); var keys = arrObjKeys(obj, inspect); return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : ''); } if (isSymbol$5(obj)) { var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj); return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString; } if (isElement$1(obj)) { var s = '<' + $toLowerCase.call(String(obj.nodeName)); var attrs = obj.attributes || []; for (var i = 0; i < attrs.length; i++) { s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts); } s += '>'; if (obj.childNodes && obj.childNodes.length) { s += '...'; } s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>'; return s; } if (isArray$f(obj)) { if (obj.length === 0) { return '[]'; } var xs = arrObjKeys(obj, inspect); if (indent && !singleLineValues(xs)) { return '[' + indentedJoin(xs, indent) + ']'; } return '[ ' + $join.call(xs, ', ') + ' ]'; } if (isError(obj)) { var parts = arrObjKeys(obj, inspect); if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) { return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }'; } if (parts.length === 0) { return '[' + String(obj) + ']'; } return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }'; } if (typeof obj === 'object' && customInspect) { if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) { return utilInspect(obj, { depth: maxDepth - depth }); } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') { return obj.inspect(); } } if (isMap(obj)) { var mapParts = []; if (mapForEach) { mapForEach.call(obj, function (value, key) { mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj)); }); } return collectionOf('Map', mapSize.call(obj), mapParts, indent); } if (isSet(obj)) { var setParts = []; if (setForEach) { setForEach.call(obj, function (value) { setParts.push(inspect(value, obj)); }); } return collectionOf('Set', setSize.call(obj), setParts, indent); } if (isWeakMap(obj)) { return weakCollectionOf('WeakMap'); } if (isWeakSet(obj)) { return weakCollectionOf('WeakSet'); } if (isWeakRef(obj)) { return weakCollectionOf('WeakRef'); } if (isNumber$1(obj)) { return markBoxed(inspect(Number(obj))); } if (isBigInt(obj)) { return markBoxed(inspect(bigIntValueOf.call(obj))); } if (isBoolean$2(obj)) { return markBoxed(booleanValueOf.call(obj)); } if (isString$1(obj)) { return markBoxed(inspect(String(obj))); } if (!isDate$1(obj) && !isRegExp$4(obj)) { var ys = arrObjKeys(obj, inspect); var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object; var protoTag = obj instanceof Object ? '' : 'null prototype'; var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : ''; var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : ''; var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : ''); if (ys.length === 0) { return tag + '{}'; } if (indent) { return tag + '{' + indentedJoin(ys, indent) + '}'; } return tag + '{ ' + $join.call(ys, ', ') + ' }'; } return String(obj); }; function wrapQuotes(s, defaultStyle, opts) { var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'"; return quoteChar + s + quoteChar; } function quote(s) { return $replace.call(String(s), /"/g, '"'); } function isArray$f(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } function isDate$1(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } function isRegExp$4(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } function isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } function isString$1(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } function isNumber$1(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } function isBoolean$2(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } // Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives function isSymbol$5(obj) { if (hasShammedSymbols) { return obj && typeof obj === 'object' && obj instanceof Symbol; } if (typeof obj === 'symbol') { return true; } if (!obj || typeof obj !== 'object' || !symToString) { return false; } try { symToString.call(obj); return true; } catch (e) {} return false; } function isBigInt(obj) { if (!obj || typeof obj !== 'object' || !bigIntValueOf) { return false; } try { bigIntValueOf.call(obj); return true; } catch (e) {} return false; } var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; }; function has$3(obj, key) { return hasOwn.call(obj, key); } function toStr(obj) { return objectToString$2.call(obj); } function nameOf(f) { if (f.name) { return f.name; } var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/); if (m) { return m[1]; } return null; } function indexOf(xs, x) { if (xs.indexOf) { return xs.indexOf(x); } for (var i = 0, l = xs.length; i < l; i++) { if (xs[i] === x) { return i; } } return -1; } function isMap(x) { if (!mapSize || !x || typeof x !== 'object') { return false; } try { mapSize.call(x); try { setSize.call(x); } catch (s) { return true; } return x instanceof Map; // core-js workaround, pre-v2.5.0 } catch (e) {} return false; } function isWeakMap(x) { if (!weakMapHas || !x || typeof x !== 'object') { return false; } try { weakMapHas.call(x, weakMapHas); try { weakSetHas.call(x, weakSetHas); } catch (s) { return true; } return x instanceof WeakMap; // core-js workaround, pre-v2.5.0 } catch (e) {} return false; } function isWeakRef(x) { if (!weakRefDeref || !x || typeof x !== 'object') { return false; } try { weakRefDeref.call(x); return true; } catch (e) {} return false; } function isSet(x) { if (!setSize || !x || typeof x !== 'object') { return false; } try { setSize.call(x); try { mapSize.call(x); } catch (m) { return true; } return x instanceof Set; // core-js workaround, pre-v2.5.0 } catch (e) {} return false; } function isWeakSet(x) { if (!weakSetHas || !x || typeof x !== 'object') { return false; } try { weakSetHas.call(x, weakSetHas); try { weakMapHas.call(x, weakMapHas); } catch (s) { return true; } return x instanceof WeakSet; // core-js workaround, pre-v2.5.0 } catch (e) {} return false; } function isElement$1(x) { if (!x || typeof x !== 'object') { return false; } if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) { return true; } return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function'; } function inspectString(str, opts) { if (str.length > opts.maxStringLength) { var remaining = str.length - opts.maxStringLength; var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : ''); return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer; } // eslint-disable-next-line no-control-regex var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte); return wrapQuotes(s, 'single', opts); } function lowbyte(c) { var n = c.charCodeAt(0); var x = { 8: 'b', 9: 't', 10: 'n', 12: 'f', 13: 'r' }[n]; if (x) { return '\\' + x; } return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16)); } function markBoxed(str) { return 'Object(' + str + ')'; } function weakCollectionOf(type) { return type + ' { ? }'; } function collectionOf(type, size, entries, indent) { var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', '); return type + ' (' + size + ') {' + joinedEntries + '}'; } function singleLineValues(xs) { for (var i = 0; i < xs.length; i++) { if (indexOf(xs[i], '\n') >= 0) { return false; } } return true; } function getIndent(opts, depth) { var baseIndent; if (opts.indent === '\t') { baseIndent = '\t'; } else if (typeof opts.indent === 'number' && opts.indent > 0) { baseIndent = $join.call(Array(opts.indent + 1), ' '); } else { return null; } return { base: baseIndent, prev: $join.call(Array(depth + 1), baseIndent) }; } function indentedJoin(xs, indent) { if (xs.length === 0) { return ''; } var lineJoiner = '\n' + indent.prev + indent.base; return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev; } function arrObjKeys(obj, inspect) { var isArr = isArray$f(obj); var xs = []; if (isArr) { xs.length = obj.length; for (var i = 0; i < obj.length; i++) { xs[i] = has$3(obj, i) ? inspect(obj[i], obj) : ''; } } var syms = typeof gOPS === 'function' ? gOPS(obj) : []; var symMap; if (hasShammedSymbols) { symMap = {}; for (var k = 0; k < syms.length; k++) { symMap['$' + syms[k]] = syms[k]; } } for (var key in obj) { // eslint-disable-line no-restricted-syntax if (!has$3(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) { // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section continue; // eslint-disable-line no-restricted-syntax, no-continue } else if ($test.call(/[^\w$]/, key)) { xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj)); } else { xs.push(key + ': ' + inspect(obj[key], obj)); } } if (typeof gOPS === 'function') { for (var j = 0; j < syms.length; j++) { if (isEnumerable.call(obj, syms[j])) { xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj)); } } } return xs; } var GetIntrinsic = getIntrinsic; var callBound = callBound$1; var inspect = objectInspect; var $TypeError = GetIntrinsic('%TypeError%'); var $WeakMap = GetIntrinsic('%WeakMap%', true); var $Map = GetIntrinsic('%Map%', true); var $weakMapGet = callBound('WeakMap.prototype.get', true); var $weakMapSet = callBound('WeakMap.prototype.set', true); var $weakMapHas = callBound('WeakMap.prototype.has', true); var $mapGet = callBound('Map.prototype.get', true); var $mapSet = callBound('Map.prototype.set', true); var $mapHas = callBound('Map.prototype.has', true); /* * This function traverses the list returning the node corresponding to the * given key. * * That node is also moved to the head of the list, so that if it's accessed * again we don't need to traverse the whole list. By doing so, all the recently * used nodes can be accessed relatively quickly. */ var listGetNode = function (list, key) { // eslint-disable-line consistent-return for (var prev = list, curr; (curr = prev.next) !== null; prev = curr) { if (curr.key === key) { prev.next = curr.next; curr.next = list.next; list.next = curr; // eslint-disable-line no-param-reassign return curr; } } }; var listGet = function (objects, key) { var node = listGetNode(objects, key); return node && node.value; }; var listSet = function (objects, key, value) { var node = listGetNode(objects, key); if (node) { node.value = value; } else { // Prepend the new node to the beginning of the list objects.next = { // eslint-disable-line no-param-reassign key: key, next: objects.next, value: value }; } }; var listHas = function (objects, key) { return !!listGetNode(objects, key); }; var sideChannel = function getSideChannel() { var $wm; var $m; var $o; var channel = { assert: function (key) { if (!channel.has(key)) { throw new $TypeError('Side channel does not contain ' + inspect(key)); } }, get: function (key) { // eslint-disable-line consistent-return if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { if ($wm) { return $weakMapGet($wm, key); } } else if ($Map) { if ($m) { return $mapGet($m, key); } } else { if ($o) { // eslint-disable-line no-lonely-if return listGet($o, key); } } }, has: function (key) { if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { if ($wm) { return $weakMapHas($wm, key); } } else if ($Map) { if ($m) { return $mapHas($m, key); } } else { if ($o) { // eslint-disable-line no-lonely-if return listHas($o, key); } } return false; }, set: function (key, value) { if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { if (!$wm) { $wm = new $WeakMap(); } $weakMapSet($wm, key, value); } else if ($Map) { if (!$m) { $m = new $Map(); } $mapSet($m, key, value); } else { if (!$o) { /* * Initialize the linked list as an empty node, so that we don't have * to special-case handling of the first node: we can always refer to * it as (previous node).next, instead of something like (list).head */ $o = { key: {}, next: null }; } listSet($o, key, value); } } }; return channel; }; var replace = String.prototype.replace; var percentTwenties = /%20/g; var Format = { RFC1738: 'RFC1738', RFC3986: 'RFC3986' }; var formats$3 = { 'default': Format.RFC3986, formatters: { RFC1738: function (value) { return replace.call(value, percentTwenties, '+'); }, RFC3986: function (value) { return String(value); } }, RFC1738: Format.RFC1738, RFC3986: Format.RFC3986 }; var formats$2 = formats$3; var has$2 = Object.prototype.hasOwnProperty; var isArray$e = Array.isArray; var hexTable = (function () { var array = []; for (var i = 0; i < 256; ++i) { array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); } return array; }()); var compactQueue = function compactQueue(queue) { while (queue.length > 1) { var item = queue.pop(); var obj = item.obj[item.prop]; if (isArray$e(obj)) { var compacted = []; for (var j = 0; j < obj.length; ++j) { if (typeof obj[j] !== 'undefined') { compacted.push(obj[j]); } } item.obj[item.prop] = compacted; } } }; var arrayToObject$1 = function arrayToObject(source, options) { var obj = options && options.plainObjects ? Object.create(null) : {}; for (var i = 0; i < source.length; ++i) { if (typeof source[i] !== 'undefined') { obj[i] = source[i]; } } return obj; }; var merge$3 = function merge(target, source, options) { /* eslint no-param-reassign: 0 */ if (!source) { return target; } if (typeof source !== 'object') { if (isArray$e(target)) { target.push(source); } else if (target && typeof target === 'object') { if ((options && (options.plainObjects || options.allowPrototypes)) || !has$2.call(Object.prototype, source)) { target[source] = true; } } else { return [target, source]; } return target; } if (!target || typeof target !== 'object') { return [target].concat(source); } var mergeTarget = target; if (isArray$e(target) && !isArray$e(source)) { mergeTarget = arrayToObject$1(target, options); } if (isArray$e(target) && isArray$e(source)) { source.forEach(function (item, i) { if (has$2.call(target, i)) { var targetItem = target[i]; if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') { target[i] = merge(targetItem, item, options); } else { target.push(item); } } else { target[i] = item; } }); return target; } return Object.keys(source).reduce(function (acc, key) { var value = source[key]; if (has$2.call(acc, key)) { acc[key] = merge(acc[key], value, options); } else { acc[key] = value; } return acc; }, mergeTarget); }; var assign$1 = function assignSingleSource(target, source) { return Object.keys(source).reduce(function (acc, key) { acc[key] = source[key]; return acc; }, target); }; var decode = function (str, decoder, charset) { var strWithoutPlus = str.replace(/\+/g, ' '); if (charset === 'iso-8859-1') { // unescape never throws, no try...catch needed: return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); } // utf-8 try { return decodeURIComponent(strWithoutPlus); } catch (e) { return strWithoutPlus; } }; var encode$2 = function encode(str, defaultEncoder, charset, kind, format) { // This code was originally written by Brian White (mscdex) for the io.js core querystring library. // It has been adapted here for stricter adherence to RFC 3986 if (str.length === 0) { return str; } var string = str; if (typeof str === 'symbol') { string = Symbol.prototype.toString.call(str); } else if (typeof str !== 'string') { string = String(str); } if (charset === 'iso-8859-1') { return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) { return '%26%23' + parseInt($0.slice(2), 16) + '%3B'; }); } var out = ''; for (var i = 0; i < string.length; ++i) { var c = string.charCodeAt(i); if ( c === 0x2D // - || c === 0x2E // . || c === 0x5F // _ || c === 0x7E // ~ || (c >= 0x30 && c <= 0x39) // 0-9 || (c >= 0x41 && c <= 0x5A) // a-z || (c >= 0x61 && c <= 0x7A) // A-Z || (format === formats$2.RFC1738 && (c === 0x28 || c === 0x29)) // ( ) ) { out += string.charAt(i); continue; } if (c < 0x80) { out = out + hexTable[c]; continue; } if (c < 0x800) { out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); continue; } if (c < 0xD800 || c >= 0xE000) { out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); continue; } i += 1; c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); /* eslint operator-linebreak: [2, "before"] */ out += hexTable[0xF0 | (c >> 18)] + hexTable[0x80 | ((c >> 12) & 0x3F)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]; } return out; }; var compact = function compact(value) { var queue = [{ obj: { o: value }, prop: 'o' }]; var refs = []; for (var i = 0; i < queue.length; ++i) { var item = queue[i]; var obj = item.obj[item.prop]; var keys = Object.keys(obj); for (var j = 0; j < keys.length; ++j) { var key = keys[j]; var val = obj[key]; if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { queue.push({ obj: obj, prop: key }); refs.push(val); } } } compactQueue(queue); return value; }; var isRegExp$3 = function isRegExp(obj) { return Object.prototype.toString.call(obj) === '[object RegExp]'; }; var isBuffer$5 = function isBuffer(obj) { if (!obj || typeof obj !== 'object') { return false; } return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); }; var combine$1 = function combine(a, b) { return [].concat(a, b); }; var maybeMap = function maybeMap(val, fn) { if (isArray$e(val)) { var mapped = []; for (var i = 0; i < val.length; i += 1) { mapped.push(fn(val[i])); } return mapped; } return fn(val); }; var utils$3 = { arrayToObject: arrayToObject$1, assign: assign$1, combine: combine$1, compact: compact, decode: decode, encode: encode$2, isBuffer: isBuffer$5, isRegExp: isRegExp$3, maybeMap: maybeMap, merge: merge$3 }; var getSideChannel = sideChannel; var utils$2 = utils$3; var formats$1 = formats$3; var has$1 = Object.prototype.hasOwnProperty; var arrayPrefixGenerators = { brackets: function brackets(prefix) { return prefix + '[]'; }, comma: 'comma', indices: function indices(prefix, key) { return prefix + '[' + key + ']'; }, repeat: function repeat(prefix) { return prefix; } }; var isArray$d = Array.isArray; var push = Array.prototype.push; var pushToArray = function (arr, valueOrArray) { push.apply(arr, isArray$d(valueOrArray) ? valueOrArray : [valueOrArray]); }; var toISO = Date.prototype.toISOString; var defaultFormat = formats$1['default']; var defaults$6 = { addQueryPrefix: false, allowDots: false, charset: 'utf-8', charsetSentinel: false, delimiter: '&', encode: true, encoder: utils$2.encode, encodeValuesOnly: false, format: defaultFormat, formatter: formats$1.formatters[defaultFormat], // deprecated indices: false, serializeDate: function serializeDate(date) { return toISO.call(date); }, skipNulls: false, strictNullHandling: false }; var isNonNullishPrimitive = function isNonNullishPrimitive(v) { return typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || typeof v === 'symbol' || typeof v === 'bigint'; }; var sentinel = {}; var stringify$1 = function stringify( object, prefix, generateArrayPrefix, commaRoundTrip, strictNullHandling, skipNulls, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel ) { var obj = object; var tmpSc = sideChannel; var step = 0; var findFlag = false; while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) { // Where object last appeared in the ref tree var pos = tmpSc.get(object); step += 1; if (typeof pos !== 'undefined') { if (pos === step) { throw new RangeError('Cyclic object value'); } else { findFlag = true; // Break while } } if (typeof tmpSc.get(sentinel) === 'undefined') { step = 0; } } if (typeof filter === 'function') { obj = filter(prefix, obj); } else if (obj instanceof Date) { obj = serializeDate(obj); } else if (generateArrayPrefix === 'comma' && isArray$d(obj)) { obj = utils$2.maybeMap(obj, function (value) { if (value instanceof Date) { return serializeDate(value); } return value; }); } if (obj === null) { if (strictNullHandling) { return encoder && !encodeValuesOnly ? encoder(prefix, defaults$6.encoder, charset, 'key', format) : prefix; } obj = ''; } if (isNonNullishPrimitive(obj) || utils$2.isBuffer(obj)) { if (encoder) { var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults$6.encoder, charset, 'key', format); return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults$6.encoder, charset, 'value', format))]; } return [formatter(prefix) + '=' + formatter(String(obj))]; } var values = []; if (typeof obj === 'undefined') { return values; } var objKeys; if (generateArrayPrefix === 'comma' && isArray$d(obj)) { // we need to join elements in if (encodeValuesOnly && encoder) { obj = utils$2.maybeMap(obj, encoder); } objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }]; } else if (isArray$d(filter)) { objKeys = filter; } else { var keys = Object.keys(obj); objKeys = sort ? keys.sort(sort) : keys; } var adjustedPrefix = commaRoundTrip && isArray$d(obj) && obj.length === 1 ? prefix + '[]' : prefix; for (var j = 0; j < objKeys.length; ++j) { var key = objKeys[j]; var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key]; if (skipNulls && value === null) { continue; } var keyPrefix = isArray$d(obj) ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, key) : adjustedPrefix : adjustedPrefix + (allowDots ? '.' + key : '[' + key + ']'); sideChannel.set(object, step); var valueSideChannel = getSideChannel(); valueSideChannel.set(sentinel, sideChannel); pushToArray(values, stringify( value, keyPrefix, generateArrayPrefix, commaRoundTrip, strictNullHandling, skipNulls, generateArrayPrefix === 'comma' && encodeValuesOnly && isArray$d(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel )); } return values; }; var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { if (!opts) { return defaults$6; } if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') { throw new TypeError('Encoder has to be a function.'); } var charset = opts.charset || defaults$6.charset; if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); } var format = formats$1['default']; if (typeof opts.format !== 'undefined') { if (!has$1.call(formats$1.formatters, opts.format)) { throw new TypeError('Unknown format option provided.'); } format = opts.format; } var formatter = formats$1.formatters[format]; var filter = defaults$6.filter; if (typeof opts.filter === 'function' || isArray$d(opts.filter)) { filter = opts.filter; } return { addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults$6.addQueryPrefix, allowDots: typeof opts.allowDots === 'undefined' ? defaults$6.allowDots : !!opts.allowDots, charset: charset, charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults$6.charsetSentinel, delimiter: typeof opts.delimiter === 'undefined' ? defaults$6.delimiter : opts.delimiter, encode: typeof opts.encode === 'boolean' ? opts.encode : defaults$6.encode, encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults$6.encoder, encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults$6.encodeValuesOnly, filter: filter, format: format, formatter: formatter, serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults$6.serializeDate, skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults$6.skipNulls, sort: typeof opts.sort === 'function' ? opts.sort : null, strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults$6.strictNullHandling }; }; var stringify_1 = function (object, opts) { var obj = object; var options = normalizeStringifyOptions(opts); var objKeys; var filter; if (typeof options.filter === 'function') { filter = options.filter; obj = filter('', obj); } else if (isArray$d(options.filter)) { filter = options.filter; objKeys = filter; } var keys = []; if (typeof obj !== 'object' || obj === null) { return ''; } var arrayFormat; if (opts && opts.arrayFormat in arrayPrefixGenerators) { arrayFormat = opts.arrayFormat; } else if (opts && 'indices' in opts) { arrayFormat = opts.indices ? 'indices' : 'repeat'; } else { arrayFormat = 'indices'; } var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; if (opts && 'commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') { throw new TypeError('`commaRoundTrip` must be a boolean, or absent'); } var commaRoundTrip = generateArrayPrefix === 'comma' && opts && opts.commaRoundTrip; if (!objKeys) { objKeys = Object.keys(obj); } if (options.sort) { objKeys.sort(options.sort); } var sideChannel = getSideChannel(); for (var i = 0; i < objKeys.length; ++i) { var key = objKeys[i]; if (options.skipNulls && obj[key] === null) { continue; } pushToArray(keys, stringify$1( obj[key], key, generateArrayPrefix, commaRoundTrip, options.strictNullHandling, options.skipNulls, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel )); } var joined = keys.join(options.delimiter); var prefix = options.addQueryPrefix === true ? '?' : ''; if (options.charsetSentinel) { if (options.charset === 'iso-8859-1') { // encodeURIComponent('✓'), the "numeric entity" representation of a checkmark prefix += 'utf8=%26%2310003%3B&'; } else { // encodeURIComponent('✓') prefix += 'utf8=%E2%9C%93&'; } } return joined.length > 0 ? prefix + joined : ''; }; var utils$1 = utils$3; var has = Object.prototype.hasOwnProperty; var isArray$c = Array.isArray; var defaults$5 = { allowDots: false, allowPrototypes: false, allowSparse: false, arrayLimit: 20, charset: 'utf-8', charsetSentinel: false, comma: false, decoder: utils$1.decode, delimiter: '&', depth: 5, ignoreQueryPrefix: false, interpretNumericEntities: false, parameterLimit: 1000, parseArrays: true, plainObjects: false, strictNullHandling: false }; var interpretNumericEntities = function (str) { return str.replace(/&#(\d+);/g, function ($0, numberStr) { return String.fromCharCode(parseInt(numberStr, 10)); }); }; var parseArrayValue = function (val, options) { if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) { return val.split(','); } return val; }; // This is what browsers will submit when the ✓ character occurs in an // application/x-www-form-urlencoded body and the encoding of the page containing // the form is iso-8859-1, or when the submitted form has an accept-charset // attribute of iso-8859-1. Presumably also with other charsets that do not contain // the ✓ character, such as us-ascii. var isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓') // These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded. var charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓') var parseValues = function parseQueryStringValues(str, options) { var obj = {}; var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; var parts = cleanStr.split(options.delimiter, limit); var skipIndex = -1; // Keep track of where the utf8 sentinel was found var i; var charset = options.charset; if (options.charsetSentinel) { for (i = 0; i < parts.length; ++i) { if (parts[i].indexOf('utf8=') === 0) { if (parts[i] === charsetSentinel) { charset = 'utf-8'; } else if (parts[i] === isoSentinel) { charset = 'iso-8859-1'; } skipIndex = i; i = parts.length; // The eslint settings do not allow break; } } } for (i = 0; i < parts.length; ++i) { if (i === skipIndex) { continue; } var part = parts[i]; var bracketEqualsPos = part.indexOf(']='); var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; var key, val; if (pos === -1) { key = options.decoder(part, defaults$5.decoder, charset, 'key'); val = options.strictNullHandling ? null : ''; } else { key = options.decoder(part.slice(0, pos), defaults$5.decoder, charset, 'key'); val = utils$1.maybeMap( parseArrayValue(part.slice(pos + 1), options), function (encodedVal) { return options.decoder(encodedVal, defaults$5.decoder, charset, 'value'); } ); } if (val && options.interpretNumericEntities && charset === 'iso-8859-1') { val = interpretNumericEntities(val); } if (part.indexOf('[]=') > -1) { val = isArray$c(val) ? [val] : val; } if (has.call(obj, key)) { obj[key] = utils$1.combine(obj[key], val); } else { obj[key] = val; } } return obj; }; var parseObject = function (chain, val, options, valuesParsed) { var leaf = valuesParsed ? val : parseArrayValue(val, options); for (var i = chain.length - 1; i >= 0; --i) { var obj; var root = chain[i]; if (root === '[]' && options.parseArrays) { obj = [].concat(leaf); } else { obj = options.plainObjects ? Object.create(null) : {}; var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; var index = parseInt(cleanRoot, 10); if (!options.parseArrays && cleanRoot === '') { obj = { 0: leaf }; } else if ( !isNaN(index) && root !== cleanRoot && String(index) === cleanRoot && index >= 0 && (options.parseArrays && index <= options.arrayLimit) ) { obj = []; obj[index] = leaf; } else if (cleanRoot !== '__proto__') { obj[cleanRoot] = leaf; } } leaf = obj; } return leaf; }; var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) { if (!givenKey) { return; } // Transform dot notation to bracket notation var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; // The regex chunks var brackets = /(\[[^[\]]*])/; var child = /(\[[^[\]]*])/g; // Get the parent var segment = options.depth > 0 && brackets.exec(key); var parent = segment ? key.slice(0, segment.index) : key; // Stash the parent if it exists var keys = []; if (parent) { // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties if (!options.plainObjects && has.call(Object.prototype, parent)) { if (!options.allowPrototypes) { return; } } keys.push(parent); } // Loop through children appending to the array until we hit depth var i = 0; while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) { i += 1; if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { if (!options.allowPrototypes) { return; } } keys.push(segment[1]); } // If there's a remainder, just add whatever is left if (segment) { keys.push('[' + key.slice(segment.index) + ']'); } return parseObject(keys, val, options, valuesParsed); }; var normalizeParseOptions = function normalizeParseOptions(opts) { if (!opts) { return defaults$5; } if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') { throw new TypeError('Decoder has to be a function.'); } if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); } var charset = typeof opts.charset === 'undefined' ? defaults$5.charset : opts.charset; return { allowDots: typeof opts.allowDots === 'undefined' ? defaults$5.allowDots : !!opts.allowDots, allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults$5.allowPrototypes, allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults$5.allowSparse, arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults$5.arrayLimit, charset: charset, charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults$5.charsetSentinel, comma: typeof opts.comma === 'boolean' ? opts.comma : defaults$5.comma, decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults$5.decoder, delimiter: typeof opts.delimiter === 'string' || utils$1.isRegExp(opts.delimiter) ? opts.delimiter : defaults$5.delimiter, // eslint-disable-next-line no-implicit-coercion, no-extra-parens depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults$5.depth, ignoreQueryPrefix: opts.ignoreQueryPrefix === true, interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults$5.interpretNumericEntities, parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults$5.parameterLimit, parseArrays: opts.parseArrays !== false, plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults$5.plainObjects, strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults$5.strictNullHandling }; }; var parse$2 = function (str, opts) { var options = normalizeParseOptions(opts); if (str === '' || str === null || typeof str === 'undefined') { return options.plainObjects ? Object.create(null) : {}; } var tempObj = typeof str === 'string' ? parseValues(str, options) : str; var obj = options.plainObjects ? Object.create(null) : {}; // Iterate over the keys and setup the new object var keys = Object.keys(tempObj); for (var i = 0; i < keys.length; ++i) { var key = keys[i]; var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string'); obj = utils$1.merge(obj, newObj, options); } if (options.allowSparse === true) { return obj; } return utils$1.compact(obj); }; var stringify = stringify_1; var parse$1 = parse$2; var formats = formats$3; var lib$2 = { formats: formats, parse: parse$1, stringify: stringify }; function _extends$t() { _extends$t = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$t.apply(this, arguments); } /** * @private * * @classdesc * Overrides one of the AdminJS core components when user passes it's name to ComponentLoader * * If case of being overridden, component receives additional prop: `OriginalComponent` * * @example * new ComponentLoader().override('SidebarFooter', MySidebarFooter) */ function allowOverride(OriginalComponent, name) { const WrapperComponent = props => { let Component = OriginalComponent; /** * @new in version 6.3 * * This adds support for future theme-specific components via their "theme.bundle.js" * */ if (typeof window !== 'undefined') { Component = window.AdminJS?.UserComponents?.[name] ?? window.THEME_COMPONENTS?.[name] ?? OriginalComponent; } return /*#__PURE__*/React__default$1.default.createElement(Component, _extends$t({}, props, { OriginalComponent: OriginalComponent })); }; return WrapperComponent; } const actionHasDisabledComponent = action => typeof action.component !== 'undefined' && action.component === false; const actionHasCustomComponent = action => typeof action.component === 'string'; const h$3 = new ViewHelpers(); const actionHref = (action, params) => { const actionName = action.name; if (!action.component && !action.hasHandler) { return null; } if (params.recordIds?.length) { params.recordIds = [...new Set(params.recordIds)]; } const hrefMap = { record: () => h$3.recordActionUrl({ ...params, actionName }), resource: () => h$3.resourceActionUrl({ resourceId: params.resourceId, actionName, search: params.search }), bulk: () => h$3.bulkActionUrl({ ...params, actionName }) }; if (hrefMap[action.actionType]) { return hrefMap[action.actionType](); } throw new Error('"actionType" should be either record, resource or bulk'); }; function bind(fn, thisArg) { return function wrap() { return fn.apply(thisArg, arguments); }; } // utils is a library of generic helper functions non-specific to axios const {toString: toString$6} = Object.prototype; const {getPrototypeOf} = Object; const kindOf = (cache => thing => { const str = toString$6.call(thing); return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); })(Object.create(null)); const kindOfTest = (type) => { type = type.toLowerCase(); return (thing) => kindOf(thing) === type }; const typeOfTest = type => thing => typeof thing === type; /** * Determine if a value is an Array * * @param {Object} val The value to test * * @returns {boolean} True if value is an Array, otherwise false */ const {isArray: isArray$b} = Array; /** * Determine if a value is undefined * * @param {*} val The value to test * * @returns {boolean} True if the value is undefined, otherwise false */ const isUndefined = typeOfTest('undefined'); /** * Determine if a value is a Buffer * * @param {*} val The value to test * * @returns {boolean} True if value is a Buffer, otherwise false */ function isBuffer$4(val) { return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction$4(val.constructor.isBuffer) && val.constructor.isBuffer(val); } /** * Determine if a value is an ArrayBuffer * * @param {*} val The value to test * * @returns {boolean} True if value is an ArrayBuffer, otherwise false */ const isArrayBuffer = kindOfTest('ArrayBuffer'); /** * Determine if a value is a view on an ArrayBuffer * * @param {*} val The value to test * * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false */ function isArrayBufferView(val) { let result; if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { result = ArrayBuffer.isView(val); } else { result = (val) && (val.buffer) && (isArrayBuffer(val.buffer)); } return result; } /** * Determine if a value is a String * * @param {*} val The value to test * * @returns {boolean} True if value is a String, otherwise false */ const isString = typeOfTest('string'); /** * Determine if a value is a Function * * @param {*} val The value to test * @returns {boolean} True if value is a Function, otherwise false */ const isFunction$4 = typeOfTest('function'); /** * Determine if a value is a Number * * @param {*} val The value to test * * @returns {boolean} True if value is a Number, otherwise false */ const isNumber = typeOfTest('number'); /** * Determine if a value is an Object * * @param {*} thing The value to test * * @returns {boolean} True if value is an Object, otherwise false */ const isObject$c = (thing) => thing !== null && typeof thing === 'object'; /** * Determine if a value is a Boolean * * @param {*} thing The value to test * @returns {boolean} True if value is a Boolean, otherwise false */ const isBoolean$1 = thing => thing === true || thing === false; /** * Determine if a value is a plain Object * * @param {*} val The value to test * * @returns {boolean} True if value is a plain Object, otherwise false */ const isPlainObject$2 = (val) => { if (kindOf(val) !== 'object') { return false; } const prototype = getPrototypeOf(val); return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val); }; /** * Determine if a value is a Date * * @param {*} val The value to test * * @returns {boolean} True if value is a Date, otherwise false */ const isDate = kindOfTest('Date'); /** * Determine if a value is a File * * @param {*} val The value to test * * @returns {boolean} True if value is a File, otherwise false */ const isFile = kindOfTest('File'); /** * Determine if a value is a Blob * * @param {*} val The value to test * * @returns {boolean} True if value is a Blob, otherwise false */ const isBlob = kindOfTest('Blob'); /** * Determine if a value is a FileList * * @param {*} val The value to test * * @returns {boolean} True if value is a File, otherwise false */ const isFileList = kindOfTest('FileList'); /** * Determine if a value is a Stream * * @param {*} val The value to test * * @returns {boolean} True if value is a Stream, otherwise false */ const isStream = (val) => isObject$c(val) && isFunction$4(val.pipe); /** * Determine if a value is a FormData * * @param {*} thing The value to test * * @returns {boolean} True if value is an FormData, otherwise false */ const isFormData = (thing) => { const pattern = '[object FormData]'; return thing && ( (typeof FormData === 'function' && thing instanceof FormData) || toString$6.call(thing) === pattern || (isFunction$4(thing.toString) && thing.toString() === pattern) ); }; /** * Determine if a value is a URLSearchParams object * * @param {*} val The value to test * * @returns {boolean} True if value is a URLSearchParams object, otherwise false */ const isURLSearchParams = kindOfTest('URLSearchParams'); /** * Trim excess whitespace off the beginning and end of a string * * @param {String} str The String to trim * * @returns {String} The String freed of excess whitespace */ const trim = (str) => str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); /** * Iterate over an Array or an Object invoking a function for each item. * * If `obj` is an Array callback will be called passing * the value, index, and complete array for each item. * * If 'obj' is an Object callback will be called passing * the value, key, and complete object for each property. * * @param {Object|Array} obj The object to iterate * @param {Function} fn The callback to invoke for each item * * @param {Boolean} [allOwnKeys = false] * @returns {any} */ function forEach(obj, fn, {allOwnKeys = false} = {}) { // Don't bother if no value provided if (obj === null || typeof obj === 'undefined') { return; } let i; let l; // Force an array if not already something iterable if (typeof obj !== 'object') { /*eslint no-param-reassign:0*/ obj = [obj]; } if (isArray$b(obj)) { // Iterate over array values for (i = 0, l = obj.length; i < l; i++) { fn.call(null, obj[i], i, obj); } } else { // Iterate over object keys const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); const len = keys.length; let key; for (i = 0; i < len; i++) { key = keys[i]; fn.call(null, obj[key], key, obj); } } } function findKey(obj, key) { key = key.toLowerCase(); const keys = Object.keys(obj); let i = keys.length; let _key; while (i-- > 0) { _key = keys[i]; if (key === _key.toLowerCase()) { return _key; } } return null; } const _global = (() => { /*eslint no-undef:0*/ if (typeof globalThis !== "undefined") return globalThis; return typeof self !== "undefined" ? self : (typeof window !== 'undefined' ? window : global) })(); const isContextDefined = (context) => !isUndefined(context) && context !== _global; /** * Accepts varargs expecting each argument to be an object, then * immutably merges the properties of each object and returns result. * * When multiple objects contain the same key the later object in * the arguments list will take precedence. * * Example: * * ```js * var result = merge({foo: 123}, {foo: 456}); * console.log(result.foo); // outputs 456 * ``` * * @param {Object} obj1 Object to merge * * @returns {Object} Result of all merge properties */ function merge$2(/* obj1, obj2, obj3, ... */) { const {caseless} = isContextDefined(this) && this || {}; const result = {}; const assignValue = (val, key) => { const targetKey = caseless && findKey(result, key) || key; if (isPlainObject$2(result[targetKey]) && isPlainObject$2(val)) { result[targetKey] = merge$2(result[targetKey], val); } else if (isPlainObject$2(val)) { result[targetKey] = merge$2({}, val); } else if (isArray$b(val)) { result[targetKey] = val.slice(); } else { result[targetKey] = val; } }; for (let i = 0, l = arguments.length; i < l; i++) { arguments[i] && forEach(arguments[i], assignValue); } return result; } /** * Extends object a by mutably adding to it the properties of object b. * * @param {Object} a The object to be extended * @param {Object} b The object to copy properties from * @param {Object} thisArg The object to bind function to * * @param {Boolean} [allOwnKeys] * @returns {Object} The resulting value of object a */ const extend = (a, b, thisArg, {allOwnKeys}= {}) => { forEach(b, (val, key) => { if (thisArg && isFunction$4(val)) { a[key] = bind(val, thisArg); } else { a[key] = val; } }, {allOwnKeys}); return a; }; /** * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) * * @param {string} content with BOM * * @returns {string} content value without BOM */ const stripBOM = (content) => { if (content.charCodeAt(0) === 0xFEFF) { content = content.slice(1); } return content; }; /** * Inherit the prototype methods from one constructor into another * @param {function} constructor * @param {function} superConstructor * @param {object} [props] * @param {object} [descriptors] * * @returns {void} */ const inherits = (constructor, superConstructor, props, descriptors) => { constructor.prototype = Object.create(superConstructor.prototype, descriptors); constructor.prototype.constructor = constructor; Object.defineProperty(constructor, 'super', { value: superConstructor.prototype }); props && Object.assign(constructor.prototype, props); }; /** * Resolve object with deep prototype chain to a flat object * @param {Object} sourceObj source object * @param {Object} [destObj] * @param {Function|Boolean} [filter] * @param {Function} [propFilter] * * @returns {Object} */ const toFlatObject = (sourceObj, destObj, filter, propFilter) => { let props; let i; let prop; const merged = {}; destObj = destObj || {}; // eslint-disable-next-line no-eq-null,eqeqeq if (sourceObj == null) return destObj; do { props = Object.getOwnPropertyNames(sourceObj); i = props.length; while (i-- > 0) { prop = props[i]; if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) { destObj[prop] = sourceObj[prop]; merged[prop] = true; } } sourceObj = filter !== false && getPrototypeOf(sourceObj); } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); return destObj; }; /** * Determines whether a string ends with the characters of a specified string * * @param {String} str * @param {String} searchString * @param {Number} [position= 0] * * @returns {boolean} */ const endsWith = (str, searchString, position) => { str = String(str); if (position === undefined || position > str.length) { position = str.length; } position -= searchString.length; const lastIndex = str.indexOf(searchString, position); return lastIndex !== -1 && lastIndex === position; }; /** * Returns new array from array like object or null if failed * * @param {*} [thing] * * @returns {?Array} */ const toArray = (thing) => { if (!thing) return null; if (isArray$b(thing)) return thing; let i = thing.length; if (!isNumber(i)) return null; const arr = new Array(i); while (i-- > 0) { arr[i] = thing[i]; } return arr; }; /** * Checking if the Uint8Array exists and if it does, it returns a function that checks if the * thing passed in is an instance of Uint8Array * * @param {TypedArray} * * @returns {Array} */ // eslint-disable-next-line func-names const isTypedArray$4 = (TypedArray => { // eslint-disable-next-line func-names return thing => { return TypedArray && thing instanceof TypedArray; }; })(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array)); /** * For each entry in the object, call the function with the key and value. * * @param {Object<any, any>} obj - The object to iterate over. * @param {Function} fn - The function to call for each entry. * * @returns {void} */ const forEachEntry = (obj, fn) => { const generator = obj && obj[Symbol.iterator]; const iterator = generator.call(obj); let result; while ((result = iterator.next()) && !result.done) { const pair = result.value; fn.call(obj, pair[0], pair[1]); } }; /** * It takes a regular expression and a string, and returns an array of all the matches * * @param {string} regExp - The regular expression to match against. * @param {string} str - The string to search. * * @returns {Array<boolean>} */ const matchAll = (regExp, str) => { let matches; const arr = []; while ((matches = regExp.exec(str)) !== null) { arr.push(matches); } return arr; }; /* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */ const isHTMLForm = kindOfTest('HTMLFormElement'); const toCamelCase = str => { return str.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g, function replacer(m, p1, p2) { return p1.toUpperCase() + p2; } ); }; /* Creating a function that will check if an object has a property. */ const hasOwnProperty$c = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype); /** * Determine if a value is a RegExp object * * @param {*} val The value to test * * @returns {boolean} True if value is a RegExp object, otherwise false */ const isRegExp$2 = kindOfTest('RegExp'); const reduceDescriptors = (obj, reducer) => { const descriptors = Object.getOwnPropertyDescriptors(obj); const reducedDescriptors = {}; forEach(descriptors, (descriptor, name) => { if (reducer(descriptor, name, obj) !== false) { reducedDescriptors[name] = descriptor; } }); Object.defineProperties(obj, reducedDescriptors); }; /** * Makes all methods read-only * @param {Object} obj */ const freezeMethods = (obj) => { reduceDescriptors(obj, (descriptor, name) => { // skip restricted props in strict mode if (isFunction$4(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) { return false; } const value = obj[name]; if (!isFunction$4(value)) return; descriptor.enumerable = false; if ('writable' in descriptor) { descriptor.writable = false; return; } if (!descriptor.set) { descriptor.set = () => { throw Error('Can not rewrite read-only method \'' + name + '\''); }; } }); }; const toObjectSet = (arrayOrString, delimiter) => { const obj = {}; const define = (arr) => { arr.forEach(value => { obj[value] = true; }); }; isArray$b(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter)); return obj; }; const noop$4 = () => {}; const toFiniteNumber = (value, defaultValue) => { value = +value; return Number.isFinite(value) ? value : defaultValue; }; const ALPHA = 'abcdefghijklmnopqrstuvwxyz'; const DIGIT = '0123456789'; const ALPHABET = { DIGIT, ALPHA, ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT }; const generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => { let str = ''; const {length} = alphabet; while (size--) { str += alphabet[Math.random() * length|0]; } return str; }; /** * If the thing is a FormData object, return true, otherwise return false. * * @param {unknown} thing - The thing to check. * * @returns {boolean} */ function isSpecCompliantForm(thing) { return !!(thing && isFunction$4(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]); } const toJSONObject = (obj) => { const stack = new Array(10); const visit = (source, i) => { if (isObject$c(source)) { if (stack.indexOf(source) >= 0) { return; } if(!('toJSON' in source)) { stack[i] = source; const target = isArray$b(source) ? [] : {}; forEach(source, (value, key) => { const reducedValue = visit(value, i + 1); !isUndefined(reducedValue) && (target[key] = reducedValue); }); stack[i] = undefined; return target; } } return source; }; return visit(obj, 0); }; var utils = { isArray: isArray$b, isArrayBuffer, isBuffer: isBuffer$4, isFormData, isArrayBufferView, isString, isNumber, isBoolean: isBoolean$1, isObject: isObject$c, isPlainObject: isPlainObject$2, isUndefined, isDate, isFile, isBlob, isRegExp: isRegExp$2, isFunction: isFunction$4, isStream, isURLSearchParams, isTypedArray: isTypedArray$4, isFileList, forEach, merge: merge$2, extend, trim, stripBOM, inherits, toFlatObject, kindOf, kindOfTest, endsWith, toArray, forEachEntry, matchAll, isHTMLForm, hasOwnProperty: hasOwnProperty$c, hasOwnProp: hasOwnProperty$c, // an alias to avoid ESLint no-prototype-builtins detection reduceDescriptors, freezeMethods, toObjectSet, toCamelCase, noop: noop$4, toFiniteNumber, findKey, global: _global, isContextDefined, ALPHABET, generateString, isSpecCompliantForm, toJSONObject }; /** * Create an Error with the specified message, config, error code, request and response. * * @param {string} message The error message. * @param {string} [code] The error code (for example, 'ECONNABORTED'). * @param {Object} [config] The config. * @param {Object} [request] The request. * @param {Object} [response] The response. * * @returns {Error} The created error. */ function AxiosError(message, code, config, request, response) { Error.call(this); if (Error.captureStackTrace) { Error.captureStackTrace(this, this.constructor); } else { this.stack = (new Error()).stack; } this.message = message; this.name = 'AxiosError'; code && (this.code = code); config && (this.config = config); request && (this.request = request); response && (this.response = response); } utils.inherits(AxiosError, Error, { toJSON: function toJSON() { return { // Standard message: this.message, name: this.name, // Microsoft description: this.description, number: this.number, // Mozilla fileName: this.fileName, lineNumber: this.lineNumber, columnNumber: this.columnNumber, stack: this.stack, // Axios config: utils.toJSONObject(this.config), code: this.code, status: this.response && this.response.status ? this.response.status : null }; } }); const prototype$1 = AxiosError.prototype; const descriptors = {}; [ 'ERR_BAD_OPTION_VALUE', 'ERR_BAD_OPTION', 'ECONNABORTED', 'ETIMEDOUT', 'ERR_NETWORK', 'ERR_FR_TOO_MANY_REDIRECTS', 'ERR_DEPRECATED', 'ERR_BAD_RESPONSE', 'ERR_BAD_REQUEST', 'ERR_CANCELED', 'ERR_NOT_SUPPORT', 'ERR_INVALID_URL' // eslint-disable-next-line func-names ].forEach(code => { descriptors[code] = {value: code}; }); Object.defineProperties(AxiosError, descriptors); Object.defineProperty(prototype$1, 'isAxiosError', {value: true}); // eslint-disable-next-line func-names AxiosError.from = (error, code, config, request, response, customProps) => { const axiosError = Object.create(prototype$1); utils.toFlatObject(error, axiosError, function filter(obj) { return obj !== Error.prototype; }, prop => { return prop !== 'isAxiosError'; }); AxiosError.call(axiosError, error.message, code, config, request, response); axiosError.cause = error; axiosError.name = error.name; customProps && Object.assign(axiosError, customProps); return axiosError; }; // eslint-disable-next-line strict var httpAdapter = null; /** * Determines if the given thing is a array or js object. * * @param {string} thing - The object or array to be visited. * * @returns {boolean} */ function isVisitable(thing) { return utils.isPlainObject(thing) || utils.isArray(thing); } /** * It removes the brackets from the end of a string * * @param {string} key - The key of the parameter. * * @returns {string} the key without the brackets. */ function removeBrackets(key) { return utils.endsWith(key, '[]') ? key.slice(0, -2) : key; } /** * It takes a path, a key, and a boolean, and returns a string * * @param {string} path - The path to the current key. * @param {string} key - The key of the current object being iterated over. * @param {string} dots - If true, the key will be rendered with dots instead of brackets. * * @returns {string} The path to the current key. */ function renderKey(path, key, dots) { if (!path) return key; return path.concat(key).map(function each(token, i) { // eslint-disable-next-line no-param-reassign token = removeBrackets(token); return !dots && i ? '[' + token + ']' : token; }).join(dots ? '.' : ''); } /** * If the array is an array and none of its elements are visitable, then it's a flat array. * * @param {Array<any>} arr - The array to check * * @returns {boolean} */ function isFlatArray(arr) { return utils.isArray(arr) && !arr.some(isVisitable); } const predicates = utils.toFlatObject(utils, {}, null, function filter(prop) { return /^is[A-Z]/.test(prop); }); /** * Convert a data object to FormData * * @param {Object} obj * @param {?Object} [formData] * @param {?Object} [options] * @param {Function} [options.visitor] * @param {Boolean} [options.metaTokens = true] * @param {Boolean} [options.dots = false] * @param {?Boolean} [options.indexes = false] * * @returns {Object} **/ /** * It converts an object into a FormData object * * @param {Object<any, any>} obj - The object to convert to form data. * @param {string} formData - The FormData object to append to. * @param {Object<string, any>} options * * @returns */ function toFormData(obj, formData, options) { if (!utils.isObject(obj)) { throw new TypeError('target must be an object'); } // eslint-disable-next-line no-param-reassign formData = formData || new (FormData)(); // eslint-disable-next-line no-param-reassign options = utils.toFlatObject(options, { metaTokens: true, dots: false, indexes: false }, false, function defined(option, source) { // eslint-disable-next-line no-eq-null,eqeqeq return !utils.isUndefined(source[option]); }); const metaTokens = options.metaTokens; // eslint-disable-next-line no-use-before-define const visitor = options.visitor || defaultVisitor; const dots = options.dots; const indexes = options.indexes; const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; const useBlob = _Blob && utils.isSpecCompliantForm(formData); if (!utils.isFunction(visitor)) { throw new TypeError('visitor must be a function'); } function convertValue(value) { if (value === null) return ''; if (utils.isDate(value)) { return value.toISOString(); } if (!useBlob && utils.isBlob(value)) { throw new AxiosError('Blob is not supported. Use a Buffer instead.'); } if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) { return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); } return value; } /** * Default visitor. * * @param {*} value * @param {String|Number} key * @param {Array<String|Number>} path * @this {FormData} * * @returns {boolean} return true to visit the each prop of the value recursively */ function defaultVisitor(value, key, path) { let arr = value; if (value && !path && typeof value === 'object') { if (utils.endsWith(key, '{}')) { // eslint-disable-next-line no-param-reassign key = metaTokens ? key : key.slice(0, -2); // eslint-disable-next-line no-param-reassign value = JSON.stringify(value); } else if ( (utils.isArray(value) && isFlatArray(value)) || ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value)) )) { // eslint-disable-next-line no-param-reassign key = removeBrackets(key); arr.forEach(function each(el, index) { !(utils.isUndefined(el) || el === null) && formData.append( // eslint-disable-next-line no-nested-ternary indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), convertValue(el) ); }); return false; } } if (isVisitable(value)) { return true; } formData.append(renderKey(path, key, dots), convertValue(value)); return false; } const stack = []; const exposedHelpers = Object.assign(predicates, { defaultVisitor, convertValue, isVisitable }); function build(value, path) { if (utils.isUndefined(value)) return; if (stack.indexOf(value) !== -1) { throw Error('Circular reference detected in ' + path.join('.')); } stack.push(value); utils.forEach(value, function each(el, key) { const result = !(utils.isUndefined(el) || el === null) && visitor.call( formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers ); if (result === true) { build(el, path ? path.concat(key) : [key]); } }); stack.pop(); } if (!utils.isObject(obj)) { throw new TypeError('data must be an object'); } build(obj); return formData; } /** * It encodes a string by replacing all characters that are not in the unreserved set with * their percent-encoded equivalents * * @param {string} str - The string to encode. * * @returns {string} The encoded string. */ function encode$1(str) { const charMap = { '!': '%21', "'": '%27', '(': '%28', ')': '%29', '~': '%7E', '%20': '+', '%00': '\x00' }; return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { return charMap[match]; }); } /** * It takes a params object and converts it to a FormData object * * @param {Object<string, any>} params - The parameters to be converted to a FormData object. * @param {Object<string, any>} options - The options object passed to the Axios constructor. * * @returns {void} */ function AxiosURLSearchParams(params, options) { this._pairs = []; params && toFormData(params, this, options); } const prototype = AxiosURLSearchParams.prototype; prototype.append = function append(name, value) { this._pairs.push([name, value]); }; prototype.toString = function toString(encoder) { const _encode = encoder ? function(value) { return encoder.call(this, value, encode$1); } : encode$1; return this._pairs.map(function each(pair) { return _encode(pair[0]) + '=' + _encode(pair[1]); }, '').join('&'); }; /** * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their * URI encoded counterparts * * @param {string} val The value to be encoded. * * @returns {string} The encoded value. */ function encode(val) { return encodeURIComponent(val). replace(/%3A/gi, ':'). replace(/%24/g, '$'). replace(/%2C/gi, ','). replace(/%20/g, '+'). replace(/%5B/gi, '['). replace(/%5D/gi, ']'); } /** * Build a URL by appending params to the end * * @param {string} url The base of the url (e.g., http://www.google.com) * @param {object} [params] The params to be appended * @param {?object} options * * @returns {string} The formatted url */ function buildURL(url, params, options) { /*eslint no-param-reassign:0*/ if (!params) { return url; } const _encode = options && options.encode || encode; const serializeFn = options && options.serialize; let serializedParams; if (serializeFn) { serializedParams = serializeFn(params, options); } else { serializedParams = utils.isURLSearchParams(params) ? params.toString() : new AxiosURLSearchParams(params, options).toString(_encode); } if (serializedParams) { const hashmarkIndex = url.indexOf("#"); if (hashmarkIndex !== -1) { url = url.slice(0, hashmarkIndex); } url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; } return url; } class InterceptorManager { constructor() { this.handlers = []; } /** * Add a new interceptor to the stack * * @param {Function} fulfilled The function to handle `then` for a `Promise` * @param {Function} rejected The function to handle `reject` for a `Promise` * * @return {Number} An ID used to remove interceptor later */ use(fulfilled, rejected, options) { this.handlers.push({ fulfilled, rejected, synchronous: options ? options.synchronous : false, runWhen: options ? options.runWhen : null }); return this.handlers.length - 1; } /** * Remove an interceptor from the stack * * @param {Number} id The ID that was returned by `use` * * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise */ eject(id) { if (this.handlers[id]) { this.handlers[id] = null; } } /** * Clear all interceptors from the stack * * @returns {void} */ clear() { if (this.handlers) { this.handlers = []; } } /** * Iterate over all the registered interceptors * * This method is particularly useful for skipping over any * interceptors that may have become `null` calling `eject`. * * @param {Function} fn The function to call for each interceptor * * @returns {void} */ forEach(fn) { utils.forEach(this.handlers, function forEachHandler(h) { if (h !== null) { fn(h); } }); } } var transitionalDefaults = { silentJSONParsing: true, forcedJSONParsing: true, clarifyTimeoutError: false }; var URLSearchParams$1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams; var FormData$1 = typeof FormData !== 'undefined' ? FormData : null; var Blob$1 = typeof Blob !== 'undefined' ? Blob : null; /** * Determine if we're running in a standard browser environment * * This allows axios to run in a web worker, and react-native. * Both environments support XMLHttpRequest, but not fully standard globals. * * web workers: * typeof window -> undefined * typeof document -> undefined * * react-native: * navigator.product -> 'ReactNative' * nativescript * navigator.product -> 'NativeScript' or 'NS' * * @returns {boolean} */ const isStandardBrowserEnv = (() => { let product; if (typeof navigator !== 'undefined' && ( (product = navigator.product) === 'ReactNative' || product === 'NativeScript' || product === 'NS') ) { return false; } return typeof window !== 'undefined' && typeof document !== 'undefined'; })(); /** * Determine if we're running in a standard browser webWorker environment * * Although the `isStandardBrowserEnv` method indicates that * `allows axios to run in a web worker`, the WebWorker will still be * filtered out due to its judgment standard * `typeof window !== 'undefined' && typeof document !== 'undefined'`. * This leads to a problem when axios post `FormData` in webWorker */ const isStandardBrowserWebWorkerEnv = (() => { return ( typeof WorkerGlobalScope !== 'undefined' && // eslint-disable-next-line no-undef self instanceof WorkerGlobalScope && typeof self.importScripts === 'function' ); })(); var platform = { isBrowser: true, classes: { URLSearchParams: URLSearchParams$1, FormData: FormData$1, Blob: Blob$1 }, isStandardBrowserEnv, isStandardBrowserWebWorkerEnv, protocols: ['http', 'https', 'file', 'blob', 'url', 'data'] }; function toURLEncodedForm(data, options) { return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({ visitor: function(value, key, path, helpers) { if (platform.isNode && utils.isBuffer(value)) { this.append(key, value.toString('base64')); return false; } return helpers.defaultVisitor.apply(this, arguments); } }, options)); } /** * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z'] * * @param {string} name - The name of the property to get. * * @returns An array of strings. */ function parsePropPath(name) { // foo[x][y][z] // foo.x.y.z // foo-x-y-z // foo x y z return utils.matchAll(/\w+|\[(\w*)]/g, name).map(match => { return match[0] === '[]' ? '' : match[1] || match[0]; }); } /** * Convert an array to an object. * * @param {Array<any>} arr - The array to convert to an object. * * @returns An object with the same keys and values as the array. */ function arrayToObject(arr) { const obj = {}; const keys = Object.keys(arr); let i; const len = keys.length; let key; for (i = 0; i < len; i++) { key = keys[i]; obj[key] = arr[key]; } return obj; } /** * It takes a FormData object and returns a JavaScript object * * @param {string} formData The FormData object to convert to JSON. * * @returns {Object<string, any> | null} The converted object. */ function formDataToJSON(formData) { function buildPath(path, value, target, index) { let name = path[index++]; const isNumericKey = Number.isFinite(+name); const isLast = index >= path.length; name = !name && utils.isArray(target) ? target.length : name; if (isLast) { if (utils.hasOwnProp(target, name)) { target[name] = [target[name], value]; } else { target[name] = value; } return !isNumericKey; } if (!target[name] || !utils.isObject(target[name])) { target[name] = []; } const result = buildPath(path, value, target[name], index); if (result && utils.isArray(target[name])) { target[name] = arrayToObject(target[name]); } return !isNumericKey; } if (utils.isFormData(formData) && utils.isFunction(formData.entries)) { const obj = {}; utils.forEachEntry(formData, (name, value) => { buildPath(parsePropPath(name), value, obj, 0); }); return obj; } return null; } const DEFAULT_CONTENT_TYPE = { 'Content-Type': undefined }; /** * It takes a string, tries to parse it, and if it fails, it returns the stringified version * of the input * * @param {any} rawValue - The value to be stringified. * @param {Function} parser - A function that parses a string into a JavaScript object. * @param {Function} encoder - A function that takes a value and returns a string. * * @returns {string} A stringified version of the rawValue. */ function stringifySafely(rawValue, parser, encoder) { if (utils.isString(rawValue)) { try { (parser || JSON.parse)(rawValue); return utils.trim(rawValue); } catch (e) { if (e.name !== 'SyntaxError') { throw e; } } } return (encoder || JSON.stringify)(rawValue); } const defaults$3 = { transitional: transitionalDefaults, adapter: ['xhr', 'http'], transformRequest: [function transformRequest(data, headers) { const contentType = headers.getContentType() || ''; const hasJSONContentType = contentType.indexOf('application/json') > -1; const isObjectPayload = utils.isObject(data); if (isObjectPayload && utils.isHTMLForm(data)) { data = new FormData(data); } const isFormData = utils.isFormData(data); if (isFormData) { if (!hasJSONContentType) { return data; } return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; } if (utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data) ) { return data; } if (utils.isArrayBufferView(data)) { return data.buffer; } if (utils.isURLSearchParams(data)) { headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false); return data.toString(); } let isFileList; if (isObjectPayload) { if (contentType.indexOf('application/x-www-form-urlencoded') > -1) { return toURLEncodedForm(data, this.formSerializer).toString(); } if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { const _FormData = this.env && this.env.FormData; return toFormData( isFileList ? {'files[]': data} : data, _FormData && new _FormData(), this.formSerializer ); } } if (isObjectPayload || hasJSONContentType ) { headers.setContentType('application/json', false); return stringifySafely(data); } return data; }], transformResponse: [function transformResponse(data) { const transitional = this.transitional || defaults$3.transitional; const forcedJSONParsing = transitional && transitional.forcedJSONParsing; const JSONRequested = this.responseType === 'json'; if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { const silentJSONParsing = transitional && transitional.silentJSONParsing; const strictJSONParsing = !silentJSONParsing && JSONRequested; try { return JSON.parse(data); } catch (e) { if (strictJSONParsing) { if (e.name === 'SyntaxError') { throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response); } throw e; } } } return data; }], /** * A timeout in milliseconds to abort a request. If set to 0 (default) a * timeout is not created. */ timeout: 0, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1, env: { FormData: platform.classes.FormData, Blob: platform.classes.Blob }, validateStatus: function validateStatus(status) { return status >= 200 && status < 300; }, headers: { common: { 'Accept': 'application/json, text/plain, */*' } } }; utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { defaults$3.headers[method] = {}; }); utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { defaults$3.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); }); var defaults$4 = defaults$3; // RawAxiosHeaders whose duplicates are ignored by node // c.f. https://nodejs.org/api/http.html#http_message_headers const ignoreDuplicateOf = utils.toObjectSet([ 'age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent' ]); /** * Parse headers into an object * * ``` * Date: Wed, 27 Aug 2014 08:58:49 GMT * Content-Type: application/json * Connection: keep-alive * Transfer-Encoding: chunked * ``` * * @param {String} rawHeaders Headers needing to be parsed * * @returns {Object} Headers parsed into an object */ var parseHeaders = rawHeaders => { const parsed = {}; let key; let val; let i; rawHeaders && rawHeaders.split('\n').forEach(function parser(line) { i = line.indexOf(':'); key = line.substring(0, i).trim().toLowerCase(); val = line.substring(i + 1).trim(); if (!key || (parsed[key] && ignoreDuplicateOf[key])) { return; } if (key === 'set-cookie') { if (parsed[key]) { parsed[key].push(val); } else { parsed[key] = [val]; } } else { parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; } }); return parsed; }; const $internals = Symbol('internals'); function normalizeHeader(header) { return header && String(header).trim().toLowerCase(); } function normalizeValue(value) { if (value === false || value == null) { return value; } return utils.isArray(value) ? value.map(normalizeValue) : String(value); } function parseTokens(str) { const tokens = Object.create(null); const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; let match; while ((match = tokensRE.exec(str))) { tokens[match[1]] = match[2]; } return tokens; } function isValidHeaderName(str) { return /^[-_a-zA-Z]+$/.test(str.trim()); } function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { if (utils.isFunction(filter)) { return filter.call(this, value, header); } if (isHeaderNameFilter) { value = header; } if (!utils.isString(value)) return; if (utils.isString(filter)) { return value.indexOf(filter) !== -1; } if (utils.isRegExp(filter)) { return filter.test(value); } } function formatHeader(header) { return header.trim() .toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => { return char.toUpperCase() + str; }); } function buildAccessors(obj, header) { const accessorName = utils.toCamelCase(' ' + header); ['get', 'set', 'has'].forEach(methodName => { Object.defineProperty(obj, methodName + accessorName, { value: function(arg1, arg2, arg3) { return this[methodName].call(this, header, arg1, arg2, arg3); }, configurable: true }); }); } class AxiosHeaders { constructor(headers) { headers && this.set(headers); } set(header, valueOrRewrite, rewrite) { const self = this; function setHeader(_value, _header, _rewrite) { const lHeader = normalizeHeader(_header); if (!lHeader) { throw new Error('header name must be a non-empty string'); } const key = utils.findKey(self, lHeader); if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) { self[key || _header] = normalizeValue(_value); } } const setHeaders = (headers, _rewrite) => utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); if (utils.isPlainObject(header) || header instanceof this.constructor) { setHeaders(header, valueOrRewrite); } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { setHeaders(parseHeaders(header), valueOrRewrite); } else { header != null && setHeader(valueOrRewrite, header, rewrite); } return this; } get(header, parser) { header = normalizeHeader(header); if (header) { const key = utils.findKey(this, header); if (key) { const value = this[key]; if (!parser) { return value; } if (parser === true) { return parseTokens(value); } if (utils.isFunction(parser)) { return parser.call(this, value, key); } if (utils.isRegExp(parser)) { return parser.exec(value); } throw new TypeError('parser must be boolean|regexp|function'); } } } has(header, matcher) { header = normalizeHeader(header); if (header) { const key = utils.findKey(this, header); return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))); } return false; } delete(header, matcher) { const self = this; let deleted = false; function deleteHeader(_header) { _header = normalizeHeader(_header); if (_header) { const key = utils.findKey(self, _header); if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { delete self[key]; deleted = true; } } } if (utils.isArray(header)) { header.forEach(deleteHeader); } else { deleteHeader(header); } return deleted; } clear(matcher) { const keys = Object.keys(this); let i = keys.length; let deleted = false; while (i--) { const key = keys[i]; if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { delete this[key]; deleted = true; } } return deleted; } normalize(format) { const self = this; const headers = {}; utils.forEach(this, (value, header) => { const key = utils.findKey(headers, header); if (key) { self[key] = normalizeValue(value); delete self[header]; return; } const normalized = format ? formatHeader(header) : String(header).trim(); if (normalized !== header) { delete self[header]; } self[normalized] = normalizeValue(value); headers[normalized] = true; }); return this; } concat(...targets) { return this.constructor.concat(this, ...targets); } toJSON(asStrings) { const obj = Object.create(null); utils.forEach(this, (value, header) => { value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value); }); return obj; } [Symbol.iterator]() { return Object.entries(this.toJSON())[Symbol.iterator](); } toString() { return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\n'); } get [Symbol.toStringTag]() { return 'AxiosHeaders'; } static from(thing) { return thing instanceof this ? thing : new this(thing); } static concat(first, ...targets) { const computed = new this(first); targets.forEach((target) => computed.set(target)); return computed; } static accessor(header) { const internals = this[$internals] = (this[$internals] = { accessors: {} }); const accessors = internals.accessors; const prototype = this.prototype; function defineAccessor(_header) { const lHeader = normalizeHeader(_header); if (!accessors[lHeader]) { buildAccessors(prototype, _header); accessors[lHeader] = true; } } utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); return this; } } AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); utils.freezeMethods(AxiosHeaders.prototype); utils.freezeMethods(AxiosHeaders); var AxiosHeaders$1 = AxiosHeaders; /** * Transform the data for a request or a response * * @param {Array|Function} fns A single function or Array of functions * @param {?Object} response The response object * * @returns {*} The resulting transformed data */ function transformData(fns, response) { const config = this || defaults$4; const context = response || config; const headers = AxiosHeaders$1.from(context.headers); let data = context.data; utils.forEach(fns, function transform(fn) { data = fn.call(config, data, headers.normalize(), response ? response.status : undefined); }); headers.normalize(); return data; } function isCancel(value) { return !!(value && value.__CANCEL__); } /** * A `CanceledError` is an object that is thrown when an operation is canceled. * * @param {string=} message The message. * @param {Object=} config The config. * @param {Object=} request The request. * * @returns {CanceledError} The created error. */ function CanceledError(message, config, request) { // eslint-disable-next-line no-eq-null,eqeqeq AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request); this.name = 'CanceledError'; } utils.inherits(CanceledError, AxiosError, { __CANCEL__: true }); /** * Resolve or reject a Promise based on response status. * * @param {Function} resolve A function that resolves the promise. * @param {Function} reject A function that rejects the promise. * @param {object} response The response. * * @returns {object} The response. */ function settle(resolve, reject, response) { const validateStatus = response.config.validateStatus; if (!response.status || !validateStatus || validateStatus(response.status)) { resolve(response); } else { reject(new AxiosError( 'Request failed with status code ' + response.status, [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response )); } } var cookies = platform.isStandardBrowserEnv ? // Standard browser envs support document.cookie (function standardBrowserEnv() { return { write: function write(name, value, expires, path, domain, secure) { const cookie = []; cookie.push(name + '=' + encodeURIComponent(value)); if (utils.isNumber(expires)) { cookie.push('expires=' + new Date(expires).toGMTString()); } if (utils.isString(path)) { cookie.push('path=' + path); } if (utils.isString(domain)) { cookie.push('domain=' + domain); } if (secure === true) { cookie.push('secure'); } document.cookie = cookie.join('; '); }, read: function read(name) { const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); return (match ? decodeURIComponent(match[3]) : null); }, remove: function remove(name) { this.write(name, '', Date.now() - 86400000); } }; })() : // Non standard browser env (web workers, react-native) lack needed support. (function nonStandardBrowserEnv() { return { write: function write() {}, read: function read() { return null; }, remove: function remove() {} }; })(); /** * Determines whether the specified URL is absolute * * @param {string} url The URL to test * * @returns {boolean} True if the specified URL is absolute, otherwise false */ function isAbsoluteURL(url) { // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL). // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed // by any combination of letters, digits, plus, period, or hyphen. return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); } /** * Creates a new URL by combining the specified URLs * * @param {string} baseURL The base URL * @param {string} relativeURL The relative URL * * @returns {string} The combined URL */ function combineURLs(baseURL, relativeURL) { return relativeURL ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') : baseURL; } /** * Creates a new URL by combining the baseURL with the requestedURL, * only when the requestedURL is not already an absolute URL. * If the requestURL is absolute, this function returns the requestedURL untouched. * * @param {string} baseURL The base URL * @param {string} requestedURL Absolute or relative URL to combine * * @returns {string} The combined full path */ function buildFullPath(baseURL, requestedURL) { if (baseURL && !isAbsoluteURL(requestedURL)) { return combineURLs(baseURL, requestedURL); } return requestedURL; } var isURLSameOrigin = platform.isStandardBrowserEnv ? // Standard browser envs have full support of the APIs needed to test // whether the request URL is of the same origin as current location. (function standardBrowserEnv() { const msie = /(msie|trident)/i.test(navigator.userAgent); const urlParsingNode = document.createElement('a'); let originURL; /** * Parse a URL to discover it's components * * @param {String} url The URL to be parsed * @returns {Object} */ function resolveURL(url) { let href = url; if (msie) { // IE needs attribute set twice to normalize properties urlParsingNode.setAttribute('href', href); href = urlParsingNode.href; } urlParsingNode.setAttribute('href', href); // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils return { href: urlParsingNode.href, protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', host: urlParsingNode.host, search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', hostname: urlParsingNode.hostname, port: urlParsingNode.port, pathname: (urlParsingNode.pathname.charAt(0) === '/') ? urlParsingNode.pathname : '/' + urlParsingNode.pathname }; } originURL = resolveURL(window.location.href); /** * Determine if a URL shares the same origin as the current location * * @param {String} requestURL The URL to test * @returns {boolean} True if URL shares the same origin, otherwise false */ return function isURLSameOrigin(requestURL) { const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL; return (parsed.protocol === originURL.protocol && parsed.host === originURL.host); }; })() : // Non standard browser envs (web workers, react-native) lack needed support. (function nonStandardBrowserEnv() { return function isURLSameOrigin() { return true; }; })(); function parseProtocol(url) { const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); return match && match[1] || ''; } /** * Calculate data maxRate * @param {Number} [samplesCount= 10] * @param {Number} [min= 1000] * @returns {Function} */ function speedometer(samplesCount, min) { samplesCount = samplesCount || 10; const bytes = new Array(samplesCount); const timestamps = new Array(samplesCount); let head = 0; let tail = 0; let firstSampleTS; min = min !== undefined ? min : 1000; return function push(chunkLength) { const now = Date.now(); const startedAt = timestamps[tail]; if (!firstSampleTS) { firstSampleTS = now; } bytes[head] = chunkLength; timestamps[head] = now; let i = tail; let bytesCount = 0; while (i !== head) { bytesCount += bytes[i++]; i = i % samplesCount; } head = (head + 1) % samplesCount; if (head === tail) { tail = (tail + 1) % samplesCount; } if (now - firstSampleTS < min) { return; } const passed = startedAt && now - startedAt; return passed ? Math.round(bytesCount * 1000 / passed) : undefined; }; } function progressEventReducer(listener, isDownloadStream) { let bytesNotified = 0; const _speedometer = speedometer(50, 250); return e => { const loaded = e.loaded; const total = e.lengthComputable ? e.total : undefined; const progressBytes = loaded - bytesNotified; const rate = _speedometer(progressBytes); const inRange = loaded <= total; bytesNotified = loaded; const data = { loaded, total, progress: total ? (loaded / total) : undefined, bytes: progressBytes, rate: rate ? rate : undefined, estimated: rate && total && inRange ? (total - loaded) / rate : undefined, event: e }; data[isDownloadStream ? 'download' : 'upload'] = true; listener(data); }; } const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; var xhrAdapter = isXHRAdapterSupported && function (config) { return new Promise(function dispatchXhrRequest(resolve, reject) { let requestData = config.data; const requestHeaders = AxiosHeaders$1.from(config.headers).normalize(); const responseType = config.responseType; let onCanceled; function done() { if (config.cancelToken) { config.cancelToken.unsubscribe(onCanceled); } if (config.signal) { config.signal.removeEventListener('abort', onCanceled); } } if (utils.isFormData(requestData) && (platform.isStandardBrowserEnv || platform.isStandardBrowserWebWorkerEnv)) { requestHeaders.setContentType(false); // Let the browser set it } let request = new XMLHttpRequest(); // HTTP basic authentication if (config.auth) { const username = config.auth.username || ''; const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password)); } const fullPath = buildFullPath(config.baseURL, config.url); request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); // Set the request timeout in MS request.timeout = config.timeout; function onloadend() { if (!request) { return; } // Prepare the response const responseHeaders = AxiosHeaders$1.from( 'getAllResponseHeaders' in request && request.getAllResponseHeaders() ); const responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response; const response = { data: responseData, status: request.status, statusText: request.statusText, headers: responseHeaders, config, request }; settle(function _resolve(value) { resolve(value); done(); }, function _reject(err) { reject(err); done(); }, response); // Clean up request request = null; } if ('onloadend' in request) { // Use onloadend if available request.onloadend = onloadend; } else { // Listen for ready state to emulate onloadend request.onreadystatechange = function handleLoad() { if (!request || request.readyState !== 4) { return; } // The request errored out and we didn't get a response, this will be // handled by onerror instead // With one exception: request that using file: protocol, most browsers // will return status as 0 even though it's a successful request if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { return; } // readystate handler is calling before onerror or ontimeout handlers, // so we should call onloadend on the next 'tick' setTimeout(onloadend); }; } // Handle browser request cancellation (as opposed to a manual cancellation) request.onabort = function handleAbort() { if (!request) { return; } reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request)); // Clean up request request = null; }; // Handle low level network errors request.onerror = function handleError() { // Real errors are hidden from us by the browser // onerror should only fire if it's a network error reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request)); // Clean up request request = null; }; // Handle timeout request.ontimeout = function handleTimeout() { let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; const transitional = config.transitional || transitionalDefaults; if (config.timeoutErrorMessage) { timeoutErrorMessage = config.timeoutErrorMessage; } reject(new AxiosError( timeoutErrorMessage, transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, config, request)); // Clean up request request = null; }; // Add xsrf header // This is only done if running in a standard browser environment. // Specifically not if we're in a web worker, or react-native. if (platform.isStandardBrowserEnv) { // Add xsrf header const xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName && cookies.read(config.xsrfCookieName); if (xsrfValue) { requestHeaders.set(config.xsrfHeaderName, xsrfValue); } } // Remove Content-Type if data is undefined requestData === undefined && requestHeaders.setContentType(null); // Add headers to the request if ('setRequestHeader' in request) { utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { request.setRequestHeader(key, val); }); } // Add withCredentials to request if needed if (!utils.isUndefined(config.withCredentials)) { request.withCredentials = !!config.withCredentials; } // Add responseType to request if needed if (responseType && responseType !== 'json') { request.responseType = config.responseType; } // Handle progress if needed if (typeof config.onDownloadProgress === 'function') { request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true)); } // Not all browsers support upload events if (typeof config.onUploadProgress === 'function' && request.upload) { request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress)); } if (config.cancelToken || config.signal) { // Handle cancellation // eslint-disable-next-line func-names onCanceled = cancel => { if (!request) { return; } reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel); request.abort(); request = null; }; config.cancelToken && config.cancelToken.subscribe(onCanceled); if (config.signal) { config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled); } } const protocol = parseProtocol(fullPath); if (protocol && platform.protocols.indexOf(protocol) === -1) { reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config)); return; } // Send the request request.send(requestData || null); }); }; const knownAdapters = { http: httpAdapter, xhr: xhrAdapter }; utils.forEach(knownAdapters, (fn, value) => { if(fn) { try { Object.defineProperty(fn, 'name', {value}); } catch (e) { // eslint-disable-next-line no-empty } Object.defineProperty(fn, 'adapterName', {value}); } }); var adapters = { getAdapter: (adapters) => { adapters = utils.isArray(adapters) ? adapters : [adapters]; const {length} = adapters; let nameOrAdapter; let adapter; for (let i = 0; i < length; i++) { nameOrAdapter = adapters[i]; if((adapter = utils.isString(nameOrAdapter) ? knownAdapters[nameOrAdapter.toLowerCase()] : nameOrAdapter)) { break; } } if (!adapter) { if (adapter === false) { throw new AxiosError( `Adapter ${nameOrAdapter} is not supported by the environment`, 'ERR_NOT_SUPPORT' ); } throw new Error( utils.hasOwnProp(knownAdapters, nameOrAdapter) ? `Adapter '${nameOrAdapter}' is not available in the build` : `Unknown adapter '${nameOrAdapter}'` ); } if (!utils.isFunction(adapter)) { throw new TypeError('adapter is not a function'); } return adapter; }, adapters: knownAdapters }; /** * Throws a `CanceledError` if cancellation has been requested. * * @param {Object} config The config that is to be used for the request * * @returns {void} */ function throwIfCancellationRequested(config) { if (config.cancelToken) { config.cancelToken.throwIfRequested(); } if (config.signal && config.signal.aborted) { throw new CanceledError(null, config); } } /** * Dispatch a request to the server using the configured adapter. * * @param {object} config The config that is to be used for the request * * @returns {Promise} The Promise to be fulfilled */ function dispatchRequest(config) { throwIfCancellationRequested(config); config.headers = AxiosHeaders$1.from(config.headers); // Transform request data config.data = transformData.call( config, config.transformRequest ); if (['post', 'put', 'patch'].indexOf(config.method) !== -1) { config.headers.setContentType('application/x-www-form-urlencoded', false); } const adapter = adapters.getAdapter(config.adapter || defaults$4.adapter); return adapter(config).then(function onAdapterResolution(response) { throwIfCancellationRequested(config); // Transform response data response.data = transformData.call( config, config.transformResponse, response ); response.headers = AxiosHeaders$1.from(response.headers); return response; }, function onAdapterRejection(reason) { if (!isCancel(reason)) { throwIfCancellationRequested(config); // Transform response data if (reason && reason.response) { reason.response.data = transformData.call( config, config.transformResponse, reason.response ); reason.response.headers = AxiosHeaders$1.from(reason.response.headers); } } return Promise.reject(reason); }); } const headersToObject = (thing) => thing instanceof AxiosHeaders$1 ? thing.toJSON() : thing; /** * Config-specific merge-function which creates a new config-object * by merging two configuration objects together. * * @param {Object} config1 * @param {Object} config2 * * @returns {Object} New object resulting from merging config2 to config1 */ function mergeConfig(config1, config2) { // eslint-disable-next-line no-param-reassign config2 = config2 || {}; const config = {}; function getMergedValue(target, source, caseless) { if (utils.isPlainObject(target) && utils.isPlainObject(source)) { return utils.merge.call({caseless}, target, source); } else if (utils.isPlainObject(source)) { return utils.merge({}, source); } else if (utils.isArray(source)) { return source.slice(); } return source; } // eslint-disable-next-line consistent-return function mergeDeepProperties(a, b, caseless) { if (!utils.isUndefined(b)) { return getMergedValue(a, b, caseless); } else if (!utils.isUndefined(a)) { return getMergedValue(undefined, a, caseless); } } // eslint-disable-next-line consistent-return function valueFromConfig2(a, b) { if (!utils.isUndefined(b)) { return getMergedValue(undefined, b); } } // eslint-disable-next-line consistent-return function defaultToConfig2(a, b) { if (!utils.isUndefined(b)) { return getMergedValue(undefined, b); } else if (!utils.isUndefined(a)) { return getMergedValue(undefined, a); } } // eslint-disable-next-line consistent-return function mergeDirectKeys(a, b, prop) { if (prop in config2) { return getMergedValue(a, b); } else if (prop in config1) { return getMergedValue(undefined, a); } } const mergeMap = { url: valueFromConfig2, method: valueFromConfig2, data: valueFromConfig2, baseURL: defaultToConfig2, transformRequest: defaultToConfig2, transformResponse: defaultToConfig2, paramsSerializer: defaultToConfig2, timeout: defaultToConfig2, timeoutMessage: defaultToConfig2, withCredentials: defaultToConfig2, adapter: defaultToConfig2, responseType: defaultToConfig2, xsrfCookieName: defaultToConfig2, xsrfHeaderName: defaultToConfig2, onUploadProgress: defaultToConfig2, onDownloadProgress: defaultToConfig2, decompress: defaultToConfig2, maxContentLength: defaultToConfig2, maxBodyLength: defaultToConfig2, beforeRedirect: defaultToConfig2, transport: defaultToConfig2, httpAgent: defaultToConfig2, httpsAgent: defaultToConfig2, cancelToken: defaultToConfig2, socketPath: defaultToConfig2, responseEncoding: defaultToConfig2, validateStatus: mergeDirectKeys, headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true) }; utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) { const merge = mergeMap[prop] || mergeDeepProperties; const configValue = merge(config1[prop], config2[prop], prop); (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); }); return config; } const VERSION = "1.3.4"; const validators$1 = {}; // eslint-disable-next-line func-names ['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => { validators$1[type] = function validator(thing) { return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; }; }); const deprecatedWarnings = {}; /** * Transitional option validator * * @param {function|boolean?} validator - set to false if the transitional option has been removed * @param {string?} version - deprecated version / removed since version * @param {string?} message - some message with additional info * * @returns {function} */ validators$1.transitional = function transitional(validator, version, message) { function formatMessage(opt, desc) { return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); } // eslint-disable-next-line func-names return (value, opt, opts) => { if (validator === false) { throw new AxiosError( formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), AxiosError.ERR_DEPRECATED ); } if (version && !deprecatedWarnings[opt]) { deprecatedWarnings[opt] = true; // eslint-disable-next-line no-console console.warn( formatMessage( opt, ' has been deprecated since v' + version + ' and will be removed in the near future' ) ); } return validator ? validator(value, opt, opts) : true; }; }; /** * Assert object's properties type * * @param {object} options * @param {object} schema * @param {boolean?} allowUnknown * * @returns {object} */ function assertOptions(options, schema, allowUnknown) { if (typeof options !== 'object') { throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE); } const keys = Object.keys(options); let i = keys.length; while (i-- > 0) { const opt = keys[i]; const validator = schema[opt]; if (validator) { const value = options[opt]; const result = value === undefined || validator(value, opt, options); if (result !== true) { throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE); } continue; } if (allowUnknown !== true) { throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION); } } } var validator = { assertOptions, validators: validators$1 }; const validators = validator.validators; /** * Create a new instance of Axios * * @param {Object} instanceConfig The default config for the instance * * @return {Axios} A new instance of Axios */ class Axios { constructor(instanceConfig) { this.defaults = instanceConfig; this.interceptors = { request: new InterceptorManager(), response: new InterceptorManager() }; } /** * Dispatch a request * * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) * @param {?Object} config * * @returns {Promise} The Promise to be fulfilled */ request(configOrUrl, config) { /*eslint no-param-reassign:0*/ // Allow for axios('example/url'[, config]) a la fetch API if (typeof configOrUrl === 'string') { config = config || {}; config.url = configOrUrl; } else { config = configOrUrl || {}; } config = mergeConfig(this.defaults, config); const {transitional, paramsSerializer, headers} = config; if (transitional !== undefined) { validator.assertOptions(transitional, { silentJSONParsing: validators.transitional(validators.boolean), forcedJSONParsing: validators.transitional(validators.boolean), clarifyTimeoutError: validators.transitional(validators.boolean) }, false); } if (paramsSerializer !== undefined) { validator.assertOptions(paramsSerializer, { encode: validators.function, serialize: validators.function }, true); } // Set config.method config.method = (config.method || this.defaults.method || 'get').toLowerCase(); let contextHeaders; // Flatten headers contextHeaders = headers && utils.merge( headers.common, headers[config.method] ); contextHeaders && utils.forEach( ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], (method) => { delete headers[method]; } ); config.headers = AxiosHeaders$1.concat(contextHeaders, headers); // filter out skipped interceptors const requestInterceptorChain = []; let synchronousRequestInterceptors = true; this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { return; } synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); }); const responseInterceptorChain = []; this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); }); let promise; let i = 0; let len; if (!synchronousRequestInterceptors) { const chain = [dispatchRequest.bind(this), undefined]; chain.unshift.apply(chain, requestInterceptorChain); chain.push.apply(chain, responseInterceptorChain); len = chain.length; promise = Promise.resolve(config); while (i < len) { promise = promise.then(chain[i++], chain[i++]); } return promise; } len = requestInterceptorChain.length; let newConfig = config; i = 0; while (i < len) { const onFulfilled = requestInterceptorChain[i++]; const onRejected = requestInterceptorChain[i++]; try { newConfig = onFulfilled(newConfig); } catch (error) { onRejected.call(this, error); break; } } try { promise = dispatchRequest.call(this, newConfig); } catch (error) { return Promise.reject(error); } i = 0; len = responseInterceptorChain.length; while (i < len) { promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]); } return promise; } getUri(config) { config = mergeConfig(this.defaults, config); const fullPath = buildFullPath(config.baseURL, config.url); return buildURL(fullPath, config.params, config.paramsSerializer); } } // Provide aliases for supported request methods utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { /*eslint func-names:0*/ Axios.prototype[method] = function(url, config) { return this.request(mergeConfig(config || {}, { method, url, data: (config || {}).data })); }; }); utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { /*eslint func-names:0*/ function generateHTTPMethod(isForm) { return function httpMethod(url, data, config) { return this.request(mergeConfig(config || {}, { method, headers: isForm ? { 'Content-Type': 'multipart/form-data' } : {}, url, data })); }; } Axios.prototype[method] = generateHTTPMethod(); Axios.prototype[method + 'Form'] = generateHTTPMethod(true); }); var Axios$1 = Axios; /** * A `CancelToken` is an object that can be used to request cancellation of an operation. * * @param {Function} executor The executor function. * * @returns {CancelToken} */ class CancelToken { constructor(executor) { if (typeof executor !== 'function') { throw new TypeError('executor must be a function.'); } let resolvePromise; this.promise = new Promise(function promiseExecutor(resolve) { resolvePromise = resolve; }); const token = this; // eslint-disable-next-line func-names this.promise.then(cancel => { if (!token._listeners) return; let i = token._listeners.length; while (i-- > 0) { token._listeners[i](cancel); } token._listeners = null; }); // eslint-disable-next-line func-names this.promise.then = onfulfilled => { let _resolve; // eslint-disable-next-line func-names const promise = new Promise(resolve => { token.subscribe(resolve); _resolve = resolve; }).then(onfulfilled); promise.cancel = function reject() { token.unsubscribe(_resolve); }; return promise; }; executor(function cancel(message, config, request) { if (token.reason) { // Cancellation has already been requested return; } token.reason = new CanceledError(message, config, request); resolvePromise(token.reason); }); } /** * Throws a `CanceledError` if cancellation has been requested. */ throwIfRequested() { if (this.reason) { throw this.reason; } } /** * Subscribe to the cancel signal */ subscribe(listener) { if (this.reason) { listener(this.reason); return; } if (this._listeners) { this._listeners.push(listener); } else { this._listeners = [listener]; } } /** * Unsubscribe from the cancel signal */ unsubscribe(listener) { if (!this._listeners) { return; } const index = this._listeners.indexOf(listener); if (index !== -1) { this._listeners.splice(index, 1); } } /** * Returns an object that contains a new `CancelToken` and a function that, when called, * cancels the `CancelToken`. */ static source() { let cancel; const token = new CancelToken(function executor(c) { cancel = c; }); return { token, cancel }; } } var CancelToken$1 = CancelToken; /** * Syntactic sugar for invoking a function and expanding an array for arguments. * * Common use case would be to use `Function.prototype.apply`. * * ```js * function f(x, y, z) {} * var args = [1, 2, 3]; * f.apply(null, args); * ``` * * With `spread` this example can be re-written. * * ```js * spread(function(x, y, z) {})([1, 2, 3]); * ``` * * @param {Function} callback * * @returns {Function} */ function spread(callback) { return function wrap(arr) { return callback.apply(null, arr); }; } /** * Determines whether the payload is an error thrown by Axios * * @param {*} payload The value to test * * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false */ function isAxiosError(payload) { return utils.isObject(payload) && (payload.isAxiosError === true); } const HttpStatusCode = { Continue: 100, SwitchingProtocols: 101, Processing: 102, EarlyHints: 103, Ok: 200, Created: 201, Accepted: 202, NonAuthoritativeInformation: 203, NoContent: 204, ResetContent: 205, PartialContent: 206, MultiStatus: 207, AlreadyReported: 208, ImUsed: 226, MultipleChoices: 300, MovedPermanently: 301, Found: 302, SeeOther: 303, NotModified: 304, UseProxy: 305, Unused: 306, TemporaryRedirect: 307, PermanentRedirect: 308, BadRequest: 400, Unauthorized: 401, PaymentRequired: 402, Forbidden: 403, NotFound: 404, MethodNotAllowed: 405, NotAcceptable: 406, ProxyAuthenticationRequired: 407, RequestTimeout: 408, Conflict: 409, Gone: 410, LengthRequired: 411, PreconditionFailed: 412, PayloadTooLarge: 413, UriTooLong: 414, UnsupportedMediaType: 415, RangeNotSatisfiable: 416, ExpectationFailed: 417, ImATeapot: 418, MisdirectedRequest: 421, UnprocessableEntity: 422, Locked: 423, FailedDependency: 424, TooEarly: 425, UpgradeRequired: 426, PreconditionRequired: 428, TooManyRequests: 429, RequestHeaderFieldsTooLarge: 431, UnavailableForLegalReasons: 451, InternalServerError: 500, NotImplemented: 501, BadGateway: 502, ServiceUnavailable: 503, GatewayTimeout: 504, HttpVersionNotSupported: 505, VariantAlsoNegotiates: 506, InsufficientStorage: 507, LoopDetected: 508, NotExtended: 510, NetworkAuthenticationRequired: 511, }; Object.entries(HttpStatusCode).forEach(([key, value]) => { HttpStatusCode[value] = key; }); var HttpStatusCode$1 = HttpStatusCode; /** * Create an instance of Axios * * @param {Object} defaultConfig The default config for the instance * * @returns {Axios} A new instance of Axios */ function createInstance(defaultConfig) { const context = new Axios$1(defaultConfig); const instance = bind(Axios$1.prototype.request, context); // Copy axios.prototype to instance utils.extend(instance, Axios$1.prototype, context, {allOwnKeys: true}); // Copy context to instance utils.extend(instance, context, null, {allOwnKeys: true}); // Factory for creating new instances instance.create = function create(instanceConfig) { return createInstance(mergeConfig(defaultConfig, instanceConfig)); }; return instance; } // Create the default instance to be exported const axios = createInstance(defaults$4); // Expose Axios class to allow class inheritance axios.Axios = Axios$1; // Expose Cancel & CancelToken axios.CanceledError = CanceledError; axios.CancelToken = CancelToken$1; axios.isCancel = isCancel; axios.VERSION = VERSION; axios.toFormData = toFormData; // Expose AxiosError class axios.AxiosError = AxiosError; // alias for CanceledError for backward compatibility axios.Cancel = axios.CanceledError; // Expose all/spread axios.all = function all(promises) { return Promise.all(promises); }; axios.spread = spread; // Expose isAxiosError axios.isAxiosError = isAxiosError; // Expose mergeConfig axios.mergeConfig = mergeConfig; axios.AxiosHeaders = AxiosHeaders$1; axios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing); axios.HttpStatusCode = HttpStatusCode$1; axios.default = axios; let globalAny$1 = {}; try { globalAny$1 = window; } catch (error) { if (!(error instanceof ReferenceError)) { throw error; } else { globalAny$1 = { isOnServer: true }; } } finally { if (!globalAny$1) { globalAny$1 = { isOnServer: true }; } } /** * Type of an [axios request]{@link https://github.com/axios/axios/blob/master/index.d.ts#L43} * * @typedef {object} AxiosRequestConfig * @alias AxiosRequestConfig * @memberof ApiClient * @see https://github.com/axios/axios/blob/master/index.d.ts#L43 */ const checkResponse = response => { if (globalAny$1.isOnServer) { return; } const loginUrl = [globalAny$1.location.origin, globalAny$1.REDUX_STATE.paths.loginPath].join(''); // if response has redirect to loginUrl if (response.request.responseURL && response.request.responseURL.match(loginUrl)) { // eslint-disable-next-line no-undef, no-alert alert('Your session expired. You will be redirected to login screen'); globalAny$1.location.assign(loginUrl); } }; /** * Extends {@link AxiosRequestConfig} * * @alias ActionAPIParams * @memberof ApiClient * @property {any} ... any property supported by {@link AxiosRequestConfig} */ /** * Extends {@link ActionAPIParams} * * @alias ResourceActionAPIParams * @memberof ApiClient * @property {any} ... any property supported by {@link AxiosRequestConfig} */ /** * Extends {@link ActionAPIParams} * * @alias RecordActionAPIParams * @memberof ApiClient * @property {any} ... any property supported by {@link ActionAPIParams} */ /** * Extends {@link ActionAPIParams} * * @alias BulkActionAPIParams * @memberof ApiClient * @see https://github.com/axios/axios/blob/master/index.d.ts#L43 * @property {any} ... any property supported by {@link ActionAPIParams} */ /** * Extends {@link AxiosRequestConfig} * * @alias GetPageAPIParams * @memberof ApiClient * @property {any} ... any property supported by {@link AxiosRequestConfig} */ /** * Client which access the admin API. * Use it to fetch data from auto generated AdminJS API. * * In the backend it uses [axios](https://github.com/axios/axios) client * library. * * Usage: * ```javascript * import { ApiClient } from 'adminjs' * * const api = new ApiClient() * // fetching all records * api.resourceAction({ resourceId: 'Comments', actionName: 'list' }).then(results => {...}) * ``` * @see https://github.com/axios/axios * @hideconstructor */ class ApiClient { constructor() { this.baseURL = ApiClient.getBaseUrl(); this.client = axios.create({ baseURL: this.baseURL }); } static getBaseUrl() { if (globalAny$1.isOnServer) { return ''; } return [globalAny$1.location.origin, globalAny$1.REDUX_STATE?.paths.rootPath].join(''); } /** * Search by query string for records in a given resource. * * @param {Object} options * @param {String} options.resourceId id of a {@link ResourceJSON} * @param {String} options.query query string * @param {String} options.searchProperty optional property name * * @return {Promise<SearchResponse>} */ async searchRecords({ resourceId, query, searchProperty }) { if (globalAny$1.isOnServer) { return []; } const actionName = 'search'; const response = await this.resourceAction({ resourceId, actionName, query, ...(searchProperty ? { params: { searchProperty } } : undefined) }); checkResponse(response); return response.data.records; } /** * Invokes given resource {@link Action} on the backend. * * @param {ResourceActionAPIParams} options * @return {Promise<ActionResponse>} response from an {@link Action} */ async resourceAction(options) { const { resourceId, actionName, data, query, ...axiosParams } = options; let url = `/api/resources/${resourceId}/actions/${actionName}`; if (query) { const q = encodeURIComponent(query); url = [url, q].join('/'); } const response = await this.client.request({ url, method: data ? 'POST' : 'GET', ...axiosParams, data }); checkResponse(response); return response; } /** * Invokes given record {@link Action} on the backend. * * @param {RecordActionAPIParams} options * @return {Promise<RecordActionResponse>} response from an {@link Action} */ async recordAction(options) { const { resourceId, recordId, actionName, data, ...axiosParams } = options; const response = await this.client.request({ url: `/api/resources/${resourceId}/records/${recordId}/${actionName}`, method: data ? 'POST' : 'GET', ...axiosParams, data }); checkResponse(response); return response; } /** * Invokes given bulk {@link Action} on the backend. * * @param {BulkActionAPIParams} options * @return {Promise<BulkActionResponse>} response from an {@link Action} */ async bulkAction(options) { const { resourceId, recordIds, actionName, data, ...axiosParams } = options; const params = new URLSearchParams(); params.set('recordIds', (recordIds || []).join(',')); const response = await this.client.request({ url: `/api/resources/${resourceId}/bulk/${actionName}`, method: data ? 'POST' : 'GET', ...axiosParams, data, params }); checkResponse(response); return response; } /** * Invokes dashboard handler. * * @param {AxiosRequestConfig} options * @return {Promise<AxiosResponse<any>>} response from the handler function defined in * {@link AdminJSOptions#dashboard} */ async getDashboard(options = {}) { const response = await this.client.get('/api/dashboard', options); checkResponse(response); return response; } /** * Invokes handler function of given page and returns its response. * * @param {GetPageAPIParams} options * @return {Promise<AxiosResponse<any>>} response from the handler of given page * defined in {@link AdminJSOptions#pages} */ async getPage(options) { const { pageName, ...axiosParams } = options; const response = await this.client.request({ url: `/api/pages/${pageName}`, ...axiosParams }); checkResponse(response); return response; } async refreshToken(data) { const response = await this.client.request({ url: '/refresh-token', method: 'POST', data }); checkResponse(response); return response; } } /* eslint-disable max-len */ const getDataCss = (...args) => args.join('-'); const getResourceElementCss = (resourceId, suffix) => getDataCss(resourceId, suffix); const getActionElementCss = (resourceId, actionName, suffix) => getDataCss(resourceId, actionName, suffix); const api$4 = new ApiClient(); function callActionApi(action, params, search) { let promise; const { recordId, recordIds, resourceId } = params; /* Temporary workaround to avoid breaking changes. TODO: For v8 release, rewrite actions to support PUT & DELETE methods. Actions should have an option to configure a default method for action buttons. */ let method = 'get'; if (action.name === 'delete') { method = 'post'; } switch (action.actionType) { case 'record': if (!recordId) { throw new Error('You have to specify "recordId" for record action'); } promise = api$4.recordAction({ resourceId, actionName: action.name, recordId, search, method }); break; case 'resource': promise = api$4.resourceAction({ resourceId, actionName: action.name, method }); break; case 'bulk': if (!recordIds) { throw new Error('You have to specify "recordIds" for bulk action'); } promise = api$4.bulkAction({ resourceId, actionName: action.name, recordIds, search, method }); break; default: throw new Error('"actionType" should be either record, resource or bulk'); } return promise; } /* eslint-disable arrow-parens */ const buildActionCallApiTrigger = options => { const { action, params, actionResponseHandler, search } = options; const callApi = () => { const promise = callActionApi(action, params, search); promise.then(actionResponseHandler).catch(error => { throw error; }); return promise; }; return callApi; }; const buildActionTestId = action => `action-${action.name}`; const REFRESH_KEY = 'refresh'; const IGNORE_PARAMS_KEY = 'ignore_params'; /** * Adds refresh=true to the url, which in turn should cause list to reload. * * @param {string} url url to which function should add `refresh` * @param {string} [search] optional search query which should be updated, * if not given function will use window.location.search * @private */ const appendForceRefresh = (url, search) => { const searchParamsIdx = url.lastIndexOf('?'); const urlSearchParams = searchParamsIdx !== -1 ? url.substring(searchParamsIdx + 1) : null; const oldParams = new URLSearchParams(search ?? urlSearchParams ?? window.location.search ?? ''); const shouldIgnoreOldParams = new URLSearchParams(urlSearchParams || '').get(IGNORE_PARAMS_KEY) === 'true'; const newParams = shouldIgnoreOldParams ? new URLSearchParams('') : new URLSearchParams(oldParams.toString()); newParams.set(REFRESH_KEY, 'true'); const newUrl = searchParamsIdx !== -1 ? url.substring(0, searchParamsIdx) : url; return `${newUrl}?${newParams.toString()}`; }; const hasForceRefresh = search => { const params = new URLSearchParams(search); return !!params.get(REFRESH_KEY); }; const removeForceRefresh = search => { const params = new URLSearchParams(search); if (params.get(REFRESH_KEY)) { params.delete(REFRESH_KEY); } return params.toString(); }; /* eslint-disable no-restricted-globals */ /* eslint-disable no-undef */ /* eslint-disable no-alert */ const buildActionClickHandler = options => { const { action, params, actionResponseHandler, navigate, modalFunctions, location } = options; const { openModal } = modalFunctions; const handleActionClick = event => { event.preventDefault(); event.stopPropagation(); const href = actionHref(action, params); const callApi = buildActionCallApiTrigger({ params, action, actionResponseHandler }); // Action has "component" option set to "false" explicitly in it's configuration if (actionHasDisabledComponent(action)) { if (action.guard) { const modalData = { modalProps: { variant: 'danger', label: 'confirm', title: action.guard, subTitle: '' }, type: 'confirm', resourceId: params.resourceId, confirmAction: callApi }; // If confirmation is required, action trigger should be handled in modal openModal(modalData); return; } // If no confirmation is required, call API callApi(); return; } // Default behaviour - you're navigated to action URL and logic is performed on it's route if (href) { const url = new URL(`relative:${href}`); const hrefParams = new URLSearchParams(url.search); const currentParams = new URLSearchParams(action.showInDrawer ? location?.search ?? '' : ''); Object.entries(Object.fromEntries(currentParams.entries())).forEach(([key, value]) => { if (!hrefParams.has(key)) hrefParams.set(key, value); }); if (location?.pathname === url.pathname) { hrefParams.set(REFRESH_KEY, 'true'); } navigate({ pathname: url.pathname, search: hrefParams.toString() }); } }; return handleActionClick; }; const isBulkAction = (params, action) => 'recordIds' in params && action.actionType === 'bulk'; const isResourceAction = (params, action) => 'recordIds' in params && action.actionType === 'resource'; const isRecordAction = (params, action) => 'recordId' in params && action.actionType === 'record'; var ActionUtils = /*#__PURE__*/Object.freeze({ __proto__: null, actionHasCustomComponent: actionHasCustomComponent, actionHasDisabledComponent: actionHasDisabledComponent, actionHref: actionHref, buildActionCallApiTrigger: buildActionCallApiTrigger, buildActionClickHandler: buildActionClickHandler, buildActionTestId: buildActionTestId, callActionApi: callActionApi, isBulkAction: isBulkAction, isRecordAction: isRecordAction, isResourceAction: isResourceAction }); const ADD_NOTICE = 'ADD_NOTICE'; const addNotice = data => ({ type: ADD_NOTICE, data: { id: `notice-${Date.now() + Math.random()}`, progress: 0, ...data } }); /** * @memberof useNotice * @alias AddNotice */ /** * @classdesc * Hook which allows you to add notice message to the app. * * ```javascript * import { useNotice, Button } from 'adminjs' * * const myComponent = () => { * const sendNotice = useNotice() * return ( * <Button onClick={() => sendNotice({ message: 'I am awesome' })}>I am awesome</Button> * ) * } * ``` * * @class * @subcategory Hooks * @bundle * @hideconstructor */ const useNotice = () => { const dispatch = require$$3.useDispatch(); return notice => dispatch(addNotice(notice)); }; /* eslint-disable @typescript-eslint/explicit-function-return-type */ const useActionResponseHandler = onActionCall => { const location = reactRouter.useLocation(); const navigate = reactRouter.useNavigate(); const addNotice = useNotice(); return response => { const { data } = response; if (data.notice) { addNotice(data.notice); } if (data.redirectUrl && location.pathname !== data.redirectUrl) { const appended = appendForceRefresh(data.redirectUrl); navigate(appended); } if (onActionCall) { onActionCall(data); } }; }; /** * A specialized version of `_.reduce` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {*} [accumulator] The initial value. * @param {boolean} [initAccum] Specify using the first element of `array` as * the initial value. * @returns {*} Returns the accumulated value. */ function arrayReduce$1(array, iteratee, accumulator, initAccum) { var index = -1, length = array == null ? 0 : array.length; if (initAccum && length) { accumulator = array[++index]; } while (++index < length) { accumulator = iteratee(accumulator, array[index], index, array); } return accumulator; } var _arrayReduce = arrayReduce$1; /** * The base implementation of `_.propertyOf` without support for deep paths. * * @private * @param {Object} object The object to query. * @returns {Function} Returns the new accessor function. */ function basePropertyOf$1(object) { return function(key) { return object == null ? undefined : object[key]; }; } var _basePropertyOf = basePropertyOf$1; var basePropertyOf = _basePropertyOf; /** Used to map Latin Unicode letters to basic Latin letters. */ var deburredLetters = { // Latin-1 Supplement block. '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', '\xc7': 'C', '\xe7': 'c', '\xd0': 'D', '\xf0': 'd', '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', '\xd1': 'N', '\xf1': 'n', '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', '\xc6': 'Ae', '\xe6': 'ae', '\xde': 'Th', '\xfe': 'th', '\xdf': 'ss', // Latin Extended-A block. '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', '\u0134': 'J', '\u0135': 'j', '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', '\u0163': 't', '\u0165': 't', '\u0167': 't', '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', '\u0174': 'W', '\u0175': 'w', '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', '\u0132': 'IJ', '\u0133': 'ij', '\u0152': 'Oe', '\u0153': 'oe', '\u0149': "'n", '\u017f': 's' }; /** * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A * letters to basic Latin letters. * * @private * @param {string} letter The matched letter to deburr. * @returns {string} Returns the deburred letter. */ var deburrLetter$1 = basePropertyOf(deburredLetters); var _deburrLetter = deburrLetter$1; /** Detect free variable `global` from Node.js. */ var freeGlobal$1 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; var _freeGlobal = freeGlobal$1; var freeGlobal = _freeGlobal; /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root$8 = freeGlobal || freeSelf || Function('return this')(); var _root = root$8; var root$7 = _root; /** Built-in value references. */ var Symbol$6 = root$7.Symbol; var _Symbol = Symbol$6; /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap$4(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } var _arrayMap = arrayMap$4; /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray$a = Array.isArray; var isArray_1 = isArray$a; var Symbol$5 = _Symbol; /** Used for built-in method references. */ var objectProto$e = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$b = objectProto$e.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString$1 = objectProto$e.toString; /** Built-in value references. */ var symToStringTag$1 = Symbol$5 ? Symbol$5.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag$1(value) { var isOwn = hasOwnProperty$b.call(value, symToStringTag$1), tag = value[symToStringTag$1]; try { value[symToStringTag$1] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString$1.call(value); if (unmasked) { if (isOwn) { value[symToStringTag$1] = tag; } else { delete value[symToStringTag$1]; } } return result; } var _getRawTag = getRawTag$1; /** Used for built-in method references. */ var objectProto$d = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto$d.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString$1(value) { return nativeObjectToString.call(value); } var _objectToString = objectToString$1; var Symbol$4 = _Symbol, getRawTag = _getRawTag, objectToString = _objectToString; /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var symToStringTag = Symbol$4 ? Symbol$4.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag$7(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return (symToStringTag && symToStringTag in Object(value)) ? getRawTag(value) : objectToString(value); } var _baseGetTag = baseGetTag$7; /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike$8(value) { return value != null && typeof value == 'object'; } var isObjectLike_1 = isObjectLike$8; var baseGetTag$6 = _baseGetTag, isObjectLike$7 = isObjectLike_1; /** `Object#toString` result references. */ var symbolTag$1 = '[object Symbol]'; /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol$4(value) { return typeof value == 'symbol' || (isObjectLike$7(value) && baseGetTag$6(value) == symbolTag$1); } var isSymbol_1 = isSymbol$4; var Symbol$3 = _Symbol, arrayMap$3 = _arrayMap, isArray$9 = isArray_1, isSymbol$3 = isSymbol_1; /** Used as references for various `Number` constants. */ var INFINITY$2 = 1 / 0; /** Used to convert symbols to primitives and strings. */ var symbolProto$1 = Symbol$3 ? Symbol$3.prototype : undefined, symbolToString = symbolProto$1 ? symbolProto$1.toString : undefined; /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */ function baseToString$2(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } if (isArray$9(value)) { // Recursively convert values (susceptible to call stack limits). return arrayMap$3(value, baseToString$2) + ''; } if (isSymbol$3(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY$2) ? '-0' : result; } var _baseToString = baseToString$2; var baseToString$1 = _baseToString; /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {string} Returns the converted string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString$5(value) { return value == null ? '' : baseToString$1(value); } var toString_1 = toString$5; var deburrLetter = _deburrLetter, toString$4 = toString_1; /** Used to match Latin Unicode letters (excluding mathematical operators). */ var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; /** Used to compose unicode character classes. */ var rsComboMarksRange$4 = '\\u0300-\\u036f', reComboHalfMarksRange$4 = '\\ufe20-\\ufe2f', rsComboSymbolsRange$4 = '\\u20d0-\\u20ff', rsComboRange$4 = rsComboMarksRange$4 + reComboHalfMarksRange$4 + rsComboSymbolsRange$4; /** Used to compose unicode capture groups. */ var rsCombo$3 = '[' + rsComboRange$4 + ']'; /** * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). */ var reComboMark = RegExp(rsCombo$3, 'g'); /** * Deburrs `string` by converting * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) * letters to basic Latin letters and removing * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). * * @static * @memberOf _ * @since 3.0.0 * @category String * @param {string} [string=''] The string to deburr. * @returns {string} Returns the deburred string. * @example * * _.deburr('déjà vu'); * // => 'deja vu' */ function deburr$1(string) { string = toString$4(string); return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); } var deburr_1 = deburr$1; /** Used to match words composed of alphanumeric characters. */ var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; /** * Splits an ASCII `string` into an array of its words. * * @private * @param {string} The string to inspect. * @returns {Array} Returns the words of `string`. */ function asciiWords$1(string) { return string.match(reAsciiWord) || []; } var _asciiWords = asciiWords$1; /** Used to detect strings that need a more robust regexp to match words. */ var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; /** * Checks if `string` contains a word composed of Unicode symbols. * * @private * @param {string} string The string to inspect. * @returns {boolean} Returns `true` if a word is found, else `false`. */ function hasUnicodeWord$1(string) { return reHasUnicodeWord.test(string); } var _hasUnicodeWord = hasUnicodeWord$1; /** Used to compose unicode character classes. */ var rsAstralRange$3 = '\\ud800-\\udfff', rsComboMarksRange$3 = '\\u0300-\\u036f', reComboHalfMarksRange$3 = '\\ufe20-\\ufe2f', rsComboSymbolsRange$3 = '\\u20d0-\\u20ff', rsComboRange$3 = rsComboMarksRange$3 + reComboHalfMarksRange$3 + rsComboSymbolsRange$3, rsDingbatRange = '\\u2700-\\u27bf', rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', rsPunctuationRange = '\\u2000-\\u206f', rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', rsVarRange$3 = '\\ufe0e\\ufe0f', rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; /** Used to compose unicode capture groups. */ var rsApos$1 = "['\u2019]", rsBreak = '[' + rsBreakRange + ']', rsCombo$2 = '[' + rsComboRange$3 + ']', rsDigits = '\\d+', rsDingbat = '[' + rsDingbatRange + ']', rsLower = '[' + rsLowerRange + ']', rsMisc = '[^' + rsAstralRange$3 + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', rsFitz$2 = '\\ud83c[\\udffb-\\udfff]', rsModifier$2 = '(?:' + rsCombo$2 + '|' + rsFitz$2 + ')', rsNonAstral$2 = '[^' + rsAstralRange$3 + ']', rsRegional$2 = '(?:\\ud83c[\\udde6-\\uddff]){2}', rsSurrPair$2 = '[\\ud800-\\udbff][\\udc00-\\udfff]', rsUpper = '[' + rsUpperRange + ']', rsZWJ$3 = '\\u200d'; /** Used to compose unicode regexes. */ var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', rsOptContrLower = '(?:' + rsApos$1 + '(?:d|ll|m|re|s|t|ve))?', rsOptContrUpper = '(?:' + rsApos$1 + '(?:D|LL|M|RE|S|T|VE))?', reOptMod$2 = rsModifier$2 + '?', rsOptVar$2 = '[' + rsVarRange$3 + ']?', rsOptJoin$2 = '(?:' + rsZWJ$3 + '(?:' + [rsNonAstral$2, rsRegional$2, rsSurrPair$2].join('|') + ')' + rsOptVar$2 + reOptMod$2 + ')*', rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', rsSeq$2 = rsOptVar$2 + reOptMod$2 + rsOptJoin$2, rsEmoji = '(?:' + [rsDingbat, rsRegional$2, rsSurrPair$2].join('|') + ')' + rsSeq$2; /** Used to match complex or compound words. */ var reUnicodeWord = RegExp([ rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, rsUpper + '+' + rsOptContrUpper, rsOrdUpper, rsOrdLower, rsDigits, rsEmoji ].join('|'), 'g'); /** * Splits a Unicode `string` into an array of its words. * * @private * @param {string} The string to inspect. * @returns {Array} Returns the words of `string`. */ function unicodeWords$1(string) { return string.match(reUnicodeWord) || []; } var _unicodeWords = unicodeWords$1; var asciiWords = _asciiWords, hasUnicodeWord = _hasUnicodeWord, toString$3 = toString_1, unicodeWords = _unicodeWords; /** * Splits `string` into an array of its words. * * @static * @memberOf _ * @since 3.0.0 * @category String * @param {string} [string=''] The string to inspect. * @param {RegExp|string} [pattern] The pattern to match words. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {Array} Returns the words of `string`. * @example * * _.words('fred, barney, & pebbles'); * // => ['fred', 'barney', 'pebbles'] * * _.words('fred, barney, & pebbles', /[^, ]+/g); * // => ['fred', 'barney', '&', 'pebbles'] */ function words$1(string, pattern, guard) { string = toString$3(string); pattern = guard ? undefined : pattern; if (pattern === undefined) { return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); } return string.match(pattern) || []; } var words_1 = words$1; var arrayReduce = _arrayReduce, deburr = deburr_1, words = words_1; /** Used to compose unicode capture groups. */ var rsApos = "['\u2019]"; /** Used to match apostrophes. */ var reApos = RegExp(rsApos, 'g'); /** * Creates a function like `_.camelCase`. * * @private * @param {Function} callback The function to combine each word. * @returns {Function} Returns the new compounder function. */ function createCompounder$1(callback) { return function(string) { return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); }; } var _createCompounder = createCompounder$1; /** * The base implementation of `_.slice` without an iteratee call guard. * * @private * @param {Array} array The array to slice. * @param {number} [start=0] The start position. * @param {number} [end=array.length] The end position. * @returns {Array} Returns the slice of `array`. */ function baseSlice$1(array, start, end) { var index = -1, length = array.length; if (start < 0) { start = -start > length ? 0 : (length + start); } end = end > length ? length : end; if (end < 0) { end += length; } length = start > end ? 0 : ((end - start) >>> 0); start >>>= 0; var result = Array(length); while (++index < length) { result[index] = array[index + start]; } return result; } var _baseSlice = baseSlice$1; var baseSlice = _baseSlice; /** * Casts `array` to a slice if it's needed. * * @private * @param {Array} array The array to inspect. * @param {number} start The start position. * @param {number} [end=array.length] The end position. * @returns {Array} Returns the cast slice. */ function castSlice$2(array, start, end) { var length = array.length; end = end === undefined ? length : end; return (!start && end >= length) ? array : baseSlice(array, start, end); } var _castSlice = castSlice$2; /** Used to compose unicode character classes. */ var rsAstralRange$2 = '\\ud800-\\udfff', rsComboMarksRange$2 = '\\u0300-\\u036f', reComboHalfMarksRange$2 = '\\ufe20-\\ufe2f', rsComboSymbolsRange$2 = '\\u20d0-\\u20ff', rsComboRange$2 = rsComboMarksRange$2 + reComboHalfMarksRange$2 + rsComboSymbolsRange$2, rsVarRange$2 = '\\ufe0e\\ufe0f'; /** Used to compose unicode capture groups. */ var rsZWJ$2 = '\\u200d'; /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ var reHasUnicode = RegExp('[' + rsZWJ$2 + rsAstralRange$2 + rsComboRange$2 + rsVarRange$2 + ']'); /** * Checks if `string` contains Unicode symbols. * * @private * @param {string} string The string to inspect. * @returns {boolean} Returns `true` if a symbol is found, else `false`. */ function hasUnicode$4(string) { return reHasUnicode.test(string); } var _hasUnicode = hasUnicode$4; /** * Converts an ASCII `string` to an array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the converted array. */ function asciiToArray$1(string) { return string.split(''); } var _asciiToArray = asciiToArray$1; /** Used to compose unicode character classes. */ var rsAstralRange$1 = '\\ud800-\\udfff', rsComboMarksRange$1 = '\\u0300-\\u036f', reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, rsVarRange$1 = '\\ufe0e\\ufe0f'; /** Used to compose unicode capture groups. */ var rsAstral$1 = '[' + rsAstralRange$1 + ']', rsCombo$1 = '[' + rsComboRange$1 + ']', rsFitz$1 = '\\ud83c[\\udffb-\\udfff]', rsModifier$1 = '(?:' + rsCombo$1 + '|' + rsFitz$1 + ')', rsNonAstral$1 = '[^' + rsAstralRange$1 + ']', rsRegional$1 = '(?:\\ud83c[\\udde6-\\uddff]){2}', rsSurrPair$1 = '[\\ud800-\\udbff][\\udc00-\\udfff]', rsZWJ$1 = '\\u200d'; /** Used to compose unicode regexes. */ var reOptMod$1 = rsModifier$1 + '?', rsOptVar$1 = '[' + rsVarRange$1 + ']?', rsOptJoin$1 = '(?:' + rsZWJ$1 + '(?:' + [rsNonAstral$1, rsRegional$1, rsSurrPair$1].join('|') + ')' + rsOptVar$1 + reOptMod$1 + ')*', rsSeq$1 = rsOptVar$1 + reOptMod$1 + rsOptJoin$1, rsSymbol$1 = '(?:' + [rsNonAstral$1 + rsCombo$1 + '?', rsCombo$1, rsRegional$1, rsSurrPair$1, rsAstral$1].join('|') + ')'; /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ var reUnicode$1 = RegExp(rsFitz$1 + '(?=' + rsFitz$1 + ')|' + rsSymbol$1 + rsSeq$1, 'g'); /** * Converts a Unicode `string` to an array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the converted array. */ function unicodeToArray$1(string) { return string.match(reUnicode$1) || []; } var _unicodeToArray = unicodeToArray$1; var asciiToArray = _asciiToArray, hasUnicode$3 = _hasUnicode, unicodeToArray = _unicodeToArray; /** * Converts `string` to an array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the converted array. */ function stringToArray$2(string) { return hasUnicode$3(string) ? unicodeToArray(string) : asciiToArray(string); } var _stringToArray = stringToArray$2; var castSlice$1 = _castSlice, hasUnicode$2 = _hasUnicode, stringToArray$1 = _stringToArray, toString$2 = toString_1; /** * Creates a function like `_.lowerFirst`. * * @private * @param {string} methodName The name of the `String` case method to use. * @returns {Function} Returns the new case function. */ function createCaseFirst$1(methodName) { return function(string) { string = toString$2(string); var strSymbols = hasUnicode$2(string) ? stringToArray$1(string) : undefined; var chr = strSymbols ? strSymbols[0] : string.charAt(0); var trailing = strSymbols ? castSlice$1(strSymbols, 1).join('') : string.slice(1); return chr[methodName]() + trailing; }; } var _createCaseFirst = createCaseFirst$1; var createCaseFirst = _createCaseFirst; /** * Converts the first character of `string` to upper case. * * @static * @memberOf _ * @since 4.0.0 * @category String * @param {string} [string=''] The string to convert. * @returns {string} Returns the converted string. * @example * * _.upperFirst('fred'); * // => 'Fred' * * _.upperFirst('FRED'); * // => 'FRED' */ var upperFirst$1 = createCaseFirst('toUpperCase'); var upperFirst_1 = upperFirst$1; var createCompounder = _createCompounder, upperFirst = upperFirst_1; /** * Converts `string` to * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). * * @static * @memberOf _ * @since 3.1.0 * @category String * @param {string} [string=''] The string to convert. * @returns {string} Returns the start cased string. * @example * * _.startCase('--foo-bar--'); * // => 'Foo Bar' * * _.startCase('fooBar'); * // => 'Foo Bar' * * _.startCase('__FOO_BAR__'); * // => 'FOO BAR' */ var startCase = createCompounder(function(result, word, index) { return result + (index ? ' ' : '') + upperFirst(word); }); var startCase_1 = startCase; var startCase$1 = /*@__PURE__*/getDefaultExportFromCjs(startCase_1); /** * @memberof TranslateFunctions * @alias TranslateFunction */ /** * Translate Functions are the helper functions which you can use to translate * your application. * * On the fronted they can be used with {@link useTranslation} hook. On the backend * they are injected to any {@link AdminJS} instance and {@link ActionContext}. */ const translate = (i18n, key, name, resourceId, options = {}) => { // cspell:disable-next-line if (i18n.language === 'cimode') return [key, name].join('.'); let realOptions = { ...options, defaultValue: options.defaultValue ?? startCase$1(name) }; let keys = [`${key}.${name}`]; if (resourceId && typeof resourceId !== 'string') { realOptions = resourceId; } else if (resourceId) { keys = [`resources.${resourceId}.${key}.${name}`, ...keys]; } return i18n.t(keys, realOptions); }; const createFunctions = i18n => { const translateAction = (actionName, resourceId, options) => translate(i18n, 'actions', actionName, resourceId, options); const translateButton = (buttonLabel, resourceId, options) => translate(i18n, 'buttons', buttonLabel, resourceId, options); const translateLabel = (label, resourceId, options) => translate(i18n, 'labels', label, resourceId, options); const translateProperty = (propertyName, resourceId, options) => translate(i18n, 'properties', propertyName, resourceId, options); const translateMessage = (messageName, resourceId, options) => translate(i18n, 'messages', messageName, resourceId, { ...options, defaultValue: options?.defaultValue ?? messageName }); const translateComponent = (messageName, resourceId, options) => translate(i18n, 'components', messageName, resourceId, options); const translatePage = (messageName, resourceId, options) => translate(i18n, 'pages', messageName, resourceId, options); return { translateAction, ta: translateAction, translateButton, tb: translateButton, translateLabel, tl: translateLabel, translateProperty, tp: translateProperty, translateMessage, tm: translateMessage, translateComponent, tc: translateComponent, translatePage, t: i18n.t, translate: i18n.t }; }; /** * Extends {@link TranslateFunctions}. Apart from that it also returns all the properties * defined below. * * ```javascript * import { useTranslation } from 'adminjs' * * const MyComponent = () => { * const { translateButton } = useTranslation() * * return ( * <Box> * <Button variant="contained" onClick={...}>{translateButton('save')}<Button> * </Box> * ) * } * ``` * * @memberof useTranslation * @alias UseTranslationResponse * * @property {TranslateFunction} ... All functions defined in {@link TranslateFunctions} */ /** * @classdesc * Extends the useTranslation hook from react-i18next library. * * Returns all the {@link TranslateFunctions} + methods returned by the original * useTranslation method from react-i18next like: `i18n` instance and `ready` flag. * * @class * @subcategory Hooks * @bundle * @hideconstructor * @returns {UseTranslationResponse} */ const useTranslation = () => { // eslint-disable-next-line no-shadow const { i18n, ...rest } = useTranslation$1(); const translateFunctions = createFunctions(i18n); return { ...rest, i18n, ...translateFunctions }; }; const DROP_NOTICE = 'DROP_NOTICE'; const dropNotice = noticeId => ({ type: 'DROP_NOTICE', data: { noticeId } }); const ASSETS_INITIALIZE = 'ASSETS_INITIALIZE'; const BRANDING_INITIALIZE = 'BRANDING_INITIALIZE'; const DASHBOARD_INITIALIZE = 'DASHBOARD_INITIALIZE'; const LOCALE_INITIALIZE = 'LOCALE_INITIALIZE'; const PAGES_INITIALIZE = 'PAGES_INITIALIZE'; const PATHS_INITIALIZE = 'PATHS_INITIALIZE'; const RESOURCES_INITIALIZE = 'RESOURCES_INITIALIZE'; const THEME_INITIALIZE = 'THEME_INITIALIZE'; const VERSIONS_INITIALIZE = 'VERSIONS_INITIALIZE'; const SHOW_MODAL = 'SHOW_MODAL'; const HIDE_MODAL = 'HIDE_MODAL'; const showModal = data => ({ type: SHOW_MODAL, data }); const hideModal = () => ({ type: HIDE_MODAL }); const INITIAL_ROUTE = 'INITIAL_ROUTE'; const ROUTE_CHANGED = 'ROUTE_CHANGED'; const initializeRoute = location => ({ type: ROUTE_CHANGED, data: location }); const changeRoute = location => ({ type: ROUTE_CHANGED, data: location }); const SESSION_INITIALIZE = 'SESSION_INITIALIZE'; const setCurrentAdmin = (data = null) => ({ type: SESSION_INITIALIZE, data }); const DRAWER_PREROUTE_SET = 'DRAWER_PREROUTE_SET'; const setDrawerPreRoute = data => ({ type: DRAWER_PREROUTE_SET, data }); const SET_NOTICE_PROGRESS = 'SET_NOTICE_PROGRESS'; const setNoticeProgress = data => ({ type: SET_NOTICE_PROGRESS, data }); const useModal = () => { const dispatch = require$$3.useDispatch(); const { translateButton, translateLabel, translateMessage } = useTranslation(); const closeModal = React$1.useCallback(() => { dispatch(hideModal()); }, []); const openModal = props => { const { modalProps, type, confirmAction, resourceId } = props; let buttons = modalProps.buttons || []; const handleConfirm = () => { closeModal(); if (confirmAction) confirmAction(); }; if (buttons.length) { buttons = buttons.map(button => { button.variant = button.variant || 'default'; if (button.label === 'cancel') { button.onClick = button.onClick || closeModal; } button.label = translateButton(button.label || '', resourceId); return button; }); } if (type === 'confirm') { buttons.push({ label: translateButton('cancel', resourceId), onClick: closeModal }); buttons.push({ label: translateButton('confirm', resourceId), variant: modalProps.variant || 'primary', onClick: handleConfirm }); } if (type === 'alert') { buttons.push({ label: translateButton('ok', resourceId), variant: 'primary', onClick: closeModal }); } const getDefaultTranslationKey = placement => `modal-${placement}`; const data = { modalProps: { ...modalProps, label: translateLabel(modalProps.label ?? getDefaultTranslationKey('label'), resourceId), title: translateMessage(modalProps.title ?? getDefaultTranslationKey('title'), resourceId), subTitle: translateMessage(modalProps.subTitle ?? getDefaultTranslationKey('subTitle'), resourceId), variant: modalProps.variant, buttons, onClose: modalProps.onClose || closeModal, onOverlayClick: modalProps.onOverlayClick || closeModal } }; dispatch(showModal(data)); }; return { openModal, closeModal }; }; /** * @load ./use-action.doc.md * @subcategory Hooks * * @param {ActionJSON} action action object * @param {ActionParams} params * @param {ActionCallCallback} onActionCall - callback triggered when action is performed * @return {UseActionResult} * @class * @hideconstructor */ function useAction(action, params, onActionCall) { const navigate = reactRouter.useNavigate(); const location = reactRouter.useLocation(); const translateFunctions = useTranslation(); const modalFunctions = useModal(); const actionResponseHandler = useActionResponseHandler(onActionCall); const href = actionHref(action, params); const callApi = buildActionCallApiTrigger({ action, params, actionResponseHandler }); const handleClick = buildActionClickHandler({ action, params, actionResponseHandler, navigate, translateFunctions, modalFunctions, location }); return { href, callApi, handleClick }; } /** * @classdesc * Hook which allows you to get and set currentAdmin * * ### Usage * * ```javascript * import { useCurrentAdmin } from 'adminjs' * * const myComponent = () => { * const [currentAdmin, setCurrentAdmin] = useCurrentAdmin() * // ... * } * ``` * * @class * @subcategory Hooks * @bundle * @returns {UseCurrentAdminResponse} * @hideconstructor */ function useCurrentAdmin() { const currentAdmin = require$$3.useSelector(state => state.session); const dispatch = require$$3.useDispatch(); return [currentAdmin, admin => dispatch(setCurrentAdmin(admin))]; } /** * Result of the {@link useCurrentAdmin}. * It is a tuple containing value and the setter * * @typedef {Array} UseCurrentAdminResponse * @memberof useCurrentAdmin * @alias UseCurrentAdminResponse * @property {CurrentAdmin | null} [0] current admin * @property {React.Dispatch<React.SetStateAction<CurrentAdmin>>} [1] value setter compatible * with react useState */ const OPEN_FILTER_DRAWER = 'OPEN_FILTER_DRAWER'; const CLOSE_FILTER_DRAWER = 'CLOSE_FILTER_DRAWER'; const showFilterDrawer = () => ({ type: OPEN_FILTER_DRAWER, isVisible: true }); const hideFilterDrawer = () => ({ type: CLOSE_FILTER_DRAWER, isVisible: false }); var isArray$8 = isArray_1, isSymbol$2 = isSymbol_1; /** Used to match property names within property paths. */ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/; /** * Checks if `value` is a property name and not a property path. * * @private * @param {*} value The value to check. * @param {Object} [object] The object to query keys on. * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ function isKey$3(value, object) { if (isArray$8(value)) { return false; } var type = typeof value; if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol$2(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || (object != null && value in Object(object)); } var _isKey = isKey$3; /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject$b(value) { var type = typeof value; return value != null && (type == 'object' || type == 'function'); } var isObject_1 = isObject$b; var baseGetTag$5 = _baseGetTag, isObject$a = isObject_1; /** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag$1 = '[object Function]', genTag = '[object GeneratorFunction]', proxyTag = '[object Proxy]'; /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction$3(value) { if (!isObject$a(value)) { return false; } // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag = baseGetTag$5(value); return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; } var isFunction_1 = isFunction$3; var root$6 = _root; /** Used to detect overreaching core-js shims. */ var coreJsData$1 = root$6['__core-js_shared__']; var _coreJsData = coreJsData$1; var coreJsData = _coreJsData; /** Used to detect methods masquerading as native. */ var maskSrcKey = (function() { var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); return uid ? ('Symbol(src)_1.' + uid) : ''; }()); /** * Checks if `func` has its source masked. * * @private * @param {Function} func The function to check. * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ function isMasked$1(func) { return !!maskSrcKey && (maskSrcKey in func); } var _isMasked = isMasked$1; /** Used for built-in method references. */ var funcProto$2 = Function.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString$2 = funcProto$2.toString; /** * Converts `func` to its source code. * * @private * @param {Function} func The function to convert. * @returns {string} Returns the source code. */ function toSource$2(func) { if (func != null) { try { return funcToString$2.call(func); } catch (e) {} try { return (func + ''); } catch (e) {} } return ''; } var _toSource = toSource$2; var isFunction$2 = isFunction_1, isMasked = _isMasked, isObject$9 = isObject_1, toSource$1 = _toSource; /** * Used to match `RegExp` * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; /** Used for built-in method references. */ var funcProto$1 = Function.prototype, objectProto$c = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString$1 = funcProto$1.toString; /** Used to check objects for own properties. */ var hasOwnProperty$a = objectProto$c.hasOwnProperty; /** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString$1.call(hasOwnProperty$a).replace(reRegExpChar, '\\$&') .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' ); /** * The base implementation of `_.isNative` without bad shim checks. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a native function, * else `false`. */ function baseIsNative$1(value) { if (!isObject$9(value) || isMasked(value)) { return false; } var pattern = isFunction$2(value) ? reIsNative : reIsHostCtor; return pattern.test(toSource$1(value)); } var _baseIsNative = baseIsNative$1; /** * Gets the value at `key` of `object`. * * @private * @param {Object} [object] The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function getValue$2(object, key) { return object == null ? undefined : object[key]; } var _getValue = getValue$2; var baseIsNative = _baseIsNative, getValue$1 = _getValue; /** * Gets the native function at `key` of `object`. * * @private * @param {Object} object The object to query. * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ function getNative$7(object, key) { var value = getValue$1(object, key); return baseIsNative(value) ? value : undefined; } var _getNative = getNative$7; var getNative$6 = _getNative; /* Built-in method references that are verified to be native. */ var nativeCreate$4 = getNative$6(Object, 'create'); var _nativeCreate = nativeCreate$4; var nativeCreate$3 = _nativeCreate; /** * Removes all key-value entries from the hash. * * @private * @name clear * @memberOf Hash */ function hashClear$1() { this.__data__ = nativeCreate$3 ? nativeCreate$3(null) : {}; this.size = 0; } var _hashClear = hashClear$1; /** * Removes `key` and its value from the hash. * * @private * @name delete * @memberOf Hash * @param {Object} hash The hash to modify. * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function hashDelete$1(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } var _hashDelete = hashDelete$1; var nativeCreate$2 = _nativeCreate; /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED$2 = '__lodash_hash_undefined__'; /** Used for built-in method references. */ var objectProto$b = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$9 = objectProto$b.hasOwnProperty; /** * Gets the hash value for `key`. * * @private * @name get * @memberOf Hash * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function hashGet$1(key) { var data = this.__data__; if (nativeCreate$2) { var result = data[key]; return result === HASH_UNDEFINED$2 ? undefined : result; } return hasOwnProperty$9.call(data, key) ? data[key] : undefined; } var _hashGet = hashGet$1; var nativeCreate$1 = _nativeCreate; /** Used for built-in method references. */ var objectProto$a = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$8 = objectProto$a.hasOwnProperty; /** * Checks if a hash value for `key` exists. * * @private * @name has * @memberOf Hash * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function hashHas$1(key) { var data = this.__data__; return nativeCreate$1 ? (data[key] !== undefined) : hasOwnProperty$8.call(data, key); } var _hashHas = hashHas$1; var nativeCreate = _nativeCreate; /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; /** * Sets the hash `key` to `value`. * * @private * @name set * @memberOf Hash * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the hash instance. */ function hashSet$1(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED$1 : value; return this; } var _hashSet = hashSet$1; var hashClear = _hashClear, hashDelete = _hashDelete, hashGet = _hashGet, hashHas = _hashHas, hashSet = _hashSet; /** * Creates a hash object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Hash$1(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `Hash`. Hash$1.prototype.clear = hashClear; Hash$1.prototype['delete'] = hashDelete; Hash$1.prototype.get = hashGet; Hash$1.prototype.has = hashHas; Hash$1.prototype.set = hashSet; var _Hash = Hash$1; /** * Removes all key-value entries from the list cache. * * @private * @name clear * @memberOf ListCache */ function listCacheClear$1() { this.__data__ = []; this.size = 0; } var _listCacheClear = listCacheClear$1; /** * Performs a * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * comparison between two values to determine if they are equivalent. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @example * * var object = { 'a': 1 }; * var other = { 'a': 1 }; * * _.eq(object, object); * // => true * * _.eq(object, other); * // => false * * _.eq('a', 'a'); * // => true * * _.eq('a', Object('a')); * // => false * * _.eq(NaN, NaN); * // => true */ function eq$5(value, other) { return value === other || (value !== value && other !== other); } var eq_1 = eq$5; var eq$4 = eq_1; /** * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private * @param {Array} array The array to inspect. * @param {*} key The key to search for. * @returns {number} Returns the index of the matched value, else `-1`. */ function assocIndexOf$4(array, key) { var length = array.length; while (length--) { if (eq$4(array[length][0], key)) { return length; } } return -1; } var _assocIndexOf = assocIndexOf$4; var assocIndexOf$3 = _assocIndexOf; /** Used for built-in method references. */ var arrayProto = Array.prototype; /** Built-in value references. */ var splice = arrayProto.splice; /** * Removes `key` and its value from the list cache. * * @private * @name delete * @memberOf ListCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function listCacheDelete$1(key) { var data = this.__data__, index = assocIndexOf$3(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } var _listCacheDelete = listCacheDelete$1; var assocIndexOf$2 = _assocIndexOf; /** * Gets the list cache value for `key`. * * @private * @name get * @memberOf ListCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function listCacheGet$1(key) { var data = this.__data__, index = assocIndexOf$2(data, key); return index < 0 ? undefined : data[index][1]; } var _listCacheGet = listCacheGet$1; var assocIndexOf$1 = _assocIndexOf; /** * Checks if a list cache value for `key` exists. * * @private * @name has * @memberOf ListCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function listCacheHas$1(key) { return assocIndexOf$1(this.__data__, key) > -1; } var _listCacheHas = listCacheHas$1; var assocIndexOf = _assocIndexOf; /** * Sets the list cache `key` to `value`. * * @private * @name set * @memberOf ListCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the list cache instance. */ function listCacheSet$1(key, value) { var data = this.__data__, index = assocIndexOf(data, key); if (index < 0) { ++this.size; data.push([key, value]); } else { data[index][1] = value; } return this; } var _listCacheSet = listCacheSet$1; var listCacheClear = _listCacheClear, listCacheDelete = _listCacheDelete, listCacheGet = _listCacheGet, listCacheHas = _listCacheHas, listCacheSet = _listCacheSet; /** * Creates an list cache object. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function ListCache$4(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `ListCache`. ListCache$4.prototype.clear = listCacheClear; ListCache$4.prototype['delete'] = listCacheDelete; ListCache$4.prototype.get = listCacheGet; ListCache$4.prototype.has = listCacheHas; ListCache$4.prototype.set = listCacheSet; var _ListCache = ListCache$4; var getNative$5 = _getNative, root$5 = _root; /* Built-in method references that are verified to be native. */ var Map$4 = getNative$5(root$5, 'Map'); var _Map = Map$4; var Hash = _Hash, ListCache$3 = _ListCache, Map$3 = _Map; /** * Removes all key-value entries from the map. * * @private * @name clear * @memberOf MapCache */ function mapCacheClear$1() { this.size = 0; this.__data__ = { 'hash': new Hash, 'map': new (Map$3 || ListCache$3), 'string': new Hash }; } var _mapCacheClear = mapCacheClear$1; /** * Checks if `value` is suitable for use as unique object key. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ function isKeyable$1(value) { var type = typeof value; return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') ? (value !== '__proto__') : (value === null); } var _isKeyable = isKeyable$1; var isKeyable = _isKeyable; /** * Gets the data for `map`. * * @private * @param {Object} map The map to query. * @param {string} key The reference key. * @returns {*} Returns the map data. */ function getMapData$4(map, key) { var data = map.__data__; return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; } var _getMapData = getMapData$4; var getMapData$3 = _getMapData; /** * Removes `key` and its value from the map. * * @private * @name delete * @memberOf MapCache * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function mapCacheDelete$1(key) { var result = getMapData$3(this, key)['delete'](key); this.size -= result ? 1 : 0; return result; } var _mapCacheDelete = mapCacheDelete$1; var getMapData$2 = _getMapData; /** * Gets the map value for `key`. * * @private * @name get * @memberOf MapCache * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function mapCacheGet$1(key) { return getMapData$2(this, key).get(key); } var _mapCacheGet = mapCacheGet$1; var getMapData$1 = _getMapData; /** * Checks if a map value for `key` exists. * * @private * @name has * @memberOf MapCache * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function mapCacheHas$1(key) { return getMapData$1(this, key).has(key); } var _mapCacheHas = mapCacheHas$1; var getMapData = _getMapData; /** * Sets the map `key` to `value`. * * @private * @name set * @memberOf MapCache * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the map cache instance. */ function mapCacheSet$1(key, value) { var data = getMapData(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } var _mapCacheSet = mapCacheSet$1; var mapCacheClear = _mapCacheClear, mapCacheDelete = _mapCacheDelete, mapCacheGet = _mapCacheGet, mapCacheHas = _mapCacheHas, mapCacheSet = _mapCacheSet; /** * Creates a map cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function MapCache$3(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } // Add methods to `MapCache`. MapCache$3.prototype.clear = mapCacheClear; MapCache$3.prototype['delete'] = mapCacheDelete; MapCache$3.prototype.get = mapCacheGet; MapCache$3.prototype.has = mapCacheHas; MapCache$3.prototype.set = mapCacheSet; var _MapCache = MapCache$3; var MapCache$2 = _MapCache; /** Error message constants. */ var FUNC_ERROR_TEXT = 'Expected a function'; /** * Creates a function that memoizes the result of `func`. If `resolver` is * provided, it determines the cache key for storing the result based on the * arguments provided to the memoized function. By default, the first argument * provided to the memoized function is used as the map cache key. The `func` * is invoked with the `this` binding of the memoized function. * * **Note:** The cache is exposed as the `cache` property on the memoized * function. Its creation may be customized by replacing the `_.memoize.Cache` * constructor with one whose instances implement the * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) * method interface of `clear`, `delete`, `get`, `has`, and `set`. * * @static * @memberOf _ * @since 0.1.0 * @category Function * @param {Function} func The function to have its output memoized. * @param {Function} [resolver] The function to resolve the cache key. * @returns {Function} Returns the new memoized function. * @example * * var object = { 'a': 1, 'b': 2 }; * var other = { 'c': 3, 'd': 4 }; * * var values = _.memoize(_.values); * values(object); * // => [1, 2] * * values(other); * // => [3, 4] * * object.a = 2; * values(object); * // => [1, 2] * * // Modify the result cache. * values.cache.set(object, ['a', 'b']); * values(object); * // => ['a', 'b'] * * // Replace `_.memoize.Cache`. * _.memoize.Cache = WeakMap; */ function memoize$1(func, resolver) { if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { throw new TypeError(FUNC_ERROR_TEXT); } var memoized = function() { var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key)) { return cache.get(key); } var result = func.apply(this, args); memoized.cache = cache.set(key, result) || cache; return result; }; memoized.cache = new (memoize$1.Cache || MapCache$2); return memoized; } // Expose `MapCache`. memoize$1.Cache = MapCache$2; var memoize_1 = memoize$1; var memoize = memoize_1; /** Used as the maximum memoize cache size. */ var MAX_MEMOIZE_SIZE = 500; /** * A specialized version of `_.memoize` which clears the memoized function's * cache when it exceeds `MAX_MEMOIZE_SIZE`. * * @private * @param {Function} func The function to have its output memoized. * @returns {Function} Returns the new memoized function. */ function memoizeCapped$1(func) { var result = memoize(func, function(key) { if (cache.size === MAX_MEMOIZE_SIZE) { cache.clear(); } return key; }); var cache = result.cache; return result; } var _memoizeCapped = memoizeCapped$1; var memoizeCapped = _memoizeCapped; /** Used to match property names within property paths. */ var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; /** Used to match backslashes in property paths. */ var reEscapeChar = /\\(\\)?/g; /** * Converts `string` to a property path array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the property path array. */ var stringToPath$1 = memoizeCapped(function(string) { var result = []; if (string.charCodeAt(0) === 46 /* . */) { result.push(''); } string.replace(rePropName, function(match, number, quote, subString) { result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); }); return result; }); var _stringToPath = stringToPath$1; var isArray$7 = isArray_1, isKey$2 = _isKey, stringToPath = _stringToPath, toString$1 = toString_1; /** * Casts `value` to a path array if it's not one. * * @private * @param {*} value The value to inspect. * @param {Object} [object] The object to query keys on. * @returns {Array} Returns the cast property path array. */ function castPath$4(value, object) { if (isArray$7(value)) { return value; } return isKey$2(value, object) ? [value] : stringToPath(toString$1(value)); } var _castPath = castPath$4; var isSymbol$1 = isSymbol_1; /** Used as references for various `Number` constants. */ var INFINITY$1 = 1 / 0; /** * Converts `value` to a string key if it's not a string or symbol. * * @private * @param {*} value The value to inspect. * @returns {string|symbol} Returns the key. */ function toKey$5(value) { if (typeof value == 'string' || isSymbol$1(value)) { return value; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; } var _toKey = toKey$5; var castPath$3 = _castPath, toKey$4 = _toKey; /** * The base implementation of `_.get` without support for default values. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @returns {*} Returns the resolved value. */ function baseGet$3(object, path) { path = castPath$3(path, object); var index = 0, length = path.length; while (object != null && index < length) { object = object[toKey$4(path[index++])]; } return (index && index == length) ? object : undefined; } var _baseGet = baseGet$3; var getNative$4 = _getNative; var defineProperty$2 = (function() { try { var func = getNative$4(Object, 'defineProperty'); func({}, '', {}); return func; } catch (e) {} }()); var _defineProperty$1 = defineProperty$2; var defineProperty$1 = _defineProperty$1; /** * The base implementation of `assignValue` and `assignMergeValue` without * value checks. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function baseAssignValue$3(object, key, value) { if (key == '__proto__' && defineProperty$1) { defineProperty$1(object, key, { 'configurable': true, 'enumerable': true, 'value': value, 'writable': true }); } else { object[key] = value; } } var _baseAssignValue = baseAssignValue$3; var baseAssignValue$2 = _baseAssignValue, eq$3 = eq_1; /** Used for built-in method references. */ var objectProto$9 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$7 = objectProto$9.hasOwnProperty; /** * Assigns `value` to `key` of `object` if the existing value is not equivalent * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function assignValue$2(object, key, value) { var objValue = object[key]; if (!(hasOwnProperty$7.call(object, key) && eq$3(objValue, value)) || (value === undefined && !(key in object))) { baseAssignValue$2(object, key, value); } } var _assignValue = assignValue$2; /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER$1 = 9007199254740991; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ function isIndex$4(value, length) { var type = typeof value; length = length == null ? MAX_SAFE_INTEGER$1 : length; return !!length && (type == 'number' || (type != 'symbol' && reIsUint.test(value))) && (value > -1 && value % 1 == 0 && value < length); } var _isIndex = isIndex$4; var assignValue$1 = _assignValue, castPath$2 = _castPath, isIndex$3 = _isIndex, isObject$8 = isObject_1, toKey$3 = _toKey; /** * The base implementation of `_.set`. * * @private * @param {Object} object The object to modify. * @param {Array|string} path The path of the property to set. * @param {*} value The value to set. * @param {Function} [customizer] The function to customize path creation. * @returns {Object} Returns `object`. */ function baseSet$1(object, path, value, customizer) { if (!isObject$8(object)) { return object; } path = castPath$2(path, object); var index = -1, length = path.length, lastIndex = length - 1, nested = object; while (nested != null && ++index < length) { var key = toKey$3(path[index]), newValue = value; if (key === '__proto__' || key === 'constructor' || key === 'prototype') { return object; } if (index != lastIndex) { var objValue = nested[key]; newValue = customizer ? customizer(objValue, key, nested) : undefined; if (newValue === undefined) { newValue = isObject$8(objValue) ? objValue : (isIndex$3(path[index + 1]) ? [] : {}); } } assignValue$1(nested, key, newValue); nested = nested[key]; } return object; } var _baseSet = baseSet$1; var baseGet$2 = _baseGet, baseSet = _baseSet, castPath$1 = _castPath; /** * The base implementation of `_.pickBy` without support for iteratee shorthands. * * @private * @param {Object} object The source object. * @param {string[]} paths The property paths to pick. * @param {Function} predicate The function invoked per property. * @returns {Object} Returns the new object. */ function basePickBy$2(object, paths, predicate) { var index = -1, length = paths.length, result = {}; while (++index < length) { var path = paths[index], value = baseGet$2(object, path); if (predicate(value, path)) { baseSet(result, castPath$1(path, object), value); } } return result; } var _basePickBy = basePickBy$2; /** * The base implementation of `_.hasIn` without support for deep paths. * * @private * @param {Object} [object] The object to query. * @param {Array|string} key The key to check. * @returns {boolean} Returns `true` if `key` exists, else `false`. */ function baseHasIn$1(object, key) { return object != null && key in Object(object); } var _baseHasIn = baseHasIn$1; var baseGetTag$4 = _baseGetTag, isObjectLike$6 = isObjectLike_1; /** `Object#toString` result references. */ var argsTag$2 = '[object Arguments]'; /** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */ function baseIsArguments$1(value) { return isObjectLike$6(value) && baseGetTag$4(value) == argsTag$2; } var _baseIsArguments = baseIsArguments$1; var baseIsArguments = _baseIsArguments, isObjectLike$5 = isObjectLike_1; /** Used for built-in method references. */ var objectProto$8 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$6 = objectProto$8.hasOwnProperty; /** Built-in value references. */ var propertyIsEnumerable$1 = objectProto$8.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ var isArguments$4 = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike$5(value) && hasOwnProperty$6.call(value, 'callee') && !propertyIsEnumerable$1.call(value, 'callee'); }; var isArguments_1 = isArguments$4; /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */ function isLength$3(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } var isLength_1 = isLength$3; var castPath = _castPath, isArguments$3 = isArguments_1, isArray$6 = isArray_1, isIndex$2 = _isIndex, isLength$2 = isLength_1, toKey$2 = _toKey; /** * Checks if `path` exists on `object`. * * @private * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @param {Function} hasFunc The function to check properties. * @returns {boolean} Returns `true` if `path` exists, else `false`. */ function hasPath$1(object, path, hasFunc) { path = castPath(path, object); var index = -1, length = path.length, result = false; while (++index < length) { var key = toKey$2(path[index]); if (!(result = object != null && hasFunc(object, key))) { break; } object = object[key]; } if (result || ++index != length) { return result; } length = object == null ? 0 : object.length; return !!length && isLength$2(length) && isIndex$2(key, length) && (isArray$6(object) || isArguments$3(object)); } var _hasPath = hasPath$1; var baseHasIn = _baseHasIn, hasPath = _hasPath; /** * Checks if `path` is a direct or inherited property of `object`. * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path to check. * @returns {boolean} Returns `true` if `path` exists, else `false`. * @example * * var object = _.create({ 'a': _.create({ 'b': 2 }) }); * * _.hasIn(object, 'a'); * // => true * * _.hasIn(object, 'a.b'); * // => true * * _.hasIn(object, ['a', 'b']); * // => true * * _.hasIn(object, 'b'); * // => false */ function hasIn$2(object, path) { return object != null && hasPath(object, path, baseHasIn); } var hasIn_1 = hasIn$2; var basePickBy$1 = _basePickBy, hasIn$1 = hasIn_1; /** * The base implementation of `_.pick` without support for individual * property identifiers. * * @private * @param {Object} object The source object. * @param {string[]} paths The property paths to pick. * @returns {Object} Returns the new object. */ function basePick$1(object, paths) { return basePickBy$1(object, paths, function(value, path) { return hasIn$1(object, path); }); } var _basePick = basePick$1; /** * Appends the elements of `values` to `array`. * * @private * @param {Array} array The array to modify. * @param {Array} values The values to append. * @returns {Array} Returns `array`. */ function arrayPush$3(array, values) { var index = -1, length = values.length, offset = array.length; while (++index < length) { array[offset + index] = values[index]; } return array; } var _arrayPush = arrayPush$3; var Symbol$2 = _Symbol, isArguments$2 = isArguments_1, isArray$5 = isArray_1; /** Built-in value references. */ var spreadableSymbol = Symbol$2 ? Symbol$2.isConcatSpreadable : undefined; /** * Checks if `value` is a flattenable `arguments` object or array. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. */ function isFlattenable$1(value) { return isArray$5(value) || isArguments$2(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); } var _isFlattenable = isFlattenable$1; var arrayPush$2 = _arrayPush, isFlattenable = _isFlattenable; /** * The base implementation of `_.flatten` with support for restricting flattening. * * @private * @param {Array} array The array to flatten. * @param {number} depth The maximum recursion depth. * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. * @param {Array} [result=[]] The initial result value. * @returns {Array} Returns the new flattened array. */ function baseFlatten$1(array, depth, predicate, isStrict, result) { var index = -1, length = array.length; predicate || (predicate = isFlattenable); result || (result = []); while (++index < length) { var value = array[index]; if (depth > 0 && predicate(value)) { if (depth > 1) { // Recursively flatten arrays (susceptible to call stack limits). baseFlatten$1(value, depth - 1, predicate, isStrict, result); } else { arrayPush$2(result, value); } } else if (!isStrict) { result[result.length] = value; } } return result; } var _baseFlatten = baseFlatten$1; var baseFlatten = _baseFlatten; /** * Flattens `array` a single level deep. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {Array} array The array to flatten. * @returns {Array} Returns the new flattened array. * @example * * _.flatten([1, [2, [3, [4]], 5]]); * // => [1, 2, [3, [4]], 5] */ function flatten$1(array) { var length = array == null ? 0 : array.length; return length ? baseFlatten(array, 1) : []; } var flatten_1 = flatten$1; /** * A faster alternative to `Function#apply`, this function invokes `func` * with the `this` binding of `thisArg` and the arguments of `args`. * * @private * @param {Function} func The function to invoke. * @param {*} thisArg The `this` binding of `func`. * @param {Array} args The arguments to invoke `func` with. * @returns {*} Returns the result of `func`. */ function apply$2(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } var _apply = apply$2; var apply$1 = _apply; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMax = Math.max; /** * A specialized version of `baseRest` which transforms the rest array. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @param {Function} transform The rest array transform. * @returns {Function} Returns the new function. */ function overRest$2(func, start, transform) { start = nativeMax(start === undefined ? (func.length - 1) : start, 0); return function() { var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array(length); while (++index < length) { array[index] = args[start + index]; } index = -1; var otherArgs = Array(start + 1); while (++index < start) { otherArgs[index] = args[index]; } otherArgs[start] = transform(array); return apply$1(func, this, otherArgs); }; } var _overRest = overRest$2; /** * Creates a function that returns `value`. * * @static * @memberOf _ * @since 2.4.0 * @category Util * @param {*} value The value to return from the new function. * @returns {Function} Returns the new constant function. * @example * * var objects = _.times(2, _.constant({ 'a': 1 })); * * console.log(objects); * // => [{ 'a': 1 }, { 'a': 1 }] * * console.log(objects[0] === objects[1]); * // => true */ function constant$1(value) { return function() { return value; }; } var constant_1 = constant$1; /** * This method returns the first argument it receives. * * @static * @since 0.1.0 * @memberOf _ * @category Util * @param {*} value Any value. * @returns {*} Returns `value`. * @example * * var object = { 'a': 1 }; * * console.log(_.identity(object) === object); * // => true */ function identity$3(value) { return value; } var identity_1 = identity$3; var constant = constant_1, defineProperty = _defineProperty$1, identity$2 = identity_1; /** * The base implementation of `setToString` without support for hot loop shorting. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ var baseSetToString$1 = !defineProperty ? identity$2 : function(func, string) { return defineProperty(func, 'toString', { 'configurable': true, 'enumerable': false, 'value': constant(string), 'writable': true }); }; var _baseSetToString = baseSetToString$1; /** Used to detect hot functions by number of calls within a span of milliseconds. */ var HOT_COUNT = 800, HOT_SPAN = 16; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeNow = Date.now; /** * Creates a function that'll short out and invoke `identity` instead * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` * milliseconds. * * @private * @param {Function} func The function to restrict. * @returns {Function} Returns the new shortable function. */ function shortOut$1(func) { var count = 0, lastCalled = 0; return function() { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { return arguments[0]; } } else { count = 0; } return func.apply(undefined, arguments); }; } var _shortOut = shortOut$1; var baseSetToString = _baseSetToString, shortOut = _shortOut; /** * Sets the `toString` method of `func` to return `string`. * * @private * @param {Function} func The function to modify. * @param {Function} string The `toString` result. * @returns {Function} Returns `func`. */ var setToString$2 = shortOut(baseSetToString); var _setToString = setToString$2; var flatten = flatten_1, overRest$1 = _overRest, setToString$1 = _setToString; /** * A specialized version of `baseRest` which flattens the rest array. * * @private * @param {Function} func The function to apply a rest parameter to. * @returns {Function} Returns the new function. */ function flatRest$1(func) { return setToString$1(overRest$1(func, undefined, flatten), func + ''); } var _flatRest = flatRest$1; var basePick = _basePick, flatRest = _flatRest; /** * Creates an object composed of the picked `object` properties. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The source object. * @param {...(string|string[])} [paths] The property paths to pick. * @returns {Object} Returns the new object. * @example * * var object = { 'a': 1, 'b': '2', 'c': 3 }; * * _.pick(object, ['a', 'c']); * // => { 'a': 1, 'c': 3 } */ var pick = flatRest(function(object, paths) { return object == null ? {} : basePick(object, paths); }); var pick_1 = pick; var pick$1 = /*@__PURE__*/getDefaultExportFromCjs(pick_1); /* eslint-disable no-unused-vars */ // eslint-disable-next-line no-shadow let QueryParams = /*#__PURE__*/function (QueryParams) { QueryParams["Tab"] = "tab"; QueryParams["Redirect"] = "redirectUrl"; QueryParams["Refresh"] = "refresh"; return QueryParams; }({}); // eslint-disable-next-line no-shadow let QueryListParams = /*#__PURE__*/function (QueryListParams) { QueryListParams["Page"] = "page"; QueryListParams["SortBy"] = "sortBy"; QueryListParams["Direction"] = "direction"; QueryListParams["Filters"] = "filters"; QueryListParams["Query"] = "query"; return QueryListParams; }({}); function useQueryParams() { const { pathname } = reactRouterDom.useLocation(); const [searchParams, setSearchParams] = reactRouterDom.useSearchParams(); const parsedQuery = React$1.useMemo(() => lib$2.parse(searchParams.toString(), { allowDots: true }), [searchParams, pathname]); const { sortBy, direction, page, tab, filters, redirectUrl } = parsedQuery; const listParams = React$1.useMemo(() => pick$1(parsedQuery, [QueryListParams.SortBy, QueryListParams.Filters, QueryListParams.Direction, QueryListParams.Page, QueryListParams.Query]), [parsedQuery]); function storeParams(params) { setSearchParams(lib$2.stringify({ sortBy, direction, page, tab, filters, redirectUrl, ...params }, { allowDots: true })); } function clearParams(...params) { const searchParamsKeys = Array.from(searchParams.keys()); const clearCandidates = params.length ? params : searchParamsKeys; for (const param of searchParamsKeys) { for (const paramToClear of clearCandidates) { if (param.startsWith(paramToClear) && searchParams.get(param)) { searchParams.delete(param); } } } setSearchParams(searchParams); } function getParam(param) { searchParams.get(param); } return { parsedQuery, listParams, filters: filters, sortBy, direction, page, tab, redirectUrl, storeParams, clearParams, getParam }; } const useFilterDrawer = () => { const [filtersCount, setFiltersCount] = React$1.useState(0); const dispatch = require$$3.useDispatch(); const isVisible = require$$3.useSelector(state => state.filterDrawer.isVisible); const { filters = {} } = useQueryParams(); React$1.useEffect(() => { setFiltersCount(Object.keys(filters).length); }, [filters]); const toggleFilter = () => { dispatch(isVisible ? hideFilterDrawer() : showFilterDrawer()); }; const open = () => { dispatch(showFilterDrawer()); }; const close = () => { dispatch(hideFilterDrawer()); }; return { filtersCount, isVisible, toggleFilter, open, close }; }; /* eslint-disable no-console */ /** * @load ./use-local-storage.doc.md * @subcategory Hooks * @class * @see https://usehooks.com/useLocalStorage * * @param {string} key key under which hook will store the data * @param {T} initialValue value which will be stringified and stored * @return {UseLocalStorageResult<T>} * @bundle * @type {Function} */ function useLocalStorage(key, initialValue) { // State to store our value // Pass initial state function to useState so logic is only executed once const [storedValue, setStoredValue] = React$1.useState(() => { try { // Get from local storage by key const item = window.localStorage.getItem(key); // Parse stored json or if none return initialValue return item ? JSON.parse(item) : initialValue; } catch (error) { // If error also return initialValue console.log(error); return initialValue; } }); // Return a wrapped version of useState's setter function that ... // ... persists the new value to localStorage. const setValue = value => { try { // Allow value to be a function so we have same API as useState const valueToStore = value instanceof Function ? value(storedValue) : value; // Save state setStoredValue(valueToStore); // Save to local storage window.localStorage.setItem(key, JSON.stringify(valueToStore)); } catch (error) { // A more advanced implementation would handle the error case console.log(error); } }; return [storedValue, setValue]; } const useHistoryListen = () => { const location = reactRouter.useLocation(); const [storedPath, setStoredPath] = useLocalStorage('prevPage', {}); const { to = {}, from = {} } = require$$3.useSelector(state => state.router); const dispatch = require$$3.useDispatch(); React$1.useEffect(() => { if (storedPath) { dispatch(initializeRoute(storedPath)); } }, []); React$1.useEffect(() => { const previousPath = [to.pathname, to.search].join(''); const currentPath = [location.pathname, location.search].join(''); if (previousPath !== currentPath) { dispatch(changeRoute(location)); } }, [location]); React$1.useEffect(() => { if (from.pathname) { setStoredPath(from); } }, [from]); }; const isSelected = (href, location) => { const regExp = new RegExp(`${href}($|/)`); return !!location.pathname.match(regExp); }; function useNavigationResources(resources) { const [openElements, setOpenElements] = useLocalStorage('sidebarElements', {}); const navigate = reactRouter.useNavigate(); const location = reactRouter.useLocation(); const { translateLabel } = useTranslation(); const enrichResource = React$1.useMemo(() => (resource, icon) => ({ href: resource.href || undefined, icon, isSelected: isSelected(resource.href, location), label: translateLabel(resource.name, resource.id), id: resource.id, onClick: event => { if (resource.href) { event.preventDefault(); navigate(resource.href); } } }), [location, navigate]); // grouping resources into parents const map = resources // first filter out resources which are not visible .filter(res => res.href && res.navigation?.show !== false).reduce((memo, resource) => { // in case resource has the same name as parent we namespace it wit "resource-"" const key = resource.navigation?.name || ['resource', resource.name].join('-'); if (!resource.navigation || resource.navigation.name === null) { memo[key] = enrichResource(resource, resource.navigation?.icon); } else if (memo[key] && memo[key].elements && resource.navigation?.name) { memo[key].label = translateLabel(resource.navigation?.name); memo[key].elements?.push?.(enrichResource(resource)); } else { memo[key] = { elements: [enrichResource(resource)], label: translateLabel(resource.navigation?.name), icon: resource.navigation?.icon, onClick: () => setOpenElements({ ...openElements, [key]: !openElements[key] }), isOpen: !!openElements[key] }; } return memo; }, {}); return Object.values(map); } const FORM_VALUE_NULL = '__FORM_VALUE_NULL__'; const FORM_VALUE_EMPTY_OBJECT = '__FORM_VALUE_EMPTY_OBJECT__'; const FORM_VALUE_EMPTY_ARRAY = '__FORM_VALUE_EMPTY_ARRAY__'; const isObjectOrArray = value => typeof value === 'object' && value.constructor !== File && !(value instanceof Date); /** * Changes RecordJSON that it can be send as a FormData to the backend. * * FormData is required because we are sending files via the wire. But it has limitations. * Namely it can only transport files and strings. That is why we have to convert some * standard types like NULL to constants so they can be property converted back by the backend. * And thus properly handled. * * @private * @param {RecordJSON} record * @return {FormData} */ function paramsToFormData(params) { const formData = new FormData(); // Assume that params are flatted Object.entries(params).forEach(([key, value]) => { // {@link updateRecord} does not change empty objects "{}" - so in order to prevent having // them changed to "[object Object]" we have to set them to empty strings. if (value === null) { return formData.set(key, FORM_VALUE_NULL); } // File objects has to go through because they are handled by FormData if (isObjectOrArray(value)) { if (Array.isArray(value)) { return formData.set(key, FORM_VALUE_EMPTY_ARRAY); } return formData.set(key, FORM_VALUE_EMPTY_OBJECT); } // Convert Date fields to UTC timezone if (value instanceof Date) { return formData.set(key, value.toISOString()); } // Rest goes as a standard value return formData.set(key, value); }); return formData; } /** * Handlers of all [Actions]{@link Action} of type `record` returns record. * Depending on a place and response we have to merge what was returned * to the actual state. It is done in following places: * - {@link useRecord} hook * - {@link RecordInList} component * - {@link RecordAction} component * * @private */ const mergeRecordResponse = (record, response) => ({ // we start from the response because it can have different recordActions or bulkActions ...(response.record || record), // records has to be reset every time because so that user wont // see old errors which are not relevant anymore errors: response.record.errors, populated: { ...record.populated, ...response.record.populated }, params: { ...record.params, ...response.record.params } }); /** * HOF returning a function which takes a record and returns an updated record. * This way we can pass this to setState in react, which takes old state * (in our case previousRecord) as an argument. * * Function is used when to the {@link OnPropertyChange} callback, user passes * key (property name) and the value (followed by an optional selectedRecord). * * The responsibility of the function is to: * - clear old values under passed key: so when user passes property === `some.key` * function removes `some.key.1`, `some.key.2` etc * - sets new value under the passed key for primitive types * - in case of objects - it flattens them first and then sets all the resulted values * under the path provided in the property argument * - it fills value in RecordJSON#populated when selectedRecord is given * - finally it invalidates populated for given property * * * @param {string} property property that must be updated, supports nesting * with dots * @param {any} value value that must be set, undefined or null if * deleting, will be flattened * @param {RecordJSON} selectedRecord if value is reference ID, this must be a record * it's referencing to * @private */ const updateRecord = (property, value, selectedRecord) => previousRecord => { let populatedModified = false; const populatedCopy = { ...previousRecord.populated }; const paramsCopy = flat.set(previousRecord.params, property, value); if (property in populatedCopy) { delete populatedCopy[property]; populatedModified = true; } if (selectedRecord) { populatedCopy[property] = selectedRecord; populatedModified = true; } return { ...previousRecord, params: paramsCopy, populated: populatedModified ? populatedCopy : previousRecord.populated }; }; const isEntireRecordGiven = (propertyOrRecord, value) => !!(typeof value === 'undefined' // user can pass property and omit value. This makes sense when // third argument of the function (selectedRecord) is passed to onChange // callback && !(typeof propertyOrRecord === 'string') // we assume that only params has to be given && propertyOrRecord.params); const filterRecordParams = function (record, options = {}) { if (options.includeParams && record) { return { ...record, params: flat.selectParams(record.params || {}, options.includeParams) }; } return record; }; const isPropertyPermitted = (propertyName, options = {}) => { const { includeParams } = options; if (includeParams) { const parts = flat.pathToParts(propertyName, { skipArrayIndexes: true }); return parts.some(part => includeParams.includes(part)); } return true; }; const api$3 = new ApiClient(); /** * @load ./use-record.doc.md * @subcategory Hooks * @class * @hideconstructor * @bundle * @param {RecordJSON} [initialRecord], * @param {string} resourceId * @param {UseRecordOptions} [options] * @return {UseRecordResult} */ const useRecord = (initialRecord, resourceId, options) => { // setting up state const [loading, setLoading] = React$1.useState(false); const [isSynced, setIsSynced] = React$1.useState(true); const [progress, setProgress] = React$1.useState(0); const { parsedQuery } = useQueryParams(); const filteredRecord = initialRecord ? filterRecordParams(initialRecord, options) : null; const [record, setRecord] = React$1.useState({ ...filteredRecord, params: filteredRecord?.params ?? {}, errors: initialRecord?.errors ?? {}, populated: initialRecord?.populated ?? {} }); // it keeps the same format as useState function which can take either value or function const setFilteredRecord = React$1.useCallback(value => { const newRecord = value instanceof Function ? value(record) : value; setRecord(filterRecordParams(newRecord, options)); }, [options, record]); const onNotice = useNotice(); const handleChange = React$1.useCallback((propertyOrRecord, value, incomingRecord) => { if (isEntireRecordGiven(propertyOrRecord, value)) { setFilteredRecord(propertyOrRecord); } else if (isPropertyPermitted(propertyOrRecord, options)) { setRecord(updateRecord(propertyOrRecord, value, incomingRecord)); } else { // eslint-disable-next-line no-console console.warn([`You are trying to set property: "${propertyOrRecord}" which`, 'is not permitted. Take a look at `useRecord(..., { includeParams: [...]})`'].join('\n')); } setIsSynced(false); }, [setRecord, options]); const handleSubmit = React$1.useCallback((customParams = {}, submitOptions) => { setLoading(true); const mergedParams = flat.merge(record.params, customParams); const formData = paramsToFormData(mergedParams); const actionParams = { resourceId, onUploadProgress: e => setProgress(Math.round(e.loaded * 100 / (e.total ?? 1))), data: formData, params: parsedQuery, headers: { 'Content-Type': 'multipart/form-data' } }; const promise = initialRecord?.id ? api$3.recordAction({ ...actionParams, actionName: 'edit', recordId: record.id }) : api$3.resourceAction({ ...actionParams, actionName: 'new' }); promise.then(response => { if (response.data.notice) { onNotice(response.data.notice); } if (submitOptions?.updateOnSave !== false) { setFilteredRecord(prev => mergeRecordResponse(prev, response.data)); } setProgress(0); setLoading(false); setIsSynced(true); }).catch(() => { onNotice({ message: 'There was an error updating record, Check out console to see more information.', type: 'error' }); setProgress(0); setLoading(false); }); return promise; }, [record, resourceId, setLoading, setProgress, setRecord]); return { record, handleChange, submit: handleSubmit, loading, progress, setRecord: setFilteredRecord, isSynced }; }; const api$2 = new ApiClient(); /** * @load ./use-records.doc.md * @subcategory Hooks * @class * @hideconstructor * * @param {string} resourceId id of a resource for which you want to fetch records * @return {UseRecordsResult} * @bundle * @type {Function} */ function useRecords(resourceId) { const [records, setRecords] = React$1.useState([]); const [loading, setLoading] = React$1.useState(false); const [perPage, setPerPage] = React$1.useState(10); const [page, setPage] = React$1.useState(1); const [total, setTotal] = React$1.useState(0); const [direction, setDirection] = React$1.useState('asc'); const [sortBy, setSortBy] = React$1.useState(); const location = reactRouter.useLocation(); const navigate = reactRouter.useNavigate(); const addNotice = useNotice(); const onNotice = useNotice(); const fetchData = () => { setLoading(true); const query = new URLSearchParams(location.search); const promise = api$2.resourceAction({ actionName: 'list', resourceId, params: query }); promise.then(response => { const listActionResponse = response.data; if (listActionResponse.notice) { onNotice(listActionResponse.notice); } if (listActionResponse.redirectUrl) { navigate(listActionResponse.redirectUrl); return; } setRecords(listActionResponse.records); setPage(listActionResponse.meta.page); setPerPage(listActionResponse.meta.perPage); setTotal(listActionResponse.meta.total); setDirection(listActionResponse.meta.direction); setSortBy(listActionResponse.meta.sortBy); setLoading(false); }).catch(() => { addNotice({ message: 'errorFetchingRecords', type: 'error', resourceId }); }); return promise; }; React$1.useEffect(() => { if (hasForceRefresh(location.search)) { navigate({ pathname: location.pathname, search: removeForceRefresh(location.search).toString() }, { replace: true }); } else { fetchData(); } }, [resourceId, location.search, location.state]); return { records, loading, page, total, direction, sortBy, perPage, fetchData }; } /** * @load ./use-resource.doc.md * @subcategory Hooks * @class * @hideconstructor * @bundle * @param {string} resourceId Id of a resource you want to get */ const useResource = resourceId => { const resources = require$$3.useSelector(state => state.resources); const foundResource = resources.find(resource => resource.id === resourceId); return foundResource; }; /** * @load ./use-selected-records.doc.md * @subcategory Hooks * @class * @hideconstructor * @param {Array<RecordJSON>} records List of records on which you can perform `select` action * @return {UseSelectedRecordsResult} * @bundle * @type {Function} */ function useSelectedRecords(records) { const [selectedRecords, setSelectedRecords] = React$1.useState([]); const handleSelect = record => { const selectedIndex = selectedRecords.findIndex(selected => selected.id === record.id); if (selectedIndex < 0) { setSelectedRecords([...selectedRecords, record]); } else { const newSelectedRecords = [...selectedRecords]; newSelectedRecords.splice(selectedIndex, 1); setSelectedRecords(newSelectedRecords); } }; const handleSelectAll = () => { const missing = records.filter(record => !selectedRecords.find(selected => selected.id === record.id) && record.bulkActions.length); if (missing.length) { setSelectedRecords([...selectedRecords, ...missing]); } else { const newSelectedRecords = selectedRecords.filter(selected => !records.find(record => record.id === selected.id)); setSelectedRecords(newSelectedRecords); } }; return { handleSelect, handleSelectAll, selectedRecords, setSelectedRecords }; } var Hooks = /*#__PURE__*/Object.freeze({ __proto__: null, FORM_VALUE_EMPTY_ARRAY: FORM_VALUE_EMPTY_ARRAY, FORM_VALUE_EMPTY_OBJECT: FORM_VALUE_EMPTY_OBJECT, FORM_VALUE_NULL: FORM_VALUE_NULL, QueryListParams: QueryListParams, QueryParams: QueryParams, isEntireRecordGiven: isEntireRecordGiven, paramsToFormData: paramsToFormData, updateRecord: updateRecord, useAction: useAction, useActionResponseHandler: useActionResponseHandler, useCurrentAdmin: useCurrentAdmin, useFilterDrawer: useFilterDrawer, useHistoryListen: useHistoryListen, useLocalStorage: useLocalStorage, useModal: useModal, useNavigationResources: useNavigationResources, useNotice: useNotice, useQueryParams: useQueryParams, useRecord: useRecord, useRecords: useRecords, useResource: useResource, useSelectedRecords: useSelectedRecords, useTranslation: useTranslation }); /** * @alias ActionButtonProps * @memberof ActionButton */ /** * Renders Button which redirects to given action * * ### Usage * * ``` * import { ActionButton } from 'adminjs' * ``` * * @component * @subcategory Application */ const ActionButton = props => { const { children, action, actionPerformed, resourceId, recordId, recordIds, search, queryParams } = props; const { href, handleClick } = useAction(action, { resourceId, recordId, recordIds, search: lib$2.stringify(queryParams, { addQueryPrefix: true }) || search }, actionPerformed); if (!action) { return null; } const firstChild = React__default$1.default.Children.toArray(children)[0]; if (!firstChild || typeof firstChild === 'string' || typeof firstChild === 'number' || typeof firstChild === 'boolean') { throw new Error('ActionButton has to have one child'); } const contentTag = getActionElementCss(resourceId, action.name, 'button'); const WrappedElement = /*#__PURE__*/React__default$1.default.cloneElement(firstChild, { onClick: handleClick, 'data-testid': buildActionTestId(action), 'data-css': contentTag, href }); return WrappedElement; }; const OverridableActionButton = allowOverride(ActionButton, 'ActionButton'); const BreadcrumbLink = styledComponents.styled(reactRouterDom.Link)` color: ${({ theme }) => theme.colors.grey60}; font-family: ${({ theme }) => theme.font}; line-height: ${({ theme }) => theme.lineHeights.default}; font-size: ${({ theme }) => theme.fontSizes.default}; text-decoration: none; &:hover { color: ${({ theme }) => theme.colors.primary100}; &:after { color: ${({ theme }) => theme.colors.grey60}; } } &:after { content: '/'; padding: 0 ${({ theme }) => theme.space.default}; } &:last-child { color: ${({ theme }) => theme.colors.text}; &:after { content: ''; } } `; const BreadcrumbText = styledComponents.styled(DesignSystem.Text)` color: ${({ theme }) => theme.colors.grey100}; font-family: ${({ theme }) => theme.font}; font-weight: ${({ theme }) => theme.fontWeights.normal.toString()}; line-height: ${({ theme }) => theme.lineHeights.default}; font-size: ${({ theme }) => theme.fontSizes.default}; cursor: pointer; display: inline; &:after { content: '/'; padding: 0 ${({ theme }) => theme.space.default}; } &:last-child { &:after { content: ''; } } `; /** * @memberof Breadcrumbs */ /** * @component * @private */ const Breadcrumbs = props => { const { resource, record, actionName } = props; const listAction = resource.resourceActions.find(({ name }) => name === 'list'); const action = resource.actions.find(a => a.name === actionName); const h = new ViewHelpers(); const { tl, ta } = useTranslation(); const contentTag = getActionElementCss(resource.id, actionName, 'breadcrumbs'); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flexGrow: 1, className: DesignSystem.cssClass('Breadcrumbs'), "data-css": contentTag }, /*#__PURE__*/React__default$1.default.createElement(BreadcrumbLink, { to: h.dashboardUrl() }, tl('dashboard')), listAction ? /*#__PURE__*/React__default$1.default.createElement(BreadcrumbLink, { to: resource.href ? resource.href : '/', className: record ? 'is-active' : '' }, tl(resource.name, resource.id)) : /*#__PURE__*/React__default$1.default.createElement(BreadcrumbText, null, tl(resource.name, resource.id)), action && action.name !== 'list' && /*#__PURE__*/React__default$1.default.createElement(BreadcrumbLink, { to: "#" }, ta(action.label))); }; const OverridableBreadcrumbs = allowOverride(Breadcrumbs, 'Breadcrumbs'); const actionsToButtonGroup = options => { const { actions, params, handleClick, translateFunctions } = options; const { translateAction } = translateFunctions; const { resourceId } = params; const buttons = actions.map(action => { const href = actionHref(action, params); return { icon: action.icon, label: translateAction(action.label, resourceId), variant: action.variant, source: action, href: href || undefined, // when href is not defined - handle click should also be not defined // This prevents from "cursor: pointer;" onClick: href ? handleClick : undefined, 'data-testid': buildActionTestId(action), buttons: [], 'data-css': `${action.resourceId}-${action.name}-button` }; }); // nesting buttons const buttonsMap = buttons.reduce((memo, button) => { const action = button.source; if (action.parent) { const parent = memo[action.parent] || buttons.find(btn => btn.source.name === action.parent) || { label: action.parent }; parent.buttons = parent.buttons || []; parent.buttons.push(button); return { ...memo, [action.parent]: parent }; } return { ...memo, [button.source.name]: button }; }, {}); return Object.values(buttonsMap); }; function _extends$s() { _extends$s = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$s.apply(this, arguments); } // eslint-disable-next-line @typescript-eslint/no-unused-vars const StyledLink$1 = styledComponents.styled(({ rounded, to, ...rest }) => /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.Link, _extends$s({ to: to }, rest)))`${DesignSystem.ButtonCSS}`; const StyledBackButton = props => { const location = reactRouter.useLocation(); const { showInDrawer } = props; const cssCloseIcon = showInDrawer ? 'ChevronRight' : 'ChevronLeft'; return /*#__PURE__*/React__default$1.default.createElement(StyledLink$1, { size: "icon", to: { pathname: '..', search: location.search }, relative: "route", rounded: true, mr: "lg", type: "button" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Icon, { icon: cssCloseIcon })); }; const OverridableStyledBackButton = allowOverride(StyledBackButton, 'StyledBackButton'); /* eslint-disable jsx-a11y/anchor-is-valid */ /** * Header of an action. It renders Action name with buttons for all the actions. * * ### Usage * * ``` * import { ActionHeader } from 'adminjs' * ``` * * @component * @subcategory Application */ const ActionHeader = props => { const { resource, actionPerformed, record, action, tag, omitActions, toggleFilter: isFilterButtonVisible } = props; const translateFunctions = useTranslation(); const { translateButton, translateAction } = translateFunctions; const navigate = reactRouter.useNavigate(); const location = reactRouter.useLocation(); const actionResponseHandler = useActionResponseHandler(actionPerformed); const modalFunctions = useModal(); const { toggleFilter, filtersCount } = useFilterDrawer(); if (action.hideActionHeader) { return null; } const resourceId = resource.id; const params = { resourceId, recordId: record?.id }; // eslint-disable-next-line max-len const handleActionClick = (event, sourceAction) => buildActionClickHandler({ action: sourceAction, params, actionResponseHandler, navigate, location, translateFunctions, modalFunctions })(event); const actionButtons = actionsToButtonGroup({ actions: record ? record.recordActions.filter(ra => !action || action.name !== ra.name) // only new action should be seen in regular "Big" actions place : resource.resourceActions.filter(ra => ra.name === 'new' && (!action || action.name !== ra.name)), params, handleClick: handleActionClick, translateFunctions, modalFunctions }); if (typeof isFilterButtonVisible === 'function' || isFilterButtonVisible) { const filterTranslationKey = filtersCount > 0 ? 'filterActive' : 'filter'; actionButtons.push({ label: translateButton(filterTranslationKey, resource.id, { count: filtersCount }), onClick: toggleFilter, icon: 'Filter', 'data-css': getResourceElementCss(resource.id, 'filter-button') }); } // list and new actions are special and are are always const customResourceButtons = actionsToButtonGroup({ actions: action.showResourceActions ? resource.resourceActions.filter(ra => !['list', 'new'].includes(ra.name)) : [], params: { resourceId }, handleClick: handleActionClick, translateFunctions, modalFunctions }); const title = action ? translateAction(action.label, resourceId) : resource.name; // styled which differs if action header is in the drawer or not const cssIsRootFlex = !action.showInDrawer; const cssHeaderMT = action.showInDrawer ? '' : 'lg'; const cssActionsMB = action.showInDrawer ? 'xl' : 'default'; const CssHComponent = action.showInDrawer ? DesignSystem.H3 : DesignSystem.H2; const contentTag = getActionElementCss(resourceId, action.name, 'action-header'); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { className: DesignSystem.cssClass('ActionHeader'), "data-css": contentTag }, !action.showInDrawer && /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flex: true, flexDirection: "row", px: ['default', 0] }, /*#__PURE__*/React__default$1.default.createElement(OverridableBreadcrumbs, { resource: resource, actionName: action.name, record: record }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flexShrink: 0 }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ButtonGroup, { size: "sm", rounded: true, buttons: customResourceButtons }))), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { display: ['block', cssIsRootFlex ? 'flex' : 'block'] }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { mt: cssHeaderMT, flexGrow: 1, px: ['default', 0] }, /*#__PURE__*/React__default$1.default.createElement(CssHComponent, { mb: "lg" }, action.showInDrawer && /*#__PURE__*/React__default$1.default.createElement(OverridableStyledBackButton, { showInDrawer: action.showInDrawer }), title, tag ? /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Badge, { variant: "default", outline: true, ml: "default" }, tag) : null)), !omitActions && /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { mt: "xl", mb: cssActionsMB, flexShrink: 0 }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ButtonGroup, { buttons: actionButtons })))); }; const OverridableActionHeader = allowOverride(ActionHeader, 'ActionHeader'); const AdminModal = () => { const modalState = require$$3.useSelector(state => state.modal); return modalState.show ? /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Modal, modalState.modalProps) : null; }; const AppLoader = () => /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { width: "100%", height: "100%", flex: true, alignItems: "center", justifyContent: "center" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Loader, null)); const AuthenticationBackgroundComponent = () => null; const OverridableAuthenticationBackgroundComponent = allowOverride(AuthenticationBackgroundComponent, 'AuthenticationBackgroundComponent'); const ErrorMessage = ({ error }) => { const { translateMessage } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.MessageBox, { m: "xxl", variant: "danger", message: "Javascript Error" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, null, error.toString()), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, { mt: "default" }, translateMessage('seeConsoleForMore'))); }; let ErrorBoundary$1 = class ErrorBoundary extends React__default$1.default.Component { constructor(props) { super(props); this.state = { error: null }; } componentDidCatch(error) { this.setState({ error }); } render() { const { children } = this.props; const { error } = this.state; if (error !== null) { return /*#__PURE__*/React__default$1.default.createElement(ErrorMessage, { error: error }); } return children || null; } }; var dnd_cjs = {}; var useMemoOne_cjs = {}; Object.defineProperty(useMemoOne_cjs, '__esModule', { value: true }); var react = React__default$1.default; function areInputsEqual$1(newInputs, lastInputs) { if (newInputs.length !== lastInputs.length) { return false; } for (var i = 0; i < newInputs.length; i++) { if (newInputs[i] !== lastInputs[i]) { return false; } } return true; } function useMemoOne$1(getResult, inputs) { var initial = react.useState(function () { return { inputs: inputs, result: getResult() }; })[0]; var isFirstRun = react.useRef(true); var committed = react.useRef(initial); var useCache = isFirstRun.current || Boolean(inputs && committed.current.inputs && areInputsEqual$1(inputs, committed.current.inputs)); var cache = useCache ? committed.current : { inputs: inputs, result: getResult() }; react.useEffect(function () { isFirstRun.current = false; committed.current = cache; }, [cache]); return cache.result; } function useCallbackOne(callback, inputs) { return useMemoOne$1(function () { return callback; }, inputs); } var useMemo = useMemoOne$1; var useCallback = useCallbackOne; useMemoOne_cjs.useCallback = useCallback; useMemoOne_cjs.useCallbackOne = useCallbackOne; useMemoOne_cjs.useMemo = useMemo; useMemoOne_cjs.useMemoOne = useMemoOne$1; var cssBoxModel_cjs = {}; var prefix$2 = 'Invariant failed'; function invariant$2(condition, message) { if (condition) { return; } var provided = typeof message === 'function' ? message() : message; var value = provided ? "".concat(prefix$2, ": ").concat(provided) : prefix$2; throw new Error(value); } var tinyInvariant_cjs = invariant$2; Object.defineProperty(cssBoxModel_cjs, '__esModule', { value: true }); function _interopDefault$1 (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var invariant$1 = _interopDefault$1(tinyInvariant_cjs); var getRect = function getRect(_ref) { var top = _ref.top, right = _ref.right, bottom = _ref.bottom, left = _ref.left; var width = right - left; var height = bottom - top; var rect = { top: top, right: right, bottom: bottom, left: left, width: width, height: height, x: left, y: top, center: { x: (right + left) / 2, y: (bottom + top) / 2 } }; return rect; }; var expand = function expand(target, expandBy) { return { top: target.top - expandBy.top, left: target.left - expandBy.left, bottom: target.bottom + expandBy.bottom, right: target.right + expandBy.right }; }; var shrink = function shrink(target, shrinkBy) { return { top: target.top + shrinkBy.top, left: target.left + shrinkBy.left, bottom: target.bottom - shrinkBy.bottom, right: target.right - shrinkBy.right }; }; var shift = function shift(target, shiftBy) { return { top: target.top + shiftBy.y, left: target.left + shiftBy.x, bottom: target.bottom + shiftBy.y, right: target.right + shiftBy.x }; }; var noSpacing$1 = { top: 0, right: 0, bottom: 0, left: 0 }; var createBox = function createBox(_ref2) { var borderBox = _ref2.borderBox, _ref2$margin = _ref2.margin, margin = _ref2$margin === void 0 ? noSpacing$1 : _ref2$margin, _ref2$border = _ref2.border, border = _ref2$border === void 0 ? noSpacing$1 : _ref2$border, _ref2$padding = _ref2.padding, padding = _ref2$padding === void 0 ? noSpacing$1 : _ref2$padding; var marginBox = getRect(expand(borderBox, margin)); var paddingBox = getRect(shrink(borderBox, border)); var contentBox = getRect(shrink(paddingBox, padding)); return { marginBox: marginBox, borderBox: getRect(borderBox), paddingBox: paddingBox, contentBox: contentBox, margin: margin, border: border, padding: padding }; }; var parse = function parse(raw) { var value = raw.slice(0, -2); var suffix = raw.slice(-2); if (suffix !== 'px') { return 0; } var result = Number(value); !!isNaN(result) ? invariant$1(false, "Could not parse value [raw: " + raw + ", without suffix: " + value + "]") : void 0; return result; }; var getWindowScroll$1 = function getWindowScroll() { return { x: window.pageXOffset, y: window.pageYOffset }; }; var offset = function offset(original, change) { var borderBox = original.borderBox, border = original.border, margin = original.margin, padding = original.padding; var shifted = shift(borderBox, change); return createBox({ borderBox: shifted, border: border, margin: margin, padding: padding }); }; var withScroll = function withScroll(original, scroll) { if (scroll === void 0) { scroll = getWindowScroll$1(); } return offset(original, scroll); }; var calculateBox = function calculateBox(borderBox, styles) { var margin = { top: parse(styles.marginTop), right: parse(styles.marginRight), bottom: parse(styles.marginBottom), left: parse(styles.marginLeft) }; var padding = { top: parse(styles.paddingTop), right: parse(styles.paddingRight), bottom: parse(styles.paddingBottom), left: parse(styles.paddingLeft) }; var border = { top: parse(styles.borderTopWidth), right: parse(styles.borderRightWidth), bottom: parse(styles.borderBottomWidth), left: parse(styles.borderLeftWidth) }; return createBox({ borderBox: borderBox, margin: margin, padding: padding, border: border }); }; var getBox = function getBox(el) { var borderBox = el.getBoundingClientRect(); var styles = window.getComputedStyle(el); return calculateBox(borderBox, styles); }; cssBoxModel_cjs.calculateBox = calculateBox; cssBoxModel_cjs.createBox = createBox; cssBoxModel_cjs.expand = expand; cssBoxModel_cjs.getBox = getBox; cssBoxModel_cjs.getRect = getRect; cssBoxModel_cjs.offset = offset; cssBoxModel_cjs.shrink = shrink; cssBoxModel_cjs.withScroll = withScroll; var safeIsNaN = Number.isNaN || function ponyfill(value) { return typeof value === 'number' && value !== value; }; function isEqual$2(first, second) { if (first === second) { return true; } if (safeIsNaN(first) && safeIsNaN(second)) { return true; } return false; } function areInputsEqual(newInputs, lastInputs) { if (newInputs.length !== lastInputs.length) { return false; } for (var i = 0; i < newInputs.length; i++) { if (!isEqual$2(newInputs[i], lastInputs[i])) { return false; } } return true; } function memoizeOne$1(resultFn, isEqual) { if (isEqual === void 0) { isEqual = areInputsEqual; } var cache = null; function memoized() { var newArgs = []; for (var _i = 0; _i < arguments.length; _i++) { newArgs[_i] = arguments[_i]; } if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) { return cache.lastResult; } var lastResult = resultFn.apply(this, newArgs); cache = { lastResult: lastResult, lastArgs: newArgs, lastThis: this, }; return lastResult; } memoized.clear = function clear() { cache = null; }; return memoized; } var memoizeOne_cjs = memoizeOne$1; var rafSchd$1 = function rafSchd(fn) { var lastArgs = []; var frameId = null; var wrapperFn = function wrapperFn() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } lastArgs = args; if (frameId) { return; } frameId = requestAnimationFrame(function () { frameId = null; fn.apply(void 0, lastArgs); }); }; wrapperFn.cancel = function () { if (!frameId) { return; } cancelAnimationFrame(frameId); frameId = null; }; return wrapperFn; }; var rafSchd_cjs = rafSchd$1; var _extends$r = {exports: {}}; (function (module) { function _extends() { module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }, module.exports.__esModule = true, module.exports["default"] = module.exports; return _extends.apply(this, arguments); } module.exports = _extends, module.exports.__esModule = true, module.exports["default"] = module.exports; } (_extends$r)); var _extendsExports = _extends$r.exports; Object.defineProperty(dnd_cjs, '__esModule', { value: true }); var React = React__default$1.default; var ReactDOM = require$$1__default.default; var redux = require$$0__default.default; var reactRedux = require$$3__default.default; var useMemoOne = useMemoOne_cjs; var cssBoxModel = cssBoxModel_cjs; var memoizeOne = memoizeOne_cjs; var rafSchd = rafSchd_cjs; var _extends$q = _extendsExports; function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM); var memoizeOne__default = /*#__PURE__*/_interopDefaultLegacy(memoizeOne); var rafSchd__default = /*#__PURE__*/_interopDefaultLegacy(rafSchd); var _extends__default = /*#__PURE__*/_interopDefaultLegacy(_extends$q); const spacesAndTabs = /[ \t]{2,}/g; const lineStartWithSpaces = /^[ \t]*/gm; const clean$2 = value => value.replace(spacesAndTabs, ' ').replace(lineStartWithSpaces, '').trim(); const getDevMessage = message => clean$2(` %c@hello-pangea/dnd %c${clean$2(message)} %c👷 This is a development only message. It will be removed in production builds. `); const getFormattedMessage = message => [getDevMessage(message), 'color: #00C584; font-size: 1.2em; font-weight: bold;', 'line-height: 1.5', 'color: #723874;']; const isDisabledFlag = '__@hello-pangea/dnd-disable-dev-warnings'; function log(type, message) { if (typeof window !== 'undefined' && window[isDisabledFlag]) { return; } console[type](...getFormattedMessage(message)); } const warning = log.bind(null, 'warn'); const error = log.bind(null, 'error'); function noop$2() {} function getOptions(shared, fromBinding) { return { ...shared, ...fromBinding }; } function bindEvents(el, bindings, sharedOptions) { const unbindings = bindings.map(binding => { const options = getOptions(sharedOptions, binding.options); el.addEventListener(binding.eventName, binding.fn, options); return function unbind() { el.removeEventListener(binding.eventName, binding.fn, options); }; }); return function unbindAll() { unbindings.forEach(unbind => { unbind(); }); }; } const prefix$1 = 'Invariant failed'; class RbdInvariant extends Error {} RbdInvariant.prototype.toString = function toString() { return this.message; }; function invariant(condition, message) { if (condition) { return; } { throw new RbdInvariant(`${prefix$1}: ${message || ''}`); } } class ErrorBoundary extends React__default["default"].Component { constructor() { super(...arguments); this.callbacks = null; this.unbind = noop$2; this.onWindowError = event => { const callbacks = this.getCallbacks(); if (callbacks.isDragging()) { callbacks.tryAbort(); warning(` An error was caught by our window 'error' event listener while a drag was occurring. The active drag has been aborted. `) ; } const err = event.error; if (err instanceof RbdInvariant) { event.preventDefault(); { error(err.message); } } }; this.getCallbacks = () => { if (!this.callbacks) { throw new Error('Unable to find AppCallbacks in <ErrorBoundary/>'); } return this.callbacks; }; this.setCallbacks = callbacks => { this.callbacks = callbacks; }; } componentDidMount() { this.unbind = bindEvents(window, [{ eventName: 'error', fn: this.onWindowError }]); } componentDidCatch(err) { if (err instanceof RbdInvariant) { { error(err.message); } this.setState({}); return; } throw err; } componentWillUnmount() { this.unbind(); } render() { return this.props.children(this.setCallbacks); } } const dragHandleUsageInstructions = ` Press space bar to start a drag. When dragging you can use the arrow keys to move the item around and escape to cancel. Some screen readers may require you to be in focus mode or to use your pass through key `; const position = index => index + 1; const onDragStart = start => ` You have lifted an item in position ${position(start.source.index)} `; const withLocation = (source, destination) => { const isInHomeList = source.droppableId === destination.droppableId; const startPosition = position(source.index); const endPosition = position(destination.index); if (isInHomeList) { return ` You have moved the item from position ${startPosition} to position ${endPosition} `; } return ` You have moved the item from position ${startPosition} in list ${source.droppableId} to list ${destination.droppableId} in position ${endPosition} `; }; const withCombine = (id, source, combine) => { const inHomeList = source.droppableId === combine.droppableId; if (inHomeList) { return ` The item ${id} has been combined with ${combine.draggableId}`; } return ` The item ${id} in list ${source.droppableId} has been combined with ${combine.draggableId} in list ${combine.droppableId} `; }; const onDragUpdate = update => { const location = update.destination; if (location) { return withLocation(update.source, location); } const combine = update.combine; if (combine) { return withCombine(update.draggableId, update.source, combine); } return 'You are over an area that cannot be dropped on'; }; const returnedToStart = source => ` The item has returned to its starting position of ${position(source.index)} `; const onDragEnd = result => { if (result.reason === 'CANCEL') { return ` Movement cancelled. ${returnedToStart(result.source)} `; } const location = result.destination; const combine = result.combine; if (location) { return ` You have dropped the item. ${withLocation(result.source, location)} `; } if (combine) { return ` You have dropped the item. ${withCombine(result.draggableId, result.source, combine)} `; } return ` The item has been dropped while not over a drop area. ${returnedToStart(result.source)} `; }; const preset = { dragHandleUsageInstructions, onDragStart, onDragUpdate, onDragEnd }; var preset$1 = preset; const origin = { x: 0, y: 0 }; const add = (point1, point2) => ({ x: point1.x + point2.x, y: point1.y + point2.y }); const subtract = (point1, point2) => ({ x: point1.x - point2.x, y: point1.y - point2.y }); const isEqual$1 = (point1, point2) => point1.x === point2.x && point1.y === point2.y; const negate = point => ({ x: point.x !== 0 ? -point.x : 0, y: point.y !== 0 ? -point.y : 0 }); const patch = function (line, value, otherValue) { if (otherValue === void 0) { otherValue = 0; } if (line === 'x') { return { x: value, y: otherValue }; } return { x: otherValue, y: value }; }; const distance = (point1, point2) => Math.sqrt((point2.x - point1.x) ** 2 + (point2.y - point1.y) ** 2); const closest$1 = (target, points) => Math.min(...points.map(point => distance(target, point))); const apply = fn => point => ({ x: fn(point.x), y: fn(point.y) }); var executeClip = ((frame, subject) => { const result = cssBoxModel.getRect({ top: Math.max(subject.top, frame.top), right: Math.min(subject.right, frame.right), bottom: Math.min(subject.bottom, frame.bottom), left: Math.max(subject.left, frame.left) }); if (result.width <= 0 || result.height <= 0) { return null; } return result; }); const offsetByPosition = (spacing, point) => ({ top: spacing.top + point.y, left: spacing.left + point.x, bottom: spacing.bottom + point.y, right: spacing.right + point.x }); const getCorners = spacing => [{ x: spacing.left, y: spacing.top }, { x: spacing.right, y: spacing.top }, { x: spacing.left, y: spacing.bottom }, { x: spacing.right, y: spacing.bottom }]; const noSpacing = { top: 0, right: 0, bottom: 0, left: 0 }; const scroll$1 = (target, frame) => { if (!frame) { return target; } return offsetByPosition(target, frame.scroll.diff.displacement); }; const increase = (target, axis, withPlaceholder) => { if (withPlaceholder && withPlaceholder.increasedBy) { return { ...target, [axis.end]: target[axis.end] + withPlaceholder.increasedBy[axis.line] }; } return target; }; const clip = (target, frame) => { if (frame && frame.shouldClipSubject) { return executeClip(frame.pageMarginBox, target); } return cssBoxModel.getRect(target); }; var getSubject = (_ref => { let { page, withPlaceholder, axis, frame } = _ref; const scrolled = scroll$1(page.marginBox, frame); const increased = increase(scrolled, axis, withPlaceholder); const clipped = clip(increased, frame); return { page, withPlaceholder, active: clipped }; }); var scrollDroppable = ((droppable, newScroll) => { !droppable.frame ? invariant(false) : void 0; const scrollable = droppable.frame; const scrollDiff = subtract(newScroll, scrollable.scroll.initial); const scrollDisplacement = negate(scrollDiff); const frame = { ...scrollable, scroll: { initial: scrollable.scroll.initial, current: newScroll, diff: { value: scrollDiff, displacement: scrollDisplacement }, max: scrollable.scroll.max } }; const subject = getSubject({ page: droppable.subject.page, withPlaceholder: droppable.subject.withPlaceholder, axis: droppable.axis, frame }); const result = { ...droppable, frame, subject }; return result; }); const toDroppableMap = memoizeOne__default["default"](droppables => droppables.reduce((previous, current) => { previous[current.descriptor.id] = current; return previous; }, {})); const toDraggableMap = memoizeOne__default["default"](draggables => draggables.reduce((previous, current) => { previous[current.descriptor.id] = current; return previous; }, {})); const toDroppableList = memoizeOne__default["default"](droppables => Object.values(droppables)); const toDraggableList = memoizeOne__default["default"](draggables => Object.values(draggables)); var getDraggablesInsideDroppable = memoizeOne__default["default"]((droppableId, draggables) => { const result = toDraggableList(draggables).filter(draggable => droppableId === draggable.descriptor.droppableId) .sort((a, b) => a.descriptor.index - b.descriptor.index); return result; }); function tryGetDestination(impact) { if (impact.at && impact.at.type === 'REORDER') { return impact.at.destination; } return null; } function tryGetCombine(impact) { if (impact.at && impact.at.type === 'COMBINE') { return impact.at.combine; } return null; } var removeDraggableFromList = memoizeOne__default["default"]((remove, list) => list.filter(item => item.descriptor.id !== remove.descriptor.id)); var moveToNextCombine = (_ref => { let { isMovingForward, draggable, destination, insideDestination, previousImpact } = _ref; if (!destination.isCombineEnabled) { return null; } const location = tryGetDestination(previousImpact); if (!location) { return null; } function getImpact(target) { const at = { type: 'COMBINE', combine: { draggableId: target, droppableId: destination.descriptor.id } }; return { ...previousImpact, at }; } const all = previousImpact.displaced.all; const closestId = all.length ? all[0] : null; if (isMovingForward) { return closestId ? getImpact(closestId) : null; } const withoutDraggable = removeDraggableFromList(draggable, insideDestination); if (!closestId) { if (!withoutDraggable.length) { return null; } const last = withoutDraggable[withoutDraggable.length - 1]; return getImpact(last.descriptor.id); } const indexOfClosest = withoutDraggable.findIndex(d => d.descriptor.id === closestId); !(indexOfClosest !== -1) ? invariant(false, 'Could not find displaced item in set') : void 0; const proposedIndex = indexOfClosest - 1; if (proposedIndex < 0) { return null; } const before = withoutDraggable[proposedIndex]; return getImpact(before.descriptor.id); }); var isHomeOf = ((draggable, destination) => draggable.descriptor.droppableId === destination.descriptor.id); const noDisplacedBy = { point: origin, value: 0 }; const emptyGroups = { invisible: {}, visible: {}, all: [] }; const noImpact = { displaced: emptyGroups, displacedBy: noDisplacedBy, at: null }; var noImpact$1 = noImpact; var isWithin = ((lowerBound, upperBound) => value => lowerBound <= value && value <= upperBound); var isPartiallyVisibleThroughFrame = (frame => { const isWithinVertical = isWithin(frame.top, frame.bottom); const isWithinHorizontal = isWithin(frame.left, frame.right); return subject => { const isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right); if (isContained) { return true; } const isPartiallyVisibleVertically = isWithinVertical(subject.top) || isWithinVertical(subject.bottom); const isPartiallyVisibleHorizontally = isWithinHorizontal(subject.left) || isWithinHorizontal(subject.right); const isPartiallyContained = isPartiallyVisibleVertically && isPartiallyVisibleHorizontally; if (isPartiallyContained) { return true; } const isBiggerVertically = subject.top < frame.top && subject.bottom > frame.bottom; const isBiggerHorizontally = subject.left < frame.left && subject.right > frame.right; const isTargetBiggerThanFrame = isBiggerVertically && isBiggerHorizontally; if (isTargetBiggerThanFrame) { return true; } const isTargetBiggerOnOneAxis = isBiggerVertically && isPartiallyVisibleHorizontally || isBiggerHorizontally && isPartiallyVisibleVertically; return isTargetBiggerOnOneAxis; }; }); var isTotallyVisibleThroughFrame = (frame => { const isWithinVertical = isWithin(frame.top, frame.bottom); const isWithinHorizontal = isWithin(frame.left, frame.right); return subject => { const isContained = isWithinVertical(subject.top) && isWithinVertical(subject.bottom) && isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right); return isContained; }; }); const vertical = { direction: 'vertical', line: 'y', crossAxisLine: 'x', start: 'top', end: 'bottom', size: 'height', crossAxisStart: 'left', crossAxisEnd: 'right', crossAxisSize: 'width' }; const horizontal = { direction: 'horizontal', line: 'x', crossAxisLine: 'y', start: 'left', end: 'right', size: 'width', crossAxisStart: 'top', crossAxisEnd: 'bottom', crossAxisSize: 'height' }; var isTotallyVisibleThroughFrameOnAxis = (axis => frame => { const isWithinVertical = isWithin(frame.top, frame.bottom); const isWithinHorizontal = isWithin(frame.left, frame.right); return subject => { if (axis === vertical) { return isWithinVertical(subject.top) && isWithinVertical(subject.bottom); } return isWithinHorizontal(subject.left) && isWithinHorizontal(subject.right); }; }); const getDroppableDisplaced = (target, destination) => { const displacement = destination.frame ? destination.frame.scroll.diff.displacement : origin; return offsetByPosition(target, displacement); }; const isVisibleInDroppable = (target, destination, isVisibleThroughFrameFn) => { if (!destination.subject.active) { return false; } return isVisibleThroughFrameFn(destination.subject.active)(target); }; const isVisibleInViewport = (target, viewport, isVisibleThroughFrameFn) => isVisibleThroughFrameFn(viewport)(target); const isVisible$1 = _ref => { let { target: toBeDisplaced, destination, viewport, withDroppableDisplacement, isVisibleThroughFrameFn } = _ref; const displacedTarget = withDroppableDisplacement ? getDroppableDisplaced(toBeDisplaced, destination) : toBeDisplaced; return isVisibleInDroppable(displacedTarget, destination, isVisibleThroughFrameFn) && isVisibleInViewport(displacedTarget, viewport, isVisibleThroughFrameFn); }; const isPartiallyVisible = args => isVisible$1({ ...args, isVisibleThroughFrameFn: isPartiallyVisibleThroughFrame }); const isTotallyVisible = args => isVisible$1({ ...args, isVisibleThroughFrameFn: isTotallyVisibleThroughFrame }); const isTotallyVisibleOnAxis = args => isVisible$1({ ...args, isVisibleThroughFrameFn: isTotallyVisibleThroughFrameOnAxis(args.destination.axis) }); const getShouldAnimate = (id, last, forceShouldAnimate) => { if (typeof forceShouldAnimate === 'boolean') { return forceShouldAnimate; } if (!last) { return true; } const { invisible, visible } = last; if (invisible[id]) { return false; } const previous = visible[id]; return previous ? previous.shouldAnimate : true; }; function getTarget(draggable, displacedBy) { const marginBox = draggable.page.marginBox; const expandBy = { top: displacedBy.point.y, right: 0, bottom: 0, left: displacedBy.point.x }; return cssBoxModel.getRect(cssBoxModel.expand(marginBox, expandBy)); } function getDisplacementGroups(_ref) { let { afterDragging, destination, displacedBy, viewport, forceShouldAnimate, last } = _ref; return afterDragging.reduce(function process(groups, draggable) { const target = getTarget(draggable, displacedBy); const id = draggable.descriptor.id; groups.all.push(id); const isVisible = isPartiallyVisible({ target, destination, viewport, withDroppableDisplacement: true }); if (!isVisible) { groups.invisible[draggable.descriptor.id] = true; return groups; } const shouldAnimate = getShouldAnimate(id, last, forceShouldAnimate); const displacement = { draggableId: id, shouldAnimate }; groups.visible[id] = displacement; return groups; }, { all: [], visible: {}, invisible: {} }); } function getIndexOfLastItem(draggables, options) { if (!draggables.length) { return 0; } const indexOfLastItem = draggables[draggables.length - 1].descriptor.index; return options.inHomeList ? indexOfLastItem : indexOfLastItem + 1; } function goAtEnd(_ref) { let { insideDestination, inHomeList, displacedBy, destination } = _ref; const newIndex = getIndexOfLastItem(insideDestination, { inHomeList }); return { displaced: emptyGroups, displacedBy, at: { type: 'REORDER', destination: { droppableId: destination.descriptor.id, index: newIndex } } }; } function calculateReorderImpact(_ref2) { let { draggable, insideDestination, destination, viewport, displacedBy, last, index, forceShouldAnimate } = _ref2; const inHomeList = isHomeOf(draggable, destination); if (index == null) { return goAtEnd({ insideDestination, inHomeList, displacedBy, destination }); } const match = insideDestination.find(item => item.descriptor.index === index); if (!match) { return goAtEnd({ insideDestination, inHomeList, displacedBy, destination }); } const withoutDragging = removeDraggableFromList(draggable, insideDestination); const sliceFrom = insideDestination.indexOf(match); const impacted = withoutDragging.slice(sliceFrom); const displaced = getDisplacementGroups({ afterDragging: impacted, destination, displacedBy, last, viewport: viewport.frame, forceShouldAnimate }); return { displaced, displacedBy, at: { type: 'REORDER', destination: { droppableId: destination.descriptor.id, index } } }; } function didStartAfterCritical(draggableId, afterCritical) { return Boolean(afterCritical.effected[draggableId]); } var fromCombine = (_ref => { let { isMovingForward, destination, draggables, combine, afterCritical } = _ref; if (!destination.isCombineEnabled) { return null; } const combineId = combine.draggableId; const combineWith = draggables[combineId]; const combineWithIndex = combineWith.descriptor.index; const didCombineWithStartAfterCritical = didStartAfterCritical(combineId, afterCritical); if (didCombineWithStartAfterCritical) { if (isMovingForward) { return combineWithIndex; } return combineWithIndex - 1; } if (isMovingForward) { return combineWithIndex + 1; } return combineWithIndex; }); var fromReorder = (_ref => { let { isMovingForward, isInHomeList, insideDestination, location } = _ref; if (!insideDestination.length) { return null; } const currentIndex = location.index; const proposedIndex = isMovingForward ? currentIndex + 1 : currentIndex - 1; const firstIndex = insideDestination[0].descriptor.index; const lastIndex = insideDestination[insideDestination.length - 1].descriptor.index; const upperBound = isInHomeList ? lastIndex : lastIndex + 1; if (proposedIndex < firstIndex) { return null; } if (proposedIndex > upperBound) { return null; } return proposedIndex; }); var moveToNextIndex = (_ref => { let { isMovingForward, isInHomeList, draggable, draggables, destination, insideDestination, previousImpact, viewport, afterCritical } = _ref; const wasAt = previousImpact.at; !wasAt ? invariant(false, 'Cannot move in direction without previous impact location') : void 0; if (wasAt.type === 'REORDER') { const newIndex = fromReorder({ isMovingForward, isInHomeList, location: wasAt.destination, insideDestination }); if (newIndex == null) { return null; } return calculateReorderImpact({ draggable, insideDestination, destination, viewport, last: previousImpact.displaced, displacedBy: previousImpact.displacedBy, index: newIndex }); } const newIndex = fromCombine({ isMovingForward, destination, displaced: previousImpact.displaced, draggables, combine: wasAt.combine, afterCritical }); if (newIndex == null) { return null; } return calculateReorderImpact({ draggable, insideDestination, destination, viewport, last: previousImpact.displaced, displacedBy: previousImpact.displacedBy, index: newIndex }); }); var getCombinedItemDisplacement = (_ref => { let { displaced, afterCritical, combineWith, displacedBy } = _ref; const isDisplaced = Boolean(displaced.visible[combineWith] || displaced.invisible[combineWith]); if (didStartAfterCritical(combineWith, afterCritical)) { return isDisplaced ? origin : negate(displacedBy.point); } return isDisplaced ? displacedBy.point : origin; }); var whenCombining = (_ref => { let { afterCritical, impact, draggables } = _ref; const combine = tryGetCombine(impact); !combine ? invariant(false) : void 0; const combineWith = combine.draggableId; const center = draggables[combineWith].page.borderBox.center; const displaceBy = getCombinedItemDisplacement({ displaced: impact.displaced, afterCritical, combineWith, displacedBy: impact.displacedBy }); return add(center, displaceBy); }); const distanceFromStartToBorderBoxCenter = (axis, box) => box.margin[axis.start] + box.borderBox[axis.size] / 2; const distanceFromEndToBorderBoxCenter = (axis, box) => box.margin[axis.end] + box.borderBox[axis.size] / 2; const getCrossAxisBorderBoxCenter = (axis, target, isMoving) => target[axis.crossAxisStart] + isMoving.margin[axis.crossAxisStart] + isMoving.borderBox[axis.crossAxisSize] / 2; const goAfter = _ref => { let { axis, moveRelativeTo, isMoving } = _ref; return patch(axis.line, moveRelativeTo.marginBox[axis.end] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving)); }; const goBefore = _ref2 => { let { axis, moveRelativeTo, isMoving } = _ref2; return patch(axis.line, moveRelativeTo.marginBox[axis.start] - distanceFromEndToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveRelativeTo.marginBox, isMoving)); }; const goIntoStart = _ref3 => { let { axis, moveInto, isMoving } = _ref3; return patch(axis.line, moveInto.contentBox[axis.start] + distanceFromStartToBorderBoxCenter(axis, isMoving), getCrossAxisBorderBoxCenter(axis, moveInto.contentBox, isMoving)); }; var whenReordering = (_ref => { let { impact, draggable, draggables, droppable, afterCritical } = _ref; const insideDestination = getDraggablesInsideDroppable(droppable.descriptor.id, draggables); const draggablePage = draggable.page; const axis = droppable.axis; if (!insideDestination.length) { return goIntoStart({ axis, moveInto: droppable.page, isMoving: draggablePage }); } const { displaced, displacedBy } = impact; const closestAfter = displaced.all[0]; if (closestAfter) { const closest = draggables[closestAfter]; if (didStartAfterCritical(closestAfter, afterCritical)) { return goBefore({ axis, moveRelativeTo: closest.page, isMoving: draggablePage }); } const withDisplacement = cssBoxModel.offset(closest.page, displacedBy.point); return goBefore({ axis, moveRelativeTo: withDisplacement, isMoving: draggablePage }); } const last = insideDestination[insideDestination.length - 1]; if (last.descriptor.id === draggable.descriptor.id) { return draggablePage.borderBox.center; } if (didStartAfterCritical(last.descriptor.id, afterCritical)) { const page = cssBoxModel.offset(last.page, negate(afterCritical.displacedBy.point)); return goAfter({ axis, moveRelativeTo: page, isMoving: draggablePage }); } return goAfter({ axis, moveRelativeTo: last.page, isMoving: draggablePage }); }); var withDroppableDisplacement = ((droppable, point) => { const frame = droppable.frame; if (!frame) { return point; } return add(point, frame.scroll.diff.displacement); }); const getResultWithoutDroppableDisplacement = _ref => { let { impact, draggable, droppable, draggables, afterCritical } = _ref; const original = draggable.page.borderBox.center; const at = impact.at; if (!droppable) { return original; } if (!at) { return original; } if (at.type === 'REORDER') { return whenReordering({ impact, draggable, draggables, droppable, afterCritical }); } return whenCombining({ impact, draggables, afterCritical }); }; var getPageBorderBoxCenterFromImpact = (args => { const withoutDisplacement = getResultWithoutDroppableDisplacement(args); const droppable = args.droppable; const withDisplacement = droppable ? withDroppableDisplacement(droppable, withoutDisplacement) : withoutDisplacement; return withDisplacement; }); var scrollViewport = ((viewport, newScroll) => { const diff = subtract(newScroll, viewport.scroll.initial); const displacement = negate(diff); const frame = cssBoxModel.getRect({ top: newScroll.y, bottom: newScroll.y + viewport.frame.height, left: newScroll.x, right: newScroll.x + viewport.frame.width }); const updated = { frame, scroll: { initial: viewport.scroll.initial, max: viewport.scroll.max, current: newScroll, diff: { value: diff, displacement } } }; return updated; }); function getDraggables$1(ids, draggables) { return ids.map(id => draggables[id]); } function tryGetVisible(id, groups) { for (let i = 0; i < groups.length; i++) { const displacement = groups[i].visible[id]; if (displacement) { return displacement; } } return null; } var speculativelyIncrease = (_ref => { let { impact, viewport, destination, draggables, maxScrollChange } = _ref; const scrolledViewport = scrollViewport(viewport, add(viewport.scroll.current, maxScrollChange)); const scrolledDroppable = destination.frame ? scrollDroppable(destination, add(destination.frame.scroll.current, maxScrollChange)) : destination; const last = impact.displaced; const withViewportScroll = getDisplacementGroups({ afterDragging: getDraggables$1(last.all, draggables), destination, displacedBy: impact.displacedBy, viewport: scrolledViewport.frame, last, forceShouldAnimate: false }); const withDroppableScroll = getDisplacementGroups({ afterDragging: getDraggables$1(last.all, draggables), destination: scrolledDroppable, displacedBy: impact.displacedBy, viewport: viewport.frame, last, forceShouldAnimate: false }); const invisible = {}; const visible = {}; const groups = [ last, withViewportScroll, withDroppableScroll]; last.all.forEach(id => { const displacement = tryGetVisible(id, groups); if (displacement) { visible[id] = displacement; return; } invisible[id] = true; }); const newImpact = { ...impact, displaced: { all: last.all, invisible, visible } }; return newImpact; }); var withViewportDisplacement = ((viewport, point) => add(viewport.scroll.diff.displacement, point)); var getClientFromPageBorderBoxCenter = (_ref => { let { pageBorderBoxCenter, draggable, viewport } = _ref; const withoutPageScrollChange = withViewportDisplacement(viewport, pageBorderBoxCenter); const offset = subtract(withoutPageScrollChange, draggable.page.borderBox.center); return add(draggable.client.borderBox.center, offset); }); var isTotallyVisibleInNewLocation = (_ref => { let { draggable, destination, newPageBorderBoxCenter, viewport, withDroppableDisplacement, onlyOnMainAxis = false } = _ref; const changeNeeded = subtract(newPageBorderBoxCenter, draggable.page.borderBox.center); const shifted = offsetByPosition(draggable.page.borderBox, changeNeeded); const args = { target: shifted, destination, withDroppableDisplacement, viewport }; return onlyOnMainAxis ? isTotallyVisibleOnAxis(args) : isTotallyVisible(args); }); var moveToNextPlace = (_ref => { let { isMovingForward, draggable, destination, draggables, previousImpact, viewport, previousPageBorderBoxCenter, previousClientSelection, afterCritical } = _ref; if (!destination.isEnabled) { return null; } const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables); const isInHomeList = isHomeOf(draggable, destination); const impact = moveToNextCombine({ isMovingForward, draggable, destination, insideDestination, previousImpact }) || moveToNextIndex({ isMovingForward, isInHomeList, draggable, draggables, destination, insideDestination, previousImpact, viewport, afterCritical }); if (!impact) { return null; } const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({ impact, draggable, droppable: destination, draggables, afterCritical }); const isVisibleInNewLocation = isTotallyVisibleInNewLocation({ draggable, destination, newPageBorderBoxCenter: pageBorderBoxCenter, viewport: viewport.frame, withDroppableDisplacement: false, onlyOnMainAxis: true }); if (isVisibleInNewLocation) { const clientSelection = getClientFromPageBorderBoxCenter({ pageBorderBoxCenter, draggable, viewport }); return { clientSelection, impact, scrollJumpRequest: null }; } const distance = subtract(pageBorderBoxCenter, previousPageBorderBoxCenter); const cautious = speculativelyIncrease({ impact, viewport, destination, draggables, maxScrollChange: distance }); return { clientSelection: previousClientSelection, impact: cautious, scrollJumpRequest: distance }; }); const getKnownActive = droppable => { const rect = droppable.subject.active; !rect ? invariant(false, 'Cannot get clipped area from droppable') : void 0; return rect; }; var getBestCrossAxisDroppable = (_ref => { let { isMovingForward, pageBorderBoxCenter, source, droppables, viewport } = _ref; const active = source.subject.active; if (!active) { return null; } const axis = source.axis; const isBetweenSourceClipped = isWithin(active[axis.start], active[axis.end]); const candidates = toDroppableList(droppables) .filter(droppable => droppable !== source) .filter(droppable => droppable.isEnabled) .filter(droppable => Boolean(droppable.subject.active)) .filter(droppable => isPartiallyVisibleThroughFrame(viewport.frame)(getKnownActive(droppable))).filter(droppable => { const activeOfTarget = getKnownActive(droppable); if (isMovingForward) { return active[axis.crossAxisEnd] < activeOfTarget[axis.crossAxisEnd]; } return activeOfTarget[axis.crossAxisStart] < active[axis.crossAxisStart]; }) .filter(droppable => { const activeOfTarget = getKnownActive(droppable); const isBetweenDestinationClipped = isWithin(activeOfTarget[axis.start], activeOfTarget[axis.end]); return isBetweenSourceClipped(activeOfTarget[axis.start]) || isBetweenSourceClipped(activeOfTarget[axis.end]) || isBetweenDestinationClipped(active[axis.start]) || isBetweenDestinationClipped(active[axis.end]); }) .sort((a, b) => { const first = getKnownActive(a)[axis.crossAxisStart]; const second = getKnownActive(b)[axis.crossAxisStart]; if (isMovingForward) { return first - second; } return second - first; }) .filter((droppable, index, array) => getKnownActive(droppable)[axis.crossAxisStart] === getKnownActive(array[0])[axis.crossAxisStart]); if (!candidates.length) { return null; } if (candidates.length === 1) { return candidates[0]; } const contains = candidates.filter(droppable => { const isWithinDroppable = isWithin(getKnownActive(droppable)[axis.start], getKnownActive(droppable)[axis.end]); return isWithinDroppable(pageBorderBoxCenter[axis.line]); }); if (contains.length === 1) { return contains[0]; } if (contains.length > 1) { return contains.sort((a, b) => getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start])[0]; } return candidates.sort((a, b) => { const first = closest$1(pageBorderBoxCenter, getCorners(getKnownActive(a))); const second = closest$1(pageBorderBoxCenter, getCorners(getKnownActive(b))); if (first !== second) { return first - second; } return getKnownActive(a)[axis.start] - getKnownActive(b)[axis.start]; })[0]; }); const getCurrentPageBorderBoxCenter = (draggable, afterCritical) => { const original = draggable.page.borderBox.center; return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? subtract(original, afterCritical.displacedBy.point) : original; }; const getCurrentPageBorderBox = (draggable, afterCritical) => { const original = draggable.page.borderBox; return didStartAfterCritical(draggable.descriptor.id, afterCritical) ? offsetByPosition(original, negate(afterCritical.displacedBy.point)) : original; }; var getClosestDraggable = (_ref => { let { pageBorderBoxCenter, viewport, destination, insideDestination, afterCritical } = _ref; const sorted = insideDestination.filter(draggable => isTotallyVisible({ target: getCurrentPageBorderBox(draggable, afterCritical), destination, viewport: viewport.frame, withDroppableDisplacement: true })).sort((a, b) => { const distanceToA = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(a, afterCritical))); const distanceToB = distance(pageBorderBoxCenter, withDroppableDisplacement(destination, getCurrentPageBorderBoxCenter(b, afterCritical))); if (distanceToA < distanceToB) { return -1; } if (distanceToB < distanceToA) { return 1; } return a.descriptor.index - b.descriptor.index; }); return sorted[0] || null; }); var getDisplacedBy = memoizeOne__default["default"](function getDisplacedBy(axis, displaceBy) { const displacement = displaceBy[axis.line]; return { value: displacement, point: patch(axis.line, displacement) }; }); const getRequiredGrowthForPlaceholder = (droppable, placeholderSize, draggables) => { const axis = droppable.axis; if (droppable.descriptor.mode === 'virtual') { return patch(axis.line, placeholderSize[axis.line]); } const availableSpace = droppable.subject.page.contentBox[axis.size]; const insideDroppable = getDraggablesInsideDroppable(droppable.descriptor.id, draggables); const spaceUsed = insideDroppable.reduce((sum, dimension) => sum + dimension.client.marginBox[axis.size], 0); const requiredSpace = spaceUsed + placeholderSize[axis.line]; const needsToGrowBy = requiredSpace - availableSpace; if (needsToGrowBy <= 0) { return null; } return patch(axis.line, needsToGrowBy); }; const withMaxScroll = (frame, max) => ({ ...frame, scroll: { ...frame.scroll, max } }); const addPlaceholder = (droppable, draggable, draggables) => { const frame = droppable.frame; !!isHomeOf(draggable, droppable) ? invariant(false, 'Should not add placeholder space to home list') : void 0; !!droppable.subject.withPlaceholder ? invariant(false, 'Cannot add placeholder size to a subject when it already has one') : void 0; const placeholderSize = getDisplacedBy(droppable.axis, draggable.displaceBy).point; const requiredGrowth = getRequiredGrowthForPlaceholder(droppable, placeholderSize, draggables); const added = { placeholderSize, increasedBy: requiredGrowth, oldFrameMaxScroll: droppable.frame ? droppable.frame.scroll.max : null }; if (!frame) { const subject = getSubject({ page: droppable.subject.page, withPlaceholder: added, axis: droppable.axis, frame: droppable.frame }); return { ...droppable, subject }; } const maxScroll = requiredGrowth ? add(frame.scroll.max, requiredGrowth) : frame.scroll.max; const newFrame = withMaxScroll(frame, maxScroll); const subject = getSubject({ page: droppable.subject.page, withPlaceholder: added, axis: droppable.axis, frame: newFrame }); return { ...droppable, subject, frame: newFrame }; }; const removePlaceholder = droppable => { const added = droppable.subject.withPlaceholder; !added ? invariant(false, 'Cannot remove placeholder form subject when there was none') : void 0; const frame = droppable.frame; if (!frame) { const subject = getSubject({ page: droppable.subject.page, axis: droppable.axis, frame: null, withPlaceholder: null }); return { ...droppable, subject }; } const oldMaxScroll = added.oldFrameMaxScroll; !oldMaxScroll ? invariant(false, 'Expected droppable with frame to have old max frame scroll when removing placeholder') : void 0; const newFrame = withMaxScroll(frame, oldMaxScroll); const subject = getSubject({ page: droppable.subject.page, axis: droppable.axis, frame: newFrame, withPlaceholder: null }); return { ...droppable, subject, frame: newFrame }; }; var moveToNewDroppable = (_ref => { let { previousPageBorderBoxCenter, moveRelativeTo, insideDestination, draggable, draggables, destination, viewport, afterCritical } = _ref; if (!moveRelativeTo) { if (insideDestination.length) { return null; } const proposed = { displaced: emptyGroups, displacedBy: noDisplacedBy, at: { type: 'REORDER', destination: { droppableId: destination.descriptor.id, index: 0 } } }; const proposedPageBorderBoxCenter = getPageBorderBoxCenterFromImpact({ impact: proposed, draggable, droppable: destination, draggables, afterCritical }); const withPlaceholder = isHomeOf(draggable, destination) ? destination : addPlaceholder(destination, draggable, draggables); const isVisibleInNewLocation = isTotallyVisibleInNewLocation({ draggable, destination: withPlaceholder, newPageBorderBoxCenter: proposedPageBorderBoxCenter, viewport: viewport.frame, withDroppableDisplacement: false, onlyOnMainAxis: true }); return isVisibleInNewLocation ? proposed : null; } const isGoingBeforeTarget = Boolean( previousPageBorderBoxCenter[destination.axis.line] <= moveRelativeTo.page.borderBox.center[destination.axis.line]); const proposedIndex = (() => { const relativeTo = moveRelativeTo.descriptor.index; if (moveRelativeTo.descriptor.id === draggable.descriptor.id) { return relativeTo; } if (isGoingBeforeTarget) { return relativeTo; } return relativeTo + 1; })(); const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy); return calculateReorderImpact({ draggable, insideDestination, destination, viewport, displacedBy, last: emptyGroups, index: proposedIndex }); }); var moveCrossAxis = (_ref => { let { isMovingForward, previousPageBorderBoxCenter, draggable, isOver, draggables, droppables, viewport, afterCritical } = _ref; const destination = getBestCrossAxisDroppable({ isMovingForward, pageBorderBoxCenter: previousPageBorderBoxCenter, source: isOver, droppables, viewport }); if (!destination) { return null; } const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables); const moveRelativeTo = getClosestDraggable({ pageBorderBoxCenter: previousPageBorderBoxCenter, viewport, destination, insideDestination, afterCritical }); const impact = moveToNewDroppable({ previousPageBorderBoxCenter, destination, draggable, draggables, moveRelativeTo, insideDestination, viewport, afterCritical }); if (!impact) { return null; } const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({ impact, draggable, droppable: destination, draggables, afterCritical }); const clientSelection = getClientFromPageBorderBoxCenter({ pageBorderBoxCenter, draggable, viewport }); return { clientSelection, impact, scrollJumpRequest: null }; }); var whatIsDraggedOver = (impact => { const at = impact.at; if (!at) { return null; } if (at.type === 'REORDER') { return at.destination.droppableId; } return at.combine.droppableId; }); const getDroppableOver$1 = (impact, droppables) => { const id = whatIsDraggedOver(impact); return id ? droppables[id] : null; }; var moveInDirection = (_ref => { let { state, type } = _ref; const isActuallyOver = getDroppableOver$1(state.impact, state.dimensions.droppables); const isMainAxisMovementAllowed = Boolean(isActuallyOver); const home = state.dimensions.droppables[state.critical.droppable.id]; const isOver = isActuallyOver || home; const direction = isOver.axis.direction; const isMovingOnMainAxis = direction === 'vertical' && (type === 'MOVE_UP' || type === 'MOVE_DOWN') || direction === 'horizontal' && (type === 'MOVE_LEFT' || type === 'MOVE_RIGHT'); if (isMovingOnMainAxis && !isMainAxisMovementAllowed) { return null; } const isMovingForward = type === 'MOVE_DOWN' || type === 'MOVE_RIGHT'; const draggable = state.dimensions.draggables[state.critical.draggable.id]; const previousPageBorderBoxCenter = state.current.page.borderBoxCenter; const { draggables, droppables } = state.dimensions; return isMovingOnMainAxis ? moveToNextPlace({ isMovingForward, previousPageBorderBoxCenter, draggable, destination: isOver, draggables, viewport: state.viewport, previousClientSelection: state.current.client.selection, previousImpact: state.impact, afterCritical: state.afterCritical }) : moveCrossAxis({ isMovingForward, previousPageBorderBoxCenter, draggable, isOver, draggables, droppables, viewport: state.viewport, afterCritical: state.afterCritical }); }); function isMovementAllowed(state) { return state.phase === 'DRAGGING' || state.phase === 'COLLECTING'; } function isPositionInFrame(frame) { const isWithinVertical = isWithin(frame.top, frame.bottom); const isWithinHorizontal = isWithin(frame.left, frame.right); return function run(point) { return isWithinVertical(point.y) && isWithinHorizontal(point.x); }; } function getHasOverlap(first, second) { return first.left < second.right && first.right > second.left && first.top < second.bottom && first.bottom > second.top; } function getFurthestAway(_ref) { let { pageBorderBox, draggable, candidates } = _ref; const startCenter = draggable.page.borderBox.center; const sorted = candidates.map(candidate => { const axis = candidate.axis; const target = patch(candidate.axis.line, pageBorderBox.center[axis.line], candidate.page.borderBox.center[axis.crossAxisLine]); return { id: candidate.descriptor.id, distance: distance(startCenter, target) }; }) .sort((a, b) => b.distance - a.distance); return sorted[0] ? sorted[0].id : null; } function getDroppableOver(_ref2) { let { pageBorderBox, draggable, droppables } = _ref2; const candidates = toDroppableList(droppables).filter(item => { if (!item.isEnabled) { return false; } const active = item.subject.active; if (!active) { return false; } if (!getHasOverlap(pageBorderBox, active)) { return false; } if (isPositionInFrame(active)(pageBorderBox.center)) { return true; } const axis = item.axis; const childCenter = active.center[axis.crossAxisLine]; const crossAxisStart = pageBorderBox[axis.crossAxisStart]; const crossAxisEnd = pageBorderBox[axis.crossAxisEnd]; const isContained = isWithin(active[axis.crossAxisStart], active[axis.crossAxisEnd]); const isStartContained = isContained(crossAxisStart); const isEndContained = isContained(crossAxisEnd); if (!isStartContained && !isEndContained) { return true; } if (isStartContained) { return crossAxisStart < childCenter; } return crossAxisEnd > childCenter; }); if (!candidates.length) { return null; } if (candidates.length === 1) { return candidates[0].descriptor.id; } return getFurthestAway({ pageBorderBox, draggable, candidates }); } const offsetRectByPosition = (rect, point) => cssBoxModel.getRect(offsetByPosition(rect, point)); var withDroppableScroll = ((droppable, area) => { const frame = droppable.frame; if (!frame) { return area; } return offsetRectByPosition(area, frame.scroll.diff.value); }); function getIsDisplaced(_ref) { let { displaced, id } = _ref; return Boolean(displaced.visible[id] || displaced.invisible[id]); } function atIndex(_ref) { let { draggable, closest, inHomeList } = _ref; if (!closest) { return null; } if (!inHomeList) { return closest.descriptor.index; } if (closest.descriptor.index > draggable.descriptor.index) { return closest.descriptor.index - 1; } return closest.descriptor.index; } var getReorderImpact = (_ref2 => { let { pageBorderBoxWithDroppableScroll: targetRect, draggable, destination, insideDestination, last, viewport, afterCritical } = _ref2; const axis = destination.axis; const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy); const displacement = displacedBy.value; const targetStart = targetRect[axis.start]; const targetEnd = targetRect[axis.end]; const withoutDragging = removeDraggableFromList(draggable, insideDestination); const closest = withoutDragging.find(child => { const id = child.descriptor.id; const childCenter = child.page.borderBox.center[axis.line]; const didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical); const isDisplaced = getIsDisplaced({ displaced: last, id }); if (didStartAfterCritical$1) { if (isDisplaced) { return targetEnd <= childCenter; } return targetStart < childCenter - displacement; } if (isDisplaced) { return targetEnd <= childCenter + displacement; } return targetStart < childCenter; }) || null; const newIndex = atIndex({ draggable, closest, inHomeList: isHomeOf(draggable, destination) }); return calculateReorderImpact({ draggable, insideDestination, destination, viewport, last, displacedBy, index: newIndex }); }); const combineThresholdDivisor = 4; var getCombineImpact = (_ref => { let { draggable, pageBorderBoxWithDroppableScroll: targetRect, previousImpact, destination, insideDestination, afterCritical } = _ref; if (!destination.isCombineEnabled) { return null; } const axis = destination.axis; const displacedBy = getDisplacedBy(destination.axis, draggable.displaceBy); const displacement = displacedBy.value; const targetStart = targetRect[axis.start]; const targetEnd = targetRect[axis.end]; const withoutDragging = removeDraggableFromList(draggable, insideDestination); const combineWith = withoutDragging.find(child => { const id = child.descriptor.id; const childRect = child.page.borderBox; const childSize = childRect[axis.size]; const threshold = childSize / combineThresholdDivisor; const didStartAfterCritical$1 = didStartAfterCritical(id, afterCritical); const isDisplaced = getIsDisplaced({ displaced: previousImpact.displaced, id }); if (didStartAfterCritical$1) { if (isDisplaced) { return targetEnd > childRect[axis.start] + threshold && targetEnd < childRect[axis.end] - threshold; } return targetStart > childRect[axis.start] - displacement + threshold && targetStart < childRect[axis.end] - displacement - threshold; } if (isDisplaced) { return targetEnd > childRect[axis.start] + displacement + threshold && targetEnd < childRect[axis.end] + displacement - threshold; } return targetStart > childRect[axis.start] + threshold && targetStart < childRect[axis.end] - threshold; }); if (!combineWith) { return null; } const impact = { displacedBy, displaced: previousImpact.displaced, at: { type: 'COMBINE', combine: { draggableId: combineWith.descriptor.id, droppableId: destination.descriptor.id } } }; return impact; }); var getDragImpact = (_ref => { let { pageOffset, draggable, draggables, droppables, previousImpact, viewport, afterCritical } = _ref; const pageBorderBox = offsetRectByPosition(draggable.page.borderBox, pageOffset); const destinationId = getDroppableOver({ pageBorderBox, draggable, droppables }); if (!destinationId) { return noImpact$1; } const destination = droppables[destinationId]; const insideDestination = getDraggablesInsideDroppable(destination.descriptor.id, draggables); const pageBorderBoxWithDroppableScroll = withDroppableScroll(destination, pageBorderBox); return getCombineImpact({ pageBorderBoxWithDroppableScroll, draggable, previousImpact, destination, insideDestination, afterCritical }) || getReorderImpact({ pageBorderBoxWithDroppableScroll, draggable, destination, insideDestination, last: previousImpact.displaced, viewport, afterCritical }); }); var patchDroppableMap = ((droppables, updated) => ({ ...droppables, [updated.descriptor.id]: updated })); const clearUnusedPlaceholder = _ref => { let { previousImpact, impact, droppables } = _ref; const last = whatIsDraggedOver(previousImpact); const now = whatIsDraggedOver(impact); if (!last) { return droppables; } if (last === now) { return droppables; } const lastDroppable = droppables[last]; if (!lastDroppable.subject.withPlaceholder) { return droppables; } const updated = removePlaceholder(lastDroppable); return patchDroppableMap(droppables, updated); }; var recomputePlaceholders = (_ref2 => { let { draggable, draggables, droppables, previousImpact, impact } = _ref2; const cleaned = clearUnusedPlaceholder({ previousImpact, impact, droppables }); const isOver = whatIsDraggedOver(impact); if (!isOver) { return cleaned; } const droppable = droppables[isOver]; if (isHomeOf(draggable, droppable)) { return cleaned; } if (droppable.subject.withPlaceholder) { return cleaned; } const patched = addPlaceholder(droppable, draggable, draggables); return patchDroppableMap(cleaned, patched); }); var update = (_ref => { let { state, clientSelection: forcedClientSelection, dimensions: forcedDimensions, viewport: forcedViewport, impact: forcedImpact, scrollJumpRequest } = _ref; const viewport = forcedViewport || state.viewport; const dimensions = forcedDimensions || state.dimensions; const clientSelection = forcedClientSelection || state.current.client.selection; const offset = subtract(clientSelection, state.initial.client.selection); const client = { offset, selection: clientSelection, borderBoxCenter: add(state.initial.client.borderBoxCenter, offset) }; const page = { selection: add(client.selection, viewport.scroll.current), borderBoxCenter: add(client.borderBoxCenter, viewport.scroll.current), offset: add(client.offset, viewport.scroll.diff.value) }; const current = { client, page }; if (state.phase === 'COLLECTING') { return { ...state, dimensions, viewport, current }; } const draggable = dimensions.draggables[state.critical.draggable.id]; const newImpact = forcedImpact || getDragImpact({ pageOffset: page.offset, draggable, draggables: dimensions.draggables, droppables: dimensions.droppables, previousImpact: state.impact, viewport, afterCritical: state.afterCritical }); const withUpdatedPlaceholders = recomputePlaceholders({ draggable, impact: newImpact, previousImpact: state.impact, draggables: dimensions.draggables, droppables: dimensions.droppables }); const result = { ...state, current, dimensions: { draggables: dimensions.draggables, droppables: withUpdatedPlaceholders }, impact: newImpact, viewport, scrollJumpRequest: scrollJumpRequest || null, forceShouldAnimate: scrollJumpRequest ? false : null }; return result; }); function getDraggables(ids, draggables) { return ids.map(id => draggables[id]); } var recompute = (_ref => { let { impact, viewport, draggables, destination, forceShouldAnimate } = _ref; const last = impact.displaced; const afterDragging = getDraggables(last.all, draggables); const displaced = getDisplacementGroups({ afterDragging, destination, displacedBy: impact.displacedBy, viewport: viewport.frame, forceShouldAnimate, last }); return { ...impact, displaced }; }); var getClientBorderBoxCenter = (_ref => { let { impact, draggable, droppable, draggables, viewport, afterCritical } = _ref; const pageBorderBoxCenter = getPageBorderBoxCenterFromImpact({ impact, draggable, draggables, droppable, afterCritical }); return getClientFromPageBorderBoxCenter({ pageBorderBoxCenter, draggable, viewport }); }); var refreshSnap = (_ref => { let { state, dimensions: forcedDimensions, viewport: forcedViewport } = _ref; !(state.movementMode === 'SNAP') ? invariant(false) : void 0; const needsVisibilityCheck = state.impact; const viewport = forcedViewport || state.viewport; const dimensions = forcedDimensions || state.dimensions; const { draggables, droppables } = dimensions; const draggable = draggables[state.critical.draggable.id]; const isOver = whatIsDraggedOver(needsVisibilityCheck); !isOver ? invariant(false, 'Must be over a destination in SNAP movement mode') : void 0; const destination = droppables[isOver]; const impact = recompute({ impact: needsVisibilityCheck, viewport, destination, draggables }); const clientSelection = getClientBorderBoxCenter({ impact, draggable, droppable: destination, draggables, viewport, afterCritical: state.afterCritical }); return update({ impact, clientSelection, state, dimensions, viewport }); }); var getHomeLocation = (descriptor => ({ index: descriptor.index, droppableId: descriptor.droppableId })); var getLiftEffect = (_ref => { let { draggable, home, draggables, viewport } = _ref; const displacedBy = getDisplacedBy(home.axis, draggable.displaceBy); const insideHome = getDraggablesInsideDroppable(home.descriptor.id, draggables); const rawIndex = insideHome.indexOf(draggable); !(rawIndex !== -1) ? invariant(false, 'Expected draggable to be inside home list') : void 0; const afterDragging = insideHome.slice(rawIndex + 1); const effected = afterDragging.reduce((previous, item) => { previous[item.descriptor.id] = true; return previous; }, {}); const afterCritical = { inVirtualList: home.descriptor.mode === 'virtual', displacedBy, effected }; const displaced = getDisplacementGroups({ afterDragging, destination: home, displacedBy, last: null, viewport: viewport.frame, forceShouldAnimate: false }); const impact = { displaced, displacedBy, at: { type: 'REORDER', destination: getHomeLocation(draggable.descriptor) } }; return { impact, afterCritical }; }); var patchDimensionMap = ((dimensions, updated) => ({ draggables: dimensions.draggables, droppables: patchDroppableMap(dimensions.droppables, updated) })); var offsetDraggable = (_ref => { let { draggable, offset, initialWindowScroll } = _ref; const client = cssBoxModel.offset(draggable.client, offset); const page = cssBoxModel.withScroll(client, initialWindowScroll); const moved = { ...draggable, placeholder: { ...draggable.placeholder, client }, client, page }; return moved; }); var getFrame = (droppable => { const frame = droppable.frame; !frame ? invariant(false, 'Expected Droppable to have a frame') : void 0; return frame; }); var adjustAdditionsForScrollChanges = (_ref => { let { additions, updatedDroppables, viewport } = _ref; const windowScrollChange = viewport.scroll.diff.value; return additions.map(draggable => { const droppableId = draggable.descriptor.droppableId; const modified = updatedDroppables[droppableId]; const frame = getFrame(modified); const droppableScrollChange = frame.scroll.diff.value; const totalChange = add(windowScrollChange, droppableScrollChange); const moved = offsetDraggable({ draggable, offset: totalChange, initialWindowScroll: viewport.scroll.initial }); return moved; }); }); var publishWhileDraggingInVirtual = (_ref => { let { state, published } = _ref; const withScrollChange = published.modified.map(update => { const existing = state.dimensions.droppables[update.droppableId]; const scrolled = scrollDroppable(existing, update.scroll); return scrolled; }); const droppables = { ...state.dimensions.droppables, ...toDroppableMap(withScrollChange) }; const updatedAdditions = toDraggableMap(adjustAdditionsForScrollChanges({ additions: published.additions, updatedDroppables: droppables, viewport: state.viewport })); const draggables = { ...state.dimensions.draggables, ...updatedAdditions }; published.removals.forEach(id => { delete draggables[id]; }); const dimensions = { droppables, draggables }; const wasOverId = whatIsDraggedOver(state.impact); const wasOver = wasOverId ? dimensions.droppables[wasOverId] : null; const draggable = dimensions.draggables[state.critical.draggable.id]; const home = dimensions.droppables[state.critical.droppable.id]; const { impact: onLiftImpact, afterCritical } = getLiftEffect({ draggable, home, draggables, viewport: state.viewport }); const previousImpact = wasOver && wasOver.isCombineEnabled ? state.impact : onLiftImpact; const impact = getDragImpact({ pageOffset: state.current.page.offset, draggable: dimensions.draggables[state.critical.draggable.id], draggables: dimensions.draggables, droppables: dimensions.droppables, previousImpact, viewport: state.viewport, afterCritical }); const draggingState = { ...state, phase: 'DRAGGING', impact, onLiftImpact, dimensions, afterCritical, forceShouldAnimate: false }; if (state.phase === 'COLLECTING') { return draggingState; } const dropPending = { ...draggingState, phase: 'DROP_PENDING', reason: state.reason, isWaiting: false }; return dropPending; }); const isSnapping = state => state.movementMode === 'SNAP'; const postDroppableChange = (state, updated, isEnabledChanging) => { const dimensions = patchDimensionMap(state.dimensions, updated); if (!isSnapping(state) || isEnabledChanging) { return update({ state, dimensions }); } return refreshSnap({ state, dimensions }); }; function removeScrollJumpRequest(state) { if (state.isDragging && state.movementMode === 'SNAP') { return { ...state, scrollJumpRequest: null }; } return state; } const idle$2 = { phase: 'IDLE', completed: null, shouldFlush: false }; var reducer$1 = (function (state, action) { if (state === void 0) { state = idle$2; } if (action.type === 'FLUSH') { return { ...idle$2, shouldFlush: true }; } if (action.type === 'INITIAL_PUBLISH') { !(state.phase === 'IDLE') ? invariant(false, 'INITIAL_PUBLISH must come after a IDLE phase') : void 0; const { critical, clientSelection, viewport, dimensions, movementMode } = action.payload; const draggable = dimensions.draggables[critical.draggable.id]; const home = dimensions.droppables[critical.droppable.id]; const client = { selection: clientSelection, borderBoxCenter: draggable.client.borderBox.center, offset: origin }; const initial = { client, page: { selection: add(client.selection, viewport.scroll.initial), borderBoxCenter: add(client.selection, viewport.scroll.initial), offset: add(client.selection, viewport.scroll.diff.value) } }; const isWindowScrollAllowed = toDroppableList(dimensions.droppables).every(item => !item.isFixedOnPage); const { impact, afterCritical } = getLiftEffect({ draggable, home, draggables: dimensions.draggables, viewport }); const result = { phase: 'DRAGGING', isDragging: true, critical, movementMode, dimensions, initial, current: initial, isWindowScrollAllowed, impact, afterCritical, onLiftImpact: impact, viewport, scrollJumpRequest: null, forceShouldAnimate: null }; return result; } if (action.type === 'COLLECTION_STARTING') { if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') { return state; } !(state.phase === 'DRAGGING') ? invariant(false, `Collection cannot start from phase ${state.phase}`) : void 0; const result = { ...state, phase: 'COLLECTING' }; return result; } if (action.type === 'PUBLISH_WHILE_DRAGGING') { !(state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') ? invariant(false, `Unexpected ${action.type} received in phase ${state.phase}`) : void 0; return publishWhileDraggingInVirtual({ state, published: action.payload }); } if (action.type === 'MOVE') { if (state.phase === 'DROP_PENDING') { return state; } !isMovementAllowed(state) ? invariant(false, `${action.type} not permitted in phase ${state.phase}`) : void 0; const { client: clientSelection } = action.payload; if (isEqual$1(clientSelection, state.current.client.selection)) { return state; } return update({ state, clientSelection, impact: isSnapping(state) ? state.impact : null }); } if (action.type === 'UPDATE_DROPPABLE_SCROLL') { if (state.phase === 'DROP_PENDING') { return removeScrollJumpRequest(state); } if (state.phase === 'COLLECTING') { return removeScrollJumpRequest(state); } !isMovementAllowed(state) ? invariant(false, `${action.type} not permitted in phase ${state.phase}`) : void 0; const { id, newScroll } = action.payload; const target = state.dimensions.droppables[id]; if (!target) { return state; } const scrolled = scrollDroppable(target, newScroll); return postDroppableChange(state, scrolled, false); } if (action.type === 'UPDATE_DROPPABLE_IS_ENABLED') { if (state.phase === 'DROP_PENDING') { return state; } !isMovementAllowed(state) ? invariant(false, `Attempting to move in an unsupported phase ${state.phase}`) : void 0; const { id, isEnabled } = action.payload; const target = state.dimensions.droppables[id]; !target ? invariant(false, `Cannot find Droppable[id: ${id}] to toggle its enabled state`) : void 0; !(target.isEnabled !== isEnabled) ? invariant(false, `Trying to set droppable isEnabled to ${String(isEnabled)} but it is already ${String(target.isEnabled)}`) : void 0; const updated = { ...target, isEnabled }; return postDroppableChange(state, updated, true); } if (action.type === 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED') { if (state.phase === 'DROP_PENDING') { return state; } !isMovementAllowed(state) ? invariant(false, `Attempting to move in an unsupported phase ${state.phase}`) : void 0; const { id, isCombineEnabled } = action.payload; const target = state.dimensions.droppables[id]; !target ? invariant(false, `Cannot find Droppable[id: ${id}] to toggle its isCombineEnabled state`) : void 0; !(target.isCombineEnabled !== isCombineEnabled) ? invariant(false, `Trying to set droppable isCombineEnabled to ${String(isCombineEnabled)} but it is already ${String(target.isCombineEnabled)}`) : void 0; const updated = { ...target, isCombineEnabled }; return postDroppableChange(state, updated, true); } if (action.type === 'MOVE_BY_WINDOW_SCROLL') { if (state.phase === 'DROP_PENDING' || state.phase === 'DROP_ANIMATING') { return state; } !isMovementAllowed(state) ? invariant(false, `Cannot move by window in phase ${state.phase}`) : void 0; !state.isWindowScrollAllowed ? invariant(false, 'Window scrolling is currently not supported for fixed lists') : void 0; const newScroll = action.payload.newScroll; if (isEqual$1(state.viewport.scroll.current, newScroll)) { return removeScrollJumpRequest(state); } const viewport = scrollViewport(state.viewport, newScroll); if (isSnapping(state)) { return refreshSnap({ state, viewport }); } return update({ state, viewport }); } if (action.type === 'UPDATE_VIEWPORT_MAX_SCROLL') { if (!isMovementAllowed(state)) { return state; } const maxScroll = action.payload.maxScroll; if (isEqual$1(maxScroll, state.viewport.scroll.max)) { return state; } const withMaxScroll = { ...state.viewport, scroll: { ...state.viewport.scroll, max: maxScroll } }; return { ...state, viewport: withMaxScroll }; } if (action.type === 'MOVE_UP' || action.type === 'MOVE_DOWN' || action.type === 'MOVE_LEFT' || action.type === 'MOVE_RIGHT') { if (state.phase === 'COLLECTING' || state.phase === 'DROP_PENDING') { return state; } !(state.phase === 'DRAGGING') ? invariant(false, `${action.type} received while not in DRAGGING phase`) : void 0; const result = moveInDirection({ state, type: action.type }); if (!result) { return state; } return update({ state, impact: result.impact, clientSelection: result.clientSelection, scrollJumpRequest: result.scrollJumpRequest }); } if (action.type === 'DROP_PENDING') { const reason = action.payload.reason; !(state.phase === 'COLLECTING') ? invariant(false, 'Can only move into the DROP_PENDING phase from the COLLECTING phase') : void 0; const newState = { ...state, phase: 'DROP_PENDING', isWaiting: true, reason }; return newState; } if (action.type === 'DROP_ANIMATE') { const { completed, dropDuration, newHomeClientOffset } = action.payload; !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? invariant(false, `Cannot animate drop from phase ${state.phase}`) : void 0; const result = { phase: 'DROP_ANIMATING', completed, dropDuration, newHomeClientOffset, dimensions: state.dimensions }; return result; } if (action.type === 'DROP_COMPLETE') { const { completed } = action.payload; return { phase: 'IDLE', completed, shouldFlush: false }; } return state; }); const beforeInitialCapture = args => ({ type: 'BEFORE_INITIAL_CAPTURE', payload: args }); const lift$1 = args => ({ type: 'LIFT', payload: args }); const initialPublish = args => ({ type: 'INITIAL_PUBLISH', payload: args }); const publishWhileDragging = args => ({ type: 'PUBLISH_WHILE_DRAGGING', payload: args }); const collectionStarting = () => ({ type: 'COLLECTION_STARTING', payload: null }); const updateDroppableScroll = args => ({ type: 'UPDATE_DROPPABLE_SCROLL', payload: args }); const updateDroppableIsEnabled = args => ({ type: 'UPDATE_DROPPABLE_IS_ENABLED', payload: args }); const updateDroppableIsCombineEnabled = args => ({ type: 'UPDATE_DROPPABLE_IS_COMBINE_ENABLED', payload: args }); const move = args => ({ type: 'MOVE', payload: args }); const moveByWindowScroll = args => ({ type: 'MOVE_BY_WINDOW_SCROLL', payload: args }); const updateViewportMaxScroll = args => ({ type: 'UPDATE_VIEWPORT_MAX_SCROLL', payload: args }); const moveUp = () => ({ type: 'MOVE_UP', payload: null }); const moveDown = () => ({ type: 'MOVE_DOWN', payload: null }); const moveRight = () => ({ type: 'MOVE_RIGHT', payload: null }); const moveLeft = () => ({ type: 'MOVE_LEFT', payload: null }); const flush = () => ({ type: 'FLUSH', payload: null }); const animateDrop = args => ({ type: 'DROP_ANIMATE', payload: args }); const completeDrop = args => ({ type: 'DROP_COMPLETE', payload: args }); const drop$1 = args => ({ type: 'DROP', payload: args }); const dropPending = args => ({ type: 'DROP_PENDING', payload: args }); const dropAnimationFinished = () => ({ type: 'DROP_ANIMATION_FINISHED', payload: null }); function checkIndexes(insideDestination) { if (insideDestination.length <= 1) { return; } const indexes = insideDestination.map(d => d.descriptor.index); const errors = {}; for (let i = 1; i < indexes.length; i++) { const current = indexes[i]; const previous = indexes[i - 1]; if (current !== previous + 1) { errors[current] = true; } } if (!Object.keys(errors).length) { return; } const formatted = indexes.map(index => { const hasError = Boolean(errors[index]); return hasError ? `[🔥${index}]` : `${index}`; }).join(', '); warning(` Detected non-consecutive <Draggable /> indexes. (This can cause unexpected bugs) ${formatted} `) ; } function validateDimensions(critical, dimensions) { { const insideDestination = getDraggablesInsideDroppable(critical.droppable.id, dimensions.draggables); checkIndexes(insideDestination); } } var lift = (marshal => _ref => { let { getState, dispatch } = _ref; return next => action => { if (action.type !== 'LIFT') { next(action); return; } const { id, clientSelection, movementMode } = action.payload; const initial = getState(); if (initial.phase === 'DROP_ANIMATING') { dispatch(completeDrop({ completed: initial.completed })); } !(getState().phase === 'IDLE') ? invariant(false, 'Unexpected phase to start a drag') : void 0; dispatch(flush()); dispatch(beforeInitialCapture({ draggableId: id, movementMode })); const scrollOptions = { shouldPublishImmediately: movementMode === 'SNAP' }; const request = { draggableId: id, scrollOptions }; const { critical, dimensions, viewport } = marshal.startPublishing(request); validateDimensions(critical, dimensions); dispatch(initialPublish({ critical, dimensions, clientSelection, movementMode, viewport })); }; }); var style = (marshal => () => next => action => { if (action.type === 'INITIAL_PUBLISH') { marshal.dragging(); } if (action.type === 'DROP_ANIMATE') { marshal.dropping(action.payload.completed.result.reason); } if (action.type === 'FLUSH' || action.type === 'DROP_COMPLETE') { marshal.resting(); } next(action); }); const curves = { outOfTheWay: 'cubic-bezier(0.2, 0, 0, 1)', drop: 'cubic-bezier(.2,1,.1,1)' }; const combine = { opacity: { drop: 0, combining: 0.7 }, scale: { drop: 0.75 } }; const timings = { outOfTheWay: 0.2, minDropTime: 0.33, maxDropTime: 0.55 }; const outOfTheWayTiming = `${timings.outOfTheWay}s ${curves.outOfTheWay}`; const transitions = { fluid: `opacity ${outOfTheWayTiming}`, snap: `transform ${outOfTheWayTiming}, opacity ${outOfTheWayTiming}`, drop: duration => { const timing = `${duration}s ${curves.drop}`; return `transform ${timing}, opacity ${timing}`; }, outOfTheWay: `transform ${outOfTheWayTiming}`, placeholder: `height ${outOfTheWayTiming}, width ${outOfTheWayTiming}, margin ${outOfTheWayTiming}` }; const moveTo = offset => isEqual$1(offset, origin) ? undefined : `translate(${offset.x}px, ${offset.y}px)`; const transforms = { moveTo, drop: (offset, isCombining) => { const translate = moveTo(offset); if (!translate) { return undefined; } if (!isCombining) { return translate; } return `${translate} scale(${combine.scale.drop})`; } }; const { minDropTime, maxDropTime } = timings; const dropTimeRange = maxDropTime - minDropTime; const maxDropTimeAtDistance = 1500; const cancelDropModifier = 0.6; var getDropDuration = (_ref => { let { current, destination, reason } = _ref; const distance$1 = distance(current, destination); if (distance$1 <= 0) { return minDropTime; } if (distance$1 >= maxDropTimeAtDistance) { return maxDropTime; } const percentage = distance$1 / maxDropTimeAtDistance; const duration = minDropTime + dropTimeRange * percentage; const withDuration = reason === 'CANCEL' ? duration * cancelDropModifier : duration; return Number(withDuration.toFixed(2)); }); var getNewHomeClientOffset = (_ref => { let { impact, draggable, dimensions, viewport, afterCritical } = _ref; const { draggables, droppables } = dimensions; const droppableId = whatIsDraggedOver(impact); const destination = droppableId ? droppables[droppableId] : null; const home = droppables[draggable.descriptor.droppableId]; const newClientCenter = getClientBorderBoxCenter({ impact, draggable, draggables, afterCritical, droppable: destination || home, viewport }); const offset = subtract(newClientCenter, draggable.client.borderBox.center); return offset; }); var getDropImpact = (_ref => { let { draggables, reason, lastImpact, home, viewport, onLiftImpact } = _ref; if (!lastImpact.at || reason !== 'DROP') { const recomputedHomeImpact = recompute({ draggables, impact: onLiftImpact, destination: home, viewport, forceShouldAnimate: true }); return { impact: recomputedHomeImpact, didDropInsideDroppable: false }; } if (lastImpact.at.type === 'REORDER') { return { impact: lastImpact, didDropInsideDroppable: true }; } const withoutMovement = { ...lastImpact, displaced: emptyGroups }; return { impact: withoutMovement, didDropInsideDroppable: true }; }); const dropMiddleware = _ref => { let { getState, dispatch } = _ref; return next => action => { if (action.type !== 'DROP') { next(action); return; } const state = getState(); const reason = action.payload.reason; if (state.phase === 'COLLECTING') { dispatch(dropPending({ reason })); return; } if (state.phase === 'IDLE') { return; } const isWaitingForDrop = state.phase === 'DROP_PENDING' && state.isWaiting; !!isWaitingForDrop ? invariant(false, 'A DROP action occurred while DROP_PENDING and still waiting') : void 0; !(state.phase === 'DRAGGING' || state.phase === 'DROP_PENDING') ? invariant(false, `Cannot drop in phase: ${state.phase}`) : void 0; const critical = state.critical; const dimensions = state.dimensions; const draggable = dimensions.draggables[state.critical.draggable.id]; const { impact, didDropInsideDroppable } = getDropImpact({ reason, lastImpact: state.impact, afterCritical: state.afterCritical, onLiftImpact: state.onLiftImpact, home: state.dimensions.droppables[state.critical.droppable.id], viewport: state.viewport, draggables: state.dimensions.draggables }); const destination = didDropInsideDroppable ? tryGetDestination(impact) : null; const combine = didDropInsideDroppable ? tryGetCombine(impact) : null; const source = { index: critical.draggable.index, droppableId: critical.droppable.id }; const result = { draggableId: draggable.descriptor.id, type: draggable.descriptor.type, source, reason, mode: state.movementMode, destination, combine }; const newHomeClientOffset = getNewHomeClientOffset({ impact, draggable, dimensions, viewport: state.viewport, afterCritical: state.afterCritical }); const completed = { critical: state.critical, afterCritical: state.afterCritical, result, impact }; const isAnimationRequired = !isEqual$1(state.current.client.offset, newHomeClientOffset) || Boolean(result.combine); if (!isAnimationRequired) { dispatch(completeDrop({ completed })); return; } const dropDuration = getDropDuration({ current: state.current.client.offset, destination: newHomeClientOffset, reason }); const args = { newHomeClientOffset, dropDuration, completed }; dispatch(animateDrop(args)); }; }; var drop = dropMiddleware; var getWindowScroll = (() => ({ x: window.pageXOffset, y: window.pageYOffset })); function getWindowScrollBinding(update) { return { eventName: 'scroll', options: { passive: true, capture: false }, fn: event => { if (event.target !== window && event.target !== window.document) { return; } update(); } }; } function getScrollListener(_ref) { let { onWindowScroll } = _ref; function updateScroll() { onWindowScroll(getWindowScroll()); } const scheduled = rafSchd__default["default"](updateScroll); const binding = getWindowScrollBinding(scheduled); let unbind = noop$2; function isActive() { return unbind !== noop$2; } function start() { !!isActive() ? invariant(false, 'Cannot start scroll listener when already active') : void 0; unbind = bindEvents(window, [binding]); } function stop() { !isActive() ? invariant(false, 'Cannot stop scroll listener when not active') : void 0; scheduled.cancel(); unbind(); unbind = noop$2; } return { start, stop, isActive }; } const shouldEnd = action => action.type === 'DROP_COMPLETE' || action.type === 'DROP_ANIMATE' || action.type === 'FLUSH'; const scrollListener = store => { const listener = getScrollListener({ onWindowScroll: newScroll => { store.dispatch(moveByWindowScroll({ newScroll })); } }); return next => action => { if (!listener.isActive() && action.type === 'INITIAL_PUBLISH') { listener.start(); } if (listener.isActive() && shouldEnd(action)) { listener.stop(); } next(action); }; }; var scrollListener$1 = scrollListener; var getExpiringAnnounce = (announce => { let wasCalled = false; let isExpired = false; const timeoutId = setTimeout(() => { isExpired = true; }); const result = message => { if (wasCalled) { warning('Announcement already made. Not making a second announcement') ; return; } if (isExpired) { warning(` Announcements cannot be made asynchronously. Default message has already been announced. `) ; return; } wasCalled = true; announce(message); clearTimeout(timeoutId); }; result.wasCalled = () => wasCalled; return result; }); var getAsyncMarshal = (() => { const entries = []; const execute = timerId => { const index = entries.findIndex(item => item.timerId === timerId); !(index !== -1) ? invariant(false, 'Could not find timer') : void 0; const [entry] = entries.splice(index, 1); entry.callback(); }; const add = fn => { const timerId = setTimeout(() => execute(timerId)); const entry = { timerId, callback: fn }; entries.push(entry); }; const flush = () => { if (!entries.length) { return; } const shallow = [...entries]; entries.length = 0; shallow.forEach(entry => { clearTimeout(entry.timerId); entry.callback(); }); }; return { add, flush }; }); const areLocationsEqual = (first, second) => { if (first == null && second == null) { return true; } if (first == null || second == null) { return false; } return first.droppableId === second.droppableId && first.index === second.index; }; const isCombineEqual = (first, second) => { if (first == null && second == null) { return true; } if (first == null || second == null) { return false; } return first.draggableId === second.draggableId && first.droppableId === second.droppableId; }; const isCriticalEqual = (first, second) => { if (first === second) { return true; } const isDraggableEqual = first.draggable.id === second.draggable.id && first.draggable.droppableId === second.draggable.droppableId && first.draggable.type === second.draggable.type && first.draggable.index === second.draggable.index; const isDroppableEqual = first.droppable.id === second.droppable.id && first.droppable.type === second.droppable.type; return isDraggableEqual && isDroppableEqual; }; const withTimings = (key, fn) => { fn(); }; const getDragStart = (critical, mode) => ({ draggableId: critical.draggable.id, type: critical.droppable.type, source: { droppableId: critical.droppable.id, index: critical.draggable.index }, mode }); function execute(responder, data, announce, getDefaultMessage) { if (!responder) { announce(getDefaultMessage(data)); return; } const willExpire = getExpiringAnnounce(announce); const provided = { announce: willExpire }; responder(data, provided); if (!willExpire.wasCalled()) { announce(getDefaultMessage(data)); } } var getPublisher = ((getResponders, announce) => { const asyncMarshal = getAsyncMarshal(); let dragging = null; const beforeCapture = (draggableId, mode) => { !!dragging ? invariant(false, 'Cannot fire onBeforeCapture as a drag start has already been published') : void 0; withTimings('onBeforeCapture', () => { const fn = getResponders().onBeforeCapture; if (fn) { const before = { draggableId, mode }; fn(before); } }); }; const beforeStart = (critical, mode) => { !!dragging ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : void 0; withTimings('onBeforeDragStart', () => { const fn = getResponders().onBeforeDragStart; if (fn) { fn(getDragStart(critical, mode)); } }); }; const start = (critical, mode) => { !!dragging ? invariant(false, 'Cannot fire onBeforeDragStart as a drag start has already been published') : void 0; const data = getDragStart(critical, mode); dragging = { mode, lastCritical: critical, lastLocation: data.source, lastCombine: null }; asyncMarshal.add(() => { withTimings('onDragStart', () => execute(getResponders().onDragStart, data, announce, preset$1.onDragStart)); }); }; const update = (critical, impact) => { const location = tryGetDestination(impact); const combine = tryGetCombine(impact); !dragging ? invariant(false, 'Cannot fire onDragMove when onDragStart has not been called') : void 0; const hasCriticalChanged = !isCriticalEqual(critical, dragging.lastCritical); if (hasCriticalChanged) { dragging.lastCritical = critical; } const hasLocationChanged = !areLocationsEqual(dragging.lastLocation, location); if (hasLocationChanged) { dragging.lastLocation = location; } const hasGroupingChanged = !isCombineEqual(dragging.lastCombine, combine); if (hasGroupingChanged) { dragging.lastCombine = combine; } if (!hasCriticalChanged && !hasLocationChanged && !hasGroupingChanged) { return; } const data = { ...getDragStart(critical, dragging.mode), combine, destination: location }; asyncMarshal.add(() => { withTimings('onDragUpdate', () => execute(getResponders().onDragUpdate, data, announce, preset$1.onDragUpdate)); }); }; const flush = () => { !dragging ? invariant(false, 'Can only flush responders while dragging') : void 0; asyncMarshal.flush(); }; const drop = result => { !dragging ? invariant(false, 'Cannot fire onDragEnd when there is no matching onDragStart') : void 0; dragging = null; withTimings('onDragEnd', () => execute(getResponders().onDragEnd, result, announce, preset$1.onDragEnd)); }; const abort = () => { if (!dragging) { return; } const result = { ...getDragStart(dragging.lastCritical, dragging.mode), combine: null, destination: null, reason: 'CANCEL' }; drop(result); }; return { beforeCapture, beforeStart, start, update, flush, drop, abort }; }); var responders = ((getResponders, announce) => { const publisher = getPublisher(getResponders, announce); return store => next => action => { if (action.type === 'BEFORE_INITIAL_CAPTURE') { publisher.beforeCapture(action.payload.draggableId, action.payload.movementMode); return; } if (action.type === 'INITIAL_PUBLISH') { const critical = action.payload.critical; publisher.beforeStart(critical, action.payload.movementMode); next(action); publisher.start(critical, action.payload.movementMode); return; } if (action.type === 'DROP_COMPLETE') { const result = action.payload.completed.result; publisher.flush(); next(action); publisher.drop(result); return; } next(action); if (action.type === 'FLUSH') { publisher.abort(); return; } const state = store.getState(); if (state.phase === 'DRAGGING') { publisher.update(state.critical, state.impact); } }; }); const dropAnimationFinishMiddleware = store => next => action => { if (action.type !== 'DROP_ANIMATION_FINISHED') { next(action); return; } const state = store.getState(); !(state.phase === 'DROP_ANIMATING') ? invariant(false, 'Cannot finish a drop animating when no drop is occurring') : void 0; store.dispatch(completeDrop({ completed: state.completed })); }; var dropAnimationFinish = dropAnimationFinishMiddleware; const dropAnimationFlushOnScrollMiddleware = store => { let unbind = null; let frameId = null; function clear() { if (frameId) { cancelAnimationFrame(frameId); frameId = null; } if (unbind) { unbind(); unbind = null; } } return next => action => { if (action.type === 'FLUSH' || action.type === 'DROP_COMPLETE' || action.type === 'DROP_ANIMATION_FINISHED') { clear(); } next(action); if (action.type !== 'DROP_ANIMATE') { return; } const binding = { eventName: 'scroll', options: { capture: true, passive: false, once: true }, fn: function flushDropAnimation() { const state = store.getState(); if (state.phase === 'DROP_ANIMATING') { store.dispatch(dropAnimationFinished()); } } }; frameId = requestAnimationFrame(() => { frameId = null; unbind = bindEvents(window, [binding]); }); }; }; var dropAnimationFlushOnScroll = dropAnimationFlushOnScrollMiddleware; var dimensionMarshalStopper = (marshal => () => next => action => { if ( action.type === 'DROP_COMPLETE' || action.type === 'FLUSH' || action.type === 'DROP_ANIMATE') { marshal.stopPublishing(); } next(action); }); var focus = (marshal => { let isWatching = false; return () => next => action => { if (action.type === 'INITIAL_PUBLISH') { isWatching = true; marshal.tryRecordFocus(action.payload.critical.draggable.id); next(action); marshal.tryRestoreFocusRecorded(); return; } next(action); if (!isWatching) { return; } if (action.type === 'FLUSH') { isWatching = false; marshal.tryRestoreFocusRecorded(); return; } if (action.type === 'DROP_COMPLETE') { isWatching = false; const result = action.payload.completed.result; if (result.combine) { marshal.tryShiftRecord(result.draggableId, result.combine.draggableId); } marshal.tryRestoreFocusRecorded(); } }; }); const shouldStop = action => action.type === 'DROP_COMPLETE' || action.type === 'DROP_ANIMATE' || action.type === 'FLUSH'; var autoScroll = (autoScroller => store => next => action => { if (shouldStop(action)) { autoScroller.stop(); next(action); return; } if (action.type === 'INITIAL_PUBLISH') { next(action); const state = store.getState(); !(state.phase === 'DRAGGING') ? invariant(false, 'Expected phase to be DRAGGING after INITIAL_PUBLISH') : void 0; autoScroller.start(state); return; } next(action); autoScroller.scroll(store.getState()); }); const pendingDrop = store => next => action => { next(action); if (action.type !== 'PUBLISH_WHILE_DRAGGING') { return; } const postActionState = store.getState(); if (postActionState.phase !== 'DROP_PENDING') { return; } if (postActionState.isWaiting) { return; } store.dispatch(drop$1({ reason: postActionState.reason })); }; var pendingDrop$1 = pendingDrop; const composeEnhancers = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ name: '@hello-pangea/dnd' }) : redux.compose; var createStore$1 = (_ref => { let { dimensionMarshal, focusMarshal, styleMarshal, getResponders, announce, autoScroller } = _ref; return redux.createStore(reducer$1, composeEnhancers(redux.applyMiddleware( style(styleMarshal), dimensionMarshalStopper(dimensionMarshal), lift(dimensionMarshal), drop, dropAnimationFinish, dropAnimationFlushOnScroll, pendingDrop$1, autoScroll(autoScroller), scrollListener$1, focus(focusMarshal), responders(getResponders, announce)))); }); const clean$1 = () => ({ additions: {}, removals: {}, modified: {} }); function createPublisher(_ref) { let { registry, callbacks } = _ref; let staging = clean$1(); let frameId = null; const collect = () => { if (frameId) { return; } callbacks.collectionStarting(); frameId = requestAnimationFrame(() => { frameId = null; const { additions, removals, modified } = staging; const added = Object.keys(additions).map( id => registry.draggable.getById(id).getDimension(origin)) .sort((a, b) => a.descriptor.index - b.descriptor.index); const updated = Object.keys(modified).map(id => { const entry = registry.droppable.getById(id); const scroll = entry.callbacks.getScrollWhileDragging(); return { droppableId: id, scroll }; }); const result = { additions: added, removals: Object.keys(removals), modified: updated }; staging = clean$1(); callbacks.publish(result); }); }; const add = entry => { const id = entry.descriptor.id; staging.additions[id] = entry; staging.modified[entry.descriptor.droppableId] = true; if (staging.removals[id]) { delete staging.removals[id]; } collect(); }; const remove = entry => { const descriptor = entry.descriptor; staging.removals[descriptor.id] = true; staging.modified[descriptor.droppableId] = true; if (staging.additions[descriptor.id]) { delete staging.additions[descriptor.id]; } collect(); }; const stop = () => { if (!frameId) { return; } cancelAnimationFrame(frameId); frameId = null; staging = clean$1(); }; return { add, remove, stop }; } var getMaxScroll = (_ref => { let { scrollHeight, scrollWidth, height, width } = _ref; const maxScroll = subtract( { x: scrollWidth, y: scrollHeight }, { x: width, y: height }); const adjustedMaxScroll = { x: Math.max(0, maxScroll.x), y: Math.max(0, maxScroll.y) }; return adjustedMaxScroll; }); var getDocumentElement = (() => { const doc = document.documentElement; !doc ? invariant(false, 'Cannot find document.documentElement') : void 0; return doc; }); var getMaxWindowScroll = (() => { const doc = getDocumentElement(); const maxScroll = getMaxScroll({ scrollHeight: doc.scrollHeight, scrollWidth: doc.scrollWidth, width: doc.clientWidth, height: doc.clientHeight }); return maxScroll; }); var getViewport = (() => { const scroll = getWindowScroll(); const maxScroll = getMaxWindowScroll(); const top = scroll.y; const left = scroll.x; const doc = getDocumentElement(); const width = doc.clientWidth; const height = doc.clientHeight; const right = left + width; const bottom = top + height; const frame = cssBoxModel.getRect({ top, left, right, bottom }); const viewport = { frame, scroll: { initial: scroll, current: scroll, max: maxScroll, diff: { value: origin, displacement: origin } } }; return viewport; }); var getInitialPublish = (_ref => { let { critical, scrollOptions, registry } = _ref; const viewport = getViewport(); const windowScroll = viewport.scroll.current; const home = critical.droppable; const droppables = registry.droppable.getAllByType(home.type).map(entry => entry.callbacks.getDimensionAndWatchScroll(windowScroll, scrollOptions)); const draggables = registry.draggable.getAllByType(critical.draggable.type).map(entry => entry.getDimension(windowScroll)); const dimensions = { draggables: toDraggableMap(draggables), droppables: toDroppableMap(droppables) }; const result = { dimensions, critical, viewport }; return result; }); function shouldPublishUpdate(registry, dragging, entry) { if (entry.descriptor.id === dragging.id) { return false; } if (entry.descriptor.type !== dragging.type) { return false; } const home = registry.droppable.getById(entry.descriptor.droppableId); if (home.descriptor.mode !== 'virtual') { warning(` You are attempting to add or remove a Draggable [id: ${entry.descriptor.id}] while a drag is occurring. This is only supported for virtual lists. See https://github.com/hello-pangea/dnd/blob/main/docs/patterns/virtual-lists.md `) ; return false; } return true; } var createDimensionMarshal = ((registry, callbacks) => { let collection = null; const publisher = createPublisher({ callbacks: { publish: callbacks.publishWhileDragging, collectionStarting: callbacks.collectionStarting }, registry }); const updateDroppableIsEnabled = (id, isEnabled) => { !registry.droppable.exists(id) ? invariant(false, `Cannot update is enabled flag of Droppable ${id} as it is not registered`) : void 0; if (!collection) { return; } callbacks.updateDroppableIsEnabled({ id, isEnabled }); }; const updateDroppableIsCombineEnabled = (id, isCombineEnabled) => { if (!collection) { return; } !registry.droppable.exists(id) ? invariant(false, `Cannot update isCombineEnabled flag of Droppable ${id} as it is not registered`) : void 0; callbacks.updateDroppableIsCombineEnabled({ id, isCombineEnabled }); }; const updateDroppableScroll = (id, newScroll) => { if (!collection) { return; } !registry.droppable.exists(id) ? invariant(false, `Cannot update the scroll on Droppable ${id} as it is not registered`) : void 0; callbacks.updateDroppableScroll({ id, newScroll }); }; const scrollDroppable = (id, change) => { if (!collection) { return; } registry.droppable.getById(id).callbacks.scroll(change); }; const stopPublishing = () => { if (!collection) { return; } publisher.stop(); const home = collection.critical.droppable; registry.droppable.getAllByType(home.type).forEach(entry => entry.callbacks.dragStopped()); collection.unsubscribe(); collection = null; }; const subscriber = event => { !collection ? invariant(false, 'Should only be subscribed when a collection is occurring') : void 0; const dragging = collection.critical.draggable; if (event.type === 'ADDITION') { if (shouldPublishUpdate(registry, dragging, event.value)) { publisher.add(event.value); } } if (event.type === 'REMOVAL') { if (shouldPublishUpdate(registry, dragging, event.value)) { publisher.remove(event.value); } } }; const startPublishing = request => { !!collection ? invariant(false, 'Cannot start capturing critical dimensions as there is already a collection') : void 0; const entry = registry.draggable.getById(request.draggableId); const home = registry.droppable.getById(entry.descriptor.droppableId); const critical = { draggable: entry.descriptor, droppable: home.descriptor }; const unsubscribe = registry.subscribe(subscriber); collection = { critical, unsubscribe }; return getInitialPublish({ critical, registry, scrollOptions: request.scrollOptions }); }; const marshal = { updateDroppableIsEnabled, updateDroppableIsCombineEnabled, scrollDroppable, updateDroppableScroll, startPublishing, stopPublishing }; return marshal; }); var canStartDrag = ((state, id) => { if (state.phase === 'IDLE') { return true; } if (state.phase !== 'DROP_ANIMATING') { return false; } if (state.completed.result.draggableId === id) { return false; } return state.completed.result.reason === 'DROP'; }); var scrollWindow = (change => { window.scrollBy(change.x, change.y); }); const getScrollableDroppables = memoizeOne__default["default"](droppables => toDroppableList(droppables).filter(droppable => { if (!droppable.isEnabled) { return false; } if (!droppable.frame) { return false; } return true; })); const getScrollableDroppableOver = (target, droppables) => { const maybe = getScrollableDroppables(droppables).find(droppable => { !droppable.frame ? invariant(false, 'Invalid result') : void 0; return isPositionInFrame(droppable.frame.pageMarginBox)(target); }) || null; return maybe; }; var getBestScrollableDroppable = (_ref => { let { center, destination, droppables } = _ref; if (destination) { const dimension = droppables[destination]; if (!dimension.frame) { return null; } return dimension; } const dimension = getScrollableDroppableOver(center, droppables); return dimension; }); const defaultAutoScrollerOptions = { startFromPercentage: 0.25, maxScrollAtPercentage: 0.05, maxPixelScroll: 28, ease: percentage => percentage ** 2, durationDampening: { stopDampeningAt: 1200, accelerateAt: 360 }, disabled: false }; var getDistanceThresholds = (function (container, axis, getAutoScrollerOptions) { if (getAutoScrollerOptions === void 0) { getAutoScrollerOptions = () => defaultAutoScrollerOptions; } const autoScrollerOptions = getAutoScrollerOptions(); const startScrollingFrom = container[axis.size] * autoScrollerOptions.startFromPercentage; const maxScrollValueAt = container[axis.size] * autoScrollerOptions.maxScrollAtPercentage; const thresholds = { startScrollingFrom, maxScrollValueAt }; return thresholds; }); var getPercentage = (_ref => { let { startOfRange, endOfRange, current } = _ref; const range = endOfRange - startOfRange; if (range === 0) { warning(` Detected distance range of 0 in the fluid auto scroller This is unexpected and would cause a divide by 0 issue. Not allowing an auto scroll `) ; return 0; } const currentInRange = current - startOfRange; const percentage = currentInRange / range; return percentage; }); var minScroll = 1; var getValueFromDistance = (function (distanceToEdge, thresholds, getAutoScrollerOptions) { if (getAutoScrollerOptions === void 0) { getAutoScrollerOptions = () => defaultAutoScrollerOptions; } const autoScrollerOptions = getAutoScrollerOptions(); if (distanceToEdge > thresholds.startScrollingFrom) { return 0; } if (distanceToEdge <= thresholds.maxScrollValueAt) { return autoScrollerOptions.maxPixelScroll; } if (distanceToEdge === thresholds.startScrollingFrom) { return minScroll; } const percentageFromMaxScrollValueAt = getPercentage({ startOfRange: thresholds.maxScrollValueAt, endOfRange: thresholds.startScrollingFrom, current: distanceToEdge }); const percentageFromStartScrollingFrom = 1 - percentageFromMaxScrollValueAt; const scroll = autoScrollerOptions.maxPixelScroll * autoScrollerOptions.ease(percentageFromStartScrollingFrom); return Math.ceil(scroll); }); var dampenValueByTime = ((proposedScroll, dragStartTime, getAutoScrollerOptions) => { const autoScrollerOptions = getAutoScrollerOptions(); const accelerateAt = autoScrollerOptions.durationDampening.accelerateAt; const stopAt = autoScrollerOptions.durationDampening.stopDampeningAt; const startOfRange = dragStartTime; const endOfRange = stopAt; const now = Date.now(); const runTime = now - startOfRange; if (runTime >= stopAt) { return proposedScroll; } if (runTime < accelerateAt) { return minScroll; } const betweenAccelerateAtAndStopAtPercentage = getPercentage({ startOfRange: accelerateAt, endOfRange, current: runTime }); const scroll = proposedScroll * autoScrollerOptions.ease(betweenAccelerateAtAndStopAtPercentage); return Math.ceil(scroll); }); var getValue = (_ref => { let { distanceToEdge, thresholds, dragStartTime, shouldUseTimeDampening, getAutoScrollerOptions } = _ref; const scroll = getValueFromDistance(distanceToEdge, thresholds, getAutoScrollerOptions); if (scroll === 0) { return 0; } if (!shouldUseTimeDampening) { return scroll; } return Math.max(dampenValueByTime(scroll, dragStartTime, getAutoScrollerOptions), minScroll); }); var getScrollOnAxis = (_ref => { let { container, distanceToEdges, dragStartTime, axis, shouldUseTimeDampening, getAutoScrollerOptions } = _ref; const thresholds = getDistanceThresholds(container, axis, getAutoScrollerOptions); const isCloserToEnd = distanceToEdges[axis.end] < distanceToEdges[axis.start]; if (isCloserToEnd) { return getValue({ distanceToEdge: distanceToEdges[axis.end], thresholds, dragStartTime, shouldUseTimeDampening, getAutoScrollerOptions }); } return -1 * getValue({ distanceToEdge: distanceToEdges[axis.start], thresholds, dragStartTime, shouldUseTimeDampening, getAutoScrollerOptions }); }); var adjustForSizeLimits = (_ref => { let { container, subject, proposedScroll } = _ref; const isTooBigVertically = subject.height > container.height; const isTooBigHorizontally = subject.width > container.width; if (!isTooBigHorizontally && !isTooBigVertically) { return proposedScroll; } if (isTooBigHorizontally && isTooBigVertically) { return null; } return { x: isTooBigHorizontally ? 0 : proposedScroll.x, y: isTooBigVertically ? 0 : proposedScroll.y }; }); const clean = apply(value => value === 0 ? 0 : value); var getScroll$1 = (_ref => { let { dragStartTime, container, subject, center, shouldUseTimeDampening, getAutoScrollerOptions } = _ref; const distanceToEdges = { top: center.y - container.top, right: container.right - center.x, bottom: container.bottom - center.y, left: center.x - container.left }; const y = getScrollOnAxis({ container, distanceToEdges, dragStartTime, axis: vertical, shouldUseTimeDampening, getAutoScrollerOptions }); const x = getScrollOnAxis({ container, distanceToEdges, dragStartTime, axis: horizontal, shouldUseTimeDampening, getAutoScrollerOptions }); const required = clean({ x, y }); if (isEqual$1(required, origin)) { return null; } const limited = adjustForSizeLimits({ container, subject, proposedScroll: required }); if (!limited) { return null; } return isEqual$1(limited, origin) ? null : limited; }); const smallestSigned = apply(value => { if (value === 0) { return 0; } return value > 0 ? 1 : -1; }); const getOverlap = (() => { const getRemainder = (target, max) => { if (target < 0) { return target; } if (target > max) { return target - max; } return 0; }; return _ref => { let { current, max, change } = _ref; const targetScroll = add(current, change); const overlap = { x: getRemainder(targetScroll.x, max.x), y: getRemainder(targetScroll.y, max.y) }; if (isEqual$1(overlap, origin)) { return null; } return overlap; }; })(); const canPartiallyScroll = _ref2 => { let { max: rawMax, current, change } = _ref2; const max = { x: Math.max(current.x, rawMax.x), y: Math.max(current.y, rawMax.y) }; const smallestChange = smallestSigned(change); const overlap = getOverlap({ max, current, change: smallestChange }); if (!overlap) { return true; } if (smallestChange.x !== 0 && overlap.x === 0) { return true; } if (smallestChange.y !== 0 && overlap.y === 0) { return true; } return false; }; const canScrollWindow = (viewport, change) => canPartiallyScroll({ current: viewport.scroll.current, max: viewport.scroll.max, change }); const getWindowOverlap = (viewport, change) => { if (!canScrollWindow(viewport, change)) { return null; } const max = viewport.scroll.max; const current = viewport.scroll.current; return getOverlap({ current, max, change }); }; const canScrollDroppable = (droppable, change) => { const frame = droppable.frame; if (!frame) { return false; } return canPartiallyScroll({ current: frame.scroll.current, max: frame.scroll.max, change }); }; const getDroppableOverlap = (droppable, change) => { const frame = droppable.frame; if (!frame) { return null; } if (!canScrollDroppable(droppable, change)) { return null; } return getOverlap({ current: frame.scroll.current, max: frame.scroll.max, change }); }; var getWindowScrollChange = (_ref => { let { viewport, subject, center, dragStartTime, shouldUseTimeDampening, getAutoScrollerOptions } = _ref; const scroll = getScroll$1({ dragStartTime, container: viewport.frame, subject, center, shouldUseTimeDampening, getAutoScrollerOptions }); return scroll && canScrollWindow(viewport, scroll) ? scroll : null; }); var getDroppableScrollChange = (_ref => { let { droppable, subject, center, dragStartTime, shouldUseTimeDampening, getAutoScrollerOptions } = _ref; const frame = droppable.frame; if (!frame) { return null; } const scroll = getScroll$1({ dragStartTime, container: frame.pageMarginBox, subject, center, shouldUseTimeDampening, getAutoScrollerOptions }); return scroll && canScrollDroppable(droppable, scroll) ? scroll : null; }); var scroll = (_ref => { let { state, dragStartTime, shouldUseTimeDampening, scrollWindow, scrollDroppable, getAutoScrollerOptions } = _ref; const center = state.current.page.borderBoxCenter; const draggable = state.dimensions.draggables[state.critical.draggable.id]; const subject = draggable.page.marginBox; if (state.isWindowScrollAllowed) { const viewport = state.viewport; const change = getWindowScrollChange({ dragStartTime, viewport, subject, center, shouldUseTimeDampening, getAutoScrollerOptions }); if (change) { scrollWindow(change); return; } } const droppable = getBestScrollableDroppable({ center, destination: whatIsDraggedOver(state.impact), droppables: state.dimensions.droppables }); if (!droppable) { return; } const change = getDroppableScrollChange({ dragStartTime, droppable, subject, center, shouldUseTimeDampening, getAutoScrollerOptions }); if (change) { scrollDroppable(droppable.descriptor.id, change); } }); var createFluidScroller = (_ref => { let { scrollWindow, scrollDroppable, getAutoScrollerOptions = () => defaultAutoScrollerOptions } = _ref; const scheduleWindowScroll = rafSchd__default["default"](scrollWindow); const scheduleDroppableScroll = rafSchd__default["default"](scrollDroppable); let dragging = null; const tryScroll = state => { !dragging ? invariant(false, 'Cannot fluid scroll if not dragging') : void 0; const { shouldUseTimeDampening, dragStartTime } = dragging; scroll({ state, scrollWindow: scheduleWindowScroll, scrollDroppable: scheduleDroppableScroll, dragStartTime, shouldUseTimeDampening, getAutoScrollerOptions }); }; const start$1 = state => { !!dragging ? invariant(false, 'Cannot start auto scrolling when already started') : void 0; const dragStartTime = Date.now(); let wasScrollNeeded = false; const fakeScrollCallback = () => { wasScrollNeeded = true; }; scroll({ state, dragStartTime: 0, shouldUseTimeDampening: false, scrollWindow: fakeScrollCallback, scrollDroppable: fakeScrollCallback, getAutoScrollerOptions }); dragging = { dragStartTime, shouldUseTimeDampening: wasScrollNeeded }; if (wasScrollNeeded) { tryScroll(state); } }; const stop = () => { if (!dragging) { return; } scheduleWindowScroll.cancel(); scheduleDroppableScroll.cancel(); dragging = null; }; return { start: start$1, stop, scroll: tryScroll }; }); var createJumpScroller = (_ref => { let { move, scrollDroppable, scrollWindow } = _ref; const moveByOffset = (state, offset) => { const client = add(state.current.client.selection, offset); move({ client }); }; const scrollDroppableAsMuchAsItCan = (droppable, change) => { if (!canScrollDroppable(droppable, change)) { return change; } const overlap = getDroppableOverlap(droppable, change); if (!overlap) { scrollDroppable(droppable.descriptor.id, change); return null; } const whatTheDroppableCanScroll = subtract(change, overlap); scrollDroppable(droppable.descriptor.id, whatTheDroppableCanScroll); const remainder = subtract(change, whatTheDroppableCanScroll); return remainder; }; const scrollWindowAsMuchAsItCan = (isWindowScrollAllowed, viewport, change) => { if (!isWindowScrollAllowed) { return change; } if (!canScrollWindow(viewport, change)) { return change; } const overlap = getWindowOverlap(viewport, change); if (!overlap) { scrollWindow(change); return null; } const whatTheWindowCanScroll = subtract(change, overlap); scrollWindow(whatTheWindowCanScroll); const remainder = subtract(change, whatTheWindowCanScroll); return remainder; }; const jumpScroller = state => { const request = state.scrollJumpRequest; if (!request) { return; } const destination = whatIsDraggedOver(state.impact); !destination ? invariant(false, 'Cannot perform a jump scroll when there is no destination') : void 0; const droppableRemainder = scrollDroppableAsMuchAsItCan(state.dimensions.droppables[destination], request); if (!droppableRemainder) { return; } const viewport = state.viewport; const windowRemainder = scrollWindowAsMuchAsItCan(state.isWindowScrollAllowed, viewport, droppableRemainder); if (!windowRemainder) { return; } moveByOffset(state, windowRemainder); }; return jumpScroller; }); var createAutoScroller = (_ref => { let { scrollDroppable, scrollWindow, move, getAutoScrollerOptions } = _ref; const fluidScroller = createFluidScroller({ scrollWindow, scrollDroppable, getAutoScrollerOptions }); const jumpScroll = createJumpScroller({ move, scrollWindow, scrollDroppable }); const scroll = state => { const autoScrollerOptions = getAutoScrollerOptions(); if (autoScrollerOptions.disabled || state.phase !== 'DRAGGING') { return; } if (state.movementMode === 'FLUID') { fluidScroller.scroll(state); return; } if (!state.scrollJumpRequest) { return; } jumpScroll(state); }; const scroller = { scroll, start: fluidScroller.start, stop: fluidScroller.stop }; return scroller; }); const prefix = 'data-rfd'; const dragHandle = (() => { const base = `${prefix}-drag-handle`; return { base, draggableId: `${base}-draggable-id`, contextId: `${base}-context-id` }; })(); const draggable = (() => { const base = `${prefix}-draggable`; return { base, contextId: `${base}-context-id`, id: `${base}-id` }; })(); const droppable = (() => { const base = `${prefix}-droppable`; return { base, contextId: `${base}-context-id`, id: `${base}-id` }; })(); const scrollContainer = { contextId: `${prefix}-scroll-container-context-id` }; const makeGetSelector = context => attribute => `[${attribute}="${context}"]`; const getStyles = (rules, property) => rules.map(rule => { const value = rule.styles[property]; if (!value) { return ''; } return `${rule.selector} { ${value} }`; }).join(' '); const noPointerEvents = 'pointer-events: none;'; var getStyles$1 = (contextId => { const getSelector = makeGetSelector(contextId); const dragHandle$1 = (() => { const grabCursor = ` cursor: -webkit-grab; cursor: grab; `; return { selector: getSelector(dragHandle.contextId), styles: { always: ` -webkit-touch-callout: none; -webkit-tap-highlight-color: rgba(0,0,0,0); touch-action: manipulation; `, resting: grabCursor, dragging: noPointerEvents, dropAnimating: grabCursor } }; })(); const draggable$1 = (() => { const transition = ` transition: ${transitions.outOfTheWay}; `; return { selector: getSelector(draggable.contextId), styles: { dragging: transition, dropAnimating: transition, userCancel: transition } }; })(); const droppable$1 = { selector: getSelector(droppable.contextId), styles: { always: `overflow-anchor: none;` } }; const body = { selector: 'body', styles: { dragging: ` cursor: grabbing; cursor: -webkit-grabbing; user-select: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; overflow-anchor: none; ` } }; const rules = [draggable$1, dragHandle$1, droppable$1, body]; return { always: getStyles(rules, 'always'), resting: getStyles(rules, 'resting'), dragging: getStyles(rules, 'dragging'), dropAnimating: getStyles(rules, 'dropAnimating'), userCancel: getStyles(rules, 'userCancel') }; }); const useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? React.useLayoutEffect : React.useEffect; var useLayoutEffect = useIsomorphicLayoutEffect; const getHead = () => { const head = document.querySelector('head'); !head ? invariant(false, 'Cannot find the head to append a style to') : void 0; return head; }; const createStyleEl = nonce => { const el = document.createElement('style'); if (nonce) { el.setAttribute('nonce', nonce); } el.type = 'text/css'; return el; }; function useStyleMarshal(contextId, nonce) { const styles = useMemoOne.useMemo(() => getStyles$1(contextId), [contextId]); const alwaysRef = React.useRef(null); const dynamicRef = React.useRef(null); const setDynamicStyle = useMemoOne.useCallback( memoizeOne__default["default"](proposed => { const el = dynamicRef.current; !el ? invariant(false, 'Cannot set dynamic style element if it is not set') : void 0; el.textContent = proposed; }), []); const setAlwaysStyle = useMemoOne.useCallback(proposed => { const el = alwaysRef.current; !el ? invariant(false, 'Cannot set dynamic style element if it is not set') : void 0; el.textContent = proposed; }, []); useLayoutEffect(() => { !(!alwaysRef.current && !dynamicRef.current) ? invariant(false, 'style elements already mounted') : void 0; const always = createStyleEl(nonce); const dynamic = createStyleEl(nonce); alwaysRef.current = always; dynamicRef.current = dynamic; always.setAttribute(`${prefix}-always`, contextId); dynamic.setAttribute(`${prefix}-dynamic`, contextId); getHead().appendChild(always); getHead().appendChild(dynamic); setAlwaysStyle(styles.always); setDynamicStyle(styles.resting); return () => { const remove = ref => { const current = ref.current; !current ? invariant(false, 'Cannot unmount ref as it is not set') : void 0; getHead().removeChild(current); ref.current = null; }; remove(alwaysRef); remove(dynamicRef); }; }, [nonce, setAlwaysStyle, setDynamicStyle, styles.always, styles.resting, contextId]); const dragging = useMemoOne.useCallback(() => setDynamicStyle(styles.dragging), [setDynamicStyle, styles.dragging]); const dropping = useMemoOne.useCallback(reason => { if (reason === 'DROP') { setDynamicStyle(styles.dropAnimating); return; } setDynamicStyle(styles.userCancel); }, [setDynamicStyle, styles.dropAnimating, styles.userCancel]); const resting = useMemoOne.useCallback(() => { if (!dynamicRef.current) { return; } setDynamicStyle(styles.resting); }, [setDynamicStyle, styles.resting]); const marshal = useMemoOne.useMemo(() => ({ dragging, dropping, resting }), [dragging, dropping, resting]); return marshal; } function querySelectorAll(parentNode, selector) { return Array.from(parentNode.querySelectorAll(selector)); } var getWindowFromEl = (el => { var _el$ownerDocument; return (el == null ? void 0 : (_el$ownerDocument = el.ownerDocument) == null ? void 0 : _el$ownerDocument.defaultView) || window; }); function isHtmlElement(el) { return el instanceof getWindowFromEl(el).HTMLElement; } function findDragHandle(contextId, draggableId) { const selector = `[${dragHandle.contextId}="${contextId}"]`; const possible = querySelectorAll(document, selector); if (!possible.length) { warning(`Unable to find any drag handles in the context "${contextId}"`) ; return null; } const handle = possible.find(el => { return el.getAttribute(dragHandle.draggableId) === draggableId; }); if (!handle) { warning(`Unable to find drag handle with id "${draggableId}" as no handle with a matching id was found`) ; return null; } if (!isHtmlElement(handle)) { warning('drag handle needs to be a HTMLElement') ; return null; } return handle; } function useFocusMarshal(contextId) { const entriesRef = React.useRef({}); const recordRef = React.useRef(null); const restoreFocusFrameRef = React.useRef(null); const isMountedRef = React.useRef(false); const register = useMemoOne.useCallback(function register(id, focus) { const entry = { id, focus }; entriesRef.current[id] = entry; return function unregister() { const entries = entriesRef.current; const current = entries[id]; if (current !== entry) { delete entries[id]; } }; }, []); const tryGiveFocus = useMemoOne.useCallback(function tryGiveFocus(tryGiveFocusTo) { const handle = findDragHandle(contextId, tryGiveFocusTo); if (handle && handle !== document.activeElement) { handle.focus(); } }, [contextId]); const tryShiftRecord = useMemoOne.useCallback(function tryShiftRecord(previous, redirectTo) { if (recordRef.current === previous) { recordRef.current = redirectTo; } }, []); const tryRestoreFocusRecorded = useMemoOne.useCallback(function tryRestoreFocusRecorded() { if (restoreFocusFrameRef.current) { return; } if (!isMountedRef.current) { return; } restoreFocusFrameRef.current = requestAnimationFrame(() => { restoreFocusFrameRef.current = null; const record = recordRef.current; if (record) { tryGiveFocus(record); } }); }, [tryGiveFocus]); const tryRecordFocus = useMemoOne.useCallback(function tryRecordFocus(id) { recordRef.current = null; const focused = document.activeElement; if (!focused) { return; } if (focused.getAttribute(dragHandle.draggableId) !== id) { return; } recordRef.current = id; }, []); useLayoutEffect(() => { isMountedRef.current = true; return function clearFrameOnUnmount() { isMountedRef.current = false; const frameId = restoreFocusFrameRef.current; if (frameId) { cancelAnimationFrame(frameId); } }; }, []); const marshal = useMemoOne.useMemo(() => ({ register, tryRecordFocus, tryRestoreFocusRecorded, tryShiftRecord }), [register, tryRecordFocus, tryRestoreFocusRecorded, tryShiftRecord]); return marshal; } function createRegistry() { const entries = { draggables: {}, droppables: {} }; const subscribers = []; function subscribe(cb) { subscribers.push(cb); return function unsubscribe() { const index = subscribers.indexOf(cb); if (index === -1) { return; } subscribers.splice(index, 1); }; } function notify(event) { if (subscribers.length) { subscribers.forEach(cb => cb(event)); } } function findDraggableById(id) { return entries.draggables[id] || null; } function getDraggableById(id) { const entry = findDraggableById(id); !entry ? invariant(false, `Cannot find draggable entry with id [${id}]`) : void 0; return entry; } const draggableAPI = { register: entry => { entries.draggables[entry.descriptor.id] = entry; notify({ type: 'ADDITION', value: entry }); }, update: (entry, last) => { const current = entries.draggables[last.descriptor.id]; if (!current) { return; } if (current.uniqueId !== entry.uniqueId) { return; } delete entries.draggables[last.descriptor.id]; entries.draggables[entry.descriptor.id] = entry; }, unregister: entry => { const draggableId = entry.descriptor.id; const current = findDraggableById(draggableId); if (!current) { return; } if (entry.uniqueId !== current.uniqueId) { return; } delete entries.draggables[draggableId]; if (entries.droppables[entry.descriptor.droppableId]) { notify({ type: 'REMOVAL', value: entry }); } }, getById: getDraggableById, findById: findDraggableById, exists: id => Boolean(findDraggableById(id)), getAllByType: type => Object.values(entries.draggables).filter(entry => entry.descriptor.type === type) }; function findDroppableById(id) { return entries.droppables[id] || null; } function getDroppableById(id) { const entry = findDroppableById(id); !entry ? invariant(false, `Cannot find droppable entry with id [${id}]`) : void 0; return entry; } const droppableAPI = { register: entry => { entries.droppables[entry.descriptor.id] = entry; }, unregister: entry => { const current = findDroppableById(entry.descriptor.id); if (!current) { return; } if (entry.uniqueId !== current.uniqueId) { return; } delete entries.droppables[entry.descriptor.id]; }, getById: getDroppableById, findById: findDroppableById, exists: id => Boolean(findDroppableById(id)), getAllByType: type => Object.values(entries.droppables).filter(entry => entry.descriptor.type === type) }; function clean() { entries.draggables = {}; entries.droppables = {}; subscribers.length = 0; } return { draggable: draggableAPI, droppable: droppableAPI, subscribe, clean }; } function useRegistry() { const registry = useMemoOne.useMemo(createRegistry, []); React.useEffect(() => { return function unmount() { if (React__default["default"].version.startsWith('16') || React__default["default"].version.startsWith('17')) { requestAnimationFrame(registry.clean); } else { registry.clean(); } }; }, [registry]); return registry; } var StoreContext = React__default["default"].createContext(null); var getBodyElement = (() => { const body = document.body; !body ? invariant(false, 'Cannot find document.body') : void 0; return body; }); const visuallyHidden = { position: 'absolute', width: '1px', height: '1px', margin: '-1px', border: '0', padding: '0', overflow: 'hidden', clip: 'rect(0 0 0 0)', 'clip-path': 'inset(100%)' }; var visuallyHidden$1 = visuallyHidden; const getId = contextId => `rfd-announcement-${contextId}`; function useAnnouncer(contextId) { const id = useMemoOne.useMemo(() => getId(contextId), [contextId]); const ref = React.useRef(null); React.useEffect(function setup() { const el = document.createElement('div'); ref.current = el; el.id = id; el.setAttribute('aria-live', 'assertive'); el.setAttribute('aria-atomic', 'true'); _extends__default["default"](el.style, visuallyHidden$1); getBodyElement().appendChild(el); return function cleanup() { setTimeout(function remove() { const body = getBodyElement(); if (body.contains(el)) { body.removeChild(el); } if (el === ref.current) { ref.current = null; } }); }; }, [id]); const announce = useMemoOne.useCallback(message => { const el = ref.current; if (el) { el.textContent = message; return; } warning(` A screen reader message was trying to be announced but it was unable to do so. This can occur if you unmount your <DragDropContext /> in your onDragEnd. Consider calling provided.announce() before the unmount so that the instruction will not be lost for users relying on a screen reader. Message not passed to screen reader: "${message}" `) ; }, []); return announce; } let count$1 = 0; const defaults$2 = { separator: '::' }; function resetDeprecatedUniqueId() { count$1 = 0; } function useDeprecatedUniqueId(prefix, options) { if (options === void 0) { options = defaults$2; } return useMemoOne.useMemo(() => `${prefix}${options.separator}${count$1++}`, [options.separator, prefix]); } function useUniqueId(prefix, options) { if (options === void 0) { options = defaults$2; } const id = React__default["default"].useId(); return useMemoOne.useMemo(() => `${prefix}${options.separator}${id}`, [options.separator, prefix, id]); } var useUniqueId$1 = 'useId' in React__default["default"] ? useUniqueId : useDeprecatedUniqueId; function getElementId(_ref) { let { contextId, uniqueId } = _ref; return `rfd-hidden-text-${contextId}-${uniqueId}`; } function useHiddenTextElement(_ref2) { let { contextId, text } = _ref2; const uniqueId = useUniqueId$1('hidden-text', { separator: '-' }); const id = useMemoOne.useMemo(() => getElementId({ contextId, uniqueId }), [uniqueId, contextId]); React.useEffect(function mount() { const el = document.createElement('div'); el.id = id; el.textContent = text; el.style.display = 'none'; getBodyElement().appendChild(el); return function unmount() { const body = getBodyElement(); if (body.contains(el)) { body.removeChild(el); } }; }, [id, text]); return id; } var AppContext = React__default["default"].createContext(null); var peerDependencies = { react: "^16.8.5 || ^17.0.0 || ^18.0.0", "react-dom": "^16.8.5 || ^17.0.0 || ^18.0.0" }; const semver = /(\d+)\.(\d+)\.(\d+)/; const getVersion = value => { const result = semver.exec(value); !(result != null) ? invariant(false, `Unable to parse React version ${value}`) : void 0; const major = Number(result[1]); const minor = Number(result[2]); const patch = Number(result[3]); return { major, minor, patch, raw: value }; }; const isSatisfied = (expected, actual) => { if (actual.major > expected.major) { return true; } if (actual.major < expected.major) { return false; } if (actual.minor > expected.minor) { return true; } if (actual.minor < expected.minor) { return false; } return actual.patch >= expected.patch; }; var checkReactVersion = ((peerDepValue, actualValue) => { const peerDep = getVersion(peerDepValue); const actual = getVersion(actualValue); if (isSatisfied(peerDep, actual)) { return; } warning(` React version: [${actual.raw}] does not satisfy expected peer dependency version: [${peerDep.raw}] This can result in run time bugs, and even fatal crashes `) ; }); const suffix = ` We expect a html5 doctype: <!doctype html> This is to ensure consistent browser layout and measurement More information: https://github.com/hello-pangea/dnd/blob/main/docs/guides/doctype.md `; var checkDoctype = (doc => { const doctype = doc.doctype; if (!doctype) { warning(` No <!doctype html> found. ${suffix} `) ; return; } if (doctype.name.toLowerCase() !== 'html') { warning(` Unexpected <!doctype> found: (${doctype.name}) ${suffix} `) ; } if (doctype.publicId !== '') { warning(` Unexpected <!doctype> publicId found: (${doctype.publicId}) A html5 doctype does not have a publicId ${suffix} `) ; } }); function useDev(useHook) { { useHook(); } } function useDevSetupWarning(fn, inputs) { useDev(() => { React.useEffect(() => { try { fn(); } catch (e) { error(` A setup problem was encountered. > ${e.message} `); } }, inputs); }); } function useStartupValidation() { useDevSetupWarning(() => { checkReactVersion(peerDependencies.react, React__default["default"].version); checkDoctype(document); }, []); } function usePrevious(current) { const ref = React.useRef(current); React.useEffect(() => { ref.current = current; }); return ref; } function create() { let lock = null; function isClaimed() { return Boolean(lock); } function isActive(value) { return value === lock; } function claim(abandon) { !!lock ? invariant(false, 'Cannot claim lock as it is already claimed') : void 0; const newLock = { abandon }; lock = newLock; return newLock; } function release() { !lock ? invariant(false, 'Cannot release lock when there is no lock') : void 0; lock = null; } function tryAbandon() { if (lock) { lock.abandon(); release(); } } return { isClaimed, isActive, claim, release, tryAbandon }; } function isDragging(state) { if (state.phase === 'IDLE' || state.phase === 'DROP_ANIMATING') { return false; } return state.isDragging; } const tab = 9; const enter = 13; const escape$2 = 27; const space = 32; const pageUp = 33; const pageDown = 34; const end = 35; const home = 36; const arrowLeft = 37; const arrowUp = 38; const arrowRight = 39; const arrowDown = 40; const preventedKeys = { [enter]: true, [tab]: true }; var preventStandardKeyEvents = (event => { if (preventedKeys[event.keyCode]) { event.preventDefault(); } }); const supportedEventName = (() => { const base = 'visibilitychange'; if (typeof document === 'undefined') { return base; } const candidates = [base, `ms${base}`, `webkit${base}`, `moz${base}`, `o${base}`]; const supported = candidates.find(eventName => `on${eventName}` in document); return supported || base; })(); var supportedPageVisibilityEventName = supportedEventName; const primaryButton = 0; const sloppyClickThreshold = 5; function isSloppyClickThresholdExceeded(original, current) { return Math.abs(current.x - original.x) >= sloppyClickThreshold || Math.abs(current.y - original.y) >= sloppyClickThreshold; } const idle$1 = { type: 'IDLE' }; function getCaptureBindings(_ref) { let { cancel, completed, getPhase, setPhase } = _ref; return [{ eventName: 'mousemove', fn: event => { const { button, clientX, clientY } = event; if (button !== primaryButton) { return; } const point = { x: clientX, y: clientY }; const phase = getPhase(); if (phase.type === 'DRAGGING') { event.preventDefault(); phase.actions.move(point); return; } !(phase.type === 'PENDING') ? invariant(false, 'Cannot be IDLE') : void 0; const pending = phase.point; if (!isSloppyClickThresholdExceeded(pending, point)) { return; } event.preventDefault(); const actions = phase.actions.fluidLift(point); setPhase({ type: 'DRAGGING', actions }); } }, { eventName: 'mouseup', fn: event => { const phase = getPhase(); if (phase.type !== 'DRAGGING') { cancel(); return; } event.preventDefault(); phase.actions.drop({ shouldBlockNextClick: true }); completed(); } }, { eventName: 'mousedown', fn: event => { if (getPhase().type === 'DRAGGING') { event.preventDefault(); } cancel(); } }, { eventName: 'keydown', fn: event => { const phase = getPhase(); if (phase.type === 'PENDING') { cancel(); return; } if (event.keyCode === escape$2) { event.preventDefault(); cancel(); return; } preventStandardKeyEvents(event); } }, { eventName: 'resize', fn: cancel }, { eventName: 'scroll', options: { passive: true, capture: false }, fn: () => { if (getPhase().type === 'PENDING') { cancel(); } } }, { eventName: 'webkitmouseforcedown', fn: event => { const phase = getPhase(); !(phase.type !== 'IDLE') ? invariant(false, 'Unexpected phase') : void 0; if (phase.actions.shouldRespectForcePress()) { cancel(); return; } event.preventDefault(); } }, { eventName: supportedPageVisibilityEventName, fn: cancel }]; } function useMouseSensor(api) { const phaseRef = React.useRef(idle$1); const unbindEventsRef = React.useRef(noop$2); const startCaptureBinding = useMemoOne.useMemo(() => ({ eventName: 'mousedown', fn: function onMouseDown(event) { if (event.defaultPrevented) { return; } if (event.button !== primaryButton) { return; } if (event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) { return; } const draggableId = api.findClosestDraggableId(event); if (!draggableId) { return; } const actions = api.tryGetLock(draggableId, stop, { sourceEvent: event }); if (!actions) { return; } event.preventDefault(); const point = { x: event.clientX, y: event.clientY }; unbindEventsRef.current(); startPendingDrag(actions, point); } }), [api]); const preventForcePressBinding = useMemoOne.useMemo(() => ({ eventName: 'webkitmouseforcewillbegin', fn: event => { if (event.defaultPrevented) { return; } const id = api.findClosestDraggableId(event); if (!id) { return; } const options = api.findOptionsForDraggable(id); if (!options) { return; } if (options.shouldRespectForcePress) { return; } if (!api.canGetLock(id)) { return; } event.preventDefault(); } }), [api]); const listenForCapture = useMemoOne.useCallback(function listenForCapture() { const options = { passive: false, capture: true }; unbindEventsRef.current = bindEvents(window, [preventForcePressBinding, startCaptureBinding], options); }, [preventForcePressBinding, startCaptureBinding]); const stop = useMemoOne.useCallback(() => { const current = phaseRef.current; if (current.type === 'IDLE') { return; } phaseRef.current = idle$1; unbindEventsRef.current(); listenForCapture(); }, [listenForCapture]); const cancel = useMemoOne.useCallback(() => { const phase = phaseRef.current; stop(); if (phase.type === 'DRAGGING') { phase.actions.cancel({ shouldBlockNextClick: true }); } if (phase.type === 'PENDING') { phase.actions.abort(); } }, [stop]); const bindCapturingEvents = useMemoOne.useCallback(function bindCapturingEvents() { const options = { capture: true, passive: false }; const bindings = getCaptureBindings({ cancel, completed: stop, getPhase: () => phaseRef.current, setPhase: phase => { phaseRef.current = phase; } }); unbindEventsRef.current = bindEvents(window, bindings, options); }, [cancel, stop]); const startPendingDrag = useMemoOne.useCallback(function startPendingDrag(actions, point) { !(phaseRef.current.type === 'IDLE') ? invariant(false, 'Expected to move from IDLE to PENDING drag') : void 0; phaseRef.current = { type: 'PENDING', point, actions }; bindCapturingEvents(); }, [bindCapturingEvents]); useLayoutEffect(function mount() { listenForCapture(); return function unmount() { unbindEventsRef.current(); }; }, [listenForCapture]); } function noop$1() {} const scrollJumpKeys = { [pageDown]: true, [pageUp]: true, [home]: true, [end]: true }; function getDraggingBindings(actions, stop) { function cancel() { stop(); actions.cancel(); } function drop() { stop(); actions.drop(); } return [{ eventName: 'keydown', fn: event => { if (event.keyCode === escape$2) { event.preventDefault(); cancel(); return; } if (event.keyCode === space) { event.preventDefault(); drop(); return; } if (event.keyCode === arrowDown) { event.preventDefault(); actions.moveDown(); return; } if (event.keyCode === arrowUp) { event.preventDefault(); actions.moveUp(); return; } if (event.keyCode === arrowRight) { event.preventDefault(); actions.moveRight(); return; } if (event.keyCode === arrowLeft) { event.preventDefault(); actions.moveLeft(); return; } if (scrollJumpKeys[event.keyCode]) { event.preventDefault(); return; } preventStandardKeyEvents(event); } }, { eventName: 'mousedown', fn: cancel }, { eventName: 'mouseup', fn: cancel }, { eventName: 'click', fn: cancel }, { eventName: 'touchstart', fn: cancel }, { eventName: 'resize', fn: cancel }, { eventName: 'wheel', fn: cancel, options: { passive: true } }, { eventName: supportedPageVisibilityEventName, fn: cancel }]; } function useKeyboardSensor(api) { const unbindEventsRef = React.useRef(noop$1); const startCaptureBinding = useMemoOne.useMemo(() => ({ eventName: 'keydown', fn: function onKeyDown(event) { if (event.defaultPrevented) { return; } if (event.keyCode !== space) { return; } const draggableId = api.findClosestDraggableId(event); if (!draggableId) { return; } const preDrag = api.tryGetLock(draggableId, stop, { sourceEvent: event }); if (!preDrag) { return; } event.preventDefault(); let isCapturing = true; const actions = preDrag.snapLift(); unbindEventsRef.current(); function stop() { !isCapturing ? invariant(false, 'Cannot stop capturing a keyboard drag when not capturing') : void 0; isCapturing = false; unbindEventsRef.current(); listenForCapture(); } unbindEventsRef.current = bindEvents(window, getDraggingBindings(actions, stop), { capture: true, passive: false }); } }), [api]); const listenForCapture = useMemoOne.useCallback(function tryStartCapture() { const options = { passive: false, capture: true }; unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options); }, [startCaptureBinding]); useLayoutEffect(function mount() { listenForCapture(); return function unmount() { unbindEventsRef.current(); }; }, [listenForCapture]); } const idle = { type: 'IDLE' }; const timeForLongPress = 120; const forcePressThreshold = 0.15; function getWindowBindings(_ref) { let { cancel, getPhase } = _ref; return [ { eventName: 'orientationchange', fn: cancel }, { eventName: 'resize', fn: cancel }, { eventName: 'contextmenu', fn: event => { event.preventDefault(); } }, { eventName: 'keydown', fn: event => { if (getPhase().type !== 'DRAGGING') { cancel(); return; } if (event.keyCode === escape$2) { event.preventDefault(); } cancel(); } }, { eventName: supportedPageVisibilityEventName, fn: cancel }]; } function getHandleBindings(_ref2) { let { cancel, completed, getPhase } = _ref2; return [{ eventName: 'touchmove', options: { capture: false }, fn: event => { const phase = getPhase(); if (phase.type !== 'DRAGGING') { cancel(); return; } phase.hasMoved = true; const { clientX, clientY } = event.touches[0]; const point = { x: clientX, y: clientY }; event.preventDefault(); phase.actions.move(point); } }, { eventName: 'touchend', fn: event => { const phase = getPhase(); if (phase.type !== 'DRAGGING') { cancel(); return; } event.preventDefault(); phase.actions.drop({ shouldBlockNextClick: true }); completed(); } }, { eventName: 'touchcancel', fn: event => { if (getPhase().type !== 'DRAGGING') { cancel(); return; } event.preventDefault(); cancel(); } }, { eventName: 'touchforcechange', fn: event => { const phase = getPhase(); !(phase.type !== 'IDLE') ? invariant(false) : void 0; const touch = event.touches[0]; if (!touch) { return; } const isForcePress = touch.force >= forcePressThreshold; if (!isForcePress) { return; } const shouldRespect = phase.actions.shouldRespectForcePress(); if (phase.type === 'PENDING') { if (shouldRespect) { cancel(); } return; } if (shouldRespect) { if (phase.hasMoved) { event.preventDefault(); return; } cancel(); return; } event.preventDefault(); } }, { eventName: supportedPageVisibilityEventName, fn: cancel } ]; } function useTouchSensor(api) { const phaseRef = React.useRef(idle); const unbindEventsRef = React.useRef(noop$2); const getPhase = useMemoOne.useCallback(function getPhase() { return phaseRef.current; }, []); const setPhase = useMemoOne.useCallback(function setPhase(phase) { phaseRef.current = phase; }, []); const startCaptureBinding = useMemoOne.useMemo(() => ({ eventName: 'touchstart', fn: function onTouchStart(event) { if (event.defaultPrevented) { return; } const draggableId = api.findClosestDraggableId(event); if (!draggableId) { return; } const actions = api.tryGetLock(draggableId, stop, { sourceEvent: event }); if (!actions) { return; } const touch = event.touches[0]; const { clientX, clientY } = touch; const point = { x: clientX, y: clientY }; unbindEventsRef.current(); startPendingDrag(actions, point); } }), [api]); const listenForCapture = useMemoOne.useCallback(function listenForCapture() { const options = { capture: true, passive: false }; unbindEventsRef.current = bindEvents(window, [startCaptureBinding], options); }, [startCaptureBinding]); const stop = useMemoOne.useCallback(() => { const current = phaseRef.current; if (current.type === 'IDLE') { return; } if (current.type === 'PENDING') { clearTimeout(current.longPressTimerId); } setPhase(idle); unbindEventsRef.current(); listenForCapture(); }, [listenForCapture, setPhase]); const cancel = useMemoOne.useCallback(() => { const phase = phaseRef.current; stop(); if (phase.type === 'DRAGGING') { phase.actions.cancel({ shouldBlockNextClick: true }); } if (phase.type === 'PENDING') { phase.actions.abort(); } }, [stop]); const bindCapturingEvents = useMemoOne.useCallback(function bindCapturingEvents() { const options = { capture: true, passive: false }; const args = { cancel, completed: stop, getPhase }; const unbindTarget = bindEvents(window, getHandleBindings(args), options); const unbindWindow = bindEvents(window, getWindowBindings(args), options); unbindEventsRef.current = function unbindAll() { unbindTarget(); unbindWindow(); }; }, [cancel, getPhase, stop]); const startDragging = useMemoOne.useCallback(function startDragging() { const phase = getPhase(); !(phase.type === 'PENDING') ? invariant(false, `Cannot start dragging from phase ${phase.type}`) : void 0; const actions = phase.actions.fluidLift(phase.point); setPhase({ type: 'DRAGGING', actions, hasMoved: false }); }, [getPhase, setPhase]); const startPendingDrag = useMemoOne.useCallback(function startPendingDrag(actions, point) { !(getPhase().type === 'IDLE') ? invariant(false, 'Expected to move from IDLE to PENDING drag') : void 0; const longPressTimerId = setTimeout(startDragging, timeForLongPress); setPhase({ type: 'PENDING', point, actions, longPressTimerId }); bindCapturingEvents(); }, [bindCapturingEvents, getPhase, setPhase, startDragging]); useLayoutEffect(function mount() { listenForCapture(); return function unmount() { unbindEventsRef.current(); const phase = getPhase(); if (phase.type === 'PENDING') { clearTimeout(phase.longPressTimerId); setPhase(idle); } }; }, [getPhase, listenForCapture, setPhase]); useLayoutEffect(function webkitHack() { const unbind = bindEvents(window, [{ eventName: 'touchmove', fn: () => {}, options: { capture: false, passive: false } }]); return unbind; }, []); } function useValidateSensorHooks(sensorHooks) { useDev(() => { const previousRef = usePrevious(sensorHooks); useDevSetupWarning(() => { !(previousRef.current.length === sensorHooks.length) ? "development" !== "production" ? invariant(false, 'Cannot change the amount of sensor hooks after mounting') : invariant(false) : void 0; }); }); } const interactiveTagNames = ['input', 'button', 'textarea', 'select', 'option', 'optgroup', 'video', 'audio']; function isAnInteractiveElement(parent, current) { if (current == null) { return false; } const hasAnInteractiveTag = interactiveTagNames.includes(current.tagName.toLowerCase()); if (hasAnInteractiveTag) { return true; } const attribute = current.getAttribute('contenteditable'); if (attribute === 'true' || attribute === '') { return true; } if (current === parent) { return false; } return isAnInteractiveElement(parent, current.parentElement); } function isEventInInteractiveElement(draggable, event) { const target = event.target; if (!isHtmlElement(target)) { return false; } return isAnInteractiveElement(draggable, target); } var getBorderBoxCenterPosition = (el => cssBoxModel.getRect(el.getBoundingClientRect()).center); function isElement(el) { return el instanceof getWindowFromEl(el).Element; } const supportedMatchesName = (() => { const base = 'matches'; if (typeof document === 'undefined') { return base; } const candidates = [base, 'msMatchesSelector', 'webkitMatchesSelector']; const value = candidates.find(name => name in Element.prototype); return value || base; })(); function closestPonyfill(el, selector) { if (el == null) { return null; } if (el[supportedMatchesName](selector)) { return el; } return closestPonyfill(el.parentElement, selector); } function closest(el, selector) { if (el.closest) { return el.closest(selector); } return closestPonyfill(el, selector); } function getSelector(contextId) { return `[${dragHandle.contextId}="${contextId}"]`; } function findClosestDragHandleFromEvent(contextId, event) { const target = event.target; if (!isElement(target)) { warning('event.target must be a Element') ; return null; } const selector = getSelector(contextId); const handle = closest(target, selector); if (!handle) { return null; } if (!isHtmlElement(handle)) { warning('drag handle must be a HTMLElement') ; return null; } return handle; } function tryGetClosestDraggableIdFromEvent(contextId, event) { const handle = findClosestDragHandleFromEvent(contextId, event); if (!handle) { return null; } return handle.getAttribute(dragHandle.draggableId); } function findDraggable(contextId, draggableId) { const selector = `[${draggable.contextId}="${contextId}"]`; const possible = querySelectorAll(document, selector); const draggable$1 = possible.find(el => { return el.getAttribute(draggable.id) === draggableId; }); if (!draggable$1) { return null; } if (!isHtmlElement(draggable$1)) { warning('Draggable element is not a HTMLElement') ; return null; } return draggable$1; } function preventDefault(event) { event.preventDefault(); } function isActive(_ref) { let { expected, phase, isLockActive, shouldWarn } = _ref; if (!isLockActive()) { if (shouldWarn) { warning(` Cannot perform action. The sensor no longer has an action lock. Tips: - Throw away your action handlers when forceStop() is called - Check actions.isActive() if you really need to `) ; } return false; } if (expected !== phase) { if (shouldWarn) { warning(` Cannot perform action. The actions you used belong to an outdated phase Current phase: ${expected} You called an action from outdated phase: ${phase} Tips: - Do not use preDragActions actions after calling preDragActions.lift() `) ; } return false; } return true; } function canStart(_ref2) { let { lockAPI, store, registry, draggableId } = _ref2; if (lockAPI.isClaimed()) { return false; } const entry = registry.draggable.findById(draggableId); if (!entry) { warning(`Unable to find draggable with id: ${draggableId}`) ; return false; } if (!entry.options.isEnabled) { return false; } if (!canStartDrag(store.getState(), draggableId)) { return false; } return true; } function tryStart(_ref3) { let { lockAPI, contextId, store, registry, draggableId, forceSensorStop, sourceEvent } = _ref3; const shouldStart = canStart({ lockAPI, store, registry, draggableId }); if (!shouldStart) { return null; } const entry = registry.draggable.getById(draggableId); const el = findDraggable(contextId, entry.descriptor.id); if (!el) { warning(`Unable to find draggable element with id: ${draggableId}`) ; return null; } if (sourceEvent && !entry.options.canDragInteractiveElements && isEventInInteractiveElement(el, sourceEvent)) { return null; } const lock = lockAPI.claim(forceSensorStop || noop$2); let phase = 'PRE_DRAG'; function getShouldRespectForcePress() { return entry.options.shouldRespectForcePress; } function isLockActive() { return lockAPI.isActive(lock); } function tryDispatch(expected, getAction) { if (isActive({ expected, phase, isLockActive, shouldWarn: true })) { store.dispatch(getAction()); } } const tryDispatchWhenDragging = tryDispatch.bind(null, 'DRAGGING'); function lift(args) { function completed() { lockAPI.release(); phase = 'COMPLETED'; } if (phase !== 'PRE_DRAG') { completed(); invariant(false, `Cannot lift in phase ${phase}`) ; } store.dispatch(lift$1(args.liftActionArgs)); phase = 'DRAGGING'; function finish(reason, options) { if (options === void 0) { options = { shouldBlockNextClick: false }; } args.cleanup(); if (options.shouldBlockNextClick) { const unbind = bindEvents(window, [{ eventName: 'click', fn: preventDefault, options: { once: true, passive: false, capture: true } }]); setTimeout(unbind); } completed(); store.dispatch(drop$1({ reason })); } return { isActive: () => isActive({ expected: 'DRAGGING', phase, isLockActive, shouldWarn: false }), shouldRespectForcePress: getShouldRespectForcePress, drop: options => finish('DROP', options), cancel: options => finish('CANCEL', options), ...args.actions }; } function fluidLift(clientSelection) { const move$1 = rafSchd__default["default"](client => { tryDispatchWhenDragging(() => move({ client })); }); const api = lift({ liftActionArgs: { id: draggableId, clientSelection, movementMode: 'FLUID' }, cleanup: () => move$1.cancel(), actions: { move: move$1 } }); return { ...api, move: move$1 }; } function snapLift() { const actions = { moveUp: () => tryDispatchWhenDragging(moveUp), moveRight: () => tryDispatchWhenDragging(moveRight), moveDown: () => tryDispatchWhenDragging(moveDown), moveLeft: () => tryDispatchWhenDragging(moveLeft) }; return lift({ liftActionArgs: { id: draggableId, clientSelection: getBorderBoxCenterPosition(el), movementMode: 'SNAP' }, cleanup: noop$2, actions }); } function abortPreDrag() { const shouldRelease = isActive({ expected: 'PRE_DRAG', phase, isLockActive, shouldWarn: true }); if (shouldRelease) { lockAPI.release(); } } const preDrag = { isActive: () => isActive({ expected: 'PRE_DRAG', phase, isLockActive, shouldWarn: false }), shouldRespectForcePress: getShouldRespectForcePress, fluidLift, snapLift, abort: abortPreDrag }; return preDrag; } const defaultSensors = [useMouseSensor, useKeyboardSensor, useTouchSensor]; function useSensorMarshal(_ref4) { let { contextId, store, registry, customSensors, enableDefaultSensors } = _ref4; const useSensors = [...(enableDefaultSensors ? defaultSensors : []), ...(customSensors || [])]; const lockAPI = React.useState(() => create())[0]; const tryAbandonLock = useMemoOne.useCallback(function tryAbandonLock(previous, current) { if (isDragging(previous) && !isDragging(current)) { lockAPI.tryAbandon(); } }, [lockAPI]); useLayoutEffect(function listenToStore() { let previous = store.getState(); const unsubscribe = store.subscribe(() => { const current = store.getState(); tryAbandonLock(previous, current); previous = current; }); return unsubscribe; }, [lockAPI, store, tryAbandonLock]); useLayoutEffect(() => { return lockAPI.tryAbandon; }, [lockAPI.tryAbandon]); const canGetLock = useMemoOne.useCallback(draggableId => { return canStart({ lockAPI, registry, store, draggableId }); }, [lockAPI, registry, store]); const tryGetLock = useMemoOne.useCallback((draggableId, forceStop, options) => tryStart({ lockAPI, registry, contextId, store, draggableId, forceSensorStop: forceStop || null, sourceEvent: options && options.sourceEvent ? options.sourceEvent : null }), [contextId, lockAPI, registry, store]); const findClosestDraggableId = useMemoOne.useCallback(event => tryGetClosestDraggableIdFromEvent(contextId, event), [contextId]); const findOptionsForDraggable = useMemoOne.useCallback(id => { const entry = registry.draggable.findById(id); return entry ? entry.options : null; }, [registry.draggable]); const tryReleaseLock = useMemoOne.useCallback(function tryReleaseLock() { if (!lockAPI.isClaimed()) { return; } lockAPI.tryAbandon(); if (store.getState().phase !== 'IDLE') { store.dispatch(flush()); } }, [lockAPI, store]); const isLockClaimed = useMemoOne.useCallback(() => lockAPI.isClaimed(), [lockAPI]); const api = useMemoOne.useMemo(() => ({ canGetLock, tryGetLock, findClosestDraggableId, findOptionsForDraggable, tryReleaseLock, isLockClaimed }), [canGetLock, tryGetLock, findClosestDraggableId, findOptionsForDraggable, tryReleaseLock, isLockClaimed]); useValidateSensorHooks(useSensors); for (let i = 0; i < useSensors.length; i++) { useSensors[i](api); } } const createResponders = props => ({ onBeforeCapture: t => { const onBeforeCapureCallback = () => { if (props.onBeforeCapture) { props.onBeforeCapture(t); } }; if (React__default["default"].version.startsWith('16') || React__default["default"].version.startsWith('17')) { onBeforeCapureCallback(); } else { ReactDOM.flushSync(onBeforeCapureCallback); } }, onBeforeDragStart: props.onBeforeDragStart, onDragStart: props.onDragStart, onDragEnd: props.onDragEnd, onDragUpdate: props.onDragUpdate }); const createAutoScrollerOptions = props => ({ ...defaultAutoScrollerOptions, ...props.autoScrollerOptions, durationDampening: { ...defaultAutoScrollerOptions.durationDampening, ...props.autoScrollerOptions } }); function getStore(lazyRef) { !lazyRef.current ? invariant(false, 'Could not find store from lazy ref') : void 0; return lazyRef.current; } function App$1(props) { const { contextId, setCallbacks, sensors, nonce, dragHandleUsageInstructions } = props; const lazyStoreRef = React.useRef(null); useStartupValidation(); const lastPropsRef = usePrevious(props); const getResponders = useMemoOne.useCallback(() => { return createResponders(lastPropsRef.current); }, [lastPropsRef]); const getAutoScrollerOptions = useMemoOne.useCallback(() => { return createAutoScrollerOptions(lastPropsRef.current); }, [lastPropsRef]); const announce = useAnnouncer(contextId); const dragHandleUsageInstructionsId = useHiddenTextElement({ contextId, text: dragHandleUsageInstructions }); const styleMarshal = useStyleMarshal(contextId, nonce); const lazyDispatch = useMemoOne.useCallback(action => { getStore(lazyStoreRef).dispatch(action); }, []); const marshalCallbacks = useMemoOne.useMemo(() => redux.bindActionCreators({ publishWhileDragging, updateDroppableScroll, updateDroppableIsEnabled, updateDroppableIsCombineEnabled, collectionStarting }, lazyDispatch), [lazyDispatch]); const registry = useRegistry(); const dimensionMarshal = useMemoOne.useMemo(() => { return createDimensionMarshal(registry, marshalCallbacks); }, [registry, marshalCallbacks]); const autoScroller = useMemoOne.useMemo(() => createAutoScroller({ scrollWindow, scrollDroppable: dimensionMarshal.scrollDroppable, getAutoScrollerOptions, ...redux.bindActionCreators({ move }, lazyDispatch) }), [dimensionMarshal.scrollDroppable, lazyDispatch, getAutoScrollerOptions]); const focusMarshal = useFocusMarshal(contextId); const store = useMemoOne.useMemo(() => createStore$1({ announce, autoScroller, dimensionMarshal, focusMarshal, getResponders, styleMarshal }), [announce, autoScroller, dimensionMarshal, focusMarshal, getResponders, styleMarshal]); { if (lazyStoreRef.current && lazyStoreRef.current !== store) { warning('unexpected store change') ; } } lazyStoreRef.current = store; const tryResetStore = useMemoOne.useCallback(() => { const current = getStore(lazyStoreRef); const state = current.getState(); if (state.phase !== 'IDLE') { current.dispatch(flush()); } }, []); const isDragging = useMemoOne.useCallback(() => { const state = getStore(lazyStoreRef).getState(); if (state.phase === 'DROP_ANIMATING') { return true; } if (state.phase === 'IDLE') { return false; } return state.isDragging; }, []); const appCallbacks = useMemoOne.useMemo(() => ({ isDragging, tryAbort: tryResetStore }), [isDragging, tryResetStore]); setCallbacks(appCallbacks); const getCanLift = useMemoOne.useCallback(id => canStartDrag(getStore(lazyStoreRef).getState(), id), []); const getIsMovementAllowed = useMemoOne.useCallback(() => isMovementAllowed(getStore(lazyStoreRef).getState()), []); const appContext = useMemoOne.useMemo(() => ({ marshal: dimensionMarshal, focus: focusMarshal, contextId, canLift: getCanLift, isMovementAllowed: getIsMovementAllowed, dragHandleUsageInstructionsId, registry }), [contextId, dimensionMarshal, dragHandleUsageInstructionsId, focusMarshal, getCanLift, getIsMovementAllowed, registry]); useSensorMarshal({ contextId, store, registry, customSensors: sensors || null, enableDefaultSensors: props.enableDefaultSensors !== false }); React.useEffect(() => { return tryResetStore; }, [tryResetStore]); return React__default["default"].createElement(AppContext.Provider, { value: appContext }, React__default["default"].createElement(reactRedux.Provider, { context: StoreContext, store: store }, props.children)); } let count = 0; function resetDeprecatedUniqueContextId() { count = 0; } function useDeprecatedUniqueContextId() { return useMemoOne.useMemo(() => `${count++}`, []); } function useUniqueContextId() { return React__default["default"].useId(); } var useUniqueContextId$1 = 'useId' in React__default["default"] ? useUniqueContextId : useDeprecatedUniqueContextId; function resetServerContext() { if ('useId' in React__default["default"]) { warning(`It is not necessary to call resetServerContext when using React 18+`) ; return; } resetDeprecatedUniqueContextId(); resetDeprecatedUniqueId(); } function DragDropContext(props) { const contextId = useUniqueContextId$1(); const dragHandleUsageInstructions = props.dragHandleUsageInstructions || preset$1.dragHandleUsageInstructions; return React__default["default"].createElement(ErrorBoundary, null, setCallbacks => React__default["default"].createElement(App$1, { nonce: props.nonce, contextId: contextId, setCallbacks: setCallbacks, dragHandleUsageInstructions: dragHandleUsageInstructions, enableDefaultSensors: props.enableDefaultSensors, sensors: props.sensors, onBeforeCapture: props.onBeforeCapture, onBeforeDragStart: props.onBeforeDragStart, onDragStart: props.onDragStart, onDragUpdate: props.onDragUpdate, onDragEnd: props.onDragEnd, autoScrollerOptions: props.autoScrollerOptions }, props.children)); } const zIndexOptions = { dragging: 5000, dropAnimating: 4500 }; const getDraggingTransition = (shouldAnimateDragMovement, dropping) => { if (dropping) { return transitions.drop(dropping.duration); } if (shouldAnimateDragMovement) { return transitions.snap; } return transitions.fluid; }; const getDraggingOpacity = (isCombining, isDropAnimating) => { if (!isCombining) { return undefined; } return isDropAnimating ? combine.opacity.drop : combine.opacity.combining; }; const getShouldDraggingAnimate = dragging => { if (dragging.forceShouldAnimate != null) { return dragging.forceShouldAnimate; } return dragging.mode === 'SNAP'; }; function getDraggingStyle(dragging) { const dimension = dragging.dimension; const box = dimension.client; const { offset, combineWith, dropping } = dragging; const isCombining = Boolean(combineWith); const shouldAnimate = getShouldDraggingAnimate(dragging); const isDropAnimating = Boolean(dropping); const transform = isDropAnimating ? transforms.drop(offset, isCombining) : transforms.moveTo(offset); const style = { position: 'fixed', top: box.marginBox.top, left: box.marginBox.left, boxSizing: 'border-box', width: box.borderBox.width, height: box.borderBox.height, transition: getDraggingTransition(shouldAnimate, dropping), transform, opacity: getDraggingOpacity(isCombining, isDropAnimating), zIndex: isDropAnimating ? zIndexOptions.dropAnimating : zIndexOptions.dragging, pointerEvents: 'none' }; return style; } function getSecondaryStyle(secondary) { return { transform: transforms.moveTo(secondary.offset), transition: secondary.shouldAnimateDisplacement ? undefined : 'none' }; } function getStyle$1(mapped) { return mapped.type === 'DRAGGING' ? getDraggingStyle(mapped) : getSecondaryStyle(mapped); } function getDimension$1(descriptor, el, windowScroll) { if (windowScroll === void 0) { windowScroll = origin; } const computedStyles = window.getComputedStyle(el); const borderBox = el.getBoundingClientRect(); const client = cssBoxModel.calculateBox(borderBox, computedStyles); const page = cssBoxModel.withScroll(client, windowScroll); const placeholder = { client, tagName: el.tagName.toLowerCase(), display: computedStyles.display }; const displaceBy = { x: client.marginBox.width, y: client.marginBox.height }; const dimension = { descriptor, placeholder, displaceBy, client, page }; return dimension; } function useDraggablePublisher(args) { const uniqueId = useUniqueId$1('draggable'); const { descriptor, registry, getDraggableRef, canDragInteractiveElements, shouldRespectForcePress, isEnabled } = args; const options = useMemoOne.useMemo(() => ({ canDragInteractiveElements, shouldRespectForcePress, isEnabled }), [canDragInteractiveElements, isEnabled, shouldRespectForcePress]); const getDimension = useMemoOne.useCallback(windowScroll => { const el = getDraggableRef(); !el ? invariant(false, 'Cannot get dimension when no ref is set') : void 0; return getDimension$1(descriptor, el, windowScroll); }, [descriptor, getDraggableRef]); const entry = useMemoOne.useMemo(() => ({ uniqueId, descriptor, options, getDimension }), [descriptor, getDimension, options, uniqueId]); const publishedRef = React.useRef(entry); const isFirstPublishRef = React.useRef(true); useLayoutEffect(() => { registry.draggable.register(publishedRef.current); return () => registry.draggable.unregister(publishedRef.current); }, [registry.draggable]); useLayoutEffect(() => { if (isFirstPublishRef.current) { isFirstPublishRef.current = false; return; } const last = publishedRef.current; publishedRef.current = entry; registry.draggable.update(entry, last); }, [entry, registry.draggable]); } var DroppableContext = React__default["default"].createContext(null); function checkIsValidInnerRef(el) { !(el && isHtmlElement(el)) ? invariant(false, ` provided.innerRef has not been provided with a HTMLElement. You can find a guide on using the innerRef callback functions at: https://github.com/hello-pangea/dnd/blob/main/docs/guides/using-inner-ref.md `) : void 0; } function useValidation$1(props, contextId, getRef) { useDevSetupWarning(() => { function prefix(id) { return `Draggable[id: ${id}]: `; } const id = props.draggableId; !id ? "development" !== "production" ? invariant(false, 'Draggable requires a draggableId') : invariant(false) : void 0; !(typeof id === 'string') ? "development" !== "production" ? invariant(false, `Draggable requires a [string] draggableId. Provided: [type: ${typeof id}] (value: ${id})`) : invariant(false) : void 0; !Number.isInteger(props.index) ? "development" !== "production" ? invariant(false, `${prefix(id)} requires an integer index prop`) : invariant(false) : void 0; if (props.mapped.type === 'DRAGGING') { return; } checkIsValidInnerRef(getRef()); if (props.isEnabled) { !findDragHandle(contextId, id) ? "development" !== "production" ? invariant(false, `${prefix(id)} Unable to find drag handle`) : invariant(false) : void 0; } }); } function useClonePropValidation(isClone) { useDev(() => { const initialRef = React.useRef(isClone); useDevSetupWarning(() => { !(isClone === initialRef.current) ? "development" !== "production" ? invariant(false, 'Draggable isClone prop value changed during component life') : invariant(false) : void 0; }, [isClone]); }); } function useRequiredContext(Context) { const result = React.useContext(Context); !result ? invariant(false, 'Could not find required context') : void 0; return result; } function preventHtml5Dnd(event) { event.preventDefault(); } const Draggable = props => { const ref = React.useRef(null); const setRef = useMemoOne.useCallback(function (el) { if (el === void 0) { el = null; } ref.current = el; }, []); const getRef = useMemoOne.useCallback(() => ref.current, []); const { contextId, dragHandleUsageInstructionsId, registry } = useRequiredContext(AppContext); const { type, droppableId } = useRequiredContext(DroppableContext); const descriptor = useMemoOne.useMemo(() => ({ id: props.draggableId, index: props.index, type, droppableId }), [props.draggableId, props.index, type, droppableId]); const { children, draggableId, isEnabled, shouldRespectForcePress, canDragInteractiveElements, isClone, mapped, dropAnimationFinished: dropAnimationFinishedAction } = props; useValidation$1(props, contextId, getRef); useClonePropValidation(isClone); if (!isClone) { const forPublisher = useMemoOne.useMemo(() => ({ descriptor, registry, getDraggableRef: getRef, canDragInteractiveElements, shouldRespectForcePress, isEnabled }), [descriptor, registry, getRef, canDragInteractiveElements, shouldRespectForcePress, isEnabled]); useDraggablePublisher(forPublisher); } const dragHandleProps = useMemoOne.useMemo(() => isEnabled ? { tabIndex: 0, role: 'button', 'aria-describedby': dragHandleUsageInstructionsId, 'data-rfd-drag-handle-draggable-id': draggableId, 'data-rfd-drag-handle-context-id': contextId, draggable: false, onDragStart: preventHtml5Dnd } : null, [contextId, dragHandleUsageInstructionsId, draggableId, isEnabled]); const onMoveEnd = useMemoOne.useCallback(event => { if (mapped.type !== 'DRAGGING') { return; } if (!mapped.dropping) { return; } if (event.propertyName !== 'transform') { return; } if (React__default["default"].version.startsWith('16') || React__default["default"].version.startsWith('17')) { dropAnimationFinishedAction(); } else { ReactDOM.flushSync(dropAnimationFinishedAction); } }, [dropAnimationFinishedAction, mapped]); const provided = useMemoOne.useMemo(() => { const style = getStyle$1(mapped); const onTransitionEnd = mapped.type === 'DRAGGING' && mapped.dropping ? onMoveEnd : undefined; const result = { innerRef: setRef, draggableProps: { 'data-rfd-draggable-context-id': contextId, 'data-rfd-draggable-id': draggableId, style, onTransitionEnd }, dragHandleProps }; return result; }, [contextId, dragHandleProps, draggableId, mapped, onMoveEnd, setRef]); const rubric = useMemoOne.useMemo(() => ({ draggableId: descriptor.id, type: descriptor.type, source: { index: descriptor.index, droppableId: descriptor.droppableId } }), [descriptor.droppableId, descriptor.id, descriptor.index, descriptor.type]); return React__default["default"].createElement(React__default["default"].Fragment, null, children(provided, mapped.snapshot, rubric)); }; var Draggable$1 = Draggable; var isStrictEqual = ((a, b) => a === b); var whatIsDraggedOverFromResult = (result => { const { combine, destination } = result; if (destination) { return destination.droppableId; } if (combine) { return combine.droppableId; } return null; }); const getCombineWithFromResult = result => { return result.combine ? result.combine.draggableId : null; }; const getCombineWithFromImpact = impact => { return impact.at && impact.at.type === 'COMBINE' ? impact.at.combine.draggableId : null; }; function getDraggableSelector() { const memoizedOffset = memoizeOne__default["default"]((x, y) => ({ x, y })); const getMemoizedSnapshot = memoizeOne__default["default"](function (mode, isClone, draggingOver, combineWith, dropping) { if (draggingOver === void 0) { draggingOver = null; } if (combineWith === void 0) { combineWith = null; } if (dropping === void 0) { dropping = null; } return { isDragging: true, isClone, isDropAnimating: Boolean(dropping), dropAnimation: dropping, mode, draggingOver, combineWith, combineTargetFor: null }; }); const getMemoizedProps = memoizeOne__default["default"](function (offset, mode, dimension, isClone, draggingOver, combineWith, forceShouldAnimate) { if (draggingOver === void 0) { draggingOver = null; } if (combineWith === void 0) { combineWith = null; } if (forceShouldAnimate === void 0) { forceShouldAnimate = null; } return { mapped: { type: 'DRAGGING', dropping: null, draggingOver, combineWith, mode, offset, dimension, forceShouldAnimate, snapshot: getMemoizedSnapshot(mode, isClone, draggingOver, combineWith, null) } }; }); const selector = (state, ownProps) => { if (isDragging(state)) { if (state.critical.draggable.id !== ownProps.draggableId) { return null; } const offset = state.current.client.offset; const dimension = state.dimensions.draggables[ownProps.draggableId]; const draggingOver = whatIsDraggedOver(state.impact); const combineWith = getCombineWithFromImpact(state.impact); const forceShouldAnimate = state.forceShouldAnimate; return getMemoizedProps(memoizedOffset(offset.x, offset.y), state.movementMode, dimension, ownProps.isClone, draggingOver, combineWith, forceShouldAnimate); } if (state.phase === 'DROP_ANIMATING') { const completed = state.completed; if (completed.result.draggableId !== ownProps.draggableId) { return null; } const isClone = ownProps.isClone; const dimension = state.dimensions.draggables[ownProps.draggableId]; const result = completed.result; const mode = result.mode; const draggingOver = whatIsDraggedOverFromResult(result); const combineWith = getCombineWithFromResult(result); const duration = state.dropDuration; const dropping = { duration, curve: curves.drop, moveTo: state.newHomeClientOffset, opacity: combineWith ? combine.opacity.drop : null, scale: combineWith ? combine.scale.drop : null }; return { mapped: { type: 'DRAGGING', offset: state.newHomeClientOffset, dimension, dropping, draggingOver, combineWith, mode, forceShouldAnimate: null, snapshot: getMemoizedSnapshot(mode, isClone, draggingOver, combineWith, dropping) } }; } return null; }; return selector; } function getSecondarySnapshot(combineTargetFor) { if (combineTargetFor === void 0) { combineTargetFor = null; } return { isDragging: false, isDropAnimating: false, isClone: false, dropAnimation: null, mode: null, draggingOver: null, combineTargetFor, combineWith: null }; } const atRest = { mapped: { type: 'SECONDARY', offset: origin, combineTargetFor: null, shouldAnimateDisplacement: true, snapshot: getSecondarySnapshot(null) } }; function getSecondarySelector() { const memoizedOffset = memoizeOne__default["default"]((x, y) => ({ x, y })); const getMemoizedSnapshot = memoizeOne__default["default"](getSecondarySnapshot); const getMemoizedProps = memoizeOne__default["default"](function (offset, combineTargetFor, shouldAnimateDisplacement) { if (combineTargetFor === void 0) { combineTargetFor = null; } return { mapped: { type: 'SECONDARY', offset, combineTargetFor, shouldAnimateDisplacement, snapshot: getMemoizedSnapshot(combineTargetFor) } }; }); const getFallback = combineTargetFor => { return combineTargetFor ? getMemoizedProps(origin, combineTargetFor, true) : null; }; const getProps = (ownId, draggingId, impact, afterCritical) => { const visualDisplacement = impact.displaced.visible[ownId]; const isAfterCriticalInVirtualList = Boolean(afterCritical.inVirtualList && afterCritical.effected[ownId]); const combine = tryGetCombine(impact); const combineTargetFor = combine && combine.draggableId === ownId ? draggingId : null; if (!visualDisplacement) { if (!isAfterCriticalInVirtualList) { return getFallback(combineTargetFor); } if (impact.displaced.invisible[ownId]) { return null; } const change = negate(afterCritical.displacedBy.point); const offset = memoizedOffset(change.x, change.y); return getMemoizedProps(offset, combineTargetFor, true); } if (isAfterCriticalInVirtualList) { return getFallback(combineTargetFor); } const displaceBy = impact.displacedBy.point; const offset = memoizedOffset(displaceBy.x, displaceBy.y); return getMemoizedProps(offset, combineTargetFor, visualDisplacement.shouldAnimate); }; const selector = (state, ownProps) => { if (isDragging(state)) { if (state.critical.draggable.id === ownProps.draggableId) { return null; } return getProps(ownProps.draggableId, state.critical.draggable.id, state.impact, state.afterCritical); } if (state.phase === 'DROP_ANIMATING') { const completed = state.completed; if (completed.result.draggableId === ownProps.draggableId) { return null; } return getProps(ownProps.draggableId, completed.result.draggableId, completed.impact, completed.afterCritical); } return null; }; return selector; } const makeMapStateToProps$1 = () => { const draggingSelector = getDraggableSelector(); const secondarySelector = getSecondarySelector(); const selector = (state, ownProps) => draggingSelector(state, ownProps) || secondarySelector(state, ownProps) || atRest; return selector; }; const mapDispatchToProps$1$1 = { dropAnimationFinished: dropAnimationFinished }; const ConnectedDraggable = reactRedux.connect( makeMapStateToProps$1, mapDispatchToProps$1$1, null, { context: StoreContext, areStatePropsEqual: isStrictEqual } )(Draggable$1); var ConnectedDraggable$1 = ConnectedDraggable; function PrivateDraggable(props) { const droppableContext = useRequiredContext(DroppableContext); const isUsingCloneFor = droppableContext.isUsingCloneFor; if (isUsingCloneFor === props.draggableId && !props.isClone) { return null; } return React__default["default"].createElement(ConnectedDraggable$1, props); } function PublicDraggable(props) { const isEnabled = typeof props.isDragDisabled === 'boolean' ? !props.isDragDisabled : true; const canDragInteractiveElements = Boolean(props.disableInteractiveElementBlocking); const shouldRespectForcePress = Boolean(props.shouldRespectForcePress); return React__default["default"].createElement(PrivateDraggable, _extends__default["default"]({}, props, { isClone: false, isEnabled: isEnabled, canDragInteractiveElements: canDragInteractiveElements, shouldRespectForcePress: shouldRespectForcePress })); } const isEqual = base => value => base === value; const isScroll = isEqual('scroll'); const isAuto = isEqual('auto'); const isVisible = isEqual('visible'); const isEither = (overflow, fn) => fn(overflow.overflowX) || fn(overflow.overflowY); const isBoth = (overflow, fn) => fn(overflow.overflowX) && fn(overflow.overflowY); const isElementScrollable = el => { const style = window.getComputedStyle(el); const overflow = { overflowX: style.overflowX, overflowY: style.overflowY }; return isEither(overflow, isScroll) || isEither(overflow, isAuto); }; const isBodyScrollable = () => { const body = getBodyElement(); const html = document.documentElement; !html ? invariant(false) : void 0; if (!isElementScrollable(body)) { return false; } const htmlStyle = window.getComputedStyle(html); const htmlOverflow = { overflowX: htmlStyle.overflowX, overflowY: htmlStyle.overflowY }; if (isBoth(htmlOverflow, isVisible)) { return false; } warning(` We have detected that your <body> element might be a scroll container. We have found no reliable way of detecting whether the <body> element is a scroll container. Under most circumstances a <body> scroll bar will be on the <html> element (document.documentElement) Because we cannot determine if the <body> is a scroll container, and generally it is not one, we will be treating the <body> as *not* a scroll container More information: https://github.com/hello-pangea/dnd/blob/main/docs/guides/how-we-detect-scroll-containers.md `) ; return false; }; const getClosestScrollable = el => { if (el == null) { return null; } if (el === document.body) { return isBodyScrollable() ? el : null; } if (el === document.documentElement) { return null; } if (!isElementScrollable(el)) { return getClosestScrollable(el.parentElement); } return el; }; var getClosestScrollable$1 = getClosestScrollable; var checkForNestedScrollContainers = (scrollable => { if (!scrollable) { return; } const anotherScrollParent = getClosestScrollable$1(scrollable.parentElement); if (!anotherScrollParent) { return; } warning(` Droppable: unsupported nested scroll container detected. A Droppable can only have one scroll parent (which can be itself) Nested scroll containers are currently not supported. We hope to support nested scroll containers soon: https://github.com/atlassian/react-beautiful-dnd/issues/131 `) ; }); var getScroll = (el => ({ x: el.scrollLeft, y: el.scrollTop })); const getIsFixed = el => { if (!el) { return false; } const style = window.getComputedStyle(el); if (style.position === 'fixed') { return true; } return getIsFixed(el.parentElement); }; var getEnv = (start => { const closestScrollable = getClosestScrollable$1(start); const isFixedOnPage = getIsFixed(start); return { closestScrollable, isFixedOnPage }; }); var getDroppableDimension = (_ref => { let { descriptor, isEnabled, isCombineEnabled, isFixedOnPage, direction, client, page, closest } = _ref; const frame = (() => { if (!closest) { return null; } const { scrollSize, client: frameClient } = closest; const maxScroll = getMaxScroll({ scrollHeight: scrollSize.scrollHeight, scrollWidth: scrollSize.scrollWidth, height: frameClient.paddingBox.height, width: frameClient.paddingBox.width }); return { pageMarginBox: closest.page.marginBox, frameClient, scrollSize, shouldClipSubject: closest.shouldClipSubject, scroll: { initial: closest.scroll, current: closest.scroll, max: maxScroll, diff: { value: origin, displacement: origin } } }; })(); const axis = direction === 'vertical' ? vertical : horizontal; const subject = getSubject({ page, withPlaceholder: null, axis, frame }); const dimension = { descriptor, isCombineEnabled, isFixedOnPage, axis, isEnabled, client, page, frame, subject }; return dimension; }); const getClient = (targetRef, closestScrollable) => { const base = cssBoxModel.getBox(targetRef); if (!closestScrollable) { return base; } if (targetRef !== closestScrollable) { return base; } const top = base.paddingBox.top - closestScrollable.scrollTop; const left = base.paddingBox.left - closestScrollable.scrollLeft; const bottom = top + closestScrollable.scrollHeight; const right = left + closestScrollable.scrollWidth; const paddingBox = { top, right, bottom, left }; const borderBox = cssBoxModel.expand(paddingBox, base.border); const client = cssBoxModel.createBox({ borderBox, margin: base.margin, border: base.border, padding: base.padding }); return client; }; var getDimension = (_ref => { let { ref, descriptor, env, windowScroll, direction, isDropDisabled, isCombineEnabled, shouldClipSubject } = _ref; const closestScrollable = env.closestScrollable; const client = getClient(ref, closestScrollable); const page = cssBoxModel.withScroll(client, windowScroll); const closest = (() => { if (!closestScrollable) { return null; } const frameClient = cssBoxModel.getBox(closestScrollable); const scrollSize = { scrollHeight: closestScrollable.scrollHeight, scrollWidth: closestScrollable.scrollWidth }; return { client: frameClient, page: cssBoxModel.withScroll(frameClient, windowScroll), scroll: getScroll(closestScrollable), scrollSize, shouldClipSubject }; })(); const dimension = getDroppableDimension({ descriptor, isEnabled: !isDropDisabled, isCombineEnabled, isFixedOnPage: env.isFixedOnPage, direction, client, page, closest }); return dimension; }); const immediate = { passive: false }; const delayed = { passive: true }; var getListenerOptions = (options => options.shouldPublishImmediately ? immediate : delayed); const getClosestScrollableFromDrag = dragging => dragging && dragging.env.closestScrollable || null; function useDroppablePublisher(args) { const whileDraggingRef = React.useRef(null); const appContext = useRequiredContext(AppContext); const uniqueId = useUniqueId$1('droppable'); const { registry, marshal } = appContext; const previousRef = usePrevious(args); const descriptor = useMemoOne.useMemo(() => ({ id: args.droppableId, type: args.type, mode: args.mode }), [args.droppableId, args.mode, args.type]); const publishedDescriptorRef = React.useRef(descriptor); const memoizedUpdateScroll = useMemoOne.useMemo(() => memoizeOne__default["default"]((x, y) => { !whileDraggingRef.current ? invariant(false, 'Can only update scroll when dragging') : void 0; const scroll = { x, y }; marshal.updateDroppableScroll(descriptor.id, scroll); }), [descriptor.id, marshal]); const getClosestScroll = useMemoOne.useCallback(() => { const dragging = whileDraggingRef.current; if (!dragging || !dragging.env.closestScrollable) { return origin; } return getScroll(dragging.env.closestScrollable); }, []); const updateScroll = useMemoOne.useCallback(() => { const scroll = getClosestScroll(); memoizedUpdateScroll(scroll.x, scroll.y); }, [getClosestScroll, memoizedUpdateScroll]); const scheduleScrollUpdate = useMemoOne.useMemo(() => rafSchd__default["default"](updateScroll), [updateScroll]); const onClosestScroll = useMemoOne.useCallback(() => { const dragging = whileDraggingRef.current; const closest = getClosestScrollableFromDrag(dragging); !(dragging && closest) ? invariant(false, 'Could not find scroll options while scrolling') : void 0; const options = dragging.scrollOptions; if (options.shouldPublishImmediately) { updateScroll(); return; } scheduleScrollUpdate(); }, [scheduleScrollUpdate, updateScroll]); const getDimensionAndWatchScroll = useMemoOne.useCallback((windowScroll, options) => { !!whileDraggingRef.current ? invariant(false, 'Cannot collect a droppable while a drag is occurring') : void 0; const previous = previousRef.current; const ref = previous.getDroppableRef(); !ref ? invariant(false, 'Cannot collect without a droppable ref') : void 0; const env = getEnv(ref); const dragging = { ref, descriptor, env, scrollOptions: options }; whileDraggingRef.current = dragging; const dimension = getDimension({ ref, descriptor, env, windowScroll, direction: previous.direction, isDropDisabled: previous.isDropDisabled, isCombineEnabled: previous.isCombineEnabled, shouldClipSubject: !previous.ignoreContainerClipping }); const scrollable = env.closestScrollable; if (scrollable) { scrollable.setAttribute(scrollContainer.contextId, appContext.contextId); scrollable.addEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions)); { checkForNestedScrollContainers(scrollable); } } return dimension; }, [appContext.contextId, descriptor, onClosestScroll, previousRef]); const getScrollWhileDragging = useMemoOne.useCallback(() => { const dragging = whileDraggingRef.current; const closest = getClosestScrollableFromDrag(dragging); !(dragging && closest) ? invariant(false, 'Can only recollect Droppable client for Droppables that have a scroll container') : void 0; return getScroll(closest); }, []); const dragStopped = useMemoOne.useCallback(() => { const dragging = whileDraggingRef.current; !dragging ? invariant(false, 'Cannot stop drag when no active drag') : void 0; const closest = getClosestScrollableFromDrag(dragging); whileDraggingRef.current = null; if (!closest) { return; } scheduleScrollUpdate.cancel(); closest.removeAttribute(scrollContainer.contextId); closest.removeEventListener('scroll', onClosestScroll, getListenerOptions(dragging.scrollOptions)); }, [onClosestScroll, scheduleScrollUpdate]); const scroll = useMemoOne.useCallback(change => { const dragging = whileDraggingRef.current; !dragging ? invariant(false, 'Cannot scroll when there is no drag') : void 0; const closest = getClosestScrollableFromDrag(dragging); !closest ? invariant(false, 'Cannot scroll a droppable with no closest scrollable') : void 0; closest.scrollTop += change.y; closest.scrollLeft += change.x; }, []); const callbacks = useMemoOne.useMemo(() => { return { getDimensionAndWatchScroll, getScrollWhileDragging, dragStopped, scroll }; }, [dragStopped, getDimensionAndWatchScroll, getScrollWhileDragging, scroll]); const entry = useMemoOne.useMemo(() => ({ uniqueId, descriptor, callbacks }), [callbacks, descriptor, uniqueId]); useLayoutEffect(() => { publishedDescriptorRef.current = entry.descriptor; registry.droppable.register(entry); return () => { if (whileDraggingRef.current) { warning('Unsupported: changing the droppableId or type of a Droppable during a drag') ; dragStopped(); } registry.droppable.unregister(entry); }; }, [callbacks, descriptor, dragStopped, entry, marshal, registry.droppable]); useLayoutEffect(() => { if (!whileDraggingRef.current) { return; } marshal.updateDroppableIsEnabled(publishedDescriptorRef.current.id, !args.isDropDisabled); }, [args.isDropDisabled, marshal]); useLayoutEffect(() => { if (!whileDraggingRef.current) { return; } marshal.updateDroppableIsCombineEnabled(publishedDescriptorRef.current.id, args.isCombineEnabled); }, [args.isCombineEnabled, marshal]); } function noop$3() {} const empty = { width: 0, height: 0, margin: noSpacing }; const getSize = _ref => { let { isAnimatingOpenOnMount, placeholder, animate } = _ref; if (isAnimatingOpenOnMount) { return empty; } if (animate === 'close') { return empty; } return { height: placeholder.client.borderBox.height, width: placeholder.client.borderBox.width, margin: placeholder.client.margin }; }; const getStyle = _ref2 => { let { isAnimatingOpenOnMount, placeholder, animate } = _ref2; const size = getSize({ isAnimatingOpenOnMount, placeholder, animate }); return { display: placeholder.display, boxSizing: 'border-box', width: size.width, height: size.height, marginTop: size.margin.top, marginRight: size.margin.right, marginBottom: size.margin.bottom, marginLeft: size.margin.left, flexShrink: '0', flexGrow: '0', pointerEvents: 'none', transition: animate !== 'none' ? transitions.placeholder : null }; }; const Placeholder = props => { const animateOpenTimerRef = React.useRef(null); const tryClearAnimateOpenTimer = useMemoOne.useCallback(() => { if (!animateOpenTimerRef.current) { return; } clearTimeout(animateOpenTimerRef.current); animateOpenTimerRef.current = null; }, []); const { animate, onTransitionEnd, onClose, contextId } = props; const [isAnimatingOpenOnMount, setIsAnimatingOpenOnMount] = React.useState(props.animate === 'open'); React.useEffect(() => { if (!isAnimatingOpenOnMount) { return noop$3; } if (animate !== 'open') { tryClearAnimateOpenTimer(); setIsAnimatingOpenOnMount(false); return noop$3; } if (animateOpenTimerRef.current) { return noop$3; } animateOpenTimerRef.current = setTimeout(() => { animateOpenTimerRef.current = null; setIsAnimatingOpenOnMount(false); }); return tryClearAnimateOpenTimer; }, [animate, isAnimatingOpenOnMount, tryClearAnimateOpenTimer]); const onSizeChangeEnd = useMemoOne.useCallback(event => { if (event.propertyName !== 'height') { return; } onTransitionEnd(); if (animate === 'close') { onClose(); } }, [animate, onClose, onTransitionEnd]); const style = getStyle({ isAnimatingOpenOnMount, animate: props.animate, placeholder: props.placeholder }); return React__default["default"].createElement(props.placeholder.tagName, { style, 'data-rfd-placeholder-context-id': contextId, onTransitionEnd: onSizeChangeEnd, ref: props.innerRef }); }; var Placeholder$1 = React__default["default"].memo(Placeholder); function isBoolean(value) { return typeof value === 'boolean'; } function runChecks(args, checks) { checks.forEach(check => check(args)); } const shared = [function required(_ref) { let { props } = _ref; !props.droppableId ? invariant(false, 'A Droppable requires a droppableId prop') : void 0; !(typeof props.droppableId === 'string') ? invariant(false, `A Droppable requires a [string] droppableId. Provided: [${typeof props.droppableId}]`) : void 0; }, function boolean(_ref2) { let { props } = _ref2; !isBoolean(props.isDropDisabled) ? invariant(false, 'isDropDisabled must be a boolean') : void 0; !isBoolean(props.isCombineEnabled) ? invariant(false, 'isCombineEnabled must be a boolean') : void 0; !isBoolean(props.ignoreContainerClipping) ? invariant(false, 'ignoreContainerClipping must be a boolean') : void 0; }, function ref(_ref3) { let { getDroppableRef } = _ref3; checkIsValidInnerRef(getDroppableRef()); }]; const standard = [function placeholder(_ref4) { let { props, getPlaceholderRef } = _ref4; if (!props.placeholder) { return; } const ref = getPlaceholderRef(); if (ref) { return; } warning(` Droppable setup issue [droppableId: "${props.droppableId}"]: DroppableProvided > placeholder could not be found. Please be sure to add the {provided.placeholder} React Node as a child of your Droppable. More information: https://github.com/hello-pangea/dnd/blob/main/docs/api/droppable.md `) ; }]; const virtual = [function hasClone(_ref5) { let { props } = _ref5; !props.renderClone ? invariant(false, 'Must provide a clone render function (renderClone) for virtual lists') : void 0; }, function hasNoPlaceholder(_ref6) { let { getPlaceholderRef } = _ref6; !!getPlaceholderRef() ? invariant(false, 'Expected virtual list to not have a placeholder') : void 0; }]; function useValidation(args) { useDevSetupWarning(() => { runChecks(args, shared); if (args.props.mode === 'standard') { runChecks(args, standard); } if (args.props.mode === 'virtual') { runChecks(args, virtual); } }); } class AnimateInOut extends React__default["default"].PureComponent { constructor() { super(...arguments); this.state = { isVisible: Boolean(this.props.on), data: this.props.on, animate: this.props.shouldAnimate && this.props.on ? 'open' : 'none' }; this.onClose = () => { if (this.state.animate !== 'close') { return; } this.setState({ isVisible: false }); }; } static getDerivedStateFromProps(props, state) { if (!props.shouldAnimate) { return { isVisible: Boolean(props.on), data: props.on, animate: 'none' }; } if (props.on) { return { isVisible: true, data: props.on, animate: 'open' }; } if (state.isVisible) { return { isVisible: true, data: state.data, animate: 'close' }; } return { isVisible: false, animate: 'close', data: null }; } render() { if (!this.state.isVisible) { return null; } const provided = { onClose: this.onClose, data: this.state.data, animate: this.state.animate }; return this.props.children(provided); } } const Droppable = props => { const appContext = React.useContext(AppContext); !appContext ? invariant(false, 'Could not find app context') : void 0; const { contextId, isMovementAllowed } = appContext; const droppableRef = React.useRef(null); const placeholderRef = React.useRef(null); const { children, droppableId, type, mode, direction, ignoreContainerClipping, isDropDisabled, isCombineEnabled, snapshot, useClone, updateViewportMaxScroll, getContainerForClone } = props; const getDroppableRef = useMemoOne.useCallback(() => droppableRef.current, []); const setDroppableRef = useMemoOne.useCallback(function (value) { if (value === void 0) { value = null; } droppableRef.current = value; }, []); const getPlaceholderRef = useMemoOne.useCallback(() => placeholderRef.current, []); const setPlaceholderRef = useMemoOne.useCallback(function (value) { if (value === void 0) { value = null; } placeholderRef.current = value; }, []); useValidation({ props, getDroppableRef, getPlaceholderRef }); const onPlaceholderTransitionEnd = useMemoOne.useCallback(() => { if (isMovementAllowed()) { updateViewportMaxScroll({ maxScroll: getMaxWindowScroll() }); } }, [isMovementAllowed, updateViewportMaxScroll]); useDroppablePublisher({ droppableId, type, mode, direction, isDropDisabled, isCombineEnabled, ignoreContainerClipping, getDroppableRef }); const placeholder = useMemoOne.useMemo(() => React__default["default"].createElement(AnimateInOut, { on: props.placeholder, shouldAnimate: props.shouldAnimatePlaceholder }, _ref => { let { onClose, data, animate } = _ref; return React__default["default"].createElement(Placeholder$1, { placeholder: data, onClose: onClose, innerRef: setPlaceholderRef, animate: animate, contextId: contextId, onTransitionEnd: onPlaceholderTransitionEnd }); }), [contextId, onPlaceholderTransitionEnd, props.placeholder, props.shouldAnimatePlaceholder, setPlaceholderRef]); const provided = useMemoOne.useMemo(() => ({ innerRef: setDroppableRef, placeholder, droppableProps: { 'data-rfd-droppable-id': droppableId, 'data-rfd-droppable-context-id': contextId } }), [contextId, droppableId, placeholder, setDroppableRef]); const isUsingCloneFor = useClone ? useClone.dragging.draggableId : null; const droppableContext = useMemoOne.useMemo(() => ({ droppableId, type, isUsingCloneFor }), [droppableId, isUsingCloneFor, type]); function getClone() { if (!useClone) { return null; } const { dragging, render } = useClone; const node = React__default["default"].createElement(PrivateDraggable, { draggableId: dragging.draggableId, index: dragging.source.index, isClone: true, isEnabled: true , shouldRespectForcePress: false, canDragInteractiveElements: true }, (draggableProvided, draggableSnapshot) => render(draggableProvided, draggableSnapshot, dragging)); return ReactDOM__default["default"].createPortal(node, getContainerForClone()); } return React__default["default"].createElement(DroppableContext.Provider, { value: droppableContext }, children(provided, snapshot), getClone()); }; var Droppable$1 = Droppable; const isMatchingType = (type, critical) => type === critical.droppable.type; const getDraggable = (critical, dimensions) => dimensions.draggables[critical.draggable.id]; const makeMapStateToProps = () => { const idleWithAnimation = { placeholder: null, shouldAnimatePlaceholder: true, snapshot: { isDraggingOver: false, draggingOverWith: null, draggingFromThisWith: null, isUsingPlaceholder: false }, useClone: null }; const idleWithoutAnimation = { ...idleWithAnimation, shouldAnimatePlaceholder: false }; const getDraggableRubric = memoizeOne__default["default"](descriptor => ({ draggableId: descriptor.id, type: descriptor.type, source: { index: descriptor.index, droppableId: descriptor.droppableId } })); const getMapProps = memoizeOne__default["default"]((id, isEnabled, isDraggingOverForConsumer, isDraggingOverForImpact, dragging, renderClone) => { const draggableId = dragging.descriptor.id; const isHome = dragging.descriptor.droppableId === id; if (isHome) { const useClone = renderClone ? { render: renderClone, dragging: getDraggableRubric(dragging.descriptor) } : null; const snapshot = { isDraggingOver: isDraggingOverForConsumer, draggingOverWith: isDraggingOverForConsumer ? draggableId : null, draggingFromThisWith: draggableId, isUsingPlaceholder: true }; return { placeholder: dragging.placeholder, shouldAnimatePlaceholder: false, snapshot, useClone }; } if (!isEnabled) { return idleWithoutAnimation; } if (!isDraggingOverForImpact) { return idleWithAnimation; } const snapshot = { isDraggingOver: isDraggingOverForConsumer, draggingOverWith: draggableId, draggingFromThisWith: null, isUsingPlaceholder: true }; return { placeholder: dragging.placeholder, shouldAnimatePlaceholder: true, snapshot, useClone: null }; }); const selector = (state, ownProps) => { const id = ownProps.droppableId; const type = ownProps.type; const isEnabled = !ownProps.isDropDisabled; const renderClone = ownProps.renderClone; if (isDragging(state)) { const critical = state.critical; if (!isMatchingType(type, critical)) { return idleWithoutAnimation; } const dragging = getDraggable(critical, state.dimensions); const isDraggingOver = whatIsDraggedOver(state.impact) === id; return getMapProps(id, isEnabled, isDraggingOver, isDraggingOver, dragging, renderClone); } if (state.phase === 'DROP_ANIMATING') { const completed = state.completed; if (!isMatchingType(type, completed.critical)) { return idleWithoutAnimation; } const dragging = getDraggable(completed.critical, state.dimensions); return getMapProps(id, isEnabled, whatIsDraggedOverFromResult(completed.result) === id, whatIsDraggedOver(completed.impact) === id, dragging, renderClone); } if (state.phase === 'IDLE' && state.completed && !state.shouldFlush) { const completed = state.completed; if (!isMatchingType(type, completed.critical)) { return idleWithoutAnimation; } const wasOver = whatIsDraggedOver(completed.impact) === id; const wasCombining = Boolean(completed.impact.at && completed.impact.at.type === 'COMBINE'); const isHome = completed.critical.droppable.id === id; if (wasOver) { return wasCombining ? idleWithAnimation : idleWithoutAnimation; } if (isHome) { return idleWithAnimation; } return idleWithoutAnimation; } return idleWithoutAnimation; }; return selector; }; const mapDispatchToProps$2 = { updateViewportMaxScroll: updateViewportMaxScroll }; function getBody() { !document.body ? invariant(false, 'document.body is not ready') : void 0; return document.body; } const defaultProps = { mode: 'standard', type: 'DEFAULT', direction: 'vertical', isDropDisabled: false, isCombineEnabled: false, ignoreContainerClipping: false, renderClone: null, getContainerForClone: getBody }; const ConnectedDroppable = reactRedux.connect( makeMapStateToProps, mapDispatchToProps$2, null, { context: StoreContext, areStatePropsEqual: isStrictEqual } )(Droppable$1); ConnectedDroppable.defaultProps = defaultProps; var ConnectedDroppable$1 = ConnectedDroppable; var DragDropContext_1 = dnd_cjs.DragDropContext = DragDropContext; var Draggable_1 = dnd_cjs.Draggable = PublicDraggable; var Droppable_1 = dnd_cjs.Droppable = ConnectedDroppable$1; dnd_cjs.resetServerContext = resetServerContext; dnd_cjs.useKeyboardSensor = useKeyboardSensor; dnd_cjs.useMouseSensor = useMouseSensor; dnd_cjs.useTouchSensor = useTouchSensor; function _extends$p() { _extends$p = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$p.apply(this, arguments); } const AddNewItemButton = props => { const { resource, property, ...btnProps } = props; const { translateProperty, translateButton } = useTranslation(); const label = translateProperty(`${property.path}.addNewItem`, resource.id, { defaultValue: translateButton('addNewItem', resource.id) }); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, _extends$p({ type: "button", variant: "outlined" }, btnProps), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Icon, { icon: "Plus" }), label); }; // eslint-disable-next-line no-shadow let ErrorTypeEnum = /*#__PURE__*/function (ErrorTypeEnum) { ErrorTypeEnum["App"] = "AppError"; ErrorTypeEnum["Configuration"] = "ConfigurationError"; ErrorTypeEnum["Forbidden"] = "ForbiddenError"; ErrorTypeEnum["NotFound"] = "NotFoundError"; ErrorTypeEnum["NotImplemented"] = "NotImplementedError"; ErrorTypeEnum["Record"] = "RecordError"; ErrorTypeEnum["Validation"] = "ValidationError"; return ErrorTypeEnum; }({}); const PropertyDescription = props => { const { property } = props; const { tm } = useTranslation(); if (!property.description) { return null; } const direction = property.custom?.tooltipDirection || 'top'; const translatedDescription = tm(property.description, property.resourceId); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { mx: "sm", display: "inline-flex" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Tooltip, { direction: direction, title: translatedDescription, size: "lg" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, null, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Icon, { icon: "HelpCircle", color: "info" })))); }; const OverridablePropertyDescription = allowOverride(PropertyDescription, 'PropertyDescription'); function _extends$o() { _extends$o = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$o.apply(this, arguments); } const PropertyLabel = props => { const { property, props: labelProps, filter = false } = props; const { translateProperty } = useTranslation(); if (property.hideLabel) { return null; } return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Label, _extends$o({ htmlFor: filter ? ['filter', property.path].join('-') : property.path, required: !filter && property.isRequired }, labelProps), translateProperty(property.label, property.resourceId), property.description && /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyDescription, { property: property })); }; const OverridablePropertyLabel = allowOverride(PropertyLabel, 'PropertyLabel'); const getSubpropertyPath = (path, index) => [path, index].join(DELIMITER); /** * Converts property: PropertyJSON from an array to a sub-property for an actual item in the array * It change path that it has index inside along with the label. Futhermore flat isArray is removed * ,because it was already handled, so that itemRenderer can render property as a regular one * * @param {PropertyJSON} arrayProperty property with path set to an root Array type property, * @param {Number} index index under which sub-property should be placed * @private * @hide */ const convertToSubProperty$1 = (arrayProperty, index) => ({ ...arrayProperty, path: getSubpropertyPath(arrayProperty.path, index), label: `[${index + 1}]`, isArray: false, isDraggable: false }); /** * Removes selected array item from given record. It performs following tasks: * 1. removes array item from the array * 2. reorders keys in new array item * 3. if property has populated fields it also reorders them * it uses {@link flat } module and its removePath method * * @param {RecordJSON} record * @param {string} subPropertyPath which has to be removed. It has to be flattened * in notation, and ending with array index * @private * @hide */ const removeSubProperty = (record, subPropertyPath) => { // by default populated is flatten just to the path level - object itself is not flatten. That is // why we have to retrieve the original state. That is why we have to replace record.populated to // from { 'some.nested.1.key': RecordJSON } to { 'some.nested.1.key': 'some.nested.1.key' }, // then remove keys, and refill back some.nested.1.key to the value from the original populated // object. const populatedKeyMap = Object.keys(record.populated).reduce((memo, propertyKey) => ({ ...memo, [propertyKey]: propertyKey }), {}); const newPopulatedKeyMap = flat.removePath(populatedKeyMap, subPropertyPath); const newPopulated = Object.entries(newPopulatedKeyMap).reduce((memo, [newPropertyKey, oldPropertyKey]) => ({ ...memo, [newPropertyKey]: oldPropertyKey && record.populated[oldPropertyKey?.toString()] }), {}); return { ...record, params: flat.removePath(record.params, subPropertyPath), populated: newPopulated }; }; function _extends$n() { _extends$n = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$n.apply(this, arguments); } const ItemRenderer = props => { const { ItemComponent, property, onDelete, index, record, isDraggable } = props; const uniqueDraggableId = window.btoa(unescape(encodeURIComponent(`${JSON.stringify(flat.get(record.params, property.path))}-${property.path}`))); return /*#__PURE__*/React__default$1.default.createElement(Draggable_1, { draggableId: uniqueDraggableId, index: index, key: uniqueDraggableId, isDragDisabled: !isDraggable }, provided => /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, _extends$n({ as: "div", ref: provided.innerRef }, provided.draggableProps, provided.dragHandleProps, { backgroundColor: "white", flex: true, flexDirection: "row", alignItems: "start", variant: "transparent", "data-testid": property.path }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { as: "div", flexGrow: 1 }, /*#__PURE__*/React__default$1.default.createElement(ItemComponent, props)), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { rounded: true, mt: "xl", ml: "default", "data-testid": "delete-item", type: "button", size: "icon", onClick: event => onDelete(event, property), variant: "text", color: "danger" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Icon, { icon: "Trash2" })))); }; const InputsInSection = props => { const { property, record, resource, onChange } = props; const items = flat.get(record.params, property.path) || []; const addNew = React$1.useCallback(event => { const newItems = [...items, property.subProperties.length ? {} : '']; onChange(property.path, newItems); event.preventDefault(); return false; }, [record, onChange, property]); const removeItem = React$1.useCallback((event, subProperty) => { const newRecord = removeSubProperty(record, subProperty.path); onChange(newRecord); event.preventDefault(); return false; }, [record, onChange, property]); const handleOnDragEnd = React$1.useCallback(result => { const { source, destination } = result; if (!source || !destination || destination.index === source.index) return; const itemsCopy = Array.from(items); const [sourceItem] = itemsCopy.splice(source.index, 1); itemsCopy.splice(destination.index, 0, sourceItem); onChange(property.path, itemsCopy); }, [record, onChange, property]); return /*#__PURE__*/React__default$1.default.createElement(DragDropContext_1, { onDragEnd: handleOnDragEnd }, /*#__PURE__*/React__default$1.default.createElement(Droppable_1, { droppableId: property.path }, provided => /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Section, _extends$n({ ref: provided.innerRef }, provided.droppableProps, { mt: "xl", className: property.path }), items.map((item, i) => { const itemProperty = convertToSubProperty$1(property, i); return /*#__PURE__*/React__default$1.default.createElement(ItemRenderer, _extends$n({}, props, { property: itemProperty, isDraggable: property.isDraggable, key: itemProperty.path, onDelete: removeItem, index: i })); }), provided.placeholder, /*#__PURE__*/React__default$1.default.createElement(AddNewItemButton, { resource: resource, property: property, onClick: addNew, "data-testid": `${property.path}-add` })))); }; const Edit$c = props => { const { property, record, testId } = props; const { tm } = useTranslation(); const error = record.errors && record.errors[property.propertyPath]; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { error: !!error, "data-testid": testId }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property }), /*#__PURE__*/React__default$1.default.createElement(InputsInSection, props), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormMessage, null, error && tm(error.message, property.resourceId))); }; const OverridableEdit$1 = allowOverride(Edit$c, 'DefaultArrayEditProperty'); const List$9 = props => { const { property, record } = props; const values = flat.get(record.params, property.path) || []; const { translateProperty } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement("span", null, `${translateProperty('length')}: ${values.length}`); }; var list$8 = allowOverride(List$9, 'DefaultArrayListProperty'); function _extends$m() { _extends$m = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$m.apply(this, arguments); } const Show$b = props => { const { property, record, ItemComponent } = props; const { translateProperty } = useTranslation(); const items = flat.get(record.params, property.path) || []; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ValueGroup, { label: translateProperty(property.label, property.resourceId) }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Section, null, (items || []).map((item, i) => { const itemProperty = convertToSubProperty$1(property, i); return /*#__PURE__*/React__default$1.default.createElement(ItemComponent, _extends$m({}, props, { key: itemProperty.path, property: itemProperty })); }))); }; var show$9 = allowOverride(Show$b, 'DefaultArrayShowProperty'); var ArrayType = /*#__PURE__*/Object.freeze({ __proto__: null, edit: OverridableEdit$1, list: list$8, show: show$9 }); function _extends$l() { _extends$l = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$l.apply(this, arguments); } const EditKeyValuePair = props => { const { onKeyChange, onValueChange, onRemoveItem, property, objectValue, objectKey, error } = props; const { tm } = useTranslation(); const [currentValue, setValue] = React$1.useState(objectValue ?? ''); const [currentKey, setKey] = React$1.useState(objectKey ?? ''); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flex: true, mb: "lg" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flex: true, justifyContent: "space-between", flexGrow: 1, flexShrink: 0 }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { error: Boolean(error), mr: "lg", mb: "0px" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Input, _extends$l({ placeholder: tm('keyPlaceholder'), onChange: e => setKey(e.target.value), onBlur: () => onKeyChange(objectKey, currentKey), onKeyDown: e => e.keyCode === 13 && onKeyChange(objectKey, currentKey), value: currentKey }, property.props?.keyInputProps ?? {})), error && /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormMessage, null, tm(error.message, property.resourceId))), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { mb: "0px" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Input, _extends$l({ placeholder: tm('valuePlaceholder'), onChange: e => setValue(e.target.value), onBlur: () => onValueChange(currentKey, currentValue), onKeyDown: e => e.keyCode === 13 && onValueChange(currentKey, currentValue), value: currentValue, disabled: !objectKey }, property.props?.valueInputProps ?? {})))), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { rounded: true, ml: "sm", "data-testid": "delete-item", type: "button", size: "icon", onClick: () => onRemoveItem(currentKey), variant: "contained", color: "danger", flexGrow: 0, flexShrink: 1 }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Icon, { icon: "Trash2" }))); }; const Edit$b = props => { const { property, record, onChange, resource } = props; const { tm, tb } = useTranslation(); const [objectValue, setObjectValue] = React$1.useState(flat.get(record.params, property.path) ?? {}); const handleKeyChange = (oldKey, newKey) => { if (oldKey === newKey) return; const tmpValue = objectValue[oldKey]; // eslint-disable-next-line @typescript-eslint/no-unused-vars const { [oldKey]: _removedKey, ...objectCopy } = objectValue; objectCopy[newKey] = tmpValue ?? ''; setObjectValue(parseObjectValue(objectCopy)); }; const handleValueChange = (key, value) => { objectValue[key] = value; setObjectValue(parseObjectValue({ ...objectValue })); }; const parseObjectValue = obj => Object.entries(obj).reduce((memo, [k, v]) => { if (!k || !k.length) return memo; memo[k] = v; return memo; }, {}); /** * This is used to prevent empty/duplicate keys from being added to JSON */ const getNextKey = previousId => { const nextId = previousId ? previousId + 1 : Object.keys(objectValue ?? {}).length + 1; const nextKey = `${tm('initialKey', resource.id, { number: nextId })}`; if (objectValue[nextKey] !== undefined) { return getNextKey(nextId); } return nextKey; }; const addNewKeyValuePair = event => { event.preventDefault(); const key = getNextKey(); objectValue[key] = ''; setObjectValue(parseObjectValue({ ...objectValue })); }; const handleRemoveItem = key => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { [key]: _removedKey, ...objectCopy } = objectValue; setObjectValue(parseObjectValue(objectCopy)); }; React$1.useEffect(() => { onChange(property.path, objectValue); }, [objectValue]); const error = record.errors && record.errors[property.path]; if (property.description === undefined) { property.description = tm('keyValuePropertyDefaultDescription', resource.id); } return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { error: !!error }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Section, property.props, Object.entries(objectValue).map(([key, value]) => /*#__PURE__*/React__default$1.default.createElement(EditKeyValuePair, { key: key, property: property, objectValue: value, objectKey: key, onKeyChange: handleKeyChange, onValueChange: handleValueChange, onRemoveItem: handleRemoveItem, error: record.errors[`${property.path}${flat.DELIMITER}${key}`] })), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { mt: "lg", onClick: addNewKeyValuePair }, tb('addNewItem', resource.id))), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormMessage, null, error && tm(error.message, property.resourceId))); }; const ShowKeyValuePair = props => { const { objectValue, objectKey } = props; const { tm } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flex: true, mb: "lg" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { mr: "lg", mb: "0px" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Input, { placeholder: tm('keyPlaceholder'), value: objectKey, disabled: true })), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { mb: "0px" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Input, { placeholder: tm('valuePlaceholder'), value: objectValue, disabled: true }))); }; const Show$a = props => { const { property, record } = props; const objectValue = flat.get(record.params, property.path) ?? {}; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ValueGroup, { label: property.label }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Section, null, Object.entries(objectValue).map(([key, value]) => /*#__PURE__*/React__default$1.default.createElement(ShowKeyValuePair, { key: key, objectValue: value, objectKey: key })))); }; var KeyValueType = /*#__PURE__*/Object.freeze({ __proto__: null, edit: Edit$b, show: Show$a }); function convertToSubProperty(property, subProperty) { const [subPropertyPath] = subProperty.name.split(DELIMITER).slice(-1); return { ...subProperty, path: [property.path, subPropertyPath].join(DELIMITER) }; } function _extends$k() { _extends$k = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$k.apply(this, arguments); } const Edit$a = props => { const { property, record, ItemComponent } = props; const error = record.errors && record.errors[property.path]; const { tm } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { error: !!error }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Section, property.props, property.subProperties.filter(subProperty => !subProperty.isId).map(subProperty => { const subPropertyWithPath = convertToSubProperty(property, subProperty); return /*#__PURE__*/React__default$1.default.createElement(ItemComponent, _extends$k({}, props, { key: subPropertyWithPath.path, property: subPropertyWithPath })); })), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormMessage, null, error && tm(error.message, property.resourceId))); }; var edit$9 = allowOverride(Edit$a, 'DefaultMixedEditProperty'); function _extends$j() { _extends$j = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$j.apply(this, arguments); } const Show$9 = props => { const { property, ItemComponent } = props; const { translateProperty } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ValueGroup, { label: translateProperty(property.label, property.resourceId) }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Section, null, property.subProperties.filter(subProperty => !subProperty.isId).map(subProperty => { const subPropertyWithPath = convertToSubProperty(property, subProperty); return /*#__PURE__*/React__default$1.default.createElement(ItemComponent, _extends$j({}, props, { key: subPropertyWithPath.path, property: subPropertyWithPath })); }))); }; var show$8 = allowOverride(Show$9, 'DefaultMixedShowProperty'); function _extends$i() { _extends$i = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$i.apply(this, arguments); } const List$8 = props => { const { property, record, resource, ItemComponent } = props; const renderItems = () => /*#__PURE__*/React__default$1.default.createElement(React__default$1.default.Fragment, null, property.subProperties.filter(subProperty => !subProperty.isId).map(subProperty => { const subPropertyWithPath = convertToSubProperty(property, subProperty); return /*#__PURE__*/React__default$1.default.createElement("div", { key: subPropertyWithPath.path }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Label, { inline: true }, `${subProperty.label}: `), /*#__PURE__*/React__default$1.default.createElement(ItemComponent, _extends$i({}, props, { property: subPropertyWithPath }))); })); const showAction = record.recordActions.find(a => a.name === 'show'); if (resource.titleProperty.propertyPath === property.propertyPath && showAction) { const h = new ViewHelpers(); const href = h.recordActionUrl({ resourceId: resource.id, recordId: record.id, actionName: 'show' }); return /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.Link, { to: href }, renderItems()); } return renderItems(); }; var list$7 = allowOverride(List$8, 'DefaultMixedListProperty'); var MixedType = /*#__PURE__*/Object.freeze({ __proto__: null, edit: edit$9, list: list$7, show: show$8 }); /* eslint-disable import/prefer-default-export */ /** * Function used in React memo to compare if previous property value and next * property value are the same. * * @private */ const recordPropertyIsEqual = (prevProps, nextProps) => { const prevValue = prevProps.record.params[prevProps.property.path]; const nextValue = nextProps.record.params[nextProps.property.path]; const prevError = prevProps.record.errors[prevProps.property.path]; const nextError = nextProps.record.errors[nextProps.property.path]; return prevValue === nextValue && prevError === nextError; }; function _extends$h() { _extends$h = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$h.apply(this, arguments); } const parseValue = value => !(!value || value === 'false'); const Edit$9 = props => { const { property, onChange, record } = props; const value = parseValue(record.params && record.params[property.path]); const error = record.errors && record.errors[property.path]; const { tm } = useTranslation(); const handleChange = () => { if (!property.isDisabled) { onChange(property.path, !value); } }; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { error: !!error }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.CheckBox, _extends$h({ id: property.path, name: property.path, onChange: handleChange, checked: value, disabled: property.isDisabled }, property.props)), /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property, props: { inline: true } }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormMessage, null, error && tm(error.message, property.resourceId))); }; var edit$8 = allowOverride( /*#__PURE__*/React$1.memo(Edit$9, recordPropertyIsEqual), 'DefaultBooleanEditProperty'); var mapValue$1 = (value => { if (typeof value === 'undefined') { return ''; } return value ? 'Yes' : 'No'; }); const BooleanPropertyValue = props => { const { record, property, resource } = props; const { tl } = useTranslation(); const rawValue = record?.params[property.path]; if (typeof rawValue === 'undefined' || rawValue === '') { return null; } const base = mapValue$1(rawValue); const translation = tl(`${property.path}.${rawValue}`, resource.id, { defaultValue: base }); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Badge, { outline: true, size: "sm" }, translation); }; var BooleanPropertyValue$1 = allowOverride(BooleanPropertyValue, 'BooleanPropertyValue'); const Show$8 = props => { const { property } = props; const { translateProperty } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ValueGroup, { label: translateProperty(property.label, property.resourceId) }, /*#__PURE__*/React__default$1.default.createElement(BooleanPropertyValue$1, props)); }; var show$7 = allowOverride(Show$8, 'DefaultBooleanShowProperty'); const List$7 = props => /*#__PURE__*/React__default$1.default.createElement(BooleanPropertyValue$1, props); var list$6 = allowOverride(List$7, 'DefaultBooleanListProperty'); const boolValue = s => { if (/true/i.test(s)) { return true; } return false; }; const Filter$6 = props => { const { property, filter = {}, onChange } = props; const { tl } = useTranslation(); const value = typeof filter[property.path] === 'undefined' ? '' : boolValue(filter[property.path]); const options = [{ value: true, label: tl(`${property.path}.true`, property.resourceId, { defaultValue: mapValue$1(true) }) }, { value: false, label: tl(`${property.path}.false`, property.resourceId, { defaultValue: mapValue$1(false) }) }]; const selected = options.find(o => o.value === value); const handleChange = s => { const newValue = s ? s.value : undefined; onChange(property.path, newValue); }; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, null, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property, filter: true }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Select, { variant: "filter", value: typeof selected === 'undefined' ? '' : selected, isClearable: true, options: options, onChange: handleChange })); }; var filter$5 = allowOverride(Filter$6, 'DefaultBooleanFilterProperty'); var boolean = /*#__PURE__*/Object.freeze({ __proto__: null, edit: edit$8, filter: filter$5, list: list$6, show: show$7 }); function _extends$g() { _extends$g = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$g.apply(this, arguments); } const CurrencyInputWrapper = props => { const { id, initial, onChange, options } = props; const [value, setValue] = React$1.useState(initial); const onValueChange = currentValue => { setValue(currentValue); onChange(currentValue); }; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.CurrencyInput, _extends$g({ id: id, name: id, value: value, onValueChange: onValueChange }, options)); }; const OverridableCurrencyInputWrapper = allowOverride(CurrencyInputWrapper, 'CurrencyPropertyInputWrapper'); const Edit$8 = props => { const { onChange, property, record } = props; const propValue = record.params?.[property.path] ?? ''; const error = record.errors?.[property.path]; const { tm } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { error: Boolean(error) }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property }), /*#__PURE__*/React__default$1.default.createElement(OverridableCurrencyInputWrapper, { id: property.path, initial: propValue, options: property.props, onChange: value => onChange(property.path, value) }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormMessage, null, error && tm(error.message, property.resourceId))); }; var edit$7 = allowOverride( /*#__PURE__*/React$1.memo(Edit$8, recordPropertyIsEqual), 'DefaultCurrencyEditProperty'); function _extends$f() { _extends$f = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$f.apply(this, arguments); } const Filter$5 = props => { const { onChange, property, filter } = props; const handleChange = value => { onChange(property.path, value); }; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { variant: "filter" }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property, filter: true }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.CurrencyInput, _extends$f({ id: property.path, name: `filter-${property.path}`, onValueChange: handleChange, value: filter[property.path] }, property.props))); }; var filter$4 = allowOverride(Filter$5, 'DefaultCurrencyFilterProperty'); const optionsKeys = ['value', 'decimalSeparator', 'groupSeparator', 'disableGroupSeparators', 'intlConfig', 'decimalScale', 'prefix', 'suffix']; const pickFormatOptions = props => { const pickedProps = Object.keys(props).reduce((acc, curr) => { if (optionsKeys.includes(curr)) { if (props[curr] !== null && props[curr] !== undefined) { acc[curr] = props[curr].toString(); } } return acc; }, {}); return pickedProps; }; const formatValue = (value, props = {}) => { const formatOptions = pickFormatOptions({ value, ...props }); return DesignSystem.formatCurrencyProperty(formatOptions); }; const List$6 = props => { const { property, record } = props; const value = formatValue(record.params[property.path], property.props); return /*#__PURE__*/React__default$1.default.createElement("span", null, value); }; var list$5 = allowOverride(List$6, 'DefaultCurrencyListProperty'); const Show$7 = props => { const { property, record } = props; const value = `${record.params[property.path]}`; const { translateProperty } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ValueGroup, { label: translateProperty(property.label, property.resourceId) }, formatValue(value, property.props)); }; var show$6 = allowOverride(Show$7, 'DefaultCurrencyShowProperty'); var currency = /*#__PURE__*/Object.freeze({ __proto__: null, edit: edit$7, filter: filter$4, list: list$5, show: show$6 }); const stripTimeFromISO = date => { if (date === null) return null; if (typeof date === 'string') { return date.replace(/T\d{2}:\d{2}:\d{2}\.\d{3}Z$/, ''); } return date.toISOString().replace(/T\d{2}:\d{2}:\d{2}\.\d{3}Z$/, ''); }; function _extends$e() { _extends$e = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$e.apply(this, arguments); } const formatDate = (date, propertyType) => { if (!date) return ''; if (propertyType !== 'date') return date; return `${stripTimeFromISO(date)}T00:00:00`; }; const Edit$7 = props => { const { property, onChange, record } = props; const value = record.params ? formatDate(record.params[property.path], property.type) : ''; const error = record.errors && record.errors[property.path]; const { tm } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { error: !!error }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DatePicker, _extends$e({ value: value, disabled: property.isDisabled, onChange: date => { onChange(property.path, property.type === 'date' ? stripTimeFromISO(date) ?? date : date); }, propertyType: property.type }, property.props)), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormMessage, null, error && tm(error.message, property.resourceId))); }; var edit$6 = allowOverride( /*#__PURE__*/React$1.memo(Edit$7, recordPropertyIsEqual), 'DefaultDatetimeEditProperty'); var mapValue = ((value, propertyType) => { if (!value) { return ''; } const date = propertyType === 'date' ? new Date(`${stripTimeFromISO(value)}T00:00:00`) : new Date(value); if (date) { return DesignSystem.formatDateProperty(date, propertyType); } return ''; }); const Show$6 = props => { const { property, record } = props; const { translateProperty } = useTranslation(); const value = mapValue(record.params[property.path], property.type); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ValueGroup, { label: translateProperty(property.label, property.resourceId) }, value); }; var show$5 = allowOverride(Show$6, 'DefaultDatetimeShowProperty'); const List$5 = props => { const { property, record } = props; const value = mapValue(record.params[property.path], property.type); return /*#__PURE__*/React__default$1.default.createElement("span", null, value); }; var list$4 = allowOverride(List$5, 'DefaultDatetimeListProperty'); const PARAM_SEPARATOR$1 = '~~'; /** * Filter object wrapping up selected filters. * @private */ let Filter$4 = class Filter { /** * Changes raw nested filters to form Object<path, value>. * * @example * const filters = { * nested: {field: 'ala'}, * 'dataField~~from': '2019-08-14' * } * * const normalized = Filter.normalizeFilters(filters) * // { * // 'nested.filter': 'ala', * // 'dataField': {from: '2019-08-14'} * // } * * * @param {Object} filters * * @return {Object} */ static normalizeKeys(filters) { return flat.unflatten(flat.flatten(filters), { delimiter: PARAM_SEPARATOR$1 }); } /** * @param {Object<String,Object | String>} filters selected filters * @param {BaseResource} resource resource which is filtered */ constructor(filters = {}, resource) { this.resource = resource; const normalized = Filter.normalizeKeys(filters); this.filters = Object.keys(normalized).reduce((memo, path) => { memo[path] = { path, property: this.resource.property(path), value: normalized[path] }; return memo; }, {}); } /** * Returns filter for a given property key * * @param {String} key property key * @returns {Filter.Property | undefined} */ get(key) { return this.filters[key]; } /** * Populates all filtered properties which refers to other resources */ async populate(context) { const keys = Object.keys(this.filters); for (let index = 0; index < keys.length; index += 1) { const key = keys[index]; const referenceResource = this.resource.decorate().getPropertyByKey(key)?.reference(); if (referenceResource) { const value = this.filters[key].value; this.filters[key].populated = await referenceResource.findOne(value, context); } } return this; } reduce(callback, initial) { return Object.values(this.filters).reduce(callback, initial || {}); } isVisible() { return !!Object.keys(this.filters).length; } }; var BackendFilter = /*#__PURE__*/Object.freeze({ __proto__: null, Filter: Filter$4, PARAM_SEPARATOR: PARAM_SEPARATOR$1, default: Filter$4 }); const { PARAM_SEPARATOR } = BackendFilter; const Filter$3 = props => { const { property, filter, onChange } = props; const { translateProperty } = useTranslation(); const fromKey = `${property.path}${PARAM_SEPARATOR}from`; const toKey = `${property.path}${PARAM_SEPARATOR}to`; const fromValue = filter[fromKey]; const toValue = filter[toKey]; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { variant: "filter" }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property, filter: true }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Label, null, `- ${translateProperty('from')}: `), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DatePicker, { value: fromValue, onChange: date => onChange(fromKey, date), propertyType: property.type }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Label, { mt: "default" }, `- ${translateProperty('to')}: `), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DatePicker, { value: toValue, onChange: date => onChange(toKey, date), propertyType: property.type })); }; var filter$3 = allowOverride(Filter$3, 'DefaultDatetimeFilterProperty'); var datetime = /*#__PURE__*/Object.freeze({ __proto__: null, edit: edit$6, filter: filter$3, list: list$4, show: show$5 }); const DefaultPropertyValue = ({ property: { propertyPath, availableValues, path }, record, resource: { id: resourceId } }) => { const rawValue = record?.params[path]; const { tl } = useTranslation(); if (typeof rawValue === 'undefined') return null; // eslint-disable-next-line eqeqeq const option = availableValues?.find(opt => opt.value == rawValue); if (option) { const label = option.label || rawValue; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Badge, null, tl(`${propertyPath}.${label}`, resourceId, { defaultValue: startCase$1(label) })); } return rawValue; }; var DefaultPropertyValue$1 = allowOverride(DefaultPropertyValue, 'DefaultPropertyValue'); const Show$5 = props => { const { property } = props; const { translateProperty } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ValueGroup, { label: translateProperty(property.label, property.resourceId) }, /*#__PURE__*/React__default$1.default.createElement(DefaultPropertyValue$1, props)); }; var show$4 = allowOverride(Show$5, 'DefaultShowProperty'); function _extends$d() { _extends$d = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$d.apply(this, arguments); } const Edit$6 = props => { const { property, record } = props; const error = record.errors?.[property.path]; const { tm } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { error: Boolean(error) }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property }), property.availableValues ? /*#__PURE__*/React__default$1.default.createElement(SelectEdit, props) : /*#__PURE__*/React__default$1.default.createElement(TextEdit, props), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormMessage, null, error && tm(error.message, property.resourceId))); }; const SelectEdit = props => { const { record, property, onChange } = props; const { tl } = useTranslation(); if (!property.availableValues) { return null; } const propValue = record.params?.[property.path] ?? property.props.value ?? ''; // eslint-disable-next-line max-len const availableValues = property.availableValues.map(v => ({ ...v, label: tl(`${property.path}.${v.value}`, property.resourceId, { defaultValue: v.label ?? v.value }) })); // eslint-disable-next-line eqeqeq const selected = availableValues.find(av => av.value == propValue); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Select, _extends$d({ value: selected, options: availableValues, onChange: s => onChange(property.path, s?.value ?? ''), isDisabled: property.isDisabled }, property.props)); }; const TextEdit = props => { const { property, record, onChange } = props; const propValue = record.params?.[property.path] ?? property.props.value ?? ''; const [value, setValue] = React$1.useState(propValue); React$1.useEffect(() => { if (value !== propValue) { setValue(propValue); } }, [propValue]); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Input, _extends$d({ id: property.path, name: property.path, required: property.isRequired, onChange: e => setValue(e.target.value), onBlur: () => onChange(property.path, value) // handle clicking ENTER , onKeyDown: e => e.keyCode === 13 && onChange(property.path, value), value: value, disabled: property.isDisabled }, property.props)); }; var edit$5 = allowOverride( /*#__PURE__*/React$1.memo(Edit$6, recordPropertyIsEqual), 'DefaultEditProperty'); const Filter$2 = props => { const { property, onChange, filter } = props; const { tl } = useTranslation(); const handleInputChange = event => { onChange(property.path, event.target.value); }; const handleSelectChange = selected => { const value = selected ? selected.value : ''; onChange(property.path, value); }; const renderInput = () => { const filterKey = `filter-${property.path}`; const value = filter[property.path] || ''; if (property.availableValues) { const availableValues = property.availableValues.map(v => ({ ...v, label: tl(`${property.path}.${v.value}`, property.resourceId, { defaultValue: v.label ?? v.value }) })); const selected = availableValues.find(av => av.value === value); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Select, { variant: "filter", value: typeof selected === 'undefined' ? '' : selected, isClearable: true, options: availableValues, onChange: handleSelectChange }); } return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Input, { name: filterKey, onChange: handleInputChange, value: value }); }; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { variant: "filter" }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property, filter: true }), renderInput()); }; var filter$2 = allowOverride(Filter$2, 'DefaultFilterProperty'); const List$4 = props => /*#__PURE__*/React__default$1.default.createElement(DefaultPropertyValue$1, props); var list$3 = allowOverride(List$4, 'DefaultListProperty'); var defaultType = /*#__PURE__*/Object.freeze({ __proto__: null, edit: edit$5, filter: filter$2, list: list$3, show: show$4 }); function _extends$c() { _extends$c = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$c.apply(this, arguments); } const Edit$5 = props => { const { property, record, onChange } = props; const propValue = record.params[property.path]; const [value, setValue] = React$1.useState(propValue); const error = record.errors && record.errors[property.path]; const [isInput, setIsInput] = React$1.useState(false); const { tm } = useTranslation(); React$1.useEffect(() => { if (value !== propValue) { setValue(propValue); } }, [propValue]); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { error: !!error }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.InputGroup, null, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Input, _extends$c({ type: isInput ? 'input' : 'password', className: "input", id: property.path, name: property.path, onChange: event => setValue(event.target.value), onBlur: () => onChange(property.path, value), onKeyDown: e => e.keyCode === 13 && onChange(property.path, value), value: value ?? '', disabled: property.isDisabled }, property.props)), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { type: "button", size: "icon", onClick: () => setIsInput(!isInput) }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Icon, { icon: "Eye" }))), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormMessage, null, error && tm(error.message, property.resourceId))); }; var edit$4 = allowOverride( /*#__PURE__*/React$1.memo(Edit$5, recordPropertyIsEqual), 'DefaultPasswordEditProperty'); /* eslint-disable import/prefer-default-export */ var password = /*#__PURE__*/Object.freeze({ __proto__: null, edit: edit$4 }); function _extends$b() { _extends$b = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$b.apply(this, arguments); } const Edit$4 = props => { const { onChange, property, record } = props; const propValue = record.params?.[property.path] ?? ''; const [value, setValue] = React$1.useState(propValue); const error = record.errors?.[property.path]; const { tm } = useTranslation(); React$1.useEffect(() => { if (value !== propValue) { setValue(propValue); } }, [propValue]); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { error: Boolean(error) }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.PhoneInput, _extends$b({ id: property.path, inputProps: { name: property.path, required: property.isRequired }, onChange: setValue, onBlur: () => onChange(property.path, value), value: value }, property.props)), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormMessage, null, error && tm(error.message, property.resourceId))); }; var edit$3 = allowOverride( /*#__PURE__*/React$1.memo(Edit$4, recordPropertyIsEqual), 'DefaultPhoneEditProperty'); function _extends$a() { _extends$a = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$a.apply(this, arguments); } const Filter$1 = props => { const { onChange, property, filter } = props; const handleChange = React$1.useCallback(value => { onChange(property.path, value); }, []); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { variant: "filter" }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property, filter: true }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.PhoneInput, _extends$a({ id: property.path, inputProps: { name: `filter-${property.path}` }, onChange: handleChange, value: filter[property.path] }, property.props))); }; var filter$1 = allowOverride(Filter$1, 'DefaultPhoneFilterProperty'); const List$3 = props => /*#__PURE__*/React__default$1.default.createElement(DefaultPropertyValue$1, props); var list$2 = allowOverride(List$3, 'DefaultPhoneListProperty'); const Show$4 = props => { const { property } = props; const { translateProperty } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ValueGroup, { label: translateProperty(property.label, property.resourceId) }, /*#__PURE__*/React__default$1.default.createElement(DefaultPropertyValue$1, props)); }; var show$3 = allowOverride(Show$4, 'DefaultPhoneShowProperty'); var phone = /*#__PURE__*/Object.freeze({ __proto__: null, edit: edit$3, filter: filter$1, list: list$2, show: show$3 }); function _extends$9() { _extends$9 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$9.apply(this, arguments); } const Edit$3 = props => { const { onChange, property, record } = props; const { reference: resourceId } = property; if (!resourceId) { throw new Error(`Cannot reference resource in property '${property.path}'`); } const handleChange = selected => { if (selected) { onChange(property.path, selected.value, selected.record); } else { onChange(property.path, null); } }; const loadOptions = async inputValue => { const api = new ApiClient(); const optionRecords = await api.searchRecords({ resourceId, query: inputValue }); return optionRecords.map(optionRecord => ({ value: optionRecord.id, label: optionRecord.title, record: optionRecord })); }; const error = record?.errors[property.path]; const selectedId = React$1.useMemo(() => flat.get(record?.params, property.path), [record]); const [loadedRecord, setLoadedRecord] = React$1.useState(); const [loadingRecord, setLoadingRecord] = React$1.useState(0); React$1.useEffect(() => { if (selectedId) { setLoadingRecord(c => c + 1); const api = new ApiClient(); api.recordAction({ actionName: 'show', resourceId, recordId: selectedId }).then(({ data }) => { setLoadedRecord(data.record); }).finally(() => { setLoadingRecord(c => c - 1); }); } }, [selectedId, resourceId]); const selectedValue = loadedRecord; const selectedOption = selectedId && selectedValue ? { value: selectedValue.id, label: selectedValue.title } : { value: '', label: '' }; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { error: Boolean(error) }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.SelectAsync, _extends$9({ cacheOptions: true, value: selectedOption, defaultOptions: true, loadOptions: loadOptions, onChange: handleChange, isClearable: true, isDisabled: property.isDisabled, isLoading: !!loadingRecord }, property.props)), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormMessage, null, error?.message)); }; var edit$2 = allowOverride( /*#__PURE__*/React$1.memo(Edit$3, recordPropertyIsEqual), 'DefaultReferenceEditProperty'); const StyledLink = styledComponents.styled(reactRouterDom.Link)` ${DesignSystem.ButtonCSS}; padding-left: ${({ theme }) => theme.space.xs}; padding-right: ${({ theme }) => theme.space.xs}; `; const ReferenceValue = props => { const { property, record } = props; const h = new ViewHelpers(); const refId = record.params[property.path]; const populated = record.populated[property.path]; const value = populated && populated.title || refId; if (!property.reference) { throw new Error(`property: "${property.path}" does not have a reference`); } if (populated?.recordActions?.find(a => a.name === 'show')) { const href = h.recordActionUrl({ resourceId: property.reference, recordId: refId, actionName: 'show' }); return /*#__PURE__*/React__default$1.default.createElement(StyledLink, { variant: "text", to: href }, value); } return /*#__PURE__*/React__default$1.default.createElement("span", null, value); }; var ReferenceValue$1 = allowOverride(ReferenceValue, 'DefaultReferenceValue'); const Show$3 = props => { const { property, record } = props; const { translateProperty } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ValueGroup, { label: translateProperty(property.label, property.resourceId) }, /*#__PURE__*/React__default$1.default.createElement(ReferenceValue$1, { property: property, record: record })); }; var show$2 = allowOverride(Show$3, 'DefaultReferenceShowProperty'); const List$2 = props => /*#__PURE__*/React__default$1.default.createElement(ReferenceValue$1, props); var list$1 = allowOverride(List$2, 'DefaultReferenceListProperty'); const Filter = props => { const { property, filter, onChange } = props; const [options, setOptions] = React$1.useState([]); const api = new ApiClient(); const handleChange = selected => { onChange(property.path, selected ? selected.value : ''); }; const loadOptions = async inputValue => { const records = await api.searchRecords({ resourceId: property.reference, query: inputValue }); const loadedOptions = records.map(r => ({ value: r.id, label: r.title })); setOptions(loadedOptions); return loadedOptions; }; const value = typeof filter[property.path] === 'undefined' ? '' : filter[property.path]; const selected = (options || []).find(o => String(o.value) === String(value)); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, null, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property, filter: true }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.SelectAsync, { variant: "filter", value: typeof selected === 'undefined' ? '' : selected, isClearable: true, cacheOptions: true, loadOptions: loadOptions, onChange: handleChange, defaultOptions: true })); }; var filter = allowOverride(Filter, 'DefaultReferenceFilterProperty'); var reference = /*#__PURE__*/Object.freeze({ __proto__: null, edit: edit$2, filter: filter, list: list$1, show: show$2 }); const Edit$2 = props => { const { property, record, onChange } = props; const value = record.params?.[property.path]; const error = record.errors && record.errors[property.path]; const { custom = {} } = property; const { variant = 'default' } = custom; const handleUpdate = React$1.useCallback(newValue => { onChange(property.path, newValue); }, []); if (variant === 'tinymce') { return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { error: Boolean(error) }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TinyMCE, { value: value, onChange: handleUpdate, options: property.props }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormMessage, null, error?.message)); } return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { error: Boolean(error) }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.RichTextEditor, { value: value, onChange: handleUpdate, options: property.props }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormMessage, null, error?.message)); }; var edit$1 = allowOverride( /*#__PURE__*/React$1.memo(Edit$2, recordPropertyIsEqual), 'DefaultRichtextEditProperty'); var lib$1 = {exports: {}}; var _default$1 = {}; var lib = {exports: {}}; var _default = {}; /** * cssfilter * * @author 老雷<leizongmin@gmail.com> */ function getDefaultWhiteList$1 () { // 白名单值说明: // true: 允许该属性 // Function: function (val) { } 返回true表示允许该属性,其他值均表示不允许 // RegExp: regexp.test(val) 返回true表示允许该属性,其他值均表示不允许 // 除上面列出的值外均表示不允许 var whiteList = {}; whiteList['align-content'] = false; // default: auto whiteList['align-items'] = false; // default: auto whiteList['align-self'] = false; // default: auto whiteList['alignment-adjust'] = false; // default: auto whiteList['alignment-baseline'] = false; // default: baseline whiteList['all'] = false; // default: depending on individual properties whiteList['anchor-point'] = false; // default: none whiteList['animation'] = false; // default: depending on individual properties whiteList['animation-delay'] = false; // default: 0 whiteList['animation-direction'] = false; // default: normal whiteList['animation-duration'] = false; // default: 0 whiteList['animation-fill-mode'] = false; // default: none whiteList['animation-iteration-count'] = false; // default: 1 whiteList['animation-name'] = false; // default: none whiteList['animation-play-state'] = false; // default: running whiteList['animation-timing-function'] = false; // default: ease whiteList['azimuth'] = false; // default: center whiteList['backface-visibility'] = false; // default: visible whiteList['background'] = true; // default: depending on individual properties whiteList['background-attachment'] = true; // default: scroll whiteList['background-clip'] = true; // default: border-box whiteList['background-color'] = true; // default: transparent whiteList['background-image'] = true; // default: none whiteList['background-origin'] = true; // default: padding-box whiteList['background-position'] = true; // default: 0% 0% whiteList['background-repeat'] = true; // default: repeat whiteList['background-size'] = true; // default: auto whiteList['baseline-shift'] = false; // default: baseline whiteList['binding'] = false; // default: none whiteList['bleed'] = false; // default: 6pt whiteList['bookmark-label'] = false; // default: content() whiteList['bookmark-level'] = false; // default: none whiteList['bookmark-state'] = false; // default: open whiteList['border'] = true; // default: depending on individual properties whiteList['border-bottom'] = true; // default: depending on individual properties whiteList['border-bottom-color'] = true; // default: current color whiteList['border-bottom-left-radius'] = true; // default: 0 whiteList['border-bottom-right-radius'] = true; // default: 0 whiteList['border-bottom-style'] = true; // default: none whiteList['border-bottom-width'] = true; // default: medium whiteList['border-collapse'] = true; // default: separate whiteList['border-color'] = true; // default: depending on individual properties whiteList['border-image'] = true; // default: none whiteList['border-image-outset'] = true; // default: 0 whiteList['border-image-repeat'] = true; // default: stretch whiteList['border-image-slice'] = true; // default: 100% whiteList['border-image-source'] = true; // default: none whiteList['border-image-width'] = true; // default: 1 whiteList['border-left'] = true; // default: depending on individual properties whiteList['border-left-color'] = true; // default: current color whiteList['border-left-style'] = true; // default: none whiteList['border-left-width'] = true; // default: medium whiteList['border-radius'] = true; // default: 0 whiteList['border-right'] = true; // default: depending on individual properties whiteList['border-right-color'] = true; // default: current color whiteList['border-right-style'] = true; // default: none whiteList['border-right-width'] = true; // default: medium whiteList['border-spacing'] = true; // default: 0 whiteList['border-style'] = true; // default: depending on individual properties whiteList['border-top'] = true; // default: depending on individual properties whiteList['border-top-color'] = true; // default: current color whiteList['border-top-left-radius'] = true; // default: 0 whiteList['border-top-right-radius'] = true; // default: 0 whiteList['border-top-style'] = true; // default: none whiteList['border-top-width'] = true; // default: medium whiteList['border-width'] = true; // default: depending on individual properties whiteList['bottom'] = false; // default: auto whiteList['box-decoration-break'] = true; // default: slice whiteList['box-shadow'] = true; // default: none whiteList['box-sizing'] = true; // default: content-box whiteList['box-snap'] = true; // default: none whiteList['box-suppress'] = true; // default: show whiteList['break-after'] = true; // default: auto whiteList['break-before'] = true; // default: auto whiteList['break-inside'] = true; // default: auto whiteList['caption-side'] = false; // default: top whiteList['chains'] = false; // default: none whiteList['clear'] = true; // default: none whiteList['clip'] = false; // default: auto whiteList['clip-path'] = false; // default: none whiteList['clip-rule'] = false; // default: nonzero whiteList['color'] = true; // default: implementation dependent whiteList['color-interpolation-filters'] = true; // default: auto whiteList['column-count'] = false; // default: auto whiteList['column-fill'] = false; // default: balance whiteList['column-gap'] = false; // default: normal whiteList['column-rule'] = false; // default: depending on individual properties whiteList['column-rule-color'] = false; // default: current color whiteList['column-rule-style'] = false; // default: medium whiteList['column-rule-width'] = false; // default: medium whiteList['column-span'] = false; // default: none whiteList['column-width'] = false; // default: auto whiteList['columns'] = false; // default: depending on individual properties whiteList['contain'] = false; // default: none whiteList['content'] = false; // default: normal whiteList['counter-increment'] = false; // default: none whiteList['counter-reset'] = false; // default: none whiteList['counter-set'] = false; // default: none whiteList['crop'] = false; // default: auto whiteList['cue'] = false; // default: depending on individual properties whiteList['cue-after'] = false; // default: none whiteList['cue-before'] = false; // default: none whiteList['cursor'] = false; // default: auto whiteList['direction'] = false; // default: ltr whiteList['display'] = true; // default: depending on individual properties whiteList['display-inside'] = true; // default: auto whiteList['display-list'] = true; // default: none whiteList['display-outside'] = true; // default: inline-level whiteList['dominant-baseline'] = false; // default: auto whiteList['elevation'] = false; // default: level whiteList['empty-cells'] = false; // default: show whiteList['filter'] = false; // default: none whiteList['flex'] = false; // default: depending on individual properties whiteList['flex-basis'] = false; // default: auto whiteList['flex-direction'] = false; // default: row whiteList['flex-flow'] = false; // default: depending on individual properties whiteList['flex-grow'] = false; // default: 0 whiteList['flex-shrink'] = false; // default: 1 whiteList['flex-wrap'] = false; // default: nowrap whiteList['float'] = false; // default: none whiteList['float-offset'] = false; // default: 0 0 whiteList['flood-color'] = false; // default: black whiteList['flood-opacity'] = false; // default: 1 whiteList['flow-from'] = false; // default: none whiteList['flow-into'] = false; // default: none whiteList['font'] = true; // default: depending on individual properties whiteList['font-family'] = true; // default: implementation dependent whiteList['font-feature-settings'] = true; // default: normal whiteList['font-kerning'] = true; // default: auto whiteList['font-language-override'] = true; // default: normal whiteList['font-size'] = true; // default: medium whiteList['font-size-adjust'] = true; // default: none whiteList['font-stretch'] = true; // default: normal whiteList['font-style'] = true; // default: normal whiteList['font-synthesis'] = true; // default: weight style whiteList['font-variant'] = true; // default: normal whiteList['font-variant-alternates'] = true; // default: normal whiteList['font-variant-caps'] = true; // default: normal whiteList['font-variant-east-asian'] = true; // default: normal whiteList['font-variant-ligatures'] = true; // default: normal whiteList['font-variant-numeric'] = true; // default: normal whiteList['font-variant-position'] = true; // default: normal whiteList['font-weight'] = true; // default: normal whiteList['grid'] = false; // default: depending on individual properties whiteList['grid-area'] = false; // default: depending on individual properties whiteList['grid-auto-columns'] = false; // default: auto whiteList['grid-auto-flow'] = false; // default: none whiteList['grid-auto-rows'] = false; // default: auto whiteList['grid-column'] = false; // default: depending on individual properties whiteList['grid-column-end'] = false; // default: auto whiteList['grid-column-start'] = false; // default: auto whiteList['grid-row'] = false; // default: depending on individual properties whiteList['grid-row-end'] = false; // default: auto whiteList['grid-row-start'] = false; // default: auto whiteList['grid-template'] = false; // default: depending on individual properties whiteList['grid-template-areas'] = false; // default: none whiteList['grid-template-columns'] = false; // default: none whiteList['grid-template-rows'] = false; // default: none whiteList['hanging-punctuation'] = false; // default: none whiteList['height'] = true; // default: auto whiteList['hyphens'] = false; // default: manual whiteList['icon'] = false; // default: auto whiteList['image-orientation'] = false; // default: auto whiteList['image-resolution'] = false; // default: normal whiteList['ime-mode'] = false; // default: auto whiteList['initial-letters'] = false; // default: normal whiteList['inline-box-align'] = false; // default: last whiteList['justify-content'] = false; // default: auto whiteList['justify-items'] = false; // default: auto whiteList['justify-self'] = false; // default: auto whiteList['left'] = false; // default: auto whiteList['letter-spacing'] = true; // default: normal whiteList['lighting-color'] = true; // default: white whiteList['line-box-contain'] = false; // default: block inline replaced whiteList['line-break'] = false; // default: auto whiteList['line-grid'] = false; // default: match-parent whiteList['line-height'] = false; // default: normal whiteList['line-snap'] = false; // default: none whiteList['line-stacking'] = false; // default: depending on individual properties whiteList['line-stacking-ruby'] = false; // default: exclude-ruby whiteList['line-stacking-shift'] = false; // default: consider-shifts whiteList['line-stacking-strategy'] = false; // default: inline-line-height whiteList['list-style'] = true; // default: depending on individual properties whiteList['list-style-image'] = true; // default: none whiteList['list-style-position'] = true; // default: outside whiteList['list-style-type'] = true; // default: disc whiteList['margin'] = true; // default: depending on individual properties whiteList['margin-bottom'] = true; // default: 0 whiteList['margin-left'] = true; // default: 0 whiteList['margin-right'] = true; // default: 0 whiteList['margin-top'] = true; // default: 0 whiteList['marker-offset'] = false; // default: auto whiteList['marker-side'] = false; // default: list-item whiteList['marks'] = false; // default: none whiteList['mask'] = false; // default: border-box whiteList['mask-box'] = false; // default: see individual properties whiteList['mask-box-outset'] = false; // default: 0 whiteList['mask-box-repeat'] = false; // default: stretch whiteList['mask-box-slice'] = false; // default: 0 fill whiteList['mask-box-source'] = false; // default: none whiteList['mask-box-width'] = false; // default: auto whiteList['mask-clip'] = false; // default: border-box whiteList['mask-image'] = false; // default: none whiteList['mask-origin'] = false; // default: border-box whiteList['mask-position'] = false; // default: center whiteList['mask-repeat'] = false; // default: no-repeat whiteList['mask-size'] = false; // default: border-box whiteList['mask-source-type'] = false; // default: auto whiteList['mask-type'] = false; // default: luminance whiteList['max-height'] = true; // default: none whiteList['max-lines'] = false; // default: none whiteList['max-width'] = true; // default: none whiteList['min-height'] = true; // default: 0 whiteList['min-width'] = true; // default: 0 whiteList['move-to'] = false; // default: normal whiteList['nav-down'] = false; // default: auto whiteList['nav-index'] = false; // default: auto whiteList['nav-left'] = false; // default: auto whiteList['nav-right'] = false; // default: auto whiteList['nav-up'] = false; // default: auto whiteList['object-fit'] = false; // default: fill whiteList['object-position'] = false; // default: 50% 50% whiteList['opacity'] = false; // default: 1 whiteList['order'] = false; // default: 0 whiteList['orphans'] = false; // default: 2 whiteList['outline'] = false; // default: depending on individual properties whiteList['outline-color'] = false; // default: invert whiteList['outline-offset'] = false; // default: 0 whiteList['outline-style'] = false; // default: none whiteList['outline-width'] = false; // default: medium whiteList['overflow'] = false; // default: depending on individual properties whiteList['overflow-wrap'] = false; // default: normal whiteList['overflow-x'] = false; // default: visible whiteList['overflow-y'] = false; // default: visible whiteList['padding'] = true; // default: depending on individual properties whiteList['padding-bottom'] = true; // default: 0 whiteList['padding-left'] = true; // default: 0 whiteList['padding-right'] = true; // default: 0 whiteList['padding-top'] = true; // default: 0 whiteList['page'] = false; // default: auto whiteList['page-break-after'] = false; // default: auto whiteList['page-break-before'] = false; // default: auto whiteList['page-break-inside'] = false; // default: auto whiteList['page-policy'] = false; // default: start whiteList['pause'] = false; // default: implementation dependent whiteList['pause-after'] = false; // default: implementation dependent whiteList['pause-before'] = false; // default: implementation dependent whiteList['perspective'] = false; // default: none whiteList['perspective-origin'] = false; // default: 50% 50% whiteList['pitch'] = false; // default: medium whiteList['pitch-range'] = false; // default: 50 whiteList['play-during'] = false; // default: auto whiteList['position'] = false; // default: static whiteList['presentation-level'] = false; // default: 0 whiteList['quotes'] = false; // default: text whiteList['region-fragment'] = false; // default: auto whiteList['resize'] = false; // default: none whiteList['rest'] = false; // default: depending on individual properties whiteList['rest-after'] = false; // default: none whiteList['rest-before'] = false; // default: none whiteList['richness'] = false; // default: 50 whiteList['right'] = false; // default: auto whiteList['rotation'] = false; // default: 0 whiteList['rotation-point'] = false; // default: 50% 50% whiteList['ruby-align'] = false; // default: auto whiteList['ruby-merge'] = false; // default: separate whiteList['ruby-position'] = false; // default: before whiteList['shape-image-threshold'] = false; // default: 0.0 whiteList['shape-outside'] = false; // default: none whiteList['shape-margin'] = false; // default: 0 whiteList['size'] = false; // default: auto whiteList['speak'] = false; // default: auto whiteList['speak-as'] = false; // default: normal whiteList['speak-header'] = false; // default: once whiteList['speak-numeral'] = false; // default: continuous whiteList['speak-punctuation'] = false; // default: none whiteList['speech-rate'] = false; // default: medium whiteList['stress'] = false; // default: 50 whiteList['string-set'] = false; // default: none whiteList['tab-size'] = false; // default: 8 whiteList['table-layout'] = false; // default: auto whiteList['text-align'] = true; // default: start whiteList['text-align-last'] = true; // default: auto whiteList['text-combine-upright'] = true; // default: none whiteList['text-decoration'] = true; // default: none whiteList['text-decoration-color'] = true; // default: currentColor whiteList['text-decoration-line'] = true; // default: none whiteList['text-decoration-skip'] = true; // default: objects whiteList['text-decoration-style'] = true; // default: solid whiteList['text-emphasis'] = true; // default: depending on individual properties whiteList['text-emphasis-color'] = true; // default: currentColor whiteList['text-emphasis-position'] = true; // default: over right whiteList['text-emphasis-style'] = true; // default: none whiteList['text-height'] = true; // default: auto whiteList['text-indent'] = true; // default: 0 whiteList['text-justify'] = true; // default: auto whiteList['text-orientation'] = true; // default: mixed whiteList['text-overflow'] = true; // default: clip whiteList['text-shadow'] = true; // default: none whiteList['text-space-collapse'] = true; // default: collapse whiteList['text-transform'] = true; // default: none whiteList['text-underline-position'] = true; // default: auto whiteList['text-wrap'] = true; // default: normal whiteList['top'] = false; // default: auto whiteList['transform'] = false; // default: none whiteList['transform-origin'] = false; // default: 50% 50% 0 whiteList['transform-style'] = false; // default: flat whiteList['transition'] = false; // default: depending on individual properties whiteList['transition-delay'] = false; // default: 0s whiteList['transition-duration'] = false; // default: 0s whiteList['transition-property'] = false; // default: all whiteList['transition-timing-function'] = false; // default: ease whiteList['unicode-bidi'] = false; // default: normal whiteList['vertical-align'] = false; // default: baseline whiteList['visibility'] = false; // default: visible whiteList['voice-balance'] = false; // default: center whiteList['voice-duration'] = false; // default: auto whiteList['voice-family'] = false; // default: implementation dependent whiteList['voice-pitch'] = false; // default: medium whiteList['voice-range'] = false; // default: medium whiteList['voice-rate'] = false; // default: normal whiteList['voice-stress'] = false; // default: normal whiteList['voice-volume'] = false; // default: medium whiteList['volume'] = false; // default: medium whiteList['white-space'] = false; // default: normal whiteList['widows'] = false; // default: 2 whiteList['width'] = true; // default: auto whiteList['will-change'] = false; // default: auto whiteList['word-break'] = true; // default: normal whiteList['word-spacing'] = true; // default: normal whiteList['word-wrap'] = true; // default: normal whiteList['wrap-flow'] = false; // default: auto whiteList['wrap-through'] = false; // default: wrap whiteList['writing-mode'] = false; // default: horizontal-tb whiteList['z-index'] = false; // default: auto return whiteList; } /** * 匹配到白名单上的一个属性时 * * @param {String} name * @param {String} value * @param {Object} options * @return {String} */ function onAttr (name, value, options) { // do nothing } /** * 匹配到不在白名单上的一个属性时 * * @param {String} name * @param {String} value * @param {Object} options * @return {String} */ function onIgnoreAttr (name, value, options) { // do nothing } var REGEXP_URL_JAVASCRIPT = /javascript\s*\:/img; /** * 过滤属性值 * * @param {String} name * @param {String} value * @return {String} */ function safeAttrValue$1(name, value) { if (REGEXP_URL_JAVASCRIPT.test(value)) return ''; return value; } _default.whiteList = getDefaultWhiteList$1(); _default.getDefaultWhiteList = getDefaultWhiteList$1; _default.onAttr = onAttr; _default.onIgnoreAttr = onIgnoreAttr; _default.safeAttrValue = safeAttrValue$1; var util$1 = { indexOf: function (arr, item) { var i, j; if (Array.prototype.indexOf) { return arr.indexOf(item); } for (i = 0, j = arr.length; i < j; i++) { if (arr[i] === item) { return i; } } return -1; }, forEach: function (arr, fn, scope) { var i, j; if (Array.prototype.forEach) { return arr.forEach(fn, scope); } for (i = 0, j = arr.length; i < j; i++) { fn.call(scope, arr[i], i, arr); } }, trim: function (str) { if (String.prototype.trim) { return str.trim(); } return str.replace(/(^\s*)|(\s*$)/g, ''); }, trimRight: function (str) { if (String.prototype.trimRight) { return str.trimRight(); } return str.replace(/(\s*$)/g, ''); } }; /** * cssfilter * * @author 老雷<leizongmin@gmail.com> */ var _$3 = util$1; /** * 解析style * * @param {String} css * @param {Function} onAttr 处理属性的函数 * 参数格式: function (sourcePosition, position, name, value, source) * @return {String} */ function parseStyle$1 (css, onAttr) { css = _$3.trimRight(css); if (css[css.length - 1] !== ';') css += ';'; var cssLength = css.length; var isParenthesisOpen = false; var lastPos = 0; var i = 0; var retCSS = ''; function addNewAttr () { // 如果没有正常的闭合圆括号,则直接忽略当前属性 if (!isParenthesisOpen) { var source = _$3.trim(css.slice(lastPos, i)); var j = source.indexOf(':'); if (j !== -1) { var name = _$3.trim(source.slice(0, j)); var value = _$3.trim(source.slice(j + 1)); // 必须有属性名称 if (name) { var ret = onAttr(lastPos, retCSS.length, name, value, source); if (ret) retCSS += ret + '; '; } } } lastPos = i + 1; } for (; i < cssLength; i++) { var c = css[i]; if (c === '/' && css[i + 1] === '*') { // 备注开始 var j = css.indexOf('*/', i + 2); // 如果没有正常的备注结束,则后面的部分全部跳过 if (j === -1) break; // 直接将当前位置调到备注结尾,并且初始化状态 i = j + 1; lastPos = i + 1; isParenthesisOpen = false; } else if (c === '(') { isParenthesisOpen = true; } else if (c === ')') { isParenthesisOpen = false; } else if (c === ';') { if (isParenthesisOpen) ; else { addNewAttr(); } } else if (c === '\n') { addNewAttr(); } } return _$3.trim(retCSS); } var parser$2 = parseStyle$1; /** * cssfilter * * @author 老雷<leizongmin@gmail.com> */ var DEFAULT$1 = _default; var parseStyle = parser$2; /** * 返回值是否为空 * * @param {Object} obj * @return {Boolean} */ function isNull$1 (obj) { return (obj === undefined || obj === null); } /** * 浅拷贝对象 * * @param {Object} obj * @return {Object} */ function shallowCopyObject$1 (obj) { var ret = {}; for (var i in obj) { ret[i] = obj[i]; } return ret; } /** * 创建CSS过滤器 * * @param {Object} options * - {Object} whiteList * - {Function} onAttr * - {Function} onIgnoreAttr * - {Function} safeAttrValue */ function FilterCSS$2 (options) { options = shallowCopyObject$1(options || {}); options.whiteList = options.whiteList || DEFAULT$1.whiteList; options.onAttr = options.onAttr || DEFAULT$1.onAttr; options.onIgnoreAttr = options.onIgnoreAttr || DEFAULT$1.onIgnoreAttr; options.safeAttrValue = options.safeAttrValue || DEFAULT$1.safeAttrValue; this.options = options; } FilterCSS$2.prototype.process = function (css) { // 兼容各种奇葩输入 css = css || ''; css = css.toString(); if (!css) return ''; var me = this; var options = me.options; var whiteList = options.whiteList; var onAttr = options.onAttr; var onIgnoreAttr = options.onIgnoreAttr; var safeAttrValue = options.safeAttrValue; var retCSS = parseStyle(css, function (sourcePosition, position, name, value, source) { var check = whiteList[name]; var isWhite = false; if (check === true) isWhite = check; else if (typeof check === 'function') isWhite = check(value); else if (check instanceof RegExp) isWhite = check.test(value); if (isWhite !== true) isWhite = false; // 如果过滤后 value 为空则直接忽略 value = safeAttrValue(name, value); if (!value) return; var opts = { position: position, sourcePosition: sourcePosition, source: source, isWhite: isWhite }; if (isWhite) { var ret = onAttr(name, value, opts); if (isNull$1(ret)) { return name + ':' + value; } else { return ret; } } else { var ret = onIgnoreAttr(name, value, opts); if (!isNull$1(ret)) { return ret; } } }); return retCSS; }; var css = FilterCSS$2; /** * cssfilter * * @author 老雷<leizongmin@gmail.com> */ (function (module, exports) { var DEFAULT = _default; var FilterCSS = css; /** * XSS过滤 * * @param {String} css 要过滤的CSS代码 * @param {Object} options 选项:whiteList, onAttr, onIgnoreAttr * @return {String} */ function filterCSS (html, options) { var xss = new FilterCSS(options); return xss.process(html); } // 输出 exports = module.exports = filterCSS; exports.FilterCSS = FilterCSS; for (var i in DEFAULT) exports[i] = DEFAULT[i]; // 在浏览器端使用 if (typeof window !== 'undefined') { window.filterCSS = module.exports; } } (lib, lib.exports)); var libExports$1 = lib.exports; var util = { indexOf: function (arr, item) { var i, j; if (Array.prototype.indexOf) { return arr.indexOf(item); } for (i = 0, j = arr.length; i < j; i++) { if (arr[i] === item) { return i; } } return -1; }, forEach: function (arr, fn, scope) { var i, j; if (Array.prototype.forEach) { return arr.forEach(fn, scope); } for (i = 0, j = arr.length; i < j; i++) { fn.call(scope, arr[i], i, arr); } }, trim: function (str) { if (String.prototype.trim) { return str.trim(); } return str.replace(/(^\s*)|(\s*$)/g, ""); }, spaceIndex: function (str) { var reg = /\s|\n|\t/; var match = reg.exec(str); return match ? match.index : -1; }, }; /** * default settings * * @author Zongmin Lei<leizongmin@gmail.com> */ var FilterCSS$1 = libExports$1.FilterCSS; var getDefaultCSSWhiteList = libExports$1.getDefaultWhiteList; var _$2 = util; function getDefaultWhiteList() { return { a: ["target", "href", "title"], abbr: ["title"], address: [], area: ["shape", "coords", "href", "alt"], article: [], aside: [], audio: [ "autoplay", "controls", "crossorigin", "loop", "muted", "preload", "src", ], b: [], bdi: ["dir"], bdo: ["dir"], big: [], blockquote: ["cite"], br: [], caption: [], center: [], cite: [], code: [], col: ["align", "valign", "span", "width"], colgroup: ["align", "valign", "span", "width"], dd: [], del: ["datetime"], details: ["open"], div: [], dl: [], dt: [], em: [], figcaption: [], figure: [], font: ["color", "size", "face"], footer: [], h1: [], h2: [], h3: [], h4: [], h5: [], h6: [], header: [], hr: [], i: [], img: ["src", "alt", "title", "width", "height"], ins: ["datetime"], li: [], mark: [], nav: [], ol: [], p: [], pre: [], s: [], section: [], small: [], span: [], sub: [], summary: [], sup: [], strong: [], strike: [], table: ["width", "border", "align", "valign"], tbody: ["align", "valign"], td: ["width", "rowspan", "colspan", "align", "valign"], tfoot: ["align", "valign"], th: ["width", "rowspan", "colspan", "align", "valign"], thead: ["align", "valign"], tr: ["rowspan", "align", "valign"], tt: [], u: [], ul: [], video: [ "autoplay", "controls", "crossorigin", "loop", "muted", "playsinline", "poster", "preload", "src", "height", "width", ], }; } var defaultCSSFilter = new FilterCSS$1(); /** * default onTag function * * @param {String} tag * @param {String} html * @param {Object} options * @return {String} */ function onTag(tag, html, options) { // do nothing } /** * default onIgnoreTag function * * @param {String} tag * @param {String} html * @param {Object} options * @return {String} */ function onIgnoreTag(tag, html, options) { // do nothing } /** * default onTagAttr function * * @param {String} tag * @param {String} name * @param {String} value * @return {String} */ function onTagAttr(tag, name, value) { // do nothing } /** * default onIgnoreTagAttr function * * @param {String} tag * @param {String} name * @param {String} value * @return {String} */ function onIgnoreTagAttr(tag, name, value) { // do nothing } /** * default escapeHtml function * * @param {String} html */ function escapeHtml(html) { return html.replace(REGEXP_LT, "<").replace(REGEXP_GT, ">"); } /** * default safeAttrValue function * * @param {String} tag * @param {String} name * @param {String} value * @param {Object} cssFilter * @return {String} */ function safeAttrValue(tag, name, value, cssFilter) { // unescape attribute value firstly value = friendlyAttrValue(value); if (name === "href" || name === "src") { // filter `href` and `src` attribute // only allow the value that starts with `http://` | `https://` | `mailto:` | `/` | `#` value = _$2.trim(value); if (value === "#") return "#"; if ( !( value.substr(0, 7) === "http://" || value.substr(0, 8) === "https://" || value.substr(0, 7) === "mailto:" || value.substr(0, 4) === "tel:" || value.substr(0, 11) === "data:image/" || value.substr(0, 6) === "ftp://" || value.substr(0, 2) === "./" || value.substr(0, 3) === "../" || value[0] === "#" || value[0] === "/" ) ) { return ""; } } else if (name === "background") { // filter `background` attribute (maybe no use) // `javascript:` REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0; if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) { return ""; } } else if (name === "style") { // `expression()` REGEXP_DEFAULT_ON_TAG_ATTR_7.lastIndex = 0; if (REGEXP_DEFAULT_ON_TAG_ATTR_7.test(value)) { return ""; } // `url()` REGEXP_DEFAULT_ON_TAG_ATTR_8.lastIndex = 0; if (REGEXP_DEFAULT_ON_TAG_ATTR_8.test(value)) { REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0; if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) { return ""; } } if (cssFilter !== false) { cssFilter = cssFilter || defaultCSSFilter; value = cssFilter.process(value); } } // escape `<>"` before returns value = escapeAttrValue(value); return value; } // RegExp list var REGEXP_LT = /</g; var REGEXP_GT = />/g; var REGEXP_QUOTE = /"/g; var REGEXP_QUOTE_2 = /"/g; var REGEXP_ATTR_VALUE_1 = /&#([a-zA-Z0-9]*);?/gim; var REGEXP_ATTR_VALUE_COLON = /:?/gim; var REGEXP_ATTR_VALUE_NEWLINE = /&newline;?/gim; // var REGEXP_DEFAULT_ON_TAG_ATTR_3 = /\/\*|\*\//gm; var REGEXP_DEFAULT_ON_TAG_ATTR_4 = /((j\s*a\s*v\s*a|v\s*b|l\s*i\s*v\s*e)\s*s\s*c\s*r\s*i\s*p\s*t\s*|m\s*o\s*c\s*h\s*a):/gi; // var REGEXP_DEFAULT_ON_TAG_ATTR_5 = /^[\s"'`]*(d\s*a\s*t\s*a\s*)\:/gi; // var REGEXP_DEFAULT_ON_TAG_ATTR_6 = /^[\s"'`]*(d\s*a\s*t\s*a\s*)\:\s*image\//gi; var REGEXP_DEFAULT_ON_TAG_ATTR_7 = /e\s*x\s*p\s*r\s*e\s*s\s*s\s*i\s*o\s*n\s*\(.*/gi; var REGEXP_DEFAULT_ON_TAG_ATTR_8 = /u\s*r\s*l\s*\(.*/gi; /** * escape double quote * * @param {String} str * @return {String} str */ function escapeQuote(str) { return str.replace(REGEXP_QUOTE, """); } /** * unescape double quote * * @param {String} str * @return {String} str */ function unescapeQuote(str) { return str.replace(REGEXP_QUOTE_2, '"'); } /** * escape html entities * * @param {String} str * @return {String} */ function escapeHtmlEntities(str) { return str.replace(REGEXP_ATTR_VALUE_1, function replaceUnicode(str, code) { return code[0] === "x" || code[0] === "X" ? String.fromCharCode(parseInt(code.substr(1), 16)) : String.fromCharCode(parseInt(code, 10)); }); } /** * escape html5 new danger entities * * @param {String} str * @return {String} */ function escapeDangerHtml5Entities(str) { return str .replace(REGEXP_ATTR_VALUE_COLON, ":") .replace(REGEXP_ATTR_VALUE_NEWLINE, " "); } /** * clear nonprintable characters * * @param {String} str * @return {String} */ function clearNonPrintableCharacter(str) { var str2 = ""; for (var i = 0, len = str.length; i < len; i++) { str2 += str.charCodeAt(i) < 32 ? " " : str.charAt(i); } return _$2.trim(str2); } /** * get friendly attribute value * * @param {String} str * @return {String} */ function friendlyAttrValue(str) { str = unescapeQuote(str); str = escapeHtmlEntities(str); str = escapeDangerHtml5Entities(str); str = clearNonPrintableCharacter(str); return str; } /** * unescape attribute value * * @param {String} str * @return {String} */ function escapeAttrValue(str) { str = escapeQuote(str); str = escapeHtml(str); return str; } /** * `onIgnoreTag` function for removing all the tags that are not in whitelist */ function onIgnoreTagStripAll() { return ""; } /** * remove tag body * specify a `tags` list, if the tag is not in the `tags` list then process by the specify function (optional) * * @param {array} tags * @param {function} next */ function StripTagBody(tags, next) { if (typeof next !== "function") { next = function () {}; } var isRemoveAllTag = !Array.isArray(tags); function isRemoveTag(tag) { if (isRemoveAllTag) return true; return _$2.indexOf(tags, tag) !== -1; } var removeList = []; var posStart = false; return { onIgnoreTag: function (tag, html, options) { if (isRemoveTag(tag)) { if (options.isClosing) { var ret = "[/removed]"; var end = options.position + ret.length; removeList.push([ posStart !== false ? posStart : options.position, end, ]); posStart = false; return ret; } else { if (!posStart) { posStart = options.position; } return "[removed]"; } } else { return next(tag, html, options); } }, remove: function (html) { var rethtml = ""; var lastPos = 0; _$2.forEach(removeList, function (pos) { rethtml += html.slice(lastPos, pos[0]); lastPos = pos[1]; }); rethtml += html.slice(lastPos); return rethtml; }, }; } /** * remove html comments * * @param {String} html * @return {String} */ function stripCommentTag(html) { var retHtml = ""; var lastPos = 0; while (lastPos < html.length) { var i = html.indexOf("<!--", lastPos); if (i === -1) { retHtml += html.slice(lastPos); break; } retHtml += html.slice(lastPos, i); var j = html.indexOf("-->", i); if (j === -1) { break; } lastPos = j + 3; } return retHtml; } /** * remove invisible characters * * @param {String} html * @return {String} */ function stripBlankChar(html) { var chars = html.split(""); chars = chars.filter(function (char) { var c = char.charCodeAt(0); if (c === 127) return false; if (c <= 31) { if (c === 10 || c === 13) return true; return false; } return true; }); return chars.join(""); } _default$1.whiteList = getDefaultWhiteList(); _default$1.getDefaultWhiteList = getDefaultWhiteList; _default$1.onTag = onTag; _default$1.onIgnoreTag = onIgnoreTag; _default$1.onTagAttr = onTagAttr; _default$1.onIgnoreTagAttr = onIgnoreTagAttr; _default$1.safeAttrValue = safeAttrValue; _default$1.escapeHtml = escapeHtml; _default$1.escapeQuote = escapeQuote; _default$1.unescapeQuote = unescapeQuote; _default$1.escapeHtmlEntities = escapeHtmlEntities; _default$1.escapeDangerHtml5Entities = escapeDangerHtml5Entities; _default$1.clearNonPrintableCharacter = clearNonPrintableCharacter; _default$1.friendlyAttrValue = friendlyAttrValue; _default$1.escapeAttrValue = escapeAttrValue; _default$1.onIgnoreTagStripAll = onIgnoreTagStripAll; _default$1.StripTagBody = StripTagBody; _default$1.stripCommentTag = stripCommentTag; _default$1.stripBlankChar = stripBlankChar; _default$1.cssFilter = defaultCSSFilter; _default$1.getDefaultCSSWhiteList = getDefaultCSSWhiteList; var parser$1 = {}; /** * Simple HTML Parser * * @author Zongmin Lei<leizongmin@gmail.com> */ var _$1 = util; /** * get tag name * * @param {String} html e.g. '<a hef="#">' * @return {String} */ function getTagName(html) { var i = _$1.spaceIndex(html); var tagName; if (i === -1) { tagName = html.slice(1, -1); } else { tagName = html.slice(1, i + 1); } tagName = _$1.trim(tagName).toLowerCase(); if (tagName.slice(0, 1) === "/") tagName = tagName.slice(1); if (tagName.slice(-1) === "/") tagName = tagName.slice(0, -1); return tagName; } /** * is close tag? * * @param {String} html 如:'<a hef="#">' * @return {Boolean} */ function isClosing(html) { return html.slice(0, 2) === "</"; } /** * parse input html and returns processed html * * @param {String} html * @param {Function} onTag e.g. function (sourcePosition, position, tag, html, isClosing) * @param {Function} escapeHtml * @return {String} */ function parseTag$1(html, onTag, escapeHtml) { var rethtml = ""; var lastPos = 0; var tagStart = false; var quoteStart = false; var currentPos = 0; var len = html.length; var currentTagName = ""; var currentHtml = ""; chariterator: for (currentPos = 0; currentPos < len; currentPos++) { var c = html.charAt(currentPos); if (tagStart === false) { if (c === "<") { tagStart = currentPos; continue; } } else { if (quoteStart === false) { if (c === "<") { rethtml += escapeHtml(html.slice(lastPos, currentPos)); tagStart = currentPos; lastPos = currentPos; continue; } if (c === ">" || currentPos === len - 1) { rethtml += escapeHtml(html.slice(lastPos, tagStart)); currentHtml = html.slice(tagStart, currentPos + 1); currentTagName = getTagName(currentHtml); rethtml += onTag( tagStart, rethtml.length, currentTagName, currentHtml, isClosing(currentHtml) ); lastPos = currentPos + 1; tagStart = false; continue; } if (c === '"' || c === "'") { var i = 1; var ic = html.charAt(currentPos - i); while (ic.trim() === "" || ic === "=") { if (ic === "=") { quoteStart = c; continue chariterator; } ic = html.charAt(currentPos - ++i); } } } else { if (c === quoteStart) { quoteStart = false; continue; } } } } if (lastPos < len) { rethtml += escapeHtml(html.substr(lastPos)); } return rethtml; } var REGEXP_ILLEGAL_ATTR_NAME = /[^a-zA-Z0-9\\_:.-]/gim; /** * parse input attributes and returns processed attributes * * @param {String} html e.g. `href="#" target="_blank"` * @param {Function} onAttr e.g. `function (name, value)` * @return {String} */ function parseAttr$1(html, onAttr) { var lastPos = 0; var lastMarkPos = 0; var retAttrs = []; var tmpName = false; var len = html.length; function addAttr(name, value) { name = _$1.trim(name); name = name.replace(REGEXP_ILLEGAL_ATTR_NAME, "").toLowerCase(); if (name.length < 1) return; var ret = onAttr(name, value || ""); if (ret) retAttrs.push(ret); } // 逐个分析字符 for (var i = 0; i < len; i++) { var c = html.charAt(i); var v, j; if (tmpName === false && c === "=") { tmpName = html.slice(lastPos, i); lastPos = i + 1; lastMarkPos = html.charAt(lastPos) === '"' || html.charAt(lastPos) === "'" ? lastPos : findNextQuotationMark(html, i + 1); continue; } if (tmpName !== false) { if ( i === lastMarkPos ) { j = html.indexOf(c, i + 1); if (j === -1) { break; } else { v = _$1.trim(html.slice(lastMarkPos + 1, j)); addAttr(tmpName, v); tmpName = false; i = j; lastPos = i + 1; continue; } } } if (/\s|\n|\t/.test(c)) { html = html.replace(/\s|\n|\t/g, " "); if (tmpName === false) { j = findNextEqual(html, i); if (j === -1) { v = _$1.trim(html.slice(lastPos, i)); addAttr(v); tmpName = false; lastPos = i + 1; continue; } else { i = j - 1; continue; } } else { j = findBeforeEqual(html, i - 1); if (j === -1) { v = _$1.trim(html.slice(lastPos, i)); v = stripQuoteWrap(v); addAttr(tmpName, v); tmpName = false; lastPos = i + 1; continue; } else { continue; } } } } if (lastPos < html.length) { if (tmpName === false) { addAttr(html.slice(lastPos)); } else { addAttr(tmpName, stripQuoteWrap(_$1.trim(html.slice(lastPos)))); } } return _$1.trim(retAttrs.join(" ")); } function findNextEqual(str, i) { for (; i < str.length; i++) { var c = str[i]; if (c === " ") continue; if (c === "=") return i; return -1; } } function findNextQuotationMark(str, i) { for (; i < str.length; i++) { var c = str[i]; if (c === " ") continue; if (c === "'" || c === '"') return i; return -1; } } function findBeforeEqual(str, i) { for (; i > 0; i--) { var c = str[i]; if (c === " ") continue; if (c === "=") return i; return -1; } } function isQuoteWrapString(text) { if ( (text[0] === '"' && text[text.length - 1] === '"') || (text[0] === "'" && text[text.length - 1] === "'") ) { return true; } else { return false; } } function stripQuoteWrap(text) { if (isQuoteWrapString(text)) { return text.substr(1, text.length - 2); } else { return text; } } parser$1.parseTag = parseTag$1; parser$1.parseAttr = parseAttr$1; /** * filter xss * * @author Zongmin Lei<leizongmin@gmail.com> */ var FilterCSS = libExports$1.FilterCSS; var DEFAULT = _default$1; var parser = parser$1; var parseTag = parser.parseTag; var parseAttr = parser.parseAttr; var _ = util; /** * returns `true` if the input value is `undefined` or `null` * * @param {Object} obj * @return {Boolean} */ function isNull(obj) { return obj === undefined || obj === null; } /** * get attributes for a tag * * @param {String} html * @return {Object} * - {String} html * - {Boolean} closing */ function getAttrs(html) { var i = _.spaceIndex(html); if (i === -1) { return { html: "", closing: html[html.length - 2] === "/", }; } html = _.trim(html.slice(i + 1, -1)); var isClosing = html[html.length - 1] === "/"; if (isClosing) html = _.trim(html.slice(0, -1)); return { html: html, closing: isClosing, }; } /** * shallow copy * * @param {Object} obj * @return {Object} */ function shallowCopyObject(obj) { var ret = {}; for (var i in obj) { ret[i] = obj[i]; } return ret; } function keysToLowerCase(obj) { var ret = {}; for (var i in obj) { if (Array.isArray(obj[i])) { ret[i.toLowerCase()] = obj[i].map(function (item) { return item.toLowerCase(); }); } else { ret[i.toLowerCase()] = obj[i]; } } return ret; } /** * FilterXSS class * * @param {Object} options * whiteList (or allowList), onTag, onTagAttr, onIgnoreTag, * onIgnoreTagAttr, safeAttrValue, escapeHtml * stripIgnoreTagBody, allowCommentTag, stripBlankChar * css{whiteList, onAttr, onIgnoreAttr} `css=false` means don't use `cssfilter` */ function FilterXSS(options) { options = shallowCopyObject(options || {}); if (options.stripIgnoreTag) { if (options.onIgnoreTag) { console.error( 'Notes: cannot use these two options "stripIgnoreTag" and "onIgnoreTag" at the same time' ); } options.onIgnoreTag = DEFAULT.onIgnoreTagStripAll; } if (options.whiteList || options.allowList) { options.whiteList = keysToLowerCase(options.whiteList || options.allowList); } else { options.whiteList = DEFAULT.whiteList; } options.onTag = options.onTag || DEFAULT.onTag; options.onTagAttr = options.onTagAttr || DEFAULT.onTagAttr; options.onIgnoreTag = options.onIgnoreTag || DEFAULT.onIgnoreTag; options.onIgnoreTagAttr = options.onIgnoreTagAttr || DEFAULT.onIgnoreTagAttr; options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue; options.escapeHtml = options.escapeHtml || DEFAULT.escapeHtml; this.options = options; if (options.css === false) { this.cssFilter = false; } else { options.css = options.css || {}; this.cssFilter = new FilterCSS(options.css); } } /** * start process and returns result * * @param {String} html * @return {String} */ FilterXSS.prototype.process = function (html) { // compatible with the input html = html || ""; html = html.toString(); if (!html) return ""; var me = this; var options = me.options; var whiteList = options.whiteList; var onTag = options.onTag; var onIgnoreTag = options.onIgnoreTag; var onTagAttr = options.onTagAttr; var onIgnoreTagAttr = options.onIgnoreTagAttr; var safeAttrValue = options.safeAttrValue; var escapeHtml = options.escapeHtml; var cssFilter = me.cssFilter; // remove invisible characters if (options.stripBlankChar) { html = DEFAULT.stripBlankChar(html); } // remove html comments if (!options.allowCommentTag) { html = DEFAULT.stripCommentTag(html); } // if enable stripIgnoreTagBody var stripIgnoreTagBody = false; if (options.stripIgnoreTagBody) { stripIgnoreTagBody = DEFAULT.StripTagBody( options.stripIgnoreTagBody, onIgnoreTag ); onIgnoreTag = stripIgnoreTagBody.onIgnoreTag; } var retHtml = parseTag( html, function (sourcePosition, position, tag, html, isClosing) { var info = { sourcePosition: sourcePosition, position: position, isClosing: isClosing, isWhite: Object.prototype.hasOwnProperty.call(whiteList, tag), }; // call `onTag()` var ret = onTag(tag, html, info); if (!isNull(ret)) return ret; if (info.isWhite) { if (info.isClosing) { return "</" + tag + ">"; } var attrs = getAttrs(html); var whiteAttrList = whiteList[tag]; var attrsHtml = parseAttr(attrs.html, function (name, value) { // call `onTagAttr()` var isWhiteAttr = _.indexOf(whiteAttrList, name) !== -1; var ret = onTagAttr(tag, name, value, isWhiteAttr); if (!isNull(ret)) return ret; if (isWhiteAttr) { // call `safeAttrValue()` value = safeAttrValue(tag, name, value, cssFilter); if (value) { return name + '="' + value + '"'; } else { return name; } } else { // call `onIgnoreTagAttr()` ret = onIgnoreTagAttr(tag, name, value, isWhiteAttr); if (!isNull(ret)) return ret; return; } }); // build new tag html html = "<" + tag; if (attrsHtml) html += " " + attrsHtml; if (attrs.closing) html += " /"; html += ">"; return html; } else { // call `onIgnoreTag()` ret = onIgnoreTag(tag, html, info); if (!isNull(ret)) return ret; return escapeHtml(html); } }, escapeHtml ); // if enable stripIgnoreTagBody if (stripIgnoreTagBody) { retHtml = stripIgnoreTagBody.remove(retHtml); } return retHtml; }; var xss$1 = FilterXSS; /** * xss * * @author Zongmin Lei<leizongmin@gmail.com> */ (function (module, exports) { var DEFAULT = _default$1; var parser = parser$1; var FilterXSS = xss$1; /** * filter xss function * * @param {String} html * @param {Object} options { whiteList, onTag, onTagAttr, onIgnoreTag, onIgnoreTagAttr, safeAttrValue, escapeHtml } * @return {String} */ function filterXSS(html, options) { var xss = new FilterXSS(options); return xss.process(html); } exports = module.exports = filterXSS; exports.filterXSS = filterXSS; exports.FilterXSS = FilterXSS; (function () { for (var i in DEFAULT) { exports[i] = DEFAULT[i]; } for (var j in parser) { exports[j] = parser[j]; } })(); // using `xss` on the browser, output `filterXSS` to the globals if (typeof window !== "undefined") { window.filterXSS = module.exports; } // using `xss` on the WebWorker, output `filterXSS` to the globals function isWorkerEnv() { return ( typeof self !== "undefined" && typeof DedicatedWorkerGlobalScope !== "undefined" && self instanceof DedicatedWorkerGlobalScope ); } if (isWorkerEnv()) { self.filterXSS = module.exports; } } (lib$1, lib$1.exports)); var libExports = lib$1.exports; var xss = /*@__PURE__*/getDefaultExportFromCjs(libExports); const Show$2 = props => { const { property, record } = props; const { translateProperty } = useTranslation(); const value = record.params[property.path] || ''; const createMarkup = html => ({ __html: xss(html) }); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ValueGroup, { label: translateProperty(property.label, property.resourceId) }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { py: "xl", px: ['0', 'xl'], border: "default" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, { dangerouslySetInnerHTML: createMarkup(value) }))); }; var show$1 = allowOverride(Show$2, 'DefaultRichtextShowProperty'); var baseGetTag$3 = _baseGetTag, isObjectLike$4 = isObjectLike_1; /** `Object#toString` result references. */ var regexpTag$2 = '[object RegExp]'; /** * The base implementation of `_.isRegExp` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. */ function baseIsRegExp$1(value) { return isObjectLike$4(value) && baseGetTag$3(value) == regexpTag$2; } var _baseIsRegExp = baseIsRegExp$1; /** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ function baseUnary$3(func) { return function(value) { return func(value); }; } var _baseUnary = baseUnary$3; var _nodeUtil = {exports: {}}; _nodeUtil.exports; (function (module, exports) { var freeGlobal = _freeGlobal; /** Detect free variable `exports`. */ var freeExports = exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process; /** Used to access faster Node.js helpers. */ var nodeUtil = (function() { try { // Use `util.types` for Node.js 10+. var types = freeModule && freeModule.require && freeModule.require('util').types; if (types) { return types; } // Legacy `process.binding('util')` for Node.js < 10. return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }()); module.exports = nodeUtil; } (_nodeUtil, _nodeUtil.exports)); var _nodeUtilExports = _nodeUtil.exports; var baseIsRegExp = _baseIsRegExp, baseUnary$2 = _baseUnary, nodeUtil$1 = _nodeUtilExports; /* Node.js helper references. */ var nodeIsRegExp = nodeUtil$1 && nodeUtil$1.isRegExp; /** * Checks if `value` is classified as a `RegExp` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. * @example * * _.isRegExp(/abc/); * // => true * * _.isRegExp('/abc/'); * // => false */ var isRegExp$1 = nodeIsRegExp ? baseUnary$2(nodeIsRegExp) : baseIsRegExp; var isRegExp_1 = isRegExp$1; /** * The base implementation of `_.property` without support for deep paths. * * @private * @param {string} key The key of the property to get. * @returns {Function} Returns the new accessor function. */ function baseProperty$2(key) { return function(object) { return object == null ? undefined : object[key]; }; } var _baseProperty = baseProperty$2; var baseProperty$1 = _baseProperty; /** * Gets the size of an ASCII `string`. * * @private * @param {string} string The string inspect. * @returns {number} Returns the string size. */ var asciiSize$1 = baseProperty$1('length'); var _asciiSize = asciiSize$1; /** Used to compose unicode character classes. */ var rsAstralRange = '\\ud800-\\udfff', rsComboMarksRange = '\\u0300-\\u036f', reComboHalfMarksRange = '\\ufe20-\\ufe2f', rsComboSymbolsRange = '\\u20d0-\\u20ff', rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsVarRange = '\\ufe0e\\ufe0f'; /** Used to compose unicode capture groups. */ var rsAstral = '[' + rsAstralRange + ']', rsCombo = '[' + rsComboRange + ']', rsFitz = '\\ud83c[\\udffb-\\udfff]', rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', rsNonAstral = '[^' + rsAstralRange + ']', rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', rsZWJ = '\\u200d'; /** Used to compose unicode regexes. */ var reOptMod = rsModifier + '?', rsOptVar = '[' + rsVarRange + ']?', rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', rsSeq = rsOptVar + reOptMod + rsOptJoin, rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); /** * Gets the size of a Unicode `string`. * * @private * @param {string} string The string inspect. * @returns {number} Returns the string size. */ function unicodeSize$1(string) { var result = reUnicode.lastIndex = 0; while (reUnicode.test(string)) { ++result; } return result; } var _unicodeSize = unicodeSize$1; var asciiSize = _asciiSize, hasUnicode$1 = _hasUnicode, unicodeSize = _unicodeSize; /** * Gets the number of symbols in `string`. * * @private * @param {string} string The string to inspect. * @returns {number} Returns the string size. */ function stringSize$1(string) { return hasUnicode$1(string) ? unicodeSize(string) : asciiSize(string); } var _stringSize = stringSize$1; /** Used to match a single whitespace character. */ var reWhitespace = /\s/; /** * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace * character of `string`. * * @private * @param {string} string The string to inspect. * @returns {number} Returns the index of the last non-whitespace character. */ function trimmedEndIndex$1(string) { var index = string.length; while (index-- && reWhitespace.test(string.charAt(index))) {} return index; } var _trimmedEndIndex = trimmedEndIndex$1; var trimmedEndIndex = _trimmedEndIndex; /** Used to match leading whitespace. */ var reTrimStart = /^\s+/; /** * The base implementation of `_.trim`. * * @private * @param {string} string The string to trim. * @returns {string} Returns the trimmed string. */ function baseTrim$1(string) { return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string; } var _baseTrim = baseTrim$1; var baseTrim = _baseTrim, isObject$7 = isObject_1, isSymbol = isSymbol_1; /** Used as references for various `Number` constants. */ var NAN = 0 / 0; /** Used to detect bad signed hexadecimal string values. */ var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; /** Used to detect binary string values. */ var reIsBinary = /^0b[01]+$/i; /** Used to detect octal string values. */ var reIsOctal = /^0o[0-7]+$/i; /** Built-in method references without a dependency on `root`. */ var freeParseInt = parseInt; /** * Converts `value` to a number. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to process. * @returns {number} Returns the number. * @example * * _.toNumber(3.2); * // => 3.2 * * _.toNumber(Number.MIN_VALUE); * // => 5e-324 * * _.toNumber(Infinity); * // => Infinity * * _.toNumber('3.2'); * // => 3.2 */ function toNumber$1(value) { if (typeof value == 'number') { return value; } if (isSymbol(value)) { return NAN; } if (isObject$7(value)) { var other = typeof value.valueOf == 'function' ? value.valueOf() : value; value = isObject$7(other) ? (other + '') : other; } if (typeof value != 'string') { return value === 0 ? value : +value; } value = baseTrim(value); var isBinary = reIsBinary.test(value); return (isBinary || reIsOctal.test(value)) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : (reIsBadHex.test(value) ? NAN : +value); } var toNumber_1 = toNumber$1; var toNumber = toNumber_1; /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0, MAX_INTEGER = 1.7976931348623157e+308; /** * Converts `value` to a finite number. * * @static * @memberOf _ * @since 4.12.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted number. * @example * * _.toFinite(3.2); * // => 3.2 * * _.toFinite(Number.MIN_VALUE); * // => 5e-324 * * _.toFinite(Infinity); * // => 1.7976931348623157e+308 * * _.toFinite('3.2'); * // => 3.2 */ function toFinite$1(value) { if (!value) { return value === 0 ? value : 0; } value = toNumber(value); if (value === INFINITY || value === -INFINITY) { var sign = (value < 0 ? -1 : 1); return sign * MAX_INTEGER; } return value === value ? value : 0; } var toFinite_1 = toFinite$1; var toFinite = toFinite_1; /** * Converts `value` to an integer. * * **Note:** This method is loosely based on * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {number} Returns the converted integer. * @example * * _.toInteger(3.2); * // => 3 * * _.toInteger(Number.MIN_VALUE); * // => 0 * * _.toInteger(Infinity); * // => 1.7976931348623157e+308 * * _.toInteger('3.2'); * // => 3 */ function toInteger$1(value) { var result = toFinite(value), remainder = result % 1; return result === result ? (remainder ? result - remainder : result) : 0; } var toInteger_1 = toInteger$1; var baseToString = _baseToString, castSlice = _castSlice, hasUnicode = _hasUnicode, isObject$6 = isObject_1, isRegExp = isRegExp_1, stringSize = _stringSize, stringToArray = _stringToArray, toInteger = toInteger_1, toString = toString_1; /** Used as default options for `_.truncate`. */ var DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = '...'; /** Used to match `RegExp` flags from their coerced string values. */ var reFlags = /\w*$/; /** * Truncates `string` if it's longer than the given maximum string length. * The last characters of the truncated string are replaced with the omission * string which defaults to "...". * * @static * @memberOf _ * @since 4.0.0 * @category String * @param {string} [string=''] The string to truncate. * @param {Object} [options={}] The options object. * @param {number} [options.length=30] The maximum string length. * @param {string} [options.omission='...'] The string to indicate text is omitted. * @param {RegExp|string} [options.separator] The separator pattern to truncate to. * @returns {string} Returns the truncated string. * @example * * _.truncate('hi-diddly-ho there, neighborino'); * // => 'hi-diddly-ho there, neighbo...' * * _.truncate('hi-diddly-ho there, neighborino', { * 'length': 24, * 'separator': ' ' * }); * // => 'hi-diddly-ho there,...' * * _.truncate('hi-diddly-ho there, neighborino', { * 'length': 24, * 'separator': /,? +/ * }); * // => 'hi-diddly-ho there...' * * _.truncate('hi-diddly-ho there, neighborino', { * 'omission': ' [...]' * }); * // => 'hi-diddly-ho there, neig [...]' */ function truncate(string, options) { var length = DEFAULT_TRUNC_LENGTH, omission = DEFAULT_TRUNC_OMISSION; if (isObject$6(options)) { var separator = 'separator' in options ? options.separator : separator; length = 'length' in options ? toInteger(options.length) : length; omission = 'omission' in options ? baseToString(options.omission) : omission; } string = toString(string); var strLength = string.length; if (hasUnicode(string)) { var strSymbols = stringToArray(string); strLength = strSymbols.length; } if (length >= strLength) { return string; } var end = length - stringSize(omission); if (end < 1) { return omission; } var result = strSymbols ? castSlice(strSymbols, 0, end).join('') : string.slice(0, end); if (separator === undefined) { return result + omission; } if (strSymbols) { end += (result.length - end); } if (isRegExp(separator)) { if (string.slice(end).search(separator)) { var match, substring = result; if (!separator.global) { separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g'); } separator.lastIndex = 0; while ((match = separator.exec(substring))) { var newEnd = match.index; } result = result.slice(0, newEnd === undefined ? end : newEnd); } } else if (string.indexOf(baseToString(separator), end) != end) { var index = result.lastIndexOf(separator); if (index > -1) { result = result.slice(0, index); } } return result + omission; } var truncate_1 = truncate; var truncate$1 = /*@__PURE__*/getDefaultExportFromCjs(truncate_1); const stripHtml = html => { const el = window.document.createElement('DIV'); el.innerHTML = html; return el.textContent || el.innerText || ''; }; const List$1 = props => { const { property, record } = props; const maxLength = property.custom?.maxLength || 15; const value = record.params[property.path] || ''; const textValue = stripHtml(value); return /*#__PURE__*/React__default$1.default.createElement(React__default$1.default.Fragment, null, truncate$1(textValue, { length: maxLength, separator: ' ' })); }; var list = allowOverride(List$1, 'DefaultReferenceListProperty'); var richtext = /*#__PURE__*/Object.freeze({ __proto__: null, edit: edit$1, list: list, show: show$1 }); const Show$1 = props => { const { property, record } = props; const { translateProperty } = useTranslation(); const value = record.params[property.path] || ''; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ValueGroup, { label: translateProperty(property.label, property.resourceId) }, value.split(/(?:\r\n|\r|\n)/g).map((line, i) => /*#__PURE__*/ // eslint-disable-next-line react/no-array-index-key React__default$1.default.createElement(React__default$1.default.Fragment, { key: i }, line, /*#__PURE__*/React__default$1.default.createElement("br", null)))); }; var show = allowOverride(Show$1, 'DefaultTextareaShowProperty'); function _extends$8() { _extends$8 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$8.apply(this, arguments); } const Edit$1 = props => { const { onChange, property, record } = props; const propValue = record.params?.[property.path] ?? ''; const [value, setValue] = React$1.useState(propValue); const error = record.errors?.[property.path]; const { tm } = useTranslation(); React$1.useEffect(() => { if (value !== propValue) { setValue(propValue); } }, [propValue]); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, { error: Boolean(error) }, /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyLabel, { property: property }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Input, _extends$8({ as: "textarea", rows: (value.match(/\n/g) || []).length + 1, id: property.path, name: property.path, onChange: e => setValue(e.target.value), onBlur: () => onChange(property.path, value), value: value, disabled: property.isDisabled }, property.props)), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormMessage, null, error && tm(error.message, property.resourceId))); }; var edit = allowOverride( /*#__PURE__*/React$1.memo(Edit$1, recordPropertyIsEqual), 'DefaultTextareaEditProperty'); var textarea = /*#__PURE__*/Object.freeze({ __proto__: null, edit: edit, show: show }); function _extends$7() { _extends$7 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$7.apply(this, arguments); } let globalAny = {}; try { globalAny = window; } catch (error) { if (!(error instanceof ReferenceError)) { throw error; } } const types = { textarea, boolean, datetime, reference, password, date: datetime, richtext, string: defaultType, number: defaultType, float: defaultType, uuid: defaultType, mixed: null, 'key-value': null, currency, phone }; /** * @load ./base-property-component.doc.md * @component * @name BasePropertyComponent * @subcategory Application * @class * @hideconstructor */ const BasePropertyComponent = props => { const { property: baseProperty, resource, record, filter, where, onChange } = props; const property = React$1.useMemo(() => ({ ...baseProperty, // we fill the path if it is not there. That is why all the actual Component Renderers are // called with the path set to this root path. Next mixed and array components adds to this // path either index (for array) or subProperty name. path: baseProperty.path || baseProperty.propertyPath }), [baseProperty]); const testId = `property-${where}-${property.path}`; const contentTag = getActionElementCss(resource.id, where, property.path); let Component = types[property.type] && types[property.type][where] || defaultType[where]; if (property.components && property.components[where]) { const component = property.components[where]; if (!component) { throw new Error(`there is no "${property.path}.components.${where}"`); } Component = globalAny.AdminJS.UserComponents[component] ?? (() => { throw new Error(`Component "${component}" has not been bundled, ensure it was added to your ComponentLoader instance (the one included in AdminJS options).`); }); return /*#__PURE__*/React__default$1.default.createElement(ErrorBoundary$1, null, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { "data-css": contentTag, "data-testid": testId }, /*#__PURE__*/React__default$1.default.createElement(Component, { property: property, resource: resource, record: record, filter: filter, onChange: onChange, where: where }))); } const Array = ArrayType[where]; const Mixed = MixedType[where]; const KeyValue = KeyValueType[where]; if (baseProperty.isArray) { if (!Array) { return /*#__PURE__*/React__default$1.default.createElement("div", null); } return /*#__PURE__*/React__default$1.default.createElement(Array, _extends$7({}, props, { property: property, ItemComponent: BasePropertyComponent, testId: testId })); } if (baseProperty.type === 'key-value') { if (!KeyValue) { return /*#__PURE__*/React__default$1.default.createElement("div", null); } return /*#__PURE__*/React__default$1.default.createElement(KeyValue, _extends$7({}, props, { property: property, testId: testId })); } if (baseProperty.type === 'mixed') { if (!Mixed) { return /*#__PURE__*/React__default$1.default.createElement("div", null); } return /*#__PURE__*/React__default$1.default.createElement(Mixed, _extends$7({}, props, { property: property, ItemComponent: BasePropertyComponent, testId: testId })); } return /*#__PURE__*/React__default$1.default.createElement(ErrorBoundary$1, null, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { "data-css": contentTag, "data-testid": testId }, /*#__PURE__*/React__default$1.default.createElement(Component, { property: property, resource: resource, record: record, filter: filter, onChange: onChange, where: where }))); }; function _extends$6() { _extends$6 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$6.apply(this, arguments); } /** * This component is the same as `BasePropertyComponent` but it will not render * custom components. Use this in your custom components to render the default * property component. * * This is useful if you want your custom component to appear custom only for * specific `where` value and default for all others. */ const CleanPropertyComponent = props => { const { property } = props; const cleanProperty = React$1.useMemo(() => ({ ...property, components: {} }), [property]); return /*#__PURE__*/React__default$1.default.createElement(BasePropertyComponent, _extends$6({}, props, { property: cleanProperty })); }; var PropertyComponentUtils = /*#__PURE__*/Object.freeze({ __proto__: null, PropertyDescription: OverridablePropertyDescription, PropertyLabel: OverridablePropertyLabel }); function camelizePropertyType(type) { return { Edit: type.edit, Show: type.show, List: type.list, Filter: type.filter }; } const BasePropertyComponentExtended = Object.assign(BasePropertyComponent, { DefaultType: camelizePropertyType(defaultType), Boolean: camelizePropertyType(boolean), DateTime: camelizePropertyType(datetime), RichText: camelizePropertyType(richtext), Reference: camelizePropertyType(reference), TextArea: camelizePropertyType(textarea), Password: camelizePropertyType(password), Currency: camelizePropertyType(currency), Phone: camelizePropertyType(phone) }); function _extends$5() { _extends$5 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$5.apply(this, arguments); } const LayoutElementRenderer = props => { const { layoutElement, resource, where, record, onChange } = props; const { props: layoutProps, properties: propertyNames, layoutElements: innerLayoutElements, component } = layoutElement; const { children, ...other } = layoutProps; const properties = propertyNames.map(name => resource.properties[name]); const Component = DesignSystem__namespace[component]; if (!Component) { return /*#__PURE__*/React__default$1.default.createElement(DesignSystem__namespace.MessageBox, { size: "sm", message: "Javascript Error", variant: "danger", py: "xl" }, "There is no component by the name of", /*#__PURE__*/React__default$1.default.createElement(DesignSystem__namespace.Badge, { size: "sm", variant: "danger", mx: "default" }, component), "in @adminjs/design-system. Change", /*#__PURE__*/React__default$1.default.createElement(DesignSystem__namespace.Badge, { size: "sm", variant: "danger", mx: "default" }, `@${component}`), "to available component like @Header"); } return /*#__PURE__*/React__default$1.default.createElement(Component, other, properties.map(property => /*#__PURE__*/React__default$1.default.createElement(DesignSystem__namespace.Box, { flexGrow: 1, key: property.propertyPath }, /*#__PURE__*/React__default$1.default.createElement(BasePropertyComponentExtended, { key: property.propertyPath, where: where, property: property, resource: resource, record: record, onChange: onChange }))), innerLayoutElements.map((innerLayoutElement, i) => /*#__PURE__*/React__default$1.default.createElement(LayoutElementRenderer, _extends$5({}, props, { // eslint-disable-next-line react/no-array-index-key key: i, layoutElement: innerLayoutElement }))), children); }; function _extends$4() { _extends$4 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$4.apply(this, arguments); } const New = props => { const { record: initialRecord, resource, action } = props; const { record, handleChange, submit, loading, setRecord } = useRecord(initialRecord, resource.id); const { translateButton } = useTranslation(); const navigate = reactRouter.useNavigate(); const { parsedQuery, redirectUrl } = useQueryParams(); React$1.useEffect(() => { if (initialRecord) { setRecord(initialRecord); } }, [initialRecord, parsedQuery]); React$1.useEffect(() => { if (parsedQuery) { const resourceProperties = pick$1(parsedQuery, Object.keys(resource.properties)); if (Object.keys(resourceProperties).length) { setRecord({ ...record, params: { ...record.params, ...resourceProperties } }); } } }, [parsedQuery]); const handleSubmit = event => { event.preventDefault(); if (!event.currentTarget) return false; submit().then(response => { if (response.data.redirectUrl) { navigate(appendForceRefresh(response.data.redirectUrl)); } // if record has id === has been created if (response.data.record.id && !Object.keys(response.data.record.errors).length) { handleChange({ params: {}, populated: {}, errors: {} }); } }); return false; }; const handleCancel = () => { if (redirectUrl) { window.location.href = redirectUrl; } }; const contentTag = getActionElementCss(resource.id, action.name, 'drawer-content'); const formTag = getActionElementCss(resource.id, action.name, 'form'); const footerTag = getActionElementCss(resource.id, action.name, 'drawer-footer'); const buttonTag = getActionElementCss(resource.id, action.name, 'drawer-submit'); const cancelButtonTag = getActionElementCss(resource.id, action.name, 'drawer-cancel'); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { as: "form", flex: true, flexGrow: 1, onSubmit: handleSubmit, flexDirection: "column", "data-css": formTag }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DrawerContent, { "data-css": contentTag }, action?.showInDrawer ? /*#__PURE__*/React__default$1.default.createElement(OverridableActionHeader, props) : null, action.layout ? action.layout.map((layoutElement, i) => /*#__PURE__*/React__default$1.default.createElement(LayoutElementRenderer // eslint-disable-next-line react/no-array-index-key , _extends$4({ key: i, layoutElement: layoutElement }, props, { where: "edit", onChange: handleChange, record: record }))) : resource.editProperties.map(property => /*#__PURE__*/React__default$1.default.createElement(BasePropertyComponentExtended, { key: property.propertyPath, where: "edit", onChange: handleChange, property: property, resource: resource, record: record }))), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DrawerFooter, { "data-css": footerTag }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flex: true, style: { gap: 16 } }, redirectUrl && /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { variant: "light", type: "button", onClick: handleCancel, "data-css": cancelButtonTag, "data-testid": "button-cancel" }, translateButton('cancel', resource.id)), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { variant: "contained", type: "submit", "data-css": buttonTag, "data-testid": "button-save", disabled: loading }, loading ? /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Icon, { icon: "Loader", spin: true }) : null, translateButton('save', resource.id))))); }; const OverridableNew = allowOverride(New, 'DefaultNewAction'); function _extends$3() { _extends$3 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$3.apply(this, arguments); } const Edit = props => { const { record: initialRecord, resource, action } = props; const { record, handleChange, submit: handleSubmit, loading, setRecord } = useRecord(initialRecord, resource.id); const { translateButton } = useTranslation(); const navigate = reactRouter.useNavigate(); React$1.useEffect(() => { if (initialRecord) { setRecord(initialRecord); } }, [initialRecord]); const submit = event => { event.preventDefault(); handleSubmit().then(response => { if (response.data.redirectUrl) { navigate(appendForceRefresh(response.data.redirectUrl)); } }); return false; }; const contentTag = getActionElementCss(resource.id, action.name, 'drawer-content'); const formTag = getActionElementCss(resource.id, action.name, 'form'); const footerTag = getActionElementCss(resource.id, action.name, 'drawer-footer'); const buttonTag = getActionElementCss(resource.id, action.name, 'drawer-submit'); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { as: "form", onSubmit: submit, flex: true, flexDirection: "column", "data-css": formTag }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DrawerContent, { "data-css": contentTag }, action?.showInDrawer ? /*#__PURE__*/React__default$1.default.createElement(OverridableActionHeader, props) : null, action.layout ? action.layout.map((layoutElement, i) => /*#__PURE__*/React__default$1.default.createElement(LayoutElementRenderer // eslint-disable-next-line react/no-array-index-key , _extends$3({ key: i, layoutElement: layoutElement }, props, { where: "edit", onChange: handleChange, record: record }))) : resource.editProperties.map(property => /*#__PURE__*/React__default$1.default.createElement(BasePropertyComponentExtended, { key: property.propertyPath, where: "edit", onChange: handleChange, property: property, resource: resource, record: record }))), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DrawerFooter, { "data-css": footerTag }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { variant: "contained", type: "submit", "data-css": buttonTag, "data-testid": "button-save", disabled: loading }, loading ? /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Icon, { icon: "Loader", spin: true }) : null, translateButton('save', resource.id)))); }; const OverridableEdit = allowOverride(Edit, 'DefaultEditAction'); function _extends$2() { _extends$2 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$2.apply(this, arguments); } /** * @name ShowAction * @category Actions * @description Shows a given record. * @component * @private */ const Show = props => { const { resource, record, action } = props; const properties = resource.showProperties; const contentTag = getActionElementCss(resource.id, action.name, 'drawer-content'); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DrawerContent, { "data-css": contentTag }, action?.showInDrawer ? /*#__PURE__*/React__default$1.default.createElement(OverridableActionHeader, props) : null, action.layout ? action.layout.map((layoutElement, i) => /*#__PURE__*/React__default$1.default.createElement(LayoutElementRenderer // eslint-disable-next-line react/no-array-index-key , _extends$2({ key: i, layoutElement: layoutElement }, props, { where: "show" }))) : properties.map(property => /*#__PURE__*/React__default$1.default.createElement(BasePropertyComponentExtended, { key: property.propertyPath, where: "show", property: property, resource: resource, record: record }))); }; const OverridableShow = allowOverride(Show, 'DefaultShowAction'); const NoRecordsOriginal = props => { const { resource } = props; const { translateButton, translateMessage } = useTranslation(); const canCreate = resource.resourceActions.find(a => a.name === 'new'); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.InfoBox, { title: translateMessage('noRecords', resource.id), illustration: "Docs" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, { mb: "xxl" }, translateMessage('noRecordsInResource', resource.id)), canCreate && /*#__PURE__*/React__default$1.default.createElement(OverridableActionButton, { action: canCreate, resourceId: resource.id }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { variant: "contained" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Icon, { icon: "Plus" }), translateButton('createFirstRecord', resource.id)))); }; // This hack prevents rollup from throwing an error const NoRecords = allowOverride(NoRecordsOriginal, 'NoRecords'); const display = isTitle => [isTitle ? 'table-cell' : 'none', isTitle ? 'table-cell' : 'none', 'table-cell', 'table-cell']; const RecordInList = props => { const { resource, record: recordFromProps, actionPerformed, isLoading, onSelect, isSelected } = props; const [record, setRecord] = React$1.useState(recordFromProps); const navigate = reactRouter.useNavigate(); const location = reactRouter.useLocation(); const translateFunctions = useTranslation(); const modalFunctions = useModal(); const handleActionCallback = React$1.useCallback(actionResponse => { if (actionResponse.record && !actionResponse.redirectUrl) { setRecord(mergeRecordResponse(record, actionResponse)); } else if (actionPerformed) { actionPerformed(actionResponse); } }, [actionPerformed, record]); const actionResponseHandler = useActionResponseHandler(handleActionCallback); React$1.useEffect(() => { setRecord(recordFromProps); }, [recordFromProps]); const { recordActions } = record; const show = record.recordActions.find(({ name }) => name === 'show'); const edit = record.recordActions.find(({ name }) => name === 'edit'); const action = show || edit; const handleClick = event => { const targetTagName = event.target.tagName.toLowerCase(); if (action && targetTagName !== 'a' && targetTagName !== 'button' && targetTagName !== 'svg') { buildActionClickHandler({ action, params: { resourceId: resource.id, recordId: record.id }, actionResponseHandler, navigate, location, translateFunctions, modalFunctions })(event); } }; const actionParams = { resourceId: resource.id, recordId: record.id }; const handleActionClick = (event, sourceAction) => buildActionClickHandler({ action: sourceAction, params: actionParams, actionResponseHandler, navigate, location, translateFunctions, modalFunctions })(event); const buttons = [{ icon: 'MoreHorizontal', variant: 'light', label: undefined, 'data-testid': 'actions-dropdown', buttons: actionsToButtonGroup({ actions: recordActions, params: actionParams, handleClick: handleActionClick, translateFunctions, modalFunctions }) }]; const contentTag = getResourceElementCss(resource.id, 'table-row'); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TableRow, { className: isSelected ? 'selected' : 'not-selected', onClick: handleClick, "data-id": record.id, "data-css": contentTag }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TableCell, { width: 0 }, onSelect && record.bulkActions.length ? /*#__PURE__*/React__default$1.default.createElement(DesignSystem.CheckBox, { onChange: () => onSelect(record), checked: isSelected }) : null), resource.listProperties.map(property => { const cellTag = `${resource.id}-${property.name}-table-cell`; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TableCell, { style: { cursor: 'pointer' }, key: property.propertyPath, "data-property-name": property.propertyPath, display: display(property.isTitle), "data-css": cellTag }, isLoading ? /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Placeholder, { style: { height: 14 } }) : /*#__PURE__*/React__default$1.default.createElement(BasePropertyComponentExtended, { key: property.propertyPath, where: "list", property: property, resource: resource, record: record })); }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TableCell, { key: "options", className: "options" }, recordActions.length ? /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ButtonGroup, { buttons: buttons }) : null)); }; const OverridableRecordInList = allowOverride(RecordInList, 'RecordInList'); const SortLink = props => { const { sortBy, property, direction } = props; const location = reactRouterDom.useLocation(); const { translateProperty } = useTranslation(); const isActive = React$1.useMemo(() => sortBy === property.propertyPath, [sortBy, property]); const query = new URLSearchParams(location.search); const oppositeDirection = isActive && direction === 'asc' ? 'desc' : 'asc'; const sortedByIcon = direction === 'asc' ? 'ChevronUp' : 'ChevronDown'; query.set('direction', oppositeDirection); query.set('sortBy', property.propertyPath); return /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.NavLink, { to: { search: query.toString() }, className: DesignSystem.cssClass('SortLink') }, translateProperty(property.label, property.resourceId), isActive && /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Icon, { icon: sortedByIcon, color: "grey40", ml: "lg" })); }; const checkSortProps = (prevProps, nextProps) => prevProps.direction === nextProps.direction && prevProps.property.propertyPath === nextProps.property.propertyPath && prevProps.sortBy === nextProps.sortBy && prevProps.property.resourceId === nextProps.property.resourceId; var SortLink$1 = /*#__PURE__*/React$1.memo(SortLink, checkSortProps); const PropertyHeader = props => { const { property, titleProperty, display } = props; const { translateProperty } = useTranslation(); const isMain = property.propertyPath === titleProperty.propertyPath; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TableCell, { className: isMain ? 'main' : undefined, display: display }, property.isSortable ? /*#__PURE__*/React__default$1.default.createElement(SortLink$1, props) : translateProperty(property.label, property.resourceId)); }; const OverridablePropertyHeader = allowOverride(PropertyHeader, 'PropertyHeader'); /** * @memberof RecordsTableHeader * @alias RecordsTableHeaderProps */ /** * Prints `thead` section for table with records. * * ``` * import { RecordsTableHeader } from 'adminjs' * ``` * * @component * @subcategory Application * @example <caption>List with 2 properties</caption> * const properties = [{ * label: 'First Name', * name: 'firstName', * isSortable: true, * }, { * label: 'Last Name', * name: 'lastName', * }] * return ( * <Box py="xl"> * <Table> * <RecordsTableHeader * properties={properties} * titleProperty={properties[0]} * sortBy={'firstName'} * direction={'asc'} * /> * <TableBody> * <TableRow> * <TableCell>John</TableCell> * <TableCell>Doe</TableCell> * <TableCell></TableCell> * </TableRow> * <TableRow> * <TableCell>Max</TableCell> * <TableCell>Kodaly</TableCell> * <TableCell></TableCell> * </TableRow> * </TableBody> * </Table> * </Box> * ) */ const RecordsTableHeader = props => { const { titleProperty, properties, sortBy, direction, onSelectAll, selectedAll } = props; const contentTag = getResourceElementCss(titleProperty.resourceId, 'table-head'); const rowTag = `${titleProperty.resourceId}-table-head-row`; const checkboxCss = `${titleProperty.resourceId}-checkbox-table-cell`; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TableHead, { "data-css": contentTag }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TableRow, { "data-css": rowTag }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TableCell, { "data-css": checkboxCss }, onSelectAll ? /*#__PURE__*/React__default$1.default.createElement(DesignSystem.CheckBox, { style: { marginLeft: 5 }, onChange: () => onSelectAll(), checked: selectedAll }) : null), properties.map(property => /*#__PURE__*/React__default$1.default.createElement(OverridablePropertyHeader, { display: display(property.isTitle), key: property.propertyPath, titleProperty: titleProperty, property: property, sortBy: sortBy, direction: direction })), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TableCell, { key: "actions", style: { width: 80 } }))); }; const OverridableRecordsTableHeader = allowOverride(RecordsTableHeader, 'RecordsTableHeader'); const getBulkActionsFromRecords = records => { const actions = Object.values(records.reduce((memo, record) => ({ ...memo, ...record.bulkActions.reduce((actionsMemo, action) => ({ ...actionsMemo, [action.name]: action }), {}) }), {})); return actions; }; const SelectedRecords = props => { const { resource, selectedRecords } = props; const translateFunctions = useTranslation(); const { translateLabel } = translateFunctions; const navigate = reactRouter.useNavigate(); const location = reactRouter.useLocation(); const actionResponseHandler = useActionResponseHandler(); const modalFunctions = useModal(); if (!selectedRecords || !selectedRecords.length) { return null; } const params = { resourceId: resource.id, recordIds: selectedRecords.map(records => records.id) }; const handleActionClick = (event, sourceAction) => buildActionClickHandler({ action: sourceAction, params, actionResponseHandler, navigate, location, translateFunctions, modalFunctions })(event); const bulkButtons = actionsToButtonGroup({ actions: getBulkActionsFromRecords(selectedRecords), params, handleClick: handleActionClick, translateFunctions, modalFunctions }); const contentTag = getResourceElementCss(resource.id, 'table-caption'); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TableCaption, { "data-css": contentTag }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flex: true, py: "sm", alignItems: "center" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Title, { mr: "lg" }, translateLabel('selectedRecords', resource.id, { selected: selectedRecords.length })), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.ButtonGroup, { size: "sm", rounded: true, buttons: bulkButtons }))); }; const OverridableSelectedRecords = allowOverride(SelectedRecords, 'SelectedRecords'); /** * @alias RecordsTableProps * @memberof RecordsTable */ /** * @classdesc * Renders an entire records table. To fill the data you might need: * * - {@link useRecords} and * - {@link useSelectedRecords} hooks * * so make sure to see at the documentation pages for both of them * * @component * @class * @hideconstructor * @subcategory Application */ const RecordsTable = props => { const { resource, records, actionPerformed, sortBy, direction, isLoading, onSelect, selectedRecords, onSelectAll } = props; if (!records.length) { if (isLoading) { return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Loader, null); } return /*#__PURE__*/React__default$1.default.createElement(NoRecords, { resource: resource }); } const selectedAll = selectedRecords && !!records.find(record => selectedRecords.find(selected => selected.id === record.id)); const recordsHaveBulkAction = !!records.find(record => record.bulkActions.length); const contentTag = getResourceElementCss(resource.id, 'table'); const selectedTag = getResourceElementCss(resource.id, 'table-selected-records'); const bodyTag = getResourceElementCss(resource.id, 'table-body'); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Table, { "data-css": contentTag }, /*#__PURE__*/React__default$1.default.createElement(OverridableSelectedRecords, { resource: resource, selectedRecords: selectedRecords, "data-css": selectedTag }), /*#__PURE__*/React__default$1.default.createElement(OverridableRecordsTableHeader, { properties: resource.listProperties, titleProperty: resource.titleProperty, direction: direction, sortBy: sortBy, onSelectAll: recordsHaveBulkAction ? onSelectAll : undefined, selectedAll: selectedAll }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TableBody, { "data-css": bodyTag }, records.map(record => /*#__PURE__*/React__default$1.default.createElement(OverridableRecordInList, { record: record, resource: resource, key: record.id, actionPerformed: actionPerformed, isLoading: isLoading, onSelect: onSelect, isSelected: selectedRecords && !!selectedRecords.find(selected => selected.id === record.id) })))); }; const OverridableRecordsTable = allowOverride(RecordsTable, 'RecordsTable'); const List = ({ resource, setTag }) => { const { records, loading, direction, sortBy, page, total, fetchData, perPage } = useRecords(resource.id); const { selectedRecords, handleSelect, handleSelectAll, setSelectedRecords } = useSelectedRecords(records); const location = reactRouter.useLocation(); const { storeParams } = useQueryParams(); React$1.useEffect(() => { if (setTag) { setTag(total.toString()); } }, [total]); React$1.useEffect(() => { setSelectedRecords([]); }, [resource.id]); React$1.useEffect(() => { const search = new URLSearchParams(location.search); if (search.get(REFRESH_KEY)) { setSelectedRecords([]); } else { const recordIds = search.get('recordIds')?.split?.(',') ?? []; setSelectedRecords(records.filter(r => recordIds.includes(r.id.toString()))); } }, [location.search, records]); const handleActionPerformed = () => fetchData(); const handlePaginationChange = pageNumber => { storeParams({ page: pageNumber.toString() }); }; const contentTag = getActionElementCss(resource.id, 'list', 'table-wrapper'); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { variant: "container", "data-css": contentTag }, /*#__PURE__*/React__default$1.default.createElement(OverridableRecordsTable, { resource: resource, records: records, actionPerformed: handleActionPerformed, onSelect: handleSelect, onSelectAll: handleSelectAll, selectedRecords: selectedRecords, direction: direction, sortBy: sortBy, isLoading: loading }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, { mt: "xl", textAlign: "center" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Pagination, { page: page, perPage: perPage, total: total, onChange: handlePaginationChange }))); }; const OverridableList = allowOverride(List, 'DefaultListAction'); /* eslint-disable @typescript-eslint/explicit-function-return-type */ /** * Additional props which are passed to your component * @alias AddNoticeProps * @memberof withNotice */ const mapDispatchToProps$1 = dispatch => ({ addNotice: notice => dispatch(addNotice(notice)) }); /** * Higher Order Component which allows you to post notice messages from your components * * It gives you the additional prop: `addNotice(noticeMessage)` taking {@link NoticeMessage}. * * ```javascript * import { withNotice } from 'adminjs/core' * * const MY_MESSAGE = { * message: 'I am toast message', * type: 'success', * } * const MyCustomComponent = ({ addNotice }) => { * return ( * <a onClick={() => addNotice(MY_MESSAGE)}>Click Me</a> * ) * } * export default withNotice(MyCustomComponent) * ``` * * @component * @subcategory HOC */ const withNotice = Component => require$$3.connect(null, mapDispatchToProps$1)(Component); function _extends$1() { _extends$1 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1.apply(this, arguments); } /** * @name BulkDeleteAction * @category Actions * @description Deletes selected records. * @component * @private */ const BulkDelete = props => { const { resource, records, action, addNotice } = props; const navigate = reactRouter.useNavigate(); const [loading, setLoading] = React$1.useState(false); const { translateMessage, translateButton } = useTranslation(); if (!records) { return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, null, translateMessage('pickSomeFirstToRemove', resource.id)); } const handleClick = () => { const api = new ApiClient(); setLoading(true); const recordIds = records.map(r => r.id); api.bulkAction({ resourceId: resource.id, actionName: action.name, recordIds, method: 'post' }).then(response => { setLoading(false); if (response.data.notice) { addNotice(response.data.notice); } if (response.data.redirectUrl) { const search = new URLSearchParams(window.location.search); // bulk function have recordIds in the URL so it has to be stripped before redirect search.delete('recordIds'); navigate(appendForceRefresh(response.data.redirectUrl, search.toString())); } }).catch(error => { setLoading(false); addNotice({ message: translateMessage('bulkDeleteError', resource.id), type: 'error' }); throw error; }); }; const contentTag = getActionElementCss(resource.id, action.name, 'drawer-content'); const tableTag = getActionElementCss(resource.id, action.name, 'table'); const footerTag = getActionElementCss(resource.id, action.name, 'drawer-footer'); return /*#__PURE__*/React__default$1.default.createElement(React__default$1.default.Fragment, null, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DrawerContent, { "data-css": contentTag }, action?.showInDrawer ? /*#__PURE__*/React__default$1.default.createElement(OverridableActionHeader, _extends$1({ omitActions: true }, props)) : null, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.MessageBox, { mb: "xxl", variant: "danger", message: translateMessage(records.length > 1 ? 'theseRecordsWillBeRemoved_plural' : 'theseRecordsWillBeRemoved', resource.id, { count: records.length }) }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Table, { "data-css": tableTag }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TableBody, null, records.map(record => /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TableRow, { key: record.id }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.TableCell, null, /*#__PURE__*/React__default$1.default.createElement(BasePropertyComponentExtended, { where: "list", property: resource.titleProperty, resource: resource, record: record }))))))), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DrawerFooter, { "data-css": footerTag }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { variant: "contained", size: "lg", onClick: handleClick, disabled: loading }, loading ? /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Icon, { icon: "Loader", spin: true }) : null, translateButton(records.length > 1 ? 'confirmRemovalMany_plural' : 'confirmRemovalMany', resource.id, { count: records.length })))); }; const FormattedBulkDelete = withNotice(BulkDelete); const OverridableFormattedBulkDelete = allowOverride(FormattedBulkDelete, 'DefaultBulkDeleteAction'); const actions$9 = { new: OverridableNew, edit: OverridableEdit, show: OverridableShow, list: OverridableList, bulkDelete: OverridableFormattedBulkDelete }; var ActionComponents = /*#__PURE__*/Object.freeze({ __proto__: null, BulkDelete: OverridableFormattedBulkDelete, Edit: OverridableEdit, LayoutElementRenderer: LayoutElementRenderer, List: OverridableList, New: OverridableNew, OriginalBulkDelete: FormattedBulkDelete, OriginalEdit: Edit, OriginalList: List, OriginalNew: New, OriginalShow: Show, Show: OverridableShow, actions: actions$9 }); /* cspell: disable */ const DOCS = 'https://docs.adminjs.co'; const DEFAULT_PATHS = { rootPath: '/admin', logoutPath: '/admin/logout', loginPath: '/admin/login', refreshTokenPath: '/admin/refresh-token' }; /** * Component which renders all the default and custom actions for both the Resource and the Record. * * It passes all props down to the actual Action component. * * Example of creating your own actions: * ``` * // AdminJS options * const AdminJSOptions = { * resources: [ * resource, * options: { * actions: { * myNewAction: { * label: 'amazing action', * icon: 'Add', * inVisible: (resource, record) => record.param('email') !== '', * actionType: 'record', * component: 'MyNewAction', * handler: (request, response, data) => { * return { * ... * } * } * } * } * } * ] * } * ``` * * ``` * // ./my-new-action.js * import { Box } from 'adminjs' * * const MyNewAction = (props) => { * const { resource, action, record } = props * // do something with the props and render action * return ( * <Box>Some Action Content</Box> * ) * } * ``` * * @component * @name BaseActionComponent * @subcategory Application */ const BaseActionComponent = props => { const { resource, action, record, records, setTag } = props; const documentationLink = [DOCS, 'BaseAction.html'].join('/'); const { translateMessage } = useTranslation(); let Action = actions$9[action.name]; if (action.component) { Action = AdminJS.UserComponents[action.component]; } if (Action) { return /*#__PURE__*/React__default$1.default.createElement(ErrorBoundary$1, null, /*#__PURE__*/React__default$1.default.createElement(Action, { action: action, resource: resource, record: record, records: records, setTag: setTag })); } return Action || /*#__PURE__*/React__default$1.default.createElement(DesignSystem.MessageBox, { variant: "danger" }, translateMessage('noActionComponent'), /*#__PURE__*/React__default$1.default.createElement(Trans, { key: "messages.buttons.seeTheDocumentation" }, "See:", /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Link, { ml: "default", href: documentationLink }, "the documentation"))); }; const RocketSVG = () => /*#__PURE__*/React__default$1.default.createElement("svg", { viewBox: "-97.1149 -18.447 406.8172 312.4308", width: "406.8172", height: "312.4308", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__default$1.default.createElement("defs", null, /*#__PURE__*/React__default$1.default.createElement("clipPath", { id: "clip0_1288_25012" }, /*#__PURE__*/React__default$1.default.createElement("rect", { width: "639.364", height: "452.487", fill: "white", transform: "translate(-3.92505 4.58887)" })), /*#__PURE__*/React__default$1.default.createElement("clipPath", { id: "clip1_1288_25012" }, /*#__PURE__*/React__default$1.default.createElement("rect", { width: "227.667", height: "145.299", fill: "white", transform: "translate(299.214 108.751)" })), /*#__PURE__*/React__default$1.default.createElement("clipPath", { id: "clip2_1288_25012" }, /*#__PURE__*/React__default$1.default.createElement("rect", { width: "38.8699", height: "32.3916", fill: "white", transform: "translate(174.275 116.155)" })), /*#__PURE__*/React__default$1.default.createElement("clipPath", { id: "clip3_1288_25012" }, /*#__PURE__*/React__default$1.default.createElement("rect", { width: "101.367", height: "54.7383", fill: "white", transform: "translate(20.6462 370.836) rotate(-6.9167)" })), /*#__PURE__*/React__default$1.default.createElement("clipPath", { id: "clip4_1288_25012" }, /*#__PURE__*/React__default$1.default.createElement("rect", { width: "66.6341", height: "37.019", fill: "white", transform: "translate(108.566 415.083)" })), /*#__PURE__*/React__default$1.default.createElement("clipPath", { id: "clip5_1288_25012" }, /*#__PURE__*/React__default$1.default.createElement("rect", { width: "47.1992", height: "66.6341", fill: "white", transform: "translate(116.896 204.075)" })), /*#__PURE__*/React__default$1.default.createElement("clipPath", { id: "clip6_1288_25012" }, /*#__PURE__*/React__default$1.default.createElement("rect", { width: "170.75", height: "47.4306", fill: "white", transform: "translate(249.354 394.468)" })), /*#__PURE__*/React__default$1.default.createElement("clipPath", { id: "clip7_1288_25012" }, /*#__PURE__*/React__default$1.default.createElement("rect", { width: "54.0708", height: "25.6125", fill: "white", transform: "translate(83.5786 87.8264) rotate(-17.317)" }))), /*#__PURE__*/React__default$1.default.createElement("g", { clipPath: "url(#clip0_1288_25012)", transform: "matrix(0.6978580951690675, 0, 0, 0.6978580951690675, -98.17671203613281, -21.649383544921847)" }, /*#__PURE__*/React__default$1.default.createElement("path", { d: "M 203.412 227.746 L 115.998 272.54 L 105.561 296.895 L 206.022 248.185 L 219.069 245.141 L 183.843 280.368 L 206.022 276.889 L 183.843 292.981 C 190.366 292.255 205.935 290.284 216.025 288.196 C 226.114 286.109 237.335 279.789 241.684 276.889 C 242.844 279.353 246.033 285.065 249.512 288.196 C 252.991 291.327 273.577 284.283 283.435 280.368 C 285.898 282.397 292.045 286.805 296.916 288.196 C 301.787 289.588 325.91 286.167 337.362 284.283 L 330.838 313.42 C 325.04 326.612 317.704 351.17 334.753 343.864 C 351.801 336.557 388.535 283.123 404.771 257.319 C 412.599 251.23 437.649 233.486 475.224 211.219 C 522.193 183.386 570.032 104.669 580.905 80.315 C 591.634 56.281 576.529 54.271 557.321 51.714 L 556.551 51.612 C 540.895 49.524 483.923 53.931 457.394 56.395 C 454.784 54.221 449.305 49.002 448.261 45.523 C 446.957 41.174 430.43 32.476 419.557 37.26 C 410.859 41.087 408.975 55.671 409.12 62.484 C 401.872 58.28 386.245 49.002 381.722 45.523 C 377.198 42.044 366.5 41.174 361.716 41.174 C 351.714 28.127 328.925 2.294 317.791 3.338 C 303.874 4.642 300.83 18.559 307.789 37.26 C 313.355 52.22 328.084 60.309 334.753 62.484 C 328.084 68.283 313.877 81.445 310.398 87.708 C 306.919 93.97 313.877 112.353 317.791 120.761 L 280.39 138.591 C 259.66 135.402 217.765 130.328 216.025 135.547 C 214.285 140.766 237.625 162.656 249.512 172.948 C 243.714 181.792 230.725 200.695 225.158 205.565 C 219.591 210.437 216.75 222.382 216.025 227.746 L 156.879 264.712 L 203.412 227.746 Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M 153.856 176.088 C 152.498 165.905 144.238 161.662 140.278 160.813 C 98.189 186.611 107.466 250.764 117.366 279.616 C 129.529 270.846 153.856 252.46 153.856 249.067 C 153.856 245.672 187.799 218.234 204.77 204.94 C 202.507 199.848 195.097 188.647 183.556 184.574 C 169.13 179.483 155.553 188.817 153.856 176.088 Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M 273.226 31.377 C 272.828 28.522 271.986 25.441 270.708 22.135 C 270.384 21.301 269.993 20.369 269.542 19.355 C 268.79 17.604 267.851 15.591 266.724 13.307 C 266.047 11.902 265.393 10.887 264.769 10.264 C 263.791 9.234 262.717 8.798 261.537 8.949 C 260.838 9.046 260.161 9.399 259.507 10.001 C 259.056 10.376 258.53 10.977 257.929 11.804 C 256.749 13.404 255.914 14.644 255.41 15.523 C 254.606 16.868 254.057 18.145 253.757 19.355 C 253.749 19.43 253.734 19.505 253.719 19.58 C 253.591 20.182 253.478 21.106 253.381 22.36 C 253.163 25.298 253.065 28.266 253.08 31.264 C 252.742 31.429 252.373 31.707 251.99 32.091 C 249.209 34.818 247.314 38.688 246.315 43.699 C 246.156 44.458 246.029 45.172 245.939 45.841 C 245.916 45.863 245.893 45.87 245.864 45.878 C 245.36 46.006 244.901 46.366 244.473 46.967 C 244.195 47.321 243.984 47.681 243.834 48.057 C 243.533 48.808 243.436 49.92 243.533 51.401 C 243.533 51.829 243.571 52.152 243.646 52.377 C 243.721 52.55 243.932 52.881 244.285 53.354 C 244.834 54.083 245.209 54.504 245.413 54.631 C 245.991 54.992 246.706 55.045 247.555 54.782 C 247.592 54.857 247.63 54.932 247.667 55.007 C 248.72 56.938 250.126 58.629 251.877 60.079 C 255.087 62.731 259.132 64.377 264.017 65 C 265.844 65.248 267.25 65.075 268.227 64.474 C 268.678 64.196 268.941 63.873 269.016 63.497 C 269.091 63.482 269.166 63.475 269.242 63.46 C 270.647 63.212 271.782 62.573 272.662 61.544 C 273.392 60.695 273.955 59.5 274.353 57.975 C 274.826 56.172 275.052 54.09 275.03 51.739 C 275.03 50.236 274.894 48.117 274.617 45.39 L 273.601 34.758 C 273.526 33.503 273.399 32.376 273.226 31.377 Z M 250.713 38.289 C 251.388 36.741 252.208 35.412 253.155 34.307 C 253.2 35.524 253.261 36.741 253.343 37.951 L 253.569 41.069 C 253.666 42.272 253.771 43.196 253.869 43.849 C 254.17 45.953 254.749 48.08 255.598 50.236 C 256.373 52.189 257.29 53.948 258.342 55.495 C 258.289 55.495 258.237 55.495 258.192 55.495 C 255.388 55.195 252.493 53.392 249.51 50.086 C 249.051 49.627 248.66 49.349 248.344 49.259 C 248.186 47.937 248.344 46.216 248.833 44.112 C 249.381 41.761 250.013 39.815 250.713 38.289 Z M 263.341 34.983 C 263.589 34.953 263.814 34.938 264.017 34.946 C 263.784 34.998 263.559 35.096 263.341 35.246 C 263.349 35.164 263.349 35.074 263.341 34.983 Z M 268.49 43.399 C 268.513 43.571 268.536 43.752 268.565 43.925 L 268.715 44.826 C 268.573 45.946 268.31 47.013 267.926 48.019 L 268.49 43.399 Z M 261.574 55.045 C 261.687 55.015 261.8 54.97 261.913 54.894 C 261.943 55 261.965 55.225 261.988 55.571 C 261.845 55.39 261.702 55.217 261.574 55.045 Z M 265.596 49.823 L 265.709 49.635 C 265.807 49.462 265.836 49.297 265.784 49.146 L 265.897 49.146 C 265.874 49.349 265.874 49.635 265.897 50.011 L 265.821 50.274 C 265.723 50.521 265.619 50.687 265.521 50.762 C 265.468 50.334 265.498 50.026 265.596 49.823 Z M 265.182 52.002 C 265.356 51.724 265.431 51.528 265.408 51.401 L 265.521 51.401 C 265.521 52.73 265.544 53.73 265.596 54.406 L 265.408 54.519 C 265.431 54.196 265.393 53.88 265.295 53.579 C 265.145 53.226 265.055 52.963 265.032 52.791 L 265.182 52.002 Z M 245.826 48.583 C 245.826 48.628 245.826 48.666 245.826 48.696 C 245.893 50.078 246.165 51.431 246.652 52.753 C 246.593 52.768 246.54 52.768 246.502 52.753 C 246.277 52.678 246.066 52.505 245.864 52.227 C 245.435 51.626 245.247 50.927 245.3 50.123 C 245.352 49.537 245.533 49.026 245.826 48.583 Z M 248.382 49.56 L 250.261 52.227 C 251.012 53.332 251.629 54.12 252.103 54.594 C 253.9 56.375 256.53 57.389 259.995 57.637 C 260.717 58.486 261.597 59.448 262.627 60.53 C 263.318 61.221 263.904 61.769 264.393 62.183 C 262.469 62.062 260.341 61.491 258.004 60.454 C 255.546 59.403 253.628 58.185 252.253 56.81 C 251.148 55.631 250.208 54.233 249.434 52.603 C 248.908 51.528 248.555 50.521 248.382 49.597 L 248.382 49.56 Z M 271.76 47.005 C 271.61 45.75 271.474 44.811 271.347 44.187 C 271.143 42.963 270.91 41.881 270.633 40.957 C 270.106 39.131 269.37 37.335 268.415 35.584 C 267.664 34.232 266.874 33.421 266.047 33.143 C 265.544 32.94 264.822 32.917 263.867 33.067 C 263.664 33.105 263.461 33.143 263.266 33.18 C 263.213 32.511 263.085 31.655 262.89 30.625 C 262.837 30.385 262.792 30.152 262.74 29.912 C 262.619 28.965 262.432 27.981 262.176 26.944 C 262.131 26.793 262.085 26.651 262.025 26.531 C 261.988 26.283 261.95 26.057 261.913 25.854 C 261.56 24.029 261.401 22.421 261.424 21.046 C 261.424 20.587 261.439 20.136 261.462 19.693 C 261.506 19.633 261.544 19.558 261.574 19.468 C 261.589 19.438 261.597 19.4 261.612 19.355 C 261.71 19.047 261.83 18.514 261.988 17.74 C 262.078 17.281 262.176 16.898 262.289 16.575 C 262.394 16.35 262.507 16.139 262.627 15.936 C 262.882 15.598 263.018 15.298 263.04 15.035 C 263.198 14.869 263.356 14.704 263.528 14.546 C 263.724 14.366 263.875 14.216 263.979 14.096 C 264.363 14.772 264.776 15.598 265.22 16.575 C 265.694 17.619 266.107 18.544 266.461 19.355 C 266.994 20.512 267.408 21.444 267.701 22.135 C 268.55 24.239 269.189 26.17 269.617 27.921 C 270.121 29.927 270.61 33.203 271.084 37.763 L 271.873 45.953 C 272.121 48.53 272.248 50.484 272.248 51.814 C 272.226 53.993 271.948 55.909 271.422 57.562 C 271.068 58.614 270.61 59.425 270.031 60.004 C 269.182 60.755 268.302 61.003 267.4 60.755 C 267.024 60.627 266.52 60.282 265.897 59.703 C 265.641 59.463 265.393 59.222 265.145 58.989 C 265.385 58.847 265.558 58.644 265.671 58.388 C 265.746 58.185 265.784 57.885 265.784 57.487 C 265.807 57.088 265.844 56.788 265.897 56.585 L 266.949 56.623 C 267.852 54.744 268.475 52.693 268.828 50.461 C 269.054 51.814 268.994 53.166 268.64 54.519 C 268.498 55.06 268.498 55.458 268.64 55.721 C 268.339 56.39 268.174 56.848 268.151 57.111 C 268.099 57.411 268.137 57.697 268.264 57.975 C 268.415 58.298 268.625 58.501 268.903 58.576 C 269.227 58.704 269.565 58.651 269.918 58.426 C 270.219 58.223 270.467 57.952 270.67 57.599 C 271.324 56.623 271.737 55.435 271.911 54.03 C 272.061 53.001 272.083 51.716 271.985 50.161 C 271.963 49.109 271.888 48.057 271.76 47.005 Z M 260.672 12.781 C 261.198 12.082 261.71 11.781 262.213 11.879 C 262.356 11.902 262.507 11.977 262.665 12.104 C 262.281 12.307 261.875 12.675 261.424 13.194 C 261.161 13.502 260.935 13.795 260.747 14.058 C 260.303 14.396 259.928 14.975 259.619 15.786 C 259.259 16.793 259.034 17.98 258.944 19.355 C 258.921 19.798 258.906 20.264 258.906 20.745 C 258.883 23.728 259.207 26.666 259.883 29.574 C 259.958 29.889 260.049 30.28 260.146 30.738 C 260.183 31.52 260.131 32.406 259.995 33.405 C 259.673 35.457 259.229 37.335 258.681 39.041 C 258.131 40.791 257.838 41.746 257.816 41.896 C 257.567 42.97 257.417 44.09 257.365 45.239 C 257.357 45.668 257.365 46.081 257.402 46.479 C 257.334 46.239 257.275 45.991 257.214 45.728 C 256.914 44.323 256.628 42.474 256.35 40.168 C 255.922 36.989 255.673 34.232 255.598 31.903 C 255.576 30.175 255.621 28.123 255.748 25.742 C 255.801 24.517 255.884 23.397 256.011 22.398 C 256.177 21.369 256.425 20.354 256.763 19.355 C 257.583 17.101 258.883 14.914 260.672 12.781 Z M 340.917 18.829 C 340.526 18.957 340.181 19.13 339.865 19.355 C 339.511 19.625 339.211 19.964 338.963 20.369 C 338.714 20.768 338.535 21.173 338.437 21.572 C 338.286 21.97 338.211 22.285 338.211 22.511 C 338.211 22.864 338.324 23.149 338.549 23.375 C 338.677 23.473 338.865 23.548 339.113 23.6 C 339.414 23.728 339.715 23.766 340.016 23.713 C 340.369 23.66 340.616 23.503 340.767 23.225 L 340.917 22.586 C 341.045 22.158 341.293 21.85 341.669 21.647 C 342.022 21.496 342.256 21.369 342.383 21.271 C 342.541 21.128 342.654 20.903 342.721 20.595 L 342.909 20.933 C 342.931 21.031 342.962 21.196 342.985 21.421 L 343.248 21.684 L 344.15 22.323 C 344.247 22.421 344.36 22.488 344.487 22.511 C 344.616 22.563 344.751 22.563 344.901 22.511 L 345.126 22.473 C 345.18 22.473 345.255 22.413 345.352 22.285 C 345.502 22.037 345.54 21.782 345.465 21.534 C 345.39 21.256 345.225 21.061 344.976 20.933 C 344.623 20.805 344.45 20.73 344.45 20.707 C 344.398 20.655 344.322 20.535 344.225 20.332 C 344 19.979 343.676 19.843 343.248 19.919 L 343.248 20.031 C 343.074 19.979 342.924 20.016 342.797 20.144 C 342.842 19.813 342.834 19.558 342.759 19.393 C 342.759 19.378 342.744 19.37 342.721 19.355 C 342.632 19.047 342.376 18.852 341.97 18.754 C 341.647 18.679 341.293 18.701 340.917 18.829 Z M 335.994 15.335 C 335.468 15.561 335.151 15.771 335.054 15.974 C 334.926 16.252 334.941 16.5 335.092 16.725 C 335.219 16.951 335.43 17.063 335.731 17.063 C 335.783 17.063 335.851 17.048 335.918 17.026 C 335.325 17.785 334.874 18.559 334.565 19.355 C 334.272 20.084 334.114 20.835 334.077 21.609 C 334.024 22.383 333.949 22.864 333.851 23.037 C 333.799 23.187 333.498 23.525 332.949 24.051 C 332.746 24.284 332.603 24.494 332.535 24.69 C 332.295 24.449 331.994 24.276 331.633 24.164 C 330.453 23.788 329.018 24.066 327.312 24.99 C 325.605 25.914 324.154 27.117 322.952 28.597 C 321.696 30.122 320.847 31.775 320.395 33.556 C 320.32 33.856 320.207 34.307 320.057 34.908 C 319.907 35.412 319.704 35.795 319.456 36.073 C 319.328 36.276 319.117 36.546 318.817 36.899 C 318.742 37.05 318.719 37.222 318.742 37.425 C 318.764 37.598 318.854 37.726 319.004 37.801 C 319.133 37.876 319.305 37.891 319.531 37.838 C 320.336 37.636 320.974 37.072 321.448 36.148 C 321.545 35.975 321.862 35.156 322.388 33.706 C 323.011 31.955 324.019 30.4 325.394 29.048 C 326.77 27.695 328.341 26.718 330.093 26.117 C 330.596 26.568 331.108 26.793 331.633 26.793 C 331.934 26.816 332.213 26.741 332.46 26.568 C 332.739 26.395 332.897 26.17 332.949 25.892 C 332.972 25.802 332.987 25.719 332.987 25.629 C 333.085 25.667 333.197 25.696 333.325 25.704 C 333.649 25.727 333.949 25.667 334.227 25.516 C 334.979 25.065 335.505 24.314 335.806 23.262 C 336.084 22.037 336.317 21.136 336.519 20.557 C 336.655 20.144 336.827 19.738 337.046 19.355 C 337.489 18.536 338.106 17.785 338.888 17.101 C 339.94 16.147 341.165 15.448 342.571 14.997 C 343.173 14.847 343.57 14.682 343.774 14.509 C 344.225 14.156 344.375 13.78 344.225 13.382 C 344.127 13.059 343.826 12.818 343.323 12.668 C 342.548 12.495 341.481 12.796 340.128 13.57 C 339.94 13.69 339.752 13.803 339.564 13.908 C 339.542 13.908 339.519 13.908 339.489 13.908 C 339.414 13.9 339.316 13.885 339.189 13.87 C 339.076 13.532 338.797 13.141 338.361 12.706 C 336.181 10.527 334.7 9.084 333.926 8.385 C 332.22 6.83 330.746 5.778 329.491 5.229 C 327.965 4.501 326.161 4.163 324.079 4.215 C 320.598 4.238 317.186 5.252 313.856 7.258 C 312.051 8.333 310.563 9.527 309.383 10.827 C 308.556 11.751 307.804 12.781 307.128 13.908 C 306.015 15.733 305.166 17.552 304.572 19.355 C 304.106 20.843 303.82 22.315 303.708 23.788 C 303.535 26.343 303.933 28.845 304.911 31.302 C 305.865 33.729 307.263 35.825 309.12 37.576 C 309.248 37.703 309.856 38.237 310.961 39.191 C 311.713 39.845 312.3 40.408 312.728 40.881 C 313.276 41.535 313.743 41.843 314.119 41.821 C 314.345 41.798 314.555 41.686 314.757 41.483 C 314.908 41.257 314.998 41.017 315.02 40.769 C 315.043 40.318 314.908 39.852 314.608 39.379 C 314.232 38.755 313.668 38.101 312.916 37.425 C 312.037 36.651 311.39 36.058 310.961 35.66 C 309.285 34.059 308.03 32.143 307.203 29.912 C 306.376 27.658 306.091 25.389 306.338 23.112 C 306.467 22.188 306.655 21.286 306.902 20.407 C 307.008 20.054 307.12 19.701 307.24 19.355 C 308.308 16.417 310.075 13.848 312.54 11.654 C 315.299 9.174 318.419 7.634 321.899 7.033 C 323.906 6.68 325.672 6.732 327.199 7.183 C 328.725 7.656 330.333 8.671 332.009 10.226 C 332.987 11.128 334.399 12.518 336.256 14.396 C 336.437 14.554 336.61 14.697 336.783 14.809 C 336.557 14.96 336.294 15.132 335.994 15.335 Z M 520.613 52.415 C 520.305 52.738 520.012 53.061 519.749 53.392 C 513.261 53.677 505.496 54.075 496.446 54.594 C 487.748 55.12 480.795 55.646 475.586 56.172 C 467.971 56.946 461.093 57.975 454.952 59.252 C 454.29 59.403 453.726 59.635 453.26 59.966 C 452.734 59.748 452.17 59.508 451.569 59.252 C 448.998 58.163 446.691 57.359 444.653 56.848 C 444.804 56.675 444.954 56.359 445.104 55.909 C 445.833 53.579 446.134 51.686 446.007 50.236 C 445.908 49.237 445.615 48.32 445.142 47.493 C 444.639 46.592 443.977 45.931 443.149 45.502 C 442.729 45.262 442.315 45.149 441.91 45.164 C 441.812 44.811 441.699 44.45 441.571 44.075 C 441.271 43.271 440.97 42.722 440.669 42.422 C 440.241 41.993 439.519 41.686 438.489 41.483 C 437.587 41.257 436.82 41.145 436.196 41.145 C 435.821 41.145 435.534 41.235 435.332 41.407 C 435.302 41.43 435.28 41.453 435.257 41.483 L 434.693 40.618 C 434.37 40.19 434.107 39.927 433.903 39.83 C 433.679 39.702 433.242 39.664 432.588 39.717 C 431.686 39.739 431.025 39.754 430.596 39.754 C 429.792 39.807 429.153 39.957 428.68 40.205 C 428.476 40.303 428.191 40.521 427.815 40.844 C 427.439 41.122 427.138 41.31 426.913 41.407 C 426.44 41.686 426.184 41.843 426.161 41.896 C 426.139 41.933 426.116 41.971 426.086 42.009 C 426.003 41.896 425.921 41.783 425.822 41.67 C 425.124 40.821 424.53 40.265 424.057 40.017 C 423.027 39.469 421.861 39.454 420.561 39.98 C 419.786 40.28 418.78 40.919 417.554 41.896 C 416.802 42.497 416.314 43.045 416.089 43.549 C 415.938 43.902 415.84 44.473 415.788 45.277 L 415.562 50.161 C 415.562 50.161 415.562 50.191 415.562 50.198 C 414.442 50.003 413.314 50.168 412.18 50.687 C 411.6 50.935 411.165 51.273 410.864 51.701 C 410.465 52.227 410.338 52.753 410.488 53.279 C 410.586 53.579 410.841 53.955 411.24 54.406 C 411.668 54.879 411.931 55.248 412.029 55.495 C 412.157 55.796 412.194 56.194 412.142 56.698 L 412.105 61.882 C 411.796 61.972 411.533 62.13 411.315 62.37 C 410.961 62.769 410.714 63.445 410.563 64.399 C 410.39 64.377 409.999 64.151 409.398 63.723 C 408.857 63.377 408.293 63.249 407.707 63.347 C 407.624 63.272 407.526 63.182 407.406 63.084 C 405.677 61.754 401.67 59.403 395.378 56.021 C 390.267 53.294 386.561 50.612 384.253 47.982 C 383.125 46.682 382.562 46.013 382.562 45.991 C 381.863 45.262 381.186 44.728 380.532 44.375 C 379.15 43.631 377.368 43.481 375.195 43.925 C 375.135 43.902 375.067 43.894 375.007 43.887 C 374.481 43.849 374.075 43.977 373.805 44.263 C 373.256 44.428 372.684 44.631 372.076 44.864 C 369.798 45.788 368.069 46.464 366.889 46.892 C 364.881 47.644 363.115 48.147 361.589 48.395 C 360.484 48.568 359.973 48.944 360.048 49.522 C 360.101 50.048 360.589 50.334 361.514 50.386 C 363.341 50.484 364.881 50.371 366.137 50.048 C 366.437 49.973 367.167 49.725 368.317 49.297 L 372.038 47.794 C 372.203 48.493 372.541 49.192 373.053 49.898 C 373.354 50.349 373.864 50.972 374.593 51.776 L 387.711 65.526 C 387.666 65.511 387.614 65.481 387.56 65.451 C 384.878 63.723 383.201 62.611 382.524 62.107 C 381.374 61.228 380.097 60.169 378.69 58.914 C 376.789 57.239 374.797 55.368 372.715 53.317 C 371.535 52.137 370.738 51.19 370.309 50.461 C 370.106 50.086 369.896 49.875 369.671 49.823 C 369.445 49.77 369.241 49.86 369.069 50.086 C 368.919 50.311 368.858 50.552 368.881 50.799 C 368.903 51.303 369.241 51.904 369.896 52.603 L 371.85 54.819 C 374.459 57.727 376.458 59.816 377.864 61.093 C 379.893 62.971 383.675 65.804 389.215 69.583 C 394.198 72.987 397.859 75.917 400.189 78.374 C 400.535 78.72 400.851 78.968 401.129 79.126 C 401.077 79.291 401.009 79.479 400.941 79.689 C 400.791 79.967 400.475 80.35 400.001 80.854 C 399.776 81.177 399.566 81.74 399.363 82.544 L 398.686 85.024 L 387.147 81.868 C 382.735 80.666 379.405 79.93 377.15 79.652 C 373.97 79.479 371.572 79.314 369.97 79.163 C 368.919 79.066 367.325 78.863 365.198 78.562 C 363.071 78.239 361.461 78.021 360.387 77.924 C 359.462 77.826 357.62 77.713 354.861 77.585 C 352.532 77.458 350.689 77.3 349.336 77.097 C 348.457 76.969 347.157 76.721 345.427 76.346 C 343.699 75.97 342.406 75.722 341.556 75.594 C 338.947 75.264 336.716 75.361 334.866 75.895 C 335.339 74.828 335.67 73.994 335.844 73.378 C 336.121 72.424 336.234 70.936 336.181 68.907 C 336.129 67.502 336.054 66.465 335.955 65.789 C 335.889 65.458 335.835 65.158 335.806 64.887 C 336.798 66.037 337.812 67.262 338.85 68.569 C 338.827 68.892 339.076 69.193 339.602 69.471 C 339.903 69.621 340.669 69.937 341.894 70.41 C 346.555 72.086 350.539 73.265 353.846 73.941 C 358.281 74.896 362.378 75.196 366.137 74.843 C 367.062 74.745 367.739 74.618 368.167 74.467 C 369.016 74.219 369.768 73.769 370.421 73.115 C 371.076 72.461 371.535 71.725 371.812 70.898 C 372.316 69.471 372.226 68.133 371.549 66.879 C 371.347 66.45 370.948 65.887 370.346 65.188 C 369.843 64.609 369.196 63.971 368.392 63.272 C 367.814 62.776 367.318 62.453 366.889 62.295 C 366.791 61.98 366.693 61.642 366.588 61.281 C 366.009 59.38 365.461 57.952 364.935 56.998 C 364.536 56.269 363.882 55.285 362.98 54.03 C 362.431 53.279 361.98 52.753 361.626 52.452 C 361.574 52.43 360.965 52.039 359.785 51.288 C 358.935 50.762 358.131 50.086 357.379 49.259 C 358.304 48.508 359.078 47.711 359.71 46.855 C 360.138 46.276 360.702 45.367 361.401 44.112 C 362.356 42.534 362.582 41.317 362.078 40.468 C 361.875 40.093 361.492 39.732 360.913 39.379 C 360.409 39.071 360.033 38.83 359.785 38.665 C 359.672 38.425 359.507 38.169 359.297 37.914 C 358.845 37.313 358.131 36.486 357.155 35.434 C 356.124 34.33 355.402 33.496 354.974 32.917 C 354.546 32.316 354.208 31.865 353.959 31.565 C 353.561 31.061 353.155 30.678 352.757 30.4 C 352.598 30.302 352.441 30.212 352.268 30.137 C 352.388 29.604 352.201 28.995 351.704 28.296 C 350.802 26.869 349.637 25.651 348.209 24.652 L 348.172 24.615 C 348.426 24.126 348.652 23.585 348.847 22.999 C 349.051 22.3 349.148 21.737 349.148 21.309 C 349.126 20.768 348.945 20.114 348.623 19.355 C 348.623 19.34 348.623 19.333 348.623 19.318 C 348.224 18.213 347.81 17.439 347.382 16.988 C 346.983 16.635 346.683 16.365 346.48 16.162 C 346.127 15.839 345.901 15.523 345.803 15.223 C 345.676 14.824 345.593 14.599 345.54 14.546 C 345.413 14.374 345.225 14.298 344.976 14.321 C 344.751 14.321 344.548 14.396 344.376 14.546 C 344.127 14.772 343.984 15.087 343.962 15.486 C 343.962 15.839 344.052 16.184 344.225 16.537 C 344.473 16.966 344.939 17.529 345.615 18.228 C 345.894 18.589 346.12 18.964 346.292 19.355 C 346.683 20.272 346.788 21.271 346.593 22.36 C 346.315 23.886 345.488 25.05 344.112 25.854 C 343.939 25.959 343.691 26.095 343.361 26.268 C 343.293 26.237 343.217 26.2 343.135 26.155 L 339.113 23.976 C 338.384 23.525 337.858 23.488 337.534 23.863 C 337.309 24.141 337.309 24.464 337.534 24.84 C 337.662 25.043 337.91 25.276 338.286 25.554 C 339.662 26.531 341.196 27.545 342.872 28.597 C 342.744 29.123 342.406 29.634 341.857 30.137 C 341.556 30.438 341.067 30.836 340.391 31.339 C 339.857 31.79 339.556 32.226 339.489 32.654 C 336.865 35.066 334.949 38.034 333.738 41.558 C 333.505 41.55 333.28 41.588 333.062 41.67 C 332.483 41.918 332.009 42.384 331.633 43.06 C 331.386 43.564 331.13 44.24 330.882 45.089 C 330.626 46.058 330.476 46.832 330.431 47.418 C 330.326 47.388 330.22 47.358 330.13 47.343 C 329.656 47.215 329.251 47.208 328.927 47.306 C 328.551 47.433 328.311 47.493 328.213 47.493 C 328.191 47.493 327.987 47.381 327.612 47.155 C 326.936 46.629 326.146 46.427 325.244 46.554 C 324.666 46.652 324.32 46.877 324.191 47.23 C 324.191 47.253 324.169 47.283 324.154 47.306 C 324.048 47.095 323.959 46.945 323.891 46.855 C 323.688 46.577 323.463 46.419 323.214 46.366 C 322.914 46.314 322.635 46.427 322.388 46.705 C 322.139 46.983 322.012 47.291 322.012 47.644 C 322.034 48.117 322.327 48.711 322.877 49.409 C 323.027 49.597 323.177 49.785 323.327 49.973 C 323.027 50.153 322.696 50.409 322.35 50.724 C 321.62 51.348 321.087 51.716 320.734 51.814 C 320.155 51.964 319.441 51.904 318.592 51.626 C 316.915 51.1 315.487 50.123 314.307 48.696 C 313.833 48.072 313.607 47.516 313.63 47.043 C 313.652 46.592 313.946 46.088 314.495 45.54 C 314.66 45.39 314.818 45.254 314.983 45.127 C 315.111 45.194 315.246 45.217 315.396 45.202 C 315.675 45.179 316.021 44.976 316.449 44.601 C 316.494 44.563 316.547 44.526 316.599 44.488 C 316.787 44.458 317.051 44.42 317.389 44.375 C 317.712 44.3 317.953 44.165 318.103 43.962 C 318.298 43.692 318.298 43.406 318.103 43.098 C 318.479 42.745 318.817 42.392 319.117 42.046 C 319.742 41.242 320.223 40.641 320.546 40.243 C 321.124 39.544 321.674 39.018 322.2 38.665 C 322.342 38.575 322.463 38.492 322.576 38.402 C 322.463 38.537 322.41 38.703 322.425 38.89 C 322.425 39.138 322.651 39.379 323.101 39.604 C 324.379 40.303 325.409 40.791 326.184 41.069 C 327.386 41.468 328.492 41.558 329.491 41.332 C 330.746 41.032 332.047 40.153 333.4 38.703 C 334.324 37.703 335.129 36.696 335.806 35.697 C 337.008 33.916 337.475 32.391 337.196 31.114 C 337.069 30.438 336.761 29.964 336.256 29.686 C 336.009 29.559 335.731 29.521 335.43 29.574 C 335.106 29.649 334.881 29.814 334.753 30.062 C 334.655 30.265 334.625 30.663 334.678 31.264 C 334.73 32.143 334.475 33.067 333.926 34.044 C 333.603 34.645 333.009 35.457 332.159 36.486 C 331.386 37.388 330.709 38.041 330.13 38.44 C 329.28 39.041 328.439 39.304 327.612 39.229 C 327.259 39.206 326.499 38.943 325.319 38.44 C 324.395 38.041 323.643 37.936 323.065 38.139 C 323.011 38.154 322.959 38.169 322.914 38.177 C 323.289 37.914 323.53 37.703 323.628 37.538 C 323.801 37.26 323.853 36.959 323.778 36.636 C 323.726 36.283 323.552 36.073 323.252 35.998 C 322.952 35.945 322.598 36.073 322.2 36.373 C 320.922 37.275 319.396 38.778 317.614 40.881 L 316.374 42.309 C 315.78 42.279 315.179 42.354 314.57 42.534 C 313.84 42.76 313.217 43.136 312.691 43.662 C 312.141 44.165 311.736 44.789 311.488 45.54 C 311.24 46.239 311.165 46.967 311.262 47.719 C 311.51 49.8 313.013 51.588 315.772 53.091 C 317.148 53.842 318.404 54.271 319.531 54.368 C 320.583 54.466 321.613 54.293 322.613 53.842 C 323.62 53.399 324.433 52.76 325.056 51.926 C 325.763 52.715 326.552 53.564 327.424 54.481 C 327.634 55.127 328.01 55.879 328.551 56.735 C 329.13 57.562 330.107 58.711 331.484 60.191 L 333.663 62.596 C 333.663 62.596 333.626 62.641 333.588 62.671 C 333.362 62.896 333.212 63.144 333.137 63.422 C 333.04 63.775 333.122 64.377 333.4 65.226 C 333.934 66.826 334.107 68.441 333.926 70.072 C 333.573 70.267 333.16 70.695 332.686 71.349 C 332.603 71.409 332.513 71.469 332.423 71.537 C 328.664 74.189 325.62 77.51 323.289 81.493 C 322.966 82.071 322.478 82.943 321.824 84.122 C 321.245 85.152 320.696 85.986 320.17 86.639 C 319.742 87.188 318.99 87.992 317.915 89.044 C 316.885 90.043 316.148 90.847 315.697 91.448 C 314.945 92.447 314.307 93.687 313.781 95.168 C 313.427 96.121 313.044 97.459 312.615 99.187 C 312.066 101.193 311.811 102.741 311.864 103.845 C 311.917 105.175 312.367 106.828 313.217 108.804 C 314.141 111.036 315.194 113.26 316.374 115.491 C 317.201 117.069 317.674 117.971 317.802 118.196 C 318.17 118.948 318.471 119.647 318.705 120.3 L 299.648 130.782 C 296.017 132.788 293.206 134.425 291.229 135.703 C 289.5 136.853 288.245 137.634 287.471 138.033 L 285.704 138.896 C 284.975 139.219 284.404 139.535 283.975 139.835 C 283.652 140.039 283.344 140.263 283.036 140.512 C 282.93 140.512 282.817 140.512 282.697 140.512 C 280.968 140.414 278.954 140.174 276.646 139.798 C 276.57 139.798 274.564 139.445 270.633 138.746 C 255.245 135.944 239.812 134.651 224.327 134.877 C 223.124 134.929 222.56 135.275 222.636 135.928 C 222.688 136.401 223.177 136.702 224.102 136.831 C 226.53 137.055 231.859 137.431 240.075 137.957 C 246.668 138.386 251.975 138.844 256.011 139.347 C 258.59 139.7 261.664 140.174 265.22 140.775 C 267.25 141.128 270.294 141.662 274.353 142.39 C 276.36 142.713 277.864 142.931 278.864 143.029 C 279.863 143.134 280.803 143.194 281.682 143.217 C 281.999 143.42 282.404 143.42 282.885 143.217 C 283.306 143.607 284.042 143.728 285.102 143.593 C 286.283 143.42 287.17 143.344 287.772 143.367 C 288.749 143.442 289.478 143.765 289.951 144.344 L 282.697 148.927 C 277.864 151.955 274.165 154.337 271.61 156.065 C 267.603 158.77 264.092 161.377 261.086 163.879 L 252.629 171.242 C 252.584 171.287 252.531 171.318 252.478 171.355 C 252.419 171.115 252.298 170.882 252.103 170.641 C 251.9 170.438 251.449 170.093 250.749 169.589 C 249.246 168.56 247.608 167.013 245.826 164.931 C 242.917 161.603 241.413 159.874 241.316 159.747 C 240.512 158.92 239.497 157.958 238.271 156.854 C 234.039 152.947 230.506 149.851 227.672 147.575 C 225.364 145.719 223.898 144.479 223.275 143.855 C 221.696 142.375 220.516 140.91 219.742 139.46 C 219.742 139.106 219.839 138.686 220.043 138.183 C 220.32 137.483 220.478 137.055 220.531 136.905 C 220.682 136.432 220.666 135.981 220.494 135.552 C 220.29 135.079 219.982 134.824 219.554 134.801 C 218.952 134.778 218.441 135.237 218.013 136.191 C 217.464 137.341 217.148 138.22 217.073 138.821 C 216.922 140.474 217.712 142.24 219.441 144.118 C 220.193 144.967 221.771 146.447 224.177 148.551 L 234.4 157.267 C 236.152 158.77 237.445 159.934 238.271 160.761 C 238.85 161.34 240.564 163.353 243.42 166.809 C 245.089 168.823 246.63 170.401 248.043 171.543 C 247.976 171.671 247.9 171.798 247.818 171.918 C 247.39 172.595 246.765 173.647 245.939 175.074 C 245.51 175.698 244.849 176.479 243.947 177.403 C 242.894 178.456 242.195 179.207 241.842 179.658 C 240.616 181.213 239.752 183.076 239.248 185.256 C 238.797 187.209 238.67 189.297 238.872 191.529 C 238.903 191.837 238.94 192.153 238.985 192.468 C 233.633 196.616 228.439 201.184 223.387 206.181 C 222.162 207.406 221.32 208.434 220.87 209.261 C 220.193 210.561 219.892 212.131 219.967 213.957 C 219.989 215.032 220.193 216.459 220.569 218.24 C 219.877 217.917 219.238 217.955 218.652 218.353 C 218.028 218.751 217.584 219.653 217.336 221.058 C 216.757 224.792 217.096 228.947 218.351 233.53 C 219.126 236.363 220.621 240.352 222.824 245.515 L 227.108 255.469 C 228.138 257.776 228.89 259.392 229.364 260.316 C 230.243 262.044 231.468 264.125 233.047 266.552 C 235.355 270.212 237.106 272.939 238.308 274.742 C 240.316 277.725 242.233 280.34 244.059 282.594 C 245.735 284.698 247.345 285.938 248.87 286.313 C 249.795 286.516 250.99 286.479 252.441 286.201 C 254.305 285.855 256.094 285.381 257.816 284.773 C 260.161 286.599 262.281 287.23 264.167 286.651 C 264.521 286.576 264.717 286.328 264.769 285.9 C 264.806 285.592 264.754 285.314 264.618 285.073 C 264.663 285.073 264.701 285.073 264.731 285.073 C 268.543 285.352 272.023 285.164 275.18 284.51 C 276.857 284.134 279.224 283.435 282.284 282.406 L 284.088 281.768 C 284.351 282.06 284.615 282.353 284.877 282.631 C 286.208 284.082 287.396 285.171 288.448 285.9 C 289.899 286.929 291.342 287.493 292.771 287.591 C 293.424 287.162 293.582 286.479 293.259 285.524 C 293.161 285.239 293.034 284.969 292.883 284.698 C 293.289 284.727 293.672 284.773 294.048 284.848 C 295.258 285.818 296.348 286.193 297.318 285.975 C 297.348 285.99 297.378 286.005 297.394 286.013 C 297.994 286.366 298.461 286.591 298.784 286.689 C 299.183 286.787 299.701 286.816 300.325 286.764 L 314.495 286.163 C 316.998 286.11 318.87 285.997 320.095 285.825 C 320.974 285.697 322.365 285.397 324.267 284.923 C 326.071 284.494 327.477 284.224 328.476 284.097 C 329.604 283.969 331.333 283.871 333.663 283.796 C 334.663 283.721 335.565 283.586 336.369 283.383 C 334.054 292.211 332.137 301.1 330.619 310.056 C 329.025 310.92 327.244 311.889 325.282 312.949 C 295.612 328.878 265.844 343.529 235.979 356.903 C 237.685 356.731 239.534 356.287 241.542 355.589 C 242.894 355.137 244.676 354.424 246.878 353.448 C 262.611 346.61 280.081 338.307 299.272 328.539 C 306.902 324.647 317.223 319.268 330.243 312.385 C 330.175 312.896 330.1 313.415 330.018 313.926 C 328.815 321.589 328.153 325.812 328.025 326.586 C 327.124 331.342 326.034 335.437 324.755 338.87 C 324.553 339.42 323.869 341.185 322.689 344.167 C 321.808 346.294 321.185 348.075 320.809 349.502 C 320.411 351.103 320.524 352.223 321.147 352.846 C 321.674 353.425 322.613 353.657 323.966 353.559 C 328.123 353.282 332.31 351.734 336.519 348.901 C 339.73 346.745 343.173 343.657 346.856 339.622 C 353.696 332.131 360.86 322.679 368.355 311.258 C 376.797 297.786 383.141 287.688 387.373 280.978 C 390.357 276.32 392.582 272.811 394.063 270.459 C 396.597 266.402 398.739 262.848 400.49 259.79 C 403.519 254.478 406.676 248.354 409.962 241.42 C 411.939 237.264 414.787 230.991 418.494 222.598 C 418.847 221.749 419.08 221.11 419.208 220.682 C 419.41 219.953 419.471 219.292 419.396 218.691 C 419.245 217.638 418.667 216.76 417.667 216.061 C 416.764 215.385 415.727 215.024 414.547 214.971 C 413.57 214.919 412.495 215.069 411.315 215.422 C 410.563 215.625 409.511 216.008 408.158 216.587 C 391.372 223.725 373.955 230.285 355.914 236.273 C 354.539 236.723 353.418 237.347 352.569 238.151 C 351.569 239.15 351.291 240.157 351.742 241.156 L 413.231 218.616 C 414.434 218.188 415.276 218.217 415.75 218.691 C 416.276 219.216 416.261 220.096 415.713 221.321 C 408.368 238.174 399.401 255.53 388.801 273.39 C 379.728 288.665 369.009 305.022 356.628 322.454 C 351.193 330.117 346.428 335.918 342.345 339.848 C 338.594 343.454 334.746 346.257 330.807 348.262 C 332.272 347.241 333.724 346.076 335.167 344.769 C 338.301 341.937 341.947 337.819 346.104 332.409 C 372.564 298.223 394.236 261.165 411.127 221.246 C 409.721 221.17 408.443 222.335 407.293 224.739 C 401.279 237.535 396.356 247.671 392.522 255.132 C 386.862 266.176 381.322 275.967 375.909 284.51 C 373.677 288.064 370.211 293.323 365.499 300.288 L 353.546 317.945 C 348.156 325.887 343.826 331.718 340.541 335.452 C 335.445 341.26 330.183 345.633 324.755 348.563 C 326.77 343.522 328.514 337.811 329.98 331.432 C 331.01 326.924 332.258 320.147 333.738 311.108 C 333.776 310.905 333.799 310.687 333.814 310.47 C 339.038 307.735 344.646 304.767 350.652 301.566 C 349.998 300.987 348.976 301.025 347.57 301.678 C 344.863 302.88 342.195 304.12 339.564 305.397 C 338.301 306.021 336.528 306.938 334.227 308.14 C 335.513 300.491 336.603 294.706 337.497 290.784 C 339.173 283.323 341.233 276.793 343.661 271.211 C 343.946 270.55 344.12 269.979 344.188 269.483 C 344.51 269.452 344.818 269.415 345.089 269.37 C 346.194 269.198 347.397 268.859 348.698 268.356 C 349.524 268.003 350.652 267.469 352.08 266.74 C 357.094 264.208 362.206 261.443 367.415 258.438 C 370.948 256.431 373.526 254.658 375.157 253.103 C 375.608 252.675 376.337 251.924 377.338 250.849 C 378.24 249.873 378.969 249.135 379.517 248.632 C 380.367 247.904 380.894 247.317 381.096 246.867 C 381.299 246.514 381.381 246.138 381.359 245.74 C 381.336 245.289 381.186 244.936 380.908 244.687 C 380.405 244.237 379.533 244.222 378.278 244.65 L 354.673 252.953 C 350.336 254.486 346.51 255.868 343.21 257.085 C 343.383 256.897 343.548 256.65 343.699 256.334 C 344.022 255.657 344.353 254.531 344.675 252.953 C 344.999 251.428 345.352 250.308 345.728 249.609 C 346.254 248.685 346.555 248.084 346.63 247.806 C 346.728 247.483 346.743 247.145 346.668 246.792 C 346.57 246.439 346.382 246.176 346.104 246.002 C 346.329 244.748 346.668 243.501 347.119 242.246 C 347.367 241.517 347.42 240.991 347.269 240.668 C 347.096 240.195 346.683 239.954 346.029 239.954 C 345.706 239.954 345.217 240.089 344.563 240.368 C 342.781 241.246 340.714 242.607 338.361 244.463 C 338.038 244.741 337.783 245.026 337.61 245.327 C 337.437 245.702 337.445 246.018 337.647 246.265 C 337.798 246.468 338.151 246.589 338.7 246.641 C 340.602 246.792 341.872 247.28 342.496 248.107 C 343.27 249.135 343.232 250.751 342.383 252.953 C 341.654 254.831 341.421 256.259 341.669 257.235 C 341.767 257.378 341.909 257.461 342.082 257.499 C 339.331 258.55 336.971 259.475 335.017 260.279 C 328.777 263.006 324.079 265.035 320.922 266.364 C 320.268 266.59 319.772 266.875 319.418 267.229 C 319.215 267.454 319.095 267.702 319.042 267.98 C 318.968 268.303 319.004 268.581 319.155 268.806 C 319.584 269.506 320.471 269.542 321.824 268.919 C 327.59 266.214 331.882 264.276 334.716 263.096 C 339.527 261.045 343.924 259.414 347.908 258.212 C 348.81 257.934 350.374 257.476 352.607 256.822 C 354.584 256.274 356.14 255.808 357.266 255.432 C 358.319 255.079 361.273 253.99 366.137 252.164 C 369.746 250.812 372.737 249.857 375.12 249.309 C 373.714 250.962 371.549 252.667 368.618 254.418 C 366.46 255.695 362.92 257.626 357.981 260.204 L 351.855 263.36 C 350.224 264.186 349.021 264.764 348.247 265.087 C 346.87 265.666 345.601 266.064 344.45 266.289 C 343.699 266.417 342.759 266.5 341.631 266.552 C 340.376 266.605 339.436 266.642 338.813 266.665 C 336.73 266.763 333.64 267.244 329.529 268.093 C 328.68 268.243 328.041 268.469 327.612 268.768 C 326.936 269.273 326.687 269.843 326.861 270.497 C 327.011 271.098 327.484 271.473 328.288 271.624 C 328.717 271.677 329.356 271.602 330.206 271.399 C 334.34 270.324 337.369 269.73 339.301 269.633 C 339.452 269.617 339.805 269.61 340.353 269.595 C 340.256 269.828 340.165 270.083 340.09 270.346 C 339.151 273.382 338.263 276.426 337.422 279.476 C 336.753 279.296 336.242 279.16 335.88 279.063 C 334.956 278.837 333.573 278.927 331.746 279.326 C 329.439 279.799 325.98 280.362 321.373 281.016 C 317.712 281.49 315.119 281.73 313.593 281.73 C 311.36 281.73 310.022 281.752 309.571 281.805 C 308.766 281.88 307.451 282.158 305.625 282.631 C 303.948 283.029 302.617 283.255 301.641 283.308 C 300.761 283.36 299.423 283.27 297.618 283.045 C 297.063 282.977 296.544 282.909 296.078 282.857 C 295.641 282.316 294.905 281.49 293.86 280.378 C 282.156 267.928 271.963 254.245 263.266 239.315 C 254.598 224.416 247.728 208.796 242.668 192.468 C 242.24 191.063 241.955 189.966 241.805 189.163 C 241.601 187.907 241.594 186.78 241.767 185.781 C 242.015 184.452 242.691 183.076 243.796 181.649 C 244.045 181.296 245.096 180.093 246.953 178.042 C 247.021 177.967 247.089 177.892 247.141 177.817 C 247.028 178.139 246.901 178.478 246.765 178.831 C 246.337 179.958 246.375 180.733 246.878 181.161 C 247.202 181.408 247.63 181.446 248.156 181.273 C 248.48 181.145 248.833 180.898 249.209 180.522 C 249.66 180.048 250.208 179.32 250.862 178.343 C 251.614 177.268 252.156 176.525 252.478 176.126 C 253.103 175.352 253.253 174.773 252.93 174.398 L 252.704 174.173 C 252.629 174.098 252.577 174.008 252.554 173.91 C 252.532 173.835 252.539 173.722 252.591 173.571 C 252.666 173.369 252.704 173.256 252.704 173.233 C 252.756 172.971 252.659 172.685 252.403 172.369 C 252.434 172.339 252.456 172.301 252.478 172.257 C 252.478 172.242 252.478 172.212 252.478 172.181 C 253.975 171.806 255.523 171.077 257.139 170.003 C 257.868 169.53 259.454 168.312 261.913 166.359 C 265.393 163.556 270.67 159.919 277.736 155.464 L 285.403 150.58 C 288.688 148.551 290.703 147.312 291.455 146.861 L 294.537 145.057 C 295.265 144.682 295.777 144.291 296.078 143.893 C 296.281 143.645 296.401 143.344 296.454 142.991 C 296.476 142.638 296.401 142.338 296.228 142.09 C 295.928 141.714 295.364 141.474 294.537 141.376 C 292.83 141.121 291.304 140.925 289.951 140.775 L 313.818 126.762 C 316.374 125.312 318.268 124.17 319.493 123.344 C 319.516 123.328 319.546 123.298 319.568 123.268 C 319.764 123.809 319.989 124.245 320.245 124.583 C 320.32 124.658 320.606 124.958 321.11 125.485 C 321.463 125.861 321.696 126.198 321.824 126.499 C 321.899 126.694 321.937 126.905 321.937 127.138 C 321.914 127.13 321.892 127.115 321.862 127.1 C 321.335 126.777 320.621 126.965 319.719 127.663 C 318.441 128.618 317.051 129.865 315.547 131.421 C 314.57 132.397 313.946 133.277 313.668 134.05 C 313.495 134.599 313.442 135.14 313.518 135.665 C 313.593 136.244 313.818 136.702 314.194 137.055 C 314.57 137.454 315.111 137.709 315.81 137.807 C 316.239 137.882 316.863 137.897 317.69 137.845 L 321.26 137.619 C 322.034 137.567 322.651 137.446 323.101 137.243 C 323.26 137.168 323.395 137.085 323.515 136.98 C 325.47 136.86 327.597 136.575 329.905 136.116 C 331.296 135.831 333.303 135.35 335.918 134.689 C 336.242 134.613 336.573 134.524 336.895 134.425 C 336.94 134.434 336.978 134.434 337.008 134.425 C 354.997 129.918 368.482 126.273 377.451 123.493 C 392.259 118.91 405.226 113.876 416.352 108.391 C 421.937 105.611 428.093 102.215 434.806 98.21 C 438.812 95.806 444.781 92.087 452.696 87.053 L 459.312 82.882 L 459.424 82.807 C 459.665 82.875 459.928 82.89 460.213 82.845 C 460.589 82.747 461.13 82.454 461.83 81.981 L 463.671 80.591 C 464.724 79.787 465.498 79.178 466.002 78.75 C 466.806 78.074 467.483 77.458 468.031 76.909 C 470.113 74.881 471.978 72.739 473.631 70.485 C 473.654 70.455 473.676 70.417 473.707 70.372 L 476.15 69.17 C 476.826 68.772 477.202 68.532 477.277 68.456 C 477.653 68.081 477.841 67.69 477.841 67.292 C 477.864 66.991 477.766 66.691 477.54 66.39 C 477.488 66.323 477.42 66.262 477.352 66.202 C 478.953 65.954 480.57 65.819 482.201 65.789 L 472.917 74.43 C 469.031 78.059 466.1 80.756 464.122 82.507 C 460.793 85.437 457.695 87.939 454.839 90.02 C 451.178 92.748 446.532 95.745 440.895 98.999 C 434.302 102.831 428.025 106.137 422.064 108.917 C 416.051 111.675 409.15 114.417 401.355 117.144 C 396.672 118.798 389.591 121.127 380.119 124.132 L 353.959 132.435 C 345.413 135.14 339.166 136.928 335.205 137.807 C 329.168 139.182 322.974 140.061 316.637 140.437 C 315.713 140.512 314.893 140.414 314.194 140.136 C 313.314 139.813 312.864 139.287 312.841 138.558 C 312.841 138.408 312.893 138.033 312.991 137.431 C 313.089 137.003 313.067 136.665 312.916 136.417 C 312.638 135.914 312.187 135.831 311.563 136.154 C 310.961 136.455 310.601 136.89 310.473 137.469 C 310.42 137.777 310.406 138.078 310.435 138.37 C 310.218 138.588 309.954 138.919 309.646 139.347 C 309.496 139.52 309.217 139.745 308.819 140.023 C 308.443 140.301 308.18 140.527 308.03 140.7 C 307.782 140.978 307.639 141.301 307.616 141.676 C 307.564 142.074 307.67 142.375 307.917 142.578 C 308.166 142.781 308.571 142.879 309.12 142.879 L 313.217 142.916 C 313.743 142.916 314.119 142.856 314.345 142.728 C 314.51 142.66 314.645 142.563 314.757 142.427 C 315.765 142.631 316.968 142.721 318.366 142.691 C 327.364 142.615 335.918 141.211 344.037 138.483 C 345.864 137.859 348.6 136.905 352.231 135.628 C 353.336 135.275 355.214 134.764 357.868 134.088 C 360.296 133.464 362.176 132.923 363.506 132.472 C 364.957 131.999 367.13 131.172 370.009 129.993 C 372.865 128.843 375.03 128.024 376.511 127.55 C 378.165 127.025 380.48 126.439 383.464 125.785 C 386.794 125.033 389.116 124.485 390.418 124.132 C 392.5 123.554 394.912 122.727 397.671 121.653 C 399.25 121.029 401.618 120.075 404.775 118.798 C 406.676 118.069 409.533 116.994 413.344 115.566 C 416.78 114.267 419.606 113.11 421.838 112.11 C 425.072 110.66 429.634 108.316 435.52 105.085 C 440.428 102.403 444.127 100.329 446.607 98.849 C 450.667 96.445 454.2 94.093 457.207 91.786 C 460.116 89.555 463.784 86.399 468.219 82.319 L 482.539 69.283 C 483.494 68.434 484.178 67.577 484.607 66.728 C 485.132 65.654 485.132 64.722 484.607 63.948 C 483.855 62.874 482.261 62.573 479.833 63.047 L 469.986 65.038 C 469.692 65.098 469.422 65.158 469.159 65.226 C 469.062 65.203 468.963 65.173 468.858 65.15 C 467.678 64.85 466.618 64.722 465.663 64.775 C 464.739 64.85 464.047 64.865 463.596 64.812 L 463.483 64.775 C 463.454 64.73 463.416 64.677 463.371 64.624 C 462.942 64.099 462.018 63.573 460.589 63.047 C 460.251 62.919 458.605 62.235 455.665 60.98 C 475.819 58.471 496.221 56.908 516.855 56.284 C 519.133 56.209 525.8 56.082 536.85 55.909 C 543.842 55.856 548.863 55.946 551.922 56.172 C 555.583 56.472 559.665 57.058 564.175 57.937 C 566.956 58.486 571.001 59.38 576.315 60.605 C 578.27 61.108 579.359 61.86 579.585 62.859 C 579.608 62.979 579.622 63.099 579.622 63.234 C 579.412 63.325 579.224 63.445 579.059 63.61 C 578.781 63.911 578.48 64.534 578.157 65.489 C 574.924 76.233 571.429 86.902 567.67 97.497 C 565.889 102.508 564.348 106.378 563.047 109.105 C 561.093 113.185 558.387 117.783 554.929 122.892 C 550.712 129.144 545.901 135.53 540.496 142.052 C 540.429 141.886 540.331 141.736 540.195 141.601 C 539.947 141.354 539.609 141.15 539.181 141 C 539.158 141 538.752 140.888 537.978 140.662 C 536.399 140.234 534.768 139.437 533.092 138.257 C 532.017 137.529 530.558 136.379 528.732 134.801 C 526.123 132.548 524.184 130.842 522.907 129.692 C 520.448 127.491 518.606 125.762 517.381 124.508 C 515.449 122.502 513.908 120.541 512.758 118.61 C 511.277 116.13 510.074 113.148 509.15 109.669 C 508.601 107.489 507.985 104.281 507.308 100.051 C 506.504 95.093 506.083 91.35 506.031 88.818 C 505.978 86.812 506.09 84.145 506.368 80.816 C 506.842 74.903 507.436 70.207 508.135 66.728 C 508.459 65.248 508.683 64.151 508.812 63.422 C 509.059 62.145 509.21 61.033 509.263 60.079 C 509.285 59.726 509.21 59.403 509.037 59.102 C 508.834 58.801 508.608 58.726 508.361 58.877 C 507.06 63.858 506.067 68.982 505.392 74.242 C 505.038 76.999 504.715 80.305 504.414 84.16 C 504.264 86.414 504.203 88.104 504.226 89.231 C 504.249 90.606 504.437 92.628 504.79 95.28 C 505.639 101.817 506.496 106.738 507.346 110.044 C 508.751 115.432 510.751 119.902 513.36 123.456 C 515.141 125.861 517.779 128.565 521.29 131.57 C 522.719 132.825 524.913 134.651 527.867 137.055 C 530.295 139.032 532.212 140.437 533.618 141.263 C 535.565 142.458 537.444 143.21 539.256 143.518 C 534.354 149.401 528.98 155.389 523.132 161.475 C 515.314 169.589 503.264 181.198 486.974 196.3 C 482.013 200.861 479.216 203.415 478.593 203.964 C 476.24 206.016 472.632 209.051 467.769 213.056 C 458.372 220.794 451.133 226.505 446.044 230.186 C 437.722 236.198 429.844 240.931 422.402 244.388 C 420.125 245.386 418.418 246.153 417.291 246.679 C 415.337 247.603 413.683 248.467 412.33 249.271 C 421.177 247.093 430.295 243.148 439.692 237.437 C 446.585 233.23 454.726 227.331 464.122 219.743 C 478.924 207.759 493.447 194.827 507.684 180.935 C 507.736 181.363 507.82 181.829 507.947 182.325 L 509.451 189.801 C 509.676 190.853 509.804 191.769 509.827 192.543 C 509.879 193.272 509.917 194.369 509.94 195.85 C 510.015 196.624 510.149 197.487 510.352 198.442 C 510.781 200.072 511.24 201.357 511.743 202.311 C 511.916 202.634 512.18 203.1 512.533 203.701 C 512.833 204.28 513.021 204.776 513.096 205.204 L 514.599 205.392 L 517.494 203.401 C 518.772 202.499 519.636 201.785 520.087 201.26 C 520.816 200.41 521.275 199.546 521.478 198.667 C 521.628 198.066 521.718 197.315 521.741 196.413 C 521.718 195.413 521.718 194.662 521.741 194.159 C 521.793 193.43 521.967 192.416 522.267 191.116 L 523.206 186.87 C 523.56 185.421 523.77 184.316 523.845 183.565 C 523.944 182.738 523.996 181.498 523.996 179.846 L 523.996 166.546 C 523.996 165.562 524.056 164.826 524.184 164.33 C 527.935 160.437 531.671 156.464 535.385 152.421 C 541.315 145.967 546.089 140.339 549.704 135.552 C 550.652 135.846 551.667 135.959 552.749 135.891 C 552.727 135.794 552.802 135.681 552.974 135.552 L 553.35 135.441 C 553.554 135.29 553.651 135.004 553.651 134.576 L 553.688 131.871 C 553.688 131.398 553.591 131.067 553.388 130.894 C 553.321 130.842 553.245 130.805 553.162 130.782 C 554.418 128.94 556.049 126.439 558.048 123.268 C 560.356 119.639 562.123 116.754 563.348 114.627 C 565.205 111.396 566.746 108.391 567.971 105.611 C 568.82 103.68 569.7 101.418 570.602 98.812 C 571.001 97.662 571.767 95.355 572.895 91.899 L 580.525 68.156 C 580.998 67.915 581.397 67.322 581.728 66.39 C 582.757 63.911 582.915 62.032 582.216 60.755 C 581.667 59.831 580.412 59.027 578.457 58.351 C 570.587 55.698 561.581 54.015 551.434 53.317 C 544.367 52.843 535.106 52.813 523.657 53.241 C 523.485 53.241 523.312 53.241 523.132 53.241 C 523.004 52.918 522.891 52.678 522.794 52.528 C 522.47 52.002 521.989 51.799 521.365 51.926 L 521.365 52.077 C 521.14 52.024 520.891 52.137 520.613 52.415 Z M 464.385 67.066 C 465.235 67.126 466.099 67.254 466.979 67.442 C 466.994 67.953 467.189 68.314 467.581 68.532 C 468.009 68.779 468.67 68.719 469.572 68.344 C 469.647 68.314 469.723 68.276 469.798 68.231 C 470.309 68.426 470.813 68.622 471.302 68.832 C 468.949 72.04 466.249 74.866 463.221 77.322 C 462.22 78.202 461.168 78.99 460.063 79.689 C 459.778 79.877 459.545 80.05 459.349 80.215 C 459.146 80.125 458.936 80.08 458.71 80.065 C 458.109 80.012 457.23 80.35 456.079 81.079 C 454.238 82.319 452.433 83.521 450.667 84.686 C 450.75 84.588 450.84 84.483 450.93 84.385 L 462.243 71.8 C 463.273 70.673 463.882 69.734 464.085 68.982 C 464.22 68.434 464.258 67.795 464.197 67.066 L 464.385 67.066 Z M 458.485 65.489 C 459.334 65.714 459.837 65.864 459.988 65.939 C 460.537 66.165 460.906 66.48 461.078 66.879 C 461.402 67.577 461.056 68.532 460.025 69.734 L 458.936 70.898 C 458.62 70.402 458.161 69.937 457.545 69.508 C 457.071 69.185 456.342 68.795 455.365 68.344 C 452.283 66.939 449.84 66.015 448.036 65.564 C 446.48 65.165 444.969 64.948 443.488 64.925 C 442.961 64.925 442.586 64.985 442.36 65.113 C 441.857 65.391 441.661 65.954 441.759 66.803 C 441.781 67.006 441.835 67.314 441.91 67.743 C 441.985 68.118 442.007 68.434 441.985 68.682 C 444.338 68.329 446.931 69.193 449.765 71.274 C 450.569 71.853 451.058 72.191 451.23 72.288 C 451.81 72.664 452.336 72.912 452.809 73.04 C 452.861 73.062 453.133 73.137 453.636 73.265 C 453.959 73.34 454.222 73.438 454.426 73.566 C 454.651 73.738 454.967 74.016 455.365 74.392 C 455.463 74.46 455.576 74.512 455.703 74.542 L 449.69 81.267 C 449.036 82.003 448.404 82.68 447.81 83.296 C 447.833 82.935 447.848 82.522 447.848 82.056 C 447.848 81.079 447.735 80.328 447.509 79.802 C 447.337 79.449 447.081 79.163 446.758 78.938 C 446.405 78.712 446.059 78.622 445.706 78.675 C 444.931 78.803 444.352 79.561 443.977 80.967 L 443.187 83.671 C 442.811 85.024 442.571 86.001 442.473 86.602 C 442.322 87.368 442.211 88.172 442.135 89.006 C 441.526 89.547 440.909 90.043 440.293 90.509 C 440.301 90.253 440.301 89.983 440.293 89.682 C 440.27 88.533 440.316 87.594 440.444 86.865 C 440.646 85.79 440.744 85.174 440.744 85.024 L 440.782 83.596 L 441.045 82.206 C 441.196 81.327 441.135 80.651 440.857 80.178 C 440.707 79.877 440.354 79.524 439.805 79.126 C 439.331 78.75 438.888 78.51 438.489 78.412 C 437.835 78.284 437.061 78.577 436.159 79.276 C 434.483 80.576 433.174 82.191 432.25 84.122 L 429.769 90.171 L 428.116 96.858 C 427.928 97.631 427.777 98.301 427.665 98.849 C 426.92 99.292 426.184 99.72 425.447 100.126 C 424.35 100.735 423.244 101.336 422.139 101.929 C 421.591 98.075 421.575 93.778 422.102 89.044 C 422.478 85.663 423.267 81.177 424.47 75.594 C 425.147 72.341 425.845 69.884 426.574 68.231 C 427.078 67.081 428.018 65.316 429.394 62.934 C 430.318 61.409 431.07 60.267 431.649 59.515 C 432.551 58.336 433.513 57.434 434.542 56.81 C 434.73 56.698 434.888 56.6 435.031 56.51 C 435.092 56.683 435.167 56.825 435.257 56.923 C 435.46 57.171 435.745 57.299 436.121 57.299 C 436.474 57.276 436.745 57.133 436.948 56.886 C 436.986 56.938 437.024 56.983 437.061 57.036 C 437.414 57.487 438.173 57.862 439.353 58.163 C 444.969 59.538 450.291 61.529 455.327 64.136 C 456.756 64.865 457.808 65.316 458.485 65.489 Z M 457.244 71.687 C 457.575 71.8 457.876 71.853 458.147 71.837 L 456.793 73.34 C 456.17 72.957 455.696 72.664 455.365 72.476 C 454.44 72.153 453.749 71.898 453.298 71.725 C 452.795 71.522 451.343 70.673 448.938 69.17 C 447.209 68.096 445.706 67.577 444.428 67.63 C 443.624 67.63 443.203 67.457 443.149 67.104 C 443.924 67.006 444.804 67.044 445.781 67.217 C 446.329 67.292 447.209 67.495 448.412 67.818 C 450.066 68.269 451.291 68.644 452.095 68.945 C 453.425 69.418 454.553 69.982 455.477 70.635 C 456.282 71.236 456.868 71.59 457.244 71.687 Z M 551.622 132.998 L 551.622 133.186 C 551.622 133.637 551.561 133.975 551.434 134.2 C 551.088 134.328 550.817 134.381 550.607 134.35 C 550.96 133.893 551.298 133.442 551.622 132.998 Z M 419.809 43.06 C 420.433 42.61 420.787 42.362 420.861 42.309 C 421.29 42.061 421.688 41.933 422.064 41.933 C 422.741 41.956 423.47 42.459 424.244 43.436 C 425.469 44.916 426.372 46.081 426.95 46.93 C 427.853 48.305 428.476 49.62 428.83 50.875 C 429.056 51.679 429.258 52.204 429.431 52.452 C 429.604 52.7 429.829 52.881 430.107 52.978 C 430.408 53.106 430.671 53.106 430.897 52.978 C 431.521 52.7 431.701 52.024 431.423 50.95 C 431.047 49.349 430.311 47.704 429.206 46.028 C 428.709 45.277 428.018 44.36 427.138 43.286 C 427.552 43.211 428.01 43.06 428.529 42.835 L 429.994 42.159 C 430.499 41.986 431.296 41.918 432.4 41.971 L 432.701 42.009 L 432.889 42.309 C 433.167 42.858 433.543 43.414 434.016 43.962 C 434.265 44.21 434.43 44.428 434.505 44.601 C 434.58 44.804 434.596 45.217 434.542 45.841 C 434.52 46.464 434.655 47.381 434.956 48.583 L 435.219 49.898 C 435.317 50.574 435.369 51.34 435.369 52.189 C 435.369 52.866 435.332 53.369 435.257 53.692 L 435.181 53.955 C 435.114 53.94 435.054 53.925 434.993 53.918 C 434.52 53.82 433.956 53.933 433.303 54.256 C 432.528 54.654 431.649 55.368 430.671 56.397 C 426.988 60.304 424.32 64.835 422.666 69.997 C 422.192 71.522 421.553 74.242 420.749 78.149 C 420.313 80.418 419.96 82.432 419.697 84.197 C 419.253 83.469 418.742 82.928 418.155 82.582 C 418.118 82.559 418.065 82.537 418.005 82.507 C 418.028 82.319 418.028 82.101 418.005 81.868 C 417.908 80.914 417.779 80.193 417.629 79.689 C 417.381 78.915 416.99 78.337 416.464 77.961 C 416.035 77.638 415.396 77.435 414.547 77.36 C 414.787 77.074 414.938 76.819 414.998 76.609 C 415.126 76.233 415.111 75.73 414.961 75.106 C 414.833 74.49 414.742 74.047 414.698 73.791 C 414.803 73.596 414.893 73.37 414.961 73.115 C 415.111 72.439 415.239 71.935 415.337 71.612 C 415.487 71.236 415.765 70.763 416.164 70.185 C 416.637 69.486 416.938 69.02 417.065 68.795 C 417.246 68.486 417.509 67.81 417.854 66.766 C 417.915 66.788 417.983 66.803 418.042 66.803 C 418.366 66.803 418.667 66.706 418.945 66.503 C 419.117 66.375 419.335 66.165 419.584 65.864 C 419.907 65.511 420.125 65.286 420.223 65.188 L 421.463 64.286 C 421.967 63.836 422.268 63.437 422.365 63.084 C 422.418 62.836 422.402 62.581 422.327 62.333 C 422.23 62.055 422.064 61.867 421.838 61.769 C 421.688 61.694 421.365 61.679 420.861 61.732 L 419.809 61.882 C 419.727 61.814 419.621 61.754 419.509 61.694 C 419.133 61.491 418.757 61.454 418.381 61.581 C 417.854 61.784 417.344 62.31 416.839 63.159 C 416.592 63.61 416.148 64.572 415.525 66.052 L 415.487 66.052 C 415.389 65.902 415.283 65.654 415.186 65.301 L 414.773 63.723 C 414.57 63.249 414.449 62.844 414.397 62.521 C 414.269 62.07 414.232 61.469 414.284 60.717 L 414.284 56.096 C 414.336 54.594 414.081 53.542 413.532 52.941 C 413.886 52.715 414.307 52.618 414.81 52.64 C 415.261 52.64 415.697 52.753 416.126 52.978 C 416.75 53.332 417.366 53.993 417.967 54.97 C 418.418 55.698 418.742 56.412 418.945 57.111 C 419.02 57.284 419.079 57.547 419.133 57.9 C 419.133 57.945 419.133 57.982 419.133 58.012 C 419.005 58.238 418.892 58.433 418.794 58.614 C 418.592 58.967 418.456 59.275 418.381 59.553 C 418.329 59.981 418.441 60.289 418.719 60.492 C 419.072 60.717 419.433 60.695 419.809 60.417 C 420.012 60.304 420.238 60.056 420.486 59.666 C 420.591 59.666 420.696 59.658 420.787 59.628 C 421.177 59.275 421.418 58.824 421.5 58.275 C 421.996 57.629 422.463 57.058 422.891 56.547 C 423.568 55.796 424.184 55.157 424.733 54.631 C 424.778 54.586 424.816 54.541 424.846 54.481 C 424.996 54.767 425.154 55.12 425.334 55.533 C 425.613 56.209 425.845 56.698 426.048 56.998 C 426.297 57.351 426.597 57.614 426.95 57.787 C 427.349 57.99 427.702 57.997 428.003 57.825 C 428.401 57.577 428.581 57.163 428.529 56.585 C 428.476 56.209 428.318 55.781 428.041 55.308 C 427.266 53.827 426.635 52.813 426.161 52.265 C 425.613 51.566 424.485 50.537 422.778 49.184 C 421.253 47.959 420.185 46.877 419.584 45.953 C 419.185 45.33 418.87 44.939 418.644 44.789 C 418.508 44.698 418.358 44.631 418.193 44.601 C 418.245 44.526 418.291 44.45 418.343 44.375 C 418.494 44.15 418.982 43.714 419.809 43.06 Z M 417.704 51.025 C 417.689 50.837 417.667 50.612 417.629 50.349 C 417.532 49.567 417.569 48.29 417.742 46.517 C 418.726 48.095 419.982 49.56 421.5 50.912 C 421.876 51.235 422.425 51.724 423.154 52.377 C 423.252 52.467 423.342 52.558 423.417 52.64 C 423.297 52.7 423.177 52.776 423.041 52.866 C 422.718 53.144 422.365 53.527 421.989 54.03 C 421.643 54.489 421.32 54.909 421.011 55.308 C 420.223 53.309 419.118 51.881 417.704 51.025 Z M 404.887 64.812 C 405.113 65 405.331 65.158 405.527 65.301 C 405.068 66.262 404.932 67.262 405.113 68.306 C 405.166 68.659 405.286 68.93 405.489 69.133 C 405.767 69.411 406.226 69.493 406.88 69.396 C 407.083 69.268 407.181 69.035 407.181 68.682 C 407.158 68.231 407.143 67.908 407.143 67.705 C 407.143 67.232 407.369 66.616 407.82 65.864 C 408.12 65.887 408.443 66.037 408.796 66.315 C 409.301 66.691 409.623 66.916 409.774 66.991 C 410.15 67.164 410.548 67.194 410.977 67.066 C 411.405 66.939 411.766 66.728 412.067 66.428 C 412.375 66.172 412.645 65.782 412.893 65.263 L 413.269 66.428 C 413.419 66.931 413.585 67.277 413.758 67.48 C 413.924 67.675 414.239 67.863 414.698 68.043 L 414.397 68.87 C 413.999 69.824 413.698 70.673 413.495 71.424 C 413.194 71.349 412.833 71.312 412.404 71.312 C 409.797 71.364 407.872 71.552 406.617 71.875 C 405.016 72.348 403.926 73.092 403.347 74.092 C 402.896 74.813 402.701 75.978 402.746 77.585 C 402.67 77.36 402.558 77.15 402.407 76.947 C 401.979 76.368 401.302 75.684 400.377 74.881 C 399.182 73.889 397.979 72.927 396.769 71.988 C 396.529 71.094 396.115 70.117 395.528 69.057 C 395.401 68.832 394.83 67.855 393.8 66.127 L 387.748 55.721 C 387.08 54.782 386.388 53.88 385.682 53.016 C 387.463 54.496 389.358 55.826 391.357 56.998 C 391.906 57.321 394.214 58.553 398.273 60.68 C 401.077 62.13 403.287 63.512 404.887 64.812 Z M 412.592 75.857 C 412.495 76.135 412.292 76.398 411.992 76.646 C 411.706 76.894 411.292 77.202 410.751 77.585 L 406.128 78.074 C 406.128 78.074 406.053 78.021 406.015 77.999 C 405.715 77.826 405.317 77.736 404.812 77.736 C 404.715 76.661 404.873 75.835 405.301 75.256 C 405.7 74.655 406.443 74.219 407.519 73.941 C 409.075 73.468 410.736 73.325 412.517 73.528 C 412.442 73.776 412.458 74.167 412.555 74.693 C 412.683 75.219 412.69 75.609 412.592 75.857 Z M 442.322 46.629 C 442.849 47.073 443.27 47.621 443.601 48.282 C 444.029 49.109 444.225 49.973 444.202 50.875 C 444.179 51.528 444.037 52.325 443.789 53.279 C 443.436 54.631 443.24 55.435 443.187 55.683 C 443.149 56.014 443.149 56.292 443.187 56.51 C 442.895 56.457 442.608 56.405 442.322 56.36 C 442.18 56.337 442.037 56.307 441.91 56.284 C 442.068 56.074 442.202 55.796 442.322 55.458 C 443.127 52.911 443.127 49.973 442.322 46.629 Z M 438.414 43.474 C 438.963 43.827 439.429 44.661 439.805 45.991 C 440.458 48.395 440.759 50.236 440.707 51.513 C 440.684 52.392 440.519 53.332 440.218 54.331 C 440.015 54.932 439.932 55.405 439.955 55.758 C 439.955 55.804 439.955 55.856 439.955 55.909 C 439.602 55.796 439.286 55.653 439.015 55.495 C 438.714 55.323 438.489 55.195 438.338 55.12 C 438.091 54.992 437.851 54.947 437.625 54.97 C 437.602 54.97 437.579 54.97 437.55 54.97 C 437.632 54.571 437.685 54.271 437.7 54.068 C 437.722 53.79 437.722 53.392 437.7 52.866 C 437.677 52.287 437.663 51.889 437.663 51.663 L 437.7 50.612 C 437.722 50.213 437.715 49.875 437.663 49.597 L 437.362 48.508 L 437.287 47.456 C 437.158 46.983 437.076 46.614 437.024 46.366 C 436.97 46.141 436.933 45.743 436.911 45.164 C 436.911 44.616 436.858 44.203 436.76 43.925 C 436.655 43.669 436.519 43.406 436.347 43.136 C 437.256 43.083 437.948 43.196 438.414 43.474 Z M 344.863 29.799 C 345.172 29.19 345.262 28.634 345.126 28.146 L 345.126 28.108 C 345.878 27.688 346.548 27.109 347.119 26.38 C 347.134 26.388 347.141 26.403 347.157 26.418 L 349.035 28.634 C 347.442 28.725 346.052 29.115 344.863 29.799 Z M 342.947 32.241 C 343.022 32.173 343.09 32.098 343.135 32.015 C 343.165 32.091 343.187 32.151 343.21 32.203 C 343.262 32.361 343.368 32.481 343.511 32.579 C 343.495 32.609 343.473 32.632 343.436 32.654 C 343.316 32.519 343.15 32.384 342.947 32.241 Z M 350.05 32.692 C 350.133 32.834 350.224 33.007 350.313 33.218 C 350.005 33.015 349.757 32.812 349.562 32.617 C 349.674 32.586 349.787 32.549 349.9 32.504 C 349.945 32.564 349.998 32.624 350.05 32.692 Z M 350.577 38.59 C 350.622 38.642 350.659 38.688 350.689 38.74 C 350.254 39.198 349.585 39.942 348.698 40.957 C 347.773 41.986 347.006 42.76 346.405 43.286 C 345.939 43.677 345.225 44.263 344.263 45.052 C 344.134 45.074 343.991 45.104 343.849 45.127 L 343.586 45.164 C 343.676 45.119 343.766 45.067 343.849 45.014 C 344.804 44.413 345.54 43.902 346.066 43.474 C 346.616 43.023 347.254 42.384 347.984 41.558 C 349.088 40.303 349.674 39.627 349.75 39.529 C 350.073 39.183 350.344 38.868 350.577 38.59 Z M 346.893 33.931 C 347.848 34.435 348.637 35.058 349.261 35.81 C 346.63 39.867 343.097 42.873 338.662 44.826 C 337.67 45.284 337.031 45.683 336.745 46.028 C 337.008 45.3 337.196 44.638 337.309 44.037 C 338.084 44.24 338.79 43.639 339.414 42.234 C 339.624 41.753 339.835 41.28 340.053 40.806 C 340.24 40.664 340.428 40.476 340.616 40.243 C 341.872 38.665 342.819 37.5 343.473 36.749 C 344.623 35.449 345.766 34.51 346.893 33.931 Z M 359.033 41.708 C 358.958 41.948 358.868 42.189 358.77 42.422 C 358.417 41.821 358.094 41.422 357.793 41.22 C 357.553 41.054 357.275 40.957 356.967 40.919 C 357.012 40.776 357.034 40.641 357.042 40.506 C 357.417 40.859 358.079 41.257 359.033 41.708 Z M 355.538 46.329 C 355.876 46.186 356.199 46.036 356.516 45.878 C 356.267 46.126 356.004 46.359 355.726 46.592 C 355.688 46.502 355.628 46.419 355.538 46.329 Z M 352.532 52.452 C 352.532 52.452 352.554 52.505 352.569 52.528 L 358.582 64.624 C 359.109 65.729 359.658 66.375 360.236 66.578 C 360.514 66.676 360.785 66.691 361.063 66.616 C 361.341 66.563 361.537 66.428 361.664 66.202 C 361.868 65.902 361.912 65.504 361.814 65 C 361.612 63.37 360.965 61.454 359.86 59.252 C 358.582 56.825 357.665 54.985 357.116 53.73 C 356.643 52.603 356.154 51.911 355.651 51.663 C 355.192 51.513 354.831 51.371 354.561 51.25 C 354.711 51.175 354.847 51.1 354.974 51.025 C 355.268 50.844 355.56 50.657 355.839 50.461 C 356.034 50.799 356.274 51.138 356.553 51.476 C 357.177 52.174 357.771 52.715 358.319 53.091 C 359.297 53.715 359.807 54.053 359.86 54.105 C 360.161 54.383 360.484 54.759 360.838 55.232 C 361.514 56.209 362.056 57.058 362.453 57.787 C 362.852 58.411 363.182 59.042 363.431 59.666 C 363.558 60.019 363.732 60.627 363.957 61.506 L 364.258 62.746 C 364.484 63.55 364.806 64.459 365.235 65.489 L 366.062 67.292 C 366.491 68.096 366.851 68.622 367.152 68.87 C 367.73 69.396 368.332 69.561 368.956 69.358 C 369.174 69.29 369.362 69.178 369.52 69.02 C 369.52 69.042 369.52 69.073 369.52 69.095 C 369.542 69.598 369.392 70.087 369.069 70.56 C 368.768 71.011 368.369 71.372 367.866 71.65 C 367.137 72.025 366.115 72.236 364.784 72.288 C 361.98 72.439 358.154 72.101 353.32 71.274 C 351.839 71.026 350.779 70.801 350.126 70.598 C 349.622 70.47 348.945 70.245 348.096 69.922 C 347.119 69.568 346.442 69.335 346.066 69.208 C 345.368 69.005 344.375 68.795 343.097 68.569 L 341.481 68.231 C 341.481 68.231 341.481 68.186 341.481 68.156 C 341.459 67.652 341.128 67.014 340.503 66.24 C 339.774 65.286 338.925 64.309 337.948 63.31 L 337.196 62.558 C 335.468 60.98 334.528 60.101 334.377 59.928 C 334.227 59.778 333.799 59.297 333.099 58.501 C 333.581 58.576 334.122 58.614 334.716 58.614 C 336.693 58.666 338.174 58.576 339.151 58.351 C 339.414 58.283 339.752 58.17 340.165 58.012 C 340.353 58.08 340.519 58.155 340.654 58.238 C 340.879 58.366 341.203 58.576 341.631 58.877 C 342.03 59.049 342.721 59.087 343.699 58.989 C 348.059 58.388 351.268 57.772 353.32 57.148 C 353.922 56.998 354.245 56.75 354.297 56.397 C 354.32 56.224 354.275 56.036 354.147 55.834 C 354.02 55.661 353.862 55.548 353.658 55.495 C 353.411 55.42 353.005 55.435 352.456 55.533 L 348.322 56.322 C 349.674 55.345 350.938 54.233 352.118 52.978 C 352.29 52.791 352.426 52.618 352.532 52.452 Z M 348.059 54.481 C 347.713 54.804 347.42 55.052 347.194 55.232 C 345.69 56.412 344.172 57.058 342.646 57.186 C 342.496 57.193 342.323 57.193 342.12 57.186 L 348.059 54.481 Z M 340.428 47.569 C 339.782 47.666 339.181 47.741 338.625 47.794 L 339.301 47.418 C 339.429 47.343 339.722 47.208 340.165 47.005 C 340.173 47.058 340.188 47.11 340.203 47.155 C 340.256 47.313 340.331 47.448 340.428 47.569 Z M 334.265 48.132 C 334.34 47.832 334.399 47.531 334.453 47.23 C 334.648 47.328 334.843 47.388 335.054 47.418 C 335.452 47.516 335.79 47.456 336.068 47.23 C 336.197 47.125 336.309 46.975 336.407 46.78 C 336.399 46.922 336.399 47.058 336.407 47.193 C 336.43 47.561 336.557 47.839 336.783 48.019 C 336.467 48.049 336.181 48.072 335.918 48.095 C 335.339 48.132 334.791 48.147 334.265 48.132 Z M 334.265 55.871 C 334.265 55.871 334.317 55.871 334.34 55.871 C 334.866 55.743 335.294 55.706 335.618 55.758 C 335.618 55.804 335.618 55.841 335.618 55.871 C 335.43 55.886 335.227 55.901 335.017 55.909 C 334.761 55.909 334.505 55.894 334.265 55.871 Z M 331.145 54.256 C 331.145 54.256 331.13 54.331 331.108 54.368 C 331.01 54.271 330.897 54.158 330.769 54.03 C 330.912 54.113 331.033 54.188 331.145 54.256 Z M 331.596 75.669 C 331.386 75.692 331.198 75.767 331.033 75.895 C 331.002 75.955 330.965 76.023 330.92 76.083 C 330.746 76.331 330.694 76.586 330.769 76.834 C 330.791 76.984 330.904 77.187 331.108 77.435 C 331.28 77.683 331.386 77.886 331.409 78.036 L 328.965 78.299 C 329.665 77.398 330.349 76.594 331.033 75.895 C 331.559 75.414 332.077 74.971 332.573 74.58 C 332.468 74.903 332.34 75.241 332.197 75.594 C 332.168 75.677 332.145 75.767 332.122 75.857 C 331.927 75.767 331.754 75.7 331.596 75.669 Z M 377.714 48.132 C 380.668 50.484 383.223 53.144 385.381 56.096 C 386.832 58.028 387.847 59.831 388.425 61.506 C 388.049 60.755 387.2 59.718 385.87 58.388 C 382.81 55.255 380.097 51.836 377.714 48.132 Z M 374.03 47.08 C 374.158 47.366 374.278 47.614 374.405 47.832 C 374.706 48.358 375.406 49.199 376.511 50.349 C 377.488 51.378 378.127 52.25 378.427 52.978 L 375.834 50.499 C 374.654 49.372 373.895 48.448 373.542 47.719 C 373.474 47.561 373.413 47.426 373.354 47.306 C 373.594 47.23 373.82 47.155 374.03 47.08 Z M 390.117 85.813 C 389.56 85.527 389.05 85.279 388.576 85.061 L 395.904 87.053 C 396.499 87.21 397.062 87.361 397.596 87.503 C 397.46 87.594 397.333 87.706 397.22 87.841 C 396.942 88.165 396.822 88.518 396.844 88.893 C 396.642 88.405 396.4 88.022 396.13 87.729 L 396.168 87.654 C 396.092 87.616 396.003 87.579 395.904 87.541 C 395.641 87.308 395.341 87.173 395.003 87.128 C 394.853 87.113 394.702 87.113 394.552 87.128 C 394.536 87.128 394.514 87.128 394.477 87.128 C 393.349 86.925 392.747 86.812 392.672 86.79 C 392.169 86.692 391.319 86.361 390.117 85.813 Z M 379.292 83.296 C 379.54 83.191 379.728 83.04 379.856 82.845 C 380.367 82.958 380.901 83.07 381.472 83.183 C 381.359 83.228 381.261 83.273 381.171 83.333 C 380.894 83.559 380.758 84.01 380.758 84.686 C 380.172 84.483 379.57 84.333 378.953 84.235 C 378.953 84.212 378.953 84.19 378.953 84.16 C 378.878 83.807 378.706 83.544 378.427 83.371 C 378.706 83.446 378.991 83.423 379.292 83.296 Z M 377.902 85.888 C 378.09 85.813 378.255 85.715 378.39 85.587 C 378.698 85.64 379.021 85.715 379.367 85.813 C 379.646 85.888 380.344 86.128 381.472 86.527 C 381.645 86.579 382.803 86.917 384.93 87.541 L 392.108 89.457 C 392.056 89.547 392.011 89.652 391.958 89.757 C 391.786 90.208 391.748 90.922 391.845 91.899 C 391.492 92.222 391.041 92.214 390.493 91.861 C 389.944 91.486 389.5 91.245 389.177 91.147 C 388.951 91.072 388.711 91.087 388.463 91.185 C 388.185 91.26 388.027 91.41 387.974 91.636 C 387.922 91.861 388.027 92.146 388.275 92.499 C 388.493 92.778 388.771 93.004 389.102 93.176 C 385.433 92.477 383.058 91.958 381.961 91.636 C 381.607 91.538 379.57 90.809 375.834 89.457 C 375.18 89.224 374.549 89.014 373.955 88.818 L 373.993 88.781 C 374.12 88.653 374.196 88.503 374.218 88.33 C 374.218 88.127 374.165 87.977 374.068 87.879 C 374.421 87.789 374.706 87.579 374.932 87.24 C 375.082 87.331 375.27 87.421 375.496 87.503 L 381.021 89.419 C 382.675 89.945 383.75 90.268 384.253 90.396 C 385.433 90.674 387.426 90.884 390.23 91.035 C 390.853 91.087 391.222 90.922 391.319 90.546 C 391.394 90.298 391.297 90.081 391.019 89.908 C 390.921 89.833 390.681 89.742 390.305 89.645 C 386.944 89.119 384.441 88.668 382.787 88.292 C 381.435 88.014 380.405 87.639 379.705 87.165 C 379.014 86.594 378.412 86.166 377.902 85.888 Z M 375.27 86.189 L 375.496 86.151 L 375.496 86.076 C 375.571 86.076 375.669 86.166 375.796 86.339 L 376.135 86.714 C 375.812 86.714 375.511 86.677 375.233 86.602 C 375.27 86.467 375.286 86.331 375.27 86.189 Z M 365.01 90.096 C 366.588 90.148 367.828 90.223 368.731 90.321 C 370.587 90.569 372.94 91.208 375.796 92.237 C 379.405 93.536 381.712 94.319 382.712 94.566 C 383.367 94.739 385.757 95.227 389.891 96.031 C 391.177 96.286 392.341 96.565 393.387 96.858 C 393.109 97.339 392.846 97.864 392.597 98.436 C 392.019 99.736 391.507 101.456 391.057 103.582 C 390.38 106.565 389.741 109.549 389.139 112.524 C 387.869 112.283 386.576 112.231 385.268 112.374 C 384.216 112.449 383.329 112.673 382.599 113.049 C 381.547 113.553 380.706 114.312 380.081 115.342 C 380.059 115.387 380.029 115.424 380.006 115.454 C 374.33 110.45 368.768 105.175 363.318 99.638 C 361.537 97.857 360.349 96.73 359.748 96.257 C 358.77 95.483 357.289 94.543 355.313 93.439 C 353.057 92.139 351.313 91.26 350.088 90.809 C 347.307 89.757 344.39 89.367 341.33 89.645 C 340.105 89.795 339.151 90.073 338.474 90.471 C 337.722 90.945 336.918 91.914 336.068 93.364 C 335.768 93.89 335.678 94.303 335.806 94.604 C 335.933 94.882 336.197 95.002 336.595 94.98 C 336.971 94.957 337.287 94.814 337.534 94.566 C 337.685 94.416 337.873 94.131 338.098 93.702 C 338.301 93.304 338.489 93.011 338.662 92.838 C 339.166 92.289 340.113 91.989 341.518 91.936 C 344.428 91.838 346.766 92.124 348.548 92.8 C 349.374 93.101 350.727 93.792 352.607 94.867 C 355.666 96.723 357.816 98.158 359.071 99.187 C 359.995 99.938 361.026 100.893 362.153 102.042 C 362.829 102.696 363.807 103.695 365.085 105.047 C 367.265 107.301 370.346 110.255 374.33 113.914 L 379.217 118.422 C 379.217 118.497 379.217 118.557 379.217 118.61 C 379.217 118.993 379.254 119.331 379.329 119.624 C 378.511 119.88 377.661 120.143 376.774 120.413 C 376.548 120.277 376.262 120.143 375.909 120 C 373.03 118.699 370.835 117.821 369.332 117.37 C 369.009 117.272 367.806 116.972 365.723 116.469 C 364.273 116.116 363.108 115.74 362.228 115.342 C 361.68 115.093 360.897 114.665 359.898 114.064 C 357.417 112.637 354.861 111.359 352.231 110.232 C 351.726 110.029 351.329 109.954 351.028 110.006 C 350.501 110.135 350.186 110.51 350.088 111.134 C 350.036 111.562 350.126 112.073 350.351 112.673 C 351.028 114.477 352.584 116.356 355.012 118.309 C 356.14 119.158 356.944 119.722 357.417 120 C 358.267 120.503 359.221 120.954 360.274 121.352 C 361.875 121.954 363.333 122.314 364.634 122.441 C 366.566 122.667 368.452 122.517 370.309 121.991 C 370.985 121.818 371.474 121.578 371.775 121.277 C 371.098 120.653 370.324 120.338 369.445 120.338 C 369.196 120.315 368.602 120.36 367.678 120.488 C 367.001 120.541 366.009 120.465 364.709 120.263 C 363.003 120.014 361.755 119.752 360.951 119.473 C 360.07 119.226 359.123 118.775 358.094 118.121 C 355.936 116.768 354.163 115.056 352.757 112.974 C 354.41 113.598 356.312 114.53 358.469 115.754 C 359.725 116.453 360.589 116.919 361.063 117.144 C 362.063 117.617 363.416 118.061 365.123 118.459 C 367.4 119.038 368.783 119.398 369.257 119.549 C 369.836 119.722 370.873 120.112 372.376 120.714 C 372.903 120.924 373.376 121.127 373.805 121.314 C 365.551 123.794 358.523 125.838 352.719 127.439 C 352.644 127.077 352.335 126.664 351.78 126.198 C 349.599 124.32 347.479 122.352 345.427 120.3 C 343.977 118.798 342.924 117.558 342.27 116.581 C 341.917 116.032 341.466 115.176 340.917 114.026 L 337.986 108.128 C 336.181 104.394 334.58 101.667 333.174 99.938 C 332.723 99.39 332.295 99.127 331.896 99.15 C 331.596 99.172 331.355 99.337 331.183 99.638 C 331.13 99.713 331.077 99.788 331.033 99.863 C 330.551 99.57 330.055 99.292 329.529 99.037 C 329.74 99.127 329.964 99.172 330.206 99.187 C 330.754 99.24 331.183 99.075 331.484 98.699 C 331.724 98.391 331.821 97.993 331.784 97.497 C 331.784 97.474 331.784 97.452 331.784 97.421 C 331.784 97.121 331.694 96.648 331.521 95.994 C 331.355 95.34 331.258 94.663 331.221 93.965 C 331.513 93.845 331.739 93.657 331.896 93.402 C 332.175 92.898 332.258 92.146 332.159 91.147 C 332.107 90.509 332.07 89.908 332.047 89.344 C 332.1 89.216 332.122 89.081 332.122 88.931 C 332.152 88.713 332.115 88.51 332.009 88.33 C 332.017 88.134 332.017 87.932 332.009 87.729 C 332.159 87.661 332.28 87.586 332.385 87.503 C 332.408 87.503 332.438 87.503 332.46 87.503 C 334.324 87.481 337.099 87.376 340.767 87.203 C 341.06 87.526 341.624 87.691 342.458 87.691 C 345.766 87.706 348.539 87.714 350.765 87.729 C 351.877 87.962 353.47 88.322 355.538 88.818 C 357.943 89.397 359.845 89.757 361.251 89.908 C 361.98 89.983 363.228 90.043 365.01 90.096 Z M 353.658 81.568 L 353.696 81.568 C 353.734 81.583 353.757 81.598 353.771 81.605 L 353.696 81.605 C 353.696 81.605 353.674 81.583 353.658 81.568 Z M 346.743 84.348 C 346.804 84.348 347.465 84.37 348.735 84.423 C 348.141 84.588 347.54 84.731 346.931 84.836 C 346.186 84.791 345.413 84.753 344.6 84.723 C 345.608 84.513 346.322 84.385 346.743 84.348 Z M 342.421 77.961 C 342.421 77.961 342.406 77.984 342.383 77.999 C 342.03 78.299 341.91 78.622 342.007 78.975 C 341.128 79.073 340.181 79.817 339.151 81.192 C 338.474 82.094 338.159 82.822 338.211 83.371 C 338.286 83.949 338.602 84.408 339.151 84.761 L 339.189 84.761 C 337.257 84.874 335.219 85.046 333.062 85.287 C 332.731 85.332 332.438 85.385 332.197 85.437 C 332.258 85.061 332.333 84.716 332.423 84.385 L 332.423 84.348 C 332.483 84.348 332.528 84.333 332.573 84.31 C 332.949 84.137 333.16 83.837 333.212 83.408 C 333.265 83.115 333.212 82.837 333.024 82.582 C 333.197 82.094 333.34 81.68 333.438 81.342 C 333.498 81.132 333.573 80.816 333.663 80.403 C 334.34 80.08 334.716 79.629 334.791 79.051 C 334.859 78.6 334.686 78.126 334.265 77.623 L 334.265 77.585 C 334.422 77.585 334.573 77.578 334.716 77.548 C 336.347 77.225 338.263 77.232 340.466 77.585 C 341.015 77.668 341.661 77.796 342.421 77.961 Z M 331.596 101.855 C 331.663 101.959 331.724 102.057 331.784 102.155 C 332.385 103.057 333.002 104.131 333.626 105.386 C 333.701 105.558 334.227 106.686 335.205 108.766 L 338.437 115.454 C 338.91 116.408 339.226 117.01 339.377 117.257 C 339.586 117.633 339.828 118.024 340.09 118.422 L 339.715 118.534 C 339.887 118.857 340.218 119.151 340.691 119.398 C 340.752 119.428 340.82 119.451 340.879 119.473 C 341.654 120.451 342.578 121.465 343.661 122.517 L 343.736 122.592 L 346.066 127.063 L 345.051 127.175 C 344.578 126.672 343.812 126.424 342.759 126.424 C 341.706 126.424 340.729 126.649 339.752 127.1 C 338.797 127.528 337.986 128.114 337.309 128.865 C 336.933 129.294 336.61 129.73 336.331 130.18 C 336.264 130.113 336.189 130.038 336.106 129.956 L 335.355 129.204 C 334.881 128.731 334.204 128.152 333.325 127.475 C 332.25 126.649 331.543 126.101 331.221 125.823 C 329.642 124.297 328.424 123.193 327.574 122.517 C 327.101 122.141 326.409 121.653 325.507 121.051 C 324.508 120.398 323.801 119.924 323.402 119.624 C 321.801 118.4 320.757 117.107 320.283 115.754 C 320.11 115.356 319.944 115.116 319.794 115.041 C 319.719 114.996 319.629 114.973 319.531 114.966 C 319.313 114.5 319.08 114.011 318.817 113.501 C 317.036 110.067 315.908 107.775 315.434 106.625 C 314.961 105.499 314.705 104.574 314.682 103.845 C 314.66 103.297 314.743 102.643 314.945 101.892 C 315.194 101.013 315.382 100.367 315.509 99.938 C 315.81 98.834 316.035 98 316.186 97.421 C 316.434 96.445 316.727 95.641 317.051 95.017 C 317.479 94.168 318.141 93.237 319.042 92.237 C 320.064 91.147 320.816 90.306 321.298 89.72 C 321.396 89.81 321.455 89.9 321.486 89.983 L 321.598 90.396 C 321.726 90.622 322.034 90.734 322.538 90.734 C 322.764 90.411 323.305 90.298 324.154 90.396 C 324.455 90.449 325.394 90.531 326.973 90.659 C 327.371 90.682 327.747 90.712 328.1 90.734 L 327.461 91.861 C 326.995 92.598 326.718 93.228 326.635 93.74 C 326.552 93.717 326.477 93.694 326.409 93.665 C 325.004 93.063 323.703 92.725 322.501 92.65 C 321.2 92.553 320.155 92.823 319.38 93.477 C 318.952 93.83 318.689 94.288 318.592 94.867 C 318.494 95.468 318.614 95.971 318.967 96.37 C 319.291 96.693 319.697 96.933 320.17 97.083 C 320.899 97.384 321.914 97.722 323.214 98.097 C 324.718 98.548 325.733 98.864 326.259 99.037 C 328.243 99.758 330.018 100.698 331.596 101.855 Z M 446.082 84.273 C 446.044 84.543 445.984 84.904 445.894 85.362 C 445.164 86.143 444.51 86.812 443.939 87.353 C 444.413 85.309 444.901 83.491 445.405 81.906 C 445.631 81.282 445.856 80.876 446.082 80.704 C 446.232 82.304 446.232 83.499 446.082 84.273 Z M 437.55 80.591 C 437.722 80.516 438.016 80.478 438.414 80.478 C 438.542 80.553 438.662 80.651 438.79 80.779 C 439.143 81.132 439.316 81.432 439.316 81.68 C 439.294 81.853 439.203 82.079 439.053 82.357 C 438.955 82.582 438.918 82.868 438.94 83.221 L 438.94 84.122 C 438.918 84.573 438.775 85.212 438.526 86.038 C 438.474 86.316 438.474 87.03 438.526 88.18 C 438.572 88.803 438.572 90.005 438.526 91.786 C 437.985 92.155 437.452 92.492 436.911 92.8 C 436.009 93.327 435.445 93.778 435.219 94.153 C 435.144 94.281 435.076 94.408 435.031 94.529 C 433.069 95.731 431.153 96.873 429.281 97.947 C 429.378 97.572 429.476 97.211 429.581 96.858 L 429.957 95.468 C 430.04 95.295 430.115 95.13 430.182 94.98 L 436.723 81.568 C 436.97 81.042 437.249 80.719 437.55 80.591 Z M 414.886 79.84 C 415.208 80.042 415.434 80.38 415.562 80.854 C 415.607 81.087 415.645 81.485 415.675 82.056 C 412.615 81.928 409.699 82.319 406.918 83.221 C 405.587 83.671 404.685 84.197 404.211 84.798 C 403.985 84.145 404.076 83.228 404.474 82.056 C 404.753 81.38 405 80.929 405.226 80.704 C 405.58 80.38 406.218 80.193 407.143 80.14 L 409.097 79.99 C 409.113 80.042 409.12 80.087 409.135 80.14 C 409.233 80.441 409.413 80.643 409.661 80.741 C 410.112 80.967 410.676 80.794 411.353 80.215 C 411.548 80.072 411.736 79.922 411.917 79.764 L 413.532 79.652 C 414.157 79.599 414.608 79.667 414.886 79.84 Z M 416.839 84.723 C 417.088 84.874 417.306 85.099 417.479 85.4 C 417.607 85.602 417.757 85.888 417.93 86.264 C 418.313 86.977 418.749 87.338 419.245 87.353 C 419.208 87.879 419.17 88.45 419.133 89.081 C 419.057 88.833 418.9 88.608 418.644 88.405 C 418.494 88.307 418.118 88.165 417.516 87.992 L 415.149 87.579 C 414.246 87.428 413.593 87.353 413.194 87.353 C 412.42 87.353 411.179 87.594 409.473 88.067 C 406.993 88.818 405.654 89.231 405.451 89.307 C 405.286 89.367 405.136 89.434 405 89.494 L 405 89.044 C 404.978 88.593 405.016 88.232 405.113 87.954 C 405.437 86.624 406.744 85.678 409.022 85.099 C 411.149 84.573 413.382 84.37 415.713 84.498 C 416.186 84.498 416.562 84.573 416.839 84.723 Z M 414.284 93.101 C 413.285 93.026 412.18 93.214 410.977 93.665 C 410.225 93.943 409.195 94.453 407.895 95.204 C 407.496 95.453 407.271 95.678 407.218 95.881 C 407.143 96.257 407.293 96.542 407.669 96.745 C 407.947 96.895 408.293 96.948 408.721 96.895 C 409.007 96.865 409.353 96.791 409.774 96.67 L 409.511 98.999 C 409.21 102.004 409.158 104.243 409.36 105.724 C 409.39 105.859 409.413 105.986 409.435 106.099 C 409.33 106.04 409.202 105.972 409.059 105.912 C 409.315 105.611 409.353 105.228 409.172 104.747 C 408.849 104.221 408.608 103.831 408.458 103.582 C 408.308 103.38 408.06 102.869 407.707 102.042 C 406.88 100.141 406.09 98.097 405.339 95.919 C 405.136 95.37 405.038 94.942 405.038 94.641 C 405.016 94.19 405.188 93.514 405.564 92.612 C 405.692 92.334 405.842 92.087 406.015 91.861 C 406.166 91.734 406.414 91.621 406.767 91.523 C 407.669 91.2 408.819 90.832 410.225 90.434 C 411.202 90.111 412.006 89.93 412.63 89.908 C 413.179 89.855 414.006 89.908 415.111 90.058 L 416.952 90.321 C 417.629 90.374 418.065 90.374 418.268 90.321 C 418.682 90.223 418.959 90.02 419.095 89.72 C 419.057 90.404 419.02 91.14 418.982 91.936 C 418.922 91.936 418.862 91.936 418.794 91.936 C 418.546 91.958 418.268 92.102 417.967 92.35 C 417.516 92.725 417.253 92.936 417.178 92.988 C 416.802 93.191 416.336 93.274 415.788 93.251 C 415.111 93.176 414.608 93.124 414.284 93.101 Z M 401.355 85.775 C 401.587 85.392 401.775 84.889 401.918 84.273 L 402.257 82.544 C 402.234 82.762 402.212 82.988 402.182 83.221 C 402.054 84.22 402.159 85.039 402.482 85.663 C 402.685 86.061 402.971 86.376 403.347 86.602 C 403.362 86.617 403.376 86.624 403.385 86.639 C 403.362 86.745 403.339 86.857 403.309 86.977 C 403.287 87.068 403.265 87.15 403.234 87.24 C 403.174 87.03 403.061 86.842 402.896 86.677 C 402.617 86.339 402.106 86.038 401.355 85.775 Z M 403.197 90.359 C 402.993 90.344 402.768 90.344 402.52 90.359 C 402.347 90.058 402.241 89.667 402.219 89.194 C 402.219 89.104 402.204 89.014 402.182 88.931 C 402.415 88.931 402.602 88.893 402.746 88.818 C 402.843 88.758 402.934 88.683 403.009 88.593 C 402.993 88.811 402.993 88.999 403.009 89.156 C 403.054 89.449 403.113 89.848 403.197 90.359 Z M 395.904 97.722 C 396.063 97.782 396.213 97.827 396.356 97.873 C 396.115 98.21 395.875 98.609 395.641 99.075 C 395.641 98.609 395.732 98.158 395.904 97.722 Z M 419.245 103.132 C 419.29 103.222 419.328 103.312 419.358 103.394 C 416.757 104.762 414.179 106.047 411.616 107.265 L 411.616 106.663 C 411.465 105.461 411.367 104.56 411.315 103.958 C 411.262 103.335 411.33 102.027 411.503 100.051 C 411.653 98.443 411.6 97.166 411.353 96.219 C 412.187 95.942 412.826 95.776 413.269 95.731 C 414.044 95.603 415.208 95.58 416.765 95.655 C 417.659 95.596 418.373 95.37 418.907 94.98 C 418.892 96.723 418.892 98.654 418.907 100.765 C 418.907 101.817 419.02 102.606 419.245 103.132 Z M 395.078 114.364 C 394.762 114.493 394.439 114.62 394.101 114.74 C 394.153 114.094 394.289 113.635 394.514 113.35 C 394.574 113.771 394.762 114.109 395.078 114.364 Z M 514.9 176.427 C 514.975 176.953 515.141 177.72 515.389 178.718 C 515.667 179.771 515.84 180.545 515.915 181.048 C 516.043 181.949 516.103 183.302 516.103 185.105 L 516.103 195.699 C 516.103 196.428 515.976 196.901 515.727 197.127 C 515.577 196.278 515.517 195.008 515.539 193.333 C 515.562 191.604 515.524 190.342 515.426 189.538 L 514.9 186.795 C 514.75 185.766 514.697 184.203 514.75 182.1 L 514.9 176.427 Z M 520.162 176.276 C 520.237 174.676 520.365 173.437 520.538 172.557 C 520.741 171.678 521.087 171.167 521.591 171.017 L 521.027 180.146 C 520.876 182.648 520.711 184.518 520.538 185.743 C 520.185 188.223 519.576 190.567 518.697 192.769 C 518.418 191.92 518.396 190.838 518.622 189.538 C 518.945 188.088 519.147 186.983 519.222 186.232 C 519.245 184.654 519.298 183.474 519.373 182.7 C 519.598 181.498 519.764 180.597 519.861 179.995 C 519.96 179.267 520.065 178.028 520.162 176.276 Z M 519.072 171.092 C 518.622 173.421 518.381 175.638 518.359 177.742 C 518.305 179.147 518.148 180.093 517.87 180.597 C 517.441 179.748 517.08 178.433 516.78 176.652 L 516.441 174.586 C 516.306 173.842 516.119 173.256 515.877 172.82 C 517.193 171.513 518.493 170.183 519.786 168.838 C 519.494 169.401 519.253 170.153 519.072 171.092 Z M 513.059 175.676 L 513.059 175.826 C 513.059 176.276 513.081 176.93 513.134 177.779 C 513.134 178.553 513.074 179.207 512.946 179.733 C 512.796 179.454 512.721 179.11 512.721 178.68 C 512.743 178.177 512.758 177.802 512.758 177.554 C 512.735 177.156 512.608 176.803 512.382 176.502 C 512.359 176.472 512.33 176.45 512.307 176.427 C 512.555 176.179 512.81 175.923 513.059 175.676 Z M 510.54 178.155 C 510.593 178.117 510.631 178.08 510.653 178.042 C 510.676 178.395 510.69 178.621 510.69 178.718 C 510.668 179.094 510.563 179.395 510.39 179.62 C 510.548 179.042 510.601 178.553 510.54 178.155 Z M 329.754 84.498 C 329.747 84.535 329.731 84.573 329.717 84.611 C 329.717 84.611 329.702 84.611 329.679 84.611 C 328.401 84.633 327.439 84.626 326.785 84.573 L 329.754 84.498 Z M 330.657 81.68 C 329.928 81.462 329.326 81.199 328.852 80.891 C 329.334 80.869 330.032 80.824 330.957 80.741 C 330.927 80.846 330.904 80.929 330.882 81.004 L 330.657 81.68 Z M 326.222 94.717 C 326.379 94.747 326.552 94.822 326.748 94.942 C 326.815 95.084 326.906 95.22 327.011 95.355 C 327.266 95.648 327.552 95.813 327.875 95.843 C 327.943 95.904 328.003 95.949 328.063 95.994 C 328.063 96.219 328.078 96.437 328.1 96.632 C 328.041 96.61 327.98 96.58 327.912 96.557 C 327.161 96.234 326.657 96.053 326.409 96.031 C 326.387 95.956 326.297 95.843 326.146 95.693 C 325.695 95.392 324.943 95.07 323.891 94.717 L 320.959 93.74 C 321.937 93.536 322.936 93.499 323.966 93.627 C 324.139 93.927 324.492 94.1 325.019 94.153 C 325.643 94.206 326.048 94.265 326.222 94.341 L 326.222 94.717 Z M 328.439 97.909 C 328.567 98.165 328.717 98.391 328.89 98.586 C 329.033 98.736 329.183 98.864 329.341 98.962 C 328.958 98.767 328.551 98.593 328.138 98.436 C 327.364 98.113 325.935 97.662 323.853 97.083 C 322.027 96.557 320.621 96.053 319.644 95.58 C 320.673 95.107 321.959 95.19 323.515 95.843 C 323.688 95.919 324.282 96.234 325.282 96.782 C 326.011 97.181 326.619 97.459 327.124 97.609 C 327.499 97.737 327.935 97.835 328.439 97.909 Z M 322.764 123.043 C 322.553 122.705 322.29 122.036 321.974 121.051 C 322.403 121.404 323.102 121.931 324.079 122.629 C 325.056 123.328 325.77 123.959 326.222 124.508 C 325.493 124.741 325.041 125.221 324.868 125.936 C 324.8 125.687 324.703 125.447 324.567 125.221 C 324.395 124.921 324.094 124.56 323.665 124.132 C 323.214 123.659 322.914 123.29 322.764 123.043 Z M 327.612 127.776 C 327.687 127.776 327.86 127.874 328.138 128.077 C 329.642 129.58 331.296 130.767 333.099 131.645 C 332.197 131.668 331.092 131.21 329.792 130.255 L 328.815 129.542 C 328.288 129.039 327.89 128.453 327.612 127.776 Z M 324.191 131.27 C 324.666 129.993 324.958 128.963 325.056 128.19 C 325.079 128.024 325.086 127.859 325.094 127.701 C 325.372 128.618 325.785 129.429 326.334 130.143 C 326.807 130.819 327.649 131.608 328.852 132.51 C 329.198 132.765 329.529 132.991 329.83 133.186 C 327.507 133.697 325.244 134.171 323.027 134.613 C 323.065 134.005 323.072 133.388 323.065 132.773 C 323.5 132.6 323.876 132.097 324.191 131.27 Z M 318.441 134.388 C 318.592 134.336 318.682 134.26 318.705 134.163 L 319.192 134.538 C 318.517 134.667 318.141 134.726 318.066 134.726 L 318.441 134.388 Z M 232.22 205.729 C 234.002 204.024 235.227 202.484 235.903 201.109 C 235.828 200.831 235.64 200.628 235.339 200.508 C 236.851 199.042 238.294 197.502 239.662 195.887 C 239.805 196.466 239.97 197.059 240.151 197.652 C 240.549 198.983 241.241 200.959 242.218 203.588 C 248.833 221.321 254.697 235.273 259.807 245.439 C 265.987 257.694 272.752 268.281 280.104 277.184 L 267.4 280.565 C 266.07 280.94 265.032 281.106 264.28 281.053 L 264.243 281.053 C 266.219 278.003 267.972 274.953 269.505 271.887 C 269.904 271.061 269.971 270.445 269.693 270.047 C 269.519 269.798 269.107 269.58 268.452 269.408 C 265.347 268.784 262.326 268.603 259.394 268.881 C 256.215 269.205 253.328 270.047 250.749 271.399 C 251.2 270.369 252.088 268.881 253.418 266.928 L 259.356 258.475 C 260.206 257.198 260.725 256.236 260.898 255.582 C 261.221 254.305 260.987 253.291 260.183 252.54 C 259.68 252.089 258.808 251.788 257.553 251.638 C 250.359 250.812 243.18 251.059 236.016 252.39 C 237.896 250.638 240.136 247.783 242.744 243.824 C 245.526 239.594 247.705 236.664 249.284 235.033 C 250.208 234.109 250.584 233.327 250.412 232.703 C 250.186 231.929 249.374 231.487 247.968 231.388 C 241.579 230.863 235.317 230.998 229.176 231.802 C 232.634 226.091 236.489 220.757 240.752 215.798 C 241.331 215.099 241.714 214.43 241.917 213.807 C 242.165 212.98 242.045 212.357 241.542 211.929 C 241.166 211.605 240.526 211.463 239.624 211.515 C 235.28 211.643 230.792 212.042 226.168 212.717 C 227.371 210.96 228.003 210.05 228.048 209.975 C 228.574 209.299 229.965 207.886 232.22 205.729 Z M 223.538 213.131 C 223.448 213.161 223.343 213.19 223.237 213.206 L 223.237 213.507 C 223.177 213.566 223.11 213.634 223.049 213.694 C 223.11 213.146 223.222 212.635 223.387 212.154 C 223.785 211.08 224.515 210.012 225.567 208.961 C 225.95 208.577 226.687 207.939 227.785 207.044 C 227.206 207.804 226.514 208.833 225.717 210.125 C 224.943 211.38 224.222 212.379 223.538 213.131 Z M 223.049 216.099 C 223.298 215.993 223.545 215.836 223.801 215.61 C 224.139 215.317 224.492 214.956 224.854 214.521 C 229.431 214.415 234.212 214.115 239.211 213.619 L 226.732 230.562 L 223.839 219.818 C 223.44 218.285 223.177 217.045 223.049 216.099 Z M 220.944 222.147 C 221.087 221.959 221.215 221.771 221.32 221.584 C 222.922 228.669 224.312 234.101 225.492 237.888 C 227.319 243.779 229.461 248.956 231.919 253.404 C 231.529 254.222 231.521 254.937 231.882 255.545 C 232.303 255.605 232.739 255.635 233.198 255.62 C 233.227 255.665 233.257 255.702 233.273 255.733 C 234.829 258.287 236.768 261.03 239.098 263.96 C 240.474 265.689 242.646 268.258 245.601 271.661 C 246.066 272.188 246.518 272.706 246.953 273.202 C 246.668 274.231 246.652 275.111 246.916 275.831 L 248.231 275.794 C 248.427 275.636 248.63 275.471 248.833 275.306 C 251.862 278.724 254.125 281.219 255.635 282.782 C 255.764 282.917 255.891 283.037 256.011 283.158 C 255.531 283.308 255.125 283.36 254.809 283.308 C 255.012 282.805 254.674 282.384 253.794 282.031 C 250.389 280.58 247.126 278.138 244.022 274.705 C 242.015 272.473 239.534 269.13 236.58 264.674 C 235.28 262.72 234.347 261.233 233.798 260.204 C 233.175 259.129 232.333 257.461 231.28 255.207 C 228.048 248.166 225.252 241.119 222.899 234.056 L 219.742 224.176 C 219.869 223.748 220.268 223.071 220.944 222.147 Z M 268.151 252.014 C 268.625 252.562 268.978 253.088 269.204 253.592 C 269.227 253.644 269.377 253.967 269.655 254.568 C 269.858 254.944 270.031 255.245 270.181 255.469 C 270.309 255.62 270.497 255.823 270.745 256.071 C 270.948 256.297 271.084 256.507 271.159 256.709 C 270.407 256.184 269.791 255.507 269.317 254.681 L 268.828 253.855 C 268.452 253.456 268.189 253.141 268.039 252.915 C 267.739 252.517 267.664 252.141 267.813 251.788 L 268.151 252.014 Z M 230.228 242.546 C 229.559 240.676 228.732 237.933 227.747 234.319 C 229.694 234.176 232.385 233.928 235.828 233.568 C 240.286 233.117 243.887 233.027 246.615 233.305 C 244.157 237.212 241.654 240.984 239.098 244.612 C 237.159 247.355 235.483 249.429 234.061 250.849 C 232.521 248.053 231.243 245.289 230.228 242.546 Z M 236.618 255.207 C 237.219 255.102 237.993 254.951 238.948 254.756 C 245.435 253.426 251.915 253.328 258.38 254.455 C 257.53 256.709 255.801 259.564 253.193 263.021 C 250.945 266.042 249.322 268.431 248.307 270.196 C 245.653 267.251 243.488 264.696 241.805 262.532 C 239.895 260.076 238.166 257.633 236.618 255.207 Z M 256.914 271.586 C 260.169 270.835 263.379 270.812 266.536 271.511 C 265.085 275.419 262.928 278.875 260.071 281.88 C 259.966 281.985 259.868 282.09 259.77 282.181 C 259.274 281.76 258.515 281.024 257.478 279.964 C 255.29 277.71 253.275 275.591 251.426 273.615 C 253.125 272.714 254.951 272.037 256.914 271.586 Z M 250.111 284.097 C 249.682 284.172 249.119 284.037 248.419 283.683 L 248.043 283.496 C 247.721 283.172 247.465 282.932 247.291 282.782 C 248.043 282.955 248.983 283.398 250.111 284.097 Z M 262.928 284.021 C 262.928 284.021 262.957 283.999 262.965 283.984 C 262.973 283.999 262.973 284.014 262.965 284.021 C 262.965 284.021 262.942 284.021 262.928 284.021 Z M 287.884 278.086 C 287.727 278.049 287.539 278.026 287.32 278.011 C 287.403 277.868 287.441 277.718 287.433 277.56 L 287.884 278.086 Z M 289.274 279.701 C 289.274 279.701 289.274 279.679 289.274 279.663 L 292.357 283.12 C 292.275 283.18 292.199 283.24 292.131 283.308 C 292.071 283.36 292.026 283.405 291.981 283.458 C 291.906 283.383 291.831 283.308 291.756 283.233 C 290.726 282.226 289.711 281.196 288.711 280.152 C 288.997 280.009 289.184 279.859 289.274 279.701 Z M 286.042 275.944 C 285.719 275.899 285.336 275.914 284.877 275.982 C 281.066 271.692 277.488 267.145 274.128 262.345 L 286.042 275.944 Z M 333.926 112.937 C 333.724 112.163 333.228 111.073 332.423 109.669 C 331.672 108.338 331.01 107.354 330.431 106.701 C 329.882 106.077 328.95 105.235 327.649 104.184 L 325.582 102.643 C 324.433 101.892 323.252 101.314 322.05 100.915 C 321.62 100.743 321.245 100.652 320.922 100.652 C 320.494 100.652 319.997 100.765 319.418 100.99 C 318.764 101.291 318.343 101.629 318.141 102.004 C 317.99 102.253 317.915 102.606 317.915 103.057 C 317.892 103.831 317.99 104.612 318.216 105.386 C 318.268 105.588 318.343 105.762 318.441 105.912 C 318.463 105.941 318.494 105.972 318.517 105.986 C 318.584 107.256 318.884 108.467 319.418 109.631 C 319.967 110.833 320.719 111.863 321.674 112.711 C 322.072 113.012 322.403 113.162 322.651 113.162 C 322.952 113.185 323.199 113.035 323.402 112.711 C 323.575 112.388 323.643 112.05 323.59 111.697 C 323.493 111.269 323.124 110.72 322.501 110.044 C 321.049 108.444 320.433 106.926 320.659 105.499 C 321.463 105.198 322.327 105.558 323.252 106.588 C 325.033 108.519 326.168 110.758 326.673 113.313 C 326.394 113.463 325.86 113.485 325.056 113.388 C 324.357 113.313 323.876 113.411 323.628 113.688 C 323.477 113.891 323.402 114.139 323.402 114.439 C 323.425 114.688 323.515 114.928 323.665 115.154 C 323.794 115.326 324.191 115.664 324.868 116.168 C 325.846 116.844 326.424 117.235 326.597 117.332 C 327.296 117.708 327.935 117.843 328.514 117.746 C 328.687 117.716 328.845 117.663 329.003 117.595 L 331.672 117.595 C 332.648 117.468 333.34 117.092 333.738 116.469 C 333.987 116.04 334.114 115.469 334.114 114.74 C 334.114 114.214 334.054 113.613 333.926 112.937 Z M 332.272 114.289 C 332.325 114.763 332.197 115.116 331.896 115.342 C 331.671 115.544 331.235 115.642 330.581 115.642 L 330.506 115.642 C 330.544 115.521 330.574 115.394 330.581 115.267 C 330.679 114.493 330.528 113.651 330.13 112.749 C 329.852 112.148 329.393 111.374 328.739 110.42 L 326.447 107.114 C 325.447 105.739 324.658 104.807 324.079 104.334 C 323.049 103.432 321.937 103.034 320.734 103.132 C 319.997 103.177 319.434 103.41 319.042 103.845 C 318.99 103.537 319.02 103.259 319.117 103.019 C 319.246 102.719 319.591 102.441 320.17 102.192 C 320.494 102.02 320.786 101.945 321.035 101.967 L 321.711 102.305 C 322.012 102.478 322.478 102.666 323.101 102.869 C 323.455 103.019 323.914 103.335 324.492 103.808 L 328.476 107.039 C 328.777 107.339 329.176 107.813 329.679 108.467 L 330.393 109.631 C 330.867 110.457 331.393 111.645 331.971 113.2 C 332.175 113.703 332.272 114.064 332.272 114.289 Z M 189.711 183.339 C 190.665 184.715 191.289 186.217 191.59 187.848 C 191.868 189.553 191.725 191.153 191.176 192.656 C 190.974 193.182 190.651 193.986 190.2 195.06 C 189.876 196.015 189.838 196.826 190.087 197.502 L 199.708 197.089 C 200.573 199.802 201.776 202.349 203.317 204.715 L 199.671 208.059 C 197.439 210.163 195.552 212.056 193.996 213.731 C 193.093 214.709 191.831 216.174 190.2 218.127 C 188.524 220.156 187.267 221.621 186.441 222.523 C 187.772 221.568 189.245 220.269 190.876 218.616 C 192.68 216.715 194.033 215.287 194.936 214.333 C 196.062 213.183 198.145 211.192 201.174 208.359 L 209.631 200.846 C 218.576 193.084 227.845 185.533 237.445 178.193 C 237.723 177.967 237.911 177.72 238.009 177.441 C 238.158 177.118 238.12 176.892 237.896 176.765 C 231.558 181.348 225.74 185.766 220.456 190.026 C 214.691 194.639 209.278 199.246 204.218 203.852 C 204.272 202.89 204.129 201.913 203.806 200.921 C 203.279 199.321 202.399 198.005 201.174 196.977 C 199.949 195.947 198.506 195.338 196.852 195.135 C 195.176 194.933 193.605 195.189 192.154 195.887 C 193.229 193.933 193.68 191.755 193.507 189.351 C 193.334 187.021 192.62 184.88 191.364 182.926 C 190.162 181.07 188.561 179.492 186.554 178.193 C 184.674 176.968 182.585 176.074 180.277 175.525 C 176.495 174.623 172.669 174.736 168.814 175.864 C 164.927 176.991 161.634 178.944 158.928 181.724 C 159.455 177.742 159.131 173.774 157.951 169.815 C 156.749 165.885 154.831 162.391 152.201 159.334 C 149.569 156.305 146.375 153.924 142.616 152.195 C 138.88 150.49 135.001 149.618 130.965 149.566 C 126.251 149.544 121.343 150.67 116.231 152.947 C 112.247 154.75 107.835 157.417 103.001 160.949 C 98.566 164.233 94.868 167.411 91.914 170.491 C 88.253 174.27 85.434 178.177 83.457 182.212 C 81.224 186.773 80.112 191.492 80.112 196.375 C 80.112 201.582 81.412 206.128 84.02 210.012 C 80.841 210.088 77.759 210.764 74.774 212.042 C 71.768 213.319 69.137 215.069 66.881 217.301 C 63.626 220.456 62.086 223.71 62.258 227.068 C 62.334 228.42 62.725 229.864 63.424 231.388 C 63.897 232.418 64.664 233.74 65.716 235.371 C 67.573 238.226 69.49 241.044 71.467 243.824 C 71.79 244.297 72.196 244.65 72.67 244.875 C 73.196 245.101 73.587 245.026 73.835 244.65 C 71.354 241.442 68.896 237.903 66.468 234.018 C 65.619 232.644 64.987 231.517 64.589 230.638 C 64.01 229.307 63.702 228.067 63.649 226.919 C 63.574 225.242 64.01 223.537 64.965 221.809 C 65.791 220.329 66.957 218.931 68.46 217.602 C 71.339 215.024 74.624 213.296 78.307 212.417 C 82.216 211.515 85.809 211.778 89.094 213.206 C 85.208 210.073 82.818 205.707 81.916 200.095 C 81.066 194.835 81.675 189.704 83.757 184.692 C 85.584 180.312 88.455 176.066 92.365 171.956 C 95.394 168.747 99.355 165.367 104.241 161.813 C 108.879 158.431 113.051 155.892 116.757 154.187 C 121.59 151.955 126.229 150.828 130.664 150.805 C 134.799 150.783 138.783 151.73 142.616 153.661 C 146.45 155.561 149.607 158.184 152.088 161.512 C 154.568 164.841 156.185 168.613 156.937 172.82 C 157.666 177.028 157.44 181.108 156.26 185.068 C 156.839 185.218 157.44 185.082 158.064 184.654 C 158.493 184.376 159.003 183.903 159.605 183.227 C 162.364 180.274 165.806 178.283 169.94 177.253 C 174.075 176.254 178.06 176.405 181.893 177.704 C 185.403 178.929 188.005 180.807 189.711 183.339 Z M 165.318 274.705 C 162.536 276.132 158.387 278.326 152.877 281.279 C 136.167 290.295 123.71 297.17 115.517 301.904 C 101.858 309.845 89.899 317.48 79.623 324.82 C 99.445 312.498 116.659 302.205 131.266 293.94 C 150.156 283.217 167.964 274.006 184.674 266.289 C 185.727 265.786 186.456 265.327 186.855 264.899 C 179.36 267.957 172.181 271.226 165.318 274.705 Z M 145.961 275.456 C 141.775 277.537 137.745 279.889 133.859 282.519 L 191.289 255.958 C 195.702 253.93 199.28 252.202 202.039 250.774 C 207.248 248.046 212.263 244.974 217.073 241.57 C 217.449 241.291 217.727 240.984 217.9 240.63 C 218.125 240.202 218.103 239.864 217.825 239.616 C 209.233 245.529 201.122 250.135 193.507 253.441 C 192.252 254.02 190.365 254.816 187.831 255.845 C 185.276 256.897 183.374 257.701 182.119 258.25 C 180.187 259.129 177.623 260.406 174.413 262.081 C 170.753 264.012 168.212 265.313 166.783 265.989 C 164.656 267.041 161.184 268.603 156.373 270.685 C 151.809 272.661 148.344 274.253 145.961 275.456 Z M 241.481 323.19 C 239.301 322.341 237.174 322.078 235.092 322.401 C 232.739 322.777 230.657 323.889 228.852 325.745 C 227.048 327.57 225.936 329.689 225.507 332.093 C 225.379 332.62 225.296 332.957 225.244 333.108 C 225.117 333.461 224.943 333.724 224.718 333.897 C 224.365 334.123 223.816 334.182 223.064 334.085 C 220.786 333.709 219.08 333.431 217.953 333.258 C 215.946 332.957 214.231 332.86 212.804 332.957 C 210.773 333.086 208.616 333.611 206.338 334.535 C 204.737 335.189 202.73 336.203 200.325 337.578 C 196.544 339.735 193.357 341.801 190.778 343.777 C 187.493 346.234 184.75 348.826 182.547 351.554 C 180.044 354.634 178.187 357.94 176.984 361.471 C 175.684 365.281 175.278 368.986 175.782 372.592 C 176.406 376.897 178.277 380.744 181.382 384.125 C 184.463 387.506 188.125 389.701 192.357 390.7 C 186.997 394.509 183.614 398.574 182.209 402.909 C 181.329 405.592 181.284 408.266 182.058 410.948 C 182.885 413.804 184.426 415.885 186.681 417.185 C 187.734 417.786 189.011 418.237 190.515 418.538 C 191.47 418.71 192.846 418.876 194.649 419.025 C 197.055 419.229 198.784 419.025 199.836 418.425 C 198.784 418.049 197.468 417.748 195.89 417.523 C 194.108 417.32 192.771 417.148 191.868 416.997 C 188.508 416.471 186.155 415.292 184.802 413.466 C 183.727 412.038 183.208 410.099 183.261 407.643 C 183.359 404.164 184.539 400.94 186.794 397.988 C 189.072 395.057 191.883 393.119 195.213 392.164 C 196.89 391.661 197.769 391 197.844 390.174 C 192.53 389.647 188.05 387.845 184.388 384.764 C 182.457 383.163 180.878 381.292 179.653 379.166 C 178.397 376.934 177.646 374.62 177.398 372.216 C 177.097 369.263 177.563 365.89 178.789 362.111 C 179.766 359.128 180.931 356.648 182.284 354.672 C 183.712 352.62 185.983 350.254 189.087 347.572 C 192.116 344.964 194.852 342.853 197.28 341.222 C 200.415 339.141 203.467 337.578 206.451 336.527 C 209.887 335.302 213.307 334.738 216.712 334.836 C 220.373 334.934 223.643 335.812 226.522 337.466 C 227.071 337.788 227.597 337.969 228.1 337.992 C 228.702 338.044 229.063 337.842 229.191 337.39 C 229.289 337.068 229.205 336.729 228.927 336.376 C 228.53 336 228.236 335.715 228.063 335.513 C 227.461 334.934 227.101 334.182 226.973 333.258 C 226.875 332.409 226.988 331.552 227.311 330.703 C 227.815 329.449 228.913 328.164 230.619 326.834 C 234.024 324.204 237.083 323.377 239.789 324.355 C 240.188 324.505 241.406 325.181 243.436 326.383 C 244.863 327.262 246.104 327.623 247.157 327.472 C 245.653 325.541 243.759 324.114 241.481 323.19 Z M 205.91 304.158 C 198.521 308.666 192.958 312.025 189.222 314.226 C 183.036 317.908 177.398 321.116 172.309 323.844 C 170.753 324.67 167.272 326.496 161.86 329.328 C 157.553 331.605 154.08 333.476 151.449 334.926 C 143.909 339.134 135.685 344.221 126.793 350.179 C 121.027 354.086 113.112 359.661 103.039 366.897 C 100.558 368.677 98.664 370.105 97.364 371.179 C 95.357 372.832 93.695 374.471 92.365 376.101 C 115.57 358.496 139.963 342.725 165.544 328.803 C 170.407 326.173 174.053 324.204 176.481 322.904 C 180.766 320.552 184.359 318.509 187.267 316.781 C 193.582 313.024 199.799 308.817 205.91 304.158 Z M 175.804 328.615 C 163.679 337.233 154.696 343.769 148.855 348.225 C 139.03 355.716 130.536 362.839 123.372 369.602 C 139.707 356.776 158.515 342.815 179.788 327.713 C 192.169 318.945 211.413 305.585 237.52 287.628 C 228.025 293.166 217.584 299.762 206.211 307.427 C 199.393 312.032 189.26 319.095 175.804 328.615 Z M 221.997 38.177 C 221.749 38.425 221.583 38.725 221.508 39.078 C 220.478 44.541 220.719 50.033 222.222 55.571 C 223.748 61.108 226.342 65.962 230.002 70.147 C 230.882 71.101 231.633 71.439 232.258 71.161 C 228.199 65.729 225.341 60.545 223.688 55.608 C 221.606 49.394 221.298 43.534 222.748 38.026 C 222.523 37.823 222.275 37.876 221.997 38.177 Z M 243.533 29.536 C 243.157 29.213 242.458 29.025 241.429 28.972 C 239.775 28.92 238.557 29.048 237.783 29.348 C 236.783 29.724 235.805 30.528 234.851 31.752 C 232.618 34.533 231.22 38.004 230.641 42.159 C 230.19 45.465 230.303 49.244 230.98 53.504 C 231.483 52.753 231.784 51.791 231.882 50.612 C 231.905 50.258 231.919 49.207 231.919 47.456 C 231.919 43.849 232.611 40.341 233.986 36.937 C 234.611 35.434 235.227 34.345 235.828 33.668 C 236.783 32.564 237.986 31.813 239.436 31.414 C 240.887 30.986 242.308 31.001 243.683 31.452 C 243.984 31.249 244.112 30.941 244.059 30.513 C 244.036 30.084 243.857 29.761 243.533 29.536 Z M 445.819 278.987 C 443.939 280.663 441.022 283.059 437.061 286.163 C 421.801 298.162 410.014 307.163 401.693 313.174 C 400.844 313.828 400.355 314.377 400.227 314.827 C 402.129 313.873 404.189 312.648 406.391 311.146 C 407.767 310.191 409.714 308.779 412.217 306.9 C 421.065 300.265 427.95 294.939 432.889 290.934 C 440.233 284.976 447.246 278.814 453.937 272.451 C 452.682 273.202 451.291 274.231 449.765 275.531 C 448.863 276.283 447.547 277.432 445.819 278.987 Z M 406.241 289.13 C 405.587 289.784 405.129 290.445 404.85 291.122 C 425.921 277.32 446.548 262.443 466.716 246.491 C 471.279 242.907 475.098 239.781 478.179 237.099 C 484.719 231.336 490.643 225.287 495.957 218.954 C 494.477 220.006 492.86 221.343 491.109 222.974 C 490.935 223.123 489.402 224.567 486.523 227.294 C 476.623 236.859 463.919 247.34 448.412 258.738 C 439.564 265.253 426.146 274.855 408.158 287.552 C 407.278 288.206 406.639 288.732 406.241 289.13 Z M 536.286 124.808 C 535.708 124.711 535.332 124.831 535.159 125.184 C 535.084 125.312 535.047 125.508 535.047 125.785 L 535.084 127.063 C 535.084 127.439 535.144 127.686 535.272 127.814 C 535.369 127.942 535.535 128.054 535.761 128.152 L 537.94 129.128 C 537.738 129.805 537.813 130.384 538.166 130.857 C 538.369 131.104 538.617 131.27 538.918 131.346 C 539.24 131.421 539.534 131.368 539.782 131.195 C 539.955 131.097 540.135 130.894 540.308 130.594 C 540.511 130.271 540.662 130.053 540.759 129.956 C 541.158 129.707 541.436 129.481 541.586 129.279 C 541.759 129.076 541.849 128.678 541.849 128.077 L 541.849 126.16 C 541.849 125.56 541.752 125.169 541.548 124.996 C 541.172 124.621 540.759 124.605 540.308 124.958 C 539.985 125.184 539.745 125.56 539.594 126.086 L 539.218 127.401 C 539.015 127.348 538.73 127.348 538.354 127.401 C 537.926 127.423 537.625 127.423 537.452 127.401 C 537.151 127.348 536.888 127.228 536.662 127.025 C 536.415 126.799 536.324 126.552 536.399 126.273 L 537.715 125.898 C 537.738 125.597 537.677 125.282 537.527 124.958 C 537.376 124.981 537.174 124.974 536.925 124.921 C 536.549 124.846 536.339 124.808 536.286 124.808 Z M 519.937 111.735 C 519.711 111.434 519.621 110.923 519.673 110.194 C 519.727 109.443 519.659 108.917 519.486 108.617 L 518.735 108.617 C 518.809 109.947 518.749 111.149 518.547 112.223 C 518.418 112.824 518.343 113.26 518.321 113.538 C 518.321 114.011 518.434 114.417 518.658 114.74 C 518.959 115.168 519.614 115.432 520.613 115.529 C 521.012 115.529 521.252 115.514 521.328 115.491 C 521.38 115.491 521.666 115.356 522.192 115.079 C 522.719 114.853 523.109 114.665 523.357 114.515 C 524.162 113.966 524.522 113.223 524.447 112.298 C 524.395 111.9 524.282 111.607 524.109 111.434 C 523.808 111.134 523.523 111.073 523.244 111.247 L 522.869 112.374 C 522.568 112.2 522.214 112.283 521.816 112.637 C 521.365 112.99 521.027 113.148 520.801 113.125 C 520.929 112.824 520.854 112.562 520.576 112.336 C 520.275 112.088 520.065 111.885 519.937 111.735 Z M 513.284 88.818 C 512.855 89.141 512.57 89.855 512.42 90.96 C 512.367 91.26 512.382 91.546 512.457 91.824 C 512.555 92.071 512.773 92.334 513.096 92.612 C 513.999 93.439 514.622 93.98 514.975 94.228 L 515.802 94.717 C 515.976 94.792 516.23 94.905 516.554 95.055 C 516.878 95.182 517.403 95.242 518.133 95.242 C 518.531 94.844 518.809 94.378 518.959 93.852 C 519.088 93.424 519.147 92.891 519.147 92.237 C 519.147 91.335 518.869 90.847 518.321 90.772 L 516.892 92.838 C 516.494 92.838 516.119 92.703 515.765 92.425 C 515.442 92.146 515.238 91.801 515.163 91.373 C 515.141 91.17 515.141 90.907 515.163 90.584 L 515.276 89.795 C 515.351 89.194 515.276 88.615 515.05 88.067 C 514.998 87.841 514.916 87.706 514.787 87.654 C 514.615 87.481 514.464 87.481 514.337 87.654 C 514.284 87.676 514.239 87.804 514.187 88.029 C 514.133 88.18 514.013 88.33 513.811 88.48 L 513.284 88.818 Z M 515.84 72.251 C 515.562 72.198 515.374 72.198 515.276 72.251 C 514.998 72.326 514.773 72.679 514.599 73.303 L 513.848 73.303 C 513.795 72.401 513.848 71.74 513.999 71.312 C 514.201 70.883 514.321 70.56 514.375 70.335 C 514.472 69.884 514.427 69.561 514.224 69.358 C 513.397 69.456 512.886 69.786 512.683 70.335 C 512.585 70.56 512.533 70.936 512.533 71.462 L 512.533 73.791 C 512.533 74.069 512.585 74.294 512.683 74.467 C 512.81 74.618 513.021 74.73 513.322 74.805 C 513.72 74.881 513.961 74.941 514.036 74.993 L 514.036 75.557 L 515.915 75.745 C 515.893 75.617 515.976 75.504 516.178 75.406 L 516.592 75.256 C 516.69 75.159 516.765 74.971 516.817 74.693 L 516.892 73.566 C 516.892 73.04 516.78 72.679 516.554 72.476 C 516.427 72.379 516.193 72.303 515.84 72.251 Z M 324.267 23.037 C 324.116 22.864 323.914 22.751 323.665 22.699 C 323.162 22.646 322.748 22.774 322.425 23.074 C 322.2 23.247 321.959 23.585 321.711 24.089 C 321.11 25.291 320.636 26.455 320.283 27.582 C 320.132 28.033 320.073 28.386 320.095 28.634 C 320.148 29.108 320.32 29.408 320.621 29.536 C 320.847 29.686 321.11 29.709 321.41 29.611 C 321.688 29.536 321.914 29.371 322.087 29.123 C 322.238 28.897 322.44 28.371 322.689 27.545 C 322.936 26.621 323.35 25.704 323.928 24.802 C 324.177 24.449 324.342 24.164 324.417 23.938 C 324.515 23.563 324.47 23.262 324.267 23.037 Z M 331.934 30.438 C 332.009 30.039 331.859 29.724 331.484 29.498 C 331.258 29.326 330.897 29.235 330.393 29.235 C 329.867 29.235 329.326 29.333 328.777 29.536 C 327.747 29.987 327.026 30.678 326.597 31.602 L 325.432 34.908 C 325.229 35.434 325.229 35.81 325.432 36.035 C 325.53 36.163 325.68 36.238 325.883 36.261 C 326.056 36.261 326.206 36.208 326.334 36.11 C 326.56 35.96 326.748 35.697 326.898 35.321 C 327.371 35.547 327.853 35.449 328.326 35.021 C 328.605 34.773 328.89 34.345 329.19 33.744 C 329.74 32.617 330.356 31.828 331.033 31.377 C 331.28 31.204 331.461 31.061 331.559 30.964 C 331.762 30.813 331.882 30.641 331.934 30.438 Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("g", { clipPath: "url(#clip1_1288_25012)", transform: "matrix(0.9167, 0, 0, 0.9167, 0.138215, 0.300437)" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M 439.165 57.937 C 439.188 57.712 439.143 57.524 439.015 57.374 C 438.316 57.201 437.572 57.186 436.798 57.336 L 435.557 59.478 C 434.204 61.784 433.242 63.52 432.664 64.699 L 431.837 66.54 C 431.611 67.089 431.07 68.546 430.22 70.898 L 429.731 72.438 C 429.28 73.768 428.942 75.121 428.716 76.496 C 428.492 77.675 428.304 78.427 428.153 78.75 C 427.928 79.148 427.799 79.411 427.777 79.539 C 427.724 79.689 427.724 79.93 427.777 80.253 C 427.799 80.553 427.799 80.779 427.777 80.929 C 427.754 81.154 427.679 81.402 427.552 81.68 C 427.477 81.83 427.348 82.071 427.176 82.394 C 427.025 82.792 426.95 83.619 426.95 84.873 C 427.025 86.451 426.913 87.879 426.612 89.156 L 426.236 90.621 C 426.109 91.222 426.026 91.914 425.973 92.687 L 426.048 94.604 C 426.1 95.378 426.071 96.016 425.973 96.519 C 425.898 97.046 425.695 97.812 425.371 98.812 C 425.146 99.736 425.131 100.501 425.334 101.103 L 427.176 101.291 C 427.153 100.99 427.213 100.675 427.364 100.351 C 426.965 100.103 426.739 99.736 426.687 99.262 C 427.191 98.608 427.439 97.699 427.439 96.519 C 427.341 95.167 427.289 94.153 427.289 93.477 C 427.311 92.951 427.401 92.289 427.552 91.485 C 427.754 90.306 427.867 89.63 427.89 89.457 C 428.063 88.127 428.055 86.128 427.853 83.446 L 428.679 83.07 L 428.679 80.44 L 429.468 80.065 C 429.243 79.389 429.318 78.464 429.694 77.285 C 430.093 75.932 430.272 74.978 430.22 74.43 L 430.972 74.054 C 430.746 73.055 431.024 71.747 431.799 70.147 C 432.701 68.246 433.174 66.916 433.227 66.165 L 433.903 65.789 C 434.354 64.286 435.369 62.273 436.948 59.741 C 437.301 59.162 437.647 58.816 438 58.689 C 438.399 58.636 438.692 58.561 438.865 58.463 C 439.038 58.366 439.143 58.185 439.165 57.937 Z M 333.964 63.197 C 332.934 63.896 332.145 64.827 331.596 65.977 C 331.393 66.405 331.092 67.066 330.694 67.968 C 330.648 68.058 330.408 68.389 329.98 68.945 L 328.063 69.734 C 325.83 70.71 323.891 72.123 322.237 73.979 C 320.583 75.857 319.403 77.946 318.704 80.253 C 318.553 80.779 318.351 81.552 318.102 82.582 C 317.824 83.461 317.539 84.197 317.238 84.798 C 316.99 85.302 316.621 85.85 316.148 86.451 C 315.87 86.774 315.434 87.278 314.832 87.954 C 313.006 90.156 311.54 92.575 310.435 95.204 C 309.962 96.482 309.796 97.481 309.946 98.21 C 310.097 98.736 310.397 99.149 310.848 99.45 C 311.323 99.773 311.803 99.848 312.277 99.675 C 311.375 99.074 310.909 98.158 310.886 96.933 C 310.886 95.708 311.323 94.776 312.202 94.153 C 313.728 94.656 315.269 94.604 316.825 94.002 C 315.998 93.304 315.074 92.741 314.043 92.311 C 316.374 89.983 318.193 87.39 319.493 84.535 C 320.569 81.928 321.41 80.005 322.012 78.75 C 323.064 76.594 324.304 75.016 325.733 74.016 C 326.431 73.513 327.822 72.852 329.905 72.025 C 331.708 71.296 333.009 70.545 333.814 69.771 C 334.19 69.395 334.43 68.967 334.528 68.494 C 334.655 67.968 334.528 67.592 334.152 67.367 C 333.701 67.066 332.987 67.254 332.009 67.93 C 331.874 68.02 331.724 68.111 331.558 68.193 C 331.912 67.637 332.145 67.284 332.272 67.141 C 332.851 66.563 333.264 66.112 333.513 65.789 L 334.34 64.812 C 334.693 64.459 335.069 64.301 335.467 64.324 C 335.49 64.001 335.429 63.67 335.279 63.347 L 333.964 63.197 Z M 523.996 155.802 L 523.244 155.802 C 523.147 156.079 522.943 156.343 522.642 156.591 L 522.53 156.704 C 522.454 156.831 522.44 157.027 522.492 157.304 L 523.319 157.455 C 523.62 157.507 523.883 157.455 524.109 157.304 C 524.207 157.282 524.282 157.192 524.334 157.041 C 524.357 156.914 524.334 156.779 524.259 156.629 L 523.996 155.802 Z M 497.836 177.666 C 497.408 177.569 497.107 177.569 496.934 177.666 C 496.784 177.742 496.581 177.907 496.333 178.155 C 496.055 178.381 495.904 178.508 495.882 178.53 C 495.784 178.658 495.754 178.846 495.807 179.094 C 495.859 180.048 496.085 180.694 496.484 181.048 C 496.708 181.251 497.1 181.401 497.648 181.498 C 497.949 181.551 498.197 181.521 498.4 181.423 C 498.55 181.371 498.716 181.235 498.889 181.01 L 500.28 178.718 C 500.227 178.395 499.888 178.139 499.265 177.967 L 497.836 177.666 Z M 468.557 196.187 C 468.933 196.262 469.309 196.203 469.685 195.999 C 469.384 195.646 469.196 195.271 469.121 194.872 L 467.993 194.684 C 467.896 194.91 467.595 195.098 467.091 195.248 C 466.566 195.399 466.242 195.571 466.115 195.775 C 466.039 195.872 465.979 196.022 465.927 196.225 C 465.851 196.45 465.791 196.615 465.739 196.713 C 465.663 196.841 465.528 196.999 465.325 197.202 C 465.25 197.33 465.189 197.615 465.137 198.066 C 465.137 198.99 465.212 199.682 465.363 200.132 C 466.919 200.38 468.106 200.508 468.933 200.508 C 469.406 200.508 469.745 200.418 469.948 200.245 C 470.151 200.094 470.339 199.741 470.512 199.193 C 470.684 198.666 470.91 198.351 471.188 198.254 C 471.037 198.005 470.79 197.826 470.437 197.728 C 470.136 197.652 469.812 197.638 469.459 197.69 C 469.257 197.69 469.136 197.713 469.084 197.765 C 468.985 197.84 468.881 197.976 468.783 198.179 C 468.708 198.231 468.543 198.254 468.294 198.254 C 468.091 198.276 467.791 198.419 467.392 198.666 C 467.016 198.915 466.716 199.028 466.49 199.005 C 466.468 198.779 466.618 198.426 466.942 197.953 C 467.241 197.525 467.34 197.187 467.241 196.939 L 468.557 196.563 L 468.557 196.187 Z M 432.325 213.844 L 431.498 213.844 C 430.769 215.347 430.535 216.977 430.784 218.729 C 430.911 218.803 431.183 218.976 431.611 219.254 C 431.934 219.503 432.227 219.668 432.476 219.743 C 432.723 219.84 433.129 219.915 433.678 219.968 C 434.603 220.021 435.242 219.99 435.595 219.893 C 436.369 219.69 437.211 218.976 438.113 217.751 C 438.316 217.549 438.429 217.353 438.451 217.151 C 438.451 216.925 438.361 216.699 438.188 216.474 C 437.94 216.151 437.609 215.911 437.211 215.761 C 436.813 215.632 436.406 215.625 436.009 215.723 C 435.805 216.602 435.482 217.135 435.031 217.339 C 434.881 217.413 434.632 217.45 434.279 217.45 C 433.776 217.45 433.189 217.391 432.513 217.263 C 432.159 217.165 431.926 217.022 431.799 216.85 C 431.724 216.699 431.708 216.414 431.761 215.986 L 432.325 213.844 Z M 329.378 257.761 C 329.205 257.687 329.04 257.664 328.89 257.687 C 328.739 257.687 328.537 257.784 328.288 257.986 L 327.311 258.701 C 326.612 259.099 325.823 259.301 324.943 259.301 C 324.965 259.204 324.965 259.016 324.943 258.738 C 324.92 258.49 324.943 258.31 325.019 258.212 C 325.041 258.16 325.169 258.047 325.394 257.874 C 325.62 257.671 325.733 257.363 325.733 256.935 C 325.733 256.709 325.658 256.372 325.507 255.921 C 325.259 255.898 325.003 255.958 324.755 256.109 C 324.831 256.311 324.808 256.537 324.68 256.784 C 324.605 256.935 324.469 257.146 324.267 257.423 C 323.914 258.002 323.891 258.873 324.191 260.053 L 326.034 260.391 C 326.109 260.391 326.168 260.413 326.222 260.466 C 326.274 260.519 326.281 260.564 326.259 260.616 L 328.702 260.616 C 328.627 260.413 328.792 260.166 329.19 259.865 C 329.491 259.587 329.739 259.317 329.942 259.039 C 330.168 258.715 330.22 258.438 330.093 258.212 C 330.018 258.009 329.776 257.859 329.378 257.761 Z M 297.693 266.627 C 297.543 266.627 297.28 266.665 296.904 266.74 C 296.604 266.792 296.363 266.792 296.191 266.74 C 295.837 266.59 295.589 266.237 295.439 265.689 C 296.191 265.087 296.642 264.351 296.791 263.471 C 296.589 263.321 296.393 263.374 296.191 263.622 C 296.093 263.772 295.95 263.982 295.777 264.261 C 295.649 264.411 295.423 264.584 295.1 264.786 C 294.823 265.035 294.672 265.372 294.649 265.801 C 294.626 266.229 294.739 266.59 294.988 266.891 C 295.364 267.416 296.04 267.754 297.017 267.905 C 298.047 268.13 299.145 268.152 300.325 267.98 C 300.626 267.928 300.836 267.83 300.963 267.679 C 301.016 267.356 301.061 267.101 301.114 266.928 C 301.287 266.649 301.414 266.454 301.49 266.327 C 301.738 265.974 301.865 265.59 301.865 265.162 C 301.843 264.711 301.7 264.32 301.452 263.998 C 300.949 263.998 300.528 264.17 300.175 264.523 C 299.971 264.727 299.708 265.049 299.385 265.501 C 299.062 265.823 298.498 266.064 297.693 266.214 L 297.693 266.627 Z M 528.732 143.93 C 529.611 143.352 530.25 142.916 530.649 142.615 C 531.325 142.067 531.799 141.503 532.077 140.925 L 531.174 140.812 L 526.439 144.794 C 525.484 145.643 524.132 146.988 522.38 148.814 C 520.801 150.415 519.088 151.873 517.231 153.172 C 515.6 154.374 513.074 156.05 509.638 158.207 C 509.09 158.582 508.563 158.995 508.06 159.446 C 507.706 159.821 507.233 160.437 506.631 161.287 C 506.008 162.091 505.068 162.977 503.813 163.954 C 502.181 165.209 501.166 166.035 500.769 166.433 C 500.317 166.884 500.106 167.298 500.129 167.673 L 502.986 165.72 C 503.94 165.043 504.565 164.57 504.865 164.292 C 505.24 163.939 505.707 163.428 506.255 162.752 C 506.909 161.948 507.368 161.415 507.646 161.136 C 508.345 160.407 509.413 159.574 510.841 158.619 L 520.087 152.158 L 526.289 146.146 C 527.341 145.095 528.153 144.358 528.732 143.93 Z M 441.571 202.987 C 440.865 203.393 440.173 203.754 439.504 204.076 C 439.21 204.062 438.872 204.107 438.489 204.227 L 437.662 204.49 C 437.211 204.588 436.911 204.768 436.76 205.016 C 436.85 205.068 436.956 205.106 437.061 205.129 C 436.204 205.444 435.407 205.67 434.655 205.805 C 433.603 205.978 432.888 206.127 432.513 206.256 C 431.738 206.534 431.212 206.947 430.934 207.495 C 430.911 207.51 430.882 207.526 430.859 207.533 C 430.281 207.811 429.769 208.112 429.318 208.434 L 425.447 210.989 C 426.071 211.29 426.897 211.102 427.928 210.426 L 430.822 208.735 C 431.325 208.608 431.663 208.472 431.837 208.322 L 432.212 207.984 L 433.114 207.759 C 433.543 207.608 433.693 207.383 433.565 207.082 L 433.339 207.044 C 436.707 206.315 439.864 205.091 442.811 203.363 L 446.081 201.447 C 446.705 201.147 448.171 200.568 450.478 199.719 C 452.283 199.065 453.674 198.404 454.65 197.728 C 455.079 197.45 455.643 197.029 456.342 196.45 C 457.071 195.827 457.62 195.383 457.996 195.135 C 458.597 194.707 459.74 194.098 461.416 193.294 C 464.25 191.92 467.392 190.236 470.85 188.26 C 472.804 187.111 475.864 185.278 480.021 182.775 L 493.514 174.586 C 493.838 174.383 494.093 174.157 494.266 173.91 C 494.491 173.586 494.506 173.308 494.303 173.083 L 471.902 186.42 C 467.617 188.975 464.371 190.718 462.168 191.642 C 460.266 192.445 459.048 193.032 458.522 193.407 C 458.048 193.708 457.447 194.211 456.718 194.91 C 455.891 195.684 455.289 196.21 454.914 196.488 C 454.403 196.841 453.787 197.179 453.072 197.502 L 452.96 197.127 L 452.132 197.502 C 451.509 197.75 450.72 198.193 449.765 198.817 C 449.155 199.035 448.652 199.223 448.261 199.381 C 447.382 199.757 445.157 200.959 441.571 202.987 Z M 334.152 245.965 C 333.798 246.243 333.264 246.416 332.535 246.491 C 331.633 246.588 331.055 246.694 330.806 246.792 C 330.528 246.919 330.183 247.129 329.754 247.43 C 329.25 247.806 328.913 248.046 328.739 248.144 L 327.762 248.632 C 327.386 248.91 327.198 249.211 327.198 249.534 C 327.702 249.556 328.265 249.331 328.89 248.858 C 329.491 248.332 330.002 247.994 330.431 247.843 C 330.581 247.791 330.822 247.754 331.144 247.731 L 331.821 247.656 C 332.475 247.603 332.949 247.528 333.25 247.43 C 333.776 247.204 334.129 246.905 334.302 246.529 L 334.152 245.965 Z M 314.231 253.028 C 314.359 252.877 314.795 252.464 315.547 251.788 L 315.396 251.299 L 312.653 252.614 C 311.728 253.118 310.811 253.719 309.909 254.418 L 310.097 254.831 C 311.022 254.155 312.066 253.741 313.217 253.592 C 313.54 253.538 313.728 253.494 313.78 253.441 C 313.833 253.418 313.983 253.275 314.231 253.028 Z M 305.624 256.409 C 305.849 256.236 305.903 256.071 305.774 255.921 L 302.655 255.77 C 302.377 255.718 302.129 255.733 301.903 255.808 L 301.377 255.996 C 300.678 256.221 299.889 256.131 299.009 255.733 C 298.934 255.905 298.807 255.973 298.633 255.921 L 298.633 256.297 C 299.31 256.619 300.114 256.913 301.038 257.16 C 301.264 257.257 301.452 257.273 301.602 257.198 C 301.7 257.175 301.828 257.085 301.978 256.935 C 302.053 256.882 302.257 256.838 302.58 256.784 L 305.099 256.559 C 305.398 256.507 305.572 256.462 305.624 256.409 Z M 282.133 258.964 C 282.006 259.061 281.983 259.174 282.058 259.301 C 283.238 259.452 284.426 259.452 285.629 259.301 C 286.282 259.226 287.245 259.091 288.522 258.889 C 288.696 258.889 289.516 258.903 290.966 258.926 C 291.943 258.979 292.732 258.911 293.334 258.738 L 293.334 258.325 L 295.89 257.273 C 296.288 257.1 296.454 256.897 296.379 256.672 L 294.875 256.484 C 294.702 256.762 294.363 256.958 293.86 257.085 C 293.161 257.288 292.304 257.438 291.304 257.536 C 290.154 257.664 289.274 257.746 288.673 257.798 C 287.546 257.897 285.501 258.228 282.547 258.776 C 282.397 258.798 282.261 258.866 282.133 258.964 Z M 107.474 218.503 L 107.586 218.127 C 107.609 217.902 107.563 217.661 107.436 217.414 L 106.684 217.414 C 106.707 217.661 106.722 218.052 106.722 218.578 L 106.872 219.179 C 106.872 219.48 106.887 219.652 106.91 219.705 L 107.173 220.118 L 107.248 220.193 C 107.323 220.246 107.451 220.253 107.624 220.231 C 107.624 219.503 107.586 219.028 107.511 218.803 L 107.474 218.503 Z M 98.227 216.098 C 98.002 216.001 97.83 216.061 97.701 216.286 C 97.98 217.21 98.317 218.104 98.716 218.953 C 98.965 219.457 99.115 219.87 99.167 220.193 C 99.189 220.396 99.189 220.847 99.167 221.545 C 99.144 222.095 99.205 222.537 99.355 222.86 L 99.731 222.86 C 100.032 222.057 99.971 221.02 99.543 219.743 C 98.867 218.142 98.43 216.925 98.227 216.098 Z M 90.447 215.385 C 90.297 215.385 90.199 215.437 90.147 215.535 C 90.297 216.061 90.635 216.752 91.161 217.601 C 91.74 218.525 92.116 219.202 92.289 219.63 C 92.439 219.931 92.514 220.253 92.514 220.606 C 92.514 220.757 92.499 220.982 92.477 221.283 C 92.499 221.508 92.612 221.771 92.815 222.072 C 93.116 222.5 93.289 222.763 93.341 222.86 L 93.717 222.673 C 93.792 222.47 93.755 222.274 93.604 222.072 L 93.228 221.545 C 93.153 221.373 93.116 221.08 93.116 220.682 C 93.063 220.006 92.815 219.216 92.365 218.315 C 91.785 217.339 91.387 216.587 91.161 216.061 C 90.958 215.707 90.838 215.519 90.786 215.497 C 90.688 215.422 90.575 215.385 90.447 215.385 Z M 183.434 194.309 C 183.337 194.933 183.133 195.684 182.832 196.563 L 182.08 198.817 C 181.93 199.343 181.93 199.719 182.08 199.944 C 182.359 199.869 182.569 199.569 182.719 199.042 L 183.321 197.165 C 183.599 196.316 183.824 195.714 183.998 195.361 C 184.298 194.782 184.351 194.369 184.148 194.121 C 183.87 194.068 183.636 194.136 183.434 194.309 Z M 178.134 191.116 C 177.908 191.567 177.743 192.205 177.645 193.032 L 177.383 194.534 C 177.308 195.211 177.27 195.571 177.27 195.624 C 177.217 196.172 177.27 196.676 177.421 197.127 L 178.322 197.314 C 178.27 196.886 178.322 196.3 178.472 195.549 L 179.149 192.243 C 179.201 191.89 179.201 191.657 179.149 191.529 C 179.074 191.356 178.939 191.228 178.735 191.153 C 178.533 191.078 178.338 191.063 178.134 191.116 Z M 171.632 192.318 C 171.459 191.416 171.308 190.831 171.181 190.552 C 170.978 190.552 170.79 190.612 170.617 190.74 C 170.595 190.988 170.692 191.492 170.918 192.243 C 170.97 192.393 171.008 192.633 171.031 192.957 L 171.181 193.783 C 171.233 194.211 171.354 194.512 171.557 194.684 L 171.933 194.497 C 171.985 194.197 171.97 193.835 171.895 193.407 C 171.767 192.934 171.684 192.566 171.632 192.318 Z M 84.246 292.098 C 84.772 293.654 85.088 294.676 85.185 295.179 L 85.636 296.982 C 85.915 297.681 86.29 298.146 86.764 298.372 L 87.14 297.997 C 87.117 297.824 87.042 297.636 86.914 297.433 C 86.741 297.23 86.614 297.073 86.538 296.944 C 86.26 296.569 86.05 295.93 85.899 295.029 C 85.651 293.954 85.238 292.684 84.659 291.235 C 84.584 291.182 84.494 291.182 84.396 291.235 C 84.298 291.287 84.223 291.362 84.171 291.459 C 84.118 291.633 84.148 291.851 84.246 292.098 Z M 74.812 289.732 C 74.413 289.184 74.022 288.928 73.647 288.98 L 78.796 296.457 C 79.224 297.057 79.51 297.546 79.66 297.922 C 79.713 297.997 79.811 298.237 79.961 298.635 C 80.059 298.936 80.172 299.161 80.299 299.312 C 80.45 299.536 80.653 299.687 80.901 299.762 C 81.149 299.86 81.389 299.853 81.615 299.724 L 79.059 295.705 C 77.856 293.954 76.443 291.964 74.812 289.732 Z M 64.213 291.535 C 65.889 292.339 67.204 293.091 68.159 293.789 C 69.287 294.615 70.805 296.058 72.707 298.109 C 73.361 298.884 73.722 299.477 73.797 299.875 L 74.173 299.875 C 74.474 299.371 74.286 298.733 73.609 297.959 C 70.88 294.705 67.543 292.188 63.611 290.408 C 63.536 290.461 63.408 290.483 63.235 290.483 C 63.258 290.836 63.589 291.182 64.213 291.535 Z M 55.794 295.029 L 55.756 295.367 C 57.733 295.817 59.567 296.133 61.243 296.306 C 62.318 296.403 63.085 296.584 63.536 296.832 C 63.762 296.96 64.1 297.155 64.551 297.433 C 64.927 297.636 65.265 297.681 65.566 297.583 C 64.761 296.659 63.762 296.043 62.559 295.742 C 62.13 295.615 61.619 295.532 61.018 295.479 L 55.944 294.766 L 55.794 295.029 Z M 47.525 299.536 L 47.487 299.875 L 54.027 300.213 C 54.38 300.213 54.628 300.251 54.779 300.326 C 54.907 300.378 55.064 300.461 55.267 300.589 C 55.44 300.686 55.606 300.702 55.756 300.627 C 55.606 300.1 55.418 299.762 55.192 299.612 C 55.019 299.514 54.779 299.461 54.478 299.461 L 47.675 299.312 L 47.525 299.536 Z M 155.395 183.79 C 155.095 183.79 154.921 183.805 154.869 183.827 L 154.531 184.053 C 154.305 184.226 154.094 184.353 153.892 184.429 L 153.14 184.729 L 152.576 185.142 L 152.425 185.33 C 152.373 185.428 152.366 185.609 152.388 185.856 L 153.516 186.044 C 153.494 185.894 153.553 185.721 153.704 185.518 L 154.192 185.142 C 154.696 184.744 155.095 184.294 155.395 183.79 Z M 154.08 167.072 L 153.29 167.072 L 152.914 170.116 C 152.862 170.866 152.726 171.452 152.501 171.881 C 152.479 171.979 152.35 172.197 152.125 172.52 C 151.974 172.798 151.884 173.023 151.862 173.195 C 151.809 173.421 151.787 173.759 151.787 174.21 C 151.689 174.714 151.697 175.022 151.825 175.149 C 152.028 175.171 152.223 175.037 152.425 174.736 C 153.2 173.308 153.794 171.115 154.192 168.162 C 154.245 167.658 154.207 167.298 154.08 167.072 Z M 148.93 159.296 C 149.103 157.77 149.081 156.403 148.855 155.201 L 148.028 155.201 C 148.178 156.125 148.156 157.177 147.953 158.356 C 147.856 158.935 147.615 159.972 147.239 161.475 L 146.45 164.631 C 146.149 166.186 145.848 167.335 145.548 168.086 C 145.247 168.913 145.082 169.379 145.059 169.476 C 144.909 170.003 144.894 170.453 145.021 170.829 L 145.961 171.017 C 146.013 170.739 146.246 170.062 146.675 168.988 C 147.149 167.809 147.668 165.945 148.216 163.391 C 148.592 161.61 148.833 160.25 148.93 159.296 Z M 141.113 150.655 C 140.91 150.603 140.76 150.707 140.661 150.956 C 140.564 151.181 140.534 151.421 140.586 151.669 L 140.925 154.261 C 141.173 156.313 141.323 157.958 141.376 159.183 C 141.399 160.986 141.24 162.601 140.887 164.029 C 140.715 164.728 140.609 165.247 140.586 165.569 C 140.534 166.148 140.647 166.621 140.925 166.997 C 141.774 164.668 142.165 161.978 142.09 158.92 C 142.037 156.817 141.714 154.058 141.113 150.655 Z M 128.221 149.227 C 127.973 149.13 127.793 149.19 127.694 149.415 C 128.423 150.069 129.363 151.181 130.514 152.759 C 130.739 153.037 131.092 153.42 131.566 153.924 C 131.964 154.374 132.28 154.787 132.505 155.163 C 132.806 155.742 133.069 156.606 133.295 157.756 C 133.52 159.033 133.746 159.919 133.972 160.423 L 134.31 160.46 C 134.46 160.137 134.498 159.709 134.423 159.183 C 134.423 159.13 134.31 158.694 134.084 157.868 C 133.881 156.914 133.693 156.215 133.52 155.764 C 133.197 154.99 132.566 154.089 131.641 153.059 L 128.634 149.603 C 128.507 149.43 128.371 149.302 128.221 149.227 Z M 124.199 159.334 L 124.537 159.146 C 124.613 158.748 124.387 158.207 123.861 157.53 L 120.478 153.397 C 120.351 153.225 120.2 153.082 120.027 152.984 C 119.749 152.887 119.576 152.932 119.501 153.134 L 121.907 156.027 C 123.087 157.402 123.846 158.506 124.199 159.334 Z M 204.82 241.457 L 207.338 240.18 C 209.593 239.127 210.947 238.504 211.398 238.301 L 211.022 237.7 C 206.489 239.654 202.091 241.961 197.829 244.612 L 198.055 245.026 C 199.505 244.146 201.76 242.96 204.82 241.457 Z M 203.429 267.041 C 205.031 265.485 206.158 264.426 206.812 263.847 C 208.691 262.269 211.848 260.181 216.283 257.574 L 219.028 255.996 C 218.253 255.77 217.389 255.822 216.434 256.146 C 215.832 256.372 215.021 256.8 213.991 257.423 C 210.285 259.775 207.601 261.683 205.948 263.133 C 205.173 263.81 204.331 264.598 203.429 265.501 L 198.318 270.459 C 198.521 270.685 198.791 270.744 199.144 270.647 C 199.423 270.572 199.708 270.407 200.009 270.158 C 200.888 269.46 202.023 268.415 203.429 267.041 Z M 207.488 273.315 C 206.985 272.691 206.233 272.435 205.233 272.563 C 204.61 272.691 203.858 272.999 202.979 273.502 C 201.069 274.524 199.115 275.471 197.115 276.358 C 199.362 274.772 201.783 273.134 204.369 271.436 C 207.151 269.633 211.525 266.891 217.486 263.208 C 217.584 262.984 217.502 262.848 217.223 262.796 C 216.945 262.72 216.697 262.758 216.471 262.908 C 210.834 266.064 206.489 268.679 203.429 270.76 C 200.204 272.931 197.333 275.133 194.822 277.372 C 193.056 278.123 191.251 278.822 189.41 279.475 C 190.214 278.852 191.063 277.958 191.966 276.808 C 192.965 275.478 193.733 274.494 194.259 273.841 C 195.033 272.886 196.273 271.534 197.98 269.783 L 204.707 262.833 C 209.721 257.798 214.893 253.126 220.23 248.82 C 220.305 248.617 220.208 248.497 219.93 248.444 C 219.651 248.422 219.418 248.482 219.216 248.632 L 215.832 251.111 C 214.306 252.216 212.991 253.2 211.886 254.079 C 210.232 255.38 208.488 256.913 206.662 258.663 C 201.776 263.299 196.424 268.919 190.612 275.531 L 187.117 279.513 C 186.012 280.843 185.817 281.82 186.516 282.443 C 191.605 280.918 196.589 278.889 201.475 276.358 C 197.393 280.715 191.462 286.298 183.697 293.113 C 182.246 294.39 181.607 295.517 181.78 296.494 C 185.464 296.344 188.222 296.179 190.049 296.005 C 193.078 295.728 195.785 295.307 198.168 294.728 C 199.769 294.33 201.602 293.789 203.655 293.113 C 204.587 292.812 205.482 292.512 206.361 292.211 C 206.286 292.308 206.211 292.414 206.136 292.512 C 206.338 292.362 206.534 292.211 206.737 292.061 C 211.082 290.551 214.72 289.063 217.637 287.59 C 222.523 285.134 226.53 282.271 229.664 278.987 L 231.055 277.485 C 230.303 277.034 229.401 277.049 228.349 277.522 C 227.8 277.8 227.055 278.371 226.131 279.251 C 222.5 282.556 218.441 285.209 213.953 287.215 C 213.359 287.47 212.773 287.71 212.186 287.928 C 213.622 286.854 214.953 285.825 216.17 284.847 L 220.267 281.542 C 221.373 280.64 222.17 279.941 222.673 279.438 C 223.522 278.612 224.177 277.785 224.627 276.958 C 222.448 278.108 219.576 280.227 216.02 283.308 L 211.435 287.215 C 210.646 287.876 209.916 288.507 209.255 289.093 C 204.617 290.859 200.73 292.113 197.604 292.849 C 196.168 293.188 194.762 293.451 193.394 293.639 C 195.393 293.053 197.446 292.188 199.558 291.047 C 201.813 289.822 204.835 287.838 208.616 285.111 C 210.999 283.405 212.773 282.015 213.953 280.94 C 215.81 279.265 217.185 277.522 218.088 275.719 C 212.954 280.174 207.436 284.487 201.55 288.643 C 199.122 290.348 197.153 291.459 195.649 291.986 C 194.198 292.384 193.115 292.7 192.417 292.925 C 191.493 293.241 190.733 293.601 190.124 294.015 C 188.456 294.142 186.854 294.157 185.313 294.052 C 186.057 293.428 186.794 292.79 187.531 292.136 C 196.19 287.74 204.204 282.338 211.585 275.944 C 209.157 277.199 205.669 279.461 201.137 282.744 C 196.679 285.997 193.191 288.267 190.687 289.544 C 190.567 289.604 190.44 289.671 190.312 289.732 C 196.183 284.562 201.903 279.092 207.488 273.315 Z M 230.416 295.254 C 229.513 295.577 227.898 296.095 225.567 296.794 L 223.162 297.508 C 224.965 298.132 227.206 298.072 229.889 297.32 C 233.551 296.291 236.895 294.526 239.925 292.023 C 242.954 289.521 245.315 286.561 246.991 283.158 C 246.938 282.857 246.743 282.646 246.389 282.519 C 246.066 282.421 245.75 282.443 245.45 282.594 C 245.074 282.796 244.676 283.285 244.247 284.059 C 242.045 288.018 238.97 291.069 235.039 293.225 C 233.739 293.954 232.197 294.63 230.416 295.254 Z M 201.663 241.081 C 203.715 239.202 205.346 237.812 206.549 236.911 C 208.451 235.483 210.292 234.446 212.074 233.793 C 212.728 233.567 213.705 233.244 215.006 232.816 C 216.156 232.418 217.058 231.952 217.712 231.426 C 217.359 230.577 216.434 230.374 214.931 230.826 C 211.345 231.929 207.692 233.905 203.955 236.761 C 201.572 238.586 198.415 241.434 194.484 245.289 C 193.281 246.393 192.77 247.378 192.943 248.257 C 194.725 248.73 197.13 248.497 200.159 247.543 C 203.715 246.393 206.15 245.8 207.451 245.777 C 206.421 246.453 205.662 247.333 205.158 248.406 C 205.707 248.91 206.526 248.805 207.601 248.107 C 209.382 246.98 211.074 245.612 212.675 244.012 C 211.27 243.463 209.646 243.283 207.789 243.485 C 206.587 243.636 204.933 244.012 202.828 244.612 L 195.536 246.679 L 201.663 241.081 Z M 375.834 73.603 C 375.909 74.152 376.06 74.971 376.285 76.045 C 376.413 76.849 376.473 78.036 376.473 79.614 C 376.601 81.117 376.871 82.522 377.3 83.822 C 377.6 84.746 377.961 85.399 378.389 85.775 C 378.668 86.053 378.991 86.241 379.367 86.339 C 379.766 86.414 380.133 86.361 380.457 86.188 C 381.111 85.061 381.156 83.611 380.607 81.83 C 380.307 80.876 380.081 80.162 379.931 79.689 C 379.653 78.84 379.494 78.111 379.442 77.51 C 379.419 76.661 379.367 76.022 379.292 75.594 C 379.194 74.895 378.931 74.392 378.502 74.091 C 377.848 73.844 377.413 73.581 377.187 73.303 C 376.962 73.025 376.871 72.574 376.924 71.95 L 376.999 69.621 C 377.052 69.042 376.977 68.629 376.774 68.381 C 376.646 68.178 376.473 68.066 376.248 68.043 C 375.969 67.99 375.782 68.058 375.684 68.231 C 375.586 70.635 375.631 72.423 375.834 73.603 Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("g", { clipPath: "url(#clip2_1288_25012)", transform: "matrix(0.916917, 0, 0, 0.916917, 0, 0)" }, /*#__PURE__*/React__default$1.default.createElement("path", { d: "M202.237 129.301C201.789 129.926 201.509 130.715 201.393 131.667C201.317 132.269 201.294 133.128 201.334 134.238C201.334 135.213 201.468 135.932 201.742 136.4C202.016 136.908 202.453 137.276 203.053 137.51C203.618 137.726 204.189 137.761 204.772 137.626C205.897 137.375 206.765 136.622 207.365 135.377C207.598 134.927 207.674 134.547 207.598 134.238C207.557 134.045 207.47 133.87 207.336 133.712C207.161 133.554 206.975 133.49 206.782 133.507C206.45 133.525 206.141 133.846 205.85 134.471C205.541 135.097 205.238 135.506 204.947 135.698C204.463 136.09 203.997 136.125 203.548 135.815C203.24 135.582 203.065 135.173 203.024 134.588C202.867 133.303 203.007 132.029 203.432 130.761C203.607 130.195 203.869 129.903 204.219 129.885L204.83 129.973C204.988 129.973 205.122 129.903 205.238 129.768C205.355 129.651 205.425 129.505 205.442 129.33C205.483 128.979 205.355 128.699 205.063 128.483C204.638 128.115 204.114 128.033 203.49 128.249C202.983 128.424 202.57 128.775 202.237 129.301Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M199.004 131.842C198.578 131.065 198.054 130.586 197.43 130.411C196.865 130.218 196.265 130.253 195.624 130.528C194.983 130.802 194.459 131.211 194.051 131.755C193.719 132.204 193.597 132.602 193.672 132.952C193.713 133.186 193.818 133.379 193.993 133.537C194.185 133.694 194.389 133.741 194.605 133.683C194.913 133.022 195.228 132.573 195.537 132.339C195.77 132.164 196.032 132.064 196.323 132.047C196.615 132.006 196.865 132.076 197.081 132.251C197.256 132.409 197.401 132.672 197.518 133.04C197.588 133.239 197.646 133.472 197.693 133.741C197.611 133.712 197.512 133.694 197.401 133.683C196.568 133.624 195.799 133.986 195.1 134.764C194.208 135.757 193.742 136.972 193.701 138.415C193.661 139.426 193.888 140.15 194.371 140.577C194.622 140.828 195.042 141.015 195.624 141.132C196.382 141.29 197.139 141.22 197.897 140.928C198.578 140.682 199.149 140.302 199.616 139.788C199.662 139.788 199.709 139.771 199.761 139.759C200.152 139.66 200.344 139.379 200.344 138.912C200.361 138.696 200.303 138.328 200.169 137.802C200.035 137.293 199.918 136.651 199.819 135.874L199.557 133.946C199.458 133.069 199.278 132.368 199.004 131.842Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M197.343 135.377C197.46 135.359 197.646 135.319 197.897 135.26C197.926 135.248 197.955 135.243 197.984 135.231C198.013 135.459 198.042 135.704 198.071 135.961C198.246 137.305 198.38 138.17 198.479 138.561C198.479 138.573 198.479 138.585 198.479 138.59L198.071 138.941C197.704 139.233 197.267 139.397 196.76 139.438C196.277 139.496 195.816 139.42 195.391 139.204C195.432 138.228 195.554 137.48 195.77 136.955C196.079 136.096 196.603 135.57 197.343 135.377Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M207.802 116.184C207.528 116.26 207.394 116.523 207.394 116.973C207.371 117.329 207.365 117.633 207.365 117.878C207.377 118.065 207.4 118.223 207.423 118.346L207.656 119.222C207.732 119.456 207.843 119.847 207.977 120.391C208.111 120.917 208.309 121.781 208.559 122.991L208.909 124.948C208.303 125.433 207.755 125.918 207.277 126.409C206.945 126.701 206.741 126.981 206.666 127.256C206.532 127.682 206.625 127.998 206.957 128.191C207.324 128.407 207.761 128.261 208.268 127.753L208.996 127.022C209.084 126.935 209.171 126.847 209.259 126.759L210.22 132.018C210.354 132.485 210.581 132.952 210.89 133.42C211.141 133.811 211.403 134.063 211.677 134.179C211.851 134.255 212.038 134.279 212.23 134.238C212.446 134.179 212.597 134.074 212.696 133.917C212.854 133.683 212.83 133.379 212.638 133.011L212.143 132.193C212.009 132 211.881 131.626 211.764 131.083L210.628 125.766C210.75 125.708 210.89 125.637 211.036 125.562C211.636 125.229 212.067 124.977 212.318 124.802C212.685 124.527 212.929 124.276 213.046 124.042C213.238 123.593 213.162 123.265 212.813 123.049C212.562 122.874 212.16 122.932 211.618 123.224C211.141 123.493 210.68 123.768 210.249 124.042L209.2 119.164C209.09 118.679 208.985 118.247 208.88 117.878C208.769 117.452 208.664 117.101 208.559 116.827C208.385 116.283 208.134 116.067 207.802 116.184Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M191.429 133.829C190.887 133.379 190.234 133.203 189.477 133.303C188.72 133.402 188.125 133.723 187.7 134.267C187.484 134.518 187.292 134.898 187.117 135.406C186.476 137.235 186.476 139.058 187.117 140.869C187.35 141.588 187.682 142.166 188.108 142.593C188.632 143.159 189.232 143.422 189.914 143.381C190.631 143.364 191.295 142.961 191.895 142.184C192.186 141.775 192.332 141.412 192.332 141.103C192.315 140.887 192.245 140.705 192.128 140.548C191.994 140.372 191.825 140.273 191.633 140.256C191.382 140.238 191.062 140.419 190.671 140.811C190.281 141.202 189.961 141.383 189.71 141.366C189.087 140.682 188.72 139.876 188.603 138.941C189.32 138.316 190.13 137.872 191.021 137.597C191.505 137.463 191.796 137.352 191.895 137.276C192.204 137.042 192.379 136.651 192.419 136.107C192.46 135.155 192.128 134.395 191.429 133.829Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M189.506 135.348C189.605 135.289 189.699 135.26 189.798 135.26C189.856 135.26 189.943 135.301 190.06 135.377C190.176 135.494 190.246 135.599 190.264 135.698L189.623 136.02L188.865 136.516C188.807 136.458 188.795 136.382 188.836 136.283C189.011 135.833 189.232 135.523 189.506 135.348Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M179.135 125.678C178.127 125.678 177.369 125.807 176.862 126.058C176.297 126.333 175.685 126.934 175.027 127.869C174.695 128.296 174.473 128.699 174.357 129.067C174.223 129.593 174.258 130.043 174.473 130.411C174.59 130.604 174.765 130.75 174.998 130.849C175.074 130.872 175.143 130.884 175.202 130.878L176.717 139.175C176.728 139.227 176.734 139.28 176.746 139.321C176.699 139.368 176.658 139.408 176.629 139.438C176.28 139.747 176.134 140.08 176.192 140.431C176.21 140.682 176.35 140.898 176.6 141.074C176.757 141.179 176.932 141.249 177.125 141.278C177.614 143.744 178.051 145.648 178.436 147.004C178.593 147.547 178.768 147.927 178.96 148.143C179.31 148.535 179.671 148.64 180.038 148.465C180.405 148.33 180.591 148.015 180.591 147.53C180.591 147.278 180.492 146.899 180.3 146.39C179.811 145.023 179.315 143.113 178.814 140.665C178.838 140.659 178.855 140.647 178.873 140.635C179.589 140.098 180.166 139.601 180.591 139.146C181.914 141.488 183.47 143.358 185.253 144.754C185.602 145.064 185.94 145.251 186.272 145.309C186.739 145.426 187.077 145.309 187.292 144.959C187.484 144.608 187.449 144.258 187.176 143.907C187.077 143.773 186.808 143.516 186.36 143.148C184.373 141.687 182.8 139.876 181.64 137.714C181.768 137.515 181.908 137.293 182.048 137.042C182.473 136.242 182.747 135.687 182.864 135.377L183.476 133.244C183.575 132.777 183.621 131.766 183.621 130.206C183.662 129.739 183.639 129.342 183.563 129.009C183.464 128.617 183.225 128.15 182.835 127.606C182.036 126.596 181.25 125.982 180.475 125.766C180.259 125.707 179.816 125.678 179.135 125.678Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M177.124 128.22C177.416 127.928 177.649 127.741 177.824 127.665C177.999 127.606 178.278 127.577 178.669 127.577C179.583 127.618 180.23 127.782 180.621 128.074C180.836 128.232 181.046 128.512 181.261 128.921C181.594 129.581 181.757 130.276 181.757 130.995C181.739 131.579 181.553 132.415 181.203 133.507C180.83 134.612 180.469 135.488 180.125 136.137C180.044 136.166 179.968 136.207 179.892 136.253C179.653 136.423 179.543 136.668 179.572 136.984C179.21 137.504 178.803 137.942 178.348 138.298L176.425 129.038C176.606 128.798 176.839 128.524 177.124 128.22Z", fill: "white" })), /*#__PURE__*/React__default$1.default.createElement("g", { clipPath: "url(#clip3_1288_25012)", transform: "matrix(0.916917, 0, 0, 0.916917, 0, 0)" }, /*#__PURE__*/React__default$1.default.createElement("path", { d: "M121.087 364.932C121.183 364.419 121.065 363.788 120.722 363.054C120.382 362.34 119.981 361.861 119.52 361.621C119.009 361.361 118.446 361.354 117.836 361.586C117.265 361.792 116.808 362.156 116.46 362.679C115.999 363.401 115.702 364.507 115.562 366.014L115.436 367.23C115.305 368.413 115.31 369.304 115.451 369.905C115.741 370.988 116.422 371.86 117.481 372.507C118.319 373.023 119.12 373.187 119.873 373.006C120.36 372.899 120.933 372.534 121.591 371.905C122.218 371.26 122.572 370.668 122.644 370.13C122.664 369.902 122.624 369.687 122.532 369.492C122.39 369.283 122.219 369.173 122.014 369.177C121.829 369.179 121.63 369.293 121.405 369.526L120.481 370.393C120.117 370.78 119.768 371.015 119.436 371.103C118.769 371.253 118.21 370.998 117.767 370.345C117.468 369.969 117.251 369.364 117.103 368.538C118.176 367.948 119.123 367.277 119.942 366.512C120.605 365.93 120.987 365.404 121.087 364.932Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M118.397 365.361C117.826 365.911 117.506 366.21 117.444 366.266L117.368 366.206C117.503 365.456 117.612 364.996 117.681 364.83L118.069 363.788C118.182 363.589 118.371 363.456 118.636 363.376L118.812 363.698C118.939 364.005 119.067 364.216 119.198 364.337C119.051 364.65 118.784 364.991 118.397 365.361Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M111.592 365.5C111.385 365.663 111.258 365.973 111.225 366.437C111.195 366.921 111.191 367.965 111.227 369.559L111.347 372.805C110.497 371.625 109.801 370.35 109.271 368.973C109.048 368.266 108.743 367.905 108.35 367.884C108.192 367.882 108.028 367.943 107.86 368.081C107.718 368.214 107.621 368.37 107.575 368.561C107.493 368.846 107.531 369.219 107.677 369.681C108.306 371.87 109.63 374.029 111.651 376.165C112.366 376.971 112.989 377.19 113.515 376.832C113.898 376.6 114.031 376.172 113.908 375.549C113.649 374.942 113.471 374.49 113.368 374.207C113.228 373.792 113.163 373.25 113.171 372.584C113.236 371.821 113.263 371.255 113.24 370.894C113.087 369.629 113.026 368.676 113.065 368.033C113.101 367.596 113.13 367.27 113.152 367.061C113.176 366.694 113.151 366.375 113.071 366.11C112.965 365.8 112.753 365.579 112.441 365.432C112.098 365.267 111.82 365.287 111.592 365.5Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M104.041 365.146L104.054 365.248C103.896 365.246 103.732 365.307 103.563 365.445C103.419 365.551 103.333 365.692 103.304 365.853L103.447 367.312C103.469 367.494 103.504 367.614 103.56 367.676C103.638 367.755 103.768 367.808 103.956 367.833C104.325 367.878 104.606 367.823 104.792 367.663C104.981 367.524 105.078 367.306 105.09 367.009C105.1 366.919 105.081 366.654 105.03 366.228C104.986 365.869 104.937 365.635 104.876 365.526C104.714 365.319 104.437 365.188 104.041 365.146Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M104.578 369.851C104.29 369.907 104.118 370.127 104.073 370.496C104.03 370.707 104.052 370.999 104.146 371.379C104.509 372.845 104.885 374.193 105.288 375.427C105.717 376.7 106.092 377.643 106.418 378.241C106.676 378.67 106.894 378.939 107.066 379.055C107.416 379.287 107.731 379.283 108.024 379.042C108.331 378.751 108.321 378.271 107.987 377.605C107.051 375.543 106.307 373.368 105.755 371.081C105.656 370.661 105.545 370.365 105.408 370.197C105.142 369.865 104.86 369.748 104.578 369.851Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M100.35 368.065C99.9313 368.116 99.5324 368.219 99.1545 368.382C99.0926 368.211 99.0307 368.04 98.9537 367.857C98.057 365.721 97.5478 364.067 97.4261 362.895C97.3523 362.286 97.2034 361.906 96.9785 361.748C96.8294 361.649 96.6539 361.616 96.4512 361.64C96.2713 361.683 96.1392 361.781 96.0407 361.93C95.9075 362.132 95.8601 362.419 95.9068 362.805C96.1549 365.019 96.7348 367.2 97.661 369.352C97.6886 369.41 97.7019 369.464 97.7153 369.517C97.5898 369.67 97.4516 369.83 97.2956 370.014L95.9476 371.619C95.7696 371.846 95.6684 372.03 95.6376 372.171C95.6053 372.47 95.737 372.708 96.0319 372.878C96.2737 373.007 96.5649 373.033 96.897 372.945L98.2655 371.509C98.3257 371.44 98.3732 371.38 98.4139 371.32C98.51 371.603 98.6159 371.968 98.7182 372.415C98.809 372.768 99.0089 373.286 99.3164 373.956C99.6354 374.72 99.939 375.527 100.228 376.384L101.233 379.866L101.761 381.106C102.001 381.557 102.245 381.822 102.509 381.907C102.726 381.998 102.95 381.977 103.189 381.859C103.425 381.714 103.574 381.524 103.634 381.29C103.695 381.056 103.659 380.759 103.528 380.411C102.949 378.47 102.184 376.229 101.238 373.688C100.91 372.794 100.45 371.601 99.8449 370.117C99.9184 370.101 99.9843 370.079 100.043 370.058C100.435 369.894 100.662 369.791 100.724 369.735C100.833 369.674 100.967 369.479 101.132 369.137C101.252 368.827 101.286 368.603 101.223 368.474C101.099 368.194 100.809 368.057 100.35 368.065Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M95.3321 375.022C94.6211 374.813 93.8963 374.943 93.1525 375.424C92.6221 375.742 92.0916 376.287 91.568 377.057C91.2403 377.578 91.1655 377.978 91.3359 378.252C91.4484 378.445 91.6253 378.547 91.854 378.567C92.0827 378.587 92.2957 378.534 92.4877 378.421C92.6324 378.315 92.7993 378.164 92.9831 377.984L93.4028 377.487C93.7647 377.079 94.1342 376.904 94.5063 376.976C94.7645 377.013 95.0297 377.221 95.3019 377.6C95.4514 377.815 95.5832 378.053 95.6962 378.307C95.3195 378.366 94.9585 378.499 94.6142 378.713C93.7402 379.251 93.1589 380.111 92.8702 381.292C92.6536 382.162 92.6726 383.224 92.9139 384.478C93.0679 385.352 93.3526 386.003 93.7682 386.433C94.1552 386.798 94.6391 387 95.2139 387.047C95.7684 387.097 96.2897 386.986 96.7853 386.719C97.1616 386.543 97.5256 386.266 97.8857 385.9C98.1669 386.126 98.4698 386.193 98.801 386.097C99.0656 386.017 99.2613 385.822 99.3814 385.512C99.5064 385.243 99.5404 384.958 99.4815 384.642C99.4766 384.602 99.4031 384.391 99.2685 384.016C99.3018 383.895 99.309 383.785 99.295 383.67C99.2679 383.447 99.1452 383.283 98.9253 383.166C98.912 383.112 98.8919 383.06 98.871 383.001C98.7069 382.609 98.5897 382.094 98.5134 381.465C98.4786 380.783 98.4222 380.262 98.3584 379.906C98.1847 378.643 97.7211 377.478 96.9735 376.402C96.4721 375.66 95.9233 375.205 95.3321 375.022Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M94.888 381.253C95.0592 380.8 95.2934 380.469 95.5921 380.275C95.7663 380.186 96.0012 380.143 96.2975 380.155C96.3178 380.153 96.338 380.151 96.3651 380.147C96.4241 380.408 96.4772 380.676 96.5311 380.951C96.78 382.437 96.9536 383.473 97.0436 384.046C96.7161 384.511 96.4635 384.802 96.2934 384.926C96.1071 385.086 95.8923 385.181 95.6423 385.211C95.3923 385.241 95.1798 385.185 95.0055 385.048C94.7251 384.828 94.5803 384.482 94.5702 384.003C94.4635 383.123 94.5714 382.204 94.888 381.253Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M75.3311 374.051C75.2361 374.173 75.1706 374.311 75.1397 374.452C75.1244 374.495 75.1031 374.546 75.0886 374.595C75.004 374.86 75.0096 375.188 75.1062 375.589C75.2191 376.124 75.4257 376.922 75.7394 377.982L77.6347 383.998C78.5199 386.773 79.5344 389.485 80.6792 392.139C81.212 393.31 81.6414 394.136 81.9748 394.624C82.2798 395.047 82.5735 395.321 82.8626 395.443C83.3482 395.659 83.7241 395.593 84.0031 395.236C84.199 394.986 84.2305 394.68 84.0991 394.332C84.0215 394.088 83.8781 393.81 83.6546 393.494C83.0358 392.519 82.3496 391.044 81.6102 389.075L78.1538 379.234L83.6244 386.463C84.9449 388.135 86.0895 389.376 87.0601 390.198C87.7478 390.781 88.3889 391.149 88.9768 391.304C89.3395 391.411 89.6366 391.43 89.8757 391.367C89.9591 391.432 90.0349 391.492 90.103 391.545C90.2961 391.611 90.5021 391.613 90.7194 391.539C90.9163 391.467 91.0594 391.347 91.1554 391.177C91.3398 390.832 91.265 390.272 90.9165 389.49C90.582 388.824 90.145 387.765 89.6064 386.321L84.0623 371.139C83.974 370.807 83.8761 370.565 83.7694 370.42C83.5541 370.171 83.335 370.061 83.112 370.088C82.7824 370.196 82.5881 370.46 82.5225 370.88C82.4796 371.091 82.5071 371.431 82.6118 371.898C82.7792 372.544 83.0806 373.502 83.5093 374.775L88.11 388.115C88.1627 388.267 88.2145 388.411 88.2647 388.542C87.8934 388.251 87.4701 387.87 86.9939 387.393L84.4594 384.303C84.2629 383.983 83.8703 383.516 83.295 382.9C83.1353 382.713 82.5276 381.943 81.4711 380.582L79.3871 377.815C78.9306 377.046 78.603 376.551 78.4173 376.319C78.2575 376.133 77.9462 375.827 77.4834 375.403C77.076 375.041 76.7715 374.734 76.5833 374.483C76.2613 374.089 76.0096 373.88 75.8214 373.855C75.6332 373.829 75.4701 373.897 75.3311 374.051Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M49.6177 403.423C49.8633 403.187 50.1535 403.035 50.4888 402.974C50.8209 402.885 51.1213 402.931 51.3959 403.104C51.6208 403.262 51.8266 403.546 52.0135 403.955C52.1081 404.17 52.222 404.431 52.3484 404.738C52.2311 404.732 52.1062 404.72 51.9686 404.716C50.9942 404.765 50.1531 405.293 49.4514 406.291C48.5571 407.566 48.1872 409.039 48.3426 410.715C48.4373 411.891 48.8025 412.698 49.4232 413.123C49.7491 413.379 50.2618 413.536 50.9539 413.59C51.8544 413.666 52.723 413.478 53.5603 413.033C54.3156 412.647 54.9245 412.127 55.3936 411.473C55.4409 411.467 55.4933 411.447 55.5584 411.418C55.9972 411.248 56.1808 410.897 56.1151 410.356C56.1051 410.103 55.9858 409.685 55.7565 409.095C55.5298 408.525 55.3044 407.798 55.0804 406.912L54.5055 404.717C54.2676 403.716 53.9597 402.93 53.5683 402.36C52.9659 401.52 52.2905 401.039 51.5429 400.924C50.8604 400.78 50.1694 400.905 49.4647 401.313C48.76 401.722 48.2093 402.269 47.8126 402.955C47.4907 403.523 47.4046 404 47.5417 404.395C47.6218 404.66 47.7705 404.868 47.9953 405.026C48.2405 405.182 48.4835 405.207 48.7253 405.109C48.9907 404.302 49.2924 403.737 49.6177 403.423Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M52.0336 411.468C51.481 411.604 50.9365 411.581 50.4129 411.39C50.3232 410.255 50.3601 409.372 50.5362 408.733C50.7737 407.695 51.308 407.013 52.139 406.686C52.2717 406.649 52.4822 406.575 52.7645 406.472C52.7823 406.45 52.8145 406.432 52.8618 406.426C52.9149 406.694 52.9831 406.974 53.0657 407.259C53.4571 408.791 53.7339 409.773 53.9038 410.212C53.9063 410.232 53.923 410.258 53.9458 410.275L53.4841 410.709C53.0995 411.099 52.6157 411.35 52.0336 411.468Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M46.532 408.224C46.4456 407.116 45.9538 406.283 45.0633 405.725C44.3718 405.281 43.5904 405.17 42.726 405.391C41.8615 405.613 41.2175 406.068 40.8005 406.757C40.5858 407.078 40.4161 407.545 40.2848 408.158C39.7984 410.365 40.0544 412.476 41.052 414.482C41.4232 415.281 41.8896 415.904 42.4427 416.338C43.1304 416.92 43.8633 417.14 44.6481 416.997C45.4767 416.876 46.1904 416.316 46.7772 415.332C47.0576 414.817 47.1757 414.378 47.1322 414.019C47.0816 413.771 46.975 413.571 46.8177 413.405C46.6377 413.221 46.4278 413.13 46.2024 413.137C45.9094 413.152 45.5632 413.406 45.1655 413.915C44.7677 414.423 44.4215 414.677 44.1285 414.692C43.3096 413.989 42.7706 413.107 42.5042 412.041C43.2475 411.217 44.1244 410.589 45.1196 410.145C45.6615 409.922 45.9838 409.752 46.088 409.65C46.4133 409.336 46.561 408.859 46.532 408.224Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M43.6931 407.71C43.8446 407.829 43.9405 407.941 43.9747 408.054L43.2766 408.516L42.4679 409.197C42.3922 409.138 42.368 409.051 42.4013 408.931C42.5409 408.385 42.7541 407.996 43.0471 407.754C43.1537 407.673 43.2577 407.626 43.3726 407.612C43.4402 407.604 43.5473 407.639 43.6931 407.71Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M25.2061 401.133C24.8809 401.674 24.6807 402.172 24.5973 402.614C24.5157 403.242 24.6194 403.758 24.9211 404.154C25.0834 404.36 25.3066 404.505 25.5908 404.587C25.6811 404.597 25.779 404.612 25.8693 404.622L28.7533 413.984C28.7818 414.049 28.8035 414.115 28.8117 414.182C28.7668 414.208 28.7304 414.247 28.6889 414.3C28.3269 414.708 28.2048 415.114 28.3216 415.512C28.3771 415.8 28.5696 416.031 28.8848 416.198C29.0812 416.291 29.2929 416.341 29.5216 416.361C30.4295 419.154 31.2046 421.304 31.846 422.805C32.1048 423.412 32.3608 423.827 32.6141 424.05C33.0745 424.454 33.5082 424.525 33.9093 424.271C34.3161 424.064 34.488 423.672 34.4199 423.111C34.3846 422.82 34.2164 422.394 33.9221 421.833C33.1701 420.325 32.3342 418.182 31.4288 415.409L31.4584 415.371C32.2132 414.641 32.8132 413.992 33.2466 413.438C35.1061 415.938 37.1644 417.87 39.4356 419.242C39.8845 419.551 40.3027 419.72 40.696 419.741C41.253 419.811 41.6285 419.628 41.8292 419.192C42.003 418.759 41.9132 418.358 41.5464 417.991C41.4127 417.849 41.0658 417.589 40.4938 417.226C37.9913 415.814 35.9261 413.937 34.2915 411.596C34.3995 411.356 34.5162 411.075 34.6363 410.765C35.0171 409.778 35.2568 409.097 35.3484 408.722L35.7584 406.168C35.8076 405.613 35.7197 404.436 35.5007 402.63C35.4823 402.083 35.3995 401.626 35.2649 401.252C35.095 400.812 34.7524 400.305 34.2234 399.731C33.1557 398.673 32.1574 398.073 31.2284 397.932C30.9702 397.895 30.4526 397.923 29.662 398.019C28.4931 398.161 27.6327 398.416 27.0802 398.778C26.4633 399.176 25.8384 399.959 25.2061 401.133Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M27.0298 402.319C27.1769 402.006 27.3935 401.644 27.6878 401.244C27.9847 400.865 28.2287 400.616 28.4207 400.503C28.6152 400.411 28.9354 400.338 29.3882 400.283C30.4547 400.202 31.2277 400.3 31.7214 400.583C31.9936 400.736 32.2762 401.031 32.5837 401.474C33.0615 402.192 33.3483 402.973 33.4493 403.805C33.5111 404.484 33.4122 405.478 33.1602 406.792C32.8904 408.128 32.5962 409.207 32.2835 410.021C32.1981 410.052 32.1076 410.097 32.0255 410.155C31.7799 410.391 31.7003 410.696 31.7944 411.075C31.413 411.719 30.9948 412.284 30.5263 412.773L27.0298 402.319Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M60.1236 397.618C59.5787 397.252 58.9591 397.231 58.2665 397.569C57.7032 397.843 57.2727 398.307 56.9614 398.963C56.529 399.75 56.3154 400.702 56.314 401.821C56.3107 402.528 56.4043 403.526 56.6074 404.805C56.7445 405.935 57.0008 406.748 57.384 407.25C57.773 407.8 58.3314 408.165 59.0602 408.351C59.746 408.522 60.4131 408.482 61.0699 408.245C62.3387 407.795 63.2396 406.801 63.7608 405.276C63.9679 404.722 64.0024 404.272 63.871 403.924C63.7967 403.707 63.6707 403.516 63.4931 403.352C63.2683 403.194 63.043 403.146 62.8225 403.193C62.4399 403.26 62.1269 403.676 61.8768 404.44C61.6065 405.208 61.3126 405.724 61.0018 405.988C60.496 406.509 59.9603 406.615 59.3966 406.32C59.0057 406.093 58.7455 405.644 58.6162 404.973C58.2532 403.507 58.2365 402.013 58.5517 400.486C58.6748 399.805 58.9379 399.43 59.3408 399.36L60.0626 399.376C60.245 399.354 60.3906 399.254 60.5068 399.082C60.6256 398.93 60.6861 398.751 60.6818 398.546C60.6799 398.134 60.4918 397.828 60.1236 397.618Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M61.4366 385.551L61.8299 386.533C61.9506 386.793 62.1339 387.231 62.3657 387.841C62.5949 388.431 62.9461 389.404 63.4065 390.769L64.1246 393.015C63.4673 393.644 62.8927 394.276 62.4 394.906C62.0558 395.291 61.8587 395.644 61.8095 395.973C61.7139 396.485 61.8664 396.837 62.2786 397.014C62.7346 397.212 63.2209 396.982 63.7373 396.322L64.4794 395.374C64.5803 395.245 64.671 395.145 64.7506 395.067L66.5998 400.985C66.8209 401.507 67.15 402.016 67.5738 402.514C67.9193 402.932 68.2587 403.186 68.5926 403.283C68.806 403.346 69.0255 403.347 69.2427 403.272C69.4845 403.175 69.6454 403.031 69.7382 402.835C69.8878 402.542 69.8181 402.194 69.5434 401.795L68.8542 400.917C68.6717 400.713 68.4706 400.298 68.2591 399.686L66.199 393.724C66.3234 393.62 66.4674 393.506 66.6391 393.396C67.2883 392.926 67.753 392.575 68.019 392.337C68.4061 391.967 68.6546 391.642 68.7569 391.355C68.9167 390.807 68.7829 390.439 68.3472 390.238C68.032 390.07 67.574 390.194 66.9866 390.609C66.4644 390.995 65.9683 391.371 65.5136 391.748L63.6123 386.248C63.409 385.703 63.2335 385.217 63.0939 384.801C62.8786 384.326 62.6943 383.937 62.5408 383.633C62.2618 383.028 61.9409 382.813 61.5722 382.995C61.2653 383.122 61.1468 383.445 61.21 383.966C61.2389 384.374 61.2816 384.726 61.3372 385.014C61.3642 385.238 61.3999 385.418 61.4366 385.551Z", fill: "#021048" })), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M 122.285 282.296 C 122.674 284.27 123.142 285.82 123.684 286.952 C 124.32 283.402 124.018 279.854 122.791 276.312 C 121.58 272.777 119.627 269.818 116.927 267.432 C 114.954 265.688 112.756 264.428 110.329 263.637 C 107.754 262.824 105.264 262.656 102.851 263.139 C 100.322 263.633 98.132 264.847 96.29 266.791 C 94.399 268.779 93.395 271.019 93.267 273.502 C 85.922 270.742 78.234 269.441 70.188 269.6 C 62.156 269.787 54.526 271.431 47.312 274.531 C 42.34 276.684 38.505 279.212 35.809 282.125 C 34.164 283.887 32.895 285.829 32.003 287.948 C 31.066 290.206 30.646 292.462 30.747 294.712 C 30.824 296.241 31.152 297.883 31.735 299.653 C 32.139 300.829 32.78 302.407 33.651 304.383 C 34.107 305.495 34.195 306.307 33.908 306.81 C 33.54 307.481 32.584 307.782 31.033 307.712 C 26.649 307.413 22.973 307.885 19.991 309.127 C 18.196 309.903 16.66 310.96 15.382 312.298 C 13.994 313.722 13.075 315.307 12.639 317.046 C 12.167 318.905 12.301 320.751 13.041 322.569 C 13.801 324.445 15.007 325.775 16.652 326.558 C 15.679 326.969 14.371 327.343 12.739 327.688 C 10.457 328.184 9.12 328.489 8.724 328.596 C 5.413 329.476 3.211 330.959 2.118 333.053 C 1.456 334.3 1.347 335.644 1.781 337.089 C 2.247 338.57 3.117 339.492 4.395 339.846 C 3.112 338.823 2.674 337.356 3.084 335.438 C 3.473 333.608 4.407 332.196 5.892 331.204 C 7.1 330.403 8.663 329.826 10.572 329.477 C 12.872 329.175 14.58 328.943 15.69 328.782 C 16.982 328.572 17.755 328.135 18 327.475 C 18.184 326.944 18.023 326.386 17.522 325.802 C 17.382 325.619 16.886 325.142 16.033 324.372 C 14.422 322.937 13.738 320.989 13.998 318.518 C 14.254 316.144 15.244 314.193 16.955 312.669 C 19.808 310.106 23.984 309.047 29.491 309.489 C 30.664 309.586 31.519 309.614 32.066 309.579 C 33.026 309.486 33.78 309.205 34.33 308.73 C 34.94 308.216 35.317 307.495 35.468 306.555 C 35.583 305.737 35.505 304.888 35.237 304.004 C 35.049 303.385 34.706 302.615 34.204 301.688 C 33.577 300.544 33.184 299.779 33.018 299.404 C 32.048 297.202 31.797 294.778 32.275 292.137 C 32.699 289.656 33.677 287.356 35.212 285.246 C 37.714 281.828 41.674 278.877 47.107 276.394 C 54.677 272.982 62.739 271.269 71.286 271.258 C 79.833 271.248 87.893 272.939 95.459 276.335 C 95.637 275.918 95.711 275.375 95.677 274.719 C 95.626 273.959 95.599 273.395 95.589 273.026 C 95.572 271.367 96.139 269.8 97.275 268.326 C 98.343 266.908 99.696 265.887 101.345 265.276 C 102.88 264.699 104.559 264.501 106.381 264.681 C 108.05 264.836 109.711 265.283 111.359 266.019 C 113.735 267.102 115.797 268.662 117.542 270.683 C 119.31 272.714 120.545 274.981 121.265 277.477 C 121.453 278.096 121.79 279.702 122.279 282.293", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("g", { clipPath: "url(#clip4_1288_25012)", transform: "matrix(0.916917, 0, 0, 0.916917, 0, 0)" }, /*#__PURE__*/React__default$1.default.createElement("path", { d: "M170.752 415.115C170.56 415.07 170.272 415.07 169.888 415.115C169.139 415.134 168.588 415.166 168.223 415.212C167.462 415.314 166.745 415.578 166.079 416.015C165.861 415.964 165.637 416.009 165.407 416.144C165.087 416.318 164.882 416.645 164.799 417.141C164.767 417.346 164.767 417.604 164.799 417.912C164.773 418.099 164.799 418.259 164.863 418.394L166.495 429.487C166.623 430.644 166.738 431.512 166.847 432.091L167.135 433.698C167.25 434.123 167.391 434.477 167.551 434.759C167.5 434.779 167.449 434.798 167.391 434.824C167.18 434.933 166.994 435.081 166.847 435.274C166.7 435.486 166.642 435.705 166.687 435.917C166.751 436.412 167.148 436.676 167.871 436.721C168.723 436.785 169.76 436.399 170.976 435.563C172.237 434.747 173.197 433.936 173.856 433.12C174.772 431.962 175.22 430.792 175.2 429.615C175.2 429.037 175.092 428.426 174.88 427.783C174.605 426.966 174.304 426.368 173.984 425.982C173.581 425.487 173.075 425.127 172.48 424.889C171.859 424.632 171.245 424.548 170.624 424.632C171.757 423.108 172.416 421.397 172.608 419.488C172.781 417.88 172.48 416.639 171.712 415.758C171.411 415.417 171.091 415.199 170.752 415.115Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M170.624 419.359L170.432 420.227C170.112 421.43 169.587 422.555 168.864 423.603C168.544 424.072 168.211 424.42 167.872 424.632C167.865 424.638 167.82 424.664 167.744 424.696C167.731 424.645 167.724 424.587 167.712 424.535C167.539 423.809 167.411 423.089 167.327 422.381L166.527 417.816C166.835 417.501 167.263 417.289 167.808 417.173C168.211 417.063 168.832 417.031 169.664 417.076C169.901 417.076 170.061 417.108 170.144 417.173C170.272 417.256 170.381 417.417 170.464 417.655C170.637 418.15 170.688 418.716 170.624 419.359Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M171.904 426.883C172.115 426.966 172.32 427.14 172.512 427.397C173.152 428.252 173.376 429.114 173.184 429.969C173.101 430.439 172.883 430.921 172.544 431.416C172.205 431.975 171.827 432.425 171.424 432.766C171.085 433.088 170.624 433.422 170.048 433.763C169.888 433.872 169.728 433.969 169.568 434.052C169.536 433.949 169.497 433.827 169.44 433.699C169.12 433.075 168.915 432.458 168.832 431.834L168.704 430.387L168.512 429.423C168.512 429.423 168.48 428.992 168.416 428.201C168.39 427.892 168.345 427.538 168.288 427.14C168.441 427.108 168.646 427.043 168.896 426.947C169.408 426.799 170.195 426.741 171.264 426.786C171.565 426.786 171.776 426.818 171.904 426.883Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M157.342 418.62C156.887 418.645 156.503 418.703 156.19 418.781C156.196 418.71 156.196 418.658 156.19 418.62C156.106 418.215 155.902 417.99 155.582 417.945C155.601 417.99 155.498 418.041 155.262 418.105C155.089 418.125 155.006 418.285 155.006 418.588C154.986 418.98 154.973 419.385 154.973 419.809C154.717 420.214 154.602 420.555 154.621 420.838C154.666 421.05 154.781 421.237 154.973 421.385C155.006 421.404 155.038 421.417 155.07 421.417C155.095 421.867 155.14 422.33 155.198 422.799L155.486 425.146C155.486 425.146 155.518 425.706 155.582 426.754L155.998 431.609C156.017 431.975 156.126 432.753 156.318 433.956L157.054 437.46C157.265 438.341 157.566 438.959 157.95 439.325C158.251 439.602 158.558 439.724 158.878 439.679C159.281 439.634 159.537 439.434 159.646 439.068C159.646 439.036 159.646 439.01 159.646 438.972C159.793 438.901 159.941 438.817 160.094 438.714C160.67 438.348 161.202 437.866 161.695 437.267C162.354 436.496 162.847 435.647 163.167 434.728C163.34 434.258 163.506 433.506 163.679 432.477L163.967 430.998C164.076 430.246 164.127 429.583 164.127 429.005C164.127 428.188 163.999 426.966 163.743 425.339C163.615 424.568 163.5 423.989 163.391 423.603C162.988 422.169 162.271 420.948 161.246 419.938C160.562 419.25 159.883 418.826 159.198 418.652C158.731 418.543 158.11 418.536 157.342 418.62Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M156.35 420.806C156.695 420.645 157.079 420.549 157.502 420.517C158.315 420.472 158.993 420.697 159.55 421.192C159.851 421.449 160.158 421.835 160.478 422.349C160.734 422.844 160.971 423.391 161.182 423.989C161.355 424.548 161.554 425.642 161.79 427.268C161.874 428.124 161.918 428.76 161.918 429.165C161.899 429.808 161.79 430.561 161.598 431.416C161.406 432.445 161.214 433.229 161.022 433.763C160.747 434.58 160.446 435.19 160.126 435.596C159.774 436.065 159.352 436.451 158.846 436.753C158.75 436.348 158.616 435.679 158.43 434.76L158.11 433.152C157.982 432.49 157.886 431.815 157.822 431.127C157.822 430.226 157.803 429.648 157.758 429.39L157.47 427.847C157.425 427.654 157.387 427.088 157.342 426.143C157.278 425.455 157.099 424.375 156.798 422.896L156.446 421.192L156.35 420.806Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M151.293 430.419C150.8 430.438 150.346 430.593 149.917 430.869C149.168 431.319 148.592 432.091 148.188 433.184C147.74 434.342 147.529 435.55 147.548 436.817C147.568 437.589 147.721 438.296 147.996 438.939C148.316 439.666 148.765 440.193 149.341 440.515C149.872 440.817 150.474 440.9 151.133 440.772C151.792 440.663 152.33 440.367 152.733 439.872C153.117 439.376 153.386 438.727 153.533 437.91C153.68 437.074 153.757 435.821 153.757 434.149C153.757 432.477 153.392 431.364 152.669 430.805C152.285 430.528 151.824 430.4 151.293 430.419Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M151.325 432.509C151.536 432.85 151.645 433.133 151.645 433.345C151.664 433.474 151.658 433.686 151.613 433.988C151.594 434.374 151.658 434.965 151.805 435.756C151.805 436.123 151.76 436.444 151.677 436.721L151.485 437.3C151.44 437.473 151.402 437.718 151.357 438.039C151.293 438.316 151.21 438.534 151.101 438.682C150.717 438.766 150.442 438.766 150.269 438.682C150.16 438.598 150.032 438.393 149.885 438.071C149.648 437.319 149.533 436.785 149.533 436.464C149.533 436.097 149.61 435.647 149.757 435.113L150.013 434.213C150.186 433.718 150.41 433.294 150.685 432.927C150.922 432.65 151.133 432.509 151.325 432.509Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M141.404 433.634C140.827 434.129 140.379 434.843 140.059 435.788C139.848 436.348 139.707 436.978 139.643 437.685C139.579 438.135 139.566 438.663 139.611 439.261C139.611 439.73 139.675 440.11 139.803 440.386C139.886 440.624 140.143 440.978 140.571 441.447C141 441.878 141.352 442.141 141.628 442.251C141.928 442.36 142.3 442.412 142.748 442.412C143.471 442.412 143.996 442.328 144.316 442.154C144.508 442.54 144.687 443.138 144.86 443.955C144.988 444.836 145.052 446.173 145.052 447.974C145.007 448.597 144.937 448.99 144.828 449.163C144.591 449.658 144.265 449.826 143.836 449.678C143.516 449.292 143.305 448.713 143.196 447.942C143.049 446.701 142.959 446.045 142.94 445.98C142.748 445.382 142.472 445.093 142.108 445.112C141.852 445.112 141.66 445.254 141.532 445.53C141.448 445.678 141.384 445.916 141.34 446.238C141.275 446.623 141.224 447.157 141.179 447.845C141.135 448.443 141.167 448.938 141.275 449.324C141.487 450.051 141.935 450.707 142.62 451.285C143.087 451.755 143.561 452.025 144.028 452.089C144.751 452.173 145.436 451.851 146.076 451.125C146.441 450.694 146.684 450.289 146.812 449.903C146.921 449.601 146.992 449.022 147.036 448.167C147.036 446.025 146.972 444.534 146.844 443.698C146.8 443.376 146.652 442.701 146.396 441.672C146.204 440.836 146.089 440.148 146.044 439.614C146.025 439.293 146.031 438.315 146.076 436.689C146.076 435.936 145.999 435.39 145.852 435.049C145.66 434.618 145.321 434.2 144.828 433.795C144.399 433.454 144.06 433.236 143.804 433.152C142.991 432.83 142.191 432.991 141.404 433.634Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M143.036 435.113C143.183 435.068 143.292 435.1 143.356 435.21C143.439 435.293 143.465 435.403 143.42 435.531V436.206C143.375 436.464 143.388 436.676 143.452 436.849L143.644 437.332C143.727 437.544 143.772 437.859 143.772 438.264C143.772 438.862 143.727 439.312 143.644 439.614C143.516 439.917 143.369 440.129 143.196 440.257C142.984 440.386 142.748 440.418 142.492 440.354C142.255 440.29 142.056 440.161 141.883 439.968C141.583 439.647 141.455 439.196 141.499 438.618C141.519 438.315 141.64 437.846 141.851 437.203L142.108 436.528C142.28 435.968 142.479 435.576 142.716 435.338C142.799 435.229 142.908 435.158 143.036 435.113Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M131.29 434.824C131.207 435.081 131.181 435.383 131.226 435.724C131.61 440.013 132.077 443.17 132.634 445.209C132.909 446.283 133.357 446.803 133.978 446.784C134.279 446.784 134.522 446.656 134.714 446.398C134.906 446.16 135.015 445.884 135.034 445.562C135.054 445.286 134.951 444.707 134.714 443.826C134.439 442.797 134.35 441.736 134.458 440.643C134.586 439.531 134.906 438.508 135.419 437.589C136.078 438.534 136.475 439.537 136.603 440.611C136.667 441.061 136.718 441.769 136.763 442.733C136.872 443.524 137.128 444.128 137.531 444.534C137.934 444.939 138.318 445.048 138.683 444.855C139.022 444.643 139.15 444.18 139.067 443.473C138.875 441.801 138.574 440.238 138.171 438.778C137.87 437.75 137.544 437.023 137.179 436.592C136.923 436.251 136.603 436.001 136.219 435.853C135.815 435.679 135.431 435.64 135.067 435.724C134.279 435.898 133.607 436.753 133.05 438.296C132.922 437.248 132.762 436.238 132.57 435.274C132.487 434.76 132.295 434.457 131.994 434.374C131.693 434.309 131.463 434.457 131.29 434.824Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M129.69 438.103C129.581 437.46 129.357 436.933 129.017 436.528C128.678 436.123 128.204 435.808 127.609 435.595C126.649 435.21 125.798 435.177 125.049 435.499C124.537 435.711 124.069 436.155 123.641 436.817C122.597 438.341 122.117 440.335 122.2 442.797C122.245 444.919 122.821 446.398 123.929 447.234C124.486 447.639 125.132 447.845 125.881 447.845C126.63 447.845 127.244 447.639 127.801 447.234C128.742 446.527 129.325 445.318 129.562 443.601C129.67 442.939 129.741 441.685 129.786 439.839C129.786 439.048 129.754 438.47 129.69 438.103Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M125.433 437.878C125.708 437.512 125.977 437.332 126.233 437.332C126.06 437.634 126.124 437.994 126.425 438.425C126.598 438.637 126.873 438.926 127.257 439.293C127.622 439.788 127.782 440.566 127.737 441.64C127.673 442.54 127.5 443.505 127.225 444.534C127.033 445.067 126.841 445.402 126.649 445.53C126.438 445.704 126.169 445.775 125.849 445.755C125.548 445.71 125.292 445.595 125.081 445.402C124.652 445.016 124.396 444.341 124.313 443.376C124.121 441.016 124.492 439.184 125.433 437.878Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M113.879 432.509C113.77 432.978 113.7 433.506 113.655 434.084C113.636 434.618 113.61 434.94 113.591 435.049C113.527 435.39 113.412 435.673 113.239 435.885C113.092 435.692 112.951 435.325 112.823 434.792C112.695 434.297 112.548 433.956 112.375 433.763C112.138 433.506 111.831 433.364 111.447 433.345C111.082 433.326 110.762 433.429 110.487 433.666C110.25 433.859 110.039 434.2 109.846 434.695C109.123 436.367 108.707 438.148 108.598 440.032C108.553 440.566 108.553 441.383 108.598 442.476C108.598 443.055 108.63 443.485 108.694 443.762L108.918 444.566C108.938 444.759 108.938 445.093 108.918 445.562C108.899 445.968 108.918 446.289 108.982 446.527C109.046 446.72 109.155 447.009 109.302 447.395C109.366 447.652 109.379 448.051 109.334 448.585C109.29 449.054 109.354 449.44 109.526 449.742C109.635 449.935 109.77 450.076 109.943 450.16C110.135 450.244 110.327 450.244 110.519 450.16C110.794 449.819 110.954 449.343 110.999 448.745C111.063 448.102 111.011 447.138 110.839 445.852L110.615 443.858C110.487 442.765 110.41 441.981 110.391 441.511C110.346 439.839 110.634 438.245 111.255 436.721C111.556 437.473 111.876 438.618 112.215 440.161L113.943 448.199C114.09 449.118 114.263 449.742 114.455 450.064C114.666 450.34 114.935 450.533 115.255 450.642C115.595 450.771 115.883 450.739 116.119 450.546C116.504 450.308 116.651 449.884 116.568 449.26C116.548 449.067 116.484 448.842 116.375 448.585L116.151 447.909C116.043 447.543 115.947 447.022 115.863 446.334L115.351 440.643C115.223 439.036 115.268 437.48 115.479 435.981C115.671 434.612 115.767 433.892 115.767 433.827C116.171 434.168 116.459 434.824 116.632 435.788C116.952 437.332 117.195 438.727 117.368 439.968L117.72 442.572C117.848 444.199 117.976 445.402 118.104 446.173L118.36 447.427C118.443 447.858 118.552 448.154 118.68 448.327C118.891 448.565 119.109 448.713 119.32 448.778C119.621 448.861 119.909 448.829 120.184 448.681C120.485 448.507 120.651 448.276 120.696 447.974C120.715 447.762 120.677 447.479 120.568 447.138C120.312 446.154 120.101 444.823 119.928 443.151C119.909 442.553 119.845 441.916 119.736 441.254C119.736 441.19 119.64 440.534 119.448 439.293C119.147 437.602 118.904 436.354 118.712 435.563C118.392 434.194 118.008 432.991 117.56 431.962C117.176 431.062 116.715 430.548 116.183 430.419C115.588 430.246 115.063 430.432 114.615 430.966C114.276 431.352 114.026 431.866 113.879 432.509Z", fill: "#021048" }))), /*#__PURE__*/React__default$1.default.createElement("g", { clipPath: "url(#clip5_1288_25012)", transform: "matrix(0.6978580951690675, 0, 0, 0.6978580951690675, -98.17671203613281, -21.649383544921847)" }, /*#__PURE__*/React__default$1.default.createElement("path", { d: "M160.258 244.988L163.25 242.534C163.885 242.044 164.163 241.584 164.083 241.155C164.021 240.891 163.848 240.682 163.558 240.541C163.268 240.419 162.985 240.388 162.695 240.449C162.263 240.572 161.788 240.891 161.276 241.4C160.456 242.154 159.629 242.81 158.809 243.362C158.729 243.442 158.642 243.485 158.562 243.485C158.439 243.467 158.346 243.381 158.284 243.24C157.914 242.626 157.421 241.664 156.804 240.357L156.095 238.793C155.848 238.241 155.694 237.886 155.632 237.72L155.17 236.432C155.089 236.248 154.941 235.991 154.738 235.666C154.51 235.341 154.355 235.083 154.275 234.899C154.09 234.39 153.948 233.997 153.843 233.734C153.615 233.262 153.338 232.967 153.011 232.844C152.826 232.765 152.622 232.765 152.394 232.844C152.19 232.906 152.042 233.028 151.962 233.212C151.882 233.439 151.919 233.752 152.085 234.163L156.126 243.485C156.539 244.264 156.897 244.804 157.205 245.11C157.779 245.644 158.377 245.846 158.994 245.724C159.259 245.681 159.685 245.435 160.258 244.988Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M145.825 237.628C145.226 238.058 144.776 238.609 144.468 239.284C143.931 240.449 143.832 241.842 144.159 243.454C144.548 245.644 145.473 247.514 146.935 249.066C147.903 250.066 148.866 250.673 149.834 250.875C150.408 251.016 150.988 251.016 151.561 250.875C152.159 250.71 152.628 250.415 152.98 249.986C153.301 249.612 153.529 249.091 153.658 248.422C154.658 248.931 155.737 249.434 156.897 249.925C157.557 250.188 158.025 250.201 158.315 249.955C158.457 249.814 158.531 249.618 158.531 249.373C158.531 249.127 158.457 248.925 158.315 248.759C158.13 248.496 157.76 248.25 157.205 248.023C156.064 247.508 154.941 246.962 153.843 246.398C153.862 245.675 153.843 244.982 153.782 244.313C153.677 243.086 153.424 242.044 153.011 241.185C152.641 240.449 152.011 239.64 151.129 238.763C149.914 237.598 148.804 237.003 147.799 236.984C147.12 236.966 146.46 237.18 145.825 237.628Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M146.04 241.86C146.084 241.02 146.3 240.284 146.688 239.652C146.953 239.266 147.225 239.057 147.49 239.039C147.657 239.039 147.879 239.119 148.169 239.284C149.297 239.94 150.093 240.603 150.543 241.277C151.055 241.995 151.394 242.89 151.561 243.976C151.617 244.319 151.654 244.749 151.684 245.264C151.228 245.012 150.772 244.755 150.327 244.497C149.914 244.252 149.575 244.129 149.31 244.129C149.125 244.111 148.958 244.16 148.816 244.282C148.65 244.387 148.557 244.528 148.539 244.712C148.52 244.975 148.693 245.251 149.063 245.54C149.828 246.147 150.704 246.742 151.684 247.318C151.604 248.122 151.357 248.625 150.944 248.821C150.389 249.109 149.723 248.839 148.94 248.024C147.663 246.717 146.812 245.429 146.38 244.16C146.115 243.405 145.997 242.639 146.04 241.86Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M132.841 247.379C133.007 247.729 133.322 248.134 133.797 248.606C134.413 249.176 134.925 249.508 135.339 249.587C135.629 249.649 135.906 249.679 136.171 249.679L138.947 249.71L139.595 249.587C139.86 249.526 140.076 249.508 140.242 249.526C140.656 249.606 141.001 249.863 141.291 250.293C141.476 250.581 141.692 251.047 141.939 251.703C142.204 252.482 142.259 253.04 142.093 253.39C141.97 253.635 141.649 253.911 141.137 254.218C140.168 254.708 139.422 254.782 138.885 254.432C138.596 254.169 138.361 253.991 138.176 253.911C137.948 253.807 137.701 253.819 137.436 253.942C137.171 254.046 136.986 254.218 136.881 254.463C136.653 254.954 136.739 255.444 137.127 255.935C137.454 256.346 137.942 256.622 138.577 256.763C138.867 256.824 139.441 256.855 140.304 256.855L141.229 256.763C141.476 256.701 141.754 256.591 142.062 256.426C142.722 256.076 143.253 255.616 143.666 255.046C144.141 254.432 144.394 253.788 144.437 253.114C144.48 252.519 144.332 251.795 144.005 250.937C143.697 250.158 143.283 249.422 142.771 248.729C142.321 248.134 141.846 247.747 141.353 247.563C141.044 247.441 140.551 247.398 139.872 247.441L136.665 247.625C136.4 247.668 136.171 247.643 135.986 247.563C135.845 247.521 135.666 247.398 135.462 247.195C135.135 246.87 134.938 246.656 134.876 246.552C134.426 245.938 134.352 245.282 134.66 244.589C134.95 243.853 135.45 243.424 136.171 243.301C136.585 243.197 136.942 243.24 137.251 243.424C137.417 243.528 137.621 243.718 137.868 244.006C138.133 244.233 138.392 244.331 138.639 244.313C138.99 244.252 139.182 244.019 139.225 243.608C139.225 243.344 139.132 243.025 138.947 242.657C138.657 242.062 138.299 241.676 137.868 241.492C137.621 241.388 137.14 241.339 136.418 241.339C135.783 241.296 135.308 241.32 134.999 241.4C134.648 241.48 134.29 241.688 133.92 242.013C133.26 242.608 132.853 243.209 132.686 243.822C132.625 244.006 132.575 244.423 132.532 245.08C132.489 246.104 132.594 246.87 132.841 247.379Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M132.964 253.144C132.736 253.408 132.705 253.862 132.871 254.494L133.951 260.044C132.939 259.345 131.798 258.192 130.527 256.579C130.238 256.211 129.991 255.978 129.787 255.874C129.602 255.794 129.43 255.769 129.263 255.812C129.059 255.855 128.911 255.947 128.831 256.088C128.708 256.291 128.757 256.622 128.985 257.07C130.238 259.339 132.008 261.148 134.29 262.497C134.339 262.528 134.395 262.546 134.444 262.559L135.524 268.17C135.69 269.133 135.937 269.808 136.264 270.194C136.492 270.458 136.757 270.623 137.066 270.685C137.417 270.746 137.701 270.666 137.929 270.439C138.158 270.176 138.219 269.844 138.114 269.458C138.096 269.335 137.979 269.016 137.775 268.507C137.609 268.139 137.448 267.465 137.282 266.484L136.017 259.645C135.709 258.253 135.511 257.407 135.431 257.1C135.018 255.978 134.753 255.119 134.629 254.524C134.549 254.034 134.457 253.696 134.352 253.512C134.167 253.102 133.889 252.899 133.519 252.899C133.272 252.899 133.087 252.979 132.964 253.144Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M125.747 256.364C124.532 254.892 123.681 253.801 123.187 253.083C122.817 252.488 122.478 252.114 122.17 251.948C121.923 251.807 121.664 251.746 121.399 251.764C121.109 251.783 120.893 251.887 120.751 252.071C120.628 252.212 120.547 252.47 120.504 252.838C120.486 253.328 120.547 253.96 120.689 254.739L121.059 256.701C121.368 258.235 121.812 260.075 122.385 262.221C120.905 260.626 119.9 259.357 119.363 258.419C118.974 257.787 118.685 257.394 118.499 257.253C118.296 257.112 118.068 257.026 117.821 257.008C117.556 257.008 117.34 257.088 117.173 257.253C116.988 257.462 116.896 257.805 116.896 258.296C116.896 259.811 116.957 260.945 117.081 261.7C117.186 262.331 117.358 263.092 117.605 263.969C118.037 265.545 118.604 267.25 119.301 269.09L119.61 269.703C119.856 269.991 120.134 270.145 120.442 270.163C120.813 270.206 121.09 270.059 121.275 269.734C121.417 269.47 121.355 269.029 121.09 268.415C120.554 267.127 119.961 265.398 119.301 263.233C119.055 262.436 118.981 261.822 119.085 261.393C120.794 263.497 122.188 265.134 123.28 266.299C123.588 266.606 123.866 266.821 124.113 266.943C124.501 267.146 124.84 267.146 125.13 266.943C125.5 266.741 125.642 266.373 125.562 265.839C125.544 265.698 125.396 265.306 125.13 264.674C124.884 264.104 124.588 263.092 124.236 261.638L123.095 256.272L128.214 263.11C128.689 263.742 129.14 264.049 129.571 264.03C129.898 264.012 130.145 263.846 130.312 263.54C130.497 263.215 130.528 262.896 130.404 262.589C130.342 262.405 130.065 262.049 129.571 261.516C129.343 261.252 128.911 260.639 128.276 259.676C127.739 258.86 126.901 257.756 125.747 256.364Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M142.185 204.142C141.365 204.345 140.674 204.799 140.119 205.492C139.564 206.209 139.274 206.982 139.256 207.822C139.237 208.662 139.49 209.447 140.027 210.183C140.563 210.901 141.242 211.367 142.062 211.594C142.266 211.655 142.679 211.729 143.296 211.808C143.808 211.87 144.209 211.962 144.499 212.084C145.177 212.33 145.701 212.771 146.071 213.403C146.213 213.667 146.275 213.894 146.257 214.078C146.195 214.341 145.991 214.556 145.64 214.722C145.066 215.01 144.455 215.047 143.82 214.844C143.407 214.679 143.092 214.556 142.864 214.476C142.494 214.354 142.185 214.354 141.939 214.476C141.649 214.599 141.476 214.826 141.414 215.151C141.334 215.476 141.371 215.783 141.538 216.071C141.785 216.543 142.278 216.88 143.018 217.083C144.375 217.494 145.689 217.359 146.966 216.684C147.626 216.335 148.076 215.899 148.323 215.366C148.711 214.611 148.662 213.74 148.169 212.759C147.799 211.98 147.256 211.318 146.534 210.766C145.812 210.232 145.035 209.889 144.19 209.723C143.512 209.644 143.018 209.558 142.71 209.478C142.155 209.355 141.772 209.122 141.569 208.773C141.279 208.343 141.273 207.853 141.538 207.301C141.785 206.81 142.167 206.442 142.679 206.197C143.049 206.031 143.314 205.89 143.481 205.768C143.771 205.584 143.931 205.369 143.974 205.124C143.993 204.94 143.956 204.756 143.851 204.572C143.728 204.388 143.573 204.253 143.388 204.173C143.08 204.05 142.679 204.038 142.185 204.142Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M135.678 209.693C136.067 210.508 136.43 211.52 136.757 212.728C137.084 213.875 137.362 215.059 137.59 216.286C137.757 217.021 137.787 217.622 137.683 218.095C136.757 217.156 135.968 216.102 135.308 214.936C134.753 213.955 134.339 212.974 134.074 211.992C133.932 211.545 133.827 211.269 133.766 211.165C133.624 210.938 133.427 210.778 133.18 210.674C132.933 210.57 132.686 210.551 132.44 210.613C132.193 210.674 131.989 210.815 131.823 211.042C131.656 211.269 131.588 211.502 131.607 211.747C131.625 211.992 131.743 212.348 131.946 212.82C131.989 212.986 131.989 213.231 131.946 213.556C131.903 213.906 131.897 214.151 131.915 214.292C131.934 214.599 132.051 215.028 132.255 215.58C132.273 215.807 132.273 216.151 132.255 216.623C132.298 216.85 132.39 217.193 132.532 217.665C132.575 217.868 132.581 218.199 132.563 218.647C132.544 219.076 132.563 219.401 132.625 219.628C132.668 219.769 132.729 219.978 132.81 220.241C132.871 220.505 132.859 220.713 132.779 220.855C132.181 220.26 131.619 219.37 131.083 218.187L130.034 215.856C129.541 214.63 129.158 213.538 128.893 212.575C128.726 211.9 128.535 211.453 128.307 211.226C128.122 211.042 127.887 210.938 127.598 210.919C127.332 210.901 127.123 210.993 126.981 211.195C126.857 211.379 126.814 211.655 126.857 212.023L127.721 215.09C127.968 215.868 128.171 216.451 128.338 216.837C128.418 217.101 128.541 217.402 128.708 217.727L129.17 218.769C129.867 220.241 130.571 221.388 131.268 222.204C131.656 222.676 132.039 222.983 132.409 223.124C132.612 223.203 132.945 223.265 133.396 223.308C133.846 223.351 134.167 223.308 134.352 223.185C134.58 223.062 134.734 222.756 134.814 222.265C134.895 221.695 134.864 220.897 134.722 219.873C134.555 218.751 134.487 217.941 134.506 217.451C135.45 218.818 136.202 219.751 136.757 220.241C137.664 221.118 138.546 221.425 139.41 221.161C139.798 220.977 140.039 220.628 140.119 220.119C140.162 219.83 140.138 219.395 140.057 218.8L139.471 214.967C139.04 212.741 138.373 210.533 137.467 208.343C137.325 207.957 137.146 207.681 136.942 207.515C136.677 207.313 136.369 207.258 136.017 207.362C135.647 207.466 135.413 207.669 135.308 207.975C135.228 208.221 135.234 208.509 135.339 208.834C135.382 208.975 135.493 209.263 135.678 209.693Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M121.553 215.059C121.491 215.427 121.46 215.997 121.46 216.776V222.48C121.46 223.112 121.503 223.572 121.584 223.86L121.769 224.381C121.83 224.565 121.861 224.731 121.861 224.872C121.88 225.037 121.88 225.283 121.861 225.608L122.077 226.16C122.139 226.325 122.188 226.577 122.231 226.926L122.509 227.662C122.675 228.171 122.786 228.472 122.848 228.552C123.076 228.797 123.465 228.901 124.02 228.858C124.267 228.717 124.347 228.386 124.267 227.877L123.588 224.32C123.687 224.246 123.761 224.154 123.804 224.044C124.68 223.756 125.5 223.345 126.271 222.817C126.666 223.664 126.888 224.154 126.95 224.289L127.659 225.608C128.011 226.239 128.381 226.65 128.77 226.834C129.035 226.957 129.312 226.975 129.602 226.896C129.892 226.834 130.096 226.681 130.219 226.436C130.342 226.147 130.312 225.841 130.127 225.516C130.108 225.497 129.929 225.227 129.602 224.718C129.356 224.369 129.078 223.878 128.77 223.247L126.642 218.586C126.438 218.113 126.148 217.543 125.778 216.868L124.082 213.679C123.878 213.293 123.668 213.035 123.465 212.913C123.2 212.772 122.891 212.747 122.54 212.851C122.25 212.894 122.034 213.017 121.892 213.219C121.849 213.299 121.799 213.569 121.738 214.017L121.553 215.059Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M123.372 216.991C123.786 217.402 124.187 218.052 124.575 218.954L125.439 220.977C125.34 221.057 125.229 221.137 125.099 221.223C124.729 221.45 124.174 221.738 123.434 222.081L123.372 216.991Z", fill: "white" })), /*#__PURE__*/React__default$1.default.createElement("g", { clipPath: "url(#clip6_1288_25012)", transform: "matrix(0.6978580951690675, 0, 0, 0.6978580951690675, -98.17671203613281, -21.649383544921847)" }, /*#__PURE__*/React__default$1.default.createElement("path", { d: "M329.115 394.51C328.855 394.58 328.672 394.91 328.552 395.493L328.446 396.967C328.446 397.55 328.481 398.126 328.552 398.687C328.693 400.021 328.819 400.983 328.939 401.566L329.291 403.321C329.453 403.974 329.728 404.957 330.101 406.269C330.403 407.414 330.593 408.397 330.664 409.218C330.713 409.66 330.769 409.99 330.84 410.201C330.861 410.341 330.931 410.538 331.051 410.798C331.072 410.917 331.086 411.268 331.086 411.851C331.107 412.181 331.241 412.644 331.473 413.255C331.614 413.585 331.741 413.817 331.861 413.957C332.142 414.287 332.543 414.427 333.057 414.378C333.318 414.357 333.74 414.238 334.325 414.027C335.662 413.444 336.915 412.777 338.091 412.026C338.513 411.696 338.781 411.465 338.9 411.324C339.112 410.973 339.168 410.643 339.076 410.341C338.914 409.941 338.605 409.745 338.161 409.745C337.83 409.724 337.457 409.815 337.035 410.025C336.894 410.096 336.317 410.482 335.31 411.184C334.606 411.675 333.987 411.942 333.445 411.991L332.177 406.831C331.685 404.886 331.192 402.773 330.699 400.478L330.417 398.933C330.185 397.578 330.051 396.56 330.03 395.879C329.96 395.339 329.911 395.023 329.889 394.931C329.699 394.531 329.446 394.391 329.115 394.51Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M321.942 396.932C320.886 396.511 319.956 396.455 319.161 396.757C318.105 397.199 317.352 398.217 316.908 399.811C316.767 400.281 316.627 400.955 316.486 401.847C316.366 402.71 316.31 403.482 316.31 404.163C316.239 405.659 316.331 407.196 316.591 408.762C316.662 409.323 316.817 410.145 317.049 411.219L317.295 412.272C317.457 412.855 317.661 413.339 317.894 413.711C317.964 413.852 318.196 414.182 318.598 414.694C319.492 415.817 320.337 416.569 321.132 416.941C321.674 417.222 322.223 417.362 322.786 417.362C323.399 417.362 323.934 417.208 324.406 416.906C324.779 416.646 325.159 416.225 325.532 415.642C326.046 414.891 326.398 414.308 326.588 413.887C326.623 413.817 326.658 413.711 326.693 413.571C327.869 414.448 328.763 414.996 329.369 415.221C329.882 415.431 330.319 415.48 330.671 415.361C330.903 415.291 331.079 415.151 331.199 414.94C331.34 414.729 331.375 414.519 331.304 414.308C331.213 414.048 330.967 413.831 330.565 413.641C329.376 412.974 328.284 412.293 327.292 411.605L327.538 410.552C327.728 409.267 327.482 407.554 326.799 405.427C326.658 404.865 326.468 404.374 326.236 403.953C325.813 403.131 325.588 402.668 325.567 402.549L325.25 401.39C325.018 401.039 324.884 400.815 324.863 400.723V400.092C324.842 399.691 324.652 399.263 324.3 398.793C323.716 398.02 322.927 397.403 321.942 396.932Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M320.984 398.863C320.893 399.165 320.963 399.481 321.195 399.811C321.266 399.93 321.512 400.211 321.935 400.653C322.547 401.285 323.152 402.352 323.765 403.847C324.349 405.251 324.765 406.354 324.997 407.147C325.257 408.13 325.377 409.028 325.349 409.85C325.236 409.688 325.138 409.527 325.067 409.358C324.926 409.007 324.807 408.748 324.715 408.586C324.553 408.305 324.349 408.144 324.117 408.095C323.906 408.074 323.716 408.13 323.554 408.27C323.364 408.39 323.251 408.551 323.202 408.762C323.131 409.064 323.188 409.464 323.378 409.955C323.659 410.608 324.117 411.254 324.75 411.886C324.8 411.942 324.863 411.998 324.926 412.061C324.87 412.195 324.807 412.321 324.75 412.447C324.377 413.381 323.856 414.252 323.202 415.045C322.125 415.136 321.174 414.659 320.351 413.606C319.837 412.904 319.421 411.872 319.119 410.517C318.154 406.677 318.098 403.342 318.943 400.513C319.133 399.881 319.351 399.438 319.611 399.179C320.034 398.708 320.491 398.603 320.984 398.863Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M311.34 399.565C311.22 399.073 311.023 398.687 310.741 398.406C310.481 398.126 310.129 397.929 309.685 397.81C309.425 397.74 309.016 397.683 308.453 397.634C307.278 397.585 306.461 397.669 305.989 397.88C305.447 398.14 304.828 398.779 304.124 399.811C303.631 400.562 303.314 401.13 303.173 401.531C303.033 402.001 302.913 402.724 302.821 403.707L302.505 405.181C302.505 405.322 302.561 405.743 302.681 406.445C302.913 407.337 303.124 407.989 303.314 408.411C303.687 409.183 304.243 409.85 304.969 410.412C305.694 410.952 306.503 411.31 307.397 411.5C307.841 411.591 308.51 411.661 309.404 411.71C310.319 411.759 310.988 411.816 311.41 411.886C311.882 411.977 312.198 412.111 312.36 412.272C312.572 412.433 312.748 412.784 312.888 413.325L313.768 416.379C313.578 416.59 313.452 416.997 313.381 417.608C313.219 418.19 312.818 418.64 312.184 418.941C311.67 419.201 311.058 419.328 310.354 419.328C309.77 419.377 309.333 419.278 309.052 419.047C308.96 418.977 308.805 418.822 308.594 418.59C308.432 418.401 308.277 418.275 308.136 418.204C307.925 418.113 307.714 418.113 307.503 418.204C307.271 418.275 307.095 418.401 306.975 418.59C306.743 418.941 306.707 419.349 306.869 419.819C307.059 420.451 307.538 420.928 308.312 421.258C308.876 421.469 309.566 421.574 310.389 421.574C311.213 421.574 311.868 421.49 312.36 421.328C312.783 421.188 313.346 420.858 314.05 420.346C314.592 419.903 314.951 419.524 315.141 419.222C315.331 418.92 315.528 418.296 315.739 417.362C315.859 416.681 315.894 416.218 315.845 415.958L314.965 412.869C314.634 411.767 314.247 411.022 313.803 410.622C313.311 410.222 312.607 409.955 311.692 409.815C310.988 409.695 310.199 409.618 309.333 409.569C308.397 409.569 307.7 409.499 307.256 409.358C306.391 409.057 305.708 408.411 305.215 407.428C304.912 406.747 304.757 406.08 304.757 405.427C304.736 405.097 304.771 404.606 304.863 403.953C305.025 402.78 305.335 401.847 305.778 401.144C306.461 400.162 307.278 399.67 308.242 399.67C308.594 399.67 308.89 399.754 309.122 399.916C309.263 400.007 309.404 400.162 309.544 400.372C309.636 400.492 309.756 400.667 309.896 400.899C310.298 401.341 310.657 401.474 310.988 401.285C311.431 401.004 311.551 400.428 311.34 399.565Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M300.681 415.396C300.259 415.277 299.822 415.277 299.379 415.396C298.935 415.516 298.555 415.733 298.253 416.063C297.901 416.435 297.605 417.13 297.373 418.134C297.042 419.63 296.936 420.753 297.056 421.504C297.126 422.087 297.316 422.627 297.619 423.119C297.95 423.61 298.372 423.961 298.886 424.172C299.287 424.361 299.928 424.453 300.822 424.453C301.456 424.453 301.927 424.396 302.23 424.277C302.772 424.116 303.11 423.807 303.251 423.364C303.321 423.133 303.3 422.894 303.18 422.662C303.089 422.431 302.92 422.276 302.688 422.206C302.497 422.157 302.279 422.185 302.019 422.276C301.716 422.417 301.477 422.508 301.315 422.557C300.681 422.747 300.104 422.676 299.59 422.346C299.076 422.016 298.886 421.658 299.027 421.258C299.097 420.928 299.449 420.647 300.083 420.416C300.808 420.065 301.385 419.728 301.808 419.398C302.279 418.998 302.568 418.626 302.688 418.275C302.779 417.945 302.737 417.558 302.547 417.116C302.195 416.225 301.575 415.656 300.681 415.396Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M300.505 417.924C300.344 418.183 300.104 418.401 299.801 418.591L299.485 418.801C299.435 418.822 299.358 418.822 299.238 418.801C299.217 418.612 299.217 418.471 299.238 418.38L299.414 418.064C299.506 417.804 299.576 417.622 299.625 417.502C299.717 417.271 299.872 417.172 300.083 417.222L300.294 417.362L300.505 417.608L300.541 417.783L300.505 417.924Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M292.445 416.73C292.304 416.59 292.114 416.534 291.882 416.555C291.67 416.576 291.48 416.66 291.318 416.8C291.086 417.032 290.917 417.397 290.826 417.888C290.706 418.661 290.769 419.623 291.002 420.767C291.354 422.452 291.544 423.4 291.565 423.61C291.656 424.474 291.72 424.979 291.741 425.12C291.86 425.66 292.079 426.067 292.409 426.348C292.74 426.629 293.092 426.734 293.465 426.664C293.937 426.573 294.205 426.327 294.275 425.927C294.296 425.765 294.226 425.45 294.064 424.979C293.902 424.537 293.761 424.052 293.641 423.54L293.254 421.995C293.318 421.932 293.374 421.848 293.43 421.75C293.853 420.956 294.31 420.24 294.803 419.609C295.035 419.279 295.176 419.047 295.225 418.906C295.366 418.647 295.38 418.38 295.261 418.099C295.141 417.818 294.859 417.657 294.416 417.608C293.923 417.748 293.487 418.12 293.113 418.731L292.691 419.573C292.578 419.04 292.543 418.598 292.585 418.24C292.635 417.888 292.67 417.622 292.691 417.432C292.691 417.13 292.607 416.892 292.445 416.73Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M288.46 421.188C288.059 420.928 287.721 420.753 287.44 420.662C287.158 420.57 286.714 420.521 286.102 420.521C285.447 420.521 284.99 420.613 284.729 420.802C284.61 420.893 284.377 421.223 284.025 421.785L283.427 422.873C283.237 423.273 283.096 423.926 283.005 424.839C282.913 425.59 282.92 426.194 283.04 426.664C283.159 427.345 283.462 427.858 283.955 428.209C284.448 428.581 285.292 428.749 286.489 428.7C286.792 428.7 287.031 428.679 287.193 428.63C287.545 428.56 287.848 428.398 288.108 428.138C288.298 428.721 288.481 429.599 288.672 430.771L288.953 432.597C289.073 433.067 289.143 433.53 289.164 434.001L289.235 435.405C289.235 435.707 289.185 435.91 289.094 436.001C288.974 436.142 288.798 436.233 288.566 436.282C288.003 436.472 287.566 436.479 287.264 436.317C287.052 436.226 286.827 435.945 286.595 435.475C286.363 435.054 286.123 434.808 285.891 434.738C285.659 434.668 285.433 434.689 285.222 434.808C285.011 434.927 284.856 435.089 284.764 435.299C284.574 435.65 284.574 436.093 284.764 436.633C284.926 437.125 285.201 437.546 285.574 437.897C285.947 438.269 286.384 438.515 286.876 438.634C287.531 438.775 288.305 438.725 289.2 438.494C289.974 438.262 290.516 437.946 290.819 437.546C291.121 437.146 291.276 436.472 291.276 435.51C291.276 434.689 291.241 433.895 291.171 433.123L289.868 425.787C289.706 425.274 289.587 424.895 289.516 424.663C289.376 424.221 289.305 423.835 289.305 423.505C289.354 423.084 289.39 422.768 289.411 422.557C289.411 422.206 289.34 421.925 289.2 421.715C289.08 421.553 288.833 421.378 288.46 421.188Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M286.25 422.557H286.813L286.954 422.768L287.235 424.102L287.482 424.558C287.644 424.93 287.573 425.45 287.271 426.102C287.13 426.404 286.989 426.594 286.848 426.664C286.707 426.755 286.482 426.819 286.179 426.84C285.827 426.84 285.602 426.854 285.511 426.875C285.088 426.313 284.863 425.857 284.842 425.506C284.842 425.295 284.891 425 284.983 424.628C285.215 423.947 285.475 423.35 285.757 422.838C285.848 422.698 285.947 422.613 286.039 422.592L286.25 422.557Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M281.245 417.221C281.477 417.032 281.632 416.8 281.702 416.519C281.773 416.218 281.716 415.972 281.526 415.782C281.294 415.551 280.977 415.48 280.576 415.572C280.484 415.593 280.167 415.726 279.625 415.958C279.534 416 279.414 416.049 279.273 416.098C278.865 414.357 278.372 412.658 277.795 411.008C277.633 410.496 277.408 410.236 277.126 410.236C276.683 410.496 276.436 410.882 276.387 411.394C276.338 411.724 276.408 412.167 276.598 412.728C277.021 414.076 277.373 415.459 277.654 416.87C277.464 417.06 277.239 417.285 276.985 417.537C276.655 417.797 276.141 418.134 275.437 418.555C275.014 418.927 274.859 419.293 274.979 419.644C275.05 419.854 275.204 419.995 275.437 420.065C275.648 420.135 275.873 420.149 276.106 420.1C276.387 420.009 276.76 419.749 277.232 419.328C277.492 419.124 277.753 418.942 278.006 418.766C278.147 419.601 278.267 420.444 278.358 421.293C278.478 422.466 278.569 423.203 278.64 423.505C278.872 424.418 279.006 424.93 279.027 425.049C279.076 425.421 279.083 425.997 279.062 426.769C279.083 427.071 279.189 427.507 279.379 428.068L279.872 429.823C280.062 430.525 280.308 430.982 280.611 431.192C280.822 431.382 281.083 431.459 281.385 431.438C281.688 431.389 281.892 431.248 281.984 431.017C282.075 430.827 282.075 430.582 281.984 430.28C281.913 429.858 281.737 429.177 281.456 428.244C281.195 427.352 281.033 426.664 280.963 426.173L280.013 419.433C279.921 418.934 279.815 418.429 279.696 417.924C280.498 417.664 281.012 417.432 281.245 417.221Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M276.457 425.435C276.317 425.035 276.056 424.712 275.683 424.453C275.31 424.193 274.895 424.066 274.451 424.066C273.585 424.066 272.846 424.467 272.234 425.26C271.741 425.892 271.438 426.685 271.318 427.647C271.128 429.072 271.459 430.034 272.304 430.525C272.938 430.947 273.867 430.911 275.085 430.42C275.458 430.28 275.732 430.244 275.894 430.315C276.317 430.476 276.401 430.862 276.141 431.473C275.979 431.915 275.662 432.259 275.19 432.491C274.747 432.751 274.289 432.828 273.818 432.737C273.466 432.645 273.198 432.61 273.008 432.631C272.705 432.652 272.459 432.821 272.269 433.123C272.079 433.404 272.022 433.699 272.093 434C272.163 434.281 272.325 434.541 272.586 434.773C272.846 434.983 273.128 435.11 273.43 435.159C273.923 435.278 274.536 435.208 275.261 434.948C276.577 434.457 277.478 433.685 277.971 432.631C278.203 432.119 278.302 431.522 278.253 430.841C278.133 429.697 277.668 428.932 276.845 428.56C276.141 428.187 275.211 428.244 274.064 428.735C273.761 428.897 273.522 428.911 273.36 428.77C273.219 428.679 273.17 428.503 273.219 428.244C273.29 427.282 273.698 426.524 274.451 425.962C274.613 426.081 274.838 426.264 275.12 426.524C275.401 426.734 275.648 426.818 275.859 426.769C276.12 426.72 276.303 426.559 276.422 426.278C276.514 425.997 276.528 425.716 276.457 425.435Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M269.389 429.507C269.059 428.644 268.312 427.977 267.137 427.506C266.412 427.205 265.799 427.071 265.306 427.12C264.532 427.191 263.828 427.626 263.194 428.419C262.821 428.932 262.455 429.697 262.103 430.701C261.66 432.035 261.42 433.123 261.399 433.965C261.35 435.25 261.667 436.296 262.35 437.089C262.702 437.532 263.159 437.848 263.722 438.037C264.286 438.248 264.828 438.269 265.342 438.107C265.905 437.946 266.503 437.497 267.137 436.774C268.214 435.489 268.967 433.93 269.389 432.105C269.65 431.031 269.65 430.16 269.389 429.507Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M266.461 429.262C266.581 429.332 266.658 429.493 266.707 429.753L266.989 431.684C267.08 432.245 267.109 432.667 267.059 432.947C267.01 433.207 266.883 433.523 266.672 433.895C266.341 434.478 265.933 435.075 265.44 435.685C265.159 435.966 264.926 436.128 264.736 436.177C264.455 436.198 264.194 436.093 263.962 435.861C263.349 435.299 263.187 434.352 263.469 433.018C263.751 431.614 264.243 430.469 264.947 429.578C265.067 429.437 265.18 429.332 265.299 429.262L265.616 429.227H266.144L266.461 429.262Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M259.245 417.257C258.4 416.765 257.45 416.54 256.394 416.59C255.387 416.639 254.423 416.92 253.508 417.432C251.959 418.324 250.671 419.805 249.636 421.89C249.425 422.29 249.333 422.627 249.354 422.908C249.354 423.098 249.411 423.273 249.53 423.435C249.671 423.575 249.826 423.659 249.988 423.68C250.34 423.701 250.671 423.4 250.973 422.768C251.283 422.157 251.642 421.595 252.065 421.083L252.557 424.874C252.719 426.18 252.874 427.408 253.015 428.56C252.628 428.693 252.367 428.812 252.241 428.911C251.98 429.1 251.804 429.346 251.713 429.648C251.593 429.978 251.628 430.259 251.818 430.49C252.079 430.82 252.557 430.933 253.261 430.841C253.29 430.841 253.311 430.827 253.332 430.806C253.627 432.772 253.909 434.492 254.177 435.966L254.845 439.231C254.965 439.813 255.127 440.284 255.338 440.635C255.711 441.288 256.267 441.688 256.992 441.828C257.464 441.969 257.816 441.899 258.048 441.618C258.21 441.428 258.274 441.197 258.224 440.916C258.175 440.656 258.062 440.438 257.872 440.249C257.542 440.017 257.323 439.813 257.204 439.652C257.084 439.512 256.978 439.245 256.887 438.845L255.162 430.315C256.162 429.929 257.126 429.353 258.048 428.595C260.09 426.98 261.287 425.141 261.639 423.084C261.85 421.96 261.744 420.858 261.322 419.784C260.878 418.661 260.181 417.818 259.245 417.257Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M255.944 418.696C257.07 418.534 257.985 418.801 258.689 419.503C259.393 420.205 259.661 421.167 259.499 422.382C259.358 423.224 258.921 424.158 258.196 425.19C257.176 426.559 256.014 427.521 254.712 428.068L253.128 420.065C253.184 420.016 253.247 419.973 253.304 419.924C254.198 419.201 255.078 418.787 255.944 418.696Z", fill: "white" })), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M 167.065 276.998 C 166.539 277.439 166.166 278.027 165.935 278.762 C 165.886 278.874 165.778 279.266 165.616 279.938 L 165.493 280.77 C 165.444 281.505 165.655 282.167 166.132 282.754 C 166.623 283.357 167.237 283.71 167.974 283.808 C 168.283 283.842 168.5 283.891 168.613 283.955 C 168.775 284.053 168.922 284.225 169.055 284.47 C 169.285 284.798 169.448 285.096 169.546 285.375 C 169.728 285.915 169.757 286.586 169.644 287.385 C 169.546 288.006 169.384 288.472 169.153 288.781 C 168.844 289.172 168.431 289.393 167.925 289.442 C 167.448 289.506 167.114 289.378 166.918 289.05 C 166.835 288.903 166.805 288.683 166.819 288.389 C 166.854 288.061 166.844 287.835 166.795 287.703 C 166.712 287.473 166.583 287.336 166.402 287.286 C 166.122 287.174 165.852 287.262 165.591 287.556 C 165.183 288.046 165.125 288.648 165.419 289.369 C 165.616 289.873 165.925 290.3 166.353 290.643 C 166.5 290.775 166.648 290.853 166.795 290.888 C 166.942 290.937 167.1 290.961 167.262 290.961 C 167.984 291.025 168.529 290.986 168.907 290.838 C 169.188 290.706 169.482 290.505 169.791 290.226 C 170.381 289.688 170.774 289.114 170.971 288.512 C 171.069 288.168 171.118 287.62 171.118 286.87 C 171.118 286.17 171.084 285.646 171.02 285.302 C 170.922 284.895 170.764 284.47 170.554 284.029 C 170.308 283.539 170.077 283.195 169.865 283 C 169.536 282.705 169.07 282.5 168.466 282.387 C 167.96 282.274 167.64 282.167 167.507 282.069 C 167.36 281.956 167.228 281.774 167.114 281.53 C 166.982 281.27 166.918 281.064 166.918 280.918 C 166.903 280.819 166.932 280.633 167.016 280.354 L 167.286 279.472 C 167.517 278.884 167.694 278.502 167.827 278.321 C 168.136 277.929 168.5 277.743 168.907 277.758 C 169.119 277.772 169.311 277.865 169.473 278.027 C 169.634 278.188 169.708 278.37 169.694 278.566 C 169.679 278.663 169.654 278.801 169.62 278.982 C 169.634 279.144 169.733 279.276 169.914 279.374 C 170.096 279.472 170.273 279.487 170.455 279.423 C 170.784 279.31 170.981 279.021 171.045 278.566 C 171.108 278.125 171.005 277.693 170.725 277.268 C 170.465 276.861 170.111 276.572 169.669 276.41 C 169.242 276.263 168.784 276.248 168.293 276.361 C 167.837 276.474 167.424 276.689 167.065 276.998 Z", fill: "#021048", transform: "matrix(1, 0, 0, 1, 0, 2.842170943040401e-14)" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M 162.821 278.811 C 162.821 278.188 162.673 277.797 162.378 277.635 C 162.167 277.522 161.799 277.552 161.273 277.732 C 160.585 277.894 160.07 278.027 159.726 278.125 C 159.136 278.272 158.669 278.468 158.326 278.713 C 158.095 278.908 157.957 279.09 157.908 279.252 C 157.809 279.531 157.849 279.742 158.03 279.888 C 158.178 280.021 158.463 280.035 158.89 279.938 L 161.273 279.301 L 161.273 285.816 C 161.308 286.39 161.283 286.86 161.199 287.237 L 161.052 288.119 C 161.038 288.281 161.028 288.575 161.028 289.002 C 161.028 289.378 161.003 289.672 160.954 289.883 C 160.87 290.358 160.684 290.765 160.388 291.108 C 159.897 291.662 159.185 292.039 158.252 292.235 C 157.893 292.333 157.579 292.348 157.319 292.284 C 157.136 292.22 156.999 292.171 156.901 292.137 C 156.739 292.088 156.596 292.073 156.483 292.088 C 156.301 292.103 156.154 292.201 156.041 292.382 C 155.928 292.543 155.884 292.725 155.918 292.921 C 155.982 293.279 156.203 293.558 156.582 293.754 C 156.989 293.964 157.515 294.033 158.153 293.949 C 158.497 293.886 158.998 293.704 159.652 293.411 C 160.619 292.984 161.288 292.554 161.666 292.113 C 162.143 291.573 162.418 290.853 162.501 289.957 C 162.536 289.334 162.575 288.869 162.624 288.56 L 162.747 287.703 C 162.796 287.36 162.821 286.836 162.821 286.135 L 162.821 278.811 Z", fill: "#021048", transform: "matrix(1, 0, 0, 1, 0, 2.842170943040401e-14)" }), /*#__PURE__*/React__default$1.default.createElement("g", { clipPath: "url(#clip7_1288_25012)", transform: "matrix(0.6978580951690675, 0, 0, 0.6978580951690675, -98.17671203613281, -21.649383544921847)" }, /*#__PURE__*/React__default$1.default.createElement("path", { d: "M132.916 72.6289C132.539 72.5886 132.119 72.6574 131.675 72.8441C131.361 72.942 131.044 73.0958 130.719 73.3139C130.014 73.8568 129.476 74.9591 129.104 76.6352C128.965 77.2968 128.878 77.7227 128.849 77.9172C128.808 78.2942 128.822 78.7157 128.896 79.1737C128.992 79.9891 129.289 80.6526 129.792 81.1623C129.982 81.3299 130.392 81.6074 131.012 81.9844C131.811 82.4021 132.352 82.68 132.649 82.8143C133.282 83.0774 133.865 83.2254 134.407 83.2626C134.571 83.2802 134.809 83.2951 135.113 83.3174C135.397 83.3456 135.637 83.4082 135.826 83.5073C136.092 83.6306 136.384 83.9038 136.703 84.3333C136.965 84.664 137.16 84.9811 137.277 85.2884C137.592 85.9253 137.727 86.5775 137.684 87.2574C137.681 87.6226 137.61 87.9471 137.467 88.2184C137.164 88.7938 136.702 89.1441 136.074 89.2713C135.508 89.379 134.931 89.2498 134.335 88.8857C134.074 88.7127 133.916 88.5353 133.857 88.3475C133.804 88.1783 133.789 87.9082 133.811 87.5372C133.814 87.1719 133.723 86.8776 133.538 86.6603C133.2 86.3053 132.797 86.2728 132.334 86.5546C131.947 86.7922 131.729 87.1554 131.678 87.6526C131.625 87.9919 131.677 88.4225 131.839 88.9424C131.938 89.4133 132.119 89.7965 132.367 90.0835C132.623 90.3955 132.975 90.6636 133.411 90.8918C134.082 91.2117 134.798 91.3663 135.553 91.3577C136.316 91.3742 137.026 91.2216 137.683 90.8998C138.078 90.6873 138.369 90.4935 138.568 90.3146C139.349 89.659 139.785 88.8495 139.875 87.8799C139.931 87.1753 139.729 86.1524 139.261 84.807C138.97 84.0253 138.694 83.4721 138.432 83.1414C138.234 82.8803 137.827 82.526 137.206 82.0805C136.495 81.5669 135.904 81.2839 135.425 81.2271C134.922 81.2259 134.544 81.2063 134.304 81.1644C134.09 81.1417 133.716 81.0039 133.179 80.7592L131.707 80.0154C131.309 79.7755 131.064 79.5426 130.973 79.3167C130.889 79.1159 130.88 78.8438 130.958 78.4966C131.004 78.0492 131.114 77.3829 131.3 76.5002C131.427 75.9589 131.551 75.5835 131.676 75.3866C131.968 74.9999 132.303 74.8131 132.674 74.8347C132.902 74.9012 133.179 75.1929 133.499 75.7115C133.75 76.231 134.07 76.4404 134.453 76.3418C134.868 76.2811 135.052 75.9007 134.995 75.2105C134.907 74.551 134.706 73.9951 134.405 73.5391C134.022 73.0399 133.521 72.7358 132.916 72.6289Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M121.284 78.2829C121.445 78.5765 121.769 78.6678 122.266 78.5609C123.386 78.3973 124.314 77.8399 125.054 76.9013L126.582 81.5791C126.855 82.4559 127.012 83.1148 127.062 83.5598L127.147 84.4954C127.181 84.7596 127.283 85.1538 127.445 85.6737C127.557 86.1884 127.624 86.5799 127.64 86.85L127.618 88.4373C127.647 88.7512 127.621 89.0413 127.548 89.318C127.388 90.2821 126.869 90.9593 125.979 91.3535C125.307 90.9652 124.802 90.8477 124.458 91.0031C124.232 91.0943 124.081 91.272 124.001 91.5237C123.915 91.7566 123.908 91.9993 123.986 92.2498C124.117 92.6695 124.428 93.0053 124.922 93.2637C125.251 93.436 125.528 93.5076 125.749 93.4869C125.862 93.4724 126.029 93.434 126.261 93.3616L126.951 93.1463C127.203 93.0681 127.385 92.9906 127.497 92.9076C127.617 92.8497 127.887 92.614 128.311 92.2069C128.852 91.5779 129.203 91.0905 129.37 90.7429C129.635 90.2 129.774 89.5655 129.772 88.8307C129.761 88.3532 129.692 87.6877 129.563 86.8344L129.398 85.752C129.27 84.8986 129.2 84.4532 129.186 84.4093L129.001 83.2644C128.934 82.8936 128.781 82.3366 128.546 81.585L127.375 77.8271C127.193 77.2446 127.103 76.8465 127.108 76.6391C127.101 76.0225 127.089 75.6965 127.075 75.6526C127.002 75.2631 126.754 74.9969 126.343 74.8501C126.039 74.7593 125.681 74.7816 125.261 74.9127C124.696 75.0889 124.092 75.4282 123.442 75.9265C122.729 76.5129 122.192 76.9552 121.825 77.2554C121.351 77.6574 121.174 77.9944 121.284 78.2829Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M115.311 80.1109C115.105 79.6048 114.878 79.339 114.62 79.33C114.38 79.2881 114.209 79.4031 114.104 79.6627C114.067 79.8322 114.076 80.015 114.135 80.2029L115.911 87.0023C115.275 87.393 114.706 87.8866 114.207 88.4957C113.908 88.8636 113.798 89.1728 113.876 89.4234C113.91 89.5984 114.022 89.7354 114.211 89.8344C114.394 89.9147 114.587 89.937 114.781 89.8971C115.046 89.8626 115.384 89.6884 115.79 89.3765C116.005 89.2269 116.209 89.0876 116.412 88.942L117.087 91.549C117.756 94.1373 118.304 96.0695 118.727 97.3601C118.883 97.8612 119.072 98.1802 119.3 98.3153C119.452 98.426 119.636 98.4648 119.849 98.419C120.051 98.4041 120.219 98.3243 120.363 98.19C120.675 97.8659 120.697 97.2748 120.43 96.4168L119.254 92.8663C118.989 92.1723 118.799 91.517 118.68 90.9149L118.458 89.541C118.393 89.1765 118.265 88.7009 118.082 88.1122C118.113 88.1024 118.144 88.0926 118.176 88.0828C118.847 87.8049 119.239 87.6276 119.351 87.5446C119.762 87.1622 119.851 86.7841 119.613 86.3977C119.383 86.0364 118.951 85.9307 118.31 86.0825C118.011 86.1412 117.721 86.2042 117.443 86.2841L115.311 80.1109Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M108.648 96.07C108.791 96.5272 108.978 96.8607 109.2 97.0662C109.519 97.3586 109.986 97.4878 110.596 97.4557C110.943 97.4644 111.462 97.4057 112.159 97.2777C112.874 97.1438 113.349 97.2981 113.574 97.7299C113.759 98.1049 113.691 98.5041 113.362 98.9296C112.964 99.4867 112.415 99.8229 111.71 99.9258L111.179 99.9884C110.966 100.034 110.784 100.091 110.645 100.155C110.414 100.296 110.278 100.524 110.237 100.832C110.195 101.14 110.246 101.413 110.386 101.644C110.693 102.119 111.188 102.336 111.86 102.284C112.401 102.253 112.925 102.055 113.431 101.691C114.557 100.949 115.256 100.078 115.542 99.0745C115.714 98.5195 115.729 97.9511 115.598 97.3737C115.452 96.7525 115.164 96.2718 114.733 95.9253C113.845 95.2195 112.448 95.1122 110.539 95.6179C110.433 95.1219 110.52 94.6275 110.798 94.1285C111.082 93.6482 111.463 93.3233 111.94 93.1538C112.135 93.6224 112.326 93.9477 112.523 94.1403C112.897 94.4566 113.248 94.5192 113.58 94.3262C113.837 92.9405 113.664 92.0116 113.054 91.5352C112.469 91.051 111.723 91.0224 110.821 91.4412C109.975 91.8216 109.337 92.4675 108.911 93.3768C108.504 94.2803 108.419 95.1794 108.648 96.07Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M107.519 96.4223C107.057 95.6041 106.551 95.0197 106.005 94.6607C105.459 94.3017 104.828 94.1549 104.112 94.2203C103.395 94.2856 102.773 94.5209 102.236 94.9424C101.175 95.7339 100.607 96.8937 100.534 98.4282C100.488 99.3841 100.713 100.592 101.22 102.063C101.395 102.627 101.589 103.027 101.799 103.257C102.099 103.624 102.52 103.87 103.062 103.997C103.865 104.207 104.688 104.197 105.537 103.981C106.366 103.77 107.079 103.363 107.671 102.766C108.083 102.383 108.283 102.011 108.287 101.646C108.304 101.414 108.237 101.201 108.091 101.02C107.964 100.833 107.779 100.725 107.547 100.709C107.295 100.718 107.004 100.891 106.673 101.221C106.243 101.541 105.82 101.797 105.4 101.996C104.912 102.197 104.465 102.267 104.055 102.21C103.644 102.152 103.303 101.942 103.028 101.568C102.766 101.168 102.674 100.764 102.751 100.348C104.232 99.7972 105.67 99.1083 107.065 98.2816C107.461 98.0691 107.7 97.8432 107.786 97.6103C107.896 97.3011 107.806 96.903 107.519 96.4223Z", fill: "#021048" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M103.009 96.8664C103.051 96.7157 103.116 96.6131 103.191 96.5689L103.464 96.4495L104.249 96.2049L104.604 96.1286C104.653 96.1336 104.826 96.2448 105.117 96.4496C105.402 96.6355 105.545 96.7627 105.546 96.8312L104.08 97.8724C103.38 98.3449 102.851 98.613 102.504 98.6729C102.642 98.0113 102.813 97.4085 103.009 96.8664Z", fill: "white" }), /*#__PURE__*/React__default$1.default.createElement("path", { d: "M86.8297 91.3622C86.8297 91.3622 86.8492 91.4248 86.859 91.4561C86.8692 91.4667 86.8711 91.4729 86.8688 91.4874C86.7771 91.7015 86.8053 92.057 86.9615 92.558C87.3189 93.7042 87.6161 94.9447 87.8431 96.269L89.496 105.546C89.8357 107.365 90.1308 108.709 90.3713 109.568C90.548 110.29 90.7744 110.817 91.0359 111.148C91.4576 111.683 91.9498 111.914 92.5291 111.851C92.8127 111.81 93.0529 111.653 93.2454 111.387C93.4378 111.121 93.495 110.862 93.4169 110.612C93.3642 110.443 93.2554 110.27 93.0842 110.097C92.8806 109.886 92.7279 109.727 92.626 109.621C92.4275 109.36 92.2943 108.955 92.2139 108.41L89.8746 96.0479L95.3243 104.691C95.8344 105.377 96.4488 106.045 97.155 106.697C97.6886 107.15 98.1161 107.394 98.4502 107.427C98.7156 107.462 98.96 107.406 99.1915 107.265C99.2084 107.253 99.2296 107.233 99.2445 107.214C99.3394 107.253 99.4429 107.276 99.5444 107.292C99.8785 107.326 100.165 107.25 100.402 107.06C100.6 106.812 100.613 106.478 100.432 106.054L99.8568 105.202C99.5562 104.746 99.2919 103.832 99.0701 102.458C98.7329 100.935 98.5021 99.797 98.3804 99.031L98.0923 97.334C97.7217 94.8863 97.2028 92.7803 96.5357 91.016C96.2964 90.4034 96.1311 89.9396 96.0335 89.6264C95.8389 89.0686 95.7074 88.5804 95.6471 88.1663C95.6116 87.765 95.5551 87.4734 95.4776 87.2914C95.3224 86.9481 95.0971 86.7778 94.8018 86.7805C94.4873 86.8099 94.282 86.9907 94.1777 87.3188C94.1107 87.5458 94.1072 87.8218 94.1609 88.1486C94.2095 88.5252 94.4034 89.3238 94.7363 90.5462L95.2671 92.5798C95.7476 94.6291 96.1256 96.8133 96.4137 99.1288L96.9967 101.661C97.0755 101.98 97.1408 102.455 97.1969 103.077C97.2206 103.241 97.2521 103.43 97.3001 103.628C97.0362 103.312 96.7872 102.977 96.5406 102.628L89.3195 91.6167C88.9801 91.1246 88.7099 90.8103 88.507 90.6674C88.0889 90.3648 87.7102 90.2767 87.3583 90.407C87.17 90.4658 87.0177 90.5957 86.8932 90.7926C86.7686 90.9895 86.7523 91.1801 86.8297 91.3622Z", fill: "#021048" }))); const DiscordLogo = () => /*#__PURE__*/React__default$1.default.createElement("svg", { viewBox: "115.237 115.462 66.898 66.898", width: "66.898", height: "66.898", xmlns: "http://www.w3.org/2000/svg" }, /*#__PURE__*/React__default$1.default.createElement("g", { transform: "matrix(0.3344910442829132, 0, 0, 0.3344910442829132, 93.82939147949219, 109.77567291259766)" }, /*#__PURE__*/React__default$1.default.createElement("defs", null, /*#__PURE__*/React__default$1.default.createElement("rect", { id: "SVGID_1_", x: "78", y: "31", width: "172", height: "172" })), /*#__PURE__*/React__default$1.default.createElement("clipPath", { id: "SVGID_2_" }, /*#__PURE__*/React__default$1.default.createElement("rect", { x: "78", y: "31", width: "172", height: "172", style: { overflow: 'visible' } })), /*#__PURE__*/React__default$1.default.createElement("g", { className: "st0", clipPath: "url('#SVGID_2_')" }, /*#__PURE__*/React__default$1.default.createElement("path", { className: "st1", d: "M78,116.8C78,69.4,116.4,31,163.8,31c47.4,0,85.8,38.4,85.8,85.8s-38.4,85.8-85.8,85.8c0,0,0,0,0,0 C116.4,202.5,78,164.1,78,116.8C78,116.8,78,116.8,78,116.8z", fill: "rgb(88, 101, 242)" }), /*#__PURE__*/React__default$1.default.createElement("path", { className: "st2", d: "M202.4,81.9c-7.3-3.3-14.9-5.7-22.8-7c-1,1.8-2.1,4.1-2.9,6c-8.4-1.3-16.9-1.3-25.3,0c-0.9-2.1-1.9-4.1-3-6 c-7.9,1.3-15.6,3.7-22.8,7.1c-14.4,21.5-18.3,42.4-16.4,63.1c8.5,6.3,17.9,11.1,28,14.1c2.3-3.1,4.3-6.3,6-9.7 c-3.3-1.2-6.4-2.7-9.4-4.5c0.8-0.6,1.5-1.2,2.3-1.8c17.7,8.4,38.3,8.4,56,0c0.8,0.6,1.5,1.2,2.3,1.8c-3,1.8-6.2,3.3-9.5,4.5 c1.7,3.4,3.7,6.6,6,9.7c10.1-3.1,19.6-7.8,28-14.1C221.1,121.1,214.9,100.3,202.4,81.9z M145.6,132.3c-5.5,0-9.9-5-9.9-11.1 s4.4-11.2,9.9-11.2c5.6,0,10,5,10,11.2C155.5,127.3,151.2,132.3,145.6,132.3z M182.4,132.3c-5.5,0-9.9-5-9.9-11.1 s4.4-11.2,9.9-11.2c5.6,0,10,5,9.9,11.2S187.9,132.3,182.4,132.3z", fill: "rgb(255, 255, 255)" }))), /*#__PURE__*/React__default$1.default.createElement("rect", { x: "115.237", y: "115.462", className: "st3", width: "66.898", height: "66.898", fill: "none" })); const pageHeaderHeight = 300; const pageHeaderPaddingY = 74; const pageHeaderPaddingX = 250; const DashboardHeader = () => { const { translateMessage } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { "data-css": "default-dashboard" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { position: "relative", overflow: "hidden", bg: "white", height: pageHeaderHeight, py: pageHeaderPaddingY, px: ['default', 'lg', pageHeaderPaddingX] }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { position: "absolute", top: 30, left: 0, opacity: 0.9, animate: true, display: ['none', 'none', 'none', 'block'] }, /*#__PURE__*/React__default$1.default.createElement(RocketSVG, null)), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, { textAlign: "center", color: "grey100" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.H2, { fontWeight: "bold" }, translateMessage('welcomeOnBoard_title')), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, { opacity: 0.8 }, translateMessage('welcomeOnBoard_subtitle'))))); }; const boxes = ({ translateMessage }) => [{ variant: 'Details', title: translateMessage('addingResources_title'), subtitle: translateMessage('addingResources_subtitle'), href: 'https://docs.adminjs.co/basics/resource#providing-resources-explicitly' }, { variant: 'Docs', title: translateMessage('customizeResources_title'), subtitle: translateMessage('customizeResources_subtitle'), href: 'https://docs.adminjs.co/basics/resource#customizing-resources' }, { variant: 'Plug', title: translateMessage('customizeActions_title'), subtitle: translateMessage('customizeActions_subtitle'), href: 'https://docs.adminjs.co/basics/action' }, { variant: 'Cup', title: translateMessage('writeOwnComponents_title'), subtitle: translateMessage('writeOwnComponents_subtitle'), href: 'https://docs.adminjs.co/ui-customization/writing-your-own-components' }, { variant: 'Photos', title: translateMessage('customDashboard_title'), subtitle: translateMessage('customDashboard_subtitle'), href: 'https://docs.adminjs.co/ui-customization/dashboard-customization' }, { variant: 'IdentityCard', title: translateMessage('roleBasedAccess_title'), subtitle: translateMessage('roleBasedAccess_subtitle'), href: 'https://docs.adminjs.co/tutorials/adding-role-based-access-control' }]; const Card = styledComponents.styled(DesignSystem.Box)` display: ${({ flex }) => flex ? 'flex' : 'block'}; color: ${({ theme }) => theme.colors.grey100}; height: 100%; text-decoration: none; border: 1px solid transparent; border-radius: ${({ theme }) => theme.space.md}; transition: all 0.1s ease-in; &:hover { border: 1px solid ${({ theme }) => theme.colors.primary60}; box-shadow: ${({ theme }) => theme.shadows.cardHover}; } & .dsc-icon svg, .gh-icon svg { width: 64px; height: 64px; } `; Card.defaultProps = { variant: 'container', boxShadow: 'card' }; const Dashboard$1 = () => { const { translateMessage, translateButton } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, null, /*#__PURE__*/React__default$1.default.createElement(DashboardHeader, null), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { mt: ['xl', 'xl', '-100px'], mb: "xl", mx: [0, 0, 0, 'auto'], px: ['default', 'lg', 'xxl', '0'], position: "relative", flex: true, flexDirection: "row", flexWrap: "wrap", width: [1, 1, 1, 1024] }, boxes({ translateMessage }).map((box, index) => /*#__PURE__*/ // eslint-disable-next-line react/no-array-index-key React__default$1.default.createElement(DesignSystem.Box, { key: index, width: [1, 1 / 2, 1 / 2, 1 / 3], p: "lg" }, /*#__PURE__*/React__default$1.default.createElement(Card, { as: "a", href: box.href, target: "_blank" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, { textAlign: "center" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Illustration, { variant: box.variant, width: 100, height: 70 }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.H5, { mt: "md" }, box.title), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, null, box.subtitle))))), /*#__PURE__*/React__default$1.default.createElement(Card, { width: 1, m: "lg" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, { textAlign: "center" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Illustration, { variant: "AdminJSLogo" }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.H5, null, translateMessage('needMoreSolutions_title')), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, null, translateMessage('needMoreSolutions_subtitle')), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, { mt: "xxl" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { as: "a", variant: "contained", href: "https://forms.adminjs.co/", target: "_blank" }, translateButton('contactUs'))))), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { width: [1, 1, 1 / 2], p: "lg" }, /*#__PURE__*/React__default$1.default.createElement(Card, { as: "a", flex: true, href: "https://adminjs.page.link/discord", target: "_blank" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flexShrink: 0, className: "dsc-icon" }, /*#__PURE__*/React__default$1.default.createElement(DiscordLogo, null)), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { ml: "xl" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.H5, null, translateMessage('community_title')), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, null, translateMessage('community_subtitle'))))), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { width: [1, 1, 1 / 2], p: "lg" }, /*#__PURE__*/React__default$1.default.createElement(Card, { as: "a", flex: true, href: "https://github.com/SoftwareBrothers/adminjs/issues", target: "_blank" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flexShrink: 0, className: "gh-icon" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Illustration, { variant: "GithubLogo" })), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { ml: "xl" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.H5, null, translateMessage('foundBug_title')), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, null, translateMessage('foundBug_subtitle'))))))); }; var createRoot; var m = require$$1__default.default; { var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; createRoot = function(c, o) { i.usingClientEntryPoint = true; try { return m.createRoot(c, o); } finally { i.usingClientEntryPoint = false; } }; } /** * @alias DrawerPortalProps * @memberof DrawerPortal */ const DRAWER_PORTAL_ID = 'drawerPortal'; const DRAWER_PORTAL_WRAPPER_ID = 'drawerPortalWrapper'; const DrawerWrapper = ({ onMount, onUnmount }) => { React$1.useEffect(() => { onMount(); return onUnmount; }, []); return /*#__PURE__*/React__default$1.default.createElement(styledComponents.ThemeProvider, { theme: window.THEME }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Drawer, { id: DRAWER_PORTAL_ID, className: "hidden", "data-css": "drawer" })); }; const getOrCreatePortalContainer = id => { let container = document.getElementById(id); if (!container) { container = window.document.createElement('div'); container.id = id; window.document.body.appendChild(container); } return container; }; /** * Shows all of its children in a Drawer on the right. * Instead of rendering it's own {@link Drawer} component it reuses * the global Drawer via React Portal. * * ### Usage * * ``` * import { DrawerPortal } from 'adminjs' * ``` * * @component * @subcategory Application */ const DrawerPortal = ({ children, width }) => { const [drawerElement, setDrawerElement] = React$1.useState(document.getElementById(DRAWER_PORTAL_ID)); const { from = null } = require$$3.useSelector(state => state.router); const dispatch = require$$3.useDispatch(); const handleDrawerMount = () => { dispatch(setDrawerPreRoute({ previousRoute: from })); setDrawerElement(document.getElementById(DRAWER_PORTAL_ID)); }; const handleDrawerUnmount = () => { dispatch(setDrawerPreRoute({ previousRoute: null })); }; React$1.useEffect(() => { const innerWrapperElement = getOrCreatePortalContainer(DRAWER_PORTAL_WRAPPER_ID); if (!drawerElement && window) { const drawerRoot = createRoot(innerWrapperElement); drawerRoot.render( /*#__PURE__*/React__default$1.default.createElement(DrawerWrapper, { onMount: handleDrawerMount, onUnmount: handleDrawerUnmount })); } return () => { const innerWrapper = document.getElementById(DRAWER_PORTAL_WRAPPER_ID); if (innerWrapper) document.body.removeChild(innerWrapper); }; }, []); React$1.useEffect(() => { if (drawerElement) { drawerElement.classList.remove('hidden'); if (width) { drawerElement.style.width = Array.isArray(width) ? width[0].toString() : width.toString(); } return () => { drawerElement.style.width = DesignSystem.DEFAULT_DRAWER_WIDTH; drawerElement.classList.add('hidden'); drawerElement.setAttribute('data-css', 'drawer-element'); }; } return () => undefined; }, [drawerElement]); if (!drawerElement) { return null; } return /*#__PURE__*/require$$1.createPortal(children, drawerElement); }; /** * @memberof ErrorMessageBox * @alias ErrorMessageBoxProps */ /** * @class * Prints error message * * @component * @private * @example * return ( * <ErrorMessageBox title={'Some error'}> * <p>Text below the title</p> * </ErrorMessageBox> * ) */ const ErrorMessageBox = props => { const { children, title, testId } = props; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.MessageBox, { "data-testid": testId, message: title }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, null, children)); }; const NoResourceError = props => { const { resourceId } = props; const { translateMessage } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.InfoBox, { title: translateMessage('pageNotFound_title', resourceId, { resourceId }), illustration: "NotFound", testId: "NoResourceError" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, null, translateMessage('error404Resource', resourceId, { resourceId }))); }; const NoActionError = props => { const { resourceId, actionName } = props; const { translateMessage } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.InfoBox, { title: translateMessage('pageNotFound_title', resourceId, { resourceId }), illustration: "NotFound", testId: "NoActionError" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, null, translateMessage('error404Action', resourceId, { resourceId, actionName }))); }; const NoRecordError = props => { const { resourceId, recordId } = props; const { translateMessage } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.InfoBox, { title: translateMessage('pageNotFound_title', resourceId, { resourceId }), illustration: "NotFound", testId: "NoRecordError" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, null, translateMessage('error404Record', resourceId, { resourceId, recordId }))); }; /** * Checks if `value` is `null` or `undefined`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is nullish, else `false`. * @example * * _.isNil(null); * // => true * * _.isNil(void 0); * // => true * * _.isNil(NaN); * // => false */ function isNil(value) { return value == null; } var isNil_1 = isNil; var isNil$1 = /*@__PURE__*/getDefaultExportFromCjs(isNil_1); var ListCache$2 = _ListCache; /** * Removes all key-value entries from the stack. * * @private * @name clear * @memberOf Stack */ function stackClear$1() { this.__data__ = new ListCache$2; this.size = 0; } var _stackClear = stackClear$1; /** * Removes `key` and its value from the stack. * * @private * @name delete * @memberOf Stack * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ function stackDelete$1(key) { var data = this.__data__, result = data['delete'](key); this.size = data.size; return result; } var _stackDelete = stackDelete$1; /** * Gets the stack value for `key`. * * @private * @name get * @memberOf Stack * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ function stackGet$1(key) { return this.__data__.get(key); } var _stackGet = stackGet$1; /** * Checks if a stack value for `key` exists. * * @private * @name has * @memberOf Stack * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function stackHas$1(key) { return this.__data__.has(key); } var _stackHas = stackHas$1; var ListCache$1 = _ListCache, Map$2 = _Map, MapCache$1 = _MapCache; /** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200; /** * Sets the stack `key` to `value`. * * @private * @name set * @memberOf Stack * @param {string} key The key of the value to set. * @param {*} value The value to set. * @returns {Object} Returns the stack cache instance. */ function stackSet$1(key, value) { var data = this.__data__; if (data instanceof ListCache$1) { var pairs = data.__data__; if (!Map$2 || (pairs.length < LARGE_ARRAY_SIZE - 1)) { pairs.push([key, value]); this.size = ++data.size; return this; } data = this.__data__ = new MapCache$1(pairs); } data.set(key, value); this.size = data.size; return this; } var _stackSet = stackSet$1; var ListCache = _ListCache, stackClear = _stackClear, stackDelete = _stackDelete, stackGet = _stackGet, stackHas = _stackHas, stackSet = _stackSet; /** * Creates a stack cache object to store key-value pairs. * * @private * @constructor * @param {Array} [entries] The key-value pairs to cache. */ function Stack$3(entries) { var data = this.__data__ = new ListCache(entries); this.size = data.size; } // Add methods to `Stack`. Stack$3.prototype.clear = stackClear; Stack$3.prototype['delete'] = stackDelete; Stack$3.prototype.get = stackGet; Stack$3.prototype.has = stackHas; Stack$3.prototype.set = stackSet; var _Stack = Stack$3; /** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** * Adds `value` to the array cache. * * @private * @name add * @memberOf SetCache * @alias push * @param {*} value The value to cache. * @returns {Object} Returns the cache instance. */ function setCacheAdd$1(value) { this.__data__.set(value, HASH_UNDEFINED); return this; } var _setCacheAdd = setCacheAdd$1; /** * Checks if `value` is in the array cache. * * @private * @name has * @memberOf SetCache * @param {*} value The value to search for. * @returns {number} Returns `true` if `value` is found, else `false`. */ function setCacheHas$1(value) { return this.__data__.has(value); } var _setCacheHas = setCacheHas$1; var MapCache = _MapCache, setCacheAdd = _setCacheAdd, setCacheHas = _setCacheHas; /** * * Creates an array cache object to store unique values. * * @private * @constructor * @param {Array} [values] The values to cache. */ function SetCache$2(values) { var index = -1, length = values == null ? 0 : values.length; this.__data__ = new MapCache; while (++index < length) { this.add(values[index]); } } // Add methods to `SetCache`. SetCache$2.prototype.add = SetCache$2.prototype.push = setCacheAdd; SetCache$2.prototype.has = setCacheHas; var _SetCache = SetCache$2; /** * A specialized version of `_.some` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {boolean} Returns `true` if any element passes the predicate check, * else `false`. */ function arraySome$1(array, predicate) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (predicate(array[index], index, array)) { return true; } } return false; } var _arraySome = arraySome$1; /** * Checks if a `cache` value for `key` exists. * * @private * @param {Object} cache The cache to query. * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ function cacheHas$2(cache, key) { return cache.has(key); } var _cacheHas = cacheHas$2; var SetCache$1 = _SetCache, arraySome = _arraySome, cacheHas$1 = _cacheHas; /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG$5 = 1, COMPARE_UNORDERED_FLAG$3 = 2; /** * A specialized version of `baseIsEqualDeep` for arrays with support for * partial deep comparisons. * * @private * @param {Array} array The array to compare. * @param {Array} other The other array to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `array` and `other` objects. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. */ function equalArrays$2(array, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } // Check that cyclic values are equal. var arrStacked = stack.get(array); var othStacked = stack.get(other); if (arrStacked && othStacked) { return arrStacked == other && othStacked == array; } var index = -1, result = true, seen = (bitmask & COMPARE_UNORDERED_FLAG$3) ? new SetCache$1 : undefined; stack.set(array, other); stack.set(other, array); // Ignore non-index properties. while (++index < arrLength) { var arrValue = array[index], othValue = other[index]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); } if (compared !== undefined) { if (compared) { continue; } result = false; break; } // Recursively compare arrays (susceptible to call stack limits). if (seen) { if (!arraySome(other, function(othValue, othIndex) { if (!cacheHas$1(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { return seen.push(othIndex); } })) { result = false; break; } } else if (!( arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack) )) { result = false; break; } } stack['delete'](array); stack['delete'](other); return result; } var _equalArrays = equalArrays$2; var root$4 = _root; /** Built-in value references. */ var Uint8Array$3 = root$4.Uint8Array; var _Uint8Array = Uint8Array$3; /** * Converts `map` to its key-value pairs. * * @private * @param {Object} map The map to convert. * @returns {Array} Returns the key-value pairs. */ function mapToArray$1(map) { var index = -1, result = Array(map.size); map.forEach(function(value, key) { result[++index] = [key, value]; }); return result; } var _mapToArray = mapToArray$1; /** * Converts `set` to an array of its values. * * @private * @param {Object} set The set to convert. * @returns {Array} Returns the values. */ function setToArray$1(set) { var index = -1, result = Array(set.size); set.forEach(function(value) { result[++index] = value; }); return result; } var _setToArray = setToArray$1; var Symbol$1 = _Symbol, Uint8Array$2 = _Uint8Array, eq$2 = eq_1, equalArrays$1 = _equalArrays, mapToArray = _mapToArray, setToArray = _setToArray; /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG$4 = 1, COMPARE_UNORDERED_FLAG$2 = 2; /** `Object#toString` result references. */ var boolTag$1 = '[object Boolean]', dateTag$1 = '[object Date]', errorTag$1 = '[object Error]', mapTag$2 = '[object Map]', numberTag$1 = '[object Number]', regexpTag$1 = '[object RegExp]', setTag$2 = '[object Set]', stringTag$1 = '[object String]', symbolTag = '[object Symbol]'; var arrayBufferTag$1 = '[object ArrayBuffer]', dataViewTag$2 = '[object DataView]'; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; /** * A specialized version of `baseIsEqualDeep` for comparing objects of * the same `toStringTag`. * * **Note:** This function only supports comparing values with tags of * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {string} tag The `toStringTag` of the objects to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function equalByTag$1(object, other, tag, bitmask, customizer, equalFunc, stack) { switch (tag) { case dataViewTag$2: if ((object.byteLength != other.byteLength) || (object.byteOffset != other.byteOffset)) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag$1: if ((object.byteLength != other.byteLength) || !equalFunc(new Uint8Array$2(object), new Uint8Array$2(other))) { return false; } return true; case boolTag$1: case dateTag$1: case numberTag$1: // Coerce booleans to `1` or `0` and dates to milliseconds. // Invalid dates are coerced to `NaN`. return eq$2(+object, +other); case errorTag$1: return object.name == other.name && object.message == other.message; case regexpTag$1: case stringTag$1: // Coerce regexes to strings and treat strings, primitives and objects, // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring // for more details. return object == (other + ''); case mapTag$2: var convert = mapToArray; case setTag$2: var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4; convert || (convert = setToArray); if (object.size != other.size && !isPartial) { return false; } // Assume cyclic values are equal. var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= COMPARE_UNORDERED_FLAG$2; // Recursively compare objects (susceptible to call stack limits). stack.set(object, other); var result = equalArrays$1(convert(object), convert(other), bitmask, customizer, equalFunc, stack); stack['delete'](object); return result; case symbolTag: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } var _equalByTag = equalByTag$1; var arrayPush$1 = _arrayPush, isArray$4 = isArray_1; /** * The base implementation of `getAllKeys` and `getAllKeysIn` which uses * `keysFunc` and `symbolsFunc` to get the enumerable property names and * symbols of `object`. * * @private * @param {Object} object The object to query. * @param {Function} keysFunc The function to get the keys of `object`. * @param {Function} symbolsFunc The function to get the symbols of `object`. * @returns {Array} Returns the array of property names and symbols. */ function baseGetAllKeys$2(object, keysFunc, symbolsFunc) { var result = keysFunc(object); return isArray$4(object) ? result : arrayPush$1(result, symbolsFunc(object)); } var _baseGetAllKeys = baseGetAllKeys$2; /** * A specialized version of `_.filter` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} predicate The function invoked per iteration. * @returns {Array} Returns the new filtered array. */ function arrayFilter$1(array, predicate) { var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; while (++index < length) { var value = array[index]; if (predicate(value, index, array)) { result[resIndex++] = value; } } return result; } var _arrayFilter = arrayFilter$1; /** * This method returns a new empty array. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {Array} Returns the new empty array. * @example * * var arrays = _.times(2, _.stubArray); * * console.log(arrays); * // => [[], []] * * console.log(arrays[0] === arrays[1]); * // => false */ function stubArray$2() { return []; } var stubArray_1 = stubArray$2; var arrayFilter = _arrayFilter, stubArray$1 = stubArray_1; /** Used for built-in method references. */ var objectProto$7 = Object.prototype; /** Built-in value references. */ var propertyIsEnumerable = objectProto$7.propertyIsEnumerable; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeGetSymbols$1 = Object.getOwnPropertySymbols; /** * Creates an array of the own enumerable symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */ var getSymbols$2 = !nativeGetSymbols$1 ? stubArray$1 : function(object) { if (object == null) { return []; } object = Object(object); return arrayFilter(nativeGetSymbols$1(object), function(symbol) { return propertyIsEnumerable.call(object, symbol); }); }; var _getSymbols = getSymbols$2; /** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. * * @private * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */ function baseTimes$1(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } var _baseTimes = baseTimes$1; var isBuffer$3 = {exports: {}}; /** * This method returns `false`. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {boolean} Returns `false`. * @example * * _.times(2, _.stubFalse); * // => [false, false] */ function stubFalse() { return false; } var stubFalse_1 = stubFalse; isBuffer$3.exports; (function (module, exports) { var root = _root, stubFalse = stubFalse_1; /** Detect free variable `exports`. */ var freeExports = exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; /** * Checks if `value` is a buffer. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * * _.isBuffer(new Buffer(2)); * // => true * * _.isBuffer(new Uint8Array(2)); * // => false */ var isBuffer = nativeIsBuffer || stubFalse; module.exports = isBuffer; } (isBuffer$3, isBuffer$3.exports)); var isBufferExports = isBuffer$3.exports; var baseGetTag$2 = _baseGetTag, isLength$1 = isLength_1, isObjectLike$3 = isObjectLike_1; /** `Object#toString` result references. */ var argsTag$1 = '[object Arguments]', arrayTag$1 = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', mapTag$1 = '[object Map]', numberTag = '[object Number]', objectTag$3 = '[object Object]', regexpTag = '[object RegExp]', setTag$1 = '[object Set]', stringTag = '[object String]', weakMapTag$1 = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]', dataViewTag$1 = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; /** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag$1] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag$1] = typedArrayTags[numberTag] = typedArrayTags[objectTag$3] = typedArrayTags[regexpTag] = typedArrayTags[setTag$1] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag$1] = false; /** * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */ function baseIsTypedArray$1(value) { return isObjectLike$3(value) && isLength$1(value.length) && !!typedArrayTags[baseGetTag$2(value)]; } var _baseIsTypedArray = baseIsTypedArray$1; var baseIsTypedArray = _baseIsTypedArray, baseUnary$1 = _baseUnary, nodeUtil = _nodeUtilExports; /* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; /** * Checks if `value` is classified as a typed array. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * * _.isTypedArray(new Uint8Array); * // => true * * _.isTypedArray([]); * // => false */ var isTypedArray$3 = nodeIsTypedArray ? baseUnary$1(nodeIsTypedArray) : baseIsTypedArray; var isTypedArray_1 = isTypedArray$3; var baseTimes = _baseTimes, isArguments$1 = isArguments_1, isArray$3 = isArray_1, isBuffer$2 = isBufferExports, isIndex$1 = _isIndex, isTypedArray$2 = isTypedArray_1; /** Used for built-in method references. */ var objectProto$6 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$5 = objectProto$6.hasOwnProperty; /** * Creates an array of the enumerable property names of the array-like `value`. * * @private * @param {*} value The value to query. * @param {boolean} inherited Specify returning inherited property names. * @returns {Array} Returns the array of property names. */ function arrayLikeKeys$2(value, inherited) { var isArr = isArray$3(value), isArg = !isArr && isArguments$1(value), isBuff = !isArr && !isArg && isBuffer$2(value), isType = !isArr && !isArg && !isBuff && isTypedArray$2(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty$5.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode. key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers. (isBuff && (key == 'offset' || key == 'parent')) || // PhantomJS 2 has enumerable non-index properties on typed arrays. (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || // Skip index properties. isIndex$1(key, length) ))) { result.push(key); } } return result; } var _arrayLikeKeys = arrayLikeKeys$2; /** Used for built-in method references. */ var objectProto$5 = Object.prototype; /** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ function isPrototype$3(value) { var Ctor = value && value.constructor, proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$5; return value === proto; } var _isPrototype = isPrototype$3; /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg$2(func, transform) { return function(arg) { return func(transform(arg)); }; } var _overArg = overArg$2; var overArg$1 = _overArg; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeKeys$1 = overArg$1(Object.keys, Object); var _nativeKeys = nativeKeys$1; var isPrototype$2 = _isPrototype, nativeKeys = _nativeKeys; /** Used for built-in method references. */ var objectProto$4 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$4 = objectProto$4.hasOwnProperty; /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeys$1(object) { if (!isPrototype$2(object)) { return nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty$4.call(object, key) && key != 'constructor') { result.push(key); } } return result; } var _baseKeys = baseKeys$1; var isFunction$1 = isFunction_1, isLength = isLength_1; /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */ function isArrayLike$4(value) { return value != null && isLength(value.length) && !isFunction$1(value); } var isArrayLike_1 = isArrayLike$4; var arrayLikeKeys$1 = _arrayLikeKeys, baseKeys = _baseKeys, isArrayLike$3 = isArrayLike_1; /** * Creates an array of the own enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. See the * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * for more details. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keys(new Foo); * // => ['a', 'b'] (iteration order is not guaranteed) * * _.keys('hi'); * // => ['0', '1'] */ function keys$2(object) { return isArrayLike$3(object) ? arrayLikeKeys$1(object) : baseKeys(object); } var keys_1 = keys$2; var baseGetAllKeys$1 = _baseGetAllKeys, getSymbols$1 = _getSymbols, keys$1 = keys_1; /** * Creates an array of own enumerable property names and symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names and symbols. */ function getAllKeys$1(object) { return baseGetAllKeys$1(object, keys$1, getSymbols$1); } var _getAllKeys = getAllKeys$1; var getAllKeys = _getAllKeys; /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG$3 = 1; /** Used for built-in method references. */ var objectProto$3 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$3 = objectProto$3.hasOwnProperty; /** * A specialized version of `baseIsEqualDeep` for objects with support for * partial deep comparisons. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} stack Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function equalObjects$1(object, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index = objLength; while (index--) { var key = objProps[index]; if (!(isPartial ? key in other : hasOwnProperty$3.call(other, key))) { return false; } } // Check that cyclic values are equal. var objStacked = stack.get(object); var othStacked = stack.get(other); if (objStacked && othStacked) { return objStacked == other && othStacked == object; } var result = true; stack.set(object, other); stack.set(other, object); var skipCtor = isPartial; while (++index < objLength) { key = objProps[index]; var objValue = object[key], othValue = other[key]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); } // Recursively compare objects (susceptible to call stack limits). if (!(compared === undefined ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) : compared )) { result = false; break; } skipCtor || (skipCtor = key == 'constructor'); } if (result && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal. if (objCtor != othCtor && ('constructor' in object && 'constructor' in other) && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) { result = false; } } stack['delete'](object); stack['delete'](other); return result; } var _equalObjects = equalObjects$1; var getNative$3 = _getNative, root$3 = _root; /* Built-in method references that are verified to be native. */ var DataView$2 = getNative$3(root$3, 'DataView'); var _DataView = DataView$2; var getNative$2 = _getNative, root$2 = _root; /* Built-in method references that are verified to be native. */ var Promise$2 = getNative$2(root$2, 'Promise'); var _Promise = Promise$2; var getNative$1 = _getNative, root$1 = _root; /* Built-in method references that are verified to be native. */ var Set$2 = getNative$1(root$1, 'Set'); var _Set = Set$2; var getNative = _getNative, root = _root; /* Built-in method references that are verified to be native. */ var WeakMap$2 = getNative(root, 'WeakMap'); var _WeakMap = WeakMap$2; var DataView$1 = _DataView, Map$1 = _Map, Promise$1 = _Promise, Set$1 = _Set, WeakMap$1 = _WeakMap, baseGetTag$1 = _baseGetTag, toSource = _toSource; /** `Object#toString` result references. */ var mapTag = '[object Map]', objectTag$2 = '[object Object]', promiseTag = '[object Promise]', setTag = '[object Set]', weakMapTag = '[object WeakMap]'; var dataViewTag = '[object DataView]'; /** Used to detect maps, sets, and weakmaps. */ var dataViewCtorString = toSource(DataView$1), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap$1); /** * Gets the `toStringTag` of `value`. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ var getTag$1 = baseGetTag$1; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. if ((DataView$1 && getTag$1(new DataView$1(new ArrayBuffer(1))) != dataViewTag) || (Map$1 && getTag$1(new Map$1) != mapTag) || (Promise$1 && getTag$1(Promise$1.resolve()) != promiseTag) || (Set$1 && getTag$1(new Set$1) != setTag) || (WeakMap$1 && getTag$1(new WeakMap$1) != weakMapTag)) { getTag$1 = function(value) { var result = baseGetTag$1(value), Ctor = result == objectTag$2 ? value.constructor : undefined, ctorString = Ctor ? toSource(Ctor) : ''; if (ctorString) { switch (ctorString) { case dataViewCtorString: return dataViewTag; case mapCtorString: return mapTag; case promiseCtorString: return promiseTag; case setCtorString: return setTag; case weakMapCtorString: return weakMapTag; } } return result; }; } var _getTag = getTag$1; var Stack$2 = _Stack, equalArrays = _equalArrays, equalByTag = _equalByTag, equalObjects = _equalObjects, getTag = _getTag, isArray$2 = isArray_1, isBuffer$1 = isBufferExports, isTypedArray$1 = isTypedArray_1; /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG$2 = 1; /** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', objectTag$1 = '[object Object]'; /** Used for built-in method references. */ var objectProto$2 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$2 = objectProto$2.hasOwnProperty; /** * A specialized version of `baseIsEqual` for arrays and objects which performs * deep comparisons and tracks traversed objects enabling objects with circular * references to be compared. * * @private * @param {Object} object The object to compare. * @param {Object} other The other object to compare. * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. * @param {Function} customizer The function to customize comparisons. * @param {Function} equalFunc The function to determine equivalents of values. * @param {Object} [stack] Tracks traversed `object` and `other` objects. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ function baseIsEqualDeep$1(object, other, bitmask, customizer, equalFunc, stack) { var objIsArr = isArray$2(object), othIsArr = isArray$2(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other); objTag = objTag == argsTag ? objectTag$1 : objTag; othTag = othTag == argsTag ? objectTag$1 : othTag; var objIsObj = objTag == objectTag$1, othIsObj = othTag == objectTag$1, isSameTag = objTag == othTag; if (isSameTag && isBuffer$1(object)) { if (!isBuffer$1(other)) { return false; } objIsArr = true; objIsObj = false; } if (isSameTag && !objIsObj) { stack || (stack = new Stack$2); return (objIsArr || isTypedArray$1(object)) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); } if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) { var objIsWrapped = objIsObj && hasOwnProperty$2.call(object, '__wrapped__'), othIsWrapped = othIsObj && hasOwnProperty$2.call(other, '__wrapped__'); if (objIsWrapped || othIsWrapped) { var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; stack || (stack = new Stack$2); return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); } } if (!isSameTag) { return false; } stack || (stack = new Stack$2); return equalObjects(object, other, bitmask, customizer, equalFunc, stack); } var _baseIsEqualDeep = baseIsEqualDeep$1; var baseIsEqualDeep = _baseIsEqualDeep, isObjectLike$2 = isObjectLike_1; /** * The base implementation of `_.isEqual` which supports partial comparisons * and tracks traversed objects. * * @private * @param {*} value The value to compare. * @param {*} other The other value to compare. * @param {boolean} bitmask The bitmask flags. * 1 - Unordered comparison * 2 - Partial comparison * @param {Function} [customizer] The function to customize comparisons. * @param {Object} [stack] Tracks traversed `value` and `other` objects. * @returns {boolean} Returns `true` if the values are equivalent, else `false`. */ function baseIsEqual$2(value, other, bitmask, customizer, stack) { if (value === other) { return true; } if (value == null || other == null || (!isObjectLike$2(value) && !isObjectLike$2(other))) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual$2, stack); } var _baseIsEqual = baseIsEqual$2; var Stack$1 = _Stack, baseIsEqual$1 = _baseIsEqual; /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG$1 = 1, COMPARE_UNORDERED_FLAG$1 = 2; /** * The base implementation of `_.isMatch` without support for iteratee shorthands. * * @private * @param {Object} object The object to inspect. * @param {Object} source The object of property values to match. * @param {Array} matchData The property names, values, and compare flags to match. * @param {Function} [customizer] The function to customize comparisons. * @returns {boolean} Returns `true` if `object` is a match, else `false`. */ function baseIsMatch$1(object, source, matchData, customizer) { var index = matchData.length, length = index, noCustomizer = !customizer; if (object == null) { return !length; } object = Object(object); while (index--) { var data = matchData[index]; if ((noCustomizer && data[2]) ? data[1] !== object[data[0]] : !(data[0] in object) ) { return false; } } while (++index < length) { data = matchData[index]; var key = data[0], objValue = object[key], srcValue = data[1]; if (noCustomizer && data[2]) { if (objValue === undefined && !(key in object)) { return false; } } else { var stack = new Stack$1; if (customizer) { var result = customizer(objValue, srcValue, key, object, source, stack); } if (!(result === undefined ? baseIsEqual$1(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) : result )) { return false; } } } return true; } var _baseIsMatch = baseIsMatch$1; var isObject$5 = isObject_1; /** * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` if suitable for strict * equality comparisons, else `false`. */ function isStrictComparable$2(value) { return value === value && !isObject$5(value); } var _isStrictComparable = isStrictComparable$2; var isStrictComparable$1 = _isStrictComparable, keys = keys_1; /** * Gets the property names, values, and compare flags of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the match data of `object`. */ function getMatchData$1(object) { var result = keys(object), length = result.length; while (length--) { var key = result[length], value = object[key]; result[length] = [key, value, isStrictComparable$1(value)]; } return result; } var _getMatchData = getMatchData$1; /** * A specialized version of `matchesProperty` for source values suitable * for strict equality comparisons, i.e. `===`. * * @private * @param {string} key The key of the property to get. * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */ function matchesStrictComparable$2(key, srcValue) { return function(object) { if (object == null) { return false; } return object[key] === srcValue && (srcValue !== undefined || (key in Object(object))); }; } var _matchesStrictComparable = matchesStrictComparable$2; var baseIsMatch = _baseIsMatch, getMatchData = _getMatchData, matchesStrictComparable$1 = _matchesStrictComparable; /** * The base implementation of `_.matches` which doesn't clone `source`. * * @private * @param {Object} source The object of property values to match. * @returns {Function} Returns the new spec function. */ function baseMatches$1(source) { var matchData = getMatchData(source); if (matchData.length == 1 && matchData[0][2]) { return matchesStrictComparable$1(matchData[0][0], matchData[0][1]); } return function(object) { return object === source || baseIsMatch(object, source, matchData); }; } var _baseMatches = baseMatches$1; var baseGet$1 = _baseGet; /** * Gets the value at `path` of `object`. If the resolved value is * `undefined`, the `defaultValue` is returned in its place. * * @static * @memberOf _ * @since 3.7.0 * @category Object * @param {Object} object The object to query. * @param {Array|string} path The path of the property to get. * @param {*} [defaultValue] The value returned for `undefined` resolved values. * @returns {*} Returns the resolved value. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }] }; * * _.get(object, 'a[0].b.c'); * // => 3 * * _.get(object, ['a', '0', 'b', 'c']); * // => 3 * * _.get(object, 'a.b.c', 'default'); * // => 'default' */ function get$2(object, path, defaultValue) { var result = object == null ? undefined : baseGet$1(object, path); return result === undefined ? defaultValue : result; } var get_1 = get$2; var baseIsEqual = _baseIsEqual, get$1 = get_1, hasIn = hasIn_1, isKey$1 = _isKey, isStrictComparable = _isStrictComparable, matchesStrictComparable = _matchesStrictComparable, toKey$1 = _toKey; /** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; /** * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. * * @private * @param {string} path The path of the property to get. * @param {*} srcValue The value to match. * @returns {Function} Returns the new spec function. */ function baseMatchesProperty$1(path, srcValue) { if (isKey$1(path) && isStrictComparable(srcValue)) { return matchesStrictComparable(toKey$1(path), srcValue); } return function(object) { var objValue = get$1(object, path); return (objValue === undefined && objValue === srcValue) ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); }; } var _baseMatchesProperty = baseMatchesProperty$1; var baseGet = _baseGet; /** * A specialized version of `baseProperty` which supports deep paths. * * @private * @param {Array|string} path The path of the property to get. * @returns {Function} Returns the new accessor function. */ function basePropertyDeep$1(path) { return function(object) { return baseGet(object, path); }; } var _basePropertyDeep = basePropertyDeep$1; var baseProperty = _baseProperty, basePropertyDeep = _basePropertyDeep, isKey = _isKey, toKey = _toKey; /** * Creates a function that returns the value at `path` of a given object. * * @static * @memberOf _ * @since 2.4.0 * @category Util * @param {Array|string} path The path of the property to get. * @returns {Function} Returns the new accessor function. * @example * * var objects = [ * { 'a': { 'b': 2 } }, * { 'a': { 'b': 1 } } * ]; * * _.map(objects, _.property('a.b')); * // => [2, 1] * * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); * // => [1, 2] */ function property$1(path) { return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); } var property_1 = property$1; var baseMatches = _baseMatches, baseMatchesProperty = _baseMatchesProperty, identity$1 = identity_1, isArray$1 = isArray_1, property = property_1; /** * The base implementation of `_.iteratee`. * * @private * @param {*} [value=_.identity] The value to convert to an iteratee. * @returns {Function} Returns the iteratee. */ function baseIteratee$1(value) { // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. if (typeof value == 'function') { return value; } if (value == null) { return identity$1; } if (typeof value == 'object') { return isArray$1(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); } return property(value); } var _baseIteratee = baseIteratee$1; var overArg = _overArg; /** Built-in value references. */ var getPrototype$3 = overArg(Object.getPrototypeOf, Object); var _getPrototype = getPrototype$3; var arrayPush = _arrayPush, getPrototype$2 = _getPrototype, getSymbols = _getSymbols, stubArray = stubArray_1; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeGetSymbols = Object.getOwnPropertySymbols; /** * Creates an array of the own and inherited enumerable symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of symbols. */ var getSymbolsIn$1 = !nativeGetSymbols ? stubArray : function(object) { var result = []; while (object) { arrayPush(result, getSymbols(object)); object = getPrototype$2(object); } return result; }; var _getSymbolsIn = getSymbolsIn$1; /** * This function is like * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * except that it includes inherited enumerable properties. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function nativeKeysIn$1(object) { var result = []; if (object != null) { for (var key in Object(object)) { result.push(key); } } return result; } var _nativeKeysIn = nativeKeysIn$1; var isObject$4 = isObject_1, isPrototype$1 = _isPrototype, nativeKeysIn = _nativeKeysIn; /** Used for built-in method references. */ var objectProto$1 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$1 = objectProto$1.hasOwnProperty; /** * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeysIn$1(object) { if (!isObject$4(object)) { return nativeKeysIn(object); } var isProto = isPrototype$1(object), result = []; for (var key in object) { if (!(key == 'constructor' && (isProto || !hasOwnProperty$1.call(object, key)))) { result.push(key); } } return result; } var _baseKeysIn = baseKeysIn$1; var arrayLikeKeys = _arrayLikeKeys, baseKeysIn = _baseKeysIn, isArrayLike$2 = isArrayLike_1; /** * Creates an array of the own and inherited enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. * * @static * @memberOf _ * @since 3.0.0 * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keysIn(new Foo); * // => ['a', 'b', 'c'] (iteration order is not guaranteed) */ function keysIn$3(object) { return isArrayLike$2(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); } var keysIn_1 = keysIn$3; var baseGetAllKeys = _baseGetAllKeys, getSymbolsIn = _getSymbolsIn, keysIn$2 = keysIn_1; /** * Creates an array of own and inherited enumerable property names and * symbols of `object`. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names and symbols. */ function getAllKeysIn$1(object) { return baseGetAllKeys(object, keysIn$2, getSymbolsIn); } var _getAllKeysIn = getAllKeysIn$1; var arrayMap$2 = _arrayMap, baseIteratee = _baseIteratee, basePickBy = _basePickBy, getAllKeysIn = _getAllKeysIn; /** * Creates an object composed of the `object` properties `predicate` returns * truthy for. The predicate is invoked with two arguments: (value, key). * * @static * @memberOf _ * @since 4.0.0 * @category Object * @param {Object} object The source object. * @param {Function} [predicate=_.identity] The function invoked per property. * @returns {Object} Returns the new object. * @example * * var object = { 'a': 1, 'b': '2', 'c': 3 }; * * _.pickBy(object, _.isNumber); * // => { 'a': 1, 'c': 3 } */ function pickBy(object, predicate) { if (object == null) { return {}; } var props = arrayMap$2(getAllKeysIn(object), function(prop) { return [prop]; }); predicate = baseIteratee(predicate); return basePickBy(object, props, function(value, path) { return predicate(value, path[0]); }); } var pickBy_1 = pickBy; var pickBy$1 = /*@__PURE__*/getDefaultExportFromCjs(pickBy_1); const FilterDrawer = props => { const { resource } = props; const properties = resource.filterProperties; const [filter, setFilter] = React$1.useState({}); const params = reactRouterDom.useParams(); const { translateButton, translateLabel } = useTranslation(); const initialLoad = React$1.useRef(true); const { isVisible, toggleFilter } = useFilterDrawer(); const { storeParams, clearParams, filters } = useQueryParams(); React$1.useEffect(() => { if (initialLoad.current) { initialLoad.current = false; } else { setFilter({}); } }, [params.resourceId]); const handleSubmit = event => { event.preventDefault(); storeParams({ filters: pickBy$1(filter, v => !isNil$1(v)), page: '1' }); }; const handleReset = event => { event.preventDefault(); clearParams('filters'); setFilter({}); }; React$1.useEffect(() => { if (filters) { setFilter(filters); } }, [filters]); const handleChange = (propertyName, value) => { if (propertyName.params) { throw new Error('you can not pass RecordJSON to filters'); } setFilter({ ...filter, [propertyName]: typeof value === 'string' && !value.length ? undefined : value }); }; const contentTag = getResourceElementCss(resource.id, 'filter-drawer'); const cssContent = getResourceElementCss(resource.id, 'filter-drawer-content'); const cssFooter = getResourceElementCss(resource.id, 'filter-drawer-footer'); const cssButtonApply = getResourceElementCss(resource.id, 'filter-drawer-button-apply'); const cssButtonReset = getResourceElementCss(resource.id, 'filter-drawer-button-reset'); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Drawer, { variant: "filter", isHidden: !isVisible, as: "form", onSubmit: handleSubmit, onReset: handleReset, "data-css": contentTag }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DrawerContent, { "data-css": cssContent }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flex: true, justifyContent: "space-between" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.H3, null, translateLabel('filters', resource.id)), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { type: "button", variant: "light", size: "icon", rounded: true, color: "text", onClick: toggleFilter }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Icon, { icon: "X" }))), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { my: "x3" }, properties.map(property => /*#__PURE__*/React__default$1.default.createElement(BasePropertyComponentExtended, { key: property.propertyPath, where: "filter", onChange: handleChange, property: property, filter: filter, resource: resource })))), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DrawerFooter, { "data-css": cssFooter }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { type: "button", variant: "light", onClick: handleReset, "data-css": cssButtonReset }, translateButton('resetFilter', resource.id)), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { type: "submit", variant: "contained", "data-css": cssButtonApply }, translateButton('applyChanges', resource.id)))); }; const OverridableFilterDrawer = allowOverride(FilterDrawer, 'FilterDrawer'); const LoggedIn = props => { const { session, paths } = props; const { translateButton } = useTranslation(); const dropActions = [{ label: translateButton('logout'), onClick: event => { event.preventDefault(); window.location.href = paths.logoutPath; }, icon: 'LogOut' }]; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flexShrink: 0, "data-css": "logged-in" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.CurrentUserNav, { name: session.email, title: session.title, avatarUrl: session.avatarUrl, dropActions: dropActions })); }; const OverridableLoggedIn = allowOverride(LoggedIn, 'LoggedIn'); const TIME_TO_DISAPPEAR = 3; const NoticeElement = props => { const { drop, notice, notifyProgress } = props; const [progress, setProgress] = React$1.useState(0); const intervalRef = React$1.useRef(); const { tm, i18n: { language } } = useTranslation(); const message = React$1.useMemo(() => tm(notice.message, notice.resourceId, notice.options), [notice.id, language]); const variant = notice.type === 'error' ? 'danger' : notice.type ?? 'info'; React$1.useEffect(() => { intervalRef.current = window.setInterval(() => { const _progress = progress + 100 / TIME_TO_DISAPPEAR; notifyProgress({ noticeId: notice.id, progress }); setProgress(_progress); return _progress; }, 1000); return () => { clearInterval(intervalRef.current); }; }, [notice]); React$1.useEffect(() => { if (progress >= 100) { drop(); } }, [drop, progress]); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.MessageBox, { style: { minWidth: '480px' }, message: message, variant: variant, onCloseClick: drop }, notice.body); }; const NoticeBox = props => { const { drop, notices, notifyProgress } = props; if (!notices.length) return null; return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { as: "div", "data-testid": "notice-wrapper", "data-css": "notice-wrapper", flex: true, flexDirection: "column", p: "sm", style: { gap: 4 } }, notices.map(notice => /*#__PURE__*/React__default$1.default.createElement(NoticeElement, { key: notice.id, notice: notice, drop: () => drop(notice.id), notifyProgress: notifyProgress }))); }; const mapStateToProps$3 = state => ({ notices: state.notices }); const mapDispatchToProps = dispatch => ({ drop: noticeId => dispatch(dropNotice(noticeId)), notifyProgress: ({ noticeId, progress }) => dispatch(setNoticeProgress({ noticeId, progress })) }); const ConnectedNoticeBox = require$$3.connect(mapStateToProps$3, mapDispatchToProps)(NoticeBox); const OverridableConnectedNoticeBox = allowOverride(ConnectedNoticeBox, 'NoticeBox'); const StyledLogo$1 = styledComponents.styled(reactRouterDom.Link)` text-align: center; display: flex; align-content: center; justify-content: center; flex-shrink: 0; padding: ${DesignSystem.themeGet('space', 'lg')} ${DesignSystem.themeGet('space', 'xxl')} ${DesignSystem.themeGet('space', 'xxl')}; text-decoration: none; & > h1 { text-decoration: none; font-weight: ${DesignSystem.themeGet('fontWeights', 'bolder')}; font-size: ${DesignSystem.themeGet('fontWeights', 'bolder')}; color: ${DesignSystem.themeGet('colors', 'grey80')}; font-size: ${DesignSystem.themeGet('fontSizes', 'xl')}; line-height: ${DesignSystem.themeGet('lineHeights', 'xl')}; } & > img { max-width: 170px; } &:hover h1 { color: ${DesignSystem.themeGet('colors', 'primary100')}; } `; const h$2 = new ViewHelpers(); const SidebarBranding = props => { const { branding } = props; const { logo, companyName } = branding; return /*#__PURE__*/React__default$1.default.createElement(StyledLogo$1, { className: DesignSystem.cssClass('Logo'), to: h$2.dashboardUrl(), "data-css": "sidebar-logo" }, logo ? /*#__PURE__*/React__default$1.default.createElement("img", { src: logo, alt: companyName }) : /*#__PURE__*/React__default$1.default.createElement("h1", null, companyName)); }; var SidebarBranding$1 = allowOverride(SidebarBranding, 'SidebarBranding'); const SidebarFooter = () => { const branding = require$$3.useSelector(state => state.branding); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { mt: "lg", mb: "md", "data-css": "sidebar-footer" }, branding.withMadeWithLove && /*#__PURE__*/React__default$1.default.createElement(DesignSystem.MadeWithLove, null)); }; var SidebarFooter$1 = allowOverride(SidebarFooter, 'SidebarFooter'); const h$1 = new ViewHelpers(); const SidebarPages = props => { const { pages } = props; const { translateLabel, translatePage } = useTranslation(); const location = reactRouter.useLocation(); const navigate = reactRouter.useNavigate(); if (!pages || !pages.length) { return null; } const isActive = page => !!location.pathname.match(`/pages/${page.name}`); const elements = pages.map(page => ({ id: page.name, label: translatePage(page.name), isSelected: isActive(page), icon: page.icon, href: h$1.pageUrl(page.name), onClick: (event, element) => { event.preventDefault(); if (element.href) { navigate(element.href); } } })); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Navigation, { label: translateLabel('pages'), elements: elements }); }; var SidebarPages$1 = allowOverride(SidebarPages, 'SidebarPages'); /** * @alias SidebarResourceSectionProps * @memberof SidebarResourceSection */ /** * Groups resources by sections and renders the list in {@link Sidebar} * * ### Usage * * ``` * import { SidebarResourceSection } from 'adminjs` * ``` * * @component * @subcategory Application * @name SidebarResourceSection */ const SidebarResourceSectionOriginal = ({ resources }) => { const elements = useNavigationResources(resources); const { translateLabel } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Navigation, { label: translateLabel('navigation'), elements: elements }); }; // Rollup cannot handle type exports well - that is why we need to do this hack with // exporting default and named SidebarResourceSection const SidebarResourceSection = allowOverride(SidebarResourceSectionOriginal, 'SidebarResourceSection'); const SIDEBAR_Z_INDEX = 50; const StyledSidebar = styledComponents.styled(DesignSystem.Box)` top: 0; bottom: 0; overflow-y: auto; width: ${({ theme }) => theme.sizes.sidebarWidth}; border-right: ${({ theme }) => theme.borders.default}; display: flex; flex-direction: column; flex-shrink: 0; z-index: ${SIDEBAR_Z_INDEX}; background: ${({ theme }) => theme.colors.sidebar}; transition: left 0.25s ease-in-out; &.hidden { left: -${({ theme }) => theme.sizes.sidebarWidth}; } &.visible { left: 0; } `; StyledSidebar.defaultProps = { position: ['absolute', 'absolute', 'absolute', 'absolute', 'initial'] }; const SidebarOriginal = props => { const { isVisible } = props; const branding = require$$3.useSelector(state => state.branding); const resources = require$$3.useSelector(state => state.resources); const pages = require$$3.useSelector(state => state.pages); return /*#__PURE__*/React__default$1.default.createElement(StyledSidebar, { className: isVisible ? 'visible' : 'hidden', "data-css": "sidebar" }, /*#__PURE__*/React__default$1.default.createElement(SidebarBranding$1, { branding: branding }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flexGrow: 1, className: DesignSystem.cssClass('Resources'), "data-css": "sidebar-resources" }, /*#__PURE__*/React__default$1.default.createElement(SidebarResourceSection, { resources: resources })), /*#__PURE__*/React__default$1.default.createElement(SidebarPages$1, { pages: pages }), /*#__PURE__*/React__default$1.default.createElement(SidebarFooter$1, null)); }; const Sidebar = allowOverride(SidebarOriginal, 'Sidebar'); const LanguageSelect = () => { const { i18n: { language, options: { supportedLngs }, changeLanguage }, translateComponent } = useTranslation(); const availableLanguages = React$1.useMemo(() => supportedLngs ? supportedLngs.filter(lang => lang !== 'cimode') : [], [supportedLngs]); if (availableLanguages.length <= 1) { return null; } return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flex: true, alignItems: "center" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DropDown, null, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DropDownTrigger, null, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { color: "text" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Icon, { icon: "Globe" }), translateComponent(`LanguageSelector.availableLanguages.${language}`, { defaultValue: language }))), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DropDownMenu, null, availableLanguages.map(lang => /*#__PURE__*/React__default$1.default.createElement(DesignSystem.DropDownItem, { key: lang, onClick: () => { changeLanguage(lang); } }, translateComponent(`LanguageSelector.availableLanguages.${lang}`, { defaultValue: lang })))))); }; const VersionItem = styledComponents.styled(DesignSystem.Text)` padding: 12px 24px 12px 0; `; VersionItem.defaultProps = { display: ['none', 'block'], color: 'grey100' }; const Version = props => { const { versions } = props; const { admin, app } = versions; const { translateLabel } = useTranslation(); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flex: true, flexGrow: 1, py: "default", px: "xxl", className: DesignSystem.cssClass('Version'), "data-css": "version" }, admin && /*#__PURE__*/React__default$1.default.createElement(VersionItem, null, translateLabel('adminVersion', { version: admin })), app && /*#__PURE__*/React__default$1.default.createElement(VersionItem, null, translateLabel('appVersion', { version: app }))); }; const OverridableVersion = allowOverride(Version, 'Version'); const NavBar = styledComponents.styled(DesignSystem.Box)` height: ${({ theme }) => theme.sizes.navbarHeight}; border-bottom: ${({ theme }) => theme.borders.default}; background: ${({ theme }) => theme.colors.container}; display: flex; flex-direction: row; flex-shrink: 0; align-items: center; `; NavBar.defaultProps = { className: DesignSystem.cssClass('NavBar') }; const TopBar = props => { const { toggleSidebar } = props; const session = require$$3.useSelector(state => state.session); const paths = require$$3.useSelector(state => state.paths); const versions = require$$3.useSelector(state => state.versions); return /*#__PURE__*/React__default$1.default.createElement(NavBar, { "data-css": "topbar" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { py: "lg", px: ['default', 'lg'], onClick: toggleSidebar, display: ['block', 'block', 'block', 'block', 'none'], style: { cursor: 'pointer' } }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Icon, { icon: "Menu", size: 24 })), /*#__PURE__*/React__default$1.default.createElement(OverridableVersion, { versions: versions }), /*#__PURE__*/React__default$1.default.createElement(LanguageSelect, null), session && session.email ? /*#__PURE__*/React__default$1.default.createElement(OverridableLoggedIn, { session: session, paths: paths }) : ''); }; const OverridableTopbar = allowOverride(TopBar, 'TopBar'); const Footer = () => null; const OverridableFooter = allowOverride(Footer, 'Footer'); var AppComponents = /*#__PURE__*/Object.freeze({ __proto__: null, ActionButton: OverridableActionButton, ActionHeader: OverridableActionHeader, AdminModal: AdminModal, AppLoader: AppLoader, AuthenticationBackgroundComponent: OverridableAuthenticationBackgroundComponent, BaseActionComponent: BaseActionComponent, BreadcrumbLink: BreadcrumbLink, BreadcrumbText: BreadcrumbText, Breadcrumbs: OverridableBreadcrumbs, Dashboard: Dashboard$1, DashboardHeader: DashboardHeader, DrawerPortal: DrawerPortal, ErrorBoundary: ErrorBoundary$1, ErrorMessageBox: ErrorMessageBox, FilterDrawer: OverridableFilterDrawer, Footer: OverridableFooter, LoggedIn: OverridableLoggedIn, NoActionError: NoActionError, NoRecordError: NoRecordError, NoRecords: NoRecords, NoResourceError: NoResourceError, NoticeBox: OverridableConnectedNoticeBox, OriginalActionButton: ActionButton, OriginalActionHeader: ActionHeader, OriginalAuthenticationBackgroundComponent: AuthenticationBackgroundComponent, OriginalBreadcrumbs: Breadcrumbs, OriginalFilterDrawer: FilterDrawer, OriginalFooter: Footer, OriginalLoggedIn: LoggedIn, OriginalNoRecords: NoRecordsOriginal, OriginalNoticeBox: ConnectedNoticeBox, OriginalPropertyHeader: PropertyHeader, OriginalRecordInList: RecordInList, OriginalRecordsTable: RecordsTable, OriginalRecordsTableHeader: RecordsTableHeader, OriginalSelectedRecords: SelectedRecords, OriginalSidebarResourceSection: SidebarResourceSectionOriginal, OriginalTopBar: TopBar, OriginalVersion: Version, PropertyHeader: OverridablePropertyHeader, RecordInList: OverridableRecordInList, RecordsTable: OverridableRecordsTable, RecordsTableHeader: OverridableRecordsTableHeader, SelectedRecords: OverridableSelectedRecords, Sidebar: Sidebar, SidebarResourceSection: SidebarResourceSection, SortLink: SortLink$1, TopBar: OverridableTopbar, Version: OverridableVersion }); class Dashboard extends React__default$1.default.Component { constructor(props) { super(props); this.state = { isClient: false }; } componentDidMount() { this.setState({ isClient: true }); } render() { const { dashboard } = this.props; const { isClient } = this.state; let Component; if (dashboard && dashboard.component && isClient && AdminJS.UserComponents[dashboard.component]) { Component = AdminJS.UserComponents[dashboard.component]; } else { Component = Dashboard$1; } return /*#__PURE__*/React__default$1.default.createElement(ErrorBoundary$1, null, /*#__PURE__*/React__default$1.default.createElement(Component, null)); } } const mapStateToProps$2 = state => ({ dashboard: state.dashboard }); var DashboardRoute = allowOverride(require$$3.connect(mapStateToProps$2)(Dashboard), 'DashboardRoute'); function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } const StyledWrapperWithFilter = styledComponents.styled(DesignSystem.Box)` & > ${DesignSystem.Drawer} { border-radius: ${({ theme }) => theme.space.sm}; } & > ${DesignSystem.DrawerContent} { background: ${({ theme }) => theme.colors.container}; padding: ${({ theme }) => theme.space.xxl}; overflow: visible; } & > ${DesignSystem.DrawerFooter} { background: ${({ theme }) => theme.colors.container}; padding: 0 ${({ theme }) => theme.space.xxl} ${({ theme }) => theme.space.xxl}; } `; const StyledWrapper = styledComponents.styled(DesignSystem.Box)` & ${DesignSystem.DrawerContent} { background: ${({ theme }) => theme.colors.container}; padding: ${({ theme }) => theme.space.xxl}; overflow: visible; } & ${DesignSystem.DrawerFooter} { background: ${({ theme }) => theme.colors.container}; padding: 0 ${({ theme }) => theme.space.xxl} ${({ theme }) => theme.space.xxl}; } `; const Wrapper$1 = props => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { children, variant, color, showFilter = false, 'data-css': dataCss, ...rest } = props; const Component = showFilter ? StyledWrapperWithFilter : StyledWrapper; return /*#__PURE__*/React__default$1.default.createElement(Component, _extends({}, rest, { variant: "transparent", mx: "auto", "data-css": dataCss || 'styled-wrapper' }), children); }; var Wrapper$2 = allowOverride(Wrapper$1, 'RouteWrapper'); const Wrapper = styledComponents.styled(DesignSystem.Box)` align-items: center; justify-content: center; flex-direction: column; height: 100%; `; const StyledLogo = styledComponents.styled.img` max-width: 200px; margin: ${({ theme }) => theme.space.md} 0; `; const IllustrationsWrapper = styledComponents.styled(DesignSystem.Box)` display: flex; flex-wrap: wrap; align-items: center; justify-content: center; & svg [stroke='#3B3552'] { stroke: rgba(255, 255, 255, 0.5); } & svg [fill='#3040D6'] { fill: rgba(255, 255, 255, 1); } `; const Login = () => { const props = window.__APP_STATE__; const { action, errorMessage: message } = props; const { translateComponent, translateMessage } = useTranslation(); const branding = require$$3.useSelector(state => state.branding); return /*#__PURE__*/React__default$1.default.createElement(Wrapper, { flex: true, variant: "grey", className: "login__Wrapper" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { bg: "white", height: "440px", flex: true, boxShadow: "login", width: [1, 2 / 3, 'auto'] }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { bg: "primary100", color: "white", p: "x3", width: "380px", flexGrow: 0, display: ['none', 'none', 'block'], position: "relative" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.H2, { fontWeight: "lighter" }, translateComponent('Login.welcomeHeader')), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, { fontWeight: "lighter", mt: "default" }, translateComponent('Login.welcomeMessage')), /*#__PURE__*/React__default$1.default.createElement(IllustrationsWrapper, { p: "xxl" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { display: "inline", mr: "default" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Illustration, { variant: "Planet", width: 82, height: 91 })), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { display: "inline" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Illustration, { variant: "Astronaut", width: 82, height: 91 })), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { display: "inline", position: "relative", top: "-20px" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Illustration, { variant: "FlagInCog", width: 82, height: 91 })))), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { as: "form", action: action, method: "POST", p: "x3", flexGrow: 1, width: ['100%', '100%', '480px'] }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.H5, { marginBottom: "xxl" }, branding.logo ? /*#__PURE__*/React__default$1.default.createElement(StyledLogo, { src: branding.logo, alt: branding.companyName }) : branding.companyName), message && /*#__PURE__*/React__default$1.default.createElement(DesignSystem.MessageBox, { my: "lg", message: message.split(' ').length > 1 ? message : translateMessage(message), variant: "danger" }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, null, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Label, { required: true }, translateComponent('Login.properties.email')), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Input, { name: "email", placeholder: translateComponent('Login.properties.email') })), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.FormGroup, null, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Label, { required: true }, translateComponent('Login.properties.password')), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Input, { type: "password", name: "password", placeholder: translateComponent('Login.properties.password'), autoComplete: "new-password" })), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, { mt: "xl", textAlign: "center" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Button, { variant: "contained" }, translateComponent('Login.loginButton'))))), branding.withMadeWithLove ? /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { mt: "xxl" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.MadeWithLove, null)) : null); }; var Login$1 = allowOverride(Login, 'Login'); /** * A higher-order component that prevents a component from rendering server-side * * @template P - The props object of the wrapped component * @param {React.ComponentType<P>} Component - The component to be wrapped * @returns {React.FC<P>} A new component that renders the given component client-side only */ // eslint-disable-next-line max-len const withNoSSR = Component => props => { const [isClient, setIsClient] = React$1.useState(false); /** * Sets isClient to true when the component is mounted on the client side */ React$1.useEffect(() => { setIsClient(true); }, []); // Renders nothing if the component is not mounted on the client side if (!isClient) return null; // Renders the wrapped component with the given props if it's mounted on the client side return /*#__PURE__*/React__default$1.default.createElement(Component, props); }; var cjs = {}; var developmentOnly = {}; Object.defineProperty(developmentOnly, "__esModule", { value: true }); developmentOnly.devToolsEnhancer = developmentOnly.composeWithDevTools = void 0; var _redux$2 = require$$0__default.default; function extensionComposeStub$1() { for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) { funcs[_key] = arguments[_key]; } if (funcs.length === 0) return undefined; if (typeof funcs[0] === 'object') return _redux$2.compose; return (0, _redux$2.compose)(...funcs); } const composeWithDevTools$2 = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : extensionComposeStub$1; developmentOnly.composeWithDevTools = composeWithDevTools$2; const devToolsEnhancer$2 = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function () { return function (noop) { return noop; }; }; developmentOnly.devToolsEnhancer = devToolsEnhancer$2; var logOnly = {}; var interopRequireDefault = {exports: {}}; (function (module) { function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports; } (interopRequireDefault)); var interopRequireDefaultExports = interopRequireDefault.exports; var assign = {}; var hasRequiredAssign; function requireAssign () { if (hasRequiredAssign) return assign; hasRequiredAssign = 1; Object.defineProperty(assign, "__esModule", { value: true }); assign.default = assign$1; const objectKeys = Object.keys || function (obj) { const keys = []; for (const key in obj) { if ({}.hasOwnProperty.call(obj, key)) keys.push(key); } return keys; }; function assign$1(obj, newKey, newValue) { const keys = objectKeys(obj); const copy = {}; for (let i = 0, l = keys.length; i < l; i++) { const key = keys[i]; copy[key] = obj[key]; } copy[newKey] = newValue; return copy; } return assign; } var _interopRequireDefault = interopRequireDefaultExports; Object.defineProperty(logOnly, "__esModule", { value: true }); logOnly.composeWithDevTools = composeWithDevTools$1; logOnly.devToolsEnhancer = void 0; var _assign = _interopRequireDefault(requireAssign()); var _redux$1 = require$$0__default.default; function enhancer(options) { const config = options || {}; config.features = { pause: true, export: true, test: true }; config.type = 'redux'; if (config.autoPause === undefined) config.autoPause = true; if (config.latency === undefined) config.latency = 500; return function (createStore) { return function (reducer, preloadedState) { const store = createStore(reducer, preloadedState); const origDispatch = store.dispatch; const devTools = window.__REDUX_DEVTOOLS_EXTENSION__.connect(config); devTools.init(store.getState()); const dispatch = function (action) { const r = origDispatch(action); devTools.send(action, store.getState()); return r; }; if (Object.assign) return Object.assign(store, { dispatch: dispatch }); return (0, _assign.default)(store, 'dispatch', dispatch); }; }; } function composeWithEnhancer(config) { return function () { return (0, _redux$1.compose)((0, _redux$1.compose)(...arguments), enhancer(config)); }; } function composeWithDevTools$1() { for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) { funcs[_key] = arguments[_key]; } if (typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__) { if (funcs.length === 0) return enhancer(); if (typeof funcs[0] === 'object') return composeWithEnhancer(funcs[0]); return composeWithEnhancer()(...funcs); } if (funcs.length === 0) return undefined; if (typeof funcs[0] === 'object') return _redux$1.compose; return (0, _redux$1.compose)(...funcs); } const devToolsEnhancer$1 = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ ? enhancer : function () { return function (noop) { return noop; }; }; logOnly.devToolsEnhancer = devToolsEnhancer$1; var logOnlyInProduction = {}; Object.defineProperty(logOnlyInProduction, "__esModule", { value: true }); logOnlyInProduction.devToolsEnhancer = logOnlyInProduction.composeWithDevTools = void 0; var _redux = require$$0__default.default; _interopRequireWildcard(logOnly); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function extensionComposeStub() { for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) { funcs[_key] = arguments[_key]; } if (funcs.length === 0) return undefined; if (typeof funcs[0] === 'object') return _redux.compose; return (0, _redux.compose)(...funcs); } const composeWithDevTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : extensionComposeStub; logOnlyInProduction.composeWithDevTools = composeWithDevTools; const devToolsEnhancer = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function () { return function (noop) { return noop; }; }; logOnlyInProduction.devToolsEnhancer = devToolsEnhancer; (function (exports) { Object.defineProperty(exports, "__esModule", { value: true }); exports.composeWithDevTools = void 0; Object.defineProperty(exports, "composeWithDevToolsDevelopmentOnly", { enumerable: true, get: function () { return _developmentOnly.composeWithDevTools; } }); Object.defineProperty(exports, "composeWithDevToolsLogOnly", { enumerable: true, get: function () { return _logOnly.composeWithDevTools; } }); Object.defineProperty(exports, "composeWithDevToolsLogOnlyInProduction", { enumerable: true, get: function () { return _logOnlyInProduction.composeWithDevTools; } }); exports.devToolsEnhancer = void 0; Object.defineProperty(exports, "devToolsEnhancerDevelopmentOnly", { enumerable: true, get: function () { return _developmentOnly.devToolsEnhancer; } }); Object.defineProperty(exports, "devToolsEnhancerLogOnly", { enumerable: true, get: function () { return _logOnly.devToolsEnhancer; } }); Object.defineProperty(exports, "devToolsEnhancerLogOnlyInProduction", { enumerable: true, get: function () { return _logOnlyInProduction.devToolsEnhancer; } }); var _redux = require$$0__default.default; var _developmentOnly = developmentOnly; var _logOnly = logOnly; var _logOnlyInProduction = logOnlyInProduction; function extensionComposeStub() { for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) { funcs[_key] = arguments[_key]; } if (funcs.length === 0) return undefined; if (typeof funcs[0] === 'object') return _redux.compose; return (0, _redux.compose)(...funcs); } const composeWithDevTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : extensionComposeStub; exports.composeWithDevTools = composeWithDevTools; const devToolsEnhancer = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function () { return function (noop) { return noop; }; }; exports.devToolsEnhancer = devToolsEnhancer; } (cjs)); const assetsReducer = (state = {}, action) => { switch (action.type) { case ASSETS_INITIALIZE: return action.data; default: return state; } }; const brandingReducer = (state = {}, action) => { switch (action.type) { case BRANDING_INITIALIZE: return action.data; default: return state; } }; const dashboardReducer = (state = {}, action) => { switch (action.type) { case DASHBOARD_INITIALIZE: return action.data; default: return state; } }; const drawerReducer = (state = { previousRoute: null }, action) => { switch (action.type) { case DRAWER_PREROUTE_SET: { return { ...state, ...action.data }; } default: { return state; } } }; const initialState = { isVisible: false }; const filterDrawerReducer = (state = initialState, action) => { switch (action.type) { case OPEN_FILTER_DRAWER: { return { ...state, isVisible: action.isVisible }; } case CLOSE_FILTER_DRAWER: { return { ...state, isVisible: action.isVisible }; } default: { return state; } } }; const defaultLocale = { language: 'en', translations: {} }; const localesReducer = (state = defaultLocale, action) => { switch (action.type) { case LOCALE_INITIALIZE: return action.data; default: return state; } }; const modalReducer = (state = { show: false }, action) => { switch (action.type) { case SHOW_MODAL: { return { ...action.data, show: true }; } case HIDE_MODAL: { return { show: false }; } default: return state; } }; const noticesReducer = (state = [], action) => { switch (action.type) { case ADD_NOTICE: { return [...state, action.data]; } case DROP_NOTICE: { return state.filter(notice => notice.id !== action.data.noticeId); } case SET_NOTICE_PROGRESS: { return state.map(notice => ({ ...notice, progress: notice.id === action.data.noticeId ? action.data.progress : notice.progress })); } default: return state; } }; const pagesReducer = (state = [], action) => { switch (action.type) { case PAGES_INITIALIZE: return action.data; default: return state; } }; const pathsReducer = (state = DEFAULT_PATHS, action) => { switch (action.type) { case PATHS_INITIALIZE: return action.data; default: return state; } }; const resourcesReducer = (state = [], action) => { switch (action.type) { case RESOURCES_INITIALIZE: return action.data; default: return state; } }; const routerReducer = (state = { from: {}, to: {} }, action) => { switch (action.type) { case INITIAL_ROUTE: return { ...state, from: { ...action.data } }; case ROUTE_CHANGED: return { from: { ...state.to }, to: { ...action.data } }; default: return state; } }; const sessionReducer = (state = null, action) => { switch (action.type) { case SESSION_INITIALIZE: return action.data; default: return state; } }; const themeReducer = (state = null, action) => { switch (action.type) { case THEME_INITIALIZE: return action.data; default: return state; } }; const versionsReducer = (state = {}, action) => { switch (action.type) { case VERSIONS_INITIALIZE: return { admin: action.data.admin, app: action.data.app }; default: return state; } }; // Note: We are using legacy "createStore" const reducer = require$$0$1.combineReducers({ assets: assetsReducer, branding: brandingReducer, dashboard: dashboardReducer, drawer: drawerReducer, filterDrawer: filterDrawerReducer, locale: localesReducer, modal: modalReducer, notices: noticesReducer, pages: pagesReducer, paths: pathsReducer, resources: resourcesReducer, router: routerReducer, session: sessionReducer, theme: themeReducer, versions: versionsReducer }); var createStore = ((initialState = {}) => require$$0$1.legacy_createStore(reducer, initialState, cjs.composeWithDevToolsDevelopmentOnly())); var baseAssignValue$1 = _baseAssignValue, eq$1 = eq_1; /** * This function is like `assignValue` except that it doesn't assign * `undefined` values. * * @private * @param {Object} object The object to modify. * @param {string} key The key of the property to assign. * @param {*} value The value to assign. */ function assignMergeValue$2(object, key, value) { if ((value !== undefined && !eq$1(object[key], value)) || (value === undefined && !(key in object))) { baseAssignValue$1(object, key, value); } } var _assignMergeValue = assignMergeValue$2; /** * Creates a base function for methods like `_.forIn` and `_.forOwn`. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ function createBaseFor$1(fromRight) { return function(object, iteratee, keysFunc) { var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; while (length--) { var key = props[fromRight ? length : ++index]; if (iteratee(iterable[key], key, iterable) === false) { break; } } return object; }; } var _createBaseFor = createBaseFor$1; var createBaseFor = _createBaseFor; /** * The base implementation of `baseForOwn` which iterates over `object` * properties returned by `keysFunc` and invokes `iteratee` for each property. * Iteratee functions may exit iteration early by explicitly returning `false`. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */ var baseFor$1 = createBaseFor(); var _baseFor = baseFor$1; var _cloneBuffer = {exports: {}}; _cloneBuffer.exports; (function (module, exports) { var root = _root; /** Detect free variable `exports`. */ var freeExports = exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined, allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; /** * Creates a clone of `buffer`. * * @private * @param {Buffer} buffer The buffer to clone. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Buffer} Returns the cloned buffer. */ function cloneBuffer(buffer, isDeep) { if (isDeep) { return buffer.slice(); } var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); buffer.copy(result); return result; } module.exports = cloneBuffer; } (_cloneBuffer, _cloneBuffer.exports)); var _cloneBufferExports = _cloneBuffer.exports; var Uint8Array$1 = _Uint8Array; /** * Creates a clone of `arrayBuffer`. * * @private * @param {ArrayBuffer} arrayBuffer The array buffer to clone. * @returns {ArrayBuffer} Returns the cloned array buffer. */ function cloneArrayBuffer$1(arrayBuffer) { var result = new arrayBuffer.constructor(arrayBuffer.byteLength); new Uint8Array$1(result).set(new Uint8Array$1(arrayBuffer)); return result; } var _cloneArrayBuffer = cloneArrayBuffer$1; var cloneArrayBuffer = _cloneArrayBuffer; /** * Creates a clone of `typedArray`. * * @private * @param {Object} typedArray The typed array to clone. * @param {boolean} [isDeep] Specify a deep clone. * @returns {Object} Returns the cloned typed array. */ function cloneTypedArray$1(typedArray, isDeep) { var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); } var _cloneTypedArray = cloneTypedArray$1; /** * Copies the values of `source` to `array`. * * @private * @param {Array} source The array to copy values from. * @param {Array} [array=[]] The array to copy values to. * @returns {Array} Returns `array`. */ function copyArray$1(source, array) { var index = -1, length = source.length; array || (array = Array(length)); while (++index < length) { array[index] = source[index]; } return array; } var _copyArray = copyArray$1; var isObject$3 = isObject_1; /** Built-in value references. */ var objectCreate = Object.create; /** * The base implementation of `_.create` without support for assigning * properties to the created object. * * @private * @param {Object} proto The object to inherit from. * @returns {Object} Returns the new object. */ var baseCreate$1 = (function() { function object() {} return function(proto) { if (!isObject$3(proto)) { return {}; } if (objectCreate) { return objectCreate(proto); } object.prototype = proto; var result = new object; object.prototype = undefined; return result; }; }()); var _baseCreate = baseCreate$1; var baseCreate = _baseCreate, getPrototype$1 = _getPrototype, isPrototype = _isPrototype; /** * Initializes an object clone. * * @private * @param {Object} object The object to clone. * @returns {Object} Returns the initialized clone. */ function initCloneObject$1(object) { return (typeof object.constructor == 'function' && !isPrototype(object)) ? baseCreate(getPrototype$1(object)) : {}; } var _initCloneObject = initCloneObject$1; var isArrayLike$1 = isArrayLike_1, isObjectLike$1 = isObjectLike_1; /** * This method is like `_.isArrayLike` except that it also checks if `value` * is an object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array-like object, * else `false`. * @example * * _.isArrayLikeObject([1, 2, 3]); * // => true * * _.isArrayLikeObject(document.body.children); * // => true * * _.isArrayLikeObject('abc'); * // => false * * _.isArrayLikeObject(_.noop); * // => false */ function isArrayLikeObject$2(value) { return isObjectLike$1(value) && isArrayLike$1(value); } var isArrayLikeObject_1 = isArrayLikeObject$2; var baseGetTag = _baseGetTag, getPrototype = _getPrototype, isObjectLike = isObjectLike_1; /** `Object#toString` result references. */ var objectTag = '[object Object]'; /** Used for built-in method references. */ var funcProto = Function.prototype, objectProto = Object.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** Used to infer the `Object` constructor. */ var objectCtorString = funcToString.call(Object); /** * Checks if `value` is a plain object, that is, an object created by the * `Object` constructor or one with a `[[Prototype]]` of `null`. * * @static * @memberOf _ * @since 0.8.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. * @example * * function Foo() { * this.a = 1; * } * * _.isPlainObject(new Foo); * // => false * * _.isPlainObject([1, 2, 3]); * // => false * * _.isPlainObject({ 'x': 0, 'y': 0 }); * // => true * * _.isPlainObject(Object.create(null)); * // => true */ function isPlainObject$1(value) { if (!isObjectLike(value) || baseGetTag(value) != objectTag) { return false; } var proto = getPrototype(value); if (proto === null) { return true; } var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; } var isPlainObject_1 = isPlainObject$1; /** * Gets the value at `key`, unless `key` is "__proto__" or "constructor". * * @private * @param {Object} object The object to query. * @param {string} key The key of the property to get. * @returns {*} Returns the property value. */ function safeGet$2(object, key) { if (key === 'constructor' && typeof object[key] === 'function') { return; } if (key == '__proto__') { return; } return object[key]; } var _safeGet = safeGet$2; var assignValue = _assignValue, baseAssignValue = _baseAssignValue; /** * Copies properties of `source` to `object`. * * @private * @param {Object} source The object to copy properties from. * @param {Array} props The property identifiers to copy. * @param {Object} [object={}] The object to copy properties to. * @param {Function} [customizer] The function to customize copied values. * @returns {Object} Returns `object`. */ function copyObject$1(source, props, object, customizer) { var isNew = !object; object || (object = {}); var index = -1, length = props.length; while (++index < length) { var key = props[index]; var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined; if (newValue === undefined) { newValue = source[key]; } if (isNew) { baseAssignValue(object, key, newValue); } else { assignValue(object, key, newValue); } } return object; } var _copyObject = copyObject$1; var copyObject = _copyObject, keysIn$1 = keysIn_1; /** * Converts `value` to a plain object flattening inherited enumerable string * keyed properties of `value` to own properties of the plain object. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to convert. * @returns {Object} Returns the converted plain object. * @example * * function Foo() { * this.b = 2; * } * * Foo.prototype.c = 3; * * _.assign({ 'a': 1 }, new Foo); * // => { 'a': 1, 'b': 2 } * * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); * // => { 'a': 1, 'b': 2, 'c': 3 } */ function toPlainObject$1(value) { return copyObject(value, keysIn$1(value)); } var toPlainObject_1 = toPlainObject$1; var assignMergeValue$1 = _assignMergeValue, cloneBuffer = _cloneBufferExports, cloneTypedArray = _cloneTypedArray, copyArray = _copyArray, initCloneObject = _initCloneObject, isArguments = isArguments_1, isArray = isArray_1, isArrayLikeObject$1 = isArrayLikeObject_1, isBuffer = isBufferExports, isFunction = isFunction_1, isObject$2 = isObject_1, isPlainObject = isPlainObject_1, isTypedArray = isTypedArray_1, safeGet$1 = _safeGet, toPlainObject = toPlainObject_1; /** * A specialized version of `baseMerge` for arrays and objects which performs * deep merges and tracks traversed objects enabling objects with circular * references to be merged. * * @private * @param {Object} object The destination object. * @param {Object} source The source object. * @param {string} key The key of the value to merge. * @param {number} srcIndex The index of `source`. * @param {Function} mergeFunc The function to merge values. * @param {Function} [customizer] The function to customize assigned values. * @param {Object} [stack] Tracks traversed source values and their merged * counterparts. */ function baseMergeDeep$1(object, source, key, srcIndex, mergeFunc, customizer, stack) { var objValue = safeGet$1(object, key), srcValue = safeGet$1(source, key), stacked = stack.get(srcValue); if (stacked) { assignMergeValue$1(object, key, stacked); return; } var newValue = customizer ? customizer(objValue, srcValue, (key + ''), object, source, stack) : undefined; var isCommon = newValue === undefined; if (isCommon) { var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue); newValue = srcValue; if (isArr || isBuff || isTyped) { if (isArray(objValue)) { newValue = objValue; } else if (isArrayLikeObject$1(objValue)) { newValue = copyArray(objValue); } else if (isBuff) { isCommon = false; newValue = cloneBuffer(srcValue, true); } else if (isTyped) { isCommon = false; newValue = cloneTypedArray(srcValue, true); } else { newValue = []; } } else if (isPlainObject(srcValue) || isArguments(srcValue)) { newValue = objValue; if (isArguments(objValue)) { newValue = toPlainObject(objValue); } else if (!isObject$2(objValue) || isFunction(objValue)) { newValue = initCloneObject(srcValue); } } else { isCommon = false; } } if (isCommon) { // Recursively merge objects and arrays (susceptible to call stack limits). stack.set(srcValue, newValue); mergeFunc(newValue, srcValue, srcIndex, customizer, stack); stack['delete'](srcValue); } assignMergeValue$1(object, key, newValue); } var _baseMergeDeep = baseMergeDeep$1; var Stack = _Stack, assignMergeValue = _assignMergeValue, baseFor = _baseFor, baseMergeDeep = _baseMergeDeep, isObject$1 = isObject_1, keysIn = keysIn_1, safeGet = _safeGet; /** * The base implementation of `_.merge` without support for multiple sources. * * @private * @param {Object} object The destination object. * @param {Object} source The source object. * @param {number} srcIndex The index of `source`. * @param {Function} [customizer] The function to customize merged values. * @param {Object} [stack] Tracks traversed source values and their merged * counterparts. */ function baseMerge$1(object, source, srcIndex, customizer, stack) { if (object === source) { return; } baseFor(source, function(srcValue, key) { stack || (stack = new Stack); if (isObject$1(srcValue)) { baseMergeDeep(object, source, key, srcIndex, baseMerge$1, customizer, stack); } else { var newValue = customizer ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) : undefined; if (newValue === undefined) { newValue = srcValue; } assignMergeValue(object, key, newValue); } }, keysIn); } var _baseMerge = baseMerge$1; var identity = identity_1, overRest = _overRest, setToString = _setToString; /** * The base implementation of `_.rest` which doesn't validate or coerce arguments. * * @private * @param {Function} func The function to apply a rest parameter to. * @param {number} [start=func.length-1] The start position of the rest parameter. * @returns {Function} Returns the new function. */ function baseRest$2(func, start) { return setToString(overRest(func, start, identity), func + ''); } var _baseRest = baseRest$2; var eq = eq_1, isArrayLike = isArrayLike_1, isIndex = _isIndex, isObject = isObject_1; /** * Checks if the given arguments are from an iteratee call. * * @private * @param {*} value The potential iteratee value argument. * @param {*} index The potential iteratee index or key argument. * @param {*} object The potential iteratee object argument. * @returns {boolean} Returns `true` if the arguments are from an iteratee call, * else `false`. */ function isIterateeCall$1(value, index, object) { if (!isObject(object)) { return false; } var type = typeof index; if (type == 'number' ? (isArrayLike(object) && isIndex(index, object.length)) : (type == 'string' && index in object) ) { return eq(object[index], value); } return false; } var _isIterateeCall = isIterateeCall$1; var baseRest$1 = _baseRest, isIterateeCall = _isIterateeCall; /** * Creates a function like `_.assign`. * * @private * @param {Function} assigner The function to assign values. * @returns {Function} Returns the new assigner function. */ function createAssigner$1(assigner) { return baseRest$1(function(object, sources) { var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined, guard = length > 2 ? sources[2] : undefined; customizer = (assigner.length > 3 && typeof customizer == 'function') ? (length--, customizer) : undefined; if (guard && isIterateeCall(sources[0], sources[1], guard)) { customizer = length < 3 ? undefined : customizer; length = 1; } object = Object(object); while (++index < length) { var source = sources[index]; if (source) { assigner(object, source, index, customizer); } } return object; }); } var _createAssigner = createAssigner$1; var baseMerge = _baseMerge, createAssigner = _createAssigner; /** * This method is like `_.assign` except that it recursively merges own and * inherited enumerable string keyed properties of source objects into the * destination object. Source properties that resolve to `undefined` are * skipped if a destination value exists. Array and plain object properties * are merged recursively. Other objects and value types are overridden by * assignment. Source objects are applied from left to right. Subsequent * sources overwrite property assignments of previous sources. * * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 0.5.0 * @category Object * @param {Object} object The destination object. * @param {...Object} [sources] The source objects. * @returns {Object} Returns `object`. * @example * * var object = { * 'a': [{ 'b': 2 }, { 'd': 4 }] * }; * * var other = { * 'a': [{ 'c': 3 }, { 'e': 5 }] * }; * * _.merge(object, other); * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } */ var merge = createAssigner(function(object, source, srcIndex) { baseMerge(object, source, srcIndex); }); var merge_1 = merge; var merge$1 = /*@__PURE__*/getDefaultExportFromCjs(merge_1); var actions$8 = { "new": "Neu Erstellen", edit: "Bearbeiten", show: "Anzeigen", "delete": "Löschen", bulkDelete: "Alle Löschen", list: "Auflisten" }; var buttons$8 = { save: "Speichern", addNewItem: "Neuen Eintrag hinzufügen", filter: "Filter", filterActive: "Filter ({{count}})", applyChanges: "Änderungen übernehmen", resetFilter: "Zurücksetzen", confirmRemovalMany: "Bestätigen Sie das Löschen des Eintrag", confirmRemovalMany_plural: "Bestätigen Sie das Löschen der {{count}} Einträge", logout: "Abmelden", login: "Anmelden", seeTheDocumentation: "Siehe: <1>die Dokumentation</1>", createFirstRecord: "Ersten Eintrag erstellen", cancel: "Abbestellen", confirm: "Bestätigen" }; var components$8 = { DropZone: { placeholder: "Legen Sie Ihre Datei hier ab oder klicken Sie zum Durchsuchen", acceptedSize: "Maximale Dateigröße: {{maxSize}}", acceptedType: "Unterstützen: {{mimeTypes}}", unsupportedSize: "Datei {{fileName}} ist zu groß", unsupportedType: "Datei {{fileName}} hat einen nicht unterstützten Typ: {{fileType}}" }, LanguageSelector: { availableLanguages: { de: "Deutsch", en: "Englisch", es: "Spanisch", it: "Italienisch", ja: "Japanisch", pl: "Polnisch", "pt-BR": "Portugiesisch (Brasilien)", ua: "Ukrainisch", "zh-CN": "Chinesisch" } }, Login: { welcomeHeader: "Wilkommen", welcomeMessage: "zu AdminJS - dem weltweit führenden, automatisch generierten Open-Source-Admin-Panel für Ihre Node.js-Anwendung, mit dem Sie alle Ihre Daten an einem Ort verwalten können", properties: { email: "Email", password: "Passwort" }, loginButton: "Einloggen" } }; var labels$8 = { navigation: "Navigation", pages: "Seiten", selectedRecords: "Ausgewählt ({{selected}})", filters: "Filter", adminVersion: "Admin: {{version}}", appVersion: "App: {{version}}", dashboard: "Dashboard" }; var properties$8 = { length: "Anzahl", from: "Von", to: "An" }; var resources$8 = { }; var messages$8 = { successfullyBulkDeleted: "erfolgreich den Eintrag gelöscht", successfullyBulkDeleted_plural: "erfolgreich {{count}} Einträge gelöscht", successfullyDeleted: "Erfolgreich den gewählten Eintrag gelöscht", successfullyUpdated: "Erfolgreich den gewählten Eintrag aktualisiert", thereWereValidationErrors: "Es sind Validierungsfehler aufgetreten - bitte unten prüfen", forbiddenError: "Sie können {{resourceId}} nicht {{actionName}}", anyForbiddenError: "Sie können diese Aktion nicht durchführen", successfullyCreated: "Erfolgreich einen neuen Eintrag erstellt", bulkDeleteError: "Beim Löschen der Einträge ist ein Fehler aufgetreten, für weitere Informationen die Konsole prüfen", errorFetchingRecords: "Es ist ein Fehler beim Abrufen der Einträge aufgetreten. In der Konsole finden Sie weitere Informationen", errorFetchingRecord: "Es ist ein Fehler beim Abrufen des Eintrages aufgetreten. In der Konsole finden Sie weitere Informationen.", noRecordsSelected: "Sie haben keine Einträge ausgewählt", theseRecordsWillBeRemoved: "Der folgende Eintrag wird entfernt", theseRecordsWillBeRemoved_plural: "Die folgenden Einträge werden entfernt", pickSomeFirstToRemove: "Damit Einträge gelöscht werden können, müssen Sie diese vorher auswählen", error404Resource: "Eintrag mit id: {{resourceId}} kann nicht gefunden werden", error404Action: "Eintrag mit id: {{resourceId}} hat keine Aktion mit dem Namen: {{actionName}} oder Sie sind nicht berechtigt diese auszuführen!", error404Record: "Eintrag mit id: {{resourceId}} hat keinen Eintrag mit der id: {{recordId}} oder Sie sind berechtigt diesen aufzurufen!", seeConsoleForMore: "Siehe Entwicklerkonsole für weitere Details...", noActionComponent: "Sie müssen eine Aktionskomponente für Ihre Aktion implementieren", noRecordsInResource: "Es gibt keine Einträge in dieser Ressource", noRecords: "Keine Einträge", confirmDelete: "Wollen Sie wirklich diesen Eintrag löschen?", welcomeOnBoard_title: "Willkommen an Bord!", welcomeOnBoard_subtitle: "Jetzt gehören Sie zu uns! Wir haben ein paar Tipps für Sie vorbereitet, damit Sie loslegen können:", addingResources_title: "Ressourcen Hinzufügen", addingResources_subtitle: "So fügen Sie neue Ressourcen zur Seitenleiste hinzu", customizeResources_title: "Ressourcen anpassen", customizeResources_subtitle: "Definieren von Verhalten, Hinzufügen von Eigenschaften und mehr...", customizeActions_title: "Aktionen anpassen", customizeActions_subtitle: "Ändern bestehender und Hinzufügen neuer Aktionen", writeOwnComponents_title: "Komponenten schreiben", writeOwnComponents_subtitle: "Wie man das Aussehen von AdminJS ändert", customDashboard_title: "Benutzerdefiniertes Dashboard", customDashboard_subtitle: "So ändern Sie diese Ansicht und fügen neue Seiten in der Seitenleiste hinzu", roleBasedAccess_title: "Rollenbasierte Zugriffskontrolle", roleBasedAccess_subtitle: "Erstellen von Benutzerrollen und Berechtigungen in AdminJS", community_title: "Treten Sie der Discord-Community bei", community_subtitle: "Sprechen Sie mit den Entwicklern von AdminJS und anderen AdminJS-Anwendern", foundBug_title: "Sie haben einen Fehler gefunden? Sie brauchen eine Verbesserung?", foundBug_subtitle: "Erstellen Sie ein Ticket in unserem GitHub Repo", needMoreSolutions_title: "Benötigen Sie fortschrittlichere Lösungen?", needMoreSolutions_subtitle: "Wir sind hier, um Ihnen ein schönes UX/UI-Design und eine maßgeschneiderte Software zu bieten, die (nicht nur) auf AdminJS basiert.", invalidCredentials: "Falsche E-Mail und/oder falsches Passwort", pageNotFound_title: "Seite nicht gefunden", pageNotFound_subtitle: "Buchseite <strong>\"{{pageName}}\"</strong> ist nicht vorhanden", componentNotFound_title: "Keine Komponente angegeben", componentNotFound_subtitle: "Sie müssen die Komponente angeben, die dieses Element rendert" }; var deLocale = { actions: actions$8, buttons: buttons$8, components: components$8, labels: labels$8, properties: properties$8, resources: resources$8, messages: messages$8 }; var actions$7 = { "new": "Create new", edit: "Edit", show: "Show", "delete": "Delete", bulkDelete: "Delete all", list: "List" }; var buttons$7 = { save: "Save", addNewItem: "Add new item", filter: "Filter", filterActive: "Filter ({{count}})", applyChanges: "Apply changes", resetFilter: "Reset", confirmRemovalMany: "Confirm the removal of {{count}} record", confirmRemovalMany_plural: "Confirm the removal of {{count}} records", logout: "Log out", login: "Log in", seeTheDocumentation: "See: <1>the documentation</1>", createFirstRecord: "Create first record", cancel: "Cancel", confirm: "Confirm", contactUs: "Contact us" }; var components$7 = { DropZone: { placeholder: "Drop your file here, or click to browse", acceptedSize: "Max size: {{maxSize}}", acceptedType: "Supports: {{mimeTypes}}", unsupportedSize: "File {{fileName}} is too big", unsupportedType: "File {{fileName}} has unsupported type: {{fileType}}" }, LanguageSelector: { availableLanguages: { de: "German", en: "English", es: "Spanish", it: "Italian", ja: "Japanese", pl: "Polish", "pt-BR": "Portuguese (Brazil)", ua: "Ukrainian", "zh-CN": "Chinese" } }, Login: { welcomeHeader: "Welcome", welcomeMessage: "to AdminJS - the world's leading open-source auto-generated admin panel for your Node.js application that allows you to manage all your data in one place", properties: { email: "Email", password: "Password" }, loginButton: "Login" } }; var labels$7 = { navigation: "Navigation", pages: "Pages", selectedRecords: "Selected ({{selected}})", filters: "Filters", adminVersion: "Admin: {{version}}", appVersion: "App: {{version}}", dashboard: "Dashboard" }; var properties$7 = { length: "Length", from: "From", to: "To" }; var resources$7 = { }; var messages$7 = { successfullyBulkDeleted: "Successfully removed {{count}} record", successfullyBulkDeleted_plural: "Successfully removed {{count}} records", successfullyDeleted: "Successfully deleted given record", successfullyUpdated: "Successfully updated given record", thereWereValidationErrors: "There are validation errors - check them out below", forbiddenError: "You cannot perform action {{actionName}} on {{resourceId}}", anyForbiddenError: "You cannot perform given action", successfullyCreated: "Successfully created a new record", bulkDeleteError: "There was an error deleting records. Check out console to see more information", errorFetchingRecords: "There was an error fetching records. Check out console to see more information", errorFetchingRecord: "There was an error fetching record. Check out console to see more information", noRecordsSelected: "You have not selected any records", theseRecordsWillBeRemoved: "Following record will be removed", theseRecordsWillBeRemoved_plural: "Following records will be removed", pickSomeFirstToRemove: "In order to remove records, you have to pick them first", error404Resource: "Resource of given id: {{resourceId}} cannot be found", error404Action: "Resource of given id: {{resourceId}} does not have an action with name: {{actionName}} or you are not authorized to use it!", error404Record: "Resource of given id: {{resourceId}} does not have a record with id: {{recordId}} or you are not authorized to use it!", seeConsoleForMore: "See development console for more details...", noActionComponent: "You have to implement action component for your Action", noRecordsInResource: "There are no records in this resource", noRecords: "No records", confirmDelete: "Do you really want to remove this item?", welcomeOnBoard_title: "Welcome on Board!", welcomeOnBoard_subtitle: "Now you are one of us! We prepared a few tips for you to start:", addingResources_title: "Adding Resources", addingResources_subtitle: "Learn how to add new resources to the sidebar", customizeResources_title: "Customize Resources", customizeResources_subtitle: "Define behavior, properties and more...", customizeActions_title: "Customize Actions", customizeActions_subtitle: "Modify existing actions or add custom ones", writeOwnComponents_title: "Write Components", writeOwnComponents_subtitle: "How to modify the Look & Feel of AdminJS", customDashboard_title: "Custom Dashboard", customDashboard_subtitle: "Learn how to customize the home screen of AdminJS", roleBasedAccess_title: "Role-Based Access Control", roleBasedAccess_subtitle: "Define access permissions for your AdminJS users", community_title: "Join the Discord community", community_subtitle: "Talk with the creators of AdminJS and other AdminJS users", foundBug_title: "Found a Bug? need improvement?", foundBug_subtitle: "Raise an issue on our GitHub repo", needMoreSolutions_title: "Need more advanced solutions?", needMoreSolutions_subtitle: "We are here to provide you a beautiful UX/UI design and tailor made software based (not only) on AdminJS", invalidCredentials: "Wrong email and/or password", keyPlaceholder: "KEY", valuePlaceholder: "VALUE", initialKey: "Key-{{number}}", keyInUse: "Object keys must be unique", keyValuePropertyDefaultDescription: "All values are stored as text. Keys must be unique, duplicate keys will not be saved.", pageNotFound_title: "Page not found", pageNotFound_subtitle: "Page <strong>\"{{pageName}}\"</strong> does not exist", componentNotFound_title: "No component specified", componentNotFound_subtitle: "You have to specify component which will render this element" }; var enLocale = { actions: actions$7, buttons: buttons$7, components: components$7, labels: labels$7, properties: properties$7, resources: resources$7, messages: messages$7 }; var actions$6 = { "new": "Crear nuevo", edit: "Editar", show: "Espectáculo", "delete": "Borrar", bulkDelete: "Eliminar todos", list: "Lista" }; var buttons$6 = { save: "Guardar", addNewItem: "Agregar nuevo elemento", filter: "Filtrar", filterActive: "Filtrar ({{count}})", applyChanges: "Aplicar cambios", resetFilter: "Reiniciar", confirmRemovalMany: "Confirmar la eliminación de {{count}} registro", confirmRemovalMany_plural: "Confirmar la eliminación de {{count}} registros", logout: "Cerrar sesión", login: "Acceso", seeTheDocumentation: "Ver: <1>la documentación</1>", createFirstRecord: "Crear primer registro", cancel: "Cancelar", confirm: "Confirmar" }; var components$6 = { DropZone: { placeholder: "Suelte su archivo aquí, o haga clic para navegar", acceptedSize: "Tamaño máximo: {{maxSize}}", acceptedType: "Apoya: {{mimeTypes}}", unsupportedSize: "Archivo {{fileName}} es demasiado grande", unsupportedType: "Archivo {{fileName}} tiene un tipo no compatible: {{fileType}}" }, LanguageSelector: { availableLanguages: { de: "Alemán", en: "Inglés", es: "Español", it: "Italiano", ja: "Japonés", pl: "Polaco", "pt-BR": "Portugués (Brasil)", ua: "Ucranio", "zh-CN": "Chino" } }, Login: { welcomeHeader: "Bienvenido", welcomeMessage: "a AdminJS: el panel de administración generado automáticamente de código abierto líder en el mundo para su aplicación Node.js que le permite administrar todos sus datos en un solo lugar", properties: { email: "Correo electrónico", password: "Contraseña" }, loginButton: "Conectarse" } }; var labels$6 = { navigation: "Navegación", pages: "Paginas", selectedRecords: "Seleccionado ({{selected}})", filters: "filtros", adminVersion: "Administración: {{version}}", appVersion: "aplicación: {{version}}", dashboard: "Panel" }; var properties$6 = { length: "Longitud", from: "De", to: "A" }; var resources$6 = { }; var messages$6 = { successfullyBulkDeleted: "eliminado con éxito {{count}} registro", successfullyBulkDeleted_plural: "eliminado con éxito {{count}} registros", successfullyDeleted: "Registro dado eliminado con éxito", successfullyUpdated: "Registro dado actualizado con éxito", thereWereValidationErrors: "Hay errores de validación. Compruébelos a continuación.", forbiddenError: "No puede realizar la acción {{actionName}} en {{resourceId}}", anyForbiddenError: "No puede realizar la acción dada", successfullyCreated: "Se creó con éxito un nuevo registro", bulkDeleteError: "Hubo un error al eliminar los registros. Consulte la consola para ver más información.", errorFetchingRecords: "Se produjo un error al obtener registros. Consulte la consola para ver más información.", errorFetchingRecord: "Hubo un error al obtener el registro. Consulta la consola para ver más información.", noRecordsSelected: "No ha seleccionado ningún registro", theseRecordsWillBeRemoved: "Se eliminará el siguiente registro", theseRecordsWillBeRemoved_plural: "Se eliminarán los siguientes registros", pickSomeFirstToRemove: "Para eliminar registros, primero debe elegirlos", error404Resource: "Recurso de identificación dada: {{resourceId}} no pudo ser encontrado", error404Action: "Recurso de identificación dada: {{resourceId}} no tiene una acción con nombre: {{actionName}} ¡o usted no está autorizado a usarlo!", error404Record: "Recurso de identificación dada: {{resourceId}} no tiene registro con id: {{recordId}} ¡o usted no está autorizado a usarlo!", seeConsoleForMore: "Consulte la consola de desarrollo para obtener más detalles...", noActionComponent: "Tienes que implementar el componente de acción para tu Acción", noRecordsInResource: "No hay registros en este recurso", noRecords: "No hay registros", confirmDelete: "¿Realmente desea eliminar este elemento?", welcomeOnBoard_title: "¡La bienvenida a bordo!", welcomeOnBoard_subtitle: "¡Ahora eres uno de nosotros! ", addingResources_title: "Adición de recursos", addingResources_subtitle: "Cómo agregar nuevos recursos a la barra lateral", customizeResources_title: "Personalizar recursos", customizeResources_subtitle: "Definición de comportamiento, adición de propiedades y más...", customizeActions_title: "Personalizar acciones", customizeActions_subtitle: "Modificación de acciones existentes y adición de nuevas", writeOwnComponents_title: "Escribir componentes", writeOwnComponents_subtitle: "Cómo modificar la apariencia de AdminJS", customDashboard_title: "Tablero personalizado", customDashboard_subtitle: "Cómo modificar esta vista y agregar nuevas páginas en la barra lateral", roleBasedAccess_title: "Control de acceso basado en roles", roleBasedAccess_subtitle: "Crear roles de usuario y permisos en AdminJS", community_title: "Únete a la comunidad de holgura", community_subtitle: "Hable con los creadores de AdminJS y otros usuarios de AdminJS", foundBug_title: "¿Encontraste un error? ", foundBug_subtitle: "Plantear un problema en nuestro repositorio de GitHub", needMoreSolutions_title: "¿Necesita soluciones más avanzadas?", needMoreSolutions_subtitle: "Estamos aquí para brindarle un hermoso diseño de UX/UI y un software personalizado basado (no solo) en AdminJS", invalidCredentials: "Email y/o contraseña incorrectos", keyPlaceholder: "LLAVE", valuePlaceholder: "VALOR", initialKey: "Llave-{{number}}", keyInUse: "Las claves de objeto deben ser únicas.", keyValuePropertyDefaultDescription: "Todos los valores se almacenan como texto. ", pageNotFound_title: "Página no encontrada", pageNotFound_subtitle: "Página <strong>\"{{pageName}}\"</strong> no existe", componentNotFound_title: "Ningún componente especificado", componentNotFound_subtitle: "Tienes que especificar el componente que representará este elemento." }; var esLocale = { actions: actions$6, buttons: buttons$6, components: components$6, labels: labels$6, properties: properties$6, resources: resources$6, messages: messages$6 }; var actions$5 = { "new": "Crea nuovo", edit: "Modifica", show: "Mostra", "delete": "Elimina", bulkDelete: "Elimina selezionati", list: "Lista" }; var buttons$5 = { save: "Salva", addNewItem: "Aggiungi nuovo elemento", filter: "Filtro", filterActive: "Filtro ({{count}})", applyChanges: "Applica modifiche", resetFilter: "Resetta filtro", confirmRemovalMany: "Conferma la rimozione di {{count}} elementi", confirmRemovalMany_plural: "Conferma la rimozione di {{count}} elementi", logout: "Esci", login: "Accedi", seeTheDocumentation: "Vedi: <1>La documentazione</1>", createFirstRecord: "Crea il primo elemento", cancel: "Annulla", confirm: "Confermare" }; var components$5 = { DropZone: { placeholder: "Trascina qui il tuo file o fai clic per sfogliarlo", acceptedSize: "Dimensione massima: {{maxSize}}", acceptedType: "Supporta: {{mimeTypes}}", unsupportedSize: "Il file {{fileName}} è troppo grande", unsupportedType: "Il file {{fileName}} ha un tipo non supportato: {{fileType}}" }, LanguageSelector: { availableLanguages: { de: "Tedesco", en: "Inglese", es: "spagnolo", it: "Italiano", ja: "Giapponese", pl: "Polacco", "pt-BR": "Portoghese (Brasile)", ua: "ucraino", "zh-CN": "Cinese" } }, Login: { welcomeHeader: "Benvenuto", welcomeMessage: "a Adminjs – il principale pannello di amministrazione open-source per la tua applicazione Node.js che ti consente di gestire tutti i tuoi dati in un unico luogo", properties: { email: "Email", password: "Password" }, loginButton: "Accedi" } }; var labels$5 = { navigation: "Navigazione", pages: "Pagine", selectedRecords: "Selezionati ({{selected}})", filters: "Filtri", adminVersion: "Admin: {{version}}", appVersion: "App: {{version}}", dashboard: "Dashboard" }; var properties$5 = { length: "Lunghezza", from: "Da", to: "A" }; var resources$5 = { }; var messages$5 = { successfullyBulkDeleted: "Rimossi con successo {{count}} Elementi", successfullyBulkDeleted_plural: "Rimossi con successo {{count}} Elementi", successfullyDeleted: "Elemento selezionato rimosso con successo", successfullyUpdated: "Elemento aggiornato rimosso con successo", thereWereValidationErrors: "Ci sono degli errori di validazione - Controllali sotto", forbiddenError: "Non puoi eseguire {{actionName}} su {{resourceId}}", anyForbiddenError: "Non puoi eseguire questa azione", successfullyCreated: "Nuovo elemento creato con successo", bulkDeleteError: "Si è verificato un errore durante la rimozione degli elementi, controlla la console per maggiori informazioni", errorFetchingRecords: "Si è verificato un errore durante la raccolta degli elementi, controlla la console per maggiori informazioni", errorFetchingRecord: "Si è verificato un errore durante la raccolta degli elementi, controlla la console per maggiori informazioni", noRecordsSelected: "Non hai selezionato nessun elemento", theseRecordsWillBeRemoved: "I seguenti elementi verranno rimossi", theseRecordsWillBeRemoved_plural: "I seguenti elementi verranno rimossi", pickSomeFirstToRemove: "Per rimuovere nuovi elementi, devi prima aggiungerne almeno uno", error404Resource: "La risorsa: {{resourceId}} Non può essere trovata", error404Action: "l' azione: {{resourceId}} non ha un azione col nome di : {{actionName}} o non sei autorizzato ad usarla!", error404Record: "La risorsa: {{resourceId}} non ha un elemento: {{recordId}} o non sei autorizzato ad usarla!", seeConsoleForMore: "Guarda la console di sviluppo per maggiori dettagli...", noActionComponent: "Devi implementare un componente per la tua zione", noRecordsInResource: "Non ci sono elementi in questa risorsa", noRecords: "Nessun elemento", confirmDelete: "Sicuro di voler eleminare questo elemento?", welcomeOnBoard_title: "Benvenuto a bordo!", welcomeOnBoard_subtitle: "Sei ora uno di noi! Preparati per alcuni consigli per iniziare:", addingResources_title: "Aggiungendo elementi", addingResources_subtitle: "Come aggiungere nuove risorse nella colonna laterale", customizeResources_title: "Personalizzare le risorse", customizeResources_subtitle: "Definire il comportamento, aggiungere propietà e altro...", customizeActions_title: "Personalizzare le azioni", customizeActions_subtitle: "Modificare azioni esistenti e crearne delle nuove", writeOwnComponents_title: "Scrivi componenti personalizzati", writeOwnComponents_subtitle: "Come modificare il look e il feel di Adminjs", customDashboard_title: "Dashboard personalizzata", customDashboard_subtitle: "Come modificare questa vista e aggiungere pagine in basso a sinistra", roleBasedAccess_title: "Accesso basato su ruoli", roleBasedAccess_subtitle: "Crea utenti e permessi su AdminJS", community_title: "Entra nella community di Discord", community_subtitle: "Parla con i creatori di adminJS e altri utenti", foundBug_title: "Trovato un bug? Ti serve un implementazione?", foundBug_subtitle: "Apri una segnalazione sul nostro GitHub", needMoreSolutions_title: "Ti servono soluzioni più avanzate?", needMoreSolutions_subtitle: "Siamo qui per fortnirti una bella UI/UX e un software personalizzato (non solo) su AdminJS", invalidCredentials: "E-mail o password errati", pageNotFound_title: "pagina non trovata", pageNotFound_subtitle: "Pagina <strong>\"{{pageName}}\"</strong> non esiste", componentNotFound_title: "Nessun componente specificato", componentNotFound_subtitle: "Devi specificare il componente che renderà questo elemento" }; var itLocale = { actions: actions$5, buttons: buttons$5, components: components$5, labels: labels$5, properties: properties$5, resources: resources$5, messages: messages$5 }; var actions$4 = { "new": "新規作成", edit: "編集", show: "表示", "delete": "削除", bulkDelete: "すべて削除", list: "一覧" }; var buttons$4 = { save: "保存", addNewItem: "新しいアイテムを追加", filter: "フィルタ", filterActive: "フィルタ ({{count}})", applyChanges: "変更を適用", resetFilter: "リセット", confirmRemovalMany: "{{count}} 件のレコードを削除しますか", confirmRemovalMany_plural: "{{count}} 件のレコードを削除しますか", logout: "ログアウト", login: "ログイン", seeTheDocumentation: "参照: <1>ドキュメンテーション</1>", createFirstRecord: "最初のレコードを作成", cancel: "キャンセル", confirm: "確認" }; var components$4 = { DropZone: { placeholder: "ファイルをここにドロップするか、クリックしてブラウズ", acceptedSize: "最大サイズ: {{maxSize}}", acceptedType: "サポート: {{mimeTypes}}", unsupportedSize: "ファイル {{fileName}} は大きすぎます", unsupportedType: "ファイル {{fileName}} の種類はサポートされていません: {{fileType}}" }, LanguageSelector: { availableLanguages: { de: "ドイツ語", en: "英語", es: "スペイン語", it: "イタリア語", ja: "日本語", pl: "ポーランド語", "pt-BR": "ポルトガル語(ブラジル)", ua: "ウクライナ語", "zh-CN": "中国語" } }, Login: { welcomeHeader: "ようこそ", welcomeMessage: "AdminJSへようこそ。これは、Node.jsアプリケーションのための世界トップクラスのオープンソースの自動生成管理パネルで、すべてのデータを1つの場所で管理できます。", properties: { email: "メールアドレス", password: "パスワード" }, loginButton: "ログイン" } }; var labels$4 = { navigation: "ナビゲーション", pages: "ページ", selectedRecords: "選択済み({{selected}})", filters: "フィルタ", adminVersion: "管理者: {{version}}", appVersion: "アプリ: {{version}}", dashboard: "ダッシュボード" }; var properties$4 = { length: "長さ", from: "から", to: "まで" }; var resources$4 = { }; var messages$4 = { successfullyBulkDeleted: "{{count}} 件のレコードを正常に削除しました", successfullyBulkDeleted_plural: "{{count}} 件のレコードを正常に削除しました", successfullyDeleted: "指定されたレコードを正常に削除しました", successfullyUpdated: "指定されたレコードを正常に更新しました", thereWereValidationErrors: "検証エラーがあります - 以下を確認してください", forbiddenError: "{{actionName}} アクションを {{resourceId}} で実行することはできません", anyForbiddenError: "指定されたアクションは実行できません", successfullyCreated: "新しいレコードを正常に作成しました", bulkDeleteError: "レコードの削除中にエラーが発生しました。詳細についてはコンソールを確認してください", errorFetchingRecords: "レコードの取得中にエラーが発生しました。詳細についてはコンソールを確認してください", errorFetchingRecord: "レコードの取得中にエラーが発生しました。詳細についてはコンソールを確認してください", noRecordsSelected: "レコードが選択されていません", theseRecordsWillBeRemoved: "以下のレコードが削除されます", theseRecordsWillBeRemoved_plural: "以下のレコードが削除されます", pickSomeFirstToRemove: "レコードを削除するには、まずそれらを選択する必要があります", error404Resource: "指定されたIDのリソースは見つかりません: {{resourceId}}", error404Action: "指定されたIDのリソースには {{actionName}} という名前のアクションが存在しないか、使用する権限がありません!", error404Record: "指定されたIDのリソースには {{recordId}} というIDのレコードが存在しないか、使用する権限がありません!", seeConsoleForMore: "詳細情報は開発コンソールを参照してください...", noActionComponent: "アクションに対するアクションコンポーネントを実装する必要があります", noRecordsInResource: "このリソースにはレコードがありません", noRecords: "レコードがありません", confirmDelete: "本当にこのアイテムを削除しますか?", welcomeOnBoard_title: "ようこそ!", welcomeOnBoard_subtitle: "これで私たちの一員です!始めるためのいくつかのヒントを用意しました:", addingResources_title: "リソースの追加", addingResources_subtitle: "サイドバーに新しいリソースを追加する方法", customizeResources_title: "リソースのカスタマイズ", customizeResources_subtitle: "動作の定義、プロパティの追加など...", customizeActions_title: "アクションのカスタマイズ", customizeActions_subtitle: "既存のアクションの変更と新規追加", writeOwnComponents_title: "コンポーネントの作成", writeOwnComponents_subtitle: "AdminJSの外観と操作性を変更する方法", customDashboard_title: "カスタムダッシュボード", customDashboard_subtitle: "このビューの変更とサイドバーに新しいページを追加する方法", roleBasedAccess_title: "ロールベースのアクセス制御", roleBasedAccess_subtitle: "AdminJSでユーザーロールとアクセス権を作成する方法", community_title: "Discordコミュニティに参加", community_subtitle: "AdminJSのクリエーターおよび他のAdminJSユーザーとの会話", foundBug_title: "バグを見つけましたか?改善が必要ですか?", foundBug_subtitle: "GitHubリポジトリで問題を提起してください", needMoreSolutions_title: "より高度なソリューションが必要ですか?", needMoreSolutions_subtitle: "美しいUX/UIデザインと、AdminJSをベースにした(だけでない)ソフトウェアを提供します", invalidCredentials: "間違ったメールアドレスと/またはパスワード", keyPlaceholder: "キー", valuePlaceholder: "値", initialKey: "キー-{{number}}", keyInUse: "オブジェクトキーは一意でなければなりません", keyValuePropertyDefaultDescription: "すべての値はテキストとして保存されます。キーは一意でなければならず、重複するキーは保存されません。", pageNotFound_title: "ページが見つかりません", pageNotFound_subtitle: "ページ <strong>\"{{pageName}}\"</strong> は存在しません", componentNotFound_title: "指定されたコンポーネントがありません", componentNotFound_subtitle: "この要素をレンダリングするコンポーネントを指定する必要があります" }; var jaLocale = { actions: actions$4, buttons: buttons$4, components: components$4, labels: labels$4, properties: properties$4, resources: resources$4, messages: messages$4 }; var actions$3 = { "new": "Nowy", edit: "Edycja", show: "Podgląd", "delete": "Usuń", bulkDelete: "Usuń wszystko", list: "Lista" }; var buttons$3 = { save: "Zapisz", addNewItem: "Nowy", filter: "Filtry", filterActive: "Filtry ({{count}})", applyChanges: "Zastosuj zmiany", resetFilter: "Wyczyść", confirmRemovalMany: "Potwierdź usunięcie {{count}} pozycji", confirmRemovalMany_plural: "Potwierdź usunięcie {{count}} pozycji", logout: "Wyloguj", login: "Zaloguj", seeTheDocumentation: "Zajrzyj: <1>do dokumentacji</1>", createFirstRecord: "Utwórz pierwszy rekord", cancel: "Anuluj", confirm: "Potwierdź" }; var labels$3 = { navigation: "Nawigacja", pages: "Strony", selectedRecords: "Wybrano ({{selected}})", filters: "Filtry", adminVersion: "Admin: {{version}}", appVersion: "Aplikacja: {{version}}" }; var properties$3 = { length: "Długość", from: "Od", to: "Do" }; var components$3 = { DropZone: { placeholder: "Przeciągnij plik tutaj lub kliknij aby wybrać", acceptedSize: "Maks. rozmiar: {{maxSize}}", acceptedType: "Dozwolone pliki: {{mimeTypes}}", unsupportedSize: "Plik {{fileName}} jest zbyt duży", unsupportedType: "Plik {{fileName}} jest niedozwolonego typu: {{fileType}}" }, LanguageSelector: { availableLanguages: { de: "Niemiecki", en: "Angielski", es: "Hiszpański", it: "Włoski", ja: "Japoński", pl: "Polski", "pt-BR": "Portugalski (Brazylia)", ua: "Ukraiński", "zh-CN": "chiński" } }, Login: { welcomeHeader: "Witaj", welcomeMessage: "AdminJS - najlepszy admin framework dla aplikacji Node.js, oparty na React.", properties: { email: "Email", password: "Hasło" }, loginButton: "Zaloguj" } }; var resources$3 = { }; var messages$3 = { successfullyBulkDeleted: "Poprawnie usunięto {{count}} rekordów", successfullyBulkDeleted_plural: "Poprawnie usunięto {{count}} rekordów", successfullyDeleted: "Poprawnie usunięto wybrany rekord", successfullyUpdated: "Poprawnie zaktualizowano wybrany rekord", thereWereValidationErrors: "Błędy walidacji - sprawdź poniżej", forbiddenError: "Nie masz uprawnień do akcji {{actionName}} na {{resourceId}}", anyForbiddenError: "Nie masz uprawnień tej akcji.", successfullyCreated: "Poprawnie utworzono nowy rekord", bulkDeleteError: "Wystąpiły błędy podczas usuwania rekordów. Przejrzyj wpisy w konsoli aby zobaczyć szczegóły.", errorFetchingRecords: "Wystąpiły błędy podczas pobierania danych. Przejrzyj wpisy w konsoli aby zobaczyć szczegóły.", errorFetchingRecord: "Wystąpiły błędy podczas pobierania rekordu. Przejrzyj wpisy w konsoli aby zobaczyć szczegóły.", noRecordsSelected: "NIe zostały wybrane żadne rekordy.", theseRecordsWillBeRemoved: "Wybrany rekord zostanie usunięty.", theseRecordsWillBeRemoved_plural: "Wybrane rekordy zostanią usunięte.", pickSomeFirstToRemove: "Aby usunąć rekordy należy je najpierw wybrać", error404Resource: "Nie można znaleźć zasobu o id: {{resourceId}}", error404Action: "Do zasobu o id: {{resourceId}} nie została przypisana akcja {{actionName}} lub nie masz uprawnień do jej użycia.", error404Record: "Zasób o id: {{resourceId}} nie zaiera rekordu o id: {{recordId}} lub nie masz do niego dostępu.", seeConsoleForMore: "Przejrzyj zapisy w konsoli aby zobaczyć więcej szczególów ...", noActionComponent: "Musisz zaiplementować komponent dla twojej akcji.", noRecordsInResource: "Ten zasób nie posiada rekordów.", noRecords: "Brak danych.", confirmDelete: "Czy potwierdzasz usunięcie tej pozycji?", welcomeOnBoard_title: "Witamy na pokładzie!", welcomeOnBoard_subtitle: "Od teraz jesteś jednym z nas! Przygotowaliśmy dla Ciebie kilka wskazówek:", addingResources_title: "Dodawanie zasobów", addingResources_subtitle: "Jak dodać nowe zasoby do menu bocznego", customizeResources_title: "Indywidualne zasoby", customizeResources_subtitle: "Definiowanie sposobu zachowania, dodawanie właściwości i więcej...", customizeActions_title: "Indywidualne akcje", customizeActions_subtitle: "Modyfikowanie istniejących akcji i tworzenie nowych", writeOwnComponents_title: "Tworzenie nowych komponentów", writeOwnComponents_subtitle: "Jak zmodyfikować wygląd i zachowanie AdminJS?", customDashboard_title: "Indywidualny panel sterowania", customDashboard_subtitle: "Jak zmodyfikować widok i dodać nowe strony do panelu bocznego", roleBasedAccess_title: "Kontrola dostępu oparta o role", roleBasedAccess_subtitle: "Tworzenie roli użytkownika i uprawnień w AdminJS", community_title: "Dołącz do zespołu na Discord", community_subtitle: "Wymieniaj informacje z twórcami AdminJS i innymi użytkownikami.", foundBug_title: "Znalazłeś błąd? Potrzebujesz nowych funkcji?", foundBug_subtitle: "Zgłoś problem w repozytoriun GitHub.", needMoreSolutions_title: "Szukasz innych rozwiązań?", needMoreSolutions_subtitle: "Jesteśmy tutaj, aby dostarczyć Ci wpaniały projekt UX/UI i dostosować do Twoich potrzeb panel AdminJS", invalidCredentials: "Błędny email i/lub hasło", pageNotFound_title: "Strona nie znaleziona", pageNotFound_subtitle: "Strona <strong>\"{{pageName}}\"</strong> nie istnieje", componentNotFound_title: "Nie określono komponentu", componentNotFound_subtitle: "Musisz określić komponent, który wyrenderuje ten element" }; var plLocale = { actions: actions$3, buttons: buttons$3, labels: labels$3, properties: properties$3, components: components$3, resources: resources$3, messages: messages$3 }; var actions$2 = { "new": "Criar novo(a)", edit: "Editar", show: "Exibir", "delete": "Excluir", bulkDelete: "Excluir tudo", list: "Listar" }; var buttons$2 = { save: "Salvar", addNewItem: "Adicionar Novo Item", filter: "Filtrar", filterActive: "Filtrar ({{count}})", applyChanges: "Aplicar mudanças", resetFilter: "Redefinir", confirmRemovalMany: "Confirma a remoção de {{count}} registro", confirmRemovalMany_plural: "Confirma a remoção de {{count}} registros", logout: "Sair", login: "Entrar", seeTheDocumentation: "Ver: <1>a documentação</1>", createFirstRecord: "Criar Primeiro Registro" }; var components$2 = { DropZone: { placeholder: "Solte seu arquivo aqui ou clique para navegar", acceptedSize: "Tamanho máximo: {{maxSize}}", acceptedType: "Suporta: {{mimeTypes}}", unsupportedSize: "O arquivo {{fileName}} é muito grande", unsupportedType: "O arquivo {{fileName}} tem um tipo não compatível: {{fileType}}" }, LanguageSelector: { availableLanguages: { de: "Alemão", en: "Inglês", es: "Espanhol", it: "Italiano", ja: "Japonês", pl: "Polonês", "pt-BR": "Português (Brasil)", ua: "Ucraniano", "zh-CN": "Chinês" } }, Login: { welcomeHeader: "Bem-vindo", welcomeMessage: "Ao AdminJS - o melhor framework admin para aplicações Node.js, baseado em React.", properties: { email: "Email", password: "Senha" }, loginButton: "Login" } }; var labels$2 = { navigation: "Navegação", pages: "Páginas", selectedRecords: "Selecionado ({{selected}})", filters: "Filtros", adminVersion: "Admin: {{version}}", appVersion: "App: {{version}}", dashboard: "Dashboard" }; var properties$2 = { length: "Tamanho", from: "De", to: "Até" }; var resources$2 = { }; var messages$2 = { successfullyBulkDeleted: "{{count}} registro removido com sucesso", successfullyBulkDeleted_plural: "{{count}} registros removidos com sucesso", successfullyDeleted: "Registro excluído com sucesso", successfullyUpdated: "Registro atualizado com sucesso", thereWereValidationErrors: "Existem erros de validação - confira-os abaixo", forbiddenError: "Você não pode executar a ação {{actionName}} em {{resourceId}}", anyForbiddenError: "Você não pode executar a ação solicitada", successfullyCreated: "Novo registro criado com sucesso", bulkDeleteError: "Houve um erro ao excluir os registros. Verifique os logs para mais informações", errorFetchingRecords: "Houve um erro ao obter os registros. Verifique os logs para mais informações", errorFetchingRecord: "Houve um erro ao obter o registro, Verifique os logs para mais informações", noRecordsSelected: "Você não selecionou nenhum registro", theseRecordsWillBeRemoved: "O registro a seguir será excluído", theseRecordsWillBeRemoved_plural: "Os registros a seguir serão excluídos", pickSomeFirstToRemove: "Para remover registros você precisa selecioná-los primeiro", error404Resource: "Recurso indentificado pelo id: {{resourceId}} não pôde ser encontrado", error404Action: "Recurso indentificado pelo id: {{resourceId}} não possui uma ação com nome: {{actionName}} ou você não está autorizado a usá-la!", error404Record: "Recurso indentificado pelo id: {{resourceId}} não possui um registro com id: {{recordId}} ou você não está autorizado a acessá-lo!", seeConsoleForMore: "Veja o console de desenvolvimento para mais detalhes...", noActionComponent: "Você precisa implementar componente de ação para a sua Ação", noRecordsInResource: "Não existem registros neste recurso", noRecords: "Nenhum registro", confirmDelete: "Você tem certeza que deseja remover este item? Essa ação é irreversível", welcomeOnBoard_title: "Bem-vindo à bordo!", welcomeOnBoard_subtitle: "Agora você é um de nós! Preparamos algumas dicas para você começar:", addingResources_title: "Adicionando Recursos", addingResources_subtitle: "Como adicionar novos recursos à barra lateral", customizeResources_title: "Personalizar Recursos", customizeResources_subtitle: "Definindo comportamento, adicionando propriedades e mais...", customizeActions_title: "Personalizar Ações", customizeActions_subtitle: "Modificar ações existentes e adicionar novas", writeOwnComponents_title: "Escrever Componentes", writeOwnComponents_subtitle: "Como modificar o visual do AdminJS", customDashboard_title: "Dashboard Personalizado", customDashboard_subtitle: "Como modificar esta página e adicionar novas páginas à barra lateral", roleBasedAccess_title: "Controle de Acesso Baseado em Perfil", roleBasedAccess_subtitle: "Criar perfis de usuário e permissões no AdminJS", community_title: "Junte-se à comunidade Discord", community_subtitle: "Fale com os criadores do AdminJS e outros usuários do AdminJS", foundBug_title: "Encontrou um Bug? Precisa de alguma melhoria?", foundBug_subtitle: "Levante um issue em nosso repositório no GitHub", needMoreSolutions_title: "Precisa de mais soluções avançadas?", needMoreSolutions_subtitle: "Estamos aqui para te entregar um belo desenho de UX/UI e software feito sob medida baseado (não apenas) no AdminJS", invalidCredentials: "Nome de usuário e/ou senha incorretos", pageNotFound_title: "Página não encontrada", pageNotFound_subtitle: "Página <strong>\"{{pageName}}\"</strong> não existe", componentNotFound_title: "Nenhum componente especificado", componentNotFound_subtitle: "Você tem que especificar o componente que renderizará este elemento" }; var ptBrLocale = { actions: actions$2, buttons: buttons$2, components: components$2, labels: labels$2, properties: properties$2, resources: resources$2, messages: messages$2 }; var actions$1 = { "new": "Створити новий", edit: "Редагувати", show: "Показати", "delete": "Видалити", bulkDelete: "Видалити всі", list: "Список" }; var buttons$1 = { save: "Зберегти", addNewItem: "Додати новий елемент", filter: "Фільтр", filterActive: "Фільтр ({{count}})", applyChanges: "Застосувати зміни", resetFilter: "Очистити фільтри", confirmRemovalMany: "Підтвердити видалення {{count}} запису", confirmRemovalMany_plural: "Підтвердити видалення {{count}} записів", logout: "Вийти", login: "Увійти", seeTheDocumentation: "Дивіться: <1>документація</1>", createFirstRecord: "Створити перший запис", contactUs: "Зв'язатися з нами", cancel: "Cкасувати", confirm: "Підтвердити" }; var components$1 = { DropZone: { placeholder: "Перетягніть свій файл сюди або натисніть, щоб переглянути", acceptedSize: "Максимальний розмір: {{maxSize}}", acceptedType: "Підтримує: {{mimeTypes}}", unsupportedSize: "Файл {{fileName}} завеликий", unsupportedType: "Тип файлу {{fileName}} не підтримується: {{fileType}}" }, LanguageSelector: { availableLanguages: { de: "Німецький", en: "англійська", es: "Іспанська", it: "італійська", ja: "японський", pl: "польський", "pt-BR": "португальська (Бразилія)", ua: "українська", "zh-CN": "китайський" } }, Login: { welcomeHeader: "Ласкаво просимо", welcomeMessage: "до AdminJS - провідної адміністраційної панелі з відкритим кодом для програм Node.js, яка дозволяє керувати всіма своїми даними в одному місці", properties: { email: "Електронна пошта", password: "Пароль" }, loginButton: "Увійдіть в систему" } }; var labels$1 = { navigation: "Навігація", pages: "Сторінки", selectedRecords: "Вибрано ({{selected}})", filters: "Фільтри", adminVersion: "Версія AdminJS: {{version}}", appVersion: "Версія додатку: {{version}}", dashboard: "Панель приладів" }; var properties$1 = { length: "Довжина", from: "Від", to: "До", email: "Електронна пошта", password: "Пароль" }; var resources$1 = { }; var messages$1 = { successfullyBulkDeleted: "Успішно видалено {{count}} запис", successfullyBulkDeleted_plural: "Успішно видалено {{count}} записів", successfullyDeleted: "Успішно видалено вибраний запис", successfullyUpdated: "Успішно оновлено вибраний запис", thereWereValidationErrors: "Є помилки валідації – перегляньте їх нижче", forbiddenError: "Ви не можете виконувати дії {{actionName}} на {{resourceId}}", anyForbiddenError: "Ви не можете виконати задану дію", successfullyCreated: "Успішно створено новий запис", bulkDeleteError: "Під час видалення записів сталася помилка. Перейдіть до консолі, щоб переглянути додаткову інформацію", errorFetchingRecords: "Під час отримання записів сталася помилка. Перейдіть до консолі, щоб переглянути додаткову інформацію", errorFetchingRecord: "Під час отримання запису сталася помилка. Перейдіть до консолі, щоб переглянути додаткову інформацію", noRecordsSelected: "Ви не вибрали жодного запису", theseRecordsWillBeRemoved: "Наступний запис буде видалено", theseRecordsWillBeRemoved_plural: "Наступні записи буде видалено", pickSomeFirstToRemove: "Щоб видалити записи, спочатку їх потрібно вибрати", error404Resource: "Ресурс із зазначеним ID: {{resourceId}} не знайдено", error404Action: "Ресурс із зазначеним ID: {{resourceId}} не має дії з назвою: {{actionName}} або Ви не маєте права використовувати його!", error404Record: "Ресурс із зазначеним ID: {{resourceId}} не має запису з ID: {{recordId}} або Ви не маєте права використовувати його!", seeConsoleForMore: "Дивіться консоль розробки, щоб дізнатися більше...", noActionComponent: "Ви повинні заімплементувати ActionComponent для своєї дії", noRecordsInResource: "У цьому ресурсі немає записів", noRecords: "Немає записів", confirmDelete: "Ви дійсно хочете видалити цей елемент?", welcomeOnBoard_title: "Ласкаво просимо на борт!", welcomeOnBoard_subtitle: "Тепер Ви один із нас! Ми підготували для Вас кілька порад для початку:", addingResources_title: "Додавання ресурсів", addingResources_subtitle: "Як додати нові ресурси до бічної панелі", customizeResources_title: "Налаштування ресурсів", customizeResources_subtitle: "Визначення поведінки, додавання властивостей тощо...", customizeActions_title: "Налаштування дій", customizeActions_subtitle: "Змінення існуючих дій і додавання нових", writeOwnComponents_title: "Написання компонентів", writeOwnComponents_subtitle: "Як змінити зовнішній вигляд AdminJS", customDashboard_title: "Панелі приладів", customDashboard_subtitle: "Як змінити цей екран та додати нові сторінки на бічній панелі»", roleBasedAccess_title: "Контроль доступу на основі ролей", roleBasedAccess_subtitle: "Створюйте ролі та дозволи користувачів у AdminJS", community_title: "Приєднуйтесь до нашої спільноти на Discord'y", community_subtitle: "Розмовляйте з розробниками та іншими користувачами AdminJS", foundBug_title: "Знайшли помилку? Потребуєте покращення?", foundBug_subtitle: "Опишіть проблему у нашому репозиторії GitHub", needMoreSolutions_title: "Потрібні більш просунуті рішення?", needMoreSolutions_subtitle: "Ми тут, щоб допомогти Вам з UX/UI дизайном та розробленням програмного забезпечення на основі (та не тільки) AdminJS", invalidCredentials: "Неправильна адреса електронної пошти та/або пароль", pageNotFound_title: "Сторінку не знайдено", pageNotFound_subtitle: "Сторінка <strong>\"{{pageName}}\"</strong> не існує", componentNotFound_title: "Компонент не вказано", componentNotFound_subtitle: "Ви повинні вказати компонент, який буде рендерити цей елемент" }; var uaLocale = { actions: actions$1, buttons: buttons$1, components: components$1, labels: labels$1, properties: properties$1, resources: resources$1, messages: messages$1 }; var actions = { "new": "创建", edit: "编辑", show: "显示", "delete": "删除", bulkDelete: "删除所有", list: "列表" }; var buttons = { save: "保存", addNewItem: "添加新的项目", filter: "筛选", filterActive: "筛选 ({{count}})", applyChanges: "应用更改", resetFilter: "重置筛选器", confirmRemovalMany: "确认删除 {{count}} 个记录", confirmRemovalMany_plural: "确认删除 {{count}} 个记录", logout: "登出", login: "登陆", seeTheDocumentation: "参见: <1>文档</1>", createFirstRecord: "创建第一个记录" }; var labels = { navigation: "导航", pages: "页面", selectedRecords: "已选中 ({{selected}})", filters: "筛选器", adminVersion: "Admin: {{version}}", appVersion: "App: {{version}}", dashboard: "仪表板" }; var components = { LanguageSelector: { availableLanguages: { de: "德语", en: "英语", es: "西班牙语", it: "意大利语", ja: "日语", pl: "抛光", "pt-BR": "葡萄牙语(巴西)", ua: "乌克兰", "zh-CN": "中国人" } }, Login: { welcomeHeader: "欢迎", welcomeMessage: "到 AdminJS – 世界领先的开源自动生成管理面板, 可用于你的 Node.js 应用程序, 以将所有数据汇于一处管理", properties: { email: "电子邮件", password: "密码" }, loginButton: "登录" } }; var properties = { length: "长度", from: "从", to: "到" }; var resources = { }; var messages = { successfullyBulkDeleted: "成功移除了 {{count}} 条记录", successfullyBulkDeleted_plural: "成功移除了 {{count}} 条记录", successfullyDeleted: "成功删除所选记录", successfullyUpdated: "成功更新所选记录", thereWereValidationErrors: "存在验证错误 - 见下方", forbiddenError: "你不能在 {{resourceId}} 上使用 {{actionName}}", anyForbiddenError: "你不能进行给定的操作", successfullyCreated: "成功创建了新纪录", bulkDeleteError: "删除记录时遇到错误, 检查控制台以获得更多信息", errorFetchingRecords: "获取记录时遇到错误, 检查控制台以获得更多信息", errorFetchingRecord: "获取记录时遇到错误, 检查控制台以获得更多信息", noRecordsSelected: "尚未选择任何记录", theseRecordsWillBeRemoved: "下面的记录将被删除", theseRecordsWillBeRemoved_plural: "下面的记录将被删除", pickSomeFirstToRemove: "若要删除记录, 需要先选出待删除的项目", error404Resource: "找不到具有 id: {{resourceId}} 的资源", error404Action: "具有 id: {{resourceId}} 的资源没有名为 {{actionName}} 的操作, 或你未被授权使用此操作!", error404Record: "具有 id: {{resourceId}} 的资源中没有具有 id: {{recordId}} 的记录, 或你未被授权使用此记录!", seeConsoleForMore: "检查开发控制台以获得更多信息...", noActionComponent: "你必须为你的操作实现操作组件", noRecordsInResource: "此资源中没有记录", noRecords: "没有记录", confirmDelete: "你真的想移除此项吗?", welcomeOnBoard_title: "欢迎使用!", welcomeOnBoard_subtitle: "现在你是我们的一员了! 我们为你准备了一些小贴士,供您使用。", addingResources_title: "添加资源", addingResources_subtitle: "如何向侧边栏添加资源", customizeResources_title: "自定义资源", customizeResources_subtitle: "定义行为、添加属性等...", customizeActions_title: "自定义操作", customizeActions_subtitle: "编辑已有的操作或添加新的操作", writeOwnComponents_title: "编写组件", writeOwnComponents_subtitle: "如何修改 AdminJS 的外观", customDashboard_title: "自定义仪表板", customDashboard_subtitle: "如何修改此视图、并在侧边栏添加新页面", roleBasedAccess_title: "基于角色的访问控制", roleBasedAccess_subtitle: "在 AdminJS 中创建用户角色和权限", community_title: "加入 Discord 社群", community_subtitle: "与 AdminJS 的开发者以及其他 AdminJS 用户交流", foundBug_title: "发现 Bug? 需要改进?", foundBug_subtitle: "在 GitHub 仓库提交 issue", needMoreSolutions_title: "需要更多高级解决方案?", needMoreSolutions_subtitle: "我们已经准备好为您提供优美的 UX/UI 设计, 并量身定制基于 AdminJS 等的软件", invalidCredentials: "错误的电子邮箱或密码", pageNotFound_title: "找不到网页", pageNotFound_subtitle: "页 <strong>“{{pageName}}“</strong> 不存在", componentNotFound_title: "未指定组件", componentNotFound_subtitle: "您必须指定将呈现此元素的组件" }; var zhCNLocale = { actions: actions, buttons: buttons, labels: labels, components: components, properties: properties, resources: resources, messages: messages }; const DEFAULT_LOAD = 'currentOnly'; const DEFAULT_NS = 'translation'; const defaultConfig = { debug: "development" === 'development', partialBundledLanguages: true, interpolation: { escapeValue: false }, ns: [DEFAULT_NS], defaultNS: DEFAULT_NS, fallbackNS: DEFAULT_NS, load: DEFAULT_LOAD, react: { useSuspense: false }, resources: {}, parseMissingKeyHandler: (key, defaultValue) => defaultValue ?? startCase$1(key), get initImmediate() { return typeof window !== 'undefined'; } }; const locales = { de: deLocale, en: enLocale, es: esLocale, it: itLocale, ja: jaLocale, pl: plLocale, 'pt-BR': ptBrLocale, ua: uaLocale, 'zh-CN': zhCNLocale }; const api$1 = new ApiClient(); const RecordAction = () => { const [record, setRecord] = React$1.useState(); const [loading, setLoading] = React$1.useState(true); const [tag, setTag] = React$1.useState(''); const [filterVisible, setFilterVisible] = React$1.useState(false); const params = reactRouter.useParams(); const addNotice = useNotice(); const { actionName, recordId, resourceId } = params; const resource = useResource(resourceId); const action = record && record.recordActions.find(r => r.name === actionName); const actionFromResource = resource?.actions.find(a => a.name === actionName); const listActionName = 'list'; const listAction = resource?.resourceActions.find(r => r.name === listActionName); const fetchRecord = () => { // Do not call API on route enter if the action doesn't have a component if (actionFromResource && actionHasDisabledComponent(actionFromResource)) { setLoading(false); return; } setLoading(true); api$1.recordAction(params).then(response => { if (response.data.notice && response.data.notice.type === 'error') { addNotice(response.data.notice); } if (!response.data.record?.baseError?.type || ![ErrorTypeEnum.App, ErrorTypeEnum.NotFound, ErrorTypeEnum.Forbidden].includes(response.data.record?.baseError?.type)) { setRecord(response.data.record); } }).catch(error => { addNotice({ message: 'errorFetchingRecord', type: 'error', resourceId }); throw error; }).finally(() => { setLoading(false); }); }; React$1.useEffect(() => { fetchRecord(); }, [actionName, recordId, resourceId]); const handleActionPerformed = React$1.useCallback((oldRecord, response) => { if (response.record) { setRecord(mergeRecordResponse(oldRecord, response)); } else { fetchRecord(); } }, [fetchRecord]); if (!resource) { return /*#__PURE__*/React__default$1.default.createElement(NoResourceError, { resourceId: resourceId }); } // When the user visits this route (record action) from a different, than the current one, record. // It renders everything with a new resource. The old record remains until useEffect fetches data // from the API. that is why we have to check if the current record has correct record.id. // Alternative approach would be to setRecord(undefined) before the fetch, but it is async and // we cannot be sure that the component wont be rendered (it will be at least once) with the // wrong data. const hasDifferentRecord = record && record.id && record.id.toString() !== recordId; if (loading || hasDifferentRecord) { return actionFromResource?.showInDrawer ? /*#__PURE__*/React__default$1.default.createElement(DrawerPortal, null, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Loader, null)) : /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Loader, null); } if (!action || actionFromResource && actionHasDisabledComponent(actionFromResource)) { return /*#__PURE__*/React__default$1.default.createElement(NoActionError, { resourceId: resourceId, actionName: actionName }); } if (!record) { return /*#__PURE__*/React__default$1.default.createElement(NoRecordError, { resourceId: resourceId, recordId: recordId }); } const routeWrapperCss = getDataCss(resource.id, action.actionType, action.name, 'route-wrapper'); const routeActionCss = getDataCss(resource.id, action.actionType, action.name, 'route'); if (action.showInDrawer) { if (!listAction) { return /*#__PURE__*/React__default$1.default.createElement(DrawerPortal, { width: action.containerWidth, "data-css": routeActionCss }, /*#__PURE__*/React__default$1.default.createElement(BaseActionComponent, { action: action, resource: resource, record: record })); } const toggleFilter = listAction.showFilter ? () => setFilterVisible(!filterVisible) : undefined; return /*#__PURE__*/React__default$1.default.createElement(React__default$1.default.Fragment, null, /*#__PURE__*/React__default$1.default.createElement(DrawerPortal, { width: action.containerWidth, "data-css": routeActionCss }, /*#__PURE__*/React__default$1.default.createElement(BaseActionComponent, { action: action, resource: resource, record: record })), /*#__PURE__*/React__default$1.default.createElement(Wrapper$2, { width: listAction.containerWidth, "data-css": routeWrapperCss }, /*#__PURE__*/React__default$1.default.createElement(OverridableActionHeader, { resource: resource, action: listAction, tag: tag, toggleFilter: toggleFilter }), /*#__PURE__*/React__default$1.default.createElement(BaseActionComponent, { action: listAction, resource: resource, setTag: setTag }))); } return /*#__PURE__*/React__default$1.default.createElement(Wrapper$2, { width: action.containerWidth, "data-css": routeWrapperCss }, /*#__PURE__*/React__default$1.default.createElement(OverridableActionHeader, { resource: resource, action: action, record: record, actionPerformed: response => handleActionPerformed(record, response) }), /*#__PURE__*/React__default$1.default.createElement(BaseActionComponent, { action: action, resource: resource, record: record })); }; var RecordActionRoute = allowOverride(RecordAction, 'RecordActionRoute'); const ResourceAction$1 = props => { const params = reactRouter.useParams(); const { resources } = props; const { resourceId, actionName } = params; const [tag, setTag] = React$1.useState(''); const [filterVisible, setFilterVisible] = React$1.useState(false); const resource = resources.find(r => r.id === resourceId); if (!resource) { return /*#__PURE__*/React__default$1.default.createElement(NoResourceError, { resourceId: resourceId }); } const action = resource.resourceActions.find(r => r.name === actionName); if (!action || actionHasDisabledComponent(action)) { return /*#__PURE__*/React__default$1.default.createElement(NoActionError, { resourceId: resourceId, actionName: actionName }); } const listActionName = 'list'; const listAction = resource.resourceActions.find(r => r.name === listActionName); const contentTag = getResourceElementCss(resource.id, action.name); const routeActionCss = getDataCss(resource.id, action.actionType, action.name, 'route'); if (action.showInDrawer) { if (!listAction) { return /*#__PURE__*/React__default$1.default.createElement(DrawerPortal, { width: action.containerWidth, "data-css": routeActionCss }, /*#__PURE__*/React__default$1.default.createElement(BaseActionComponent, { action: action, resource: resource })); } const toggleFilter = listAction.showFilter ? () => setFilterVisible(!filterVisible) : undefined; return /*#__PURE__*/React__default$1.default.createElement(React__default$1.default.Fragment, null, /*#__PURE__*/React__default$1.default.createElement(DrawerPortal, { width: action.containerWidth, "data-css": routeActionCss }, /*#__PURE__*/React__default$1.default.createElement(BaseActionComponent, { action: action, resource: resource, setTag: setTag })), /*#__PURE__*/React__default$1.default.createElement(Wrapper$2, { width: listAction.containerWidth, "data-css": contentTag }, /*#__PURE__*/React__default$1.default.createElement(OverridableActionHeader, { resource: resource, action: listAction, tag: tag, toggleFilter: toggleFilter }), /*#__PURE__*/React__default$1.default.createElement(BaseActionComponent, { action: listAction, resource: resource, setTag: setTag }))); } return /*#__PURE__*/React__default$1.default.createElement(Wrapper$2, { width: action.containerWidth, showFilter: action.showFilter, "data-css": contentTag }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flex: true, flexDirection: "column", flexGrow: 1 }, /*#__PURE__*/React__default$1.default.createElement(OverridableActionHeader, { resource: resource, action: action, toggleFilter: action.showFilter, tag: tag }), /*#__PURE__*/React__default$1.default.createElement(BaseActionComponent, { action: action, resource: resource, setTag: setTag })), action.showFilter && /*#__PURE__*/React__default$1.default.createElement(OverridableFilterDrawer, { resource: resource })); }; const mapStateToProps$1 = state => ({ resources: state.resources }); var ResourceActionRoute = allowOverride(require$$3.connect(mapStateToProps$1)(ResourceAction$1), 'ResourceActionRoute'); const api = new ApiClient(); const BulkAction = () => { const params = reactRouter.useParams(); const [records, setRecords] = React$1.useState([]); const [loading, setLoading] = React$1.useState(false); const [tag, setTag] = React$1.useState(''); const [filterVisible, setFilterVisible] = React$1.useState(false); const { translateMessage } = useTranslation(); const addNotice = useNotice(); const location = reactRouter.useLocation(); const { resourceId, actionName } = params; const resource = useResource(resourceId); const listActionName = 'list'; const listAction = resource?.resourceActions.find(r => r.name === listActionName); const fetchRecords = () => { const recordIdsString = new URLSearchParams(location.search).get('recordIds'); const recordIds = recordIdsString ? recordIdsString.split(',') : []; setLoading(true); return api.bulkAction({ resourceId: resourceId, recordIds, actionName: actionName }).then(response => { setLoading(false); setRecords(response.data.records); }).catch(error => { setLoading(false); addNotice({ message: 'errorFetchingRecords', type: 'error', resourceId }); throw error; }); }; React$1.useEffect(() => { fetchRecords(); }, [params.resourceId, params.actionName, location.search]); if (!resource) { return /*#__PURE__*/React__default$1.default.createElement(NoResourceError, { resourceId: resourceId }); } if (!records && !loading) { return /*#__PURE__*/React__default$1.default.createElement(ErrorMessageBox, { title: "No records" }, /*#__PURE__*/React__default$1.default.createElement("p", null, translateMessage('noRecordsSelected', resourceId))); } const action = getBulkActionsFromRecords(records || []).find(r => r.name === actionName); if (loading) { const actionFromResource = resource.actions.find(r => r.name === actionName); return actionFromResource?.showInDrawer ? /*#__PURE__*/React__default$1.default.createElement(DrawerPortal, null, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Loader, null)) : /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Loader, null); } if (!action) { return /*#__PURE__*/React__default$1.default.createElement(NoActionError, { resourceId: resourceId, actionName: actionName }); } const routeWrapperCss = getDataCss(resource.id, action.actionType, action.name, 'route-wrapper'); const routeActionCss = getDataCss(resource.id, action.actionType, action.name, 'route'); if (action.showInDrawer) { if (!listAction) { return /*#__PURE__*/React__default$1.default.createElement(DrawerPortal, { width: action.containerWidth, "data-css": routeActionCss }, /*#__PURE__*/React__default$1.default.createElement(BaseActionComponent, { action: action, resource: resource, records: records })); } const toggleFilter = listAction.showFilter ? () => setFilterVisible(!filterVisible) : undefined; return /*#__PURE__*/React__default$1.default.createElement(React__default$1.default.Fragment, null, /*#__PURE__*/React__default$1.default.createElement(DrawerPortal, { width: action.containerWidth, "data-css": routeActionCss }, /*#__PURE__*/React__default$1.default.createElement(BaseActionComponent, { action: action, resource: resource, records: records, setTag: setTag })), /*#__PURE__*/React__default$1.default.createElement(Wrapper$2, { width: listAction.containerWidth, "data-css": routeWrapperCss }, /*#__PURE__*/React__default$1.default.createElement(OverridableActionHeader, { resource: resource, action: listAction, tag: tag, toggleFilter: toggleFilter }), /*#__PURE__*/React__default$1.default.createElement(BaseActionComponent, { action: listAction, resource: resource, setTag: setTag }))); } return /*#__PURE__*/React__default$1.default.createElement(Wrapper$2, { width: action.containerWidth, "data-css": routeWrapperCss }, !action?.showInDrawer ? /*#__PURE__*/React__default$1.default.createElement(OverridableActionHeader, { resource: resource, action: action, tag: tag }) : '', /*#__PURE__*/React__default$1.default.createElement(BaseActionComponent, { action: action, resource: resource, records: records, setTag: setTag })); }; var BulkActionRoute = allowOverride(BulkAction, 'BulkActionRoute'); const Page = () => { const pages = require$$3.useSelector(state => state.pages); const params = reactRouter.useParams(); const { pageName } = params; const { tm } = useTranslation(); const currentPage = React$1.useMemo(() => pages.find(({ name }) => name === pageName), [pages, pageName]); if (!currentPage) { return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.InfoBox, { title: tm('pageNotFound_title'), illustration: "NotFound" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, { mb: "xxl" }, /*#__PURE__*/React__default$1.default.createElement(Trans, { i18nKey: "messages.pageNotFound_subtitle", values: { pageName }, components: { strong: /*#__PURE__*/React__default$1.default.createElement("strong", null) } }))); } const Component = AdminJS.UserComponents[currentPage.component]; if (!Component) { return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.InfoBox, { title: tm('componentNotFound_title'), illustration: "Beware" }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Text, { mb: "xxl" }, /*#__PURE__*/React__default$1.default.createElement(Trans, { i18nKey: "messages.componentNotFound_subtitle" }))); } return /*#__PURE__*/React__default$1.default.createElement(ErrorBoundary$1, null, /*#__PURE__*/React__default$1.default.createElement(Component, null)); }; var PageRoute = allowOverride(withNoSSR(Page), 'PageRoute'); const getAction = resource => { const h = new ViewHelpers(); const resourceId = ':resourceId'; const actionName = ':actionName'; const recordId = ':recordId'; const recordActionUrl = h.recordActionUrl({ resourceId, recordId, actionName }); const resourceActionUrl = h.resourceActionUrl({ resourceId, actionName }); const bulkActionUrl = h.bulkActionUrl({ resourceId, actionName }); const resourceActionMatch = reactRouter.useMatch(resourceActionUrl); const recordActionMatch = reactRouter.useMatch(recordActionUrl); const bulkActionMatch = reactRouter.useMatch(bulkActionUrl); const action = resourceActionMatch?.params.actionName || recordActionMatch?.params.actionName || bulkActionMatch?.params.actionName; return action ? resource.actions.find(a => a.name === action) : undefined; }; const ResourceAction = props => { const params = reactRouter.useParams(); const { resources } = props; const { resourceId } = params; const [tag, setTag] = React$1.useState(''); if (!resourceId) { return null; } const resource = resources.find(r => r.id === resourceId); if (!resource) { return /*#__PURE__*/React__default$1.default.createElement(NoResourceError, { resourceId: resourceId }); } const realEndAction = getAction(resource); if (realEndAction && !realEndAction.showInDrawer) { return null; } const listActionName = 'list'; const listAction = resource.resourceActions.find(r => r.name === listActionName); if (!listAction) { return /*#__PURE__*/React__default$1.default.createElement(NoActionError, { resourceId: resourceId, actionName: listActionName }); } const contentTag = getResourceElementCss(resource.id, 'list'); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flex: true, variant: "transparent", alignItems: "start", width: listAction.containerWidth, mx: "auto", style: { gap: 16 }, height: "100%", "data-css": contentTag }, /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flex: true, flexDirection: "column", flexGrow: 1 }, /*#__PURE__*/React__default$1.default.createElement(OverridableActionHeader, { resource: resource, action: listAction, tag: tag, toggleFilter: listAction.showFilter }), /*#__PURE__*/React__default$1.default.createElement(BaseActionComponent, { action: listAction, resource: resource, setTag: setTag })), listAction.showFilter && /*#__PURE__*/React__default$1.default.createElement(OverridableFilterDrawer, { resource: resource })); }; const mapStateToProps = state => ({ resources: state.resources }); var ResourceRoute = allowOverride(require$$3.connect(mapStateToProps)(ResourceAction), 'ResourceRoute'); /* eslint-disable react/no-children-prop */ const h = new ViewHelpers(); const App = () => { const [sidebarVisible, toggleSidebar] = React$1.useState(false); const location = reactRouter.useLocation(); useHistoryListen(); React$1.useEffect(() => { if (sidebarVisible) { toggleSidebar(false); } }, [location]); const resourceId = ':resourceId'; const actionName = ':actionName'; const recordId = ':recordId'; const pageName = ':pageName'; // Note: replaces are required so that record/resource/bulk actions urls // are relative to their parent route const dashboardUrl = h.dashboardUrl(); const resourceUrl = h.resourceUrl({ resourceId }); const recordActionUrl = h.recordActionUrl({ resourceId, recordId, actionName }).replace(resourceUrl, '').substring(1); const resourceActionUrl = h.resourceActionUrl({ resourceId, actionName }).replace(resourceUrl, '').substring(1); const bulkActionUrl = h.bulkActionUrl({ resourceId, actionName }).replace(resourceUrl, '').substring(1); const pageUrl = h.pageUrl(pageName); return /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { height: "100%", flex: true, "data-css": "app" }, sidebarVisible ? /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Overlay, { onClick: () => toggleSidebar(!sidebarVisible), zIndex: SIDEBAR_Z_INDEX - 1 }) : null, /*#__PURE__*/React__default$1.default.createElement(Sidebar, { isVisible: sidebarVisible, "data-css": "sidebar" }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { flex: true, flexGrow: 1, flexDirection: "column", overflowY: "auto", bg: "bg", "data-css": "app-content" }, /*#__PURE__*/React__default$1.default.createElement(OverridableTopbar, { toggleSidebar: () => toggleSidebar(!sidebarVisible) }), /*#__PURE__*/React__default$1.default.createElement(DesignSystem.Box, { position: "absolute", top: 0, zIndex: 2000, "data-css": "notice" }, /*#__PURE__*/React__default$1.default.createElement(OverridableConnectedNoticeBox, null)), /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.Routes, null, /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.Route, { path: dashboardUrl }, /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.Route, { index: true, element: /*#__PURE__*/React__default$1.default.createElement(DashboardRoute, null) })), /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.Route, { path: resourceUrl }, /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.Route, { index: true, element: /*#__PURE__*/React__default$1.default.createElement(ResourceRoute, null) }), /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.Route, { path: bulkActionUrl, element: /*#__PURE__*/React__default$1.default.createElement(BulkActionRoute, null) }), /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.Route, { path: resourceActionUrl, element: /*#__PURE__*/React__default$1.default.createElement(ResourceActionRoute, null) }), /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.Route, { path: recordActionUrl, element: /*#__PURE__*/React__default$1.default.createElement(RecordActionRoute, null) })), /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.Route, { path: pageUrl }, /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.Route, { index: true, element: /*#__PURE__*/React__default$1.default.createElement(PageRoute, null) })), /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.Route, { path: "*", element: /*#__PURE__*/React__default$1.default.createElement(DashboardRoute, null) })), /*#__PURE__*/React__default$1.default.createElement(OverridableFooter, null)), /*#__PURE__*/React__default$1.default.createElement(AdminModal, null), /*#__PURE__*/React__default$1.default.createElement(OverridableAuthenticationBackgroundComponent, null)); }; const OverridableApp = allowOverride(App, 'Application'); function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _possibleConstructorReturn(self, call) { if (call && (_typeof$3(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); } function ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$6(Object(source), !0).forEach(function (key) { _defineProperty$2(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var consoleLogger = { type: 'logger', log: function log(args) { this.output('log', args); }, warn: function warn(args) { this.output('warn', args); }, error: function error(args) { this.output('error', args); }, output: function output(type, args) { if (console && console[type]) console[type].apply(console, args); } }; var Logger = function () { function Logger(concreteLogger) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _classCallCheck$1(this, Logger); this.init(concreteLogger, options); } _createClass$1(Logger, [{ key: "init", value: function init(concreteLogger) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; this.prefix = options.prefix || 'i18next:'; this.logger = concreteLogger || consoleLogger; this.options = options; this.debug = options.debug; } }, { key: "setDebug", value: function setDebug(bool) { this.debug = bool; } }, { key: "log", value: function log() { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return this.forward(args, 'log', '', true); } }, { key: "warn", value: function warn() { for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } return this.forward(args, 'warn', '', true); } }, { key: "error", value: function error() { for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { args[_key3] = arguments[_key3]; } return this.forward(args, 'error', ''); } }, { key: "deprecate", value: function deprecate() { for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { args[_key4] = arguments[_key4]; } return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true); } }, { key: "forward", value: function forward(args, lvl, prefix, debugOnly) { if (debugOnly && !this.debug) return null; if (typeof args[0] === 'string') args[0] = "".concat(prefix).concat(this.prefix, " ").concat(args[0]); return this.logger[lvl](args); } }, { key: "create", value: function create(moduleName) { return new Logger(this.logger, _objectSpread$6(_objectSpread$6({}, { prefix: "".concat(this.prefix, ":").concat(moduleName, ":") }), this.options)); } }, { key: "clone", value: function clone(options) { options = options || this.options; options.prefix = options.prefix || this.prefix; return new Logger(this.logger, options); } }]); return Logger; }(); var baseLogger = new Logger(); var EventEmitter = function () { function EventEmitter() { _classCallCheck$1(this, EventEmitter); this.observers = {}; } _createClass$1(EventEmitter, [{ key: "on", value: function on(events, listener) { var _this = this; events.split(' ').forEach(function (event) { _this.observers[event] = _this.observers[event] || []; _this.observers[event].push(listener); }); return this; } }, { key: "off", value: function off(event, listener) { if (!this.observers[event]) return; if (!listener) { delete this.observers[event]; return; } this.observers[event] = this.observers[event].filter(function (l) { return l !== listener; }); } }, { key: "emit", value: function emit(event) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } if (this.observers[event]) { var cloned = [].concat(this.observers[event]); cloned.forEach(function (observer) { observer.apply(void 0, args); }); } if (this.observers['*']) { var _cloned = [].concat(this.observers['*']); _cloned.forEach(function (observer) { observer.apply(observer, [event].concat(args)); }); } } }]); return EventEmitter; }(); function defer() { var res; var rej; var promise = new Promise(function (resolve, reject) { res = resolve; rej = reject; }); promise.resolve = res; promise.reject = rej; return promise; } function makeString(object) { if (object == null) return ''; return '' + object; } function copy(a, s, t) { a.forEach(function (m) { if (s[m]) t[m] = s[m]; }); } function getLastOfPath(object, path, Empty) { function cleanKey(key) { return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key; } function canNotTraverseDeeper() { return !object || typeof object === 'string'; } var stack = typeof path !== 'string' ? [].concat(path) : path.split('.'); while (stack.length > 1) { if (canNotTraverseDeeper()) return {}; var key = cleanKey(stack.shift()); if (!object[key] && Empty) object[key] = new Empty(); if (Object.prototype.hasOwnProperty.call(object, key)) { object = object[key]; } else { object = {}; } } if (canNotTraverseDeeper()) return {}; return { obj: object, k: cleanKey(stack.shift()) }; } function setPath(object, path, newValue) { var _getLastOfPath = getLastOfPath(object, path, Object), obj = _getLastOfPath.obj, k = _getLastOfPath.k; obj[k] = newValue; } function pushPath(object, path, newValue, concat) { var _getLastOfPath2 = getLastOfPath(object, path, Object), obj = _getLastOfPath2.obj, k = _getLastOfPath2.k; obj[k] = obj[k] || []; if (concat) obj[k] = obj[k].concat(newValue); if (!concat) obj[k].push(newValue); } function getPath(object, path) { var _getLastOfPath3 = getLastOfPath(object, path), obj = _getLastOfPath3.obj, k = _getLastOfPath3.k; if (!obj) return undefined; return obj[k]; } function getPathWithDefaults(data, defaultData, key) { var value = getPath(data, key); if (value !== undefined) { return value; } return getPath(defaultData, key); } function deepExtend(target, source, overwrite) { for (var prop in source) { if (prop !== '__proto__' && prop !== 'constructor') { if (prop in target) { if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) { if (overwrite) target[prop] = source[prop]; } else { deepExtend(target[prop], source[prop], overwrite); } } else { target[prop] = source[prop]; } } } return target; } function regexEscape(str) { return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); } var _entityMap = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '/': '/' }; function escape$1(data) { if (typeof data === 'string') { return data.replace(/[&<>"'\/]/g, function (s) { return _entityMap[s]; }); } return data; } var isIE10 = typeof window !== 'undefined' && window.navigator && typeof window.navigator.userAgentData === 'undefined' && window.navigator.userAgent && window.navigator.userAgent.indexOf('MSIE') > -1; var chars = [' ', ',', '?', '!', ';']; function looksLikeObjectPath(key, nsSeparator, keySeparator) { nsSeparator = nsSeparator || ''; keySeparator = keySeparator || ''; var possibleChars = chars.filter(function (c) { return nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0; }); if (possibleChars.length === 0) return true; var r = new RegExp("(".concat(possibleChars.map(function (c) { return c === '?' ? '\\?' : c; }).join('|'), ")")); var matched = !r.test(key); if (!matched) { var ki = key.indexOf(keySeparator); if (ki > 0 && !r.test(key.substring(0, ki))) { matched = true; } } return matched; } function deepFind(obj, path) { var keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.'; if (!obj) return undefined; if (obj[path]) return obj[path]; var paths = path.split(keySeparator); var current = obj; for (var i = 0; i < paths.length; ++i) { if (!current) return undefined; if (typeof current[paths[i]] === 'string' && i + 1 < paths.length) { return undefined; } if (current[paths[i]] === undefined) { var j = 2; var p = paths.slice(i, i + j).join(keySeparator); var mix = current[p]; while (mix === undefined && paths.length > i + j) { j++; p = paths.slice(i, i + j).join(keySeparator); mix = current[p]; } if (mix === undefined) return undefined; if (mix === null) return null; if (path.endsWith(p)) { if (typeof mix === 'string') return mix; if (p && typeof mix[p] === 'string') return mix[p]; } var joinedPath = paths.slice(i + j).join(keySeparator); if (joinedPath) return deepFind(mix, joinedPath, keySeparator); return undefined; } current = current[paths[i]]; } return current; } function ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$5(Object(source), !0).forEach(function (key) { _defineProperty$2(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _createSuper$3(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$3(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$3() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var ResourceStore = function (_EventEmitter) { _inherits(ResourceStore, _EventEmitter); var _super = _createSuper$3(ResourceStore); function ResourceStore(data) { var _this; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { ns: ['translation'], defaultNS: 'translation' }; _classCallCheck$1(this, ResourceStore); _this = _super.call(this); if (isIE10) { EventEmitter.call(_assertThisInitialized(_this)); } _this.data = data || {}; _this.options = options; if (_this.options.keySeparator === undefined) { _this.options.keySeparator = '.'; } if (_this.options.ignoreJSONStructure === undefined) { _this.options.ignoreJSONStructure = true; } return _this; } _createClass$1(ResourceStore, [{ key: "addNamespaces", value: function addNamespaces(ns) { if (this.options.ns.indexOf(ns) < 0) { this.options.ns.push(ns); } } }, { key: "removeNamespaces", value: function removeNamespaces(ns) { var index = this.options.ns.indexOf(ns); if (index > -1) { this.options.ns.splice(index, 1); } } }, { key: "getResource", value: function getResource(lng, ns, key) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; var ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure; var path = [lng, ns]; if (key && typeof key !== 'string') path = path.concat(key); if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key); if (lng.indexOf('.') > -1) { path = lng.split('.'); } var result = getPath(this.data, path); if (result || !ignoreJSONStructure || typeof key !== 'string') return result; return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator); } }, { key: "addResource", value: function addResource(lng, ns, key, value) { var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { silent: false }; var keySeparator = this.options.keySeparator; if (keySeparator === undefined) keySeparator = '.'; var path = [lng, ns]; if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key); if (lng.indexOf('.') > -1) { path = lng.split('.'); value = ns; ns = path[1]; } this.addNamespaces(ns); setPath(this.data, path, value); if (!options.silent) this.emit('added', lng, ns, key, value); } }, { key: "addResources", value: function addResources(lng, ns, resources) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : { silent: false }; for (var m in resources) { if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], { silent: true }); } if (!options.silent) this.emit('added', lng, ns, resources); } }, { key: "addResourceBundle", value: function addResourceBundle(lng, ns, resources, deep, overwrite) { var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : { silent: false }; var path = [lng, ns]; if (lng.indexOf('.') > -1) { path = lng.split('.'); deep = resources; resources = ns; ns = path[1]; } this.addNamespaces(ns); var pack = getPath(this.data, path) || {}; if (deep) { deepExtend(pack, resources, overwrite); } else { pack = _objectSpread$5(_objectSpread$5({}, pack), resources); } setPath(this.data, path, pack); if (!options.silent) this.emit('added', lng, ns, resources); } }, { key: "removeResourceBundle", value: function removeResourceBundle(lng, ns) { if (this.hasResourceBundle(lng, ns)) { delete this.data[lng][ns]; } this.removeNamespaces(ns); this.emit('removed', lng, ns); } }, { key: "hasResourceBundle", value: function hasResourceBundle(lng, ns) { return this.getResource(lng, ns) !== undefined; } }, { key: "getResourceBundle", value: function getResourceBundle(lng, ns) { if (!ns) ns = this.options.defaultNS; if (this.options.compatibilityAPI === 'v1') return _objectSpread$5(_objectSpread$5({}, {}), this.getResource(lng, ns)); return this.getResource(lng, ns); } }, { key: "getDataByLanguage", value: function getDataByLanguage(lng) { return this.data[lng]; } }, { key: "hasLanguageSomeTranslations", value: function hasLanguageSomeTranslations(lng) { var data = this.getDataByLanguage(lng); var n = data && Object.keys(data) || []; return !!n.find(function (v) { return data[v] && Object.keys(data[v]).length > 0; }); } }, { key: "toJSON", value: function toJSON() { return this.data; } }]); return ResourceStore; }(EventEmitter); var postProcessor = { processors: {}, addPostProcessor: function addPostProcessor(module) { this.processors[module.name] = module; }, handle: function handle(processors, value, key, options, translator) { var _this = this; processors.forEach(function (processor) { if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator); }); return value; } }; function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty$2(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _createSuper$2(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$2(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$2() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var checkedLoadedFor = {}; var Translator = function (_EventEmitter) { _inherits(Translator, _EventEmitter); var _super = _createSuper$2(Translator); function Translator(services) { var _this; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _classCallCheck$1(this, Translator); _this = _super.call(this); if (isIE10) { EventEmitter.call(_assertThisInitialized(_this)); } copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, _assertThisInitialized(_this)); _this.options = options; if (_this.options.keySeparator === undefined) { _this.options.keySeparator = '.'; } _this.logger = baseLogger.create('translator'); return _this; } _createClass$1(Translator, [{ key: "changeLanguage", value: function changeLanguage(lng) { if (lng) this.language = lng; } }, { key: "exists", value: function exists(key) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { interpolation: {} }; if (key === undefined || key === null) { return false; } var resolved = this.resolve(key, options); return resolved && resolved.res !== undefined; } }, { key: "extractFromKey", value: function extractFromKey(key, options) { var nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator; if (nsSeparator === undefined) nsSeparator = ':'; var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; var namespaces = options.ns || this.options.defaultNS || []; var wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1; var seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator); if (wouldCheckForNsInKey && !seemsNaturalLanguage) { var m = key.match(this.interpolator.nestingRegexp); if (m && m.length > 0) { return { key: key, namespaces: namespaces }; } var parts = key.split(nsSeparator); if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift(); key = parts.join(keySeparator); } if (typeof namespaces === 'string') namespaces = [namespaces]; return { key: key, namespaces: namespaces }; } }, { key: "translate", value: function translate(keys, options, lastKey) { var _this2 = this; if (_typeof$3(options) !== 'object' && this.options.overloadTranslationOptionHandler) { options = this.options.overloadTranslationOptionHandler(arguments); } if (!options) options = {}; if (keys === undefined || keys === null) return ''; if (!Array.isArray(keys)) keys = [String(keys)]; var returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails; var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator; var _this$extractFromKey = this.extractFromKey(keys[keys.length - 1], options), key = _this$extractFromKey.key, namespaces = _this$extractFromKey.namespaces; var namespace = namespaces[namespaces.length - 1]; var lng = options.lng || this.language; var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode; if (lng && lng.toLowerCase() === 'cimode') { if (appendNamespaceToCIMode) { var nsSeparator = options.nsSeparator || this.options.nsSeparator; if (returnDetails) { return { res: "".concat(namespace).concat(nsSeparator).concat(key), usedKey: key, exactUsedKey: key, usedLng: lng, usedNS: namespace }; } return "".concat(namespace).concat(nsSeparator).concat(key); } if (returnDetails) { return { res: key, usedKey: key, exactUsedKey: key, usedLng: lng, usedNS: namespace }; } return key; } var resolved = this.resolve(keys, options); var res = resolved && resolved.res; var resUsedKey = resolved && resolved.usedKey || key; var resExactUsedKey = resolved && resolved.exactUsedKey || key; var resType = Object.prototype.toString.apply(res); var noObject = ['[object Number]', '[object Function]', '[object RegExp]']; var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays; var handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject; var handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number'; if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) { if (!options.returnObjects && !this.options.returnObjects) { if (!this.options.returnedObjectHandler) { this.logger.warn('accessing an object - but returnObjects options is not enabled!'); } var r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, _objectSpread$4(_objectSpread$4({}, options), {}, { ns: namespaces })) : "key '".concat(key, " (").concat(this.language, ")' returned an object instead of string."); if (returnDetails) { resolved.res = r; return resolved; } return r; } if (keySeparator) { var resTypeIsArray = resType === '[object Array]'; var copy = resTypeIsArray ? [] : {}; var newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey; for (var m in res) { if (Object.prototype.hasOwnProperty.call(res, m)) { var deepKey = "".concat(newKeyToUse).concat(keySeparator).concat(m); copy[m] = this.translate(deepKey, _objectSpread$4(_objectSpread$4({}, options), { joinArrays: false, ns: namespaces })); if (copy[m] === deepKey) copy[m] = res[m]; } } res = copy; } } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') { res = res.join(joinArrays); if (res) res = this.extendTranslation(res, keys, options, lastKey); } else { var usedDefault = false; var usedKey = false; var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string'; var hasDefaultValue = Translator.hasDefaultValue(options); var defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : ''; var defaultValue = options["defaultValue".concat(defaultValueSuffix)] || options.defaultValue; if (!this.isValidLookup(res) && hasDefaultValue) { usedDefault = true; res = defaultValue; } if (!this.isValidLookup(res)) { usedKey = true; res = key; } var missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey; var resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res; var updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing; if (usedKey || usedDefault || updateMissing) { this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res); if (keySeparator) { var fk = this.resolve(key, _objectSpread$4(_objectSpread$4({}, options), {}, { keySeparator: false })); if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.'); } var lngs = []; var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language); if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) { for (var i = 0; i < fallbackLngs.length; i++) { lngs.push(fallbackLngs[i]); } } else if (this.options.saveMissingTo === 'all') { lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language); } else { lngs.push(options.lng || this.language); } var send = function send(l, k, specificDefaultValue) { var defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing; if (_this2.options.missingKeyHandler) { _this2.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options); } else if (_this2.backendConnector && _this2.backendConnector.saveMissing) { _this2.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options); } _this2.emit('missingKey', l, namespace, k, res); }; if (this.options.saveMissing) { if (this.options.saveMissingPlurals && needsPluralHandling) { lngs.forEach(function (language) { _this2.pluralResolver.getSuffixes(language, options).forEach(function (suffix) { send([language], key + suffix, options["defaultValue".concat(suffix)] || defaultValue); }); }); } else { send(lngs, key, defaultValue); } } } res = this.extendTranslation(res, keys, options, resolved, lastKey); if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = "".concat(namespace, ":").concat(key); if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) { if (this.options.compatibilityAPI !== 'v1') { res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? "".concat(namespace, ":").concat(key) : key, usedDefault ? res : undefined); } else { res = this.options.parseMissingKeyHandler(res); } } } if (returnDetails) { resolved.res = res; return resolved; } return res; } }, { key: "extendTranslation", value: function extendTranslation(res, key, options, resolved, lastKey) { var _this3 = this; if (this.i18nFormat && this.i18nFormat.parse) { res = this.i18nFormat.parse(res, _objectSpread$4(_objectSpread$4({}, this.options.interpolation.defaultVariables), options), resolved.usedLng, resolved.usedNS, resolved.usedKey, { resolved: resolved }); } else if (!options.skipInterpolation) { if (options.interpolation) this.interpolator.init(_objectSpread$4(_objectSpread$4({}, options), { interpolation: _objectSpread$4(_objectSpread$4({}, this.options.interpolation), options.interpolation) })); var skipOnVariables = typeof res === 'string' && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables); var nestBef; if (skipOnVariables) { var nb = res.match(this.interpolator.nestingRegexp); nestBef = nb && nb.length; } var data = options.replace && typeof options.replace !== 'string' ? options.replace : options; if (this.options.interpolation.defaultVariables) data = _objectSpread$4(_objectSpread$4({}, this.options.interpolation.defaultVariables), data); res = this.interpolator.interpolate(res, data, options.lng || this.language, options); if (skipOnVariables) { var na = res.match(this.interpolator.nestingRegexp); var nestAft = na && na.length; if (nestBef < nestAft) options.nest = false; } if (options.nest !== false) res = this.interpolator.nest(res, function () { for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (lastKey && lastKey[0] === args[0] && !options.context) { _this3.logger.warn("It seems you are nesting recursively key: ".concat(args[0], " in key: ").concat(key[0])); return null; } return _this3.translate.apply(_this3, args.concat([key])); }, options); if (options.interpolation) this.interpolator.reset(); } var postProcess = options.postProcess || this.options.postProcess; var postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess; if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) { res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? _objectSpread$4({ i18nResolved: resolved }, options) : options, this); } return res; } }, { key: "resolve", value: function resolve(keys) { var _this4 = this; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var found; var usedKey; var exactUsedKey; var usedLng; var usedNS; if (typeof keys === 'string') keys = [keys]; keys.forEach(function (k) { if (_this4.isValidLookup(found)) return; var extracted = _this4.extractFromKey(k, options); var key = extracted.key; usedKey = key; var namespaces = extracted.namespaces; if (_this4.options.fallbackNS) namespaces = namespaces.concat(_this4.options.fallbackNS); var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string'; var needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && _this4.pluralResolver.shouldUseIntlApi(); var needsContextHandling = options.context !== undefined && (typeof options.context === 'string' || typeof options.context === 'number') && options.context !== ''; var codes = options.lngs ? options.lngs : _this4.languageUtils.toResolveHierarchy(options.lng || _this4.language, options.fallbackLng); namespaces.forEach(function (ns) { if (_this4.isValidLookup(found)) return; usedNS = ns; if (!checkedLoadedFor["".concat(codes[0], "-").concat(ns)] && _this4.utils && _this4.utils.hasLoadedNamespace && !_this4.utils.hasLoadedNamespace(usedNS)) { checkedLoadedFor["".concat(codes[0], "-").concat(ns)] = true; _this4.logger.warn("key \"".concat(usedKey, "\" for languages \"").concat(codes.join(', '), "\" won't get resolved as namespace \"").concat(usedNS, "\" was not yet loaded"), 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!'); } codes.forEach(function (code) { if (_this4.isValidLookup(found)) return; usedLng = code; var finalKeys = [key]; if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) { _this4.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options); } else { var pluralSuffix; if (needsPluralHandling) pluralSuffix = _this4.pluralResolver.getSuffix(code, options.count, options); var zeroSuffix = "".concat(_this4.options.pluralSeparator, "zero"); if (needsPluralHandling) { finalKeys.push(key + pluralSuffix); if (needsZeroSuffixLookup) { finalKeys.push(key + zeroSuffix); } } if (needsContextHandling) { var contextKey = "".concat(key).concat(_this4.options.contextSeparator).concat(options.context); finalKeys.push(contextKey); if (needsPluralHandling) { finalKeys.push(contextKey + pluralSuffix); if (needsZeroSuffixLookup) { finalKeys.push(contextKey + zeroSuffix); } } } } var possibleKey; while (possibleKey = finalKeys.pop()) { if (!_this4.isValidLookup(found)) { exactUsedKey = possibleKey; found = _this4.getResource(code, ns, possibleKey, options); } } }); }); }); return { res: found, usedKey: usedKey, exactUsedKey: exactUsedKey, usedLng: usedLng, usedNS: usedNS }; } }, { key: "isValidLookup", value: function isValidLookup(res) { return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === ''); } }, { key: "getResource", value: function getResource(code, ns, key) { var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options); return this.resourceStore.getResource(code, ns, key, options); } }], [{ key: "hasDefaultValue", value: function hasDefaultValue(options) { var prefix = 'defaultValue'; for (var option in options) { if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) { return true; } } return false; } }]); return Translator; }(EventEmitter); function capitalize(string) { return string.charAt(0).toUpperCase() + string.slice(1); } var LanguageUtil = function () { function LanguageUtil(options) { _classCallCheck$1(this, LanguageUtil); this.options = options; this.supportedLngs = this.options.supportedLngs || false; this.logger = baseLogger.create('languageUtils'); } _createClass$1(LanguageUtil, [{ key: "getScriptPartFromCode", value: function getScriptPartFromCode(code) { if (!code || code.indexOf('-') < 0) return null; var p = code.split('-'); if (p.length === 2) return null; p.pop(); if (p[p.length - 1].toLowerCase() === 'x') return null; return this.formatLanguageCode(p.join('-')); } }, { key: "getLanguagePartFromCode", value: function getLanguagePartFromCode(code) { if (!code || code.indexOf('-') < 0) return code; var p = code.split('-'); return this.formatLanguageCode(p[0]); } }, { key: "formatLanguageCode", value: function formatLanguageCode(code) { if (typeof code === 'string' && code.indexOf('-') > -1) { var specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab']; var p = code.split('-'); if (this.options.lowerCaseLng) { p = p.map(function (part) { return part.toLowerCase(); }); } else if (p.length === 2) { p[0] = p[0].toLowerCase(); p[1] = p[1].toUpperCase(); if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase()); } else if (p.length === 3) { p[0] = p[0].toLowerCase(); if (p[1].length === 2) p[1] = p[1].toUpperCase(); if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase(); if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase()); if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase()); } return p.join('-'); } return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code; } }, { key: "isSupportedCode", value: function isSupportedCode(code) { if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) { code = this.getLanguagePartFromCode(code); } return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1; } }, { key: "getBestMatchFromCodes", value: function getBestMatchFromCodes(codes) { var _this = this; if (!codes) return null; var found; codes.forEach(function (code) { if (found) return; var cleanedLng = _this.formatLanguageCode(code); if (!_this.options.supportedLngs || _this.isSupportedCode(cleanedLng)) found = cleanedLng; }); if (!found && this.options.supportedLngs) { codes.forEach(function (code) { if (found) return; var lngOnly = _this.getLanguagePartFromCode(code); if (_this.isSupportedCode(lngOnly)) return found = lngOnly; found = _this.options.supportedLngs.find(function (supportedLng) { if (supportedLng === lngOnly) return supportedLng; if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return; if (supportedLng.indexOf(lngOnly) === 0) return supportedLng; }); }); } if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0]; return found; } }, { key: "getFallbackCodes", value: function getFallbackCodes(fallbacks, code) { if (!fallbacks) return []; if (typeof fallbacks === 'function') fallbacks = fallbacks(code); if (typeof fallbacks === 'string') fallbacks = [fallbacks]; if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks; if (!code) return fallbacks["default"] || []; var found = fallbacks[code]; if (!found) found = fallbacks[this.getScriptPartFromCode(code)]; if (!found) found = fallbacks[this.formatLanguageCode(code)]; if (!found) found = fallbacks[this.getLanguagePartFromCode(code)]; if (!found) found = fallbacks["default"]; return found || []; } }, { key: "toResolveHierarchy", value: function toResolveHierarchy(code, fallbackCode) { var _this2 = this; var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code); var codes = []; var addCode = function addCode(c) { if (!c) return; if (_this2.isSupportedCode(c)) { codes.push(c); } else { _this2.logger.warn("rejecting language code not found in supportedLngs: ".concat(c)); } }; if (typeof code === 'string' && code.indexOf('-') > -1) { if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code)); if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code)); if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code)); } else if (typeof code === 'string') { addCode(this.formatLanguageCode(code)); } fallbackCodes.forEach(function (fc) { if (codes.indexOf(fc) < 0) addCode(_this2.formatLanguageCode(fc)); }); return codes; } }]); return LanguageUtil; }(); var sets = [{ lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'], nr: [1, 2], fc: 1 }, { lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'], nr: [1, 2], fc: 2 }, { lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'], nr: [1], fc: 3 }, { lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'], nr: [1, 2, 5], fc: 4 }, { lngs: ['ar'], nr: [0, 1, 2, 3, 11, 100], fc: 5 }, { lngs: ['cs', 'sk'], nr: [1, 2, 5], fc: 6 }, { lngs: ['csb', 'pl'], nr: [1, 2, 5], fc: 7 }, { lngs: ['cy'], nr: [1, 2, 3, 8], fc: 8 }, { lngs: ['fr'], nr: [1, 2], fc: 9 }, { lngs: ['ga'], nr: [1, 2, 3, 7, 11], fc: 10 }, { lngs: ['gd'], nr: [1, 2, 3, 20], fc: 11 }, { lngs: ['is'], nr: [1, 2], fc: 12 }, { lngs: ['jv'], nr: [0, 1], fc: 13 }, { lngs: ['kw'], nr: [1, 2, 3, 4], fc: 14 }, { lngs: ['lt'], nr: [1, 2, 10], fc: 15 }, { lngs: ['lv'], nr: [1, 2, 0], fc: 16 }, { lngs: ['mk'], nr: [1, 2], fc: 17 }, { lngs: ['mnk'], nr: [0, 1, 2], fc: 18 }, { lngs: ['mt'], nr: [1, 2, 11, 20], fc: 19 }, { lngs: ['or'], nr: [2, 1], fc: 2 }, { lngs: ['ro'], nr: [1, 2, 20], fc: 20 }, { lngs: ['sl'], nr: [5, 1, 2, 3], fc: 21 }, { lngs: ['he', 'iw'], nr: [1, 2, 20, 21], fc: 22 }]; var _rulesPluralsTypes = { 1: function _(n) { return Number(n > 1); }, 2: function _(n) { return Number(n != 1); }, 3: function _(n) { return 0; }, 4: function _(n) { return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2); }, 5: function _(n) { return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5); }, 6: function _(n) { return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2); }, 7: function _(n) { return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2); }, 8: function _(n) { return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3); }, 9: function _(n) { return Number(n >= 2); }, 10: function _(n) { return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4); }, 11: function _(n) { return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3); }, 12: function _(n) { return Number(n % 10 != 1 || n % 100 == 11); }, 13: function _(n) { return Number(n !== 0); }, 14: function _(n) { return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3); }, 15: function _(n) { return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2); }, 16: function _(n) { return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2); }, 17: function _(n) { return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1); }, 18: function _(n) { return Number(n == 0 ? 0 : n == 1 ? 1 : 2); }, 19: function _(n) { return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3); }, 20: function _(n) { return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2); }, 21: function _(n) { return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0); }, 22: function _(n) { return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3); } }; var deprecatedJsonVersions = ['v1', 'v2', 'v3']; var suffixesOrder = { zero: 0, one: 1, two: 2, few: 3, many: 4, other: 5 }; function createRules() { var rules = {}; sets.forEach(function (set) { set.lngs.forEach(function (l) { rules[l] = { numbers: set.nr, plurals: _rulesPluralsTypes[set.fc] }; }); }); return rules; } var PluralResolver = function () { function PluralResolver(languageUtils) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _classCallCheck$1(this, PluralResolver); this.languageUtils = languageUtils; this.options = options; this.logger = baseLogger.create('pluralResolver'); if ((!this.options.compatibilityJSON || this.options.compatibilityJSON === 'v4') && (typeof Intl === 'undefined' || !Intl.PluralRules)) { this.options.compatibilityJSON = 'v3'; this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.'); } this.rules = createRules(); } _createClass$1(PluralResolver, [{ key: "addRule", value: function addRule(lng, obj) { this.rules[lng] = obj; } }, { key: "getRule", value: function getRule(code) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (this.shouldUseIntlApi()) { try { return new Intl.PluralRules(code, { type: options.ordinal ? 'ordinal' : 'cardinal' }); } catch (_unused) { return; } } return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)]; } }, { key: "needsPlural", value: function needsPlural(code) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var rule = this.getRule(code, options); if (this.shouldUseIntlApi()) { return rule && rule.resolvedOptions().pluralCategories.length > 1; } return rule && rule.numbers.length > 1; } }, { key: "getPluralFormsOfKey", value: function getPluralFormsOfKey(code, key) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return this.getSuffixes(code, options).map(function (suffix) { return "".concat(key).concat(suffix); }); } }, { key: "getSuffixes", value: function getSuffixes(code) { var _this = this; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var rule = this.getRule(code, options); if (!rule) { return []; } if (this.shouldUseIntlApi()) { return rule.resolvedOptions().pluralCategories.sort(function (pluralCategory1, pluralCategory2) { return suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]; }).map(function (pluralCategory) { return "".concat(_this.options.prepend).concat(pluralCategory); }); } return rule.numbers.map(function (number) { return _this.getSuffix(code, number, options); }); } }, { key: "getSuffix", value: function getSuffix(code, count) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var rule = this.getRule(code, options); if (rule) { if (this.shouldUseIntlApi()) { return "".concat(this.options.prepend).concat(rule.select(count)); } return this.getSuffixRetroCompatible(rule, count); } this.logger.warn("no plural rule found for: ".concat(code)); return ''; } }, { key: "getSuffixRetroCompatible", value: function getSuffixRetroCompatible(rule, count) { var _this2 = this; var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count)); var suffix = rule.numbers[idx]; if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) { if (suffix === 2) { suffix = 'plural'; } else if (suffix === 1) { suffix = ''; } } var returnSuffix = function returnSuffix() { return _this2.options.prepend && suffix.toString() ? _this2.options.prepend + suffix.toString() : suffix.toString(); }; if (this.options.compatibilityJSON === 'v1') { if (suffix === 1) return ''; if (typeof suffix === 'number') return "_plural_".concat(suffix.toString()); return returnSuffix(); } else if (this.options.compatibilityJSON === 'v2') { return returnSuffix(); } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) { return returnSuffix(); } return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString(); } }, { key: "shouldUseIntlApi", value: function shouldUseIntlApi() { return !deprecatedJsonVersions.includes(this.options.compatibilityJSON); } }]); return PluralResolver; }(); function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty$2(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function deepFindWithDefaults(data, defaultData, key) { var keySeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.'; var ignoreJSONStructure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true; var path = getPathWithDefaults(data, defaultData, key); if (!path && ignoreJSONStructure && typeof key === 'string') { path = deepFind(data, key, keySeparator); if (path === undefined) path = deepFind(defaultData, key, keySeparator); } return path; } var Interpolator = function () { function Interpolator() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck$1(this, Interpolator); this.logger = baseLogger.create('interpolator'); this.options = options; this.format = options.interpolation && options.interpolation.format || function (value) { return value; }; this.init(options); } _createClass$1(Interpolator, [{ key: "init", value: function init() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; if (!options.interpolation) options.interpolation = { escapeValue: true }; var iOpts = options.interpolation; this.escape = iOpts.escape !== undefined ? iOpts.escape : escape$1; this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true; this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false; this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{'; this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}'; this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ','; this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-'; this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || ''; this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t('); this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')'); this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || ','; this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000; this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false; this.resetRegExp(); } }, { key: "reset", value: function reset() { if (this.options) this.init(this.options); } }, { key: "resetRegExp", value: function resetRegExp() { var regexpStr = "".concat(this.prefix, "(.+?)").concat(this.suffix); this.regexp = new RegExp(regexpStr, 'g'); var regexpUnescapeStr = "".concat(this.prefix).concat(this.unescapePrefix, "(.+?)").concat(this.unescapeSuffix).concat(this.suffix); this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g'); var nestingRegexpStr = "".concat(this.nestingPrefix, "(.+?)").concat(this.nestingSuffix); this.nestingRegexp = new RegExp(nestingRegexpStr, 'g'); } }, { key: "interpolate", value: function interpolate(str, data, lng, options) { var _this = this; var match; var value; var replaces; var defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {}; function regexSafe(val) { return val.replace(/\$/g, '$$$$'); } var handleFormat = function handleFormat(key) { if (key.indexOf(_this.formatSeparator) < 0) { var path = deepFindWithDefaults(data, defaultData, key, _this.options.keySeparator, _this.options.ignoreJSONStructure); return _this.alwaysFormat ? _this.format(path, undefined, lng, _objectSpread$3(_objectSpread$3(_objectSpread$3({}, options), data), {}, { interpolationkey: key })) : path; } var p = key.split(_this.formatSeparator); var k = p.shift().trim(); var f = p.join(_this.formatSeparator).trim(); return _this.format(deepFindWithDefaults(data, defaultData, k, _this.options.keySeparator, _this.options.ignoreJSONStructure), f, lng, _objectSpread$3(_objectSpread$3(_objectSpread$3({}, options), data), {}, { interpolationkey: k })); }; this.resetRegExp(); var missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler; var skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables; var todos = [{ regex: this.regexpUnescape, safeValue: function safeValue(val) { return regexSafe(val); } }, { regex: this.regexp, safeValue: function safeValue(val) { return _this.escapeValue ? regexSafe(_this.escape(val)) : regexSafe(val); } }]; todos.forEach(function (todo) { replaces = 0; while (match = todo.regex.exec(str)) { var matchedVar = match[1].trim(); value = handleFormat(matchedVar); if (value === undefined) { if (typeof missingInterpolationHandler === 'function') { var temp = missingInterpolationHandler(str, match, options); value = typeof temp === 'string' ? temp : ''; } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) { value = ''; } else if (skipOnVariables) { value = match[0]; continue; } else { _this.logger.warn("missed to pass in variable ".concat(matchedVar, " for interpolating ").concat(str)); value = ''; } } else if (typeof value !== 'string' && !_this.useRawValueToEscape) { value = makeString(value); } var safeValue = todo.safeValue(value); str = str.replace(match[0], safeValue); if (skipOnVariables) { todo.regex.lastIndex += value.length; todo.regex.lastIndex -= match[0].length; } else { todo.regex.lastIndex = 0; } replaces++; if (replaces >= _this.maxReplaces) { break; } } }); return str; } }, { key: "nest", value: function nest(str, fc) { var _this2 = this; var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var match; var value; var clonedOptions; function handleHasOptions(key, inheritedOptions) { var sep = this.nestingOptionsSeparator; if (key.indexOf(sep) < 0) return key; var c = key.split(new RegExp("".concat(sep, "[ ]*{"))); var optionsString = "{".concat(c[1]); key = c[0]; optionsString = this.interpolate(optionsString, clonedOptions); var matchedSingleQuotes = optionsString.match(/'/g); var matchedDoubleQuotes = optionsString.match(/"/g); if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) { optionsString = optionsString.replace(/'/g, '"'); } try { clonedOptions = JSON.parse(optionsString); if (inheritedOptions) clonedOptions = _objectSpread$3(_objectSpread$3({}, inheritedOptions), clonedOptions); } catch (e) { this.logger.warn("failed parsing options string in nesting for key ".concat(key), e); return "".concat(key).concat(sep).concat(optionsString); } delete clonedOptions.defaultValue; return key; } while (match = this.nestingRegexp.exec(str)) { var formatters = []; clonedOptions = _objectSpread$3({}, options); clonedOptions = clonedOptions.replace && typeof clonedOptions.replace !== 'string' ? clonedOptions.replace : clonedOptions; clonedOptions.applyPostProcessor = false; delete clonedOptions.defaultValue; var doReduce = false; if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) { var r = match[1].split(this.formatSeparator).map(function (elem) { return elem.trim(); }); match[1] = r.shift(); formatters = r; doReduce = true; } value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions); if (value && match[0] === str && typeof value !== 'string') return value; if (typeof value !== 'string') value = makeString(value); if (!value) { this.logger.warn("missed to resolve ".concat(match[1], " for nesting ").concat(str)); value = ''; } if (doReduce) { value = formatters.reduce(function (v, f) { return _this2.format(v, f, options.lng, _objectSpread$3(_objectSpread$3({}, options), {}, { interpolationkey: match[1].trim() })); }, value.trim()); } str = str.replace(match[0], value); this.regexp.lastIndex = 0; } return str; } }]); return Interpolator; }(); function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty$2(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function parseFormatStr(formatStr) { var formatName = formatStr.toLowerCase().trim(); var formatOptions = {}; if (formatStr.indexOf('(') > -1) { var p = formatStr.split('('); formatName = p[0].toLowerCase().trim(); var optStr = p[1].substring(0, p[1].length - 1); if (formatName === 'currency' && optStr.indexOf(':') < 0) { if (!formatOptions.currency) formatOptions.currency = optStr.trim(); } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) { if (!formatOptions.range) formatOptions.range = optStr.trim(); } else { var opts = optStr.split(';'); opts.forEach(function (opt) { if (!opt) return; var _opt$split = opt.split(':'), _opt$split2 = _toArray(_opt$split), key = _opt$split2[0], rest = _opt$split2.slice(1); var val = rest.join(':').trim().replace(/^'+|'+$/g, ''); if (!formatOptions[key.trim()]) formatOptions[key.trim()] = val; if (val === 'false') formatOptions[key.trim()] = false; if (val === 'true') formatOptions[key.trim()] = true; if (!isNaN(val)) formatOptions[key.trim()] = parseInt(val, 10); }); } } return { formatName: formatName, formatOptions: formatOptions }; } function createCachedFormatter(fn) { var cache = {}; return function invokeFormatter(val, lng, options) { var key = lng + JSON.stringify(options); var formatter = cache[key]; if (!formatter) { formatter = fn(lng, options); cache[key] = formatter; } return formatter(val); }; } var Formatter = function () { function Formatter() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck$1(this, Formatter); this.logger = baseLogger.create('formatter'); this.options = options; this.formats = { number: createCachedFormatter(function (lng, opt) { var formatter = new Intl.NumberFormat(lng, _objectSpread$2({}, opt)); return function (val) { return formatter.format(val); }; }), currency: createCachedFormatter(function (lng, opt) { var formatter = new Intl.NumberFormat(lng, _objectSpread$2(_objectSpread$2({}, opt), {}, { style: 'currency' })); return function (val) { return formatter.format(val); }; }), datetime: createCachedFormatter(function (lng, opt) { var formatter = new Intl.DateTimeFormat(lng, _objectSpread$2({}, opt)); return function (val) { return formatter.format(val); }; }), relativetime: createCachedFormatter(function (lng, opt) { var formatter = new Intl.RelativeTimeFormat(lng, _objectSpread$2({}, opt)); return function (val) { return formatter.format(val, opt.range || 'day'); }; }), list: createCachedFormatter(function (lng, opt) { var formatter = new Intl.ListFormat(lng, _objectSpread$2({}, opt)); return function (val) { return formatter.format(val); }; }) }; this.init(options); } _createClass$1(Formatter, [{ key: "init", value: function init(services) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { interpolation: {} }; var iOpts = options.interpolation; this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ','; } }, { key: "add", value: function add(name, fc) { this.formats[name.toLowerCase().trim()] = fc; } }, { key: "addCached", value: function addCached(name, fc) { this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc); } }, { key: "format", value: function format(value, _format, lng) { var _this = this; var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var formats = _format.split(this.formatSeparator); var result = formats.reduce(function (mem, f) { var _parseFormatStr = parseFormatStr(f), formatName = _parseFormatStr.formatName, formatOptions = _parseFormatStr.formatOptions; if (_this.formats[formatName]) { var formatted = mem; try { var valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {}; var l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng; formatted = _this.formats[formatName](mem, l, _objectSpread$2(_objectSpread$2(_objectSpread$2({}, formatOptions), options), valOptions)); } catch (error) { _this.logger.warn(error); } return formatted; } else { _this.logger.warn("there was no format function for ".concat(formatName)); } return mem; }, value); return result; } }]); return Formatter; }(); function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty$2(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _createSuper$1(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct$1(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct$1() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function removePending(q, name) { if (q.pending[name] !== undefined) { delete q.pending[name]; q.pendingCount--; } } var Connector = function (_EventEmitter) { _inherits(Connector, _EventEmitter); var _super = _createSuper$1(Connector); function Connector(backend, store, services) { var _this; var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; _classCallCheck$1(this, Connector); _this = _super.call(this); if (isIE10) { EventEmitter.call(_assertThisInitialized(_this)); } _this.backend = backend; _this.store = store; _this.services = services; _this.languageUtils = services.languageUtils; _this.options = options; _this.logger = baseLogger.create('backendConnector'); _this.waitingReads = []; _this.maxParallelReads = options.maxParallelReads || 10; _this.readingCalls = 0; _this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5; _this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350; _this.state = {}; _this.queue = []; if (_this.backend && _this.backend.init) { _this.backend.init(services, options.backend, options); } return _this; } _createClass$1(Connector, [{ key: "queueLoad", value: function queueLoad(languages, namespaces, options, callback) { var _this2 = this; var toLoad = {}; var pending = {}; var toLoadLanguages = {}; var toLoadNamespaces = {}; languages.forEach(function (lng) { var hasAllNamespaces = true; namespaces.forEach(function (ns) { var name = "".concat(lng, "|").concat(ns); if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) { _this2.state[name] = 2; } else if (_this2.state[name] < 0) ; else if (_this2.state[name] === 1) { if (pending[name] === undefined) pending[name] = true; } else { _this2.state[name] = 1; hasAllNamespaces = false; if (pending[name] === undefined) pending[name] = true; if (toLoad[name] === undefined) toLoad[name] = true; if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true; } }); if (!hasAllNamespaces) toLoadLanguages[lng] = true; }); if (Object.keys(toLoad).length || Object.keys(pending).length) { this.queue.push({ pending: pending, pendingCount: Object.keys(pending).length, loaded: {}, errors: [], callback: callback }); } return { toLoad: Object.keys(toLoad), pending: Object.keys(pending), toLoadLanguages: Object.keys(toLoadLanguages), toLoadNamespaces: Object.keys(toLoadNamespaces) }; } }, { key: "loaded", value: function loaded(name, err, data) { var s = name.split('|'); var lng = s[0]; var ns = s[1]; if (err) this.emit('failedLoading', lng, ns, err); if (data) { this.store.addResourceBundle(lng, ns, data); } this.state[name] = err ? -1 : 2; var loaded = {}; this.queue.forEach(function (q) { pushPath(q.loaded, [lng], ns); removePending(q, name); if (err) q.errors.push(err); if (q.pendingCount === 0 && !q.done) { Object.keys(q.loaded).forEach(function (l) { if (!loaded[l]) loaded[l] = {}; var loadedKeys = q.loaded[l]; if (loadedKeys.length) { loadedKeys.forEach(function (n) { if (loaded[l][n] === undefined) loaded[l][n] = true; }); } }); q.done = true; if (q.errors.length) { q.callback(q.errors); } else { q.callback(); } } }); this.emit('loaded', loaded); this.queue = this.queue.filter(function (q) { return !q.done; }); } }, { key: "read", value: function read(lng, ns, fcName) { var _this3 = this; var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout; var callback = arguments.length > 5 ? arguments[5] : undefined; if (!lng.length) return callback(null, {}); if (this.readingCalls >= this.maxParallelReads) { this.waitingReads.push({ lng: lng, ns: ns, fcName: fcName, tried: tried, wait: wait, callback: callback }); return; } this.readingCalls++; var resolver = function resolver(err, data) { _this3.readingCalls--; if (_this3.waitingReads.length > 0) { var next = _this3.waitingReads.shift(); _this3.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback); } if (err && data && tried < _this3.maxRetries) { setTimeout(function () { _this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback); }, wait); return; } callback(err, data); }; var fc = this.backend[fcName].bind(this.backend); if (fc.length === 2) { try { var r = fc(lng, ns); if (r && typeof r.then === 'function') { r.then(function (data) { return resolver(null, data); })["catch"](resolver); } else { resolver(null, r); } } catch (err) { resolver(err); } return; } return fc(lng, ns, resolver); } }, { key: "prepareLoading", value: function prepareLoading(languages, namespaces) { var _this4 = this; var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var callback = arguments.length > 3 ? arguments[3] : undefined; if (!this.backend) { this.logger.warn('No backend was added via i18next.use. Will not load resources.'); return callback && callback(); } if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages); if (typeof namespaces === 'string') namespaces = [namespaces]; var toLoad = this.queueLoad(languages, namespaces, options, callback); if (!toLoad.toLoad.length) { if (!toLoad.pending.length) callback(); return null; } toLoad.toLoad.forEach(function (name) { _this4.loadOne(name); }); } }, { key: "load", value: function load(languages, namespaces, callback) { this.prepareLoading(languages, namespaces, {}, callback); } }, { key: "reload", value: function reload(languages, namespaces, callback) { this.prepareLoading(languages, namespaces, { reload: true }, callback); } }, { key: "loadOne", value: function loadOne(name) { var _this5 = this; var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; var s = name.split('|'); var lng = s[0]; var ns = s[1]; this.read(lng, ns, 'read', undefined, undefined, function (err, data) { if (err) _this5.logger.warn("".concat(prefix, "loading namespace ").concat(ns, " for language ").concat(lng, " failed"), err); if (!err && data) _this5.logger.log("".concat(prefix, "loaded namespace ").concat(ns, " for language ").concat(lng), data); _this5.loaded(name, err, data); }); } }, { key: "saveMissing", value: function saveMissing(languages, namespace, key, fallbackValue, isUpdate) { var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; var clb = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : function () {}; if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) { this.logger.warn("did not save key \"".concat(key, "\" as the namespace \"").concat(namespace, "\" was not yet loaded"), 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!'); return; } if (key === undefined || key === null || key === '') return; if (this.backend && this.backend.create) { var opts = _objectSpread$1(_objectSpread$1({}, options), {}, { isUpdate: isUpdate }); var fc = this.backend.create.bind(this.backend); if (fc.length < 6) { try { var r; if (fc.length === 5) { r = fc(languages, namespace, key, fallbackValue, opts); } else { r = fc(languages, namespace, key, fallbackValue); } if (r && typeof r.then === 'function') { r.then(function (data) { return clb(null, data); })["catch"](clb); } else { clb(null, r); } } catch (err) { clb(err); } } else { fc(languages, namespace, key, fallbackValue, clb, opts); } } if (!languages || !languages[0]) return; this.store.addResource(languages[0], namespace, key, fallbackValue); } }]); return Connector; }(EventEmitter); function get() { return { debug: false, initImmediate: true, ns: ['translation'], defaultNS: ['translation'], fallbackLng: ['dev'], fallbackNS: false, supportedLngs: false, nonExplicitSupportedLngs: false, load: 'all', preload: false, simplifyPluralSuffix: true, keySeparator: '.', nsSeparator: ':', pluralSeparator: '_', contextSeparator: '_', partialBundledLanguages: false, saveMissing: false, updateMissing: false, saveMissingTo: 'fallback', saveMissingPlurals: true, missingKeyHandler: false, missingInterpolationHandler: false, postProcess: false, postProcessPassResolved: false, returnNull: true, returnEmptyString: true, returnObjects: false, joinArrays: false, returnedObjectHandler: false, parseMissingKeyHandler: false, appendNamespaceToMissingKey: false, appendNamespaceToCIMode: false, overloadTranslationOptionHandler: function handle(args) { var ret = {}; if (_typeof$3(args[1]) === 'object') ret = args[1]; if (typeof args[1] === 'string') ret.defaultValue = args[1]; if (typeof args[2] === 'string') ret.tDescription = args[2]; if (_typeof$3(args[2]) === 'object' || _typeof$3(args[3]) === 'object') { var options = args[3] || args[2]; Object.keys(options).forEach(function (key) { ret[key] = options[key]; }); } return ret; }, interpolation: { escapeValue: true, format: function format(value, _format, lng, options) { return value; }, prefix: '{{', suffix: '}}', formatSeparator: ',', unescapePrefix: '-', nestingPrefix: '$t(', nestingSuffix: ')', nestingOptionsSeparator: ',', maxReplaces: 1000, skipOnVariables: true } }; } function transformOptions(options) { if (typeof options.ns === 'string') options.ns = [options.ns]; if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng]; if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS]; if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) { options.supportedLngs = options.supportedLngs.concat(['cimode']); } return options; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty$2(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } function noop() {} function bindMemberFunctions(inst) { var mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst)); mems.forEach(function (mem) { if (typeof inst[mem] === 'function') { inst[mem] = inst[mem].bind(inst); } }); } var I18n = function (_EventEmitter) { _inherits(I18n, _EventEmitter); var _super = _createSuper(I18n); function I18n() { var _this; var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var callback = arguments.length > 1 ? arguments[1] : undefined; _classCallCheck$1(this, I18n); _this = _super.call(this); if (isIE10) { EventEmitter.call(_assertThisInitialized(_this)); } _this.options = transformOptions(options); _this.services = {}; _this.logger = baseLogger; _this.modules = { external: [] }; bindMemberFunctions(_assertThisInitialized(_this)); if (callback && !_this.isInitialized && !options.isClone) { if (!_this.options.initImmediate) { _this.init(options, callback); return _possibleConstructorReturn(_this, _assertThisInitialized(_this)); } setTimeout(function () { _this.init(options, callback); }, 0); } return _this; } _createClass$1(I18n, [{ key: "init", value: function init() { var _this2 = this; var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var callback = arguments.length > 1 ? arguments[1] : undefined; if (typeof options === 'function') { callback = options; options = {}; } if (!options.defaultNS && options.defaultNS !== false && options.ns) { if (typeof options.ns === 'string') { options.defaultNS = options.ns; } else if (options.ns.indexOf('translation') < 0) { options.defaultNS = options.ns[0]; } } var defOpts = get(); this.options = _objectSpread(_objectSpread(_objectSpread({}, defOpts), this.options), transformOptions(options)); if (this.options.compatibilityAPI !== 'v1') { this.options.interpolation = _objectSpread(_objectSpread({}, defOpts.interpolation), this.options.interpolation); } if (options.keySeparator !== undefined) { this.options.userDefinedKeySeparator = options.keySeparator; } if (options.nsSeparator !== undefined) { this.options.userDefinedNsSeparator = options.nsSeparator; } function createClassOnDemand(ClassOrObject) { if (!ClassOrObject) return null; if (typeof ClassOrObject === 'function') return new ClassOrObject(); return ClassOrObject; } if (!this.options.isClone) { if (this.modules.logger) { baseLogger.init(createClassOnDemand(this.modules.logger), this.options); } else { baseLogger.init(null, this.options); } var formatter; if (this.modules.formatter) { formatter = this.modules.formatter; } else if (typeof Intl !== 'undefined') { formatter = Formatter; } var lu = new LanguageUtil(this.options); this.store = new ResourceStore(this.options.resources, this.options); var s = this.services; s.logger = baseLogger; s.resourceStore = this.store; s.languageUtils = lu; s.pluralResolver = new PluralResolver(lu, { prepend: this.options.pluralSeparator, compatibilityJSON: this.options.compatibilityJSON, simplifyPluralSuffix: this.options.simplifyPluralSuffix }); if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) { s.formatter = createClassOnDemand(formatter); s.formatter.init(s, this.options); this.options.interpolation.format = s.formatter.format.bind(s.formatter); } s.interpolator = new Interpolator(this.options); s.utils = { hasLoadedNamespace: this.hasLoadedNamespace.bind(this) }; s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options); s.backendConnector.on('*', function (event) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } _this2.emit.apply(_this2, [event].concat(args)); }); if (this.modules.languageDetector) { s.languageDetector = createClassOnDemand(this.modules.languageDetector); if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options); } if (this.modules.i18nFormat) { s.i18nFormat = createClassOnDemand(this.modules.i18nFormat); if (s.i18nFormat.init) s.i18nFormat.init(this); } this.translator = new Translator(this.services, this.options); this.translator.on('*', function (event) { for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { args[_key2 - 1] = arguments[_key2]; } _this2.emit.apply(_this2, [event].concat(args)); }); this.modules.external.forEach(function (m) { if (m.init) m.init(_this2); }); } this.format = this.options.interpolation.format; if (!callback) callback = noop; if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) { var codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng); if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0]; } if (!this.services.languageDetector && !this.options.lng) { this.logger.warn('init: no languageDetector is used and no lng is defined'); } var storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage']; storeApi.forEach(function (fcName) { _this2[fcName] = function () { var _this2$store; return (_this2$store = _this2.store)[fcName].apply(_this2$store, arguments); }; }); var storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle']; storeApiChained.forEach(function (fcName) { _this2[fcName] = function () { var _this2$store2; (_this2$store2 = _this2.store)[fcName].apply(_this2$store2, arguments); return _this2; }; }); var deferred = defer(); var load = function load() { var finish = function finish(err, t) { if (_this2.isInitialized && !_this2.initializedStoreOnce) _this2.logger.warn('init: i18next is already initialized. You should call init just once!'); _this2.isInitialized = true; if (!_this2.options.isClone) _this2.logger.log('initialized', _this2.options); _this2.emit('initialized', _this2.options); deferred.resolve(t); callback(err, t); }; if (_this2.languages && _this2.options.compatibilityAPI !== 'v1' && !_this2.isInitialized) return finish(null, _this2.t.bind(_this2)); _this2.changeLanguage(_this2.options.lng, finish); }; if (this.options.resources || !this.options.initImmediate) { load(); } else { setTimeout(load, 0); } return deferred; } }, { key: "loadResources", value: function loadResources(language) { var _this3 = this; var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop; var usedCallback = callback; var usedLng = typeof language === 'string' ? language : this.language; if (typeof language === 'function') usedCallback = language; if (!this.options.resources || this.options.partialBundledLanguages) { if (usedLng && usedLng.toLowerCase() === 'cimode') return usedCallback(); var toLoad = []; var append = function append(lng) { if (!lng) return; var lngs = _this3.services.languageUtils.toResolveHierarchy(lng); lngs.forEach(function (l) { if (toLoad.indexOf(l) < 0) toLoad.push(l); }); }; if (!usedLng) { var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng); fallbacks.forEach(function (l) { return append(l); }); } else { append(usedLng); } if (this.options.preload) { this.options.preload.forEach(function (l) { return append(l); }); } this.services.backendConnector.load(toLoad, this.options.ns, function (e) { if (!e && !_this3.resolvedLanguage && _this3.language) _this3.setResolvedLanguage(_this3.language); usedCallback(e); }); } else { usedCallback(null); } } }, { key: "reloadResources", value: function reloadResources(lngs, ns, callback) { var deferred = defer(); if (!lngs) lngs = this.languages; if (!ns) ns = this.options.ns; if (!callback) callback = noop; this.services.backendConnector.reload(lngs, ns, function (err) { deferred.resolve(); callback(err); }); return deferred; } }, { key: "use", value: function use(module) { if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()'); if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()'); if (module.type === 'backend') { this.modules.backend = module; } if (module.type === 'logger' || module.log && module.warn && module.error) { this.modules.logger = module; } if (module.type === 'languageDetector') { this.modules.languageDetector = module; } if (module.type === 'i18nFormat') { this.modules.i18nFormat = module; } if (module.type === 'postProcessor') { postProcessor.addPostProcessor(module); } if (module.type === 'formatter') { this.modules.formatter = module; } if (module.type === '3rdParty') { this.modules.external.push(module); } return this; } }, { key: "setResolvedLanguage", value: function setResolvedLanguage(l) { if (!l || !this.languages) return; if (['cimode', 'dev'].indexOf(l) > -1) return; for (var li = 0; li < this.languages.length; li++) { var lngInLngs = this.languages[li]; if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue; if (this.store.hasLanguageSomeTranslations(lngInLngs)) { this.resolvedLanguage = lngInLngs; break; } } } }, { key: "changeLanguage", value: function changeLanguage(lng, callback) { var _this4 = this; this.isLanguageChangingTo = lng; var deferred = defer(); this.emit('languageChanging', lng); var setLngProps = function setLngProps(l) { _this4.language = l; _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l); _this4.resolvedLanguage = undefined; _this4.setResolvedLanguage(l); }; var done = function done(err, l) { if (l) { setLngProps(l); _this4.translator.changeLanguage(l); _this4.isLanguageChangingTo = undefined; _this4.emit('languageChanged', l); _this4.logger.log('languageChanged', l); } else { _this4.isLanguageChangingTo = undefined; } deferred.resolve(function () { return _this4.t.apply(_this4, arguments); }); if (callback) callback(err, function () { return _this4.t.apply(_this4, arguments); }); }; var setLng = function setLng(lngs) { if (!lng && !lngs && _this4.services.languageDetector) lngs = []; var l = typeof lngs === 'string' ? lngs : _this4.services.languageUtils.getBestMatchFromCodes(lngs); if (l) { if (!_this4.language) { setLngProps(l); } if (!_this4.translator.language) _this4.translator.changeLanguage(l); if (_this4.services.languageDetector && _this4.services.languageDetector.cacheUserLanguage) _this4.services.languageDetector.cacheUserLanguage(l); } _this4.loadResources(l, function (err) { done(err, l); }); }; if (!lng && this.services.languageDetector && !this.services.languageDetector.async) { setLng(this.services.languageDetector.detect()); } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) { if (this.services.languageDetector.detect.length === 0) { this.services.languageDetector.detect().then(setLng); } else { this.services.languageDetector.detect(setLng); } } else { setLng(lng); } return deferred; } }, { key: "getFixedT", value: function getFixedT(lng, ns, keyPrefix) { var _this5 = this; var fixedT = function fixedT(key, opts) { var options; if (_typeof$3(opts) !== 'object') { for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) { rest[_key3 - 2] = arguments[_key3]; } options = _this5.options.overloadTranslationOptionHandler([key, opts].concat(rest)); } else { options = _objectSpread({}, opts); } options.lng = options.lng || fixedT.lng; options.lngs = options.lngs || fixedT.lngs; options.ns = options.ns || fixedT.ns; options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix; var keySeparator = _this5.options.keySeparator || '.'; var resultKey; if (options.keyPrefix && Array.isArray(key)) { resultKey = key.map(function (k) { return "".concat(options.keyPrefix).concat(keySeparator).concat(k); }); } else { resultKey = options.keyPrefix ? "".concat(options.keyPrefix).concat(keySeparator).concat(key) : key; } return _this5.t(resultKey, options); }; if (typeof lng === 'string') { fixedT.lng = lng; } else { fixedT.lngs = lng; } fixedT.ns = ns; fixedT.keyPrefix = keyPrefix; return fixedT; } }, { key: "t", value: function t() { var _this$translator; return this.translator && (_this$translator = this.translator).translate.apply(_this$translator, arguments); } }, { key: "exists", value: function exists() { var _this$translator2; return this.translator && (_this$translator2 = this.translator).exists.apply(_this$translator2, arguments); } }, { key: "setDefaultNamespace", value: function setDefaultNamespace(ns) { this.options.defaultNS = ns; } }, { key: "hasLoadedNamespace", value: function hasLoadedNamespace(ns) { var _this6 = this; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!this.isInitialized) { this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages); return false; } if (!this.languages || !this.languages.length) { this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages); return false; } var lng = this.resolvedLanguage || this.languages[0]; var fallbackLng = this.options ? this.options.fallbackLng : false; var lastLng = this.languages[this.languages.length - 1]; if (lng.toLowerCase() === 'cimode') return true; var loadNotPending = function loadNotPending(l, n) { var loadState = _this6.services.backendConnector.state["".concat(l, "|").concat(n)]; return loadState === -1 || loadState === 2; }; if (options.precheck) { var preResult = options.precheck(this, loadNotPending); if (preResult !== undefined) return preResult; } if (this.hasResourceBundle(lng, ns)) return true; if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true; if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true; return false; } }, { key: "loadNamespaces", value: function loadNamespaces(ns, callback) { var _this7 = this; var deferred = defer(); if (!this.options.ns) { if (callback) callback(); return Promise.resolve(); } if (typeof ns === 'string') ns = [ns]; ns.forEach(function (n) { if (_this7.options.ns.indexOf(n) < 0) _this7.options.ns.push(n); }); this.loadResources(function (err) { deferred.resolve(); if (callback) callback(err); }); return deferred; } }, { key: "loadLanguages", value: function loadLanguages(lngs, callback) { var deferred = defer(); if (typeof lngs === 'string') lngs = [lngs]; var preloaded = this.options.preload || []; var newLngs = lngs.filter(function (lng) { return preloaded.indexOf(lng) < 0; }); if (!newLngs.length) { if (callback) callback(); return Promise.resolve(); } this.options.preload = preloaded.concat(newLngs); this.loadResources(function (err) { deferred.resolve(); if (callback) callback(err); }); return deferred; } }, { key: "dir", value: function dir(lng) { if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language); if (!lng) return 'rtl'; var rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb']; var languageUtils = this.services && this.services.languageUtils || new LanguageUtil(get()); return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr'; } }, { key: "cloneInstance", value: function cloneInstance() { var _this8 = this; var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop; var mergedOptions = _objectSpread(_objectSpread(_objectSpread({}, this.options), options), { isClone: true }); var clone = new I18n(mergedOptions); if (options.debug !== undefined || options.prefix !== undefined) { clone.logger = clone.logger.clone(options); } var membersToCopy = ['store', 'services', 'language']; membersToCopy.forEach(function (m) { clone[m] = _this8[m]; }); clone.services = _objectSpread({}, this.services); clone.services.utils = { hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone) }; clone.translator = new Translator(clone.services, clone.options); clone.translator.on('*', function (event) { for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { args[_key4 - 1] = arguments[_key4]; } clone.emit.apply(clone, [event].concat(args)); }); clone.init(mergedOptions, callback); clone.translator.options = clone.options; clone.translator.backendConnector.services.utils = { hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone) }; return clone; } }, { key: "toJSON", value: function toJSON() { return { options: this.options, store: this.store, language: this.language, languages: this.languages, resolvedLanguage: this.resolvedLanguage }; } }]); return I18n; }(EventEmitter); _defineProperty$2(I18n, "createInstance", function () { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var callback = arguments.length > 1 ? arguments[1] : undefined; return new I18n(options, callback); }); var instance = I18n.createInstance(); instance.createInstance = I18n.createInstance; instance.createInstance; instance.dir; instance.init; instance.loadResources; instance.reloadResources; instance.use; instance.changeLanguage; instance.getFixedT; instance.t; instance.exists; instance.setDefaultNamespace; instance.hasLoadedNamespace; instance.loadNamespaces; instance.loadLanguages; var arr$1 = []; var each$1 = arr$1.forEach; var slice$1 = arr$1.slice; function defaults$1(obj) { each$1.call(slice$1.call(arguments, 1), function (source) { if (source) { for (var prop in source) { if (obj[prop] === undefined) obj[prop] = source[prop]; } } }); return obj; } // eslint-disable-next-line no-control-regex var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/; var serializeCookie = function serializeCookie(name, val, options) { var opt = options || {}; opt.path = opt.path || '/'; var value = encodeURIComponent(val); var str = "".concat(name, "=").concat(value); if (opt.maxAge > 0) { var maxAge = opt.maxAge - 0; if (Number.isNaN(maxAge)) throw new Error('maxAge should be a Number'); str += "; Max-Age=".concat(Math.floor(maxAge)); } if (opt.domain) { if (!fieldContentRegExp.test(opt.domain)) { throw new TypeError('option domain is invalid'); } str += "; Domain=".concat(opt.domain); } if (opt.path) { if (!fieldContentRegExp.test(opt.path)) { throw new TypeError('option path is invalid'); } str += "; Path=".concat(opt.path); } if (opt.expires) { if (typeof opt.expires.toUTCString !== 'function') { throw new TypeError('option expires is invalid'); } str += "; Expires=".concat(opt.expires.toUTCString()); } if (opt.httpOnly) str += '; HttpOnly'; if (opt.secure) str += '; Secure'; if (opt.sameSite) { var sameSite = typeof opt.sameSite === 'string' ? opt.sameSite.toLowerCase() : opt.sameSite; switch (sameSite) { case true: str += '; SameSite=Strict'; break; case 'lax': str += '; SameSite=Lax'; break; case 'strict': str += '; SameSite=Strict'; break; case 'none': str += '; SameSite=None'; break; default: throw new TypeError('option sameSite is invalid'); } } return str; }; var cookie = { create: function create(name, value, minutes, domain) { var cookieOptions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { path: '/', sameSite: 'strict' }; if (minutes) { cookieOptions.expires = new Date(); cookieOptions.expires.setTime(cookieOptions.expires.getTime() + minutes * 60 * 1000); } if (domain) cookieOptions.domain = domain; document.cookie = serializeCookie(name, encodeURIComponent(value), cookieOptions); }, read: function read(name) { var nameEQ = "".concat(name, "="); var ca = document.cookie.split(';'); for (var i = 0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0) === ' ') { c = c.substring(1, c.length); } if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length); } return null; }, remove: function remove(name) { this.create(name, '', -1); } }; var cookie$1 = { name: 'cookie', lookup: function lookup(options) { var found; if (options.lookupCookie && typeof document !== 'undefined') { var c = cookie.read(options.lookupCookie); if (c) found = c; } return found; }, cacheUserLanguage: function cacheUserLanguage(lng, options) { if (options.lookupCookie && typeof document !== 'undefined') { cookie.create(options.lookupCookie, lng, options.cookieMinutes, options.cookieDomain, options.cookieOptions); } } }; var querystring = { name: 'querystring', lookup: function lookup(options) { var found; if (typeof window !== 'undefined') { var search = window.location.search; if (!window.location.search && window.location.hash && window.location.hash.indexOf('?') > -1) { search = window.location.hash.substring(window.location.hash.indexOf('?')); } var query = search.substring(1); var params = query.split('&'); for (var i = 0; i < params.length; i++) { var pos = params[i].indexOf('='); if (pos > 0) { var key = params[i].substring(0, pos); if (key === options.lookupQuerystring) { found = params[i].substring(pos + 1); } } } } return found; } }; var hasLocalStorageSupport = null; var localStorageAvailable = function localStorageAvailable() { if (hasLocalStorageSupport !== null) return hasLocalStorageSupport; try { hasLocalStorageSupport = window !== 'undefined' && window.localStorage !== null; var testKey = 'i18next.translate.boo'; window.localStorage.setItem(testKey, 'foo'); window.localStorage.removeItem(testKey); } catch (e) { hasLocalStorageSupport = false; } return hasLocalStorageSupport; }; var localStorage = { name: 'localStorage', lookup: function lookup(options) { var found; if (options.lookupLocalStorage && localStorageAvailable()) { var lng = window.localStorage.getItem(options.lookupLocalStorage); if (lng) found = lng; } return found; }, cacheUserLanguage: function cacheUserLanguage(lng, options) { if (options.lookupLocalStorage && localStorageAvailable()) { window.localStorage.setItem(options.lookupLocalStorage, lng); } } }; var hasSessionStorageSupport = null; var sessionStorageAvailable = function sessionStorageAvailable() { if (hasSessionStorageSupport !== null) return hasSessionStorageSupport; try { hasSessionStorageSupport = window !== 'undefined' && window.sessionStorage !== null; var testKey = 'i18next.translate.boo'; window.sessionStorage.setItem(testKey, 'foo'); window.sessionStorage.removeItem(testKey); } catch (e) { hasSessionStorageSupport = false; } return hasSessionStorageSupport; }; var sessionStorage = { name: 'sessionStorage', lookup: function lookup(options) { var found; if (options.lookupSessionStorage && sessionStorageAvailable()) { var lng = window.sessionStorage.getItem(options.lookupSessionStorage); if (lng) found = lng; } return found; }, cacheUserLanguage: function cacheUserLanguage(lng, options) { if (options.lookupSessionStorage && sessionStorageAvailable()) { window.sessionStorage.setItem(options.lookupSessionStorage, lng); } } }; var navigator$1 = { name: 'navigator', lookup: function lookup(options) { var found = []; if (typeof navigator !== 'undefined') { if (navigator.languages) { // chrome only; not an array, so can't use .push.apply instead of iterating for (var i = 0; i < navigator.languages.length; i++) { found.push(navigator.languages[i]); } } if (navigator.userLanguage) { found.push(navigator.userLanguage); } if (navigator.language) { found.push(navigator.language); } } return found.length > 0 ? found : undefined; } }; var htmlTag = { name: 'htmlTag', lookup: function lookup(options) { var found; var htmlTag = options.htmlTag || (typeof document !== 'undefined' ? document.documentElement : null); if (htmlTag && typeof htmlTag.getAttribute === 'function') { found = htmlTag.getAttribute('lang'); } return found; } }; var path = { name: 'path', lookup: function lookup(options) { var found; if (typeof window !== 'undefined') { var language = window.location.pathname.match(/\/([a-zA-Z-]*)/g); if (language instanceof Array) { if (typeof options.lookupFromPathIndex === 'number') { if (typeof language[options.lookupFromPathIndex] !== 'string') { return undefined; } found = language[options.lookupFromPathIndex].replace('/', ''); } else { found = language[0].replace('/', ''); } } } return found; } }; var subdomain = { name: 'subdomain', lookup: function lookup(options) { // If given get the subdomain index else 1 var lookupFromSubdomainIndex = typeof options.lookupFromSubdomainIndex === 'number' ? options.lookupFromSubdomainIndex + 1 : 1; // get all matches if window.location. is existing // first item of match is the match itself and the second is the first group macht which sould be the first subdomain match // is the hostname no public domain get the or option of localhost var language = typeof window !== 'undefined' && window.location && window.location.hostname && window.location.hostname.match(/^(\w{2,5})\.(([a-z0-9-]{1,63}\.[a-z]{2,6})|localhost)/i); // if there is no match (null) return undefined if (!language) return undefined; // return the given group match return language[lookupFromSubdomainIndex]; } }; function getDefaults$1() { return { order: ['querystring', 'cookie', 'localStorage', 'sessionStorage', 'navigator', 'htmlTag'], lookupQuerystring: 'lng', lookupCookie: 'i18next', lookupLocalStorage: 'i18nextLng', lookupSessionStorage: 'i18nextLng', // cache user language caches: ['localStorage'], excludeCacheFor: ['cimode'] // cookieMinutes: 10, // cookieDomain: 'myDomain' }; } var Browser = /*#__PURE__*/function () { function Browser(services) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; _classCallCheck$1(this, Browser); this.type = 'languageDetector'; this.detectors = {}; this.init(services, options); } _createClass$1(Browser, [{ key: "init", value: function init(services) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var i18nOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; this.services = services; this.options = defaults$1(options, this.options || {}, getDefaults$1()); // backwards compatibility if (this.options.lookupFromUrlIndex) this.options.lookupFromPathIndex = this.options.lookupFromUrlIndex; this.i18nOptions = i18nOptions; this.addDetector(cookie$1); this.addDetector(querystring); this.addDetector(localStorage); this.addDetector(sessionStorage); this.addDetector(navigator$1); this.addDetector(htmlTag); this.addDetector(path); this.addDetector(subdomain); } }, { key: "addDetector", value: function addDetector(detector) { this.detectors[detector.name] = detector; } }, { key: "detect", value: function detect(detectionOrder) { var _this = this; if (!detectionOrder) detectionOrder = this.options.order; var detected = []; detectionOrder.forEach(function (detectorName) { if (_this.detectors[detectorName]) { var lookup = _this.detectors[detectorName].lookup(_this.options); if (lookup && typeof lookup === 'string') lookup = [lookup]; if (lookup) detected = detected.concat(lookup); } }); if (this.services.languageUtils.getBestMatchFromCodes) return detected; // new i18next v19.5.0 return detected.length > 0 ? detected[0] : null; // a little backward compatibility } }, { key: "cacheUserLanguage", value: function cacheUserLanguage(lng, caches) { var _this2 = this; if (!caches) caches = this.options.caches; if (!caches) return; if (this.options.excludeCacheFor && this.options.excludeCacheFor.indexOf(lng) > -1) return; caches.forEach(function (cacheName) { if (_this2.detectors[cacheName]) _this2.detectors[cacheName].cacheUserLanguage(lng, _this2.options); }); } }]); return Browser; }(); Browser.type = 'languageDetector'; function _typeof$2(obj) { "@babel/helpers - typeof"; return _typeof$2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof$2(obj); } var arr = []; var each = arr.forEach; var slice = arr.slice; function defaults(obj) { each.call(slice.call(arguments, 1), function (source) { if (source) { for (var prop in source) { if (obj[prop] === undefined) obj[prop] = source[prop]; } } }); return obj; } function hasXMLHttpRequest() { return typeof XMLHttpRequest === 'function' || (typeof XMLHttpRequest === "undefined" ? "undefined" : _typeof$2(XMLHttpRequest)) === 'object'; } function isPromise(maybePromise) { return !!maybePromise && typeof maybePromise.then === 'function'; } function makePromise(maybePromise) { if (isPromise(maybePromise)) { return maybePromise; } return Promise.resolve(maybePromise); } function commonjsRequire(path) { throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.'); } var getFetch$1 = {exports: {}}; var browserPonyfill = {exports: {}}; var hasRequiredBrowserPonyfill; function requireBrowserPonyfill () { if (hasRequiredBrowserPonyfill) return browserPonyfill.exports; hasRequiredBrowserPonyfill = 1; (function (module, exports) { var global = typeof self !== 'undefined' ? self : commonjsGlobal; var __self__ = (function () { function F() { this.fetch = false; this.DOMException = global.DOMException; } F.prototype = global; return new F(); })(); (function(self) { ((function (exports) { var support = { searchParams: 'URLSearchParams' in self, iterable: 'Symbol' in self && 'iterator' in Symbol, blob: 'FileReader' in self && 'Blob' in self && (function() { try { new Blob(); return true } catch (e) { return false } })(), formData: 'FormData' in self, arrayBuffer: 'ArrayBuffer' in self }; function isDataView(obj) { return obj && DataView.prototype.isPrototypeOf(obj) } if (support.arrayBuffer) { var viewClasses = [ '[object Int8Array]', '[object Uint8Array]', '[object Uint8ClampedArray]', '[object Int16Array]', '[object Uint16Array]', '[object Int32Array]', '[object Uint32Array]', '[object Float32Array]', '[object Float64Array]' ]; var isArrayBufferView = ArrayBuffer.isView || function(obj) { return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1 }; } function normalizeName(name) { if (typeof name !== 'string') { name = String(name); } if (/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(name)) { throw new TypeError('Invalid character in header field name') } return name.toLowerCase() } function normalizeValue(value) { if (typeof value !== 'string') { value = String(value); } return value } // Build a destructive iterator for the value list function iteratorFor(items) { var iterator = { next: function() { var value = items.shift(); return {done: value === undefined, value: value} } }; if (support.iterable) { iterator[Symbol.iterator] = function() { return iterator }; } return iterator } function Headers(headers) { this.map = {}; if (headers instanceof Headers) { headers.forEach(function(value, name) { this.append(name, value); }, this); } else if (Array.isArray(headers)) { headers.forEach(function(header) { this.append(header[0], header[1]); }, this); } else if (headers) { Object.getOwnPropertyNames(headers).forEach(function(name) { this.append(name, headers[name]); }, this); } } Headers.prototype.append = function(name, value) { name = normalizeName(name); value = normalizeValue(value); var oldValue = this.map[name]; this.map[name] = oldValue ? oldValue + ', ' + value : value; }; Headers.prototype['delete'] = function(name) { delete this.map[normalizeName(name)]; }; Headers.prototype.get = function(name) { name = normalizeName(name); return this.has(name) ? this.map[name] : null }; Headers.prototype.has = function(name) { return this.map.hasOwnProperty(normalizeName(name)) }; Headers.prototype.set = function(name, value) { this.map[normalizeName(name)] = normalizeValue(value); }; Headers.prototype.forEach = function(callback, thisArg) { for (var name in this.map) { if (this.map.hasOwnProperty(name)) { callback.call(thisArg, this.map[name], name, this); } } }; Headers.prototype.keys = function() { var items = []; this.forEach(function(value, name) { items.push(name); }); return iteratorFor(items) }; Headers.prototype.values = function() { var items = []; this.forEach(function(value) { items.push(value); }); return iteratorFor(items) }; Headers.prototype.entries = function() { var items = []; this.forEach(function(value, name) { items.push([name, value]); }); return iteratorFor(items) }; if (support.iterable) { Headers.prototype[Symbol.iterator] = Headers.prototype.entries; } function consumed(body) { if (body.bodyUsed) { return Promise.reject(new TypeError('Already read')) } body.bodyUsed = true; } function fileReaderReady(reader) { return new Promise(function(resolve, reject) { reader.onload = function() { resolve(reader.result); }; reader.onerror = function() { reject(reader.error); }; }) } function readBlobAsArrayBuffer(blob) { var reader = new FileReader(); var promise = fileReaderReady(reader); reader.readAsArrayBuffer(blob); return promise } function readBlobAsText(blob) { var reader = new FileReader(); var promise = fileReaderReady(reader); reader.readAsText(blob); return promise } function readArrayBufferAsText(buf) { var view = new Uint8Array(buf); var chars = new Array(view.length); for (var i = 0; i < view.length; i++) { chars[i] = String.fromCharCode(view[i]); } return chars.join('') } function bufferClone(buf) { if (buf.slice) { return buf.slice(0) } else { var view = new Uint8Array(buf.byteLength); view.set(new Uint8Array(buf)); return view.buffer } } function Body() { this.bodyUsed = false; this._initBody = function(body) { this._bodyInit = body; if (!body) { this._bodyText = ''; } else if (typeof body === 'string') { this._bodyText = body; } else if (support.blob && Blob.prototype.isPrototypeOf(body)) { this._bodyBlob = body; } else if (support.formData && FormData.prototype.isPrototypeOf(body)) { this._bodyFormData = body; } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { this._bodyText = body.toString(); } else if (support.arrayBuffer && support.blob && isDataView(body)) { this._bodyArrayBuffer = bufferClone(body.buffer); // IE 10-11 can't handle a DataView body. this._bodyInit = new Blob([this._bodyArrayBuffer]); } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) { this._bodyArrayBuffer = bufferClone(body); } else { this._bodyText = body = Object.prototype.toString.call(body); } if (!this.headers.get('content-type')) { if (typeof body === 'string') { this.headers.set('content-type', 'text/plain;charset=UTF-8'); } else if (this._bodyBlob && this._bodyBlob.type) { this.headers.set('content-type', this._bodyBlob.type); } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) { this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); } } }; if (support.blob) { this.blob = function() { var rejected = consumed(this); if (rejected) { return rejected } if (this._bodyBlob) { return Promise.resolve(this._bodyBlob) } else if (this._bodyArrayBuffer) { return Promise.resolve(new Blob([this._bodyArrayBuffer])) } else if (this._bodyFormData) { throw new Error('could not read FormData body as blob') } else { return Promise.resolve(new Blob([this._bodyText])) } }; this.arrayBuffer = function() { if (this._bodyArrayBuffer) { return consumed(this) || Promise.resolve(this._bodyArrayBuffer) } else { return this.blob().then(readBlobAsArrayBuffer) } }; } this.text = function() { var rejected = consumed(this); if (rejected) { return rejected } if (this._bodyBlob) { return readBlobAsText(this._bodyBlob) } else if (this._bodyArrayBuffer) { return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer)) } else if (this._bodyFormData) { throw new Error('could not read FormData body as text') } else { return Promise.resolve(this._bodyText) } }; if (support.formData) { this.formData = function() { return this.text().then(decode) }; } this.json = function() { return this.text().then(JSON.parse) }; return this } // HTTP methods whose capitalization should be normalized var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']; function normalizeMethod(method) { var upcased = method.toUpperCase(); return methods.indexOf(upcased) > -1 ? upcased : method } function Request(input, options) { options = options || {}; var body = options.body; if (input instanceof Request) { if (input.bodyUsed) { throw new TypeError('Already read') } this.url = input.url; this.credentials = input.credentials; if (!options.headers) { this.headers = new Headers(input.headers); } this.method = input.method; this.mode = input.mode; this.signal = input.signal; if (!body && input._bodyInit != null) { body = input._bodyInit; input.bodyUsed = true; } } else { this.url = String(input); } this.credentials = options.credentials || this.credentials || 'same-origin'; if (options.headers || !this.headers) { this.headers = new Headers(options.headers); } this.method = normalizeMethod(options.method || this.method || 'GET'); this.mode = options.mode || this.mode || null; this.signal = options.signal || this.signal; this.referrer = null; if ((this.method === 'GET' || this.method === 'HEAD') && body) { throw new TypeError('Body not allowed for GET or HEAD requests') } this._initBody(body); } Request.prototype.clone = function() { return new Request(this, {body: this._bodyInit}) }; function decode(body) { var form = new FormData(); body .trim() .split('&') .forEach(function(bytes) { if (bytes) { var split = bytes.split('='); var name = split.shift().replace(/\+/g, ' '); var value = split.join('=').replace(/\+/g, ' '); form.append(decodeURIComponent(name), decodeURIComponent(value)); } }); return form } function parseHeaders(rawHeaders) { var headers = new Headers(); // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space // https://tools.ietf.org/html/rfc7230#section-3.2 var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' '); preProcessedHeaders.split(/\r?\n/).forEach(function(line) { var parts = line.split(':'); var key = parts.shift().trim(); if (key) { var value = parts.join(':').trim(); headers.append(key, value); } }); return headers } Body.call(Request.prototype); function Response(bodyInit, options) { if (!options) { options = {}; } this.type = 'default'; this.status = options.status === undefined ? 200 : options.status; this.ok = this.status >= 200 && this.status < 300; this.statusText = 'statusText' in options ? options.statusText : 'OK'; this.headers = new Headers(options.headers); this.url = options.url || ''; this._initBody(bodyInit); } Body.call(Response.prototype); Response.prototype.clone = function() { return new Response(this._bodyInit, { status: this.status, statusText: this.statusText, headers: new Headers(this.headers), url: this.url }) }; Response.error = function() { var response = new Response(null, {status: 0, statusText: ''}); response.type = 'error'; return response }; var redirectStatuses = [301, 302, 303, 307, 308]; Response.redirect = function(url, status) { if (redirectStatuses.indexOf(status) === -1) { throw new RangeError('Invalid status code') } return new Response(null, {status: status, headers: {location: url}}) }; exports.DOMException = self.DOMException; try { new exports.DOMException(); } catch (err) { exports.DOMException = function(message, name) { this.message = message; this.name = name; var error = Error(message); this.stack = error.stack; }; exports.DOMException.prototype = Object.create(Error.prototype); exports.DOMException.prototype.constructor = exports.DOMException; } function fetch(input, init) { return new Promise(function(resolve, reject) { var request = new Request(input, init); if (request.signal && request.signal.aborted) { return reject(new exports.DOMException('Aborted', 'AbortError')) } var xhr = new XMLHttpRequest(); function abortXhr() { xhr.abort(); } xhr.onload = function() { var options = { status: xhr.status, statusText: xhr.statusText, headers: parseHeaders(xhr.getAllResponseHeaders() || '') }; options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL'); var body = 'response' in xhr ? xhr.response : xhr.responseText; resolve(new Response(body, options)); }; xhr.onerror = function() { reject(new TypeError('Network request failed')); }; xhr.ontimeout = function() { reject(new TypeError('Network request failed')); }; xhr.onabort = function() { reject(new exports.DOMException('Aborted', 'AbortError')); }; xhr.open(request.method, request.url, true); if (request.credentials === 'include') { xhr.withCredentials = true; } else if (request.credentials === 'omit') { xhr.withCredentials = false; } if ('responseType' in xhr && support.blob) { xhr.responseType = 'blob'; } request.headers.forEach(function(value, name) { xhr.setRequestHeader(name, value); }); if (request.signal) { request.signal.addEventListener('abort', abortXhr); xhr.onreadystatechange = function() { // DONE (success or failure) if (xhr.readyState === 4) { request.signal.removeEventListener('abort', abortXhr); } }; } xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit); }) } fetch.polyfill = true; if (!self.fetch) { self.fetch = fetch; self.Headers = Headers; self.Request = Request; self.Response = Response; } exports.Headers = Headers; exports.Request = Request; exports.Response = Response; exports.fetch = fetch; Object.defineProperty(exports, '__esModule', { value: true }); return exports; }))({}); })(__self__); __self__.fetch.ponyfill = true; // Remove "polyfill" property added by whatwg-fetch delete __self__.fetch.polyfill; // Choose between native implementation (global) or custom implementation (__self__) // var ctx = global.fetch ? global : __self__; var ctx = __self__; // this line disable service worker support temporarily exports = ctx.fetch; // To enable: import fetch from 'cross-fetch' exports.default = ctx.fetch; // For TypeScript consumers without esModuleInterop. exports.fetch = ctx.fetch; // To enable: import {fetch} from 'cross-fetch' exports.Headers = ctx.Headers; exports.Request = ctx.Request; exports.Response = ctx.Response; module.exports = exports; } (browserPonyfill, browserPonyfill.exports)); return browserPonyfill.exports; } (function (module, exports) { var fetchApi; if (typeof fetch === 'function') { if (typeof commonjsGlobal !== 'undefined' && commonjsGlobal.fetch) { fetchApi = commonjsGlobal.fetch; } else if (typeof window !== 'undefined' && window.fetch) { fetchApi = window.fetch; } else { fetchApi = fetch; } } if (typeof commonjsRequire !== 'undefined' && (typeof window === 'undefined' || typeof window.document === 'undefined')) { var f = fetchApi || requireBrowserPonyfill(); if (f.default) f = f.default; exports.default = f; module.exports = exports.default; } } (getFetch$1, getFetch$1.exports)); var getFetchExports = getFetch$1.exports; var getFetch = /*@__PURE__*/getDefaultExportFromCjs(getFetchExports); var fetchNode = /*#__PURE__*/_mergeNamespaces({ __proto__: null, default: getFetch }, [getFetchExports]); function _typeof$1(obj) { "@babel/helpers - typeof"; return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof$1(obj); } var fetchApi; if (typeof fetch === 'function') { if (typeof global !== 'undefined' && global.fetch) { fetchApi = global.fetch; } else if (typeof window !== 'undefined' && window.fetch) { fetchApi = window.fetch; } else { fetchApi = fetch; } } var XmlHttpRequestApi; if (hasXMLHttpRequest()) { if (typeof global !== 'undefined' && global.XMLHttpRequest) { XmlHttpRequestApi = global.XMLHttpRequest; } else if (typeof window !== 'undefined' && window.XMLHttpRequest) { XmlHttpRequestApi = window.XMLHttpRequest; } } var ActiveXObjectApi; if (typeof ActiveXObject === 'function') { if (typeof global !== 'undefined' && global.ActiveXObject) { ActiveXObjectApi = global.ActiveXObject; } else if (typeof window !== 'undefined' && window.ActiveXObject) { ActiveXObjectApi = window.ActiveXObject; } } if (!fetchApi && fetchNode && !XmlHttpRequestApi && !ActiveXObjectApi) fetchApi = getFetch || fetchNode; if (typeof fetchApi !== 'function') fetchApi = undefined; var addQueryString = function addQueryString(url, params) { if (params && _typeof$1(params) === 'object') { var queryString = ''; for (var paramName in params) { queryString += '&' + encodeURIComponent(paramName) + '=' + encodeURIComponent(params[paramName]); } if (!queryString) return url; url = url + (url.indexOf('?') !== -1 ? '&' : '?') + queryString.slice(1); } return url; }; var fetchIt = function fetchIt(url, fetchOptions, callback) { fetchApi(url, fetchOptions).then(function (response) { if (!response.ok) return callback(response.statusText || 'Error', { status: response.status }); response.text().then(function (data) { callback(null, { status: response.status, data: data }); }).catch(callback); }).catch(callback); }; var omitFetchOptions = false; var requestWithFetch = function requestWithFetch(options, url, payload, callback) { if (options.queryStringParams) { url = addQueryString(url, options.queryStringParams); } var headers = defaults({}, typeof options.customHeaders === 'function' ? options.customHeaders() : options.customHeaders); if (payload) headers['Content-Type'] = 'application/json'; var reqOptions = typeof options.requestOptions === 'function' ? options.requestOptions(payload) : options.requestOptions; var fetchOptions = defaults({ method: payload ? 'POST' : 'GET', body: payload ? options.stringify(payload) : undefined, headers: headers }, omitFetchOptions ? {} : reqOptions); try { fetchIt(url, fetchOptions, callback); } catch (e) { if (!reqOptions || Object.keys(reqOptions).length === 0 || !e.message || e.message.indexOf('not implemented') < 0) { return callback(e); } try { Object.keys(reqOptions).forEach(function (opt) { delete fetchOptions[opt]; }); fetchIt(url, fetchOptions, callback); omitFetchOptions = true; } catch (err) { callback(err); } } }; var requestWithXmlHttpRequest = function requestWithXmlHttpRequest(options, url, payload, callback) { if (payload && _typeof$1(payload) === 'object') { payload = addQueryString('', payload).slice(1); } if (options.queryStringParams) { url = addQueryString(url, options.queryStringParams); } try { var x; if (XmlHttpRequestApi) { x = new XmlHttpRequestApi(); } else { x = new ActiveXObjectApi('MSXML2.XMLHTTP.3.0'); } x.open(payload ? 'POST' : 'GET', url, 1); if (!options.crossDomain) { x.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); } x.withCredentials = !!options.withCredentials; if (payload) { x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); } if (x.overrideMimeType) { x.overrideMimeType('application/json'); } var h = options.customHeaders; h = typeof h === 'function' ? h() : h; if (h) { for (var i in h) { x.setRequestHeader(i, h[i]); } } x.onreadystatechange = function () { x.readyState > 3 && callback(x.status >= 400 ? x.statusText : null, { status: x.status, data: x.responseText }); }; x.send(payload); } catch (e) { console && console.log(e); } }; var request = function request(options, url, payload, callback) { if (typeof payload === 'function') { callback = payload; payload = undefined; } callback = callback || function () {}; if (fetchApi && url.indexOf('file:') !== 0) { return requestWithFetch(options, url, payload, callback); } if (hasXMLHttpRequest() || typeof ActiveXObject === 'function') { return requestWithXmlHttpRequest(options, url, payload, callback); } callback(new Error('No fetch and no xhr implementation found!')); }; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } var getDefaults = function getDefaults() { return { loadPath: '/locales/{{lng}}/{{ns}}.json', addPath: '/locales/add/{{lng}}/{{ns}}', allowMultiLoading: false, parse: function parse(data) { return JSON.parse(data); }, stringify: JSON.stringify, parsePayload: function parsePayload(namespace, key, fallbackValue) { return _defineProperty({}, key, fallbackValue || ''); }, parseLoadPayload: function parseLoadPayload(languages, namespaces) { return undefined; }, request: request, reloadInterval: typeof window !== 'undefined' ? false : 60 * 60 * 1000, customHeaders: {}, queryStringParams: {}, crossDomain: false, withCredentials: false, overrideMimeType: false, requestOptions: { mode: 'cors', credentials: 'same-origin', cache: 'default' } }; }; var Backend = function () { function Backend(services) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var allOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; _classCallCheck(this, Backend); this.services = services; this.options = options; this.allOptions = allOptions; this.type = 'backend'; this.init(services, options, allOptions); } _createClass(Backend, [{ key: "init", value: function init(services) { var _this = this; var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var allOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; this.services = services; this.options = defaults(options, this.options || {}, getDefaults()); this.allOptions = allOptions; if (this.services && this.options.reloadInterval) { setInterval(function () { return _this.reload(); }, this.options.reloadInterval); } } }, { key: "readMulti", value: function readMulti(languages, namespaces, callback) { this._readAny(languages, languages, namespaces, namespaces, callback); } }, { key: "read", value: function read(language, namespace, callback) { this._readAny([language], language, [namespace], namespace, callback); } }, { key: "_readAny", value: function _readAny(languages, loadUrlLanguages, namespaces, loadUrlNamespaces, callback) { var _this2 = this; var loadPath = this.options.loadPath; if (typeof this.options.loadPath === 'function') { loadPath = this.options.loadPath(languages, namespaces); } loadPath = makePromise(loadPath); loadPath.then(function (resolvedLoadPath) { if (!resolvedLoadPath) return callback(null, {}); var url = _this2.services.interpolator.interpolate(resolvedLoadPath, { lng: languages.join('+'), ns: namespaces.join('+') }); _this2.loadUrl(url, callback, loadUrlLanguages, loadUrlNamespaces); }); } }, { key: "loadUrl", value: function loadUrl(url, callback, languages, namespaces) { var _this3 = this; var lng = typeof languages === 'string' ? [languages] : languages; var ns = typeof namespaces === 'string' ? [namespaces] : namespaces; var payload = this.options.parseLoadPayload(lng, ns); this.options.request(this.options, url, payload, function (err, res) { if (res && (res.status >= 500 && res.status < 600 || !res.status)) return callback('failed loading ' + url + '; status code: ' + res.status, true); if (res && res.status >= 400 && res.status < 500) return callback('failed loading ' + url + '; status code: ' + res.status, false); if (!res && err && err.message && err.message.indexOf('Failed to fetch') > -1) return callback('failed loading ' + url + ': ' + err.message, true); if (err) return callback(err, false); var ret, parseErr; try { if (typeof res.data === 'string') { ret = _this3.options.parse(res.data, languages, namespaces); } else { ret = res.data; } } catch (e) { parseErr = 'failed parsing ' + url + ' to json'; } if (parseErr) return callback(parseErr, false); callback(null, ret); }); } }, { key: "create", value: function create(languages, namespace, key, fallbackValue, callback) { var _this4 = this; if (!this.options.addPath) return; if (typeof languages === 'string') languages = [languages]; var payload = this.options.parsePayload(namespace, key, fallbackValue); var finished = 0; var dataArray = []; var resArray = []; languages.forEach(function (lng) { var addPath = _this4.options.addPath; if (typeof _this4.options.addPath === 'function') { addPath = _this4.options.addPath(lng, namespace); } var url = _this4.services.interpolator.interpolate(addPath, { lng: lng, ns: namespace }); _this4.options.request(_this4.options, url, payload, function (data, res) { finished += 1; dataArray.push(data); resArray.push(res); if (finished === languages.length) { if (typeof callback === 'function') callback(dataArray, resArray); } }); }); } }, { key: "reload", value: function reload() { var _this5 = this; var _this$services = this.services, backendConnector = _this$services.backendConnector, languageUtils = _this$services.languageUtils, logger = _this$services.logger; var currentLanguage = backendConnector.language; if (currentLanguage && currentLanguage.toLowerCase() === 'cimode') return; var toLoad = []; var append = function append(lng) { var lngs = languageUtils.toResolveHierarchy(lng); lngs.forEach(function (l) { if (toLoad.indexOf(l) < 0) toLoad.push(l); }); }; append(currentLanguage); if (this.allOptions.preload) this.allOptions.preload.forEach(function (l) { return append(l); }); toLoad.forEach(function (lng) { _this5.allOptions.ns.forEach(function (ns) { backendConnector.read(lng, ns, 'read', null, null, function (err, data) { if (err) logger.warn("loading namespace ".concat(ns, " for language ").concat(lng, " failed"), err); if (!err && data) logger.log("loaded namespace ".concat(ns, " for language ").concat(lng), data); backendConnector.loaded("".concat(lng, "|").concat(ns), err, data); }); }); }); } }]); return Backend; }(); Backend.type = 'backend'; /** * The base implementation of `_.findIndex` and `_.findLastIndex` without * support for iteratee shorthands. * * @private * @param {Array} array The array to inspect. * @param {Function} predicate The function invoked per iteration. * @param {number} fromIndex The index to search from. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseFindIndex$1(array, predicate, fromIndex, fromRight) { var length = array.length, index = fromIndex + (fromRight ? 1 : -1); while ((fromRight ? index-- : ++index < length)) { if (predicate(array[index], index, array)) { return index; } } return -1; } var _baseFindIndex = baseFindIndex$1; /** * The base implementation of `_.isNaN` without support for number objects. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. */ function baseIsNaN$1(value) { return value !== value; } var _baseIsNaN = baseIsNaN$1; /** * A specialized version of `_.indexOf` which performs strict equality * comparisons of values, i.e. `===`. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function strictIndexOf$1(array, value, fromIndex) { var index = fromIndex - 1, length = array.length; while (++index < length) { if (array[index] === value) { return index; } } return -1; } var _strictIndexOf = strictIndexOf$1; var baseFindIndex = _baseFindIndex, baseIsNaN = _baseIsNaN, strictIndexOf = _strictIndexOf; /** * The base implementation of `_.indexOf` without `fromIndex` bounds checks. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseIndexOf$1(array, value, fromIndex) { return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); } var _baseIndexOf = baseIndexOf$1; var baseIndexOf = _baseIndexOf; /** * A specialized version of `_.includes` for arrays without support for * specifying an index to search from. * * @private * @param {Array} [array] The array to inspect. * @param {*} target The value to search for. * @returns {boolean} Returns `true` if `target` is found, else `false`. */ function arrayIncludes$1(array, value) { var length = array == null ? 0 : array.length; return !!length && baseIndexOf(array, value, 0) > -1; } var _arrayIncludes = arrayIncludes$1; /** * This function is like `arrayIncludes` except that it accepts a comparator. * * @private * @param {Array} [array] The array to inspect. * @param {*} target The value to search for. * @param {Function} comparator The comparator invoked per element. * @returns {boolean} Returns `true` if `target` is found, else `false`. */ function arrayIncludesWith$1(array, value, comparator) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (comparator(value, array[index])) { return true; } } return false; } var _arrayIncludesWith = arrayIncludesWith$1; var SetCache = _SetCache, arrayIncludes = _arrayIncludes, arrayIncludesWith = _arrayIncludesWith, arrayMap$1 = _arrayMap, baseUnary = _baseUnary, cacheHas = _cacheHas; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeMin = Math.min; /** * The base implementation of methods like `_.intersection`, without support * for iteratee shorthands, that accepts an array of arrays to inspect. * * @private * @param {Array} arrays The arrays to inspect. * @param {Function} [iteratee] The iteratee invoked per element. * @param {Function} [comparator] The comparator invoked per element. * @returns {Array} Returns the new array of shared values. */ function baseIntersection$1(arrays, iteratee, comparator) { var includes = comparator ? arrayIncludesWith : arrayIncludes, length = arrays[0].length, othLength = arrays.length, othIndex = othLength, caches = Array(othLength), maxLength = Infinity, result = []; while (othIndex--) { var array = arrays[othIndex]; if (othIndex && iteratee) { array = arrayMap$1(array, baseUnary(iteratee)); } maxLength = nativeMin(array.length, maxLength); caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) ? new SetCache(othIndex && array) : undefined; } array = arrays[0]; var index = -1, seen = caches[0]; outer: while (++index < length && result.length < maxLength) { var value = array[index], computed = iteratee ? iteratee(value) : value; value = (comparator || value !== 0) ? value : 0; if (!(seen ? cacheHas(seen, computed) : includes(result, computed, comparator) )) { othIndex = othLength; while (--othIndex) { var cache = caches[othIndex]; if (!(cache ? cacheHas(cache, computed) : includes(arrays[othIndex], computed, comparator)) ) { continue outer; } } if (seen) { seen.push(computed); } result.push(value); } } return result; } var _baseIntersection = baseIntersection$1; var isArrayLikeObject = isArrayLikeObject_1; /** * Casts `value` to an empty array if it's not an array like object. * * @private * @param {*} value The value to inspect. * @returns {Array|Object} Returns the cast array-like object. */ function castArrayLikeObject$1(value) { return isArrayLikeObject(value) ? value : []; } var _castArrayLikeObject = castArrayLikeObject$1; var arrayMap = _arrayMap, baseIntersection = _baseIntersection, baseRest = _baseRest, castArrayLikeObject = _castArrayLikeObject; /** * Creates an array of unique values that are included in all given arrays * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) * for equality comparisons. The order and references of result values are * determined by the first array. * * @static * @memberOf _ * @since 0.1.0 * @category Array * @param {...Array} [arrays] The arrays to inspect. * @returns {Array} Returns the new array of intersecting values. * @example * * _.intersection([2, 1], [2, 3]); * // => [2] */ var intersection = baseRest(function(arrays) { var mapped = arrayMap(arrays, castArrayLikeObject); return (mapped.length && mapped[0] === arrays[0]) ? baseIntersection(mapped) : []; }); var intersection_1 = intersection; var intersection$1 = /*@__PURE__*/getDefaultExportFromCjs(intersection_1); /* eslint-disable function-paren-newline */ /* eslint-disable implicit-arrow-linebreak */ /** Initializes i18n translations based on provided configuration. @function @param {Locale} config - The configuration object for initializing i18n @returns {{i18n: i18next}} - An object containing an i18n instance. */ const initTranslations = config => { const { language = 'en', availableLanguages = [], translations, localeDetection = false, withBackend = false, ...i18nConfig } = config; const combinedConfig = merge$1(defaultConfig, i18nConfig, { supportedLngs: availableLanguages, fallbackLng: i18nConfig.fallbackLng || language }); const instance$1 = instance.createInstance(combinedConfig); if (!instance$1.isInitialized) { if (localeDetection) { instance$1.use(Browser); } if (withBackend) { instance$1.use(Backend); } instance$1.use(initReactI18next).init(combinedConfig); } const buildInTranslations = intersection$1(Object.keys(locales), availableLanguages); if (buildInTranslations.length) { buildInTranslations.forEach(lang => instance$1.addResourceBundle(lang, DEFAULT_NS, flat.flatten(locales[lang]))); } if (translations) { Object.keys(translations).forEach(lang => instance$1.addResourceBundle(lang, DEFAULT_NS, flat.flatten(translations[lang]), true, true)); } return { i18n: instance$1 }; }; const env = { NODE_ENV: "development" }; const store = createStore(window.REDUX_STATE); const theme = window.THEME; const { locale } = store.getState(); const { i18n } = initTranslations(locale); const Application = /*#__PURE__*/React__default$1.default.createElement(require$$3.Provider, { store: store }, /*#__PURE__*/React__default$1.default.createElement(styledComponents.ThemeProvider, { theme: theme }, /*#__PURE__*/React__default$1.default.createElement(I18nextProvider, { i18n: i18n }, /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.BrowserRouter, null, /*#__PURE__*/React__default$1.default.createElement(React$1.Suspense, { fallback: /*#__PURE__*/React__default$1.default.createElement(AppLoader, null) }, /*#__PURE__*/React__default$1.default.createElement(OverridableApp, null)))))); const loginAppProps = window.__APP_STATE__ ?? {}; const LoginApplication = /*#__PURE__*/React__default$1.default.createElement(require$$3.Provider, { store: store }, /*#__PURE__*/React__default$1.default.createElement(styledComponents.ThemeProvider, { theme: theme }, /*#__PURE__*/React__default$1.default.createElement(I18nextProvider, { i18n: i18n }, /*#__PURE__*/React__default$1.default.createElement(reactRouterDom.BrowserRouter, null, /*#__PURE__*/React__default$1.default.createElement(React$1.Suspense, { fallback: /*#__PURE__*/React__default$1.default.createElement(AppLoader, null) }, /*#__PURE__*/React__default$1.default.createElement(Login$1, loginAppProps)))))); // eslint-disable-next-line no-undef window.regeneratorRuntime = regeneratorRuntime; var bundleEntry = { withNotice, Application, OriginalApplication: App, LoginApplication, ViewHelpers, UserComponents: {}, ApiClient, BasePropertyComponent: BasePropertyComponentExtended, CleanPropertyComponent, env, ...PropertyComponentUtils, ...AppComponents, ...ActionComponents, ...Hooks, ...ActionUtils, flat }; return bundleEntry; })(styled, React, ReactRedux, ReactRouterDOM, ReactRouter, AdminJSDesignSystem, ReactDOM, Redux); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWJ1bmRsZS5kZXZlbG9wbWVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1Byb3BlcnR5S2V5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdm9pZC1lbGVtZW50cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9odG1sLXBhcnNlLXN0cmluZ2lmeS9kaXN0L2h0bWwtcGFyc2Utc3RyaW5naWZ5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWkxOG5leHQvZGlzdC9lcy91dGlscy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1pMThuZXh0L2Rpc3QvZXMvdW5lc2NhcGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaTE4bmV4dC9kaXN0L2VzL2RlZmF1bHRzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWkxOG5leHQvZGlzdC9lcy9pMThuSW5zdGFuY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaTE4bmV4dC9kaXN0L2VzL1RyYW5zV2l0aG91dENvbnRleHQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2suanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlQ2xhc3MuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaTE4bmV4dC9kaXN0L2VzL2luaXRSZWFjdEkxOG5leHQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaTE4bmV4dC9kaXN0L2VzL2NvbnRleHQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaTE4bmV4dC9kaXN0L2VzL1RyYW5zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheUxpbWl0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaTE4bmV4dC9kaXN0L2VzL3VzZVRyYW5zbGF0aW9uLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWkxOG5leHQvZGlzdC9lcy9JMThuZXh0UHJvdmlkZXIuanMiLCIuLi8uLi8uLi9iYWNrZW5kL3V0aWxzL3ZpZXctaGVscGVycy92aWV3LWhlbHBlcnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZmxhdC9pbmRleC5qcyIsIi4uLy4uLy4uL3V0aWxzL2ZsYXQvY29uc3RhbnRzLmpzIiwiLi4vLi4vLi4vdXRpbHMvZmxhdC9wcm9wZXJ0eS1rZXktcmVnZXguanMiLCIuLi8uLi8uLi91dGlscy9mbGF0L3NlbGVjdC1wYXJhbXMuanMiLCIuLi8uLi8uLi91dGlscy9mbGF0L2ZpbHRlci1vdXQtcGFyYW1zLmpzIiwiLi4vLi4vLi4vdXRpbHMvZmxhdC9wYXRoLXRvLXBhcnRzLmpzIiwiLi4vLi4vLi4vdXRpbHMvZmxhdC9zZXQuanMiLCIuLi8uLi8uLi91dGlscy9mbGF0L2dldC5qcyIsIi4uLy4uLy4uL3V0aWxzL2ZsYXQvbWVyZ2UuanMiLCIuLi8uLi8uLi91dGlscy9mbGF0L3JlbW92ZS1wYXRoLmpzIiwiLi4vLi4vLi4vdXRpbHMvZmxhdC9mbGF0LW1vZHVsZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9zaGFtcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kL2ltcGxlbWVudGF0aW9uLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvaGFzL3NyYy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9nZXQtaW50cmluc2ljL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvY2FsbEJvdW5kLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1pbnNwZWN0L2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9xcy9saWIvZm9ybWF0cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9xcy9saWIvdXRpbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcXMvbGliL3N0cmluZ2lmeS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9xcy9saWIvcGFyc2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcXMvbGliL2luZGV4LmpzIiwiLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzIiwiLi4vLi4vaW50ZXJmYWNlcy9hY3Rpb24vYWN0aW9uLWhhcy1jb21wb25lbnQuanMiLCIuLi8uLi9pbnRlcmZhY2VzL2FjdGlvbi9hY3Rpb24taHJlZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvc0Vycm9yLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL251bGwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9JbnRlcmNlcHRvck1hbmFnZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL0Zvcm1EYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvQmxvYi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b1VSTEVuY29kZWRGb3JtLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZUhlYWRlcnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NIZWFkZXJzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3RyYW5zZm9ybURhdGEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9pc0NhbmNlbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21iaW5lVVJMcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9idWlsZEZ1bGxQYXRoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwZWVkb21ldGVyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy94aHIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9tZXJnZUNvbmZpZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZW52L2RhdGEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdmFsaWRhdG9yLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYXhpb3MuanMiLCIuLi8uLi91dGlscy9hcGktY2xpZW50LmpzIiwiLi4vLi4vdXRpbHMvZGF0YS1jc3MtbmFtZS5qcyIsIi4uLy4uL2ludGVyZmFjZXMvYWN0aW9uL2NhbGwtYWN0aW9uLWFwaS5qcyIsIi4uLy4uL2ludGVyZmFjZXMvYWN0aW9uL2J1aWxkLWFjdGlvbi1hcGktY2FsbC10cmlnZ2VyLmpzIiwiLi4vLi4vaW50ZXJmYWNlcy9hY3Rpb24vYnVpbGQtYWN0aW9uLXRlc3QtaWQuanMiLCIuLi8uLi9jb21wb25lbnRzL2FjdGlvbnMvdXRpbHMvYXBwZW5kLWZvcmNlLXJlZnJlc2guanMiLCIuLi8uLi9pbnRlcmZhY2VzL2FjdGlvbi9idWlsZC1hY3Rpb24tY2xpY2staGFuZGxlci5qcyIsIi4uLy4uL2ludGVyZmFjZXMvYWN0aW9uL2lzLWJ1bGstYWN0aW9uLmpzIiwiLi4vLi4vaW50ZXJmYWNlcy9hY3Rpb24vaXMtcmVzb3VyY2UtYWN0aW9uLmpzIiwiLi4vLi4vaW50ZXJmYWNlcy9hY3Rpb24vaXMtcmVjb3JkLWFjdGlvbi5qcyIsIi4uLy4uL3N0b3JlL2FjdGlvbnMvYWRkLW5vdGljZS5qcyIsIi4uLy4uL2hvb2tzL3VzZS1ub3RpY2UuanMiLCIuLi8uLi9ob29rcy91c2UtYWN0aW9uL3VzZS1hY3Rpb24tcmVzcG9uc2UtaGFuZGxlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5UmVkdWNlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVByb3BlcnR5T2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWJ1cnJMZXR0ZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU3ltYm9sLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGVidXJyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNjaWlXb3Jkcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1VuaWNvZGVXb3JkLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdW5pY29kZVdvcmRzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC93b3Jkcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUNvbXBvdW5kZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2xpY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0U2xpY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNVbmljb2RlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNjaWlUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdW5pY29kZVRvQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQ2FzZUZpcnN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC91cHBlckZpcnN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdGFydENhc2UuanMiLCIuLi8uLi8uLi91dGlscy90cmFuc2xhdGUtZnVuY3Rpb25zLmZhY3RvcnkuanMiLCIuLi8uLi9ob29rcy91c2UtdHJhbnNsYXRpb24uanMiLCIuLi8uLi9zdG9yZS9hY3Rpb25zL2Ryb3Atbm90aWNlLmpzIiwiLi4vLi4vc3RvcmUvYWN0aW9ucy9pbml0aWFsaXplLWFzc2V0cy5qcyIsIi4uLy4uL3N0b3JlL2FjdGlvbnMvaW5pdGlhbGl6ZS1icmFuZGluZy5qcyIsIi4uLy4uL3N0b3JlL2FjdGlvbnMvaW5pdGlhbGl6ZS1kYXNoYm9hcmQuanMiLCIuLi8uLi9zdG9yZS9hY3Rpb25zL2luaXRpYWxpemUtbG9jYWxlLmpzIiwiLi4vLi4vc3RvcmUvYWN0aW9ucy9pbml0aWFsaXplLXBhZ2VzLmpzIiwiLi4vLi4vc3RvcmUvYWN0aW9ucy9pbml0aWFsaXplLXBhdGhzLmpzIiwiLi4vLi4vc3RvcmUvYWN0aW9ucy9pbml0aWFsaXplLXJlc291cmNlcy5qcyIsIi4uLy4uL3N0b3JlL2FjdGlvbnMvaW5pdGlhbGl6ZS10aGVtZS5qcyIsIi4uLy4uL3N0b3JlL2FjdGlvbnMvaW5pdGlhbGl6ZS12ZXJzaW9ucy5qcyIsIi4uLy4uL3N0b3JlL2FjdGlvbnMvbW9kYWwuanMiLCIuLi8uLi9zdG9yZS9hY3Rpb25zL3JvdXRlLWNoYW5nZWQuanMiLCIuLi8uLi9zdG9yZS9hY3Rpb25zL3NldC1jdXJyZW50LWFkbWluLmpzIiwiLi4vLi4vc3RvcmUvYWN0aW9ucy9zZXQtZHJhd2VyLXByZXJvdXRlLmpzIiwiLi4vLi4vc3RvcmUvYWN0aW9ucy9zZXQtbm90aWNlLXByb2dyZXNzLmpzIiwiLi4vLi4vaG9va3MvdXNlLW1vZGFsLmpzIiwiLi4vLi4vaG9va3MvdXNlLWFjdGlvbi91c2UtYWN0aW9uLmpzIiwiLi4vLi4vaG9va3MvdXNlLWN1cnJlbnQtYWRtaW4uanMiLCIuLi8uLi9zdG9yZS9hY3Rpb25zL2ZpbHRlci1kcmF3ZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaENsZWFyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoSGFzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVDbGVhci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NvY0luZGV4T2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVEZWxldGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVTZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaW5nVG9QYXRoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdFBhdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VBc3NpZ25WYWx1ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc2lnblZhbHVlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUGlja0J5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUhhc0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNQYXRoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9oYXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQaWNrLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlQdXNoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNGbGF0dGVuYWJsZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGbGF0dGVuLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9mbGF0dGVuLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXBwbHkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvY29uc3RhbnQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lkZW50aXR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZsYXRSZXN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9waWNrLmpzIiwiLi4vLi4vaG9va3MvdXNlLXF1ZXJ5LXBhcmFtcy5qcyIsIi4uLy4uL2hvb2tzL3VzZS1maWx0ZXItZHJhd2VyLmpzIiwiLi4vLi4vaG9va3MvdXNlLWxvY2FsLXN0b3JhZ2UvdXNlLWxvY2FsLXN0b3JhZ2UuanMiLCIuLi8uLi9ob29rcy91c2UtaGlzdG9yeS1saXN0ZW4uanMiLCIuLi8uLi9ob29rcy91c2UtbmF2aWdhdGlvbi1yZXNvdXJjZXMuanMiLCIuLi8uLi9ob29rcy91c2UtcmVjb3JkL3BhcmFtcy10by1mb3JtLWRhdGEuanMiLCIuLi8uLi9ob29rcy91c2UtcmVjb3JkL21lcmdlLXJlY29yZC1yZXNwb25zZS5qcyIsIi4uLy4uL2hvb2tzL3VzZS1yZWNvcmQvdXBkYXRlLXJlY29yZC5qcyIsIi4uLy4uL2hvb2tzL3VzZS1yZWNvcmQvaXMtZW50aXJlLXJlY29yZC1naXZlbi5qcyIsIi4uLy4uL2hvb2tzL3VzZS1yZWNvcmQvZmlsdGVyLXJlY29yZC5qcyIsIi4uLy4uL2hvb2tzL3VzZS1yZWNvcmQvdXNlLXJlY29yZC5qcyIsIi4uLy4uL2hvb2tzL3VzZS1yZWNvcmRzL3VzZS1yZWNvcmRzLmpzIiwiLi4vLi4vaG9va3MvdXNlLXJlc291cmNlL3VzZS1yZXNvdXJjZS5qcyIsIi4uLy4uL2hvb2tzL3VzZS1zZWxlY3RlZC1yZWNvcmRzL3VzZS1zZWxlY3RlZC1yZWNvcmRzLmpzIiwiLi4vLi4vY29tcG9uZW50cy9hcHAvYWN0aW9uLWJ1dHRvbi9hY3Rpb24tYnV0dG9uLmpzIiwiLi4vLi4vY29tcG9uZW50cy9hcHAvYnJlYWRjcnVtYnMuanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC9hY3Rpb24taGVhZGVyL2FjdGlvbnMtdG8tYnV0dG9uLWdyb3VwLmpzIiwiLi4vLi4vY29tcG9uZW50cy9hcHAvYWN0aW9uLWhlYWRlci9zdHlsZWQtYmFjay1idXR0b24uanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC9hY3Rpb24taGVhZGVyL2FjdGlvbi1oZWFkZXIuanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC9hZG1pbi1tb2RhbC5qcyIsIi4uLy4uL2NvbXBvbmVudHMvYXBwL2FwcC1sb2FkZXIuanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC9hdXRoLWJhY2tncm91bmQtY29tcG9uZW50LmpzIiwiLi4vLi4vY29tcG9uZW50cy9hcHAvZXJyb3ItYm91bmRhcnkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvdXNlLW1lbW8tb25lL2Rpc3QvdXNlLW1lbW8tb25lLmNqcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy90aW55LWludmFyaWFudC9kaXN0L3RpbnktaW52YXJpYW50LmNqcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtYm94LW1vZGVsL2Rpc3QvY3NzLWJveC1tb2RlbC5janMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWVtb2l6ZS1vbmUvZGlzdC9tZW1vaXplLW9uZS5janMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmFmLXNjaGQvZGlzdC9yYWYtc2NoZC5janMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9leHRlbmRzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BoZWxsby1wYW5nZWEvZG5kL2Rpc3QvZG5kLmNqcy5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9hcnJheS9hZGQtbmV3LWl0ZW0tdHJhbnNsYXRpb24uanMiLCIuLi8uLi8uLi91dGlscy9lcnJvci10eXBlLmVudW0uanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvdXRpbHMvcHJvcGVydHktZGVzY3JpcHRpb24vcHJvcGVydHktZGVzY3JpcHRpb24uanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvdXRpbHMvcHJvcGVydHktbGFiZWwvcHJvcGVydHktbGFiZWwuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvYXJyYXkvY29udmVydC10by1zdWItcHJvcGVydHkuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvYXJyYXkvcmVtb3ZlLXN1Yi1wcm9wZXJ0eS5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9hcnJheS9lZGl0LmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL2FycmF5L2xpc3QuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvYXJyYXkvc2hvdy5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9rZXktdmFsdWUvZWRpdC5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9rZXktdmFsdWUvc2hvdy5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9taXhlZC9jb252ZXJ0LXRvLXN1Yi1wcm9wZXJ0eS5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9taXhlZC9lZGl0LmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL21peGVkL3Nob3cuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvbWl4ZWQvbGlzdC5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9yZWNvcmQtcHJvcGVydHktaXMtZXF1YWwuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvYm9vbGVhbi9lZGl0LmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL2Jvb2xlYW4vbWFwLXZhbHVlLmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL2Jvb2xlYW4vYm9vbGVhbi1wcm9wZXJ0eS12YWx1ZS5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9ib29sZWFuL3Nob3cuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvYm9vbGVhbi9saXN0LmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL2Jvb2xlYW4vZmlsdGVyLmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL2N1cnJlbmN5L2N1cnJlbmN5LWlucHV0LXdyYXBwZXIuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvY3VycmVuY3kvZWRpdC5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9jdXJyZW5jeS9maWx0ZXIuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvY3VycmVuY3kvZm9ybWF0LXZhbHVlLmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL2N1cnJlbmN5L2xpc3QuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvY3VycmVuY3kvc2hvdy5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9kYXRldGltZS9zdHJpcC10aW1lLWZyb20taXNvLmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL2RhdGV0aW1lL2VkaXQuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvZGF0ZXRpbWUvbWFwLXZhbHVlLmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL2RhdGV0aW1lL3Nob3cuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvZGF0ZXRpbWUvbGlzdC5qcyIsIi4uLy4uLy4uL2JhY2tlbmQvdXRpbHMvZmlsdGVyL2ZpbHRlci5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9kYXRldGltZS9maWx0ZXIuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvZGVmYXVsdC10eXBlL2RlZmF1bHQtcHJvcGVydHktdmFsdWUuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvZGVmYXVsdC10eXBlL3Nob3cuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvZGVmYXVsdC10eXBlL2VkaXQuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvZGVmYXVsdC10eXBlL2ZpbHRlci5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9kZWZhdWx0LXR5cGUvbGlzdC5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9wYXNzd29yZC9lZGl0LmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL3Bhc3N3b3JkL2luZGV4LmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL3Bob25lL2VkaXQuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvcGhvbmUvZmlsdGVyLmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL3Bob25lL2xpc3QuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvcGhvbmUvc2hvdy5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9yZWZlcmVuY2UvZWRpdC5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9yZWZlcmVuY2UvcmVmZXJlbmNlLXZhbHVlLmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL3JlZmVyZW5jZS9zaG93LmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL3JlZmVyZW5jZS9saXN0LmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL3JlZmVyZW5jZS9maWx0ZXIuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvcmljaHRleHQvZWRpdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3NmaWx0ZXIvbGliL2RlZmF1bHQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzZmlsdGVyL2xpYi91dGlsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzc2ZpbHRlci9saWIvcGFyc2VyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzc2ZpbHRlci9saWIvY3NzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzc2ZpbHRlci9saWIvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMveHNzL2xpYi91dGlsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3hzcy9saWIvZGVmYXVsdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy94c3MvbGliL3BhcnNlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy94c3MvbGliL3hzcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy94c3MvbGliL2luZGV4LmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL3JpY2h0ZXh0L3Nob3cuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNSZWdFeHAuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5hcnkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNSZWdFeHAuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc2NpaVNpemUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL191bmljb2RlU2l6ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1NpemUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190cmltbWVkRW5kSW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVHJpbS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9OdW1iZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvRmluaXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0ludGVnZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RydW5jYXRlLmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL3JpY2h0ZXh0L2xpc3QuanMiLCIuLi8uLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvdGV4dGFyZWEvc2hvdy5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS90ZXh0YXJlYS9lZGl0LmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL2Jhc2UtcHJvcGVydHktY29tcG9uZW50LmpzIiwiLi4vLi4vY29tcG9uZW50cy9wcm9wZXJ0eS10eXBlL2NsZWFuLXByb3BlcnR5LWNvbXBvbmVudC5qcyIsIi4uLy4uL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS9pbmRleC5qcyIsIi4uLy4uL2NvbXBvbmVudHMvYWN0aW9ucy91dGlscy9sYXlvdXQtZWxlbWVudC1yZW5kZXJlci5qcyIsIi4uLy4uL2NvbXBvbmVudHMvYWN0aW9ucy9uZXcuanMiLCIuLi8uLi9jb21wb25lbnRzL2FjdGlvbnMvZWRpdC5qcyIsIi4uLy4uL2NvbXBvbmVudHMvYWN0aW9ucy9zaG93LmpzIiwiLi4vLi4vY29tcG9uZW50cy9hcHAvcmVjb3Jkcy10YWJsZS9uby1yZWNvcmRzLmpzIiwiLi4vLi4vY29tcG9uZW50cy9hcHAvcmVjb3Jkcy10YWJsZS91dGlscy9kaXNwbGF5LmpzIiwiLi4vLi4vY29tcG9uZW50cy9hcHAvcmVjb3Jkcy10YWJsZS9yZWNvcmQtaW4tbGlzdC5qcyIsIi4uLy4uL2NvbXBvbmVudHMvYXBwL3NvcnQtbGluay5qcyIsIi4uLy4uL2NvbXBvbmVudHMvYXBwL3JlY29yZHMtdGFibGUvcHJvcGVydHktaGVhZGVyLmpzIiwiLi4vLi4vY29tcG9uZW50cy9hcHAvcmVjb3Jkcy10YWJsZS9yZWNvcmRzLXRhYmxlLWhlYWRlci5qcyIsIi4uLy4uL2NvbXBvbmVudHMvYXBwL3JlY29yZHMtdGFibGUvdXRpbHMvZ2V0LWJ1bGstYWN0aW9ucy1mcm9tLXJlY29yZHMuanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC9yZWNvcmRzLXRhYmxlL3NlbGVjdGVkLXJlY29yZHMuanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC9yZWNvcmRzLXRhYmxlL3JlY29yZHMtdGFibGUuanMiLCIuLi8uLi9jb21wb25lbnRzL2FjdGlvbnMvbGlzdC5qcyIsIi4uLy4uL2hvYy93aXRoLW5vdGljZS5qcyIsIi4uLy4uL2NvbXBvbmVudHMvYWN0aW9ucy9idWxrLWRlbGV0ZS5qcyIsIi4uLy4uL2NvbXBvbmVudHMvYWN0aW9ucy9pbmRleC5qcyIsIi4uLy4uLy4uL2NvbnN0YW50cy5qcyIsIi4uLy4uL2NvbXBvbmVudHMvYXBwL2Jhc2UtYWN0aW9uLWNvbXBvbmVudC5qcyIsIi4uLy4uL2NvbXBvbmVudHMvYXBwL3V0aWxzL3JvY2tldC1zdmcuanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC91dGlscy9kaXNjb3JkLWxvZ28tc3ZnLmpzIiwiLi4vLi4vY29tcG9uZW50cy9hcHAvZGVmYXVsdC1kYXNoYm9hcmQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2NsaWVudC5qcyIsIi4uLy4uL2NvbXBvbmVudHMvYXBwL2RyYXdlci1wb3J0YWwuanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC9lcnJvci1tZXNzYWdlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc05pbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrQ2xlYXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldENhY2hlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlTb21lLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEFycmF5cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsQnlUYWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0QWxsS2V5cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlMaWtlS2V5cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Qcm9taXNlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTWF0Y2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1N0cmljdENvbXBhcmFibGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRNYXRjaERhdGEuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9nZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVByb3BlcnR5RGVlcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcHJvcGVydHkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXRlcmF0ZWUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRQcm90b3R5cGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5c0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3BpY2tCeS5qcyIsIi4uLy4uL2NvbXBvbmVudHMvYXBwL2ZpbHRlci1kcmF3ZXIuanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC9sb2dnZWQtaW4uanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC9ub3RpY2UuanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC9zaWRlYmFyL3NpZGViYXItYnJhbmRpbmcuanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC9zaWRlYmFyL3NpZGViYXItZm9vdGVyLmpzIiwiLi4vLi4vY29tcG9uZW50cy9hcHAvc2lkZWJhci9zaWRlYmFyLXBhZ2VzLmpzIiwiLi4vLi4vY29tcG9uZW50cy9hcHAvc2lkZWJhci9zaWRlYmFyLXJlc291cmNlLXNlY3Rpb24uanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC9zaWRlYmFyL3NpZGViYXIuanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC9sYW5ndWFnZS1zZWxlY3QvbGFuZ3VhZ2Utc2VsZWN0LmpzIiwiLi4vLi4vY29tcG9uZW50cy9hcHAvdmVyc2lvbi5qcyIsIi4uLy4uL2NvbXBvbmVudHMvYXBwL3RvcC1iYXIuanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcC9mb290ZXIuanMiLCIuLi8uLi9jb21wb25lbnRzL3JvdXRlcy9kYXNoYm9hcmQuanMiLCIuLi8uLi9jb21wb25lbnRzL3JvdXRlcy91dGlscy93cmFwcGVyLmpzIiwiLi4vLi4vY29tcG9uZW50cy9sb2dpbi9pbmRleC5qcyIsIi4uLy4uL2hvYy93aXRoLW5vLXNzci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AcmVkdXgtZGV2dG9vbHMvZXh0ZW5zaW9uL2xpYi9janMvZGV2ZWxvcG1lbnRPbmx5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0ByZWR1eC1kZXZ0b29scy9leHRlbnNpb24vbGliL2Nqcy91dGlscy9hc3NpZ24uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQHJlZHV4LWRldnRvb2xzL2V4dGVuc2lvbi9saWIvY2pzL2xvZ09ubHkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQHJlZHV4LWRldnRvb2xzL2V4dGVuc2lvbi9saWIvY2pzL2xvZ09ubHlJblByb2R1Y3Rpb24uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQHJlZHV4LWRldnRvb2xzL2V4dGVuc2lvbi9saWIvY2pzL2luZGV4LmpzIiwiLi4vLi4vc3RvcmUvcmVkdWNlcnMvYXNzZXRzUmVkdWNlci5qcyIsIi4uLy4uL3N0b3JlL3JlZHVjZXJzL2JyYW5kaW5nUmVkdWNlci5qcyIsIi4uLy4uL3N0b3JlL3JlZHVjZXJzL2Rhc2hib2FyZFJlZHVjZXIuanMiLCIuLi8uLi9zdG9yZS9yZWR1Y2Vycy9kcmF3ZXJSZWR1Y2VyLmpzIiwiLi4vLi4vc3RvcmUvcmVkdWNlcnMvZmlsdGVyRHJhd2VyUmVkdWNlci5qcyIsIi4uLy4uL3N0b3JlL3JlZHVjZXJzL2xvY2FsZXNSZWR1Y2VyLmpzIiwiLi4vLi4vc3RvcmUvcmVkdWNlcnMvbW9kYWxSZWR1Y2VyLmpzIiwiLi4vLi4vc3RvcmUvcmVkdWNlcnMvbm90aWNlc1JlZHVjZXIuanMiLCIuLi8uLi9zdG9yZS9yZWR1Y2Vycy9wYWdlc1JlZHVjZXIuanMiLCIuLi8uLi9zdG9yZS9yZWR1Y2Vycy9wYXRoc1JlZHVjZXIuanMiLCIuLi8uLi9zdG9yZS9yZWR1Y2Vycy9yZXNvdXJjZXNSZWR1Y2VyLmpzIiwiLi4vLi4vc3RvcmUvcmVkdWNlcnMvcm91dGVyUmVkdWNlci5qcyIsIi4uLy4uL3N0b3JlL3JlZHVjZXJzL3Nlc3Npb25SZWR1Y2VyLmpzIiwiLi4vLi4vc3RvcmUvcmVkdWNlcnMvdGhlbWVSZWR1Y2VyLmpzIiwiLi4vLi4vc3RvcmUvcmVkdWNlcnMvdmVyc2lvbnNSZWR1Y2VyLmpzIiwiLi4vLi4vc3RvcmUvc3RvcmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NpZ25NZXJnZVZhbHVlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3IuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZUJ1ZmZlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lQXJyYXlCdWZmZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5pdENsb25lT2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNQbGFpbk9iamVjdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NhZmVHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1BsYWluT2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1lcmdlRGVlcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNZXJnZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJdGVyYXRlZUNhbGwuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVBc3NpZ25lci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbWVyZ2UuanMiLCIuLi8uLi8uLi9sb2NhbGUvZGVmYXVsdC1jb25maWcuanMiLCIuLi8uLi8uLi9sb2NhbGUvaW5kZXguanMiLCIuLi8uLi9jb21wb25lbnRzL3JvdXRlcy9yZWNvcmQtYWN0aW9uLmpzIiwiLi4vLi4vY29tcG9uZW50cy9yb3V0ZXMvcmVzb3VyY2UtYWN0aW9uLmpzIiwiLi4vLi4vY29tcG9uZW50cy9yb3V0ZXMvYnVsay1hY3Rpb24uanMiLCIuLi8uLi9jb21wb25lbnRzL3JvdXRlcy9wYWdlLmpzIiwiLi4vLi4vY29tcG9uZW50cy9yb3V0ZXMvcmVzb3VyY2UuanMiLCIuLi8uLi9jb21wb25lbnRzL2FwcGxpY2F0aW9uLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2kxOG5leHQvZGlzdC9lc20vaTE4bmV4dC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9pMThuZXh0LWJyb3dzZXItbGFuZ3VhZ2VkZXRlY3Rvci9kaXN0L2VzbS9pMThuZXh0QnJvd3Nlckxhbmd1YWdlRGV0ZWN0b3IuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvaTE4bmV4dC1odHRwLWJhY2tlbmQvZXNtL3V0aWxzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nyb3NzLWZldGNoL2Rpc3QvYnJvd3Nlci1wb255ZmlsbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9pMThuZXh0LWh0dHAtYmFja2VuZC9lc20vZ2V0RmV0Y2guY2pzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2kxOG5leHQtaHR0cC1iYWNrZW5kL2VzbS9yZXF1ZXN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2kxOG5leHQtaHR0cC1iYWNrZW5kL2VzbS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGaW5kSW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYU4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpY3RJbmRleE9mLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUluZGV4T2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlJbmNsdWRlc1dpdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSW50ZXJzZWN0aW9uLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FzdEFycmF5TGlrZU9iamVjdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaW50ZXJzZWN0aW9uLmpzIiwiLi4vLi4vdXRpbHMvYWRtaW5qcy5pMThuLmpzIiwiLi4vLi4vYnVuZGxlLWVudHJ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqO1xuICB9LCBfdHlwZW9mKG9iaik7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChfdHlwZW9mKHJlcykgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZywgXCJzdHJpbmdcIik7XG4gIHJldHVybiBfdHlwZW9mKGtleSkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBTdHJpbmcoa2V5KTtcbn0iLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufSIsImltcG9ydCBvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCIuL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0gb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTtcbiAgdmFyIGtleSwgaTtcbiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCIvKipcbiAqIFRoaXMgZmlsZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGBwcmUtcHVibGlzaC5qc2AuXG4gKiBEbyBub3QgbWFudWFsbHkgZWRpdC5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgXCJhcmVhXCI6IHRydWUsXG4gIFwiYmFzZVwiOiB0cnVlLFxuICBcImJyXCI6IHRydWUsXG4gIFwiY29sXCI6IHRydWUsXG4gIFwiZW1iZWRcIjogdHJ1ZSxcbiAgXCJoclwiOiB0cnVlLFxuICBcImltZ1wiOiB0cnVlLFxuICBcImlucHV0XCI6IHRydWUsXG4gIFwibGlua1wiOiB0cnVlLFxuICBcIm1ldGFcIjogdHJ1ZSxcbiAgXCJwYXJhbVwiOiB0cnVlLFxuICBcInNvdXJjZVwiOiB0cnVlLFxuICBcInRyYWNrXCI6IHRydWUsXG4gIFwid2JyXCI6IHRydWVcbn07XG4iLCJ2YXIgZSx0PShlPXJlcXVpcmUoXCJ2b2lkLWVsZW1lbnRzXCIpKSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lLmRlZmF1bHQ6ZSxuPS9cXHMoW14nXCIvXFxzPjxdKz8pW1xccy8+XXwoW15cXHM9XSspPVxccz8oXCIuKj9cInwnLio/JykvZztmdW5jdGlvbiByKGUpe3ZhciByPXt0eXBlOlwidGFnXCIsbmFtZTpcIlwiLHZvaWRFbGVtZW50OiExLGF0dHJzOnt9LGNoaWxkcmVuOltdfSxpPWUubWF0Y2goLzxcXC8/KFteXFxzXSs/KVsvXFxzPl0vKTtpZihpJiYoci5uYW1lPWlbMV0sKHRbaVsxXV18fFwiL1wiPT09ZS5jaGFyQXQoZS5sZW5ndGgtMikpJiYoci52b2lkRWxlbWVudD0hMCksci5uYW1lLnN0YXJ0c1dpdGgoXCIhLS1cIikpKXt2YXIgcz1lLmluZGV4T2YoXCItLVxceDNlXCIpO3JldHVybnt0eXBlOlwiY29tbWVudFwiLGNvbW1lbnQ6LTEhPT1zP2Uuc2xpY2UoNCxzKTpcIlwifX1mb3IodmFyIGM9bmV3IFJlZ0V4cChuKSxhPW51bGw7bnVsbCE9PShhPWMuZXhlYyhlKSk7KWlmKGFbMF0udHJpbSgpKWlmKGFbMV0pe3ZhciBvPWFbMV0udHJpbSgpLHU9W28sXCJcIl07by5pbmRleE9mKFwiPVwiKT4tMSYmKHU9by5zcGxpdChcIj1cIikpLHIuYXR0cnNbdVswXV09dVsxXSxjLmxhc3RJbmRleC0tfWVsc2UgYVsyXSYmKHIuYXR0cnNbYVsyXV09YVszXS50cmltKCkuc3Vic3RyaW5nKDEsYVszXS5sZW5ndGgtMSkpO3JldHVybiByfXZhciBpPS88W2EtekEtWjAtOVxcLVxcIVxcL10oPzpcIlteXCJdKlwifCdbXiddKid8W14nXCI+XSkqPi9nLHM9L15cXHMqJC8sYz1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGEoZSx0KXtzd2l0Y2godC50eXBlKXtjYXNlXCJ0ZXh0XCI6cmV0dXJuIGUrdC5jb250ZW50O2Nhc2VcInRhZ1wiOnJldHVybiBlKz1cIjxcIit0Lm5hbWUrKHQuYXR0cnM/ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciBuIGluIGUpdC5wdXNoKG4rJz1cIicrZVtuXSsnXCInKTtyZXR1cm4gdC5sZW5ndGg/XCIgXCIrdC5qb2luKFwiIFwiKTpcIlwifSh0LmF0dHJzKTpcIlwiKSsodC52b2lkRWxlbWVudD9cIi8+XCI6XCI+XCIpLHQudm9pZEVsZW1lbnQ/ZTplK3QuY2hpbGRyZW4ucmVkdWNlKGEsXCJcIikrXCI8L1wiK3QubmFtZStcIj5cIjtjYXNlXCJjb21tZW50XCI6cmV0dXJuIGUrXCJcXHgzYyEtLVwiK3QuY29tbWVudCtcIi0tXFx4M2VcIn19bW9kdWxlLmV4cG9ydHM9e3BhcnNlOmZ1bmN0aW9uKGUsdCl7dHx8KHQ9e30pLHQuY29tcG9uZW50c3x8KHQuY29tcG9uZW50cz1jKTt2YXIgbixhPVtdLG89W10sdT0tMSxsPSExO2lmKDAhPT1lLmluZGV4T2YoXCI8XCIpKXt2YXIgbT1lLmluZGV4T2YoXCI8XCIpO2EucHVzaCh7dHlwZTpcInRleHRcIixjb250ZW50Oi0xPT09bT9lOmUuc3Vic3RyaW5nKDAsbSl9KX1yZXR1cm4gZS5yZXBsYWNlKGksZnVuY3Rpb24oaSxjKXtpZihsKXtpZihpIT09XCI8L1wiK24ubmFtZStcIj5cIilyZXR1cm47bD0hMX12YXIgbSxkPVwiL1wiIT09aS5jaGFyQXQoMSksZj1pLnN0YXJ0c1dpdGgoXCJcXHgzYyEtLVwiKSxoPWMraS5sZW5ndGgscD1lLmNoYXJBdChoKTtpZihmKXt2YXIgdj1yKGkpO3JldHVybiB1PDA/KGEucHVzaCh2KSxhKTooKG09b1t1XSkuY2hpbGRyZW4ucHVzaCh2KSxhKX1pZihkJiYodSsrLFwidGFnXCI9PT0obj1yKGkpKS50eXBlJiZ0LmNvbXBvbmVudHNbbi5uYW1lXSYmKG4udHlwZT1cImNvbXBvbmVudFwiLGw9ITApLG4udm9pZEVsZW1lbnR8fGx8fCFwfHxcIjxcIj09PXB8fG4uY2hpbGRyZW4ucHVzaCh7dHlwZTpcInRleHRcIixjb250ZW50OmUuc2xpY2UoaCxlLmluZGV4T2YoXCI8XCIsaCkpfSksMD09PXUmJmEucHVzaChuKSwobT1vW3UtMV0pJiZtLmNoaWxkcmVuLnB1c2gobiksb1t1XT1uKSwoIWR8fG4udm9pZEVsZW1lbnQpJiYodT4tMSYmKG4udm9pZEVsZW1lbnR8fG4ubmFtZT09PWkuc2xpY2UoMiwtMSkpJiYodS0tLG49LTE9PT11P2E6b1t1XSksIWwmJlwiPFwiIT09cCYmcCkpe209LTE9PT11P2E6b1t1XS5jaGlsZHJlbjt2YXIgeD1lLmluZGV4T2YoXCI8XCIsaCksZz1lLnNsaWNlKGgsLTE9PT14P3ZvaWQgMDp4KTtzLnRlc3QoZykmJihnPVwiIFwiKSwoeD4tMSYmdSttLmxlbmd0aD49MHx8XCIgXCIhPT1nKSYmbS5wdXNoKHt0eXBlOlwidGV4dFwiLGNvbnRlbnQ6Z30pfX0pLGF9LHN0cmluZ2lmeTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSthKFwiXCIsdCl9LFwiXCIpfX07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1odG1sLXBhcnNlLXN0cmluZ2lmeS5qcy5tYXBcbiIsImV4cG9ydCBmdW5jdGlvbiB3YXJuKCkge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIHtcbiAgICB2YXIgX2NvbnNvbGU7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykgYXJnc1swXSA9IFwicmVhY3QtaTE4bmV4dDo6IFwiLmNvbmNhdChhcmdzWzBdKTtcblxuICAgIChfY29uc29sZSA9IGNvbnNvbGUpLndhcm4uYXBwbHkoX2NvbnNvbGUsIGFyZ3MpO1xuICB9XG59XG52YXIgYWxyZWFkeVdhcm5lZCA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIHdhcm5PbmNlKCkge1xuICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cblxuICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnICYmIGFscmVhZHlXYXJuZWRbYXJnc1swXV0pIHJldHVybjtcbiAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykgYWxyZWFkeVdhcm5lZFthcmdzWzBdXSA9IG5ldyBEYXRlKCk7XG4gIHdhcm4uYXBwbHkodm9pZCAwLCBhcmdzKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTmFtZXNwYWNlcyhpMThuLCBucywgY2IpIHtcbiAgaTE4bi5sb2FkTmFtZXNwYWNlcyhucywgZnVuY3Rpb24gKCkge1xuICAgIGlmIChpMThuLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIGNiKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpbml0aWFsaXplZCA9IGZ1bmN0aW9uIGluaXRpYWxpemVkKCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpMThuLm9mZignaW5pdGlhbGl6ZWQnLCBpbml0aWFsaXplZCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICBjYigpO1xuICAgICAgfTtcblxuICAgICAgaTE4bi5vbignaW5pdGlhbGl6ZWQnLCBpbml0aWFsaXplZCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gb2xkSTE4bmV4dEhhc0xvYWRlZE5hbWVzcGFjZShucywgaTE4bikge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gIHZhciBsbmcgPSBpMThuLmxhbmd1YWdlc1swXTtcbiAgdmFyIGZhbGxiYWNrTG5nID0gaTE4bi5vcHRpb25zID8gaTE4bi5vcHRpb25zLmZhbGxiYWNrTG5nIDogZmFsc2U7XG4gIHZhciBsYXN0TG5nID0gaTE4bi5sYW5ndWFnZXNbaTE4bi5sYW5ndWFnZXMubGVuZ3RoIC0gMV07XG4gIGlmIChsbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2NpbW9kZScpIHJldHVybiB0cnVlO1xuXG4gIHZhciBsb2FkTm90UGVuZGluZyA9IGZ1bmN0aW9uIGxvYWROb3RQZW5kaW5nKGwsIG4pIHtcbiAgICB2YXIgbG9hZFN0YXRlID0gaTE4bi5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLnN0YXRlW1wiXCIuY29uY2F0KGwsIFwifFwiKS5jb25jYXQobildO1xuICAgIHJldHVybiBsb2FkU3RhdGUgPT09IC0xIHx8IGxvYWRTdGF0ZSA9PT0gMjtcbiAgfTtcblxuICBpZiAob3B0aW9ucy5iaW5kSTE4biAmJiBvcHRpb25zLmJpbmRJMThuLmluZGV4T2YoJ2xhbmd1YWdlQ2hhbmdpbmcnKSA+IC0xICYmIGkxOG4uc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5iYWNrZW5kICYmIGkxOG4uaXNMYW5ndWFnZUNoYW5naW5nVG8gJiYgIWxvYWROb3RQZW5kaW5nKGkxOG4uaXNMYW5ndWFnZUNoYW5naW5nVG8sIG5zKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoaTE4bi5oYXNSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSkgcmV0dXJuIHRydWU7XG4gIGlmICghaTE4bi5zZXJ2aWNlcy5iYWNrZW5kQ29ubmVjdG9yLmJhY2tlbmQgfHwgaTE4bi5vcHRpb25zLnJlc291cmNlcyAmJiAhaTE4bi5vcHRpb25zLnBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGxvYWROb3RQZW5kaW5nKGxuZywgbnMpICYmICghZmFsbGJhY2tMbmcgfHwgbG9hZE5vdFBlbmRpbmcobGFzdExuZywgbnMpKSkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0xvYWRlZE5hbWVzcGFjZShucywgaTE4bikge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG5cbiAgaWYgKCFpMThuLmxhbmd1YWdlcyB8fCAhaTE4bi5sYW5ndWFnZXMubGVuZ3RoKSB7XG4gICAgd2Fybk9uY2UoJ2kxOG4ubGFuZ3VhZ2VzIHdlcmUgdW5kZWZpbmVkIG9yIGVtcHR5JywgaTE4bi5sYW5ndWFnZXMpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIGlzTmV3ZXJJMThuZXh0ID0gaTE4bi5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUgIT09IHVuZGVmaW5lZDtcblxuICBpZiAoIWlzTmV3ZXJJMThuZXh0KSB7XG4gICAgcmV0dXJuIG9sZEkxOG5leHRIYXNMb2FkZWROYW1lc3BhY2UobnMsIGkxOG4sIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIGkxOG4uaGFzTG9hZGVkTmFtZXNwYWNlKG5zLCB7XG4gICAgcHJlY2hlY2s6IGZ1bmN0aW9uIHByZWNoZWNrKGkxOG5JbnN0YW5jZSwgbG9hZE5vdFBlbmRpbmcpIHtcbiAgICAgIGlmIChvcHRpb25zLmJpbmRJMThuICYmIG9wdGlvbnMuYmluZEkxOG4uaW5kZXhPZignbGFuZ3VhZ2VDaGFuZ2luZycpID4gLTEgJiYgaTE4bkluc3RhbmNlLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IuYmFja2VuZCAmJiBpMThuSW5zdGFuY2UuaXNMYW5ndWFnZUNoYW5naW5nVG8gJiYgIWxvYWROb3RQZW5kaW5nKGkxOG5JbnN0YW5jZS5pc0xhbmd1YWdlQ2hhbmdpbmdUbywgbnMpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5TmFtZShDb21wb25lbnQpIHtcbiAgcmV0dXJuIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAodHlwZW9mIENvbXBvbmVudCA9PT0gJ3N0cmluZycgJiYgQ29tcG9uZW50Lmxlbmd0aCA+IDAgPyBDb21wb25lbnQgOiAnVW5rbm93bicpO1xufSIsInZhciBtYXRjaEh0bWxFbnRpdHkgPSAvJig/OmFtcHwjMzh8bHR8IzYwfGd0fCM2MnxhcG9zfCMzOXxxdW90fCMzNHxuYnNwfCMxNjB8Y29weXwjMTY5fHJlZ3wjMTc0fGhlbGxpcHwjODIzMHwjeDJGfCM0Nyk7L2c7XG52YXIgaHRtbEVudGl0aWVzID0ge1xuICAnJmFtcDsnOiAnJicsXG4gICcmIzM4Oyc6ICcmJyxcbiAgJyZsdDsnOiAnPCcsXG4gICcmIzYwOyc6ICc8JyxcbiAgJyZndDsnOiAnPicsXG4gICcmIzYyOyc6ICc+JyxcbiAgJyZhcG9zOyc6IFwiJ1wiLFxuICAnJiMzOTsnOiBcIidcIixcbiAgJyZxdW90Oyc6ICdcIicsXG4gICcmIzM0Oyc6ICdcIicsXG4gICcmbmJzcDsnOiAnICcsXG4gICcmIzE2MDsnOiAnICcsXG4gICcmY29weTsnOiAnwqknLFxuICAnJiMxNjk7JzogJ8KpJyxcbiAgJyZyZWc7JzogJ8KuJyxcbiAgJyYjMTc0Oyc6ICfCricsXG4gICcmaGVsbGlwOyc6ICfigKYnLFxuICAnJiM4MjMwOyc6ICfigKYnLFxuICAnJiN4MkY7JzogJy8nLFxuICAnJiM0NzsnOiAnLydcbn07XG5cbnZhciB1bmVzY2FwZUh0bWxFbnRpdHkgPSBmdW5jdGlvbiB1bmVzY2FwZUh0bWxFbnRpdHkobSkge1xuICByZXR1cm4gaHRtbEVudGl0aWVzW21dO1xufTtcblxuZXhwb3J0IHZhciB1bmVzY2FwZSA9IGZ1bmN0aW9uIHVuZXNjYXBlKHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZShtYXRjaEh0bWxFbnRpdHksIHVuZXNjYXBlSHRtbEVudGl0eSk7XG59OyIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgeyB1bmVzY2FwZSB9IGZyb20gJy4vdW5lc2NhcGUuanMnO1xudmFyIGRlZmF1bHRPcHRpb25zID0ge1xuICBiaW5kSTE4bjogJ2xhbmd1YWdlQ2hhbmdlZCcsXG4gIGJpbmRJMThuU3RvcmU6ICcnLFxuICB0cmFuc0VtcHR5Tm9kZVZhbHVlOiAnJyxcbiAgdHJhbnNTdXBwb3J0QmFzaWNIdG1sTm9kZXM6IHRydWUsXG4gIHRyYW5zV3JhcFRleHROb2RlczogJycsXG4gIHRyYW5zS2VlcEJhc2ljSHRtbE5vZGVzRm9yOiBbJ2JyJywgJ3N0cm9uZycsICdpJywgJ3AnXSxcbiAgdXNlU3VzcGVuc2U6IHRydWUsXG4gIHVuZXNjYXBlOiB1bmVzY2FwZVxufTtcbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0cygpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICBkZWZhdWx0T3B0aW9ucyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgZGVmYXVsdE9wdGlvbnMpLCBvcHRpb25zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0cygpIHtcbiAgcmV0dXJuIGRlZmF1bHRPcHRpb25zO1xufSIsInZhciBpMThuSW5zdGFuY2U7XG5leHBvcnQgZnVuY3Rpb24gc2V0STE4bihpbnN0YW5jZSkge1xuICBpMThuSW5zdGFuY2UgPSBpbnN0YW5jZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRJMThuKCkge1xuICByZXR1cm4gaTE4bkluc3RhbmNlO1xufSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbmltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZlwiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiO1xudmFyIF9leGNsdWRlZCA9IFtcImZvcm1hdFwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wiY2hpbGRyZW5cIiwgXCJjb3VudFwiLCBcInBhcmVudFwiLCBcImkxOG5LZXlcIiwgXCJjb250ZXh0XCIsIFwidE9wdGlvbnNcIiwgXCJ2YWx1ZXNcIiwgXCJkZWZhdWx0c1wiLCBcImNvbXBvbmVudHNcIiwgXCJuc1wiLCBcImkxOG5cIiwgXCJ0XCIsIFwic2hvdWxkVW5lc2NhcGVcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IHsgaXNWYWxpZEVsZW1lbnQsIGNsb25lRWxlbWVudCwgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBIVE1MIGZyb20gJ2h0bWwtcGFyc2Utc3RyaW5naWZ5JztcbmltcG9ydCB7IHdhcm4sIHdhcm5PbmNlIH0gZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgeyBnZXREZWZhdWx0cyB9IGZyb20gJy4vZGVmYXVsdHMuanMnO1xuaW1wb3J0IHsgZ2V0STE4biB9IGZyb20gJy4vaTE4bkluc3RhbmNlLmpzJztcblxuZnVuY3Rpb24gaGFzQ2hpbGRyZW4obm9kZSwgY2hlY2tMZW5ndGgpIHtcbiAgaWYgKCFub2RlKSByZXR1cm4gZmFsc2U7XG4gIHZhciBiYXNlID0gbm9kZS5wcm9wcyA/IG5vZGUucHJvcHMuY2hpbGRyZW4gOiBub2RlLmNoaWxkcmVuO1xuICBpZiAoY2hlY2tMZW5ndGgpIHJldHVybiBiYXNlLmxlbmd0aCA+IDA7XG4gIHJldHVybiAhIWJhc2U7XG59XG5cbmZ1bmN0aW9uIGdldENoaWxkcmVuKG5vZGUpIHtcbiAgaWYgKCFub2RlKSByZXR1cm4gW107XG4gIHJldHVybiBub2RlLnByb3BzID8gbm9kZS5wcm9wcy5jaGlsZHJlbiA6IG5vZGUuY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVhY3RDaGlsZHJlbihjaGlsZHJlbikge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGNoaWxkcmVuKSAhPT0gJ1tvYmplY3QgQXJyYXldJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gY2hpbGRyZW4uZXZlcnkoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGlzVmFsaWRFbGVtZW50KGNoaWxkKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEFzQXJyYXkoZGF0YSkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV07XG59XG5cbmZ1bmN0aW9uIG1lcmdlUHJvcHMoc291cmNlLCB0YXJnZXQpIHtcbiAgdmFyIG5ld1RhcmdldCA9IF9vYmplY3RTcHJlYWQoe30sIHRhcmdldCk7XG5cbiAgbmV3VGFyZ2V0LnByb3BzID0gT2JqZWN0LmFzc2lnbihzb3VyY2UucHJvcHMsIHRhcmdldC5wcm9wcyk7XG4gIHJldHVybiBuZXdUYXJnZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc1RvU3RyaW5nKGNoaWxkcmVuLCBpMThuT3B0aW9ucykge1xuICBpZiAoIWNoaWxkcmVuKSByZXR1cm4gJyc7XG4gIHZhciBzdHJpbmdOb2RlID0gJyc7XG4gIHZhciBjaGlsZHJlbkFycmF5ID0gZ2V0QXNBcnJheShjaGlsZHJlbik7XG4gIHZhciBrZWVwQXJyYXkgPSBpMThuT3B0aW9ucy50cmFuc1N1cHBvcnRCYXNpY0h0bWxOb2RlcyAmJiBpMThuT3B0aW9ucy50cmFuc0tlZXBCYXNpY0h0bWxOb2Rlc0ZvciA/IGkxOG5PcHRpb25zLnRyYW5zS2VlcEJhc2ljSHRtbE5vZGVzRm9yIDogW107XG4gIGNoaWxkcmVuQXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQsIGNoaWxkSW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgc3RyaW5nTm9kZSArPSBcIlwiLmNvbmNhdChjaGlsZCk7XG4gICAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIHZhciBjaGlsZFByb3BzQ291bnQgPSBPYmplY3Qua2V5cyhjaGlsZC5wcm9wcykubGVuZ3RoO1xuICAgICAgdmFyIHNob3VsZEtlZXBDaGlsZCA9IGtlZXBBcnJheS5pbmRleE9mKGNoaWxkLnR5cGUpID4gLTE7XG4gICAgICB2YXIgY2hpbGRDaGlsZHJlbiA9IGNoaWxkLnByb3BzLmNoaWxkcmVuO1xuXG4gICAgICBpZiAoIWNoaWxkQ2hpbGRyZW4gJiYgc2hvdWxkS2VlcENoaWxkICYmIGNoaWxkUHJvcHNDb3VudCA9PT0gMCkge1xuICAgICAgICBzdHJpbmdOb2RlICs9IFwiPFwiLmNvbmNhdChjaGlsZC50eXBlLCBcIi8+XCIpO1xuICAgICAgfSBlbHNlIGlmICghY2hpbGRDaGlsZHJlbiAmJiAoIXNob3VsZEtlZXBDaGlsZCB8fCBjaGlsZFByb3BzQ291bnQgIT09IDApKSB7XG4gICAgICAgIHN0cmluZ05vZGUgKz0gXCI8XCIuY29uY2F0KGNoaWxkSW5kZXgsIFwiPjwvXCIpLmNvbmNhdChjaGlsZEluZGV4LCBcIj5cIik7XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkLnByb3BzLmkxOG5Jc0R5bmFtaWNMaXN0KSB7XG4gICAgICAgIHN0cmluZ05vZGUgKz0gXCI8XCIuY29uY2F0KGNoaWxkSW5kZXgsIFwiPjwvXCIpLmNvbmNhdChjaGlsZEluZGV4LCBcIj5cIik7XG4gICAgICB9IGVsc2UgaWYgKHNob3VsZEtlZXBDaGlsZCAmJiBjaGlsZFByb3BzQ291bnQgPT09IDEgJiYgdHlwZW9mIGNoaWxkQ2hpbGRyZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0cmluZ05vZGUgKz0gXCI8XCIuY29uY2F0KGNoaWxkLnR5cGUsIFwiPlwiKS5jb25jYXQoY2hpbGRDaGlsZHJlbiwgXCI8L1wiKS5jb25jYXQoY2hpbGQudHlwZSwgXCI+XCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGNvbnRlbnQgPSBub2Rlc1RvU3RyaW5nKGNoaWxkQ2hpbGRyZW4sIGkxOG5PcHRpb25zKTtcbiAgICAgICAgc3RyaW5nTm9kZSArPSBcIjxcIi5jb25jYXQoY2hpbGRJbmRleCwgXCI+XCIpLmNvbmNhdChjb250ZW50LCBcIjwvXCIpLmNvbmNhdChjaGlsZEluZGV4LCBcIj5cIik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGlsZCA9PT0gbnVsbCkge1xuICAgICAgd2FybihcIlRyYW5zOiB0aGUgcGFzc2VkIGluIHZhbHVlIGlzIGludmFsaWQgLSBzZWVtcyB5b3UgcGFzc2VkIGluIGEgbnVsbCBjaGlsZC5cIik7XG4gICAgfSBlbHNlIGlmIChfdHlwZW9mKGNoaWxkKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhciBmb3JtYXQgPSBjaGlsZC5mb3JtYXQsXG4gICAgICAgICAgY2xvbmUgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoY2hpbGQsIF9leGNsdWRlZCk7XG5cbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY2xvbmUpO1xuXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gZm9ybWF0ID8gXCJcIi5jb25jYXQoa2V5c1swXSwgXCIsIFwiKS5jb25jYXQoZm9ybWF0KSA6IGtleXNbMF07XG4gICAgICAgIHN0cmluZ05vZGUgKz0gXCJ7e1wiLmNvbmNhdCh2YWx1ZSwgXCJ9fVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXCJyZWFjdC1pMThuZXh0OiB0aGUgcGFzc2VkIGluIG9iamVjdCBjb250YWluZWQgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZSAtIHRoZSBvYmplY3Qgc2hvdWxkIGxvb2sgbGlrZSB7eyB2YWx1ZSwgZm9ybWF0IH19IHdoZXJlIGZvcm1hdCBpcyBvcHRpb25hbC5cIiwgY2hpbGQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuKFwiVHJhbnM6IHRoZSBwYXNzZWQgaW4gdmFsdWUgaXMgaW52YWxpZCAtIHNlZW1zIHlvdSBwYXNzZWQgaW4gYSB2YXJpYWJsZSBsaWtlIHtudW1iZXJ9IC0gcGxlYXNlIHBhc3MgaW4gdmFyaWFibGVzIGZvciBpbnRlcnBvbGF0aW9uIGFzIGZ1bGwgb2JqZWN0cyBsaWtlIHt7bnVtYmVyfX0uXCIsIGNoaWxkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3RyaW5nTm9kZTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTm9kZXMoY2hpbGRyZW4sIHRhcmdldFN0cmluZywgaTE4biwgaTE4bk9wdGlvbnMsIGNvbWJpbmVkVE9wdHMsIHNob3VsZFVuZXNjYXBlKSB7XG4gIGlmICh0YXJnZXRTdHJpbmcgPT09ICcnKSByZXR1cm4gW107XG4gIHZhciBrZWVwQXJyYXkgPSBpMThuT3B0aW9ucy50cmFuc0tlZXBCYXNpY0h0bWxOb2Rlc0ZvciB8fCBbXTtcbiAgdmFyIGVtcHR5Q2hpbGRyZW5CdXROZWVkc0hhbmRsaW5nID0gdGFyZ2V0U3RyaW5nICYmIG5ldyBSZWdFeHAoa2VlcEFycmF5LmpvaW4oJ3wnKSkudGVzdCh0YXJnZXRTdHJpbmcpO1xuICBpZiAoIWNoaWxkcmVuICYmICFlbXB0eUNoaWxkcmVuQnV0TmVlZHNIYW5kbGluZykgcmV0dXJuIFt0YXJnZXRTdHJpbmddO1xuICB2YXIgZGF0YSA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldERhdGEoY2hpbGRzKSB7XG4gICAgdmFyIGNoaWxkcmVuQXJyYXkgPSBnZXRBc0FycmF5KGNoaWxkcyk7XG4gICAgY2hpbGRyZW5BcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycpIHJldHVybjtcbiAgICAgIGlmIChoYXNDaGlsZHJlbihjaGlsZCkpIGdldERhdGEoZ2V0Q2hpbGRyZW4oY2hpbGQpKTtlbHNlIGlmIChfdHlwZW9mKGNoaWxkKSA9PT0gJ29iamVjdCcgJiYgIWlzVmFsaWRFbGVtZW50KGNoaWxkKSkgT2JqZWN0LmFzc2lnbihkYXRhLCBjaGlsZCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRhKGNoaWxkcmVuKTtcbiAgdmFyIGFzdCA9IEhUTUwucGFyc2UoXCI8MD5cIi5jb25jYXQodGFyZ2V0U3RyaW5nLCBcIjwvMD5cIikpO1xuXG4gIHZhciBvcHRzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBkYXRhKSwgY29tYmluZWRUT3B0cyk7XG5cbiAgZnVuY3Rpb24gcmVuZGVySW5uZXIoY2hpbGQsIG5vZGUsIHJvb3RSZWFjdE5vZGUpIHtcbiAgICB2YXIgY2hpbGRzID0gZ2V0Q2hpbGRyZW4oY2hpbGQpO1xuICAgIHZhciBtYXBwZWRDaGlsZHJlbiA9IG1hcEFTVChjaGlsZHMsIG5vZGUuY2hpbGRyZW4sIHJvb3RSZWFjdE5vZGUpO1xuICAgIHJldHVybiBoYXNWYWxpZFJlYWN0Q2hpbGRyZW4oY2hpbGRzKSAmJiBtYXBwZWRDaGlsZHJlbi5sZW5ndGggPT09IDAgPyBjaGlsZHMgOiBtYXBwZWRDaGlsZHJlbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2hUcmFuc2xhdGVkSlNYKGNoaWxkLCBpbm5lciwgbWVtLCBpLCBpc1ZvaWQpIHtcbiAgICBpZiAoY2hpbGQuZHVtbXkpIGNoaWxkLmNoaWxkcmVuID0gaW5uZXI7XG4gICAgbWVtLnB1c2goY2xvbmVFbGVtZW50KGNoaWxkLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNoaWxkLnByb3BzKSwge30sIHtcbiAgICAgIGtleTogaVxuICAgIH0pLCBpc1ZvaWQgPyB1bmRlZmluZWQgOiBpbm5lcikpO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFwQVNUKHJlYWN0Tm9kZSwgYXN0Tm9kZSwgcm9vdFJlYWN0Tm9kZSkge1xuICAgIHZhciByZWFjdE5vZGVzID0gZ2V0QXNBcnJheShyZWFjdE5vZGUpO1xuICAgIHZhciBhc3ROb2RlcyA9IGdldEFzQXJyYXkoYXN0Tm9kZSk7XG4gICAgcmV0dXJuIGFzdE5vZGVzLnJlZHVjZShmdW5jdGlvbiAobWVtLCBub2RlLCBpKSB7XG4gICAgICB2YXIgdHJhbnNsYXRpb25Db250ZW50ID0gbm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuWzBdICYmIG5vZGUuY2hpbGRyZW5bMF0uY29udGVudCAmJiBpMThuLnNlcnZpY2VzLmludGVycG9sYXRvci5pbnRlcnBvbGF0ZShub2RlLmNoaWxkcmVuWzBdLmNvbnRlbnQsIG9wdHMsIGkxOG4ubGFuZ3VhZ2UpO1xuXG4gICAgICBpZiAobm9kZS50eXBlID09PSAndGFnJykge1xuICAgICAgICB2YXIgdG1wID0gcmVhY3ROb2Rlc1twYXJzZUludChub2RlLm5hbWUsIDEwKV07XG4gICAgICAgIGlmICghdG1wICYmIHJvb3RSZWFjdE5vZGUubGVuZ3RoID09PSAxICYmIHJvb3RSZWFjdE5vZGVbMF1bbm9kZS5uYW1lXSkgdG1wID0gcm9vdFJlYWN0Tm9kZVswXVtub2RlLm5hbWVdO1xuICAgICAgICBpZiAoIXRtcCkgdG1wID0ge307XG4gICAgICAgIHZhciBjaGlsZCA9IE9iamVjdC5rZXlzKG5vZGUuYXR0cnMpLmxlbmd0aCAhPT0gMCA/IG1lcmdlUHJvcHMoe1xuICAgICAgICAgIHByb3BzOiBub2RlLmF0dHJzXG4gICAgICAgIH0sIHRtcCkgOiB0bXA7XG4gICAgICAgIHZhciBpc0VsZW1lbnQgPSBpc1ZhbGlkRWxlbWVudChjaGlsZCk7XG4gICAgICAgIHZhciBpc1ZhbGlkVHJhbnNsYXRpb25XaXRoQ2hpbGRyZW4gPSBpc0VsZW1lbnQgJiYgaGFzQ2hpbGRyZW4obm9kZSwgdHJ1ZSkgJiYgIW5vZGUudm9pZEVsZW1lbnQ7XG4gICAgICAgIHZhciBpc0VtcHR5VHJhbnNXaXRoSFRNTCA9IGVtcHR5Q2hpbGRyZW5CdXROZWVkc0hhbmRsaW5nICYmIF90eXBlb2YoY2hpbGQpID09PSAnb2JqZWN0JyAmJiBjaGlsZC5kdW1teSAmJiAhaXNFbGVtZW50O1xuICAgICAgICB2YXIgaXNLbm93bkNvbXBvbmVudCA9IF90eXBlb2YoY2hpbGRyZW4pID09PSAnb2JqZWN0JyAmJiBjaGlsZHJlbiAhPT0gbnVsbCAmJiBPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChjaGlsZHJlbiwgbm9kZS5uYW1lKTtcblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IGkxOG4uc2VydmljZXMuaW50ZXJwb2xhdG9yLmludGVycG9sYXRlKGNoaWxkLCBvcHRzLCBpMThuLmxhbmd1YWdlKTtcbiAgICAgICAgICBtZW0ucHVzaCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFzQ2hpbGRyZW4oY2hpbGQpIHx8IGlzVmFsaWRUcmFuc2xhdGlvbldpdGhDaGlsZHJlbikge1xuICAgICAgICAgICAgdmFyIGlubmVyID0gcmVuZGVySW5uZXIoY2hpbGQsIG5vZGUsIHJvb3RSZWFjdE5vZGUpO1xuICAgICAgICAgICAgcHVzaFRyYW5zbGF0ZWRKU1goY2hpbGQsIGlubmVyLCBtZW0sIGkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNFbXB0eVRyYW5zV2l0aEhUTUwpIHtcbiAgICAgICAgICB2YXIgX2lubmVyID0gbWFwQVNUKHJlYWN0Tm9kZXMsIG5vZGUuY2hpbGRyZW4sIHJvb3RSZWFjdE5vZGUpO1xuXG4gICAgICAgICAgbWVtLnB1c2goY2xvbmVFbGVtZW50KGNoaWxkLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGNoaWxkLnByb3BzKSwge30sIHtcbiAgICAgICAgICAgIGtleTogaVxuICAgICAgICAgIH0pLCBfaW5uZXIpKTtcbiAgICAgICAgfSBlbHNlIGlmIChOdW1iZXIuaXNOYU4ocGFyc2VGbG9hdChub2RlLm5hbWUpKSkge1xuICAgICAgICAgIGlmIChpc0tub3duQ29tcG9uZW50KSB7XG4gICAgICAgICAgICB2YXIgX2lubmVyMiA9IHJlbmRlcklubmVyKGNoaWxkLCBub2RlLCByb290UmVhY3ROb2RlKTtcblxuICAgICAgICAgICAgcHVzaFRyYW5zbGF0ZWRKU1goY2hpbGQsIF9pbm5lcjIsIG1lbSwgaSwgbm9kZS52b2lkRWxlbWVudCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpMThuT3B0aW9ucy50cmFuc1N1cHBvcnRCYXNpY0h0bWxOb2RlcyAmJiBrZWVwQXJyYXkuaW5kZXhPZihub2RlLm5hbWUpID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnZvaWRFbGVtZW50KSB7XG4gICAgICAgICAgICAgIG1lbS5wdXNoKGNyZWF0ZUVsZW1lbnQobm9kZS5uYW1lLCB7XG4gICAgICAgICAgICAgICAga2V5OiBcIlwiLmNvbmNhdChub2RlLm5hbWUsIFwiLVwiKS5jb25jYXQoaSlcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIF9pbm5lcjMgPSBtYXBBU1QocmVhY3ROb2Rlcywgbm9kZS5jaGlsZHJlbiwgcm9vdFJlYWN0Tm9kZSk7XG5cbiAgICAgICAgICAgICAgbWVtLnB1c2goY3JlYXRlRWxlbWVudChub2RlLm5hbWUsIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwiXCIuY29uY2F0KG5vZGUubmFtZSwgXCItXCIpLmNvbmNhdChpKVxuICAgICAgICAgICAgICB9LCBfaW5uZXIzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChub2RlLnZvaWRFbGVtZW50KSB7XG4gICAgICAgICAgICBtZW0ucHVzaChcIjxcIi5jb25jYXQobm9kZS5uYW1lLCBcIiAvPlwiKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBfaW5uZXI0ID0gbWFwQVNUKHJlYWN0Tm9kZXMsIG5vZGUuY2hpbGRyZW4sIHJvb3RSZWFjdE5vZGUpO1xuXG4gICAgICAgICAgICBtZW0ucHVzaChcIjxcIi5jb25jYXQobm9kZS5uYW1lLCBcIj5cIikuY29uY2F0KF9pbm5lcjQsIFwiPC9cIikuY29uY2F0KG5vZGUubmFtZSwgXCI+XCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoX3R5cGVvZihjaGlsZCkgPT09ICdvYmplY3QnICYmICFpc0VsZW1lbnQpIHtcbiAgICAgICAgICB2YXIgY29udGVudCA9IG5vZGUuY2hpbGRyZW5bMF0gPyB0cmFuc2xhdGlvbkNvbnRlbnQgOiBudWxsO1xuICAgICAgICAgIGlmIChjb250ZW50KSBtZW0ucHVzaChjb250ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiB0cmFuc2xhdGlvbkNvbnRlbnQpIHtcbiAgICAgICAgICBtZW0ucHVzaChjbG9uZUVsZW1lbnQoY2hpbGQsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY2hpbGQucHJvcHMpLCB7fSwge1xuICAgICAgICAgICAga2V5OiBpXG4gICAgICAgICAgfSksIHRyYW5zbGF0aW9uQ29udGVudCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1lbS5wdXNoKGNsb25lRWxlbWVudChjaGlsZCwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjaGlsZC5wcm9wcyksIHt9LCB7XG4gICAgICAgICAgICBrZXk6IGlcbiAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICAgIHZhciB3cmFwVGV4dE5vZGVzID0gaTE4bk9wdGlvbnMudHJhbnNXcmFwVGV4dE5vZGVzO1xuXG4gICAgICAgIHZhciBfY29udGVudCA9IHNob3VsZFVuZXNjYXBlID8gaTE4bk9wdGlvbnMudW5lc2NhcGUoaTE4bi5zZXJ2aWNlcy5pbnRlcnBvbGF0b3IuaW50ZXJwb2xhdGUobm9kZS5jb250ZW50LCBvcHRzLCBpMThuLmxhbmd1YWdlKSkgOiBpMThuLnNlcnZpY2VzLmludGVycG9sYXRvci5pbnRlcnBvbGF0ZShub2RlLmNvbnRlbnQsIG9wdHMsIGkxOG4ubGFuZ3VhZ2UpO1xuXG4gICAgICAgIGlmICh3cmFwVGV4dE5vZGVzKSB7XG4gICAgICAgICAgbWVtLnB1c2goY3JlYXRlRWxlbWVudCh3cmFwVGV4dE5vZGVzLCB7XG4gICAgICAgICAgICBrZXk6IFwiXCIuY29uY2F0KG5vZGUubmFtZSwgXCItXCIpLmNvbmNhdChpKVxuICAgICAgICAgIH0sIF9jb250ZW50KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWVtLnB1c2goX2NvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtZW07XG4gICAgfSwgW10pO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IG1hcEFTVChbe1xuICAgIGR1bW15OiB0cnVlLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbiB8fCBbXVxuICB9XSwgYXN0LCBnZXRBc0FycmF5KGNoaWxkcmVuIHx8IFtdKSk7XG4gIHJldHVybiBnZXRDaGlsZHJlbihyZXN1bHRbMF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVHJhbnMoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY291bnQgPSBfcmVmLmNvdW50LFxuICAgICAgcGFyZW50ID0gX3JlZi5wYXJlbnQsXG4gICAgICBpMThuS2V5ID0gX3JlZi5pMThuS2V5LFxuICAgICAgY29udGV4dCA9IF9yZWYuY29udGV4dCxcbiAgICAgIF9yZWYkdE9wdGlvbnMgPSBfcmVmLnRPcHRpb25zLFxuICAgICAgdE9wdGlvbnMgPSBfcmVmJHRPcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkdE9wdGlvbnMsXG4gICAgICB2YWx1ZXMgPSBfcmVmLnZhbHVlcyxcbiAgICAgIGRlZmF1bHRzID0gX3JlZi5kZWZhdWx0cyxcbiAgICAgIGNvbXBvbmVudHMgPSBfcmVmLmNvbXBvbmVudHMsXG4gICAgICBucyA9IF9yZWYubnMsXG4gICAgICBpMThuRnJvbVByb3BzID0gX3JlZi5pMThuLFxuICAgICAgdEZyb21Qcm9wcyA9IF9yZWYudCxcbiAgICAgIHNob3VsZFVuZXNjYXBlID0gX3JlZi5zaG91bGRVbmVzY2FwZSxcbiAgICAgIGFkZGl0aW9uYWxQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQyKTtcblxuICB2YXIgaTE4biA9IGkxOG5Gcm9tUHJvcHMgfHwgZ2V0STE4bigpO1xuXG4gIGlmICghaTE4bikge1xuICAgIHdhcm5PbmNlKCdZb3Ugd2lsbCBuZWVkIHRvIHBhc3MgaW4gYW4gaTE4bmV4dCBpbnN0YW5jZSBieSB1c2luZyBpMThuZXh0UmVhY3RNb2R1bGUnKTtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgdCA9IHRGcm9tUHJvcHMgfHwgaTE4bi50LmJpbmQoaTE4bikgfHwgZnVuY3Rpb24gKGspIHtcbiAgICByZXR1cm4gaztcbiAgfTtcblxuICBpZiAoY29udGV4dCkgdE9wdGlvbnMuY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgdmFyIHJlYWN0STE4bmV4dE9wdGlvbnMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGdldERlZmF1bHRzKCkpLCBpMThuLm9wdGlvbnMgJiYgaTE4bi5vcHRpb25zLnJlYWN0KTtcblxuICB2YXIgbmFtZXNwYWNlcyA9IG5zIHx8IHQubnMgfHwgaTE4bi5vcHRpb25zICYmIGkxOG4ub3B0aW9ucy5kZWZhdWx0TlM7XG4gIG5hbWVzcGFjZXMgPSB0eXBlb2YgbmFtZXNwYWNlcyA9PT0gJ3N0cmluZycgPyBbbmFtZXNwYWNlc10gOiBuYW1lc3BhY2VzIHx8IFsndHJhbnNsYXRpb24nXTtcbiAgdmFyIGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRzIHx8IG5vZGVzVG9TdHJpbmcoY2hpbGRyZW4sIHJlYWN0STE4bmV4dE9wdGlvbnMpIHx8IHJlYWN0STE4bmV4dE9wdGlvbnMudHJhbnNFbXB0eU5vZGVWYWx1ZSB8fCBpMThuS2V5O1xuICB2YXIgaGFzaFRyYW5zS2V5ID0gcmVhY3RJMThuZXh0T3B0aW9ucy5oYXNoVHJhbnNLZXk7XG4gIHZhciBrZXkgPSBpMThuS2V5IHx8IChoYXNoVHJhbnNLZXkgPyBoYXNoVHJhbnNLZXkoZGVmYXVsdFZhbHVlKSA6IGRlZmF1bHRWYWx1ZSk7XG4gIHZhciBpbnRlcnBvbGF0aW9uT3ZlcnJpZGUgPSB2YWx1ZXMgPyB0T3B0aW9ucy5pbnRlcnBvbGF0aW9uIDoge1xuICAgIGludGVycG9sYXRpb246IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdE9wdGlvbnMuaW50ZXJwb2xhdGlvbiksIHt9LCB7XG4gICAgICBwcmVmaXg6ICcjJD8nLFxuICAgICAgc3VmZml4OiAnPyQjJ1xuICAgIH0pXG4gIH07XG5cbiAgdmFyIGNvbWJpbmVkVE9wdHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0T3B0aW9ucyksIHt9LCB7XG4gICAgY291bnQ6IGNvdW50XG4gIH0sIHZhbHVlcyksIGludGVycG9sYXRpb25PdmVycmlkZSksIHt9LCB7XG4gICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgbnM6IG5hbWVzcGFjZXNcbiAgfSk7XG5cbiAgdmFyIHRyYW5zbGF0aW9uID0ga2V5ID8gdChrZXksIGNvbWJpbmVkVE9wdHMpIDogZGVmYXVsdFZhbHVlO1xuICB2YXIgY29udGVudCA9IHJlbmRlck5vZGVzKGNvbXBvbmVudHMgfHwgY2hpbGRyZW4sIHRyYW5zbGF0aW9uLCBpMThuLCByZWFjdEkxOG5leHRPcHRpb25zLCBjb21iaW5lZFRPcHRzLCBzaG91bGRVbmVzY2FwZSk7XG4gIHZhciB1c2VBc1BhcmVudCA9IHBhcmVudCAhPT0gdW5kZWZpbmVkID8gcGFyZW50IDogcmVhY3RJMThuZXh0T3B0aW9ucy5kZWZhdWx0VHJhbnNQYXJlbnQ7XG4gIHJldHVybiB1c2VBc1BhcmVudCA/IGNyZWF0ZUVsZW1lbnQodXNlQXNQYXJlbnQsIGFkZGl0aW9uYWxQcm9wcywgY29udGVudCkgOiBjb250ZW50O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgdG9Qcm9wZXJ0eUtleShkZXNjcmlwdG9yLmtleSksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufSIsImltcG9ydCB7IHNldERlZmF1bHRzIH0gZnJvbSAnLi9kZWZhdWx0cy5qcyc7XG5pbXBvcnQgeyBzZXRJMThuIH0gZnJvbSAnLi9pMThuSW5zdGFuY2UuanMnO1xuZXhwb3J0IHZhciBpbml0UmVhY3RJMThuZXh0ID0ge1xuICB0eXBlOiAnM3JkUGFydHknLFxuICBpbml0OiBmdW5jdGlvbiBpbml0KGluc3RhbmNlKSB7XG4gICAgc2V0RGVmYXVsdHMoaW5zdGFuY2Uub3B0aW9ucy5yZWFjdCk7XG4gICAgc2V0STE4bihpbnN0YW5jZSk7XG4gIH1cbn07IiwiaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVja1wiO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzc1wiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBnZXREZWZhdWx0cywgc2V0RGVmYXVsdHMgfSBmcm9tICcuL2RlZmF1bHRzLmpzJztcbmltcG9ydCB7IGdldEkxOG4sIHNldEkxOG4gfSBmcm9tICcuL2kxOG5JbnN0YW5jZS5qcyc7XG5pbXBvcnQgeyBpbml0UmVhY3RJMThuZXh0IH0gZnJvbSAnLi9pbml0UmVhY3RJMThuZXh0LmpzJztcbmV4cG9ydCB7IGdldERlZmF1bHRzLCBzZXREZWZhdWx0cywgZ2V0STE4biwgc2V0STE4biwgaW5pdFJlYWN0STE4bmV4dCB9O1xuZXhwb3J0IHZhciBJMThuQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoKTtcbmV4cG9ydCB2YXIgUmVwb3J0TmFtZXNwYWNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUmVwb3J0TmFtZXNwYWNlcygpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVwb3J0TmFtZXNwYWNlcyk7XG5cbiAgICB0aGlzLnVzZWROYW1lc3BhY2VzID0ge307XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUmVwb3J0TmFtZXNwYWNlcywgW3tcbiAgICBrZXk6IFwiYWRkVXNlZE5hbWVzcGFjZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkVXNlZE5hbWVzcGFjZXMobmFtZXNwYWNlcykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgbmFtZXNwYWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChucykge1xuICAgICAgICBpZiAoIV90aGlzLnVzZWROYW1lc3BhY2VzW25zXSkgX3RoaXMudXNlZE5hbWVzcGFjZXNbbnNdID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRVc2VkTmFtZXNwYWNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRVc2VkTmFtZXNwYWNlcygpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnVzZWROYW1lc3BhY2VzKTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUmVwb3J0TmFtZXNwYWNlcztcbn0oKTtcbmV4cG9ydCBmdW5jdGlvbiBjb21wb3NlSW5pdGlhbFByb3BzKEZvckNvbXBvbmVudCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGN0eCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgdmFyIGkxOG5Jbml0aWFsUHJvcHMgPSBnZXRJbml0aWFsUHJvcHMoKTtcblxuICAgICAgaWYgKEZvckNvbXBvbmVudC5nZXRJbml0aWFsUHJvcHMpIHtcbiAgICAgICAgRm9yQ29tcG9uZW50LmdldEluaXRpYWxQcm9wcyhjdHgpLnRoZW4oZnVuY3Rpb24gKGNvbXBvbmVudHNJbml0aWFsUHJvcHMpIHtcbiAgICAgICAgICByZXNvbHZlKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgY29tcG9uZW50c0luaXRpYWxQcm9wcyksIGkxOG5Jbml0aWFsUHJvcHMpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKGkxOG5Jbml0aWFsUHJvcHMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxQcm9wcygpIHtcbiAgdmFyIGkxOG4gPSBnZXRJMThuKCk7XG4gIHZhciBuYW1lc3BhY2VzID0gaTE4bi5yZXBvcnROYW1lc3BhY2VzID8gaTE4bi5yZXBvcnROYW1lc3BhY2VzLmdldFVzZWROYW1lc3BhY2VzKCkgOiBbXTtcbiAgdmFyIHJldCA9IHt9O1xuICB2YXIgaW5pdGlhbEkxOG5TdG9yZSA9IHt9O1xuICBpMThuLmxhbmd1YWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7XG4gICAgaW5pdGlhbEkxOG5TdG9yZVtsXSA9IHt9O1xuICAgIG5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbiAobnMpIHtcbiAgICAgIGluaXRpYWxJMThuU3RvcmVbbF1bbnNdID0gaTE4bi5nZXRSZXNvdXJjZUJ1bmRsZShsLCBucykgfHwge307XG4gICAgfSk7XG4gIH0pO1xuICByZXQuaW5pdGlhbEkxOG5TdG9yZSA9IGluaXRpYWxJMThuU3RvcmU7XG4gIHJldC5pbml0aWFsTGFuZ3VhZ2UgPSBpMThuLmxhbmd1YWdlO1xuICByZXR1cm4gcmV0O1xufSIsImltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbnZhciBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvdW50XCIsIFwicGFyZW50XCIsIFwiaTE4bktleVwiLCBcImNvbnRleHRcIiwgXCJ0T3B0aW9uc1wiLCBcInZhbHVlc1wiLCBcImRlZmF1bHRzXCIsIFwiY29tcG9uZW50c1wiLCBcIm5zXCIsIFwiaTE4blwiLCBcInRcIiwgXCJzaG91bGRVbmVzY2FwZVwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbm9kZXNUb1N0cmluZywgVHJhbnMgYXMgVHJhbnNXaXRob3V0Q29udGV4dCB9IGZyb20gJy4vVHJhbnNXaXRob3V0Q29udGV4dC5qcyc7XG5pbXBvcnQgeyBnZXRJMThuLCBJMThuQ29udGV4dCB9IGZyb20gJy4vY29udGV4dC5qcyc7XG5leHBvcnQgeyBub2Rlc1RvU3RyaW5nIH07XG5leHBvcnQgZnVuY3Rpb24gVHJhbnMoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY291bnQgPSBfcmVmLmNvdW50LFxuICAgICAgcGFyZW50ID0gX3JlZi5wYXJlbnQsXG4gICAgICBpMThuS2V5ID0gX3JlZi5pMThuS2V5LFxuICAgICAgY29udGV4dCA9IF9yZWYuY29udGV4dCxcbiAgICAgIF9yZWYkdE9wdGlvbnMgPSBfcmVmLnRPcHRpb25zLFxuICAgICAgdE9wdGlvbnMgPSBfcmVmJHRPcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkdE9wdGlvbnMsXG4gICAgICB2YWx1ZXMgPSBfcmVmLnZhbHVlcyxcbiAgICAgIGRlZmF1bHRzID0gX3JlZi5kZWZhdWx0cyxcbiAgICAgIGNvbXBvbmVudHMgPSBfcmVmLmNvbXBvbmVudHMsXG4gICAgICBucyA9IF9yZWYubnMsXG4gICAgICBpMThuRnJvbVByb3BzID0gX3JlZi5pMThuLFxuICAgICAgdEZyb21Qcm9wcyA9IF9yZWYudCxcbiAgICAgIHNob3VsZFVuZXNjYXBlID0gX3JlZi5zaG91bGRVbmVzY2FwZSxcbiAgICAgIGFkZGl0aW9uYWxQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBfcmVmMiA9IHVzZUNvbnRleHQoSTE4bkNvbnRleHQpIHx8IHt9LFxuICAgICAgaTE4bkZyb21Db250ZXh0ID0gX3JlZjIuaTE4bixcbiAgICAgIGRlZmF1bHROU0Zyb21Db250ZXh0ID0gX3JlZjIuZGVmYXVsdE5TO1xuXG4gIHZhciBpMThuID0gaTE4bkZyb21Qcm9wcyB8fCBpMThuRnJvbUNvbnRleHQgfHwgZ2V0STE4bigpO1xuICB2YXIgdCA9IHRGcm9tUHJvcHMgfHwgaTE4biAmJiBpMThuLnQuYmluZChpMThuKTtcbiAgcmV0dXJuIFRyYW5zV2l0aG91dENvbnRleHQoX29iamVjdFNwcmVhZCh7XG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGNvdW50OiBjb3VudCxcbiAgICBwYXJlbnQ6IHBhcmVudCxcbiAgICBpMThuS2V5OiBpMThuS2V5LFxuICAgIGNvbnRleHQ6IGNvbnRleHQsXG4gICAgdE9wdGlvbnM6IHRPcHRpb25zLFxuICAgIHZhbHVlczogdmFsdWVzLFxuICAgIGRlZmF1bHRzOiBkZWZhdWx0cyxcbiAgICBjb21wb25lbnRzOiBjb21wb25lbnRzLFxuICAgIG5zOiBucyB8fCB0ICYmIHQubnMgfHwgZGVmYXVsdE5TRnJvbUNvbnRleHQgfHwgaTE4biAmJiBpMThuLm9wdGlvbnMgJiYgaTE4bi5vcHRpb25zLmRlZmF1bHROUyxcbiAgICBpMThuOiBpMThuLFxuICAgIHQ6IHRGcm9tUHJvcHMsXG4gICAgc2hvdWxkVW5lc2NhcGU6IHNob3VsZFVuZXNjYXBlXG4gIH0sIGFkZGl0aW9uYWxQcm9wcykpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7XG4gIHZhciBfaSA9IG51bGwgPT0gYXJyID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdO1xuICBpZiAobnVsbCAhPSBfaSkge1xuICAgIHZhciBfcyxcbiAgICAgIF9lLFxuICAgICAgX3gsXG4gICAgICBfcixcbiAgICAgIF9hcnIgPSBbXSxcbiAgICAgIF9uID0gITAsXG4gICAgICBfZCA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoX3ggPSAoX2kgPSBfaS5jYWxsKGFycikpLm5leHQsIDAgPT09IGkpIHtcbiAgICAgICAgaWYgKE9iamVjdChfaSkgIT09IF9pKSByZXR1cm47XG4gICAgICAgIF9uID0gITE7XG4gICAgICB9IGVsc2UgZm9yICg7ICEoX24gPSAoX3MgPSBfeC5jYWxsKF9pKSkuZG9uZSkgJiYgKF9hcnIucHVzaChfcy52YWx1ZSksIF9hcnIubGVuZ3RoICE9PSBpKTsgX24gPSAhMCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBfZCA9ICEwLCBfZSA9IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFfbiAmJiBudWxsICE9IF9pW1wicmV0dXJuXCJdICYmIChfciA9IF9pW1wicmV0dXJuXCJdKCksIE9iamVjdChfcikgIT09IF9yKSkgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKF9kKSB0aHJvdyBfZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9hcnI7XG4gIH1cbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuICByZXR1cm4gYXJyMjtcbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwiaW1wb3J0IF9zbGljZWRUb0FycmF5IGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXlcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIjtcbmltcG9ydCBfdHlwZW9mIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZlwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNvbnRleHQsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGdldEkxOG4sIGdldERlZmF1bHRzLCBSZXBvcnROYW1lc3BhY2VzLCBJMThuQ29udGV4dCB9IGZyb20gJy4vY29udGV4dC5qcyc7XG5pbXBvcnQgeyB3YXJuT25jZSwgbG9hZE5hbWVzcGFjZXMsIGhhc0xvYWRlZE5hbWVzcGFjZSB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG52YXIgdXNlUHJldmlvdXMgPSBmdW5jdGlvbiB1c2VQcmV2aW91cyh2YWx1ZSwgaWdub3JlKSB7XG4gIHZhciByZWYgPSB1c2VSZWYoKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZWYuY3VycmVudCA9IGlnbm9yZSA/IHJlZi5jdXJyZW50IDogdmFsdWU7XG4gIH0sIFt2YWx1ZSwgaWdub3JlXSk7XG4gIHJldHVybiByZWYuY3VycmVudDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUcmFuc2xhdGlvbihucykge1xuICB2YXIgcHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICB2YXIgaTE4bkZyb21Qcm9wcyA9IHByb3BzLmkxOG47XG5cbiAgdmFyIF9yZWYgPSB1c2VDb250ZXh0KEkxOG5Db250ZXh0KSB8fCB7fSxcbiAgICAgIGkxOG5Gcm9tQ29udGV4dCA9IF9yZWYuaTE4bixcbiAgICAgIGRlZmF1bHROU0Zyb21Db250ZXh0ID0gX3JlZi5kZWZhdWx0TlM7XG5cbiAgdmFyIGkxOG4gPSBpMThuRnJvbVByb3BzIHx8IGkxOG5Gcm9tQ29udGV4dCB8fCBnZXRJMThuKCk7XG4gIGlmIChpMThuICYmICFpMThuLnJlcG9ydE5hbWVzcGFjZXMpIGkxOG4ucmVwb3J0TmFtZXNwYWNlcyA9IG5ldyBSZXBvcnROYW1lc3BhY2VzKCk7XG5cbiAgaWYgKCFpMThuKSB7XG4gICAgd2Fybk9uY2UoJ1lvdSB3aWxsIG5lZWQgdG8gcGFzcyBpbiBhbiBpMThuZXh0IGluc3RhbmNlIGJ5IHVzaW5nIGluaXRSZWFjdEkxOG5leHQnKTtcblxuICAgIHZhciBub3RSZWFkeVQgPSBmdW5jdGlvbiBub3RSZWFkeVQoaywgb3B0c09yRGVmYXVsdFZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHNPckRlZmF1bHRWYWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiBvcHRzT3JEZWZhdWx0VmFsdWU7XG4gICAgICBpZiAob3B0c09yRGVmYXVsdFZhbHVlICYmIF90eXBlb2Yob3B0c09yRGVmYXVsdFZhbHVlKSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9wdHNPckRlZmF1bHRWYWx1ZS5kZWZhdWx0VmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gb3B0c09yRGVmYXVsdFZhbHVlLmRlZmF1bHRWYWx1ZTtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGspID8ga1trLmxlbmd0aCAtIDFdIDogaztcbiAgICB9O1xuXG4gICAgdmFyIHJldE5vdFJlYWR5ID0gW25vdFJlYWR5VCwge30sIGZhbHNlXTtcbiAgICByZXROb3RSZWFkeS50ID0gbm90UmVhZHlUO1xuICAgIHJldE5vdFJlYWR5LmkxOG4gPSB7fTtcbiAgICByZXROb3RSZWFkeS5yZWFkeSA9IGZhbHNlO1xuICAgIHJldHVybiByZXROb3RSZWFkeTtcbiAgfVxuXG4gIGlmIChpMThuLm9wdGlvbnMucmVhY3QgJiYgaTE4bi5vcHRpb25zLnJlYWN0LndhaXQgIT09IHVuZGVmaW5lZCkgd2Fybk9uY2UoJ0l0IHNlZW1zIHlvdSBhcmUgc3RpbGwgdXNpbmcgdGhlIG9sZCB3YWl0IG9wdGlvbiwgeW91IG1heSBtaWdyYXRlIHRvIHRoZSBuZXcgdXNlU3VzcGVuc2UgYmVoYXZpb3VyLicpO1xuXG4gIHZhciBpMThuT3B0aW9ucyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBnZXREZWZhdWx0cygpKSwgaTE4bi5vcHRpb25zLnJlYWN0KSwgcHJvcHMpO1xuXG4gIHZhciB1c2VTdXNwZW5zZSA9IGkxOG5PcHRpb25zLnVzZVN1c3BlbnNlLFxuICAgICAga2V5UHJlZml4ID0gaTE4bk9wdGlvbnMua2V5UHJlZml4O1xuICB2YXIgbmFtZXNwYWNlcyA9IG5zIHx8IGRlZmF1bHROU0Zyb21Db250ZXh0IHx8IGkxOG4ub3B0aW9ucyAmJiBpMThuLm9wdGlvbnMuZGVmYXVsdE5TO1xuICBuYW1lc3BhY2VzID0gdHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gW25hbWVzcGFjZXNdIDogbmFtZXNwYWNlcyB8fCBbJ3RyYW5zbGF0aW9uJ107XG4gIGlmIChpMThuLnJlcG9ydE5hbWVzcGFjZXMuYWRkVXNlZE5hbWVzcGFjZXMpIGkxOG4ucmVwb3J0TmFtZXNwYWNlcy5hZGRVc2VkTmFtZXNwYWNlcyhuYW1lc3BhY2VzKTtcbiAgdmFyIHJlYWR5ID0gKGkxOG4uaXNJbml0aWFsaXplZCB8fCBpMThuLmluaXRpYWxpemVkU3RvcmVPbmNlKSAmJiBuYW1lc3BhY2VzLmV2ZXJ5KGZ1bmN0aW9uIChuKSB7XG4gICAgcmV0dXJuIGhhc0xvYWRlZE5hbWVzcGFjZShuLCBpMThuLCBpMThuT3B0aW9ucyk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGdldFQoKSB7XG4gICAgcmV0dXJuIGkxOG4uZ2V0Rml4ZWRUKG51bGwsIGkxOG5PcHRpb25zLm5zTW9kZSA9PT0gJ2ZhbGxiYWNrJyA/IG5hbWVzcGFjZXMgOiBuYW1lc3BhY2VzWzBdLCBrZXlQcmVmaXgpO1xuICB9XG5cbiAgdmFyIF91c2VTdGF0ZSA9IHVzZVN0YXRlKGdldFQpLFxuICAgICAgX3VzZVN0YXRlMiA9IF9zbGljZWRUb0FycmF5KF91c2VTdGF0ZSwgMiksXG4gICAgICB0ID0gX3VzZVN0YXRlMlswXSxcbiAgICAgIHNldFQgPSBfdXNlU3RhdGUyWzFdO1xuXG4gIHZhciBqb2luZWROUyA9IG5hbWVzcGFjZXMuam9pbigpO1xuICB2YXIgcHJldmlvdXNKb2luZWROUyA9IHVzZVByZXZpb3VzKGpvaW5lZE5TKTtcbiAgdmFyIGlzTW91bnRlZCA9IHVzZVJlZih0cnVlKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYmluZEkxOG4gPSBpMThuT3B0aW9ucy5iaW5kSTE4bixcbiAgICAgICAgYmluZEkxOG5TdG9yZSA9IGkxOG5PcHRpb25zLmJpbmRJMThuU3RvcmU7XG4gICAgaXNNb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuXG4gICAgaWYgKCFyZWFkeSAmJiAhdXNlU3VzcGVuc2UpIHtcbiAgICAgIGxvYWROYW1lc3BhY2VzKGkxOG4sIG5hbWVzcGFjZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzTW91bnRlZC5jdXJyZW50KSBzZXRUKGdldFQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlYWR5ICYmIHByZXZpb3VzSm9pbmVkTlMgJiYgcHJldmlvdXNKb2luZWROUyAhPT0gam9pbmVkTlMgJiYgaXNNb3VudGVkLmN1cnJlbnQpIHtcbiAgICAgIHNldFQoZ2V0VCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYm91bmRSZXNldCgpIHtcbiAgICAgIGlmIChpc01vdW50ZWQuY3VycmVudCkgc2V0VChnZXRUKTtcbiAgICB9XG5cbiAgICBpZiAoYmluZEkxOG4gJiYgaTE4bikgaTE4bi5vbihiaW5kSTE4biwgYm91bmRSZXNldCk7XG4gICAgaWYgKGJpbmRJMThuU3RvcmUgJiYgaTE4bikgaTE4bi5zdG9yZS5vbihiaW5kSTE4blN0b3JlLCBib3VuZFJlc2V0KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgaXNNb3VudGVkLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIGlmIChiaW5kSTE4biAmJiBpMThuKSBiaW5kSTE4bi5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIGkxOG4ub2ZmKGUsIGJvdW5kUmVzZXQpO1xuICAgICAgfSk7XG4gICAgICBpZiAoYmluZEkxOG5TdG9yZSAmJiBpMThuKSBiaW5kSTE4blN0b3JlLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gaTE4bi5zdG9yZS5vZmYoZSwgYm91bmRSZXNldCk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9LCBbaTE4biwgam9pbmVkTlNdKTtcbiAgdmFyIGlzSW5pdGlhbCA9IHVzZVJlZih0cnVlKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNNb3VudGVkLmN1cnJlbnQgJiYgIWlzSW5pdGlhbC5jdXJyZW50KSB7XG4gICAgICBzZXRUKGdldFQpO1xuICAgIH1cblxuICAgIGlzSW5pdGlhbC5jdXJyZW50ID0gZmFsc2U7XG4gIH0sIFtpMThuLCBrZXlQcmVmaXhdKTtcbiAgdmFyIHJldCA9IFt0LCBpMThuLCByZWFkeV07XG4gIHJldC50ID0gdDtcbiAgcmV0LmkxOG4gPSBpMThuO1xuICByZXQucmVhZHkgPSByZWFkeTtcbiAgaWYgKHJlYWR5KSByZXR1cm4gcmV0O1xuICBpZiAoIXJlYWR5ICYmICF1c2VTdXNwZW5zZSkgcmV0dXJuIHJldDtcbiAgdGhyb3cgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICBsb2FkTmFtZXNwYWNlcyhpMThuLCBuYW1lc3BhY2VzLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufSIsImltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJMThuQ29udGV4dCB9IGZyb20gJy4vY29udGV4dC5qcyc7XG5leHBvcnQgZnVuY3Rpb24gSTE4bmV4dFByb3ZpZGVyKF9yZWYpIHtcbiAgdmFyIGkxOG4gPSBfcmVmLmkxOG4sXG4gICAgICBkZWZhdWx0TlMgPSBfcmVmLmRlZmF1bHROUyxcbiAgICAgIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgdmFyIHZhbHVlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGkxOG46IGkxOG4sXG4gICAgICBkZWZhdWx0TlM6IGRlZmF1bHROU1xuICAgIH07XG4gIH0sIFtpMThuLCBkZWZhdWx0TlNdKTtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoSTE4bkNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSwgY2hpbGRyZW4pO1xufSIsImxldCBnbG9iYWxBbnkgPSB7fTtcbnRyeSB7XG4gIGdsb2JhbEFueSA9IHdpbmRvdztcbn0gY2F0Y2ggKGVycm9yKSB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmVmZXJlbmNlRXJyb3IpKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn0gZmluYWxseSB7XG4gIGlmICghZ2xvYmFsQW55KSB7XG4gICAgZ2xvYmFsQW55ID0ge307XG4gIH1cbn1cblxuLyoqXG4gKiBCYXNlIFBhcmFtcyBmb3IgYSBhbnkgZnVuY3Rpb25cbiAqIEBhbGlhcyBBY3Rpb25QYXJhbXNcbiAqIEBtZW1iZXJvZiBWaWV3SGVscGVyc1xuICovXG5cbi8qKlxuICogUGFyYW1zIGZvciBhIHJlY29yZCBhY3Rpb25cbiAqIEBhbGlhcyBSZWNvcmRBY3Rpb25QYXJhbXNcbiAqIEBleHRlbmRzIEFjdGlvblBhcmFtc1xuICogQG1lbWJlcm9mIFZpZXdIZWxwZXJzXG4gKi9cblxuLyoqXG4gKiBQYXJhbXMgZm9yIGEgYnVsayBhY3Rpb25cbiAqIEBhbGlhcyBCdWxrQWN0aW9uUGFyYW1zXG4gKiBAZXh0ZW5kcyBBY3Rpb25QYXJhbXNcbiAqIEBtZW1iZXJvZiBWaWV3SGVscGVyc1xuICovXG5cbi8qKlxuICogUGFyYW1zIGZvciBhIHJlc291cmNlIGFjdGlvblxuICogQGFsaWFzIFJlc291cmNlQWN0aW9uUGFyYW1zXG4gKiBAZXh0ZW5kcyBBY3Rpb25QYXJhbXNcbiAqIEBtZW1iZXJvZiBWaWV3SGVscGVyc1xuICovXG5cbmNvbnN0IHJ1bkRhdGUgPSBuZXcgRGF0ZSgpO1xuXG4vKipcbiAqIENvbGxlY3Rpb24gb2YgaGVscGVyIG1ldGhvZHMgYXZhaWxhYmxlIGluIHRoZSB2aWV3c1xuICovXG5leHBvcnQgY2xhc3MgVmlld0hlbHBlcnMge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgb3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICBsZXQgb3B0cyA9IFZpZXdIZWxwZXJzLmdldFBhdGhzKG9wdGlvbnMpO1xuICAgIG9wdHMgPSBvcHRzIHx8IHtcbiAgICAgIHJvb3RQYXRoOiAnL2FkbWluJ1xuICAgIH07XG5cbiAgICAvLyB3aGVuIFZpZXdIZWxwZXJzIGFyZSB1c2VkIG9uIHRoZSBmcm9udGVuZCwgcGF0aHMgYXJlIHRha2VuIGZyb20gZ2xvYmFsIFJlZHV4IFN0YXRlXG4gICAgdGhpcy5vcHRpb25zID0gb3B0cztcbiAgfVxuICBzdGF0aWMgZ2V0UGF0aHMob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zIHx8IGdsb2JhbEFueS5SRURVWF9TVEFURT8ucGF0aHM7XG4gIH1cblxuICAvKipcbiAgICogVG8gZWFjaCByZWxhdGVkIHBhdGggYWRkcyByb290UGF0aCBwYXNzZWQgYnkgdGhlIHVzZXIsIGFzIHdlbGwgYXMgYSBxdWVyeSBzdHJpbmdcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtICB7QXJyYXk8c3RyaW5nPn0gW3BhdGhzXSAgICAgIGxpc3Qgb2YgcGFydHMgb2YgdGhlIHVybFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgIHBhdGhcbiAgICogQHJldHVybiB7cXVlcnl9ICAgICAgICBbc2VhcmNoPScnXSBxdWVyeSBzdHJpbmcgd2hpY2ggY2FuIGJlIGZldGNoXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBgbG9jYXRpb24uc2VhcmNoYFxuICAgKi9cbiAgdXJsQnVpbGRlcihwYXRocyA9IFtdLCBzZWFyY2ggPSAnJykge1xuICAgIGNvbnN0IHNlcGFyYXRvciA9ICcvJztcbiAgICBjb25zdCByZXBsYWNlID0gbmV3IFJlZ0V4cChgJHtzZXBhcmF0b3J9ezEsfWAsICdnJyk7XG4gICAgbGV0IHtcbiAgICAgIHJvb3RQYXRoXG4gICAgfSA9IHRoaXMub3B0aW9ucztcbiAgICBpZiAoIXJvb3RQYXRoLnN0YXJ0c1dpdGgoc2VwYXJhdG9yKSkge1xuICAgICAgcm9vdFBhdGggPSBgJHtzZXBhcmF0b3J9JHtyb290UGF0aH1gO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IFtyb290UGF0aCwgLi4ucGF0aHNdO1xuICAgIHJldHVybiBgJHtwYXJ0cy5qb2luKHNlcGFyYXRvcikucmVwbGFjZShyZXBsYWNlLCBzZXBhcmF0b3IpfSR7c2VhcmNofWA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBsb2dpbiBVUkxcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgbG9naW5VcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sb2dpblBhdGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBsb2dvdXQgVVJMXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG4gIGxvZ291dFVybCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxvZ291dFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBVUkwgZm9yIHRoZSBkYXNoYm9hcmRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZGFzaGJvYXJkVXJsKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucm9vdFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBVUkwgZm9yIGdpdmVuIHBhZ2UgbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFnZU5hbWUgICAgICAgcGFnZSBuYW1lIHdoaWNoIGlzIGEgdW5pcXVlIGtleSBzcGVjaWZpZWQgaW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtAbGluayBBZG1pbkpTT3B0aW9uc31cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgcGFnZVVybChwYWdlTmFtZSkge1xuICAgIHJldHVybiB0aGlzLnVybEJ1aWxkZXIoWydwYWdlcycsIHBhZ2VOYW1lXSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB1cmwgZm9yIGEgYGVkaXRgIGFjdGlvbiBpbiBnaXZlbiBSZXNvdXJjZS4gVXNlcyB7QGxpbmsgcmVjb3JkQWN0aW9uVXJsfVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVzb3VyY2VJZCAgaWQgdG8gdGhlIHJlc291cmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWNvcmRJZCAgICBpZCB0byB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VhcmNoXSAgICAgICAgb3B0aW9uYWwgcXVlcnkgc3RyaW5nXG4gICAqL1xuICBlZGl0VXJsKHJlc291cmNlSWQsIHJlY29yZElkLCBzZWFyY2gpIHtcbiAgICByZXR1cm4gdGhpcy5yZWNvcmRBY3Rpb25Vcmwoe1xuICAgICAgcmVzb3VyY2VJZCxcbiAgICAgIHJlY29yZElkLFxuICAgICAgYWN0aW9uTmFtZTogJ2VkaXQnLFxuICAgICAgc2VhcmNoXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB1cmwgZm9yIGEgYHNob3dgIGFjdGlvbiBpbiBnaXZlbiBSZXNvdXJjZS4gVXNlcyB7QGxpbmsgcmVjb3JkQWN0aW9uVXJsfVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVzb3VyY2VJZCAgaWQgdG8gdGhlIHJlc291cmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWNvcmRJZCAgICBpZCB0byB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VhcmNoXSAgICAgICAgb3B0aW9uYWwgcXVlcnkgc3RyaW5nXG4gICAqL1xuICBzaG93VXJsKHJlc291cmNlSWQsIHJlY29yZElkLCBzZWFyY2gpIHtcbiAgICByZXR1cm4gdGhpcy5yZWNvcmRBY3Rpb25Vcmwoe1xuICAgICAgcmVzb3VyY2VJZCxcbiAgICAgIHJlY29yZElkLFxuICAgICAgYWN0aW9uTmFtZTogJ3Nob3cnLFxuICAgICAgc2VhcmNoXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB1cmwgZm9yIGEgYGRlbGV0ZWAgYWN0aW9uIGluIGdpdmVuIFJlc291cmNlLiBVc2VzIHtAbGluayByZWNvcmRBY3Rpb25Vcmx9XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZXNvdXJjZUlkICBpZCB0byB0aGUgcmVzb3VyY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlY29yZElkICAgIGlkIHRvIHRoZSByZWNvcmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWFyY2hdICAgICAgICBvcHRpb25hbCBxdWVyeSBzdHJpbmdcbiAgICovXG4gIGRlbGV0ZVVybChyZXNvdXJjZUlkLCByZWNvcmRJZCwgc2VhcmNoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVjb3JkQWN0aW9uVXJsKHtcbiAgICAgIHJlc291cmNlSWQsXG4gICAgICByZWNvcmRJZCxcbiAgICAgIGFjdGlvbk5hbWU6ICdkZWxldGUnLFxuICAgICAgc2VhcmNoXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB1cmwgZm9yIGEgYG5ld2AgYWN0aW9uIGluIGdpdmVuIFJlc291cmNlLiBVc2VzIHtAbGluayByZXNvdXJjZUFjdGlvblVybH1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlc291cmNlSWQgIGlkIHRvIHRoZSByZXNvdXJjZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlYXJjaF0gICAgICAgIG9wdGlvbmFsIHF1ZXJ5IHN0cmluZ1xuICAgKi9cbiAgbmV3VXJsKHJlc291cmNlSWQsIHNlYXJjaCkge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlQWN0aW9uVXJsKHtcbiAgICAgIHJlc291cmNlSWQsXG4gICAgICBhY3Rpb25OYW1lOiAnbmV3JyxcbiAgICAgIHNlYXJjaFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdXJsIGZvciBhIGBsaXN0YCBhY3Rpb24gaW4gZ2l2ZW4gUmVzb3VyY2UuIFVzZXMge0BsaW5rIHJlc291cmNlQWN0aW9uVXJsfVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVzb3VyY2VJZCAgaWQgdG8gdGhlIHJlc291cmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc2VhcmNoXSAgICAgICAgb3B0aW9uYWwgcXVlcnkgc3RyaW5nXG4gICAqL1xuICBsaXN0VXJsKHJlc291cmNlSWQsIHNlYXJjaCkge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlQWN0aW9uVXJsKHtcbiAgICAgIHJlc291cmNlSWQsXG4gICAgICBhY3Rpb25OYW1lOiAnbGlzdCcsXG4gICAgICBzZWFyY2hcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHVybCBmb3IgYSBgYnVsa0RlbGV0ZWAgYWN0aW9uIGluIGdpdmVuIFJlc291cmNlLiBVc2VzIHtAbGluayBidWxrQWN0aW9uVXJsfVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVzb3VyY2VJZCAgaWQgdG8gdGhlIHJlc291cmNlXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gcmVjb3JkSWRzICAgc2VwYXJhdGVkIGJ5IGNvbW1hIHJlY29yZHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWFyY2hdICAgICAgICBvcHRpb25hbCBxdWVyeSBzdHJpbmdcbiAgICovXG4gIGJ1bGtEZWxldGVVcmwocmVzb3VyY2VJZCwgcmVjb3JkSWRzLCBzZWFyY2gpIHtcbiAgICByZXR1cm4gdGhpcy5idWxrQWN0aW9uVXJsKHtcbiAgICAgIHJlc291cmNlSWQsXG4gICAgICByZWNvcmRJZHMsXG4gICAgICBhY3Rpb25OYW1lOiAnYnVsa0RlbGV0ZScsXG4gICAgICBzZWFyY2hcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHJlc291cmNlQWN0aW9uIHVybFxuICAgKlxuICAgKiBAcGFyYW0gICB7UmVzb3VyY2VBY3Rpb25QYXJhbXN9ICBvcHRpb25zXG4gICAqIEBwYXJhbSAgIHtzdHJpbmd9ICBvcHRpb25zLnJlc291cmNlSWRcbiAgICogQHBhcmFtICAge3N0cmluZ30gIG9wdGlvbnMuYWN0aW9uTmFtZVxuICAgKiBAcGFyYW0gICB7c3RyaW5nfSAgW29wdGlvbnMuc2VhcmNoXSAgICAgICAgb3B0aW9uYWwgcXVlcnkgc3RyaW5nXG4gICAqXG4gICAqIEByZXR1cm4gIHtzdHJpbmd9XG4gICAqL1xuICByZXNvdXJjZUFjdGlvblVybCh7XG4gICAgcmVzb3VyY2VJZCxcbiAgICBhY3Rpb25OYW1lLFxuICAgIHNlYXJjaFxuICB9KSB7XG4gICAgcmV0dXJuIHRoaXMudXJsQnVpbGRlcihbJ3Jlc291cmNlcycsIHJlc291cmNlSWQsICdhY3Rpb25zJywgYWN0aW9uTmFtZV0sIHNlYXJjaCk7XG4gIH1cbiAgcmVzb3VyY2VVcmwoe1xuICAgIHJlc291cmNlSWQsXG4gICAgc2VhcmNoXG4gIH0pIHtcbiAgICByZXR1cm4gdGhpcy51cmxCdWlsZGVyKFsncmVzb3VyY2VzJywgcmVzb3VyY2VJZF0sIHNlYXJjaCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyByZWNvcmRBY3Rpb24gdXJsXG4gICAqXG4gICAqIEBwYXJhbSAgIHtSZWNvcmRBY3Rpb25QYXJhbXN9ICBvcHRpb25zXG4gICAqIEBwYXJhbSAgIHtzdHJpbmd9ICBvcHRpb25zLnJlc291cmNlSWRcbiAgICogQHBhcmFtICAge3N0cmluZ30gIG9wdGlvbnMucmVjb3JkSWRcbiAgICogQHBhcmFtICAge3N0cmluZ30gIG9wdGlvbnMuYWN0aW9uTmFtZVxuICAgKlxuICAgKiBAcmV0dXJuICB7c3RyaW5nfVxuICAgKi9cbiAgcmVjb3JkQWN0aW9uVXJsKHtcbiAgICByZXNvdXJjZUlkLFxuICAgIHJlY29yZElkLFxuICAgIGFjdGlvbk5hbWUsXG4gICAgc2VhcmNoXG4gIH0pIHtcbiAgICByZXR1cm4gdGhpcy51cmxCdWlsZGVyKFsncmVzb3VyY2VzJywgcmVzb3VyY2VJZCwgJ3JlY29yZHMnLCByZWNvcmRJZCwgYWN0aW9uTmFtZV0sIHNlYXJjaCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBidWxrQWN0aW9uIHVybFxuICAgKlxuICAgKiBAcGFyYW0gICB7QnVsa0FjdGlvblBhcmFtc30gIG9wdGlvbnNcbiAgICogQHBhcmFtICAge3N0cmluZ30gIG9wdGlvbnMucmVzb3VyY2VJZFxuICAgKiBAcGFyYW0gICB7QXJyYXk8c3RyaW5nPn0gIFtvcHRpb25zLnJlY29yZElkc11cbiAgICogQHBhcmFtICAge3N0cmluZ30gIG9wdGlvbnMuYWN0aW9uTmFtZVxuICAgKlxuICAgKiBAcmV0dXJuICB7c3RyaW5nfVxuICAgKi9cbiAgYnVsa0FjdGlvblVybCh7XG4gICAgcmVzb3VyY2VJZCxcbiAgICByZWNvcmRJZHMsXG4gICAgYWN0aW9uTmFtZSxcbiAgICBzZWFyY2hcbiAgfSkge1xuICAgIGNvbnN0IHVybCA9IHRoaXMudXJsQnVpbGRlcihbJ3Jlc291cmNlcycsIHJlc291cmNlSWQsICdidWxrJywgYWN0aW9uTmFtZV0pO1xuICAgIGlmIChyZWNvcmRJZHMgJiYgcmVjb3JkSWRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgcXVlcnkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHNlYXJjaCk7XG4gICAgICBxdWVyeS5zZXQoJ3JlY29yZElkcycsIHJlY29yZElkcy5qb2luKCcsJykpO1xuICAgICAgcmV0dXJuIGAke3VybH0/JHtxdWVyeS50b1N0cmluZygpfWA7XG4gICAgfVxuICAgIHJldHVybiBgJHt1cmx9JHtzZWFyY2ggfHwgJyd9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFic29sdXRlIHBhdGggdG8gYSBnaXZlbiBhc3NldC5cbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nfSBhc3NldFxuICAgKiBAcGFyYW0gIHtBc3NldHMgfCB1bmRlZmluZWR9IGFzc2V0c0NvbmZpZ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBhc3NldFBhdGgoYXNzZXQsIGFzc2V0c0NvbmZpZykge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYXNzZXRzQ0ROKSB7XG4gICAgICBjb25zdCBwYXRobmFtZSA9IGFzc2V0c0NvbmZpZz8uY29yZVNjcmlwdHM/Llthc3NldF0gPz8gYXNzZXQ7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHBhdGhuYW1lLCB0aGlzLm9wdGlvbnMuYXNzZXRzQ0ROKS5ocmVmO1xuXG4gICAgICAvLyBhZGRpbmcgdGltZXN0YW1wIHRvIHRoZSBocmVmIGludmFsaWRhdGVzIHRoZSBDRE4gY2FjaGVcbiAgICAgIHJldHVybiBgJHt1cmx9P2RhdGU9JHtydW5EYXRlLmdldFRpbWUoKX1gO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cmxCdWlsZGVyKFsnZnJvbnRlbmQnLCAnYXNzZXRzJywgYXNzZXRdKTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgVmlld0hlbHBlcnM7IiwibW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuXG5mbGF0dGVuLmZsYXR0ZW4gPSBmbGF0dGVuXG5mbGF0dGVuLnVuZmxhdHRlbiA9IHVuZmxhdHRlblxuXG5mdW5jdGlvbiBpc0J1ZmZlciAob2JqKSB7XG4gIHJldHVybiBvYmogJiZcbiAgICBvYmouY29uc3RydWN0b3IgJiZcbiAgICAodHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKVxufVxuXG5mdW5jdGlvbiBrZXlJZGVudGl0eSAoa2V5KSB7XG4gIHJldHVybiBrZXlcbn1cblxuZnVuY3Rpb24gZmxhdHRlbiAodGFyZ2V0LCBvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9XG5cbiAgY29uc3QgZGVsaW1pdGVyID0gb3B0cy5kZWxpbWl0ZXIgfHwgJy4nXG4gIGNvbnN0IG1heERlcHRoID0gb3B0cy5tYXhEZXB0aFxuICBjb25zdCB0cmFuc2Zvcm1LZXkgPSBvcHRzLnRyYW5zZm9ybUtleSB8fCBrZXlJZGVudGl0eVxuICBjb25zdCBvdXRwdXQgPSB7fVxuXG4gIGZ1bmN0aW9uIHN0ZXAgKG9iamVjdCwgcHJldiwgY3VycmVudERlcHRoKSB7XG4gICAgY3VycmVudERlcHRoID0gY3VycmVudERlcHRoIHx8IDFcbiAgICBPYmplY3Qua2V5cyhvYmplY3QpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAgICAgY29uc3QgaXNhcnJheSA9IG9wdHMuc2FmZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgY29uc3QgdHlwZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSlcbiAgICAgIGNvbnN0IGlzYnVmZmVyID0gaXNCdWZmZXIodmFsdWUpXG4gICAgICBjb25zdCBpc29iamVjdCA9IChcbiAgICAgICAgdHlwZSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgfHxcbiAgICAgICAgdHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgKVxuXG4gICAgICBjb25zdCBuZXdLZXkgPSBwcmV2XG4gICAgICAgID8gcHJldiArIGRlbGltaXRlciArIHRyYW5zZm9ybUtleShrZXkpXG4gICAgICAgIDogdHJhbnNmb3JtS2V5KGtleSlcblxuICAgICAgaWYgKCFpc2FycmF5ICYmICFpc2J1ZmZlciAmJiBpc29iamVjdCAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoICYmXG4gICAgICAgICghb3B0cy5tYXhEZXB0aCB8fCBjdXJyZW50RGVwdGggPCBtYXhEZXB0aCkpIHtcbiAgICAgICAgcmV0dXJuIHN0ZXAodmFsdWUsIG5ld0tleSwgY3VycmVudERlcHRoICsgMSlcbiAgICAgIH1cblxuICAgICAgb3V0cHV0W25ld0tleV0gPSB2YWx1ZVxuICAgIH0pXG4gIH1cblxuICBzdGVwKHRhcmdldClcblxuICByZXR1cm4gb3V0cHV0XG59XG5cbmZ1bmN0aW9uIHVuZmxhdHRlbiAodGFyZ2V0LCBvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9XG5cbiAgY29uc3QgZGVsaW1pdGVyID0gb3B0cy5kZWxpbWl0ZXIgfHwgJy4nXG4gIGNvbnN0IG92ZXJ3cml0ZSA9IG9wdHMub3ZlcndyaXRlIHx8IGZhbHNlXG4gIGNvbnN0IHRyYW5zZm9ybUtleSA9IG9wdHMudHJhbnNmb3JtS2V5IHx8IGtleUlkZW50aXR5XG4gIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgY29uc3QgaXNidWZmZXIgPSBpc0J1ZmZlcih0YXJnZXQpXG4gIGlmIChpc2J1ZmZlciB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gdGFyZ2V0XG4gIH1cblxuICAvLyBzYWZlbHkgZW5zdXJlIHRoYXQgdGhlIGtleSBpc1xuICAvLyBhbiBpbnRlZ2VyLlxuICBmdW5jdGlvbiBnZXRrZXkgKGtleSkge1xuICAgIGNvbnN0IHBhcnNlZEtleSA9IE51bWJlcihrZXkpXG5cbiAgICByZXR1cm4gKFxuICAgICAgaXNOYU4ocGFyc2VkS2V5KSB8fFxuICAgICAga2V5LmluZGV4T2YoJy4nKSAhPT0gLTEgfHxcbiAgICAgIG9wdHMub2JqZWN0XG4gICAgKSA/IGtleVxuICAgICAgOiBwYXJzZWRLZXlcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEtleXMgKGtleVByZWZpeCwgcmVjaXBpZW50LCB0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGFyZ2V0KS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG4gICAgICByZXN1bHRba2V5UHJlZml4ICsgZGVsaW1pdGVyICsga2V5XSA9IHRhcmdldFtrZXldXG5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9LCByZWNpcGllbnQpXG4gIH1cblxuICBmdW5jdGlvbiBpc0VtcHR5ICh2YWwpIHtcbiAgICBjb25zdCB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbClcbiAgICBjb25zdCBpc0FycmF5ID0gdHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgIGNvbnN0IGlzT2JqZWN0ID0gdHlwZSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcblxuICAgIGlmICghdmFsKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoaXNBcnJheSkge1xuICAgICAgcmV0dXJuICF2YWwubGVuZ3RoXG4gICAgfSBlbHNlIGlmIChpc09iamVjdCkge1xuICAgICAgcmV0dXJuICFPYmplY3Qua2V5cyh2YWwpLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHRhcmdldCA9IE9iamVjdC5rZXlzKHRhcmdldCkucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgIGNvbnN0IHR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0W2tleV0pXG4gICAgY29uc3QgaXNPYmplY3QgPSAodHlwZSA9PT0gJ1tvYmplY3QgT2JqZWN0XScgfHwgdHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJylcbiAgICBpZiAoIWlzT2JqZWN0IHx8IGlzRW1wdHkodGFyZ2V0W2tleV0pKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHRhcmdldFtrZXldXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhZGRLZXlzKFxuICAgICAgICBrZXksXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgZmxhdHRlbih0YXJnZXRba2V5XSwgb3B0cylcbiAgICAgIClcbiAgICB9XG4gIH0sIHt9KVxuXG4gIE9iamVjdC5rZXlzKHRhcmdldCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgY29uc3Qgc3BsaXQgPSBrZXkuc3BsaXQoZGVsaW1pdGVyKS5tYXAodHJhbnNmb3JtS2V5KVxuICAgIGxldCBrZXkxID0gZ2V0a2V5KHNwbGl0LnNoaWZ0KCkpXG4gICAgbGV0IGtleTIgPSBnZXRrZXkoc3BsaXRbMF0pXG4gICAgbGV0IHJlY2lwaWVudCA9IHJlc3VsdFxuXG4gICAgd2hpbGUgKGtleTIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGtleTEgPT09ICdfX3Byb3RvX18nKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHJlY2lwaWVudFtrZXkxXSlcbiAgICAgIGNvbnN0IGlzb2JqZWN0ID0gKFxuICAgICAgICB0eXBlID09PSAnW29iamVjdCBPYmplY3RdJyB8fFxuICAgICAgICB0eXBlID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICApXG5cbiAgICAgIC8vIGRvIG5vdCB3cml0ZSBvdmVyIGZhbHNleSwgbm9uLXVuZGVmaW5lZCB2YWx1ZXMgaWYgb3ZlcndyaXRlIGlzIGZhbHNlXG4gICAgICBpZiAoIW92ZXJ3cml0ZSAmJiAhaXNvYmplY3QgJiYgdHlwZW9mIHJlY2lwaWVudFtrZXkxXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICgob3ZlcndyaXRlICYmICFpc29iamVjdCkgfHwgKCFvdmVyd3JpdGUgJiYgcmVjaXBpZW50W2tleTFdID09IG51bGwpKSB7XG4gICAgICAgIHJlY2lwaWVudFtrZXkxXSA9IChcbiAgICAgICAgICB0eXBlb2Yga2V5MiA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAhb3B0cy5vYmplY3QgPyBbXSA6IHt9XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcmVjaXBpZW50ID0gcmVjaXBpZW50W2tleTFdXG4gICAgICBpZiAoc3BsaXQubGVuZ3RoID4gMCkge1xuICAgICAgICBrZXkxID0gZ2V0a2V5KHNwbGl0LnNoaWZ0KCkpXG4gICAgICAgIGtleTIgPSBnZXRrZXkoc3BsaXRbMF0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdW5mbGF0dGVuIGFnYWluIGZvciAnbWVzc3kgb2JqZWN0cydcbiAgICByZWNpcGllbnRba2V5MV0gPSB1bmZsYXR0ZW4odGFyZ2V0W2tleV0sIG9wdHMpXG4gIH0pXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuIiwiY29uc3QgREVMSU1JVEVSID0gJy4nO1xuZXhwb3J0IHsgREVMSU1JVEVSIH07IiwiaW1wb3J0IHsgREVMSU1JVEVSIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuLy8gdGhpcyBpcyB0aGUgcmVnZXggdXNlZCB0byBmaW5kIGFsbCBleGlzdGluZyBwcm9wZXJ0aWVzIHN0YXJ0aW5nIHdpdGggYSBrZXlcblxuZXhwb3J0IGNvbnN0IHByb3BlcnR5S2V5UmVnZXggPSAocHJvcGVydHlQYXRoLCBvcHRpb25zKSA9PiB7XG4gIGNvbnN0IGRlbGltaXRlciA9IG5ldyBSZWdFeHAoYFxcXFwke0RFTElNSVRFUn1gLCAnZycpO1xuICBjb25zdCBlc2NhcGVkRGVsaW1pdGVyID0gYFxcXFwke0RFTElNSVRFUn1gO1xuICAvLyBidXQgZm9yIGBuZXN0ZWQuMS5wcm9wZXJ0eS4wYCBpdCB3aWxsIHByb2R1Y2UgYG5lc3RlZChcXC58XFwuXFxkK1xcLikxKFxcLnxcXC5cXGQrXFwuKXByb3BlcnR5LjBgXG4gIC8vIGFuZCB0aGlzIGlzIGludGVudGlvbmFsIGJlY2F1c2UgdXNlciBjYW4gZ2l2ZSBhbiBvbmUgaW5kZXggaW4gcHJvcGVydHkgcGF0aCBmb3Igd2l0aCBkZWVwbHlcbiAgLy8gbmVzdGVkIGFycmF5c1xuICBjb25zdCBlc2NhcGVkRGVsaW1pdGVyT3JJbmRleCA9IGAoJHtlc2NhcGVkRGVsaW1pdGVyfXwke2VzY2FwZWREZWxpbWl0ZXJ9XFxcXGQrJHtlc2NhcGVkRGVsaW1pdGVyfSlgO1xuICBjb25zdCBwYXRoID0gb3B0aW9ucz8uaW5jbHVkZUFsbFNpYmxpbmdzID8gcHJvcGVydHlQYXRoLnJlcGxhY2UoZGVsaW1pdGVyLCBlc2NhcGVkRGVsaW1pdGVyT3JJbmRleCkgOiBwcm9wZXJ0eVBhdGgucmVwbGFjZShkZWxpbWl0ZXIsIGVzY2FwZWREZWxpbWl0ZXIpO1xuICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7cGF0aH0oJHwke2VzY2FwZWREZWxpbWl0ZXJ9KWAsICcnKTtcbn07IiwiaW1wb3J0IHsgcHJvcGVydHlLZXlSZWdleCB9IGZyb20gJy4vcHJvcGVydHkta2V5LXJlZ2V4LmpzJztcbi8qKlxuICogQGxvYWQgLi9zZWxlY3QtcGFyYW1zLmRvYy5tZFxuICogQG1lbWJlcm9mIG1vZHVsZTpmbGF0XG4gKiBAcGFyYW0ge0ZsYXR0ZW5QYXJhbXN9IHBhcmFtc1xuICogQHBhcmFtIHtzdHJpbmcgfCBBcnJheTxzdHJpbmc+fSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge0dldE9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybnMge0ZsYXR0ZW5QYXJhbXN9XG4gKi9cbmNvbnN0IHNlbGVjdFBhcmFtcyA9IChwYXJhbXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpID0+IHtcbiAgY29uc3QgcHJvcGVydHlBcnJheSA9IEFycmF5LmlzQXJyYXkocHJvcGVydGllcykgPyBwcm9wZXJ0aWVzIDogW3Byb3BlcnRpZXNdO1xuICBjb25zdCBzZWxlY3RlZCA9IHByb3BlcnR5QXJyYXkuZmlsdGVyKHByb3BlcnR5UGF0aCA9PiAhIXByb3BlcnR5UGF0aCkucmVkdWNlKChnbG9iYWxNZW1vLCBwcm9wZXJ0eVBhdGgpID0+IHtcbiAgICBjb25zdCByZWdleCA9IHByb3BlcnR5S2V5UmVnZXgocHJvcGVydHlQYXRoLCBvcHRpb25zKTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IE9iamVjdC5rZXlzKHBhcmFtcylcbiAgICAvLyBmaWx0ZXIgYWxsIGtleXMgd2hpY2ggc3RhcnRzIHdpdGggcHJvcGVydHkgcGF0aFxuICAgIC5maWx0ZXIoa2V5ID0+IGtleS5tYXRjaChyZWdleCkpLnJlZHVjZSgobWVtbywga2V5KSA9PiB7XG4gICAgICBtZW1vW2tleV0gPSBwYXJhbXNba2V5XTtcbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH0sIHt9KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZ2xvYmFsTWVtbyxcbiAgICAgIC4uLmZpbHRlcmVkXG4gICAgfTtcbiAgfSwge30pO1xuICByZXR1cm4gc2VsZWN0ZWQ7XG59O1xuZXhwb3J0IHsgc2VsZWN0UGFyYW1zIH07IiwiaW1wb3J0IHsgcHJvcGVydHlLZXlSZWdleCB9IGZyb20gJy4vcHJvcGVydHkta2V5LXJlZ2V4LmpzJztcbi8qKlxuICogQGxvYWQgLi9maWx0ZXItb3V0LXBhcmFtcy5kb2MubWRcbiAqIEBtZW1iZXJvZiBtb2R1bGU6ZmxhdFxuICogQHBhcmFtIHtGbGF0dGVuUGFyYW1zfSBwYXJhbXNcbiAqIEBwYXJhbSB7c3RyaW5nIHwgQXJyYXk8c3RyaW5nPn0gcHJvcGVydGllc1xuICogQHJldHVybnMge0ZsYXR0ZW5QYXJhbXN9XG4gKi9cbmNvbnN0IGZpbHRlck91dFBhcmFtcyA9IChwYXJhbXMsIHByb3BlcnRpZXMpID0+IHtcbiAgY29uc3QgcHJvcGVydHlBcnJheSA9IEFycmF5LmlzQXJyYXkocHJvcGVydGllcykgPyBwcm9wZXJ0aWVzIDogW3Byb3BlcnRpZXNdO1xuICByZXR1cm4gcHJvcGVydHlBcnJheS5maWx0ZXIocHJvcGVydHlQYXRoID0+ICEhcHJvcGVydHlQYXRoKS5yZWR1Y2UoKGdsb2JhbEZpbHRlcmVkLCBwcm9wZXJ0eVBhdGgpID0+IHtcbiAgICBjb25zdCByZWdleCA9IHByb3BlcnR5S2V5UmVnZXgocHJvcGVydHlQYXRoKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZ2xvYmFsRmlsdGVyZWQpLmZpbHRlcihrZXkgPT4gIWtleS5tYXRjaChyZWdleCkpLnJlZHVjZSgobWVtbywga2V5KSA9PiB7XG4gICAgICBtZW1vW2tleV0gPSBwYXJhbXNba2V5XTtcbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH0sIHt9KTtcbiAgfSwgcGFyYW1zKTtcbn07XG5leHBvcnQgeyBmaWx0ZXJPdXRQYXJhbXMgfTsiLCIvKipcbiAqIEBtZW1iZXJvZiBtb2R1bGU6ZmxhdFxuICogQGFsaWFzIFBhdGhUb1BhcnRzT3B0aW9uc1xuICovXG5cbi8qKlxuICogQGxvYWQgLi9wYXRoLXRvLXBhcnRzLmRvYy5tZFxuICogQHBhcmFtICAge3N0cmluZ30gICAgICAgICAgICAgIHByb3BlcnR5UGF0aFxuICogQHBhcmFtICAge1BhdGhUb1BhcnRzT3B0aW9uc30gIG9wdGlvbnNcbiAqIEByZXR1cm5zICB7UGF0aFBhcnRzfVxuICpcbiAqIEBtZW1iZXJvZiBtb2R1bGU6ZmxhdFxuICogQGFsaWFzIHBhdGhUb1BhcnRzXG4gKi9cbmNvbnN0IHBhdGhUb1BhcnRzID0gKHByb3BlcnR5UGF0aCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGxldCBhbGxQYXJ0cyA9IHByb3BlcnR5UGF0aC5zcGxpdCgnLicpO1xuICBpZiAob3B0aW9ucy5za2lwQXJyYXlJbmRleGVzKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgIGFsbFBhcnRzID0gYWxsUGFydHMuZmlsdGVyKHBhcnQgPT4gaXNOYU4oK3BhcnQpKTtcbiAgfVxuICByZXR1cm4gYWxsUGFydHMucmVkdWNlKChtZW1vLCBwYXJ0KSA9PiB7XG4gICAgaWYgKG1lbW8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gWy4uLm1lbW8sIFttZW1vW21lbW8ubGVuZ3RoIC0gMV0sIHBhcnRdLmpvaW4oJy4nKV07XG4gICAgfVxuICAgIHJldHVybiBbcGFydF07XG4gIH0sIFtdKTtcbn07XG5leHBvcnQgeyBwYXRoVG9QYXJ0cyB9OyIsImltcG9ydCBmbGF0IGZyb20gJ2ZsYXQnO1xuaW1wb3J0IHsgREVMSU1JVEVSIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgcHJvcGVydHlLZXlSZWdleCB9IGZyb20gJy4vcHJvcGVydHkta2V5LXJlZ2V4LmpzJztcbmltcG9ydCB7IHBhdGhUb1BhcnRzIH0gZnJvbSAnLi9wYXRoLXRvLXBhcnRzLmpzJztcbmNvbnN0IGlzT2JqZWN0ID0gdmFsdWUgPT4ge1xuICAvLyBOb2RlIGVudmlyb25tZW50XG4gIGlmICh0eXBlb2YgRmlsZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgfVxuICAvLyBXaW5kb3cgZW52aXJvbm1lbnRcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpICYmIHZhbHVlICE9PSBudWxsO1xufTtcblxuLyoqXG4gKiBAbG9hZCAuL3NldC5kb2MubWRcbiAqIEBtZW1iZXJvZiBtb2R1bGU6ZmxhdFxuICogQHBhcmFtIHtGbGF0dGVuUGFyYW1zfSBwYXJhbXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVBhdGhcbiAqIEBwYXJhbSB7YW55fSBbdmFsdWVdICAgICAgIGlmIG5vdCBnaXZlIGZ1bmN0aW9uIHdpbGwgb25seSB0cnkgdG8gcmVtb3ZlIG9sZCBrZXlzXG4gKiBAcmV0dXJucyB7RmxhdHRlblBhcmFtc31cbiAqL1xuY29uc3Qgc2V0ID0gKHBhcmFtcyA9IHt9LCBwcm9wZXJ0eVBhdGgsIHZhbHVlKSA9PiB7XG4gIGNvbnN0IHJlZ2V4ID0gcHJvcGVydHlLZXlSZWdleChwcm9wZXJ0eVBhdGgpO1xuXG4gIC8vIHJlbW92ZSBhbGwgZXhpc3Rpbmcga2V5c1xuICBjb25zdCBwYXJhbXNDb3B5ID0gT2JqZWN0LmtleXMocGFyYW1zKS5maWx0ZXIoa2V5ID0+ICFrZXkubWF0Y2gocmVnZXgpKS5yZWR1Y2UoKG1lbW8sIGtleSkgPT4ge1xuICAgIG1lbW9ba2V5XSA9IHBhcmFtc1trZXldO1xuICAgIHJldHVybiBtZW1vO1xuICB9LCB7fSk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgIGNvbnN0IGZsYXR0ZW5lZCA9IGZsYXQuZmxhdHRlbih2YWx1ZSk7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmxhdHRlbmVkKS5sZW5ndGgpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoZmxhdHRlbmVkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgcGFyYW1zQ29weVtgJHtwcm9wZXJ0eVBhdGh9JHtERUxJTUlURVJ9JHtrZXl9YF0gPSBmbGF0dGVuZWRba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHBhcmFtc0NvcHlbcHJvcGVydHlQYXRoXSA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zQ29weVtwcm9wZXJ0eVBhdGhdID0ge307XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmFtc0NvcHlbcHJvcGVydHlQYXRoXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIHdoZW4gdXNlciBnYXZlIHsgXCJuZXN0ZWQudmFsdWVcIjogXCJzb21ldGhpbmdcIiB9IGFuZCBoYWQgXCJuZXN0ZWRcIiBzZXQgdG8gYG51bGxgLCB0aGVuXG4gICAgLy8gbmVzdGVkIHNob3VsZCBiZSByZW1vdmVkXG4gICAgY29uc3QgcGFydHMgPSBwYXRoVG9QYXJ0cyhwcm9wZXJ0eVBhdGgpLnNsaWNlKDAsIC0xKTtcbiAgICBpZiAocGFydHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMocGFyYW1zQ29weSkuZmlsdGVyKGtleSA9PiAhcGFydHMuaW5jbHVkZXMoa2V5KSkucmVkdWNlKChtZW1vLCBrZXkpID0+IHtcbiAgICAgICAgbWVtb1trZXldID0gcGFyYW1zQ29weVtrZXldO1xuICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgIH0sIHt9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcmFtc0NvcHk7XG59O1xuZXhwb3J0IHsgc2V0IH07IiwiaW1wb3J0IGZsYXQgZnJvbSAnZmxhdCc7XG5pbXBvcnQgeyBERUxJTUlURVIgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBzZWxlY3RQYXJhbXMgfSBmcm9tICcuL3NlbGVjdC1wYXJhbXMuanMnO1xuaW1wb3J0IHsgcHJvcGVydHlLZXlSZWdleCB9IGZyb20gJy4vcHJvcGVydHkta2V5LXJlZ2V4LmpzJztcbmNvbnN0IFRFTVBfSE9MRElOR19LRVkgPSAnVEVNUF9IT0xESU5HX0tFWSc7XG5cbi8qKlxuICogQGxvYWQgLi9nZXQuZG9jLm1kXG4gKiBAbWVtYmVyb2YgbW9kdWxlOmZsYXRcbiAqIEBwYXJhbSB7RmxhdHRlblBhcmFtc30gICBwYXJhbXMgICAgICBmbGF0dGVuIHBhcmFtcyBmcm9tIHdoaWNoIHByb3BlcnR5IGhhcyB0byBiZSB0YWtlblxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgICAgIFtwcm9wZXJ0eVBhdGhdICBuYW1lIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIHtHZXRPcHRpb25zfSAgICAgIG9wdGlvbnMgICAgIG9wdGlvbnNcbiAqIEByZXR1cm5zIHthbnl9ICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHByb3BlcnR5IGtleSBleGlzdHMgZGlyZWN0bHkgaXQgcmV0dXJucyB3aGF0IGlzIGluc2lkZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgaXQgdHJpZXMgdG8gZmluZCBhbnkgbmVzdGVkIG9iamVjdHMgYW5kIHJldHVybnNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtXG4gKi9cbmNvbnN0IGdldCA9IChwYXJhbXMgPSB7fSwgcHJvcGVydHlQYXRoLCBvcHRpb25zKSA9PiB7XG4gIGlmICghcHJvcGVydHlQYXRoKSB7XG4gICAgcmV0dXJuIGZsYXQudW5mbGF0dGVuKHBhcmFtcyk7XG4gIH1cblxuICAvLyB3aGVuIG9iamVjdCBoYXMgdGhpcyBrZXkgLSBzaW1wbHkgcmV0dXJuIGl0XG4gIC8vIHdlIGNhbm5vdCByZWx5IG9uIHR5cGVvZiBwYXJhbXNbcHJvcGVydHlQYXRoICE9PSAndW5kZWZpbmVkJyBiZWNhdXNlIHBhcmFtcyBjYW4gYWN0dWFsbHkgYmVcbiAgLy8gdW5kZWZpbmVkIGFuZCBpbiBzdWNoIGNhc2UgaWYgd291bGQgcGFzcyBhbmQgZnVuY3Rpb24gd291bGQgcmV0dXJuIFt1bmRlZmluZWRdXG4gIGlmIChPYmplY3Qua2V5cyhwYXJhbXMpLmZpbmQoa2V5ID0+IGtleSA9PT0gcHJvcGVydHlQYXRoKSkge1xuICAgIHJldHVybiBwYXJhbXNbcHJvcGVydHlQYXRoXTtcbiAgfVxuICBjb25zdCByZWdleCA9IHByb3BlcnR5S2V5UmVnZXgocHJvcGVydHlQYXRoLCBvcHRpb25zKTtcbiAgY29uc3Qgc2VsZWN0ZWRQYXJhbXMgPSBzZWxlY3RQYXJhbXMocGFyYW1zLCBwcm9wZXJ0eVBhdGgsIG9wdGlvbnMpO1xuICBjb25zdCBuZXN0ZWRQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc2VsZWN0ZWRQYXJhbXMpLnJlZHVjZSgobWVtbywga2V5LCBpbmRleCkgPT4ge1xuICAgIGxldCBuZXdLZXkgPSBrZXkucmVwbGFjZShyZWdleCwgYCR7VEVNUF9IT0xESU5HX0tFWX0ke0RFTElNSVRFUn1gKTtcblxuICAgIC8vIHdoZW4gdXNlciB3YW50cyB0byB0YWtlIGFsbFNpYmxpbmdzIHdlIGhhdmUgdG8gZml4IHRoZSBpbmRleGVzIHNvIG5lc3RlZCBpdGVtcyBmcm9tXG4gICAgLy8gZGlmZmVyZW50IHNpYmxpbmdzIGRvbid0IG92ZXJsYXBcbiAgICAvL1xuICAgIC8vIEV4YW1wbGUgZm9yIGtleSBgbmVzdGVkLjEuZWxgOlxuICAgIC8vICAnbmVzdGVkLjAuZWwuMC52YWx1ZSc6ICd2YWwwLjAnLFxuICAgIC8vICAnbmVzdGVkLjAuZWwuMS52YWx1ZSc6ICd2YWwwLjEnLFxuICAgIC8vICAnbmVzdGVkLjEuZWwuMC52YWx1ZSc6ICd2YWwxJyxcbiAgICAvLyAgJ25lc3RlZC4xLmVsLjEudmFsdWUnOiAndmFsMicsXG4gICAgLy9cbiAgICAvLyBoYXMgdG8gYmUgY2hhbmdlZCB0bzpcbiAgICAvLyAgJ1RFTVBfSE9MRElOR19LRVkuMC52YWx1ZSc6ICd2YWwwLjAnLFxuICAgIC8vICAnVEVNUF9IT0xESU5HX0tFWS4xLnZhbHVlJzogJ3ZhbDAuMScsXG4gICAgLy8gICdURU1QX0hPTERJTkdfS0VZLjIudmFsdWUnOiAndmFsMScsXG4gICAgLy8gICdURU1QX0hPTERJTkdfS0VZLjMudmFsdWUnOiAndmFsMicsXG4gICAgaWYgKG9wdGlvbnM/LmluY2x1ZGVBbGxTaWJsaW5ncykge1xuICAgICAgbmV3S2V5ID0gbmV3S2V5LnJlcGxhY2UobmV3IFJlZ0V4cChgJHtURU1QX0hPTERJTkdfS0VZfVxcXFwke0RFTElNSVRFUn0oXFxcXGQqKWApLCBgJHtURU1QX0hPTERJTkdfS0VZfSR7REVMSU1JVEVSfSR7aW5kZXh9YCk7XG4gICAgfVxuICAgIG1lbW9bbmV3S2V5XSA9IHNlbGVjdGVkUGFyYW1zW2tleV07XG4gICAgcmV0dXJuIG1lbW87XG4gIH0sIHt9KTtcbiAgaWYgKE9iamVjdC5rZXlzKG5lc3RlZFByb3BlcnRpZXMpLmxlbmd0aCkge1xuICAgIHJldHVybiBmbGF0LnVuZmxhdHRlbihuZXN0ZWRQcm9wZXJ0aWVzKVtURU1QX0hPTERJTkdfS0VZXTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbmV4cG9ydCB7IGdldCB9OyIsImltcG9ydCBmbGF0IGZyb20gJ2ZsYXQnO1xuaW1wb3J0IHsgc2V0IH0gZnJvbSAnLi9zZXQuanMnO1xuXG4vKipcbiAqIE1lcmdlcyBwYXJhbXMgdG9nZXRoZXIgYW5kIHJldHVybnMgZmxhdHRlbiByZXN1bHRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcGFyYW1zXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IC4uLm1lcmdlUGFyYW1zXG4gKiBAcmV0dXJucyB7RmxhdHRlblBhcmFtc31cbiAqIEBtZW1iZXJvZiBtb2R1bGU6ZmxhdFxuICovXG5jb25zdCBtZXJnZSA9IChwYXJhbXMgPSB7fSwgLi4ubWVyZ2VQYXJhbXMpID0+IHtcbiAgY29uc3QgZmxhdHRlblBhcmFtcyA9IGZsYXQuZmxhdHRlbihwYXJhbXMpO1xuXG4gIC8vIHJldmVyc2UgYmVjYXVzZSB3ZSBtZXJnZSBmcm9tIHJpZ2h0XG4gIHJldHVybiBtZXJnZVBhcmFtcy5yZXZlcnNlKCkucmVkdWNlKChnbG9iYWxNZW1vLCBtZXJnZVBhcmFtKSA9PiBPYmplY3Qua2V5cyhtZXJnZVBhcmFtKS5yZWR1Y2UoKG1lbW8sIGtleSkgPT4gc2V0KG1lbW8sIGtleSwgbWVyZ2VQYXJhbVtrZXldKSwgZ2xvYmFsTWVtbyksIGZsYXR0ZW5QYXJhbXMpO1xufTtcbmV4cG9ydCB7IG1lcmdlIH07IiwiaW1wb3J0IHsgZmlsdGVyT3V0UGFyYW1zIH0gZnJvbSAnLi9maWx0ZXItb3V0LXBhcmFtcy5qcyc7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICcuL2dldC5qcyc7XG5pbXBvcnQgeyBzZXQgfSBmcm9tICcuL3NldC5qcyc7XG5pbXBvcnQgeyBwYXRoVG9QYXJ0cyB9IGZyb20gJy4vcGF0aC10by1wYXJ0cy5qcyc7XG5pbXBvcnQgeyBERUxJTUlURVIgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5cbi8qKlxuICogQGxvYWQgLi9yZW1vdmUtcGF0aC5kb2MubWRcbiAqIEBtZW1iZXJvZiBtb2R1bGU6ZmxhdFxuICogQHBhcmFtIHtGbGF0dGVuUGFyYW1zfSBwYXJhbXNcbiAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7RmxhdHRlblBhcmFtc31cbiAqL1xuY29uc3QgcmVtb3ZlUGF0aCA9IChwYXJhbXMsIHBhdGgpID0+IHtcbiAgLy8gYnkgZGVmYXVsdCBzaW1wbHkgZmlsdGVyIG91dCBlbGVtZW50cyBmcm9tIHRoZSBvYmplY3RcbiAgbGV0IGZpbHRlcmVkID0gZmlsdGVyT3V0UGFyYW1zKHBhcmFtcywgcGF0aCk7XG5cbiAgLy8gcmV2ZXJzZSBtZWFucyB0aGF0IHdlIGl0ZXJhdGUgZnJvbSB0aGUgY2xvc2VzIHBhcmVudFxuICBjb25zdCBwYXJlbnRQYXRocyA9IHBhdGhUb1BhcnRzKHBhdGgpLnJldmVyc2UoKTtcblxuICAvLyBidXQgaWYgb25lIG9mIHRoZSBwYXJlbnQgaXMgYW4gYXJyYXlcbiAgcGFyZW50UGF0aHMuZmluZCgocGFyZW50UGF0aCwgcGFyZW50SW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXJlbnQgPSBnZXQocGFyYW1zLCBwYXJlbnRQYXRoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJlbnQpKSB7XG4gICAgICAvLyBwcmV2aW91cyBlbGVtZW50IGlzIHN0cmluZ2lmaWVkIGluZGV4IGxpa2UgJ3Byb3BlcnR5LjEnXG4gICAgICBjb25zdCBwcmV2aW91c1BhdGhzID0gcGFyZW50UGF0aHNbcGFyZW50SW5kZXggLSAxXS5zcGxpdChERUxJTUlURVIpO1xuICAgICAgLy8gc28gdGhpcyBpcyB0aGUgaW5kZXg6IDFcbiAgICAgIGNvbnN0IHByZXZpb3VzUGF0aEluZGV4ID0gcHJldmlvdXNQYXRoc1twcmV2aW91c1BhdGhzLmxlbmd0aCAtIDFdO1xuICAgICAgcGFyZW50LnNwbGljZSgrcHJldmlvdXNQYXRoSW5kZXgsIDEpO1xuICAgICAgZmlsdGVyZWQgPSBzZXQocGFyYW1zLCBwYXJlbnRQYXRoLCBwYXJlbnQpO1xuICAgICAgLy8gdGhpcyB3b3JrcyBqdXN0IGZvciB0aGUgZmlyc3RseSBmb3VuZCBhcnJheSBpdGVtLCBiZWNhdXNlIGluIGNhc2Ugb2YgcmVtb3ZpbmcgdGhlIGxhc3Qgb25lXG4gICAgICAvLyBpdCBsZWF2ZXMgYFtdYCBhcyBhIHZhbHVlLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG4gIHJldHVybiBmaWx0ZXJlZDtcbn07XG5leHBvcnQgeyByZW1vdmVQYXRoIH07IiwiaW1wb3J0IGZsYXRNb2R1bGUgZnJvbSAnZmxhdCc7XG5pbXBvcnQgeyBERUxJTUlURVIgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBzZWxlY3RQYXJhbXMgfSBmcm9tICcuL3NlbGVjdC1wYXJhbXMuanMnO1xuaW1wb3J0IHsgZmlsdGVyT3V0UGFyYW1zIH0gZnJvbSAnLi9maWx0ZXItb3V0LXBhcmFtcy5qcyc7XG5pbXBvcnQgeyBzZXQgfSBmcm9tICcuL3NldC5qcyc7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICcuL2dldC5qcyc7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJy4vbWVyZ2UuanMnO1xuaW1wb3J0IHsgcGF0aFRvUGFydHMgfSBmcm9tICcuL3BhdGgtdG8tcGFydHMuanMnO1xuaW1wb3J0IHsgcmVtb3ZlUGF0aCB9IGZyb20gJy4vcmVtb3ZlLXBhdGguanMnO1xuLyoqXG4gKiBAbW9kdWxlIGZsYXRcbiAqIEBuYW1lIGZsYXRcbiAqIEBuZXcgaW4gdmVyc2lvbiAzLjNcbiAqIEBsb2FkIC4vZmxhdC5kb2MubWRcbiAqL1xuZXhwb3J0IGNvbnN0IGZsYXQgPSB7XG4gIC8qKlxuICAgKiBSYXcgYGZsYXR0ZW5gIGZ1bmN0aW9uIGV4cG9ydGVkIGZyb20gb3JpZ2luYWwge0BsaW5rIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2ZsYXQgZmxhdH1cbiAgICogcGFja2FnZS5cbiAgICovXG4gIGZsYXR0ZW46IGZsYXRNb2R1bGUuZmxhdHRlbixcbiAgLyoqXG4gICAqIFJhdyBgdW5mbGF0dGVuYCBmdW5jdGlvbiBleHBvcnRlZCBmcm9tIG9yaWdpbmFsIHtAbGluayBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9mbGF0IGZsYXR9XG4gICAqIHBhY2thZ2UuXG4gICAqL1xuICB1bmZsYXR0ZW46IGZsYXRNb2R1bGUudW5mbGF0dGVuLFxuICBzZXQsXG4gIGdldCxcbiAgc2VsZWN0UGFyYW1zLFxuICBmaWx0ZXJPdXRQYXJhbXMsXG4gIHJlbW92ZVBhdGgsXG4gIERFTElNSVRFUixcbiAgcGF0aFRvUGFydHMsXG4gIG1lcmdlXG59OyIsIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IGNvbXBsZXhpdHk6IFsyLCAxOF0sIG1heC1zdGF0ZW1lbnRzOiBbMiwgMzNdICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc1N5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCcpIHsgcmV0dXJuIHRydWU7IH1cblxuXHR2YXIgb2JqID0ge307XG5cdHZhciBzeW0gPSBTeW1ib2woJ3Rlc3QnKTtcblx0dmFyIHN5bU9iaiA9IE9iamVjdChzeW0pO1xuXHRpZiAodHlwZW9mIHN5bSA9PT0gJ3N0cmluZycpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pICE9PSAnW29iamVjdCBTeW1ib2xdJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW1PYmopICE9PSAnW29iamVjdCBTeW1ib2xdJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL29iamVjdC5hc3NpZ24vaXNzdWVzLzE3XG5cdC8vIGlmIChzeW0gaW5zdGFuY2VvZiBTeW1ib2wpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJSZWZsZWN0aW9uL2dldC1vd24tcHJvcGVydHktc3ltYm9scy9pc3N1ZXMvNFxuXHQvLyBpZiAoIShzeW1PYmogaW5zdGFuY2VvZiBTeW1ib2wpKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIGlmICh0eXBlb2YgU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gaWYgKFN0cmluZyhzeW0pICE9PSBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltVmFsID0gNDI7XG5cdG9ialtzeW1dID0gc3ltVmFsO1xuXHRmb3IgKHN5bSBpbiBvYmopIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLXVucmVhY2hhYmxlLWxvb3Bcblx0aWYgKHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1zID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmopO1xuXHRpZiAoc3ltcy5sZW5ndGggIT09IDEgfHwgc3ltc1swXSAhPT0gc3ltKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iaiwgc3ltKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBzeW0pO1xuXHRcdGlmIChkZXNjcmlwdG9yLnZhbHVlICE9PSBzeW1WYWwgfHwgZGVzY3JpcHRvci5lbnVtZXJhYmxlICE9PSB0cnVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb3JpZ1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbDtcbnZhciBoYXNTeW1ib2xTaGFtID0gcmVxdWlyZSgnLi9zaGFtcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc05hdGl2ZVN5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCgnZm9vJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCgnYmFyJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHJldHVybiBoYXNTeW1ib2xTaGFtKCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgbm8taW52YWxpZC10aGlzOiAxICovXG5cbnZhciBFUlJPUl9NRVNTQUdFID0gJ0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgJztcbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZnVuY1R5cGUgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQodGhhdCkge1xuICAgIHZhciB0YXJnZXQgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnZnVuY3Rpb24nIHx8IHRvU3RyLmNhbGwodGFyZ2V0KSAhPT0gZnVuY1R5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJPUl9NRVNTQUdFICsgdGFyZ2V0KTtcbiAgICB9XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG5cbiAgICB2YXIgYm91bmQ7XG4gICAgdmFyIGJpbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhhdCxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBib3VuZExlbmd0aCA9IE1hdGgubWF4KDAsIHRhcmdldC5sZW5ndGggLSBhcmdzLmxlbmd0aCk7XG4gICAgdmFyIGJvdW5kQXJncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRMZW5ndGg7IGkrKykge1xuICAgICAgICBib3VuZEFyZ3MucHVzaCgnJCcgKyBpKTtcbiAgICB9XG5cbiAgICBib3VuZCA9IEZ1bmN0aW9uKCdiaW5kZXInLCAncmV0dXJuIGZ1bmN0aW9uICgnICsgYm91bmRBcmdzLmpvaW4oJywnKSArICcpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfScpKGJpbmRlcik7XG5cbiAgICBpZiAodGFyZ2V0LnByb3RvdHlwZSkge1xuICAgICAgICB2YXIgRW1wdHkgPSBmdW5jdGlvbiBFbXB0eSgpIHt9O1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYm91bmQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgfHwgaW1wbGVtZW50YXRpb247XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHVuZGVmaW5lZDtcblxudmFyICRTeW50YXhFcnJvciA9IFN5bnRheEVycm9yO1xudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxudmFyIGdldEV2YWxsZWRDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChleHByZXNzaW9uU3ludGF4KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRGdW5jdGlvbignXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiAoJyArIGV4cHJlc3Npb25TeW50YXggKyAnKS5jb25zdHJ1Y3RvcjsnKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxufTtcblxudmFyICRnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKHt9LCAnJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQkZ09QRCA9IG51bGw7IC8vIHRoaXMgaXMgSUUgOCwgd2hpY2ggaGFzIGEgYnJva2VuIGdPUERcblx0fVxufVxuXG52YXIgdGhyb3dUeXBlRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyAkVHlwZUVycm9yKCk7XG59O1xudmFyIFRocm93VHlwZUVycm9yID0gJGdPUERcblx0PyAoZnVuY3Rpb24gKCkge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zLCBuby1jYWxsZXIsIG5vLXJlc3RyaWN0ZWQtcHJvcGVydGllc1xuXHRcdFx0YXJndW1lbnRzLmNhbGxlZTsgLy8gSUUgOCBkb2VzIG5vdCB0aHJvdyBoZXJlXG5cdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0fSBjYXRjaCAoY2FsbGVlVGhyb3dzKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHQvLyBJRSA4IHRocm93cyBvbiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGFyZ3VtZW50cywgJycpXG5cdFx0XHRcdHJldHVybiAkZ09QRChhcmd1bWVudHMsICdjYWxsZWUnKS5nZXQ7XG5cdFx0XHR9IGNhdGNoIChnT1BEdGhyb3dzKSB7XG5cdFx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH0oKSlcblx0OiB0aHJvd1R5cGVFcnJvcjtcblxudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5fX3Byb3RvX187IH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCaWdJbnQ2NEFycmF5JSc6IHR5cGVvZiBCaWdJbnQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludDY0QXJyYXksXG5cdCclQmlnVWludDY0QXJyYXklJzogdHlwZW9mIEJpZ1VpbnQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ1VpbnQ2NEFycmF5LFxuXHQnJUJvb2xlYW4lJzogQm9vbGVhbixcblx0JyVEYXRhVmlldyUnOiB0eXBlb2YgRGF0YVZpZXcgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRGF0YVZpZXcsXG5cdCclRGF0ZSUnOiBEYXRlLFxuXHQnJWRlY29kZVVSSSUnOiBkZWNvZGVVUkksXG5cdCclZGVjb2RlVVJJQ29tcG9uZW50JSc6IGRlY29kZVVSSUNvbXBvbmVudCxcblx0JyVlbmNvZGVVUkklJzogZW5jb2RlVVJJLFxuXHQnJWVuY29kZVVSSUNvbXBvbmVudCUnOiBlbmNvZGVVUklDb21wb25lbnQsXG5cdCclRXJyb3IlJzogRXJyb3IsXG5cdCclZXZhbCUnOiBldmFsLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWV2YWxcblx0JyVFdmFsRXJyb3IlJzogRXZhbEVycm9yLFxuXHQnJUZsb2F0MzJBcnJheSUnOiB0eXBlb2YgRmxvYXQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0MzJBcnJheSxcblx0JyVGbG9hdDY0QXJyYXklJzogdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDY0QXJyYXksXG5cdCclRmluYWxpemF0aW9uUmVnaXN0cnklJzogdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZpbmFsaXphdGlvblJlZ2lzdHJ5LFxuXHQnJUZ1bmN0aW9uJSc6ICRGdW5jdGlvbixcblx0JyVHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclSW50OEFycmF5JSc6IHR5cGVvZiBJbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50OEFycmF5LFxuXHQnJUludDE2QXJyYXklJzogdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MTZBcnJheSxcblx0JyVJbnQzMkFycmF5JSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXksXG5cdCclaXNGaW5pdGUlJzogaXNGaW5pdGUsXG5cdCclaXNOYU4lJzogaXNOYU4sXG5cdCclSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpIDogdW5kZWZpbmVkLFxuXHQnJUpTT04lJzogdHlwZW9mIEpTT04gPT09ICdvYmplY3QnID8gSlNPTiA6IHVuZGVmaW5lZCxcblx0JyVNYXAlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBNYXAsXG5cdCclTWFwSXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgTWFwKClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyVNYXRoJSc6IE1hdGgsXG5cdCclTnVtYmVyJSc6IE51bWJlcixcblx0JyVPYmplY3QlJzogT2JqZWN0LFxuXHQnJXBhcnNlRmxvYXQlJzogcGFyc2VGbG9hdCxcblx0JyVwYXJzZUludCUnOiBwYXJzZUludCxcblx0JyVQcm9taXNlJSc6IHR5cGVvZiBQcm9taXNlID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb21pc2UsXG5cdCclUHJveHklJzogdHlwZW9mIFByb3h5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb3h5LFxuXHQnJVJhbmdlRXJyb3IlJzogUmFuZ2VFcnJvcixcblx0JyVSZWZlcmVuY2VFcnJvciUnOiBSZWZlcmVuY2VFcnJvcixcblx0JyVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCclUmVnRXhwJSc6IFJlZ0V4cCxcblx0JyVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCclU2V0SXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgU2V0KClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlciUnOiB0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2hhcmVkQXJyYXlCdWZmZXIsXG5cdCclU3RyaW5nJSc6IFN0cmluZyxcblx0JyVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oJydbU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVTeW1ib2wlJzogaGFzU3ltYm9scyA/IFN5bWJvbCA6IHVuZGVmaW5lZCxcblx0JyVTeW50YXhFcnJvciUnOiAkU3ludGF4RXJyb3IsXG5cdCclVGhyb3dUeXBlRXJyb3IlJzogVGhyb3dUeXBlRXJyb3IsXG5cdCclVHlwZWRBcnJheSUnOiBUeXBlZEFycmF5LFxuXHQnJVR5cGVFcnJvciUnOiAkVHlwZUVycm9yLFxuXHQnJVVpbnQ4QXJyYXklJzogdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDhBcnJheSxcblx0JyVVaW50OENsYW1wZWRBcnJheSUnOiB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDhDbGFtcGVkQXJyYXksXG5cdCclVWludDE2QXJyYXklJzogdHlwZW9mIFVpbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQxNkFycmF5LFxuXHQnJVVpbnQzMkFycmF5JSc6IHR5cGVvZiBVaW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MzJBcnJheSxcblx0JyVVUklFcnJvciUnOiBVUklFcnJvcixcblx0JyVXZWFrTWFwJSc6IHR5cGVvZiBXZWFrTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtNYXAsXG5cdCclV2Vha1JlZiUnOiB0eXBlb2YgV2Vha1JlZiA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrUmVmLFxuXHQnJVdlYWtTZXQlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldFxufTtcblxudHJ5IHtcblx0bnVsbC5lcnJvcjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2hhZG93cmVhbG0vcHVsbC8zODQjaXNzdWVjb21tZW50LTEzNjQyNjQyMjlcblx0dmFyIGVycm9yUHJvdG8gPSBnZXRQcm90byhnZXRQcm90byhlKSk7XG5cdElOVFJJTlNJQ1NbJyVFcnJvci5wcm90b3R5cGUlJ10gPSBlcnJvclByb3RvO1xufVxuXG52YXIgZG9FdmFsID0gZnVuY3Rpb24gZG9FdmFsKG5hbWUpIHtcblx0dmFyIHZhbHVlO1xuXHRpZiAobmFtZSA9PT0gJyVBc3luY0Z1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24gKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUdlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvciUnKSB7XG5cdFx0dmFyIGZuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKTtcblx0XHRpZiAoZm4pIHtcblx0XHRcdHZhbHVlID0gZm4ucHJvdG90eXBlO1xuXHRcdH1cblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJykge1xuXHRcdHZhciBnZW4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvciUnKTtcblx0XHRpZiAoZ2VuKSB7XG5cdFx0XHR2YWx1ZSA9IGdldFByb3RvKGdlbi5wcm90b3R5cGUpO1xuXHRcdH1cblx0fVxuXG5cdElOVFJJTlNJQ1NbbmFtZV0gPSB2YWx1ZTtcblxuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgTEVHQUNZX0FMSUFTRVMgPSB7XG5cdCclQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvdHlwZSUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG9fZW50cmllcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdlbnRyaWVzJ10sXG5cdCclQXJyYXlQcm90b19mb3JFYWNoJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2ZvckVhY2gnXSxcblx0JyVBcnJheVByb3RvX2tleXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAna2V5cyddLFxuXHQnJUFycmF5UHJvdG9fdmFsdWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ3ZhbHVlcyddLFxuXHQnJUFzeW5jRnVuY3Rpb25Qcm90b3R5cGUlJzogWydBc3luY0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUJvb2xlYW5Qcm90b3R5cGUlJzogWydCb29sZWFuJywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGFWaWV3UHJvdG90eXBlJSc6IFsnRGF0YVZpZXcnLCAncHJvdG90eXBlJ10sXG5cdCclRGF0ZVByb3RvdHlwZSUnOiBbJ0RhdGUnLCAncHJvdG90eXBlJ10sXG5cdCclRXJyb3JQcm90b3R5cGUlJzogWydFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVFdmFsRXJyb3JQcm90b3R5cGUlJzogWydFdmFsRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQzMkFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0NjRBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0NjRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvciUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQ4QXJyYXlQcm90b3R5cGUlJzogWydJbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ0ludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ0ludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSlNPTlBhcnNlJSc6IFsnSlNPTicsICdwYXJzZSddLFxuXHQnJUpTT05TdHJpbmdpZnklJzogWydKU09OJywgJ3N0cmluZ2lmeSddLFxuXHQnJU1hcFByb3RvdHlwZSUnOiBbJ01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVOdW1iZXJQcm90b3R5cGUlJzogWydOdW1iZXInLCAncHJvdG90eXBlJ10sXG5cdCclT2JqZWN0UHJvdG90eXBlJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZSddLFxuXHQnJU9ialByb3RvX3RvU3RyaW5nJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd0b1N0cmluZyddLFxuXHQnJU9ialByb3RvX3ZhbHVlT2YlJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3ZhbHVlT2YnXSxcblx0JyVQcm9taXNlUHJvdG90eXBlJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnXSxcblx0JyVQcm9taXNlUHJvdG9fdGhlbiUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJywgJ3RoZW4nXSxcblx0JyVQcm9taXNlX2FsbCUnOiBbJ1Byb21pc2UnLCAnYWxsJ10sXG5cdCclUHJvbWlzZV9yZWplY3QlJzogWydQcm9taXNlJywgJ3JlamVjdCddLFxuXHQnJVByb21pc2VfcmVzb2x2ZSUnOiBbJ1Byb21pc2UnLCAncmVzb2x2ZSddLFxuXHQnJVJhbmdlRXJyb3JQcm90b3R5cGUlJzogWydSYW5nZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSc6IFsnUmVmZXJlbmNlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVnRXhwUHJvdG90eXBlJSc6IFsnUmVnRXhwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVNldFByb3RvdHlwZSUnOiBbJ1NldCcsICdwcm90b3R5cGUnXSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ1NoYXJlZEFycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN0cmluZ1Byb3RvdHlwZSUnOiBbJ1N0cmluZycsICdwcm90b3R5cGUnXSxcblx0JyVTeW1ib2xQcm90b3R5cGUlJzogWydTeW1ib2wnLCAncHJvdG90eXBlJ10sXG5cdCclU3ludGF4RXJyb3JQcm90b3R5cGUlJzogWydTeW50YXhFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVHlwZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlRXJyb3JQcm90b3R5cGUlJzogWydUeXBlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlJzogWydVaW50OENsYW1wZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnVWludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVVJJRXJyb3JQcm90b3R5cGUlJzogWydVUklFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrTWFwUHJvdG90eXBlJSc6IFsnV2Vha01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrU2V0UHJvdG90eXBlJSc6IFsnV2Vha1NldCcsICdwcm90b3R5cGUnXVxufTtcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnaGFzJyk7XG52YXIgJGNvbmNhdCA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBBcnJheS5wcm90b3R5cGUuY29uY2F0KTtcbnZhciAkc3BsaWNlQXBwbHkgPSBiaW5kLmNhbGwoRnVuY3Rpb24uYXBwbHksIEFycmF5LnByb3RvdHlwZS5zcGxpY2UpO1xudmFyICRyZXBsYWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG52YXIgJHN0clNsaWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUuc2xpY2UpO1xudmFyICRleGVjID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFJlZ0V4cC5wcm90b3R5cGUuZXhlYyk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0aWYgKCRleGVjKC9eJT9bXiVdKiU/JC8sIG5hbWUpID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignYCVgIG1heSBub3QgYmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRyaW5zaWMgbmFtZScpO1xuXHR9XG5cdHZhciBwYXJ0cyA9IHN0cmluZ1RvUGF0aChuYW1lKTtcblx0dmFyIGludHJpbnNpY0Jhc2VOYW1lID0gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzWzBdIDogJyc7XG5cblx0dmFyIGludHJpbnNpYyA9IGdldEJhc2VJbnRyaW5zaWMoJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJScsIGFsbG93TWlzc2luZyk7XG5cdHZhciBpbnRyaW5zaWNSZWFsTmFtZSA9IGludHJpbnNpYy5uYW1lO1xuXHR2YXIgdmFsdWUgPSBpbnRyaW5zaWMudmFsdWU7XG5cdHZhciBza2lwRnVydGhlckNhY2hpbmcgPSBmYWxzZTtcblxuXHR2YXIgYWxpYXMgPSBpbnRyaW5zaWMuYWxpYXM7XG5cdGlmIChhbGlhcykge1xuXHRcdGludHJpbnNpY0Jhc2VOYW1lID0gYWxpYXNbMF07XG5cdFx0JHNwbGljZUFwcGx5KHBhcnRzLCAkY29uY2F0KFswLCAxXSwgYWxpYXMpKTtcblx0fVxuXG5cdGZvciAodmFyIGkgPSAxLCBpc093biA9IHRydWU7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdHZhciBwYXJ0ID0gcGFydHNbaV07XG5cdFx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHBhcnQsIDAsIDEpO1xuXHRcdHZhciBsYXN0ID0gJHN0clNsaWNlKHBhcnQsIC0xKTtcblx0XHRpZiAoXG5cdFx0XHQoXG5cdFx0XHRcdChmaXJzdCA9PT0gJ1wiJyB8fCBmaXJzdCA9PT0gXCInXCIgfHwgZmlyc3QgPT09ICdgJylcblx0XHRcdFx0fHwgKGxhc3QgPT09ICdcIicgfHwgbGFzdCA9PT0gXCInXCIgfHwgbGFzdCA9PT0gJ2AnKVxuXHRcdFx0KVxuXHRcdFx0JiYgZmlyc3QgIT09IGxhc3Rcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ3Byb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2ZSBtYXRjaGluZyBxdW90ZXMnKTtcblx0XHR9XG5cdFx0aWYgKHBhcnQgPT09ICdjb25zdHJ1Y3RvcicgfHwgIWlzT3duKSB7XG5cdFx0XHRza2lwRnVydGhlckNhY2hpbmcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGludHJpbnNpY0Jhc2VOYW1lICs9ICcuJyArIHBhcnQ7XG5cdFx0aW50cmluc2ljUmVhbE5hbWUgPSAnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJztcblxuXHRcdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljUmVhbE5hbWUpKSB7XG5cdFx0XHR2YWx1ZSA9IElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0aWYgKCEocGFydCBpbiB2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKCFhbGxvd01pc3NpbmcpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYmFzZSBpbnRyaW5zaWMgZm9yICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdm9pZCB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoJGdPUEQgJiYgKGkgKyAxKSA+PSBwYXJ0cy5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGRlc2MgPSAkZ09QRCh2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdGlzT3duID0gISFkZXNjO1xuXG5cdFx0XHRcdC8vIEJ5IGNvbnZlbnRpb24sIHdoZW4gYSBkYXRhIHByb3BlcnR5IGlzIGNvbnZlcnRlZCB0byBhbiBhY2Nlc3NvclxuXHRcdFx0XHQvLyBwcm9wZXJ0eSB0byBlbXVsYXRlIGEgZGF0YSBwcm9wZXJ0eSB0aGF0IGRvZXMgbm90IHN1ZmZlciBmcm9tXG5cdFx0XHRcdC8vIHRoZSBvdmVycmlkZSBtaXN0YWtlLCB0aGF0IGFjY2Vzc29yJ3MgZ2V0dGVyIGlzIG1hcmtlZCB3aXRoXG5cdFx0XHRcdC8vIGFuIGBvcmlnaW5hbFZhbHVlYCBwcm9wZXJ0eS4gSGVyZSwgd2hlbiB3ZSBkZXRlY3QgdGhpcywgd2Vcblx0XHRcdFx0Ly8gdXBob2xkIHRoZSBpbGx1c2lvbiBieSBwcmV0ZW5kaW5nIHRvIHNlZSB0aGF0IG9yaWdpbmFsIGRhdGFcblx0XHRcdFx0Ly8gcHJvcGVydHksIGkuZS4sIHJldHVybmluZyB0aGUgdmFsdWUgcmF0aGVyIHRoYW4gdGhlIGdldHRlclxuXHRcdFx0XHQvLyBpdHNlbGYuXG5cdFx0XHRcdGlmIChpc093biAmJiAnZ2V0JyBpbiBkZXNjICYmICEoJ29yaWdpbmFsVmFsdWUnIGluIGRlc2MuZ2V0KSkge1xuXHRcdFx0XHRcdHZhbHVlID0gZGVzYy5nZXQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aXNPd24gPSBoYXNPd24odmFsdWUsIHBhcnQpO1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPd24gJiYgIXNraXBGdXJ0aGVyQ2FjaGluZykge1xuXHRcdFx0XHRJTlRSSU5TSUNTW2ludHJpbnNpY1JlYWxOYW1lXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnLi8nKTtcblxudmFyICRpbmRleE9mID0gY2FsbEJpbmQoR2V0SW50cmluc2ljKCdTdHJpbmcucHJvdG90eXBlLmluZGV4T2YnKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJvdW5kSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljID0gR2V0SW50cmluc2ljKG5hbWUsICEhYWxsb3dNaXNzaW5nKTtcblx0aWYgKHR5cGVvZiBpbnRyaW5zaWMgPT09ICdmdW5jdGlvbicgJiYgJGluZGV4T2YobmFtZSwgJy5wcm90b3R5cGUuJykgPiAtMSkge1xuXHRcdHJldHVybiBjYWxsQmluZChpbnRyaW5zaWMpO1xuXHR9XG5cdHJldHVybiBpbnRyaW5zaWM7XG59O1xuIiwidmFyIGhhc01hcCA9IHR5cGVvZiBNYXAgPT09ICdmdW5jdGlvbicgJiYgTWFwLnByb3RvdHlwZTtcbnZhciBtYXBTaXplRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgaGFzTWFwID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihNYXAucHJvdG90eXBlLCAnc2l6ZScpIDogbnVsbDtcbnZhciBtYXBTaXplID0gaGFzTWFwICYmIG1hcFNpemVEZXNjcmlwdG9yICYmIHR5cGVvZiBtYXBTaXplRGVzY3JpcHRvci5nZXQgPT09ICdmdW5jdGlvbicgPyBtYXBTaXplRGVzY3JpcHRvci5nZXQgOiBudWxsO1xudmFyIG1hcEZvckVhY2ggPSBoYXNNYXAgJiYgTWFwLnByb3RvdHlwZS5mb3JFYWNoO1xudmFyIGhhc1NldCA9IHR5cGVvZiBTZXQgPT09ICdmdW5jdGlvbicgJiYgU2V0LnByb3RvdHlwZTtcbnZhciBzZXRTaXplRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgaGFzU2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihTZXQucHJvdG90eXBlLCAnc2l6ZScpIDogbnVsbDtcbnZhciBzZXRTaXplID0gaGFzU2V0ICYmIHNldFNpemVEZXNjcmlwdG9yICYmIHR5cGVvZiBzZXRTaXplRGVzY3JpcHRvci5nZXQgPT09ICdmdW5jdGlvbicgPyBzZXRTaXplRGVzY3JpcHRvci5nZXQgOiBudWxsO1xudmFyIHNldEZvckVhY2ggPSBoYXNTZXQgJiYgU2V0LnByb3RvdHlwZS5mb3JFYWNoO1xudmFyIGhhc1dlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrTWFwLnByb3RvdHlwZTtcbnZhciB3ZWFrTWFwSGFzID0gaGFzV2Vha01hcCA/IFdlYWtNYXAucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nICYmIFdlYWtTZXQucHJvdG90eXBlO1xudmFyIHdlYWtTZXRIYXMgPSBoYXNXZWFrU2V0ID8gV2Vha1NldC5wcm90b3R5cGUuaGFzIDogbnVsbDtcbnZhciBoYXNXZWFrUmVmID0gdHlwZW9mIFdlYWtSZWYgPT09ICdmdW5jdGlvbicgJiYgV2Vha1JlZi5wcm90b3R5cGU7XG52YXIgd2Vha1JlZkRlcmVmID0gaGFzV2Vha1JlZiA/IFdlYWtSZWYucHJvdG90eXBlLmRlcmVmIDogbnVsbDtcbnZhciBib29sZWFuVmFsdWVPZiA9IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2Y7XG52YXIgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgJG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciAkc2xpY2UgPSBTdHJpbmcucHJvdG90eXBlLnNsaWNlO1xudmFyICRyZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xudmFyICR0b1VwcGVyQ2FzZSA9IFN0cmluZy5wcm90b3R5cGUudG9VcHBlckNhc2U7XG52YXIgJHRvTG93ZXJDYXNlID0gU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZTtcbnZhciAkdGVzdCA9IFJlZ0V4cC5wcm90b3R5cGUudGVzdDtcbnZhciAkY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciAkam9pbiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xudmFyICRhcnJTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGJpZ0ludFZhbHVlT2YgPSB0eXBlb2YgQmlnSW50ID09PSAnZnVuY3Rpb24nID8gQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mIDogbnVsbDtcbnZhciBnT1BTID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBzeW1Ub1N0cmluZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCcgPyBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nIDogbnVsbDtcbnZhciBoYXNTaGFtbWVkU3ltYm9scyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ29iamVjdCc7XG4vLyBpZSwgYGhhcy10b3N0cmluZ3RhZy9zaGFtc1xudmFyIHRvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcgJiYgKHR5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWcgPT09IGhhc1NoYW1tZWRTeW1ib2xzID8gJ29iamVjdCcgOiAnc3ltYm9sJylcbiAgICA/IFN5bWJvbC50b1N0cmluZ1RhZ1xuICAgIDogbnVsbDtcbnZhciBpc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG52YXIgZ1BPID0gKHR5cGVvZiBSZWZsZWN0ID09PSAnZnVuY3Rpb24nID8gUmVmbGVjdC5nZXRQcm90b3R5cGVPZiA6IE9iamVjdC5nZXRQcm90b3R5cGVPZikgfHwgKFxuICAgIFtdLl9fcHJvdG9fXyA9PT0gQXJyYXkucHJvdG90eXBlIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgPyBmdW5jdGlvbiAoTykge1xuICAgICAgICAgICAgcmV0dXJuIE8uX19wcm90b19fOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsXG4pO1xuXG5mdW5jdGlvbiBhZGROdW1lcmljU2VwYXJhdG9yKG51bSwgc3RyKSB7XG4gICAgaWYgKFxuICAgICAgICBudW0gPT09IEluZmluaXR5XG4gICAgICAgIHx8IG51bSA9PT0gLUluZmluaXR5XG4gICAgICAgIHx8IG51bSAhPT0gbnVtXG4gICAgICAgIHx8IChudW0gJiYgbnVtID4gLTEwMDAgJiYgbnVtIDwgMTAwMClcbiAgICAgICAgfHwgJHRlc3QuY2FsbCgvZS8sIHN0cilcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgdmFyIHNlcFJlZ2V4ID0gL1swLTldKD89KD86WzAtOV17M30pKyg/IVswLTldKSkvZztcbiAgICBpZiAodHlwZW9mIG51bSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdmFyIGludCA9IG51bSA8IDAgPyAtJGZsb29yKC1udW0pIDogJGZsb29yKG51bSk7IC8vIHRydW5jKG51bSlcbiAgICAgICAgaWYgKGludCAhPT0gbnVtKSB7XG4gICAgICAgICAgICB2YXIgaW50U3RyID0gU3RyaW5nKGludCk7XG4gICAgICAgICAgICB2YXIgZGVjID0gJHNsaWNlLmNhbGwoc3RyLCBpbnRTdHIubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChpbnRTdHIsIHNlcFJlZ2V4LCAnJCZfJykgKyAnLicgKyAkcmVwbGFjZS5jYWxsKCRyZXBsYWNlLmNhbGwoZGVjLCAvKFswLTldezN9KS9nLCAnJCZfJyksIC9fJC8sICcnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChzdHIsIHNlcFJlZ2V4LCAnJCZfJyk7XG59XG5cbnZhciB1dGlsSW5zcGVjdCA9IHJlcXVpcmUoJy4vdXRpbC5pbnNwZWN0Jyk7XG52YXIgaW5zcGVjdEN1c3RvbSA9IHV0aWxJbnNwZWN0LmN1c3RvbTtcbnZhciBpbnNwZWN0U3ltYm9sID0gaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbnNwZWN0XyhvYmosIG9wdGlvbnMsIGRlcHRoLCBzZWVuKSB7XG4gICAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpICYmIChvcHRzLnF1b3RlU3R5bGUgIT09ICdzaW5nbGUnICYmIG9wdHMucXVvdGVTdHlsZSAhPT0gJ2RvdWJsZScpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBcInF1b3RlU3R5bGVcIiBtdXN0IGJlIFwic2luZ2xlXCIgb3IgXCJkb3VibGVcIicpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnbWF4U3RyaW5nTGVuZ3RoJykgJiYgKHR5cGVvZiBvcHRzLm1heFN0cmluZ0xlbmd0aCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgID8gb3B0cy5tYXhTdHJpbmdMZW5ndGggPCAwICYmIG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBJbmZpbml0eVxuICAgICAgICAgICAgOiBvcHRzLm1heFN0cmluZ0xlbmd0aCAhPT0gbnVsbFxuICAgICAgICApXG4gICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBcIm1heFN0cmluZ0xlbmd0aFwiLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIEluZmluaXR5LCBvciBgbnVsbGAnKTtcbiAgICB9XG4gICAgdmFyIGN1c3RvbUluc3BlY3QgPSBoYXMob3B0cywgJ2N1c3RvbUluc3BlY3QnKSA/IG9wdHMuY3VzdG9tSW5zcGVjdCA6IHRydWU7XG4gICAgaWYgKHR5cGVvZiBjdXN0b21JbnNwZWN0ICE9PSAnYm9vbGVhbicgJiYgY3VzdG9tSW5zcGVjdCAhPT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwiY3VzdG9tSW5zcGVjdFwiLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBgdHJ1ZWAsIGBmYWxzZWAsIG9yIGBcXCdzeW1ib2xcXCdgJyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgICBoYXMob3B0cywgJ2luZGVudCcpXG4gICAgICAgICYmIG9wdHMuaW5kZW50ICE9PSBudWxsXG4gICAgICAgICYmIG9wdHMuaW5kZW50ICE9PSAnXFx0J1xuICAgICAgICAmJiAhKHBhcnNlSW50KG9wdHMuaW5kZW50LCAxMCkgPT09IG9wdHMuaW5kZW50ICYmIG9wdHMuaW5kZW50ID4gMClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG4gICAgaWYgKGhhcyhvcHRzLCAnbnVtZXJpY1NlcGFyYXRvcicpICYmIHR5cGVvZiBvcHRzLm51bWVyaWNTZXBhcmF0b3IgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJudW1lcmljU2VwYXJhdG9yXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCBvciBgZmFsc2VgJyk7XG4gICAgfVxuICAgIHZhciBudW1lcmljU2VwYXJhdG9yID0gb3B0cy5udW1lcmljU2VwYXJhdG9yO1xuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICB9XG4gICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiBvYmogPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gaW5zcGVjdFN0cmluZyhvYmosIG9wdHMpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKG9iaiA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5IC8gb2JqID4gMCA/ICcwJyA6ICctMCc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN0ciA9IFN0cmluZyhvYmopO1xuICAgICAgICByZXR1cm4gbnVtZXJpY1NlcGFyYXRvciA/IGFkZE51bWVyaWNTZXBhcmF0b3Iob2JqLCBzdHIpIDogc3RyO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgdmFyIGJpZ0ludFN0ciA9IFN0cmluZyhvYmopICsgJ24nO1xuICAgICAgICByZXR1cm4gbnVtZXJpY1NlcGFyYXRvciA/IGFkZE51bWVyaWNTZXBhcmF0b3Iob2JqLCBiaWdJbnRTdHIpIDogYmlnSW50U3RyO1xuICAgIH1cblxuICAgIHZhciBtYXhEZXB0aCA9IHR5cGVvZiBvcHRzLmRlcHRoID09PSAndW5kZWZpbmVkJyA/IDUgOiBvcHRzLmRlcHRoO1xuICAgIGlmICh0eXBlb2YgZGVwdGggPT09ICd1bmRlZmluZWQnKSB7IGRlcHRoID0gMDsgfVxuICAgIGlmIChkZXB0aCA+PSBtYXhEZXB0aCAmJiBtYXhEZXB0aCA+IDAgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkob2JqKSA/ICdbQXJyYXldJyA6ICdbT2JqZWN0XSc7XG4gICAgfVxuXG4gICAgdmFyIGluZGVudCA9IGdldEluZGVudChvcHRzLCBkZXB0aCk7XG5cbiAgICBpZiAodHlwZW9mIHNlZW4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNlZW4gPSBbXTtcbiAgICB9IGVsc2UgaWYgKGluZGV4T2Yoc2Vlbiwgb2JqKSA+PSAwKSB7XG4gICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSwgZnJvbSwgbm9JbmRlbnQpIHtcbiAgICAgICAgaWYgKGZyb20pIHtcbiAgICAgICAgICAgIHNlZW4gPSAkYXJyU2xpY2UuY2FsbChzZWVuKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNSZWdFeHAob2JqKSkgeyAvLyBpbiBvbGRlciBlbmdpbmVzLCByZWdleGVzIGFyZSBjYWxsYWJsZVxuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArICRqb2luLmNhbGwoa2V5cywgJywgJykgKyAnIH0nIDogJycpO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wob2JqKSkge1xuICAgICAgICB2YXIgc3ltU3RyaW5nID0gaGFzU2hhbW1lZFN5bWJvbHMgPyAkcmVwbGFjZS5jYWxsKFN0cmluZyhvYmopLCAvXihTeW1ib2xcXCguKlxcKSlfW14pXSokLywgJyQxJykgOiBzeW1Ub1N0cmluZy5jYWxsKG9iaik7XG4gICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAhaGFzU2hhbW1lZFN5bWJvbHMgPyBtYXJrQm94ZWQoc3ltU3RyaW5nKSA6IHN5bVN0cmluZztcbiAgICB9XG4gICAgaWYgKGlzRWxlbWVudChvYmopKSB7XG4gICAgICAgIHZhciBzID0gJzwnICsgJHRvTG93ZXJDYXNlLmNhbGwoU3RyaW5nKG9iai5ub2RlTmFtZSkpO1xuICAgICAgICB2YXIgYXR0cnMgPSBvYmouYXR0cmlidXRlcyB8fCBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcyArPSAnICcgKyBhdHRyc1tpXS5uYW1lICsgJz0nICsgd3JhcFF1b3RlcyhxdW90ZShhdHRyc1tpXS52YWx1ZSksICdkb3VibGUnLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBzICs9ICc+JztcbiAgICAgICAgaWYgKG9iai5jaGlsZE5vZGVzICYmIG9iai5jaGlsZE5vZGVzLmxlbmd0aCkgeyBzICs9ICcuLi4nOyB9XG4gICAgICAgIHMgKz0gJzwvJyArICR0b0xvd2VyQ2FzZS5jYWxsKFN0cmluZyhvYmoubm9kZU5hbWUpKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArICRqb2luLmNhbGwoeHMsICcsICcpICsgJyBdJztcbiAgICB9XG4gICAgaWYgKGlzRXJyb3Iob2JqKSkge1xuICAgICAgICB2YXIgcGFydHMgPSBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCk7XG4gICAgICAgIGlmICghKCdjYXVzZScgaW4gRXJyb3IucHJvdG90eXBlKSAmJiAnY2F1c2UnIGluIG9iaiAmJiAhaXNFbnVtZXJhYmxlLmNhbGwob2JqLCAnY2F1c2UnKSkge1xuICAgICAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgJGpvaW4uY2FsbCgkY29uY2F0LmNhbGwoJ1tjYXVzZV06ICcgKyBpbnNwZWN0KG9iai5jYXVzZSksIHBhcnRzKSwgJywgJykgKyAnIH0nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbJyArIFN0cmluZyhvYmopICsgJ10nOyB9XG4gICAgICAgIHJldHVybiAneyBbJyArIFN0cmluZyhvYmopICsgJ10gJyArICRqb2luLmNhbGwocGFydHMsICcsICcpICsgJyB9JztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIGN1c3RvbUluc3BlY3QpIHtcbiAgICAgICAgaWYgKGluc3BlY3RTeW1ib2wgJiYgdHlwZW9mIG9ialtpbnNwZWN0U3ltYm9sXSA9PT0gJ2Z1bmN0aW9uJyAmJiB1dGlsSW5zcGVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxJbnNwZWN0KG9iaiwgeyBkZXB0aDogbWF4RGVwdGggLSBkZXB0aCB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBpZiAobWFwRm9yRWFjaCkge1xuICAgICAgICAgICAgbWFwRm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICAgICAgICBtYXBQYXJ0cy5wdXNoKGluc3BlY3Qoa2V5LCBvYmosIHRydWUpICsgJyA9PiAnICsgaW5zcGVjdCh2YWx1ZSwgb2JqKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbk9mKCdNYXAnLCBtYXBTaXplLmNhbGwob2JqKSwgbWFwUGFydHMsIGluZGVudCk7XG4gICAgfVxuICAgIGlmIChpc1NldChvYmopKSB7XG4gICAgICAgIHZhciBzZXRQYXJ0cyA9IFtdO1xuICAgICAgICBpZiAoc2V0Rm9yRWFjaCkge1xuICAgICAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2V0UGFydHMucHVzaChpbnNwZWN0KHZhbHVlLCBvYmopKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uT2YoJ1NldCcsIHNldFNpemUuY2FsbChvYmopLCBzZXRQYXJ0cywgaW5kZW50KTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha01hcChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrTWFwJyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtTZXQob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1NldCcpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrUmVmKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtSZWYnKTtcbiAgICB9XG4gICAgaWYgKGlzTnVtYmVyKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KE51bWJlcihvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0JpZ0ludChvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoaXNCb29sZWFuKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChib29sZWFuVmFsdWVPZi5jYWxsKG9iaikpO1xuICAgIH1cbiAgICBpZiAoaXNTdHJpbmcob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoU3RyaW5nKG9iaikpKTtcbiAgICB9XG4gICAgaWYgKCFpc0RhdGUob2JqKSAmJiAhaXNSZWdFeHAob2JqKSkge1xuICAgICAgICB2YXIgeXMgPSBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCk7XG4gICAgICAgIHZhciBpc1BsYWluT2JqZWN0ID0gZ1BPID8gZ1BPKG9iaikgPT09IE9iamVjdC5wcm90b3R5cGUgOiBvYmogaW5zdGFuY2VvZiBPYmplY3QgfHwgb2JqLmNvbnN0cnVjdG9yID09PSBPYmplY3Q7XG4gICAgICAgIHZhciBwcm90b1RhZyA9IG9iaiBpbnN0YW5jZW9mIE9iamVjdCA/ICcnIDogJ251bGwgcHJvdG90eXBlJztcbiAgICAgICAgdmFyIHN0cmluZ1RhZyA9ICFpc1BsYWluT2JqZWN0ICYmIHRvU3RyaW5nVGFnICYmIE9iamVjdChvYmopID09PSBvYmogJiYgdG9TdHJpbmdUYWcgaW4gb2JqID8gJHNsaWNlLmNhbGwodG9TdHIob2JqKSwgOCwgLTEpIDogcHJvdG9UYWcgPyAnT2JqZWN0JyA6ICcnO1xuICAgICAgICB2YXIgY29uc3RydWN0b3JUYWcgPSBpc1BsYWluT2JqZWN0IHx8IHR5cGVvZiBvYmouY29uc3RydWN0b3IgIT09ICdmdW5jdGlvbicgPyAnJyA6IG9iai5jb25zdHJ1Y3Rvci5uYW1lID8gb2JqLmNvbnN0cnVjdG9yLm5hbWUgKyAnICcgOiAnJztcbiAgICAgICAgdmFyIHRhZyA9IGNvbnN0cnVjdG9yVGFnICsgKHN0cmluZ1RhZyB8fCBwcm90b1RhZyA/ICdbJyArICRqb2luLmNhbGwoJGNvbmNhdC5jYWxsKFtdLCBzdHJpbmdUYWcgfHwgW10sIHByb3RvVGFnIHx8IFtdKSwgJzogJykgKyAnXSAnIDogJycpO1xuICAgICAgICBpZiAoeXMubGVuZ3RoID09PSAwKSB7IHJldHVybiB0YWcgKyAne30nOyB9XG4gICAgICAgIGlmIChpbmRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0YWcgKyAneycgKyBpbmRlbnRlZEpvaW4oeXMsIGluZGVudCkgKyAnfSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhZyArICd7ICcgKyAkam9pbi5jYWxsKHlzLCAnLCAnKSArICcgfSc7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcob2JqKTtcbn07XG5cbmZ1bmN0aW9uIHdyYXBRdW90ZXMocywgZGVmYXVsdFN0eWxlLCBvcHRzKSB7XG4gICAgdmFyIHF1b3RlQ2hhciA9IChvcHRzLnF1b3RlU3R5bGUgfHwgZGVmYXVsdFN0eWxlKSA9PT0gJ2RvdWJsZScgPyAnXCInIDogXCInXCI7XG4gICAgcmV0dXJuIHF1b3RlQ2hhciArIHMgKyBxdW90ZUNoYXI7XG59XG5cbmZ1bmN0aW9uIHF1b3RlKHMpIHtcbiAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChTdHJpbmcocyksIC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9ICRtYXRjaC5jYWxsKGZ1bmN0aW9uVG9TdHJpbmcuY2FsbChmKSwgL15mdW5jdGlvblxccyooW1xcdyRdKykvKTtcbiAgICBpZiAobSkgeyByZXR1cm4gbVsxXTsgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBpbmRleE9mKHhzLCB4KSB7XG4gICAgaWYgKHhzLmluZGV4T2YpIHsgcmV0dXJuIHhzLmluZGV4T2YoeCk7IH1cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoeHNbaV0gPT09IHgpIHsgcmV0dXJuIGk7IH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBpc01hcCh4KSB7XG4gICAgaWYgKCFtYXBTaXplIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIG1hcFNpemUuY2FsbCh4KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNldFNpemUuY2FsbCh4KTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBNYXA7IC8vIGNvcmUtanMgd29ya2Fyb3VuZCwgcHJlLXYyLjUuMFxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1dlYWtNYXAoeCkge1xuICAgIGlmICghd2Vha01hcEhhcyB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrTWFwSGFzLmNhbGwoeCwgd2Vha01hcEhhcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3ZWFrU2V0SGFzLmNhbGwoeCwgd2Vha1NldEhhcyk7XG4gICAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4IGluc3RhbmNlb2YgV2Vha01hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1JlZih4KSB7XG4gICAgaWYgKCF3ZWFrUmVmRGVyZWYgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgd2Vha1JlZkRlcmVmLmNhbGwoeCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1NldCh4KSB7XG4gICAgaWYgKCFzZXRTaXplIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHNldFNpemUuY2FsbCh4KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG1hcFNpemUuY2FsbCh4KTtcbiAgICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBTZXQ7IC8vIGNvcmUtanMgd29ya2Fyb3VuZCwgcHJlLXYyLjUuMFxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1dlYWtTZXQoeCkge1xuICAgIGlmICghd2Vha1NldEhhcyB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrU2V0SGFzLmNhbGwoeCwgd2Vha1NldEhhcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3ZWFrTWFwSGFzLmNhbGwoeCwgd2Vha01hcEhhcyk7XG4gICAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4IGluc3RhbmNlb2YgV2Vha1NldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudCh4KSB7XG4gICAgaWYgKCF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAodHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB4IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgeC5ub2RlTmFtZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHguZ2V0QXR0cmlidXRlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpbnNwZWN0U3RyaW5nKHN0ciwgb3B0cykge1xuICAgIGlmIChzdHIubGVuZ3RoID4gb3B0cy5tYXhTdHJpbmdMZW5ndGgpIHtcbiAgICAgICAgdmFyIHJlbWFpbmluZyA9IHN0ci5sZW5ndGggLSBvcHRzLm1heFN0cmluZ0xlbmd0aDtcbiAgICAgICAgdmFyIHRyYWlsZXIgPSAnLi4uICcgKyByZW1haW5pbmcgKyAnIG1vcmUgY2hhcmFjdGVyJyArIChyZW1haW5pbmcgPiAxID8gJ3MnIDogJycpO1xuICAgICAgICByZXR1cm4gaW5zcGVjdFN0cmluZygkc2xpY2UuY2FsbChzdHIsIDAsIG9wdHMubWF4U3RyaW5nTGVuZ3RoKSwgb3B0cykgKyB0cmFpbGVyO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICAgIHZhciBzID0gJHJlcGxhY2UuY2FsbCgkcmVwbGFjZS5jYWxsKHN0ciwgLyhbJ1xcXFxdKS9nLCAnXFxcXCQxJyksIC9bXFx4MDAtXFx4MWZdL2csIGxvd2J5dGUpO1xuICAgIHJldHVybiB3cmFwUXVvdGVzKHMsICdzaW5nbGUnLCBvcHRzKTtcbn1cblxuZnVuY3Rpb24gbG93Ynl0ZShjKSB7XG4gICAgdmFyIG4gPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHggPSB7XG4gICAgICAgIDg6ICdiJyxcbiAgICAgICAgOTogJ3QnLFxuICAgICAgICAxMDogJ24nLFxuICAgICAgICAxMjogJ2YnLFxuICAgICAgICAxMzogJ3InXG4gICAgfVtuXTtcbiAgICBpZiAoeCkgeyByZXR1cm4gJ1xcXFwnICsgeDsgfVxuICAgIHJldHVybiAnXFxcXHgnICsgKG4gPCAweDEwID8gJzAnIDogJycpICsgJHRvVXBwZXJDYXNlLmNhbGwobi50b1N0cmluZygxNikpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiAkam9pbi5jYWxsKGVudHJpZXMsICcsICcpO1xuICAgIHJldHVybiB0eXBlICsgJyAoJyArIHNpemUgKyAnKSB7JyArIGpvaW5lZEVudHJpZXMgKyAnfSc7XG59XG5cbmZ1bmN0aW9uIHNpbmdsZUxpbmVWYWx1ZXMoeHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpbmRleE9mKHhzW2ldLCAnXFxuJykgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBnZXRJbmRlbnQob3B0cywgZGVwdGgpIHtcbiAgICB2YXIgYmFzZUluZGVudDtcbiAgICBpZiAob3B0cy5pbmRlbnQgPT09ICdcXHQnKSB7XG4gICAgICAgIGJhc2VJbmRlbnQgPSAnXFx0JztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRzLmluZGVudCA9PT0gJ251bWJlcicgJiYgb3B0cy5pbmRlbnQgPiAwKSB7XG4gICAgICAgIGJhc2VJbmRlbnQgPSAkam9pbi5jYWxsKEFycmF5KG9wdHMuaW5kZW50ICsgMSksICcgJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGJhc2U6IGJhc2VJbmRlbnQsXG4gICAgICAgIHByZXY6ICRqb2luLmNhbGwoQXJyYXkoZGVwdGggKyAxKSwgYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyAkam9pbi5jYWxsKHhzLCAnLCcgKyBsaW5lSm9pbmVyKSArICdcXG4nICsgaW5kZW50LnByZXY7XG59XG5cbmZ1bmN0aW9uIGFyck9iaktleXMob2JqLCBpbnNwZWN0KSB7XG4gICAgdmFyIGlzQXJyID0gaXNBcnJheShvYmopO1xuICAgIHZhciB4cyA9IFtdO1xuICAgIGlmIChpc0Fycikge1xuICAgICAgICB4cy5sZW5ndGggPSBvYmoubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgeHNbaV0gPSBoYXMob2JqLCBpKSA/IGluc3BlY3Qob2JqW2ldLCBvYmopIDogJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIHN5bXMgPSB0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJyA/IGdPUFMob2JqKSA6IFtdO1xuICAgIHZhciBzeW1NYXA7XG4gICAgaWYgKGhhc1NoYW1tZWRTeW1ib2xzKSB7XG4gICAgICAgIHN5bU1hcCA9IHt9O1xuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHN5bXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIHN5bU1hcFsnJCcgKyBzeW1zW2tdXSA9IHN5bXNba107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgaWYgKCFoYXMob2JqLCBrZXkpKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChpc0FyciAmJiBTdHJpbmcoTnVtYmVyKGtleSkpID09PSBrZXkgJiYga2V5IDwgb2JqLmxlbmd0aCkgeyBjb250aW51ZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMgJiYgc3ltTWFwWyckJyArIGtleV0gaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdG8gcHJldmVudCBzaGFtbWVkIFN5bWJvbHMsIHdoaWNoIGFyZSBzdG9yZWQgYXMgc3RyaW5ncywgZnJvbSBiZWluZyBpbmNsdWRlZCBpbiB0aGUgc3RyaW5nIGtleSBzZWN0aW9uXG4gICAgICAgICAgICBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmICgkdGVzdC5jYWxsKC9bXlxcdyRdLywga2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJFdlYWtNYXAgPSBHZXRJbnRyaW5zaWMoJyVXZWFrTWFwJScsIHRydWUpO1xudmFyICRNYXAgPSBHZXRJbnRyaW5zaWMoJyVNYXAlJywgdHJ1ZSk7XG5cbnZhciAkd2Vha01hcEdldCA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuZ2V0JywgdHJ1ZSk7XG52YXIgJHdlYWtNYXBTZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwSGFzID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5oYXMnLCB0cnVlKTtcbnZhciAkbWFwR2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICRtYXBTZXQgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuc2V0JywgdHJ1ZSk7XG52YXIgJG1hcEhhcyA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5oYXMnLCB0cnVlKTtcblxuLypcbiAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHRoZSBsaXN0IHJldHVybmluZyB0aGUgbm9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZVxuICogZ2l2ZW4ga2V5LlxuICpcbiAqIFRoYXQgbm9kZSBpcyBhbHNvIG1vdmVkIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBzbyB0aGF0IGlmIGl0J3MgYWNjZXNzZWRcbiAqIGFnYWluIHdlIGRvbid0IG5lZWQgdG8gdHJhdmVyc2UgdGhlIHdob2xlIGxpc3QuIEJ5IGRvaW5nIHNvLCBhbGwgdGhlIHJlY2VudGx5XG4gKiB1c2VkIG5vZGVzIGNhbiBiZSBhY2Nlc3NlZCByZWxhdGl2ZWx5IHF1aWNrbHkuXG4gKi9cbnZhciBsaXN0R2V0Tm9kZSA9IGZ1bmN0aW9uIChsaXN0LCBrZXkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHRmb3IgKHZhciBwcmV2ID0gbGlzdCwgY3VycjsgKGN1cnIgPSBwcmV2Lm5leHQpICE9PSBudWxsOyBwcmV2ID0gY3Vycikge1xuXHRcdGlmIChjdXJyLmtleSA9PT0ga2V5KSB7XG5cdFx0XHRwcmV2Lm5leHQgPSBjdXJyLm5leHQ7XG5cdFx0XHRjdXJyLm5leHQgPSBsaXN0Lm5leHQ7XG5cdFx0XHRsaXN0Lm5leHQgPSBjdXJyOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0XHRyZXR1cm4gY3Vycjtcblx0XHR9XG5cdH1cbn07XG5cbnZhciBsaXN0R2V0ID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSkge1xuXHR2YXIgbm9kZSA9IGxpc3RHZXROb2RlKG9iamVjdHMsIGtleSk7XG5cdHJldHVybiBub2RlICYmIG5vZGUudmFsdWU7XG59O1xudmFyIGxpc3RTZXQgPSBmdW5jdGlvbiAob2JqZWN0cywga2V5LCB2YWx1ZSkge1xuXHR2YXIgbm9kZSA9IGxpc3RHZXROb2RlKG9iamVjdHMsIGtleSk7XG5cdGlmIChub2RlKSB7XG5cdFx0bm9kZS52YWx1ZSA9IHZhbHVlO1xuXHR9IGVsc2Uge1xuXHRcdC8vIFByZXBlbmQgdGhlIG5ldyBub2RlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3Rcblx0XHRvYmplY3RzLm5leHQgPSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRcdGtleToga2V5LFxuXHRcdFx0bmV4dDogb2JqZWN0cy5uZXh0LFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxufTtcbnZhciBsaXN0SGFzID0gZnVuY3Rpb24gKG9iamVjdHMsIGtleSkge1xuXHRyZXR1cm4gISFsaXN0R2V0Tm9kZShvYmplY3RzLCBrZXkpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRTaWRlQ2hhbm5lbCgpIHtcblx0dmFyICR3bTtcblx0dmFyICRtO1xuXHR2YXIgJG87XG5cdHZhciBjaGFubmVsID0ge1xuXHRcdGFzc2VydDogZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0aWYgKCFjaGFubmVsLmhhcyhrZXkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdTaWRlIGNoYW5uZWwgZG9lcyBub3QgY29udGFpbiAnICsgaW5zcGVjdChrZXkpKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGdldDogZnVuY3Rpb24gKGtleSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG5cdFx0XHRpZiAoJFdlYWtNYXAgJiYga2V5ICYmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyB8fCB0eXBlb2Yga2V5ID09PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHRpZiAoJHdtKSB7XG5cdFx0XHRcdFx0cmV0dXJuICR3ZWFrTWFwR2V0KCR3bSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICgkTWFwKSB7XG5cdFx0XHRcdGlmICgkbSkge1xuXHRcdFx0XHRcdHJldHVybiAkbWFwR2V0KCRtLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoJG8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1sb25lbHktaWZcblx0XHRcdFx0XHRyZXR1cm4gbGlzdEdldCgkbywga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0aGFzOiBmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRpZiAoJFdlYWtNYXAgJiYga2V5ICYmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyB8fCB0eXBlb2Yga2V5ID09PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHRpZiAoJHdtKSB7XG5cdFx0XHRcdFx0cmV0dXJuICR3ZWFrTWFwSGFzKCR3bSwga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICgkTWFwKSB7XG5cdFx0XHRcdGlmICgkbSkge1xuXHRcdFx0XHRcdHJldHVybiAkbWFwSGFzKCRtLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoJG8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1sb25lbHktaWZcblx0XHRcdFx0XHRyZXR1cm4gbGlzdEhhcygkbywga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0aWYgKCRXZWFrTWFwICYmIGtleSAmJiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGtleSA9PT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0aWYgKCEkd20pIHtcblx0XHRcdFx0XHQkd20gPSBuZXcgJFdlYWtNYXAoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQkd2Vha01hcFNldCgkd20sIGtleSwgdmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmICgkTWFwKSB7XG5cdFx0XHRcdGlmICghJG0pIHtcblx0XHRcdFx0XHQkbSA9IG5ldyAkTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0JG1hcFNldCgkbSwga2V5LCB2YWx1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoISRvKSB7XG5cdFx0XHRcdFx0Lypcblx0XHRcdFx0XHQgKiBJbml0aWFsaXplIHRoZSBsaW5rZWQgbGlzdCBhcyBhbiBlbXB0eSBub2RlLCBzbyB0aGF0IHdlIGRvbid0IGhhdmVcblx0XHRcdFx0XHQgKiB0byBzcGVjaWFsLWNhc2UgaGFuZGxpbmcgb2YgdGhlIGZpcnN0IG5vZGU6IHdlIGNhbiBhbHdheXMgcmVmZXIgdG9cblx0XHRcdFx0XHQgKiBpdCBhcyAocHJldmlvdXMgbm9kZSkubmV4dCwgaW5zdGVhZCBvZiBzb21ldGhpbmcgbGlrZSAobGlzdCkuaGVhZFxuXHRcdFx0XHRcdCAqL1xuXHRcdFx0XHRcdCRvID0geyBrZXk6IHt9LCBuZXh0OiBudWxsIH07XG5cdFx0XHRcdH1cblx0XHRcdFx0bGlzdFNldCgkbywga2V5LCB2YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gY2hhbm5lbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xudmFyIHBlcmNlbnRUd2VudGllcyA9IC8lMjAvZztcblxudmFyIEZvcm1hdCA9IHtcbiAgICBSRkMxNzM4OiAnUkZDMTczOCcsXG4gICAgUkZDMzk4NjogJ1JGQzM5ODYnXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAnZGVmYXVsdCc6IEZvcm1hdC5SRkMzOTg2LFxuICAgIGZvcm1hdHRlcnM6IHtcbiAgICAgICAgUkZDMTczODogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVwbGFjZS5jYWxsKHZhbHVlLCBwZXJjZW50VHdlbnRpZXMsICcrJyk7XG4gICAgICAgIH0sXG4gICAgICAgIFJGQzM5ODY6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFJGQzE3Mzg6IEZvcm1hdC5SRkMxNzM4LFxuICAgIFJGQzM5ODY6IEZvcm1hdC5SRkMzOTg2XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxudmFyIGhleFRhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gICAgICAgIGFycmF5LnB1c2goJyUnICsgKChpIDwgMTYgPyAnMCcgOiAnJykgKyBpLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufSgpKTtcblxudmFyIGNvbXBhY3RRdWV1ZSA9IGZ1bmN0aW9uIGNvbXBhY3RRdWV1ZShxdWV1ZSkge1xuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHZhciBpdGVtID0gcXVldWUucG9wKCk7XG4gICAgICAgIHZhciBvYmogPSBpdGVtLm9ialtpdGVtLnByb3BdO1xuXG4gICAgICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIHZhciBjb21wYWN0ZWQgPSBbXTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvYmoubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9ialtqXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGFjdGVkLnB1c2gob2JqW2pdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGl0ZW0ub2JqW2l0ZW0ucHJvcF0gPSBjb21wYWN0ZWQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG52YXIgYXJyYXlUb09iamVjdCA9IGZ1bmN0aW9uIGFycmF5VG9PYmplY3Qoc291cmNlLCBvcHRpb25zKSB7XG4gICAgdmFyIG9iaiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzb3VyY2VbaV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBvYmpbaV0gPSBzb3VyY2VbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufTtcblxudmFyIG1lcmdlID0gZnVuY3Rpb24gbWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAvKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IDAgKi9cbiAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgICAgICB0YXJnZXQucHVzaChzb3VyY2UpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKChvcHRpb25zICYmIChvcHRpb25zLnBsYWluT2JqZWN0cyB8fCBvcHRpb25zLmFsbG93UHJvdG90eXBlcykpIHx8ICFoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W3NvdXJjZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFt0YXJnZXQsIHNvdXJjZV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0IHx8IHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBbdGFyZ2V0XS5jb25jYXQoc291cmNlKTtcbiAgICB9XG5cbiAgICB2YXIgbWVyZ2VUYXJnZXQgPSB0YXJnZXQ7XG4gICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiAhaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgIG1lcmdlVGFyZ2V0ID0gYXJyYXlUb09iamVjdCh0YXJnZXQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChpc0FycmF5KHRhcmdldCkgJiYgaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgIHNvdXJjZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpKSB7XG4gICAgICAgICAgICBpZiAoaGFzLmNhbGwodGFyZ2V0LCBpKSkge1xuICAgICAgICAgICAgICAgIHZhciB0YXJnZXRJdGVtID0gdGFyZ2V0W2ldO1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRJdGVtICYmIHR5cGVvZiB0YXJnZXRJdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRbaV0gPSBtZXJnZSh0YXJnZXRJdGVtLCBpdGVtLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldFtpXSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc291cmNlW2tleV07XG5cbiAgICAgICAgaWYgKGhhcy5jYWxsKGFjYywga2V5KSkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSBtZXJnZShhY2Nba2V5XSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWNjW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIG1lcmdlVGFyZ2V0KTtcbn07XG5cbnZhciBhc3NpZ24gPSBmdW5jdGlvbiBhc3NpZ25TaW5nbGVTb3VyY2UodGFyZ2V0LCBzb3VyY2UpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc291cmNlKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XG4gICAgICAgIGFjY1trZXldID0gc291cmNlW2tleV07XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgdGFyZ2V0KTtcbn07XG5cbnZhciBkZWNvZGUgPSBmdW5jdGlvbiAoc3RyLCBkZWNvZGVyLCBjaGFyc2V0KSB7XG4gICAgdmFyIHN0cldpdGhvdXRQbHVzID0gc3RyLnJlcGxhY2UoL1xcKy9nLCAnICcpO1xuICAgIGlmIChjaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgLy8gdW5lc2NhcGUgbmV2ZXIgdGhyb3dzLCBubyB0cnkuLi5jYXRjaCBuZWVkZWQ6XG4gICAgICAgIHJldHVybiBzdHJXaXRob3V0UGx1cy5yZXBsYWNlKC8lWzAtOWEtZl17Mn0vZ2ksIHVuZXNjYXBlKTtcbiAgICB9XG4gICAgLy8gdXRmLThcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cldpdGhvdXRQbHVzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBzdHJXaXRob3V0UGx1cztcbiAgICB9XG59O1xuXG52YXIgZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0ciwgZGVmYXVsdEVuY29kZXIsIGNoYXJzZXQsIGtpbmQsIGZvcm1hdCkge1xuICAgIC8vIFRoaXMgY29kZSB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEJyaWFuIFdoaXRlIChtc2NkZXgpIGZvciB0aGUgaW8uanMgY29yZSBxdWVyeXN0cmluZyBsaWJyYXJ5LlxuICAgIC8vIEl0IGhhcyBiZWVuIGFkYXB0ZWQgaGVyZSBmb3Igc3RyaWN0ZXIgYWRoZXJlbmNlIHRvIFJGQyAzOTg2XG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nID0gc3RyO1xuICAgIGlmICh0eXBlb2Ygc3RyID09PSAnc3ltYm9sJykge1xuICAgICAgICBzdHJpbmcgPSBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3RyKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0cmluZyA9IFN0cmluZyhzdHIpO1xuICAgIH1cblxuICAgIGlmIChjaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgcmV0dXJuIGVzY2FwZShzdHJpbmcpLnJlcGxhY2UoLyV1WzAtOWEtZl17NH0vZ2ksIGZ1bmN0aW9uICgkMCkge1xuICAgICAgICAgICAgcmV0dXJuICclMjYlMjMnICsgcGFyc2VJbnQoJDAuc2xpY2UoMiksIDE2KSArICclM0InO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgb3V0ID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjID09PSAweDJEIC8vIC1cbiAgICAgICAgICAgIHx8IGMgPT09IDB4MkUgLy8gLlxuICAgICAgICAgICAgfHwgYyA9PT0gMHg1RiAvLyBfXG4gICAgICAgICAgICB8fCBjID09PSAweDdFIC8vIH5cbiAgICAgICAgICAgIHx8IChjID49IDB4MzAgJiYgYyA8PSAweDM5KSAvLyAwLTlcbiAgICAgICAgICAgIHx8IChjID49IDB4NDEgJiYgYyA8PSAweDVBKSAvLyBhLXpcbiAgICAgICAgICAgIHx8IChjID49IDB4NjEgJiYgYyA8PSAweDdBKSAvLyBBLVpcbiAgICAgICAgICAgIHx8IChmb3JtYXQgPT09IGZvcm1hdHMuUkZDMTczOCAmJiAoYyA9PT0gMHgyOCB8fCBjID09PSAweDI5KSkgLy8gKCApXG4gICAgICAgICkge1xuICAgICAgICAgICAgb3V0ICs9IHN0cmluZy5jaGFyQXQoaSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgICAgICAgb3V0ID0gb3V0ICsgaGV4VGFibGVbY107XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgICAgICAgIG91dCA9IG91dCArIChoZXhUYWJsZVsweEMwIHwgKGMgPj4gNildICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgPCAweEQ4MDAgfHwgYyA+PSAweEUwMDApIHtcbiAgICAgICAgICAgIG91dCA9IG91dCArIChoZXhUYWJsZVsweEUwIHwgKGMgPj4gMTIpXSArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gNikgJiAweDNGKV0gKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV0pO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpICs9IDE7XG4gICAgICAgIGMgPSAweDEwMDAwICsgKCgoYyAmIDB4M0ZGKSA8PCAxMCkgfCAoc3RyaW5nLmNoYXJDb2RlQXQoaSkgJiAweDNGRikpO1xuICAgICAgICAvKiBlc2xpbnQgb3BlcmF0b3ItbGluZWJyZWFrOiBbMiwgXCJiZWZvcmVcIl0gKi9cbiAgICAgICAgb3V0ICs9IGhleFRhYmxlWzB4RjAgfCAoYyA+PiAxOCldXG4gICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gMTIpICYgMHgzRildXG4gICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gNikgJiAweDNGKV1cbiAgICAgICAgICAgICsgaGV4VGFibGVbMHg4MCB8IChjICYgMHgzRildO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG52YXIgY29tcGFjdCA9IGZ1bmN0aW9uIGNvbXBhY3QodmFsdWUpIHtcbiAgICB2YXIgcXVldWUgPSBbeyBvYmo6IHsgbzogdmFsdWUgfSwgcHJvcDogJ28nIH1dO1xuICAgIHZhciByZWZzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBpdGVtID0gcXVldWVbaV07XG4gICAgICAgIHZhciBvYmogPSBpdGVtLm9ialtpdGVtLnByb3BdO1xuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tqXTtcbiAgICAgICAgICAgIHZhciB2YWwgPSBvYmpba2V5XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwgJiYgcmVmcy5pbmRleE9mKHZhbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcXVldWUucHVzaCh7IG9iajogb2JqLCBwcm9wOiBrZXkgfSk7XG4gICAgICAgICAgICAgICAgcmVmcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wYWN0UXVldWUocXVldWUpO1xuXG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxudmFyIGlzUmVnRXhwID0gZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBSZWdFeHBdJztcbn07XG5cbnZhciBpc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyKG9iaikge1xuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gISEob2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKSk7XG59O1xuXG52YXIgY29tYmluZSA9IGZ1bmN0aW9uIGNvbWJpbmUoYSwgYikge1xuICAgIHJldHVybiBbXS5jb25jYXQoYSwgYik7XG59O1xuXG52YXIgbWF5YmVNYXAgPSBmdW5jdGlvbiBtYXliZU1hcCh2YWwsIGZuKSB7XG4gICAgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YXIgbWFwcGVkID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBtYXBwZWQucHVzaChmbih2YWxbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFwcGVkO1xuICAgIH1cbiAgICByZXR1cm4gZm4odmFsKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFycmF5VG9PYmplY3Q6IGFycmF5VG9PYmplY3QsXG4gICAgYXNzaWduOiBhc3NpZ24sXG4gICAgY29tYmluZTogY29tYmluZSxcbiAgICBjb21wYWN0OiBjb21wYWN0LFxuICAgIGRlY29kZTogZGVjb2RlLFxuICAgIGVuY29kZTogZW5jb2RlLFxuICAgIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgICBpc1JlZ0V4cDogaXNSZWdFeHAsXG4gICAgbWF5YmVNYXA6IG1heWJlTWFwLFxuICAgIG1lcmdlOiBtZXJnZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGdldFNpZGVDaGFubmVsID0gcmVxdWlyZSgnc2lkZS1jaGFubmVsJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBhcnJheVByZWZpeEdlbmVyYXRvcnMgPSB7XG4gICAgYnJhY2tldHM6IGZ1bmN0aW9uIGJyYWNrZXRzKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1tdJztcbiAgICB9LFxuICAgIGNvbW1hOiAnY29tbWEnLFxuICAgIGluZGljZXM6IGZ1bmN0aW9uIGluZGljZXMocHJlZml4LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArICdbJyArIGtleSArICddJztcbiAgICB9LFxuICAgIHJlcGVhdDogZnVuY3Rpb24gcmVwZWF0KHByZWZpeCkge1xuICAgICAgICByZXR1cm4gcHJlZml4O1xuICAgIH1cbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbnZhciBwdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG52YXIgcHVzaFRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyLCB2YWx1ZU9yQXJyYXkpIHtcbiAgICBwdXNoLmFwcGx5KGFyciwgaXNBcnJheSh2YWx1ZU9yQXJyYXkpID8gdmFsdWVPckFycmF5IDogW3ZhbHVlT3JBcnJheV0pO1xufTtcblxudmFyIHRvSVNPID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBkZWZhdWx0Rm9ybWF0ID0gZm9ybWF0c1snZGVmYXVsdCddO1xudmFyIGRlZmF1bHRzID0ge1xuICAgIGFkZFF1ZXJ5UHJlZml4OiBmYWxzZSxcbiAgICBhbGxvd0RvdHM6IGZhbHNlLFxuICAgIGNoYXJzZXQ6ICd1dGYtOCcsXG4gICAgY2hhcnNldFNlbnRpbmVsOiBmYWxzZSxcbiAgICBkZWxpbWl0ZXI6ICcmJyxcbiAgICBlbmNvZGU6IHRydWUsXG4gICAgZW5jb2RlcjogdXRpbHMuZW5jb2RlLFxuICAgIGVuY29kZVZhbHVlc09ubHk6IGZhbHNlLFxuICAgIGZvcm1hdDogZGVmYXVsdEZvcm1hdCxcbiAgICBmb3JtYXR0ZXI6IGZvcm1hdHMuZm9ybWF0dGVyc1tkZWZhdWx0Rm9ybWF0XSxcbiAgICAvLyBkZXByZWNhdGVkXG4gICAgaW5kaWNlczogZmFsc2UsXG4gICAgc2VyaWFsaXplRGF0ZTogZnVuY3Rpb24gc2VyaWFsaXplRGF0ZShkYXRlKSB7XG4gICAgICAgIHJldHVybiB0b0lTTy5jYWxsKGRhdGUpO1xuICAgIH0sXG4gICAgc2tpcE51bGxzOiBmYWxzZSxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IGZhbHNlXG59O1xuXG52YXIgaXNOb25OdWxsaXNoUHJpbWl0aXZlID0gZnVuY3Rpb24gaXNOb25OdWxsaXNoUHJpbWl0aXZlKHYpIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgIHx8IHR5cGVvZiB2ID09PSAnc3ltYm9sJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ2JpZ2ludCc7XG59O1xuXG52YXIgc2VudGluZWwgPSB7fTtcblxudmFyIHN0cmluZ2lmeSA9IGZ1bmN0aW9uIHN0cmluZ2lmeShcbiAgICBvYmplY3QsXG4gICAgcHJlZml4LFxuICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgY29tbWFSb3VuZFRyaXAsXG4gICAgc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgIHNraXBOdWxscyxcbiAgICBlbmNvZGVyLFxuICAgIGZpbHRlcixcbiAgICBzb3J0LFxuICAgIGFsbG93RG90cyxcbiAgICBzZXJpYWxpemVEYXRlLFxuICAgIGZvcm1hdCxcbiAgICBmb3JtYXR0ZXIsXG4gICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICBjaGFyc2V0LFxuICAgIHNpZGVDaGFubmVsXG4pIHtcbiAgICB2YXIgb2JqID0gb2JqZWN0O1xuXG4gICAgdmFyIHRtcFNjID0gc2lkZUNoYW5uZWw7XG4gICAgdmFyIHN0ZXAgPSAwO1xuICAgIHZhciBmaW5kRmxhZyA9IGZhbHNlO1xuICAgIHdoaWxlICgodG1wU2MgPSB0bXBTYy5nZXQoc2VudGluZWwpKSAhPT0gdm9pZCB1bmRlZmluZWQgJiYgIWZpbmRGbGFnKSB7XG4gICAgICAgIC8vIFdoZXJlIG9iamVjdCBsYXN0IGFwcGVhcmVkIGluIHRoZSByZWYgdHJlZVxuICAgICAgICB2YXIgcG9zID0gdG1wU2MuZ2V0KG9iamVjdCk7XG4gICAgICAgIHN0ZXAgKz0gMTtcbiAgICAgICAgaWYgKHR5cGVvZiBwb3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpZiAocG9zID09PSBzdGVwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0N5Y2xpYyBvYmplY3QgdmFsdWUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmluZEZsYWcgPSB0cnVlOyAvLyBCcmVhayB3aGlsZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdG1wU2MuZ2V0KHNlbnRpbmVsKSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHN0ZXAgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2JqID0gZmlsdGVyKHByZWZpeCwgb2JqKTtcbiAgICB9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgb2JqID0gc2VyaWFsaXplRGF0ZShvYmopO1xuICAgIH0gZWxzZSBpZiAoZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBpc0FycmF5KG9iaikpIHtcbiAgICAgICAgb2JqID0gdXRpbHMubWF5YmVNYXAob2JqLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHN0cmljdE51bGxIYW5kbGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGVuY29kZXIgJiYgIWVuY29kZVZhbHVlc09ubHkgPyBlbmNvZGVyKHByZWZpeCwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ2tleScsIGZvcm1hdCkgOiBwcmVmaXg7XG4gICAgICAgIH1cblxuICAgICAgICBvYmogPSAnJztcbiAgICB9XG5cbiAgICBpZiAoaXNOb25OdWxsaXNoUHJpbWl0aXZlKG9iaikgfHwgdXRpbHMuaXNCdWZmZXIob2JqKSkge1xuICAgICAgICBpZiAoZW5jb2Rlcikge1xuICAgICAgICAgICAgdmFyIGtleVZhbHVlID0gZW5jb2RlVmFsdWVzT25seSA/IHByZWZpeCA6IGVuY29kZXIocHJlZml4LCBkZWZhdWx0cy5lbmNvZGVyLCBjaGFyc2V0LCAna2V5JywgZm9ybWF0KTtcbiAgICAgICAgICAgIHJldHVybiBbZm9ybWF0dGVyKGtleVZhbHVlKSArICc9JyArIGZvcm1hdHRlcihlbmNvZGVyKG9iaiwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ3ZhbHVlJywgZm9ybWF0KSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbZm9ybWF0dGVyKHByZWZpeCkgKyAnPScgKyBmb3JtYXR0ZXIoU3RyaW5nKG9iaikpXTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWVzID0gW107XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICB2YXIgb2JqS2V5cztcbiAgICBpZiAoZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBpc0FycmF5KG9iaikpIHtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBqb2luIGVsZW1lbnRzIGluXG4gICAgICAgIGlmIChlbmNvZGVWYWx1ZXNPbmx5ICYmIGVuY29kZXIpIHtcbiAgICAgICAgICAgIG9iaiA9IHV0aWxzLm1heWJlTWFwKG9iaiwgZW5jb2Rlcik7XG4gICAgICAgIH1cbiAgICAgICAgb2JqS2V5cyA9IFt7IHZhbHVlOiBvYmoubGVuZ3RoID4gMCA/IG9iai5qb2luKCcsJykgfHwgbnVsbCA6IHZvaWQgdW5kZWZpbmVkIH1dO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShmaWx0ZXIpKSB7XG4gICAgICAgIG9iaktleXMgPSBmaWx0ZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICBvYmpLZXlzID0gc29ydCA/IGtleXMuc29ydChzb3J0KSA6IGtleXM7XG4gICAgfVxuXG4gICAgdmFyIGFkanVzdGVkUHJlZml4ID0gY29tbWFSb3VuZFRyaXAgJiYgaXNBcnJheShvYmopICYmIG9iai5sZW5ndGggPT09IDEgPyBwcmVmaXggKyAnW10nIDogcHJlZml4O1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBvYmpLZXlzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIHZhciBrZXkgPSBvYmpLZXlzW2pdO1xuICAgICAgICB2YXIgdmFsdWUgPSB0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyAmJiB0eXBlb2Yga2V5LnZhbHVlICE9PSAndW5kZWZpbmVkJyA/IGtleS52YWx1ZSA6IG9ialtrZXldO1xuXG4gICAgICAgIGlmIChza2lwTnVsbHMgJiYgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGtleVByZWZpeCA9IGlzQXJyYXkob2JqKVxuICAgICAgICAgICAgPyB0eXBlb2YgZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2Z1bmN0aW9uJyA/IGdlbmVyYXRlQXJyYXlQcmVmaXgoYWRqdXN0ZWRQcmVmaXgsIGtleSkgOiBhZGp1c3RlZFByZWZpeFxuICAgICAgICAgICAgOiBhZGp1c3RlZFByZWZpeCArIChhbGxvd0RvdHMgPyAnLicgKyBrZXkgOiAnWycgKyBrZXkgKyAnXScpO1xuXG4gICAgICAgIHNpZGVDaGFubmVsLnNldChvYmplY3QsIHN0ZXApO1xuICAgICAgICB2YXIgdmFsdWVTaWRlQ2hhbm5lbCA9IGdldFNpZGVDaGFubmVsKCk7XG4gICAgICAgIHZhbHVlU2lkZUNoYW5uZWwuc2V0KHNlbnRpbmVsLCBzaWRlQ2hhbm5lbCk7XG4gICAgICAgIHB1c2hUb0FycmF5KHZhbHVlcywgc3RyaW5naWZ5KFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBrZXlQcmVmaXgsXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgY29tbWFSb3VuZFRyaXAsXG4gICAgICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmcsXG4gICAgICAgICAgICBza2lwTnVsbHMsXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIGVuY29kZVZhbHVlc09ubHkgJiYgaXNBcnJheShvYmopID8gbnVsbCA6IGVuY29kZXIsXG4gICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICBzb3J0LFxuICAgICAgICAgICAgYWxsb3dEb3RzLFxuICAgICAgICAgICAgc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICAgIGZvcm1hdHRlcixcbiAgICAgICAgICAgIGVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICBjaGFyc2V0LFxuICAgICAgICAgICAgdmFsdWVTaWRlQ2hhbm5lbFxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzO1xufTtcblxudmFyIG5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMgPSBmdW5jdGlvbiBub3JtYWxpemVTdHJpbmdpZnlPcHRpb25zKG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmVuY29kZXIgIT09IG51bGwgJiYgdHlwZW9mIG9wdHMuZW5jb2RlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdHMuZW5jb2RlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFbmNvZGVyIGhhcyB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIHZhciBjaGFyc2V0ID0gb3B0cy5jaGFyc2V0IHx8IGRlZmF1bHRzLmNoYXJzZXQ7XG4gICAgaWYgKHR5cGVvZiBvcHRzLmNoYXJzZXQgIT09ICd1bmRlZmluZWQnICYmIG9wdHMuY2hhcnNldCAhPT0gJ3V0Zi04JyAmJiBvcHRzLmNoYXJzZXQgIT09ICdpc28tODg1OS0xJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgY2hhcnNldCBvcHRpb24gbXVzdCBiZSBlaXRoZXIgdXRmLTgsIGlzby04ODU5LTEsIG9yIHVuZGVmaW5lZCcpO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXQgPSBmb3JtYXRzWydkZWZhdWx0J107XG4gICAgaWYgKHR5cGVvZiBvcHRzLmZvcm1hdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKCFoYXMuY2FsbChmb3JtYXRzLmZvcm1hdHRlcnMsIG9wdHMuZm9ybWF0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBmb3JtYXQgb3B0aW9uIHByb3ZpZGVkLicpO1xuICAgICAgICB9XG4gICAgICAgIGZvcm1hdCA9IG9wdHMuZm9ybWF0O1xuICAgIH1cbiAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0cy5mb3JtYXR0ZXJzW2Zvcm1hdF07XG5cbiAgICB2YXIgZmlsdGVyID0gZGVmYXVsdHMuZmlsdGVyO1xuICAgIGlmICh0eXBlb2Ygb3B0cy5maWx0ZXIgPT09ICdmdW5jdGlvbicgfHwgaXNBcnJheShvcHRzLmZpbHRlcikpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0cy5maWx0ZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWRkUXVlcnlQcmVmaXg6IHR5cGVvZiBvcHRzLmFkZFF1ZXJ5UHJlZml4ID09PSAnYm9vbGVhbicgPyBvcHRzLmFkZFF1ZXJ5UHJlZml4IDogZGVmYXVsdHMuYWRkUXVlcnlQcmVmaXgsXG4gICAgICAgIGFsbG93RG90czogdHlwZW9mIG9wdHMuYWxsb3dEb3RzID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmFsbG93RG90cyA6ICEhb3B0cy5hbGxvd0RvdHMsXG4gICAgICAgIGNoYXJzZXQ6IGNoYXJzZXQsXG4gICAgICAgIGNoYXJzZXRTZW50aW5lbDogdHlwZW9mIG9wdHMuY2hhcnNldFNlbnRpbmVsID09PSAnYm9vbGVhbicgPyBvcHRzLmNoYXJzZXRTZW50aW5lbCA6IGRlZmF1bHRzLmNoYXJzZXRTZW50aW5lbCxcbiAgICAgICAgZGVsaW1pdGVyOiB0eXBlb2Ygb3B0cy5kZWxpbWl0ZXIgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuZGVsaW1pdGVyIDogb3B0cy5kZWxpbWl0ZXIsXG4gICAgICAgIGVuY29kZTogdHlwZW9mIG9wdHMuZW5jb2RlID09PSAnYm9vbGVhbicgPyBvcHRzLmVuY29kZSA6IGRlZmF1bHRzLmVuY29kZSxcbiAgICAgICAgZW5jb2RlcjogdHlwZW9mIG9wdHMuZW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMuZW5jb2RlciA6IGRlZmF1bHRzLmVuY29kZXIsXG4gICAgICAgIGVuY29kZVZhbHVlc09ubHk6IHR5cGVvZiBvcHRzLmVuY29kZVZhbHVlc09ubHkgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlVmFsdWVzT25seSA6IGRlZmF1bHRzLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcbiAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIsXG4gICAgICAgIHNlcmlhbGl6ZURhdGU6IHR5cGVvZiBvcHRzLnNlcmlhbGl6ZURhdGUgPT09ICdmdW5jdGlvbicgPyBvcHRzLnNlcmlhbGl6ZURhdGUgOiBkZWZhdWx0cy5zZXJpYWxpemVEYXRlLFxuICAgICAgICBza2lwTnVsbHM6IHR5cGVvZiBvcHRzLnNraXBOdWxscyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5za2lwTnVsbHMgOiBkZWZhdWx0cy5za2lwTnVsbHMsXG4gICAgICAgIHNvcnQ6IHR5cGVvZiBvcHRzLnNvcnQgPT09ICdmdW5jdGlvbicgPyBvcHRzLnNvcnQgOiBudWxsLFxuICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IHR5cGVvZiBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgOiBkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmdcbiAgICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBvcHRzKSB7XG4gICAgdmFyIG9iaiA9IG9iamVjdDtcbiAgICB2YXIgb3B0aW9ucyA9IG5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMob3B0cyk7XG5cbiAgICB2YXIgb2JqS2V5cztcbiAgICB2YXIgZmlsdGVyO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmaWx0ZXIgPSBvcHRpb25zLmZpbHRlcjtcbiAgICAgICAgb2JqID0gZmlsdGVyKCcnLCBvYmopO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShvcHRpb25zLmZpbHRlcikpIHtcbiAgICAgICAgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgICAgIG9iaktleXMgPSBmaWx0ZXI7XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBbXTtcblxuICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0JyB8fCBvYmogPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHZhciBhcnJheUZvcm1hdDtcbiAgICBpZiAob3B0cyAmJiBvcHRzLmFycmF5Rm9ybWF0IGluIGFycmF5UHJlZml4R2VuZXJhdG9ycykge1xuICAgICAgICBhcnJheUZvcm1hdCA9IG9wdHMuYXJyYXlGb3JtYXQ7XG4gICAgfSBlbHNlIGlmIChvcHRzICYmICdpbmRpY2VzJyBpbiBvcHRzKSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gb3B0cy5pbmRpY2VzID8gJ2luZGljZXMnIDogJ3JlcGVhdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSAnaW5kaWNlcyc7XG4gICAgfVxuXG4gICAgdmFyIGdlbmVyYXRlQXJyYXlQcmVmaXggPSBhcnJheVByZWZpeEdlbmVyYXRvcnNbYXJyYXlGb3JtYXRdO1xuICAgIGlmIChvcHRzICYmICdjb21tYVJvdW5kVHJpcCcgaW4gb3B0cyAmJiB0eXBlb2Ygb3B0cy5jb21tYVJvdW5kVHJpcCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Bjb21tYVJvdW5kVHJpcGAgbXVzdCBiZSBhIGJvb2xlYW4sIG9yIGFic2VudCcpO1xuICAgIH1cbiAgICB2YXIgY29tbWFSb3VuZFRyaXAgPSBnZW5lcmF0ZUFycmF5UHJlZml4ID09PSAnY29tbWEnICYmIG9wdHMgJiYgb3B0cy5jb21tYVJvdW5kVHJpcDtcblxuICAgIGlmICghb2JqS2V5cykge1xuICAgICAgICBvYmpLZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zb3J0KSB7XG4gICAgICAgIG9iaktleXMuc29ydChvcHRpb25zLnNvcnQpO1xuICAgIH1cblxuICAgIHZhciBzaWRlQ2hhbm5lbCA9IGdldFNpZGVDaGFubmVsKCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpLZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBvYmpLZXlzW2ldO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnNraXBOdWxscyAmJiBvYmpba2V5XSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgcHVzaFRvQXJyYXkoa2V5cywgc3RyaW5naWZ5KFxuICAgICAgICAgICAgb2JqW2tleV0sXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgICAgICAgICAgY29tbWFSb3VuZFRyaXAsXG4gICAgICAgICAgICBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgIG9wdGlvbnMuc2tpcE51bGxzLFxuICAgICAgICAgICAgb3B0aW9ucy5lbmNvZGUgPyBvcHRpb25zLmVuY29kZXIgOiBudWxsLFxuICAgICAgICAgICAgb3B0aW9ucy5maWx0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLnNvcnQsXG4gICAgICAgICAgICBvcHRpb25zLmFsbG93RG90cyxcbiAgICAgICAgICAgIG9wdGlvbnMuc2VyaWFsaXplRGF0ZSxcbiAgICAgICAgICAgIG9wdGlvbnMuZm9ybWF0LFxuICAgICAgICAgICAgb3B0aW9ucy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZVZhbHVlc09ubHksXG4gICAgICAgICAgICBvcHRpb25zLmNoYXJzZXQsXG4gICAgICAgICAgICBzaWRlQ2hhbm5lbFxuICAgICAgICApKTtcbiAgICB9XG5cbiAgICB2YXIgam9pbmVkID0ga2V5cy5qb2luKG9wdGlvbnMuZGVsaW1pdGVyKTtcbiAgICB2YXIgcHJlZml4ID0gb3B0aW9ucy5hZGRRdWVyeVByZWZpeCA9PT0gdHJ1ZSA/ICc/JyA6ICcnO1xuXG4gICAgaWYgKG9wdGlvbnMuY2hhcnNldFNlbnRpbmVsKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAgICAgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCcmIzEwMDAzOycpLCB0aGUgXCJudW1lcmljIGVudGl0eVwiIHJlcHJlc2VudGF0aW9uIG9mIGEgY2hlY2ttYXJrXG4gICAgICAgICAgICBwcmVmaXggKz0gJ3V0Zjg9JTI2JTIzMTAwMDMlM0ImJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCgn4pyTJylcbiAgICAgICAgICAgIHByZWZpeCArPSAndXRmOD0lRTIlOUMlOTMmJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqb2luZWQubGVuZ3RoID4gMCA/IHByZWZpeCArIGpvaW5lZCA6ICcnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxudmFyIGRlZmF1bHRzID0ge1xuICAgIGFsbG93RG90czogZmFsc2UsXG4gICAgYWxsb3dQcm90b3R5cGVzOiBmYWxzZSxcbiAgICBhbGxvd1NwYXJzZTogZmFsc2UsXG4gICAgYXJyYXlMaW1pdDogMjAsXG4gICAgY2hhcnNldDogJ3V0Zi04JyxcbiAgICBjaGFyc2V0U2VudGluZWw6IGZhbHNlLFxuICAgIGNvbW1hOiBmYWxzZSxcbiAgICBkZWNvZGVyOiB1dGlscy5kZWNvZGUsXG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZGVwdGg6IDUsXG4gICAgaWdub3JlUXVlcnlQcmVmaXg6IGZhbHNlLFxuICAgIGludGVycHJldE51bWVyaWNFbnRpdGllczogZmFsc2UsXG4gICAgcGFyYW1ldGVyTGltaXQ6IDEwMDAsXG4gICAgcGFyc2VBcnJheXM6IHRydWUsXG4gICAgcGxhaW5PYmplY3RzOiBmYWxzZSxcbiAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IGZhbHNlXG59O1xuXG52YXIgaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzID0gZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvJiMoXFxkKyk7L2csIGZ1bmN0aW9uICgkMCwgbnVtYmVyU3RyKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG51bWJlclN0ciwgMTApKTtcbiAgICB9KTtcbn07XG5cbnZhciBwYXJzZUFycmF5VmFsdWUgPSBmdW5jdGlvbiAodmFsLCBvcHRpb25zKSB7XG4gICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmNvbW1hICYmIHZhbC5pbmRleE9mKCcsJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdmFsLnNwbGl0KCcsJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbDtcbn07XG5cbi8vIFRoaXMgaXMgd2hhdCBicm93c2VycyB3aWxsIHN1Ym1pdCB3aGVuIHRoZSDinJMgY2hhcmFjdGVyIG9jY3VycyBpbiBhblxuLy8gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIGJvZHkgYW5kIHRoZSBlbmNvZGluZyBvZiB0aGUgcGFnZSBjb250YWluaW5nXG4vLyB0aGUgZm9ybSBpcyBpc28tODg1OS0xLCBvciB3aGVuIHRoZSBzdWJtaXR0ZWQgZm9ybSBoYXMgYW4gYWNjZXB0LWNoYXJzZXRcbi8vIGF0dHJpYnV0ZSBvZiBpc28tODg1OS0xLiBQcmVzdW1hYmx5IGFsc28gd2l0aCBvdGhlciBjaGFyc2V0cyB0aGF0IGRvIG5vdCBjb250YWluXG4vLyB0aGUg4pyTIGNoYXJhY3Rlciwgc3VjaCBhcyB1cy1hc2NpaS5cbnZhciBpc29TZW50aW5lbCA9ICd1dGY4PSUyNiUyMzEwMDAzJTNCJzsgLy8gZW5jb2RlVVJJQ29tcG9uZW50KCcmIzEwMDAzOycpXG5cbi8vIFRoZXNlIGFyZSB0aGUgcGVyY2VudC1lbmNvZGVkIHV0Zi04IG9jdGV0cyByZXByZXNlbnRpbmcgYSBjaGVja21hcmssIGluZGljYXRpbmcgdGhhdCB0aGUgcmVxdWVzdCBhY3R1YWxseSBpcyB1dGYtOCBlbmNvZGVkLlxudmFyIGNoYXJzZXRTZW50aW5lbCA9ICd1dGY4PSVFMiU5QyU5Myc7IC8vIGVuY29kZVVSSUNvbXBvbmVudCgn4pyTJylcblxudmFyIHBhcnNlVmFsdWVzID0gZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZ1ZhbHVlcyhzdHIsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0ge307XG4gICAgdmFyIGNsZWFuU3RyID0gb3B0aW9ucy5pZ25vcmVRdWVyeVByZWZpeCA/IHN0ci5yZXBsYWNlKC9eXFw/LywgJycpIDogc3RyO1xuICAgIHZhciBsaW1pdCA9IG9wdGlvbnMucGFyYW1ldGVyTGltaXQgPT09IEluZmluaXR5ID8gdW5kZWZpbmVkIDogb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdDtcbiAgICB2YXIgcGFydHMgPSBjbGVhblN0ci5zcGxpdChvcHRpb25zLmRlbGltaXRlciwgbGltaXQpO1xuICAgIHZhciBza2lwSW5kZXggPSAtMTsgLy8gS2VlcCB0cmFjayBvZiB3aGVyZSB0aGUgdXRmOCBzZW50aW5lbCB3YXMgZm91bmRcbiAgICB2YXIgaTtcblxuICAgIHZhciBjaGFyc2V0ID0gb3B0aW9ucy5jaGFyc2V0O1xuICAgIGlmIChvcHRpb25zLmNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0c1tpXS5pbmRleE9mKCd1dGY4PScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzW2ldID09PSBjaGFyc2V0U2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9ICd1dGYtOCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0c1tpXSA9PT0gaXNvU2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9ICdpc28tODg1OS0xJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2tpcEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBpID0gcGFydHMubGVuZ3RoOyAvLyBUaGUgZXNsaW50IHNldHRpbmdzIGRvIG5vdCBhbGxvdyBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoaSA9PT0gc2tpcEluZGV4KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgICAgIHZhciBicmFja2V0RXF1YWxzUG9zID0gcGFydC5pbmRleE9mKCddPScpO1xuICAgICAgICB2YXIgcG9zID0gYnJhY2tldEVxdWFsc1BvcyA9PT0gLTEgPyBwYXJ0LmluZGV4T2YoJz0nKSA6IGJyYWNrZXRFcXVhbHNQb3MgKyAxO1xuXG4gICAgICAgIHZhciBrZXksIHZhbDtcbiAgICAgICAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0LCAna2V5Jyk7XG4gICAgICAgICAgICB2YWwgPSBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyA/IG51bGwgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LnNsaWNlKDAsIHBvcyksIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQsICdrZXknKTtcbiAgICAgICAgICAgIHZhbCA9IHV0aWxzLm1heWJlTWFwKFxuICAgICAgICAgICAgICAgIHBhcnNlQXJyYXlWYWx1ZShwYXJ0LnNsaWNlKHBvcyArIDEpLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZW5jb2RlZFZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5kZWNvZGVyKGVuY29kZWRWYWwsIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQsICd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsICYmIG9wdGlvbnMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzICYmIGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAgICAgdmFsID0gaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzKHZhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydC5pbmRleE9mKCdbXT0nKSA+IC0xKSB7XG4gICAgICAgICAgICB2YWwgPSBpc0FycmF5KHZhbCkgPyBbdmFsXSA6IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXMuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdXRpbHMuY29tYmluZShvYmpba2V5XSwgdmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbnZhciBwYXJzZU9iamVjdCA9IGZ1bmN0aW9uIChjaGFpbiwgdmFsLCBvcHRpb25zLCB2YWx1ZXNQYXJzZWQpIHtcbiAgICB2YXIgbGVhZiA9IHZhbHVlc1BhcnNlZCA/IHZhbCA6IHBhcnNlQXJyYXlWYWx1ZSh2YWwsIG9wdGlvbnMpO1xuXG4gICAgZm9yICh2YXIgaSA9IGNoYWluLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBvYmo7XG4gICAgICAgIHZhciByb290ID0gY2hhaW5baV07XG5cbiAgICAgICAgaWYgKHJvb3QgPT09ICdbXScgJiYgb3B0aW9ucy5wYXJzZUFycmF5cykge1xuICAgICAgICAgICAgb2JqID0gW10uY29uY2F0KGxlYWYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqID0gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgICAgICAgICB2YXIgY2xlYW5Sb290ID0gcm9vdC5jaGFyQXQoMCkgPT09ICdbJyAmJiByb290LmNoYXJBdChyb290Lmxlbmd0aCAtIDEpID09PSAnXScgPyByb290LnNsaWNlKDEsIC0xKSA6IHJvb3Q7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSBwYXJzZUludChjbGVhblJvb3QsIDEwKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5wYXJzZUFycmF5cyAmJiBjbGVhblJvb3QgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgb2JqID0geyAwOiBsZWFmIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICFpc05hTihpbmRleClcbiAgICAgICAgICAgICAgICAmJiByb290ICE9PSBjbGVhblJvb3RcbiAgICAgICAgICAgICAgICAmJiBTdHJpbmcoaW5kZXgpID09PSBjbGVhblJvb3RcbiAgICAgICAgICAgICAgICAmJiBpbmRleCA+PSAwXG4gICAgICAgICAgICAgICAgJiYgKG9wdGlvbnMucGFyc2VBcnJheXMgJiYgaW5kZXggPD0gb3B0aW9ucy5hcnJheUxpbWl0KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb2JqID0gW107XG4gICAgICAgICAgICAgICAgb2JqW2luZGV4XSA9IGxlYWY7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNsZWFuUm9vdCAhPT0gJ19fcHJvdG9fXycpIHtcbiAgICAgICAgICAgICAgICBvYmpbY2xlYW5Sb290XSA9IGxlYWY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZWFmID0gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiBsZWFmO1xufTtcblxudmFyIHBhcnNlS2V5cyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdLZXlzKGdpdmVuS2V5LCB2YWwsIG9wdGlvbnMsIHZhbHVlc1BhcnNlZCkge1xuICAgIGlmICghZ2l2ZW5LZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRyYW5zZm9ybSBkb3Qgbm90YXRpb24gdG8gYnJhY2tldCBub3RhdGlvblxuICAgIHZhciBrZXkgPSBvcHRpb25zLmFsbG93RG90cyA/IGdpdmVuS2V5LnJlcGxhY2UoL1xcLihbXi5bXSspL2csICdbJDFdJykgOiBnaXZlbktleTtcblxuICAgIC8vIFRoZSByZWdleCBjaHVua3NcblxuICAgIHZhciBicmFja2V0cyA9IC8oXFxbW15bXFxdXSpdKS87XG4gICAgdmFyIGNoaWxkID0gLyhcXFtbXltcXF1dKl0pL2c7XG5cbiAgICAvLyBHZXQgdGhlIHBhcmVudFxuXG4gICAgdmFyIHNlZ21lbnQgPSBvcHRpb25zLmRlcHRoID4gMCAmJiBicmFja2V0cy5leGVjKGtleSk7XG4gICAgdmFyIHBhcmVudCA9IHNlZ21lbnQgPyBrZXkuc2xpY2UoMCwgc2VnbWVudC5pbmRleCkgOiBrZXk7XG5cbiAgICAvLyBTdGFzaCB0aGUgcGFyZW50IGlmIGl0IGV4aXN0c1xuXG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIC8vIElmIHdlIGFyZW4ndCB1c2luZyBwbGFpbiBvYmplY3RzLCBvcHRpb25hbGx5IHByZWZpeCBrZXlzIHRoYXQgd291bGQgb3ZlcndyaXRlIG9iamVjdCBwcm90b3R5cGUgcHJvcGVydGllc1xuICAgICAgICBpZiAoIW9wdGlvbnMucGxhaW5PYmplY3RzICYmIGhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHBhcmVudCkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBrZXlzLnB1c2gocGFyZW50KTtcbiAgICB9XG5cbiAgICAvLyBMb29wIHRocm91Z2ggY2hpbGRyZW4gYXBwZW5kaW5nIHRvIHRoZSBhcnJheSB1bnRpbCB3ZSBoaXQgZGVwdGhcblxuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAob3B0aW9ucy5kZXB0aCA+IDAgJiYgKHNlZ21lbnQgPSBjaGlsZC5leGVjKGtleSkpICE9PSBudWxsICYmIGkgPCBvcHRpb25zLmRlcHRoKSB7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWluT2JqZWN0cyAmJiBoYXMuY2FsbChPYmplY3QucHJvdG90eXBlLCBzZWdtZW50WzFdLnNsaWNlKDEsIC0xKSkpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5hbGxvd1Byb3RvdHlwZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5cy5wdXNoKHNlZ21lbnRbMV0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlJ3MgYSByZW1haW5kZXIsIGp1c3QgYWRkIHdoYXRldmVyIGlzIGxlZnRcblxuICAgIGlmIChzZWdtZW50KSB7XG4gICAgICAgIGtleXMucHVzaCgnWycgKyBrZXkuc2xpY2Uoc2VnbWVudC5pbmRleCkgKyAnXScpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU9iamVjdChrZXlzLCB2YWwsIG9wdGlvbnMsIHZhbHVlc1BhcnNlZCk7XG59O1xuXG52YXIgbm9ybWFsaXplUGFyc2VPcHRpb25zID0gZnVuY3Rpb24gbm9ybWFsaXplUGFyc2VPcHRpb25zKG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRzO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmRlY29kZXIgIT09IG51bGwgJiYgb3B0cy5kZWNvZGVyICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdHMuZGVjb2RlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEZWNvZGVyIGhhcyB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0cy5jaGFyc2V0ICE9PSAndW5kZWZpbmVkJyAmJiBvcHRzLmNoYXJzZXQgIT09ICd1dGYtOCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIGNoYXJzZXQgb3B0aW9uIG11c3QgYmUgZWl0aGVyIHV0Zi04LCBpc28tODg1OS0xLCBvciB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgdmFyIGNoYXJzZXQgPSB0eXBlb2Ygb3B0cy5jaGFyc2V0ID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHRzLmNoYXJzZXQgOiBvcHRzLmNoYXJzZXQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhbGxvd0RvdHM6IHR5cGVvZiBvcHRzLmFsbG93RG90cyA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5hbGxvd0RvdHMgOiAhIW9wdHMuYWxsb3dEb3RzLFxuICAgICAgICBhbGxvd1Byb3RvdHlwZXM6IHR5cGVvZiBvcHRzLmFsbG93UHJvdG90eXBlcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5hbGxvd1Byb3RvdHlwZXMgOiBkZWZhdWx0cy5hbGxvd1Byb3RvdHlwZXMsXG4gICAgICAgIGFsbG93U3BhcnNlOiB0eXBlb2Ygb3B0cy5hbGxvd1NwYXJzZSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5hbGxvd1NwYXJzZSA6IGRlZmF1bHRzLmFsbG93U3BhcnNlLFxuICAgICAgICBhcnJheUxpbWl0OiB0eXBlb2Ygb3B0cy5hcnJheUxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdHMuYXJyYXlMaW1pdCA6IGRlZmF1bHRzLmFycmF5TGltaXQsXG4gICAgICAgIGNoYXJzZXQ6IGNoYXJzZXQsXG4gICAgICAgIGNoYXJzZXRTZW50aW5lbDogdHlwZW9mIG9wdHMuY2hhcnNldFNlbnRpbmVsID09PSAnYm9vbGVhbicgPyBvcHRzLmNoYXJzZXRTZW50aW5lbCA6IGRlZmF1bHRzLmNoYXJzZXRTZW50aW5lbCxcbiAgICAgICAgY29tbWE6IHR5cGVvZiBvcHRzLmNvbW1hID09PSAnYm9vbGVhbicgPyBvcHRzLmNvbW1hIDogZGVmYXVsdHMuY29tbWEsXG4gICAgICAgIGRlY29kZXI6IHR5cGVvZiBvcHRzLmRlY29kZXIgPT09ICdmdW5jdGlvbicgPyBvcHRzLmRlY29kZXIgOiBkZWZhdWx0cy5kZWNvZGVyLFxuICAgICAgICBkZWxpbWl0ZXI6IHR5cGVvZiBvcHRzLmRlbGltaXRlciA9PT0gJ3N0cmluZycgfHwgdXRpbHMuaXNSZWdFeHAob3B0cy5kZWxpbWl0ZXIpID8gb3B0cy5kZWxpbWl0ZXIgOiBkZWZhdWx0cy5kZWxpbWl0ZXIsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvbiwgbm8tZXh0cmEtcGFyZW5zXG4gICAgICAgIGRlcHRoOiAodHlwZW9mIG9wdHMuZGVwdGggPT09ICdudW1iZXInIHx8IG9wdHMuZGVwdGggPT09IGZhbHNlKSA/ICtvcHRzLmRlcHRoIDogZGVmYXVsdHMuZGVwdGgsXG4gICAgICAgIGlnbm9yZVF1ZXJ5UHJlZml4OiBvcHRzLmlnbm9yZVF1ZXJ5UHJlZml4ID09PSB0cnVlLFxuICAgICAgICBpbnRlcnByZXROdW1lcmljRW50aXRpZXM6IHR5cGVvZiBvcHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMgOiBkZWZhdWx0cy5pbnRlcnByZXROdW1lcmljRW50aXRpZXMsXG4gICAgICAgIHBhcmFtZXRlckxpbWl0OiB0eXBlb2Ygb3B0cy5wYXJhbWV0ZXJMaW1pdCA9PT0gJ251bWJlcicgPyBvcHRzLnBhcmFtZXRlckxpbWl0IDogZGVmYXVsdHMucGFyYW1ldGVyTGltaXQsXG4gICAgICAgIHBhcnNlQXJyYXlzOiBvcHRzLnBhcnNlQXJyYXlzICE9PSBmYWxzZSxcbiAgICAgICAgcGxhaW5PYmplY3RzOiB0eXBlb2Ygb3B0cy5wbGFpbk9iamVjdHMgPT09ICdib29sZWFuJyA/IG9wdHMucGxhaW5PYmplY3RzIDogZGVmYXVsdHMucGxhaW5PYmplY3RzLFxuICAgICAgICBzdHJpY3ROdWxsSGFuZGxpbmc6IHR5cGVvZiBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5zdHJpY3ROdWxsSGFuZGxpbmcgOiBkZWZhdWx0cy5zdHJpY3ROdWxsSGFuZGxpbmdcbiAgICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cyk7XG5cbiAgICBpZiAoc3RyID09PSAnJyB8fCBzdHIgPT09IG51bGwgfHwgdHlwZW9mIHN0ciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuICAgIH1cblxuICAgIHZhciB0ZW1wT2JqID0gdHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgPyBwYXJzZVZhbHVlcyhzdHIsIG9wdGlvbnMpIDogc3RyO1xuICAgIHZhciBvYmogPSBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUga2V5cyBhbmQgc2V0dXAgdGhlIG5ldyBvYmplY3RcblxuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGVtcE9iaik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICB2YXIgbmV3T2JqID0gcGFyc2VLZXlzKGtleSwgdGVtcE9ialtrZXldLCBvcHRpb25zLCB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyk7XG4gICAgICAgIG9iaiA9IHV0aWxzLm1lcmdlKG9iaiwgbmV3T2JqLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5hbGxvd1NwYXJzZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiB1dGlscy5jb21wYWN0KG9iaik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9zdHJpbmdpZnknKTtcbnZhciBwYXJzZSA9IHJlcXVpcmUoJy4vcGFyc2UnKTtcbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGZvcm1hdHM6IGZvcm1hdHMsXG4gICAgcGFyc2U6IHBhcnNlLFxuICAgIHN0cmluZ2lmeTogc3RyaW5naWZ5XG59O1xuIiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQHByaXZhdGVcbiAqXG4gKiBAY2xhc3NkZXNjXG4gKiBPdmVycmlkZXMgb25lIG9mIHRoZSBBZG1pbkpTIGNvcmUgY29tcG9uZW50cyB3aGVuIHVzZXIgcGFzc2VzIGl0J3MgbmFtZSB0byBDb21wb25lbnRMb2FkZXJcbiAqXG4gKiBJZiBjYXNlIG9mIGJlaW5nIG92ZXJyaWRkZW4sIGNvbXBvbmVudCByZWNlaXZlcyBhZGRpdGlvbmFsIHByb3A6IGBPcmlnaW5hbENvbXBvbmVudGBcbiAqXG4gKiBAZXhhbXBsZVxuICogbmV3IENvbXBvbmVudExvYWRlcigpLm92ZXJyaWRlKCdTaWRlYmFyRm9vdGVyJywgTXlTaWRlYmFyRm9vdGVyKVxuICovXG5mdW5jdGlvbiBhbGxvd092ZXJyaWRlKE9yaWdpbmFsQ29tcG9uZW50LCBuYW1lKSB7XG4gIGNvbnN0IFdyYXBwZXJDb21wb25lbnQgPSBwcm9wcyA9PiB7XG4gICAgbGV0IENvbXBvbmVudCA9IE9yaWdpbmFsQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQG5ldyBpbiB2ZXJzaW9uIDYuM1xuICAgICAqXG4gICAgICogVGhpcyBhZGRzIHN1cHBvcnQgZm9yIGZ1dHVyZSB0aGVtZS1zcGVjaWZpYyBjb21wb25lbnRzIHZpYSB0aGVpciBcInRoZW1lLmJ1bmRsZS5qc1wiXG4gICAgICpcbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIENvbXBvbmVudCA9IHdpbmRvdy5BZG1pbkpTPy5Vc2VyQ29tcG9uZW50cz8uW25hbWVdID8/IHdpbmRvdy5USEVNRV9DT01QT05FTlRTPy5bbmFtZV0gPz8gT3JpZ2luYWxDb21wb25lbnQ7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgT3JpZ2luYWxDb21wb25lbnQ6IE9yaWdpbmFsQ29tcG9uZW50XG4gICAgfSkpO1xuICB9O1xuICByZXR1cm4gV3JhcHBlckNvbXBvbmVudDtcbn1cbmV4cG9ydCB7IGFsbG93T3ZlcnJpZGUgYXMgZGVmYXVsdCwgYWxsb3dPdmVycmlkZSB9OyIsImV4cG9ydCBjb25zdCBhY3Rpb25IYXNEaXNhYmxlZENvbXBvbmVudCA9IGFjdGlvbiA9PiB0eXBlb2YgYWN0aW9uLmNvbXBvbmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgYWN0aW9uLmNvbXBvbmVudCA9PT0gZmFsc2U7XG5leHBvcnQgY29uc3QgYWN0aW9uSGFzQ3VzdG9tQ29tcG9uZW50ID0gYWN0aW9uID0+IHR5cGVvZiBhY3Rpb24uY29tcG9uZW50ID09PSAnc3RyaW5nJzsiLCJpbXBvcnQgeyBWaWV3SGVscGVycyB9IGZyb20gJy4uLy4uLy4uL2JhY2tlbmQvdXRpbHMvdmlldy1oZWxwZXJzL2luZGV4LmpzJztcbmNvbnN0IGggPSBuZXcgVmlld0hlbHBlcnMoKTtcbmV4cG9ydCBjb25zdCBhY3Rpb25IcmVmID0gKGFjdGlvbiwgcGFyYW1zKSA9PiB7XG4gIGNvbnN0IGFjdGlvbk5hbWUgPSBhY3Rpb24ubmFtZTtcbiAgaWYgKCFhY3Rpb24uY29tcG9uZW50ICYmICFhY3Rpb24uaGFzSGFuZGxlcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChwYXJhbXMucmVjb3JkSWRzPy5sZW5ndGgpIHtcbiAgICBwYXJhbXMucmVjb3JkSWRzID0gWy4uLm5ldyBTZXQocGFyYW1zLnJlY29yZElkcyldO1xuICB9XG4gIGNvbnN0IGhyZWZNYXAgPSB7XG4gICAgcmVjb3JkOiAoKSA9PiBoLnJlY29yZEFjdGlvblVybCh7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBhY3Rpb25OYW1lXG4gICAgfSksXG4gICAgcmVzb3VyY2U6ICgpID0+IGgucmVzb3VyY2VBY3Rpb25Vcmwoe1xuICAgICAgcmVzb3VyY2VJZDogcGFyYW1zLnJlc291cmNlSWQsXG4gICAgICBhY3Rpb25OYW1lLFxuICAgICAgc2VhcmNoOiBwYXJhbXMuc2VhcmNoXG4gICAgfSksXG4gICAgYnVsazogKCkgPT4gaC5idWxrQWN0aW9uVXJsKHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIGFjdGlvbk5hbWVcbiAgICB9KVxuICB9O1xuICBpZiAoaHJlZk1hcFthY3Rpb24uYWN0aW9uVHlwZV0pIHtcbiAgICByZXR1cm4gaHJlZk1hcFthY3Rpb24uYWN0aW9uVHlwZV0oKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiYWN0aW9uVHlwZVwiIHNob3VsZCBiZSBlaXRoZXIgcmVjb3JkLCByZXNvdXJjZSBvciBidWxrJyk7XG59OyIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgfTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuXG4vLyB1dGlscyBpcyBhIGxpYnJhcnkgb2YgZ2VuZXJpYyBoZWxwZXIgZnVuY3Rpb25zIG5vbi1zcGVjaWZpYyB0byBheGlvc1xuXG5jb25zdCB7dG9TdHJpbmd9ID0gT2JqZWN0LnByb3RvdHlwZTtcbmNvbnN0IHtnZXRQcm90b3R5cGVPZn0gPSBPYmplY3Q7XG5cbmNvbnN0IGtpbmRPZiA9IChjYWNoZSA9PiB0aGluZyA9PiB7XG4gICAgY29uc3Qgc3RyID0gdG9TdHJpbmcuY2FsbCh0aGluZyk7XG4gICAgcmV0dXJuIGNhY2hlW3N0cl0gfHwgKGNhY2hlW3N0cl0gPSBzdHIuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCkpO1xufSkoT2JqZWN0LmNyZWF0ZShudWxsKSk7XG5cbmNvbnN0IGtpbmRPZlRlc3QgPSAodHlwZSkgPT4ge1xuICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gKHRoaW5nKSA9PiBraW5kT2YodGhpbmcpID09PSB0eXBlXG59XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSAnW29iamVjdCBGb3JtRGF0YV0nO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHxcbiAgICB0b1N0cmluZy5jYWxsKHRoaW5nKSA9PT0gcGF0dGVybiB8fFxuICAgIChpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSBwYXR0ZXJuKVxuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHN0ci50cmltID9cbiAgc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5cyA9IGZhbHNlXVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuLCB7YWxsT3duS2V5cyA9IGZhbHNlfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICBsZXQgX2tleTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBfa2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ID09PSBfa2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBfa2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgX2dsb2JhbCA9ICgoKSA9PiB7XG4gIC8qZXNsaW50IG5vLXVuZGVmOjAqL1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKVxufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKlxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICBjb25zdCB7Y2FzZWxlc3N9ID0gaXNDb250ZXh0RGVmaW5lZCh0aGlzKSAmJiB0aGlzIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W3RhcmdldEtleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZShyZXN1bHRbdGFyZ2V0S2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYXJndW1lbnRzW2ldICYmIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXNdXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmNvbnN0IGV4dGVuZCA9IChhLCBiLCB0aGlzQXJnLCB7YWxsT3duS2V5c309IHt9KSA9PiB7XG4gIGZvckVhY2goYiwgKHZhbCwga2V5KSA9PiB7XG4gICAgaWYgKHRoaXNBcmcgJiYgaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0sIHthbGxPd25LZXlzfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgJ3N1cGVyJywge1xuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZVxuICB9KTtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgdG9GbGF0T2JqZWN0ID0gKHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSA9PiB7XG4gIGxldCBwcm9wcztcbiAgbGV0IGk7XG4gIGxldCBwcm9wO1xuICBjb25zdCBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIGdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufVxuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufVxuXG4vKipcbiAqIENoZWNraW5nIGlmIHRoZSBVaW50OEFycmF5IGV4aXN0cyBhbmQgaWYgaXQgZG9lcywgaXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZVxuICogdGhpbmcgcGFzc2VkIGluIGlzIGFuIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXlcbiAqXG4gKiBAcGFyYW0ge1R5cGVkQXJyYXl9XG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuY29uc3QgaXNUeXBlZEFycmF5ID0gKFR5cGVkQXJyYXkgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gdGhpbmcgPT4ge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBnZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbi8qKlxuICogRm9yIGVhY2ggZW50cnkgaW4gdGhlIG9iamVjdCwgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgZm9yRWFjaEVudHJ5ID0gKG9iaiwgZm4pID0+IHtcbiAgY29uc3QgZ2VuZXJhdG9yID0gb2JqICYmIG9ialtTeW1ib2wuaXRlcmF0b3JdO1xuXG4gIGNvbnN0IGl0ZXJhdG9yID0gZ2VuZXJhdG9yLmNhbGwob2JqKTtcblxuICBsZXQgcmVzdWx0O1xuXG4gIHdoaWxlICgocmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpKSAmJiAhcmVzdWx0LmRvbmUpIHtcbiAgICBjb25zdCBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn1cblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxcbiAgICBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gICAgfVxuICApO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoKHtoYXNPd25Qcm9wZXJ0eX0pID0+IChvYmosIHByb3ApID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkoT2JqZWN0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGlmIChyZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikgIT09IGZhbHNlKSB7XG4gICAgICByZWR1Y2VkRGVzY3JpcHRvcnNbbmFtZV0gPSBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufVxuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHZhbHVlID0gK3ZhbHVlO1xuICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufVxuXG5jb25zdCBBTFBIQSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidcblxuY29uc3QgRElHSVQgPSAnMDEyMzQ1Njc4OSc7XG5cbmNvbnN0IEFMUEhBQkVUID0ge1xuICBESUdJVCxcbiAgQUxQSEEsXG4gIEFMUEhBX0RJR0lUOiBBTFBIQSArIEFMUEhBLnRvVXBwZXJDYXNlKCkgKyBESUdJVFxufVxuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgdGhpbmdbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJyAmJiB0aGluZ1tTeW1ib2wuaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYoISgndG9KU09OJyBpbiBzb3VyY2UpKSB7XG4gICAgICAgIHN0YWNrW2ldID0gc291cmNlO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc0FycmF5KHNvdXJjZSkgPyBbXSA6IHt9O1xuXG4gICAgICAgIGZvckVhY2goc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlZHVjZWRWYWx1ZSA9IHZpc2l0KHZhbHVlLCBpICsgMSk7XG4gICAgICAgICAgIWlzVW5kZWZpbmVkKHJlZHVjZWRWYWx1ZSkgJiYgKHRhcmdldFtrZXldID0gcmVkdWNlZFZhbHVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhY2tbaV0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZyxcbiAgaXNOdW1iZXIsXG4gIGlzQm9vbGVhbixcbiAgaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIEFMUEhBQkVULFxuICBnZW5lcmF0ZVN0cmluZyxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIHJlc3BvbnNlICYmICh0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2UpO1xufVxuXG51dGlscy5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zRXJyb3IucHJvdG90eXBlO1xuY29uc3QgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCcsXG4gICdFUlJfTk9UX1NVUFBPUlQnLFxuICAnRVJSX0lOVkFMSURfVVJMJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChjb2RlID0+IHtcbiAgZGVzY3JpcHRvcnNbY29kZV0gPSB7dmFsdWU6IGNvZGV9O1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF4aW9zRXJyb3IsIGRlc2NyaXB0b3JzKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUsICdpc0F4aW9zRXJyb3InLCB7dmFsdWU6IHRydWV9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbkF4aW9zRXJyb3IuZnJvbSA9IChlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpID0+IHtcbiAgY29uc3QgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcblxuICB1dGlscy50b0ZsYXRPYmplY3QoZXJyb3IsIGF4aW9zRXJyb3IsIGZ1bmN0aW9uIGZpbHRlcihvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBFcnJvci5wcm90b3R5cGU7XG4gIH0sIHByb3AgPT4ge1xuICAgIHJldHVybiBwcm9wICE9PSAnaXNBeGlvc0Vycm9yJztcbiAgfSk7XG5cbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIGVycm9yLm1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpO1xuXG4gIGF4aW9zRXJyb3IuY2F1c2UgPSBlcnJvcjtcblxuICBheGlvc0Vycm9yLm5hbWUgPSBlcnJvci5uYW1lO1xuXG4gIGN1c3RvbVByb3BzICYmIE9iamVjdC5hc3NpZ24oYXhpb3NFcnJvciwgY3VzdG9tUHJvcHMpO1xuXG4gIHJldHVybiBheGlvc0Vycm9yO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NFcnJvcjtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbmV4cG9ydCBkZWZhdWx0IG51bGw7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuLy8gdGVtcG9yYXJ5IGhvdGZpeCB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzIHVudGlsIEF4aW9zVVJMU2VhcmNoUGFyYW1zIGlzIHJlZmFjdG9yZWRcbmltcG9ydCBQbGF0Zm9ybUZvcm1EYXRhIGZyb20gJy4uL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9Gb3JtRGF0YS5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMuaXNBcnJheSh0aGluZyk7XG59XG5cbi8qKlxuICogSXQgcmVtb3ZlcyB0aGUgYnJhY2tldHMgZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHBhcmFtZXRlci5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUga2V5IHdpdGhvdXQgdGhlIGJyYWNrZXRzLlxuICovXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscy50b0ZsYXRPYmplY3QodXRpbHMsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKFBsYXRmb3JtRm9ybURhdGEgfHwgRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscy50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHNvdXJjZVtvcHRpb25dKTtcbiAgfSk7XG5cbiAgY29uc3QgbWV0YVRva2VucyA9IG9wdGlvbnMubWV0YVRva2VucztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNvbnN0IHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIGNvbnN0IGRvdHMgPSBvcHRpb25zLmRvdHM7XG4gIGNvbnN0IGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXM7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iO1xuICBjb25zdCB1c2VCbG9iID0gX0Jsb2IgJiYgdXRpbHMuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscy5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscy5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCB2aXNpdG9yLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7U3RyaW5nfE51bWJlcn0ga2V5XG4gICAqIEBwYXJhbSB7QXJyYXk8U3RyaW5nfE51bWJlcj59IHBhdGhcbiAgICogQHRoaXMge0Zvcm1EYXRhfVxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gcmV0dXJuIHRydWUgdG8gdmlzaXQgdGhlIGVhY2ggcHJvcCBvZiB0aGUgdmFsdWUgcmVjdXJzaXZlbHlcbiAgICovXG4gIGZ1bmN0aW9uIGRlZmF1bHRWaXNpdG9yKHZhbHVlLCBrZXksIHBhdGgpIHtcbiAgICBsZXQgYXJyID0gdmFsdWU7XG5cbiAgICBpZiAodmFsdWUgJiYgIXBhdGggJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHV0aWxzLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscy50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgICAgIGluZGV4ZXMgPT09IHRydWUgPyByZW5kZXJLZXkoW2tleV0sIGluZGV4LCBkb3RzKSA6IChpbmRleGVzID09PSBudWxsID8ga2V5IDoga2V5ICsgJ1tdJyksXG4gICAgICAgICAgICBjb252ZXJ0VmFsdWUoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNWaXNpdGFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQocmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cyksIGNvbnZlcnRWYWx1ZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc3RhY2sgPSBbXTtcblxuICBjb25zdCBleHBvc2VkSGVscGVycyA9IE9iamVjdC5hc3NpZ24ocHJlZGljYXRlcywge1xuICAgIGRlZmF1bHRWaXNpdG9yLFxuICAgIGNvbnZlcnRWYWx1ZSxcbiAgICBpc1Zpc2l0YWJsZVxuICB9KTtcblxuICBmdW5jdGlvbiBidWlsZCh2YWx1ZSwgcGF0aCkge1xuICAgIGlmICh1dGlscy5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdG9Gb3JtRGF0YTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICAgICclMDAnOiAnXFx4MDAnXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnZlcnRlZCB0byBhIEZvcm1EYXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXIgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSk7XG4gIH0gOiBlbmNvZGU7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc1VSTFNlYXJjaFBhcmFtcyBmcm9tICcuLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zLmpzJztcblxuLyoqXG4gKiBJdCByZXBsYWNlcyBhbGwgaW5zdGFuY2VzIG9mIHRoZSBjaGFyYWN0ZXJzIGA6YCwgYCRgLCBgLGAsIGArYCwgYFtgLCBhbmQgYF1gIHdpdGggdGhlaXJcbiAqIFVSSSBlbmNvZGVkIGNvdW50ZXJwYXJ0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWwgVGhlIHZhbHVlIHRvIGJlIGVuY29kZWQuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGVuY29kZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez9vYmplY3R9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgY29uc3Qgc2VyaWFsaXplRm4gPSBvcHRpb25zICYmIG9wdGlvbnMuc2VyaWFsaXplO1xuXG4gIGxldCBzZXJpYWxpemVkUGFyYW1zO1xuXG4gIGlmIChzZXJpYWxpemVGbikge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBzZXJpYWxpemVGbihwYXJhbXMsIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSB1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpID9cbiAgICAgIHBhcmFtcy50b1N0cmluZygpIDpcbiAgICAgIG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vLi4vLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydCBkZWZhdWx0IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyA/IEJsb2IgOiBudWxsXG4iLCJpbXBvcnQgVVJMU2VhcmNoUGFyYW1zIGZyb20gJy4vY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMnXG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnLi9jbGFzc2VzL0Zvcm1EYXRhLmpzJ1xuaW1wb3J0IEJsb2IgZnJvbSAnLi9jbGFzc2VzL0Jsb2IuanMnXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBpc1N0YW5kYXJkQnJvd3NlckVudiA9ICgoKSA9PiB7XG4gIGxldCBwcm9kdWN0O1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgKFxuICAgIChwcm9kdWN0ID0gbmF2aWdhdG9yLnByb2R1Y3QpID09PSAnUmVhY3ROYXRpdmUnIHx8XG4gICAgcHJvZHVjdCA9PT0gJ05hdGl2ZVNjcmlwdCcgfHxcbiAgICBwcm9kdWN0ID09PSAnTlMnKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcbn0pKCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbiBjb25zdCBpc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGEsXG4gICAgQmxvYlxuICB9LFxuICBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgaXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscy5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWxwZXJzLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCBvcHRpb25zKSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcgbGlrZSBgZm9vW3hdW3ldW3pdYCBhbmQgcmV0dXJucyBhbiBhcnJheSBsaWtlIGBbJ2ZvbycsICd4JywgJ3knLCAneiddXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICpcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJvcFBhdGgobmFtZSkge1xuICAvLyBmb29beF1beV1bel1cbiAgLy8gZm9vLngueS56XG4gIC8vIGZvby14LXktelxuICAvLyBmb28geCB5IHpcbiAgcmV0dXJuIHV0aWxzLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMuaGFzT3duUHJvcCh0YXJnZXQsIG5hbWUpKSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IFt0YXJnZXRbbmFtZV0sIHZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldFtuYW1lXSB8fCAhdXRpbHMuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9ybURhdGFUb0pTT047XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4vdHJhbnNpdGlvbmFsLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4uL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgdG9VUkxFbmNvZGVkRm9ybSBmcm9tICcuLi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuLi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzJztcblxuY29uc3QgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWRcbn07XG5cbi8qKlxuICogSXQgdGFrZXMgYSBzdHJpbmcsIHRyaWVzIHRvIHBhcnNlIGl0LCBhbmQgaWYgaXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHZlcnNpb25cbiAqIG9mIHRoZSBpbnB1dFxuICpcbiAqIEBwYXJhbSB7YW55fSByYXdWYWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBzdHJpbmdpZmllZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBhcnNlciAtIEEgZnVuY3Rpb24gdGhhdCBwYXJzZXMgYSBzdHJpbmcgaW50byBhIEphdmFTY3JpcHQgb2JqZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5jb2RlciAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHZhbHVlIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5naWZpZWQgdmVyc2lvbiBvZiB0aGUgcmF3VmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeVNhZmVseShyYXdWYWx1ZSwgcGFyc2VyLCBlbmNvZGVyKSB7XG4gIGlmICh1dGlscy5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMuaXNPYmplY3QoZGF0YSk7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkICYmIHV0aWxzLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgaWYgKCFoYXNKU09OQ29udGVudFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04JywgZmFsc2UpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgaXNGaWxlTGlzdDtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQpIHtcbiAgICAgIGlmIChjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzLmlzRmlsZUxpc3QoZGF0YSkpIHx8IGNvbnRlbnRUeXBlLmluZGV4T2YoJ211bHRpcGFydC9mb3JtLWRhdGEnKSA+IC0xKSB7XG4gICAgICAgIGNvbnN0IF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhO1xuXG4gICAgICAgIHJldHVybiB0b0Zvcm1EYXRhKFxuICAgICAgICAgIGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsXG4gICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICB0aGlzLmZvcm1TZXJpYWxpemVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBoYXNKU09OQ29udGVudFR5cGUgKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgY29uc3QgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIGNvbnN0IGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICBjb25zdCBKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmIChkYXRhICYmIHV0aWxzLmlzU3RyaW5nKGRhdGEpICYmICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXRoaXMucmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKSkge1xuICAgICAgY29uc3Qgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2JcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscy50b09iamVjdFNldChbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG5leHBvcnQgZGVmYXVsdCByYXdIZWFkZXJzID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiYgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBhcnNlSGVhZGVycyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyc7XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyTmFtZShzdHIpIHtcbiAgcmV0dXJuIC9eWy1fYS16QS1aXSskLy50ZXN0KHN0ci50cmltKCkpO1xufVxuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscy5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscy5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24oYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jbGFzcyBBeGlvc0hlYWRlcnMge1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHNldChoZWFkZXIsIHZhbHVlT3JSZXdyaXRlLCByZXdyaXRlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFsSGVhZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBsSGVhZGVyKTtcblxuICAgICAgaWYoIWtleSB8fCBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fCBfcmV3cml0ZSA9PT0gdHJ1ZSB8fCAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKSkge1xuICAgICAgICBzZWxmW2tleSB8fCBfaGVhZGVyXSA9IG5vcm1hbGl6ZVZhbHVlKF92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0SGVhZGVycyA9IChoZWFkZXJzLCBfcmV3cml0ZSkgPT5cbiAgICAgIHV0aWxzLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KGhlYWRlcikgfHwgaGVhZGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgc2V0SGVhZGVycyhoZWFkZXIsIHZhbHVlT3JSZXdyaXRlKVxuICAgIH0gZWxzZSBpZih1dGlscy5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkge1xuICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQoaGVhZGVyLCBwYXJzZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuY2FsbCh0aGlzLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1dGlscy5pc1JlZ0V4cChwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoc2VsZiwgX2hlYWRlcik7XG5cbiAgICAgICAgaWYgKGtleSAmJiAoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZShzZWxmLCBzZWxmW2tleV0sIGtleSwgbWF0Y2hlcikpKSB7XG4gICAgICAgICAgZGVsZXRlIHNlbGZba2V5XTtcblxuICAgICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyLmZvckVhY2goZGVsZXRlSGVhZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBjbGVhcihtYXRjaGVyKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICAgIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZighbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscy5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KGhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgc2VsZltrZXldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmb3JtYXQgPyBmb3JtYXRIZWFkZXIoaGVhZGVyKSA6IFN0cmluZyhoZWFkZXIpLnRyaW0oKTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZWQgIT09IGhlYWRlcikge1xuICAgICAgICBkZWxldGUgc2VsZltoZWFkZXJdO1xuICAgICAgfVxuXG4gICAgICBzZWxmW25vcm1hbGl6ZWRdID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuXG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWRdID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29uY2F0KC4uLnRhcmdldHMpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywgLi4udGFyZ2V0cyk7XG4gIH1cblxuICB0b0pTT04oYXNTdHJpbmdzKSB7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09IGZhbHNlICYmIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbJ0NvbnRlbnQtVHlwZScsICdDb250ZW50LUxlbmd0aCcsICdBY2NlcHQnLCAnQWNjZXB0LUVuY29kaW5nJywgJ1VzZXItQWdlbnQnLCAnQXV0aG9yaXphdGlvbiddKTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMucHJvdG90eXBlKTtcbnV0aWxzLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3NIZWFkZXJzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xufVxuXG51dGlscy5pbmhlcml0cyhDYW5jZWxlZEVycm9yLCBBeGlvc0Vycm9yLCB7XG4gIF9fQ0FOQ0VMX186IHRydWVcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBDYW5jZWxlZEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHBsYXRmb3JtLmlzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgICAgY29uc3QgY29va2llID0gW107XG4gICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICB9LFxuXG4gICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgICAgfSxcblxuICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUobmFtZSkge1xuICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgICAgfVxuICAgIH07XG4gIH0pKCkgOlxuXG4vLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgfTtcbiAgfSkoKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IGlzQWJzb2x1dGVVUkwgZnJvbSAnLi4vaGVscGVycy9pc0Fic29sdXRlVVJMLmpzJztcbmltcG9ydCBjb21iaW5lVVJMcyBmcm9tICcuLi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5pc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbi8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgY29uc3QgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgY29uc3QgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGV0IG9yaWdpblVSTDtcblxuICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXQncyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4vLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IGNvb2tpZXMgZnJvbSAnLi8uLi9oZWxwZXJzL2Nvb2tpZXMuanMnO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gJy4vLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuLi9jb3JlL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IGlzVVJMU2FtZU9yaWdpbiBmcm9tICcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uYWxEZWZhdWx0cyBmcm9tICcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBwYXJzZVByb3RvY29sIGZyb20gJy4uL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5pbXBvcnQgc3BlZWRvbWV0ZXIgZnJvbSAnLi4vaGVscGVycy9zcGVlZG9tZXRlci5qcyc7XG5cbmZ1bmN0aW9uIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGxpc3RlbmVyLCBpc0Rvd25sb2FkU3RyZWFtKSB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGVcbiAgICB9O1xuXG4gICAgZGF0YVtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXSA9IHRydWU7XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfTtcbn1cblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxuZXhwb3J0IGRlZmF1bHQgaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBjb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGNvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBjb25zdCByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKHJlcXVlc3REYXRhKSAmJiAocGxhdGZvcm0uaXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpKSB7XG4gICAgICByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShmYWxzZSk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgY29uc3QgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIGNvbnN0IHBhc3N3b3JkID0gY29uZmlnLmF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoY29uZmlnLmF1dGgucGFzc3dvcmQpKSA6ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgKyBidG9hKHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQpKTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuXG4gICAgcmVxdWVzdC5vcGVuKGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IGNvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShcbiAgICAgICAgJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCAmJiByZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gIXJlc3BvbnNlVHlwZSB8fCByZXNwb25zZVR5cGUgPT09ICd0ZXh0JyB8fCByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcXVlc3Quc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cbiAgICBpZiAocGxhdGZvcm0uaXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgY29uc3QgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGZ1bGxQYXRoKSlcbiAgICAgICAgJiYgY29uZmlnLnhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzLnNldChjb25maWcueHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MsIHRydWUpKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gY2FuY2VsID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4gJiYgY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IGNvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woZnVsbFBhdGgpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIHBsYXRmb3JtLnByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsImltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgaHR0cEFkYXB0ZXIgZnJvbSAnLi9odHRwLmpzJztcbmltcG9ydCB4aHJBZGFwdGVyIGZyb20gJy4veGhyLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gXCIuLi9jb3JlL0F4aW9zRXJyb3IuanNcIjtcblxuY29uc3Qga25vd25BZGFwdGVycyA9IHtcbiAgaHR0cDogaHR0cEFkYXB0ZXIsXG4gIHhocjogeGhyQWRhcHRlclxufVxuXG51dGlscy5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzLmlzQXJyYXkoYWRhcHRlcnMpID8gYWRhcHRlcnMgOiBbYWRhcHRlcnNdO1xuXG4gICAgY29uc3Qge2xlbmd0aH0gPSBhZGFwdGVycztcbiAgICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgICBsZXQgYWRhcHRlcjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGlmKChhZGFwdGVyID0gdXRpbHMuaXNTdHJpbmcobmFtZU9yQWRhcHRlcikgPyBrbm93bkFkYXB0ZXJzW25hbWVPckFkYXB0ZXIudG9Mb3dlckNhc2UoKV0gOiBuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcbiAgICAgIGlmIChhZGFwdGVyID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICBgQWRhcHRlciAke25hbWVPckFkYXB0ZXJ9IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50YCxcbiAgICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIHV0aWxzLmhhc093blByb3Aoa25vd25BZGFwdGVycywgbmFtZU9yQWRhcHRlcikgP1xuICAgICAgICAgIGBBZGFwdGVyICcke25hbWVPckFkYXB0ZXJ9JyBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZGAgOlxuICAgICAgICAgIGBVbmtub3duIGFkYXB0ZXIgJyR7bmFtZU9yQWRhcHRlcn0nYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXV0aWxzLmlzRnVuY3Rpb24oYWRhcHRlcikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FkYXB0ZXIgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRyYW5zZm9ybURhdGEgZnJvbSAnLi90cmFuc2Zvcm1EYXRhLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gXCIuLi9hZGFwdGVycy9hZGFwdGVycy5qc1wiO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi9BeGlvc0hlYWRlcnMuanNcIjtcblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyA/IHRoaW5nLnRvSlNPTigpIDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiKSA9PiBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoY29uZmlnMSkuY29uY2F0KE9iamVjdC5rZXlzKGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG4iLCJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMS4zLjRcIjsiLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi4vZW52L2RhdGEuanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9yc1t0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgYnVpbGRVUkwgZnJvbSAnLi4vaGVscGVycy9idWlsZFVSTC5qcyc7XG5pbXBvcnQgSW50ZXJjZXB0b3JNYW5hZ2VyIGZyb20gJy4vSW50ZXJjZXB0b3JNYW5hZ2VyLmpzJztcbmltcG9ydCBkaXNwYXRjaFJlcXVlc3QgZnJvbSAnLi9kaXNwYXRjaFJlcXVlc3QuanMnO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gJy4vbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAnLi4vaGVscGVycy92YWxpZGF0b3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuL0F4aW9zSGVhZGVycy5qcyc7XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICAgIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICAgIH1cblxuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCB7dHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgIH0sIHRydWUpO1xuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzLm1lcmdlKFxuICAgICAgaGVhZGVycy5jb21tb24sXG4gICAgICBoZWFkZXJzW2NvbmZpZy5tZXRob2RdXG4gICAgKTtcblxuICAgIGNvbnRleHRIZWFkZXJzICYmIHV0aWxzLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4vQ2FuY2VsZWRFcnJvci5qcyc7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuIiwiY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn07XG5cbk9iamVjdC5lbnRyaWVzKEh0dHBTdGF0dXNDb2RlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGVbdmFsdWVdID0ga2V5O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBTdGF0dXNDb2RlO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscy5qcyc7XG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5pbXBvcnQgQXhpb3MgZnJvbSAnLi9jb3JlL0F4aW9zLmpzJztcbmltcG9ydCBtZXJnZUNvbmZpZyBmcm9tICcuL2NvcmUvbWVyZ2VDb25maWcuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4vaGVscGVycy9mb3JtRGF0YVRvSlNPTi5qcyc7XG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBDYW5jZWxUb2tlbiBmcm9tICcuL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyc7XG5pbXBvcnQgaXNDYW5jZWwgZnJvbSAnLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuL2Vudi9kYXRhLmpzJztcbmltcG9ydCB0b0Zvcm1EYXRhIGZyb20gJy4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBzcHJlYWQgZnJvbSAnLi9oZWxwZXJzL3NwcmVhZC5qcyc7XG5pbXBvcnQgaXNBeGlvc0Vycm9yIGZyb20gJy4vaGVscGVycy9pc0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IEh0dHBTdGF0dXNDb2RlIGZyb20gJy4vaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBiaW5kKEF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIEF4aW9zLnByb3RvdHlwZSwgY29udGV4dCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycztcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzLmlzSFRNTEZvcm0odGhpbmcpID8gbmV3IEZvcm1EYXRhKHRoaW5nKSA6IHRoaW5nKTtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG4vLyB0aGlzIG1vZHVsZSBzaG91bGQgb25seSBoYXZlIGEgZGVmYXVsdCBleHBvcnRcbmV4cG9ydCBkZWZhdWx0IGF4aW9zXG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xubGV0IGdsb2JhbEFueSA9IHt9O1xudHJ5IHtcbiAgZ2xvYmFsQW55ID0gd2luZG93O1xufSBjYXRjaCAoZXJyb3IpIHtcbiAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBSZWZlcmVuY2VFcnJvcikpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfSBlbHNlIHtcbiAgICBnbG9iYWxBbnkgPSB7XG4gICAgICBpc09uU2VydmVyOiB0cnVlXG4gICAgfTtcbiAgfVxufSBmaW5hbGx5IHtcbiAgaWYgKCFnbG9iYWxBbnkpIHtcbiAgICBnbG9iYWxBbnkgPSB7XG4gICAgICBpc09uU2VydmVyOiB0cnVlXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFR5cGUgb2YgYW4gW2F4aW9zIHJlcXVlc3Rde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcy9ibG9iL21hc3Rlci9pbmRleC5kLnRzI0w0M31cbiAqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBeGlvc1JlcXVlc3RDb25maWdcbiAqIEBhbGlhcyBBeGlvc1JlcXVlc3RDb25maWdcbiAqIEBtZW1iZXJvZiBBcGlDbGllbnRcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zL2Jsb2IvbWFzdGVyL2luZGV4LmQudHMjTDQzXG4gKi9cblxuY29uc3QgY2hlY2tSZXNwb25zZSA9IHJlc3BvbnNlID0+IHtcbiAgaWYgKGdsb2JhbEFueS5pc09uU2VydmVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGxvZ2luVXJsID0gW2dsb2JhbEFueS5sb2NhdGlvbi5vcmlnaW4sIGdsb2JhbEFueS5SRURVWF9TVEFURS5wYXRocy5sb2dpblBhdGhdLmpvaW4oJycpO1xuICAvLyBpZiByZXNwb25zZSBoYXMgcmVkaXJlY3QgdG8gbG9naW5VcmxcbiAgaWYgKHJlc3BvbnNlLnJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVzcG9uc2UucmVxdWVzdC5yZXNwb25zZVVSTC5tYXRjaChsb2dpblVybCkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYsIG5vLWFsZXJ0XG4gICAgYWxlcnQoJ1lvdXIgc2Vzc2lvbiBleHBpcmVkLiBZb3Ugd2lsbCBiZSByZWRpcmVjdGVkIHRvIGxvZ2luIHNjcmVlbicpO1xuICAgIGdsb2JhbEFueS5sb2NhdGlvbi5hc3NpZ24obG9naW5VcmwpO1xuICB9XG59O1xuXG4vKipcbiAqIEV4dGVuZHMge0BsaW5rIEF4aW9zUmVxdWVzdENvbmZpZ31cbiAqXG4gKiBAYWxpYXMgQWN0aW9uQVBJUGFyYW1zXG4gKiBAbWVtYmVyb2YgQXBpQ2xpZW50XG4gKiBAcHJvcGVydHkge2FueX0gICAuLi4gICAgYW55IHByb3BlcnR5IHN1cHBvcnRlZCBieSB7QGxpbmsgQXhpb3NSZXF1ZXN0Q29uZmlnfVxuICovXG5cbi8qKlxuICogRXh0ZW5kcyB7QGxpbmsgQWN0aW9uQVBJUGFyYW1zfVxuICpcbiAqIEBhbGlhcyBSZXNvdXJjZUFjdGlvbkFQSVBhcmFtc1xuICogQG1lbWJlcm9mIEFwaUNsaWVudFxuICogQHByb3BlcnR5IHthbnl9ICAgLi4uICAgIGFueSBwcm9wZXJ0eSBzdXBwb3J0ZWQgYnkge0BsaW5rIEF4aW9zUmVxdWVzdENvbmZpZ31cbiAqL1xuXG4vKipcbiAqIEV4dGVuZHMge0BsaW5rIEFjdGlvbkFQSVBhcmFtc31cbiAqXG4gKiBAYWxpYXMgUmVjb3JkQWN0aW9uQVBJUGFyYW1zXG4gKiBAbWVtYmVyb2YgQXBpQ2xpZW50XG4gKiBAcHJvcGVydHkge2FueX0gICAuLi4gICAgYW55IHByb3BlcnR5IHN1cHBvcnRlZCBieSB7QGxpbmsgQWN0aW9uQVBJUGFyYW1zfVxuICovXG5cbi8qKlxuICogRXh0ZW5kcyB7QGxpbmsgQWN0aW9uQVBJUGFyYW1zfVxuICpcbiAqIEBhbGlhcyBCdWxrQWN0aW9uQVBJUGFyYW1zXG4gKiBAbWVtYmVyb2YgQXBpQ2xpZW50XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcy9ibG9iL21hc3Rlci9pbmRleC5kLnRzI0w0M1xuICogQHByb3BlcnR5IHthbnl9ICAgLi4uICAgIGFueSBwcm9wZXJ0eSBzdXBwb3J0ZWQgYnkge0BsaW5rIEFjdGlvbkFQSVBhcmFtc31cbiAqL1xuXG4vKipcbiAqIEV4dGVuZHMge0BsaW5rIEF4aW9zUmVxdWVzdENvbmZpZ31cbiAqXG4gKiBAYWxpYXMgR2V0UGFnZUFQSVBhcmFtc1xuICogQG1lbWJlcm9mIEFwaUNsaWVudFxuICogQHByb3BlcnR5IHthbnl9ICAgLi4uICAgIGFueSBwcm9wZXJ0eSBzdXBwb3J0ZWQgYnkge0BsaW5rIEF4aW9zUmVxdWVzdENvbmZpZ31cbiAqL1xuXG4vKipcbiAqIENsaWVudCB3aGljaCBhY2Nlc3MgdGhlIGFkbWluIEFQSS5cbiAqIFVzZSBpdCB0byBmZXRjaCBkYXRhIGZyb20gYXV0byBnZW5lcmF0ZWQgQWRtaW5KUyBBUEkuXG4gKlxuICogSW4gdGhlIGJhY2tlbmQgaXQgdXNlcyBbYXhpb3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvcykgY2xpZW50XG4gKiBsaWJyYXJ5LlxuICpcbiAqIFVzYWdlOlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgQXBpQ2xpZW50IH0gZnJvbSAnYWRtaW5qcydcbiAqXG4gKiBjb25zdCBhcGkgPSBuZXcgQXBpQ2xpZW50KClcbiAqIC8vIGZldGNoaW5nIGFsbCByZWNvcmRzXG4gKiBhcGkucmVzb3VyY2VBY3Rpb24oeyByZXNvdXJjZUlkOiAnQ29tbWVudHMnLCBhY3Rpb25OYW1lOiAnbGlzdCcgfSkudGhlbihyZXN1bHRzID0+IHsuLi59KVxuICogYGBgXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9heGlvcy9heGlvc1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICovXG5jbGFzcyBBcGlDbGllbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJhc2VVUkwgPSBBcGlDbGllbnQuZ2V0QmFzZVVybCgpO1xuICAgIHRoaXMuY2xpZW50ID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IHRoaXMuYmFzZVVSTFxuICAgIH0pO1xuICB9XG4gIHN0YXRpYyBnZXRCYXNlVXJsKCkge1xuICAgIGlmIChnbG9iYWxBbnkuaXNPblNlcnZlcikge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gW2dsb2JhbEFueS5sb2NhdGlvbi5vcmlnaW4sIGdsb2JhbEFueS5SRURVWF9TVEFURT8ucGF0aHMucm9vdFBhdGhdLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBieSBxdWVyeSBzdHJpbmcgZm9yIHJlY29yZHMgaW4gYSBnaXZlbiByZXNvdXJjZS5cbiAgICpcbiAgICogQHBhcmFtICAge09iamVjdH0gIG9wdGlvbnNcbiAgICogQHBhcmFtICAge1N0cmluZ30gIG9wdGlvbnMucmVzb3VyY2VJZCAgICAgaWQgb2YgYSB7QGxpbmsgUmVzb3VyY2VKU09OfVxuICAgKiBAcGFyYW0gICB7U3RyaW5nfSAgb3B0aW9ucy5xdWVyeSAgICAgICAgICBxdWVyeSBzdHJpbmdcbiAgICogQHBhcmFtICAge1N0cmluZ30gIG9wdGlvbnMuc2VhcmNoUHJvcGVydHkgb3B0aW9uYWwgcHJvcGVydHkgbmFtZVxuICAgKlxuICAgKiBAcmV0dXJuICB7UHJvbWlzZTxTZWFyY2hSZXNwb25zZT59XG4gICAqL1xuICBhc3luYyBzZWFyY2hSZWNvcmRzKHtcbiAgICByZXNvdXJjZUlkLFxuICAgIHF1ZXJ5LFxuICAgIHNlYXJjaFByb3BlcnR5XG4gIH0pIHtcbiAgICBpZiAoZ2xvYmFsQW55LmlzT25TZXJ2ZXIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgYWN0aW9uTmFtZSA9ICdzZWFyY2gnO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXNvdXJjZUFjdGlvbih7XG4gICAgICByZXNvdXJjZUlkLFxuICAgICAgYWN0aW9uTmFtZSxcbiAgICAgIHF1ZXJ5LFxuICAgICAgLi4uKHNlYXJjaFByb3BlcnR5ID8ge1xuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBzZWFyY2hQcm9wZXJ0eVxuICAgICAgICB9XG4gICAgICB9IDogdW5kZWZpbmVkKVxuICAgIH0pO1xuICAgIGNoZWNrUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhLnJlY29yZHM7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlcyBnaXZlbiByZXNvdXJjZSB7QGxpbmsgQWN0aW9ufSBvbiB0aGUgYmFja2VuZC5cbiAgICpcbiAgICogQHBhcmFtICAge1Jlc291cmNlQWN0aW9uQVBJUGFyYW1zfSAgICAgb3B0aW9uc1xuICAgKiBAcmV0dXJuICB7UHJvbWlzZTxBY3Rpb25SZXNwb25zZT59ICAgICByZXNwb25zZSBmcm9tIGFuIHtAbGluayBBY3Rpb259XG4gICAqL1xuICBhc3luYyByZXNvdXJjZUFjdGlvbihvcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgcmVzb3VyY2VJZCxcbiAgICAgIGFjdGlvbk5hbWUsXG4gICAgICBkYXRhLFxuICAgICAgcXVlcnksXG4gICAgICAuLi5heGlvc1BhcmFtc1xuICAgIH0gPSBvcHRpb25zO1xuICAgIGxldCB1cmwgPSBgL2FwaS9yZXNvdXJjZXMvJHtyZXNvdXJjZUlkfS9hY3Rpb25zLyR7YWN0aW9uTmFtZX1gO1xuICAgIGlmIChxdWVyeSkge1xuICAgICAgY29uc3QgcSA9IGVuY29kZVVSSUNvbXBvbmVudChxdWVyeSk7XG4gICAgICB1cmwgPSBbdXJsLCBxXS5qb2luKCcvJyk7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucmVxdWVzdCh7XG4gICAgICB1cmwsXG4gICAgICBtZXRob2Q6IGRhdGEgPyAnUE9TVCcgOiAnR0VUJyxcbiAgICAgIC4uLmF4aW9zUGFyYW1zLFxuICAgICAgZGF0YVxuICAgIH0pO1xuICAgIGNoZWNrUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2VzIGdpdmVuIHJlY29yZCB7QGxpbmsgQWN0aW9ufSBvbiB0aGUgYmFja2VuZC5cbiAgICpcbiAgICogQHBhcmFtICAge1JlY29yZEFjdGlvbkFQSVBhcmFtc30gb3B0aW9uc1xuICAgKiBAcmV0dXJuICB7UHJvbWlzZTxSZWNvcmRBY3Rpb25SZXNwb25zZT59ICAgICAgICAgICAgcmVzcG9uc2UgZnJvbSBhbiB7QGxpbmsgQWN0aW9ufVxuICAgKi9cbiAgYXN5bmMgcmVjb3JkQWN0aW9uKG9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICByZXNvdXJjZUlkLFxuICAgICAgcmVjb3JkSWQsXG4gICAgICBhY3Rpb25OYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIC4uLmF4aW9zUGFyYW1zXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXF1ZXN0KHtcbiAgICAgIHVybDogYC9hcGkvcmVzb3VyY2VzLyR7cmVzb3VyY2VJZH0vcmVjb3Jkcy8ke3JlY29yZElkfS8ke2FjdGlvbk5hbWV9YCxcbiAgICAgIG1ldGhvZDogZGF0YSA/ICdQT1NUJyA6ICdHRVQnLFxuICAgICAgLi4uYXhpb3NQYXJhbXMsXG4gICAgICBkYXRhXG4gICAgfSk7XG4gICAgY2hlY2tSZXNwb25zZShyZXNwb25zZSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZXMgZ2l2ZW4gYnVsayB7QGxpbmsgQWN0aW9ufSBvbiB0aGUgYmFja2VuZC5cbiAgICpcbiAgICogQHBhcmFtICAge0J1bGtBY3Rpb25BUElQYXJhbXN9IG9wdGlvbnNcbiAgICogQHJldHVybiAge1Byb21pc2U8QnVsa0FjdGlvblJlc3BvbnNlPn0gICAgICAgICAgICByZXNwb25zZSBmcm9tIGFuIHtAbGluayBBY3Rpb259XG4gICAqL1xuICBhc3luYyBidWxrQWN0aW9uKG9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICByZXNvdXJjZUlkLFxuICAgICAgcmVjb3JkSWRzLFxuICAgICAgYWN0aW9uTmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICAuLi5heGlvc1BhcmFtc1xuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuc2V0KCdyZWNvcmRJZHMnLCAocmVjb3JkSWRzIHx8IFtdKS5qb2luKCcsJykpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucmVxdWVzdCh7XG4gICAgICB1cmw6IGAvYXBpL3Jlc291cmNlcy8ke3Jlc291cmNlSWR9L2J1bGsvJHthY3Rpb25OYW1lfWAsXG4gICAgICBtZXRob2Q6IGRhdGEgPyAnUE9TVCcgOiAnR0VUJyxcbiAgICAgIC4uLmF4aW9zUGFyYW1zLFxuICAgICAgZGF0YSxcbiAgICAgIHBhcmFtc1xuICAgIH0pO1xuICAgIGNoZWNrUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2VzIGRhc2hib2FyZCBoYW5kbGVyLlxuICAgKlxuICAgKiBAcGFyYW0gICB7QXhpb3NSZXF1ZXN0Q29uZmlnfSAgICAgICBvcHRpb25zXG4gICAqIEByZXR1cm4gIHtQcm9taXNlPEF4aW9zUmVzcG9uc2U8YW55Pj59IHJlc3BvbnNlIGZyb20gdGhlIGhhbmRsZXIgZnVuY3Rpb24gZGVmaW5lZCBpblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QGxpbmsgQWRtaW5KU09wdGlvbnMjZGFzaGJvYXJkfVxuICAgKi9cbiAgYXN5bmMgZ2V0RGFzaGJvYXJkKG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0KCcvYXBpL2Rhc2hib2FyZCcsIG9wdGlvbnMpO1xuICAgIGNoZWNrUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2VzIGhhbmRsZXIgZnVuY3Rpb24gb2YgZ2l2ZW4gcGFnZSBhbmQgcmV0dXJucyBpdHMgcmVzcG9uc2UuXG4gICAqXG4gICAqIEBwYXJhbSAgIHtHZXRQYWdlQVBJUGFyYW1zfSAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAqIEByZXR1cm4gIHtQcm9taXNlPEF4aW9zUmVzcG9uc2U8YW55Pj59ICAgICByZXNwb25zZSBmcm9tIHRoZSBoYW5kbGVyIG9mIGdpdmVuIHBhZ2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgaW4ge0BsaW5rIEFkbWluSlNPcHRpb25zI3BhZ2VzfVxuICAgKi9cbiAgYXN5bmMgZ2V0UGFnZShvcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgcGFnZU5hbWUsXG4gICAgICAuLi5heGlvc1BhcmFtc1xuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQucmVxdWVzdCh7XG4gICAgICB1cmw6IGAvYXBpL3BhZ2VzLyR7cGFnZU5hbWV9YCxcbiAgICAgIC4uLmF4aW9zUGFyYW1zXG4gICAgfSk7XG4gICAgY2hlY2tSZXNwb25zZShyZXNwb25zZSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG4gIGFzeW5jIHJlZnJlc2hUb2tlbihkYXRhKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXF1ZXN0KHtcbiAgICAgIHVybDogJy9yZWZyZXNoLXRva2VuJyxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgZGF0YVxuICAgIH0pO1xuICAgIGNoZWNrUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgIHJldHVybiByZXNwb25zZTtcbiAgfVxufVxuZXhwb3J0IHsgQXBpQ2xpZW50IGFzIGRlZmF1bHQsIEFwaUNsaWVudCB9OyIsIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRhQ3NzID0gKC4uLmFyZ3MpID0+IGFyZ3Muam9pbignLScpO1xuZXhwb3J0IGNvbnN0IGdldFJlc291cmNlRWxlbWVudENzcyA9IChyZXNvdXJjZUlkLCBzdWZmaXgpID0+IGdldERhdGFDc3MocmVzb3VyY2VJZCwgc3VmZml4KTtcbmV4cG9ydCBjb25zdCBnZXRBY3Rpb25FbGVtZW50Q3NzID0gKHJlc291cmNlSWQsIGFjdGlvbk5hbWUsIHN1ZmZpeCkgPT4gZ2V0RGF0YUNzcyhyZXNvdXJjZUlkLCBhY3Rpb25OYW1lLCBzdWZmaXgpOyIsImltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IGFwaSA9IG5ldyBBcGlDbGllbnQoKTtcbmV4cG9ydCBmdW5jdGlvbiBjYWxsQWN0aW9uQXBpKGFjdGlvbiwgcGFyYW1zLCBzZWFyY2gpIHtcbiAgbGV0IHByb21pc2U7XG4gIGNvbnN0IHtcbiAgICByZWNvcmRJZCxcbiAgICByZWNvcmRJZHMsXG4gICAgcmVzb3VyY2VJZFxuICB9ID0gcGFyYW1zO1xuXG4gIC8qIFRlbXBvcmFyeSB3b3JrYXJvdW5kIHRvIGF2b2lkIGJyZWFraW5nIGNoYW5nZXMuXG4gICAgVE9ETzogRm9yIHY4IHJlbGVhc2UsIHJld3JpdGUgYWN0aW9ucyB0byBzdXBwb3J0IFBVVCAmIERFTEVURSBtZXRob2RzLlxuICAgIEFjdGlvbnMgc2hvdWxkIGhhdmUgYW4gb3B0aW9uIHRvIGNvbmZpZ3VyZSBhIGRlZmF1bHQgbWV0aG9kIGZvciBhY3Rpb24gYnV0dG9ucy4gKi9cbiAgbGV0IG1ldGhvZCA9ICdnZXQnO1xuICBpZiAoYWN0aW9uLm5hbWUgPT09ICdkZWxldGUnKSB7XG4gICAgbWV0aG9kID0gJ3Bvc3QnO1xuICB9XG4gIHN3aXRjaCAoYWN0aW9uLmFjdGlvblR5cGUpIHtcbiAgICBjYXNlICdyZWNvcmQnOlxuICAgICAgaWYgKCFyZWNvcmRJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHRvIHNwZWNpZnkgXCJyZWNvcmRJZFwiIGZvciByZWNvcmQgYWN0aW9uJyk7XG4gICAgICB9XG4gICAgICBwcm9taXNlID0gYXBpLnJlY29yZEFjdGlvbih7XG4gICAgICAgIHJlc291cmNlSWQsXG4gICAgICAgIGFjdGlvbk5hbWU6IGFjdGlvbi5uYW1lLFxuICAgICAgICByZWNvcmRJZCxcbiAgICAgICAgc2VhcmNoLFxuICAgICAgICBtZXRob2RcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmVzb3VyY2UnOlxuICAgICAgcHJvbWlzZSA9IGFwaS5yZXNvdXJjZUFjdGlvbih7XG4gICAgICAgIHJlc291cmNlSWQsXG4gICAgICAgIGFjdGlvbk5hbWU6IGFjdGlvbi5uYW1lLFxuICAgICAgICBtZXRob2RcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnYnVsayc6XG4gICAgICBpZiAoIXJlY29yZElkcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHRvIHNwZWNpZnkgXCJyZWNvcmRJZHNcIiBmb3IgYnVsayBhY3Rpb24nKTtcbiAgICAgIH1cbiAgICAgIHByb21pc2UgPSBhcGkuYnVsa0FjdGlvbih7XG4gICAgICAgIHJlc291cmNlSWQsXG4gICAgICAgIGFjdGlvbk5hbWU6IGFjdGlvbi5uYW1lLFxuICAgICAgICByZWNvcmRJZHMsXG4gICAgICAgIHNlYXJjaCxcbiAgICAgICAgbWV0aG9kXG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiYWN0aW9uVHlwZVwiIHNob3VsZCBiZSBlaXRoZXIgcmVjb3JkLCByZXNvdXJjZSBvciBidWxrJyk7XG4gIH1cbiAgcmV0dXJuIHByb21pc2U7XG59IiwiLyogZXNsaW50LWRpc2FibGUgYXJyb3ctcGFyZW5zICovXG5cbmltcG9ydCB7IGNhbGxBY3Rpb25BcGkgfSBmcm9tICcuL2NhbGwtYWN0aW9uLWFwaS5qcyc7XG5leHBvcnQgY29uc3QgYnVpbGRBY3Rpb25DYWxsQXBpVHJpZ2dlciA9IG9wdGlvbnMgPT4ge1xuICBjb25zdCB7XG4gICAgYWN0aW9uLFxuICAgIHBhcmFtcyxcbiAgICBhY3Rpb25SZXNwb25zZUhhbmRsZXIsXG4gICAgc2VhcmNoXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBjYWxsQXBpID0gKCkgPT4ge1xuICAgIGNvbnN0IHByb21pc2UgPSBjYWxsQWN0aW9uQXBpKGFjdGlvbiwgcGFyYW1zLCBzZWFyY2gpO1xuICAgIHByb21pc2UudGhlbihhY3Rpb25SZXNwb25zZUhhbmRsZXIpLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuICByZXR1cm4gY2FsbEFwaTtcbn07IiwiZXhwb3J0IGNvbnN0IGJ1aWxkQWN0aW9uVGVzdElkID0gYWN0aW9uID0+IGBhY3Rpb24tJHthY3Rpb24ubmFtZX1gOyIsImV4cG9ydCBjb25zdCBSRUZSRVNIX0tFWSA9ICdyZWZyZXNoJztcbmV4cG9ydCBjb25zdCBJR05PUkVfUEFSQU1TX0tFWSA9ICdpZ25vcmVfcGFyYW1zJztcblxuLyoqXG4gKiBBZGRzIHJlZnJlc2g9dHJ1ZSB0byB0aGUgdXJsLCB3aGljaCBpbiB0dXJuIHNob3VsZCBjYXVzZSBsaXN0IHRvIHJlbG9hZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsICAgICAgdXJsIHRvIHdoaWNoIGZ1bmN0aW9uIHNob3VsZCBhZGQgYHJlZnJlc2hgXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NlYXJjaF0gb3B0aW9uYWwgc2VhcmNoIHF1ZXJ5IHdoaWNoIHNob3VsZCBiZSB1cGRhdGVkLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBnaXZlbiBmdW5jdGlvbiB3aWxsIHVzZSB3aW5kb3cubG9jYXRpb24uc2VhcmNoXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgYXBwZW5kRm9yY2VSZWZyZXNoID0gKHVybCwgc2VhcmNoKSA9PiB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtc0lkeCA9IHVybC5sYXN0SW5kZXhPZignPycpO1xuICBjb25zdCB1cmxTZWFyY2hQYXJhbXMgPSBzZWFyY2hQYXJhbXNJZHggIT09IC0xID8gdXJsLnN1YnN0cmluZyhzZWFyY2hQYXJhbXNJZHggKyAxKSA6IG51bGw7XG4gIGNvbnN0IG9sZFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoID8/IHVybFNlYXJjaFBhcmFtcyA/PyB3aW5kb3cubG9jYXRpb24uc2VhcmNoID8/ICcnKTtcbiAgY29uc3Qgc2hvdWxkSWdub3JlT2xkUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh1cmxTZWFyY2hQYXJhbXMgfHwgJycpLmdldChJR05PUkVfUEFSQU1TX0tFWSkgPT09ICd0cnVlJztcbiAgY29uc3QgbmV3UGFyYW1zID0gc2hvdWxkSWdub3JlT2xkUGFyYW1zID8gbmV3IFVSTFNlYXJjaFBhcmFtcygnJykgOiBuZXcgVVJMU2VhcmNoUGFyYW1zKG9sZFBhcmFtcy50b1N0cmluZygpKTtcbiAgbmV3UGFyYW1zLnNldChSRUZSRVNIX0tFWSwgJ3RydWUnKTtcbiAgY29uc3QgbmV3VXJsID0gc2VhcmNoUGFyYW1zSWR4ICE9PSAtMSA/IHVybC5zdWJzdHJpbmcoMCwgc2VhcmNoUGFyYW1zSWR4KSA6IHVybDtcbiAgcmV0dXJuIGAke25ld1VybH0/JHtuZXdQYXJhbXMudG9TdHJpbmcoKX1gO1xufTtcbmV4cG9ydCBjb25zdCBoYXNGb3JjZVJlZnJlc2ggPSBzZWFyY2ggPT4ge1xuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHNlYXJjaCk7XG4gIHJldHVybiAhIXBhcmFtcy5nZXQoUkVGUkVTSF9LRVkpO1xufTtcbmV4cG9ydCBjb25zdCByZW1vdmVGb3JjZVJlZnJlc2ggPSBzZWFyY2ggPT4ge1xuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHNlYXJjaCk7XG4gIGlmIChwYXJhbXMuZ2V0KFJFRlJFU0hfS0VZKSkge1xuICAgIHBhcmFtcy5kZWxldGUoUkVGUkVTSF9LRVkpO1xuICB9XG4gIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbn07IiwiLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYWxlcnQgKi9cblxuaW1wb3J0IHsgYWN0aW9uSGFzRGlzYWJsZWRDb21wb25lbnQgfSBmcm9tICcuL2FjdGlvbi1oYXMtY29tcG9uZW50LmpzJztcbmltcG9ydCB7IGFjdGlvbkhyZWYgfSBmcm9tICcuL2FjdGlvbi1ocmVmLmpzJztcbmltcG9ydCB7IGJ1aWxkQWN0aW9uQ2FsbEFwaVRyaWdnZXIgfSBmcm9tICcuL2J1aWxkLWFjdGlvbi1hcGktY2FsbC10cmlnZ2VyLmpzJztcbmltcG9ydCB7IFJFRlJFU0hfS0VZIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hY3Rpb25zL3V0aWxzL2FwcGVuZC1mb3JjZS1yZWZyZXNoLmpzJztcbmV4cG9ydCBjb25zdCBidWlsZEFjdGlvbkNsaWNrSGFuZGxlciA9IG9wdGlvbnMgPT4ge1xuICBjb25zdCB7XG4gICAgYWN0aW9uLFxuICAgIHBhcmFtcyxcbiAgICBhY3Rpb25SZXNwb25zZUhhbmRsZXIsXG4gICAgbmF2aWdhdGUsXG4gICAgbW9kYWxGdW5jdGlvbnMsXG4gICAgbG9jYXRpb25cbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHtcbiAgICBvcGVuTW9kYWxcbiAgfSA9IG1vZGFsRnVuY3Rpb25zO1xuICBjb25zdCBoYW5kbGVBY3Rpb25DbGljayA9IGV2ZW50ID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGhyZWYgPSBhY3Rpb25IcmVmKGFjdGlvbiwgcGFyYW1zKTtcbiAgICBjb25zdCBjYWxsQXBpID0gYnVpbGRBY3Rpb25DYWxsQXBpVHJpZ2dlcih7XG4gICAgICBwYXJhbXMsXG4gICAgICBhY3Rpb24sXG4gICAgICBhY3Rpb25SZXNwb25zZUhhbmRsZXJcbiAgICB9KTtcblxuICAgIC8vIEFjdGlvbiBoYXMgXCJjb21wb25lbnRcIiBvcHRpb24gc2V0IHRvIFwiZmFsc2VcIiBleHBsaWNpdGx5IGluIGl0J3MgY29uZmlndXJhdGlvblxuICAgIGlmIChhY3Rpb25IYXNEaXNhYmxlZENvbXBvbmVudChhY3Rpb24pKSB7XG4gICAgICBpZiAoYWN0aW9uLmd1YXJkKSB7XG4gICAgICAgIGNvbnN0IG1vZGFsRGF0YSA9IHtcbiAgICAgICAgICBtb2RhbFByb3BzOiB7XG4gICAgICAgICAgICB2YXJpYW50OiAnZGFuZ2VyJyxcbiAgICAgICAgICAgIGxhYmVsOiAnY29uZmlybScsXG4gICAgICAgICAgICB0aXRsZTogYWN0aW9uLmd1YXJkLFxuICAgICAgICAgICAgc3ViVGl0bGU6ICcnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICAgICAgcmVzb3VyY2VJZDogcGFyYW1zLnJlc291cmNlSWQsXG4gICAgICAgICAgY29uZmlybUFjdGlvbjogY2FsbEFwaVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIElmIGNvbmZpcm1hdGlvbiBpcyByZXF1aXJlZCwgYWN0aW9uIHRyaWdnZXIgc2hvdWxkIGJlIGhhbmRsZWQgaW4gbW9kYWxcbiAgICAgICAgb3Blbk1vZGFsKG1vZGFsRGF0YSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgbm8gY29uZmlybWF0aW9uIGlzIHJlcXVpcmVkLCBjYWxsIEFQSVxuICAgICAgY2FsbEFwaSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3VyIC0geW91J3JlIG5hdmlnYXRlZCB0byBhY3Rpb24gVVJMIGFuZCBsb2dpYyBpcyBwZXJmb3JtZWQgb24gaXQncyByb3V0ZVxuICAgIGlmIChocmVmKSB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGByZWxhdGl2ZToke2hyZWZ9YCk7XG4gICAgICBjb25zdCBocmVmUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh1cmwuc2VhcmNoKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGFjdGlvbi5zaG93SW5EcmF3ZXIgPyBsb2NhdGlvbj8uc2VhcmNoID8/ICcnIDogJycpO1xuICAgICAgT2JqZWN0LmVudHJpZXMoT2JqZWN0LmZyb21FbnRyaWVzKGN1cnJlbnRQYXJhbXMuZW50cmllcygpKSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGlmICghaHJlZlBhcmFtcy5oYXMoa2V5KSkgaHJlZlBhcmFtcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChsb2NhdGlvbj8ucGF0aG5hbWUgPT09IHVybC5wYXRobmFtZSkge1xuICAgICAgICBocmVmUGFyYW1zLnNldChSRUZSRVNIX0tFWSwgJ3RydWUnKTtcbiAgICAgIH1cbiAgICAgIG5hdmlnYXRlKHtcbiAgICAgICAgcGF0aG5hbWU6IHVybC5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoOiBocmVmUGFyYW1zLnRvU3RyaW5nKClcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGhhbmRsZUFjdGlvbkNsaWNrO1xufTsiLCJleHBvcnQgY29uc3QgaXNCdWxrQWN0aW9uID0gKHBhcmFtcywgYWN0aW9uKSA9PiAncmVjb3JkSWRzJyBpbiBwYXJhbXMgJiYgYWN0aW9uLmFjdGlvblR5cGUgPT09ICdidWxrJzsiLCJleHBvcnQgY29uc3QgaXNSZXNvdXJjZUFjdGlvbiA9IChwYXJhbXMsIGFjdGlvbikgPT4gJ3JlY29yZElkcycgaW4gcGFyYW1zICYmIGFjdGlvbi5hY3Rpb25UeXBlID09PSAncmVzb3VyY2UnOyIsImV4cG9ydCBjb25zdCBpc1JlY29yZEFjdGlvbiA9IChwYXJhbXMsIGFjdGlvbikgPT4gJ3JlY29yZElkJyBpbiBwYXJhbXMgJiYgYWN0aW9uLmFjdGlvblR5cGUgPT09ICdyZWNvcmQnOyIsImV4cG9ydCBjb25zdCBBRERfTk9USUNFID0gJ0FERF9OT1RJQ0UnO1xuZXhwb3J0IGNvbnN0IGFkZE5vdGljZSA9IGRhdGEgPT4gKHtcbiAgdHlwZTogQUREX05PVElDRSxcbiAgZGF0YToge1xuICAgIGlkOiBgbm90aWNlLSR7RGF0ZS5ub3coKSArIE1hdGgucmFuZG9tKCl9YCxcbiAgICBwcm9ncmVzczogMCxcbiAgICAuLi5kYXRhXG4gIH1cbn0pOyIsImltcG9ydCB7IHVzZURpc3BhdGNoIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgYWRkTm90aWNlIH0gZnJvbSAnLi4vc3RvcmUvYWN0aW9ucy9hZGQtbm90aWNlLmpzJztcblxuLyoqXG4gKiBAbWVtYmVyb2YgdXNlTm90aWNlXG4gKiBAYWxpYXMgQWRkTm90aWNlXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKiBIb29rIHdoaWNoIGFsbG93cyB5b3UgdG8gYWRkIG5vdGljZSBtZXNzYWdlIHRvIHRoZSBhcHAuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgdXNlTm90aWNlLCBCdXR0b24gfSBmcm9tICdhZG1pbmpzJ1xuICpcbiAqIGNvbnN0IG15Q29tcG9uZW50ID0gKCkgPT4ge1xuICogICBjb25zdCBzZW5kTm90aWNlID0gdXNlTm90aWNlKClcbiAqICAgcmV0dXJuIChcbiAqICAgICA8QnV0dG9uIG9uQ2xpY2s9eygpID0+IHNlbmROb3RpY2UoeyBtZXNzYWdlOiAnSSBhbSBhd2Vzb21lJyB9KX0+SSBhbSBhd2Vzb21lPC9CdXR0b24+XG4gKiAgIClcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBjbGFzc1xuICogQHN1YmNhdGVnb3J5IEhvb2tzXG4gKiBAYnVuZGxlXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VOb3RpY2UgPSAoKSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgcmV0dXJuIG5vdGljZSA9PiBkaXNwYXRjaChhZGROb3RpY2Uobm90aWNlKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlTm90aWNlOyIsIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZSAqL1xuaW1wb3J0IHsgdXNlTmF2aWdhdGUsIHVzZUxvY2F0aW9uIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCB7IGFwcGVuZEZvcmNlUmVmcmVzaCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYWN0aW9ucy91dGlscy9hcHBlbmQtZm9yY2UtcmVmcmVzaC5qcyc7XG5pbXBvcnQgeyB1c2VOb3RpY2UgfSBmcm9tICcuLi91c2Utbm90aWNlLmpzJztcbmV4cG9ydCBjb25zdCB1c2VBY3Rpb25SZXNwb25zZUhhbmRsZXIgPSBvbkFjdGlvbkNhbGwgPT4ge1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgY29uc3QgYWRkTm90aWNlID0gdXNlTm90aWNlKCk7XG4gIHJldHVybiByZXNwb25zZSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YVxuICAgIH0gPSByZXNwb25zZTtcbiAgICBpZiAoZGF0YS5ub3RpY2UpIHtcbiAgICAgIGFkZE5vdGljZShkYXRhLm5vdGljZSk7XG4gICAgfVxuICAgIGlmIChkYXRhLnJlZGlyZWN0VXJsICYmIGxvY2F0aW9uLnBhdGhuYW1lICE9PSBkYXRhLnJlZGlyZWN0VXJsKSB7XG4gICAgICBjb25zdCBhcHBlbmRlZCA9IGFwcGVuZEZvcmNlUmVmcmVzaChkYXRhLnJlZGlyZWN0VXJsKTtcbiAgICAgIG5hdmlnYXRlKGFwcGVuZGVkKTtcbiAgICB9XG4gICAgaWYgKG9uQWN0aW9uQ2FsbCkge1xuICAgICAgb25BY3Rpb25DYWxsKGRhdGEpO1xuICAgIH1cbiAgfTtcbn07IiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ucmVkdWNlYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0QWNjdW1dIFNwZWNpZnkgdXNpbmcgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YCBhc1xuICogIHRoZSBpbml0aWFsIHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICBpZiAoaW5pdEFjY3VtICYmIGxlbmd0aCkge1xuICAgIGFjY3VtdWxhdG9yID0gYXJyYXlbKytpbmRleF07XG4gIH1cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhY2N1bXVsYXRvciA9IGl0ZXJhdGVlKGFjY3VtdWxhdG9yLCBhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UmVkdWNlO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eU9mYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlPZihvYmplY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eU9mO1xuIiwidmFyIGJhc2VQcm9wZXJ0eU9mID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5T2YnKTtcblxuLyoqIFVzZWQgdG8gbWFwIExhdGluIFVuaWNvZGUgbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzLiAqL1xudmFyIGRlYnVycmVkTGV0dGVycyA9IHtcbiAgLy8gTGF0aW4tMSBTdXBwbGVtZW50IGJsb2NrLlxuICAnXFx4YzAnOiAnQScsICAnXFx4YzEnOiAnQScsICdcXHhjMic6ICdBJywgJ1xceGMzJzogJ0EnLCAnXFx4YzQnOiAnQScsICdcXHhjNSc6ICdBJyxcbiAgJ1xceGUwJzogJ2EnLCAgJ1xceGUxJzogJ2EnLCAnXFx4ZTInOiAnYScsICdcXHhlMyc6ICdhJywgJ1xceGU0JzogJ2EnLCAnXFx4ZTUnOiAnYScsXG4gICdcXHhjNyc6ICdDJywgICdcXHhlNyc6ICdjJyxcbiAgJ1xceGQwJzogJ0QnLCAgJ1xceGYwJzogJ2QnLFxuICAnXFx4YzgnOiAnRScsICAnXFx4YzknOiAnRScsICdcXHhjYSc6ICdFJywgJ1xceGNiJzogJ0UnLFxuICAnXFx4ZTgnOiAnZScsICAnXFx4ZTknOiAnZScsICdcXHhlYSc6ICdlJywgJ1xceGViJzogJ2UnLFxuICAnXFx4Y2MnOiAnSScsICAnXFx4Y2QnOiAnSScsICdcXHhjZSc6ICdJJywgJ1xceGNmJzogJ0knLFxuICAnXFx4ZWMnOiAnaScsICAnXFx4ZWQnOiAnaScsICdcXHhlZSc6ICdpJywgJ1xceGVmJzogJ2knLFxuICAnXFx4ZDEnOiAnTicsICAnXFx4ZjEnOiAnbicsXG4gICdcXHhkMic6ICdPJywgICdcXHhkMyc6ICdPJywgJ1xceGQ0JzogJ08nLCAnXFx4ZDUnOiAnTycsICdcXHhkNic6ICdPJywgJ1xceGQ4JzogJ08nLFxuICAnXFx4ZjInOiAnbycsICAnXFx4ZjMnOiAnbycsICdcXHhmNCc6ICdvJywgJ1xceGY1JzogJ28nLCAnXFx4ZjYnOiAnbycsICdcXHhmOCc6ICdvJyxcbiAgJ1xceGQ5JzogJ1UnLCAgJ1xceGRhJzogJ1UnLCAnXFx4ZGInOiAnVScsICdcXHhkYyc6ICdVJyxcbiAgJ1xceGY5JzogJ3UnLCAgJ1xceGZhJzogJ3UnLCAnXFx4ZmInOiAndScsICdcXHhmYyc6ICd1JyxcbiAgJ1xceGRkJzogJ1knLCAgJ1xceGZkJzogJ3knLCAnXFx4ZmYnOiAneScsXG4gICdcXHhjNic6ICdBZScsICdcXHhlNic6ICdhZScsXG4gICdcXHhkZSc6ICdUaCcsICdcXHhmZSc6ICd0aCcsXG4gICdcXHhkZic6ICdzcycsXG4gIC8vIExhdGluIEV4dGVuZGVkLUEgYmxvY2suXG4gICdcXHUwMTAwJzogJ0EnLCAgJ1xcdTAxMDInOiAnQScsICdcXHUwMTA0JzogJ0EnLFxuICAnXFx1MDEwMSc6ICdhJywgICdcXHUwMTAzJzogJ2EnLCAnXFx1MDEwNSc6ICdhJyxcbiAgJ1xcdTAxMDYnOiAnQycsICAnXFx1MDEwOCc6ICdDJywgJ1xcdTAxMGEnOiAnQycsICdcXHUwMTBjJzogJ0MnLFxuICAnXFx1MDEwNyc6ICdjJywgICdcXHUwMTA5JzogJ2MnLCAnXFx1MDEwYic6ICdjJywgJ1xcdTAxMGQnOiAnYycsXG4gICdcXHUwMTBlJzogJ0QnLCAgJ1xcdTAxMTAnOiAnRCcsICdcXHUwMTBmJzogJ2QnLCAnXFx1MDExMSc6ICdkJyxcbiAgJ1xcdTAxMTInOiAnRScsICAnXFx1MDExNCc6ICdFJywgJ1xcdTAxMTYnOiAnRScsICdcXHUwMTE4JzogJ0UnLCAnXFx1MDExYSc6ICdFJyxcbiAgJ1xcdTAxMTMnOiAnZScsICAnXFx1MDExNSc6ICdlJywgJ1xcdTAxMTcnOiAnZScsICdcXHUwMTE5JzogJ2UnLCAnXFx1MDExYic6ICdlJyxcbiAgJ1xcdTAxMWMnOiAnRycsICAnXFx1MDExZSc6ICdHJywgJ1xcdTAxMjAnOiAnRycsICdcXHUwMTIyJzogJ0cnLFxuICAnXFx1MDExZCc6ICdnJywgICdcXHUwMTFmJzogJ2cnLCAnXFx1MDEyMSc6ICdnJywgJ1xcdTAxMjMnOiAnZycsXG4gICdcXHUwMTI0JzogJ0gnLCAgJ1xcdTAxMjYnOiAnSCcsICdcXHUwMTI1JzogJ2gnLCAnXFx1MDEyNyc6ICdoJyxcbiAgJ1xcdTAxMjgnOiAnSScsICAnXFx1MDEyYSc6ICdJJywgJ1xcdTAxMmMnOiAnSScsICdcXHUwMTJlJzogJ0knLCAnXFx1MDEzMCc6ICdJJyxcbiAgJ1xcdTAxMjknOiAnaScsICAnXFx1MDEyYic6ICdpJywgJ1xcdTAxMmQnOiAnaScsICdcXHUwMTJmJzogJ2knLCAnXFx1MDEzMSc6ICdpJyxcbiAgJ1xcdTAxMzQnOiAnSicsICAnXFx1MDEzNSc6ICdqJyxcbiAgJ1xcdTAxMzYnOiAnSycsICAnXFx1MDEzNyc6ICdrJywgJ1xcdTAxMzgnOiAnaycsXG4gICdcXHUwMTM5JzogJ0wnLCAgJ1xcdTAxM2InOiAnTCcsICdcXHUwMTNkJzogJ0wnLCAnXFx1MDEzZic6ICdMJywgJ1xcdTAxNDEnOiAnTCcsXG4gICdcXHUwMTNhJzogJ2wnLCAgJ1xcdTAxM2MnOiAnbCcsICdcXHUwMTNlJzogJ2wnLCAnXFx1MDE0MCc6ICdsJywgJ1xcdTAxNDInOiAnbCcsXG4gICdcXHUwMTQzJzogJ04nLCAgJ1xcdTAxNDUnOiAnTicsICdcXHUwMTQ3JzogJ04nLCAnXFx1MDE0YSc6ICdOJyxcbiAgJ1xcdTAxNDQnOiAnbicsICAnXFx1MDE0Nic6ICduJywgJ1xcdTAxNDgnOiAnbicsICdcXHUwMTRiJzogJ24nLFxuICAnXFx1MDE0Yyc6ICdPJywgICdcXHUwMTRlJzogJ08nLCAnXFx1MDE1MCc6ICdPJyxcbiAgJ1xcdTAxNGQnOiAnbycsICAnXFx1MDE0Zic6ICdvJywgJ1xcdTAxNTEnOiAnbycsXG4gICdcXHUwMTU0JzogJ1InLCAgJ1xcdTAxNTYnOiAnUicsICdcXHUwMTU4JzogJ1InLFxuICAnXFx1MDE1NSc6ICdyJywgICdcXHUwMTU3JzogJ3InLCAnXFx1MDE1OSc6ICdyJyxcbiAgJ1xcdTAxNWEnOiAnUycsICAnXFx1MDE1Yyc6ICdTJywgJ1xcdTAxNWUnOiAnUycsICdcXHUwMTYwJzogJ1MnLFxuICAnXFx1MDE1Yic6ICdzJywgICdcXHUwMTVkJzogJ3MnLCAnXFx1MDE1Zic6ICdzJywgJ1xcdTAxNjEnOiAncycsXG4gICdcXHUwMTYyJzogJ1QnLCAgJ1xcdTAxNjQnOiAnVCcsICdcXHUwMTY2JzogJ1QnLFxuICAnXFx1MDE2Myc6ICd0JywgICdcXHUwMTY1JzogJ3QnLCAnXFx1MDE2Nyc6ICd0JyxcbiAgJ1xcdTAxNjgnOiAnVScsICAnXFx1MDE2YSc6ICdVJywgJ1xcdTAxNmMnOiAnVScsICdcXHUwMTZlJzogJ1UnLCAnXFx1MDE3MCc6ICdVJywgJ1xcdTAxNzInOiAnVScsXG4gICdcXHUwMTY5JzogJ3UnLCAgJ1xcdTAxNmInOiAndScsICdcXHUwMTZkJzogJ3UnLCAnXFx1MDE2Zic6ICd1JywgJ1xcdTAxNzEnOiAndScsICdcXHUwMTczJzogJ3UnLFxuICAnXFx1MDE3NCc6ICdXJywgICdcXHUwMTc1JzogJ3cnLFxuICAnXFx1MDE3Nic6ICdZJywgICdcXHUwMTc3JzogJ3knLCAnXFx1MDE3OCc6ICdZJyxcbiAgJ1xcdTAxNzknOiAnWicsICAnXFx1MDE3Yic6ICdaJywgJ1xcdTAxN2QnOiAnWicsXG4gICdcXHUwMTdhJzogJ3onLCAgJ1xcdTAxN2MnOiAneicsICdcXHUwMTdlJzogJ3onLFxuICAnXFx1MDEzMic6ICdJSicsICdcXHUwMTMzJzogJ2lqJyxcbiAgJ1xcdTAxNTInOiAnT2UnLCAnXFx1MDE1Myc6ICdvZScsXG4gICdcXHUwMTQ5JzogXCInblwiLCAnXFx1MDE3Zic6ICdzJ1xufTtcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLmRlYnVycmAgdG8gY29udmVydCBMYXRpbi0xIFN1cHBsZW1lbnQgYW5kIExhdGluIEV4dGVuZGVkLUFcbiAqIGxldHRlcnMgdG8gYmFzaWMgTGF0aW4gbGV0dGVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGxldHRlciBUaGUgbWF0Y2hlZCBsZXR0ZXIgdG8gZGVidXJyLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZGVidXJyZWQgbGV0dGVyLlxuICovXG52YXIgZGVidXJyTGV0dGVyID0gYmFzZVByb3BlcnR5T2YoZGVidXJyZWRMZXR0ZXJzKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWJ1cnJMZXR0ZXI7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VHZXRUYWdgIHdoaWNoIGlnbm9yZXMgYFN5bWJvbC50b1N0cmluZ1RhZ2AgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBnZXRSYXdUYWcodmFsdWUpIHtcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuXG4gIHRyeSB7XG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xuICAgIHZhciB1bm1hc2tlZCA9IHRydWU7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xuICBpZiAodW5tYXNrZWQpIHtcbiAgICBpZiAoaXNPd24pIHtcbiAgICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHRhZztcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRSYXdUYWc7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTeW1ib2w7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVG9TdHJpbmc7XG4iLCJ2YXIgYmFzZVRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVRvU3RyaW5nJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1N0cmluZztcbiIsInZhciBkZWJ1cnJMZXR0ZXIgPSByZXF1aXJlKCcuL19kZWJ1cnJMZXR0ZXInKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggTGF0aW4gVW5pY29kZSBsZXR0ZXJzIChleGNsdWRpbmcgbWF0aGVtYXRpY2FsIG9wZXJhdG9ycykuICovXG52YXIgcmVMYXRpbiA9IC9bXFx4YzAtXFx4ZDZcXHhkOC1cXHhmNlxceGY4LVxceGZmXFx1MDEwMC1cXHUwMTdmXS9nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9SYW5nZSArICddJztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIFtjb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3NdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbWJpbmluZ19EaWFjcml0aWNhbF9NYXJrcykgYW5kXG4gKiBbY29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzIGZvciBzeW1ib2xzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Db21iaW5pbmdfRGlhY3JpdGljYWxfTWFya3NfZm9yX1N5bWJvbHMpLlxuICovXG52YXIgcmVDb21ib01hcmsgPSBSZWdFeHAocnNDb21ibywgJ2cnKTtcblxuLyoqXG4gKiBEZWJ1cnJzIGBzdHJpbmdgIGJ5IGNvbnZlcnRpbmdcbiAqIFtMYXRpbi0xIFN1cHBsZW1lbnRdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xhdGluLTFfU3VwcGxlbWVudF8oVW5pY29kZV9ibG9jaykjQ2hhcmFjdGVyX3RhYmxlKVxuICogYW5kIFtMYXRpbiBFeHRlbmRlZC1BXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MYXRpbl9FeHRlbmRlZC1BKVxuICogbGV0dGVycyB0byBiYXNpYyBMYXRpbiBsZXR0ZXJzIGFuZCByZW1vdmluZ1xuICogW2NvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tYmluaW5nX0RpYWNyaXRpY2FsX01hcmtzKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBkZWJ1cnIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBkZWJ1cnJlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVidXJyKCdkw6lqw6AgdnUnKTtcbiAqIC8vID0+ICdkZWphIHZ1J1xuICovXG5mdW5jdGlvbiBkZWJ1cnIoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gIHJldHVybiBzdHJpbmcgJiYgc3RyaW5nLnJlcGxhY2UocmVMYXRpbiwgZGVidXJyTGV0dGVyKS5yZXBsYWNlKHJlQ29tYm9NYXJrLCAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVidXJyO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd29yZHMgY29tcG9zZWQgb2YgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuICovXG52YXIgcmVBc2NpaVdvcmQgPSAvW15cXHgwMC1cXHgyZlxceDNhLVxceDQwXFx4NWItXFx4NjBcXHg3Yi1cXHg3Zl0rL2c7XG5cbi8qKlxuICogU3BsaXRzIGFuIEFTQ0lJIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAqL1xuZnVuY3Rpb24gYXNjaWlXb3JkcyhzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5tYXRjaChyZUFzY2lpV29yZCkgfHwgW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNjaWlXb3JkcztcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHRoYXQgbmVlZCBhIG1vcmUgcm9idXN0IHJlZ2V4cCB0byBtYXRjaCB3b3Jkcy4gKi9cbnZhciByZUhhc1VuaWNvZGVXb3JkID0gL1thLXpdW0EtWl18W0EtWl17Mn1bYS16XXxbMC05XVthLXpBLVpdfFthLXpBLVpdWzAtOV18W15hLXpBLVowLTkgXS87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIGEgd29yZCBjb21wb3NlZCBvZiBVbmljb2RlIHN5bWJvbHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGEgd29yZCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNVbmljb2RlV29yZChzdHJpbmcpIHtcbiAgcmV0dXJuIHJlSGFzVW5pY29kZVdvcmQudGVzdChzdHJpbmcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1VuaWNvZGVXb3JkO1xuIiwiLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xudmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLFxuICAgIHJzRGluZ2JhdFJhbmdlID0gJ1xcXFx1MjcwMC1cXFxcdTI3YmYnLFxuICAgIHJzTG93ZXJSYW5nZSA9ICdhLXpcXFxceGRmLVxcXFx4ZjZcXFxceGY4LVxcXFx4ZmYnLFxuICAgIHJzTWF0aE9wUmFuZ2UgPSAnXFxcXHhhY1xcXFx4YjFcXFxceGQ3XFxcXHhmNycsXG4gICAgcnNOb25DaGFyUmFuZ2UgPSAnXFxcXHgwMC1cXFxceDJmXFxcXHgzYS1cXFxceDQwXFxcXHg1Yi1cXFxceDYwXFxcXHg3Yi1cXFxceGJmJyxcbiAgICByc1B1bmN0dWF0aW9uUmFuZ2UgPSAnXFxcXHUyMDAwLVxcXFx1MjA2ZicsXG4gICAgcnNTcGFjZVJhbmdlID0gJyBcXFxcdFxcXFx4MGJcXFxcZlxcXFx4YTBcXFxcdWZlZmZcXFxcblxcXFxyXFxcXHUyMDI4XFxcXHUyMDI5XFxcXHUxNjgwXFxcXHUxODBlXFxcXHUyMDAwXFxcXHUyMDAxXFxcXHUyMDAyXFxcXHUyMDAzXFxcXHUyMDA0XFxcXHUyMDA1XFxcXHUyMDA2XFxcXHUyMDA3XFxcXHUyMDA4XFxcXHUyMDA5XFxcXHUyMDBhXFxcXHUyMDJmXFxcXHUyMDVmXFxcXHUzMDAwJyxcbiAgICByc1VwcGVyUmFuZ2UgPSAnQS1aXFxcXHhjMC1cXFxceGQ2XFxcXHhkOC1cXFxceGRlJyxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZicsXG4gICAgcnNCcmVha1JhbmdlID0gcnNNYXRoT3BSYW5nZSArIHJzTm9uQ2hhclJhbmdlICsgcnNQdW5jdHVhdGlvblJhbmdlICsgcnNTcGFjZVJhbmdlO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBcG9zID0gXCJbJ1xcdTIwMTldXCIsXG4gICAgcnNCcmVhayA9ICdbJyArIHJzQnJlYWtSYW5nZSArICddJyxcbiAgICByc0NvbWJvID0gJ1snICsgcnNDb21ib1JhbmdlICsgJ10nLFxuICAgIHJzRGlnaXRzID0gJ1xcXFxkKycsXG4gICAgcnNEaW5nYmF0ID0gJ1snICsgcnNEaW5nYmF0UmFuZ2UgKyAnXScsXG4gICAgcnNMb3dlciA9ICdbJyArIHJzTG93ZXJSYW5nZSArICddJyxcbiAgICByc01pc2MgPSAnW14nICsgcnNBc3RyYWxSYW5nZSArIHJzQnJlYWtSYW5nZSArIHJzRGlnaXRzICsgcnNEaW5nYmF0UmFuZ2UgKyByc0xvd2VyUmFuZ2UgKyByc1VwcGVyUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzVXBwZXIgPSAnWycgKyByc1VwcGVyUmFuZ2UgKyAnXScsXG4gICAgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIHJlZ2V4ZXMuICovXG52YXIgcnNNaXNjTG93ZXIgPSAnKD86JyArIHJzTG93ZXIgKyAnfCcgKyByc01pc2MgKyAnKScsXG4gICAgcnNNaXNjVXBwZXIgPSAnKD86JyArIHJzVXBwZXIgKyAnfCcgKyByc01pc2MgKyAnKScsXG4gICAgcnNPcHRDb250ckxvd2VyID0gJyg/OicgKyByc0Fwb3MgKyAnKD86ZHxsbHxtfHJlfHN8dHx2ZSkpPycsXG4gICAgcnNPcHRDb250clVwcGVyID0gJyg/OicgKyByc0Fwb3MgKyAnKD86RHxMTHxNfFJFfFN8VHxWRSkpPycsXG4gICAgcmVPcHRNb2QgPSByc01vZGlmaWVyICsgJz8nLFxuICAgIHJzT3B0VmFyID0gJ1snICsgcnNWYXJSYW5nZSArICddPycsXG4gICAgcnNPcHRKb2luID0gJyg/OicgKyByc1pXSiArICcoPzonICsgW3JzTm9uQXN0cmFsLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc09wdFZhciArIHJlT3B0TW9kICsgJykqJyxcbiAgICByc09yZExvd2VyID0gJ1xcXFxkKig/OjFzdHwybmR8M3JkfCg/IVsxMjNdKVxcXFxkdGgpKD89XFxcXGJ8W0EtWl9dKScsXG4gICAgcnNPcmRVcHBlciA9ICdcXFxcZCooPzoxU1R8Mk5EfDNSRHwoPyFbMTIzXSlcXFxcZFRIKSg/PVxcXFxifFthLXpfXSknLFxuICAgIHJzU2VxID0gcnNPcHRWYXIgKyByZU9wdE1vZCArIHJzT3B0Sm9pbixcbiAgICByc0Vtb2ppID0gJyg/OicgKyBbcnNEaW5nYmF0LCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc1NlcTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggY29tcGxleCBvciBjb21wb3VuZCB3b3Jkcy4gKi9cbnZhciByZVVuaWNvZGVXb3JkID0gUmVnRXhwKFtcbiAgcnNVcHBlciArICc/JyArIHJzTG93ZXIgKyAnKycgKyByc09wdENvbnRyTG93ZXIgKyAnKD89JyArIFtyc0JyZWFrLCByc1VwcGVyLCAnJCddLmpvaW4oJ3wnKSArICcpJyxcbiAgcnNNaXNjVXBwZXIgKyAnKycgKyByc09wdENvbnRyVXBwZXIgKyAnKD89JyArIFtyc0JyZWFrLCByc1VwcGVyICsgcnNNaXNjTG93ZXIsICckJ10uam9pbignfCcpICsgJyknLFxuICByc1VwcGVyICsgJz8nICsgcnNNaXNjTG93ZXIgKyAnKycgKyByc09wdENvbnRyTG93ZXIsXG4gIHJzVXBwZXIgKyAnKycgKyByc09wdENvbnRyVXBwZXIsXG4gIHJzT3JkVXBwZXIsXG4gIHJzT3JkTG93ZXIsXG4gIHJzRGlnaXRzLFxuICByc0Vtb2ppXG5dLmpvaW4oJ3wnKSwgJ2cnKTtcblxuLyoqXG4gKiBTcGxpdHMgYSBVbmljb2RlIGBzdHJpbmdgIGludG8gYW4gYXJyYXkgb2YgaXRzIHdvcmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3b3JkcyBvZiBgc3RyaW5nYC5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVdvcmRzKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlVW5pY29kZVdvcmQpIHx8IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaWNvZGVXb3JkcztcbiIsInZhciBhc2NpaVdvcmRzID0gcmVxdWlyZSgnLi9fYXNjaWlXb3JkcycpLFxuICAgIGhhc1VuaWNvZGVXb3JkID0gcmVxdWlyZSgnLi9faGFzVW5pY29kZVdvcmQnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKSxcbiAgICB1bmljb2RlV29yZHMgPSByZXF1aXJlKCcuL191bmljb2RlV29yZHMnKTtcblxuLyoqXG4gKiBTcGxpdHMgYHN0cmluZ2AgaW50byBhbiBhcnJheSBvZiBpdHMgd29yZHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW3BhdHRlcm5dIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIHdvcmRzLlxuICogQHBhcmFtLSB7T2JqZWN0fSBbZ3VhcmRdIEVuYWJsZXMgdXNlIGFzIGFuIGl0ZXJhdGVlIGZvciBtZXRob2RzIGxpa2UgYF8ubWFwYC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgd29yZHMgb2YgYHN0cmluZ2AuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJyk7XG4gKiAvLyA9PiBbJ2ZyZWQnLCAnYmFybmV5JywgJ3BlYmJsZXMnXVxuICpcbiAqIF8ud29yZHMoJ2ZyZWQsIGJhcm5leSwgJiBwZWJibGVzJywgL1teLCBdKy9nKTtcbiAqIC8vID0+IFsnZnJlZCcsICdiYXJuZXknLCAnJicsICdwZWJibGVzJ11cbiAqL1xuZnVuY3Rpb24gd29yZHMoc3RyaW5nLCBwYXR0ZXJuLCBndWFyZCkge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICBwYXR0ZXJuID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBwYXR0ZXJuO1xuXG4gIGlmIChwYXR0ZXJuID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gaGFzVW5pY29kZVdvcmQoc3RyaW5nKSA/IHVuaWNvZGVXb3JkcyhzdHJpbmcpIDogYXNjaWlXb3JkcyhzdHJpbmcpO1xuICB9XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocGF0dGVybikgfHwgW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd29yZHM7XG4iLCJ2YXIgYXJyYXlSZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheVJlZHVjZScpLFxuICAgIGRlYnVyciA9IHJlcXVpcmUoJy4vZGVidXJyJyksXG4gICAgd29yZHMgPSByZXF1aXJlKCcuL3dvcmRzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc0Fwb3MgPSBcIlsnXFx1MjAxOV1cIjtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYXBvc3Ryb3BoZXMuICovXG52YXIgcmVBcG9zID0gUmVnRXhwKHJzQXBvcywgJ2cnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5jYW1lbENhc2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gY29tYmluZSBlYWNoIHdvcmQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb21wb3VuZGVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDb21wb3VuZGVyKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICByZXR1cm4gYXJyYXlSZWR1Y2Uod29yZHMoZGVidXJyKHN0cmluZykucmVwbGFjZShyZUFwb3MsICcnKSksIGNhbGxiYWNrLCAnJyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQ29tcG91bmRlcjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2xpY2VgIHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgfVxuICBlbmQgPSBlbmQgPiBsZW5ndGggPyBsZW5ndGggOiBlbmQ7XG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlbmd0aDtcbiAgfVxuICBsZW5ndGggPSBzdGFydCA+IGVuZCA/IDAgOiAoKGVuZCAtIHN0YXJ0KSA+Pj4gMCk7XG4gIHN0YXJ0ID4+Pj0gMDtcblxuICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gYXJyYXlbaW5kZXggKyBzdGFydF07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2xpY2U7XG4iLCJ2YXIgYmFzZVNsaWNlID0gcmVxdWlyZSgnLi9fYmFzZVNsaWNlJyk7XG5cbi8qKlxuICogQ2FzdHMgYGFycmF5YCB0byBhIHNsaWNlIGlmIGl0J3MgbmVlZGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3Qgc2xpY2UuXG4gKi9cbmZ1bmN0aW9uIGNhc3RTbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZDtcbiAgcmV0dXJuICghc3RhcnQgJiYgZW5kID49IGxlbmd0aCkgPyBhcnJheSA6IGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFNsaWNlO1xuIiwiLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xudmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLFxuICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xudmFyIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHdpdGggW3plcm8td2lkdGggam9pbmVycyBvciBjb2RlIHBvaW50cyBmcm9tIHRoZSBhc3RyYWwgcGxhbmVzXShodHRwOi8vZWV2LmVlL2Jsb2cvMjAxNS8wOS8xMi9kYXJrLWNvcm5lcnMtb2YtdW5pY29kZS8pLiAqL1xudmFyIHJlSGFzVW5pY29kZSA9IFJlZ0V4cCgnWycgKyByc1pXSiArIHJzQXN0cmFsUmFuZ2UgICsgcnNDb21ib1JhbmdlICsgcnNWYXJSYW5nZSArICddJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIFVuaWNvZGUgc3ltYm9scy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzeW1ib2wgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzVW5pY29kZShzdHJpbmcpIHtcbiAgcmV0dXJuIHJlSGFzVW5pY29kZS50ZXN0KHN0cmluZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzVW5pY29kZTtcbiIsIi8qKlxuICogQ29udmVydHMgYW4gQVNDSUkgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFzY2lpVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5zcGxpdCgnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNjaWlUb0FycmF5O1xuIiwiLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xudmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLFxuICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xudmFyIHJzQXN0cmFsID0gJ1snICsgcnNBc3RyYWxSYW5nZSArICddJyxcbiAgICByc0NvbWJvID0gJ1snICsgcnNDb21ib1JhbmdlICsgJ10nLFxuICAgIHJzRml0eiA9ICdcXFxcdWQ4M2NbXFxcXHVkZmZiLVxcXFx1ZGZmZl0nLFxuICAgIHJzTW9kaWZpZXIgPSAnKD86JyArIHJzQ29tYm8gKyAnfCcgKyByc0ZpdHogKyAnKScsXG4gICAgcnNOb25Bc3RyYWwgPSAnW14nICsgcnNBc3RyYWxSYW5nZSArICddJyxcbiAgICByc1JlZ2lvbmFsID0gJyg/OlxcXFx1ZDgzY1tcXFxcdWRkZTYtXFxcXHVkZGZmXSl7Mn0nLFxuICAgIHJzU3VyclBhaXIgPSAnW1xcXFx1ZDgwMC1cXFxcdWRiZmZdW1xcXFx1ZGMwMC1cXFxcdWRmZmZdJyxcbiAgICByc1pXSiA9ICdcXFxcdTIwMGQnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgcmVnZXhlcy4gKi9cbnZhciByZU9wdE1vZCA9IHJzTW9kaWZpZXIgKyAnPycsXG4gICAgcnNPcHRWYXIgPSAnWycgKyByc1ZhclJhbmdlICsgJ10/JyxcbiAgICByc09wdEpvaW4gPSAnKD86JyArIHJzWldKICsgJyg/OicgKyBbcnNOb25Bc3RyYWwsIHJzUmVnaW9uYWwsIHJzU3VyclBhaXJdLmpvaW4oJ3wnKSArICcpJyArIHJzT3B0VmFyICsgcmVPcHRNb2QgKyAnKSonLFxuICAgIHJzU2VxID0gcnNPcHRWYXIgKyByZU9wdE1vZCArIHJzT3B0Sm9pbixcbiAgICByc1N5bWJvbCA9ICcoPzonICsgW3JzTm9uQXN0cmFsICsgcnNDb21ibyArICc/JywgcnNDb21ibywgcnNSZWdpb25hbCwgcnNTdXJyUGFpciwgcnNBc3RyYWxdLmpvaW4oJ3wnKSArICcpJztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggW3N0cmluZyBzeW1ib2xzXShodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC11bmljb2RlKS4gKi9cbnZhciByZVVuaWNvZGUgPSBSZWdFeHAocnNGaXR6ICsgJyg/PScgKyByc0ZpdHogKyAnKXwnICsgcnNTeW1ib2wgKyByc1NlcSwgJ2cnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFVuaWNvZGUgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHVuaWNvZGVUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLm1hdGNoKHJlVW5pY29kZSkgfHwgW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdW5pY29kZVRvQXJyYXk7XG4iLCJ2YXIgYXNjaWlUb0FycmF5ID0gcmVxdWlyZSgnLi9fYXNjaWlUb0FycmF5JyksXG4gICAgaGFzVW5pY29kZSA9IHJlcXVpcmUoJy4vX2hhc1VuaWNvZGUnKSxcbiAgICB1bmljb2RlVG9BcnJheSA9IHJlcXVpcmUoJy4vX3VuaWNvZGVUb0FycmF5Jyk7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1RvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBoYXNVbmljb2RlKHN0cmluZylcbiAgICA/IHVuaWNvZGVUb0FycmF5KHN0cmluZylcbiAgICA6IGFzY2lpVG9BcnJheShzdHJpbmcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvQXJyYXk7XG4iLCJ2YXIgY2FzdFNsaWNlID0gcmVxdWlyZSgnLi9fY2FzdFNsaWNlJyksXG4gICAgaGFzVW5pY29kZSA9IHJlcXVpcmUoJy4vX2hhc1VuaWNvZGUnKSxcbiAgICBzdHJpbmdUb0FycmF5ID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9BcnJheScpLFxuICAgIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmxvd2VyRmlyc3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kTmFtZSBUaGUgbmFtZSBvZiB0aGUgYFN0cmluZ2AgY2FzZSBtZXRob2QgdG8gdXNlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FzZUZpcnN0KG1ldGhvZE5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0cmluZykge1xuICAgIHN0cmluZyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICB2YXIgc3RyU3ltYm9scyA9IGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgICAgPyBzdHJpbmdUb0FycmF5KHN0cmluZylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgdmFyIGNociA9IHN0clN5bWJvbHNcbiAgICAgID8gc3RyU3ltYm9sc1swXVxuICAgICAgOiBzdHJpbmcuY2hhckF0KDApO1xuXG4gICAgdmFyIHRyYWlsaW5nID0gc3RyU3ltYm9sc1xuICAgICAgPyBjYXN0U2xpY2Uoc3RyU3ltYm9scywgMSkuam9pbignJylcbiAgICAgIDogc3RyaW5nLnNsaWNlKDEpO1xuXG4gICAgcmV0dXJuIGNoclttZXRob2ROYW1lXSgpICsgdHJhaWxpbmc7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQ2FzZUZpcnN0O1xuIiwidmFyIGNyZWF0ZUNhc2VGaXJzdCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUNhc2VGaXJzdCcpO1xuXG4vKipcbiAqIENvbnZlcnRzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AgdG8gdXBwZXIgY2FzZS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy51cHBlckZpcnN0KCdmcmVkJyk7XG4gKiAvLyA9PiAnRnJlZCdcbiAqXG4gKiBfLnVwcGVyRmlyc3QoJ0ZSRUQnKTtcbiAqIC8vID0+ICdGUkVEJ1xuICovXG52YXIgdXBwZXJGaXJzdCA9IGNyZWF0ZUNhc2VGaXJzdCgndG9VcHBlckNhc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1cHBlckZpcnN0O1xuIiwidmFyIGNyZWF0ZUNvbXBvdW5kZXIgPSByZXF1aXJlKCcuL19jcmVhdGVDb21wb3VuZGVyJyksXG4gICAgdXBwZXJGaXJzdCA9IHJlcXVpcmUoJy4vdXBwZXJGaXJzdCcpO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvXG4gKiBbc3RhcnQgY2FzZV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGV0dGVyX2Nhc2UjU3R5bGlzdGljX29yX3NwZWNpYWxpc2VkX3VzYWdlKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMS4wXG4gKiBAY2F0ZWdvcnkgU3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW3N0cmluZz0nJ10gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RhcnQgY2FzZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnN0YXJ0Q2FzZSgnLS1mb28tYmFyLS0nKTtcbiAqIC8vID0+ICdGb28gQmFyJ1xuICpcbiAqIF8uc3RhcnRDYXNlKCdmb29CYXInKTtcbiAqIC8vID0+ICdGb28gQmFyJ1xuICpcbiAqIF8uc3RhcnRDYXNlKCdfX0ZPT19CQVJfXycpO1xuICogLy8gPT4gJ0ZPTyBCQVInXG4gKi9cbnZhciBzdGFydENhc2UgPSBjcmVhdGVDb21wb3VuZGVyKGZ1bmN0aW9uKHJlc3VsdCwgd29yZCwgaW5kZXgpIHtcbiAgcmV0dXJuIHJlc3VsdCArIChpbmRleCA/ICcgJyA6ICcnKSArIHVwcGVyRmlyc3Qod29yZCk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdGFydENhc2U7XG4iLCJpbXBvcnQgc3RhcnRDYXNlIGZyb20gJ2xvZGFzaC9zdGFydENhc2UuanMnO1xuXG4vKipcbiAqIEBtZW1iZXJvZiBUcmFuc2xhdGVGdW5jdGlvbnNcbiAqIEBhbGlhcyBUcmFuc2xhdGVGdW5jdGlvblxuICovXG5cbi8qKlxuICogVHJhbnNsYXRlIEZ1bmN0aW9ucyBhcmUgdGhlIGhlbHBlciBmdW5jdGlvbnMgd2hpY2ggeW91IGNhbiB1c2UgdG8gdHJhbnNsYXRlXG4gKiB5b3VyIGFwcGxpY2F0aW9uLlxuICpcbiAqIE9uIHRoZSBmcm9udGVkIHRoZXkgY2FuIGJlIHVzZWQgd2l0aCB7QGxpbmsgdXNlVHJhbnNsYXRpb259IGhvb2suIE9uIHRoZSBiYWNrZW5kXG4gKiB0aGV5IGFyZSBpbmplY3RlZCB0byBhbnkge0BsaW5rIEFkbWluSlN9IGluc3RhbmNlIGFuZCB7QGxpbmsgQWN0aW9uQ29udGV4dH0uXG4gKi9cblxuY29uc3QgdHJhbnNsYXRlID0gKGkxOG4sIGtleSwgbmFtZSwgcmVzb3VyY2VJZCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIC8vIGNzcGVsbDpkaXNhYmxlLW5leHQtbGluZVxuICBpZiAoaTE4bi5sYW5ndWFnZSA9PT0gJ2NpbW9kZScpIHJldHVybiBba2V5LCBuYW1lXS5qb2luKCcuJyk7XG4gIGxldCByZWFsT3B0aW9ucyA9IHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGRlZmF1bHRWYWx1ZTogb3B0aW9ucy5kZWZhdWx0VmFsdWUgPz8gc3RhcnRDYXNlKG5hbWUpXG4gIH07XG4gIGxldCBrZXlzID0gW2Ake2tleX0uJHtuYW1lfWBdO1xuICBpZiAocmVzb3VyY2VJZCAmJiB0eXBlb2YgcmVzb3VyY2VJZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZWFsT3B0aW9ucyA9IHJlc291cmNlSWQ7XG4gIH0gZWxzZSBpZiAocmVzb3VyY2VJZCkge1xuICAgIGtleXMgPSBbYHJlc291cmNlcy4ke3Jlc291cmNlSWR9LiR7a2V5fS4ke25hbWV9YCwgLi4ua2V5c107XG4gIH1cbiAgcmV0dXJuIGkxOG4udChrZXlzLCByZWFsT3B0aW9ucyk7XG59O1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUZ1bmN0aW9ucyA9IGkxOG4gPT4ge1xuICBjb25zdCB0cmFuc2xhdGVBY3Rpb24gPSAoYWN0aW9uTmFtZSwgcmVzb3VyY2VJZCwgb3B0aW9ucykgPT4gdHJhbnNsYXRlKGkxOG4sICdhY3Rpb25zJywgYWN0aW9uTmFtZSwgcmVzb3VyY2VJZCwgb3B0aW9ucyk7XG4gIGNvbnN0IHRyYW5zbGF0ZUJ1dHRvbiA9IChidXR0b25MYWJlbCwgcmVzb3VyY2VJZCwgb3B0aW9ucykgPT4gdHJhbnNsYXRlKGkxOG4sICdidXR0b25zJywgYnV0dG9uTGFiZWwsIHJlc291cmNlSWQsIG9wdGlvbnMpO1xuICBjb25zdCB0cmFuc2xhdGVMYWJlbCA9IChsYWJlbCwgcmVzb3VyY2VJZCwgb3B0aW9ucykgPT4gdHJhbnNsYXRlKGkxOG4sICdsYWJlbHMnLCBsYWJlbCwgcmVzb3VyY2VJZCwgb3B0aW9ucyk7XG4gIGNvbnN0IHRyYW5zbGF0ZVByb3BlcnR5ID0gKHByb3BlcnR5TmFtZSwgcmVzb3VyY2VJZCwgb3B0aW9ucykgPT4gdHJhbnNsYXRlKGkxOG4sICdwcm9wZXJ0aWVzJywgcHJvcGVydHlOYW1lLCByZXNvdXJjZUlkLCBvcHRpb25zKTtcbiAgY29uc3QgdHJhbnNsYXRlTWVzc2FnZSA9IChtZXNzYWdlTmFtZSwgcmVzb3VyY2VJZCwgb3B0aW9ucykgPT4gdHJhbnNsYXRlKGkxOG4sICdtZXNzYWdlcycsIG1lc3NhZ2VOYW1lLCByZXNvdXJjZUlkLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBkZWZhdWx0VmFsdWU6IG9wdGlvbnM/LmRlZmF1bHRWYWx1ZSA/PyBtZXNzYWdlTmFtZVxuICB9KTtcbiAgY29uc3QgdHJhbnNsYXRlQ29tcG9uZW50ID0gKG1lc3NhZ2VOYW1lLCByZXNvdXJjZUlkLCBvcHRpb25zKSA9PiB0cmFuc2xhdGUoaTE4biwgJ2NvbXBvbmVudHMnLCBtZXNzYWdlTmFtZSwgcmVzb3VyY2VJZCwgb3B0aW9ucyk7XG4gIGNvbnN0IHRyYW5zbGF0ZVBhZ2UgPSAobWVzc2FnZU5hbWUsIHJlc291cmNlSWQsIG9wdGlvbnMpID0+IHRyYW5zbGF0ZShpMThuLCAncGFnZXMnLCBtZXNzYWdlTmFtZSwgcmVzb3VyY2VJZCwgb3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdHJhbnNsYXRlQWN0aW9uLFxuICAgIHRhOiB0cmFuc2xhdGVBY3Rpb24sXG4gICAgdHJhbnNsYXRlQnV0dG9uLFxuICAgIHRiOiB0cmFuc2xhdGVCdXR0b24sXG4gICAgdHJhbnNsYXRlTGFiZWwsXG4gICAgdGw6IHRyYW5zbGF0ZUxhYmVsLFxuICAgIHRyYW5zbGF0ZVByb3BlcnR5LFxuICAgIHRwOiB0cmFuc2xhdGVQcm9wZXJ0eSxcbiAgICB0cmFuc2xhdGVNZXNzYWdlLFxuICAgIHRtOiB0cmFuc2xhdGVNZXNzYWdlLFxuICAgIHRyYW5zbGF0ZUNvbXBvbmVudCxcbiAgICB0YzogdHJhbnNsYXRlQ29tcG9uZW50LFxuICAgIHRyYW5zbGF0ZVBhZ2UsXG4gICAgdDogaTE4bi50LFxuICAgIHRyYW5zbGF0ZTogaTE4bi50XG4gIH07XG59O1xuXG4vKipcbiAqIEVTIE1vZHVsZXMgZXhwb3J0cyBhcmUgaW1tdXRhYmxlIHRodXMgU2lub24gY2Fubm90IGNyZWF0ZSBzdHVicyBmb3IgZS5nLiBjcmVhdGVGdW5jdGlvbnNcbiAqIFdyYXBwaW5nIHRoZSBleHBvcnRzIGluIGFuIG9iamVjdCBhbGxvd3MgU2lub24gdG8gbW9kaWZ5IGl0J3MgcHJvcGVydGllcy5cbiAqXG4gKiBUaGlzIHByZXZlbnRzIFNpbm9uIGVycm9yIGZyb20gYXBwZWFyaW5nOlxuICogXCJUeXBlRXJyb3I6IEVTIE1vZHVsZXMgY2Fubm90IGJlIHN0dWJiZWRcIlxuICovXG5leHBvcnQgY29uc3QgX190ZXN0RXhwb3J0cyA9IHtcbiAgY3JlYXRlRnVuY3Rpb25zXG59OyIsImltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIGFzIG9yaWdpbmFsVXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IGNyZWF0ZUZ1bmN0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL3RyYW5zbGF0ZS1mdW5jdGlvbnMuZmFjdG9yeS5qcyc7XG5cbi8qKlxuICogRXh0ZW5kcyB7QGxpbmsgVHJhbnNsYXRlRnVuY3Rpb25zfS4gQXBhcnQgZnJvbSB0aGF0IGl0IGFsc28gcmV0dXJucyBhbGwgdGhlIHByb3BlcnRpZXNcbiAqIGRlZmluZWQgYmVsb3cuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdhZG1pbmpzJ1xuICpcbiAqIGNvbnN0IE15Q29tcG9uZW50ID0gKCkgPT4ge1xuICogICBjb25zdCB7IHRyYW5zbGF0ZUJ1dHRvbiB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8Qm94PlxuICogICAgICAgPEJ1dHRvbiB2YXJpYW50PVwiY29udGFpbmVkXCIgb25DbGljaz17Li4ufT57dHJhbnNsYXRlQnV0dG9uKCdzYXZlJyl9PEJ1dHRvbj5cbiAqICAgICA8L0JveD5cbiAqICAgKVxuICogfVxuICogYGBgXG4gKlxuICogQG1lbWJlcm9mIHVzZVRyYW5zbGF0aW9uXG4gKiBAYWxpYXMgVXNlVHJhbnNsYXRpb25SZXNwb25zZVxuICpcbiAqIEBwcm9wZXJ0eSB7VHJhbnNsYXRlRnVuY3Rpb259IC4uLiBBbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4ge0BsaW5rIFRyYW5zbGF0ZUZ1bmN0aW9uc31cbiAqL1xuXG4vKipcbiAqIEBjbGFzc2Rlc2NcbiAqIEV4dGVuZHMgdGhlIHVzZVRyYW5zbGF0aW9uIGhvb2sgZnJvbSByZWFjdC1pMThuZXh0IGxpYnJhcnkuXG4gKlxuICogUmV0dXJucyBhbGwgdGhlIHtAbGluayBUcmFuc2xhdGVGdW5jdGlvbnN9ICsgbWV0aG9kcyByZXR1cm5lZCBieSB0aGUgb3JpZ2luYWxcbiAqIHVzZVRyYW5zbGF0aW9uIG1ldGhvZCBmcm9tIHJlYWN0LWkxOG5leHQgbGlrZTogYGkxOG5gIGluc3RhbmNlIGFuZCBgcmVhZHlgIGZsYWcuXG4gKlxuICogQGNsYXNzXG4gKiBAc3ViY2F0ZWdvcnkgSG9va3NcbiAqIEBidW5kbGVcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEByZXR1cm5zIHtVc2VUcmFuc2xhdGlvblJlc3BvbnNlfVxuICovXG5leHBvcnQgY29uc3QgdXNlVHJhbnNsYXRpb24gPSAoKSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbiAgY29uc3Qge1xuICAgIGkxOG4sXG4gICAgLi4ucmVzdFxuICB9ID0gb3JpZ2luYWxVc2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB0cmFuc2xhdGVGdW5jdGlvbnMgPSBjcmVhdGVGdW5jdGlvbnMoaTE4bik7XG4gIHJldHVybiB7XG4gICAgLi4ucmVzdCxcbiAgICBpMThuLFxuICAgIC4uLnRyYW5zbGF0ZUZ1bmN0aW9uc1xuICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZVRyYW5zbGF0aW9uOyIsImV4cG9ydCBjb25zdCBEUk9QX05PVElDRSA9ICdEUk9QX05PVElDRSc7XG5leHBvcnQgY29uc3QgZHJvcE5vdGljZSA9IG5vdGljZUlkID0+ICh7XG4gIHR5cGU6ICdEUk9QX05PVElDRScsXG4gIGRhdGE6IHtcbiAgICBub3RpY2VJZFxuICB9XG59KTsiLCJleHBvcnQgY29uc3QgQVNTRVRTX0lOSVRJQUxJWkUgPSAnQVNTRVRTX0lOSVRJQUxJWkUnO1xuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVBc3NldHMgPSBkYXRhID0+ICh7XG4gIHR5cGU6IEFTU0VUU19JTklUSUFMSVpFLFxuICBkYXRhXG59KTsiLCJleHBvcnQgY29uc3QgQlJBTkRJTkdfSU5JVElBTElaRSA9ICdCUkFORElOR19JTklUSUFMSVpFJztcbmV4cG9ydCBjb25zdCBpbml0aWFsaXplQnJhbmRpbmcgPSBkYXRhID0+ICh7XG4gIHR5cGU6IEJSQU5ESU5HX0lOSVRJQUxJWkUsXG4gIGRhdGFcbn0pOyIsImV4cG9ydCBjb25zdCBEQVNIQk9BUkRfSU5JVElBTElaRSA9ICdEQVNIQk9BUkRfSU5JVElBTElaRSc7XG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZURhc2hib2FyZCA9IGRhdGEgPT4gKHtcbiAgdHlwZTogREFTSEJPQVJEX0lOSVRJQUxJWkUsXG4gIGRhdGFcbn0pOyIsImV4cG9ydCBjb25zdCBMT0NBTEVfSU5JVElBTElaRSA9ICdMT0NBTEVfSU5JVElBTElaRSc7XG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZUxvY2FsZSA9IGRhdGEgPT4gKHtcbiAgdHlwZTogTE9DQUxFX0lOSVRJQUxJWkUsXG4gIGRhdGFcbn0pOyIsImV4cG9ydCBjb25zdCBQQUdFU19JTklUSUFMSVpFID0gJ1BBR0VTX0lOSVRJQUxJWkUnO1xuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVQYWdlcyA9IGRhdGEgPT4gKHtcbiAgdHlwZTogUEFHRVNfSU5JVElBTElaRSxcbiAgZGF0YVxufSk7IiwiZXhwb3J0IGNvbnN0IFBBVEhTX0lOSVRJQUxJWkUgPSAnUEFUSFNfSU5JVElBTElaRSc7XG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZVBhdGhzID0gZGF0YSA9PiAoe1xuICB0eXBlOiBQQVRIU19JTklUSUFMSVpFLFxuICBkYXRhXG59KTsiLCJleHBvcnQgY29uc3QgUkVTT1VSQ0VTX0lOSVRJQUxJWkUgPSAnUkVTT1VSQ0VTX0lOSVRJQUxJWkUnO1xuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVSZXNvdXJjZXMgPSBkYXRhID0+ICh7XG4gIHR5cGU6IFJFU09VUkNFU19JTklUSUFMSVpFLFxuICBkYXRhXG59KTsiLCJleHBvcnQgY29uc3QgVEhFTUVfSU5JVElBTElaRSA9ICdUSEVNRV9JTklUSUFMSVpFJztcbmV4cG9ydCBjb25zdCBpbml0aWFsaXplVGhlbWUgPSBkYXRhID0+ICh7XG4gIHR5cGU6IFRIRU1FX0lOSVRJQUxJWkUsXG4gIGRhdGFcbn0pOyIsImV4cG9ydCBjb25zdCBWRVJTSU9OU19JTklUSUFMSVpFID0gJ1ZFUlNJT05TX0lOSVRJQUxJWkUnO1xuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVWZXJzaW9ucyA9IGRhdGEgPT4gKHtcbiAgdHlwZTogVkVSU0lPTlNfSU5JVElBTElaRSxcbiAgZGF0YVxufSk7IiwiZXhwb3J0IGNvbnN0IFNIT1dfTU9EQUwgPSAnU0hPV19NT0RBTCc7XG5leHBvcnQgY29uc3QgSElERV9NT0RBTCA9ICdISURFX01PREFMJztcbmV4cG9ydCBjb25zdCBzaG93TW9kYWwgPSBkYXRhID0+ICh7XG4gIHR5cGU6IFNIT1dfTU9EQUwsXG4gIGRhdGFcbn0pO1xuZXhwb3J0IGNvbnN0IGhpZGVNb2RhbCA9ICgpID0+ICh7XG4gIHR5cGU6IEhJREVfTU9EQUxcbn0pOyIsImV4cG9ydCBjb25zdCBJTklUSUFMX1JPVVRFID0gJ0lOSVRJQUxfUk9VVEUnO1xuZXhwb3J0IGNvbnN0IFJPVVRFX0NIQU5HRUQgPSAnUk9VVEVfQ0hBTkdFRCc7XG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZVJvdXRlID0gbG9jYXRpb24gPT4gKHtcbiAgdHlwZTogUk9VVEVfQ0hBTkdFRCxcbiAgZGF0YTogbG9jYXRpb25cbn0pO1xuZXhwb3J0IGNvbnN0IGNoYW5nZVJvdXRlID0gbG9jYXRpb24gPT4gKHtcbiAgdHlwZTogUk9VVEVfQ0hBTkdFRCxcbiAgZGF0YTogbG9jYXRpb25cbn0pOyIsImV4cG9ydCBjb25zdCBTRVNTSU9OX0lOSVRJQUxJWkUgPSAnU0VTU0lPTl9JTklUSUFMSVpFJztcbmV4cG9ydCBjb25zdCBzZXRDdXJyZW50QWRtaW4gPSAoZGF0YSA9IG51bGwpID0+ICh7XG4gIHR5cGU6IFNFU1NJT05fSU5JVElBTElaRSxcbiAgZGF0YVxufSk7IiwiZXhwb3J0IGNvbnN0IERSQVdFUl9QUkVST1VURV9TRVQgPSAnRFJBV0VSX1BSRVJPVVRFX1NFVCc7XG5leHBvcnQgY29uc3Qgc2V0RHJhd2VyUHJlUm91dGUgPSBkYXRhID0+ICh7XG4gIHR5cGU6IERSQVdFUl9QUkVST1VURV9TRVQsXG4gIGRhdGFcbn0pOyIsImV4cG9ydCBjb25zdCBTRVRfTk9USUNFX1BST0dSRVNTID0gJ1NFVF9OT1RJQ0VfUFJPR1JFU1MnO1xuZXhwb3J0IGNvbnN0IHNldE5vdGljZVByb2dyZXNzID0gZGF0YSA9PiAoe1xuICB0eXBlOiBTRVRfTk9USUNFX1BST0dSRVNTLFxuICBkYXRhXG59KTsiLCJpbXBvcnQgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZURpc3BhdGNoIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgaGlkZU1vZGFsLCBzaG93TW9kYWwgfSBmcm9tICcuLi9zdG9yZS9hY3Rpb25zL2luZGV4LmpzJztcbmltcG9ydCB1c2VUcmFuc2xhdGlvbiBmcm9tICcuL3VzZS10cmFuc2xhdGlvbi5qcyc7XG5leHBvcnQgY29uc3QgdXNlTW9kYWwgPSAoKSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZUJ1dHRvbixcbiAgICB0cmFuc2xhdGVMYWJlbCxcbiAgICB0cmFuc2xhdGVNZXNzYWdlXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBjbG9zZU1vZGFsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGRpc3BhdGNoKGhpZGVNb2RhbCgpKTtcbiAgfSwgW10pO1xuICBjb25zdCBvcGVuTW9kYWwgPSBwcm9wcyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgbW9kYWxQcm9wcyxcbiAgICAgIHR5cGUsXG4gICAgICBjb25maXJtQWN0aW9uLFxuICAgICAgcmVzb3VyY2VJZFxuICAgIH0gPSBwcm9wcztcbiAgICBsZXQgYnV0dG9ucyA9IG1vZGFsUHJvcHMuYnV0dG9ucyB8fCBbXTtcbiAgICBjb25zdCBoYW5kbGVDb25maXJtID0gKCkgPT4ge1xuICAgICAgY2xvc2VNb2RhbCgpO1xuICAgICAgaWYgKGNvbmZpcm1BY3Rpb24pIGNvbmZpcm1BY3Rpb24oKTtcbiAgICB9O1xuICAgIGlmIChidXR0b25zLmxlbmd0aCkge1xuICAgICAgYnV0dG9ucyA9IGJ1dHRvbnMubWFwKGJ1dHRvbiA9PiB7XG4gICAgICAgIGJ1dHRvbi52YXJpYW50ID0gYnV0dG9uLnZhcmlhbnQgfHwgJ2RlZmF1bHQnO1xuICAgICAgICBpZiAoYnV0dG9uLmxhYmVsID09PSAnY2FuY2VsJykge1xuICAgICAgICAgIGJ1dHRvbi5vbkNsaWNrID0gYnV0dG9uLm9uQ2xpY2sgfHwgY2xvc2VNb2RhbDtcbiAgICAgICAgfVxuICAgICAgICBidXR0b24ubGFiZWwgPSB0cmFuc2xhdGVCdXR0b24oYnV0dG9uLmxhYmVsIHx8ICcnLCByZXNvdXJjZUlkKTtcbiAgICAgICAgcmV0dXJuIGJ1dHRvbjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ2NvbmZpcm0nKSB7XG4gICAgICBidXR0b25zLnB1c2goe1xuICAgICAgICBsYWJlbDogdHJhbnNsYXRlQnV0dG9uKCdjYW5jZWwnLCByZXNvdXJjZUlkKSxcbiAgICAgICAgb25DbGljazogY2xvc2VNb2RhbFxuICAgICAgfSk7XG4gICAgICBidXR0b25zLnB1c2goe1xuICAgICAgICBsYWJlbDogdHJhbnNsYXRlQnV0dG9uKCdjb25maXJtJywgcmVzb3VyY2VJZCksXG4gICAgICAgIHZhcmlhbnQ6IG1vZGFsUHJvcHMudmFyaWFudCB8fCAncHJpbWFyeScsXG4gICAgICAgIG9uQ2xpY2s6IGhhbmRsZUNvbmZpcm1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ2FsZXJ0Jykge1xuICAgICAgYnV0dG9ucy5wdXNoKHtcbiAgICAgICAgbGFiZWw6IHRyYW5zbGF0ZUJ1dHRvbignb2snLCByZXNvdXJjZUlkKSxcbiAgICAgICAgdmFyaWFudDogJ3ByaW1hcnknLFxuICAgICAgICBvbkNsaWNrOiBjbG9zZU1vZGFsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZ2V0RGVmYXVsdFRyYW5zbGF0aW9uS2V5ID0gcGxhY2VtZW50ID0+IGBtb2RhbC0ke3BsYWNlbWVudH1gO1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBtb2RhbFByb3BzOiB7XG4gICAgICAgIC4uLm1vZGFsUHJvcHMsXG4gICAgICAgIGxhYmVsOiB0cmFuc2xhdGVMYWJlbChtb2RhbFByb3BzLmxhYmVsID8/IGdldERlZmF1bHRUcmFuc2xhdGlvbktleSgnbGFiZWwnKSwgcmVzb3VyY2VJZCksXG4gICAgICAgIHRpdGxlOiB0cmFuc2xhdGVNZXNzYWdlKG1vZGFsUHJvcHMudGl0bGUgPz8gZ2V0RGVmYXVsdFRyYW5zbGF0aW9uS2V5KCd0aXRsZScpLCByZXNvdXJjZUlkKSxcbiAgICAgICAgc3ViVGl0bGU6IHRyYW5zbGF0ZU1lc3NhZ2UobW9kYWxQcm9wcy5zdWJUaXRsZSA/PyBnZXREZWZhdWx0VHJhbnNsYXRpb25LZXkoJ3N1YlRpdGxlJyksIHJlc291cmNlSWQpLFxuICAgICAgICB2YXJpYW50OiBtb2RhbFByb3BzLnZhcmlhbnQsXG4gICAgICAgIGJ1dHRvbnMsXG4gICAgICAgIG9uQ2xvc2U6IG1vZGFsUHJvcHMub25DbG9zZSB8fCBjbG9zZU1vZGFsLFxuICAgICAgICBvbk92ZXJsYXlDbGljazogbW9kYWxQcm9wcy5vbk92ZXJsYXlDbGljayB8fCBjbG9zZU1vZGFsXG4gICAgICB9XG4gICAgfTtcbiAgICBkaXNwYXRjaChzaG93TW9kYWwoZGF0YSkpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIG9wZW5Nb2RhbCxcbiAgICBjbG9zZU1vZGFsXG4gIH07XG59OyIsImltcG9ydCB7IHVzZU5hdmlnYXRlLCB1c2VMb2NhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgeyBidWlsZEFjdGlvbkNhbGxBcGlUcmlnZ2VyLCBidWlsZEFjdGlvbkNsaWNrSGFuZGxlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgYWN0aW9uSHJlZiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYWN0aW9uL2FjdGlvbi1ocmVmLmpzJztcbmltcG9ydCB7IHVzZUFjdGlvblJlc3BvbnNlSGFuZGxlciB9IGZyb20gJy4vdXNlLWFjdGlvbi1yZXNwb25zZS1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vdXNlLXRyYW5zbGF0aW9uLmpzJztcbmltcG9ydCB7IHVzZU1vZGFsIH0gZnJvbSAnLi4vdXNlLW1vZGFsLmpzJztcblxuLyoqXG4gKiBAbG9hZCAuL3VzZS1hY3Rpb24uZG9jLm1kXG4gKiBAc3ViY2F0ZWdvcnkgSG9va3NcbiAqXG4gKiBAcGFyYW0ge0FjdGlvbkpTT059ICAgYWN0aW9uICAgICAgYWN0aW9uIG9iamVjdFxuICogQHBhcmFtIHtBY3Rpb25QYXJhbXN9IHBhcmFtc1xuICogQHBhcmFtIHtBY3Rpb25DYWxsQ2FsbGJhY2t9IG9uQWN0aW9uQ2FsbCAtIGNhbGxiYWNrIHRyaWdnZXJlZCB3aGVuIGFjdGlvbiBpcyBwZXJmb3JtZWRcbiAqIEByZXR1cm4ge1VzZUFjdGlvblJlc3VsdH1cbiAqIEBjbGFzc1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQWN0aW9uKGFjdGlvbiwgcGFyYW1zLCBvbkFjdGlvbkNhbGwpIHtcbiAgY29uc3QgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZSgpO1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IHRyYW5zbGF0ZUZ1bmN0aW9ucyA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IG1vZGFsRnVuY3Rpb25zID0gdXNlTW9kYWwoKTtcbiAgY29uc3QgYWN0aW9uUmVzcG9uc2VIYW5kbGVyID0gdXNlQWN0aW9uUmVzcG9uc2VIYW5kbGVyKG9uQWN0aW9uQ2FsbCk7XG4gIGNvbnN0IGhyZWYgPSBhY3Rpb25IcmVmKGFjdGlvbiwgcGFyYW1zKTtcbiAgY29uc3QgY2FsbEFwaSA9IGJ1aWxkQWN0aW9uQ2FsbEFwaVRyaWdnZXIoe1xuICAgIGFjdGlvbixcbiAgICBwYXJhbXMsXG4gICAgYWN0aW9uUmVzcG9uc2VIYW5kbGVyXG4gIH0pO1xuICBjb25zdCBoYW5kbGVDbGljayA9IGJ1aWxkQWN0aW9uQ2xpY2tIYW5kbGVyKHtcbiAgICBhY3Rpb24sXG4gICAgcGFyYW1zLFxuICAgIGFjdGlvblJlc3BvbnNlSGFuZGxlcixcbiAgICBuYXZpZ2F0ZSxcbiAgICB0cmFuc2xhdGVGdW5jdGlvbnMsXG4gICAgbW9kYWxGdW5jdGlvbnMsXG4gICAgbG9jYXRpb25cbiAgfSk7XG4gIHJldHVybiB7XG4gICAgaHJlZixcbiAgICBjYWxsQXBpLFxuICAgIGhhbmRsZUNsaWNrXG4gIH07XG59IiwiaW1wb3J0IHsgdXNlRGlzcGF0Y2gsIHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgc2V0Q3VycmVudEFkbWluIH0gZnJvbSAnLi4vc3RvcmUvYWN0aW9ucy9zZXQtY3VycmVudC1hZG1pbi5qcyc7XG4vKipcbiAqIEBjbGFzc2Rlc2NcbiAqIEhvb2sgd2hpY2ggYWxsb3dzIHlvdSB0byBnZXQgYW5kIHNldCBjdXJyZW50QWRtaW5cbiAqXG4gKiAjIyMgVXNhZ2VcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyB1c2VDdXJyZW50QWRtaW4gfSBmcm9tICdhZG1pbmpzJ1xuICpcbiAqIGNvbnN0IG15Q29tcG9uZW50ID0gKCkgPT4ge1xuICogICBjb25zdCBbY3VycmVudEFkbWluLCBzZXRDdXJyZW50QWRtaW5dID0gdXNlQ3VycmVudEFkbWluKClcbiAqICAgLy8gLi4uXG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAY2xhc3NcbiAqIEBzdWJjYXRlZ29yeSBIb29rc1xuICogQGJ1bmRsZVxuICogQHJldHVybnMge1VzZUN1cnJlbnRBZG1pblJlc3BvbnNlfVxuICogQGhpZGVjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiB1c2VDdXJyZW50QWRtaW4oKSB7XG4gIGNvbnN0IGN1cnJlbnRBZG1pbiA9IHVzZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLnNlc3Npb24pO1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG4gIHJldHVybiBbY3VycmVudEFkbWluLCBhZG1pbiA9PiBkaXNwYXRjaChzZXRDdXJyZW50QWRtaW4oYWRtaW4pKV07XG59XG5leHBvcnQgeyB1c2VDdXJyZW50QWRtaW4sIHVzZUN1cnJlbnRBZG1pbiBhcyBkZWZhdWx0IH07XG5cbi8qKlxuICogUmVzdWx0IG9mIHRoZSB7QGxpbmsgdXNlQ3VycmVudEFkbWlufS5cbiAqIEl0IGlzIGEgdHVwbGUgY29udGFpbmluZyB2YWx1ZSBhbmQgdGhlIHNldHRlclxuICpcbiAqIEB0eXBlZGVmIHtBcnJheX0gVXNlQ3VycmVudEFkbWluUmVzcG9uc2VcbiAqIEBtZW1iZXJvZiB1c2VDdXJyZW50QWRtaW5cbiAqIEBhbGlhcyBVc2VDdXJyZW50QWRtaW5SZXNwb25zZVxuICogQHByb3BlcnR5IHtDdXJyZW50QWRtaW4gfCBudWxsfSBbMF0gICAgY3VycmVudCBhZG1pblxuICogQHByb3BlcnR5IHtSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxDdXJyZW50QWRtaW4+Pn0gWzFdICAgIHZhbHVlIHNldHRlciBjb21wYXRpYmxlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCByZWFjdCB1c2VTdGF0ZVxuICovIiwiZXhwb3J0IGNvbnN0IE9QRU5fRklMVEVSX0RSQVdFUiA9ICdPUEVOX0ZJTFRFUl9EUkFXRVInO1xuZXhwb3J0IGNvbnN0IENMT1NFX0ZJTFRFUl9EUkFXRVIgPSAnQ0xPU0VfRklMVEVSX0RSQVdFUic7XG5leHBvcnQgY29uc3Qgc2hvd0ZpbHRlckRyYXdlciA9ICgpID0+ICh7XG4gIHR5cGU6IE9QRU5fRklMVEVSX0RSQVdFUixcbiAgaXNWaXNpYmxlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBoaWRlRmlsdGVyRHJhd2VyID0gKCkgPT4gKHtcbiAgdHlwZTogQ0xPU0VfRklMVEVSX0RSQVdFUixcbiAgaXNWaXNpYmxlOiBmYWxzZVxufSk7IiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUNsZWFyO1xuIiwiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlRGVsZXRlO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUdldDtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlSGFzO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlU2V0O1xuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVHZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUhhcztcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSksXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xuXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVTZXQ7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemU7XG4iLCJ2YXIgbWVtb2l6ZSA9IHJlcXVpcmUoJy4vbWVtb2l6ZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgbWF4aW11bSBtZW1vaXplIGNhY2hlIHNpemUuICovXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XG4gIHZhciByZXN1bHQgPSBtZW1vaXplKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XG4gICAgICBjYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZUNhcHBlZDtcbiIsInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9QYXRoJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFBhdGg7XG4iLCJ2YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvS2V5O1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25WYWx1ZTtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwidmFyIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2V0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBwYXRoIGNyZWF0aW9uLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZVNldChvYmplY3QsIHBhdGgsIHZhbHVlLCBjdXN0b21pemVyKSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIGxhc3RJbmRleCA9IGxlbmd0aCAtIDEsXG4gICAgICBuZXN0ZWQgPSBvYmplY3Q7XG5cbiAgd2hpbGUgKG5lc3RlZCAhPSBudWxsICYmICsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gdG9LZXkocGF0aFtpbmRleF0pLFxuICAgICAgICBuZXdWYWx1ZSA9IHZhbHVlO1xuXG4gICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycgfHwga2V5ID09PSAnY29uc3RydWN0b3InIHx8IGtleSA9PT0gJ3Byb3RvdHlwZScpIHtcbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4ICE9IGxhc3RJbmRleCkge1xuICAgICAgdmFyIG9ialZhbHVlID0gbmVzdGVkW2tleV07XG4gICAgICBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKG9ialZhbHVlLCBrZXksIG5lc3RlZCkgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdWYWx1ZSA9IGlzT2JqZWN0KG9ialZhbHVlKVxuICAgICAgICAgID8gb2JqVmFsdWVcbiAgICAgICAgICA6IChpc0luZGV4KHBhdGhbaW5kZXggKyAxXSkgPyBbXSA6IHt9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXNzaWduVmFsdWUobmVzdGVkLCBrZXksIG5ld1ZhbHVlKTtcbiAgICBuZXN0ZWQgPSBuZXN0ZWRba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXQ7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKSxcbiAgICBiYXNlU2V0ID0gcmVxdWlyZSgnLi9fYmFzZVNldCcpLFxuICAgIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiAgYF8ucGlja0J5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgcHJvcGVydHkuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBiYXNlUGlja0J5KG9iamVjdCwgcGF0aHMsIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IHt9O1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHBhdGggPSBwYXRoc1tpbmRleF0sXG4gICAgICAgIHZhbHVlID0gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuXG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgcGF0aCkpIHtcbiAgICAgIGJhc2VTZXQocmVzdWx0LCBjYXN0UGF0aChwYXRoLCBvYmplY3QpLCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVBpY2tCeTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYga2V5IGluIE9iamVjdChvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VIYXNJbjtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBleGlzdHMgb24gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBmYWxzZTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSk7XG4gICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYgaGFzRnVuYyhvYmplY3QsIGtleSkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gIH1cbiAgaWYgKHJlc3VsdCB8fCArK2luZGV4ICE9IGxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgbGVuZ3RoID0gb2JqZWN0ID09IG51bGwgPyAwIDogb2JqZWN0Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYgaXNJbmRleChrZXksIGxlbmd0aCkgJiZcbiAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1BhdGg7XG4iLCJ2YXIgYmFzZUhhc0luID0gcmVxdWlyZSgnLi9fYmFzZUhhc0luJyksXG4gICAgaGFzUGF0aCA9IHJlcXVpcmUoJy4vX2hhc1BhdGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gKlxuICogXy5oYXNJbihvYmplY3QsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsICdhLmInKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsICdiJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBoYXNJbihvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc0luO1xuIiwidmFyIGJhc2VQaWNrQnkgPSByZXF1aXJlKCcuL19iYXNlUGlja0J5JyksXG4gICAgaGFzSW4gPSByZXF1aXJlKCcuL2hhc0luJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ucGlja2Agd2l0aG91dCBzdXBwb3J0IGZvciBpbmRpdmlkdWFsXG4gKiBwcm9wZXJ0eSBpZGVudGlmaWVycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGhzIFRoZSBwcm9wZXJ0eSBwYXRocyB0byBwaWNrLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gYmFzZVBpY2sob2JqZWN0LCBwYXRocykge1xuICByZXR1cm4gYmFzZVBpY2tCeShvYmplY3QsIHBhdGhzLCBmdW5jdGlvbih2YWx1ZSwgcGF0aCkge1xuICAgIHJldHVybiBoYXNJbihvYmplY3QsIHBhdGgpO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUGljaztcbiIsIi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVB1c2g7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcHJlYWRhYmxlU3ltYm9sID0gU3ltYm9sID8gU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmbGF0dGVuYWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHxcbiAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZsYXR0ZW5hYmxlO1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGlzRmxhdHRlbmFibGUgPSByZXF1aXJlKCcuL19pc0ZsYXR0ZW5hYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmxhdHRlbmAgd2l0aCBzdXBwb3J0IGZvciByZXN0cmljdGluZyBmbGF0dGVuaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aCBUaGUgbWF4aW11bSByZWN1cnNpb24gZGVwdGguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVkaWNhdGU9aXNGbGF0dGVuYWJsZV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzU3RyaWN0XSBSZXN0cmljdCB0byB2YWx1ZXMgdGhhdCBwYXNzIGBwcmVkaWNhdGVgIGNoZWNrcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHQ9W11dIFRoZSBpbml0aWFsIHJlc3VsdCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZsYXR0ZW4oYXJyYXksIGRlcHRoLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgcHJlZGljYXRlIHx8IChwcmVkaWNhdGUgPSBpc0ZsYXR0ZW5hYmxlKTtcbiAgcmVzdWx0IHx8IChyZXN1bHQgPSBbXSk7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKGRlcHRoID4gMCAmJiBwcmVkaWNhdGUodmFsdWUpKSB7XG4gICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZsYXR0ZW4gYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICAgIGJhc2VGbGF0dGVuKHZhbHVlLCBkZXB0aCAtIDEsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheVB1c2gocmVzdWx0LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNTdHJpY3QpIHtcbiAgICAgIHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGbGF0dGVuO1xuIiwidmFyIGJhc2VGbGF0dGVuID0gcmVxdWlyZSgnLi9fYmFzZUZsYXR0ZW4nKTtcblxuLyoqXG4gKiBGbGF0dGVucyBgYXJyYXlgIGEgc2luZ2xlIGxldmVsIGRlZXAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gZmxhdHRlbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZsYXR0ZW5lZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5mbGF0dGVuKFsxLCBbMiwgWzMsIFs0XV0sIDVdXSk7XG4gKiAvLyA9PiBbMSwgMiwgWzMsIFs0XV0sIDVdXG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gbGVuZ3RoID8gYmFzZUZsYXR0ZW4oYXJyYXksIDEpIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbjtcbiIsIi8qKlxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxuICogd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgYHRoaXNBcmdgIGFuZCB0aGUgYXJndW1lbnRzIG9mIGBhcmdzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgfVxuICByZXR1cm4gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcHBseTtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgIH1cbiAgICBpbmRleCA9IC0xO1xuICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlclJlc3Q7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXG52YXIgSE9UX0NPVU5UID0gODAwLFxuICAgIEhPVF9TUEFOID0gMTY7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxuICogbWlsbGlzZWNvbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byByZXN0cmljdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvcnRPdXQoZnVuYykge1xuICB2YXIgY291bnQgPSAwLFxuICAgICAgbGFzdENhbGxlZCA9IDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxuICAgICAgICByZW1haW5pbmcgPSBIT1RfU1BBTiAtIChzdGFtcCAtIGxhc3RDYWxsZWQpO1xuXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvcnRPdXQ7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwidmFyIGZsYXR0ZW4gPSByZXF1aXJlKCcuL2ZsYXR0ZW4nKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIGZsYXR0ZW5zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdFJlc3Q7XG4iLCJ2YXIgYmFzZVBpY2sgPSByZXF1aXJlKCcuL19iYXNlUGljaycpLFxuICAgIGZsYXRSZXN0ID0gcmVxdWlyZSgnLi9fZmxhdFJlc3QnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGUgcGlja2VkIGBvYmplY3RgIHByb3BlcnRpZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgc291cmNlIG9iamVjdC5cbiAqIEBwYXJhbSB7Li4uKHN0cmluZ3xzdHJpbmdbXSl9IFtwYXRoc10gVGhlIHByb3BlcnR5IHBhdGhzIHRvIHBpY2suXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogJzInLCAnYyc6IDMgfTtcbiAqXG4gKiBfLnBpY2sob2JqZWN0LCBbJ2EnLCAnYyddKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYyc6IDMgfVxuICovXG52YXIgcGljayA9IGZsYXRSZXN0KGZ1bmN0aW9uKG9iamVjdCwgcGF0aHMpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8ge30gOiBiYXNlUGljayhvYmplY3QsIHBhdGhzKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBpY2s7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoL3BpY2suanMnO1xuaW1wb3J0IHsgcGFyc2UsIHN0cmluZ2lmeSB9IGZyb20gJ3FzJztcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VMb2NhdGlvbiwgdXNlU2VhcmNoUGFyYW1zIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3dcbmV4cG9ydCBsZXQgUXVlcnlQYXJhbXMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKFF1ZXJ5UGFyYW1zKSB7XG4gIFF1ZXJ5UGFyYW1zW1wiVGFiXCJdID0gXCJ0YWJcIjtcbiAgUXVlcnlQYXJhbXNbXCJSZWRpcmVjdFwiXSA9IFwicmVkaXJlY3RVcmxcIjtcbiAgUXVlcnlQYXJhbXNbXCJSZWZyZXNoXCJdID0gXCJyZWZyZXNoXCI7XG4gIHJldHVybiBRdWVyeVBhcmFtcztcbn0oe30pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG5leHBvcnQgbGV0IFF1ZXJ5TGlzdFBhcmFtcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoUXVlcnlMaXN0UGFyYW1zKSB7XG4gIFF1ZXJ5TGlzdFBhcmFtc1tcIlBhZ2VcIl0gPSBcInBhZ2VcIjtcbiAgUXVlcnlMaXN0UGFyYW1zW1wiU29ydEJ5XCJdID0gXCJzb3J0QnlcIjtcbiAgUXVlcnlMaXN0UGFyYW1zW1wiRGlyZWN0aW9uXCJdID0gXCJkaXJlY3Rpb25cIjtcbiAgUXVlcnlMaXN0UGFyYW1zW1wiRmlsdGVyc1wiXSA9IFwiZmlsdGVyc1wiO1xuICBRdWVyeUxpc3RQYXJhbXNbXCJRdWVyeVwiXSA9IFwicXVlcnlcIjtcbiAgcmV0dXJuIFF1ZXJ5TGlzdFBhcmFtcztcbn0oe30pO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVF1ZXJ5UGFyYW1zKCkge1xuICBjb25zdCB7XG4gICAgcGF0aG5hbWVcbiAgfSA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IFtzZWFyY2hQYXJhbXMsIHNldFNlYXJjaFBhcmFtc10gPSB1c2VTZWFyY2hQYXJhbXMoKTtcbiAgY29uc3QgcGFyc2VkUXVlcnkgPSB1c2VNZW1vKCgpID0+IHBhcnNlKHNlYXJjaFBhcmFtcy50b1N0cmluZygpLCB7XG4gICAgYWxsb3dEb3RzOiB0cnVlXG4gIH0pLCBbc2VhcmNoUGFyYW1zLCBwYXRobmFtZV0pO1xuICBjb25zdCB7XG4gICAgc29ydEJ5LFxuICAgIGRpcmVjdGlvbixcbiAgICBwYWdlLFxuICAgIHRhYixcbiAgICBmaWx0ZXJzLFxuICAgIHJlZGlyZWN0VXJsXG4gIH0gPSBwYXJzZWRRdWVyeTtcbiAgY29uc3QgbGlzdFBhcmFtcyA9IHVzZU1lbW8oKCkgPT4gcGljayhwYXJzZWRRdWVyeSwgW1F1ZXJ5TGlzdFBhcmFtcy5Tb3J0QnksIFF1ZXJ5TGlzdFBhcmFtcy5GaWx0ZXJzLCBRdWVyeUxpc3RQYXJhbXMuRGlyZWN0aW9uLCBRdWVyeUxpc3RQYXJhbXMuUGFnZSwgUXVlcnlMaXN0UGFyYW1zLlF1ZXJ5XSksIFtwYXJzZWRRdWVyeV0pO1xuICBmdW5jdGlvbiBzdG9yZVBhcmFtcyhwYXJhbXMpIHtcbiAgICBzZXRTZWFyY2hQYXJhbXMoc3RyaW5naWZ5KHtcbiAgICAgIHNvcnRCeSxcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIHBhZ2UsXG4gICAgICB0YWIsXG4gICAgICBmaWx0ZXJzLFxuICAgICAgcmVkaXJlY3RVcmwsXG4gICAgICAuLi5wYXJhbXNcbiAgICB9LCB7XG4gICAgICBhbGxvd0RvdHM6IHRydWVcbiAgICB9KSk7XG4gIH1cbiAgZnVuY3Rpb24gY2xlYXJQYXJhbXMoLi4ucGFyYW1zKSB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zS2V5cyA9IEFycmF5LmZyb20oc2VhcmNoUGFyYW1zLmtleXMoKSk7XG4gICAgY29uc3QgY2xlYXJDYW5kaWRhdGVzID0gcGFyYW1zLmxlbmd0aCA/IHBhcmFtcyA6IHNlYXJjaFBhcmFtc0tleXM7XG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBzZWFyY2hQYXJhbXNLZXlzKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcmFtVG9DbGVhciBvZiBjbGVhckNhbmRpZGF0ZXMpIHtcbiAgICAgICAgaWYgKHBhcmFtLnN0YXJ0c1dpdGgocGFyYW1Ub0NsZWFyKSAmJiBzZWFyY2hQYXJhbXMuZ2V0KHBhcmFtKSkge1xuICAgICAgICAgIHNlYXJjaFBhcmFtcy5kZWxldGUocGFyYW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHNldFNlYXJjaFBhcmFtcyhzZWFyY2hQYXJhbXMpO1xuICB9XG4gIGZ1bmN0aW9uIGdldFBhcmFtKHBhcmFtKSB7XG4gICAgc2VhcmNoUGFyYW1zLmdldChwYXJhbSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwYXJzZWRRdWVyeSxcbiAgICBsaXN0UGFyYW1zLFxuICAgIGZpbHRlcnM6IGZpbHRlcnMsXG4gICAgc29ydEJ5LFxuICAgIGRpcmVjdGlvbixcbiAgICBwYWdlLFxuICAgIHRhYixcbiAgICByZWRpcmVjdFVybCxcbiAgICBzdG9yZVBhcmFtcyxcbiAgICBjbGVhclBhcmFtcyxcbiAgICBnZXRQYXJhbVxuICB9O1xufSIsImltcG9ydCB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBoaWRlRmlsdGVyRHJhd2VyLCBzaG93RmlsdGVyRHJhd2VyIH0gZnJvbSAnLi4vc3RvcmUvYWN0aW9ucy9maWx0ZXItZHJhd2VyLmpzJztcbmltcG9ydCB7IHVzZVF1ZXJ5UGFyYW1zIH0gZnJvbSAnLi91c2UtcXVlcnktcGFyYW1zLmpzJztcbmV4cG9ydCBjb25zdCB1c2VGaWx0ZXJEcmF3ZXIgPSAoKSA9PiB7XG4gIGNvbnN0IFtmaWx0ZXJzQ291bnQsIHNldEZpbHRlcnNDb3VudF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICBjb25zdCBpc1Zpc2libGUgPSB1c2VTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5maWx0ZXJEcmF3ZXIuaXNWaXNpYmxlKTtcbiAgY29uc3Qge1xuICAgIGZpbHRlcnMgPSB7fVxuICB9ID0gdXNlUXVlcnlQYXJhbXMoKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRGaWx0ZXJzQ291bnQoT2JqZWN0LmtleXMoZmlsdGVycykubGVuZ3RoKTtcbiAgfSwgW2ZpbHRlcnNdKTtcbiAgY29uc3QgdG9nZ2xlRmlsdGVyID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKGlzVmlzaWJsZSA/IGhpZGVGaWx0ZXJEcmF3ZXIoKSA6IHNob3dGaWx0ZXJEcmF3ZXIoKSk7XG4gIH07XG4gIGNvbnN0IG9wZW4gPSAoKSA9PiB7XG4gICAgZGlzcGF0Y2goc2hvd0ZpbHRlckRyYXdlcigpKTtcbiAgfTtcbiAgY29uc3QgY2xvc2UgPSAoKSA9PiB7XG4gICAgZGlzcGF0Y2goaGlkZUZpbHRlckRyYXdlcigpKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBmaWx0ZXJzQ291bnQsXG4gICAgaXNWaXNpYmxlLFxuICAgIHRvZ2dsZUZpbHRlcixcbiAgICBvcGVuLFxuICAgIGNsb3NlXG4gIH07XG59OyIsIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAbG9hZCAuL3VzZS1sb2NhbC1zdG9yYWdlLmRvYy5tZFxuICogQHN1YmNhdGVnb3J5IEhvb2tzXG4gKiBAY2xhc3NcbiAqIEBzZWUgaHR0cHM6Ly91c2Vob29rcy5jb20vdXNlTG9jYWxTdG9yYWdlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAgICAgICAgICBrZXkgdW5kZXIgd2hpY2ggaG9vayB3aWxsIHN0b3JlIHRoZSBkYXRhXG4gKiBAcGFyYW0ge1R9ICAgICAgaW5pdGlhbFZhbHVlICAgIHZhbHVlIHdoaWNoIHdpbGwgYmUgc3RyaW5naWZpZWQgYW5kIHN0b3JlZFxuICogQHJldHVybiB7VXNlTG9jYWxTdG9yYWdlUmVzdWx0PFQ+fVxuICogQGJ1bmRsZVxuICogQHR5cGUge0Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlTG9jYWxTdG9yYWdlKGtleSwgaW5pdGlhbFZhbHVlKSB7XG4gIC8vIFN0YXRlIHRvIHN0b3JlIG91ciB2YWx1ZVxuICAvLyBQYXNzIGluaXRpYWwgc3RhdGUgZnVuY3Rpb24gdG8gdXNlU3RhdGUgc28gbG9naWMgaXMgb25seSBleGVjdXRlZCBvbmNlXG4gIGNvbnN0IFtzdG9yZWRWYWx1ZSwgc2V0U3RvcmVkVmFsdWVdID0gdXNlU3RhdGUoKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgZnJvbSBsb2NhbCBzdG9yYWdlIGJ5IGtleVxuICAgICAgY29uc3QgaXRlbSA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgICAgLy8gUGFyc2Ugc3RvcmVkIGpzb24gb3IgaWYgbm9uZSByZXR1cm4gaW5pdGlhbFZhbHVlXG4gICAgICByZXR1cm4gaXRlbSA/IEpTT04ucGFyc2UoaXRlbSkgOiBpbml0aWFsVmFsdWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElmIGVycm9yIGFsc28gcmV0dXJuIGluaXRpYWxWYWx1ZVxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgcmV0dXJuIGluaXRpYWxWYWx1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFJldHVybiBhIHdyYXBwZWQgdmVyc2lvbiBvZiB1c2VTdGF0ZSdzIHNldHRlciBmdW5jdGlvbiB0aGF0IC4uLlxuICAvLyAuLi4gcGVyc2lzdHMgdGhlIG5ldyB2YWx1ZSB0byBsb2NhbFN0b3JhZ2UuXG4gIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBBbGxvdyB2YWx1ZSB0byBiZSBhIGZ1bmN0aW9uIHNvIHdlIGhhdmUgc2FtZSBBUEkgYXMgdXNlU3RhdGVcbiAgICAgIGNvbnN0IHZhbHVlVG9TdG9yZSA9IHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb24gPyB2YWx1ZShzdG9yZWRWYWx1ZSkgOiB2YWx1ZTtcbiAgICAgIC8vIFNhdmUgc3RhdGVcbiAgICAgIHNldFN0b3JlZFZhbHVlKHZhbHVlVG9TdG9yZSk7XG4gICAgICAvLyBTYXZlIHRvIGxvY2FsIHN0b3JhZ2VcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlVG9TdG9yZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBBIG1vcmUgYWR2YW5jZWQgaW1wbGVtZW50YXRpb24gd291bGQgaGFuZGxlIHRoZSBlcnJvciBjYXNlXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgfVxuICB9O1xuICByZXR1cm4gW3N0b3JlZFZhbHVlLCBzZXRWYWx1ZV07XG59XG5leHBvcnQgZGVmYXVsdCB1c2VMb2NhbFN0b3JhZ2U7IiwiaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2gsIHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgdXNlTG9jYXRpb24gfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IHsgdXNlTG9jYWxTdG9yYWdlIH0gZnJvbSAnLi4vaG9va3MvdXNlLWxvY2FsLXN0b3JhZ2UvaW5kZXguanMnO1xuaW1wb3J0IHsgY2hhbmdlUm91dGUsIGluaXRpYWxpemVSb3V0ZSB9IGZyb20gJy4uL3N0b3JlL2FjdGlvbnMvcm91dGUtY2hhbmdlZC5qcyc7XG5jb25zdCB1c2VIaXN0b3J5TGlzdGVuID0gKCkgPT4ge1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IFtzdG9yZWRQYXRoLCBzZXRTdG9yZWRQYXRoXSA9IHVzZUxvY2FsU3RvcmFnZSgncHJldlBhZ2UnLCB7fSk7XG4gIGNvbnN0IHtcbiAgICB0byA9IHt9LFxuICAgIGZyb20gPSB7fVxuICB9ID0gdXNlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUucm91dGVyKTtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzdG9yZWRQYXRoKSB7XG4gICAgICBkaXNwYXRjaChpbml0aWFsaXplUm91dGUoc3RvcmVkUGF0aCkpO1xuICAgIH1cbiAgfSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpb3VzUGF0aCA9IFt0by5wYXRobmFtZSwgdG8uc2VhcmNoXS5qb2luKCcnKTtcbiAgICBjb25zdCBjdXJyZW50UGF0aCA9IFtsb2NhdGlvbi5wYXRobmFtZSwgbG9jYXRpb24uc2VhcmNoXS5qb2luKCcnKTtcbiAgICBpZiAocHJldmlvdXNQYXRoICE9PSBjdXJyZW50UGF0aCkge1xuICAgICAgZGlzcGF0Y2goY2hhbmdlUm91dGUobG9jYXRpb24pKTtcbiAgICB9XG4gIH0sIFtsb2NhdGlvbl0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmcm9tLnBhdGhuYW1lKSB7XG4gICAgICBzZXRTdG9yZWRQYXRoKGZyb20pO1xuICAgIH1cbiAgfSwgW2Zyb21dKTtcbn07XG5leHBvcnQgeyB1c2VIaXN0b3J5TGlzdGVuLCB1c2VIaXN0b3J5TGlzdGVuIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgeyB1c2VMb2NhdGlvbiwgdXNlTmF2aWdhdGUgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cblxuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vaG9va3MvdXNlLXRyYW5zbGF0aW9uLmpzJztcbmltcG9ydCB1c2VMb2NhbFN0b3JhZ2UgZnJvbSAnLi91c2UtbG9jYWwtc3RvcmFnZS91c2UtbG9jYWwtc3RvcmFnZS5qcyc7XG5jb25zdCBpc1NlbGVjdGVkID0gKGhyZWYsIGxvY2F0aW9uKSA9PiB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoYCR7aHJlZn0oJHwvKWApO1xuICByZXR1cm4gISFsb2NhdGlvbi5wYXRobmFtZS5tYXRjaChyZWdFeHApO1xufTtcbmV4cG9ydCBmdW5jdGlvbiB1c2VOYXZpZ2F0aW9uUmVzb3VyY2VzKHJlc291cmNlcykge1xuICBjb25zdCBbb3BlbkVsZW1lbnRzLCBzZXRPcGVuRWxlbWVudHNdID0gdXNlTG9jYWxTdG9yYWdlKCdzaWRlYmFyRWxlbWVudHMnLCB7fSk7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgY29uc3QgbG9jYXRpb24gPSB1c2VMb2NhdGlvbigpO1xuICBjb25zdCB7XG4gICAgdHJhbnNsYXRlTGFiZWxcbiAgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGVucmljaFJlc291cmNlID0gdXNlTWVtbygoKSA9PiAocmVzb3VyY2UsIGljb24pID0+ICh7XG4gICAgaHJlZjogcmVzb3VyY2UuaHJlZiB8fCB1bmRlZmluZWQsXG4gICAgaWNvbixcbiAgICBpc1NlbGVjdGVkOiBpc1NlbGVjdGVkKHJlc291cmNlLmhyZWYsIGxvY2F0aW9uKSxcbiAgICBsYWJlbDogdHJhbnNsYXRlTGFiZWwocmVzb3VyY2UubmFtZSwgcmVzb3VyY2UuaWQpLFxuICAgIGlkOiByZXNvdXJjZS5pZCxcbiAgICBvbkNsaWNrOiBldmVudCA9PiB7XG4gICAgICBpZiAocmVzb3VyY2UuaHJlZikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBuYXZpZ2F0ZShyZXNvdXJjZS5ocmVmKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pLCBbbG9jYXRpb24sIG5hdmlnYXRlXSk7XG5cbiAgLy8gZ3JvdXBpbmcgcmVzb3VyY2VzIGludG8gcGFyZW50c1xuICBjb25zdCBtYXAgPSByZXNvdXJjZXNcbiAgLy8gZmlyc3QgZmlsdGVyIG91dCByZXNvdXJjZXMgd2hpY2ggYXJlIG5vdCB2aXNpYmxlXG4gIC5maWx0ZXIocmVzID0+IHJlcy5ocmVmICYmIHJlcy5uYXZpZ2F0aW9uPy5zaG93ICE9PSBmYWxzZSkucmVkdWNlKChtZW1vLCByZXNvdXJjZSkgPT4ge1xuICAgIC8vIGluIGNhc2UgcmVzb3VyY2UgaGFzIHRoZSBzYW1lIG5hbWUgYXMgcGFyZW50IHdlIG5hbWVzcGFjZSBpdCB3aXQgXCJyZXNvdXJjZS1cIlwiXG4gICAgY29uc3Qga2V5ID0gcmVzb3VyY2UubmF2aWdhdGlvbj8ubmFtZSB8fCBbJ3Jlc291cmNlJywgcmVzb3VyY2UubmFtZV0uam9pbignLScpO1xuICAgIGlmICghcmVzb3VyY2UubmF2aWdhdGlvbiB8fCByZXNvdXJjZS5uYXZpZ2F0aW9uLm5hbWUgPT09IG51bGwpIHtcbiAgICAgIG1lbW9ba2V5XSA9IGVucmljaFJlc291cmNlKHJlc291cmNlLCByZXNvdXJjZS5uYXZpZ2F0aW9uPy5pY29uKTtcbiAgICB9IGVsc2UgaWYgKG1lbW9ba2V5XSAmJiBtZW1vW2tleV0uZWxlbWVudHMgJiYgcmVzb3VyY2UubmF2aWdhdGlvbj8ubmFtZSkge1xuICAgICAgbWVtb1trZXldLmxhYmVsID0gdHJhbnNsYXRlTGFiZWwocmVzb3VyY2UubmF2aWdhdGlvbj8ubmFtZSk7XG4gICAgICBtZW1vW2tleV0uZWxlbWVudHM/LnB1c2g/LihlbnJpY2hSZXNvdXJjZShyZXNvdXJjZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZW1vW2tleV0gPSB7XG4gICAgICAgIGVsZW1lbnRzOiBbZW5yaWNoUmVzb3VyY2UocmVzb3VyY2UpXSxcbiAgICAgICAgbGFiZWw6IHRyYW5zbGF0ZUxhYmVsKHJlc291cmNlLm5hdmlnYXRpb24/Lm5hbWUpLFxuICAgICAgICBpY29uOiByZXNvdXJjZS5uYXZpZ2F0aW9uPy5pY29uLFxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBzZXRPcGVuRWxlbWVudHMoe1xuICAgICAgICAgIC4uLm9wZW5FbGVtZW50cyxcbiAgICAgICAgICBba2V5XTogIW9wZW5FbGVtZW50c1trZXldXG4gICAgICAgIH0pLFxuICAgICAgICBpc09wZW46ICEhb3BlbkVsZW1lbnRzW2tleV1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9LCB7fSk7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKG1hcCk7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VOYXZpZ2F0aW9uUmVzb3VyY2VzOyIsImV4cG9ydCBjb25zdCBGT1JNX1ZBTFVFX05VTEwgPSAnX19GT1JNX1ZBTFVFX05VTExfXyc7XG5leHBvcnQgY29uc3QgRk9STV9WQUxVRV9FTVBUWV9PQkpFQ1QgPSAnX19GT1JNX1ZBTFVFX0VNUFRZX09CSkVDVF9fJztcbmV4cG9ydCBjb25zdCBGT1JNX1ZBTFVFX0VNUFRZX0FSUkFZID0gJ19fRk9STV9WQUxVRV9FTVBUWV9BUlJBWV9fJztcbmNvbnN0IGlzT2JqZWN0T3JBcnJheSA9IHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuY29uc3RydWN0b3IgIT09IEZpbGUgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpO1xuXG4vKipcbiAqIENoYW5nZXMgUmVjb3JkSlNPTiB0aGF0IGl0IGNhbiBiZSBzZW5kIGFzIGEgRm9ybURhdGEgdG8gdGhlIGJhY2tlbmQuXG4gKlxuICogRm9ybURhdGEgaXMgcmVxdWlyZWQgYmVjYXVzZSB3ZSBhcmUgc2VuZGluZyBmaWxlcyB2aWEgdGhlIHdpcmUuIEJ1dCBpdCBoYXMgbGltaXRhdGlvbnMuXG4gKiBOYW1lbHkgaXQgY2FuIG9ubHkgdHJhbnNwb3J0IGZpbGVzIGFuZCBzdHJpbmdzLiBUaGF0IGlzIHdoeSB3ZSBoYXZlIHRvIGNvbnZlcnQgc29tZVxuICogc3RhbmRhcmQgdHlwZXMgbGlrZSBOVUxMIHRvIGNvbnN0YW50cyBzbyB0aGV5IGNhbiBiZSBwcm9wZXJ0eSBjb252ZXJ0ZWQgYmFjayBieSB0aGUgYmFja2VuZC5cbiAqIEFuZCB0aHVzIHByb3Blcmx5IGhhbmRsZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSAgIHtSZWNvcmRKU09OfSAgcmVjb3JkXG4gKiBAcmV0dXJuICB7Rm9ybURhdGF9XG4gKi9cbmZ1bmN0aW9uIHBhcmFtc1RvRm9ybURhdGEocGFyYW1zKSB7XG4gIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgLy8gQXNzdW1lIHRoYXQgcGFyYW1zIGFyZSBmbGF0dGVkXG4gIE9iamVjdC5lbnRyaWVzKHBhcmFtcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgLy8ge0BsaW5rIHVwZGF0ZVJlY29yZH0gZG9lcyBub3QgY2hhbmdlIGVtcHR5IG9iamVjdHMgXCJ7fVwiIC0gc28gaW4gb3JkZXIgdG8gcHJldmVudCBoYXZpbmdcbiAgICAvLyB0aGVtIGNoYW5nZWQgdG8gXCJbb2JqZWN0IE9iamVjdF1cIiB3ZSBoYXZlIHRvIHNldCB0aGVtIHRvIGVtcHR5IHN0cmluZ3MuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZm9ybURhdGEuc2V0KGtleSwgRk9STV9WQUxVRV9OVUxMKTtcbiAgICB9XG4gICAgLy8gRmlsZSBvYmplY3RzIGhhcyB0byBnbyB0aHJvdWdoIGJlY2F1c2UgdGhleSBhcmUgaGFuZGxlZCBieSBGb3JtRGF0YVxuICAgIGlmIChpc09iamVjdE9yQXJyYXkodmFsdWUpKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhLnNldChrZXksIEZPUk1fVkFMVUVfRU1QVFlfQVJSQVkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZvcm1EYXRhLnNldChrZXksIEZPUk1fVkFMVUVfRU1QVFlfT0JKRUNUKTtcbiAgICB9XG4gICAgLy8gQ29udmVydCBEYXRlIGZpZWxkcyB0byBVVEMgdGltZXpvbmVcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gZm9ybURhdGEuc2V0KGtleSwgdmFsdWUudG9JU09TdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgLy8gUmVzdCBnb2VzIGFzIGEgc3RhbmRhcmQgdmFsdWVcbiAgICByZXR1cm4gZm9ybURhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuZXhwb3J0IHsgcGFyYW1zVG9Gb3JtRGF0YSBhcyBkZWZhdWx0LCBwYXJhbXNUb0Zvcm1EYXRhIH07IiwiLyoqXG4gKiBIYW5kbGVycyBvZiBhbGwgW0FjdGlvbnNde0BsaW5rIEFjdGlvbn0gb2YgdHlwZSBgcmVjb3JkYCByZXR1cm5zIHJlY29yZC5cbiAqIERlcGVuZGluZyBvbiBhIHBsYWNlIGFuZCByZXNwb25zZSB3ZSBoYXZlIHRvIG1lcmdlIHdoYXQgd2FzIHJldHVybmVkXG4gKiB0byB0aGUgYWN0dWFsIHN0YXRlLiBJdCBpcyBkb25lIGluIGZvbGxvd2luZyBwbGFjZXM6XG4gKiAtIHtAbGluayB1c2VSZWNvcmR9IGhvb2tcbiAqIC0ge0BsaW5rIFJlY29yZEluTGlzdH0gY29tcG9uZW50XG4gKiAtIHtAbGluayBSZWNvcmRBY3Rpb259IGNvbXBvbmVudFxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IG1lcmdlUmVjb3JkUmVzcG9uc2UgPSAocmVjb3JkLCByZXNwb25zZSkgPT4gKHtcbiAgLy8gd2Ugc3RhcnQgZnJvbSB0aGUgcmVzcG9uc2UgYmVjYXVzZSBpdCBjYW4gaGF2ZSBkaWZmZXJlbnQgcmVjb3JkQWN0aW9ucyBvciBidWxrQWN0aW9uc1xuICAuLi4ocmVzcG9uc2UucmVjb3JkIHx8IHJlY29yZCksXG4gIC8vIHJlY29yZHMgaGFzIHRvIGJlIHJlc2V0IGV2ZXJ5IHRpbWUgYmVjYXVzZSBzbyB0aGF0IHVzZXIgd29udFxuICAvLyBzZWUgb2xkIGVycm9ycyB3aGljaCBhcmUgbm90IHJlbGV2YW50IGFueW1vcmVcbiAgZXJyb3JzOiByZXNwb25zZS5yZWNvcmQuZXJyb3JzLFxuICBwb3B1bGF0ZWQ6IHtcbiAgICAuLi5yZWNvcmQucG9wdWxhdGVkLFxuICAgIC4uLnJlc3BvbnNlLnJlY29yZC5wb3B1bGF0ZWRcbiAgfSxcbiAgcGFyYW1zOiB7XG4gICAgLi4ucmVjb3JkLnBhcmFtcyxcbiAgICAuLi5yZXNwb25zZS5yZWNvcmQucGFyYW1zXG4gIH1cbn0pO1xuZXhwb3J0IGRlZmF1bHQgbWVyZ2VSZWNvcmRSZXNwb25zZTsiLCJpbXBvcnQgeyBmbGF0IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmxhdC9pbmRleC5qcyc7XG4vKipcbiAqIEhPRiByZXR1cm5pbmcgYSBmdW5jdGlvbiB3aGljaCB0YWtlcyBhIHJlY29yZCBhbmQgcmV0dXJucyBhbiB1cGRhdGVkIHJlY29yZC5cbiAqIFRoaXMgd2F5IHdlIGNhbiBwYXNzIHRoaXMgdG8gc2V0U3RhdGUgaW4gcmVhY3QsIHdoaWNoIHRha2VzIG9sZCBzdGF0ZVxuICogKGluIG91ciBjYXNlIHByZXZpb3VzUmVjb3JkKSBhcyBhbiBhcmd1bWVudC5cbiAqXG4gKiBGdW5jdGlvbiBpcyB1c2VkIHdoZW4gdG8gdGhlIHtAbGluayBPblByb3BlcnR5Q2hhbmdlfSBjYWxsYmFjaywgdXNlciBwYXNzZXNcbiAqIGtleSAocHJvcGVydHkgbmFtZSkgYW5kIHRoZSB2YWx1ZSAoZm9sbG93ZWQgYnkgYW4gb3B0aW9uYWwgc2VsZWN0ZWRSZWNvcmQpLlxuICpcbiAqIFRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgZnVuY3Rpb24gaXMgdG86XG4gKiAtIGNsZWFyIG9sZCB2YWx1ZXMgdW5kZXIgcGFzc2VkIGtleTogc28gd2hlbiB1c2VyIHBhc3NlcyBwcm9wZXJ0eSA9PT0gYHNvbWUua2V5YFxuICogICBmdW5jdGlvbiByZW1vdmVzIGBzb21lLmtleS4xYCwgYHNvbWUua2V5LjJgIGV0Y1xuICogLSBzZXRzIG5ldyB2YWx1ZSB1bmRlciB0aGUgcGFzc2VkIGtleSBmb3IgcHJpbWl0aXZlIHR5cGVzXG4gKiAtIGluIGNhc2Ugb2Ygb2JqZWN0cyAtIGl0IGZsYXR0ZW5zIHRoZW0gZmlyc3QgYW5kIHRoZW4gc2V0cyBhbGwgdGhlIHJlc3VsdGVkIHZhbHVlc1xuICogICB1bmRlciB0aGUgcGF0aCBwcm92aWRlZCBpbiB0aGUgcHJvcGVydHkgYXJndW1lbnRcbiAqIC0gaXQgZmlsbHMgdmFsdWUgaW4gUmVjb3JkSlNPTiNwb3B1bGF0ZWQgd2hlbiBzZWxlY3RlZFJlY29yZCBpcyBnaXZlblxuICogLSBmaW5hbGx5IGl0IGludmFsaWRhdGVzIHBvcHVsYXRlZCBmb3IgZ2l2ZW4gcHJvcGVydHlcbiAqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9ICAgICAgcHJvcGVydHkgICAgICAgIHByb3BlcnR5IHRoYXQgbXVzdCBiZSB1cGRhdGVkLCBzdXBwb3J0cyBuZXN0aW5nXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBkb3RzXG4gKiBAcGFyYW0ge2FueX0gICAgICAgICB2YWx1ZSAgICAgICAgICAgdmFsdWUgdGhhdCBtdXN0IGJlIHNldCwgdW5kZWZpbmVkIG9yIG51bGwgaWZcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGluZywgd2lsbCBiZSBmbGF0dGVuZWRcbiAqIEBwYXJhbSB7UmVjb3JkSlNPTn0gIHNlbGVjdGVkUmVjb3JkICBpZiB2YWx1ZSBpcyByZWZlcmVuY2UgSUQsIHRoaXMgbXVzdCBiZSBhIHJlY29yZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0J3MgcmVmZXJlbmNpbmcgdG9cbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWNvcmQgPSAocHJvcGVydHksIHZhbHVlLCBzZWxlY3RlZFJlY29yZCkgPT4gcHJldmlvdXNSZWNvcmQgPT4ge1xuICBsZXQgcG9wdWxhdGVkTW9kaWZpZWQgPSBmYWxzZTtcbiAgY29uc3QgcG9wdWxhdGVkQ29weSA9IHtcbiAgICAuLi5wcmV2aW91c1JlY29yZC5wb3B1bGF0ZWRcbiAgfTtcbiAgY29uc3QgcGFyYW1zQ29weSA9IGZsYXQuc2V0KHByZXZpb3VzUmVjb3JkLnBhcmFtcywgcHJvcGVydHksIHZhbHVlKTtcbiAgaWYgKHByb3BlcnR5IGluIHBvcHVsYXRlZENvcHkpIHtcbiAgICBkZWxldGUgcG9wdWxhdGVkQ29weVtwcm9wZXJ0eV07XG4gICAgcG9wdWxhdGVkTW9kaWZpZWQgPSB0cnVlO1xuICB9XG4gIGlmIChzZWxlY3RlZFJlY29yZCkge1xuICAgIHBvcHVsYXRlZENvcHlbcHJvcGVydHldID0gc2VsZWN0ZWRSZWNvcmQ7XG4gICAgcG9wdWxhdGVkTW9kaWZpZWQgPSB0cnVlO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4ucHJldmlvdXNSZWNvcmQsXG4gICAgcGFyYW1zOiBwYXJhbXNDb3B5LFxuICAgIHBvcHVsYXRlZDogcG9wdWxhdGVkTW9kaWZpZWQgPyBwb3B1bGF0ZWRDb3B5IDogcHJldmlvdXNSZWNvcmQucG9wdWxhdGVkXG4gIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXBkYXRlUmVjb3JkOyIsImNvbnN0IGlzRW50aXJlUmVjb3JkR2l2ZW4gPSAocHJvcGVydHlPclJlY29yZCwgdmFsdWUpID0+ICEhKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCdcbi8vIHVzZXIgY2FuIHBhc3MgcHJvcGVydHkgYW5kIG9taXQgdmFsdWUuIFRoaXMgbWFrZXMgc2Vuc2Ugd2hlblxuLy8gdGhpcmQgYXJndW1lbnQgb2YgdGhlIGZ1bmN0aW9uIChzZWxlY3RlZFJlY29yZCkgaXMgcGFzc2VkIHRvIG9uQ2hhbmdlXG4vLyBjYWxsYmFja1xuJiYgISh0eXBlb2YgcHJvcGVydHlPclJlY29yZCA9PT0gJ3N0cmluZycpXG4vLyB3ZSBhc3N1bWUgdGhhdCBvbmx5IHBhcmFtcyBoYXMgdG8gYmUgZ2l2ZW5cbiYmIHByb3BlcnR5T3JSZWNvcmQucGFyYW1zKTtcbmV4cG9ydCB7IGlzRW50aXJlUmVjb3JkR2l2ZW4gYXMgZGVmYXVsdCwgaXNFbnRpcmVSZWNvcmRHaXZlbiB9OyIsImltcG9ydCB7IGZsYXQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9mbGF0L2luZGV4LmpzJztcbmV4cG9ydCBjb25zdCBmaWx0ZXJSZWNvcmRQYXJhbXMgPSBmdW5jdGlvbiAocmVjb3JkLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKG9wdGlvbnMuaW5jbHVkZVBhcmFtcyAmJiByZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVjb3JkLFxuICAgICAgcGFyYW1zOiBmbGF0LnNlbGVjdFBhcmFtcyhyZWNvcmQucGFyYW1zIHx8IHt9LCBvcHRpb25zLmluY2x1ZGVQYXJhbXMpXG4gICAgfTtcbiAgfVxuICByZXR1cm4gcmVjb3JkO1xufTtcbmV4cG9ydCBjb25zdCBpc1Byb3BlcnR5UGVybWl0dGVkID0gKHByb3BlcnR5TmFtZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpbmNsdWRlUGFyYW1zXG4gIH0gPSBvcHRpb25zO1xuICBpZiAoaW5jbHVkZVBhcmFtcykge1xuICAgIGNvbnN0IHBhcnRzID0gZmxhdC5wYXRoVG9QYXJ0cyhwcm9wZXJ0eU5hbWUsIHtcbiAgICAgIHNraXBBcnJheUluZGV4ZXM6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gcGFydHMuc29tZShwYXJ0ID0+IGluY2x1ZGVQYXJhbXMuaW5jbHVkZXMocGFydCkpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTsiLCJpbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXBpQ2xpZW50IGZyb20gJy4uLy4uL3V0aWxzL2FwaS1jbGllbnQuanMnO1xuaW1wb3J0IHsgcGFyYW1zVG9Gb3JtRGF0YSB9IGZyb20gJy4vcGFyYW1zLXRvLWZvcm0tZGF0YS5qcyc7XG5pbXBvcnQgdXNlTm90aWNlIGZyb20gJy4uL3VzZS1ub3RpY2UuanMnO1xuaW1wb3J0IG1lcmdlUmVjb3JkUmVzcG9uc2UgZnJvbSAnLi9tZXJnZS1yZWNvcmQtcmVzcG9uc2UuanMnO1xuaW1wb3J0IHVwZGF0ZVJlY29yZCBmcm9tICcuL3VwZGF0ZS1yZWNvcmQuanMnO1xuaW1wb3J0IGlzRW50aXJlUmVjb3JkR2l2ZW4gZnJvbSAnLi9pcy1lbnRpcmUtcmVjb3JkLWdpdmVuLmpzJztcbmltcG9ydCB7IGZpbHRlclJlY29yZFBhcmFtcywgaXNQcm9wZXJ0eVBlcm1pdHRlZCB9IGZyb20gJy4vZmlsdGVyLXJlY29yZC5qcyc7XG5pbXBvcnQgeyBmbGF0IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmxhdC9pbmRleC5qcyc7XG5pbXBvcnQgeyB1c2VRdWVyeVBhcmFtcyB9IGZyb20gJy4uL3VzZS1xdWVyeS1wYXJhbXMuanMnO1xuY29uc3QgYXBpID0gbmV3IEFwaUNsaWVudCgpO1xuXG4vKipcbiAqIEBsb2FkIC4vdXNlLXJlY29yZC5kb2MubWRcbiAqIEBzdWJjYXRlZ29yeSBIb29rc1xuICogQGNsYXNzXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAYnVuZGxlXG4gKiBAcGFyYW0ge1JlY29yZEpTT059IFtpbml0aWFsUmVjb3JkXSxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXNvdXJjZUlkXG4gKiBAcGFyYW0ge1VzZVJlY29yZE9wdGlvbnN9IFtvcHRpb25zXVxuICogQHJldHVybiB7VXNlUmVjb3JkUmVzdWx0fVxuICovXG5leHBvcnQgY29uc3QgdXNlUmVjb3JkID0gKGluaXRpYWxSZWNvcmQsIHJlc291cmNlSWQsIG9wdGlvbnMpID0+IHtcbiAgLy8gc2V0dGluZyB1cCBzdGF0ZVxuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc1N5bmNlZCwgc2V0SXNTeW5jZWRdID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFtwcm9ncmVzcywgc2V0UHJvZ3Jlc3NdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IHtcbiAgICBwYXJzZWRRdWVyeVxuICB9ID0gdXNlUXVlcnlQYXJhbXMoKTtcbiAgY29uc3QgZmlsdGVyZWRSZWNvcmQgPSBpbml0aWFsUmVjb3JkID8gZmlsdGVyUmVjb3JkUGFyYW1zKGluaXRpYWxSZWNvcmQsIG9wdGlvbnMpIDogbnVsbDtcbiAgY29uc3QgW3JlY29yZCwgc2V0UmVjb3JkXSA9IHVzZVN0YXRlKHtcbiAgICAuLi5maWx0ZXJlZFJlY29yZCxcbiAgICBwYXJhbXM6IGZpbHRlcmVkUmVjb3JkPy5wYXJhbXMgPz8ge30sXG4gICAgZXJyb3JzOiBpbml0aWFsUmVjb3JkPy5lcnJvcnMgPz8ge30sXG4gICAgcG9wdWxhdGVkOiBpbml0aWFsUmVjb3JkPy5wb3B1bGF0ZWQgPz8ge31cbiAgfSk7XG5cbiAgLy8gaXQga2VlcHMgdGhlIHNhbWUgZm9ybWF0IGFzIHVzZVN0YXRlIGZ1bmN0aW9uIHdoaWNoIGNhbiB0YWtlIGVpdGhlciB2YWx1ZSBvciBmdW5jdGlvblxuICBjb25zdCBzZXRGaWx0ZXJlZFJlY29yZCA9IHVzZUNhbGxiYWNrKHZhbHVlID0+IHtcbiAgICBjb25zdCBuZXdSZWNvcmQgPSB2YWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gdmFsdWUocmVjb3JkKSA6IHZhbHVlO1xuICAgIHNldFJlY29yZChmaWx0ZXJSZWNvcmRQYXJhbXMobmV3UmVjb3JkLCBvcHRpb25zKSk7XG4gIH0sIFtvcHRpb25zLCByZWNvcmRdKTtcbiAgY29uc3Qgb25Ob3RpY2UgPSB1c2VOb3RpY2UoKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKHByb3BlcnR5T3JSZWNvcmQsIHZhbHVlLCBpbmNvbWluZ1JlY29yZCkgPT4ge1xuICAgIGlmIChpc0VudGlyZVJlY29yZEdpdmVuKHByb3BlcnR5T3JSZWNvcmQsIHZhbHVlKSkge1xuICAgICAgc2V0RmlsdGVyZWRSZWNvcmQocHJvcGVydHlPclJlY29yZCk7XG4gICAgfSBlbHNlIGlmIChpc1Byb3BlcnR5UGVybWl0dGVkKHByb3BlcnR5T3JSZWNvcmQsIG9wdGlvbnMpKSB7XG4gICAgICBzZXRSZWNvcmQodXBkYXRlUmVjb3JkKHByb3BlcnR5T3JSZWNvcmQsIHZhbHVlLCBpbmNvbWluZ1JlY29yZCkpO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oW2BZb3UgYXJlIHRyeWluZyB0byBzZXQgcHJvcGVydHk6IFwiJHtwcm9wZXJ0eU9yUmVjb3JkfVwiIHdoaWNoYCwgJ2lzIG5vdCBwZXJtaXR0ZWQuIFRha2UgYSBsb29rIGF0IGB1c2VSZWNvcmQoLi4uLCB7IGluY2x1ZGVQYXJhbXM6IFsuLi5dfSlgJ10uam9pbignXFxuJykpO1xuICAgIH1cbiAgICBzZXRJc1N5bmNlZChmYWxzZSk7XG4gIH0sIFtzZXRSZWNvcmQsIG9wdGlvbnNdKTtcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlQ2FsbGJhY2soKGN1c3RvbVBhcmFtcyA9IHt9LCBzdWJtaXRPcHRpb25zKSA9PiB7XG4gICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICBjb25zdCBtZXJnZWRQYXJhbXMgPSBmbGF0Lm1lcmdlKHJlY29yZC5wYXJhbXMsIGN1c3RvbVBhcmFtcyk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBwYXJhbXNUb0Zvcm1EYXRhKG1lcmdlZFBhcmFtcyk7XG4gICAgY29uc3QgYWN0aW9uUGFyYW1zID0ge1xuICAgICAgcmVzb3VyY2VJZCxcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGUgPT4gc2V0UHJvZ3Jlc3MoTWF0aC5yb3VuZChlLmxvYWRlZCAqIDEwMCAvIChlLnRvdGFsID8/IDEpKSksXG4gICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgIHBhcmFtczogcGFyc2VkUXVlcnksXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByb21pc2UgPSBpbml0aWFsUmVjb3JkPy5pZCA/IGFwaS5yZWNvcmRBY3Rpb24oe1xuICAgICAgLi4uYWN0aW9uUGFyYW1zLFxuICAgICAgYWN0aW9uTmFtZTogJ2VkaXQnLFxuICAgICAgcmVjb3JkSWQ6IHJlY29yZC5pZFxuICAgIH0pIDogYXBpLnJlc291cmNlQWN0aW9uKHtcbiAgICAgIC4uLmFjdGlvblBhcmFtcyxcbiAgICAgIGFjdGlvbk5hbWU6ICduZXcnXG4gICAgfSk7XG4gICAgcHJvbWlzZS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5kYXRhLm5vdGljZSkge1xuICAgICAgICBvbk5vdGljZShyZXNwb25zZS5kYXRhLm5vdGljZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3VibWl0T3B0aW9ucz8udXBkYXRlT25TYXZlICE9PSBmYWxzZSkge1xuICAgICAgICBzZXRGaWx0ZXJlZFJlY29yZChwcmV2ID0+IG1lcmdlUmVjb3JkUmVzcG9uc2UocHJldiwgcmVzcG9uc2UuZGF0YSkpO1xuICAgICAgfVxuICAgICAgc2V0UHJvZ3Jlc3MoMCk7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldElzU3luY2VkKHRydWUpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIG9uTm90aWNlKHtcbiAgICAgICAgbWVzc2FnZTogJ1RoZXJlIHdhcyBhbiBlcnJvciB1cGRhdGluZyByZWNvcmQsIENoZWNrIG91dCBjb25zb2xlIHRvIHNlZSBtb3JlIGluZm9ybWF0aW9uLicsXG4gICAgICAgIHR5cGU6ICdlcnJvcidcbiAgICAgIH0pO1xuICAgICAgc2V0UHJvZ3Jlc3MoMCk7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfSwgW3JlY29yZCwgcmVzb3VyY2VJZCwgc2V0TG9hZGluZywgc2V0UHJvZ3Jlc3MsIHNldFJlY29yZF0pO1xuICByZXR1cm4ge1xuICAgIHJlY29yZCxcbiAgICBoYW5kbGVDaGFuZ2UsXG4gICAgc3VibWl0OiBoYW5kbGVTdWJtaXQsXG4gICAgbG9hZGluZyxcbiAgICBwcm9ncmVzcyxcbiAgICBzZXRSZWNvcmQ6IHNldEZpbHRlcmVkUmVjb3JkLFxuICAgIGlzU3luY2VkXG4gIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlUmVjb3JkOyIsImltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VMb2NhdGlvbiwgdXNlTmF2aWdhdGUgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IHVzZU5vdGljZSBmcm9tICcuLi91c2Utbm90aWNlLmpzJztcbmltcG9ydCBBcGlDbGllbnQgZnJvbSAnLi4vLi4vdXRpbHMvYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBoYXNGb3JjZVJlZnJlc2gsIHJlbW92ZUZvcmNlUmVmcmVzaCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYWN0aW9ucy91dGlscy9hcHBlbmQtZm9yY2UtcmVmcmVzaC5qcyc7XG5jb25zdCBhcGkgPSBuZXcgQXBpQ2xpZW50KCk7XG5cbi8qKlxuICogQGxvYWQgLi91c2UtcmVjb3Jkcy5kb2MubWRcbiAqIEBzdWJjYXRlZ29yeSBIb29rc1xuICogQGNsYXNzXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlc291cmNlSWQgICAgICBpZCBvZiBhIHJlc291cmNlIGZvciB3aGljaCB5b3Ugd2FudCB0byBmZXRjaCByZWNvcmRzXG4gKiBAcmV0dXJuIHtVc2VSZWNvcmRzUmVzdWx0fVxuICogQGJ1bmRsZVxuICogQHR5cGUge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB1c2VSZWNvcmRzKHJlc291cmNlSWQpIHtcbiAgY29uc3QgW3JlY29yZHMsIHNldFJlY29yZHNdID0gdXNlU3RhdGUoW10pO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtwZXJQYWdlLCBzZXRQZXJQYWdlXSA9IHVzZVN0YXRlKDEwKTtcbiAgY29uc3QgW3BhZ2UsIHNldFBhZ2VdID0gdXNlU3RhdGUoMSk7XG4gIGNvbnN0IFt0b3RhbCwgc2V0VG90YWxdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtkaXJlY3Rpb24sIHNldERpcmVjdGlvbl0gPSB1c2VTdGF0ZSgnYXNjJyk7XG4gIGNvbnN0IFtzb3J0QnksIHNldFNvcnRCeV0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgY29uc3QgYWRkTm90aWNlID0gdXNlTm90aWNlKCk7XG4gIGNvbnN0IG9uTm90aWNlID0gdXNlTm90aWNlKCk7XG4gIGNvbnN0IGZldGNoRGF0YSA9ICgpID0+IHtcbiAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpO1xuICAgIGNvbnN0IHByb21pc2UgPSBhcGkucmVzb3VyY2VBY3Rpb24oe1xuICAgICAgYWN0aW9uTmFtZTogJ2xpc3QnLFxuICAgICAgcmVzb3VyY2VJZCxcbiAgICAgIHBhcmFtczogcXVlcnlcbiAgICB9KTtcbiAgICBwcm9taXNlLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgY29uc3QgbGlzdEFjdGlvblJlc3BvbnNlID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgIGlmIChsaXN0QWN0aW9uUmVzcG9uc2Uubm90aWNlKSB7XG4gICAgICAgIG9uTm90aWNlKGxpc3RBY3Rpb25SZXNwb25zZS5ub3RpY2UpO1xuICAgICAgfVxuICAgICAgaWYgKGxpc3RBY3Rpb25SZXNwb25zZS5yZWRpcmVjdFVybCkge1xuICAgICAgICBuYXZpZ2F0ZShsaXN0QWN0aW9uUmVzcG9uc2UucmVkaXJlY3RVcmwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRSZWNvcmRzKGxpc3RBY3Rpb25SZXNwb25zZS5yZWNvcmRzKTtcbiAgICAgIHNldFBhZ2UobGlzdEFjdGlvblJlc3BvbnNlLm1ldGEucGFnZSk7XG4gICAgICBzZXRQZXJQYWdlKGxpc3RBY3Rpb25SZXNwb25zZS5tZXRhLnBlclBhZ2UpO1xuICAgICAgc2V0VG90YWwobGlzdEFjdGlvblJlc3BvbnNlLm1ldGEudG90YWwpO1xuICAgICAgc2V0RGlyZWN0aW9uKGxpc3RBY3Rpb25SZXNwb25zZS5tZXRhLmRpcmVjdGlvbik7XG4gICAgICBzZXRTb3J0QnkobGlzdEFjdGlvblJlc3BvbnNlLm1ldGEuc29ydEJ5KTtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGFkZE5vdGljZSh7XG4gICAgICAgIG1lc3NhZ2U6ICdlcnJvckZldGNoaW5nUmVjb3JkcycsXG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHJlc291cmNlSWRcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChoYXNGb3JjZVJlZnJlc2gobG9jYXRpb24uc2VhcmNoKSkge1xuICAgICAgbmF2aWdhdGUoe1xuICAgICAgICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgIHNlYXJjaDogcmVtb3ZlRm9yY2VSZWZyZXNoKGxvY2F0aW9uLnNlYXJjaCkudG9TdHJpbmcoKVxuICAgICAgfSwge1xuICAgICAgICByZXBsYWNlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmV0Y2hEYXRhKCk7XG4gICAgfVxuICB9LCBbcmVzb3VyY2VJZCwgbG9jYXRpb24uc2VhcmNoLCBsb2NhdGlvbi5zdGF0ZV0pO1xuICByZXR1cm4ge1xuICAgIHJlY29yZHMsXG4gICAgbG9hZGluZyxcbiAgICBwYWdlLFxuICAgIHRvdGFsLFxuICAgIGRpcmVjdGlvbixcbiAgICBzb3J0QnksXG4gICAgcGVyUGFnZSxcbiAgICBmZXRjaERhdGFcbiAgfTtcbn1cbmV4cG9ydCB7IHVzZVJlY29yZHMgYXMgZGVmYXVsdCwgdXNlUmVjb3JkcyB9OyIsImltcG9ydCB7IHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuLyoqXG4gKiBAbG9hZCAuL3VzZS1yZXNvdXJjZS5kb2MubWRcbiAqIEBzdWJjYXRlZ29yeSBIb29rc1xuICogQGNsYXNzXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAYnVuZGxlXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVzb3VyY2VJZCAgICBJZCBvZiBhIHJlc291cmNlIHlvdSB3YW50IHRvIGdldFxuICovXG5jb25zdCB1c2VSZXNvdXJjZSA9IHJlc291cmNlSWQgPT4ge1xuICBjb25zdCByZXNvdXJjZXMgPSB1c2VTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5yZXNvdXJjZXMpO1xuICBjb25zdCBmb3VuZFJlc291cmNlID0gcmVzb3VyY2VzLmZpbmQocmVzb3VyY2UgPT4gcmVzb3VyY2UuaWQgPT09IHJlc291cmNlSWQpO1xuICByZXR1cm4gZm91bmRSZXNvdXJjZTtcbn07XG5leHBvcnQgeyB1c2VSZXNvdXJjZSBhcyBkZWZhdWx0LCB1c2VSZXNvdXJjZSB9OyIsImltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAbG9hZCAuL3VzZS1zZWxlY3RlZC1yZWNvcmRzLmRvYy5tZFxuICogQHN1YmNhdGVnb3J5IEhvb2tzXG4gKiBAY2xhc3NcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXk8UmVjb3JkSlNPTj59IHJlY29yZHMgICAgIExpc3Qgb2YgcmVjb3JkcyBvbiB3aGljaCB5b3UgY2FuIHBlcmZvcm0gYHNlbGVjdGAgYWN0aW9uXG4gKiBAcmV0dXJuIHtVc2VTZWxlY3RlZFJlY29yZHNSZXN1bHR9XG4gKiBAYnVuZGxlXG4gKiBAdHlwZSB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHVzZVNlbGVjdGVkUmVjb3JkcyhyZWNvcmRzKSB7XG4gIGNvbnN0IFtzZWxlY3RlZFJlY29yZHMsIHNldFNlbGVjdGVkUmVjb3Jkc10gPSB1c2VTdGF0ZShbXSk7XG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9IHJlY29yZCA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkUmVjb3Jkcy5maW5kSW5kZXgoc2VsZWN0ZWQgPT4gc2VsZWN0ZWQuaWQgPT09IHJlY29yZC5pZCk7XG4gICAgaWYgKHNlbGVjdGVkSW5kZXggPCAwKSB7XG4gICAgICBzZXRTZWxlY3RlZFJlY29yZHMoWy4uLnNlbGVjdGVkUmVjb3JkcywgcmVjb3JkXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld1NlbGVjdGVkUmVjb3JkcyA9IFsuLi5zZWxlY3RlZFJlY29yZHNdO1xuICAgICAgbmV3U2VsZWN0ZWRSZWNvcmRzLnNwbGljZShzZWxlY3RlZEluZGV4LCAxKTtcbiAgICAgIHNldFNlbGVjdGVkUmVjb3JkcyhuZXdTZWxlY3RlZFJlY29yZHMpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlU2VsZWN0QWxsID0gKCkgPT4ge1xuICAgIGNvbnN0IG1pc3NpbmcgPSByZWNvcmRzLmZpbHRlcihyZWNvcmQgPT4gIXNlbGVjdGVkUmVjb3Jkcy5maW5kKHNlbGVjdGVkID0+IHNlbGVjdGVkLmlkID09PSByZWNvcmQuaWQpICYmIHJlY29yZC5idWxrQWN0aW9ucy5sZW5ndGgpO1xuICAgIGlmIChtaXNzaW5nLmxlbmd0aCkge1xuICAgICAgc2V0U2VsZWN0ZWRSZWNvcmRzKFsuLi5zZWxlY3RlZFJlY29yZHMsIC4uLm1pc3NpbmddKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3U2VsZWN0ZWRSZWNvcmRzID0gc2VsZWN0ZWRSZWNvcmRzLmZpbHRlcihzZWxlY3RlZCA9PiAhcmVjb3Jkcy5maW5kKHJlY29yZCA9PiByZWNvcmQuaWQgPT09IHNlbGVjdGVkLmlkKSk7XG4gICAgICBzZXRTZWxlY3RlZFJlY29yZHMobmV3U2VsZWN0ZWRSZWNvcmRzKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB7XG4gICAgaGFuZGxlU2VsZWN0LFxuICAgIGhhbmRsZVNlbGVjdEFsbCxcbiAgICBzZWxlY3RlZFJlY29yZHMsXG4gICAgc2V0U2VsZWN0ZWRSZWNvcmRzXG4gIH07XG59XG5leHBvcnQgeyB1c2VTZWxlY3RlZFJlY29yZHMgYXMgZGVmYXVsdCwgdXNlU2VsZWN0ZWRSZWNvcmRzIH07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHN0cmluZ2lmeSB9IGZyb20gJ3FzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgeyB1c2VBY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBidWlsZEFjdGlvblRlc3RJZCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0QWN0aW9uRWxlbWVudENzcyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2luZGV4LmpzJztcblxuLyoqXG4gKiBAYWxpYXMgQWN0aW9uQnV0dG9uUHJvcHNcbiAqIEBtZW1iZXJvZiBBY3Rpb25CdXR0b25cbiAqL1xuXG4vKipcbiAqIFJlbmRlcnMgQnV0dG9uIHdoaWNoIHJlZGlyZWN0cyB0byBnaXZlbiBhY3Rpb25cbiAqXG4gKiAjIyMgVXNhZ2VcbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7IEFjdGlvbkJ1dHRvbiB9IGZyb20gJ2FkbWluanMnXG4gKiBgYGBcbiAqXG4gKiBAY29tcG9uZW50XG4gKiBAc3ViY2F0ZWdvcnkgQXBwbGljYXRpb25cbiAqL1xuY29uc3QgQWN0aW9uQnV0dG9uID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgYWN0aW9uLFxuICAgIGFjdGlvblBlcmZvcm1lZCxcbiAgICByZXNvdXJjZUlkLFxuICAgIHJlY29yZElkLFxuICAgIHJlY29yZElkcyxcbiAgICBzZWFyY2gsXG4gICAgcXVlcnlQYXJhbXNcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgaHJlZixcbiAgICBoYW5kbGVDbGlja1xuICB9ID0gdXNlQWN0aW9uKGFjdGlvbiwge1xuICAgIHJlc291cmNlSWQsXG4gICAgcmVjb3JkSWQsXG4gICAgcmVjb3JkSWRzLFxuICAgIHNlYXJjaDogc3RyaW5naWZ5KHF1ZXJ5UGFyYW1zLCB7XG4gICAgICBhZGRRdWVyeVByZWZpeDogdHJ1ZVxuICAgIH0pIHx8IHNlYXJjaFxuICB9LCBhY3Rpb25QZXJmb3JtZWQpO1xuICBpZiAoIWFjdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGZpcnN0Q2hpbGQgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKVswXTtcbiAgaWYgKCFmaXJzdENoaWxkIHx8IHR5cGVvZiBmaXJzdENoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgZmlyc3RDaGlsZCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGZpcnN0Q2hpbGQgPT09ICdib29sZWFuJykge1xuICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9uQnV0dG9uIGhhcyB0byBoYXZlIG9uZSBjaGlsZCcpO1xuICB9XG4gIGNvbnN0IGNvbnRlbnRUYWcgPSBnZXRBY3Rpb25FbGVtZW50Q3NzKHJlc291cmNlSWQsIGFjdGlvbi5uYW1lLCAnYnV0dG9uJyk7XG4gIGNvbnN0IFdyYXBwZWRFbGVtZW50ID0gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChmaXJzdENoaWxkLCB7XG4gICAgb25DbGljazogaGFuZGxlQ2xpY2ssXG4gICAgJ2RhdGEtdGVzdGlkJzogYnVpbGRBY3Rpb25UZXN0SWQoYWN0aW9uKSxcbiAgICAnZGF0YS1jc3MnOiBjb250ZW50VGFnLFxuICAgIGhyZWZcbiAgfSk7XG4gIHJldHVybiBXcmFwcGVkRWxlbWVudDtcbn07XG5jb25zdCBPdmVycmlkYWJsZUFjdGlvbkJ1dHRvbiA9IGFsbG93T3ZlcnJpZGUoQWN0aW9uQnV0dG9uLCAnQWN0aW9uQnV0dG9uJyk7XG5leHBvcnQgeyBPdmVycmlkYWJsZUFjdGlvbkJ1dHRvbiBhcyBkZWZhdWx0LCBPdmVycmlkYWJsZUFjdGlvbkJ1dHRvbiBhcyBBY3Rpb25CdXR0b24sIEFjdGlvbkJ1dHRvbiBhcyBPcmlnaW5hbEFjdGlvbkJ1dHRvbiB9OyIsImltcG9ydCB7IEJveCwgY3NzQ2xhc3MsIFRleHQgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCBWaWV3SGVscGVycyBmcm9tICcuLi8uLi8uLi9iYWNrZW5kL3V0aWxzL3ZpZXctaGVscGVycy92aWV3LWhlbHBlcnMuanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlLXRyYW5zbGF0aW9uLmpzJztcbmltcG9ydCB7IGdldEFjdGlvbkVsZW1lbnRDc3MgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5leHBvcnQgY29uc3QgQnJlYWRjcnVtYkxpbmsgPSBzdHlsZWQoTGluaylgXG4gIGNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuZ3JleTYwfTtcbiAgZm9udC1mYW1pbHk6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmZvbnR9O1xuICBsaW5lLWhlaWdodDogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUubGluZUhlaWdodHMuZGVmYXVsdH07XG4gIGZvbnQtc2l6ZTogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuZm9udFNpemVzLmRlZmF1bHR9O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG5cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5wcmltYXJ5MTAwfTtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuZ3JleTYwfTtcbiAgICB9XG4gIH1cblxuICAmOmFmdGVyIHtcbiAgICBjb250ZW50OiAnLyc7XG4gICAgcGFkZGluZzogMCAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS5kZWZhdWx0fTtcbiAgfVxuXG4gICY6bGFzdC1jaGlsZCB7XG4gICAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy50ZXh0fTtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgIH1cbiAgfVxuYDtcbmV4cG9ydCBjb25zdCBCcmVhZGNydW1iVGV4dCA9IHN0eWxlZChUZXh0KWBcbiAgY29sb3I6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5ncmV5MTAwfTtcbiAgZm9udC1mYW1pbHk6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmZvbnR9O1xuICBmb250LXdlaWdodDogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuZm9udFdlaWdodHMubm9ybWFsLnRvU3RyaW5nKCl9O1xuICBsaW5lLWhlaWdodDogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUubGluZUhlaWdodHMuZGVmYXVsdH07XG4gIGZvbnQtc2l6ZTogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuZm9udFNpemVzLmRlZmF1bHR9O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZTtcblxuICAmOmFmdGVyIHtcbiAgICBjb250ZW50OiAnLyc7XG4gICAgcGFkZGluZzogMCAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS5kZWZhdWx0fTtcbiAgfVxuXG4gICY6bGFzdC1jaGlsZCB7XG4gICAgJjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICB9XG4gIH1cbmA7XG5cbi8qKlxuICogQG1lbWJlcm9mIEJyZWFkY3J1bWJzXG4gKi9cblxuLyoqXG4gKiBAY29tcG9uZW50XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBCcmVhZGNydW1icyA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHJlc291cmNlLFxuICAgIHJlY29yZCxcbiAgICBhY3Rpb25OYW1lXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgbGlzdEFjdGlvbiA9IHJlc291cmNlLnJlc291cmNlQWN0aW9ucy5maW5kKCh7XG4gICAgbmFtZVxuICB9KSA9PiBuYW1lID09PSAnbGlzdCcpO1xuICBjb25zdCBhY3Rpb24gPSByZXNvdXJjZS5hY3Rpb25zLmZpbmQoYSA9PiBhLm5hbWUgPT09IGFjdGlvbk5hbWUpO1xuICBjb25zdCBoID0gbmV3IFZpZXdIZWxwZXJzKCk7XG4gIGNvbnN0IHtcbiAgICB0bCxcbiAgICB0YVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgY29udGVudFRhZyA9IGdldEFjdGlvbkVsZW1lbnRDc3MocmVzb3VyY2UuaWQsIGFjdGlvbk5hbWUsICdicmVhZGNydW1icycpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgZmxleEdyb3c6IDEsXG4gICAgY2xhc3NOYW1lOiBjc3NDbGFzcygnQnJlYWRjcnVtYnMnKSxcbiAgICBcImRhdGEtY3NzXCI6IGNvbnRlbnRUYWdcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQnJlYWRjcnVtYkxpbmssIHtcbiAgICB0bzogaC5kYXNoYm9hcmRVcmwoKVxuICB9LCB0bCgnZGFzaGJvYXJkJykpLCBsaXN0QWN0aW9uID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQnJlYWRjcnVtYkxpbmssIHtcbiAgICB0bzogcmVzb3VyY2UuaHJlZiA/IHJlc291cmNlLmhyZWYgOiAnLycsXG4gICAgY2xhc3NOYW1lOiByZWNvcmQgPyAnaXMtYWN0aXZlJyA6ICcnXG4gIH0sIHRsKHJlc291cmNlLm5hbWUsIHJlc291cmNlLmlkKSkgOiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCcmVhZGNydW1iVGV4dCwgbnVsbCwgdGwocmVzb3VyY2UubmFtZSwgcmVzb3VyY2UuaWQpKSwgYWN0aW9uICYmIGFjdGlvbi5uYW1lICE9PSAnbGlzdCcgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQnJlYWRjcnVtYkxpbmssIHtcbiAgICB0bzogXCIjXCJcbiAgfSwgdGEoYWN0aW9uLmxhYmVsKSkpO1xufTtcbmNvbnN0IE92ZXJyaWRhYmxlQnJlYWRjcnVtYnMgPSBhbGxvd092ZXJyaWRlKEJyZWFkY3J1bWJzLCAnQnJlYWRjcnVtYnMnKTtcbmV4cG9ydCB7IE92ZXJyaWRhYmxlQnJlYWRjcnVtYnMgYXMgZGVmYXVsdCwgT3ZlcnJpZGFibGVCcmVhZGNydW1icyBhcyBCcmVhZGNydW1icywgQnJlYWRjcnVtYnMgYXMgT3JpZ2luYWxCcmVhZGNydW1icyB9OyIsImltcG9ydCB7IGFjdGlvbkhyZWYsIGJ1aWxkQWN0aW9uVGVzdElkIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9pbmRleC5qcyc7XG5leHBvcnQgY29uc3QgYWN0aW9uc1RvQnV0dG9uR3JvdXAgPSBvcHRpb25zID0+IHtcbiAgY29uc3Qge1xuICAgIGFjdGlvbnMsXG4gICAgcGFyYW1zLFxuICAgIGhhbmRsZUNsaWNrLFxuICAgIHRyYW5zbGF0ZUZ1bmN0aW9uc1xuICB9ID0gb3B0aW9ucztcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZUFjdGlvblxuICB9ID0gdHJhbnNsYXRlRnVuY3Rpb25zO1xuICBjb25zdCB7XG4gICAgcmVzb3VyY2VJZFxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBidXR0b25zID0gYWN0aW9ucy5tYXAoYWN0aW9uID0+IHtcbiAgICBjb25zdCBocmVmID0gYWN0aW9uSHJlZihhY3Rpb24sIHBhcmFtcyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGljb246IGFjdGlvbi5pY29uLFxuICAgICAgbGFiZWw6IHRyYW5zbGF0ZUFjdGlvbihhY3Rpb24ubGFiZWwsIHJlc291cmNlSWQpLFxuICAgICAgdmFyaWFudDogYWN0aW9uLnZhcmlhbnQsXG4gICAgICBzb3VyY2U6IGFjdGlvbixcbiAgICAgIGhyZWY6IGhyZWYgfHwgdW5kZWZpbmVkLFxuICAgICAgLy8gd2hlbiBocmVmIGlzIG5vdCBkZWZpbmVkIC0gaGFuZGxlIGNsaWNrIHNob3VsZCBhbHNvIGJlIG5vdCBkZWZpbmVkXG4gICAgICAvLyBUaGlzIHByZXZlbnRzIGZyb20gXCJjdXJzb3I6IHBvaW50ZXI7XCJcbiAgICAgIG9uQ2xpY2s6IGhyZWYgPyBoYW5kbGVDbGljayA6IHVuZGVmaW5lZCxcbiAgICAgICdkYXRhLXRlc3RpZCc6IGJ1aWxkQWN0aW9uVGVzdElkKGFjdGlvbiksXG4gICAgICBidXR0b25zOiBbXSxcbiAgICAgICdkYXRhLWNzcyc6IGAke2FjdGlvbi5yZXNvdXJjZUlkfS0ke2FjdGlvbi5uYW1lfS1idXR0b25gXG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gbmVzdGluZyBidXR0b25zXG4gIGNvbnN0IGJ1dHRvbnNNYXAgPSBidXR0b25zLnJlZHVjZSgobWVtbywgYnV0dG9uKSA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gYnV0dG9uLnNvdXJjZTtcbiAgICBpZiAoYWN0aW9uLnBhcmVudCkge1xuICAgICAgY29uc3QgcGFyZW50ID0gbWVtb1thY3Rpb24ucGFyZW50XSB8fCBidXR0b25zLmZpbmQoYnRuID0+IGJ0bi5zb3VyY2UubmFtZSA9PT0gYWN0aW9uLnBhcmVudCkgfHwge1xuICAgICAgICBsYWJlbDogYWN0aW9uLnBhcmVudFxuICAgICAgfTtcbiAgICAgIHBhcmVudC5idXR0b25zID0gcGFyZW50LmJ1dHRvbnMgfHwgW107XG4gICAgICBwYXJlbnQuYnV0dG9ucy5wdXNoKGJ1dHRvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5tZW1vLFxuICAgICAgICBbYWN0aW9uLnBhcmVudF06IHBhcmVudFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1lbW8sXG4gICAgICBbYnV0dG9uLnNvdXJjZS5uYW1lXTogYnV0dG9uXG4gICAgfTtcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhidXR0b25zTWFwKTtcbn07IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTGluayBhcyBSb3V0ZXJMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyB1c2VMb2NhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgeyBCdXR0b25DU1MsIEljb24gfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuY29uc3QgU3R5bGVkTGluayA9IHN0eWxlZCgoe1xuICByb3VuZGVkLFxuICB0byxcbiAgLi4ucmVzdFxufSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyTGluaywgX2V4dGVuZHMoe1xuICB0bzogdG9cbn0sIHJlc3QpKSlgJHtCdXR0b25DU1N9YDtcbmNvbnN0IFN0eWxlZEJhY2tCdXR0b24gPSBwcm9wcyA9PiB7XG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgY29uc3Qge1xuICAgIHNob3dJbkRyYXdlclxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNzc0Nsb3NlSWNvbiA9IHNob3dJbkRyYXdlciA/ICdDaGV2cm9uUmlnaHQnIDogJ0NoZXZyb25MZWZ0JztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZExpbmssIHtcbiAgICBzaXplOiBcImljb25cIixcbiAgICB0bzoge1xuICAgICAgcGF0aG5hbWU6ICcuLicsXG4gICAgICBzZWFyY2g6IGxvY2F0aW9uLnNlYXJjaFxuICAgIH0sXG4gICAgcmVsYXRpdmU6IFwicm91dGVcIixcbiAgICByb3VuZGVkOiB0cnVlLFxuICAgIG1yOiBcImxnXCIsXG4gICAgdHlwZTogXCJidXR0b25cIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgaWNvbjogY3NzQ2xvc2VJY29uXG4gIH0pKTtcbn07XG5jb25zdCBPdmVycmlkYWJsZVN0eWxlZEJhY2tCdXR0b24gPSBhbGxvd092ZXJyaWRlKFN0eWxlZEJhY2tCdXR0b24sICdTdHlsZWRCYWNrQnV0dG9uJyk7XG5leHBvcnQgeyBPdmVycmlkYWJsZVN0eWxlZEJhY2tCdXR0b24gYXMgZGVmYXVsdCwgT3ZlcnJpZGFibGVTdHlsZWRCYWNrQnV0dG9uIGFzIFN0eWxlZEJhY2tCdXR0b24sIFN0eWxlZEJhY2tCdXR0b24gYXMgT3JpZ2luYWxTdHlsZWRCYWNrQnV0dG9uIH07IiwiLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvYW5jaG9yLWlzLXZhbGlkICovXG5pbXBvcnQgeyBCYWRnZSwgQm94LCBCdXR0b25Hcm91cCwgY3NzQ2xhc3MsIEgyLCBIMyB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU5hdmlnYXRlLCB1c2VMb2NhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgdXNlQWN0aW9uUmVzcG9uc2VIYW5kbGVyLCB1c2VUcmFuc2xhdGlvbiwgdXNlTW9kYWwgfSBmcm9tICcuLi8uLi8uLi9ob29rcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBidWlsZEFjdGlvbkNsaWNrSGFuZGxlciB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvYWN0aW9uL2luZGV4LmpzJztcbmltcG9ydCB7IGdldEFjdGlvbkVsZW1lbnRDc3MsIGdldFJlc291cmNlRWxlbWVudENzcyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBCcmVhZGNydW1icyBmcm9tICcuLi9icmVhZGNydW1icy5qcyc7XG5pbXBvcnQgeyBhY3Rpb25zVG9CdXR0b25Hcm91cCB9IGZyb20gJy4vYWN0aW9ucy10by1idXR0b24tZ3JvdXAuanMnO1xuaW1wb3J0IHsgU3R5bGVkQmFja0J1dHRvbiB9IGZyb20gJy4vc3R5bGVkLWJhY2stYnV0dG9uLmpzJztcbmltcG9ydCB7IHVzZUZpbHRlckRyYXdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZS1maWx0ZXItZHJhd2VyLmpzJztcblxuLyoqXG4gKiBIZWFkZXIgb2YgYW4gYWN0aW9uLiBJdCByZW5kZXJzIEFjdGlvbiBuYW1lIHdpdGggYnV0dG9ucyBmb3IgYWxsIHRoZSBhY3Rpb25zLlxuICpcbiAqICMjIyBVc2FnZVxuICpcbiAqIGBgYFxuICogaW1wb3J0IHsgQWN0aW9uSGVhZGVyIH0gZnJvbSAnYWRtaW5qcydcbiAqIGBgYFxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBBcHBsaWNhdGlvblxuICovXG5jb25zdCBBY3Rpb25IZWFkZXIgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICByZXNvdXJjZSxcbiAgICBhY3Rpb25QZXJmb3JtZWQsXG4gICAgcmVjb3JkLFxuICAgIGFjdGlvbixcbiAgICB0YWcsXG4gICAgb21pdEFjdGlvbnMsXG4gICAgdG9nZ2xlRmlsdGVyOiBpc0ZpbHRlckJ1dHRvblZpc2libGVcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0cmFuc2xhdGVGdW5jdGlvbnMgPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB7XG4gICAgdHJhbnNsYXRlQnV0dG9uLFxuICAgIHRyYW5zbGF0ZUFjdGlvblxuICB9ID0gdHJhbnNsYXRlRnVuY3Rpb25zO1xuICBjb25zdCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgY29uc3QgYWN0aW9uUmVzcG9uc2VIYW5kbGVyID0gdXNlQWN0aW9uUmVzcG9uc2VIYW5kbGVyKGFjdGlvblBlcmZvcm1lZCk7XG4gIGNvbnN0IG1vZGFsRnVuY3Rpb25zID0gdXNlTW9kYWwoKTtcbiAgY29uc3Qge1xuICAgIHRvZ2dsZUZpbHRlcixcbiAgICBmaWx0ZXJzQ291bnRcbiAgfSA9IHVzZUZpbHRlckRyYXdlcigpO1xuICBpZiAoYWN0aW9uLmhpZGVBY3Rpb25IZWFkZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZXNvdXJjZUlkID0gcmVzb3VyY2UuaWQ7XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICByZXNvdXJjZUlkLFxuICAgIHJlY29yZElkOiByZWNvcmQ/LmlkXG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gIGNvbnN0IGhhbmRsZUFjdGlvbkNsaWNrID0gKGV2ZW50LCBzb3VyY2VBY3Rpb24pID0+IGJ1aWxkQWN0aW9uQ2xpY2tIYW5kbGVyKHtcbiAgICBhY3Rpb246IHNvdXJjZUFjdGlvbixcbiAgICBwYXJhbXMsXG4gICAgYWN0aW9uUmVzcG9uc2VIYW5kbGVyLFxuICAgIG5hdmlnYXRlLFxuICAgIGxvY2F0aW9uLFxuICAgIHRyYW5zbGF0ZUZ1bmN0aW9ucyxcbiAgICBtb2RhbEZ1bmN0aW9uc1xuICB9KShldmVudCk7XG4gIGNvbnN0IGFjdGlvbkJ1dHRvbnMgPSBhY3Rpb25zVG9CdXR0b25Hcm91cCh7XG4gICAgYWN0aW9uczogcmVjb3JkID8gcmVjb3JkLnJlY29yZEFjdGlvbnMuZmlsdGVyKHJhID0+ICFhY3Rpb24gfHwgYWN0aW9uLm5hbWUgIT09IHJhLm5hbWUpXG4gICAgLy8gb25seSBuZXcgYWN0aW9uIHNob3VsZCBiZSBzZWVuIGluIHJlZ3VsYXIgXCJCaWdcIiBhY3Rpb25zIHBsYWNlXG4gICAgOiByZXNvdXJjZS5yZXNvdXJjZUFjdGlvbnMuZmlsdGVyKHJhID0+IHJhLm5hbWUgPT09ICduZXcnICYmICghYWN0aW9uIHx8IGFjdGlvbi5uYW1lICE9PSByYS5uYW1lKSksXG4gICAgcGFyYW1zLFxuICAgIGhhbmRsZUNsaWNrOiBoYW5kbGVBY3Rpb25DbGljayxcbiAgICB0cmFuc2xhdGVGdW5jdGlvbnMsXG4gICAgbW9kYWxGdW5jdGlvbnNcbiAgfSk7XG4gIGlmICh0eXBlb2YgaXNGaWx0ZXJCdXR0b25WaXNpYmxlID09PSAnZnVuY3Rpb24nIHx8IGlzRmlsdGVyQnV0dG9uVmlzaWJsZSkge1xuICAgIGNvbnN0IGZpbHRlclRyYW5zbGF0aW9uS2V5ID0gZmlsdGVyc0NvdW50ID4gMCA/ICdmaWx0ZXJBY3RpdmUnIDogJ2ZpbHRlcic7XG4gICAgYWN0aW9uQnV0dG9ucy5wdXNoKHtcbiAgICAgIGxhYmVsOiB0cmFuc2xhdGVCdXR0b24oZmlsdGVyVHJhbnNsYXRpb25LZXksIHJlc291cmNlLmlkLCB7XG4gICAgICAgIGNvdW50OiBmaWx0ZXJzQ291bnRcbiAgICAgIH0pLFxuICAgICAgb25DbGljazogdG9nZ2xlRmlsdGVyLFxuICAgICAgaWNvbjogJ0ZpbHRlcicsXG4gICAgICAnZGF0YS1jc3MnOiBnZXRSZXNvdXJjZUVsZW1lbnRDc3MocmVzb3VyY2UuaWQsICdmaWx0ZXItYnV0dG9uJylcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGxpc3QgYW5kIG5ldyBhY3Rpb25zIGFyZSBzcGVjaWFsIGFuZCBhcmUgYXJlIGFsd2F5c1xuICBjb25zdCBjdXN0b21SZXNvdXJjZUJ1dHRvbnMgPSBhY3Rpb25zVG9CdXR0b25Hcm91cCh7XG4gICAgYWN0aW9uczogYWN0aW9uLnNob3dSZXNvdXJjZUFjdGlvbnMgPyByZXNvdXJjZS5yZXNvdXJjZUFjdGlvbnMuZmlsdGVyKHJhID0+ICFbJ2xpc3QnLCAnbmV3J10uaW5jbHVkZXMocmEubmFtZSkpIDogW10sXG4gICAgcGFyYW1zOiB7XG4gICAgICByZXNvdXJjZUlkXG4gICAgfSxcbiAgICBoYW5kbGVDbGljazogaGFuZGxlQWN0aW9uQ2xpY2ssXG4gICAgdHJhbnNsYXRlRnVuY3Rpb25zLFxuICAgIG1vZGFsRnVuY3Rpb25zXG4gIH0pO1xuICBjb25zdCB0aXRsZSA9IGFjdGlvbiA/IHRyYW5zbGF0ZUFjdGlvbihhY3Rpb24ubGFiZWwsIHJlc291cmNlSWQpIDogcmVzb3VyY2UubmFtZTtcblxuICAvLyBzdHlsZWQgd2hpY2ggZGlmZmVycyBpZiBhY3Rpb24gaGVhZGVyIGlzIGluIHRoZSBkcmF3ZXIgb3Igbm90XG4gIGNvbnN0IGNzc0lzUm9vdEZsZXggPSAhYWN0aW9uLnNob3dJbkRyYXdlcjtcbiAgY29uc3QgY3NzSGVhZGVyTVQgPSBhY3Rpb24uc2hvd0luRHJhd2VyID8gJycgOiAnbGcnO1xuICBjb25zdCBjc3NBY3Rpb25zTUIgPSBhY3Rpb24uc2hvd0luRHJhd2VyID8gJ3hsJyA6ICdkZWZhdWx0JztcbiAgY29uc3QgQ3NzSENvbXBvbmVudCA9IGFjdGlvbi5zaG93SW5EcmF3ZXIgPyBIMyA6IEgyO1xuICBjb25zdCBjb250ZW50VGFnID0gZ2V0QWN0aW9uRWxlbWVudENzcyhyZXNvdXJjZUlkLCBhY3Rpb24ubmFtZSwgJ2FjdGlvbi1oZWFkZXInKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIGNsYXNzTmFtZTogY3NzQ2xhc3MoJ0FjdGlvbkhlYWRlcicpLFxuICAgIFwiZGF0YS1jc3NcIjogY29udGVudFRhZ1xuICB9LCAhYWN0aW9uLnNob3dJbkRyYXdlciAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBmbGV4OiB0cnVlLFxuICAgIGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG4gICAgcHg6IFsnZGVmYXVsdCcsIDBdXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJyZWFkY3J1bWJzLCB7XG4gICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgIGFjdGlvbk5hbWU6IGFjdGlvbi5uYW1lLFxuICAgIHJlY29yZDogcmVjb3JkXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBmbGV4U2hyaW5rOiAwXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJ1dHRvbkdyb3VwLCB7XG4gICAgc2l6ZTogXCJzbVwiLFxuICAgIHJvdW5kZWQ6IHRydWUsXG4gICAgYnV0dG9uczogY3VzdG9tUmVzb3VyY2VCdXR0b25zXG4gIH0pKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIGRpc3BsYXk6IFsnYmxvY2snLCBjc3NJc1Jvb3RGbGV4ID8gJ2ZsZXgnIDogJ2Jsb2NrJ11cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgbXQ6IGNzc0hlYWRlck1ULFxuICAgIGZsZXhHcm93OiAxLFxuICAgIHB4OiBbJ2RlZmF1bHQnLCAwXVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDc3NIQ29tcG9uZW50LCB7XG4gICAgbWI6IFwibGdcIlxuICB9LCBhY3Rpb24uc2hvd0luRHJhd2VyICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZEJhY2tCdXR0b24sIHtcbiAgICBzaG93SW5EcmF3ZXI6IGFjdGlvbi5zaG93SW5EcmF3ZXJcbiAgfSksIHRpdGxlLCB0YWcgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCYWRnZSwge1xuICAgIHZhcmlhbnQ6IFwiZGVmYXVsdFwiLFxuICAgIG91dGxpbmU6IHRydWUsXG4gICAgbWw6IFwiZGVmYXVsdFwiXG4gIH0sIHRhZykgOiBudWxsKSksICFvbWl0QWN0aW9ucyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBtdDogXCJ4bFwiLFxuICAgIG1iOiBjc3NBY3Rpb25zTUIsXG4gICAgZmxleFNocmluazogMFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b25Hcm91cCwge1xuICAgIGJ1dHRvbnM6IGFjdGlvbkJ1dHRvbnNcbiAgfSkpKSk7XG59O1xuY29uc3QgT3ZlcnJpZGFibGVBY3Rpb25IZWFkZXIgPSBhbGxvd092ZXJyaWRlKEFjdGlvbkhlYWRlciwgJ0FjdGlvbkhlYWRlcicpO1xuZXhwb3J0IHsgT3ZlcnJpZGFibGVBY3Rpb25IZWFkZXIgYXMgZGVmYXVsdCwgT3ZlcnJpZGFibGVBY3Rpb25IZWFkZXIgYXMgQWN0aW9uSGVhZGVyLCBBY3Rpb25IZWFkZXIgYXMgT3JpZ2luYWxBY3Rpb25IZWFkZXIgfTsiLCJpbXBvcnQgeyBNb2RhbCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuZXhwb3J0IGNvbnN0IEFkbWluTW9kYWwgPSAoKSA9PiB7XG4gIGNvbnN0IG1vZGFsU3RhdGUgPSB1c2VTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5tb2RhbCk7XG4gIHJldHVybiBtb2RhbFN0YXRlLnNob3cgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNb2RhbCwgbW9kYWxTdGF0ZS5tb2RhbFByb3BzKSA6IG51bGw7XG59O1xuZXhwb3J0IGRlZmF1bHQgQWRtaW5Nb2RhbDsiLCJpbXBvcnQgeyBCb3gsIExvYWRlciB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBBcHBMb2FkZXIgPSAoKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgd2lkdGg6IFwiMTAwJVwiLFxuICBoZWlnaHQ6IFwiMTAwJVwiLFxuICBmbGV4OiB0cnVlLFxuICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTG9hZGVyLCBudWxsKSk7IiwiaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmNvbnN0IEF1dGhlbnRpY2F0aW9uQmFja2dyb3VuZENvbXBvbmVudCA9ICgpID0+IG51bGw7XG5jb25zdCBPdmVycmlkYWJsZUF1dGhlbnRpY2F0aW9uQmFja2dyb3VuZENvbXBvbmVudCA9IGFsbG93T3ZlcnJpZGUoQXV0aGVudGljYXRpb25CYWNrZ3JvdW5kQ29tcG9uZW50LCAnQXV0aGVudGljYXRpb25CYWNrZ3JvdW5kQ29tcG9uZW50Jyk7XG5leHBvcnQgeyBPdmVycmlkYWJsZUF1dGhlbnRpY2F0aW9uQmFja2dyb3VuZENvbXBvbmVudCBhcyBkZWZhdWx0LCBPdmVycmlkYWJsZUF1dGhlbnRpY2F0aW9uQmFja2dyb3VuZENvbXBvbmVudCBhcyBBdXRoZW50aWNhdGlvbkJhY2tncm91bmRDb21wb25lbnQsIEF1dGhlbnRpY2F0aW9uQmFja2dyb3VuZENvbXBvbmVudCBhcyBPcmlnaW5hbEF1dGhlbnRpY2F0aW9uQmFja2dyb3VuZENvbXBvbmVudCB9OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBUZXh0LCBNZXNzYWdlQm94IH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL2hvb2tzL2luZGV4LmpzJztcbmNvbnN0IEVycm9yTWVzc2FnZSA9ICh7XG4gIGVycm9yXG59KSA9PiB7XG4gIGNvbnN0IHtcbiAgICB0cmFuc2xhdGVNZXNzYWdlXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVzc2FnZUJveCwge1xuICAgIG06IFwieHhsXCIsXG4gICAgdmFyaWFudDogXCJkYW5nZXJcIixcbiAgICBtZXNzYWdlOiBcIkphdmFzY3JpcHQgRXJyb3JcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCBudWxsLCBlcnJvci50b1N0cmluZygpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwge1xuICAgIG10OiBcImRlZmF1bHRcIlxuICB9LCB0cmFuc2xhdGVNZXNzYWdlKCdzZWVDb25zb2xlRm9yTW9yZScpKSk7XG59O1xuZXhwb3J0IGNsYXNzIEVycm9yQm91bmRhcnkgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZXJyb3I6IG51bGxcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudERpZENhdGNoKGVycm9yKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBlcnJvclxuICAgIH0pO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjaGlsZHJlblxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHtcbiAgICAgIGVycm9yXG4gICAgfSA9IHRoaXMuc3RhdGU7XG4gICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRXJyb3JNZXNzYWdlLCB7XG4gICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlbiB8fCBudWxsO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBFcnJvckJvdW5kYXJ5OyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIHJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxuZnVuY3Rpb24gYXJlSW5wdXRzRXF1YWwobmV3SW5wdXRzLCBsYXN0SW5wdXRzKSB7XG4gIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG5ld0lucHV0c1tpXSAhPT0gbGFzdElucHV0c1tpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB1c2VNZW1vT25lKGdldFJlc3VsdCwgaW5wdXRzKSB7XG4gIHZhciBpbml0aWFsID0gcmVhY3QudXNlU3RhdGUoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpbnB1dHM6IGlucHV0cyxcbiAgICAgIHJlc3VsdDogZ2V0UmVzdWx0KClcbiAgICB9O1xuICB9KVswXTtcbiAgdmFyIGlzRmlyc3RSdW4gPSByZWFjdC51c2VSZWYodHJ1ZSk7XG4gIHZhciBjb21taXR0ZWQgPSByZWFjdC51c2VSZWYoaW5pdGlhbCk7XG4gIHZhciB1c2VDYWNoZSA9IGlzRmlyc3RSdW4uY3VycmVudCB8fCBCb29sZWFuKGlucHV0cyAmJiBjb21taXR0ZWQuY3VycmVudC5pbnB1dHMgJiYgYXJlSW5wdXRzRXF1YWwoaW5wdXRzLCBjb21taXR0ZWQuY3VycmVudC5pbnB1dHMpKTtcbiAgdmFyIGNhY2hlID0gdXNlQ2FjaGUgPyBjb21taXR0ZWQuY3VycmVudCA6IHtcbiAgICBpbnB1dHM6IGlucHV0cyxcbiAgICByZXN1bHQ6IGdldFJlc3VsdCgpXG4gIH07XG4gIHJlYWN0LnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaXNGaXJzdFJ1bi5jdXJyZW50ID0gZmFsc2U7XG4gICAgY29tbWl0dGVkLmN1cnJlbnQgPSBjYWNoZTtcbiAgfSwgW2NhY2hlXSk7XG4gIHJldHVybiBjYWNoZS5yZXN1bHQ7XG59XG5mdW5jdGlvbiB1c2VDYWxsYmFja09uZShjYWxsYmFjaywgaW5wdXRzKSB7XG4gIHJldHVybiB1c2VNZW1vT25lKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbGJhY2s7XG4gIH0sIGlucHV0cyk7XG59XG52YXIgdXNlTWVtbyA9IHVzZU1lbW9PbmU7XG52YXIgdXNlQ2FsbGJhY2sgPSB1c2VDYWxsYmFja09uZTtcblxuZXhwb3J0cy51c2VDYWxsYmFjayA9IHVzZUNhbGxiYWNrO1xuZXhwb3J0cy51c2VDYWxsYmFja09uZSA9IHVzZUNhbGxiYWNrT25lO1xuZXhwb3J0cy51c2VNZW1vID0gdXNlTWVtbztcbmV4cG9ydHMudXNlTWVtb09uZSA9IHVzZU1lbW9PbmU7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc1Byb2R1Y3Rpb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nO1xudmFyIHByZWZpeCA9ICdJbnZhcmlhbnQgZmFpbGVkJztcbmZ1bmN0aW9uIGludmFyaWFudChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzUHJvZHVjdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IocHJlZml4KTtcbiAgICB9XG4gICAgdmFyIHByb3ZpZGVkID0gdHlwZW9mIG1lc3NhZ2UgPT09ICdmdW5jdGlvbicgPyBtZXNzYWdlKCkgOiBtZXNzYWdlO1xuICAgIHZhciB2YWx1ZSA9IHByb3ZpZGVkID8gXCJcIi5jb25jYXQocHJlZml4LCBcIjogXCIpLmNvbmNhdChwcm92aWRlZCkgOiBwcmVmaXg7XG4gICAgdGhyb3cgbmV3IEVycm9yKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnZhcmlhbnQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdCAoZXgpIHsgcmV0dXJuIChleCAmJiAodHlwZW9mIGV4ID09PSAnb2JqZWN0JykgJiYgJ2RlZmF1bHQnIGluIGV4KSA/IGV4WydkZWZhdWx0J10gOiBleDsgfVxuXG52YXIgaW52YXJpYW50ID0gX2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoJ3RpbnktaW52YXJpYW50JykpO1xuXG52YXIgZ2V0UmVjdCA9IGZ1bmN0aW9uIGdldFJlY3QoX3JlZikge1xuICB2YXIgdG9wID0gX3JlZi50b3AsXG4gICAgICByaWdodCA9IF9yZWYucmlnaHQsXG4gICAgICBib3R0b20gPSBfcmVmLmJvdHRvbSxcbiAgICAgIGxlZnQgPSBfcmVmLmxlZnQ7XG4gIHZhciB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgdmFyIGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgdmFyIHJlY3QgPSB7XG4gICAgdG9wOiB0b3AsXG4gICAgcmlnaHQ6IHJpZ2h0LFxuICAgIGJvdHRvbTogYm90dG9tLFxuICAgIGxlZnQ6IGxlZnQsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IGxlZnQsXG4gICAgeTogdG9wLFxuICAgIGNlbnRlcjoge1xuICAgICAgeDogKHJpZ2h0ICsgbGVmdCkgLyAyLFxuICAgICAgeTogKGJvdHRvbSArIHRvcCkgLyAyXG4gICAgfVxuICB9O1xuICByZXR1cm4gcmVjdDtcbn07XG52YXIgZXhwYW5kID0gZnVuY3Rpb24gZXhwYW5kKHRhcmdldCwgZXhwYW5kQnkpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IHRhcmdldC50b3AgLSBleHBhbmRCeS50b3AsXG4gICAgbGVmdDogdGFyZ2V0LmxlZnQgLSBleHBhbmRCeS5sZWZ0LFxuICAgIGJvdHRvbTogdGFyZ2V0LmJvdHRvbSArIGV4cGFuZEJ5LmJvdHRvbSxcbiAgICByaWdodDogdGFyZ2V0LnJpZ2h0ICsgZXhwYW5kQnkucmlnaHRcbiAgfTtcbn07XG52YXIgc2hyaW5rID0gZnVuY3Rpb24gc2hyaW5rKHRhcmdldCwgc2hyaW5rQnkpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IHRhcmdldC50b3AgKyBzaHJpbmtCeS50b3AsXG4gICAgbGVmdDogdGFyZ2V0LmxlZnQgKyBzaHJpbmtCeS5sZWZ0LFxuICAgIGJvdHRvbTogdGFyZ2V0LmJvdHRvbSAtIHNocmlua0J5LmJvdHRvbSxcbiAgICByaWdodDogdGFyZ2V0LnJpZ2h0IC0gc2hyaW5rQnkucmlnaHRcbiAgfTtcbn07XG5cbnZhciBzaGlmdCA9IGZ1bmN0aW9uIHNoaWZ0KHRhcmdldCwgc2hpZnRCeSkge1xuICByZXR1cm4ge1xuICAgIHRvcDogdGFyZ2V0LnRvcCArIHNoaWZ0QnkueSxcbiAgICBsZWZ0OiB0YXJnZXQubGVmdCArIHNoaWZ0QnkueCxcbiAgICBib3R0b206IHRhcmdldC5ib3R0b20gKyBzaGlmdEJ5LnksXG4gICAgcmlnaHQ6IHRhcmdldC5yaWdodCArIHNoaWZ0QnkueFxuICB9O1xufTtcblxudmFyIG5vU3BhY2luZyA9IHtcbiAgdG9wOiAwLFxuICByaWdodDogMCxcbiAgYm90dG9tOiAwLFxuICBsZWZ0OiAwXG59O1xudmFyIGNyZWF0ZUJveCA9IGZ1bmN0aW9uIGNyZWF0ZUJveChfcmVmMikge1xuICB2YXIgYm9yZGVyQm94ID0gX3JlZjIuYm9yZGVyQm94LFxuICAgICAgX3JlZjIkbWFyZ2luID0gX3JlZjIubWFyZ2luLFxuICAgICAgbWFyZ2luID0gX3JlZjIkbWFyZ2luID09PSB2b2lkIDAgPyBub1NwYWNpbmcgOiBfcmVmMiRtYXJnaW4sXG4gICAgICBfcmVmMiRib3JkZXIgPSBfcmVmMi5ib3JkZXIsXG4gICAgICBib3JkZXIgPSBfcmVmMiRib3JkZXIgPT09IHZvaWQgMCA/IG5vU3BhY2luZyA6IF9yZWYyJGJvcmRlcixcbiAgICAgIF9yZWYyJHBhZGRpbmcgPSBfcmVmMi5wYWRkaW5nLFxuICAgICAgcGFkZGluZyA9IF9yZWYyJHBhZGRpbmcgPT09IHZvaWQgMCA/IG5vU3BhY2luZyA6IF9yZWYyJHBhZGRpbmc7XG4gIHZhciBtYXJnaW5Cb3ggPSBnZXRSZWN0KGV4cGFuZChib3JkZXJCb3gsIG1hcmdpbikpO1xuICB2YXIgcGFkZGluZ0JveCA9IGdldFJlY3Qoc2hyaW5rKGJvcmRlckJveCwgYm9yZGVyKSk7XG4gIHZhciBjb250ZW50Qm94ID0gZ2V0UmVjdChzaHJpbmsocGFkZGluZ0JveCwgcGFkZGluZykpO1xuICByZXR1cm4ge1xuICAgIG1hcmdpbkJveDogbWFyZ2luQm94LFxuICAgIGJvcmRlckJveDogZ2V0UmVjdChib3JkZXJCb3gpLFxuICAgIHBhZGRpbmdCb3g6IHBhZGRpbmdCb3gsXG4gICAgY29udGVudEJveDogY29udGVudEJveCxcbiAgICBtYXJnaW46IG1hcmdpbixcbiAgICBib3JkZXI6IGJvcmRlcixcbiAgICBwYWRkaW5nOiBwYWRkaW5nXG4gIH07XG59O1xuXG52YXIgcGFyc2UgPSBmdW5jdGlvbiBwYXJzZShyYXcpIHtcbiAgdmFyIHZhbHVlID0gcmF3LnNsaWNlKDAsIC0yKTtcbiAgdmFyIHN1ZmZpeCA9IHJhdy5zbGljZSgtMik7XG5cbiAgaWYgKHN1ZmZpeCAhPT0gJ3B4Jykge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IE51bWJlcih2YWx1ZSk7XG4gICEhaXNOYU4ocmVzdWx0KSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgXCJDb3VsZCBub3QgcGFyc2UgdmFsdWUgW3JhdzogXCIgKyByYXcgKyBcIiwgd2l0aG91dCBzdWZmaXg6IFwiICsgdmFsdWUgKyBcIl1cIikgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGdldFdpbmRvd1Njcm9sbCA9IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbCgpIHtcbiAgcmV0dXJuIHtcbiAgICB4OiB3aW5kb3cucGFnZVhPZmZzZXQsXG4gICAgeTogd2luZG93LnBhZ2VZT2Zmc2V0XG4gIH07XG59O1xuXG52YXIgb2Zmc2V0ID0gZnVuY3Rpb24gb2Zmc2V0KG9yaWdpbmFsLCBjaGFuZ2UpIHtcbiAgdmFyIGJvcmRlckJveCA9IG9yaWdpbmFsLmJvcmRlckJveCxcbiAgICAgIGJvcmRlciA9IG9yaWdpbmFsLmJvcmRlcixcbiAgICAgIG1hcmdpbiA9IG9yaWdpbmFsLm1hcmdpbixcbiAgICAgIHBhZGRpbmcgPSBvcmlnaW5hbC5wYWRkaW5nO1xuICB2YXIgc2hpZnRlZCA9IHNoaWZ0KGJvcmRlckJveCwgY2hhbmdlKTtcbiAgcmV0dXJuIGNyZWF0ZUJveCh7XG4gICAgYm9yZGVyQm94OiBzaGlmdGVkLFxuICAgIGJvcmRlcjogYm9yZGVyLFxuICAgIG1hcmdpbjogbWFyZ2luLFxuICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgfSk7XG59O1xudmFyIHdpdGhTY3JvbGwgPSBmdW5jdGlvbiB3aXRoU2Nyb2xsKG9yaWdpbmFsLCBzY3JvbGwpIHtcbiAgaWYgKHNjcm9sbCA9PT0gdm9pZCAwKSB7XG4gICAgc2Nyb2xsID0gZ2V0V2luZG93U2Nyb2xsKCk7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0KG9yaWdpbmFsLCBzY3JvbGwpO1xufTtcbnZhciBjYWxjdWxhdGVCb3ggPSBmdW5jdGlvbiBjYWxjdWxhdGVCb3goYm9yZGVyQm94LCBzdHlsZXMpIHtcbiAgdmFyIG1hcmdpbiA9IHtcbiAgICB0b3A6IHBhcnNlKHN0eWxlcy5tYXJnaW5Ub3ApLFxuICAgIHJpZ2h0OiBwYXJzZShzdHlsZXMubWFyZ2luUmlnaHQpLFxuICAgIGJvdHRvbTogcGFyc2Uoc3R5bGVzLm1hcmdpbkJvdHRvbSksXG4gICAgbGVmdDogcGFyc2Uoc3R5bGVzLm1hcmdpbkxlZnQpXG4gIH07XG4gIHZhciBwYWRkaW5nID0ge1xuICAgIHRvcDogcGFyc2Uoc3R5bGVzLnBhZGRpbmdUb3ApLFxuICAgIHJpZ2h0OiBwYXJzZShzdHlsZXMucGFkZGluZ1JpZ2h0KSxcbiAgICBib3R0b206IHBhcnNlKHN0eWxlcy5wYWRkaW5nQm90dG9tKSxcbiAgICBsZWZ0OiBwYXJzZShzdHlsZXMucGFkZGluZ0xlZnQpXG4gIH07XG4gIHZhciBib3JkZXIgPSB7XG4gICAgdG9wOiBwYXJzZShzdHlsZXMuYm9yZGVyVG9wV2lkdGgpLFxuICAgIHJpZ2h0OiBwYXJzZShzdHlsZXMuYm9yZGVyUmlnaHRXaWR0aCksXG4gICAgYm90dG9tOiBwYXJzZShzdHlsZXMuYm9yZGVyQm90dG9tV2lkdGgpLFxuICAgIGxlZnQ6IHBhcnNlKHN0eWxlcy5ib3JkZXJMZWZ0V2lkdGgpXG4gIH07XG4gIHJldHVybiBjcmVhdGVCb3goe1xuICAgIGJvcmRlckJveDogYm9yZGVyQm94LFxuICAgIG1hcmdpbjogbWFyZ2luLFxuICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgYm9yZGVyOiBib3JkZXJcbiAgfSk7XG59O1xudmFyIGdldEJveCA9IGZ1bmN0aW9uIGdldEJveChlbCkge1xuICB2YXIgYm9yZGVyQm94ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gIHJldHVybiBjYWxjdWxhdGVCb3goYm9yZGVyQm94LCBzdHlsZXMpO1xufTtcblxuZXhwb3J0cy5jYWxjdWxhdGVCb3ggPSBjYWxjdWxhdGVCb3g7XG5leHBvcnRzLmNyZWF0ZUJveCA9IGNyZWF0ZUJveDtcbmV4cG9ydHMuZXhwYW5kID0gZXhwYW5kO1xuZXhwb3J0cy5nZXRCb3ggPSBnZXRCb3g7XG5leHBvcnRzLmdldFJlY3QgPSBnZXRSZWN0O1xuZXhwb3J0cy5vZmZzZXQgPSBvZmZzZXQ7XG5leHBvcnRzLnNocmluayA9IHNocmluaztcbmV4cG9ydHMud2l0aFNjcm9sbCA9IHdpdGhTY3JvbGw7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBzYWZlSXNOYU4gPSBOdW1iZXIuaXNOYU4gfHxcbiAgICBmdW5jdGlvbiBwb255ZmlsbCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gdmFsdWU7XG4gICAgfTtcbmZ1bmN0aW9uIGlzRXF1YWwoZmlyc3QsIHNlY29uZCkge1xuICAgIGlmIChmaXJzdCA9PT0gc2Vjb25kKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoc2FmZUlzTmFOKGZpcnN0KSAmJiBzYWZlSXNOYU4oc2Vjb25kKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gYXJlSW5wdXRzRXF1YWwobmV3SW5wdXRzLCBsYXN0SW5wdXRzKSB7XG4gICAgaWYgKG5ld0lucHV0cy5sZW5ndGggIT09IGxhc3RJbnB1dHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdJbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpc0VxdWFsKG5ld0lucHV0c1tpXSwgbGFzdElucHV0c1tpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWVtb2l6ZU9uZShyZXN1bHRGbiwgaXNFcXVhbCkge1xuICAgIGlmIChpc0VxdWFsID09PSB2b2lkIDApIHsgaXNFcXVhbCA9IGFyZUlucHV0c0VxdWFsOyB9XG4gICAgdmFyIGNhY2hlID0gbnVsbDtcbiAgICBmdW5jdGlvbiBtZW1vaXplZCgpIHtcbiAgICAgICAgdmFyIG5ld0FyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG5ld0FyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FjaGUgJiYgY2FjaGUubGFzdFRoaXMgPT09IHRoaXMgJiYgaXNFcXVhbChuZXdBcmdzLCBjYWNoZS5sYXN0QXJncykpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZS5sYXN0UmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgICAgIGNhY2hlID0ge1xuICAgICAgICAgICAgbGFzdFJlc3VsdDogbGFzdFJlc3VsdCxcbiAgICAgICAgICAgIGxhc3RBcmdzOiBuZXdBcmdzLFxuICAgICAgICAgICAgbGFzdFRoaXM6IHRoaXMsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cbiAgICBtZW1vaXplZC5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICBjYWNoZSA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZU9uZTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJhZlNjaGQgPSBmdW5jdGlvbiByYWZTY2hkKGZuKSB7XG4gIHZhciBsYXN0QXJncyA9IFtdO1xuICB2YXIgZnJhbWVJZCA9IG51bGw7XG5cbiAgdmFyIHdyYXBwZXJGbiA9IGZ1bmN0aW9uIHdyYXBwZXJGbigpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgbGFzdEFyZ3MgPSBhcmdzO1xuXG4gICAgaWYgKGZyYW1lSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZyYW1lSWQgPSBudWxsO1xuICAgICAgZm4uYXBwbHkodm9pZCAwLCBsYXN0QXJncyk7XG4gICAgfSk7XG4gIH07XG5cbiAgd3JhcHBlckZuLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWZyYW1lSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICBmcmFtZUlkID0gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gd3JhcHBlckZuO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSByYWZTY2hkO1xuIiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7XG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZXh0ZW5kcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciBSZWFjdERPTSA9IHJlcXVpcmUoJ3JlYWN0LWRvbScpO1xudmFyIHJlZHV4ID0gcmVxdWlyZSgncmVkdXgnKTtcbnZhciByZWFjdFJlZHV4ID0gcmVxdWlyZSgncmVhY3QtcmVkdXgnKTtcbnZhciB1c2VNZW1vT25lID0gcmVxdWlyZSgndXNlLW1lbW8tb25lJyk7XG52YXIgY3NzQm94TW9kZWwgPSByZXF1aXJlKCdjc3MtYm94LW1vZGVsJyk7XG52YXIgbWVtb2l6ZU9uZSA9IHJlcXVpcmUoJ21lbW9pemUtb25lJyk7XG52YXIgcmFmU2NoZCA9IHJlcXVpcmUoJ3JhZi1zY2hkJyk7XG52YXIgX2V4dGVuZHMgPSByZXF1aXJlKCdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2V4dGVuZHMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0TGVnYWN5IChlKSB7IHJldHVybiBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAnZGVmYXVsdCcgaW4gZSA/IGUgOiB7ICdkZWZhdWx0JzogZSB9OyB9XG5cbnZhciBSZWFjdF9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koUmVhY3QpO1xudmFyIFJlYWN0RE9NX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShSZWFjdERPTSk7XG52YXIgbWVtb2l6ZU9uZV9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3kobWVtb2l6ZU9uZSk7XG52YXIgcmFmU2NoZF9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3kocmFmU2NoZCk7XG52YXIgX2V4dGVuZHNfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KF9leHRlbmRzKTtcblxuY29uc3QgaXNQcm9kdWN0aW9uJDEgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nO1xuXG5jb25zdCBzcGFjZXNBbmRUYWJzID0gL1sgXFx0XXsyLH0vZztcbmNvbnN0IGxpbmVTdGFydFdpdGhTcGFjZXMgPSAvXlsgXFx0XSovZ207XG5cbmNvbnN0IGNsZWFuJDIgPSB2YWx1ZSA9PiB2YWx1ZS5yZXBsYWNlKHNwYWNlc0FuZFRhYnMsICcgJykucmVwbGFjZShsaW5lU3RhcnRXaXRoU3BhY2VzLCAnJykudHJpbSgpO1xuY29uc3QgZ2V0RGV2TWVzc2FnZSA9IG1lc3NhZ2UgPT4gY2xlYW4kMihgXG4gICVjQGhlbGxvLXBhbmdlYS9kbmRcblxuICAlYyR7Y2xlYW4kMihtZXNzYWdlKX1cblxuICAlY/CfkbfigI0gVGhpcyBpcyBhIGRldmVsb3BtZW50IG9ubHkgbWVzc2FnZS4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHByb2R1Y3Rpb24gYnVpbGRzLlxuYCk7XG5jb25zdCBnZXRGb3JtYXR0ZWRNZXNzYWdlID0gbWVzc2FnZSA9PiBbZ2V0RGV2TWVzc2FnZShtZXNzYWdlKSxcbidjb2xvcjogIzAwQzU4NDsgZm9udC1zaXplOiAxLjJlbTsgZm9udC13ZWlnaHQ6IGJvbGQ7JyxcbidsaW5lLWhlaWdodDogMS41Jyxcbidjb2xvcjogIzcyMzg3NDsnXTtcbmNvbnN0IGlzRGlzYWJsZWRGbGFnID0gJ19fQGhlbGxvLXBhbmdlYS9kbmQtZGlzYWJsZS1kZXYtd2FybmluZ3MnO1xuZnVuY3Rpb24gbG9nKHR5cGUsIG1lc3NhZ2UpIHtcbiAgaWYgKGlzUHJvZHVjdGlvbiQxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvd1tpc0Rpc2FibGVkRmxhZ10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zb2xlW3R5cGVdKC4uLmdldEZvcm1hdHRlZE1lc3NhZ2UobWVzc2FnZSkpO1xufVxuY29uc3Qgd2FybmluZyA9IGxvZy5iaW5kKG51bGwsICd3YXJuJyk7XG5jb25zdCBlcnJvciA9IGxvZy5iaW5kKG51bGwsICdlcnJvcicpO1xuXG5mdW5jdGlvbiBub29wJDIoKSB7fVxuXG5mdW5jdGlvbiBnZXRPcHRpb25zKHNoYXJlZCwgZnJvbUJpbmRpbmcpIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zaGFyZWQsXG4gICAgLi4uZnJvbUJpbmRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGJpbmRFdmVudHMoZWwsIGJpbmRpbmdzLCBzaGFyZWRPcHRpb25zKSB7XG4gIGNvbnN0IHVuYmluZGluZ3MgPSBiaW5kaW5ncy5tYXAoYmluZGluZyA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnMoc2hhcmVkT3B0aW9ucywgYmluZGluZy5vcHRpb25zKTtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKGJpbmRpbmcuZXZlbnROYW1lLCBiaW5kaW5nLmZuLCBvcHRpb25zKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gdW5iaW5kKCkge1xuICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihiaW5kaW5nLmV2ZW50TmFtZSwgYmluZGluZy5mbiwgb3B0aW9ucyk7XG4gICAgfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHVuYmluZEFsbCgpIHtcbiAgICB1bmJpbmRpbmdzLmZvckVhY2godW5iaW5kID0+IHtcbiAgICAgIHVuYmluZCgpO1xuICAgIH0pO1xuICB9O1xufVxuXG5jb25zdCBpc1Byb2R1Y3Rpb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nO1xuY29uc3QgcHJlZml4JDEgPSAnSW52YXJpYW50IGZhaWxlZCc7XG5jbGFzcyBSYmRJbnZhcmlhbnQgZXh0ZW5kcyBFcnJvciB7fVxuUmJkSW52YXJpYW50LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdGhpcy5tZXNzYWdlO1xufTtcblxuZnVuY3Rpb24gaW52YXJpYW50KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICBpZiAoY29uZGl0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpc1Byb2R1Y3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgUmJkSW52YXJpYW50KHByZWZpeCQxKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgUmJkSW52YXJpYW50KGAke3ByZWZpeCQxfTogJHttZXNzYWdlIHx8ICcnfWApO1xuICB9XG59XG5cbmNsYXNzIEVycm9yQm91bmRhcnkgZXh0ZW5kcyBSZWFjdF9fZGVmYXVsdFtcImRlZmF1bHRcIl0uQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICB0aGlzLmNhbGxiYWNrcyA9IG51bGw7XG4gICAgdGhpcy51bmJpbmQgPSBub29wJDI7XG4gICAgdGhpcy5vbldpbmRvd0Vycm9yID0gZXZlbnQgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpcy5nZXRDYWxsYmFja3MoKTtcbiAgICAgIGlmIChjYWxsYmFja3MuaXNEcmFnZ2luZygpKSB7XG4gICAgICAgIGNhbGxiYWNrcy50cnlBYm9ydCgpO1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKGBcbiAgICAgICAgQW4gZXJyb3Igd2FzIGNhdWdodCBieSBvdXIgd2luZG93ICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgd2hpbGUgYSBkcmFnIHdhcyBvY2N1cnJpbmcuXG4gICAgICAgIFRoZSBhY3RpdmUgZHJhZyBoYXMgYmVlbiBhYm9ydGVkLlxuICAgICAgYCkgOiB2b2lkIDA7XG4gICAgICB9XG4gICAgICBjb25zdCBlcnIgPSBldmVudC5lcnJvcjtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBSYmRJbnZhcmlhbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBlcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuZ2V0Q2FsbGJhY2tzID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNhbGxiYWNrcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIEFwcENhbGxiYWNrcyBpbiA8RXJyb3JCb3VuZGFyeS8+Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jYWxsYmFja3M7XG4gICAgfTtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IGNhbGxiYWNrcyA9PiB7XG4gICAgICB0aGlzLmNhbGxiYWNrcyA9IGNhbGxiYWNrcztcbiAgICB9O1xuICB9XG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudW5iaW5kID0gYmluZEV2ZW50cyh3aW5kb3csIFt7XG4gICAgICBldmVudE5hbWU6ICdlcnJvcicsXG4gICAgICBmbjogdGhpcy5vbldpbmRvd0Vycm9yXG4gICAgfV0pO1xuICB9XG4gIGNvbXBvbmVudERpZENhdGNoKGVycikge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBSYmRJbnZhcmlhbnQpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe30pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRocm93IGVycjtcbiAgfVxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnVuYmluZCgpO1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbih0aGlzLnNldENhbGxiYWNrcyk7XG4gIH1cbn1cblxuY29uc3QgZHJhZ0hhbmRsZVVzYWdlSW5zdHJ1Y3Rpb25zID0gYFxuICBQcmVzcyBzcGFjZSBiYXIgdG8gc3RhcnQgYSBkcmFnLlxuICBXaGVuIGRyYWdnaW5nIHlvdSBjYW4gdXNlIHRoZSBhcnJvdyBrZXlzIHRvIG1vdmUgdGhlIGl0ZW0gYXJvdW5kIGFuZCBlc2NhcGUgdG8gY2FuY2VsLlxuICBTb21lIHNjcmVlbiByZWFkZXJzIG1heSByZXF1aXJlIHlvdSB0byBiZSBpbiBmb2N1cyBtb2RlIG9yIHRvIHVzZSB5b3VyIHBhc3MgdGhyb3VnaCBrZXlcbmA7XG5jb25zdCBwb3NpdGlvbiA9IGluZGV4ID0+IGluZGV4ICsgMTtcblxuY29uc3Qgb25EcmFnU3RhcnQgPSBzdGFydCA9PiBgXG4gIFlvdSBoYXZlIGxpZnRlZCBhbiBpdGVtIGluIHBvc2l0aW9uICR7cG9zaXRpb24oc3RhcnQuc291cmNlLmluZGV4KX1cbmA7XG5jb25zdCB3aXRoTG9jYXRpb24gPSAoc291cmNlLCBkZXN0aW5hdGlvbikgPT4ge1xuICBjb25zdCBpc0luSG9tZUxpc3QgPSBzb3VyY2UuZHJvcHBhYmxlSWQgPT09IGRlc3RpbmF0aW9uLmRyb3BwYWJsZUlkO1xuICBjb25zdCBzdGFydFBvc2l0aW9uID0gcG9zaXRpb24oc291cmNlLmluZGV4KTtcbiAgY29uc3QgZW5kUG9zaXRpb24gPSBwb3NpdGlvbihkZXN0aW5hdGlvbi5pbmRleCk7XG4gIGlmIChpc0luSG9tZUxpc3QpIHtcbiAgICByZXR1cm4gYFxuICAgICAgWW91IGhhdmUgbW92ZWQgdGhlIGl0ZW0gZnJvbSBwb3NpdGlvbiAke3N0YXJ0UG9zaXRpb259XG4gICAgICB0byBwb3NpdGlvbiAke2VuZFBvc2l0aW9ufVxuICAgIGA7XG4gIH1cbiAgcmV0dXJuIGBcbiAgICBZb3UgaGF2ZSBtb3ZlZCB0aGUgaXRlbSBmcm9tIHBvc2l0aW9uICR7c3RhcnRQb3NpdGlvbn1cbiAgICBpbiBsaXN0ICR7c291cmNlLmRyb3BwYWJsZUlkfVxuICAgIHRvIGxpc3QgJHtkZXN0aW5hdGlvbi5kcm9wcGFibGVJZH1cbiAgICBpbiBwb3NpdGlvbiAke2VuZFBvc2l0aW9ufVxuICBgO1xufTtcbmNvbnN0IHdpdGhDb21iaW5lID0gKGlkLCBzb3VyY2UsIGNvbWJpbmUpID0+IHtcbiAgY29uc3QgaW5Ib21lTGlzdCA9IHNvdXJjZS5kcm9wcGFibGVJZCA9PT0gY29tYmluZS5kcm9wcGFibGVJZDtcbiAgaWYgKGluSG9tZUxpc3QpIHtcbiAgICByZXR1cm4gYFxuICAgICAgVGhlIGl0ZW0gJHtpZH1cbiAgICAgIGhhcyBiZWVuIGNvbWJpbmVkIHdpdGggJHtjb21iaW5lLmRyYWdnYWJsZUlkfWA7XG4gIH1cbiAgcmV0dXJuIGBcbiAgICAgIFRoZSBpdGVtICR7aWR9XG4gICAgICBpbiBsaXN0ICR7c291cmNlLmRyb3BwYWJsZUlkfVxuICAgICAgaGFzIGJlZW4gY29tYmluZWQgd2l0aCAke2NvbWJpbmUuZHJhZ2dhYmxlSWR9XG4gICAgICBpbiBsaXN0ICR7Y29tYmluZS5kcm9wcGFibGVJZH1cbiAgICBgO1xufTtcbmNvbnN0IG9uRHJhZ1VwZGF0ZSA9IHVwZGF0ZSA9PiB7XG4gIGNvbnN0IGxvY2F0aW9uID0gdXBkYXRlLmRlc3RpbmF0aW9uO1xuICBpZiAobG9jYXRpb24pIHtcbiAgICByZXR1cm4gd2l0aExvY2F0aW9uKHVwZGF0ZS5zb3VyY2UsIGxvY2F0aW9uKTtcbiAgfVxuICBjb25zdCBjb21iaW5lID0gdXBkYXRlLmNvbWJpbmU7XG4gIGlmIChjb21iaW5lKSB7XG4gICAgcmV0dXJuIHdpdGhDb21iaW5lKHVwZGF0ZS5kcmFnZ2FibGVJZCwgdXBkYXRlLnNvdXJjZSwgY29tYmluZSk7XG4gIH1cbiAgcmV0dXJuICdZb3UgYXJlIG92ZXIgYW4gYXJlYSB0aGF0IGNhbm5vdCBiZSBkcm9wcGVkIG9uJztcbn07XG5jb25zdCByZXR1cm5lZFRvU3RhcnQgPSBzb3VyY2UgPT4gYFxuICBUaGUgaXRlbSBoYXMgcmV0dXJuZWQgdG8gaXRzIHN0YXJ0aW5nIHBvc2l0aW9uXG4gIG9mICR7cG9zaXRpb24oc291cmNlLmluZGV4KX1cbmA7XG5jb25zdCBvbkRyYWdFbmQgPSByZXN1bHQgPT4ge1xuICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ0NBTkNFTCcpIHtcbiAgICByZXR1cm4gYFxuICAgICAgTW92ZW1lbnQgY2FuY2VsbGVkLlxuICAgICAgJHtyZXR1cm5lZFRvU3RhcnQocmVzdWx0LnNvdXJjZSl9XG4gICAgYDtcbiAgfVxuICBjb25zdCBsb2NhdGlvbiA9IHJlc3VsdC5kZXN0aW5hdGlvbjtcbiAgY29uc3QgY29tYmluZSA9IHJlc3VsdC5jb21iaW5lO1xuICBpZiAobG9jYXRpb24pIHtcbiAgICByZXR1cm4gYFxuICAgICAgWW91IGhhdmUgZHJvcHBlZCB0aGUgaXRlbS5cbiAgICAgICR7d2l0aExvY2F0aW9uKHJlc3VsdC5zb3VyY2UsIGxvY2F0aW9uKX1cbiAgICBgO1xuICB9XG4gIGlmIChjb21iaW5lKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgIFlvdSBoYXZlIGRyb3BwZWQgdGhlIGl0ZW0uXG4gICAgICAke3dpdGhDb21iaW5lKHJlc3VsdC5kcmFnZ2FibGVJZCwgcmVzdWx0LnNvdXJjZSwgY29tYmluZSl9XG4gICAgYDtcbiAgfVxuICByZXR1cm4gYFxuICAgIFRoZSBpdGVtIGhhcyBiZWVuIGRyb3BwZWQgd2hpbGUgbm90IG92ZXIgYSBkcm9wIGFyZWEuXG4gICAgJHtyZXR1cm5lZFRvU3RhcnQocmVzdWx0LnNvdXJjZSl9XG4gIGA7XG59O1xuY29uc3QgcHJlc2V0ID0ge1xuICBkcmFnSGFuZGxlVXNhZ2VJbnN0cnVjdGlvbnMsXG4gIG9uRHJhZ1N0YXJ0LFxuICBvbkRyYWdVcGRhdGUsXG4gIG9uRHJhZ0VuZFxufTtcbnZhciBwcmVzZXQkMSA9IHByZXNldDtcblxuY29uc3Qgb3JpZ2luID0ge1xuICB4OiAwLFxuICB5OiAwXG59O1xuY29uc3QgYWRkID0gKHBvaW50MSwgcG9pbnQyKSA9PiAoe1xuICB4OiBwb2ludDEueCArIHBvaW50Mi54LFxuICB5OiBwb2ludDEueSArIHBvaW50Mi55XG59KTtcbmNvbnN0IHN1YnRyYWN0ID0gKHBvaW50MSwgcG9pbnQyKSA9PiAoe1xuICB4OiBwb2ludDEueCAtIHBvaW50Mi54LFxuICB5OiBwb2ludDEueSAtIHBvaW50Mi55XG59KTtcbmNvbnN0IGlzRXF1YWwkMSA9IChwb2ludDEsIHBvaW50MikgPT4gcG9pbnQxLnggPT09IHBvaW50Mi54ICYmIHBvaW50MS55ID09PSBwb2ludDIueTtcbmNvbnN0IG5lZ2F0ZSA9IHBvaW50ID0+ICh7XG4gIHg6IHBvaW50LnggIT09IDAgPyAtcG9pbnQueCA6IDAsXG4gIHk6IHBvaW50LnkgIT09IDAgPyAtcG9pbnQueSA6IDBcbn0pO1xuXG5jb25zdCBwYXRjaCA9IGZ1bmN0aW9uIChsaW5lLCB2YWx1ZSwgb3RoZXJWYWx1ZSkge1xuICBpZiAob3RoZXJWYWx1ZSA9PT0gdm9pZCAwKSB7XG4gICAgb3RoZXJWYWx1ZSA9IDA7XG4gIH1cbiAgaWYgKGxpbmUgPT09ICd4Jykge1xuICAgIHJldHVybiB7XG4gICAgICB4OiB2YWx1ZSxcbiAgICAgIHk6IG90aGVyVmFsdWVcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgeDogb3RoZXJWYWx1ZSxcbiAgICB5OiB2YWx1ZVxuICB9O1xufTtcblxuY29uc3QgZGlzdGFuY2UgPSAocG9pbnQxLCBwb2ludDIpID0+IE1hdGguc3FydCgocG9pbnQyLnggLSBwb2ludDEueCkgKiogMiArIChwb2ludDIueSAtIHBvaW50MS55KSAqKiAyKTtcblxuY29uc3QgY2xvc2VzdCQxID0gKHRhcmdldCwgcG9pbnRzKSA9PiBNYXRoLm1pbiguLi5wb2ludHMubWFwKHBvaW50ID0+IGRpc3RhbmNlKHRhcmdldCwgcG9pbnQpKSk7XG5cbmNvbnN0IGFwcGx5ID0gZm4gPT4gcG9pbnQgPT4gKHtcbiAgeDogZm4ocG9pbnQueCksXG4gIHk6IGZuKHBvaW50LnkpXG59KTtcblxudmFyIGV4ZWN1dGVDbGlwID0gKChmcmFtZSwgc3ViamVjdCkgPT4ge1xuICBjb25zdCByZXN1bHQgPSBjc3NCb3hNb2RlbC5nZXRSZWN0KHtcbiAgICB0b3A6IE1hdGgubWF4KHN1YmplY3QudG9wLCBmcmFtZS50b3ApLFxuICAgIHJpZ2h0OiBNYXRoLm1pbihzdWJqZWN0LnJpZ2h0LCBmcmFtZS5yaWdodCksXG4gICAgYm90dG9tOiBNYXRoLm1pbihzdWJqZWN0LmJvdHRvbSwgZnJhbWUuYm90dG9tKSxcbiAgICBsZWZ0OiBNYXRoLm1heChzdWJqZWN0LmxlZnQsIGZyYW1lLmxlZnQpXG4gIH0pO1xuICBpZiAocmVzdWx0LndpZHRoIDw9IDAgfHwgcmVzdWx0LmhlaWdodCA8PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5jb25zdCBvZmZzZXRCeVBvc2l0aW9uID0gKHNwYWNpbmcsIHBvaW50KSA9PiAoe1xuICB0b3A6IHNwYWNpbmcudG9wICsgcG9pbnQueSxcbiAgbGVmdDogc3BhY2luZy5sZWZ0ICsgcG9pbnQueCxcbiAgYm90dG9tOiBzcGFjaW5nLmJvdHRvbSArIHBvaW50LnksXG4gIHJpZ2h0OiBzcGFjaW5nLnJpZ2h0ICsgcG9pbnQueFxufSk7XG5jb25zdCBnZXRDb3JuZXJzID0gc3BhY2luZyA9PiBbe1xuICB4OiBzcGFjaW5nLmxlZnQsXG4gIHk6IHNwYWNpbmcudG9wXG59LCB7XG4gIHg6IHNwYWNpbmcucmlnaHQsXG4gIHk6IHNwYWNpbmcudG9wXG59LCB7XG4gIHg6IHNwYWNpbmcubGVmdCxcbiAgeTogc3BhY2luZy5ib3R0b21cbn0sIHtcbiAgeDogc3BhY2luZy5yaWdodCxcbiAgeTogc3BhY2luZy5ib3R0b21cbn1dO1xuY29uc3Qgbm9TcGFjaW5nID0ge1xuICB0b3A6IDAsXG4gIHJpZ2h0OiAwLFxuICBib3R0b206IDAsXG4gIGxlZnQ6IDBcbn07XG5cbmNvbnN0IHNjcm9sbCQxID0gKHRhcmdldCwgZnJhbWUpID0+IHtcbiAgaWYgKCFmcmFtZSkge1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cbiAgcmV0dXJuIG9mZnNldEJ5UG9zaXRpb24odGFyZ2V0LCBmcmFtZS5zY3JvbGwuZGlmZi5kaXNwbGFjZW1lbnQpO1xufTtcbmNvbnN0IGluY3JlYXNlID0gKHRhcmdldCwgYXhpcywgd2l0aFBsYWNlaG9sZGVyKSA9PiB7XG4gIGlmICh3aXRoUGxhY2Vob2xkZXIgJiYgd2l0aFBsYWNlaG9sZGVyLmluY3JlYXNlZEJ5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRhcmdldCxcbiAgICAgIFtheGlzLmVuZF06IHRhcmdldFtheGlzLmVuZF0gKyB3aXRoUGxhY2Vob2xkZXIuaW5jcmVhc2VkQnlbYXhpcy5saW5lXVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5jb25zdCBjbGlwID0gKHRhcmdldCwgZnJhbWUpID0+IHtcbiAgaWYgKGZyYW1lICYmIGZyYW1lLnNob3VsZENsaXBTdWJqZWN0KSB7XG4gICAgcmV0dXJuIGV4ZWN1dGVDbGlwKGZyYW1lLnBhZ2VNYXJnaW5Cb3gsIHRhcmdldCk7XG4gIH1cbiAgcmV0dXJuIGNzc0JveE1vZGVsLmdldFJlY3QodGFyZ2V0KTtcbn07XG52YXIgZ2V0U3ViamVjdCA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBwYWdlLFxuICAgIHdpdGhQbGFjZWhvbGRlcixcbiAgICBheGlzLFxuICAgIGZyYW1lXG4gIH0gPSBfcmVmO1xuICBjb25zdCBzY3JvbGxlZCA9IHNjcm9sbCQxKHBhZ2UubWFyZ2luQm94LCBmcmFtZSk7XG4gIGNvbnN0IGluY3JlYXNlZCA9IGluY3JlYXNlKHNjcm9sbGVkLCBheGlzLCB3aXRoUGxhY2Vob2xkZXIpO1xuICBjb25zdCBjbGlwcGVkID0gY2xpcChpbmNyZWFzZWQsIGZyYW1lKTtcbiAgcmV0dXJuIHtcbiAgICBwYWdlLFxuICAgIHdpdGhQbGFjZWhvbGRlcixcbiAgICBhY3RpdmU6IGNsaXBwZWRcbiAgfTtcbn0pO1xuXG52YXIgc2Nyb2xsRHJvcHBhYmxlID0gKChkcm9wcGFibGUsIG5ld1Njcm9sbCkgPT4ge1xuICAhZHJvcHBhYmxlLmZyYW1lID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGNvbnN0IHNjcm9sbGFibGUgPSBkcm9wcGFibGUuZnJhbWU7XG4gIGNvbnN0IHNjcm9sbERpZmYgPSBzdWJ0cmFjdChuZXdTY3JvbGwsIHNjcm9sbGFibGUuc2Nyb2xsLmluaXRpYWwpO1xuICBjb25zdCBzY3JvbGxEaXNwbGFjZW1lbnQgPSBuZWdhdGUoc2Nyb2xsRGlmZik7XG5cbiAgY29uc3QgZnJhbWUgPSB7XG4gICAgLi4uc2Nyb2xsYWJsZSxcbiAgICBzY3JvbGw6IHtcbiAgICAgIGluaXRpYWw6IHNjcm9sbGFibGUuc2Nyb2xsLmluaXRpYWwsXG4gICAgICBjdXJyZW50OiBuZXdTY3JvbGwsXG4gICAgICBkaWZmOiB7XG4gICAgICAgIHZhbHVlOiBzY3JvbGxEaWZmLFxuICAgICAgICBkaXNwbGFjZW1lbnQ6IHNjcm9sbERpc3BsYWNlbWVudFxuICAgICAgfSxcbiAgICAgIG1heDogc2Nyb2xsYWJsZS5zY3JvbGwubWF4XG4gICAgfVxuICB9O1xuICBjb25zdCBzdWJqZWN0ID0gZ2V0U3ViamVjdCh7XG4gICAgcGFnZTogZHJvcHBhYmxlLnN1YmplY3QucGFnZSxcbiAgICB3aXRoUGxhY2Vob2xkZXI6IGRyb3BwYWJsZS5zdWJqZWN0LndpdGhQbGFjZWhvbGRlcixcbiAgICBheGlzOiBkcm9wcGFibGUuYXhpcyxcbiAgICBmcmFtZVxuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIC4uLmRyb3BwYWJsZSxcbiAgICBmcmFtZSxcbiAgICBzdWJqZWN0XG4gIH07XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxuY29uc3QgdG9Ecm9wcGFibGVNYXAgPSBtZW1vaXplT25lX19kZWZhdWx0W1wiZGVmYXVsdFwiXShkcm9wcGFibGVzID0+IGRyb3BwYWJsZXMucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICBwcmV2aW91c1tjdXJyZW50LmRlc2NyaXB0b3IuaWRdID0gY3VycmVudDtcbiAgcmV0dXJuIHByZXZpb3VzO1xufSwge30pKTtcbmNvbnN0IHRvRHJhZ2dhYmxlTWFwID0gbWVtb2l6ZU9uZV9fZGVmYXVsdFtcImRlZmF1bHRcIl0oZHJhZ2dhYmxlcyA9PiBkcmFnZ2FibGVzLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHtcbiAgcHJldmlvdXNbY3VycmVudC5kZXNjcmlwdG9yLmlkXSA9IGN1cnJlbnQ7XG4gIHJldHVybiBwcmV2aW91cztcbn0sIHt9KSk7XG5jb25zdCB0b0Ryb3BwYWJsZUxpc3QgPSBtZW1vaXplT25lX19kZWZhdWx0W1wiZGVmYXVsdFwiXShkcm9wcGFibGVzID0+IE9iamVjdC52YWx1ZXMoZHJvcHBhYmxlcykpO1xuY29uc3QgdG9EcmFnZ2FibGVMaXN0ID0gbWVtb2l6ZU9uZV9fZGVmYXVsdFtcImRlZmF1bHRcIl0oZHJhZ2dhYmxlcyA9PiBPYmplY3QudmFsdWVzKGRyYWdnYWJsZXMpKTtcblxudmFyIGdldERyYWdnYWJsZXNJbnNpZGVEcm9wcGFibGUgPSBtZW1vaXplT25lX19kZWZhdWx0W1wiZGVmYXVsdFwiXSgoZHJvcHBhYmxlSWQsIGRyYWdnYWJsZXMpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gdG9EcmFnZ2FibGVMaXN0KGRyYWdnYWJsZXMpLmZpbHRlcihkcmFnZ2FibGUgPT4gZHJvcHBhYmxlSWQgPT09IGRyYWdnYWJsZS5kZXNjcmlwdG9yLmRyb3BwYWJsZUlkKVxuICAuc29ydCgoYSwgYikgPT4gYS5kZXNjcmlwdG9yLmluZGV4IC0gYi5kZXNjcmlwdG9yLmluZGV4KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5mdW5jdGlvbiB0cnlHZXREZXN0aW5hdGlvbihpbXBhY3QpIHtcbiAgaWYgKGltcGFjdC5hdCAmJiBpbXBhY3QuYXQudHlwZSA9PT0gJ1JFT1JERVInKSB7XG4gICAgcmV0dXJuIGltcGFjdC5hdC5kZXN0aW5hdGlvbjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIHRyeUdldENvbWJpbmUoaW1wYWN0KSB7XG4gIGlmIChpbXBhY3QuYXQgJiYgaW1wYWN0LmF0LnR5cGUgPT09ICdDT01CSU5FJykge1xuICAgIHJldHVybiBpbXBhY3QuYXQuY29tYmluZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIHJlbW92ZURyYWdnYWJsZUZyb21MaXN0ID0gbWVtb2l6ZU9uZV9fZGVmYXVsdFtcImRlZmF1bHRcIl0oKHJlbW92ZSwgbGlzdCkgPT4gbGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtLmRlc2NyaXB0b3IuaWQgIT09IHJlbW92ZS5kZXNjcmlwdG9yLmlkKSk7XG5cbnZhciBtb3ZlVG9OZXh0Q29tYmluZSA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBpc01vdmluZ0ZvcndhcmQsXG4gICAgZHJhZ2dhYmxlLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGluc2lkZURlc3RpbmF0aW9uLFxuICAgIHByZXZpb3VzSW1wYWN0XG4gIH0gPSBfcmVmO1xuICBpZiAoIWRlc3RpbmF0aW9uLmlzQ29tYmluZUVuYWJsZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBsb2NhdGlvbiA9IHRyeUdldERlc3RpbmF0aW9uKHByZXZpb3VzSW1wYWN0KTtcbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIGdldEltcGFjdCh0YXJnZXQpIHtcbiAgICBjb25zdCBhdCA9IHtcbiAgICAgIHR5cGU6ICdDT01CSU5FJyxcbiAgICAgIGNvbWJpbmU6IHtcbiAgICAgICAgZHJhZ2dhYmxlSWQ6IHRhcmdldCxcbiAgICAgICAgZHJvcHBhYmxlSWQ6IGRlc3RpbmF0aW9uLmRlc2NyaXB0b3IuaWRcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAuLi5wcmV2aW91c0ltcGFjdCxcbiAgICAgIGF0XG4gICAgfTtcbiAgfVxuICBjb25zdCBhbGwgPSBwcmV2aW91c0ltcGFjdC5kaXNwbGFjZWQuYWxsO1xuICBjb25zdCBjbG9zZXN0SWQgPSBhbGwubGVuZ3RoID8gYWxsWzBdIDogbnVsbDtcbiAgaWYgKGlzTW92aW5nRm9yd2FyZCkge1xuICAgIHJldHVybiBjbG9zZXN0SWQgPyBnZXRJbXBhY3QoY2xvc2VzdElkKSA6IG51bGw7XG4gIH1cbiAgY29uc3Qgd2l0aG91dERyYWdnYWJsZSA9IHJlbW92ZURyYWdnYWJsZUZyb21MaXN0KGRyYWdnYWJsZSwgaW5zaWRlRGVzdGluYXRpb24pO1xuXG4gIGlmICghY2xvc2VzdElkKSB7XG4gICAgaWYgKCF3aXRob3V0RHJhZ2dhYmxlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGxhc3QgPSB3aXRob3V0RHJhZ2dhYmxlW3dpdGhvdXREcmFnZ2FibGUubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIGdldEltcGFjdChsYXN0LmRlc2NyaXB0b3IuaWQpO1xuICB9XG5cbiAgY29uc3QgaW5kZXhPZkNsb3Nlc3QgPSB3aXRob3V0RHJhZ2dhYmxlLmZpbmRJbmRleChkID0+IGQuZGVzY3JpcHRvci5pZCA9PT0gY2xvc2VzdElkKTtcbiAgIShpbmRleE9mQ2xvc2VzdCAhPT0gLTEpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ291bGQgbm90IGZpbmQgZGlzcGxhY2VkIGl0ZW0gaW4gc2V0JykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBjb25zdCBwcm9wb3NlZEluZGV4ID0gaW5kZXhPZkNsb3Nlc3QgLSAxO1xuXG4gIGlmIChwcm9wb3NlZEluZGV4IDwgMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGJlZm9yZSA9IHdpdGhvdXREcmFnZ2FibGVbcHJvcG9zZWRJbmRleF07XG4gIHJldHVybiBnZXRJbXBhY3QoYmVmb3JlLmRlc2NyaXB0b3IuaWQpO1xufSk7XG5cbnZhciBpc0hvbWVPZiA9ICgoZHJhZ2dhYmxlLCBkZXN0aW5hdGlvbikgPT4gZHJhZ2dhYmxlLmRlc2NyaXB0b3IuZHJvcHBhYmxlSWQgPT09IGRlc3RpbmF0aW9uLmRlc2NyaXB0b3IuaWQpO1xuXG5jb25zdCBub0Rpc3BsYWNlZEJ5ID0ge1xuICBwb2ludDogb3JpZ2luLFxuICB2YWx1ZTogMFxufTtcbmNvbnN0IGVtcHR5R3JvdXBzID0ge1xuICBpbnZpc2libGU6IHt9LFxuICB2aXNpYmxlOiB7fSxcbiAgYWxsOiBbXVxufTtcbmNvbnN0IG5vSW1wYWN0ID0ge1xuICBkaXNwbGFjZWQ6IGVtcHR5R3JvdXBzLFxuICBkaXNwbGFjZWRCeTogbm9EaXNwbGFjZWRCeSxcbiAgYXQ6IG51bGxcbn07XG52YXIgbm9JbXBhY3QkMSA9IG5vSW1wYWN0O1xuXG52YXIgaXNXaXRoaW4gPSAoKGxvd2VyQm91bmQsIHVwcGVyQm91bmQpID0+IHZhbHVlID0+IGxvd2VyQm91bmQgPD0gdmFsdWUgJiYgdmFsdWUgPD0gdXBwZXJCb3VuZCk7XG5cbnZhciBpc1BhcnRpYWxseVZpc2libGVUaHJvdWdoRnJhbWUgPSAoZnJhbWUgPT4ge1xuICBjb25zdCBpc1dpdGhpblZlcnRpY2FsID0gaXNXaXRoaW4oZnJhbWUudG9wLCBmcmFtZS5ib3R0b20pO1xuICBjb25zdCBpc1dpdGhpbkhvcml6b250YWwgPSBpc1dpdGhpbihmcmFtZS5sZWZ0LCBmcmFtZS5yaWdodCk7XG4gIHJldHVybiBzdWJqZWN0ID0+IHtcblxuICAgIGNvbnN0IGlzQ29udGFpbmVkID0gaXNXaXRoaW5WZXJ0aWNhbChzdWJqZWN0LnRvcCkgJiYgaXNXaXRoaW5WZXJ0aWNhbChzdWJqZWN0LmJvdHRvbSkgJiYgaXNXaXRoaW5Ib3Jpem9udGFsKHN1YmplY3QubGVmdCkgJiYgaXNXaXRoaW5Ib3Jpem9udGFsKHN1YmplY3QucmlnaHQpO1xuICAgIGlmIChpc0NvbnRhaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzUGFydGlhbGx5VmlzaWJsZVZlcnRpY2FsbHkgPSBpc1dpdGhpblZlcnRpY2FsKHN1YmplY3QudG9wKSB8fCBpc1dpdGhpblZlcnRpY2FsKHN1YmplY3QuYm90dG9tKTtcbiAgICBjb25zdCBpc1BhcnRpYWxseVZpc2libGVIb3Jpem9udGFsbHkgPSBpc1dpdGhpbkhvcml6b250YWwoc3ViamVjdC5sZWZ0KSB8fCBpc1dpdGhpbkhvcml6b250YWwoc3ViamVjdC5yaWdodCk7XG5cbiAgICBjb25zdCBpc1BhcnRpYWxseUNvbnRhaW5lZCA9IGlzUGFydGlhbGx5VmlzaWJsZVZlcnRpY2FsbHkgJiYgaXNQYXJ0aWFsbHlWaXNpYmxlSG9yaXpvbnRhbGx5O1xuICAgIGlmIChpc1BhcnRpYWxseUNvbnRhaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzQmlnZ2VyVmVydGljYWxseSA9IHN1YmplY3QudG9wIDwgZnJhbWUudG9wICYmIHN1YmplY3QuYm90dG9tID4gZnJhbWUuYm90dG9tO1xuICAgIGNvbnN0IGlzQmlnZ2VySG9yaXpvbnRhbGx5ID0gc3ViamVjdC5sZWZ0IDwgZnJhbWUubGVmdCAmJiBzdWJqZWN0LnJpZ2h0ID4gZnJhbWUucmlnaHQ7XG5cbiAgICBjb25zdCBpc1RhcmdldEJpZ2dlclRoYW5GcmFtZSA9IGlzQmlnZ2VyVmVydGljYWxseSAmJiBpc0JpZ2dlckhvcml6b250YWxseTtcbiAgICBpZiAoaXNUYXJnZXRCaWdnZXJUaGFuRnJhbWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGlzVGFyZ2V0QmlnZ2VyT25PbmVBeGlzID0gaXNCaWdnZXJWZXJ0aWNhbGx5ICYmIGlzUGFydGlhbGx5VmlzaWJsZUhvcml6b250YWxseSB8fCBpc0JpZ2dlckhvcml6b250YWxseSAmJiBpc1BhcnRpYWxseVZpc2libGVWZXJ0aWNhbGx5O1xuICAgIHJldHVybiBpc1RhcmdldEJpZ2dlck9uT25lQXhpcztcbiAgfTtcbn0pO1xuXG52YXIgaXNUb3RhbGx5VmlzaWJsZVRocm91Z2hGcmFtZSA9IChmcmFtZSA9PiB7XG4gIGNvbnN0IGlzV2l0aGluVmVydGljYWwgPSBpc1dpdGhpbihmcmFtZS50b3AsIGZyYW1lLmJvdHRvbSk7XG4gIGNvbnN0IGlzV2l0aGluSG9yaXpvbnRhbCA9IGlzV2l0aGluKGZyYW1lLmxlZnQsIGZyYW1lLnJpZ2h0KTtcbiAgcmV0dXJuIHN1YmplY3QgPT4ge1xuICAgIGNvbnN0IGlzQ29udGFpbmVkID0gaXNXaXRoaW5WZXJ0aWNhbChzdWJqZWN0LnRvcCkgJiYgaXNXaXRoaW5WZXJ0aWNhbChzdWJqZWN0LmJvdHRvbSkgJiYgaXNXaXRoaW5Ib3Jpem9udGFsKHN1YmplY3QubGVmdCkgJiYgaXNXaXRoaW5Ib3Jpem9udGFsKHN1YmplY3QucmlnaHQpO1xuICAgIHJldHVybiBpc0NvbnRhaW5lZDtcbiAgfTtcbn0pO1xuXG5jb25zdCB2ZXJ0aWNhbCA9IHtcbiAgZGlyZWN0aW9uOiAndmVydGljYWwnLFxuICBsaW5lOiAneScsXG4gIGNyb3NzQXhpc0xpbmU6ICd4JyxcbiAgc3RhcnQ6ICd0b3AnLFxuICBlbmQ6ICdib3R0b20nLFxuICBzaXplOiAnaGVpZ2h0JyxcbiAgY3Jvc3NBeGlzU3RhcnQ6ICdsZWZ0JyxcbiAgY3Jvc3NBeGlzRW5kOiAncmlnaHQnLFxuICBjcm9zc0F4aXNTaXplOiAnd2lkdGgnXG59O1xuY29uc3QgaG9yaXpvbnRhbCA9IHtcbiAgZGlyZWN0aW9uOiAnaG9yaXpvbnRhbCcsXG4gIGxpbmU6ICd4JyxcbiAgY3Jvc3NBeGlzTGluZTogJ3knLFxuICBzdGFydDogJ2xlZnQnLFxuICBlbmQ6ICdyaWdodCcsXG4gIHNpemU6ICd3aWR0aCcsXG4gIGNyb3NzQXhpc1N0YXJ0OiAndG9wJyxcbiAgY3Jvc3NBeGlzRW5kOiAnYm90dG9tJyxcbiAgY3Jvc3NBeGlzU2l6ZTogJ2hlaWdodCdcbn07XG5cbnZhciBpc1RvdGFsbHlWaXNpYmxlVGhyb3VnaEZyYW1lT25BeGlzID0gKGF4aXMgPT4gZnJhbWUgPT4ge1xuICBjb25zdCBpc1dpdGhpblZlcnRpY2FsID0gaXNXaXRoaW4oZnJhbWUudG9wLCBmcmFtZS5ib3R0b20pO1xuICBjb25zdCBpc1dpdGhpbkhvcml6b250YWwgPSBpc1dpdGhpbihmcmFtZS5sZWZ0LCBmcmFtZS5yaWdodCk7XG4gIHJldHVybiBzdWJqZWN0ID0+IHtcbiAgICBpZiAoYXhpcyA9PT0gdmVydGljYWwpIHtcbiAgICAgIHJldHVybiBpc1dpdGhpblZlcnRpY2FsKHN1YmplY3QudG9wKSAmJiBpc1dpdGhpblZlcnRpY2FsKHN1YmplY3QuYm90dG9tKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzV2l0aGluSG9yaXpvbnRhbChzdWJqZWN0LmxlZnQpICYmIGlzV2l0aGluSG9yaXpvbnRhbChzdWJqZWN0LnJpZ2h0KTtcbiAgfTtcbn0pO1xuXG5jb25zdCBnZXREcm9wcGFibGVEaXNwbGFjZWQgPSAodGFyZ2V0LCBkZXN0aW5hdGlvbikgPT4ge1xuICBjb25zdCBkaXNwbGFjZW1lbnQgPSBkZXN0aW5hdGlvbi5mcmFtZSA/IGRlc3RpbmF0aW9uLmZyYW1lLnNjcm9sbC5kaWZmLmRpc3BsYWNlbWVudCA6IG9yaWdpbjtcbiAgcmV0dXJuIG9mZnNldEJ5UG9zaXRpb24odGFyZ2V0LCBkaXNwbGFjZW1lbnQpO1xufTtcbmNvbnN0IGlzVmlzaWJsZUluRHJvcHBhYmxlID0gKHRhcmdldCwgZGVzdGluYXRpb24sIGlzVmlzaWJsZVRocm91Z2hGcmFtZUZuKSA9PiB7XG4gIGlmICghZGVzdGluYXRpb24uc3ViamVjdC5hY3RpdmUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNWaXNpYmxlVGhyb3VnaEZyYW1lRm4oZGVzdGluYXRpb24uc3ViamVjdC5hY3RpdmUpKHRhcmdldCk7XG59O1xuY29uc3QgaXNWaXNpYmxlSW5WaWV3cG9ydCA9ICh0YXJnZXQsIHZpZXdwb3J0LCBpc1Zpc2libGVUaHJvdWdoRnJhbWVGbikgPT4gaXNWaXNpYmxlVGhyb3VnaEZyYW1lRm4odmlld3BvcnQpKHRhcmdldCk7XG5jb25zdCBpc1Zpc2libGUkMSA9IF9yZWYgPT4ge1xuICBsZXQge1xuICAgIHRhcmdldDogdG9CZURpc3BsYWNlZCxcbiAgICBkZXN0aW5hdGlvbixcbiAgICB2aWV3cG9ydCxcbiAgICB3aXRoRHJvcHBhYmxlRGlzcGxhY2VtZW50LFxuICAgIGlzVmlzaWJsZVRocm91Z2hGcmFtZUZuXG4gIH0gPSBfcmVmO1xuICBjb25zdCBkaXNwbGFjZWRUYXJnZXQgPSB3aXRoRHJvcHBhYmxlRGlzcGxhY2VtZW50ID8gZ2V0RHJvcHBhYmxlRGlzcGxhY2VkKHRvQmVEaXNwbGFjZWQsIGRlc3RpbmF0aW9uKSA6IHRvQmVEaXNwbGFjZWQ7XG4gIHJldHVybiBpc1Zpc2libGVJbkRyb3BwYWJsZShkaXNwbGFjZWRUYXJnZXQsIGRlc3RpbmF0aW9uLCBpc1Zpc2libGVUaHJvdWdoRnJhbWVGbikgJiYgaXNWaXNpYmxlSW5WaWV3cG9ydChkaXNwbGFjZWRUYXJnZXQsIHZpZXdwb3J0LCBpc1Zpc2libGVUaHJvdWdoRnJhbWVGbik7XG59O1xuY29uc3QgaXNQYXJ0aWFsbHlWaXNpYmxlID0gYXJncyA9PiBpc1Zpc2libGUkMSh7XG4gIC4uLmFyZ3MsXG4gIGlzVmlzaWJsZVRocm91Z2hGcmFtZUZuOiBpc1BhcnRpYWxseVZpc2libGVUaHJvdWdoRnJhbWVcbn0pO1xuY29uc3QgaXNUb3RhbGx5VmlzaWJsZSA9IGFyZ3MgPT4gaXNWaXNpYmxlJDEoe1xuICAuLi5hcmdzLFxuICBpc1Zpc2libGVUaHJvdWdoRnJhbWVGbjogaXNUb3RhbGx5VmlzaWJsZVRocm91Z2hGcmFtZVxufSk7XG5jb25zdCBpc1RvdGFsbHlWaXNpYmxlT25BeGlzID0gYXJncyA9PiBpc1Zpc2libGUkMSh7XG4gIC4uLmFyZ3MsXG4gIGlzVmlzaWJsZVRocm91Z2hGcmFtZUZuOiBpc1RvdGFsbHlWaXNpYmxlVGhyb3VnaEZyYW1lT25BeGlzKGFyZ3MuZGVzdGluYXRpb24uYXhpcylcbn0pO1xuXG5jb25zdCBnZXRTaG91bGRBbmltYXRlID0gKGlkLCBsYXN0LCBmb3JjZVNob3VsZEFuaW1hdGUpID0+IHtcbiAgaWYgKHR5cGVvZiBmb3JjZVNob3VsZEFuaW1hdGUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBmb3JjZVNob3VsZEFuaW1hdGU7XG4gIH1cblxuICBpZiAoIWxhc3QpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCB7XG4gICAgaW52aXNpYmxlLFxuICAgIHZpc2libGVcbiAgfSA9IGxhc3Q7XG5cbiAgaWYgKGludmlzaWJsZVtpZF0pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcHJldmlvdXMgPSB2aXNpYmxlW2lkXTtcbiAgcmV0dXJuIHByZXZpb3VzID8gcHJldmlvdXMuc2hvdWxkQW5pbWF0ZSA6IHRydWU7XG59O1xuXG5mdW5jdGlvbiBnZXRUYXJnZXQoZHJhZ2dhYmxlLCBkaXNwbGFjZWRCeSkge1xuICBjb25zdCBtYXJnaW5Cb3ggPSBkcmFnZ2FibGUucGFnZS5tYXJnaW5Cb3g7XG5cbiAgY29uc3QgZXhwYW5kQnkgPSB7XG4gICAgdG9wOiBkaXNwbGFjZWRCeS5wb2ludC55LFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiBkaXNwbGFjZWRCeS5wb2ludC54XG4gIH07XG4gIHJldHVybiBjc3NCb3hNb2RlbC5nZXRSZWN0KGNzc0JveE1vZGVsLmV4cGFuZChtYXJnaW5Cb3gsIGV4cGFuZEJ5KSk7XG59XG5mdW5jdGlvbiBnZXREaXNwbGFjZW1lbnRHcm91cHMoX3JlZikge1xuICBsZXQge1xuICAgIGFmdGVyRHJhZ2dpbmcsXG4gICAgZGVzdGluYXRpb24sXG4gICAgZGlzcGxhY2VkQnksXG4gICAgdmlld3BvcnQsXG4gICAgZm9yY2VTaG91bGRBbmltYXRlLFxuICAgIGxhc3RcbiAgfSA9IF9yZWY7XG4gIHJldHVybiBhZnRlckRyYWdnaW5nLnJlZHVjZShmdW5jdGlvbiBwcm9jZXNzKGdyb3VwcywgZHJhZ2dhYmxlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0VGFyZ2V0KGRyYWdnYWJsZSwgZGlzcGxhY2VkQnkpO1xuICAgIGNvbnN0IGlkID0gZHJhZ2dhYmxlLmRlc2NyaXB0b3IuaWQ7XG4gICAgZ3JvdXBzLmFsbC5wdXNoKGlkKTtcbiAgICBjb25zdCBpc1Zpc2libGUgPSBpc1BhcnRpYWxseVZpc2libGUoe1xuICAgICAgdGFyZ2V0LFxuICAgICAgZGVzdGluYXRpb24sXG4gICAgICB2aWV3cG9ydCxcbiAgICAgIHdpdGhEcm9wcGFibGVEaXNwbGFjZW1lbnQ6IHRydWVcbiAgICB9KTtcbiAgICBpZiAoIWlzVmlzaWJsZSkge1xuICAgICAgZ3JvdXBzLmludmlzaWJsZVtkcmFnZ2FibGUuZGVzY3JpcHRvci5pZF0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGdyb3VwcztcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRBbmltYXRlID0gZ2V0U2hvdWxkQW5pbWF0ZShpZCwgbGFzdCwgZm9yY2VTaG91bGRBbmltYXRlKTtcbiAgICBjb25zdCBkaXNwbGFjZW1lbnQgPSB7XG4gICAgICBkcmFnZ2FibGVJZDogaWQsXG4gICAgICBzaG91bGRBbmltYXRlXG4gICAgfTtcbiAgICBncm91cHMudmlzaWJsZVtpZF0gPSBkaXNwbGFjZW1lbnQ7XG4gICAgcmV0dXJuIGdyb3VwcztcbiAgfSwge1xuICAgIGFsbDogW10sXG4gICAgdmlzaWJsZToge30sXG4gICAgaW52aXNpYmxlOiB7fVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5kZXhPZkxhc3RJdGVtKGRyYWdnYWJsZXMsIG9wdGlvbnMpIHtcbiAgaWYgKCFkcmFnZ2FibGVzLmxlbmd0aCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNvbnN0IGluZGV4T2ZMYXN0SXRlbSA9IGRyYWdnYWJsZXNbZHJhZ2dhYmxlcy5sZW5ndGggLSAxXS5kZXNjcmlwdG9yLmluZGV4O1xuXG4gIHJldHVybiBvcHRpb25zLmluSG9tZUxpc3QgPyBpbmRleE9mTGFzdEl0ZW0gOiBpbmRleE9mTGFzdEl0ZW0gKyAxO1xufVxuZnVuY3Rpb24gZ29BdEVuZChfcmVmKSB7XG4gIGxldCB7XG4gICAgaW5zaWRlRGVzdGluYXRpb24sXG4gICAgaW5Ib21lTGlzdCxcbiAgICBkaXNwbGFjZWRCeSxcbiAgICBkZXN0aW5hdGlvblxuICB9ID0gX3JlZjtcbiAgY29uc3QgbmV3SW5kZXggPSBnZXRJbmRleE9mTGFzdEl0ZW0oaW5zaWRlRGVzdGluYXRpb24sIHtcbiAgICBpbkhvbWVMaXN0XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGRpc3BsYWNlZDogZW1wdHlHcm91cHMsXG4gICAgZGlzcGxhY2VkQnksXG4gICAgYXQ6IHtcbiAgICAgIHR5cGU6ICdSRU9SREVSJyxcbiAgICAgIGRlc3RpbmF0aW9uOiB7XG4gICAgICAgIGRyb3BwYWJsZUlkOiBkZXN0aW5hdGlvbi5kZXNjcmlwdG9yLmlkLFxuICAgICAgICBpbmRleDogbmV3SW5kZXhcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVSZW9yZGVySW1wYWN0KF9yZWYyKSB7XG4gIGxldCB7XG4gICAgZHJhZ2dhYmxlLFxuICAgIGluc2lkZURlc3RpbmF0aW9uLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIHZpZXdwb3J0LFxuICAgIGRpc3BsYWNlZEJ5LFxuICAgIGxhc3QsXG4gICAgaW5kZXgsXG4gICAgZm9yY2VTaG91bGRBbmltYXRlXG4gIH0gPSBfcmVmMjtcbiAgY29uc3QgaW5Ib21lTGlzdCA9IGlzSG9tZU9mKGRyYWdnYWJsZSwgZGVzdGluYXRpb24pO1xuXG4gIGlmIChpbmRleCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGdvQXRFbmQoe1xuICAgICAgaW5zaWRlRGVzdGluYXRpb24sXG4gICAgICBpbkhvbWVMaXN0LFxuICAgICAgZGlzcGxhY2VkQnksXG4gICAgICBkZXN0aW5hdGlvblxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbWF0Y2ggPSBpbnNpZGVEZXN0aW5hdGlvbi5maW5kKGl0ZW0gPT4gaXRlbS5kZXNjcmlwdG9yLmluZGV4ID09PSBpbmRleCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gZ29BdEVuZCh7XG4gICAgICBpbnNpZGVEZXN0aW5hdGlvbixcbiAgICAgIGluSG9tZUxpc3QsXG4gICAgICBkaXNwbGFjZWRCeSxcbiAgICAgIGRlc3RpbmF0aW9uXG4gICAgfSk7XG4gIH1cbiAgY29uc3Qgd2l0aG91dERyYWdnaW5nID0gcmVtb3ZlRHJhZ2dhYmxlRnJvbUxpc3QoZHJhZ2dhYmxlLCBpbnNpZGVEZXN0aW5hdGlvbik7XG4gIGNvbnN0IHNsaWNlRnJvbSA9IGluc2lkZURlc3RpbmF0aW9uLmluZGV4T2YobWF0Y2gpO1xuICBjb25zdCBpbXBhY3RlZCA9IHdpdGhvdXREcmFnZ2luZy5zbGljZShzbGljZUZyb20pO1xuICBjb25zdCBkaXNwbGFjZWQgPSBnZXREaXNwbGFjZW1lbnRHcm91cHMoe1xuICAgIGFmdGVyRHJhZ2dpbmc6IGltcGFjdGVkLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGRpc3BsYWNlZEJ5LFxuICAgIGxhc3QsXG4gICAgdmlld3BvcnQ6IHZpZXdwb3J0LmZyYW1lLFxuICAgIGZvcmNlU2hvdWxkQW5pbWF0ZVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBkaXNwbGFjZWQsXG4gICAgZGlzcGxhY2VkQnksXG4gICAgYXQ6IHtcbiAgICAgIHR5cGU6ICdSRU9SREVSJyxcbiAgICAgIGRlc3RpbmF0aW9uOiB7XG4gICAgICAgIGRyb3BwYWJsZUlkOiBkZXN0aW5hdGlvbi5kZXNjcmlwdG9yLmlkLFxuICAgICAgICBpbmRleFxuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZGlkU3RhcnRBZnRlckNyaXRpY2FsKGRyYWdnYWJsZUlkLCBhZnRlckNyaXRpY2FsKSB7XG4gIHJldHVybiBCb29sZWFuKGFmdGVyQ3JpdGljYWwuZWZmZWN0ZWRbZHJhZ2dhYmxlSWRdKTtcbn1cblxudmFyIGZyb21Db21iaW5lID0gKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGlzTW92aW5nRm9yd2FyZCxcbiAgICBkZXN0aW5hdGlvbixcbiAgICBkcmFnZ2FibGVzLFxuICAgIGNvbWJpbmUsXG4gICAgYWZ0ZXJDcml0aWNhbFxuICB9ID0gX3JlZjtcbiAgaWYgKCFkZXN0aW5hdGlvbi5pc0NvbWJpbmVFbmFibGVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgY29tYmluZUlkID0gY29tYmluZS5kcmFnZ2FibGVJZDtcbiAgY29uc3QgY29tYmluZVdpdGggPSBkcmFnZ2FibGVzW2NvbWJpbmVJZF07XG4gIGNvbnN0IGNvbWJpbmVXaXRoSW5kZXggPSBjb21iaW5lV2l0aC5kZXNjcmlwdG9yLmluZGV4O1xuICBjb25zdCBkaWRDb21iaW5lV2l0aFN0YXJ0QWZ0ZXJDcml0aWNhbCA9IGRpZFN0YXJ0QWZ0ZXJDcml0aWNhbChjb21iaW5lSWQsIGFmdGVyQ3JpdGljYWwpO1xuICBpZiAoZGlkQ29tYmluZVdpdGhTdGFydEFmdGVyQ3JpdGljYWwpIHtcbiAgICBpZiAoaXNNb3ZpbmdGb3J3YXJkKSB7XG4gICAgICByZXR1cm4gY29tYmluZVdpdGhJbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbWJpbmVXaXRoSW5kZXggLSAxO1xuICB9XG4gIGlmIChpc01vdmluZ0ZvcndhcmQpIHtcbiAgICByZXR1cm4gY29tYmluZVdpdGhJbmRleCArIDE7XG4gIH1cbiAgcmV0dXJuIGNvbWJpbmVXaXRoSW5kZXg7XG59KTtcblxudmFyIGZyb21SZW9yZGVyID0gKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGlzTW92aW5nRm9yd2FyZCxcbiAgICBpc0luSG9tZUxpc3QsXG4gICAgaW5zaWRlRGVzdGluYXRpb24sXG4gICAgbG9jYXRpb25cbiAgfSA9IF9yZWY7XG4gIGlmICghaW5zaWRlRGVzdGluYXRpb24ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgY3VycmVudEluZGV4ID0gbG9jYXRpb24uaW5kZXg7XG4gIGNvbnN0IHByb3Bvc2VkSW5kZXggPSBpc01vdmluZ0ZvcndhcmQgPyBjdXJyZW50SW5kZXggKyAxIDogY3VycmVudEluZGV4IC0gMTtcblxuICBjb25zdCBmaXJzdEluZGV4ID0gaW5zaWRlRGVzdGluYXRpb25bMF0uZGVzY3JpcHRvci5pbmRleDtcbiAgY29uc3QgbGFzdEluZGV4ID0gaW5zaWRlRGVzdGluYXRpb25baW5zaWRlRGVzdGluYXRpb24ubGVuZ3RoIC0gMV0uZGVzY3JpcHRvci5pbmRleDtcblxuICBjb25zdCB1cHBlckJvdW5kID0gaXNJbkhvbWVMaXN0ID8gbGFzdEluZGV4IDogbGFzdEluZGV4ICsgMTtcbiAgaWYgKHByb3Bvc2VkSW5kZXggPCBmaXJzdEluZGV4KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHByb3Bvc2VkSW5kZXggPiB1cHBlckJvdW5kKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHByb3Bvc2VkSW5kZXg7XG59KTtcblxudmFyIG1vdmVUb05leHRJbmRleCA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBpc01vdmluZ0ZvcndhcmQsXG4gICAgaXNJbkhvbWVMaXN0LFxuICAgIGRyYWdnYWJsZSxcbiAgICBkcmFnZ2FibGVzLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGluc2lkZURlc3RpbmF0aW9uLFxuICAgIHByZXZpb3VzSW1wYWN0LFxuICAgIHZpZXdwb3J0LFxuICAgIGFmdGVyQ3JpdGljYWxcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHdhc0F0ID0gcHJldmlvdXNJbXBhY3QuYXQ7XG4gICF3YXNBdCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0Nhbm5vdCBtb3ZlIGluIGRpcmVjdGlvbiB3aXRob3V0IHByZXZpb3VzIGltcGFjdCBsb2NhdGlvbicpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgaWYgKHdhc0F0LnR5cGUgPT09ICdSRU9SREVSJykge1xuICAgIGNvbnN0IG5ld0luZGV4ID0gZnJvbVJlb3JkZXIoe1xuICAgICAgaXNNb3ZpbmdGb3J3YXJkLFxuICAgICAgaXNJbkhvbWVMaXN0LFxuICAgICAgbG9jYXRpb246IHdhc0F0LmRlc3RpbmF0aW9uLFxuICAgICAgaW5zaWRlRGVzdGluYXRpb25cbiAgICB9KTtcbiAgICBpZiAobmV3SW5kZXggPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjYWxjdWxhdGVSZW9yZGVySW1wYWN0KHtcbiAgICAgIGRyYWdnYWJsZSxcbiAgICAgIGluc2lkZURlc3RpbmF0aW9uLFxuICAgICAgZGVzdGluYXRpb24sXG4gICAgICB2aWV3cG9ydCxcbiAgICAgIGxhc3Q6IHByZXZpb3VzSW1wYWN0LmRpc3BsYWNlZCxcbiAgICAgIGRpc3BsYWNlZEJ5OiBwcmV2aW91c0ltcGFjdC5kaXNwbGFjZWRCeSxcbiAgICAgIGluZGV4OiBuZXdJbmRleFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmV3SW5kZXggPSBmcm9tQ29tYmluZSh7XG4gICAgaXNNb3ZpbmdGb3J3YXJkLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGRpc3BsYWNlZDogcHJldmlvdXNJbXBhY3QuZGlzcGxhY2VkLFxuICAgIGRyYWdnYWJsZXMsXG4gICAgY29tYmluZTogd2FzQXQuY29tYmluZSxcbiAgICBhZnRlckNyaXRpY2FsXG4gIH0pO1xuICBpZiAobmV3SW5kZXggPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBjYWxjdWxhdGVSZW9yZGVySW1wYWN0KHtcbiAgICBkcmFnZ2FibGUsXG4gICAgaW5zaWRlRGVzdGluYXRpb24sXG4gICAgZGVzdGluYXRpb24sXG4gICAgdmlld3BvcnQsXG4gICAgbGFzdDogcHJldmlvdXNJbXBhY3QuZGlzcGxhY2VkLFxuICAgIGRpc3BsYWNlZEJ5OiBwcmV2aW91c0ltcGFjdC5kaXNwbGFjZWRCeSxcbiAgICBpbmRleDogbmV3SW5kZXhcbiAgfSk7XG59KTtcblxudmFyIGdldENvbWJpbmVkSXRlbURpc3BsYWNlbWVudCA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBkaXNwbGFjZWQsXG4gICAgYWZ0ZXJDcml0aWNhbCxcbiAgICBjb21iaW5lV2l0aCxcbiAgICBkaXNwbGFjZWRCeVxuICB9ID0gX3JlZjtcbiAgY29uc3QgaXNEaXNwbGFjZWQgPSBCb29sZWFuKGRpc3BsYWNlZC52aXNpYmxlW2NvbWJpbmVXaXRoXSB8fCBkaXNwbGFjZWQuaW52aXNpYmxlW2NvbWJpbmVXaXRoXSk7XG4gIGlmIChkaWRTdGFydEFmdGVyQ3JpdGljYWwoY29tYmluZVdpdGgsIGFmdGVyQ3JpdGljYWwpKSB7XG4gICAgcmV0dXJuIGlzRGlzcGxhY2VkID8gb3JpZ2luIDogbmVnYXRlKGRpc3BsYWNlZEJ5LnBvaW50KTtcbiAgfVxuICByZXR1cm4gaXNEaXNwbGFjZWQgPyBkaXNwbGFjZWRCeS5wb2ludCA6IG9yaWdpbjtcbn0pO1xuXG52YXIgd2hlbkNvbWJpbmluZyA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBhZnRlckNyaXRpY2FsLFxuICAgIGltcGFjdCxcbiAgICBkcmFnZ2FibGVzXG4gIH0gPSBfcmVmO1xuICBjb25zdCBjb21iaW5lID0gdHJ5R2V0Q29tYmluZShpbXBhY3QpO1xuICAhY29tYmluZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBjb25zdCBjb21iaW5lV2l0aCA9IGNvbWJpbmUuZHJhZ2dhYmxlSWQ7XG4gIGNvbnN0IGNlbnRlciA9IGRyYWdnYWJsZXNbY29tYmluZVdpdGhdLnBhZ2UuYm9yZGVyQm94LmNlbnRlcjtcbiAgY29uc3QgZGlzcGxhY2VCeSA9IGdldENvbWJpbmVkSXRlbURpc3BsYWNlbWVudCh7XG4gICAgZGlzcGxhY2VkOiBpbXBhY3QuZGlzcGxhY2VkLFxuICAgIGFmdGVyQ3JpdGljYWwsXG4gICAgY29tYmluZVdpdGgsXG4gICAgZGlzcGxhY2VkQnk6IGltcGFjdC5kaXNwbGFjZWRCeVxuICB9KTtcbiAgcmV0dXJuIGFkZChjZW50ZXIsIGRpc3BsYWNlQnkpO1xufSk7XG5cbmNvbnN0IGRpc3RhbmNlRnJvbVN0YXJ0VG9Cb3JkZXJCb3hDZW50ZXIgPSAoYXhpcywgYm94KSA9PiBib3gubWFyZ2luW2F4aXMuc3RhcnRdICsgYm94LmJvcmRlckJveFtheGlzLnNpemVdIC8gMjtcbmNvbnN0IGRpc3RhbmNlRnJvbUVuZFRvQm9yZGVyQm94Q2VudGVyID0gKGF4aXMsIGJveCkgPT4gYm94Lm1hcmdpbltheGlzLmVuZF0gKyBib3guYm9yZGVyQm94W2F4aXMuc2l6ZV0gLyAyO1xuXG5jb25zdCBnZXRDcm9zc0F4aXNCb3JkZXJCb3hDZW50ZXIgPSAoYXhpcywgdGFyZ2V0LCBpc01vdmluZykgPT4gdGFyZ2V0W2F4aXMuY3Jvc3NBeGlzU3RhcnRdICsgaXNNb3ZpbmcubWFyZ2luW2F4aXMuY3Jvc3NBeGlzU3RhcnRdICsgaXNNb3ZpbmcuYm9yZGVyQm94W2F4aXMuY3Jvc3NBeGlzU2l6ZV0gLyAyO1xuY29uc3QgZ29BZnRlciA9IF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGF4aXMsXG4gICAgbW92ZVJlbGF0aXZlVG8sXG4gICAgaXNNb3ZpbmdcbiAgfSA9IF9yZWY7XG4gIHJldHVybiBwYXRjaChheGlzLmxpbmUsXG4gIG1vdmVSZWxhdGl2ZVRvLm1hcmdpbkJveFtheGlzLmVuZF0gKyBkaXN0YW5jZUZyb21TdGFydFRvQm9yZGVyQm94Q2VudGVyKGF4aXMsIGlzTW92aW5nKSwgZ2V0Q3Jvc3NBeGlzQm9yZGVyQm94Q2VudGVyKGF4aXMsIG1vdmVSZWxhdGl2ZVRvLm1hcmdpbkJveCwgaXNNb3ZpbmcpKTtcbn07XG5jb25zdCBnb0JlZm9yZSA9IF9yZWYyID0+IHtcbiAgbGV0IHtcbiAgICBheGlzLFxuICAgIG1vdmVSZWxhdGl2ZVRvLFxuICAgIGlzTW92aW5nXG4gIH0gPSBfcmVmMjtcbiAgcmV0dXJuIHBhdGNoKGF4aXMubGluZSxcbiAgbW92ZVJlbGF0aXZlVG8ubWFyZ2luQm94W2F4aXMuc3RhcnRdIC0gZGlzdGFuY2VGcm9tRW5kVG9Cb3JkZXJCb3hDZW50ZXIoYXhpcywgaXNNb3ZpbmcpLCBnZXRDcm9zc0F4aXNCb3JkZXJCb3hDZW50ZXIoYXhpcywgbW92ZVJlbGF0aXZlVG8ubWFyZ2luQm94LCBpc01vdmluZykpO1xufTtcbmNvbnN0IGdvSW50b1N0YXJ0ID0gX3JlZjMgPT4ge1xuICBsZXQge1xuICAgIGF4aXMsXG4gICAgbW92ZUludG8sXG4gICAgaXNNb3ZpbmdcbiAgfSA9IF9yZWYzO1xuICByZXR1cm4gcGF0Y2goYXhpcy5saW5lLCBtb3ZlSW50by5jb250ZW50Qm94W2F4aXMuc3RhcnRdICsgZGlzdGFuY2VGcm9tU3RhcnRUb0JvcmRlckJveENlbnRlcihheGlzLCBpc01vdmluZyksIGdldENyb3NzQXhpc0JvcmRlckJveENlbnRlcihheGlzLCBtb3ZlSW50by5jb250ZW50Qm94LCBpc01vdmluZykpO1xufTtcblxudmFyIHdoZW5SZW9yZGVyaW5nID0gKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGltcGFjdCxcbiAgICBkcmFnZ2FibGUsXG4gICAgZHJhZ2dhYmxlcyxcbiAgICBkcm9wcGFibGUsXG4gICAgYWZ0ZXJDcml0aWNhbFxuICB9ID0gX3JlZjtcbiAgY29uc3QgaW5zaWRlRGVzdGluYXRpb24gPSBnZXREcmFnZ2FibGVzSW5zaWRlRHJvcHBhYmxlKGRyb3BwYWJsZS5kZXNjcmlwdG9yLmlkLCBkcmFnZ2FibGVzKTtcbiAgY29uc3QgZHJhZ2dhYmxlUGFnZSA9IGRyYWdnYWJsZS5wYWdlO1xuICBjb25zdCBheGlzID0gZHJvcHBhYmxlLmF4aXM7XG5cbiAgaWYgKCFpbnNpZGVEZXN0aW5hdGlvbi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZ29JbnRvU3RhcnQoe1xuICAgICAgYXhpcyxcbiAgICAgIG1vdmVJbnRvOiBkcm9wcGFibGUucGFnZSxcbiAgICAgIGlzTW92aW5nOiBkcmFnZ2FibGVQYWdlXG4gICAgfSk7XG4gIH1cbiAgY29uc3Qge1xuICAgIGRpc3BsYWNlZCxcbiAgICBkaXNwbGFjZWRCeVxuICB9ID0gaW1wYWN0O1xuICBjb25zdCBjbG9zZXN0QWZ0ZXIgPSBkaXNwbGFjZWQuYWxsWzBdO1xuXG4gIGlmIChjbG9zZXN0QWZ0ZXIpIHtcbiAgICBjb25zdCBjbG9zZXN0ID0gZHJhZ2dhYmxlc1tjbG9zZXN0QWZ0ZXJdO1xuXG4gICAgaWYgKGRpZFN0YXJ0QWZ0ZXJDcml0aWNhbChjbG9zZXN0QWZ0ZXIsIGFmdGVyQ3JpdGljYWwpKSB7XG4gICAgICByZXR1cm4gZ29CZWZvcmUoe1xuICAgICAgICBheGlzLFxuICAgICAgICBtb3ZlUmVsYXRpdmVUbzogY2xvc2VzdC5wYWdlLFxuICAgICAgICBpc01vdmluZzogZHJhZ2dhYmxlUGFnZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgd2l0aERpc3BsYWNlbWVudCA9IGNzc0JveE1vZGVsLm9mZnNldChjbG9zZXN0LnBhZ2UsIGRpc3BsYWNlZEJ5LnBvaW50KTtcbiAgICByZXR1cm4gZ29CZWZvcmUoe1xuICAgICAgYXhpcyxcbiAgICAgIG1vdmVSZWxhdGl2ZVRvOiB3aXRoRGlzcGxhY2VtZW50LFxuICAgICAgaXNNb3Zpbmc6IGRyYWdnYWJsZVBhZ2VcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGxhc3QgPSBpbnNpZGVEZXN0aW5hdGlvbltpbnNpZGVEZXN0aW5hdGlvbi5sZW5ndGggLSAxXTtcblxuICBpZiAobGFzdC5kZXNjcmlwdG9yLmlkID09PSBkcmFnZ2FibGUuZGVzY3JpcHRvci5pZCkge1xuICAgIHJldHVybiBkcmFnZ2FibGVQYWdlLmJvcmRlckJveC5jZW50ZXI7XG4gIH1cbiAgaWYgKGRpZFN0YXJ0QWZ0ZXJDcml0aWNhbChsYXN0LmRlc2NyaXB0b3IuaWQsIGFmdGVyQ3JpdGljYWwpKSB7XG5cbiAgICBjb25zdCBwYWdlID0gY3NzQm94TW9kZWwub2Zmc2V0KGxhc3QucGFnZSwgbmVnYXRlKGFmdGVyQ3JpdGljYWwuZGlzcGxhY2VkQnkucG9pbnQpKTtcbiAgICByZXR1cm4gZ29BZnRlcih7XG4gICAgICBheGlzLFxuICAgICAgbW92ZVJlbGF0aXZlVG86IHBhZ2UsXG4gICAgICBpc01vdmluZzogZHJhZ2dhYmxlUGFnZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGdvQWZ0ZXIoe1xuICAgIGF4aXMsXG4gICAgbW92ZVJlbGF0aXZlVG86IGxhc3QucGFnZSxcbiAgICBpc01vdmluZzogZHJhZ2dhYmxlUGFnZVxuICB9KTtcbn0pO1xuXG52YXIgd2l0aERyb3BwYWJsZURpc3BsYWNlbWVudCA9ICgoZHJvcHBhYmxlLCBwb2ludCkgPT4ge1xuICBjb25zdCBmcmFtZSA9IGRyb3BwYWJsZS5mcmFtZTtcbiAgaWYgKCFmcmFtZSkge1xuICAgIHJldHVybiBwb2ludDtcbiAgfVxuICByZXR1cm4gYWRkKHBvaW50LCBmcmFtZS5zY3JvbGwuZGlmZi5kaXNwbGFjZW1lbnQpO1xufSk7XG5cbmNvbnN0IGdldFJlc3VsdFdpdGhvdXREcm9wcGFibGVEaXNwbGFjZW1lbnQgPSBfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBpbXBhY3QsXG4gICAgZHJhZ2dhYmxlLFxuICAgIGRyb3BwYWJsZSxcbiAgICBkcmFnZ2FibGVzLFxuICAgIGFmdGVyQ3JpdGljYWxcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IG9yaWdpbmFsID0gZHJhZ2dhYmxlLnBhZ2UuYm9yZGVyQm94LmNlbnRlcjtcbiAgY29uc3QgYXQgPSBpbXBhY3QuYXQ7XG4gIGlmICghZHJvcHBhYmxlKSB7XG4gICAgcmV0dXJuIG9yaWdpbmFsO1xuICB9XG4gIGlmICghYXQpIHtcbiAgICByZXR1cm4gb3JpZ2luYWw7XG4gIH1cbiAgaWYgKGF0LnR5cGUgPT09ICdSRU9SREVSJykge1xuICAgIHJldHVybiB3aGVuUmVvcmRlcmluZyh7XG4gICAgICBpbXBhY3QsXG4gICAgICBkcmFnZ2FibGUsXG4gICAgICBkcmFnZ2FibGVzLFxuICAgICAgZHJvcHBhYmxlLFxuICAgICAgYWZ0ZXJDcml0aWNhbFxuICAgIH0pO1xuICB9XG4gIHJldHVybiB3aGVuQ29tYmluaW5nKHtcbiAgICBpbXBhY3QsXG4gICAgZHJhZ2dhYmxlcyxcbiAgICBhZnRlckNyaXRpY2FsXG4gIH0pO1xufTtcbnZhciBnZXRQYWdlQm9yZGVyQm94Q2VudGVyRnJvbUltcGFjdCA9IChhcmdzID0+IHtcbiAgY29uc3Qgd2l0aG91dERpc3BsYWNlbWVudCA9IGdldFJlc3VsdFdpdGhvdXREcm9wcGFibGVEaXNwbGFjZW1lbnQoYXJncyk7XG4gIGNvbnN0IGRyb3BwYWJsZSA9IGFyZ3MuZHJvcHBhYmxlO1xuICBjb25zdCB3aXRoRGlzcGxhY2VtZW50ID0gZHJvcHBhYmxlID8gd2l0aERyb3BwYWJsZURpc3BsYWNlbWVudChkcm9wcGFibGUsIHdpdGhvdXREaXNwbGFjZW1lbnQpIDogd2l0aG91dERpc3BsYWNlbWVudDtcbiAgcmV0dXJuIHdpdGhEaXNwbGFjZW1lbnQ7XG59KTtcblxudmFyIHNjcm9sbFZpZXdwb3J0ID0gKCh2aWV3cG9ydCwgbmV3U2Nyb2xsKSA9PiB7XG4gIGNvbnN0IGRpZmYgPSBzdWJ0cmFjdChuZXdTY3JvbGwsIHZpZXdwb3J0LnNjcm9sbC5pbml0aWFsKTtcbiAgY29uc3QgZGlzcGxhY2VtZW50ID0gbmVnYXRlKGRpZmYpO1xuXG4gIGNvbnN0IGZyYW1lID0gY3NzQm94TW9kZWwuZ2V0UmVjdCh7XG4gICAgdG9wOiBuZXdTY3JvbGwueSxcbiAgICBib3R0b206IG5ld1Njcm9sbC55ICsgdmlld3BvcnQuZnJhbWUuaGVpZ2h0LFxuICAgIGxlZnQ6IG5ld1Njcm9sbC54LFxuICAgIHJpZ2h0OiBuZXdTY3JvbGwueCArIHZpZXdwb3J0LmZyYW1lLndpZHRoXG4gIH0pO1xuICBjb25zdCB1cGRhdGVkID0ge1xuICAgIGZyYW1lLFxuICAgIHNjcm9sbDoge1xuICAgICAgaW5pdGlhbDogdmlld3BvcnQuc2Nyb2xsLmluaXRpYWwsXG4gICAgICBtYXg6IHZpZXdwb3J0LnNjcm9sbC5tYXgsXG4gICAgICBjdXJyZW50OiBuZXdTY3JvbGwsXG4gICAgICBkaWZmOiB7XG4gICAgICAgIHZhbHVlOiBkaWZmLFxuICAgICAgICBkaXNwbGFjZW1lbnRcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiB1cGRhdGVkO1xufSk7XG5cbmZ1bmN0aW9uIGdldERyYWdnYWJsZXMkMShpZHMsIGRyYWdnYWJsZXMpIHtcbiAgcmV0dXJuIGlkcy5tYXAoaWQgPT4gZHJhZ2dhYmxlc1tpZF0pO1xufVxuZnVuY3Rpb24gdHJ5R2V0VmlzaWJsZShpZCwgZ3JvdXBzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZGlzcGxhY2VtZW50ID0gZ3JvdXBzW2ldLnZpc2libGVbaWRdO1xuICAgIGlmIChkaXNwbGFjZW1lbnQpIHtcbiAgICAgIHJldHVybiBkaXNwbGFjZW1lbnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxudmFyIHNwZWN1bGF0aXZlbHlJbmNyZWFzZSA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBpbXBhY3QsXG4gICAgdmlld3BvcnQsXG4gICAgZGVzdGluYXRpb24sXG4gICAgZHJhZ2dhYmxlcyxcbiAgICBtYXhTY3JvbGxDaGFuZ2VcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHNjcm9sbGVkVmlld3BvcnQgPSBzY3JvbGxWaWV3cG9ydCh2aWV3cG9ydCwgYWRkKHZpZXdwb3J0LnNjcm9sbC5jdXJyZW50LCBtYXhTY3JvbGxDaGFuZ2UpKTtcbiAgY29uc3Qgc2Nyb2xsZWREcm9wcGFibGUgPSBkZXN0aW5hdGlvbi5mcmFtZSA/IHNjcm9sbERyb3BwYWJsZShkZXN0aW5hdGlvbiwgYWRkKGRlc3RpbmF0aW9uLmZyYW1lLnNjcm9sbC5jdXJyZW50LCBtYXhTY3JvbGxDaGFuZ2UpKSA6IGRlc3RpbmF0aW9uO1xuICBjb25zdCBsYXN0ID0gaW1wYWN0LmRpc3BsYWNlZDtcbiAgY29uc3Qgd2l0aFZpZXdwb3J0U2Nyb2xsID0gZ2V0RGlzcGxhY2VtZW50R3JvdXBzKHtcbiAgICBhZnRlckRyYWdnaW5nOiBnZXREcmFnZ2FibGVzJDEobGFzdC5hbGwsIGRyYWdnYWJsZXMpLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGRpc3BsYWNlZEJ5OiBpbXBhY3QuZGlzcGxhY2VkQnksXG4gICAgdmlld3BvcnQ6IHNjcm9sbGVkVmlld3BvcnQuZnJhbWUsXG4gICAgbGFzdCxcbiAgICBmb3JjZVNob3VsZEFuaW1hdGU6IGZhbHNlXG4gIH0pO1xuICBjb25zdCB3aXRoRHJvcHBhYmxlU2Nyb2xsID0gZ2V0RGlzcGxhY2VtZW50R3JvdXBzKHtcbiAgICBhZnRlckRyYWdnaW5nOiBnZXREcmFnZ2FibGVzJDEobGFzdC5hbGwsIGRyYWdnYWJsZXMpLFxuICAgIGRlc3RpbmF0aW9uOiBzY3JvbGxlZERyb3BwYWJsZSxcbiAgICBkaXNwbGFjZWRCeTogaW1wYWN0LmRpc3BsYWNlZEJ5LFxuICAgIHZpZXdwb3J0OiB2aWV3cG9ydC5mcmFtZSxcbiAgICBsYXN0LFxuICAgIGZvcmNlU2hvdWxkQW5pbWF0ZTogZmFsc2VcbiAgfSk7XG4gIGNvbnN0IGludmlzaWJsZSA9IHt9O1xuICBjb25zdCB2aXNpYmxlID0ge307XG4gIGNvbnN0IGdyb3VwcyA9IFtcbiAgbGFzdCwgd2l0aFZpZXdwb3J0U2Nyb2xsLCB3aXRoRHJvcHBhYmxlU2Nyb2xsXTtcbiAgbGFzdC5hbGwuZm9yRWFjaChpZCA9PiB7XG4gICAgY29uc3QgZGlzcGxhY2VtZW50ID0gdHJ5R2V0VmlzaWJsZShpZCwgZ3JvdXBzKTtcbiAgICBpZiAoZGlzcGxhY2VtZW50KSB7XG4gICAgICB2aXNpYmxlW2lkXSA9IGRpc3BsYWNlbWVudDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW52aXNpYmxlW2lkXSA9IHRydWU7XG4gIH0pO1xuICBjb25zdCBuZXdJbXBhY3QgPSB7XG4gICAgLi4uaW1wYWN0LFxuICAgIGRpc3BsYWNlZDoge1xuICAgICAgYWxsOiBsYXN0LmFsbCxcbiAgICAgIGludmlzaWJsZSxcbiAgICAgIHZpc2libGVcbiAgICB9XG4gIH07XG4gIHJldHVybiBuZXdJbXBhY3Q7XG59KTtcblxudmFyIHdpdGhWaWV3cG9ydERpc3BsYWNlbWVudCA9ICgodmlld3BvcnQsIHBvaW50KSA9PiBhZGQodmlld3BvcnQuc2Nyb2xsLmRpZmYuZGlzcGxhY2VtZW50LCBwb2ludCkpO1xuXG52YXIgZ2V0Q2xpZW50RnJvbVBhZ2VCb3JkZXJCb3hDZW50ZXIgPSAoX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgcGFnZUJvcmRlckJveENlbnRlcixcbiAgICBkcmFnZ2FibGUsXG4gICAgdmlld3BvcnRcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHdpdGhvdXRQYWdlU2Nyb2xsQ2hhbmdlID0gd2l0aFZpZXdwb3J0RGlzcGxhY2VtZW50KHZpZXdwb3J0LCBwYWdlQm9yZGVyQm94Q2VudGVyKTtcbiAgY29uc3Qgb2Zmc2V0ID0gc3VidHJhY3Qod2l0aG91dFBhZ2VTY3JvbGxDaGFuZ2UsIGRyYWdnYWJsZS5wYWdlLmJvcmRlckJveC5jZW50ZXIpO1xuICByZXR1cm4gYWRkKGRyYWdnYWJsZS5jbGllbnQuYm9yZGVyQm94LmNlbnRlciwgb2Zmc2V0KTtcbn0pO1xuXG52YXIgaXNUb3RhbGx5VmlzaWJsZUluTmV3TG9jYXRpb24gPSAoX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgZHJhZ2dhYmxlLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIG5ld1BhZ2VCb3JkZXJCb3hDZW50ZXIsXG4gICAgdmlld3BvcnQsXG4gICAgd2l0aERyb3BwYWJsZURpc3BsYWNlbWVudCxcbiAgICBvbmx5T25NYWluQXhpcyA9IGZhbHNlXG4gIH0gPSBfcmVmO1xuICBjb25zdCBjaGFuZ2VOZWVkZWQgPSBzdWJ0cmFjdChuZXdQYWdlQm9yZGVyQm94Q2VudGVyLCBkcmFnZ2FibGUucGFnZS5ib3JkZXJCb3guY2VudGVyKTtcbiAgY29uc3Qgc2hpZnRlZCA9IG9mZnNldEJ5UG9zaXRpb24oZHJhZ2dhYmxlLnBhZ2UuYm9yZGVyQm94LCBjaGFuZ2VOZWVkZWQpO1xuXG4gIGNvbnN0IGFyZ3MgPSB7XG4gICAgdGFyZ2V0OiBzaGlmdGVkLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIHdpdGhEcm9wcGFibGVEaXNwbGFjZW1lbnQsXG4gICAgdmlld3BvcnRcbiAgfTtcbiAgcmV0dXJuIG9ubHlPbk1haW5BeGlzID8gaXNUb3RhbGx5VmlzaWJsZU9uQXhpcyhhcmdzKSA6IGlzVG90YWxseVZpc2libGUoYXJncyk7XG59KTtcblxudmFyIG1vdmVUb05leHRQbGFjZSA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBpc01vdmluZ0ZvcndhcmQsXG4gICAgZHJhZ2dhYmxlLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGRyYWdnYWJsZXMsXG4gICAgcHJldmlvdXNJbXBhY3QsXG4gICAgdmlld3BvcnQsXG4gICAgcHJldmlvdXNQYWdlQm9yZGVyQm94Q2VudGVyLFxuICAgIHByZXZpb3VzQ2xpZW50U2VsZWN0aW9uLFxuICAgIGFmdGVyQ3JpdGljYWxcbiAgfSA9IF9yZWY7XG4gIGlmICghZGVzdGluYXRpb24uaXNFbmFibGVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgaW5zaWRlRGVzdGluYXRpb24gPSBnZXREcmFnZ2FibGVzSW5zaWRlRHJvcHBhYmxlKGRlc3RpbmF0aW9uLmRlc2NyaXB0b3IuaWQsIGRyYWdnYWJsZXMpO1xuICBjb25zdCBpc0luSG9tZUxpc3QgPSBpc0hvbWVPZihkcmFnZ2FibGUsIGRlc3RpbmF0aW9uKTtcbiAgY29uc3QgaW1wYWN0ID0gbW92ZVRvTmV4dENvbWJpbmUoe1xuICAgIGlzTW92aW5nRm9yd2FyZCxcbiAgICBkcmFnZ2FibGUsXG4gICAgZGVzdGluYXRpb24sXG4gICAgaW5zaWRlRGVzdGluYXRpb24sXG4gICAgcHJldmlvdXNJbXBhY3RcbiAgfSkgfHwgbW92ZVRvTmV4dEluZGV4KHtcbiAgICBpc01vdmluZ0ZvcndhcmQsXG4gICAgaXNJbkhvbWVMaXN0LFxuICAgIGRyYWdnYWJsZSxcbiAgICBkcmFnZ2FibGVzLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGluc2lkZURlc3RpbmF0aW9uLFxuICAgIHByZXZpb3VzSW1wYWN0LFxuICAgIHZpZXdwb3J0LFxuICAgIGFmdGVyQ3JpdGljYWxcbiAgfSk7XG4gIGlmICghaW1wYWN0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcGFnZUJvcmRlckJveENlbnRlciA9IGdldFBhZ2VCb3JkZXJCb3hDZW50ZXJGcm9tSW1wYWN0KHtcbiAgICBpbXBhY3QsXG4gICAgZHJhZ2dhYmxlLFxuICAgIGRyb3BwYWJsZTogZGVzdGluYXRpb24sXG4gICAgZHJhZ2dhYmxlcyxcbiAgICBhZnRlckNyaXRpY2FsXG4gIH0pO1xuICBjb25zdCBpc1Zpc2libGVJbk5ld0xvY2F0aW9uID0gaXNUb3RhbGx5VmlzaWJsZUluTmV3TG9jYXRpb24oe1xuICAgIGRyYWdnYWJsZSxcbiAgICBkZXN0aW5hdGlvbixcbiAgICBuZXdQYWdlQm9yZGVyQm94Q2VudGVyOiBwYWdlQm9yZGVyQm94Q2VudGVyLFxuICAgIHZpZXdwb3J0OiB2aWV3cG9ydC5mcmFtZSxcbiAgICB3aXRoRHJvcHBhYmxlRGlzcGxhY2VtZW50OiBmYWxzZSxcbiAgICBvbmx5T25NYWluQXhpczogdHJ1ZVxuICB9KTtcbiAgaWYgKGlzVmlzaWJsZUluTmV3TG9jYXRpb24pIHtcbiAgICBjb25zdCBjbGllbnRTZWxlY3Rpb24gPSBnZXRDbGllbnRGcm9tUGFnZUJvcmRlckJveENlbnRlcih7XG4gICAgICBwYWdlQm9yZGVyQm94Q2VudGVyLFxuICAgICAgZHJhZ2dhYmxlLFxuICAgICAgdmlld3BvcnRcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgY2xpZW50U2VsZWN0aW9uLFxuICAgICAgaW1wYWN0LFxuICAgICAgc2Nyb2xsSnVtcFJlcXVlc3Q6IG51bGxcbiAgICB9O1xuICB9XG4gIGNvbnN0IGRpc3RhbmNlID0gc3VidHJhY3QocGFnZUJvcmRlckJveENlbnRlciwgcHJldmlvdXNQYWdlQm9yZGVyQm94Q2VudGVyKTtcbiAgY29uc3QgY2F1dGlvdXMgPSBzcGVjdWxhdGl2ZWx5SW5jcmVhc2Uoe1xuICAgIGltcGFjdCxcbiAgICB2aWV3cG9ydCxcbiAgICBkZXN0aW5hdGlvbixcbiAgICBkcmFnZ2FibGVzLFxuICAgIG1heFNjcm9sbENoYW5nZTogZGlzdGFuY2VcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2xpZW50U2VsZWN0aW9uOiBwcmV2aW91c0NsaWVudFNlbGVjdGlvbixcbiAgICBpbXBhY3Q6IGNhdXRpb3VzLFxuICAgIHNjcm9sbEp1bXBSZXF1ZXN0OiBkaXN0YW5jZVxuICB9O1xufSk7XG5cbmNvbnN0IGdldEtub3duQWN0aXZlID0gZHJvcHBhYmxlID0+IHtcbiAgY29uc3QgcmVjdCA9IGRyb3BwYWJsZS5zdWJqZWN0LmFjdGl2ZTtcbiAgIXJlY3QgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgZ2V0IGNsaXBwZWQgYXJlYSBmcm9tIGRyb3BwYWJsZScpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgcmV0dXJuIHJlY3Q7XG59O1xudmFyIGdldEJlc3RDcm9zc0F4aXNEcm9wcGFibGUgPSAoX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgaXNNb3ZpbmdGb3J3YXJkLFxuICAgIHBhZ2VCb3JkZXJCb3hDZW50ZXIsXG4gICAgc291cmNlLFxuICAgIGRyb3BwYWJsZXMsXG4gICAgdmlld3BvcnRcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGFjdGl2ZSA9IHNvdXJjZS5zdWJqZWN0LmFjdGl2ZTtcbiAgaWYgKCFhY3RpdmUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBheGlzID0gc291cmNlLmF4aXM7XG4gIGNvbnN0IGlzQmV0d2VlblNvdXJjZUNsaXBwZWQgPSBpc1dpdGhpbihhY3RpdmVbYXhpcy5zdGFydF0sIGFjdGl2ZVtheGlzLmVuZF0pO1xuICBjb25zdCBjYW5kaWRhdGVzID0gdG9Ecm9wcGFibGVMaXN0KGRyb3BwYWJsZXMpXG4gIC5maWx0ZXIoZHJvcHBhYmxlID0+IGRyb3BwYWJsZSAhPT0gc291cmNlKVxuICAuZmlsdGVyKGRyb3BwYWJsZSA9PiBkcm9wcGFibGUuaXNFbmFibGVkKVxuICAuZmlsdGVyKGRyb3BwYWJsZSA9PiBCb29sZWFuKGRyb3BwYWJsZS5zdWJqZWN0LmFjdGl2ZSkpXG4gIC5maWx0ZXIoZHJvcHBhYmxlID0+IGlzUGFydGlhbGx5VmlzaWJsZVRocm91Z2hGcmFtZSh2aWV3cG9ydC5mcmFtZSkoZ2V0S25vd25BY3RpdmUoZHJvcHBhYmxlKSkpLmZpbHRlcihkcm9wcGFibGUgPT4ge1xuICAgIGNvbnN0IGFjdGl2ZU9mVGFyZ2V0ID0gZ2V0S25vd25BY3RpdmUoZHJvcHBhYmxlKTtcblxuICAgIGlmIChpc01vdmluZ0ZvcndhcmQpIHtcbiAgICAgIHJldHVybiBhY3RpdmVbYXhpcy5jcm9zc0F4aXNFbmRdIDwgYWN0aXZlT2ZUYXJnZXRbYXhpcy5jcm9zc0F4aXNFbmRdO1xuICAgIH1cbiAgICByZXR1cm4gYWN0aXZlT2ZUYXJnZXRbYXhpcy5jcm9zc0F4aXNTdGFydF0gPCBhY3RpdmVbYXhpcy5jcm9zc0F4aXNTdGFydF07XG4gIH0pXG4gIC5maWx0ZXIoZHJvcHBhYmxlID0+IHtcbiAgICBjb25zdCBhY3RpdmVPZlRhcmdldCA9IGdldEtub3duQWN0aXZlKGRyb3BwYWJsZSk7XG4gICAgY29uc3QgaXNCZXR3ZWVuRGVzdGluYXRpb25DbGlwcGVkID0gaXNXaXRoaW4oYWN0aXZlT2ZUYXJnZXRbYXhpcy5zdGFydF0sIGFjdGl2ZU9mVGFyZ2V0W2F4aXMuZW5kXSk7XG4gICAgcmV0dXJuIGlzQmV0d2VlblNvdXJjZUNsaXBwZWQoYWN0aXZlT2ZUYXJnZXRbYXhpcy5zdGFydF0pIHx8IGlzQmV0d2VlblNvdXJjZUNsaXBwZWQoYWN0aXZlT2ZUYXJnZXRbYXhpcy5lbmRdKSB8fCBpc0JldHdlZW5EZXN0aW5hdGlvbkNsaXBwZWQoYWN0aXZlW2F4aXMuc3RhcnRdKSB8fCBpc0JldHdlZW5EZXN0aW5hdGlvbkNsaXBwZWQoYWN0aXZlW2F4aXMuZW5kXSk7XG4gIH0pXG4gIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgZmlyc3QgPSBnZXRLbm93bkFjdGl2ZShhKVtheGlzLmNyb3NzQXhpc1N0YXJ0XTtcbiAgICBjb25zdCBzZWNvbmQgPSBnZXRLbm93bkFjdGl2ZShiKVtheGlzLmNyb3NzQXhpc1N0YXJ0XTtcbiAgICBpZiAoaXNNb3ZpbmdGb3J3YXJkKSB7XG4gICAgICByZXR1cm4gZmlyc3QgLSBzZWNvbmQ7XG4gICAgfVxuICAgIHJldHVybiBzZWNvbmQgLSBmaXJzdDtcbiAgfSlcbiAgLmZpbHRlcigoZHJvcHBhYmxlLCBpbmRleCwgYXJyYXkpID0+IGdldEtub3duQWN0aXZlKGRyb3BwYWJsZSlbYXhpcy5jcm9zc0F4aXNTdGFydF0gPT09IGdldEtub3duQWN0aXZlKGFycmF5WzBdKVtheGlzLmNyb3NzQXhpc1N0YXJ0XSk7XG5cbiAgaWYgKCFjYW5kaWRhdGVzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGNhbmRpZGF0ZXNbMF07XG4gIH1cblxuICBjb25zdCBjb250YWlucyA9IGNhbmRpZGF0ZXMuZmlsdGVyKGRyb3BwYWJsZSA9PiB7XG4gICAgY29uc3QgaXNXaXRoaW5Ecm9wcGFibGUgPSBpc1dpdGhpbihnZXRLbm93bkFjdGl2ZShkcm9wcGFibGUpW2F4aXMuc3RhcnRdLCBnZXRLbm93bkFjdGl2ZShkcm9wcGFibGUpW2F4aXMuZW5kXSk7XG4gICAgcmV0dXJuIGlzV2l0aGluRHJvcHBhYmxlKHBhZ2VCb3JkZXJCb3hDZW50ZXJbYXhpcy5saW5lXSk7XG4gIH0pO1xuICBpZiAoY29udGFpbnMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5zWzBdO1xuICB9XG5cbiAgaWYgKGNvbnRhaW5zLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gY29udGFpbnMuc29ydCgoYSwgYikgPT4gZ2V0S25vd25BY3RpdmUoYSlbYXhpcy5zdGFydF0gLSBnZXRLbm93bkFjdGl2ZShiKVtheGlzLnN0YXJ0XSlbMF07XG4gIH1cblxuICByZXR1cm4gY2FuZGlkYXRlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgZmlyc3QgPSBjbG9zZXN0JDEocGFnZUJvcmRlckJveENlbnRlciwgZ2V0Q29ybmVycyhnZXRLbm93bkFjdGl2ZShhKSkpO1xuICAgIGNvbnN0IHNlY29uZCA9IGNsb3Nlc3QkMShwYWdlQm9yZGVyQm94Q2VudGVyLCBnZXRDb3JuZXJzKGdldEtub3duQWN0aXZlKGIpKSk7XG5cbiAgICBpZiAoZmlyc3QgIT09IHNlY29uZCkge1xuICAgICAgcmV0dXJuIGZpcnN0IC0gc2Vjb25kO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRLbm93bkFjdGl2ZShhKVtheGlzLnN0YXJ0XSAtIGdldEtub3duQWN0aXZlKGIpW2F4aXMuc3RhcnRdO1xuICB9KVswXTtcbn0pO1xuXG5jb25zdCBnZXRDdXJyZW50UGFnZUJvcmRlckJveENlbnRlciA9IChkcmFnZ2FibGUsIGFmdGVyQ3JpdGljYWwpID0+IHtcbiAgY29uc3Qgb3JpZ2luYWwgPSBkcmFnZ2FibGUucGFnZS5ib3JkZXJCb3guY2VudGVyO1xuICByZXR1cm4gZGlkU3RhcnRBZnRlckNyaXRpY2FsKGRyYWdnYWJsZS5kZXNjcmlwdG9yLmlkLCBhZnRlckNyaXRpY2FsKSA/IHN1YnRyYWN0KG9yaWdpbmFsLCBhZnRlckNyaXRpY2FsLmRpc3BsYWNlZEJ5LnBvaW50KSA6IG9yaWdpbmFsO1xufTtcbmNvbnN0IGdldEN1cnJlbnRQYWdlQm9yZGVyQm94ID0gKGRyYWdnYWJsZSwgYWZ0ZXJDcml0aWNhbCkgPT4ge1xuICBjb25zdCBvcmlnaW5hbCA9IGRyYWdnYWJsZS5wYWdlLmJvcmRlckJveDtcbiAgcmV0dXJuIGRpZFN0YXJ0QWZ0ZXJDcml0aWNhbChkcmFnZ2FibGUuZGVzY3JpcHRvci5pZCwgYWZ0ZXJDcml0aWNhbCkgPyBvZmZzZXRCeVBvc2l0aW9uKG9yaWdpbmFsLCBuZWdhdGUoYWZ0ZXJDcml0aWNhbC5kaXNwbGFjZWRCeS5wb2ludCkpIDogb3JpZ2luYWw7XG59O1xuXG52YXIgZ2V0Q2xvc2VzdERyYWdnYWJsZSA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBwYWdlQm9yZGVyQm94Q2VudGVyLFxuICAgIHZpZXdwb3J0LFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGluc2lkZURlc3RpbmF0aW9uLFxuICAgIGFmdGVyQ3JpdGljYWxcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHNvcnRlZCA9IGluc2lkZURlc3RpbmF0aW9uLmZpbHRlcihkcmFnZ2FibGUgPT5cbiAgaXNUb3RhbGx5VmlzaWJsZSh7XG4gICAgdGFyZ2V0OiBnZXRDdXJyZW50UGFnZUJvcmRlckJveChkcmFnZ2FibGUsIGFmdGVyQ3JpdGljYWwpLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIHZpZXdwb3J0OiB2aWV3cG9ydC5mcmFtZSxcbiAgICB3aXRoRHJvcHBhYmxlRGlzcGxhY2VtZW50OiB0cnVlXG4gIH0pKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgZGlzdGFuY2VUb0EgPSBkaXN0YW5jZShwYWdlQm9yZGVyQm94Q2VudGVyLCB3aXRoRHJvcHBhYmxlRGlzcGxhY2VtZW50KGRlc3RpbmF0aW9uLCBnZXRDdXJyZW50UGFnZUJvcmRlckJveENlbnRlcihhLCBhZnRlckNyaXRpY2FsKSkpO1xuICAgIGNvbnN0IGRpc3RhbmNlVG9CID0gZGlzdGFuY2UocGFnZUJvcmRlckJveENlbnRlciwgd2l0aERyb3BwYWJsZURpc3BsYWNlbWVudChkZXN0aW5hdGlvbiwgZ2V0Q3VycmVudFBhZ2VCb3JkZXJCb3hDZW50ZXIoYiwgYWZ0ZXJDcml0aWNhbCkpKTtcblxuICAgIGlmIChkaXN0YW5jZVRvQSA8IGRpc3RhbmNlVG9CKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgaWYgKGRpc3RhbmNlVG9CIDwgZGlzdGFuY2VUb0EpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIHJldHVybiBhLmRlc2NyaXB0b3IuaW5kZXggLSBiLmRlc2NyaXB0b3IuaW5kZXg7XG4gIH0pO1xuICByZXR1cm4gc29ydGVkWzBdIHx8IG51bGw7XG59KTtcblxudmFyIGdldERpc3BsYWNlZEJ5ID0gbWVtb2l6ZU9uZV9fZGVmYXVsdFtcImRlZmF1bHRcIl0oZnVuY3Rpb24gZ2V0RGlzcGxhY2VkQnkoYXhpcywgZGlzcGxhY2VCeSkge1xuICBjb25zdCBkaXNwbGFjZW1lbnQgPSBkaXNwbGFjZUJ5W2F4aXMubGluZV07XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IGRpc3BsYWNlbWVudCxcbiAgICBwb2ludDogcGF0Y2goYXhpcy5saW5lLCBkaXNwbGFjZW1lbnQpXG4gIH07XG59KTtcblxuY29uc3QgZ2V0UmVxdWlyZWRHcm93dGhGb3JQbGFjZWhvbGRlciA9IChkcm9wcGFibGUsIHBsYWNlaG9sZGVyU2l6ZSwgZHJhZ2dhYmxlcykgPT4ge1xuICBjb25zdCBheGlzID0gZHJvcHBhYmxlLmF4aXM7XG5cbiAgaWYgKGRyb3BwYWJsZS5kZXNjcmlwdG9yLm1vZGUgPT09ICd2aXJ0dWFsJykge1xuICAgIHJldHVybiBwYXRjaChheGlzLmxpbmUsIHBsYWNlaG9sZGVyU2l6ZVtheGlzLmxpbmVdKTtcbiAgfVxuXG4gIGNvbnN0IGF2YWlsYWJsZVNwYWNlID0gZHJvcHBhYmxlLnN1YmplY3QucGFnZS5jb250ZW50Qm94W2F4aXMuc2l6ZV07XG4gIGNvbnN0IGluc2lkZURyb3BwYWJsZSA9IGdldERyYWdnYWJsZXNJbnNpZGVEcm9wcGFibGUoZHJvcHBhYmxlLmRlc2NyaXB0b3IuaWQsIGRyYWdnYWJsZXMpO1xuICBjb25zdCBzcGFjZVVzZWQgPSBpbnNpZGVEcm9wcGFibGUucmVkdWNlKChzdW0sIGRpbWVuc2lvbikgPT4gc3VtICsgZGltZW5zaW9uLmNsaWVudC5tYXJnaW5Cb3hbYXhpcy5zaXplXSwgMCk7XG4gIGNvbnN0IHJlcXVpcmVkU3BhY2UgPSBzcGFjZVVzZWQgKyBwbGFjZWhvbGRlclNpemVbYXhpcy5saW5lXTtcbiAgY29uc3QgbmVlZHNUb0dyb3dCeSA9IHJlcXVpcmVkU3BhY2UgLSBhdmFpbGFibGVTcGFjZTtcblxuICBpZiAobmVlZHNUb0dyb3dCeSA8PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIHBhdGNoKGF4aXMubGluZSwgbmVlZHNUb0dyb3dCeSk7XG59O1xuY29uc3Qgd2l0aE1heFNjcm9sbCA9IChmcmFtZSwgbWF4KSA9PiAoe1xuICAuLi5mcmFtZSxcbiAgc2Nyb2xsOiB7XG4gICAgLi4uZnJhbWUuc2Nyb2xsLFxuICAgIG1heFxuICB9XG59KTtcbmNvbnN0IGFkZFBsYWNlaG9sZGVyID0gKGRyb3BwYWJsZSwgZHJhZ2dhYmxlLCBkcmFnZ2FibGVzKSA9PiB7XG4gIGNvbnN0IGZyYW1lID0gZHJvcHBhYmxlLmZyYW1lO1xuICAhIWlzSG9tZU9mKGRyYWdnYWJsZSwgZHJvcHBhYmxlKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ1Nob3VsZCBub3QgYWRkIHBsYWNlaG9sZGVyIHNwYWNlIHRvIGhvbWUgbGlzdCcpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgISFkcm9wcGFibGUuc3ViamVjdC53aXRoUGxhY2Vob2xkZXIgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgYWRkIHBsYWNlaG9sZGVyIHNpemUgdG8gYSBzdWJqZWN0IHdoZW4gaXQgYWxyZWFkeSBoYXMgb25lJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBjb25zdCBwbGFjZWhvbGRlclNpemUgPSBnZXREaXNwbGFjZWRCeShkcm9wcGFibGUuYXhpcywgZHJhZ2dhYmxlLmRpc3BsYWNlQnkpLnBvaW50O1xuICBjb25zdCByZXF1aXJlZEdyb3d0aCA9IGdldFJlcXVpcmVkR3Jvd3RoRm9yUGxhY2Vob2xkZXIoZHJvcHBhYmxlLCBwbGFjZWhvbGRlclNpemUsIGRyYWdnYWJsZXMpO1xuICBjb25zdCBhZGRlZCA9IHtcbiAgICBwbGFjZWhvbGRlclNpemUsXG4gICAgaW5jcmVhc2VkQnk6IHJlcXVpcmVkR3Jvd3RoLFxuICAgIG9sZEZyYW1lTWF4U2Nyb2xsOiBkcm9wcGFibGUuZnJhbWUgPyBkcm9wcGFibGUuZnJhbWUuc2Nyb2xsLm1heCA6IG51bGxcbiAgfTtcbiAgaWYgKCFmcmFtZSkge1xuICAgIGNvbnN0IHN1YmplY3QgPSBnZXRTdWJqZWN0KHtcbiAgICAgIHBhZ2U6IGRyb3BwYWJsZS5zdWJqZWN0LnBhZ2UsXG4gICAgICB3aXRoUGxhY2Vob2xkZXI6IGFkZGVkLFxuICAgICAgYXhpczogZHJvcHBhYmxlLmF4aXMsXG4gICAgICBmcmFtZTogZHJvcHBhYmxlLmZyYW1lXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRyb3BwYWJsZSxcbiAgICAgIHN1YmplY3RcbiAgICB9O1xuICB9XG4gIGNvbnN0IG1heFNjcm9sbCA9IHJlcXVpcmVkR3Jvd3RoID8gYWRkKGZyYW1lLnNjcm9sbC5tYXgsIHJlcXVpcmVkR3Jvd3RoKSA6IGZyYW1lLnNjcm9sbC5tYXg7XG4gIGNvbnN0IG5ld0ZyYW1lID0gd2l0aE1heFNjcm9sbChmcmFtZSwgbWF4U2Nyb2xsKTtcbiAgY29uc3Qgc3ViamVjdCA9IGdldFN1YmplY3Qoe1xuICAgIHBhZ2U6IGRyb3BwYWJsZS5zdWJqZWN0LnBhZ2UsXG4gICAgd2l0aFBsYWNlaG9sZGVyOiBhZGRlZCxcbiAgICBheGlzOiBkcm9wcGFibGUuYXhpcyxcbiAgICBmcmFtZTogbmV3RnJhbWVcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgLi4uZHJvcHBhYmxlLFxuICAgIHN1YmplY3QsXG4gICAgZnJhbWU6IG5ld0ZyYW1lXG4gIH07XG59O1xuY29uc3QgcmVtb3ZlUGxhY2Vob2xkZXIgPSBkcm9wcGFibGUgPT4ge1xuICBjb25zdCBhZGRlZCA9IGRyb3BwYWJsZS5zdWJqZWN0LndpdGhQbGFjZWhvbGRlcjtcbiAgIWFkZGVkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IHJlbW92ZSBwbGFjZWhvbGRlciBmb3JtIHN1YmplY3Qgd2hlbiB0aGVyZSB3YXMgbm9uZScpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgY29uc3QgZnJhbWUgPSBkcm9wcGFibGUuZnJhbWU7XG4gIGlmICghZnJhbWUpIHtcbiAgICBjb25zdCBzdWJqZWN0ID0gZ2V0U3ViamVjdCh7XG4gICAgICBwYWdlOiBkcm9wcGFibGUuc3ViamVjdC5wYWdlLFxuICAgICAgYXhpczogZHJvcHBhYmxlLmF4aXMsXG4gICAgICBmcmFtZTogbnVsbCxcbiAgICAgIHdpdGhQbGFjZWhvbGRlcjogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5kcm9wcGFibGUsXG4gICAgICBzdWJqZWN0XG4gICAgfTtcbiAgfVxuICBjb25zdCBvbGRNYXhTY3JvbGwgPSBhZGRlZC5vbGRGcmFtZU1heFNjcm9sbDtcbiAgIW9sZE1heFNjcm9sbCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkIGRyb3BwYWJsZSB3aXRoIGZyYW1lIHRvIGhhdmUgb2xkIG1heCBmcmFtZSBzY3JvbGwgd2hlbiByZW1vdmluZyBwbGFjZWhvbGRlcicpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgY29uc3QgbmV3RnJhbWUgPSB3aXRoTWF4U2Nyb2xsKGZyYW1lLCBvbGRNYXhTY3JvbGwpO1xuICBjb25zdCBzdWJqZWN0ID0gZ2V0U3ViamVjdCh7XG4gICAgcGFnZTogZHJvcHBhYmxlLnN1YmplY3QucGFnZSxcbiAgICBheGlzOiBkcm9wcGFibGUuYXhpcyxcbiAgICBmcmFtZTogbmV3RnJhbWUsXG4gICAgd2l0aFBsYWNlaG9sZGVyOiBudWxsXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIC4uLmRyb3BwYWJsZSxcbiAgICBzdWJqZWN0LFxuICAgIGZyYW1lOiBuZXdGcmFtZVxuICB9O1xufTtcblxudmFyIG1vdmVUb05ld0Ryb3BwYWJsZSA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBwcmV2aW91c1BhZ2VCb3JkZXJCb3hDZW50ZXIsXG4gICAgbW92ZVJlbGF0aXZlVG8sXG4gICAgaW5zaWRlRGVzdGluYXRpb24sXG4gICAgZHJhZ2dhYmxlLFxuICAgIGRyYWdnYWJsZXMsXG4gICAgZGVzdGluYXRpb24sXG4gICAgdmlld3BvcnQsXG4gICAgYWZ0ZXJDcml0aWNhbFxuICB9ID0gX3JlZjtcbiAgaWYgKCFtb3ZlUmVsYXRpdmVUbykge1xuICAgIGlmIChpbnNpZGVEZXN0aW5hdGlvbi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3Bvc2VkID0ge1xuICAgICAgZGlzcGxhY2VkOiBlbXB0eUdyb3VwcyxcbiAgICAgIGRpc3BsYWNlZEJ5OiBub0Rpc3BsYWNlZEJ5LFxuICAgICAgYXQ6IHtcbiAgICAgICAgdHlwZTogJ1JFT1JERVInLFxuICAgICAgICBkZXN0aW5hdGlvbjoge1xuICAgICAgICAgIGRyb3BwYWJsZUlkOiBkZXN0aW5hdGlvbi5kZXNjcmlwdG9yLmlkLFxuICAgICAgICAgIGluZGV4OiAwXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHByb3Bvc2VkUGFnZUJvcmRlckJveENlbnRlciA9IGdldFBhZ2VCb3JkZXJCb3hDZW50ZXJGcm9tSW1wYWN0KHtcbiAgICAgIGltcGFjdDogcHJvcG9zZWQsXG4gICAgICBkcmFnZ2FibGUsXG4gICAgICBkcm9wcGFibGU6IGRlc3RpbmF0aW9uLFxuICAgICAgZHJhZ2dhYmxlcyxcbiAgICAgIGFmdGVyQ3JpdGljYWxcbiAgICB9KTtcblxuICAgIGNvbnN0IHdpdGhQbGFjZWhvbGRlciA9IGlzSG9tZU9mKGRyYWdnYWJsZSwgZGVzdGluYXRpb24pID8gZGVzdGluYXRpb24gOiBhZGRQbGFjZWhvbGRlcihkZXN0aW5hdGlvbiwgZHJhZ2dhYmxlLCBkcmFnZ2FibGVzKTtcbiAgICBjb25zdCBpc1Zpc2libGVJbk5ld0xvY2F0aW9uID0gaXNUb3RhbGx5VmlzaWJsZUluTmV3TG9jYXRpb24oe1xuICAgICAgZHJhZ2dhYmxlLFxuICAgICAgZGVzdGluYXRpb246IHdpdGhQbGFjZWhvbGRlcixcbiAgICAgIG5ld1BhZ2VCb3JkZXJCb3hDZW50ZXI6IHByb3Bvc2VkUGFnZUJvcmRlckJveENlbnRlcixcbiAgICAgIHZpZXdwb3J0OiB2aWV3cG9ydC5mcmFtZSxcbiAgICAgIHdpdGhEcm9wcGFibGVEaXNwbGFjZW1lbnQ6IGZhbHNlLFxuICAgICAgb25seU9uTWFpbkF4aXM6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gaXNWaXNpYmxlSW5OZXdMb2NhdGlvbiA/IHByb3Bvc2VkIDogbnVsbDtcbiAgfVxuICBjb25zdCBpc0dvaW5nQmVmb3JlVGFyZ2V0ID0gQm9vbGVhbihcbiAgcHJldmlvdXNQYWdlQm9yZGVyQm94Q2VudGVyW2Rlc3RpbmF0aW9uLmF4aXMubGluZV0gPD0gbW92ZVJlbGF0aXZlVG8ucGFnZS5ib3JkZXJCb3guY2VudGVyW2Rlc3RpbmF0aW9uLmF4aXMubGluZV0pO1xuICBjb25zdCBwcm9wb3NlZEluZGV4ID0gKCgpID0+IHtcbiAgICBjb25zdCByZWxhdGl2ZVRvID0gbW92ZVJlbGF0aXZlVG8uZGVzY3JpcHRvci5pbmRleDtcbiAgICBpZiAobW92ZVJlbGF0aXZlVG8uZGVzY3JpcHRvci5pZCA9PT0gZHJhZ2dhYmxlLmRlc2NyaXB0b3IuaWQpIHtcbiAgICAgIHJldHVybiByZWxhdGl2ZVRvO1xuICAgIH1cbiAgICBpZiAoaXNHb2luZ0JlZm9yZVRhcmdldCkge1xuICAgICAgcmV0dXJuIHJlbGF0aXZlVG87XG4gICAgfVxuICAgIHJldHVybiByZWxhdGl2ZVRvICsgMTtcbiAgfSkoKTtcbiAgY29uc3QgZGlzcGxhY2VkQnkgPSBnZXREaXNwbGFjZWRCeShkZXN0aW5hdGlvbi5heGlzLCBkcmFnZ2FibGUuZGlzcGxhY2VCeSk7XG4gIHJldHVybiBjYWxjdWxhdGVSZW9yZGVySW1wYWN0KHtcbiAgICBkcmFnZ2FibGUsXG4gICAgaW5zaWRlRGVzdGluYXRpb24sXG4gICAgZGVzdGluYXRpb24sXG4gICAgdmlld3BvcnQsXG4gICAgZGlzcGxhY2VkQnksXG4gICAgbGFzdDogZW1wdHlHcm91cHMsXG4gICAgaW5kZXg6IHByb3Bvc2VkSW5kZXhcbiAgfSk7XG59KTtcblxudmFyIG1vdmVDcm9zc0F4aXMgPSAoX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgaXNNb3ZpbmdGb3J3YXJkLFxuICAgIHByZXZpb3VzUGFnZUJvcmRlckJveENlbnRlcixcbiAgICBkcmFnZ2FibGUsXG4gICAgaXNPdmVyLFxuICAgIGRyYWdnYWJsZXMsXG4gICAgZHJvcHBhYmxlcyxcbiAgICB2aWV3cG9ydCxcbiAgICBhZnRlckNyaXRpY2FsXG4gIH0gPSBfcmVmO1xuXG4gIGNvbnN0IGRlc3RpbmF0aW9uID0gZ2V0QmVzdENyb3NzQXhpc0Ryb3BwYWJsZSh7XG4gICAgaXNNb3ZpbmdGb3J3YXJkLFxuICAgIHBhZ2VCb3JkZXJCb3hDZW50ZXI6IHByZXZpb3VzUGFnZUJvcmRlckJveENlbnRlcixcbiAgICBzb3VyY2U6IGlzT3ZlcixcbiAgICBkcm9wcGFibGVzLFxuICAgIHZpZXdwb3J0XG4gIH0pO1xuXG4gIGlmICghZGVzdGluYXRpb24pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBpbnNpZGVEZXN0aW5hdGlvbiA9IGdldERyYWdnYWJsZXNJbnNpZGVEcm9wcGFibGUoZGVzdGluYXRpb24uZGVzY3JpcHRvci5pZCwgZHJhZ2dhYmxlcyk7XG4gIGNvbnN0IG1vdmVSZWxhdGl2ZVRvID0gZ2V0Q2xvc2VzdERyYWdnYWJsZSh7XG4gICAgcGFnZUJvcmRlckJveENlbnRlcjogcHJldmlvdXNQYWdlQm9yZGVyQm94Q2VudGVyLFxuICAgIHZpZXdwb3J0LFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGluc2lkZURlc3RpbmF0aW9uLFxuICAgIGFmdGVyQ3JpdGljYWxcbiAgfSk7XG4gIGNvbnN0IGltcGFjdCA9IG1vdmVUb05ld0Ryb3BwYWJsZSh7XG4gICAgcHJldmlvdXNQYWdlQm9yZGVyQm94Q2VudGVyLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGRyYWdnYWJsZSxcbiAgICBkcmFnZ2FibGVzLFxuICAgIG1vdmVSZWxhdGl2ZVRvLFxuICAgIGluc2lkZURlc3RpbmF0aW9uLFxuICAgIHZpZXdwb3J0LFxuICAgIGFmdGVyQ3JpdGljYWxcbiAgfSk7XG4gIGlmICghaW1wYWN0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcGFnZUJvcmRlckJveENlbnRlciA9IGdldFBhZ2VCb3JkZXJCb3hDZW50ZXJGcm9tSW1wYWN0KHtcbiAgICBpbXBhY3QsXG4gICAgZHJhZ2dhYmxlLFxuICAgIGRyb3BwYWJsZTogZGVzdGluYXRpb24sXG4gICAgZHJhZ2dhYmxlcyxcbiAgICBhZnRlckNyaXRpY2FsXG4gIH0pO1xuICBjb25zdCBjbGllbnRTZWxlY3Rpb24gPSBnZXRDbGllbnRGcm9tUGFnZUJvcmRlckJveENlbnRlcih7XG4gICAgcGFnZUJvcmRlckJveENlbnRlcixcbiAgICBkcmFnZ2FibGUsXG4gICAgdmlld3BvcnRcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgY2xpZW50U2VsZWN0aW9uLFxuICAgIGltcGFjdCxcbiAgICBzY3JvbGxKdW1wUmVxdWVzdDogbnVsbFxuICB9O1xufSk7XG5cbnZhciB3aGF0SXNEcmFnZ2VkT3ZlciA9IChpbXBhY3QgPT4ge1xuICBjb25zdCBhdCA9IGltcGFjdC5hdDtcbiAgaWYgKCFhdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChhdC50eXBlID09PSAnUkVPUkRFUicpIHtcbiAgICByZXR1cm4gYXQuZGVzdGluYXRpb24uZHJvcHBhYmxlSWQ7XG4gIH1cbiAgcmV0dXJuIGF0LmNvbWJpbmUuZHJvcHBhYmxlSWQ7XG59KTtcblxuY29uc3QgZ2V0RHJvcHBhYmxlT3ZlciQxID0gKGltcGFjdCwgZHJvcHBhYmxlcykgPT4ge1xuICBjb25zdCBpZCA9IHdoYXRJc0RyYWdnZWRPdmVyKGltcGFjdCk7XG4gIHJldHVybiBpZCA/IGRyb3BwYWJsZXNbaWRdIDogbnVsbDtcbn07XG52YXIgbW92ZUluRGlyZWN0aW9uID0gKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIHN0YXRlLFxuICAgIHR5cGVcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzQWN0dWFsbHlPdmVyID0gZ2V0RHJvcHBhYmxlT3ZlciQxKHN0YXRlLmltcGFjdCwgc3RhdGUuZGltZW5zaW9ucy5kcm9wcGFibGVzKTtcbiAgY29uc3QgaXNNYWluQXhpc01vdmVtZW50QWxsb3dlZCA9IEJvb2xlYW4oaXNBY3R1YWxseU92ZXIpO1xuICBjb25zdCBob21lID0gc3RhdGUuZGltZW5zaW9ucy5kcm9wcGFibGVzW3N0YXRlLmNyaXRpY2FsLmRyb3BwYWJsZS5pZF07XG4gIGNvbnN0IGlzT3ZlciA9IGlzQWN0dWFsbHlPdmVyIHx8IGhvbWU7XG4gIGNvbnN0IGRpcmVjdGlvbiA9IGlzT3Zlci5heGlzLmRpcmVjdGlvbjtcbiAgY29uc3QgaXNNb3ZpbmdPbk1haW5BeGlzID0gZGlyZWN0aW9uID09PSAndmVydGljYWwnICYmICh0eXBlID09PSAnTU9WRV9VUCcgfHwgdHlwZSA9PT0gJ01PVkVfRE9XTicpIHx8IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnICYmICh0eXBlID09PSAnTU9WRV9MRUZUJyB8fCB0eXBlID09PSAnTU9WRV9SSUdIVCcpO1xuXG4gIGlmIChpc01vdmluZ09uTWFpbkF4aXMgJiYgIWlzTWFpbkF4aXNNb3ZlbWVudEFsbG93ZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBpc01vdmluZ0ZvcndhcmQgPSB0eXBlID09PSAnTU9WRV9ET1dOJyB8fCB0eXBlID09PSAnTU9WRV9SSUdIVCc7XG4gIGNvbnN0IGRyYWdnYWJsZSA9IHN0YXRlLmRpbWVuc2lvbnMuZHJhZ2dhYmxlc1tzdGF0ZS5jcml0aWNhbC5kcmFnZ2FibGUuaWRdO1xuICBjb25zdCBwcmV2aW91c1BhZ2VCb3JkZXJCb3hDZW50ZXIgPSBzdGF0ZS5jdXJyZW50LnBhZ2UuYm9yZGVyQm94Q2VudGVyO1xuICBjb25zdCB7XG4gICAgZHJhZ2dhYmxlcyxcbiAgICBkcm9wcGFibGVzXG4gIH0gPSBzdGF0ZS5kaW1lbnNpb25zO1xuICByZXR1cm4gaXNNb3ZpbmdPbk1haW5BeGlzID8gbW92ZVRvTmV4dFBsYWNlKHtcbiAgICBpc01vdmluZ0ZvcndhcmQsXG4gICAgcHJldmlvdXNQYWdlQm9yZGVyQm94Q2VudGVyLFxuICAgIGRyYWdnYWJsZSxcbiAgICBkZXN0aW5hdGlvbjogaXNPdmVyLFxuICAgIGRyYWdnYWJsZXMsXG4gICAgdmlld3BvcnQ6IHN0YXRlLnZpZXdwb3J0LFxuICAgIHByZXZpb3VzQ2xpZW50U2VsZWN0aW9uOiBzdGF0ZS5jdXJyZW50LmNsaWVudC5zZWxlY3Rpb24sXG4gICAgcHJldmlvdXNJbXBhY3Q6IHN0YXRlLmltcGFjdCxcbiAgICBhZnRlckNyaXRpY2FsOiBzdGF0ZS5hZnRlckNyaXRpY2FsXG4gIH0pIDogbW92ZUNyb3NzQXhpcyh7XG4gICAgaXNNb3ZpbmdGb3J3YXJkLFxuICAgIHByZXZpb3VzUGFnZUJvcmRlckJveENlbnRlcixcbiAgICBkcmFnZ2FibGUsXG4gICAgaXNPdmVyLFxuICAgIGRyYWdnYWJsZXMsXG4gICAgZHJvcHBhYmxlcyxcbiAgICB2aWV3cG9ydDogc3RhdGUudmlld3BvcnQsXG4gICAgYWZ0ZXJDcml0aWNhbDogc3RhdGUuYWZ0ZXJDcml0aWNhbFxuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBpc01vdmVtZW50QWxsb3dlZChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUucGhhc2UgPT09ICdEUkFHR0lORycgfHwgc3RhdGUucGhhc2UgPT09ICdDT0xMRUNUSU5HJztcbn1cblxuZnVuY3Rpb24gaXNQb3NpdGlvbkluRnJhbWUoZnJhbWUpIHtcbiAgY29uc3QgaXNXaXRoaW5WZXJ0aWNhbCA9IGlzV2l0aGluKGZyYW1lLnRvcCwgZnJhbWUuYm90dG9tKTtcbiAgY29uc3QgaXNXaXRoaW5Ib3Jpem9udGFsID0gaXNXaXRoaW4oZnJhbWUubGVmdCwgZnJhbWUucmlnaHQpO1xuICByZXR1cm4gZnVuY3Rpb24gcnVuKHBvaW50KSB7XG4gICAgcmV0dXJuIGlzV2l0aGluVmVydGljYWwocG9pbnQueSkgJiYgaXNXaXRoaW5Ib3Jpem9udGFsKHBvaW50LngpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRIYXNPdmVybGFwKGZpcnN0LCBzZWNvbmQpIHtcbiAgcmV0dXJuIGZpcnN0LmxlZnQgPCBzZWNvbmQucmlnaHQgJiYgZmlyc3QucmlnaHQgPiBzZWNvbmQubGVmdCAmJiBmaXJzdC50b3AgPCBzZWNvbmQuYm90dG9tICYmIGZpcnN0LmJvdHRvbSA+IHNlY29uZC50b3A7XG59XG5mdW5jdGlvbiBnZXRGdXJ0aGVzdEF3YXkoX3JlZikge1xuICBsZXQge1xuICAgIHBhZ2VCb3JkZXJCb3gsXG4gICAgZHJhZ2dhYmxlLFxuICAgIGNhbmRpZGF0ZXNcbiAgfSA9IF9yZWY7XG5cbiAgY29uc3Qgc3RhcnRDZW50ZXIgPSBkcmFnZ2FibGUucGFnZS5ib3JkZXJCb3guY2VudGVyO1xuICBjb25zdCBzb3J0ZWQgPSBjYW5kaWRhdGVzLm1hcChjYW5kaWRhdGUgPT4ge1xuICAgIGNvbnN0IGF4aXMgPSBjYW5kaWRhdGUuYXhpcztcbiAgICBjb25zdCB0YXJnZXQgPSBwYXRjaChjYW5kaWRhdGUuYXhpcy5saW5lLFxuICAgIHBhZ2VCb3JkZXJCb3guY2VudGVyW2F4aXMubGluZV0sXG4gICAgY2FuZGlkYXRlLnBhZ2UuYm9yZGVyQm94LmNlbnRlcltheGlzLmNyb3NzQXhpc0xpbmVdKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGNhbmRpZGF0ZS5kZXNjcmlwdG9yLmlkLFxuICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlKHN0YXJ0Q2VudGVyLCB0YXJnZXQpXG4gICAgfTtcbiAgfSlcbiAgLnNvcnQoKGEsIGIpID0+IGIuZGlzdGFuY2UgLSBhLmRpc3RhbmNlKTtcblxuICByZXR1cm4gc29ydGVkWzBdID8gc29ydGVkWzBdLmlkIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGdldERyb3BwYWJsZU92ZXIoX3JlZjIpIHtcbiAgbGV0IHtcbiAgICBwYWdlQm9yZGVyQm94LFxuICAgIGRyYWdnYWJsZSxcbiAgICBkcm9wcGFibGVzXG4gIH0gPSBfcmVmMjtcbiAgY29uc3QgY2FuZGlkYXRlcyA9IHRvRHJvcHBhYmxlTGlzdChkcm9wcGFibGVzKS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgaWYgKCFpdGVtLmlzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZSA9IGl0ZW0uc3ViamVjdC5hY3RpdmU7XG4gICAgaWYgKCFhY3RpdmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWdldEhhc092ZXJsYXAocGFnZUJvcmRlckJveCwgYWN0aXZlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc1Bvc2l0aW9uSW5GcmFtZShhY3RpdmUpKHBhZ2VCb3JkZXJCb3guY2VudGVyKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgYXhpcyA9IGl0ZW0uYXhpcztcbiAgICBjb25zdCBjaGlsZENlbnRlciA9IGFjdGl2ZS5jZW50ZXJbYXhpcy5jcm9zc0F4aXNMaW5lXTtcbiAgICBjb25zdCBjcm9zc0F4aXNTdGFydCA9IHBhZ2VCb3JkZXJCb3hbYXhpcy5jcm9zc0F4aXNTdGFydF07XG4gICAgY29uc3QgY3Jvc3NBeGlzRW5kID0gcGFnZUJvcmRlckJveFtheGlzLmNyb3NzQXhpc0VuZF07XG4gICAgY29uc3QgaXNDb250YWluZWQgPSBpc1dpdGhpbihhY3RpdmVbYXhpcy5jcm9zc0F4aXNTdGFydF0sIGFjdGl2ZVtheGlzLmNyb3NzQXhpc0VuZF0pO1xuICAgIGNvbnN0IGlzU3RhcnRDb250YWluZWQgPSBpc0NvbnRhaW5lZChjcm9zc0F4aXNTdGFydCk7XG4gICAgY29uc3QgaXNFbmRDb250YWluZWQgPSBpc0NvbnRhaW5lZChjcm9zc0F4aXNFbmQpO1xuXG4gICAgaWYgKCFpc1N0YXJ0Q29udGFpbmVkICYmICFpc0VuZENvbnRhaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGlzU3RhcnRDb250YWluZWQpIHtcbiAgICAgIHJldHVybiBjcm9zc0F4aXNTdGFydCA8IGNoaWxkQ2VudGVyO1xuICAgIH1cbiAgICByZXR1cm4gY3Jvc3NBeGlzRW5kID4gY2hpbGRDZW50ZXI7XG4gIH0pO1xuICBpZiAoIWNhbmRpZGF0ZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gY2FuZGlkYXRlc1swXS5kZXNjcmlwdG9yLmlkO1xuICB9XG5cbiAgcmV0dXJuIGdldEZ1cnRoZXN0QXdheSh7XG4gICAgcGFnZUJvcmRlckJveCxcbiAgICBkcmFnZ2FibGUsXG4gICAgY2FuZGlkYXRlc1xuICB9KTtcbn1cblxuY29uc3Qgb2Zmc2V0UmVjdEJ5UG9zaXRpb24gPSAocmVjdCwgcG9pbnQpID0+IGNzc0JveE1vZGVsLmdldFJlY3Qob2Zmc2V0QnlQb3NpdGlvbihyZWN0LCBwb2ludCkpO1xuXG52YXIgd2l0aERyb3BwYWJsZVNjcm9sbCA9ICgoZHJvcHBhYmxlLCBhcmVhKSA9PiB7XG4gIGNvbnN0IGZyYW1lID0gZHJvcHBhYmxlLmZyYW1lO1xuICBpZiAoIWZyYW1lKSB7XG4gICAgcmV0dXJuIGFyZWE7XG4gIH1cbiAgcmV0dXJuIG9mZnNldFJlY3RCeVBvc2l0aW9uKGFyZWEsIGZyYW1lLnNjcm9sbC5kaWZmLnZhbHVlKTtcbn0pO1xuXG5mdW5jdGlvbiBnZXRJc0Rpc3BsYWNlZChfcmVmKSB7XG4gIGxldCB7XG4gICAgZGlzcGxhY2VkLFxuICAgIGlkXG4gIH0gPSBfcmVmO1xuICByZXR1cm4gQm9vbGVhbihkaXNwbGFjZWQudmlzaWJsZVtpZF0gfHwgZGlzcGxhY2VkLmludmlzaWJsZVtpZF0pO1xufVxuXG5mdW5jdGlvbiBhdEluZGV4KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBkcmFnZ2FibGUsXG4gICAgY2xvc2VzdCxcbiAgICBpbkhvbWVMaXN0XG4gIH0gPSBfcmVmO1xuICBpZiAoIWNsb3Nlc3QpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoIWluSG9tZUxpc3QpIHtcbiAgICByZXR1cm4gY2xvc2VzdC5kZXNjcmlwdG9yLmluZGV4O1xuICB9XG4gIGlmIChjbG9zZXN0LmRlc2NyaXB0b3IuaW5kZXggPiBkcmFnZ2FibGUuZGVzY3JpcHRvci5pbmRleCkge1xuICAgIHJldHVybiBjbG9zZXN0LmRlc2NyaXB0b3IuaW5kZXggLSAxO1xuICB9XG4gIHJldHVybiBjbG9zZXN0LmRlc2NyaXB0b3IuaW5kZXg7XG59XG52YXIgZ2V0UmVvcmRlckltcGFjdCA9IChfcmVmMiA9PiB7XG4gIGxldCB7XG4gICAgcGFnZUJvcmRlckJveFdpdGhEcm9wcGFibGVTY3JvbGw6IHRhcmdldFJlY3QsXG4gICAgZHJhZ2dhYmxlLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGluc2lkZURlc3RpbmF0aW9uLFxuICAgIGxhc3QsXG4gICAgdmlld3BvcnQsXG4gICAgYWZ0ZXJDcml0aWNhbFxuICB9ID0gX3JlZjI7XG4gIGNvbnN0IGF4aXMgPSBkZXN0aW5hdGlvbi5heGlzO1xuICBjb25zdCBkaXNwbGFjZWRCeSA9IGdldERpc3BsYWNlZEJ5KGRlc3RpbmF0aW9uLmF4aXMsIGRyYWdnYWJsZS5kaXNwbGFjZUJ5KTtcbiAgY29uc3QgZGlzcGxhY2VtZW50ID0gZGlzcGxhY2VkQnkudmFsdWU7XG4gIGNvbnN0IHRhcmdldFN0YXJ0ID0gdGFyZ2V0UmVjdFtheGlzLnN0YXJ0XTtcbiAgY29uc3QgdGFyZ2V0RW5kID0gdGFyZ2V0UmVjdFtheGlzLmVuZF07XG4gIGNvbnN0IHdpdGhvdXREcmFnZ2luZyA9IHJlbW92ZURyYWdnYWJsZUZyb21MaXN0KGRyYWdnYWJsZSwgaW5zaWRlRGVzdGluYXRpb24pO1xuICBjb25zdCBjbG9zZXN0ID0gd2l0aG91dERyYWdnaW5nLmZpbmQoY2hpbGQgPT4ge1xuICAgIGNvbnN0IGlkID0gY2hpbGQuZGVzY3JpcHRvci5pZDtcbiAgICBjb25zdCBjaGlsZENlbnRlciA9IGNoaWxkLnBhZ2UuYm9yZGVyQm94LmNlbnRlcltheGlzLmxpbmVdO1xuICAgIGNvbnN0IGRpZFN0YXJ0QWZ0ZXJDcml0aWNhbCQxID0gZGlkU3RhcnRBZnRlckNyaXRpY2FsKGlkLCBhZnRlckNyaXRpY2FsKTtcbiAgICBjb25zdCBpc0Rpc3BsYWNlZCA9IGdldElzRGlzcGxhY2VkKHtcbiAgICAgIGRpc3BsYWNlZDogbGFzdCxcbiAgICAgIGlkXG4gICAgfSk7XG5cbiAgICBpZiAoZGlkU3RhcnRBZnRlckNyaXRpY2FsJDEpIHtcbiAgICAgIGlmIChpc0Rpc3BsYWNlZCkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0RW5kIDw9IGNoaWxkQ2VudGVyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFyZ2V0U3RhcnQgPCBjaGlsZENlbnRlciAtIGRpc3BsYWNlbWVudDtcbiAgICB9XG5cbiAgICBpZiAoaXNEaXNwbGFjZWQpIHtcbiAgICAgIHJldHVybiB0YXJnZXRFbmQgPD0gY2hpbGRDZW50ZXIgKyBkaXNwbGFjZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldFN0YXJ0IDwgY2hpbGRDZW50ZXI7XG4gIH0pIHx8IG51bGw7XG4gIGNvbnN0IG5ld0luZGV4ID0gYXRJbmRleCh7XG4gICAgZHJhZ2dhYmxlLFxuICAgIGNsb3Nlc3QsXG4gICAgaW5Ib21lTGlzdDogaXNIb21lT2YoZHJhZ2dhYmxlLCBkZXN0aW5hdGlvbilcbiAgfSk7XG5cbiAgcmV0dXJuIGNhbGN1bGF0ZVJlb3JkZXJJbXBhY3Qoe1xuICAgIGRyYWdnYWJsZSxcbiAgICBpbnNpZGVEZXN0aW5hdGlvbixcbiAgICBkZXN0aW5hdGlvbixcbiAgICB2aWV3cG9ydCxcbiAgICBsYXN0LFxuICAgIGRpc3BsYWNlZEJ5LFxuICAgIGluZGV4OiBuZXdJbmRleFxuICB9KTtcbn0pO1xuXG5jb25zdCBjb21iaW5lVGhyZXNob2xkRGl2aXNvciA9IDQ7XG52YXIgZ2V0Q29tYmluZUltcGFjdCA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBkcmFnZ2FibGUsXG4gICAgcGFnZUJvcmRlckJveFdpdGhEcm9wcGFibGVTY3JvbGw6IHRhcmdldFJlY3QsXG4gICAgcHJldmlvdXNJbXBhY3QsXG4gICAgZGVzdGluYXRpb24sXG4gICAgaW5zaWRlRGVzdGluYXRpb24sXG4gICAgYWZ0ZXJDcml0aWNhbFxuICB9ID0gX3JlZjtcbiAgaWYgKCFkZXN0aW5hdGlvbi5pc0NvbWJpbmVFbmFibGVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgYXhpcyA9IGRlc3RpbmF0aW9uLmF4aXM7XG4gIGNvbnN0IGRpc3BsYWNlZEJ5ID0gZ2V0RGlzcGxhY2VkQnkoZGVzdGluYXRpb24uYXhpcywgZHJhZ2dhYmxlLmRpc3BsYWNlQnkpO1xuICBjb25zdCBkaXNwbGFjZW1lbnQgPSBkaXNwbGFjZWRCeS52YWx1ZTtcbiAgY29uc3QgdGFyZ2V0U3RhcnQgPSB0YXJnZXRSZWN0W2F4aXMuc3RhcnRdO1xuICBjb25zdCB0YXJnZXRFbmQgPSB0YXJnZXRSZWN0W2F4aXMuZW5kXTtcbiAgY29uc3Qgd2l0aG91dERyYWdnaW5nID0gcmVtb3ZlRHJhZ2dhYmxlRnJvbUxpc3QoZHJhZ2dhYmxlLCBpbnNpZGVEZXN0aW5hdGlvbik7XG4gIGNvbnN0IGNvbWJpbmVXaXRoID0gd2l0aG91dERyYWdnaW5nLmZpbmQoY2hpbGQgPT4ge1xuICAgIGNvbnN0IGlkID0gY2hpbGQuZGVzY3JpcHRvci5pZDtcbiAgICBjb25zdCBjaGlsZFJlY3QgPSBjaGlsZC5wYWdlLmJvcmRlckJveDtcbiAgICBjb25zdCBjaGlsZFNpemUgPSBjaGlsZFJlY3RbYXhpcy5zaXplXTtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBjaGlsZFNpemUgLyBjb21iaW5lVGhyZXNob2xkRGl2aXNvcjtcbiAgICBjb25zdCBkaWRTdGFydEFmdGVyQ3JpdGljYWwkMSA9IGRpZFN0YXJ0QWZ0ZXJDcml0aWNhbChpZCwgYWZ0ZXJDcml0aWNhbCk7XG4gICAgY29uc3QgaXNEaXNwbGFjZWQgPSBnZXRJc0Rpc3BsYWNlZCh7XG4gICAgICBkaXNwbGFjZWQ6IHByZXZpb3VzSW1wYWN0LmRpc3BsYWNlZCxcbiAgICAgIGlkXG4gICAgfSk7XG5cbiAgICBpZiAoZGlkU3RhcnRBZnRlckNyaXRpY2FsJDEpIHtcbiAgICAgIGlmIChpc0Rpc3BsYWNlZCkge1xuICAgICAgICByZXR1cm4gdGFyZ2V0RW5kID4gY2hpbGRSZWN0W2F4aXMuc3RhcnRdICsgdGhyZXNob2xkICYmIHRhcmdldEVuZCA8IGNoaWxkUmVjdFtheGlzLmVuZF0gLSB0aHJlc2hvbGQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YXJnZXRTdGFydCA+IGNoaWxkUmVjdFtheGlzLnN0YXJ0XSAtIGRpc3BsYWNlbWVudCArIHRocmVzaG9sZCAmJiB0YXJnZXRTdGFydCA8IGNoaWxkUmVjdFtheGlzLmVuZF0gLSBkaXNwbGFjZW1lbnQgLSB0aHJlc2hvbGQ7XG4gICAgfVxuXG4gICAgaWYgKGlzRGlzcGxhY2VkKSB7XG4gICAgICByZXR1cm4gdGFyZ2V0RW5kID4gY2hpbGRSZWN0W2F4aXMuc3RhcnRdICsgZGlzcGxhY2VtZW50ICsgdGhyZXNob2xkICYmIHRhcmdldEVuZCA8IGNoaWxkUmVjdFtheGlzLmVuZF0gKyBkaXNwbGFjZW1lbnQgLSB0aHJlc2hvbGQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldFN0YXJ0ID4gY2hpbGRSZWN0W2F4aXMuc3RhcnRdICsgdGhyZXNob2xkICYmIHRhcmdldFN0YXJ0IDwgY2hpbGRSZWN0W2F4aXMuZW5kXSAtIHRocmVzaG9sZDtcbiAgfSk7XG4gIGlmICghY29tYmluZVdpdGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBpbXBhY3QgPSB7XG4gICAgZGlzcGxhY2VkQnksXG4gICAgZGlzcGxhY2VkOiBwcmV2aW91c0ltcGFjdC5kaXNwbGFjZWQsXG4gICAgYXQ6IHtcbiAgICAgIHR5cGU6ICdDT01CSU5FJyxcbiAgICAgIGNvbWJpbmU6IHtcbiAgICAgICAgZHJhZ2dhYmxlSWQ6IGNvbWJpbmVXaXRoLmRlc2NyaXB0b3IuaWQsXG4gICAgICAgIGRyb3BwYWJsZUlkOiBkZXN0aW5hdGlvbi5kZXNjcmlwdG9yLmlkXG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXR1cm4gaW1wYWN0O1xufSk7XG5cbnZhciBnZXREcmFnSW1wYWN0ID0gKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIHBhZ2VPZmZzZXQsXG4gICAgZHJhZ2dhYmxlLFxuICAgIGRyYWdnYWJsZXMsXG4gICAgZHJvcHBhYmxlcyxcbiAgICBwcmV2aW91c0ltcGFjdCxcbiAgICB2aWV3cG9ydCxcbiAgICBhZnRlckNyaXRpY2FsXG4gIH0gPSBfcmVmO1xuICBjb25zdCBwYWdlQm9yZGVyQm94ID0gb2Zmc2V0UmVjdEJ5UG9zaXRpb24oZHJhZ2dhYmxlLnBhZ2UuYm9yZGVyQm94LCBwYWdlT2Zmc2V0KTtcbiAgY29uc3QgZGVzdGluYXRpb25JZCA9IGdldERyb3BwYWJsZU92ZXIoe1xuICAgIHBhZ2VCb3JkZXJCb3gsXG4gICAgZHJhZ2dhYmxlLFxuICAgIGRyb3BwYWJsZXNcbiAgfSk7XG5cbiAgaWYgKCFkZXN0aW5hdGlvbklkKSB7XG4gICAgcmV0dXJuIG5vSW1wYWN0JDE7XG4gIH1cbiAgY29uc3QgZGVzdGluYXRpb24gPSBkcm9wcGFibGVzW2Rlc3RpbmF0aW9uSWRdO1xuICBjb25zdCBpbnNpZGVEZXN0aW5hdGlvbiA9IGdldERyYWdnYWJsZXNJbnNpZGVEcm9wcGFibGUoZGVzdGluYXRpb24uZGVzY3JpcHRvci5pZCwgZHJhZ2dhYmxlcyk7XG5cbiAgY29uc3QgcGFnZUJvcmRlckJveFdpdGhEcm9wcGFibGVTY3JvbGwgPSB3aXRoRHJvcHBhYmxlU2Nyb2xsKGRlc3RpbmF0aW9uLCBwYWdlQm9yZGVyQm94KTtcblxuICByZXR1cm4gZ2V0Q29tYmluZUltcGFjdCh7XG4gICAgcGFnZUJvcmRlckJveFdpdGhEcm9wcGFibGVTY3JvbGwsXG4gICAgZHJhZ2dhYmxlLFxuICAgIHByZXZpb3VzSW1wYWN0LFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGluc2lkZURlc3RpbmF0aW9uLFxuICAgIGFmdGVyQ3JpdGljYWxcbiAgfSkgfHwgZ2V0UmVvcmRlckltcGFjdCh7XG4gICAgcGFnZUJvcmRlckJveFdpdGhEcm9wcGFibGVTY3JvbGwsXG4gICAgZHJhZ2dhYmxlLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGluc2lkZURlc3RpbmF0aW9uLFxuICAgIGxhc3Q6IHByZXZpb3VzSW1wYWN0LmRpc3BsYWNlZCxcbiAgICB2aWV3cG9ydCxcbiAgICBhZnRlckNyaXRpY2FsXG4gIH0pO1xufSk7XG5cbnZhciBwYXRjaERyb3BwYWJsZU1hcCA9ICgoZHJvcHBhYmxlcywgdXBkYXRlZCkgPT4gKHtcbiAgLi4uZHJvcHBhYmxlcyxcbiAgW3VwZGF0ZWQuZGVzY3JpcHRvci5pZF06IHVwZGF0ZWRcbn0pKTtcblxuY29uc3QgY2xlYXJVbnVzZWRQbGFjZWhvbGRlciA9IF9yZWYgPT4ge1xuICBsZXQge1xuICAgIHByZXZpb3VzSW1wYWN0LFxuICAgIGltcGFjdCxcbiAgICBkcm9wcGFibGVzXG4gIH0gPSBfcmVmO1xuICBjb25zdCBsYXN0ID0gd2hhdElzRHJhZ2dlZE92ZXIocHJldmlvdXNJbXBhY3QpO1xuICBjb25zdCBub3cgPSB3aGF0SXNEcmFnZ2VkT3ZlcihpbXBhY3QpO1xuICBpZiAoIWxhc3QpIHtcbiAgICByZXR1cm4gZHJvcHBhYmxlcztcbiAgfVxuXG4gIGlmIChsYXN0ID09PSBub3cpIHtcbiAgICByZXR1cm4gZHJvcHBhYmxlcztcbiAgfVxuICBjb25zdCBsYXN0RHJvcHBhYmxlID0gZHJvcHBhYmxlc1tsYXN0XTtcblxuICBpZiAoIWxhc3REcm9wcGFibGUuc3ViamVjdC53aXRoUGxhY2Vob2xkZXIpIHtcbiAgICByZXR1cm4gZHJvcHBhYmxlcztcbiAgfVxuICBjb25zdCB1cGRhdGVkID0gcmVtb3ZlUGxhY2Vob2xkZXIobGFzdERyb3BwYWJsZSk7XG4gIHJldHVybiBwYXRjaERyb3BwYWJsZU1hcChkcm9wcGFibGVzLCB1cGRhdGVkKTtcbn07XG52YXIgcmVjb21wdXRlUGxhY2Vob2xkZXJzID0gKF9yZWYyID0+IHtcbiAgbGV0IHtcbiAgICBkcmFnZ2FibGUsXG4gICAgZHJhZ2dhYmxlcyxcbiAgICBkcm9wcGFibGVzLFxuICAgIHByZXZpb3VzSW1wYWN0LFxuICAgIGltcGFjdFxuICB9ID0gX3JlZjI7XG4gIGNvbnN0IGNsZWFuZWQgPSBjbGVhclVudXNlZFBsYWNlaG9sZGVyKHtcbiAgICBwcmV2aW91c0ltcGFjdCxcbiAgICBpbXBhY3QsXG4gICAgZHJvcHBhYmxlc1xuICB9KTtcbiAgY29uc3QgaXNPdmVyID0gd2hhdElzRHJhZ2dlZE92ZXIoaW1wYWN0KTtcbiAgaWYgKCFpc092ZXIpIHtcbiAgICByZXR1cm4gY2xlYW5lZDtcbiAgfVxuICBjb25zdCBkcm9wcGFibGUgPSBkcm9wcGFibGVzW2lzT3Zlcl07XG5cbiAgaWYgKGlzSG9tZU9mKGRyYWdnYWJsZSwgZHJvcHBhYmxlKSkge1xuICAgIHJldHVybiBjbGVhbmVkO1xuICB9XG5cbiAgaWYgKGRyb3BwYWJsZS5zdWJqZWN0LndpdGhQbGFjZWhvbGRlcikge1xuICAgIHJldHVybiBjbGVhbmVkO1xuICB9XG5cbiAgY29uc3QgcGF0Y2hlZCA9IGFkZFBsYWNlaG9sZGVyKGRyb3BwYWJsZSwgZHJhZ2dhYmxlLCBkcmFnZ2FibGVzKTtcbiAgcmV0dXJuIHBhdGNoRHJvcHBhYmxlTWFwKGNsZWFuZWQsIHBhdGNoZWQpO1xufSk7XG5cbnZhciB1cGRhdGUgPSAoX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgc3RhdGUsXG4gICAgY2xpZW50U2VsZWN0aW9uOiBmb3JjZWRDbGllbnRTZWxlY3Rpb24sXG4gICAgZGltZW5zaW9uczogZm9yY2VkRGltZW5zaW9ucyxcbiAgICB2aWV3cG9ydDogZm9yY2VkVmlld3BvcnQsXG4gICAgaW1wYWN0OiBmb3JjZWRJbXBhY3QsXG4gICAgc2Nyb2xsSnVtcFJlcXVlc3RcbiAgfSA9IF9yZWY7XG5cbiAgY29uc3Qgdmlld3BvcnQgPSBmb3JjZWRWaWV3cG9ydCB8fCBzdGF0ZS52aWV3cG9ydDtcbiAgY29uc3QgZGltZW5zaW9ucyA9IGZvcmNlZERpbWVuc2lvbnMgfHwgc3RhdGUuZGltZW5zaW9ucztcbiAgY29uc3QgY2xpZW50U2VsZWN0aW9uID0gZm9yY2VkQ2xpZW50U2VsZWN0aW9uIHx8IHN0YXRlLmN1cnJlbnQuY2xpZW50LnNlbGVjdGlvbjtcbiAgY29uc3Qgb2Zmc2V0ID0gc3VidHJhY3QoY2xpZW50U2VsZWN0aW9uLCBzdGF0ZS5pbml0aWFsLmNsaWVudC5zZWxlY3Rpb24pO1xuICBjb25zdCBjbGllbnQgPSB7XG4gICAgb2Zmc2V0LFxuICAgIHNlbGVjdGlvbjogY2xpZW50U2VsZWN0aW9uLFxuICAgIGJvcmRlckJveENlbnRlcjogYWRkKHN0YXRlLmluaXRpYWwuY2xpZW50LmJvcmRlckJveENlbnRlciwgb2Zmc2V0KVxuICB9O1xuICBjb25zdCBwYWdlID0ge1xuICAgIHNlbGVjdGlvbjogYWRkKGNsaWVudC5zZWxlY3Rpb24sIHZpZXdwb3J0LnNjcm9sbC5jdXJyZW50KSxcbiAgICBib3JkZXJCb3hDZW50ZXI6IGFkZChjbGllbnQuYm9yZGVyQm94Q2VudGVyLCB2aWV3cG9ydC5zY3JvbGwuY3VycmVudCksXG4gICAgb2Zmc2V0OiBhZGQoY2xpZW50Lm9mZnNldCwgdmlld3BvcnQuc2Nyb2xsLmRpZmYudmFsdWUpXG4gIH07XG4gIGNvbnN0IGN1cnJlbnQgPSB7XG4gICAgY2xpZW50LFxuICAgIHBhZ2VcbiAgfTtcblxuICBpZiAoc3RhdGUucGhhc2UgPT09ICdDT0xMRUNUSU5HJykge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICB2aWV3cG9ydCxcbiAgICAgIGN1cnJlbnRcbiAgICB9O1xuICB9XG4gIGNvbnN0IGRyYWdnYWJsZSA9IGRpbWVuc2lvbnMuZHJhZ2dhYmxlc1tzdGF0ZS5jcml0aWNhbC5kcmFnZ2FibGUuaWRdO1xuICBjb25zdCBuZXdJbXBhY3QgPSBmb3JjZWRJbXBhY3QgfHwgZ2V0RHJhZ0ltcGFjdCh7XG4gICAgcGFnZU9mZnNldDogcGFnZS5vZmZzZXQsXG4gICAgZHJhZ2dhYmxlLFxuICAgIGRyYWdnYWJsZXM6IGRpbWVuc2lvbnMuZHJhZ2dhYmxlcyxcbiAgICBkcm9wcGFibGVzOiBkaW1lbnNpb25zLmRyb3BwYWJsZXMsXG4gICAgcHJldmlvdXNJbXBhY3Q6IHN0YXRlLmltcGFjdCxcbiAgICB2aWV3cG9ydCxcbiAgICBhZnRlckNyaXRpY2FsOiBzdGF0ZS5hZnRlckNyaXRpY2FsXG4gIH0pO1xuICBjb25zdCB3aXRoVXBkYXRlZFBsYWNlaG9sZGVycyA9IHJlY29tcHV0ZVBsYWNlaG9sZGVycyh7XG4gICAgZHJhZ2dhYmxlLFxuICAgIGltcGFjdDogbmV3SW1wYWN0LFxuICAgIHByZXZpb3VzSW1wYWN0OiBzdGF0ZS5pbXBhY3QsXG4gICAgZHJhZ2dhYmxlczogZGltZW5zaW9ucy5kcmFnZ2FibGVzLFxuICAgIGRyb3BwYWJsZXM6IGRpbWVuc2lvbnMuZHJvcHBhYmxlc1xuICB9KTtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIGN1cnJlbnQsXG4gICAgZGltZW5zaW9uczoge1xuICAgICAgZHJhZ2dhYmxlczogZGltZW5zaW9ucy5kcmFnZ2FibGVzLFxuICAgICAgZHJvcHBhYmxlczogd2l0aFVwZGF0ZWRQbGFjZWhvbGRlcnNcbiAgICB9LFxuICAgIGltcGFjdDogbmV3SW1wYWN0LFxuICAgIHZpZXdwb3J0LFxuICAgIHNjcm9sbEp1bXBSZXF1ZXN0OiBzY3JvbGxKdW1wUmVxdWVzdCB8fCBudWxsLFxuICAgIGZvcmNlU2hvdWxkQW5pbWF0ZTogc2Nyb2xsSnVtcFJlcXVlc3QgPyBmYWxzZSA6IG51bGxcbiAgfTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5mdW5jdGlvbiBnZXREcmFnZ2FibGVzKGlkcywgZHJhZ2dhYmxlcykge1xuICByZXR1cm4gaWRzLm1hcChpZCA9PiBkcmFnZ2FibGVzW2lkXSk7XG59XG52YXIgcmVjb21wdXRlID0gKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGltcGFjdCxcbiAgICB2aWV3cG9ydCxcbiAgICBkcmFnZ2FibGVzLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGZvcmNlU2hvdWxkQW5pbWF0ZVxuICB9ID0gX3JlZjtcbiAgY29uc3QgbGFzdCA9IGltcGFjdC5kaXNwbGFjZWQ7XG4gIGNvbnN0IGFmdGVyRHJhZ2dpbmcgPSBnZXREcmFnZ2FibGVzKGxhc3QuYWxsLCBkcmFnZ2FibGVzKTtcbiAgY29uc3QgZGlzcGxhY2VkID0gZ2V0RGlzcGxhY2VtZW50R3JvdXBzKHtcbiAgICBhZnRlckRyYWdnaW5nLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGRpc3BsYWNlZEJ5OiBpbXBhY3QuZGlzcGxhY2VkQnksXG4gICAgdmlld3BvcnQ6IHZpZXdwb3J0LmZyYW1lLFxuICAgIGZvcmNlU2hvdWxkQW5pbWF0ZSxcbiAgICBsYXN0XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIC4uLmltcGFjdCxcbiAgICBkaXNwbGFjZWRcbiAgfTtcbn0pO1xuXG52YXIgZ2V0Q2xpZW50Qm9yZGVyQm94Q2VudGVyID0gKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGltcGFjdCxcbiAgICBkcmFnZ2FibGUsXG4gICAgZHJvcHBhYmxlLFxuICAgIGRyYWdnYWJsZXMsXG4gICAgdmlld3BvcnQsXG4gICAgYWZ0ZXJDcml0aWNhbFxuICB9ID0gX3JlZjtcbiAgY29uc3QgcGFnZUJvcmRlckJveENlbnRlciA9IGdldFBhZ2VCb3JkZXJCb3hDZW50ZXJGcm9tSW1wYWN0KHtcbiAgICBpbXBhY3QsXG4gICAgZHJhZ2dhYmxlLFxuICAgIGRyYWdnYWJsZXMsXG4gICAgZHJvcHBhYmxlLFxuICAgIGFmdGVyQ3JpdGljYWxcbiAgfSk7XG4gIHJldHVybiBnZXRDbGllbnRGcm9tUGFnZUJvcmRlckJveENlbnRlcih7XG4gICAgcGFnZUJvcmRlckJveENlbnRlcixcbiAgICBkcmFnZ2FibGUsXG4gICAgdmlld3BvcnRcbiAgfSk7XG59KTtcblxudmFyIHJlZnJlc2hTbmFwID0gKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIHN0YXRlLFxuICAgIGRpbWVuc2lvbnM6IGZvcmNlZERpbWVuc2lvbnMsXG4gICAgdmlld3BvcnQ6IGZvcmNlZFZpZXdwb3J0XG4gIH0gPSBfcmVmO1xuICAhKHN0YXRlLm1vdmVtZW50TW9kZSA9PT0gJ1NOQVAnKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBjb25zdCBuZWVkc1Zpc2liaWxpdHlDaGVjayA9IHN0YXRlLmltcGFjdDtcbiAgY29uc3Qgdmlld3BvcnQgPSBmb3JjZWRWaWV3cG9ydCB8fCBzdGF0ZS52aWV3cG9ydDtcbiAgY29uc3QgZGltZW5zaW9ucyA9IGZvcmNlZERpbWVuc2lvbnMgfHwgc3RhdGUuZGltZW5zaW9ucztcbiAgY29uc3Qge1xuICAgIGRyYWdnYWJsZXMsXG4gICAgZHJvcHBhYmxlc1xuICB9ID0gZGltZW5zaW9ucztcbiAgY29uc3QgZHJhZ2dhYmxlID0gZHJhZ2dhYmxlc1tzdGF0ZS5jcml0aWNhbC5kcmFnZ2FibGUuaWRdO1xuICBjb25zdCBpc092ZXIgPSB3aGF0SXNEcmFnZ2VkT3ZlcihuZWVkc1Zpc2liaWxpdHlDaGVjayk7XG4gICFpc092ZXIgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdNdXN0IGJlIG92ZXIgYSBkZXN0aW5hdGlvbiBpbiBTTkFQIG1vdmVtZW50IG1vZGUnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGNvbnN0IGRlc3RpbmF0aW9uID0gZHJvcHBhYmxlc1tpc092ZXJdO1xuICBjb25zdCBpbXBhY3QgPSByZWNvbXB1dGUoe1xuICAgIGltcGFjdDogbmVlZHNWaXNpYmlsaXR5Q2hlY2ssXG4gICAgdmlld3BvcnQsXG4gICAgZGVzdGluYXRpb24sXG4gICAgZHJhZ2dhYmxlc1xuICB9KTtcbiAgY29uc3QgY2xpZW50U2VsZWN0aW9uID0gZ2V0Q2xpZW50Qm9yZGVyQm94Q2VudGVyKHtcbiAgICBpbXBhY3QsXG4gICAgZHJhZ2dhYmxlLFxuICAgIGRyb3BwYWJsZTogZGVzdGluYXRpb24sXG4gICAgZHJhZ2dhYmxlcyxcbiAgICB2aWV3cG9ydCxcbiAgICBhZnRlckNyaXRpY2FsOiBzdGF0ZS5hZnRlckNyaXRpY2FsXG4gIH0pO1xuICByZXR1cm4gdXBkYXRlKHtcbiAgICBpbXBhY3QsXG4gICAgY2xpZW50U2VsZWN0aW9uLFxuICAgIHN0YXRlLFxuICAgIGRpbWVuc2lvbnMsXG4gICAgdmlld3BvcnRcbiAgfSk7XG59KTtcblxudmFyIGdldEhvbWVMb2NhdGlvbiA9IChkZXNjcmlwdG9yID0+ICh7XG4gIGluZGV4OiBkZXNjcmlwdG9yLmluZGV4LFxuICBkcm9wcGFibGVJZDogZGVzY3JpcHRvci5kcm9wcGFibGVJZFxufSkpO1xuXG52YXIgZ2V0TGlmdEVmZmVjdCA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBkcmFnZ2FibGUsXG4gICAgaG9tZSxcbiAgICBkcmFnZ2FibGVzLFxuICAgIHZpZXdwb3J0XG4gIH0gPSBfcmVmO1xuICBjb25zdCBkaXNwbGFjZWRCeSA9IGdldERpc3BsYWNlZEJ5KGhvbWUuYXhpcywgZHJhZ2dhYmxlLmRpc3BsYWNlQnkpO1xuICBjb25zdCBpbnNpZGVIb21lID0gZ2V0RHJhZ2dhYmxlc0luc2lkZURyb3BwYWJsZShob21lLmRlc2NyaXB0b3IuaWQsIGRyYWdnYWJsZXMpO1xuXG4gIGNvbnN0IHJhd0luZGV4ID0gaW5zaWRlSG9tZS5pbmRleE9mKGRyYWdnYWJsZSk7XG4gICEocmF3SW5kZXggIT09IC0xKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkIGRyYWdnYWJsZSB0byBiZSBpbnNpZGUgaG9tZSBsaXN0JykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICBjb25zdCBhZnRlckRyYWdnaW5nID0gaW5zaWRlSG9tZS5zbGljZShyYXdJbmRleCArIDEpO1xuICBjb25zdCBlZmZlY3RlZCA9IGFmdGVyRHJhZ2dpbmcucmVkdWNlKChwcmV2aW91cywgaXRlbSkgPT4ge1xuICAgIHByZXZpb3VzW2l0ZW0uZGVzY3JpcHRvci5pZF0gPSB0cnVlO1xuICAgIHJldHVybiBwcmV2aW91cztcbiAgfSwge30pO1xuICBjb25zdCBhZnRlckNyaXRpY2FsID0ge1xuICAgIGluVmlydHVhbExpc3Q6IGhvbWUuZGVzY3JpcHRvci5tb2RlID09PSAndmlydHVhbCcsXG4gICAgZGlzcGxhY2VkQnksXG4gICAgZWZmZWN0ZWRcbiAgfTtcbiAgY29uc3QgZGlzcGxhY2VkID0gZ2V0RGlzcGxhY2VtZW50R3JvdXBzKHtcbiAgICBhZnRlckRyYWdnaW5nLFxuICAgIGRlc3RpbmF0aW9uOiBob21lLFxuICAgIGRpc3BsYWNlZEJ5LFxuICAgIGxhc3Q6IG51bGwsXG4gICAgdmlld3BvcnQ6IHZpZXdwb3J0LmZyYW1lLFxuICAgIGZvcmNlU2hvdWxkQW5pbWF0ZTogZmFsc2VcbiAgfSk7XG4gIGNvbnN0IGltcGFjdCA9IHtcbiAgICBkaXNwbGFjZWQsXG4gICAgZGlzcGxhY2VkQnksXG4gICAgYXQ6IHtcbiAgICAgIHR5cGU6ICdSRU9SREVSJyxcbiAgICAgIGRlc3RpbmF0aW9uOiBnZXRIb21lTG9jYXRpb24oZHJhZ2dhYmxlLmRlc2NyaXB0b3IpXG4gICAgfVxuICB9O1xuICByZXR1cm4ge1xuICAgIGltcGFjdCxcbiAgICBhZnRlckNyaXRpY2FsXG4gIH07XG59KTtcblxudmFyIHBhdGNoRGltZW5zaW9uTWFwID0gKChkaW1lbnNpb25zLCB1cGRhdGVkKSA9PiAoe1xuICBkcmFnZ2FibGVzOiBkaW1lbnNpb25zLmRyYWdnYWJsZXMsXG4gIGRyb3BwYWJsZXM6IHBhdGNoRHJvcHBhYmxlTWFwKGRpbWVuc2lvbnMuZHJvcHBhYmxlcywgdXBkYXRlZClcbn0pKTtcblxuY29uc3Qgc3RhcnQgPSBrZXkgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn07XG5jb25zdCBmaW5pc2ggPSBrZXkgPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBvZmZzZXREcmFnZ2FibGUgPSAoX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgZHJhZ2dhYmxlLFxuICAgIG9mZnNldCxcbiAgICBpbml0aWFsV2luZG93U2Nyb2xsXG4gIH0gPSBfcmVmO1xuICBjb25zdCBjbGllbnQgPSBjc3NCb3hNb2RlbC5vZmZzZXQoZHJhZ2dhYmxlLmNsaWVudCwgb2Zmc2V0KTtcbiAgY29uc3QgcGFnZSA9IGNzc0JveE1vZGVsLndpdGhTY3JvbGwoY2xpZW50LCBpbml0aWFsV2luZG93U2Nyb2xsKTtcbiAgY29uc3QgbW92ZWQgPSB7XG4gICAgLi4uZHJhZ2dhYmxlLFxuICAgIHBsYWNlaG9sZGVyOiB7XG4gICAgICAuLi5kcmFnZ2FibGUucGxhY2Vob2xkZXIsXG4gICAgICBjbGllbnRcbiAgICB9LFxuICAgIGNsaWVudCxcbiAgICBwYWdlXG4gIH07XG4gIHJldHVybiBtb3ZlZDtcbn0pO1xuXG52YXIgZ2V0RnJhbWUgPSAoZHJvcHBhYmxlID0+IHtcbiAgY29uc3QgZnJhbWUgPSBkcm9wcGFibGUuZnJhbWU7XG4gICFmcmFtZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkIERyb3BwYWJsZSB0byBoYXZlIGEgZnJhbWUnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHJldHVybiBmcmFtZTtcbn0pO1xuXG52YXIgYWRqdXN0QWRkaXRpb25zRm9yU2Nyb2xsQ2hhbmdlcyA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBhZGRpdGlvbnMsXG4gICAgdXBkYXRlZERyb3BwYWJsZXMsXG4gICAgdmlld3BvcnRcbiAgfSA9IF9yZWY7XG5cbiAgY29uc3Qgd2luZG93U2Nyb2xsQ2hhbmdlID0gdmlld3BvcnQuc2Nyb2xsLmRpZmYudmFsdWU7XG5cbiAgcmV0dXJuIGFkZGl0aW9ucy5tYXAoZHJhZ2dhYmxlID0+IHtcbiAgICBjb25zdCBkcm9wcGFibGVJZCA9IGRyYWdnYWJsZS5kZXNjcmlwdG9yLmRyb3BwYWJsZUlkO1xuICAgIGNvbnN0IG1vZGlmaWVkID0gdXBkYXRlZERyb3BwYWJsZXNbZHJvcHBhYmxlSWRdO1xuICAgIGNvbnN0IGZyYW1lID0gZ2V0RnJhbWUobW9kaWZpZWQpO1xuICAgIGNvbnN0IGRyb3BwYWJsZVNjcm9sbENoYW5nZSA9IGZyYW1lLnNjcm9sbC5kaWZmLnZhbHVlO1xuICAgIGNvbnN0IHRvdGFsQ2hhbmdlID0gYWRkKHdpbmRvd1Njcm9sbENoYW5nZSwgZHJvcHBhYmxlU2Nyb2xsQ2hhbmdlKTtcbiAgICBjb25zdCBtb3ZlZCA9IG9mZnNldERyYWdnYWJsZSh7XG4gICAgICBkcmFnZ2FibGUsXG4gICAgICBvZmZzZXQ6IHRvdGFsQ2hhbmdlLFxuICAgICAgaW5pdGlhbFdpbmRvd1Njcm9sbDogdmlld3BvcnQuc2Nyb2xsLmluaXRpYWxcbiAgICB9KTtcbiAgICByZXR1cm4gbW92ZWQ7XG4gIH0pO1xufSk7XG5cbmNvbnN0IHRpbWluZ3NLZXkgPSAnUHJvY2Vzc2luZyBkeW5hbWljIGNoYW5nZXMnO1xudmFyIHB1Ymxpc2hXaGlsZURyYWdnaW5nSW5WaXJ0dWFsID0gKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIHN0YXRlLFxuICAgIHB1Ymxpc2hlZFxuICB9ID0gX3JlZjtcbiAgc3RhcnQodGltaW5nc0tleSk7XG5cbiAgY29uc3Qgd2l0aFNjcm9sbENoYW5nZSA9IHB1Ymxpc2hlZC5tb2RpZmllZC5tYXAodXBkYXRlID0+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IHN0YXRlLmRpbWVuc2lvbnMuZHJvcHBhYmxlc1t1cGRhdGUuZHJvcHBhYmxlSWRdO1xuICAgIGNvbnN0IHNjcm9sbGVkID0gc2Nyb2xsRHJvcHBhYmxlKGV4aXN0aW5nLCB1cGRhdGUuc2Nyb2xsKTtcbiAgICByZXR1cm4gc2Nyb2xsZWQ7XG4gIH0pO1xuICBjb25zdCBkcm9wcGFibGVzID0ge1xuICAgIC4uLnN0YXRlLmRpbWVuc2lvbnMuZHJvcHBhYmxlcyxcbiAgICAuLi50b0Ryb3BwYWJsZU1hcCh3aXRoU2Nyb2xsQ2hhbmdlKVxuICB9O1xuICBjb25zdCB1cGRhdGVkQWRkaXRpb25zID0gdG9EcmFnZ2FibGVNYXAoYWRqdXN0QWRkaXRpb25zRm9yU2Nyb2xsQ2hhbmdlcyh7XG4gICAgYWRkaXRpb25zOiBwdWJsaXNoZWQuYWRkaXRpb25zLFxuICAgIHVwZGF0ZWREcm9wcGFibGVzOiBkcm9wcGFibGVzLFxuICAgIHZpZXdwb3J0OiBzdGF0ZS52aWV3cG9ydFxuICB9KSk7XG4gIGNvbnN0IGRyYWdnYWJsZXMgPSB7XG4gICAgLi4uc3RhdGUuZGltZW5zaW9ucy5kcmFnZ2FibGVzLFxuICAgIC4uLnVwZGF0ZWRBZGRpdGlvbnNcbiAgfTtcblxuICBwdWJsaXNoZWQucmVtb3ZhbHMuZm9yRWFjaChpZCA9PiB7XG4gICAgZGVsZXRlIGRyYWdnYWJsZXNbaWRdO1xuICB9KTtcbiAgY29uc3QgZGltZW5zaW9ucyA9IHtcbiAgICBkcm9wcGFibGVzLFxuICAgIGRyYWdnYWJsZXNcbiAgfTtcbiAgY29uc3Qgd2FzT3ZlcklkID0gd2hhdElzRHJhZ2dlZE92ZXIoc3RhdGUuaW1wYWN0KTtcbiAgY29uc3Qgd2FzT3ZlciA9IHdhc092ZXJJZCA/IGRpbWVuc2lvbnMuZHJvcHBhYmxlc1t3YXNPdmVySWRdIDogbnVsbDtcbiAgY29uc3QgZHJhZ2dhYmxlID0gZGltZW5zaW9ucy5kcmFnZ2FibGVzW3N0YXRlLmNyaXRpY2FsLmRyYWdnYWJsZS5pZF07XG4gIGNvbnN0IGhvbWUgPSBkaW1lbnNpb25zLmRyb3BwYWJsZXNbc3RhdGUuY3JpdGljYWwuZHJvcHBhYmxlLmlkXTtcbiAgY29uc3Qge1xuICAgIGltcGFjdDogb25MaWZ0SW1wYWN0LFxuICAgIGFmdGVyQ3JpdGljYWxcbiAgfSA9IGdldExpZnRFZmZlY3Qoe1xuICAgIGRyYWdnYWJsZSxcbiAgICBob21lLFxuICAgIGRyYWdnYWJsZXMsXG4gICAgdmlld3BvcnQ6IHN0YXRlLnZpZXdwb3J0XG4gIH0pO1xuICBjb25zdCBwcmV2aW91c0ltcGFjdCA9IHdhc092ZXIgJiYgd2FzT3Zlci5pc0NvbWJpbmVFbmFibGVkID9cbiAgc3RhdGUuaW1wYWN0IDogb25MaWZ0SW1wYWN0O1xuICBjb25zdCBpbXBhY3QgPSBnZXREcmFnSW1wYWN0KHtcbiAgICBwYWdlT2Zmc2V0OiBzdGF0ZS5jdXJyZW50LnBhZ2Uub2Zmc2V0LFxuICAgIGRyYWdnYWJsZTogZGltZW5zaW9ucy5kcmFnZ2FibGVzW3N0YXRlLmNyaXRpY2FsLmRyYWdnYWJsZS5pZF0sXG4gICAgZHJhZ2dhYmxlczogZGltZW5zaW9ucy5kcmFnZ2FibGVzLFxuICAgIGRyb3BwYWJsZXM6IGRpbWVuc2lvbnMuZHJvcHBhYmxlcyxcbiAgICBwcmV2aW91c0ltcGFjdCxcbiAgICB2aWV3cG9ydDogc3RhdGUudmlld3BvcnQsXG4gICAgYWZ0ZXJDcml0aWNhbFxuICB9KTtcbiAgZmluaXNoKHRpbWluZ3NLZXkpO1xuICBjb25zdCBkcmFnZ2luZ1N0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIHBoYXNlOiAnRFJBR0dJTkcnLFxuICAgIGltcGFjdCxcbiAgICBvbkxpZnRJbXBhY3QsXG4gICAgZGltZW5zaW9ucyxcbiAgICBhZnRlckNyaXRpY2FsLFxuICAgIGZvcmNlU2hvdWxkQW5pbWF0ZTogZmFsc2VcbiAgfTtcbiAgaWYgKHN0YXRlLnBoYXNlID09PSAnQ09MTEVDVElORycpIHtcbiAgICByZXR1cm4gZHJhZ2dpbmdTdGF0ZTtcbiAgfVxuXG4gIGNvbnN0IGRyb3BQZW5kaW5nID0ge1xuICAgIC4uLmRyYWdnaW5nU3RhdGUsXG4gICAgcGhhc2U6ICdEUk9QX1BFTkRJTkcnLFxuICAgIHJlYXNvbjogc3RhdGUucmVhc29uLFxuICAgIGlzV2FpdGluZzogZmFsc2VcbiAgfTtcbiAgcmV0dXJuIGRyb3BQZW5kaW5nO1xufSk7XG5cbmNvbnN0IGlzU25hcHBpbmcgPSBzdGF0ZSA9PiBzdGF0ZS5tb3ZlbWVudE1vZGUgPT09ICdTTkFQJztcbmNvbnN0IHBvc3REcm9wcGFibGVDaGFuZ2UgPSAoc3RhdGUsIHVwZGF0ZWQsIGlzRW5hYmxlZENoYW5naW5nKSA9PiB7XG4gIGNvbnN0IGRpbWVuc2lvbnMgPSBwYXRjaERpbWVuc2lvbk1hcChzdGF0ZS5kaW1lbnNpb25zLCB1cGRhdGVkKTtcblxuICBpZiAoIWlzU25hcHBpbmcoc3RhdGUpIHx8IGlzRW5hYmxlZENoYW5naW5nKSB7XG4gICAgcmV0dXJuIHVwZGF0ZSh7XG4gICAgICBzdGF0ZSxcbiAgICAgIGRpbWVuc2lvbnNcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVmcmVzaFNuYXAoe1xuICAgIHN0YXRlLFxuICAgIGRpbWVuc2lvbnNcbiAgfSk7XG59O1xuZnVuY3Rpb24gcmVtb3ZlU2Nyb2xsSnVtcFJlcXVlc3Qoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmlzRHJhZ2dpbmcgJiYgc3RhdGUubW92ZW1lbnRNb2RlID09PSAnU05BUCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzY3JvbGxKdW1wUmVxdWVzdDogbnVsbFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHN0YXRlO1xufVxuY29uc3QgaWRsZSQyID0ge1xuICBwaGFzZTogJ0lETEUnLFxuICBjb21wbGV0ZWQ6IG51bGwsXG4gIHNob3VsZEZsdXNoOiBmYWxzZVxufTtcblxudmFyIHJlZHVjZXIgPSAoZnVuY3Rpb24gKHN0YXRlLCBhY3Rpb24pIHtcbiAgaWYgKHN0YXRlID09PSB2b2lkIDApIHtcbiAgICBzdGF0ZSA9IGlkbGUkMjtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09ICdGTFVTSCcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uaWRsZSQyLFxuICAgICAgc2hvdWxkRmx1c2g6IHRydWVcbiAgICB9O1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gJ0lOSVRJQUxfUFVCTElTSCcpIHtcbiAgICAhKHN0YXRlLnBoYXNlID09PSAnSURMRScpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnSU5JVElBTF9QVUJMSVNIIG11c3QgY29tZSBhZnRlciBhIElETEUgcGhhc2UnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgY29uc3Qge1xuICAgICAgY3JpdGljYWwsXG4gICAgICBjbGllbnRTZWxlY3Rpb24sXG4gICAgICB2aWV3cG9ydCxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBtb3ZlbWVudE1vZGVcbiAgICB9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgY29uc3QgZHJhZ2dhYmxlID0gZGltZW5zaW9ucy5kcmFnZ2FibGVzW2NyaXRpY2FsLmRyYWdnYWJsZS5pZF07XG4gICAgY29uc3QgaG9tZSA9IGRpbWVuc2lvbnMuZHJvcHBhYmxlc1tjcml0aWNhbC5kcm9wcGFibGUuaWRdO1xuICAgIGNvbnN0IGNsaWVudCA9IHtcbiAgICAgIHNlbGVjdGlvbjogY2xpZW50U2VsZWN0aW9uLFxuICAgICAgYm9yZGVyQm94Q2VudGVyOiBkcmFnZ2FibGUuY2xpZW50LmJvcmRlckJveC5jZW50ZXIsXG4gICAgICBvZmZzZXQ6IG9yaWdpblxuICAgIH07XG4gICAgY29uc3QgaW5pdGlhbCA9IHtcbiAgICAgIGNsaWVudCxcbiAgICAgIHBhZ2U6IHtcbiAgICAgICAgc2VsZWN0aW9uOiBhZGQoY2xpZW50LnNlbGVjdGlvbiwgdmlld3BvcnQuc2Nyb2xsLmluaXRpYWwpLFxuICAgICAgICBib3JkZXJCb3hDZW50ZXI6IGFkZChjbGllbnQuc2VsZWN0aW9uLCB2aWV3cG9ydC5zY3JvbGwuaW5pdGlhbCksXG4gICAgICAgIG9mZnNldDogYWRkKGNsaWVudC5zZWxlY3Rpb24sIHZpZXdwb3J0LnNjcm9sbC5kaWZmLnZhbHVlKVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpc1dpbmRvd1Njcm9sbEFsbG93ZWQgPSB0b0Ryb3BwYWJsZUxpc3QoZGltZW5zaW9ucy5kcm9wcGFibGVzKS5ldmVyeShpdGVtID0+ICFpdGVtLmlzRml4ZWRPblBhZ2UpO1xuICAgIGNvbnN0IHtcbiAgICAgIGltcGFjdCxcbiAgICAgIGFmdGVyQ3JpdGljYWxcbiAgICB9ID0gZ2V0TGlmdEVmZmVjdCh7XG4gICAgICBkcmFnZ2FibGUsXG4gICAgICBob21lLFxuICAgICAgZHJhZ2dhYmxlczogZGltZW5zaW9ucy5kcmFnZ2FibGVzLFxuICAgICAgdmlld3BvcnRcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBwaGFzZTogJ0RSQUdHSU5HJyxcbiAgICAgIGlzRHJhZ2dpbmc6IHRydWUsXG4gICAgICBjcml0aWNhbCxcbiAgICAgIG1vdmVtZW50TW9kZSxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBpbml0aWFsLFxuICAgICAgY3VycmVudDogaW5pdGlhbCxcbiAgICAgIGlzV2luZG93U2Nyb2xsQWxsb3dlZCxcbiAgICAgIGltcGFjdCxcbiAgICAgIGFmdGVyQ3JpdGljYWwsXG4gICAgICBvbkxpZnRJbXBhY3Q6IGltcGFjdCxcbiAgICAgIHZpZXdwb3J0LFxuICAgICAgc2Nyb2xsSnVtcFJlcXVlc3Q6IG51bGwsXG4gICAgICBmb3JjZVNob3VsZEFuaW1hdGU6IG51bGxcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSAnQ09MTEVDVElPTl9TVEFSVElORycpIHtcbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdDT0xMRUNUSU5HJyB8fCBzdGF0ZS5waGFzZSA9PT0gJ0RST1BfUEVORElORycpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgIShzdGF0ZS5waGFzZSA9PT0gJ0RSQUdHSU5HJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGBDb2xsZWN0aW9uIGNhbm5vdCBzdGFydCBmcm9tIHBoYXNlICR7c3RhdGUucGhhc2V9YCkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgcGhhc2U6ICdDT0xMRUNUSU5HJ1xuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09ICdQVUJMSVNIX1dISUxFX0RSQUdHSU5HJykge1xuICAgICEoc3RhdGUucGhhc2UgPT09ICdDT0xMRUNUSU5HJyB8fCBzdGF0ZS5waGFzZSA9PT0gJ0RST1BfUEVORElORycpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBgVW5leHBlY3RlZCAke2FjdGlvbi50eXBlfSByZWNlaXZlZCBpbiBwaGFzZSAke3N0YXRlLnBoYXNlfWApIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICByZXR1cm4gcHVibGlzaFdoaWxlRHJhZ2dpbmdJblZpcnR1YWwoe1xuICAgICAgc3RhdGUsXG4gICAgICBwdWJsaXNoZWQ6IGFjdGlvbi5wYXlsb2FkXG4gICAgfSk7XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSAnTU9WRScpIHtcbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdEUk9QX1BFTkRJTkcnKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgICFpc01vdmVtZW50QWxsb3dlZChzdGF0ZSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGAke2FjdGlvbi50eXBlfSBub3QgcGVybWl0dGVkIGluIHBoYXNlICR7c3RhdGUucGhhc2V9YCkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIGNvbnN0IHtcbiAgICAgIGNsaWVudDogY2xpZW50U2VsZWN0aW9uXG4gICAgfSA9IGFjdGlvbi5wYXlsb2FkO1xuXG4gICAgaWYgKGlzRXF1YWwkMShjbGllbnRTZWxlY3Rpb24sIHN0YXRlLmN1cnJlbnQuY2xpZW50LnNlbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHVwZGF0ZSh7XG4gICAgICBzdGF0ZSxcbiAgICAgIGNsaWVudFNlbGVjdGlvbixcbiAgICAgIGltcGFjdDogaXNTbmFwcGluZyhzdGF0ZSkgPyBzdGF0ZS5pbXBhY3QgOiBudWxsXG4gICAgfSk7XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSAnVVBEQVRFX0RST1BQQUJMRV9TQ1JPTEwnKSB7XG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnRFJPUF9QRU5ESU5HJykge1xuICAgICAgcmV0dXJuIHJlbW92ZVNjcm9sbEp1bXBSZXF1ZXN0KHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdDT0xMRUNUSU5HJykge1xuICAgICAgcmV0dXJuIHJlbW92ZVNjcm9sbEp1bXBSZXF1ZXN0KHN0YXRlKTtcbiAgICB9XG4gICAgIWlzTW92ZW1lbnRBbGxvd2VkKHN0YXRlKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgYCR7YWN0aW9uLnR5cGV9IG5vdCBwZXJtaXR0ZWQgaW4gcGhhc2UgJHtzdGF0ZS5waGFzZX1gKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgY29uc3Qge1xuICAgICAgaWQsXG4gICAgICBuZXdTY3JvbGxcbiAgICB9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgY29uc3QgdGFyZ2V0ID0gc3RhdGUuZGltZW5zaW9ucy5kcm9wcGFibGVzW2lkXTtcblxuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IHNjcm9sbGVkID0gc2Nyb2xsRHJvcHBhYmxlKHRhcmdldCwgbmV3U2Nyb2xsKTtcbiAgICByZXR1cm4gcG9zdERyb3BwYWJsZUNoYW5nZShzdGF0ZSwgc2Nyb2xsZWQsIGZhbHNlKTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09ICdVUERBVEVfRFJPUFBBQkxFX0lTX0VOQUJMRUQnKSB7XG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnRFJPUF9QRU5ESU5HJykge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICAhaXNNb3ZlbWVudEFsbG93ZWQoc3RhdGUpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBgQXR0ZW1wdGluZyB0byBtb3ZlIGluIGFuIHVuc3VwcG9ydGVkIHBoYXNlICR7c3RhdGUucGhhc2V9YCkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIGNvbnN0IHtcbiAgICAgIGlkLFxuICAgICAgaXNFbmFibGVkXG4gICAgfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgIGNvbnN0IHRhcmdldCA9IHN0YXRlLmRpbWVuc2lvbnMuZHJvcHBhYmxlc1tpZF07XG4gICAgIXRhcmdldCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgYENhbm5vdCBmaW5kIERyb3BwYWJsZVtpZDogJHtpZH1dIHRvIHRvZ2dsZSBpdHMgZW5hYmxlZCBzdGF0ZWApIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICAhKHRhcmdldC5pc0VuYWJsZWQgIT09IGlzRW5hYmxlZCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGBUcnlpbmcgdG8gc2V0IGRyb3BwYWJsZSBpc0VuYWJsZWQgdG8gJHtTdHJpbmcoaXNFbmFibGVkKX1cbiAgICAgIGJ1dCBpdCBpcyBhbHJlYWR5ICR7U3RyaW5nKHRhcmdldC5pc0VuYWJsZWQpfWApIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBjb25zdCB1cGRhdGVkID0ge1xuICAgICAgLi4udGFyZ2V0LFxuICAgICAgaXNFbmFibGVkXG4gICAgfTtcbiAgICByZXR1cm4gcG9zdERyb3BwYWJsZUNoYW5nZShzdGF0ZSwgdXBkYXRlZCwgdHJ1ZSk7XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSAnVVBEQVRFX0RST1BQQUJMRV9JU19DT01CSU5FX0VOQUJMRUQnKSB7XG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnRFJPUF9QRU5ESU5HJykge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICAhaXNNb3ZlbWVudEFsbG93ZWQoc3RhdGUpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBgQXR0ZW1wdGluZyB0byBtb3ZlIGluIGFuIHVuc3VwcG9ydGVkIHBoYXNlICR7c3RhdGUucGhhc2V9YCkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIGNvbnN0IHtcbiAgICAgIGlkLFxuICAgICAgaXNDb21iaW5lRW5hYmxlZFxuICAgIH0gPSBhY3Rpb24ucGF5bG9hZDtcbiAgICBjb25zdCB0YXJnZXQgPSBzdGF0ZS5kaW1lbnNpb25zLmRyb3BwYWJsZXNbaWRdO1xuICAgICF0YXJnZXQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGBDYW5ub3QgZmluZCBEcm9wcGFibGVbaWQ6ICR7aWR9XSB0byB0b2dnbGUgaXRzIGlzQ29tYmluZUVuYWJsZWQgc3RhdGVgKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgISh0YXJnZXQuaXNDb21iaW5lRW5hYmxlZCAhPT0gaXNDb21iaW5lRW5hYmxlZCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGBUcnlpbmcgdG8gc2V0IGRyb3BwYWJsZSBpc0NvbWJpbmVFbmFibGVkIHRvICR7U3RyaW5nKGlzQ29tYmluZUVuYWJsZWQpfVxuICAgICAgYnV0IGl0IGlzIGFscmVhZHkgJHtTdHJpbmcodGFyZ2V0LmlzQ29tYmluZUVuYWJsZWQpfWApIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBjb25zdCB1cGRhdGVkID0ge1xuICAgICAgLi4udGFyZ2V0LFxuICAgICAgaXNDb21iaW5lRW5hYmxlZFxuICAgIH07XG4gICAgcmV0dXJuIHBvc3REcm9wcGFibGVDaGFuZ2Uoc3RhdGUsIHVwZGF0ZWQsIHRydWUpO1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gJ01PVkVfQllfV0lORE9XX1NDUk9MTCcpIHtcbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdEUk9QX1BFTkRJTkcnIHx8IHN0YXRlLnBoYXNlID09PSAnRFJPUF9BTklNQVRJTkcnKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgICFpc01vdmVtZW50QWxsb3dlZChzdGF0ZSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGBDYW5ub3QgbW92ZSBieSB3aW5kb3cgaW4gcGhhc2UgJHtzdGF0ZS5waGFzZX1gKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgIXN0YXRlLmlzV2luZG93U2Nyb2xsQWxsb3dlZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ1dpbmRvdyBzY3JvbGxpbmcgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgZm9yIGZpeGVkIGxpc3RzJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIGNvbnN0IG5ld1Njcm9sbCA9IGFjdGlvbi5wYXlsb2FkLm5ld1Njcm9sbDtcblxuICAgIGlmIChpc0VxdWFsJDEoc3RhdGUudmlld3BvcnQuc2Nyb2xsLmN1cnJlbnQsIG5ld1Njcm9sbCkpIHtcbiAgICAgIHJldHVybiByZW1vdmVTY3JvbGxKdW1wUmVxdWVzdChzdGF0ZSk7XG4gICAgfVxuICAgIGNvbnN0IHZpZXdwb3J0ID0gc2Nyb2xsVmlld3BvcnQoc3RhdGUudmlld3BvcnQsIG5ld1Njcm9sbCk7XG4gICAgaWYgKGlzU25hcHBpbmcoc3RhdGUpKSB7XG4gICAgICByZXR1cm4gcmVmcmVzaFNuYXAoe1xuICAgICAgICBzdGF0ZSxcbiAgICAgICAgdmlld3BvcnRcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdXBkYXRlKHtcbiAgICAgIHN0YXRlLFxuICAgICAgdmlld3BvcnRcbiAgICB9KTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09ICdVUERBVEVfVklFV1BPUlRfTUFYX1NDUk9MTCcpIHtcbiAgICBpZiAoIWlzTW92ZW1lbnRBbGxvd2VkKHN0YXRlKSkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgICBjb25zdCBtYXhTY3JvbGwgPSBhY3Rpb24ucGF5bG9hZC5tYXhTY3JvbGw7XG4gICAgaWYgKGlzRXF1YWwkMShtYXhTY3JvbGwsIHN0YXRlLnZpZXdwb3J0LnNjcm9sbC5tYXgpKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIGNvbnN0IHdpdGhNYXhTY3JvbGwgPSB7XG4gICAgICAuLi5zdGF0ZS52aWV3cG9ydCxcbiAgICAgIHNjcm9sbDoge1xuICAgICAgICAuLi5zdGF0ZS52aWV3cG9ydC5zY3JvbGwsXG4gICAgICAgIG1heDogbWF4U2Nyb2xsXG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHZpZXdwb3J0OiB3aXRoTWF4U2Nyb2xsXG4gICAgfTtcbiAgfVxuICBpZiAoYWN0aW9uLnR5cGUgPT09ICdNT1ZFX1VQJyB8fCBhY3Rpb24udHlwZSA9PT0gJ01PVkVfRE9XTicgfHwgYWN0aW9uLnR5cGUgPT09ICdNT1ZFX0xFRlQnIHx8IGFjdGlvbi50eXBlID09PSAnTU9WRV9SSUdIVCcpIHtcbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdDT0xMRUNUSU5HJyB8fCBzdGF0ZS5waGFzZSA9PT0gJ0RST1BfUEVORElORycpIHtcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgIShzdGF0ZS5waGFzZSA9PT0gJ0RSQUdHSU5HJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGAke2FjdGlvbi50eXBlfSByZWNlaXZlZCB3aGlsZSBub3QgaW4gRFJBR0dJTkcgcGhhc2VgKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgY29uc3QgcmVzdWx0ID0gbW92ZUluRGlyZWN0aW9uKHtcbiAgICAgIHN0YXRlLFxuICAgICAgdHlwZTogYWN0aW9uLnR5cGVcbiAgICB9KTtcblxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICAgIHJldHVybiB1cGRhdGUoe1xuICAgICAgc3RhdGUsXG4gICAgICBpbXBhY3Q6IHJlc3VsdC5pbXBhY3QsXG4gICAgICBjbGllbnRTZWxlY3Rpb246IHJlc3VsdC5jbGllbnRTZWxlY3Rpb24sXG4gICAgICBzY3JvbGxKdW1wUmVxdWVzdDogcmVzdWx0LnNjcm9sbEp1bXBSZXF1ZXN0XG4gICAgfSk7XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSAnRFJPUF9QRU5ESU5HJykge1xuICAgIGNvbnN0IHJlYXNvbiA9IGFjdGlvbi5wYXlsb2FkLnJlYXNvbjtcbiAgICAhKHN0YXRlLnBoYXNlID09PSAnQ09MTEVDVElORycpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2FuIG9ubHkgbW92ZSBpbnRvIHRoZSBEUk9QX1BFTkRJTkcgcGhhc2UgZnJvbSB0aGUgQ09MTEVDVElORyBwaGFzZScpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgcGhhc2U6ICdEUk9QX1BFTkRJTkcnLFxuICAgICAgaXNXYWl0aW5nOiB0cnVlLFxuICAgICAgcmVhc29uXG4gICAgfTtcbiAgICByZXR1cm4gbmV3U3RhdGU7XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSAnRFJPUF9BTklNQVRFJykge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbXBsZXRlZCxcbiAgICAgIGRyb3BEdXJhdGlvbixcbiAgICAgIG5ld0hvbWVDbGllbnRPZmZzZXRcbiAgICB9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgIShzdGF0ZS5waGFzZSA9PT0gJ0RSQUdHSU5HJyB8fCBzdGF0ZS5waGFzZSA9PT0gJ0RST1BfUEVORElORycpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBgQ2Fubm90IGFuaW1hdGUgZHJvcCBmcm9tIHBoYXNlICR7c3RhdGUucGhhc2V9YCkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgcGhhc2U6ICdEUk9QX0FOSU1BVElORycsXG4gICAgICBjb21wbGV0ZWQsXG4gICAgICBkcm9wRHVyYXRpb24sXG4gICAgICBuZXdIb21lQ2xpZW50T2Zmc2V0LFxuICAgICAgZGltZW5zaW9uczogc3RhdGUuZGltZW5zaW9uc1xuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gJ0RST1BfQ09NUExFVEUnKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29tcGxldGVkXG4gICAgfSA9IGFjdGlvbi5wYXlsb2FkO1xuICAgIHJldHVybiB7XG4gICAgICBwaGFzZTogJ0lETEUnLFxuICAgICAgY29tcGxldGVkLFxuICAgICAgc2hvdWxkRmx1c2g6IGZhbHNlXG4gICAgfTtcbiAgfVxuICByZXR1cm4gc3RhdGU7XG59KTtcblxuY29uc3QgYmVmb3JlSW5pdGlhbENhcHR1cmUgPSBhcmdzID0+ICh7XG4gIHR5cGU6ICdCRUZPUkVfSU5JVElBTF9DQVBUVVJFJyxcbiAgcGF5bG9hZDogYXJnc1xufSk7XG5jb25zdCBsaWZ0JDEgPSBhcmdzID0+ICh7XG4gIHR5cGU6ICdMSUZUJyxcbiAgcGF5bG9hZDogYXJnc1xufSk7XG5jb25zdCBpbml0aWFsUHVibGlzaCA9IGFyZ3MgPT4gKHtcbiAgdHlwZTogJ0lOSVRJQUxfUFVCTElTSCcsXG4gIHBheWxvYWQ6IGFyZ3Ncbn0pO1xuY29uc3QgcHVibGlzaFdoaWxlRHJhZ2dpbmcgPSBhcmdzID0+ICh7XG4gIHR5cGU6ICdQVUJMSVNIX1dISUxFX0RSQUdHSU5HJyxcbiAgcGF5bG9hZDogYXJnc1xufSk7XG5jb25zdCBjb2xsZWN0aW9uU3RhcnRpbmcgPSAoKSA9PiAoe1xuICB0eXBlOiAnQ09MTEVDVElPTl9TVEFSVElORycsXG4gIHBheWxvYWQ6IG51bGxcbn0pO1xuY29uc3QgdXBkYXRlRHJvcHBhYmxlU2Nyb2xsID0gYXJncyA9PiAoe1xuICB0eXBlOiAnVVBEQVRFX0RST1BQQUJMRV9TQ1JPTEwnLFxuICBwYXlsb2FkOiBhcmdzXG59KTtcbmNvbnN0IHVwZGF0ZURyb3BwYWJsZUlzRW5hYmxlZCA9IGFyZ3MgPT4gKHtcbiAgdHlwZTogJ1VQREFURV9EUk9QUEFCTEVfSVNfRU5BQkxFRCcsXG4gIHBheWxvYWQ6IGFyZ3Ncbn0pO1xuY29uc3QgdXBkYXRlRHJvcHBhYmxlSXNDb21iaW5lRW5hYmxlZCA9IGFyZ3MgPT4gKHtcbiAgdHlwZTogJ1VQREFURV9EUk9QUEFCTEVfSVNfQ09NQklORV9FTkFCTEVEJyxcbiAgcGF5bG9hZDogYXJnc1xufSk7XG5jb25zdCBtb3ZlID0gYXJncyA9PiAoe1xuICB0eXBlOiAnTU9WRScsXG4gIHBheWxvYWQ6IGFyZ3Ncbn0pO1xuY29uc3QgbW92ZUJ5V2luZG93U2Nyb2xsID0gYXJncyA9PiAoe1xuICB0eXBlOiAnTU9WRV9CWV9XSU5ET1dfU0NST0xMJyxcbiAgcGF5bG9hZDogYXJnc1xufSk7XG5jb25zdCB1cGRhdGVWaWV3cG9ydE1heFNjcm9sbCA9IGFyZ3MgPT4gKHtcbiAgdHlwZTogJ1VQREFURV9WSUVXUE9SVF9NQVhfU0NST0xMJyxcbiAgcGF5bG9hZDogYXJnc1xufSk7XG5jb25zdCBtb3ZlVXAgPSAoKSA9PiAoe1xuICB0eXBlOiAnTU9WRV9VUCcsXG4gIHBheWxvYWQ6IG51bGxcbn0pO1xuY29uc3QgbW92ZURvd24gPSAoKSA9PiAoe1xuICB0eXBlOiAnTU9WRV9ET1dOJyxcbiAgcGF5bG9hZDogbnVsbFxufSk7XG5jb25zdCBtb3ZlUmlnaHQgPSAoKSA9PiAoe1xuICB0eXBlOiAnTU9WRV9SSUdIVCcsXG4gIHBheWxvYWQ6IG51bGxcbn0pO1xuY29uc3QgbW92ZUxlZnQgPSAoKSA9PiAoe1xuICB0eXBlOiAnTU9WRV9MRUZUJyxcbiAgcGF5bG9hZDogbnVsbFxufSk7XG5jb25zdCBmbHVzaCA9ICgpID0+ICh7XG4gIHR5cGU6ICdGTFVTSCcsXG4gIHBheWxvYWQ6IG51bGxcbn0pO1xuY29uc3QgYW5pbWF0ZURyb3AgPSBhcmdzID0+ICh7XG4gIHR5cGU6ICdEUk9QX0FOSU1BVEUnLFxuICBwYXlsb2FkOiBhcmdzXG59KTtcbmNvbnN0IGNvbXBsZXRlRHJvcCA9IGFyZ3MgPT4gKHtcbiAgdHlwZTogJ0RST1BfQ09NUExFVEUnLFxuICBwYXlsb2FkOiBhcmdzXG59KTtcbmNvbnN0IGRyb3AkMSA9IGFyZ3MgPT4gKHtcbiAgdHlwZTogJ0RST1AnLFxuICBwYXlsb2FkOiBhcmdzXG59KTtcbmNvbnN0IGRyb3BQZW5kaW5nID0gYXJncyA9PiAoe1xuICB0eXBlOiAnRFJPUF9QRU5ESU5HJyxcbiAgcGF5bG9hZDogYXJnc1xufSk7XG5jb25zdCBkcm9wQW5pbWF0aW9uRmluaXNoZWQgPSAoKSA9PiAoe1xuICB0eXBlOiAnRFJPUF9BTklNQVRJT05fRklOSVNIRUQnLFxuICBwYXlsb2FkOiBudWxsXG59KTtcblxuZnVuY3Rpb24gY2hlY2tJbmRleGVzKGluc2lkZURlc3RpbmF0aW9uKSB7XG4gIGlmIChpbnNpZGVEZXN0aW5hdGlvbi5sZW5ndGggPD0gMSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBpbmRleGVzID0gaW5zaWRlRGVzdGluYXRpb24ubWFwKGQgPT4gZC5kZXNjcmlwdG9yLmluZGV4KTtcbiAgY29uc3QgZXJyb3JzID0ge307XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgaW5kZXhlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBpbmRleGVzW2ldO1xuICAgIGNvbnN0IHByZXZpb3VzID0gaW5kZXhlc1tpIC0gMV07XG5cbiAgICBpZiAoY3VycmVudCAhPT0gcHJldmlvdXMgKyAxKSB7XG4gICAgICBlcnJvcnNbY3VycmVudF0gPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoIU9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGZvcm1hdHRlZCA9IGluZGV4ZXMubWFwKGluZGV4ID0+IHtcbiAgICBjb25zdCBoYXNFcnJvciA9IEJvb2xlYW4oZXJyb3JzW2luZGV4XSk7XG4gICAgcmV0dXJuIGhhc0Vycm9yID8gYFvwn5SlJHtpbmRleH1dYCA6IGAke2luZGV4fWA7XG4gIH0pLmpvaW4oJywgJyk7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoYFxuICAgIERldGVjdGVkIG5vbi1jb25zZWN1dGl2ZSA8RHJhZ2dhYmxlIC8+IGluZGV4ZXMuXG5cbiAgICAoVGhpcyBjYW4gY2F1c2UgdW5leHBlY3RlZCBidWdzKVxuXG4gICAgJHtmb3JtYXR0ZWR9XG4gIGApIDogdm9pZCAwO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVEaW1lbnNpb25zKGNyaXRpY2FsLCBkaW1lbnNpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uc3QgaW5zaWRlRGVzdGluYXRpb24gPSBnZXREcmFnZ2FibGVzSW5zaWRlRHJvcHBhYmxlKGNyaXRpY2FsLmRyb3BwYWJsZS5pZCwgZGltZW5zaW9ucy5kcmFnZ2FibGVzKTtcbiAgICBjaGVja0luZGV4ZXMoaW5zaWRlRGVzdGluYXRpb24pO1xuICB9XG59XG5cbnZhciBsaWZ0ID0gKG1hcnNoYWwgPT4gX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgZ2V0U3RhdGUsXG4gICAgZGlzcGF0Y2hcbiAgfSA9IF9yZWY7XG4gIHJldHVybiBuZXh0ID0+IGFjdGlvbiA9PiB7XG4gICAgaWYgKGFjdGlvbi50eXBlICE9PSAnTElGVCcpIHtcbiAgICAgIG5leHQoYWN0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgaWQsXG4gICAgICBjbGllbnRTZWxlY3Rpb24sXG4gICAgICBtb3ZlbWVudE1vZGVcbiAgICB9ID0gYWN0aW9uLnBheWxvYWQ7XG4gICAgY29uc3QgaW5pdGlhbCA9IGdldFN0YXRlKCk7XG5cbiAgICBpZiAoaW5pdGlhbC5waGFzZSA9PT0gJ0RST1BfQU5JTUFUSU5HJykge1xuICAgICAgZGlzcGF0Y2goY29tcGxldGVEcm9wKHtcbiAgICAgICAgY29tcGxldGVkOiBpbml0aWFsLmNvbXBsZXRlZFxuICAgICAgfSkpO1xuICAgIH1cbiAgICAhKGdldFN0YXRlKCkucGhhc2UgPT09ICdJRExFJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdVbmV4cGVjdGVkIHBoYXNlIHRvIHN0YXJ0IGEgZHJhZycpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcblxuICAgIGRpc3BhdGNoKGZsdXNoKCkpO1xuXG4gICAgZGlzcGF0Y2goYmVmb3JlSW5pdGlhbENhcHR1cmUoe1xuICAgICAgZHJhZ2dhYmxlSWQ6IGlkLFxuICAgICAgbW92ZW1lbnRNb2RlXG4gICAgfSkpO1xuXG4gICAgY29uc3Qgc2Nyb2xsT3B0aW9ucyA9IHtcbiAgICAgIHNob3VsZFB1Ymxpc2hJbW1lZGlhdGVseTogbW92ZW1lbnRNb2RlID09PSAnU05BUCdcbiAgICB9O1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBkcmFnZ2FibGVJZDogaWQsXG4gICAgICBzY3JvbGxPcHRpb25zXG4gICAgfTtcbiAgICBjb25zdCB7XG4gICAgICBjcml0aWNhbCxcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICB2aWV3cG9ydFxuICAgIH0gPSBtYXJzaGFsLnN0YXJ0UHVibGlzaGluZyhyZXF1ZXN0KTtcbiAgICB2YWxpZGF0ZURpbWVuc2lvbnMoY3JpdGljYWwsIGRpbWVuc2lvbnMpO1xuXG4gICAgZGlzcGF0Y2goaW5pdGlhbFB1Ymxpc2goe1xuICAgICAgY3JpdGljYWwsXG4gICAgICBkaW1lbnNpb25zLFxuICAgICAgY2xpZW50U2VsZWN0aW9uLFxuICAgICAgbW92ZW1lbnRNb2RlLFxuICAgICAgdmlld3BvcnRcbiAgICB9KSk7XG4gIH07XG59KTtcblxudmFyIHN0eWxlID0gKG1hcnNoYWwgPT4gKCkgPT4gbmV4dCA9PiBhY3Rpb24gPT4ge1xuICBpZiAoYWN0aW9uLnR5cGUgPT09ICdJTklUSUFMX1BVQkxJU0gnKSB7XG4gICAgbWFyc2hhbC5kcmFnZ2luZygpO1xuICB9XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gJ0RST1BfQU5JTUFURScpIHtcbiAgICBtYXJzaGFsLmRyb3BwaW5nKGFjdGlvbi5wYXlsb2FkLmNvbXBsZXRlZC5yZXN1bHQucmVhc29uKTtcbiAgfVxuXG4gIGlmIChhY3Rpb24udHlwZSA9PT0gJ0ZMVVNIJyB8fCBhY3Rpb24udHlwZSA9PT0gJ0RST1BfQ09NUExFVEUnKSB7XG4gICAgbWFyc2hhbC5yZXN0aW5nKCk7XG4gIH1cbiAgbmV4dChhY3Rpb24pO1xufSk7XG5cbmNvbnN0IGN1cnZlcyA9IHtcbiAgb3V0T2ZUaGVXYXk6ICdjdWJpYy1iZXppZXIoMC4yLCAwLCAwLCAxKScsXG4gIGRyb3A6ICdjdWJpYy1iZXppZXIoLjIsMSwuMSwxKSdcbn07XG5jb25zdCBjb21iaW5lID0ge1xuICBvcGFjaXR5OiB7XG4gICAgZHJvcDogMCxcbiAgICBjb21iaW5pbmc6IDAuN1xuICB9LFxuICBzY2FsZToge1xuICAgIGRyb3A6IDAuNzVcbiAgfVxufTtcbmNvbnN0IHRpbWluZ3MgPSB7XG4gIG91dE9mVGhlV2F5OiAwLjIsXG4gIG1pbkRyb3BUaW1lOiAwLjMzLFxuICBtYXhEcm9wVGltZTogMC41NVxufTtcblxuY29uc3Qgb3V0T2ZUaGVXYXlUaW1pbmcgPSBgJHt0aW1pbmdzLm91dE9mVGhlV2F5fXMgJHtjdXJ2ZXMub3V0T2ZUaGVXYXl9YDtcbmNvbnN0IHRyYW5zaXRpb25zID0ge1xuICBmbHVpZDogYG9wYWNpdHkgJHtvdXRPZlRoZVdheVRpbWluZ31gLFxuICBzbmFwOiBgdHJhbnNmb3JtICR7b3V0T2ZUaGVXYXlUaW1pbmd9LCBvcGFjaXR5ICR7b3V0T2ZUaGVXYXlUaW1pbmd9YCxcbiAgZHJvcDogZHVyYXRpb24gPT4ge1xuICAgIGNvbnN0IHRpbWluZyA9IGAke2R1cmF0aW9ufXMgJHtjdXJ2ZXMuZHJvcH1gO1xuICAgIHJldHVybiBgdHJhbnNmb3JtICR7dGltaW5nfSwgb3BhY2l0eSAke3RpbWluZ31gO1xuICB9LFxuICBvdXRPZlRoZVdheTogYHRyYW5zZm9ybSAke291dE9mVGhlV2F5VGltaW5nfWAsXG4gIHBsYWNlaG9sZGVyOiBgaGVpZ2h0ICR7b3V0T2ZUaGVXYXlUaW1pbmd9LCB3aWR0aCAke291dE9mVGhlV2F5VGltaW5nfSwgbWFyZ2luICR7b3V0T2ZUaGVXYXlUaW1pbmd9YFxufTtcbmNvbnN0IG1vdmVUbyA9IG9mZnNldCA9PiBpc0VxdWFsJDEob2Zmc2V0LCBvcmlnaW4pID8gdW5kZWZpbmVkIDogYHRyYW5zbGF0ZSgke29mZnNldC54fXB4LCAke29mZnNldC55fXB4KWA7XG5jb25zdCB0cmFuc2Zvcm1zID0ge1xuICBtb3ZlVG8sXG4gIGRyb3A6IChvZmZzZXQsIGlzQ29tYmluaW5nKSA9PiB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gbW92ZVRvKG9mZnNldCk7XG4gICAgaWYgKCF0cmFuc2xhdGUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFpc0NvbWJpbmluZykge1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7dHJhbnNsYXRlfSBzY2FsZSgke2NvbWJpbmUuc2NhbGUuZHJvcH0pYDtcbiAgfVxufTtcblxuY29uc3Qge1xuICBtaW5Ecm9wVGltZSxcbiAgbWF4RHJvcFRpbWVcbn0gPSB0aW1pbmdzO1xuY29uc3QgZHJvcFRpbWVSYW5nZSA9IG1heERyb3BUaW1lIC0gbWluRHJvcFRpbWU7XG5jb25zdCBtYXhEcm9wVGltZUF0RGlzdGFuY2UgPSAxNTAwO1xuY29uc3QgY2FuY2VsRHJvcE1vZGlmaWVyID0gMC42O1xudmFyIGdldERyb3BEdXJhdGlvbiA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBjdXJyZW50LFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIHJlYXNvblxuICB9ID0gX3JlZjtcbiAgY29uc3QgZGlzdGFuY2UkMSA9IGRpc3RhbmNlKGN1cnJlbnQsIGRlc3RpbmF0aW9uKTtcbiAgaWYgKGRpc3RhbmNlJDEgPD0gMCkge1xuICAgIHJldHVybiBtaW5Ecm9wVGltZTtcbiAgfVxuICBpZiAoZGlzdGFuY2UkMSA+PSBtYXhEcm9wVGltZUF0RGlzdGFuY2UpIHtcbiAgICByZXR1cm4gbWF4RHJvcFRpbWU7XG4gIH1cblxuICBjb25zdCBwZXJjZW50YWdlID0gZGlzdGFuY2UkMSAvIG1heERyb3BUaW1lQXREaXN0YW5jZTtcbiAgY29uc3QgZHVyYXRpb24gPSBtaW5Ecm9wVGltZSArIGRyb3BUaW1lUmFuZ2UgKiBwZXJjZW50YWdlO1xuICBjb25zdCB3aXRoRHVyYXRpb24gPSByZWFzb24gPT09ICdDQU5DRUwnID8gZHVyYXRpb24gKiBjYW5jZWxEcm9wTW9kaWZpZXIgOiBkdXJhdGlvbjtcbiAgcmV0dXJuIE51bWJlcih3aXRoRHVyYXRpb24udG9GaXhlZCgyKSk7XG59KTtcblxudmFyIGdldE5ld0hvbWVDbGllbnRPZmZzZXQgPSAoX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgaW1wYWN0LFxuICAgIGRyYWdnYWJsZSxcbiAgICBkaW1lbnNpb25zLFxuICAgIHZpZXdwb3J0LFxuICAgIGFmdGVyQ3JpdGljYWxcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHtcbiAgICBkcmFnZ2FibGVzLFxuICAgIGRyb3BwYWJsZXNcbiAgfSA9IGRpbWVuc2lvbnM7XG4gIGNvbnN0IGRyb3BwYWJsZUlkID0gd2hhdElzRHJhZ2dlZE92ZXIoaW1wYWN0KTtcbiAgY29uc3QgZGVzdGluYXRpb24gPSBkcm9wcGFibGVJZCA/IGRyb3BwYWJsZXNbZHJvcHBhYmxlSWRdIDogbnVsbDtcbiAgY29uc3QgaG9tZSA9IGRyb3BwYWJsZXNbZHJhZ2dhYmxlLmRlc2NyaXB0b3IuZHJvcHBhYmxlSWRdO1xuICBjb25zdCBuZXdDbGllbnRDZW50ZXIgPSBnZXRDbGllbnRCb3JkZXJCb3hDZW50ZXIoe1xuICAgIGltcGFjdCxcbiAgICBkcmFnZ2FibGUsXG4gICAgZHJhZ2dhYmxlcyxcbiAgICBhZnRlckNyaXRpY2FsLFxuICAgIGRyb3BwYWJsZTogZGVzdGluYXRpb24gfHwgaG9tZSxcbiAgICB2aWV3cG9ydFxuICB9KTtcbiAgY29uc3Qgb2Zmc2V0ID0gc3VidHJhY3QobmV3Q2xpZW50Q2VudGVyLCBkcmFnZ2FibGUuY2xpZW50LmJvcmRlckJveC5jZW50ZXIpO1xuICByZXR1cm4gb2Zmc2V0O1xufSk7XG5cbnZhciBnZXREcm9wSW1wYWN0ID0gKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGRyYWdnYWJsZXMsXG4gICAgcmVhc29uLFxuICAgIGxhc3RJbXBhY3QsXG4gICAgaG9tZSxcbiAgICB2aWV3cG9ydCxcbiAgICBvbkxpZnRJbXBhY3RcbiAgfSA9IF9yZWY7XG4gIGlmICghbGFzdEltcGFjdC5hdCB8fCByZWFzb24gIT09ICdEUk9QJykge1xuXG4gICAgY29uc3QgcmVjb21wdXRlZEhvbWVJbXBhY3QgPSByZWNvbXB1dGUoe1xuICAgICAgZHJhZ2dhYmxlcyxcbiAgICAgIGltcGFjdDogb25MaWZ0SW1wYWN0LFxuICAgICAgZGVzdGluYXRpb246IGhvbWUsXG4gICAgICB2aWV3cG9ydCxcbiAgICAgIGZvcmNlU2hvdWxkQW5pbWF0ZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBpbXBhY3Q6IHJlY29tcHV0ZWRIb21lSW1wYWN0LFxuICAgICAgZGlkRHJvcEluc2lkZURyb3BwYWJsZTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgaWYgKGxhc3RJbXBhY3QuYXQudHlwZSA9PT0gJ1JFT1JERVInKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGltcGFjdDogbGFzdEltcGFjdCxcbiAgICAgIGRpZERyb3BJbnNpZGVEcm9wcGFibGU6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgd2l0aG91dE1vdmVtZW50ID0ge1xuICAgIC4uLmxhc3RJbXBhY3QsXG4gICAgZGlzcGxhY2VkOiBlbXB0eUdyb3Vwc1xuICB9O1xuICByZXR1cm4ge1xuICAgIGltcGFjdDogd2l0aG91dE1vdmVtZW50LFxuICAgIGRpZERyb3BJbnNpZGVEcm9wcGFibGU6IHRydWVcbiAgfTtcbn0pO1xuXG5jb25zdCBkcm9wTWlkZGxld2FyZSA9IF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGdldFN0YXRlLFxuICAgIGRpc3BhdGNoXG4gIH0gPSBfcmVmO1xuICByZXR1cm4gbmV4dCA9PiBhY3Rpb24gPT4ge1xuICAgIGlmIChhY3Rpb24udHlwZSAhPT0gJ0RST1AnKSB7XG4gICAgICBuZXh0KGFjdGlvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXRlID0gZ2V0U3RhdGUoKTtcbiAgICBjb25zdCByZWFzb24gPSBhY3Rpb24ucGF5bG9hZC5yZWFzb247XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdDT0xMRUNUSU5HJykge1xuICAgICAgZGlzcGF0Y2goZHJvcFBlbmRpbmcoe1xuICAgICAgICByZWFzb25cbiAgICAgIH0pKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdJRExFJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzV2FpdGluZ0ZvckRyb3AgPSBzdGF0ZS5waGFzZSA9PT0gJ0RST1BfUEVORElORycgJiYgc3RhdGUuaXNXYWl0aW5nO1xuICAgICEhaXNXYWl0aW5nRm9yRHJvcCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0EgRFJPUCBhY3Rpb24gb2NjdXJyZWQgd2hpbGUgRFJPUF9QRU5ESU5HIGFuZCBzdGlsbCB3YWl0aW5nJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgICEoc3RhdGUucGhhc2UgPT09ICdEUkFHR0lORycgfHwgc3RhdGUucGhhc2UgPT09ICdEUk9QX1BFTkRJTkcnKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgYENhbm5vdCBkcm9wIGluIHBoYXNlOiAke3N0YXRlLnBoYXNlfWApIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcblxuICAgIGNvbnN0IGNyaXRpY2FsID0gc3RhdGUuY3JpdGljYWw7XG4gICAgY29uc3QgZGltZW5zaW9ucyA9IHN0YXRlLmRpbWVuc2lvbnM7XG4gICAgY29uc3QgZHJhZ2dhYmxlID0gZGltZW5zaW9ucy5kcmFnZ2FibGVzW3N0YXRlLmNyaXRpY2FsLmRyYWdnYWJsZS5pZF07XG5cbiAgICBjb25zdCB7XG4gICAgICBpbXBhY3QsXG4gICAgICBkaWREcm9wSW5zaWRlRHJvcHBhYmxlXG4gICAgfSA9IGdldERyb3BJbXBhY3Qoe1xuICAgICAgcmVhc29uLFxuICAgICAgbGFzdEltcGFjdDogc3RhdGUuaW1wYWN0LFxuICAgICAgYWZ0ZXJDcml0aWNhbDogc3RhdGUuYWZ0ZXJDcml0aWNhbCxcbiAgICAgIG9uTGlmdEltcGFjdDogc3RhdGUub25MaWZ0SW1wYWN0LFxuICAgICAgaG9tZTogc3RhdGUuZGltZW5zaW9ucy5kcm9wcGFibGVzW3N0YXRlLmNyaXRpY2FsLmRyb3BwYWJsZS5pZF0sXG4gICAgICB2aWV3cG9ydDogc3RhdGUudmlld3BvcnQsXG4gICAgICBkcmFnZ2FibGVzOiBzdGF0ZS5kaW1lbnNpb25zLmRyYWdnYWJsZXNcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gZGlkRHJvcEluc2lkZURyb3BwYWJsZSA/IHRyeUdldERlc3RpbmF0aW9uKGltcGFjdCkgOiBudWxsO1xuICAgIGNvbnN0IGNvbWJpbmUgPSBkaWREcm9wSW5zaWRlRHJvcHBhYmxlID8gdHJ5R2V0Q29tYmluZShpbXBhY3QpIDogbnVsbDtcbiAgICBjb25zdCBzb3VyY2UgPSB7XG4gICAgICBpbmRleDogY3JpdGljYWwuZHJhZ2dhYmxlLmluZGV4LFxuICAgICAgZHJvcHBhYmxlSWQ6IGNyaXRpY2FsLmRyb3BwYWJsZS5pZFxuICAgIH07XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgZHJhZ2dhYmxlSWQ6IGRyYWdnYWJsZS5kZXNjcmlwdG9yLmlkLFxuICAgICAgdHlwZTogZHJhZ2dhYmxlLmRlc2NyaXB0b3IudHlwZSxcbiAgICAgIHNvdXJjZSxcbiAgICAgIHJlYXNvbixcbiAgICAgIG1vZGU6IHN0YXRlLm1vdmVtZW50TW9kZSxcbiAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgY29tYmluZVxuICAgIH07XG4gICAgY29uc3QgbmV3SG9tZUNsaWVudE9mZnNldCA9IGdldE5ld0hvbWVDbGllbnRPZmZzZXQoe1xuICAgICAgaW1wYWN0LFxuICAgICAgZHJhZ2dhYmxlLFxuICAgICAgZGltZW5zaW9ucyxcbiAgICAgIHZpZXdwb3J0OiBzdGF0ZS52aWV3cG9ydCxcbiAgICAgIGFmdGVyQ3JpdGljYWw6IHN0YXRlLmFmdGVyQ3JpdGljYWxcbiAgICB9KTtcbiAgICBjb25zdCBjb21wbGV0ZWQgPSB7XG4gICAgICBjcml0aWNhbDogc3RhdGUuY3JpdGljYWwsXG4gICAgICBhZnRlckNyaXRpY2FsOiBzdGF0ZS5hZnRlckNyaXRpY2FsLFxuICAgICAgcmVzdWx0LFxuICAgICAgaW1wYWN0XG4gICAgfTtcbiAgICBjb25zdCBpc0FuaW1hdGlvblJlcXVpcmVkID1cbiAgICAhaXNFcXVhbCQxKHN0YXRlLmN1cnJlbnQuY2xpZW50Lm9mZnNldCwgbmV3SG9tZUNsaWVudE9mZnNldCkgfHxcbiAgICBCb29sZWFuKHJlc3VsdC5jb21iaW5lKTtcbiAgICBpZiAoIWlzQW5pbWF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIGRpc3BhdGNoKGNvbXBsZXRlRHJvcCh7XG4gICAgICAgIGNvbXBsZXRlZFxuICAgICAgfSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkcm9wRHVyYXRpb24gPSBnZXREcm9wRHVyYXRpb24oe1xuICAgICAgY3VycmVudDogc3RhdGUuY3VycmVudC5jbGllbnQub2Zmc2V0LFxuICAgICAgZGVzdGluYXRpb246IG5ld0hvbWVDbGllbnRPZmZzZXQsXG4gICAgICByZWFzb25cbiAgICB9KTtcbiAgICBjb25zdCBhcmdzID0ge1xuICAgICAgbmV3SG9tZUNsaWVudE9mZnNldCxcbiAgICAgIGRyb3BEdXJhdGlvbixcbiAgICAgIGNvbXBsZXRlZFxuICAgIH07XG4gICAgZGlzcGF0Y2goYW5pbWF0ZURyb3AoYXJncykpO1xuICB9O1xufTtcbnZhciBkcm9wID0gZHJvcE1pZGRsZXdhcmU7XG5cbnZhciBnZXRXaW5kb3dTY3JvbGwgPSAoKCkgPT4gKHtcbiAgeDogd2luZG93LnBhZ2VYT2Zmc2V0LFxuICB5OiB3aW5kb3cucGFnZVlPZmZzZXRcbn0pKTtcblxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmluZGluZyh1cGRhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBldmVudE5hbWU6ICdzY3JvbGwnLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBjYXB0dXJlOiBmYWxzZVxuICAgIH0sXG4gICAgZm46IGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC50YXJnZXQgIT09IHdpbmRvdyAmJiBldmVudC50YXJnZXQgIT09IHdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gIH07XG59XG5mdW5jdGlvbiBnZXRTY3JvbGxMaXN0ZW5lcihfcmVmKSB7XG4gIGxldCB7XG4gICAgb25XaW5kb3dTY3JvbGxcbiAgfSA9IF9yZWY7XG4gIGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbCgpIHtcbiAgICBvbldpbmRvd1Njcm9sbChnZXRXaW5kb3dTY3JvbGwoKSk7XG4gIH1cbiAgY29uc3Qgc2NoZWR1bGVkID0gcmFmU2NoZF9fZGVmYXVsdFtcImRlZmF1bHRcIl0odXBkYXRlU2Nyb2xsKTtcbiAgY29uc3QgYmluZGluZyA9IGdldFdpbmRvd1Njcm9sbEJpbmRpbmcoc2NoZWR1bGVkKTtcbiAgbGV0IHVuYmluZCA9IG5vb3AkMjtcbiAgZnVuY3Rpb24gaXNBY3RpdmUoKSB7XG4gICAgcmV0dXJuIHVuYmluZCAhPT0gbm9vcCQyO1xuICB9XG4gIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgICEhaXNBY3RpdmUoKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0Nhbm5vdCBzdGFydCBzY3JvbGwgbGlzdGVuZXIgd2hlbiBhbHJlYWR5IGFjdGl2ZScpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICB1bmJpbmQgPSBiaW5kRXZlbnRzKHdpbmRvdywgW2JpbmRpbmddKTtcbiAgfVxuICBmdW5jdGlvbiBzdG9wKCkge1xuICAgICFpc0FjdGl2ZSgpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IHN0b3Agc2Nyb2xsIGxpc3RlbmVyIHdoZW4gbm90IGFjdGl2ZScpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBzY2hlZHVsZWQuY2FuY2VsKCk7XG4gICAgdW5iaW5kKCk7XG4gICAgdW5iaW5kID0gbm9vcCQyO1xuICB9XG4gIHJldHVybiB7XG4gICAgc3RhcnQsXG4gICAgc3RvcCxcbiAgICBpc0FjdGl2ZVxuICB9O1xufVxuXG5jb25zdCBzaG91bGRFbmQgPSBhY3Rpb24gPT4gYWN0aW9uLnR5cGUgPT09ICdEUk9QX0NPTVBMRVRFJyB8fCBhY3Rpb24udHlwZSA9PT0gJ0RST1BfQU5JTUFURScgfHwgYWN0aW9uLnR5cGUgPT09ICdGTFVTSCc7XG5jb25zdCBzY3JvbGxMaXN0ZW5lciA9IHN0b3JlID0+IHtcbiAgY29uc3QgbGlzdGVuZXIgPSBnZXRTY3JvbGxMaXN0ZW5lcih7XG4gICAgb25XaW5kb3dTY3JvbGw6IG5ld1Njcm9sbCA9PiB7XG4gICAgICBzdG9yZS5kaXNwYXRjaChtb3ZlQnlXaW5kb3dTY3JvbGwoe1xuICAgICAgICBuZXdTY3JvbGxcbiAgICAgIH0pKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbmV4dCA9PiBhY3Rpb24gPT4ge1xuICAgIGlmICghbGlzdGVuZXIuaXNBY3RpdmUoKSAmJiBhY3Rpb24udHlwZSA9PT0gJ0lOSVRJQUxfUFVCTElTSCcpIHtcbiAgICAgIGxpc3RlbmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIGlmIChsaXN0ZW5lci5pc0FjdGl2ZSgpICYmIHNob3VsZEVuZChhY3Rpb24pKSB7XG4gICAgICBsaXN0ZW5lci5zdG9wKCk7XG4gICAgfVxuICAgIG5leHQoYWN0aW9uKTtcbiAgfTtcbn07XG52YXIgc2Nyb2xsTGlzdGVuZXIkMSA9IHNjcm9sbExpc3RlbmVyO1xuXG52YXIgZ2V0RXhwaXJpbmdBbm5vdW5jZSA9IChhbm5vdW5jZSA9PiB7XG4gIGxldCB3YXNDYWxsZWQgPSBmYWxzZTtcbiAgbGV0IGlzRXhwaXJlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlzRXhwaXJlZCA9IHRydWU7XG4gIH0pO1xuICBjb25zdCByZXN1bHQgPSBtZXNzYWdlID0+IHtcbiAgICBpZiAod2FzQ2FsbGVkKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKCdBbm5vdW5jZW1lbnQgYWxyZWFkeSBtYWRlLiBOb3QgbWFraW5nIGEgc2Vjb25kIGFubm91bmNlbWVudCcpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNFeHBpcmVkKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKGBcbiAgICAgICAgQW5ub3VuY2VtZW50cyBjYW5ub3QgYmUgbWFkZSBhc3luY2hyb25vdXNseS5cbiAgICAgICAgRGVmYXVsdCBtZXNzYWdlIGhhcyBhbHJlYWR5IGJlZW4gYW5ub3VuY2VkLlxuICAgICAgYCkgOiB2b2lkIDA7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdhc0NhbGxlZCA9IHRydWU7XG4gICAgYW5ub3VuY2UobWVzc2FnZSk7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gIH07XG5cbiAgcmVzdWx0Lndhc0NhbGxlZCA9ICgpID0+IHdhc0NhbGxlZDtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG52YXIgZ2V0QXN5bmNNYXJzaGFsID0gKCgpID0+IHtcbiAgY29uc3QgZW50cmllcyA9IFtdO1xuICBjb25zdCBleGVjdXRlID0gdGltZXJJZCA9PiB7XG4gICAgY29uc3QgaW5kZXggPSBlbnRyaWVzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0udGltZXJJZCA9PT0gdGltZXJJZCk7XG4gICAgIShpbmRleCAhPT0gLTEpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ291bGQgbm90IGZpbmQgdGltZXInKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgY29uc3QgW2VudHJ5XSA9IGVudHJpZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBlbnRyeS5jYWxsYmFjaygpO1xuICB9O1xuICBjb25zdCBhZGQgPSBmbiA9PiB7XG4gICAgY29uc3QgdGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4gZXhlY3V0ZSh0aW1lcklkKSk7XG4gICAgY29uc3QgZW50cnkgPSB7XG4gICAgICB0aW1lcklkLFxuICAgICAgY2FsbGJhY2s6IGZuXG4gICAgfTtcbiAgICBlbnRyaWVzLnB1c2goZW50cnkpO1xuICB9O1xuICBjb25zdCBmbHVzaCA9ICgpID0+IHtcbiAgICBpZiAoIWVudHJpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNoYWxsb3cgPSBbLi4uZW50cmllc107XG4gICAgZW50cmllcy5sZW5ndGggPSAwO1xuICAgIHNoYWxsb3cuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoZW50cnkudGltZXJJZCk7XG4gICAgICBlbnRyeS5jYWxsYmFjaygpO1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGFkZCxcbiAgICBmbHVzaFxuICB9O1xufSk7XG5cbmNvbnN0IGFyZUxvY2F0aW9uc0VxdWFsID0gKGZpcnN0LCBzZWNvbmQpID0+IHtcbiAgaWYgKGZpcnN0ID09IG51bGwgJiYgc2Vjb25kID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChmaXJzdCA9PSBudWxsIHx8IHNlY29uZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZpcnN0LmRyb3BwYWJsZUlkID09PSBzZWNvbmQuZHJvcHBhYmxlSWQgJiYgZmlyc3QuaW5kZXggPT09IHNlY29uZC5pbmRleDtcbn07XG5jb25zdCBpc0NvbWJpbmVFcXVhbCA9IChmaXJzdCwgc2Vjb25kKSA9PiB7XG4gIGlmIChmaXJzdCA9PSBudWxsICYmIHNlY29uZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoZmlyc3QgPT0gbnVsbCB8fCBzZWNvbmQgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZmlyc3QuZHJhZ2dhYmxlSWQgPT09IHNlY29uZC5kcmFnZ2FibGVJZCAmJiBmaXJzdC5kcm9wcGFibGVJZCA9PT0gc2Vjb25kLmRyb3BwYWJsZUlkO1xufTtcbmNvbnN0IGlzQ3JpdGljYWxFcXVhbCA9IChmaXJzdCwgc2Vjb25kKSA9PiB7XG4gIGlmIChmaXJzdCA9PT0gc2Vjb25kKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgaXNEcmFnZ2FibGVFcXVhbCA9IGZpcnN0LmRyYWdnYWJsZS5pZCA9PT0gc2Vjb25kLmRyYWdnYWJsZS5pZCAmJiBmaXJzdC5kcmFnZ2FibGUuZHJvcHBhYmxlSWQgPT09IHNlY29uZC5kcmFnZ2FibGUuZHJvcHBhYmxlSWQgJiYgZmlyc3QuZHJhZ2dhYmxlLnR5cGUgPT09IHNlY29uZC5kcmFnZ2FibGUudHlwZSAmJiBmaXJzdC5kcmFnZ2FibGUuaW5kZXggPT09IHNlY29uZC5kcmFnZ2FibGUuaW5kZXg7XG4gIGNvbnN0IGlzRHJvcHBhYmxlRXF1YWwgPSBmaXJzdC5kcm9wcGFibGUuaWQgPT09IHNlY29uZC5kcm9wcGFibGUuaWQgJiYgZmlyc3QuZHJvcHBhYmxlLnR5cGUgPT09IHNlY29uZC5kcm9wcGFibGUudHlwZTtcbiAgcmV0dXJuIGlzRHJhZ2dhYmxlRXF1YWwgJiYgaXNEcm9wcGFibGVFcXVhbDtcbn07XG5cbmNvbnN0IHdpdGhUaW1pbmdzID0gKGtleSwgZm4pID0+IHtcbiAgc3RhcnQoKTtcbiAgZm4oKTtcbiAgZmluaXNoKCk7XG59O1xuY29uc3QgZ2V0RHJhZ1N0YXJ0ID0gKGNyaXRpY2FsLCBtb2RlKSA9PiAoe1xuICBkcmFnZ2FibGVJZDogY3JpdGljYWwuZHJhZ2dhYmxlLmlkLFxuICB0eXBlOiBjcml0aWNhbC5kcm9wcGFibGUudHlwZSxcbiAgc291cmNlOiB7XG4gICAgZHJvcHBhYmxlSWQ6IGNyaXRpY2FsLmRyb3BwYWJsZS5pZCxcbiAgICBpbmRleDogY3JpdGljYWwuZHJhZ2dhYmxlLmluZGV4XG4gIH0sXG4gIG1vZGVcbn0pO1xuZnVuY3Rpb24gZXhlY3V0ZShyZXNwb25kZXIsIGRhdGEsIGFubm91bmNlLFxuZ2V0RGVmYXVsdE1lc3NhZ2UpIHtcbiAgaWYgKCFyZXNwb25kZXIpIHtcbiAgICBhbm5vdW5jZShnZXREZWZhdWx0TWVzc2FnZShkYXRhKSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHdpbGxFeHBpcmUgPSBnZXRFeHBpcmluZ0Fubm91bmNlKGFubm91bmNlKTtcbiAgY29uc3QgcHJvdmlkZWQgPSB7XG4gICAgYW5ub3VuY2U6IHdpbGxFeHBpcmVcbiAgfTtcblxuICByZXNwb25kZXIoZGF0YSwgcHJvdmlkZWQpO1xuICBpZiAoIXdpbGxFeHBpcmUud2FzQ2FsbGVkKCkpIHtcbiAgICBhbm5vdW5jZShnZXREZWZhdWx0TWVzc2FnZShkYXRhKSk7XG4gIH1cbn1cbnZhciBnZXRQdWJsaXNoZXIgPSAoKGdldFJlc3BvbmRlcnMsIGFubm91bmNlKSA9PiB7XG4gIGNvbnN0IGFzeW5jTWFyc2hhbCA9IGdldEFzeW5jTWFyc2hhbCgpO1xuICBsZXQgZHJhZ2dpbmcgPSBudWxsO1xuICBjb25zdCBiZWZvcmVDYXB0dXJlID0gKGRyYWdnYWJsZUlkLCBtb2RlKSA9PiB7XG4gICAgISFkcmFnZ2luZyA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0Nhbm5vdCBmaXJlIG9uQmVmb3JlQ2FwdHVyZSBhcyBhIGRyYWcgc3RhcnQgaGFzIGFscmVhZHkgYmVlbiBwdWJsaXNoZWQnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgd2l0aFRpbWluZ3MoJ29uQmVmb3JlQ2FwdHVyZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGZuID0gZ2V0UmVzcG9uZGVycygpLm9uQmVmb3JlQ2FwdHVyZTtcbiAgICAgIGlmIChmbikge1xuICAgICAgICBjb25zdCBiZWZvcmUgPSB7XG4gICAgICAgICAgZHJhZ2dhYmxlSWQsXG4gICAgICAgICAgbW9kZVxuICAgICAgICB9O1xuICAgICAgICBmbihiZWZvcmUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBiZWZvcmVTdGFydCA9IChjcml0aWNhbCwgbW9kZSkgPT4ge1xuICAgICEhZHJhZ2dpbmcgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgZmlyZSBvbkJlZm9yZURyYWdTdGFydCBhcyBhIGRyYWcgc3RhcnQgaGFzIGFscmVhZHkgYmVlbiBwdWJsaXNoZWQnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgd2l0aFRpbWluZ3MoJ29uQmVmb3JlRHJhZ1N0YXJ0JywgKCkgPT4ge1xuICAgICAgY29uc3QgZm4gPSBnZXRSZXNwb25kZXJzKCkub25CZWZvcmVEcmFnU3RhcnQ7XG4gICAgICBpZiAoZm4pIHtcbiAgICAgICAgZm4oZ2V0RHJhZ1N0YXJ0KGNyaXRpY2FsLCBtb2RlKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IHN0YXJ0ID0gKGNyaXRpY2FsLCBtb2RlKSA9PiB7XG4gICAgISFkcmFnZ2luZyA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0Nhbm5vdCBmaXJlIG9uQmVmb3JlRHJhZ1N0YXJ0IGFzIGEgZHJhZyBzdGFydCBoYXMgYWxyZWFkeSBiZWVuIHB1Ymxpc2hlZCcpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBjb25zdCBkYXRhID0gZ2V0RHJhZ1N0YXJ0KGNyaXRpY2FsLCBtb2RlKTtcbiAgICBkcmFnZ2luZyA9IHtcbiAgICAgIG1vZGUsXG4gICAgICBsYXN0Q3JpdGljYWw6IGNyaXRpY2FsLFxuICAgICAgbGFzdExvY2F0aW9uOiBkYXRhLnNvdXJjZSxcbiAgICAgIGxhc3RDb21iaW5lOiBudWxsXG4gICAgfTtcblxuICAgIGFzeW5jTWFyc2hhbC5hZGQoKCkgPT4ge1xuICAgICAgd2l0aFRpbWluZ3MoJ29uRHJhZ1N0YXJ0JywgKCkgPT4gZXhlY3V0ZShnZXRSZXNwb25kZXJzKCkub25EcmFnU3RhcnQsIGRhdGEsIGFubm91bmNlLCBwcmVzZXQkMS5vbkRyYWdTdGFydCkpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZSA9IChjcml0aWNhbCwgaW1wYWN0KSA9PiB7XG4gICAgY29uc3QgbG9jYXRpb24gPSB0cnlHZXREZXN0aW5hdGlvbihpbXBhY3QpO1xuICAgIGNvbnN0IGNvbWJpbmUgPSB0cnlHZXRDb21iaW5lKGltcGFjdCk7XG4gICAgIWRyYWdnaW5nID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IGZpcmUgb25EcmFnTW92ZSB3aGVuIG9uRHJhZ1N0YXJ0IGhhcyBub3QgYmVlbiBjYWxsZWQnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG5cbiAgICBjb25zdCBoYXNDcml0aWNhbENoYW5nZWQgPSAhaXNDcml0aWNhbEVxdWFsKGNyaXRpY2FsLCBkcmFnZ2luZy5sYXN0Q3JpdGljYWwpO1xuICAgIGlmIChoYXNDcml0aWNhbENoYW5nZWQpIHtcbiAgICAgIGRyYWdnaW5nLmxhc3RDcml0aWNhbCA9IGNyaXRpY2FsO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0xvY2F0aW9uQ2hhbmdlZCA9ICFhcmVMb2NhdGlvbnNFcXVhbChkcmFnZ2luZy5sYXN0TG9jYXRpb24sIGxvY2F0aW9uKTtcbiAgICBpZiAoaGFzTG9jYXRpb25DaGFuZ2VkKSB7XG4gICAgICBkcmFnZ2luZy5sYXN0TG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgICB9XG4gICAgY29uc3QgaGFzR3JvdXBpbmdDaGFuZ2VkID0gIWlzQ29tYmluZUVxdWFsKGRyYWdnaW5nLmxhc3RDb21iaW5lLCBjb21iaW5lKTtcbiAgICBpZiAoaGFzR3JvdXBpbmdDaGFuZ2VkKSB7XG4gICAgICBkcmFnZ2luZy5sYXN0Q29tYmluZSA9IGNvbWJpbmU7XG4gICAgfVxuXG4gICAgaWYgKCFoYXNDcml0aWNhbENoYW5nZWQgJiYgIWhhc0xvY2F0aW9uQ2hhbmdlZCAmJiAhaGFzR3JvdXBpbmdDaGFuZ2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAuLi5nZXREcmFnU3RhcnQoY3JpdGljYWwsIGRyYWdnaW5nLm1vZGUpLFxuICAgICAgY29tYmluZSxcbiAgICAgIGRlc3RpbmF0aW9uOiBsb2NhdGlvblxuICAgIH07XG4gICAgYXN5bmNNYXJzaGFsLmFkZCgoKSA9PiB7XG4gICAgICB3aXRoVGltaW5ncygnb25EcmFnVXBkYXRlJywgKCkgPT4gZXhlY3V0ZShnZXRSZXNwb25kZXJzKCkub25EcmFnVXBkYXRlLCBkYXRhLCBhbm5vdW5jZSwgcHJlc2V0JDEub25EcmFnVXBkYXRlKSk7XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgICFkcmFnZ2luZyA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0NhbiBvbmx5IGZsdXNoIHJlc3BvbmRlcnMgd2hpbGUgZHJhZ2dpbmcnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgYXN5bmNNYXJzaGFsLmZsdXNoKCk7XG4gIH07XG4gIGNvbnN0IGRyb3AgPSByZXN1bHQgPT4ge1xuICAgICFkcmFnZ2luZyA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0Nhbm5vdCBmaXJlIG9uRHJhZ0VuZCB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nIG9uRHJhZ1N0YXJ0JykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIGRyYWdnaW5nID0gbnVsbDtcbiAgICB3aXRoVGltaW5ncygnb25EcmFnRW5kJywgKCkgPT4gZXhlY3V0ZShnZXRSZXNwb25kZXJzKCkub25EcmFnRW5kLCByZXN1bHQsIGFubm91bmNlLCBwcmVzZXQkMS5vbkRyYWdFbmQpKTtcbiAgfTtcblxuICBjb25zdCBhYm9ydCA9ICgpID0+IHtcbiAgICBpZiAoIWRyYWdnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIC4uLmdldERyYWdTdGFydChkcmFnZ2luZy5sYXN0Q3JpdGljYWwsIGRyYWdnaW5nLm1vZGUpLFxuICAgICAgY29tYmluZTogbnVsbCxcbiAgICAgIGRlc3RpbmF0aW9uOiBudWxsLFxuICAgICAgcmVhc29uOiAnQ0FOQ0VMJ1xuICAgIH07XG4gICAgZHJvcChyZXN1bHQpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGJlZm9yZUNhcHR1cmUsXG4gICAgYmVmb3JlU3RhcnQsXG4gICAgc3RhcnQsXG4gICAgdXBkYXRlLFxuICAgIGZsdXNoLFxuICAgIGRyb3AsXG4gICAgYWJvcnRcbiAgfTtcbn0pO1xuXG52YXIgcmVzcG9uZGVycyA9ICgoZ2V0UmVzcG9uZGVycywgYW5ub3VuY2UpID0+IHtcbiAgY29uc3QgcHVibGlzaGVyID0gZ2V0UHVibGlzaGVyKGdldFJlc3BvbmRlcnMsIGFubm91bmNlKTtcbiAgcmV0dXJuIHN0b3JlID0+IG5leHQgPT4gYWN0aW9uID0+IHtcbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09ICdCRUZPUkVfSU5JVElBTF9DQVBUVVJFJykge1xuICAgICAgcHVibGlzaGVyLmJlZm9yZUNhcHR1cmUoYWN0aW9uLnBheWxvYWQuZHJhZ2dhYmxlSWQsIGFjdGlvbi5wYXlsb2FkLm1vdmVtZW50TW9kZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ0lOSVRJQUxfUFVCTElTSCcpIHtcbiAgICAgIGNvbnN0IGNyaXRpY2FsID0gYWN0aW9uLnBheWxvYWQuY3JpdGljYWw7XG4gICAgICBwdWJsaXNoZXIuYmVmb3JlU3RhcnQoY3JpdGljYWwsIGFjdGlvbi5wYXlsb2FkLm1vdmVtZW50TW9kZSk7XG4gICAgICBuZXh0KGFjdGlvbik7XG4gICAgICBwdWJsaXNoZXIuc3RhcnQoY3JpdGljYWwsIGFjdGlvbi5wYXlsb2FkLm1vdmVtZW50TW9kZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGFjdGlvbi50eXBlID09PSAnRFJPUF9DT01QTEVURScpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGFjdGlvbi5wYXlsb2FkLmNvbXBsZXRlZC5yZXN1bHQ7XG4gICAgICBwdWJsaXNoZXIuZmx1c2goKTtcbiAgICAgIG5leHQoYWN0aW9uKTtcbiAgICAgIHB1Ymxpc2hlci5kcm9wKHJlc3VsdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbmV4dChhY3Rpb24pO1xuXG4gICAgaWYgKGFjdGlvbi50eXBlID09PSAnRkxVU0gnKSB7XG4gICAgICBwdWJsaXNoZXIuYWJvcnQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnRFJBR0dJTkcnKSB7XG4gICAgICBwdWJsaXNoZXIudXBkYXRlKHN0YXRlLmNyaXRpY2FsLCBzdGF0ZS5pbXBhY3QpO1xuICAgIH1cbiAgfTtcbn0pO1xuXG5jb25zdCBkcm9wQW5pbWF0aW9uRmluaXNoTWlkZGxld2FyZSA9IHN0b3JlID0+IG5leHQgPT4gYWN0aW9uID0+IHtcbiAgaWYgKGFjdGlvbi50eXBlICE9PSAnRFJPUF9BTklNQVRJT05fRklOSVNIRUQnKSB7XG4gICAgbmV4dChhY3Rpb24pO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICEoc3RhdGUucGhhc2UgPT09ICdEUk9QX0FOSU1BVElORycpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IGZpbmlzaCBhIGRyb3AgYW5pbWF0aW5nIHdoZW4gbm8gZHJvcCBpcyBvY2N1cnJpbmcnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHN0b3JlLmRpc3BhdGNoKGNvbXBsZXRlRHJvcCh7XG4gICAgY29tcGxldGVkOiBzdGF0ZS5jb21wbGV0ZWRcbiAgfSkpO1xufTtcbnZhciBkcm9wQW5pbWF0aW9uRmluaXNoID0gZHJvcEFuaW1hdGlvbkZpbmlzaE1pZGRsZXdhcmU7XG5cbmNvbnN0IGRyb3BBbmltYXRpb25GbHVzaE9uU2Nyb2xsTWlkZGxld2FyZSA9IHN0b3JlID0+IHtcbiAgbGV0IHVuYmluZCA9IG51bGw7XG4gIGxldCBmcmFtZUlkID0gbnVsbDtcbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgaWYgKGZyYW1lSWQpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lSWQpO1xuICAgICAgZnJhbWVJZCA9IG51bGw7XG4gICAgfVxuICAgIGlmICh1bmJpbmQpIHtcbiAgICAgIHVuYmluZCgpO1xuICAgICAgdW5iaW5kID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5leHQgPT4gYWN0aW9uID0+IHtcbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09ICdGTFVTSCcgfHwgYWN0aW9uLnR5cGUgPT09ICdEUk9QX0NPTVBMRVRFJyB8fCBhY3Rpb24udHlwZSA9PT0gJ0RST1BfQU5JTUFUSU9OX0ZJTklTSEVEJykge1xuICAgICAgY2xlYXIoKTtcbiAgICB9XG4gICAgbmV4dChhY3Rpb24pO1xuICAgIGlmIChhY3Rpb24udHlwZSAhPT0gJ0RST1BfQU5JTUFURScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmluZGluZyA9IHtcbiAgICAgIGV2ZW50TmFtZTogJ3Njcm9sbCcsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgICBvbmNlOiB0cnVlXG4gICAgICB9LFxuICAgICAgZm46IGZ1bmN0aW9uIGZsdXNoRHJvcEFuaW1hdGlvbigpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdEUk9QX0FOSU1BVElORycpIHtcbiAgICAgICAgICBzdG9yZS5kaXNwYXRjaChkcm9wQW5pbWF0aW9uRmluaXNoZWQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBmcmFtZUlkID0gbnVsbDtcbiAgICAgIHVuYmluZCA9IGJpbmRFdmVudHMod2luZG93LCBbYmluZGluZ10pO1xuICAgIH0pO1xuICB9O1xufTtcbnZhciBkcm9wQW5pbWF0aW9uRmx1c2hPblNjcm9sbCA9IGRyb3BBbmltYXRpb25GbHVzaE9uU2Nyb2xsTWlkZGxld2FyZTtcblxudmFyIGRpbWVuc2lvbk1hcnNoYWxTdG9wcGVyID0gKG1hcnNoYWwgPT4gKCkgPT4gbmV4dCA9PiBhY3Rpb24gPT4ge1xuICBpZiAoXG4gIGFjdGlvbi50eXBlID09PSAnRFJPUF9DT01QTEVURScgfHwgYWN0aW9uLnR5cGUgPT09ICdGTFVTSCcgfHxcbiAgYWN0aW9uLnR5cGUgPT09ICdEUk9QX0FOSU1BVEUnKSB7XG4gICAgbWFyc2hhbC5zdG9wUHVibGlzaGluZygpO1xuICB9XG4gIG5leHQoYWN0aW9uKTtcbn0pO1xuXG52YXIgZm9jdXMgPSAobWFyc2hhbCA9PiB7XG4gIGxldCBpc1dhdGNoaW5nID0gZmFsc2U7XG4gIHJldHVybiAoKSA9PiBuZXh0ID0+IGFjdGlvbiA9PiB7XG4gICAgaWYgKGFjdGlvbi50eXBlID09PSAnSU5JVElBTF9QVUJMSVNIJykge1xuICAgICAgaXNXYXRjaGluZyA9IHRydWU7XG4gICAgICBtYXJzaGFsLnRyeVJlY29yZEZvY3VzKGFjdGlvbi5wYXlsb2FkLmNyaXRpY2FsLmRyYWdnYWJsZS5pZCk7XG4gICAgICBuZXh0KGFjdGlvbik7XG4gICAgICBtYXJzaGFsLnRyeVJlc3RvcmVGb2N1c1JlY29yZGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG5leHQoYWN0aW9uKTtcbiAgICBpZiAoIWlzV2F0Y2hpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGFjdGlvbi50eXBlID09PSAnRkxVU0gnKSB7XG4gICAgICBpc1dhdGNoaW5nID0gZmFsc2U7XG4gICAgICBtYXJzaGFsLnRyeVJlc3RvcmVGb2N1c1JlY29yZGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ0RST1BfQ09NUExFVEUnKSB7XG4gICAgICBpc1dhdGNoaW5nID0gZmFsc2U7XG4gICAgICBjb25zdCByZXN1bHQgPSBhY3Rpb24ucGF5bG9hZC5jb21wbGV0ZWQucmVzdWx0O1xuXG4gICAgICBpZiAocmVzdWx0LmNvbWJpbmUpIHtcbiAgICAgICAgbWFyc2hhbC50cnlTaGlmdFJlY29yZChyZXN1bHQuZHJhZ2dhYmxlSWQsIHJlc3VsdC5jb21iaW5lLmRyYWdnYWJsZUlkKTtcbiAgICAgIH1cbiAgICAgIG1hcnNoYWwudHJ5UmVzdG9yZUZvY3VzUmVjb3JkZWQoKTtcbiAgICB9XG4gIH07XG59KTtcblxuY29uc3Qgc2hvdWxkU3RvcCA9IGFjdGlvbiA9PiBhY3Rpb24udHlwZSA9PT0gJ0RST1BfQ09NUExFVEUnIHx8IGFjdGlvbi50eXBlID09PSAnRFJPUF9BTklNQVRFJyB8fCBhY3Rpb24udHlwZSA9PT0gJ0ZMVVNIJztcbnZhciBhdXRvU2Nyb2xsID0gKGF1dG9TY3JvbGxlciA9PiBzdG9yZSA9PiBuZXh0ID0+IGFjdGlvbiA9PiB7XG4gIGlmIChzaG91bGRTdG9wKGFjdGlvbikpIHtcbiAgICBhdXRvU2Nyb2xsZXIuc3RvcCgpO1xuICAgIG5leHQoYWN0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGFjdGlvbi50eXBlID09PSAnSU5JVElBTF9QVUJMSVNIJykge1xuICAgIG5leHQoYWN0aW9uKTtcbiAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgIShzdGF0ZS5waGFzZSA9PT0gJ0RSQUdHSU5HJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBwaGFzZSB0byBiZSBEUkFHR0lORyBhZnRlciBJTklUSUFMX1BVQkxJU0gnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgYXV0b1Njcm9sbGVyLnN0YXJ0KHN0YXRlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBuZXh0KGFjdGlvbik7XG4gIGF1dG9TY3JvbGxlci5zY3JvbGwoc3RvcmUuZ2V0U3RhdGUoKSk7XG59KTtcblxuY29uc3QgcGVuZGluZ0Ryb3AgPSBzdG9yZSA9PiBuZXh0ID0+IGFjdGlvbiA9PiB7XG4gIG5leHQoYWN0aW9uKTtcbiAgaWYgKGFjdGlvbi50eXBlICE9PSAnUFVCTElTSF9XSElMRV9EUkFHR0lORycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwb3N0QWN0aW9uU3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuXG4gIGlmIChwb3N0QWN0aW9uU3RhdGUucGhhc2UgIT09ICdEUk9QX1BFTkRJTkcnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHBvc3RBY3Rpb25TdGF0ZS5pc1dhaXRpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc3RvcmUuZGlzcGF0Y2goZHJvcCQxKHtcbiAgICByZWFzb246IHBvc3RBY3Rpb25TdGF0ZS5yZWFzb25cbiAgfSkpO1xufTtcbnZhciBwZW5kaW5nRHJvcCQxID0gcGVuZGluZ0Ryb3A7XG5cbmNvbnN0IGNvbXBvc2VFbmhhbmNlcnMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18gPyB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fKHtcbiAgbmFtZTogJ0BoZWxsby1wYW5nZWEvZG5kJ1xufSkgOiByZWR1eC5jb21wb3NlO1xudmFyIGNyZWF0ZVN0b3JlID0gKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGRpbWVuc2lvbk1hcnNoYWwsXG4gICAgZm9jdXNNYXJzaGFsLFxuICAgIHN0eWxlTWFyc2hhbCxcbiAgICBnZXRSZXNwb25kZXJzLFxuICAgIGFubm91bmNlLFxuICAgIGF1dG9TY3JvbGxlclxuICB9ID0gX3JlZjtcbiAgcmV0dXJuIHJlZHV4LmNyZWF0ZVN0b3JlKHJlZHVjZXIsIGNvbXBvc2VFbmhhbmNlcnMocmVkdXguYXBwbHlNaWRkbGV3YXJlKFxuXG4gIHN0eWxlKHN0eWxlTWFyc2hhbCksXG4gIGRpbWVuc2lvbk1hcnNoYWxTdG9wcGVyKGRpbWVuc2lvbk1hcnNoYWwpLFxuICBsaWZ0KGRpbWVuc2lvbk1hcnNoYWwpLCBkcm9wLFxuICBkcm9wQW5pbWF0aW9uRmluaXNoLCBkcm9wQW5pbWF0aW9uRmx1c2hPblNjcm9sbCwgcGVuZGluZ0Ryb3AkMSwgYXV0b1Njcm9sbChhdXRvU2Nyb2xsZXIpLCBzY3JvbGxMaXN0ZW5lciQxLCBmb2N1cyhmb2N1c01hcnNoYWwpLFxuICByZXNwb25kZXJzKGdldFJlc3BvbmRlcnMsIGFubm91bmNlKSkpKTtcbn0pO1xuXG5jb25zdCBjbGVhbiQxID0gKCkgPT4gKHtcbiAgYWRkaXRpb25zOiB7fSxcbiAgcmVtb3ZhbHM6IHt9LFxuICBtb2RpZmllZDoge31cbn0pO1xuZnVuY3Rpb24gY3JlYXRlUHVibGlzaGVyKF9yZWYpIHtcbiAgbGV0IHtcbiAgICByZWdpc3RyeSxcbiAgICBjYWxsYmFja3NcbiAgfSA9IF9yZWY7XG4gIGxldCBzdGFnaW5nID0gY2xlYW4kMSgpO1xuICBsZXQgZnJhbWVJZCA9IG51bGw7XG4gIGNvbnN0IGNvbGxlY3QgPSAoKSA9PiB7XG4gICAgaWYgKGZyYW1lSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGJhY2tzLmNvbGxlY3Rpb25TdGFydGluZygpO1xuICAgIGZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgZnJhbWVJZCA9IG51bGw7XG4gICAgICBzdGFydCgpO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbnMsXG4gICAgICAgIHJlbW92YWxzLFxuICAgICAgICBtb2RpZmllZFxuICAgICAgfSA9IHN0YWdpbmc7XG4gICAgICBjb25zdCBhZGRlZCA9IE9iamVjdC5rZXlzKGFkZGl0aW9ucykubWFwKFxuICAgICAgaWQgPT4gcmVnaXN0cnkuZHJhZ2dhYmxlLmdldEJ5SWQoaWQpLmdldERpbWVuc2lvbihvcmlnaW4pKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZGVzY3JpcHRvci5pbmRleCAtIGIuZGVzY3JpcHRvci5pbmRleCk7XG4gICAgICBjb25zdCB1cGRhdGVkID0gT2JqZWN0LmtleXMobW9kaWZpZWQpLm1hcChpZCA9PiB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcmVnaXN0cnkuZHJvcHBhYmxlLmdldEJ5SWQoaWQpO1xuICAgICAgICBjb25zdCBzY3JvbGwgPSBlbnRyeS5jYWxsYmFja3MuZ2V0U2Nyb2xsV2hpbGVEcmFnZ2luZygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRyb3BwYWJsZUlkOiBpZCxcbiAgICAgICAgICBzY3JvbGxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICBhZGRpdGlvbnM6IGFkZGVkLFxuICAgICAgICByZW1vdmFsczogT2JqZWN0LmtleXMocmVtb3ZhbHMpLFxuICAgICAgICBtb2RpZmllZDogdXBkYXRlZFxuICAgICAgfTtcbiAgICAgIHN0YWdpbmcgPSBjbGVhbiQxKCk7XG4gICAgICBmaW5pc2goKTtcbiAgICAgIGNhbGxiYWNrcy5wdWJsaXNoKHJlc3VsdCk7XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGFkZCA9IGVudHJ5ID0+IHtcbiAgICBjb25zdCBpZCA9IGVudHJ5LmRlc2NyaXB0b3IuaWQ7XG4gICAgc3RhZ2luZy5hZGRpdGlvbnNbaWRdID0gZW50cnk7XG4gICAgc3RhZ2luZy5tb2RpZmllZFtlbnRyeS5kZXNjcmlwdG9yLmRyb3BwYWJsZUlkXSA9IHRydWU7XG4gICAgaWYgKHN0YWdpbmcucmVtb3ZhbHNbaWRdKSB7XG4gICAgICBkZWxldGUgc3RhZ2luZy5yZW1vdmFsc1tpZF07XG4gICAgfVxuICAgIGNvbGxlY3QoKTtcbiAgfTtcbiAgY29uc3QgcmVtb3ZlID0gZW50cnkgPT4ge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBlbnRyeS5kZXNjcmlwdG9yO1xuICAgIHN0YWdpbmcucmVtb3ZhbHNbZGVzY3JpcHRvci5pZF0gPSB0cnVlO1xuICAgIHN0YWdpbmcubW9kaWZpZWRbZGVzY3JpcHRvci5kcm9wcGFibGVJZF0gPSB0cnVlO1xuICAgIGlmIChzdGFnaW5nLmFkZGl0aW9uc1tkZXNjcmlwdG9yLmlkXSkge1xuICAgICAgZGVsZXRlIHN0YWdpbmcuYWRkaXRpb25zW2Rlc2NyaXB0b3IuaWRdO1xuICAgIH1cbiAgICBjb2xsZWN0KCk7XG4gIH07XG4gIGNvbnN0IHN0b3AgPSAoKSA9PiB7XG4gICAgaWYgKCFmcmFtZUlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lSWQpO1xuICAgIGZyYW1lSWQgPSBudWxsO1xuICAgIHN0YWdpbmcgPSBjbGVhbiQxKCk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgYWRkLFxuICAgIHJlbW92ZSxcbiAgICBzdG9wXG4gIH07XG59XG5cbnZhciBnZXRNYXhTY3JvbGwgPSAoX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgc2Nyb2xsSGVpZ2h0LFxuICAgIHNjcm9sbFdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB3aWR0aFxuICB9ID0gX3JlZjtcbiAgY29uc3QgbWF4U2Nyb2xsID0gc3VidHJhY3QoXG4gIHtcbiAgICB4OiBzY3JvbGxXaWR0aCxcbiAgICB5OiBzY3JvbGxIZWlnaHRcbiAgfSxcbiAge1xuICAgIHg6IHdpZHRoLFxuICAgIHk6IGhlaWdodFxuICB9KTtcbiAgY29uc3QgYWRqdXN0ZWRNYXhTY3JvbGwgPSB7XG4gICAgeDogTWF0aC5tYXgoMCwgbWF4U2Nyb2xsLngpLFxuICAgIHk6IE1hdGgubWF4KDAsIG1heFNjcm9sbC55KVxuICB9O1xuICByZXR1cm4gYWRqdXN0ZWRNYXhTY3JvbGw7XG59KTtcblxudmFyIGdldERvY3VtZW50RWxlbWVudCA9ICgoKSA9PiB7XG4gIGNvbnN0IGRvYyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgIWRvYyA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0Nhbm5vdCBmaW5kIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCcpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgcmV0dXJuIGRvYztcbn0pO1xuXG52YXIgZ2V0TWF4V2luZG93U2Nyb2xsID0gKCgpID0+IHtcbiAgY29uc3QgZG9jID0gZ2V0RG9jdW1lbnRFbGVtZW50KCk7XG4gIGNvbnN0IG1heFNjcm9sbCA9IGdldE1heFNjcm9sbCh7XG4gICAgc2Nyb2xsSGVpZ2h0OiBkb2Muc2Nyb2xsSGVpZ2h0LFxuICAgIHNjcm9sbFdpZHRoOiBkb2Muc2Nyb2xsV2lkdGgsXG4gICAgd2lkdGg6IGRvYy5jbGllbnRXaWR0aCxcbiAgICBoZWlnaHQ6IGRvYy5jbGllbnRIZWlnaHRcbiAgfSk7XG4gIHJldHVybiBtYXhTY3JvbGw7XG59KTtcblxudmFyIGdldFZpZXdwb3J0ID0gKCgpID0+IHtcbiAgY29uc3Qgc2Nyb2xsID0gZ2V0V2luZG93U2Nyb2xsKCk7XG4gIGNvbnN0IG1heFNjcm9sbCA9IGdldE1heFdpbmRvd1Njcm9sbCgpO1xuICBjb25zdCB0b3AgPSBzY3JvbGwueTtcbiAgY29uc3QgbGVmdCA9IHNjcm9sbC54O1xuXG4gIGNvbnN0IGRvYyA9IGdldERvY3VtZW50RWxlbWVudCgpO1xuICBjb25zdCB3aWR0aCA9IGRvYy5jbGllbnRXaWR0aDtcbiAgY29uc3QgaGVpZ2h0ID0gZG9jLmNsaWVudEhlaWdodDtcblxuICBjb25zdCByaWdodCA9IGxlZnQgKyB3aWR0aDtcbiAgY29uc3QgYm90dG9tID0gdG9wICsgaGVpZ2h0O1xuICBjb25zdCBmcmFtZSA9IGNzc0JveE1vZGVsLmdldFJlY3Qoe1xuICAgIHRvcCxcbiAgICBsZWZ0LFxuICAgIHJpZ2h0LFxuICAgIGJvdHRvbVxuICB9KTtcbiAgY29uc3Qgdmlld3BvcnQgPSB7XG4gICAgZnJhbWUsXG4gICAgc2Nyb2xsOiB7XG4gICAgICBpbml0aWFsOiBzY3JvbGwsXG4gICAgICBjdXJyZW50OiBzY3JvbGwsXG4gICAgICBtYXg6IG1heFNjcm9sbCxcbiAgICAgIGRpZmY6IHtcbiAgICAgICAgdmFsdWU6IG9yaWdpbixcbiAgICAgICAgZGlzcGxhY2VtZW50OiBvcmlnaW5cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIHJldHVybiB2aWV3cG9ydDtcbn0pO1xuXG52YXIgZ2V0SW5pdGlhbFB1Ymxpc2ggPSAoX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgY3JpdGljYWwsXG4gICAgc2Nyb2xsT3B0aW9ucyxcbiAgICByZWdpc3RyeVxuICB9ID0gX3JlZjtcbiAgc3RhcnQoKTtcbiAgY29uc3Qgdmlld3BvcnQgPSBnZXRWaWV3cG9ydCgpO1xuICBjb25zdCB3aW5kb3dTY3JvbGwgPSB2aWV3cG9ydC5zY3JvbGwuY3VycmVudDtcbiAgY29uc3QgaG9tZSA9IGNyaXRpY2FsLmRyb3BwYWJsZTtcbiAgY29uc3QgZHJvcHBhYmxlcyA9IHJlZ2lzdHJ5LmRyb3BwYWJsZS5nZXRBbGxCeVR5cGUoaG9tZS50eXBlKS5tYXAoZW50cnkgPT4gZW50cnkuY2FsbGJhY2tzLmdldERpbWVuc2lvbkFuZFdhdGNoU2Nyb2xsKHdpbmRvd1Njcm9sbCwgc2Nyb2xsT3B0aW9ucykpO1xuICBjb25zdCBkcmFnZ2FibGVzID0gcmVnaXN0cnkuZHJhZ2dhYmxlLmdldEFsbEJ5VHlwZShjcml0aWNhbC5kcmFnZ2FibGUudHlwZSkubWFwKGVudHJ5ID0+IGVudHJ5LmdldERpbWVuc2lvbih3aW5kb3dTY3JvbGwpKTtcbiAgY29uc3QgZGltZW5zaW9ucyA9IHtcbiAgICBkcmFnZ2FibGVzOiB0b0RyYWdnYWJsZU1hcChkcmFnZ2FibGVzKSxcbiAgICBkcm9wcGFibGVzOiB0b0Ryb3BwYWJsZU1hcChkcm9wcGFibGVzKVxuICB9O1xuICBmaW5pc2goKTtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIGRpbWVuc2lvbnMsXG4gICAgY3JpdGljYWwsXG4gICAgdmlld3BvcnRcbiAgfTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5mdW5jdGlvbiBzaG91bGRQdWJsaXNoVXBkYXRlKHJlZ2lzdHJ5LCBkcmFnZ2luZywgZW50cnkpIHtcbiAgaWYgKGVudHJ5LmRlc2NyaXB0b3IuaWQgPT09IGRyYWdnaW5nLmlkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChlbnRyeS5kZXNjcmlwdG9yLnR5cGUgIT09IGRyYWdnaW5nLnR5cGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgaG9tZSA9IHJlZ2lzdHJ5LmRyb3BwYWJsZS5nZXRCeUlkKGVudHJ5LmRlc2NyaXB0b3IuZHJvcHBhYmxlSWQpO1xuICBpZiAoaG9tZS5kZXNjcmlwdG9yLm1vZGUgIT09ICd2aXJ0dWFsJykge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoYFxuICAgICAgWW91IGFyZSBhdHRlbXB0aW5nIHRvIGFkZCBvciByZW1vdmUgYSBEcmFnZ2FibGUgW2lkOiAke2VudHJ5LmRlc2NyaXB0b3IuaWR9XVxuICAgICAgd2hpbGUgYSBkcmFnIGlzIG9jY3VycmluZy4gVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdmlydHVhbCBsaXN0cy5cblxuICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9oZWxsby1wYW5nZWEvZG5kL2Jsb2IvbWFpbi9kb2NzL3BhdHRlcm5zL3ZpcnR1YWwtbGlzdHMubWRcbiAgICBgKSA6IHZvaWQgMDtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG52YXIgY3JlYXRlRGltZW5zaW9uTWFyc2hhbCA9ICgocmVnaXN0cnksIGNhbGxiYWNrcykgPT4ge1xuICBsZXQgY29sbGVjdGlvbiA9IG51bGw7XG4gIGNvbnN0IHB1Ymxpc2hlciA9IGNyZWF0ZVB1Ymxpc2hlcih7XG4gICAgY2FsbGJhY2tzOiB7XG4gICAgICBwdWJsaXNoOiBjYWxsYmFja3MucHVibGlzaFdoaWxlRHJhZ2dpbmcsXG4gICAgICBjb2xsZWN0aW9uU3RhcnRpbmc6IGNhbGxiYWNrcy5jb2xsZWN0aW9uU3RhcnRpbmdcbiAgICB9LFxuICAgIHJlZ2lzdHJ5XG4gIH0pO1xuICBjb25zdCB1cGRhdGVEcm9wcGFibGVJc0VuYWJsZWQgPSAoaWQsIGlzRW5hYmxlZCkgPT4ge1xuICAgICFyZWdpc3RyeS5kcm9wcGFibGUuZXhpc3RzKGlkKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgYENhbm5vdCB1cGRhdGUgaXMgZW5hYmxlZCBmbGFnIG9mIERyb3BwYWJsZSAke2lkfSBhcyBpdCBpcyBub3QgcmVnaXN0ZXJlZGApIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcblxuICAgIGlmICghY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNhbGxiYWNrcy51cGRhdGVEcm9wcGFibGVJc0VuYWJsZWQoe1xuICAgICAgaWQsXG4gICAgICBpc0VuYWJsZWRcbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgdXBkYXRlRHJvcHBhYmxlSXNDb21iaW5lRW5hYmxlZCA9IChpZCwgaXNDb21iaW5lRW5hYmxlZCkgPT4ge1xuICAgIGlmICghY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAhcmVnaXN0cnkuZHJvcHBhYmxlLmV4aXN0cyhpZCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGBDYW5ub3QgdXBkYXRlIGlzQ29tYmluZUVuYWJsZWQgZmxhZyBvZiBEcm9wcGFibGUgJHtpZH0gYXMgaXQgaXMgbm90IHJlZ2lzdGVyZWRgKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgY2FsbGJhY2tzLnVwZGF0ZURyb3BwYWJsZUlzQ29tYmluZUVuYWJsZWQoe1xuICAgICAgaWQsXG4gICAgICBpc0NvbWJpbmVFbmFibGVkXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IHVwZGF0ZURyb3BwYWJsZVNjcm9sbCA9IChpZCwgbmV3U2Nyb2xsKSA9PiB7XG4gICAgaWYgKCFjb2xsZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgICFyZWdpc3RyeS5kcm9wcGFibGUuZXhpc3RzKGlkKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgYENhbm5vdCB1cGRhdGUgdGhlIHNjcm9sbCBvbiBEcm9wcGFibGUgJHtpZH0gYXMgaXQgaXMgbm90IHJlZ2lzdGVyZWRgKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgY2FsbGJhY2tzLnVwZGF0ZURyb3BwYWJsZVNjcm9sbCh7XG4gICAgICBpZCxcbiAgICAgIG5ld1Njcm9sbFxuICAgIH0pO1xuICB9O1xuICBjb25zdCBzY3JvbGxEcm9wcGFibGUgPSAoaWQsIGNoYW5nZSkgPT4ge1xuICAgIGlmICghY29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZWdpc3RyeS5kcm9wcGFibGUuZ2V0QnlJZChpZCkuY2FsbGJhY2tzLnNjcm9sbChjaGFuZ2UpO1xuICB9O1xuICBjb25zdCBzdG9wUHVibGlzaGluZyA9ICgpID0+IHtcbiAgICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcHVibGlzaGVyLnN0b3AoKTtcblxuICAgIGNvbnN0IGhvbWUgPSBjb2xsZWN0aW9uLmNyaXRpY2FsLmRyb3BwYWJsZTtcbiAgICByZWdpc3RyeS5kcm9wcGFibGUuZ2V0QWxsQnlUeXBlKGhvbWUudHlwZSkuZm9yRWFjaChlbnRyeSA9PiBlbnRyeS5jYWxsYmFja3MuZHJhZ1N0b3BwZWQoKSk7XG5cbiAgICBjb2xsZWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgY29sbGVjdGlvbiA9IG51bGw7XG4gIH07XG4gIGNvbnN0IHN1YnNjcmliZXIgPSBldmVudCA9PiB7XG4gICAgIWNvbGxlY3Rpb24gPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdTaG91bGQgb25seSBiZSBzdWJzY3JpYmVkIHdoZW4gYSBjb2xsZWN0aW9uIGlzIG9jY3VycmluZycpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBjb25zdCBkcmFnZ2luZyA9IGNvbGxlY3Rpb24uY3JpdGljYWwuZHJhZ2dhYmxlO1xuICAgIGlmIChldmVudC50eXBlID09PSAnQURESVRJT04nKSB7XG4gICAgICBpZiAoc2hvdWxkUHVibGlzaFVwZGF0ZShyZWdpc3RyeSwgZHJhZ2dpbmcsIGV2ZW50LnZhbHVlKSkge1xuICAgICAgICBwdWJsaXNoZXIuYWRkKGV2ZW50LnZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdSRU1PVkFMJykge1xuICAgICAgaWYgKHNob3VsZFB1Ymxpc2hVcGRhdGUocmVnaXN0cnksIGRyYWdnaW5nLCBldmVudC52YWx1ZSkpIHtcbiAgICAgICAgcHVibGlzaGVyLnJlbW92ZShldmVudC52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBjb25zdCBzdGFydFB1Ymxpc2hpbmcgPSByZXF1ZXN0ID0+IHtcbiAgICAhIWNvbGxlY3Rpb24gPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3Qgc3RhcnQgY2FwdHVyaW5nIGNyaXRpY2FsIGRpbWVuc2lvbnMgYXMgdGhlcmUgaXMgYWxyZWFkeSBhIGNvbGxlY3Rpb24nKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgY29uc3QgZW50cnkgPSByZWdpc3RyeS5kcmFnZ2FibGUuZ2V0QnlJZChyZXF1ZXN0LmRyYWdnYWJsZUlkKTtcbiAgICBjb25zdCBob21lID0gcmVnaXN0cnkuZHJvcHBhYmxlLmdldEJ5SWQoZW50cnkuZGVzY3JpcHRvci5kcm9wcGFibGVJZCk7XG4gICAgY29uc3QgY3JpdGljYWwgPSB7XG4gICAgICBkcmFnZ2FibGU6IGVudHJ5LmRlc2NyaXB0b3IsXG4gICAgICBkcm9wcGFibGU6IGhvbWUuZGVzY3JpcHRvclxuICAgIH07XG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSByZWdpc3RyeS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgY29sbGVjdGlvbiA9IHtcbiAgICAgIGNyaXRpY2FsLFxuICAgICAgdW5zdWJzY3JpYmVcbiAgICB9O1xuICAgIHJldHVybiBnZXRJbml0aWFsUHVibGlzaCh7XG4gICAgICBjcml0aWNhbCxcbiAgICAgIHJlZ2lzdHJ5LFxuICAgICAgc2Nyb2xsT3B0aW9uczogcmVxdWVzdC5zY3JvbGxPcHRpb25zXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IG1hcnNoYWwgPSB7XG4gICAgdXBkYXRlRHJvcHBhYmxlSXNFbmFibGVkLFxuICAgIHVwZGF0ZURyb3BwYWJsZUlzQ29tYmluZUVuYWJsZWQsXG4gICAgc2Nyb2xsRHJvcHBhYmxlLFxuICAgIHVwZGF0ZURyb3BwYWJsZVNjcm9sbCxcbiAgICBzdGFydFB1Ymxpc2hpbmcsXG4gICAgc3RvcFB1Ymxpc2hpbmdcbiAgfTtcbiAgcmV0dXJuIG1hcnNoYWw7XG59KTtcblxudmFyIGNhblN0YXJ0RHJhZyA9ICgoc3RhdGUsIGlkKSA9PiB7XG4gIGlmIChzdGF0ZS5waGFzZSA9PT0gJ0lETEUnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoc3RhdGUucGhhc2UgIT09ICdEUk9QX0FOSU1BVElORycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoc3RhdGUuY29tcGxldGVkLnJlc3VsdC5kcmFnZ2FibGVJZCA9PT0gaWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gc3RhdGUuY29tcGxldGVkLnJlc3VsdC5yZWFzb24gPT09ICdEUk9QJztcbn0pO1xuXG52YXIgc2Nyb2xsV2luZG93ID0gKGNoYW5nZSA9PiB7XG4gIHdpbmRvdy5zY3JvbGxCeShjaGFuZ2UueCwgY2hhbmdlLnkpO1xufSk7XG5cbmNvbnN0IGdldFNjcm9sbGFibGVEcm9wcGFibGVzID0gbWVtb2l6ZU9uZV9fZGVmYXVsdFtcImRlZmF1bHRcIl0oZHJvcHBhYmxlcyA9PiB0b0Ryb3BwYWJsZUxpc3QoZHJvcHBhYmxlcykuZmlsdGVyKGRyb3BwYWJsZSA9PiB7XG4gIGlmICghZHJvcHBhYmxlLmlzRW5hYmxlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghZHJvcHBhYmxlLmZyYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufSkpO1xuY29uc3QgZ2V0U2Nyb2xsYWJsZURyb3BwYWJsZU92ZXIgPSAodGFyZ2V0LCBkcm9wcGFibGVzKSA9PiB7XG4gIGNvbnN0IG1heWJlID0gZ2V0U2Nyb2xsYWJsZURyb3BwYWJsZXMoZHJvcHBhYmxlcykuZmluZChkcm9wcGFibGUgPT4ge1xuICAgICFkcm9wcGFibGUuZnJhbWUgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdJbnZhbGlkIHJlc3VsdCcpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICByZXR1cm4gaXNQb3NpdGlvbkluRnJhbWUoZHJvcHBhYmxlLmZyYW1lLnBhZ2VNYXJnaW5Cb3gpKHRhcmdldCk7XG4gIH0pIHx8IG51bGw7XG4gIHJldHVybiBtYXliZTtcbn07XG52YXIgZ2V0QmVzdFNjcm9sbGFibGVEcm9wcGFibGUgPSAoX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgY2VudGVyLFxuICAgIGRlc3RpbmF0aW9uLFxuICAgIGRyb3BwYWJsZXNcbiAgfSA9IF9yZWY7XG5cbiAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgY29uc3QgZGltZW5zaW9uID0gZHJvcHBhYmxlc1tkZXN0aW5hdGlvbl07XG4gICAgaWYgKCFkaW1lbnNpb24uZnJhbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZGltZW5zaW9uO1xuICB9XG5cbiAgY29uc3QgZGltZW5zaW9uID0gZ2V0U2Nyb2xsYWJsZURyb3BwYWJsZU92ZXIoY2VudGVyLCBkcm9wcGFibGVzKTtcbiAgcmV0dXJuIGRpbWVuc2lvbjtcbn0pO1xuXG5jb25zdCBkZWZhdWx0QXV0b1Njcm9sbGVyT3B0aW9ucyA9IHtcbiAgc3RhcnRGcm9tUGVyY2VudGFnZTogMC4yNSxcbiAgbWF4U2Nyb2xsQXRQZXJjZW50YWdlOiAwLjA1LFxuICBtYXhQaXhlbFNjcm9sbDogMjgsXG4gIGVhc2U6IHBlcmNlbnRhZ2UgPT4gcGVyY2VudGFnZSAqKiAyLFxuICBkdXJhdGlvbkRhbXBlbmluZzoge1xuICAgIHN0b3BEYW1wZW5pbmdBdDogMTIwMCxcbiAgICBhY2NlbGVyYXRlQXQ6IDM2MFxuICB9LFxuICBkaXNhYmxlZDogZmFsc2Vcbn07XG5cbnZhciBnZXREaXN0YW5jZVRocmVzaG9sZHMgPSAoZnVuY3Rpb24gKGNvbnRhaW5lciwgYXhpcywgZ2V0QXV0b1Njcm9sbGVyT3B0aW9ucykge1xuICBpZiAoZ2V0QXV0b1Njcm9sbGVyT3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgZ2V0QXV0b1Njcm9sbGVyT3B0aW9ucyA9ICgpID0+IGRlZmF1bHRBdXRvU2Nyb2xsZXJPcHRpb25zO1xuICB9XG4gIGNvbnN0IGF1dG9TY3JvbGxlck9wdGlvbnMgPSBnZXRBdXRvU2Nyb2xsZXJPcHRpb25zKCk7XG4gIGNvbnN0IHN0YXJ0U2Nyb2xsaW5nRnJvbSA9IGNvbnRhaW5lcltheGlzLnNpemVdICogYXV0b1Njcm9sbGVyT3B0aW9ucy5zdGFydEZyb21QZXJjZW50YWdlO1xuICBjb25zdCBtYXhTY3JvbGxWYWx1ZUF0ID0gY29udGFpbmVyW2F4aXMuc2l6ZV0gKiBhdXRvU2Nyb2xsZXJPcHRpb25zLm1heFNjcm9sbEF0UGVyY2VudGFnZTtcbiAgY29uc3QgdGhyZXNob2xkcyA9IHtcbiAgICBzdGFydFNjcm9sbGluZ0Zyb20sXG4gICAgbWF4U2Nyb2xsVmFsdWVBdFxuICB9O1xuICByZXR1cm4gdGhyZXNob2xkcztcbn0pO1xuXG52YXIgZ2V0UGVyY2VudGFnZSA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBzdGFydE9mUmFuZ2UsXG4gICAgZW5kT2ZSYW5nZSxcbiAgICBjdXJyZW50XG4gIH0gPSBfcmVmO1xuICBjb25zdCByYW5nZSA9IGVuZE9mUmFuZ2UgLSBzdGFydE9mUmFuZ2U7XG4gIGlmIChyYW5nZSA9PT0gMCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoYFxuICAgICAgRGV0ZWN0ZWQgZGlzdGFuY2UgcmFuZ2Ugb2YgMCBpbiB0aGUgZmx1aWQgYXV0byBzY3JvbGxlclxuICAgICAgVGhpcyBpcyB1bmV4cGVjdGVkIGFuZCB3b3VsZCBjYXVzZSBhIGRpdmlkZSBieSAwIGlzc3VlLlxuICAgICAgTm90IGFsbG93aW5nIGFuIGF1dG8gc2Nyb2xsXG4gICAgYCkgOiB2b2lkIDA7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY29uc3QgY3VycmVudEluUmFuZ2UgPSBjdXJyZW50IC0gc3RhcnRPZlJhbmdlO1xuICBjb25zdCBwZXJjZW50YWdlID0gY3VycmVudEluUmFuZ2UgLyByYW5nZTtcbiAgcmV0dXJuIHBlcmNlbnRhZ2U7XG59KTtcblxudmFyIG1pblNjcm9sbCA9IDE7XG5cbnZhciBnZXRWYWx1ZUZyb21EaXN0YW5jZSA9IChmdW5jdGlvbiAoZGlzdGFuY2VUb0VkZ2UsIHRocmVzaG9sZHMsIGdldEF1dG9TY3JvbGxlck9wdGlvbnMpIHtcbiAgaWYgKGdldEF1dG9TY3JvbGxlck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdldEF1dG9TY3JvbGxlck9wdGlvbnMgPSAoKSA9PiBkZWZhdWx0QXV0b1Njcm9sbGVyT3B0aW9ucztcbiAgfVxuICBjb25zdCBhdXRvU2Nyb2xsZXJPcHRpb25zID0gZ2V0QXV0b1Njcm9sbGVyT3B0aW9ucygpO1xuXG4gIGlmIChkaXN0YW5jZVRvRWRnZSA+IHRocmVzaG9sZHMuc3RhcnRTY3JvbGxpbmdGcm9tKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZiAoZGlzdGFuY2VUb0VkZ2UgPD0gdGhyZXNob2xkcy5tYXhTY3JvbGxWYWx1ZUF0KSB7XG4gICAgcmV0dXJuIGF1dG9TY3JvbGxlck9wdGlvbnMubWF4UGl4ZWxTY3JvbGw7XG4gIH1cblxuICBpZiAoZGlzdGFuY2VUb0VkZ2UgPT09IHRocmVzaG9sZHMuc3RhcnRTY3JvbGxpbmdGcm9tKSB7XG4gICAgcmV0dXJuIG1pblNjcm9sbDtcbiAgfVxuXG4gIGNvbnN0IHBlcmNlbnRhZ2VGcm9tTWF4U2Nyb2xsVmFsdWVBdCA9IGdldFBlcmNlbnRhZ2Uoe1xuICAgIHN0YXJ0T2ZSYW5nZTogdGhyZXNob2xkcy5tYXhTY3JvbGxWYWx1ZUF0LFxuICAgIGVuZE9mUmFuZ2U6IHRocmVzaG9sZHMuc3RhcnRTY3JvbGxpbmdGcm9tLFxuICAgIGN1cnJlbnQ6IGRpc3RhbmNlVG9FZGdlXG4gIH0pO1xuICBjb25zdCBwZXJjZW50YWdlRnJvbVN0YXJ0U2Nyb2xsaW5nRnJvbSA9IDEgLSBwZXJjZW50YWdlRnJvbU1heFNjcm9sbFZhbHVlQXQ7XG4gIGNvbnN0IHNjcm9sbCA9IGF1dG9TY3JvbGxlck9wdGlvbnMubWF4UGl4ZWxTY3JvbGwgKiBhdXRvU2Nyb2xsZXJPcHRpb25zLmVhc2UocGVyY2VudGFnZUZyb21TdGFydFNjcm9sbGluZ0Zyb20pO1xuXG4gIHJldHVybiBNYXRoLmNlaWwoc2Nyb2xsKTtcbn0pO1xuXG52YXIgZGFtcGVuVmFsdWVCeVRpbWUgPSAoKHByb3Bvc2VkU2Nyb2xsLCBkcmFnU3RhcnRUaW1lLCBnZXRBdXRvU2Nyb2xsZXJPcHRpb25zKSA9PiB7XG4gIGNvbnN0IGF1dG9TY3JvbGxlck9wdGlvbnMgPSBnZXRBdXRvU2Nyb2xsZXJPcHRpb25zKCk7XG4gIGNvbnN0IGFjY2VsZXJhdGVBdCA9IGF1dG9TY3JvbGxlck9wdGlvbnMuZHVyYXRpb25EYW1wZW5pbmcuYWNjZWxlcmF0ZUF0O1xuICBjb25zdCBzdG9wQXQgPSBhdXRvU2Nyb2xsZXJPcHRpb25zLmR1cmF0aW9uRGFtcGVuaW5nLnN0b3BEYW1wZW5pbmdBdDtcbiAgY29uc3Qgc3RhcnRPZlJhbmdlID0gZHJhZ1N0YXJ0VGltZTtcbiAgY29uc3QgZW5kT2ZSYW5nZSA9IHN0b3BBdDtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgcnVuVGltZSA9IG5vdyAtIHN0YXJ0T2ZSYW5nZTtcblxuICBpZiAocnVuVGltZSA+PSBzdG9wQXQpIHtcbiAgICByZXR1cm4gcHJvcG9zZWRTY3JvbGw7XG4gIH1cblxuICBpZiAocnVuVGltZSA8IGFjY2VsZXJhdGVBdCkge1xuICAgIHJldHVybiBtaW5TY3JvbGw7XG4gIH1cbiAgY29uc3QgYmV0d2VlbkFjY2VsZXJhdGVBdEFuZFN0b3BBdFBlcmNlbnRhZ2UgPSBnZXRQZXJjZW50YWdlKHtcbiAgICBzdGFydE9mUmFuZ2U6IGFjY2VsZXJhdGVBdCxcbiAgICBlbmRPZlJhbmdlLFxuICAgIGN1cnJlbnQ6IHJ1blRpbWVcbiAgfSk7XG4gIGNvbnN0IHNjcm9sbCA9IHByb3Bvc2VkU2Nyb2xsICogYXV0b1Njcm9sbGVyT3B0aW9ucy5lYXNlKGJldHdlZW5BY2NlbGVyYXRlQXRBbmRTdG9wQXRQZXJjZW50YWdlKTtcbiAgcmV0dXJuIE1hdGguY2VpbChzY3JvbGwpO1xufSk7XG5cbnZhciBnZXRWYWx1ZSA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBkaXN0YW5jZVRvRWRnZSxcbiAgICB0aHJlc2hvbGRzLFxuICAgIGRyYWdTdGFydFRpbWUsXG4gICAgc2hvdWxkVXNlVGltZURhbXBlbmluZyxcbiAgICBnZXRBdXRvU2Nyb2xsZXJPcHRpb25zXG4gIH0gPSBfcmVmO1xuICBjb25zdCBzY3JvbGwgPSBnZXRWYWx1ZUZyb21EaXN0YW5jZShkaXN0YW5jZVRvRWRnZSwgdGhyZXNob2xkcywgZ2V0QXV0b1Njcm9sbGVyT3B0aW9ucyk7XG5cbiAgaWYgKHNjcm9sbCA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYgKCFzaG91bGRVc2VUaW1lRGFtcGVuaW5nKSB7XG4gICAgcmV0dXJuIHNjcm9sbDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLm1heChkYW1wZW5WYWx1ZUJ5VGltZShzY3JvbGwsIGRyYWdTdGFydFRpbWUsIGdldEF1dG9TY3JvbGxlck9wdGlvbnMpLCBtaW5TY3JvbGwpO1xufSk7XG5cbnZhciBnZXRTY3JvbGxPbkF4aXMgPSAoX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgY29udGFpbmVyLFxuICAgIGRpc3RhbmNlVG9FZGdlcyxcbiAgICBkcmFnU3RhcnRUaW1lLFxuICAgIGF4aXMsXG4gICAgc2hvdWxkVXNlVGltZURhbXBlbmluZyxcbiAgICBnZXRBdXRvU2Nyb2xsZXJPcHRpb25zXG4gIH0gPSBfcmVmO1xuICBjb25zdCB0aHJlc2hvbGRzID0gZ2V0RGlzdGFuY2VUaHJlc2hvbGRzKGNvbnRhaW5lciwgYXhpcywgZ2V0QXV0b1Njcm9sbGVyT3B0aW9ucyk7XG4gIGNvbnN0IGlzQ2xvc2VyVG9FbmQgPSBkaXN0YW5jZVRvRWRnZXNbYXhpcy5lbmRdIDwgZGlzdGFuY2VUb0VkZ2VzW2F4aXMuc3RhcnRdO1xuICBpZiAoaXNDbG9zZXJUb0VuZCkge1xuICAgIHJldHVybiBnZXRWYWx1ZSh7XG4gICAgICBkaXN0YW5jZVRvRWRnZTogZGlzdGFuY2VUb0VkZ2VzW2F4aXMuZW5kXSxcbiAgICAgIHRocmVzaG9sZHMsXG4gICAgICBkcmFnU3RhcnRUaW1lLFxuICAgICAgc2hvdWxkVXNlVGltZURhbXBlbmluZyxcbiAgICAgIGdldEF1dG9TY3JvbGxlck9wdGlvbnNcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gLTEgKiBnZXRWYWx1ZSh7XG4gICAgZGlzdGFuY2VUb0VkZ2U6IGRpc3RhbmNlVG9FZGdlc1theGlzLnN0YXJ0XSxcbiAgICB0aHJlc2hvbGRzLFxuICAgIGRyYWdTdGFydFRpbWUsXG4gICAgc2hvdWxkVXNlVGltZURhbXBlbmluZyxcbiAgICBnZXRBdXRvU2Nyb2xsZXJPcHRpb25zXG4gIH0pO1xufSk7XG5cbnZhciBhZGp1c3RGb3JTaXplTGltaXRzID0gKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGNvbnRhaW5lcixcbiAgICBzdWJqZWN0LFxuICAgIHByb3Bvc2VkU2Nyb2xsXG4gIH0gPSBfcmVmO1xuICBjb25zdCBpc1Rvb0JpZ1ZlcnRpY2FsbHkgPSBzdWJqZWN0LmhlaWdodCA+IGNvbnRhaW5lci5oZWlnaHQ7XG4gIGNvbnN0IGlzVG9vQmlnSG9yaXpvbnRhbGx5ID0gc3ViamVjdC53aWR0aCA+IGNvbnRhaW5lci53aWR0aDtcblxuICBpZiAoIWlzVG9vQmlnSG9yaXpvbnRhbGx5ICYmICFpc1Rvb0JpZ1ZlcnRpY2FsbHkpIHtcbiAgICByZXR1cm4gcHJvcG9zZWRTY3JvbGw7XG4gIH1cblxuICBpZiAoaXNUb29CaWdIb3Jpem9udGFsbHkgJiYgaXNUb29CaWdWZXJ0aWNhbGx5KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGlzVG9vQmlnSG9yaXpvbnRhbGx5ID8gMCA6IHByb3Bvc2VkU2Nyb2xsLngsXG4gICAgeTogaXNUb29CaWdWZXJ0aWNhbGx5ID8gMCA6IHByb3Bvc2VkU2Nyb2xsLnlcbiAgfTtcbn0pO1xuXG5jb25zdCBjbGVhbiA9IGFwcGx5KHZhbHVlID0+IHZhbHVlID09PSAwID8gMCA6IHZhbHVlKTtcbnZhciBnZXRTY3JvbGwkMSA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBkcmFnU3RhcnRUaW1lLFxuICAgIGNvbnRhaW5lcixcbiAgICBzdWJqZWN0LFxuICAgIGNlbnRlcixcbiAgICBzaG91bGRVc2VUaW1lRGFtcGVuaW5nLFxuICAgIGdldEF1dG9TY3JvbGxlck9wdGlvbnNcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGRpc3RhbmNlVG9FZGdlcyA9IHtcbiAgICB0b3A6IGNlbnRlci55IC0gY29udGFpbmVyLnRvcCxcbiAgICByaWdodDogY29udGFpbmVyLnJpZ2h0IC0gY2VudGVyLngsXG4gICAgYm90dG9tOiBjb250YWluZXIuYm90dG9tIC0gY2VudGVyLnksXG4gICAgbGVmdDogY2VudGVyLnggLSBjb250YWluZXIubGVmdFxuICB9O1xuXG4gIGNvbnN0IHkgPSBnZXRTY3JvbGxPbkF4aXMoe1xuICAgIGNvbnRhaW5lcixcbiAgICBkaXN0YW5jZVRvRWRnZXMsXG4gICAgZHJhZ1N0YXJ0VGltZSxcbiAgICBheGlzOiB2ZXJ0aWNhbCxcbiAgICBzaG91bGRVc2VUaW1lRGFtcGVuaW5nLFxuICAgIGdldEF1dG9TY3JvbGxlck9wdGlvbnNcbiAgfSk7XG4gIGNvbnN0IHggPSBnZXRTY3JvbGxPbkF4aXMoe1xuICAgIGNvbnRhaW5lcixcbiAgICBkaXN0YW5jZVRvRWRnZXMsXG4gICAgZHJhZ1N0YXJ0VGltZSxcbiAgICBheGlzOiBob3Jpem9udGFsLFxuICAgIHNob3VsZFVzZVRpbWVEYW1wZW5pbmcsXG4gICAgZ2V0QXV0b1Njcm9sbGVyT3B0aW9uc1xuICB9KTtcbiAgY29uc3QgcmVxdWlyZWQgPSBjbGVhbih7XG4gICAgeCxcbiAgICB5XG4gIH0pO1xuXG4gIGlmIChpc0VxdWFsJDEocmVxdWlyZWQsIG9yaWdpbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGxpbWl0ZWQgPSBhZGp1c3RGb3JTaXplTGltaXRzKHtcbiAgICBjb250YWluZXIsXG4gICAgc3ViamVjdCxcbiAgICBwcm9wb3NlZFNjcm9sbDogcmVxdWlyZWRcbiAgfSk7XG4gIGlmICghbGltaXRlZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBpc0VxdWFsJDEobGltaXRlZCwgb3JpZ2luKSA/IG51bGwgOiBsaW1pdGVkO1xufSk7XG5cbmNvbnN0IHNtYWxsZXN0U2lnbmVkID0gYXBwbHkodmFsdWUgPT4ge1xuICBpZiAodmFsdWUgPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gdmFsdWUgPiAwID8gMSA6IC0xO1xufSk7XG5jb25zdCBnZXRPdmVybGFwID0gKCgpID0+IHtcbiAgY29uc3QgZ2V0UmVtYWluZGVyID0gKHRhcmdldCwgbWF4KSA9PiB7XG4gICAgaWYgKHRhcmdldCA8IDApIHtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIGlmICh0YXJnZXQgPiBtYXgpIHtcbiAgICAgIHJldHVybiB0YXJnZXQgLSBtYXg7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9O1xuICByZXR1cm4gX3JlZiA9PiB7XG4gICAgbGV0IHtcbiAgICAgIGN1cnJlbnQsXG4gICAgICBtYXgsXG4gICAgICBjaGFuZ2VcbiAgICB9ID0gX3JlZjtcbiAgICBjb25zdCB0YXJnZXRTY3JvbGwgPSBhZGQoY3VycmVudCwgY2hhbmdlKTtcbiAgICBjb25zdCBvdmVybGFwID0ge1xuICAgICAgeDogZ2V0UmVtYWluZGVyKHRhcmdldFNjcm9sbC54LCBtYXgueCksXG4gICAgICB5OiBnZXRSZW1haW5kZXIodGFyZ2V0U2Nyb2xsLnksIG1heC55KVxuICAgIH07XG4gICAgaWYgKGlzRXF1YWwkMShvdmVybGFwLCBvcmlnaW4pKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG92ZXJsYXA7XG4gIH07XG59KSgpO1xuY29uc3QgY2FuUGFydGlhbGx5U2Nyb2xsID0gX3JlZjIgPT4ge1xuICBsZXQge1xuICAgIG1heDogcmF3TWF4LFxuICAgIGN1cnJlbnQsXG4gICAgY2hhbmdlXG4gIH0gPSBfcmVmMjtcbiAgY29uc3QgbWF4ID0ge1xuICAgIHg6IE1hdGgubWF4KGN1cnJlbnQueCwgcmF3TWF4LngpLFxuICAgIHk6IE1hdGgubWF4KGN1cnJlbnQueSwgcmF3TWF4LnkpXG4gIH07XG5cbiAgY29uc3Qgc21hbGxlc3RDaGFuZ2UgPSBzbWFsbGVzdFNpZ25lZChjaGFuZ2UpO1xuICBjb25zdCBvdmVybGFwID0gZ2V0T3ZlcmxhcCh7XG4gICAgbWF4LFxuICAgIGN1cnJlbnQsXG4gICAgY2hhbmdlOiBzbWFsbGVzdENoYW5nZVxuICB9KTtcblxuICBpZiAoIW92ZXJsYXApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChzbWFsbGVzdENoYW5nZS54ICE9PSAwICYmIG92ZXJsYXAueCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHNtYWxsZXN0Q2hhbmdlLnkgIT09IDAgJiYgb3ZlcmxhcC55ID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbmNvbnN0IGNhblNjcm9sbFdpbmRvdyA9ICh2aWV3cG9ydCwgY2hhbmdlKSA9PiBjYW5QYXJ0aWFsbHlTY3JvbGwoe1xuICBjdXJyZW50OiB2aWV3cG9ydC5zY3JvbGwuY3VycmVudCxcbiAgbWF4OiB2aWV3cG9ydC5zY3JvbGwubWF4LFxuICBjaGFuZ2Vcbn0pO1xuY29uc3QgZ2V0V2luZG93T3ZlcmxhcCA9ICh2aWV3cG9ydCwgY2hhbmdlKSA9PiB7XG4gIGlmICghY2FuU2Nyb2xsV2luZG93KHZpZXdwb3J0LCBjaGFuZ2UpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgbWF4ID0gdmlld3BvcnQuc2Nyb2xsLm1heDtcbiAgY29uc3QgY3VycmVudCA9IHZpZXdwb3J0LnNjcm9sbC5jdXJyZW50O1xuICByZXR1cm4gZ2V0T3ZlcmxhcCh7XG4gICAgY3VycmVudCxcbiAgICBtYXgsXG4gICAgY2hhbmdlXG4gIH0pO1xufTtcbmNvbnN0IGNhblNjcm9sbERyb3BwYWJsZSA9IChkcm9wcGFibGUsIGNoYW5nZSkgPT4ge1xuICBjb25zdCBmcmFtZSA9IGRyb3BwYWJsZS5mcmFtZTtcblxuICBpZiAoIWZyYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBjYW5QYXJ0aWFsbHlTY3JvbGwoe1xuICAgIGN1cnJlbnQ6IGZyYW1lLnNjcm9sbC5jdXJyZW50LFxuICAgIG1heDogZnJhbWUuc2Nyb2xsLm1heCxcbiAgICBjaGFuZ2VcbiAgfSk7XG59O1xuY29uc3QgZ2V0RHJvcHBhYmxlT3ZlcmxhcCA9IChkcm9wcGFibGUsIGNoYW5nZSkgPT4ge1xuICBjb25zdCBmcmFtZSA9IGRyb3BwYWJsZS5mcmFtZTtcbiAgaWYgKCFmcmFtZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICghY2FuU2Nyb2xsRHJvcHBhYmxlKGRyb3BwYWJsZSwgY2hhbmdlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBnZXRPdmVybGFwKHtcbiAgICBjdXJyZW50OiBmcmFtZS5zY3JvbGwuY3VycmVudCxcbiAgICBtYXg6IGZyYW1lLnNjcm9sbC5tYXgsXG4gICAgY2hhbmdlXG4gIH0pO1xufTtcblxudmFyIGdldFdpbmRvd1Njcm9sbENoYW5nZSA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICB2aWV3cG9ydCxcbiAgICBzdWJqZWN0LFxuICAgIGNlbnRlcixcbiAgICBkcmFnU3RhcnRUaW1lLFxuICAgIHNob3VsZFVzZVRpbWVEYW1wZW5pbmcsXG4gICAgZ2V0QXV0b1Njcm9sbGVyT3B0aW9uc1xuICB9ID0gX3JlZjtcbiAgY29uc3Qgc2Nyb2xsID0gZ2V0U2Nyb2xsJDEoe1xuICAgIGRyYWdTdGFydFRpbWUsXG4gICAgY29udGFpbmVyOiB2aWV3cG9ydC5mcmFtZSxcbiAgICBzdWJqZWN0LFxuICAgIGNlbnRlcixcbiAgICBzaG91bGRVc2VUaW1lRGFtcGVuaW5nLFxuICAgIGdldEF1dG9TY3JvbGxlck9wdGlvbnNcbiAgfSk7XG4gIHJldHVybiBzY3JvbGwgJiYgY2FuU2Nyb2xsV2luZG93KHZpZXdwb3J0LCBzY3JvbGwpID8gc2Nyb2xsIDogbnVsbDtcbn0pO1xuXG52YXIgZ2V0RHJvcHBhYmxlU2Nyb2xsQ2hhbmdlID0gKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGRyb3BwYWJsZSxcbiAgICBzdWJqZWN0LFxuICAgIGNlbnRlcixcbiAgICBkcmFnU3RhcnRUaW1lLFxuICAgIHNob3VsZFVzZVRpbWVEYW1wZW5pbmcsXG4gICAgZ2V0QXV0b1Njcm9sbGVyT3B0aW9uc1xuICB9ID0gX3JlZjtcbiAgY29uc3QgZnJhbWUgPSBkcm9wcGFibGUuZnJhbWU7XG5cbiAgaWYgKCFmcmFtZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHNjcm9sbCA9IGdldFNjcm9sbCQxKHtcbiAgICBkcmFnU3RhcnRUaW1lLFxuICAgIGNvbnRhaW5lcjogZnJhbWUucGFnZU1hcmdpbkJveCxcbiAgICBzdWJqZWN0LFxuICAgIGNlbnRlcixcbiAgICBzaG91bGRVc2VUaW1lRGFtcGVuaW5nLFxuICAgIGdldEF1dG9TY3JvbGxlck9wdGlvbnNcbiAgfSk7XG4gIHJldHVybiBzY3JvbGwgJiYgY2FuU2Nyb2xsRHJvcHBhYmxlKGRyb3BwYWJsZSwgc2Nyb2xsKSA/IHNjcm9sbCA6IG51bGw7XG59KTtcblxudmFyIHNjcm9sbCA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBzdGF0ZSxcbiAgICBkcmFnU3RhcnRUaW1lLFxuICAgIHNob3VsZFVzZVRpbWVEYW1wZW5pbmcsXG4gICAgc2Nyb2xsV2luZG93LFxuICAgIHNjcm9sbERyb3BwYWJsZSxcbiAgICBnZXRBdXRvU2Nyb2xsZXJPcHRpb25zXG4gIH0gPSBfcmVmO1xuICBjb25zdCBjZW50ZXIgPSBzdGF0ZS5jdXJyZW50LnBhZ2UuYm9yZGVyQm94Q2VudGVyO1xuICBjb25zdCBkcmFnZ2FibGUgPSBzdGF0ZS5kaW1lbnNpb25zLmRyYWdnYWJsZXNbc3RhdGUuY3JpdGljYWwuZHJhZ2dhYmxlLmlkXTtcbiAgY29uc3Qgc3ViamVjdCA9IGRyYWdnYWJsZS5wYWdlLm1hcmdpbkJveDtcbiAgaWYgKHN0YXRlLmlzV2luZG93U2Nyb2xsQWxsb3dlZCkge1xuICAgIGNvbnN0IHZpZXdwb3J0ID0gc3RhdGUudmlld3BvcnQ7XG4gICAgY29uc3QgY2hhbmdlID0gZ2V0V2luZG93U2Nyb2xsQ2hhbmdlKHtcbiAgICAgIGRyYWdTdGFydFRpbWUsXG4gICAgICB2aWV3cG9ydCxcbiAgICAgIHN1YmplY3QsXG4gICAgICBjZW50ZXIsXG4gICAgICBzaG91bGRVc2VUaW1lRGFtcGVuaW5nLFxuICAgICAgZ2V0QXV0b1Njcm9sbGVyT3B0aW9uc1xuICAgIH0pO1xuICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgIHNjcm9sbFdpbmRvdyhjaGFuZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBjb25zdCBkcm9wcGFibGUgPSBnZXRCZXN0U2Nyb2xsYWJsZURyb3BwYWJsZSh7XG4gICAgY2VudGVyLFxuICAgIGRlc3RpbmF0aW9uOiB3aGF0SXNEcmFnZ2VkT3ZlcihzdGF0ZS5pbXBhY3QpLFxuICAgIGRyb3BwYWJsZXM6IHN0YXRlLmRpbWVuc2lvbnMuZHJvcHBhYmxlc1xuICB9KTtcbiAgaWYgKCFkcm9wcGFibGUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY2hhbmdlID0gZ2V0RHJvcHBhYmxlU2Nyb2xsQ2hhbmdlKHtcbiAgICBkcmFnU3RhcnRUaW1lLFxuICAgIGRyb3BwYWJsZSxcbiAgICBzdWJqZWN0LFxuICAgIGNlbnRlcixcbiAgICBzaG91bGRVc2VUaW1lRGFtcGVuaW5nLFxuICAgIGdldEF1dG9TY3JvbGxlck9wdGlvbnNcbiAgfSk7XG4gIGlmIChjaGFuZ2UpIHtcbiAgICBzY3JvbGxEcm9wcGFibGUoZHJvcHBhYmxlLmRlc2NyaXB0b3IuaWQsIGNoYW5nZSk7XG4gIH1cbn0pO1xuXG52YXIgY3JlYXRlRmx1aWRTY3JvbGxlciA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBzY3JvbGxXaW5kb3csXG4gICAgc2Nyb2xsRHJvcHBhYmxlLFxuICAgIGdldEF1dG9TY3JvbGxlck9wdGlvbnMgPSAoKSA9PiBkZWZhdWx0QXV0b1Njcm9sbGVyT3B0aW9uc1xuICB9ID0gX3JlZjtcbiAgY29uc3Qgc2NoZWR1bGVXaW5kb3dTY3JvbGwgPSByYWZTY2hkX19kZWZhdWx0W1wiZGVmYXVsdFwiXShzY3JvbGxXaW5kb3cpO1xuICBjb25zdCBzY2hlZHVsZURyb3BwYWJsZVNjcm9sbCA9IHJhZlNjaGRfX2RlZmF1bHRbXCJkZWZhdWx0XCJdKHNjcm9sbERyb3BwYWJsZSk7XG4gIGxldCBkcmFnZ2luZyA9IG51bGw7XG4gIGNvbnN0IHRyeVNjcm9sbCA9IHN0YXRlID0+IHtcbiAgICAhZHJhZ2dpbmcgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgZmx1aWQgc2Nyb2xsIGlmIG5vdCBkcmFnZ2luZycpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBjb25zdCB7XG4gICAgICBzaG91bGRVc2VUaW1lRGFtcGVuaW5nLFxuICAgICAgZHJhZ1N0YXJ0VGltZVxuICAgIH0gPSBkcmFnZ2luZztcbiAgICBzY3JvbGwoe1xuICAgICAgc3RhdGUsXG4gICAgICBzY3JvbGxXaW5kb3c6IHNjaGVkdWxlV2luZG93U2Nyb2xsLFxuICAgICAgc2Nyb2xsRHJvcHBhYmxlOiBzY2hlZHVsZURyb3BwYWJsZVNjcm9sbCxcbiAgICAgIGRyYWdTdGFydFRpbWUsXG4gICAgICBzaG91bGRVc2VUaW1lRGFtcGVuaW5nLFxuICAgICAgZ2V0QXV0b1Njcm9sbGVyT3B0aW9uc1xuICAgIH0pO1xuICB9O1xuICBjb25zdCBzdGFydCQxID0gc3RhdGUgPT4ge1xuICAgIHN0YXJ0KCk7XG4gICAgISFkcmFnZ2luZyA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0Nhbm5vdCBzdGFydCBhdXRvIHNjcm9sbGluZyB3aGVuIGFscmVhZHkgc3RhcnRlZCcpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBjb25zdCBkcmFnU3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgd2FzU2Nyb2xsTmVlZGVkID0gZmFsc2U7XG4gICAgY29uc3QgZmFrZVNjcm9sbENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgd2FzU2Nyb2xsTmVlZGVkID0gdHJ1ZTtcbiAgICB9O1xuICAgIHNjcm9sbCh7XG4gICAgICBzdGF0ZSxcbiAgICAgIGRyYWdTdGFydFRpbWU6IDAsXG4gICAgICBzaG91bGRVc2VUaW1lRGFtcGVuaW5nOiBmYWxzZSxcbiAgICAgIHNjcm9sbFdpbmRvdzogZmFrZVNjcm9sbENhbGxiYWNrLFxuICAgICAgc2Nyb2xsRHJvcHBhYmxlOiBmYWtlU2Nyb2xsQ2FsbGJhY2ssXG4gICAgICBnZXRBdXRvU2Nyb2xsZXJPcHRpb25zXG4gICAgfSk7XG4gICAgZHJhZ2dpbmcgPSB7XG4gICAgICBkcmFnU3RhcnRUaW1lLFxuICAgICAgc2hvdWxkVXNlVGltZURhbXBlbmluZzogd2FzU2Nyb2xsTmVlZGVkXG4gICAgfTtcbiAgICBmaW5pc2goKTtcblxuICAgIGlmICh3YXNTY3JvbGxOZWVkZWQpIHtcbiAgICAgIHRyeVNjcm9sbChzdGF0ZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgIGlmICghZHJhZ2dpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2NoZWR1bGVXaW5kb3dTY3JvbGwuY2FuY2VsKCk7XG4gICAgc2NoZWR1bGVEcm9wcGFibGVTY3JvbGwuY2FuY2VsKCk7XG4gICAgZHJhZ2dpbmcgPSBudWxsO1xuICB9O1xuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBzdGFydCQxLFxuICAgIHN0b3AsXG4gICAgc2Nyb2xsOiB0cnlTY3JvbGxcbiAgfTtcbn0pO1xuXG52YXIgY3JlYXRlSnVtcFNjcm9sbGVyID0gKF9yZWYgPT4ge1xuICBsZXQge1xuICAgIG1vdmUsXG4gICAgc2Nyb2xsRHJvcHBhYmxlLFxuICAgIHNjcm9sbFdpbmRvd1xuICB9ID0gX3JlZjtcbiAgY29uc3QgbW92ZUJ5T2Zmc2V0ID0gKHN0YXRlLCBvZmZzZXQpID0+IHtcbiAgICBjb25zdCBjbGllbnQgPSBhZGQoc3RhdGUuY3VycmVudC5jbGllbnQuc2VsZWN0aW9uLCBvZmZzZXQpO1xuICAgIG1vdmUoe1xuICAgICAgY2xpZW50XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IHNjcm9sbERyb3BwYWJsZUFzTXVjaEFzSXRDYW4gPSAoZHJvcHBhYmxlLCBjaGFuZ2UpID0+IHtcbiAgICBpZiAoIWNhblNjcm9sbERyb3BwYWJsZShkcm9wcGFibGUsIGNoYW5nZSkpIHtcbiAgICAgIHJldHVybiBjaGFuZ2U7XG4gICAgfVxuICAgIGNvbnN0IG92ZXJsYXAgPSBnZXREcm9wcGFibGVPdmVybGFwKGRyb3BwYWJsZSwgY2hhbmdlKTtcblxuICAgIGlmICghb3ZlcmxhcCkge1xuICAgICAgc2Nyb2xsRHJvcHBhYmxlKGRyb3BwYWJsZS5kZXNjcmlwdG9yLmlkLCBjaGFuZ2UpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgd2hhdFRoZURyb3BwYWJsZUNhblNjcm9sbCA9IHN1YnRyYWN0KGNoYW5nZSwgb3ZlcmxhcCk7XG4gICAgc2Nyb2xsRHJvcHBhYmxlKGRyb3BwYWJsZS5kZXNjcmlwdG9yLmlkLCB3aGF0VGhlRHJvcHBhYmxlQ2FuU2Nyb2xsKTtcbiAgICBjb25zdCByZW1haW5kZXIgPSBzdWJ0cmFjdChjaGFuZ2UsIHdoYXRUaGVEcm9wcGFibGVDYW5TY3JvbGwpO1xuICAgIHJldHVybiByZW1haW5kZXI7XG4gIH07XG4gIGNvbnN0IHNjcm9sbFdpbmRvd0FzTXVjaEFzSXRDYW4gPSAoaXNXaW5kb3dTY3JvbGxBbGxvd2VkLCB2aWV3cG9ydCwgY2hhbmdlKSA9PiB7XG4gICAgaWYgKCFpc1dpbmRvd1Njcm9sbEFsbG93ZWQpIHtcbiAgICAgIHJldHVybiBjaGFuZ2U7XG4gICAgfVxuICAgIGlmICghY2FuU2Nyb2xsV2luZG93KHZpZXdwb3J0LCBjaGFuZ2UpKSB7XG4gICAgICByZXR1cm4gY2hhbmdlO1xuICAgIH1cbiAgICBjb25zdCBvdmVybGFwID0gZ2V0V2luZG93T3ZlcmxhcCh2aWV3cG9ydCwgY2hhbmdlKTtcblxuICAgIGlmICghb3ZlcmxhcCkge1xuICAgICAgc2Nyb2xsV2luZG93KGNoYW5nZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB3aGF0VGhlV2luZG93Q2FuU2Nyb2xsID0gc3VidHJhY3QoY2hhbmdlLCBvdmVybGFwKTtcbiAgICBzY3JvbGxXaW5kb3cod2hhdFRoZVdpbmRvd0NhblNjcm9sbCk7XG4gICAgY29uc3QgcmVtYWluZGVyID0gc3VidHJhY3QoY2hhbmdlLCB3aGF0VGhlV2luZG93Q2FuU2Nyb2xsKTtcbiAgICByZXR1cm4gcmVtYWluZGVyO1xuICB9O1xuICBjb25zdCBqdW1wU2Nyb2xsZXIgPSBzdGF0ZSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHN0YXRlLnNjcm9sbEp1bXBSZXF1ZXN0O1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHdoYXRJc0RyYWdnZWRPdmVyKHN0YXRlLmltcGFjdCk7XG4gICAgIWRlc3RpbmF0aW9uID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IHBlcmZvcm0gYSBqdW1wIHNjcm9sbCB3aGVuIHRoZXJlIGlzIG5vIGRlc3RpbmF0aW9uJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuXG4gICAgY29uc3QgZHJvcHBhYmxlUmVtYWluZGVyID0gc2Nyb2xsRHJvcHBhYmxlQXNNdWNoQXNJdENhbihzdGF0ZS5kaW1lbnNpb25zLmRyb3BwYWJsZXNbZGVzdGluYXRpb25dLCByZXF1ZXN0KTtcblxuICAgIGlmICghZHJvcHBhYmxlUmVtYWluZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZpZXdwb3J0ID0gc3RhdGUudmlld3BvcnQ7XG4gICAgY29uc3Qgd2luZG93UmVtYWluZGVyID0gc2Nyb2xsV2luZG93QXNNdWNoQXNJdENhbihzdGF0ZS5pc1dpbmRvd1Njcm9sbEFsbG93ZWQsIHZpZXdwb3J0LCBkcm9wcGFibGVSZW1haW5kZXIpO1xuXG4gICAgaWYgKCF3aW5kb3dSZW1haW5kZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBtb3ZlQnlPZmZzZXQoc3RhdGUsIHdpbmRvd1JlbWFpbmRlcik7XG4gIH07XG4gIHJldHVybiBqdW1wU2Nyb2xsZXI7XG59KTtcblxudmFyIGNyZWF0ZUF1dG9TY3JvbGxlciA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICBzY3JvbGxEcm9wcGFibGUsXG4gICAgc2Nyb2xsV2luZG93LFxuICAgIG1vdmUsXG4gICAgZ2V0QXV0b1Njcm9sbGVyT3B0aW9uc1xuICB9ID0gX3JlZjtcbiAgY29uc3QgZmx1aWRTY3JvbGxlciA9IGNyZWF0ZUZsdWlkU2Nyb2xsZXIoe1xuICAgIHNjcm9sbFdpbmRvdyxcbiAgICBzY3JvbGxEcm9wcGFibGUsXG4gICAgZ2V0QXV0b1Njcm9sbGVyT3B0aW9uc1xuICB9KTtcbiAgY29uc3QganVtcFNjcm9sbCA9IGNyZWF0ZUp1bXBTY3JvbGxlcih7XG4gICAgbW92ZSxcbiAgICBzY3JvbGxXaW5kb3csXG4gICAgc2Nyb2xsRHJvcHBhYmxlXG4gIH0pO1xuICBjb25zdCBzY3JvbGwgPSBzdGF0ZSA9PiB7XG4gICAgY29uc3QgYXV0b1Njcm9sbGVyT3B0aW9ucyA9IGdldEF1dG9TY3JvbGxlck9wdGlvbnMoKTtcblxuICAgIGlmIChhdXRvU2Nyb2xsZXJPcHRpb25zLmRpc2FibGVkIHx8IHN0YXRlLnBoYXNlICE9PSAnRFJBR0dJTkcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzdGF0ZS5tb3ZlbWVudE1vZGUgPT09ICdGTFVJRCcpIHtcbiAgICAgIGZsdWlkU2Nyb2xsZXIuc2Nyb2xsKHN0YXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFzdGF0ZS5zY3JvbGxKdW1wUmVxdWVzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBqdW1wU2Nyb2xsKHN0YXRlKTtcbiAgfTtcbiAgY29uc3Qgc2Nyb2xsZXIgPSB7XG4gICAgc2Nyb2xsLFxuICAgIHN0YXJ0OiBmbHVpZFNjcm9sbGVyLnN0YXJ0LFxuICAgIHN0b3A6IGZsdWlkU2Nyb2xsZXIuc3RvcFxuICB9O1xuICByZXR1cm4gc2Nyb2xsZXI7XG59KTtcblxuY29uc3QgcHJlZml4ID0gJ2RhdGEtcmZkJztcbmNvbnN0IGRyYWdIYW5kbGUgPSAoKCkgPT4ge1xuICBjb25zdCBiYXNlID0gYCR7cHJlZml4fS1kcmFnLWhhbmRsZWA7XG4gIHJldHVybiB7XG4gICAgYmFzZSxcbiAgICBkcmFnZ2FibGVJZDogYCR7YmFzZX0tZHJhZ2dhYmxlLWlkYCxcbiAgICBjb250ZXh0SWQ6IGAke2Jhc2V9LWNvbnRleHQtaWRgXG4gIH07XG59KSgpO1xuY29uc3QgZHJhZ2dhYmxlID0gKCgpID0+IHtcbiAgY29uc3QgYmFzZSA9IGAke3ByZWZpeH0tZHJhZ2dhYmxlYDtcbiAgcmV0dXJuIHtcbiAgICBiYXNlLFxuICAgIGNvbnRleHRJZDogYCR7YmFzZX0tY29udGV4dC1pZGAsXG4gICAgaWQ6IGAke2Jhc2V9LWlkYFxuICB9O1xufSkoKTtcbmNvbnN0IGRyb3BwYWJsZSA9ICgoKSA9PiB7XG4gIGNvbnN0IGJhc2UgPSBgJHtwcmVmaXh9LWRyb3BwYWJsZWA7XG4gIHJldHVybiB7XG4gICAgYmFzZSxcbiAgICBjb250ZXh0SWQ6IGAke2Jhc2V9LWNvbnRleHQtaWRgLFxuICAgIGlkOiBgJHtiYXNlfS1pZGBcbiAgfTtcbn0pKCk7XG5jb25zdCBzY3JvbGxDb250YWluZXIgPSB7XG4gIGNvbnRleHRJZDogYCR7cHJlZml4fS1zY3JvbGwtY29udGFpbmVyLWNvbnRleHQtaWRgXG59O1xuXG5jb25zdCBtYWtlR2V0U2VsZWN0b3IgPSBjb250ZXh0ID0+IGF0dHJpYnV0ZSA9PiBgWyR7YXR0cmlidXRlfT1cIiR7Y29udGV4dH1cIl1gO1xuY29uc3QgZ2V0U3R5bGVzID0gKHJ1bGVzLCBwcm9wZXJ0eSkgPT4gcnVsZXMubWFwKHJ1bGUgPT4ge1xuICBjb25zdCB2YWx1ZSA9IHJ1bGUuc3R5bGVzW3Byb3BlcnR5XTtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gYCR7cnVsZS5zZWxlY3Rvcn0geyAke3ZhbHVlfSB9YDtcbn0pLmpvaW4oJyAnKTtcbmNvbnN0IG5vUG9pbnRlckV2ZW50cyA9ICdwb2ludGVyLWV2ZW50czogbm9uZTsnO1xudmFyIGdldFN0eWxlcyQxID0gKGNvbnRleHRJZCA9PiB7XG4gIGNvbnN0IGdldFNlbGVjdG9yID0gbWFrZUdldFNlbGVjdG9yKGNvbnRleHRJZCk7XG5cbiAgY29uc3QgZHJhZ0hhbmRsZSQxID0gKCgpID0+IHtcbiAgICBjb25zdCBncmFiQ3Vyc29yID0gYFxuICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWI7XG4gICAgICBjdXJzb3I6IGdyYWI7XG4gICAgYDtcbiAgICByZXR1cm4ge1xuICAgICAgc2VsZWN0b3I6IGdldFNlbGVjdG9yKGRyYWdIYW5kbGUuY29udGV4dElkKSxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBhbHdheXM6IGBcbiAgICAgICAgICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7XG4gICAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsMCwwLDApO1xuICAgICAgICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xuICAgICAgICBgLFxuICAgICAgICByZXN0aW5nOiBncmFiQ3Vyc29yLFxuICAgICAgICBkcmFnZ2luZzogbm9Qb2ludGVyRXZlbnRzLFxuICAgICAgICBkcm9wQW5pbWF0aW5nOiBncmFiQ3Vyc29yXG4gICAgICB9XG4gICAgfTtcbiAgfSkoKTtcblxuICBjb25zdCBkcmFnZ2FibGUkMSA9ICgoKSA9PiB7XG4gICAgY29uc3QgdHJhbnNpdGlvbiA9IGBcbiAgICAgIHRyYW5zaXRpb246ICR7dHJhbnNpdGlvbnMub3V0T2ZUaGVXYXl9O1xuICAgIGA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGVjdG9yOiBnZXRTZWxlY3RvcihkcmFnZ2FibGUuY29udGV4dElkKSxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBkcmFnZ2luZzogdHJhbnNpdGlvbixcbiAgICAgICAgZHJvcEFuaW1hdGluZzogdHJhbnNpdGlvbixcbiAgICAgICAgdXNlckNhbmNlbDogdHJhbnNpdGlvblxuICAgICAgfVxuICAgIH07XG4gIH0pKCk7XG5cbiAgY29uc3QgZHJvcHBhYmxlJDEgPSB7XG4gICAgc2VsZWN0b3I6IGdldFNlbGVjdG9yKGRyb3BwYWJsZS5jb250ZXh0SWQpLFxuICAgIHN0eWxlczoge1xuICAgICAgYWx3YXlzOiBgb3ZlcmZsb3ctYW5jaG9yOiBub25lO2BcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYm9keSA9IHtcbiAgICBzZWxlY3RvcjogJ2JvZHknLFxuICAgIHN0eWxlczoge1xuICAgICAgZHJhZ2dpbmc6IGBcbiAgICAgICAgY3Vyc29yOiBncmFiYmluZztcbiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWJiaW5nO1xuICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICBvdmVyZmxvdy1hbmNob3I6IG5vbmU7XG4gICAgICBgXG4gICAgfVxuICB9O1xuICBjb25zdCBydWxlcyA9IFtkcmFnZ2FibGUkMSwgZHJhZ0hhbmRsZSQxLCBkcm9wcGFibGUkMSwgYm9keV07XG4gIHJldHVybiB7XG4gICAgYWx3YXlzOiBnZXRTdHlsZXMocnVsZXMsICdhbHdheXMnKSxcbiAgICByZXN0aW5nOiBnZXRTdHlsZXMocnVsZXMsICdyZXN0aW5nJyksXG4gICAgZHJhZ2dpbmc6IGdldFN0eWxlcyhydWxlcywgJ2RyYWdnaW5nJyksXG4gICAgZHJvcEFuaW1hdGluZzogZ2V0U3R5bGVzKHJ1bGVzLCAnZHJvcEFuaW1hdGluZycpLFxuICAgIHVzZXJDYW5jZWw6IGdldFN0eWxlcyhydWxlcywgJ3VzZXJDYW5jZWwnKVxuICB9O1xufSk7XG5cbmNvbnN0IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0O1xudmFyIHVzZUxheW91dEVmZmVjdCA9IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3Q7XG5cbmNvbnN0IGdldEhlYWQgPSAoKSA9PiB7XG4gIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkJyk7XG4gICFoZWFkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IGZpbmQgdGhlIGhlYWQgdG8gYXBwZW5kIGEgc3R5bGUgdG8nKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHJldHVybiBoZWFkO1xufTtcbmNvbnN0IGNyZWF0ZVN0eWxlRWwgPSBub25jZSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgaWYgKG5vbmNlKSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdub25jZScsIG5vbmNlKTtcbiAgfVxuICBlbC50eXBlID0gJ3RleHQvY3NzJztcbiAgcmV0dXJuIGVsO1xufTtcbmZ1bmN0aW9uIHVzZVN0eWxlTWFyc2hhbChjb250ZXh0SWQsIG5vbmNlKSB7XG4gIGNvbnN0IHN0eWxlcyA9IHVzZU1lbW9PbmUudXNlTWVtbygoKSA9PiBnZXRTdHlsZXMkMShjb250ZXh0SWQpLCBbY29udGV4dElkXSk7XG4gIGNvbnN0IGFsd2F5c1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgZHluYW1pY1JlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcblxuICBjb25zdCBzZXREeW5hbWljU3R5bGUgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKFxuICBtZW1vaXplT25lX19kZWZhdWx0W1wiZGVmYXVsdFwiXShwcm9wb3NlZCA9PiB7XG4gICAgY29uc3QgZWwgPSBkeW5hbWljUmVmLmN1cnJlbnQ7XG4gICAgIWVsID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IHNldCBkeW5hbWljIHN0eWxlIGVsZW1lbnQgaWYgaXQgaXMgbm90IHNldCcpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBlbC50ZXh0Q29udGVudCA9IHByb3Bvc2VkO1xuICB9KSwgW10pO1xuICBjb25zdCBzZXRBbHdheXNTdHlsZSA9IHVzZU1lbW9PbmUudXNlQ2FsbGJhY2socHJvcG9zZWQgPT4ge1xuICAgIGNvbnN0IGVsID0gYWx3YXlzUmVmLmN1cnJlbnQ7XG4gICAgIWVsID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IHNldCBkeW5hbWljIHN0eWxlIGVsZW1lbnQgaWYgaXQgaXMgbm90IHNldCcpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBlbC50ZXh0Q29udGVudCA9IHByb3Bvc2VkO1xuICB9LCBbXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAhKCFhbHdheXNSZWYuY3VycmVudCAmJiAhZHluYW1pY1JlZi5jdXJyZW50KSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ3N0eWxlIGVsZW1lbnRzIGFscmVhZHkgbW91bnRlZCcpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBjb25zdCBhbHdheXMgPSBjcmVhdGVTdHlsZUVsKG5vbmNlKTtcbiAgICBjb25zdCBkeW5hbWljID0gY3JlYXRlU3R5bGVFbChub25jZSk7XG5cbiAgICBhbHdheXNSZWYuY3VycmVudCA9IGFsd2F5cztcbiAgICBkeW5hbWljUmVmLmN1cnJlbnQgPSBkeW5hbWljO1xuXG4gICAgYWx3YXlzLnNldEF0dHJpYnV0ZShgJHtwcmVmaXh9LWFsd2F5c2AsIGNvbnRleHRJZCk7XG4gICAgZHluYW1pYy5zZXRBdHRyaWJ1dGUoYCR7cHJlZml4fS1keW5hbWljYCwgY29udGV4dElkKTtcblxuICAgIGdldEhlYWQoKS5hcHBlbmRDaGlsZChhbHdheXMpO1xuICAgIGdldEhlYWQoKS5hcHBlbmRDaGlsZChkeW5hbWljKTtcblxuICAgIHNldEFsd2F5c1N0eWxlKHN0eWxlcy5hbHdheXMpO1xuICAgIHNldER5bmFtaWNTdHlsZShzdHlsZXMucmVzdGluZyk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNvbnN0IHJlbW92ZSA9IHJlZiA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSByZWYuY3VycmVudDtcbiAgICAgICAgIWN1cnJlbnQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgdW5tb3VudCByZWYgYXMgaXQgaXMgbm90IHNldCcpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICAgICAgZ2V0SGVhZCgpLnJlbW92ZUNoaWxkKGN1cnJlbnQpO1xuICAgICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgICB9O1xuICAgICAgcmVtb3ZlKGFsd2F5c1JlZik7XG4gICAgICByZW1vdmUoZHluYW1pY1JlZik7XG4gICAgfTtcbiAgfSwgW25vbmNlLCBzZXRBbHdheXNTdHlsZSwgc2V0RHluYW1pY1N0eWxlLCBzdHlsZXMuYWx3YXlzLCBzdHlsZXMucmVzdGluZywgY29udGV4dElkXSk7XG4gIGNvbnN0IGRyYWdnaW5nID0gdXNlTWVtb09uZS51c2VDYWxsYmFjaygoKSA9PiBzZXREeW5hbWljU3R5bGUoc3R5bGVzLmRyYWdnaW5nKSwgW3NldER5bmFtaWNTdHlsZSwgc3R5bGVzLmRyYWdnaW5nXSk7XG4gIGNvbnN0IGRyb3BwaW5nID0gdXNlTWVtb09uZS51c2VDYWxsYmFjayhyZWFzb24gPT4ge1xuICAgIGlmIChyZWFzb24gPT09ICdEUk9QJykge1xuICAgICAgc2V0RHluYW1pY1N0eWxlKHN0eWxlcy5kcm9wQW5pbWF0aW5nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0RHluYW1pY1N0eWxlKHN0eWxlcy51c2VyQ2FuY2VsKTtcbiAgfSwgW3NldER5bmFtaWNTdHlsZSwgc3R5bGVzLmRyb3BBbmltYXRpbmcsIHN0eWxlcy51c2VyQ2FuY2VsXSk7XG4gIGNvbnN0IHJlc3RpbmcgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWR5bmFtaWNSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXREeW5hbWljU3R5bGUoc3R5bGVzLnJlc3RpbmcpO1xuICB9LCBbc2V0RHluYW1pY1N0eWxlLCBzdHlsZXMucmVzdGluZ10pO1xuICBjb25zdCBtYXJzaGFsID0gdXNlTWVtb09uZS51c2VNZW1vKCgpID0+ICh7XG4gICAgZHJhZ2dpbmcsXG4gICAgZHJvcHBpbmcsXG4gICAgcmVzdGluZ1xuICB9KSwgW2RyYWdnaW5nLCBkcm9wcGluZywgcmVzdGluZ10pO1xuICByZXR1cm4gbWFyc2hhbDtcbn1cblxuZnVuY3Rpb24gcXVlcnlTZWxlY3RvckFsbChwYXJlbnROb2RlLCBzZWxlY3Rvcikge1xuICByZXR1cm4gQXJyYXkuZnJvbShwYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKTtcbn1cblxudmFyIGdldFdpbmRvd0Zyb21FbCA9IChlbCA9PiB7XG4gIHZhciBfZWwkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChlbCA9PSBudWxsID8gdm9pZCAwIDogKF9lbCRvd25lckRvY3VtZW50ID0gZWwub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbCRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59KTtcblxuZnVuY3Rpb24gaXNIdG1sRWxlbWVudChlbCkge1xuICByZXR1cm4gZWwgaW5zdGFuY2VvZiBnZXRXaW5kb3dGcm9tRWwoZWwpLkhUTUxFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBmaW5kRHJhZ0hhbmRsZShjb250ZXh0SWQsIGRyYWdnYWJsZUlkKSB7XG4gIGNvbnN0IHNlbGVjdG9yID0gYFske2RyYWdIYW5kbGUuY29udGV4dElkfT1cIiR7Y29udGV4dElkfVwiXWA7XG4gIGNvbnN0IHBvc3NpYmxlID0gcXVlcnlTZWxlY3RvckFsbChkb2N1bWVudCwgc2VsZWN0b3IpO1xuICBpZiAoIXBvc3NpYmxlLmxlbmd0aCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoYFVuYWJsZSB0byBmaW5kIGFueSBkcmFnIGhhbmRsZXMgaW4gdGhlIGNvbnRleHQgXCIke2NvbnRleHRJZH1cImApIDogdm9pZCAwO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGhhbmRsZSA9IHBvc3NpYmxlLmZpbmQoZWwgPT4ge1xuICAgIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoZHJhZ0hhbmRsZS5kcmFnZ2FibGVJZCkgPT09IGRyYWdnYWJsZUlkO1xuICB9KTtcbiAgaWYgKCFoYW5kbGUpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKGBVbmFibGUgdG8gZmluZCBkcmFnIGhhbmRsZSB3aXRoIGlkIFwiJHtkcmFnZ2FibGVJZH1cIiBhcyBubyBoYW5kbGUgd2l0aCBhIG1hdGNoaW5nIGlkIHdhcyBmb3VuZGApIDogdm9pZCAwO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICghaXNIdG1sRWxlbWVudChoYW5kbGUpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZygnZHJhZyBoYW5kbGUgbmVlZHMgdG8gYmUgYSBIVE1MRWxlbWVudCcpIDogdm9pZCAwO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBoYW5kbGU7XG59XG5cbmZ1bmN0aW9uIHVzZUZvY3VzTWFyc2hhbChjb250ZXh0SWQpIHtcbiAgY29uc3QgZW50cmllc1JlZiA9IFJlYWN0LnVzZVJlZih7fSk7XG4gIGNvbnN0IHJlY29yZFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmVzdG9yZUZvY3VzRnJhbWVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGlzTW91bnRlZFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHJlZ2lzdGVyID0gdXNlTWVtb09uZS51c2VDYWxsYmFjayhmdW5jdGlvbiByZWdpc3RlcihpZCwgZm9jdXMpIHtcbiAgICBjb25zdCBlbnRyeSA9IHtcbiAgICAgIGlkLFxuICAgICAgZm9jdXNcbiAgICB9O1xuICAgIGVudHJpZXNSZWYuY3VycmVudFtpZF0gPSBlbnRyeTtcbiAgICByZXR1cm4gZnVuY3Rpb24gdW5yZWdpc3RlcigpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBlbnRyaWVzUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBjdXJyZW50ID0gZW50cmllc1tpZF07XG4gICAgICBpZiAoY3VycmVudCAhPT0gZW50cnkpIHtcbiAgICAgICAgZGVsZXRlIGVudHJpZXNbaWRdO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcbiAgY29uc3QgdHJ5R2l2ZUZvY3VzID0gdXNlTWVtb09uZS51c2VDYWxsYmFjayhmdW5jdGlvbiB0cnlHaXZlRm9jdXModHJ5R2l2ZUZvY3VzVG8pIHtcbiAgICBjb25zdCBoYW5kbGUgPSBmaW5kRHJhZ0hhbmRsZShjb250ZXh0SWQsIHRyeUdpdmVGb2N1c1RvKTtcbiAgICBpZiAoaGFuZGxlICYmIGhhbmRsZSAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgaGFuZGxlLmZvY3VzKCk7XG4gICAgfVxuICB9LCBbY29udGV4dElkXSk7XG4gIGNvbnN0IHRyeVNoaWZ0UmVjb3JkID0gdXNlTWVtb09uZS51c2VDYWxsYmFjayhmdW5jdGlvbiB0cnlTaGlmdFJlY29yZChwcmV2aW91cywgcmVkaXJlY3RUbykge1xuICAgIGlmIChyZWNvcmRSZWYuY3VycmVudCA9PT0gcHJldmlvdXMpIHtcbiAgICAgIHJlY29yZFJlZi5jdXJyZW50ID0gcmVkaXJlY3RUbztcbiAgICB9XG4gIH0sIFtdKTtcbiAgY29uc3QgdHJ5UmVzdG9yZUZvY3VzUmVjb3JkZWQgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKGZ1bmN0aW9uIHRyeVJlc3RvcmVGb2N1c1JlY29yZGVkKCkge1xuICAgIGlmIChyZXN0b3JlRm9jdXNGcmFtZVJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFpc01vdW50ZWRSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXN0b3JlRm9jdXNGcmFtZVJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHJlc3RvcmVGb2N1c0ZyYW1lUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgY29uc3QgcmVjb3JkID0gcmVjb3JkUmVmLmN1cnJlbnQ7XG4gICAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgIHRyeUdpdmVGb2N1cyhyZWNvcmQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbdHJ5R2l2ZUZvY3VzXSk7XG4gIGNvbnN0IHRyeVJlY29yZEZvY3VzID0gdXNlTWVtb09uZS51c2VDYWxsYmFjayhmdW5jdGlvbiB0cnlSZWNvcmRGb2N1cyhpZCkge1xuICAgIHJlY29yZFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICBjb25zdCBmb2N1c2VkID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICAgIGlmICghZm9jdXNlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmb2N1c2VkLmdldEF0dHJpYnV0ZShkcmFnSGFuZGxlLmRyYWdnYWJsZUlkKSAhPT0gaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmVjb3JkUmVmLmN1cnJlbnQgPSBpZDtcbiAgfSwgW10pO1xuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlzTW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gY2xlYXJGcmFtZU9uVW5tb3VudCgpIHtcbiAgICAgIGlzTW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICBjb25zdCBmcmFtZUlkID0gcmVzdG9yZUZvY3VzRnJhbWVSZWYuY3VycmVudDtcbiAgICAgIGlmIChmcmFtZUlkKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lSWQpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtdKTtcbiAgY29uc3QgbWFyc2hhbCA9IHVzZU1lbW9PbmUudXNlTWVtbygoKSA9PiAoe1xuICAgIHJlZ2lzdGVyLFxuICAgIHRyeVJlY29yZEZvY3VzLFxuICAgIHRyeVJlc3RvcmVGb2N1c1JlY29yZGVkLFxuICAgIHRyeVNoaWZ0UmVjb3JkXG4gIH0pLCBbcmVnaXN0ZXIsIHRyeVJlY29yZEZvY3VzLCB0cnlSZXN0b3JlRm9jdXNSZWNvcmRlZCwgdHJ5U2hpZnRSZWNvcmRdKTtcbiAgcmV0dXJuIG1hcnNoYWw7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZ2lzdHJ5KCkge1xuICBjb25zdCBlbnRyaWVzID0ge1xuICAgIGRyYWdnYWJsZXM6IHt9LFxuICAgIGRyb3BwYWJsZXM6IHt9XG4gIH07XG4gIGNvbnN0IHN1YnNjcmliZXJzID0gW107XG4gIGZ1bmN0aW9uIHN1YnNjcmliZShjYikge1xuICAgIHN1YnNjcmliZXJzLnB1c2goY2IpO1xuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gc3Vic2NyaWJlcnMuaW5kZXhPZihjYik7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3Vic2NyaWJlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG5vdGlmeShldmVudCkge1xuICAgIGlmIChzdWJzY3JpYmVycy5sZW5ndGgpIHtcbiAgICAgIHN1YnNjcmliZXJzLmZvckVhY2goY2IgPT4gY2IoZXZlbnQpKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZmluZERyYWdnYWJsZUJ5SWQoaWQpIHtcbiAgICByZXR1cm4gZW50cmllcy5kcmFnZ2FibGVzW2lkXSB8fCBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIGdldERyYWdnYWJsZUJ5SWQoaWQpIHtcbiAgICBjb25zdCBlbnRyeSA9IGZpbmREcmFnZ2FibGVCeUlkKGlkKTtcbiAgICAhZW50cnkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGBDYW5ub3QgZmluZCBkcmFnZ2FibGUgZW50cnkgd2l0aCBpZCBbJHtpZH1dYCkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuICBjb25zdCBkcmFnZ2FibGVBUEkgPSB7XG4gICAgcmVnaXN0ZXI6IGVudHJ5ID0+IHtcbiAgICAgIGVudHJpZXMuZHJhZ2dhYmxlc1tlbnRyeS5kZXNjcmlwdG9yLmlkXSA9IGVudHJ5O1xuICAgICAgbm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ0FERElUSU9OJyxcbiAgICAgICAgdmFsdWU6IGVudHJ5XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZTogKGVudHJ5LCBsYXN0KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gZW50cmllcy5kcmFnZ2FibGVzW2xhc3QuZGVzY3JpcHRvci5pZF07XG5cbiAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50LnVuaXF1ZUlkICE9PSBlbnRyeS51bmlxdWVJZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSBlbnRyaWVzLmRyYWdnYWJsZXNbbGFzdC5kZXNjcmlwdG9yLmlkXTtcbiAgICAgIGVudHJpZXMuZHJhZ2dhYmxlc1tlbnRyeS5kZXNjcmlwdG9yLmlkXSA9IGVudHJ5O1xuICAgIH0sXG4gICAgdW5yZWdpc3RlcjogZW50cnkgPT4ge1xuICAgICAgY29uc3QgZHJhZ2dhYmxlSWQgPSBlbnRyeS5kZXNjcmlwdG9yLmlkO1xuICAgICAgY29uc3QgY3VycmVudCA9IGZpbmREcmFnZ2FibGVCeUlkKGRyYWdnYWJsZUlkKTtcblxuICAgICAgaWYgKCFjdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGVudHJ5LnVuaXF1ZUlkICE9PSBjdXJyZW50LnVuaXF1ZUlkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBlbnRyaWVzLmRyYWdnYWJsZXNbZHJhZ2dhYmxlSWRdO1xuXG4gICAgICBpZiAoZW50cmllcy5kcm9wcGFibGVzW2VudHJ5LmRlc2NyaXB0b3IuZHJvcHBhYmxlSWRdKSB7XG4gICAgICAgIG5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ1JFTU9WQUwnLFxuICAgICAgICAgIHZhbHVlOiBlbnRyeVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldEJ5SWQ6IGdldERyYWdnYWJsZUJ5SWQsXG4gICAgZmluZEJ5SWQ6IGZpbmREcmFnZ2FibGVCeUlkLFxuICAgIGV4aXN0czogaWQgPT4gQm9vbGVhbihmaW5kRHJhZ2dhYmxlQnlJZChpZCkpLFxuICAgIGdldEFsbEJ5VHlwZTogdHlwZSA9PiBPYmplY3QudmFsdWVzKGVudHJpZXMuZHJhZ2dhYmxlcykuZmlsdGVyKGVudHJ5ID0+IGVudHJ5LmRlc2NyaXB0b3IudHlwZSA9PT0gdHlwZSlcbiAgfTtcbiAgZnVuY3Rpb24gZmluZERyb3BwYWJsZUJ5SWQoaWQpIHtcbiAgICByZXR1cm4gZW50cmllcy5kcm9wcGFibGVzW2lkXSB8fCBudWxsO1xuICB9XG4gIGZ1bmN0aW9uIGdldERyb3BwYWJsZUJ5SWQoaWQpIHtcbiAgICBjb25zdCBlbnRyeSA9IGZpbmREcm9wcGFibGVCeUlkKGlkKTtcbiAgICAhZW50cnkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGBDYW5ub3QgZmluZCBkcm9wcGFibGUgZW50cnkgd2l0aCBpZCBbJHtpZH1dYCkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuICBjb25zdCBkcm9wcGFibGVBUEkgPSB7XG4gICAgcmVnaXN0ZXI6IGVudHJ5ID0+IHtcbiAgICAgIGVudHJpZXMuZHJvcHBhYmxlc1tlbnRyeS5kZXNjcmlwdG9yLmlkXSA9IGVudHJ5O1xuICAgIH0sXG4gICAgdW5yZWdpc3RlcjogZW50cnkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudCA9IGZpbmREcm9wcGFibGVCeUlkKGVudHJ5LmRlc2NyaXB0b3IuaWQpO1xuXG4gICAgICBpZiAoIWN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW50cnkudW5pcXVlSWQgIT09IGN1cnJlbnQudW5pcXVlSWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGVsZXRlIGVudHJpZXMuZHJvcHBhYmxlc1tlbnRyeS5kZXNjcmlwdG9yLmlkXTtcbiAgICB9LFxuICAgIGdldEJ5SWQ6IGdldERyb3BwYWJsZUJ5SWQsXG4gICAgZmluZEJ5SWQ6IGZpbmREcm9wcGFibGVCeUlkLFxuICAgIGV4aXN0czogaWQgPT4gQm9vbGVhbihmaW5kRHJvcHBhYmxlQnlJZChpZCkpLFxuICAgIGdldEFsbEJ5VHlwZTogdHlwZSA9PiBPYmplY3QudmFsdWVzKGVudHJpZXMuZHJvcHBhYmxlcykuZmlsdGVyKGVudHJ5ID0+IGVudHJ5LmRlc2NyaXB0b3IudHlwZSA9PT0gdHlwZSlcbiAgfTtcbiAgZnVuY3Rpb24gY2xlYW4oKSB7XG4gICAgZW50cmllcy5kcmFnZ2FibGVzID0ge307XG4gICAgZW50cmllcy5kcm9wcGFibGVzID0ge307XG4gICAgc3Vic2NyaWJlcnMubGVuZ3RoID0gMDtcbiAgfVxuICByZXR1cm4ge1xuICAgIGRyYWdnYWJsZTogZHJhZ2dhYmxlQVBJLFxuICAgIGRyb3BwYWJsZTogZHJvcHBhYmxlQVBJLFxuICAgIHN1YnNjcmliZSxcbiAgICBjbGVhblxuICB9O1xufVxuXG5mdW5jdGlvbiB1c2VSZWdpc3RyeSgpIHtcbiAgY29uc3QgcmVnaXN0cnkgPSB1c2VNZW1vT25lLnVzZU1lbW8oY3JlYXRlUmVnaXN0cnksIFtdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gdW5tb3VudCgpIHtcbiAgICAgIGlmIChSZWFjdF9fZGVmYXVsdFtcImRlZmF1bHRcIl0udmVyc2lvbi5zdGFydHNXaXRoKCcxNicpIHx8IFJlYWN0X19kZWZhdWx0W1wiZGVmYXVsdFwiXS52ZXJzaW9uLnN0YXJ0c1dpdGgoJzE3JykpIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlZ2lzdHJ5LmNsZWFuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlZ2lzdHJ5LmNsZWFuKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW3JlZ2lzdHJ5XSk7XG4gIHJldHVybiByZWdpc3RyeTtcbn1cblxudmFyIFN0b3JlQ29udGV4dCA9IFJlYWN0X19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG52YXIgZ2V0Qm9keUVsZW1lbnQgPSAoKCkgPT4ge1xuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgIWJvZHkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgZmluZCBkb2N1bWVudC5ib2R5JykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICByZXR1cm4gYm9keTtcbn0pO1xuXG5jb25zdCB2aXN1YWxseUhpZGRlbiA9IHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHdpZHRoOiAnMXB4JyxcbiAgaGVpZ2h0OiAnMXB4JyxcbiAgbWFyZ2luOiAnLTFweCcsXG4gIGJvcmRlcjogJzAnLFxuICBwYWRkaW5nOiAnMCcsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgY2xpcDogJ3JlY3QoMCAwIDAgMCknLFxuICAnY2xpcC1wYXRoJzogJ2luc2V0KDEwMCUpJ1xufTtcbnZhciB2aXN1YWxseUhpZGRlbiQxID0gdmlzdWFsbHlIaWRkZW47XG5cbmNvbnN0IGdldElkID0gY29udGV4dElkID0+IGByZmQtYW5ub3VuY2VtZW50LSR7Y29udGV4dElkfWA7XG5mdW5jdGlvbiB1c2VBbm5vdW5jZXIoY29udGV4dElkKSB7XG4gIGNvbnN0IGlkID0gdXNlTWVtb09uZS51c2VNZW1vKCgpID0+IGdldElkKGNvbnRleHRJZCksIFtjb250ZXh0SWRdKTtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gc2V0dXAoKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICByZWYuY3VycmVudCA9IGVsO1xuXG4gICAgZWwuaWQgPSBpZDtcblxuICAgIGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ2Fzc2VydGl2ZScpO1xuICAgIGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1hdG9taWMnLCAndHJ1ZScpO1xuXG4gICAgX2V4dGVuZHNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdKGVsLnN0eWxlLCB2aXN1YWxseUhpZGRlbiQxKTtcblxuICAgIGdldEJvZHlFbGVtZW50KCkuYXBwZW5kQ2hpbGQoZWwpO1xuICAgIHJldHVybiBmdW5jdGlvbiBjbGVhbnVwKCkge1xuXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgICAgY29uc3QgYm9keSA9IGdldEJvZHlFbGVtZW50KCk7XG4gICAgICAgIGlmIChib2R5LmNvbnRhaW5zKGVsKSkge1xuICAgICAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoZWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbCA9PT0gcmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gIH0sIFtpZF0pO1xuICBjb25zdCBhbm5vdW5jZSA9IHVzZU1lbW9PbmUudXNlQ2FsbGJhY2sobWVzc2FnZSA9PiB7XG4gICAgY29uc3QgZWwgPSByZWYuY3VycmVudDtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLnRleHRDb250ZW50ID0gbWVzc2FnZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhgXG4gICAgICBBIHNjcmVlbiByZWFkZXIgbWVzc2FnZSB3YXMgdHJ5aW5nIHRvIGJlIGFubm91bmNlZCBidXQgaXQgd2FzIHVuYWJsZSB0byBkbyBzby5cbiAgICAgIFRoaXMgY2FuIG9jY3VyIGlmIHlvdSB1bm1vdW50IHlvdXIgPERyYWdEcm9wQ29udGV4dCAvPiBpbiB5b3VyIG9uRHJhZ0VuZC5cbiAgICAgIENvbnNpZGVyIGNhbGxpbmcgcHJvdmlkZWQuYW5ub3VuY2UoKSBiZWZvcmUgdGhlIHVubW91bnQgc28gdGhhdCB0aGUgaW5zdHJ1Y3Rpb24gd2lsbFxuICAgICAgbm90IGJlIGxvc3QgZm9yIHVzZXJzIHJlbHlpbmcgb24gYSBzY3JlZW4gcmVhZGVyLlxuXG4gICAgICBNZXNzYWdlIG5vdCBwYXNzZWQgdG8gc2NyZWVuIHJlYWRlcjpcblxuICAgICAgXCIke21lc3NhZ2V9XCJcbiAgICBgKSA6IHZvaWQgMDtcbiAgfSwgW10pO1xuICByZXR1cm4gYW5ub3VuY2U7XG59XG5cbmxldCBjb3VudCQxID0gMDtcbmNvbnN0IGRlZmF1bHRzID0ge1xuICBzZXBhcmF0b3I6ICc6Oidcbn07XG5mdW5jdGlvbiByZXNldERlcHJlY2F0ZWRVbmlxdWVJZCgpIHtcbiAgY291bnQkMSA9IDA7XG59XG5mdW5jdGlvbiB1c2VEZXByZWNhdGVkVW5pcXVlSWQocHJlZml4LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0gZGVmYXVsdHM7XG4gIH1cbiAgcmV0dXJuIHVzZU1lbW9PbmUudXNlTWVtbygoKSA9PiBgJHtwcmVmaXh9JHtvcHRpb25zLnNlcGFyYXRvcn0ke2NvdW50JDErK31gLCBbb3B0aW9ucy5zZXBhcmF0b3IsIHByZWZpeF0pO1xufVxuZnVuY3Rpb24gdXNlVW5pcXVlSWQocHJlZml4LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0gZGVmYXVsdHM7XG4gIH1cbiAgY29uc3QgaWQgPSBSZWFjdF9fZGVmYXVsdFtcImRlZmF1bHRcIl0udXNlSWQoKTtcbiAgcmV0dXJuIHVzZU1lbW9PbmUudXNlTWVtbygoKSA9PiBgJHtwcmVmaXh9JHtvcHRpb25zLnNlcGFyYXRvcn0ke2lkfWAsIFtvcHRpb25zLnNlcGFyYXRvciwgcHJlZml4LCBpZF0pO1xufVxuXG52YXIgdXNlVW5pcXVlSWQkMSA9ICd1c2VJZCcgaW4gUmVhY3RfX2RlZmF1bHRbXCJkZWZhdWx0XCJdID8gdXNlVW5pcXVlSWQgOiB1c2VEZXByZWNhdGVkVW5pcXVlSWQ7XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRJZChfcmVmKSB7XG4gIGxldCB7XG4gICAgY29udGV4dElkLFxuICAgIHVuaXF1ZUlkXG4gIH0gPSBfcmVmO1xuICByZXR1cm4gYHJmZC1oaWRkZW4tdGV4dC0ke2NvbnRleHRJZH0tJHt1bmlxdWVJZH1gO1xufVxuZnVuY3Rpb24gdXNlSGlkZGVuVGV4dEVsZW1lbnQoX3JlZjIpIHtcbiAgbGV0IHtcbiAgICBjb250ZXh0SWQsXG4gICAgdGV4dFxuICB9ID0gX3JlZjI7XG4gIGNvbnN0IHVuaXF1ZUlkID0gdXNlVW5pcXVlSWQkMSgnaGlkZGVuLXRleHQnLCB7XG4gICAgc2VwYXJhdG9yOiAnLSdcbiAgfSk7XG4gIGNvbnN0IGlkID0gdXNlTWVtb09uZS51c2VNZW1vKCgpID0+IGdldEVsZW1lbnRJZCh7XG4gICAgY29udGV4dElkLFxuICAgIHVuaXF1ZUlkXG4gIH0pLCBbdW5pcXVlSWQsIGNvbnRleHRJZF0pO1xuICBSZWFjdC51c2VFZmZlY3QoZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgIGVsLmlkID0gaWQ7XG5cbiAgICBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG5cbiAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgZ2V0Qm9keUVsZW1lbnQoKS5hcHBlbmRDaGlsZChlbCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVubW91bnQoKSB7XG4gICAgICBjb25zdCBib2R5ID0gZ2V0Qm9keUVsZW1lbnQoKTtcbiAgICAgIGlmIChib2R5LmNvbnRhaW5zKGVsKSkge1xuICAgICAgICBib2R5LnJlbW92ZUNoaWxkKGVsKTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbaWQsIHRleHRdKTtcbiAgcmV0dXJuIGlkO1xufVxuXG52YXIgQXBwQ29udGV4dCA9IFJlYWN0X19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG52YXIgcGVlckRlcGVuZGVuY2llcyA9IHtcblx0cmVhY3Q6IFwiXjE2LjguNSB8fCBeMTcuMC4wIHx8IF4xOC4wLjBcIixcblx0XCJyZWFjdC1kb21cIjogXCJeMTYuOC41IHx8IF4xNy4wLjAgfHwgXjE4LjAuMFwiXG59O1xuXG5jb25zdCBzZW12ZXIgPSAvKFxcZCspXFwuKFxcZCspXFwuKFxcZCspLztcbmNvbnN0IGdldFZlcnNpb24gPSB2YWx1ZSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHNlbXZlci5leGVjKHZhbHVlKTtcbiAgIShyZXN1bHQgIT0gbnVsbCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGBVbmFibGUgdG8gcGFyc2UgUmVhY3QgdmVyc2lvbiAke3ZhbHVlfWApIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgY29uc3QgbWFqb3IgPSBOdW1iZXIocmVzdWx0WzFdKTtcbiAgY29uc3QgbWlub3IgPSBOdW1iZXIocmVzdWx0WzJdKTtcbiAgY29uc3QgcGF0Y2ggPSBOdW1iZXIocmVzdWx0WzNdKTtcbiAgcmV0dXJuIHtcbiAgICBtYWpvcixcbiAgICBtaW5vcixcbiAgICBwYXRjaCxcbiAgICByYXc6IHZhbHVlXG4gIH07XG59O1xuY29uc3QgaXNTYXRpc2ZpZWQgPSAoZXhwZWN0ZWQsIGFjdHVhbCkgPT4ge1xuICBpZiAoYWN0dWFsLm1ham9yID4gZXhwZWN0ZWQubWFqb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYWN0dWFsLm1ham9yIDwgZXhwZWN0ZWQubWFqb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYWN0dWFsLm1pbm9yID4gZXhwZWN0ZWQubWlub3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYWN0dWFsLm1pbm9yIDwgZXhwZWN0ZWQubWlub3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gYWN0dWFsLnBhdGNoID49IGV4cGVjdGVkLnBhdGNoO1xufTtcbnZhciBjaGVja1JlYWN0VmVyc2lvbiA9ICgocGVlckRlcFZhbHVlLCBhY3R1YWxWYWx1ZSkgPT4ge1xuICBjb25zdCBwZWVyRGVwID0gZ2V0VmVyc2lvbihwZWVyRGVwVmFsdWUpO1xuICBjb25zdCBhY3R1YWwgPSBnZXRWZXJzaW9uKGFjdHVhbFZhbHVlKTtcbiAgaWYgKGlzU2F0aXNmaWVkKHBlZXJEZXAsIGFjdHVhbCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhgXG4gICAgUmVhY3QgdmVyc2lvbjogWyR7YWN0dWFsLnJhd31dXG4gICAgZG9lcyBub3Qgc2F0aXNmeSBleHBlY3RlZCBwZWVyIGRlcGVuZGVuY3kgdmVyc2lvbjogWyR7cGVlckRlcC5yYXd9XVxuXG4gICAgVGhpcyBjYW4gcmVzdWx0IGluIHJ1biB0aW1lIGJ1Z3MsIGFuZCBldmVuIGZhdGFsIGNyYXNoZXNcbiAgYCkgOiB2b2lkIDA7XG59KTtcblxuY29uc3Qgc3VmZml4ID0gYFxuICBXZSBleHBlY3QgYSBodG1sNSBkb2N0eXBlOiA8IWRvY3R5cGUgaHRtbD5cbiAgVGhpcyBpcyB0byBlbnN1cmUgY29uc2lzdGVudCBicm93c2VyIGxheW91dCBhbmQgbWVhc3VyZW1lbnRcblxuICBNb3JlIGluZm9ybWF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vaGVsbG8tcGFuZ2VhL2RuZC9ibG9iL21haW4vZG9jcy9ndWlkZXMvZG9jdHlwZS5tZFxuYDtcbnZhciBjaGVja0RvY3R5cGUgPSAoZG9jID0+IHtcbiAgY29uc3QgZG9jdHlwZSA9IGRvYy5kb2N0eXBlO1xuICBpZiAoIWRvY3R5cGUpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKGBcbiAgICAgIE5vIDwhZG9jdHlwZSBodG1sPiBmb3VuZC5cblxuICAgICAgJHtzdWZmaXh9XG4gICAgYCkgOiB2b2lkIDA7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChkb2N0eXBlLm5hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2h0bWwnKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhgXG4gICAgICBVbmV4cGVjdGVkIDwhZG9jdHlwZT4gZm91bmQ6ICgke2RvY3R5cGUubmFtZX0pXG5cbiAgICAgICR7c3VmZml4fVxuICAgIGApIDogdm9pZCAwO1xuICB9XG4gIGlmIChkb2N0eXBlLnB1YmxpY0lkICE9PSAnJykge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoYFxuICAgICAgVW5leHBlY3RlZCA8IWRvY3R5cGU+IHB1YmxpY0lkIGZvdW5kOiAoJHtkb2N0eXBlLnB1YmxpY0lkfSlcbiAgICAgIEEgaHRtbDUgZG9jdHlwZSBkb2VzIG5vdCBoYXZlIGEgcHVibGljSWRcblxuICAgICAgJHtzdWZmaXh9XG4gICAgYCkgOiB2b2lkIDA7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB1c2VEZXYodXNlSG9vaykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHVzZUhvb2soKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VEZXZTZXR1cFdhcm5pbmcoZm4sIGlucHV0cykge1xuICB1c2VEZXYoKCkgPT4ge1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlcnJvcihgXG4gICAgICAgICAgQSBzZXR1cCBwcm9ibGVtIHdhcyBlbmNvdW50ZXJlZC5cblxuICAgICAgICAgID4gJHtlLm1lc3NhZ2V9XG4gICAgICAgIGApO1xuICAgICAgfVxuICAgIH0sIGlucHV0cyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1c2VTdGFydHVwVmFsaWRhdGlvbigpIHtcbiAgdXNlRGV2U2V0dXBXYXJuaW5nKCgpID0+IHtcbiAgICBjaGVja1JlYWN0VmVyc2lvbihwZWVyRGVwZW5kZW5jaWVzLnJlYWN0LCBSZWFjdF9fZGVmYXVsdFtcImRlZmF1bHRcIl0udmVyc2lvbik7XG4gICAgY2hlY2tEb2N0eXBlKGRvY3VtZW50KTtcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiB1c2VQcmV2aW91cyhjdXJyZW50KSB7XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZihjdXJyZW50KTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlZi5jdXJyZW50ID0gY3VycmVudDtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlZjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlKCkge1xuICBsZXQgbG9jayA9IG51bGw7XG4gIGZ1bmN0aW9uIGlzQ2xhaW1lZCgpIHtcbiAgICByZXR1cm4gQm9vbGVhbihsb2NrKTtcbiAgfVxuICBmdW5jdGlvbiBpc0FjdGl2ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbG9jaztcbiAgfVxuICBmdW5jdGlvbiBjbGFpbShhYmFuZG9uKSB7XG4gICAgISFsb2NrID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IGNsYWltIGxvY2sgYXMgaXQgaXMgYWxyZWFkeSBjbGFpbWVkJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIGNvbnN0IG5ld0xvY2sgPSB7XG4gICAgICBhYmFuZG9uXG4gICAgfTtcbiAgICBsb2NrID0gbmV3TG9jaztcbiAgICByZXR1cm4gbmV3TG9jaztcbiAgfVxuICBmdW5jdGlvbiByZWxlYXNlKCkge1xuICAgICFsb2NrID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IHJlbGVhc2UgbG9jayB3aGVuIHRoZXJlIGlzIG5vIGxvY2snKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgbG9jayA9IG51bGw7XG4gIH1cbiAgZnVuY3Rpb24gdHJ5QWJhbmRvbigpIHtcbiAgICBpZiAobG9jaykge1xuICAgICAgbG9jay5hYmFuZG9uKCk7XG4gICAgICByZWxlYXNlKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgaXNDbGFpbWVkLFxuICAgIGlzQWN0aXZlLFxuICAgIGNsYWltLFxuICAgIHJlbGVhc2UsXG4gICAgdHJ5QWJhbmRvblxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0RyYWdnaW5nKHN0YXRlKSB7XG4gIGlmIChzdGF0ZS5waGFzZSA9PT0gJ0lETEUnIHx8IHN0YXRlLnBoYXNlID09PSAnRFJPUF9BTklNQVRJTkcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBzdGF0ZS5pc0RyYWdnaW5nO1xufVxuXG5jb25zdCB0YWIgPSA5O1xuY29uc3QgZW50ZXIgPSAxMztcbmNvbnN0IGVzY2FwZSA9IDI3O1xuY29uc3Qgc3BhY2UgPSAzMjtcbmNvbnN0IHBhZ2VVcCA9IDMzO1xuY29uc3QgcGFnZURvd24gPSAzNDtcbmNvbnN0IGVuZCA9IDM1O1xuY29uc3QgaG9tZSA9IDM2O1xuY29uc3QgYXJyb3dMZWZ0ID0gMzc7XG5jb25zdCBhcnJvd1VwID0gMzg7XG5jb25zdCBhcnJvd1JpZ2h0ID0gMzk7XG5jb25zdCBhcnJvd0Rvd24gPSA0MDtcblxuY29uc3QgcHJldmVudGVkS2V5cyA9IHtcbiAgW2VudGVyXTogdHJ1ZSxcbiAgW3RhYl06IHRydWVcbn07XG52YXIgcHJldmVudFN0YW5kYXJkS2V5RXZlbnRzID0gKGV2ZW50ID0+IHtcbiAgaWYgKHByZXZlbnRlZEtleXNbZXZlbnQua2V5Q29kZV0pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59KTtcblxuY29uc3Qgc3VwcG9ydGVkRXZlbnROYW1lID0gKCgpID0+IHtcbiAgY29uc3QgYmFzZSA9ICd2aXNpYmlsaXR5Y2hhbmdlJztcblxuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBiYXNlO1xuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlcyA9IFtiYXNlLCBgbXMke2Jhc2V9YCwgYHdlYmtpdCR7YmFzZX1gLCBgbW96JHtiYXNlfWAsIGBvJHtiYXNlfWBdO1xuICBjb25zdCBzdXBwb3J0ZWQgPSBjYW5kaWRhdGVzLmZpbmQoZXZlbnROYW1lID0+IGBvbiR7ZXZlbnROYW1lfWAgaW4gZG9jdW1lbnQpO1xuICByZXR1cm4gc3VwcG9ydGVkIHx8IGJhc2U7XG59KSgpO1xudmFyIHN1cHBvcnRlZFBhZ2VWaXNpYmlsaXR5RXZlbnROYW1lID0gc3VwcG9ydGVkRXZlbnROYW1lO1xuXG5jb25zdCBwcmltYXJ5QnV0dG9uID0gMDtcbmNvbnN0IHNsb3BweUNsaWNrVGhyZXNob2xkID0gNTtcbmZ1bmN0aW9uIGlzU2xvcHB5Q2xpY2tUaHJlc2hvbGRFeGNlZWRlZChvcmlnaW5hbCwgY3VycmVudCkge1xuICByZXR1cm4gTWF0aC5hYnMoY3VycmVudC54IC0gb3JpZ2luYWwueCkgPj0gc2xvcHB5Q2xpY2tUaHJlc2hvbGQgfHwgTWF0aC5hYnMoY3VycmVudC55IC0gb3JpZ2luYWwueSkgPj0gc2xvcHB5Q2xpY2tUaHJlc2hvbGQ7XG59XG5jb25zdCBpZGxlJDEgPSB7XG4gIHR5cGU6ICdJRExFJ1xufTtcbmZ1bmN0aW9uIGdldENhcHR1cmVCaW5kaW5ncyhfcmVmKSB7XG4gIGxldCB7XG4gICAgY2FuY2VsLFxuICAgIGNvbXBsZXRlZCxcbiAgICBnZXRQaGFzZSxcbiAgICBzZXRQaGFzZVxuICB9ID0gX3JlZjtcbiAgcmV0dXJuIFt7XG4gICAgZXZlbnROYW1lOiAnbW91c2Vtb3ZlJyxcbiAgICBmbjogZXZlbnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBidXR0b24sXG4gICAgICAgIGNsaWVudFgsXG4gICAgICAgIGNsaWVudFlcbiAgICAgIH0gPSBldmVudDtcbiAgICAgIGlmIChidXR0b24gIT09IHByaW1hcnlCdXR0b24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcG9pbnQgPSB7XG4gICAgICAgIHg6IGNsaWVudFgsXG4gICAgICAgIHk6IGNsaWVudFlcbiAgICAgIH07XG4gICAgICBjb25zdCBwaGFzZSA9IGdldFBoYXNlKCk7XG5cbiAgICAgIGlmIChwaGFzZS50eXBlID09PSAnRFJBR0dJTkcnKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHBoYXNlLmFjdGlvbnMubW92ZShwb2ludCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgIShwaGFzZS50eXBlID09PSAnUEVORElORycpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IGJlIElETEUnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgICBjb25zdCBwZW5kaW5nID0gcGhhc2UucG9pbnQ7XG5cbiAgICAgIGlmICghaXNTbG9wcHlDbGlja1RocmVzaG9sZEV4Y2VlZGVkKHBlbmRpbmcsIHBvaW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IGFjdGlvbnMgPSBwaGFzZS5hY3Rpb25zLmZsdWlkTGlmdChwb2ludCk7XG4gICAgICBzZXRQaGFzZSh7XG4gICAgICAgIHR5cGU6ICdEUkFHR0lORycsXG4gICAgICAgIGFjdGlvbnNcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGV2ZW50TmFtZTogJ21vdXNldXAnLFxuICAgIGZuOiBldmVudCA9PiB7XG4gICAgICBjb25zdCBwaGFzZSA9IGdldFBoYXNlKCk7XG4gICAgICBpZiAocGhhc2UudHlwZSAhPT0gJ0RSQUdHSU5HJykge1xuICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcGhhc2UuYWN0aW9ucy5kcm9wKHtcbiAgICAgICAgc2hvdWxkQmxvY2tOZXh0Q2xpY2s6IHRydWVcbiAgICAgIH0pO1xuICAgICAgY29tcGxldGVkKCk7XG4gICAgfVxuICB9LCB7XG4gICAgZXZlbnROYW1lOiAnbW91c2Vkb3duJyxcbiAgICBmbjogZXZlbnQgPT4ge1xuICAgICAgaWYgKGdldFBoYXNlKCkudHlwZSA9PT0gJ0RSQUdHSU5HJykge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgY2FuY2VsKCk7XG4gICAgfVxuICB9LCB7XG4gICAgZXZlbnROYW1lOiAna2V5ZG93bicsXG4gICAgZm46IGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHBoYXNlID0gZ2V0UGhhc2UoKTtcbiAgICAgIGlmIChwaGFzZS50eXBlID09PSAnUEVORElORycpIHtcbiAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IGVzY2FwZSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcHJldmVudFN0YW5kYXJkS2V5RXZlbnRzKGV2ZW50KTtcbiAgICB9XG4gIH0sIHtcbiAgICBldmVudE5hbWU6ICdyZXNpemUnLFxuICAgIGZuOiBjYW5jZWxcbiAgfSwge1xuICAgIGV2ZW50TmFtZTogJ3Njcm9sbCcsXG4gICAgb3B0aW9uczoge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIGNhcHR1cmU6IGZhbHNlXG4gICAgfSxcbiAgICBmbjogKCkgPT4ge1xuICAgICAgaWYgKGdldFBoYXNlKCkudHlwZSA9PT0gJ1BFTkRJTkcnKSB7XG4gICAgICAgIGNhbmNlbCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGV2ZW50TmFtZTogJ3dlYmtpdG1vdXNlZm9yY2Vkb3duJyxcbiAgICBmbjogZXZlbnQgPT4ge1xuICAgICAgY29uc3QgcGhhc2UgPSBnZXRQaGFzZSgpO1xuICAgICAgIShwaGFzZS50eXBlICE9PSAnSURMRScpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnVW5leHBlY3RlZCBwaGFzZScpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICAgIGlmIChwaGFzZS5hY3Rpb25zLnNob3VsZFJlc3BlY3RGb3JjZVByZXNzKCkpIHtcbiAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBldmVudE5hbWU6IHN1cHBvcnRlZFBhZ2VWaXNpYmlsaXR5RXZlbnROYW1lLFxuICAgIGZuOiBjYW5jZWxcbiAgfV07XG59XG5mdW5jdGlvbiB1c2VNb3VzZVNlbnNvcihhcGkpIHtcbiAgY29uc3QgcGhhc2VSZWYgPSBSZWFjdC51c2VSZWYoaWRsZSQxKTtcbiAgY29uc3QgdW5iaW5kRXZlbnRzUmVmID0gUmVhY3QudXNlUmVmKG5vb3AkMik7XG4gIGNvbnN0IHN0YXJ0Q2FwdHVyZUJpbmRpbmcgPSB1c2VNZW1vT25lLnVzZU1lbW8oKCkgPT4gKHtcbiAgICBldmVudE5hbWU6ICdtb3VzZWRvd24nLFxuICAgIGZuOiBmdW5jdGlvbiBvbk1vdXNlRG93bihldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmJ1dHRvbiAhPT0gcHJpbWFyeUJ1dHRvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRyYWdnYWJsZUlkID0gYXBpLmZpbmRDbG9zZXN0RHJhZ2dhYmxlSWQoZXZlbnQpO1xuICAgICAgaWYgKCFkcmFnZ2FibGVJZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBhY3Rpb25zID0gYXBpLnRyeUdldExvY2soZHJhZ2dhYmxlSWQsXG4gICAgICBzdG9wLCB7XG4gICAgICAgIHNvdXJjZUV2ZW50OiBldmVudFxuICAgICAgfSk7XG4gICAgICBpZiAoIWFjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY29uc3QgcG9pbnQgPSB7XG4gICAgICAgIHg6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgIHk6IGV2ZW50LmNsaWVudFlcbiAgICAgIH07XG5cbiAgICAgIHVuYmluZEV2ZW50c1JlZi5jdXJyZW50KCk7XG4gICAgICBzdGFydFBlbmRpbmdEcmFnKGFjdGlvbnMsIHBvaW50KTtcbiAgICB9XG4gIH0pLFxuICBbYXBpXSk7XG4gIGNvbnN0IHByZXZlbnRGb3JjZVByZXNzQmluZGluZyA9IHVzZU1lbW9PbmUudXNlTWVtbygoKSA9PiAoe1xuICAgIGV2ZW50TmFtZTogJ3dlYmtpdG1vdXNlZm9yY2V3aWxsYmVnaW4nLFxuICAgIGZuOiBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpZCA9IGFwaS5maW5kQ2xvc2VzdERyYWdnYWJsZUlkKGV2ZW50KTtcbiAgICAgIGlmICghaWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3B0aW9ucyA9IGFwaS5maW5kT3B0aW9uc0ZvckRyYWdnYWJsZShpZCk7XG4gICAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFhcGkuY2FuR2V0TG9jayhpZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH0pLCBbYXBpXSk7XG4gIGNvbnN0IGxpc3RlbkZvckNhcHR1cmUgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKGZ1bmN0aW9uIGxpc3RlbkZvckNhcHR1cmUoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgY2FwdHVyZTogdHJ1ZVxuICAgIH07XG4gICAgdW5iaW5kRXZlbnRzUmVmLmN1cnJlbnQgPSBiaW5kRXZlbnRzKHdpbmRvdywgW3ByZXZlbnRGb3JjZVByZXNzQmluZGluZywgc3RhcnRDYXB0dXJlQmluZGluZ10sIG9wdGlvbnMpO1xuICB9LCBbcHJldmVudEZvcmNlUHJlc3NCaW5kaW5nLCBzdGFydENhcHR1cmVCaW5kaW5nXSk7XG4gIGNvbnN0IHN0b3AgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gcGhhc2VSZWYuY3VycmVudDtcbiAgICBpZiAoY3VycmVudC50eXBlID09PSAnSURMRScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGhhc2VSZWYuY3VycmVudCA9IGlkbGUkMTtcbiAgICB1bmJpbmRFdmVudHNSZWYuY3VycmVudCgpO1xuICAgIGxpc3RlbkZvckNhcHR1cmUoKTtcbiAgfSwgW2xpc3RlbkZvckNhcHR1cmVdKTtcbiAgY29uc3QgY2FuY2VsID0gdXNlTWVtb09uZS51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgcGhhc2UgPSBwaGFzZVJlZi5jdXJyZW50O1xuICAgIHN0b3AoKTtcbiAgICBpZiAocGhhc2UudHlwZSA9PT0gJ0RSQUdHSU5HJykge1xuICAgICAgcGhhc2UuYWN0aW9ucy5jYW5jZWwoe1xuICAgICAgICBzaG91bGRCbG9ja05leHRDbGljazogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChwaGFzZS50eXBlID09PSAnUEVORElORycpIHtcbiAgICAgIHBoYXNlLmFjdGlvbnMuYWJvcnQoKTtcbiAgICB9XG4gIH0sIFtzdG9wXSk7XG4gIGNvbnN0IGJpbmRDYXB0dXJpbmdFdmVudHMgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKGZ1bmN0aW9uIGJpbmRDYXB0dXJpbmdFdmVudHMoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICBwYXNzaXZlOiBmYWxzZVxuICAgIH07XG4gICAgY29uc3QgYmluZGluZ3MgPSBnZXRDYXB0dXJlQmluZGluZ3Moe1xuICAgICAgY2FuY2VsLFxuICAgICAgY29tcGxldGVkOiBzdG9wLFxuICAgICAgZ2V0UGhhc2U6ICgpID0+IHBoYXNlUmVmLmN1cnJlbnQsXG4gICAgICBzZXRQaGFzZTogcGhhc2UgPT4ge1xuICAgICAgICBwaGFzZVJlZi5jdXJyZW50ID0gcGhhc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdW5iaW5kRXZlbnRzUmVmLmN1cnJlbnQgPSBiaW5kRXZlbnRzKHdpbmRvdywgYmluZGluZ3MsIG9wdGlvbnMpO1xuICB9LCBbY2FuY2VsLCBzdG9wXSk7XG4gIGNvbnN0IHN0YXJ0UGVuZGluZ0RyYWcgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKGZ1bmN0aW9uIHN0YXJ0UGVuZGluZ0RyYWcoYWN0aW9ucywgcG9pbnQpIHtcbiAgICAhKHBoYXNlUmVmLmN1cnJlbnQudHlwZSA9PT0gJ0lETEUnKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkIHRvIG1vdmUgZnJvbSBJRExFIHRvIFBFTkRJTkcgZHJhZycpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBwaGFzZVJlZi5jdXJyZW50ID0ge1xuICAgICAgdHlwZTogJ1BFTkRJTkcnLFxuICAgICAgcG9pbnQsXG4gICAgICBhY3Rpb25zXG4gICAgfTtcbiAgICBiaW5kQ2FwdHVyaW5nRXZlbnRzKCk7XG4gIH0sIFtiaW5kQ2FwdHVyaW5nRXZlbnRzXSk7XG4gIHVzZUxheW91dEVmZmVjdChmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBsaXN0ZW5Gb3JDYXB0dXJlKCk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gdW5tb3VudCgpIHtcbiAgICAgIHVuYmluZEV2ZW50c1JlZi5jdXJyZW50KCk7XG4gICAgfTtcbiAgfSwgW2xpc3RlbkZvckNhcHR1cmVdKTtcbn1cblxuZnVuY3Rpb24gbm9vcCQxKCkge31cbmNvbnN0IHNjcm9sbEp1bXBLZXlzID0ge1xuICBbcGFnZURvd25dOiB0cnVlLFxuICBbcGFnZVVwXTogdHJ1ZSxcbiAgW2hvbWVdOiB0cnVlLFxuICBbZW5kXTogdHJ1ZVxufTtcbmZ1bmN0aW9uIGdldERyYWdnaW5nQmluZGluZ3MoYWN0aW9ucywgc3RvcCkge1xuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgc3RvcCgpO1xuICAgIGFjdGlvbnMuY2FuY2VsKCk7XG4gIH1cbiAgZnVuY3Rpb24gZHJvcCgpIHtcbiAgICBzdG9wKCk7XG4gICAgYWN0aW9ucy5kcm9wKCk7XG4gIH1cbiAgcmV0dXJuIFt7XG4gICAgZXZlbnROYW1lOiAna2V5ZG93bicsXG4gICAgZm46IGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBlc2NhcGUpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IHNwYWNlKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRyb3AoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gYXJyb3dEb3duKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGFjdGlvbnMubW92ZURvd24oKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IGFycm93VXApIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYWN0aW9ucy5tb3ZlVXAoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IGFycm93UmlnaHQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYWN0aW9ucy5tb3ZlUmlnaHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IGFycm93TGVmdCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBhY3Rpb25zLm1vdmVMZWZ0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHNjcm9sbEp1bXBLZXlzW2V2ZW50LmtleUNvZGVdKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHByZXZlbnRTdGFuZGFyZEtleUV2ZW50cyhldmVudCk7XG4gICAgfVxuICB9LFxuICB7XG4gICAgZXZlbnROYW1lOiAnbW91c2Vkb3duJyxcbiAgICBmbjogY2FuY2VsXG4gIH0sIHtcbiAgICBldmVudE5hbWU6ICdtb3VzZXVwJyxcbiAgICBmbjogY2FuY2VsXG4gIH0sIHtcbiAgICBldmVudE5hbWU6ICdjbGljaycsXG4gICAgZm46IGNhbmNlbFxuICB9LCB7XG4gICAgZXZlbnROYW1lOiAndG91Y2hzdGFydCcsXG4gICAgZm46IGNhbmNlbFxuICB9LFxuICB7XG4gICAgZXZlbnROYW1lOiAncmVzaXplJyxcbiAgICBmbjogY2FuY2VsXG4gIH0sXG4gIHtcbiAgICBldmVudE5hbWU6ICd3aGVlbCcsXG4gICAgZm46IGNhbmNlbCxcbiAgICBvcHRpb25zOiB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfVxuICB9LFxuICB7XG4gICAgZXZlbnROYW1lOiBzdXBwb3J0ZWRQYWdlVmlzaWJpbGl0eUV2ZW50TmFtZSxcbiAgICBmbjogY2FuY2VsXG4gIH1dO1xufVxuZnVuY3Rpb24gdXNlS2V5Ym9hcmRTZW5zb3IoYXBpKSB7XG4gIGNvbnN0IHVuYmluZEV2ZW50c1JlZiA9IFJlYWN0LnVzZVJlZihub29wJDEpO1xuICBjb25zdCBzdGFydENhcHR1cmVCaW5kaW5nID0gdXNlTWVtb09uZS51c2VNZW1vKCgpID0+ICh7XG4gICAgZXZlbnROYW1lOiAna2V5ZG93bicsXG4gICAgZm46IGZ1bmN0aW9uIG9uS2V5RG93bihldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSAhPT0gc3BhY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZHJhZ2dhYmxlSWQgPSBhcGkuZmluZENsb3Nlc3REcmFnZ2FibGVJZChldmVudCk7XG4gICAgICBpZiAoIWRyYWdnYWJsZUlkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByZURyYWcgPSBhcGkudHJ5R2V0TG9jayhkcmFnZ2FibGVJZCxcbiAgICAgIHN0b3AsIHtcbiAgICAgICAgc291cmNlRXZlbnQ6IGV2ZW50XG4gICAgICB9KTtcblxuICAgICAgaWYgKCFwcmVEcmFnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGxldCBpc0NhcHR1cmluZyA9IHRydWU7XG5cbiAgICAgIGNvbnN0IGFjdGlvbnMgPSBwcmVEcmFnLnNuYXBMaWZ0KCk7XG5cbiAgICAgIHVuYmluZEV2ZW50c1JlZi5jdXJyZW50KCk7XG5cbiAgICAgIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgICAgICFpc0NhcHR1cmluZyA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0Nhbm5vdCBzdG9wIGNhcHR1cmluZyBhIGtleWJvYXJkIGRyYWcgd2hlbiBub3QgY2FwdHVyaW5nJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgICAgICBpc0NhcHR1cmluZyA9IGZhbHNlO1xuXG4gICAgICAgIHVuYmluZEV2ZW50c1JlZi5jdXJyZW50KCk7XG4gICAgICAgIGxpc3RlbkZvckNhcHR1cmUoKTtcbiAgICAgIH1cblxuICAgICAgdW5iaW5kRXZlbnRzUmVmLmN1cnJlbnQgPSBiaW5kRXZlbnRzKHdpbmRvdywgZ2V0RHJhZ2dpbmdCaW5kaW5ncyhhY3Rpb25zLCBzdG9wKSwge1xuICAgICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgICBwYXNzaXZlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9KSxcbiAgW2FwaV0pO1xuICBjb25zdCBsaXN0ZW5Gb3JDYXB0dXJlID0gdXNlTWVtb09uZS51c2VDYWxsYmFjayhmdW5jdGlvbiB0cnlTdGFydENhcHR1cmUoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgY2FwdHVyZTogdHJ1ZVxuICAgIH07XG4gICAgdW5iaW5kRXZlbnRzUmVmLmN1cnJlbnQgPSBiaW5kRXZlbnRzKHdpbmRvdywgW3N0YXJ0Q2FwdHVyZUJpbmRpbmddLCBvcHRpb25zKTtcbiAgfSwgW3N0YXJ0Q2FwdHVyZUJpbmRpbmddKTtcbiAgdXNlTGF5b3V0RWZmZWN0KGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGxpc3RlbkZvckNhcHR1cmUoKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiB1bm1vdW50KCkge1xuICAgICAgdW5iaW5kRXZlbnRzUmVmLmN1cnJlbnQoKTtcbiAgICB9O1xuICB9LCBbbGlzdGVuRm9yQ2FwdHVyZV0pO1xufVxuXG5jb25zdCBpZGxlID0ge1xuICB0eXBlOiAnSURMRSdcbn07XG5jb25zdCB0aW1lRm9yTG9uZ1ByZXNzID0gMTIwO1xuY29uc3QgZm9yY2VQcmVzc1RocmVzaG9sZCA9IDAuMTU7XG5mdW5jdGlvbiBnZXRXaW5kb3dCaW5kaW5ncyhfcmVmKSB7XG4gIGxldCB7XG4gICAgY2FuY2VsLFxuICAgIGdldFBoYXNlXG4gIH0gPSBfcmVmO1xuICByZXR1cm4gW1xuICB7XG4gICAgZXZlbnROYW1lOiAnb3JpZW50YXRpb25jaGFuZ2UnLFxuICAgIGZuOiBjYW5jZWxcbiAgfSxcbiAge1xuICAgIGV2ZW50TmFtZTogJ3Jlc2l6ZScsXG4gICAgZm46IGNhbmNlbFxuICB9LFxuICB7XG4gICAgZXZlbnROYW1lOiAnY29udGV4dG1lbnUnLFxuICAgIGZuOiBldmVudCA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGV2ZW50TmFtZTogJ2tleWRvd24nLFxuICAgIGZuOiBldmVudCA9PiB7XG4gICAgICBpZiAoZ2V0UGhhc2UoKS50eXBlICE9PSAnRFJBR0dJTkcnKSB7XG4gICAgICAgIGNhbmNlbCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBlc2NhcGUpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICAgIGNhbmNlbCgpO1xuICAgIH1cbiAgfSxcbiAge1xuICAgIGV2ZW50TmFtZTogc3VwcG9ydGVkUGFnZVZpc2liaWxpdHlFdmVudE5hbWUsXG4gICAgZm46IGNhbmNlbFxuICB9XTtcbn1cblxuZnVuY3Rpb24gZ2V0SGFuZGxlQmluZGluZ3MoX3JlZjIpIHtcbiAgbGV0IHtcbiAgICBjYW5jZWwsXG4gICAgY29tcGxldGVkLFxuICAgIGdldFBoYXNlXG4gIH0gPSBfcmVmMjtcbiAgcmV0dXJuIFt7XG4gICAgZXZlbnROYW1lOiAndG91Y2htb3ZlJyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBjYXB0dXJlOiBmYWxzZVxuICAgIH0sXG4gICAgZm46IGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHBoYXNlID0gZ2V0UGhhc2UoKTtcbiAgICAgIGlmIChwaGFzZS50eXBlICE9PSAnRFJBR0dJTkcnKSB7XG4gICAgICAgIGNhbmNlbCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHBoYXNlLmhhc01vdmVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xpZW50WCxcbiAgICAgICAgY2xpZW50WVxuICAgICAgfSA9IGV2ZW50LnRvdWNoZXNbMF07XG4gICAgICBjb25zdCBwb2ludCA9IHtcbiAgICAgICAgeDogY2xpZW50WCxcbiAgICAgICAgeTogY2xpZW50WVxuICAgICAgfTtcblxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHBoYXNlLmFjdGlvbnMubW92ZShwb2ludCk7XG4gICAgfVxuICB9LCB7XG4gICAgZXZlbnROYW1lOiAndG91Y2hlbmQnLFxuICAgIGZuOiBldmVudCA9PiB7XG4gICAgICBjb25zdCBwaGFzZSA9IGdldFBoYXNlKCk7XG4gICAgICBpZiAocGhhc2UudHlwZSAhPT0gJ0RSQUdHSU5HJykge1xuICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcGhhc2UuYWN0aW9ucy5kcm9wKHtcbiAgICAgICAgc2hvdWxkQmxvY2tOZXh0Q2xpY2s6IHRydWVcbiAgICAgIH0pO1xuICAgICAgY29tcGxldGVkKCk7XG4gICAgfVxuICB9LCB7XG4gICAgZXZlbnROYW1lOiAndG91Y2hjYW5jZWwnLFxuICAgIGZuOiBldmVudCA9PiB7XG4gICAgICBpZiAoZ2V0UGhhc2UoKS50eXBlICE9PSAnRFJBR0dJTkcnKSB7XG4gICAgICAgIGNhbmNlbCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjYW5jZWwoKTtcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBldmVudE5hbWU6ICd0b3VjaGZvcmNlY2hhbmdlJyxcbiAgICBmbjogZXZlbnQgPT4ge1xuICAgICAgY29uc3QgcGhhc2UgPSBnZXRQaGFzZSgpO1xuXG4gICAgICAhKHBoYXNlLnR5cGUgIT09ICdJRExFJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcblxuICAgICAgY29uc3QgdG91Y2ggPSBldmVudC50b3VjaGVzWzBdO1xuICAgICAgaWYgKCF0b3VjaCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc0ZvcmNlUHJlc3MgPSB0b3VjaC5mb3JjZSA+PSBmb3JjZVByZXNzVGhyZXNob2xkO1xuICAgICAgaWYgKCFpc0ZvcmNlUHJlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2hvdWxkUmVzcGVjdCA9IHBoYXNlLmFjdGlvbnMuc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3MoKTtcbiAgICAgIGlmIChwaGFzZS50eXBlID09PSAnUEVORElORycpIHtcbiAgICAgICAgaWYgKHNob3VsZFJlc3BlY3QpIHtcbiAgICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRSZXNwZWN0KSB7XG4gICAgICAgIGlmIChwaGFzZS5oYXNNb3ZlZCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNhbmNlbCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9LFxuICB7XG4gICAgZXZlbnROYW1lOiBzdXBwb3J0ZWRQYWdlVmlzaWJpbGl0eUV2ZW50TmFtZSxcbiAgICBmbjogY2FuY2VsXG4gIH1cbiAgXTtcbn1cblxuZnVuY3Rpb24gdXNlVG91Y2hTZW5zb3IoYXBpKSB7XG4gIGNvbnN0IHBoYXNlUmVmID0gUmVhY3QudXNlUmVmKGlkbGUpO1xuICBjb25zdCB1bmJpbmRFdmVudHNSZWYgPSBSZWFjdC51c2VSZWYobm9vcCQyKTtcbiAgY29uc3QgZ2V0UGhhc2UgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKGZ1bmN0aW9uIGdldFBoYXNlKCkge1xuICAgIHJldHVybiBwaGFzZVJlZi5jdXJyZW50O1xuICB9LCBbXSk7XG4gIGNvbnN0IHNldFBoYXNlID0gdXNlTWVtb09uZS51c2VDYWxsYmFjayhmdW5jdGlvbiBzZXRQaGFzZShwaGFzZSkge1xuICAgIHBoYXNlUmVmLmN1cnJlbnQgPSBwaGFzZTtcbiAgfSwgW10pO1xuICBjb25zdCBzdGFydENhcHR1cmVCaW5kaW5nID0gdXNlTWVtb09uZS51c2VNZW1vKCgpID0+ICh7XG4gICAgZXZlbnROYW1lOiAndG91Y2hzdGFydCcsXG4gICAgZm46IGZ1bmN0aW9uIG9uVG91Y2hTdGFydChldmVudCkge1xuICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkcmFnZ2FibGVJZCA9IGFwaS5maW5kQ2xvc2VzdERyYWdnYWJsZUlkKGV2ZW50KTtcbiAgICAgIGlmICghZHJhZ2dhYmxlSWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYWN0aW9ucyA9IGFwaS50cnlHZXRMb2NrKGRyYWdnYWJsZUlkLFxuICAgICAgc3RvcCwge1xuICAgICAgICBzb3VyY2VFdmVudDogZXZlbnRcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIWFjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdG91Y2ggPSBldmVudC50b3VjaGVzWzBdO1xuICAgICAgY29uc3Qge1xuICAgICAgICBjbGllbnRYLFxuICAgICAgICBjbGllbnRZXG4gICAgICB9ID0gdG91Y2g7XG4gICAgICBjb25zdCBwb2ludCA9IHtcbiAgICAgICAgeDogY2xpZW50WCxcbiAgICAgICAgeTogY2xpZW50WVxuICAgICAgfTtcblxuICAgICAgdW5iaW5kRXZlbnRzUmVmLmN1cnJlbnQoKTtcblxuICAgICAgc3RhcnRQZW5kaW5nRHJhZyhhY3Rpb25zLCBwb2ludCk7XG4gICAgfVxuICB9KSxcbiAgW2FwaV0pO1xuICBjb25zdCBsaXN0ZW5Gb3JDYXB0dXJlID0gdXNlTWVtb09uZS51c2VDYWxsYmFjayhmdW5jdGlvbiBsaXN0ZW5Gb3JDYXB0dXJlKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgcGFzc2l2ZTogZmFsc2VcbiAgICB9O1xuICAgIHVuYmluZEV2ZW50c1JlZi5jdXJyZW50ID0gYmluZEV2ZW50cyh3aW5kb3csIFtzdGFydENhcHR1cmVCaW5kaW5nXSwgb3B0aW9ucyk7XG4gIH0sIFtzdGFydENhcHR1cmVCaW5kaW5nXSk7XG4gIGNvbnN0IHN0b3AgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gcGhhc2VSZWYuY3VycmVudDtcbiAgICBpZiAoY3VycmVudC50eXBlID09PSAnSURMRScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudC50eXBlID09PSAnUEVORElORycpIHtcbiAgICAgIGNsZWFyVGltZW91dChjdXJyZW50LmxvbmdQcmVzc1RpbWVySWQpO1xuICAgIH1cbiAgICBzZXRQaGFzZShpZGxlKTtcbiAgICB1bmJpbmRFdmVudHNSZWYuY3VycmVudCgpO1xuICAgIGxpc3RlbkZvckNhcHR1cmUoKTtcbiAgfSwgW2xpc3RlbkZvckNhcHR1cmUsIHNldFBoYXNlXSk7XG4gIGNvbnN0IGNhbmNlbCA9IHVzZU1lbW9PbmUudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHBoYXNlID0gcGhhc2VSZWYuY3VycmVudDtcbiAgICBzdG9wKCk7XG4gICAgaWYgKHBoYXNlLnR5cGUgPT09ICdEUkFHR0lORycpIHtcbiAgICAgIHBoYXNlLmFjdGlvbnMuY2FuY2VsKHtcbiAgICAgICAgc2hvdWxkQmxvY2tOZXh0Q2xpY2s6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAocGhhc2UudHlwZSA9PT0gJ1BFTkRJTkcnKSB7XG4gICAgICBwaGFzZS5hY3Rpb25zLmFib3J0KCk7XG4gICAgfVxuICB9LCBbc3RvcF0pO1xuICBjb25zdCBiaW5kQ2FwdHVyaW5nRXZlbnRzID0gdXNlTWVtb09uZS51c2VDYWxsYmFjayhmdW5jdGlvbiBiaW5kQ2FwdHVyaW5nRXZlbnRzKCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBjYXB0dXJlOiB0cnVlLFxuICAgICAgcGFzc2l2ZTogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICBjYW5jZWwsXG4gICAgICBjb21wbGV0ZWQ6IHN0b3AsXG4gICAgICBnZXRQaGFzZVxuICAgIH07XG5cbiAgICBjb25zdCB1bmJpbmRUYXJnZXQgPSBiaW5kRXZlbnRzKHdpbmRvdywgZ2V0SGFuZGxlQmluZGluZ3MoYXJncyksIG9wdGlvbnMpO1xuICAgIGNvbnN0IHVuYmluZFdpbmRvdyA9IGJpbmRFdmVudHMod2luZG93LCBnZXRXaW5kb3dCaW5kaW5ncyhhcmdzKSwgb3B0aW9ucyk7XG4gICAgdW5iaW5kRXZlbnRzUmVmLmN1cnJlbnQgPSBmdW5jdGlvbiB1bmJpbmRBbGwoKSB7XG4gICAgICB1bmJpbmRUYXJnZXQoKTtcbiAgICAgIHVuYmluZFdpbmRvdygpO1xuICAgIH07XG4gIH0sIFtjYW5jZWwsIGdldFBoYXNlLCBzdG9wXSk7XG4gIGNvbnN0IHN0YXJ0RHJhZ2dpbmcgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKGZ1bmN0aW9uIHN0YXJ0RHJhZ2dpbmcoKSB7XG4gICAgY29uc3QgcGhhc2UgPSBnZXRQaGFzZSgpO1xuICAgICEocGhhc2UudHlwZSA9PT0gJ1BFTkRJTkcnKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgYENhbm5vdCBzdGFydCBkcmFnZ2luZyBmcm9tIHBoYXNlICR7cGhhc2UudHlwZX1gKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgY29uc3QgYWN0aW9ucyA9IHBoYXNlLmFjdGlvbnMuZmx1aWRMaWZ0KHBoYXNlLnBvaW50KTtcbiAgICBzZXRQaGFzZSh7XG4gICAgICB0eXBlOiAnRFJBR0dJTkcnLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIGhhc01vdmVkOiBmYWxzZVxuICAgIH0pO1xuICB9LCBbZ2V0UGhhc2UsIHNldFBoYXNlXSk7XG4gIGNvbnN0IHN0YXJ0UGVuZGluZ0RyYWcgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKGZ1bmN0aW9uIHN0YXJ0UGVuZGluZ0RyYWcoYWN0aW9ucywgcG9pbnQpIHtcbiAgICAhKGdldFBoYXNlKCkudHlwZSA9PT0gJ0lETEUnKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0V4cGVjdGVkIHRvIG1vdmUgZnJvbSBJRExFIHRvIFBFTkRJTkcgZHJhZycpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBjb25zdCBsb25nUHJlc3NUaW1lcklkID0gc2V0VGltZW91dChzdGFydERyYWdnaW5nLCB0aW1lRm9yTG9uZ1ByZXNzKTtcbiAgICBzZXRQaGFzZSh7XG4gICAgICB0eXBlOiAnUEVORElORycsXG4gICAgICBwb2ludCxcbiAgICAgIGFjdGlvbnMsXG4gICAgICBsb25nUHJlc3NUaW1lcklkXG4gICAgfSk7XG4gICAgYmluZENhcHR1cmluZ0V2ZW50cygpO1xuICB9LCBbYmluZENhcHR1cmluZ0V2ZW50cywgZ2V0UGhhc2UsIHNldFBoYXNlLCBzdGFydERyYWdnaW5nXSk7XG4gIHVzZUxheW91dEVmZmVjdChmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBsaXN0ZW5Gb3JDYXB0dXJlKCk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVubW91bnQoKSB7XG4gICAgICB1bmJpbmRFdmVudHNSZWYuY3VycmVudCgpO1xuXG4gICAgICBjb25zdCBwaGFzZSA9IGdldFBoYXNlKCk7XG4gICAgICBpZiAocGhhc2UudHlwZSA9PT0gJ1BFTkRJTkcnKSB7XG4gICAgICAgIGNsZWFyVGltZW91dChwaGFzZS5sb25nUHJlc3NUaW1lcklkKTtcbiAgICAgICAgc2V0UGhhc2UoaWRsZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2dldFBoYXNlLCBsaXN0ZW5Gb3JDYXB0dXJlLCBzZXRQaGFzZV0pO1xuXG4gIHVzZUxheW91dEVmZmVjdChmdW5jdGlvbiB3ZWJraXRIYWNrKCkge1xuICAgIGNvbnN0IHVuYmluZCA9IGJpbmRFdmVudHMod2luZG93LCBbe1xuICAgICAgZXZlbnROYW1lOiAndG91Y2htb3ZlJyxcbiAgICAgIGZuOiAoKSA9PiB7fSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY2FwdHVyZTogZmFsc2UsXG4gICAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgICB9XG4gICAgfV0pO1xuICAgIHJldHVybiB1bmJpbmQ7XG4gIH0sIFtdKTtcbn1cblxuZnVuY3Rpb24gdXNlVmFsaWRhdGVTZW5zb3JIb29rcyhzZW5zb3JIb29rcykge1xuICB1c2VEZXYoKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpb3VzUmVmID0gdXNlUHJldmlvdXMoc2Vuc29ySG9va3MpO1xuICAgIHVzZURldlNldHVwV2FybmluZygoKSA9PiB7XG4gICAgICAhKHByZXZpb3VzUmVmLmN1cnJlbnQubGVuZ3RoID09PSBzZW5zb3JIb29rcy5sZW5ndGgpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IGNoYW5nZSB0aGUgYW1vdW50IG9mIHNlbnNvciBob29rcyBhZnRlciBtb3VudGluZycpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IGludGVyYWN0aXZlVGFnTmFtZXMgPSBbJ2lucHV0JywgJ2J1dHRvbicsICd0ZXh0YXJlYScsICdzZWxlY3QnLCAnb3B0aW9uJywgJ29wdGdyb3VwJywgJ3ZpZGVvJywgJ2F1ZGlvJ107XG5mdW5jdGlvbiBpc0FuSW50ZXJhY3RpdmVFbGVtZW50KHBhcmVudCwgY3VycmVudCkge1xuICBpZiAoY3VycmVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaGFzQW5JbnRlcmFjdGl2ZVRhZyA9IGludGVyYWN0aXZlVGFnTmFtZXMuaW5jbHVkZXMoY3VycmVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICBpZiAoaGFzQW5JbnRlcmFjdGl2ZVRhZykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgYXR0cmlidXRlID0gY3VycmVudC5nZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpO1xuICBpZiAoYXR0cmlidXRlID09PSAndHJ1ZScgfHwgYXR0cmlidXRlID09PSAnJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGN1cnJlbnQgPT09IHBhcmVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBpc0FuSW50ZXJhY3RpdmVFbGVtZW50KHBhcmVudCwgY3VycmVudC5wYXJlbnRFbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGlzRXZlbnRJbkludGVyYWN0aXZlRWxlbWVudChkcmFnZ2FibGUsIGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgaWYgKCFpc0h0bWxFbGVtZW50KHRhcmdldCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzQW5JbnRlcmFjdGl2ZUVsZW1lbnQoZHJhZ2dhYmxlLCB0YXJnZXQpO1xufVxuXG52YXIgZ2V0Qm9yZGVyQm94Q2VudGVyUG9zaXRpb24gPSAoZWwgPT4gY3NzQm94TW9kZWwuZ2V0UmVjdChlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkuY2VudGVyKTtcblxuZnVuY3Rpb24gaXNFbGVtZW50KGVsKSB7XG4gIHJldHVybiBlbCBpbnN0YW5jZW9mIGdldFdpbmRvd0Zyb21FbChlbCkuRWxlbWVudDtcbn1cblxuY29uc3Qgc3VwcG9ydGVkTWF0Y2hlc05hbWUgPSAoKCkgPT4ge1xuICBjb25zdCBiYXNlID0gJ21hdGNoZXMnO1xuXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGVzID0gW2Jhc2UsICdtc01hdGNoZXNTZWxlY3RvcicsICd3ZWJraXRNYXRjaGVzU2VsZWN0b3InXTtcbiAgY29uc3QgdmFsdWUgPSBjYW5kaWRhdGVzLmZpbmQobmFtZSA9PiBuYW1lIGluIEVsZW1lbnQucHJvdG90eXBlKTtcbiAgcmV0dXJuIHZhbHVlIHx8IGJhc2U7XG59KSgpO1xuZnVuY3Rpb24gY2xvc2VzdFBvbnlmaWxsKGVsLCBzZWxlY3Rvcikge1xuICBpZiAoZWwgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGVsW3N1cHBvcnRlZE1hdGNoZXNOYW1lXShzZWxlY3RvcikpIHtcbiAgICByZXR1cm4gZWw7XG4gIH1cblxuICByZXR1cm4gY2xvc2VzdFBvbnlmaWxsKGVsLnBhcmVudEVsZW1lbnQsIHNlbGVjdG9yKTtcbn1cbmZ1bmN0aW9uIGNsb3Nlc3QoZWwsIHNlbGVjdG9yKSB7XG4gIGlmIChlbC5jbG9zZXN0KSB7XG4gICAgcmV0dXJuIGVsLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICB9XG4gIHJldHVybiBjbG9zZXN0UG9ueWZpbGwoZWwsIHNlbGVjdG9yKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0b3IoY29udGV4dElkKSB7XG4gIHJldHVybiBgWyR7ZHJhZ0hhbmRsZS5jb250ZXh0SWR9PVwiJHtjb250ZXh0SWR9XCJdYDtcbn1cbmZ1bmN0aW9uIGZpbmRDbG9zZXN0RHJhZ0hhbmRsZUZyb21FdmVudChjb250ZXh0SWQsIGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgaWYgKCFpc0VsZW1lbnQodGFyZ2V0KSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoJ2V2ZW50LnRhcmdldCBtdXN0IGJlIGEgRWxlbWVudCcpIDogdm9pZCAwO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoY29udGV4dElkKTtcbiAgY29uc3QgaGFuZGxlID0gY2xvc2VzdCh0YXJnZXQsIHNlbGVjdG9yKTtcbiAgaWYgKCFoYW5kbGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoIWlzSHRtbEVsZW1lbnQoaGFuZGxlKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoJ2RyYWcgaGFuZGxlIG11c3QgYmUgYSBIVE1MRWxlbWVudCcpIDogdm9pZCAwO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBoYW5kbGU7XG59XG5mdW5jdGlvbiB0cnlHZXRDbG9zZXN0RHJhZ2dhYmxlSWRGcm9tRXZlbnQoY29udGV4dElkLCBldmVudCkge1xuICBjb25zdCBoYW5kbGUgPSBmaW5kQ2xvc2VzdERyYWdIYW5kbGVGcm9tRXZlbnQoY29udGV4dElkLCBldmVudCk7XG4gIGlmICghaGFuZGxlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGhhbmRsZS5nZXRBdHRyaWJ1dGUoZHJhZ0hhbmRsZS5kcmFnZ2FibGVJZCk7XG59XG5cbmZ1bmN0aW9uIGZpbmREcmFnZ2FibGUoY29udGV4dElkLCBkcmFnZ2FibGVJZCkge1xuICBjb25zdCBzZWxlY3RvciA9IGBbJHtkcmFnZ2FibGUuY29udGV4dElkfT1cIiR7Y29udGV4dElkfVwiXWA7XG4gIGNvbnN0IHBvc3NpYmxlID0gcXVlcnlTZWxlY3RvckFsbChkb2N1bWVudCwgc2VsZWN0b3IpO1xuICBjb25zdCBkcmFnZ2FibGUkMSA9IHBvc3NpYmxlLmZpbmQoZWwgPT4ge1xuICAgIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoZHJhZ2dhYmxlLmlkKSA9PT0gZHJhZ2dhYmxlSWQ7XG4gIH0pO1xuICBpZiAoIWRyYWdnYWJsZSQxKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFpc0h0bWxFbGVtZW50KGRyYWdnYWJsZSQxKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoJ0RyYWdnYWJsZSBlbGVtZW50IGlzIG5vdCBhIEhUTUxFbGVtZW50JykgOiB2b2lkIDA7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGRyYWdnYWJsZSQxO1xufVxuXG5mdW5jdGlvbiBwcmV2ZW50RGVmYXVsdChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuZnVuY3Rpb24gaXNBY3RpdmUoX3JlZikge1xuICBsZXQge1xuICAgIGV4cGVjdGVkLFxuICAgIHBoYXNlLFxuICAgIGlzTG9ja0FjdGl2ZSxcbiAgICBzaG91bGRXYXJuXG4gIH0gPSBfcmVmO1xuICBpZiAoIWlzTG9ja0FjdGl2ZSgpKSB7XG4gICAgaWYgKHNob3VsZFdhcm4pIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHdhcm5pbmcoYFxuICAgICAgICBDYW5ub3QgcGVyZm9ybSBhY3Rpb24uXG4gICAgICAgIFRoZSBzZW5zb3Igbm8gbG9uZ2VyIGhhcyBhbiBhY3Rpb24gbG9jay5cblxuICAgICAgICBUaXBzOlxuXG4gICAgICAgIC0gVGhyb3cgYXdheSB5b3VyIGFjdGlvbiBoYW5kbGVycyB3aGVuIGZvcmNlU3RvcCgpIGlzIGNhbGxlZFxuICAgICAgICAtIENoZWNrIGFjdGlvbnMuaXNBY3RpdmUoKSBpZiB5b3UgcmVhbGx5IG5lZWQgdG9cbiAgICAgIGApIDogdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGV4cGVjdGVkICE9PSBwaGFzZSkge1xuICAgIGlmIChzaG91bGRXYXJuKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKGBcbiAgICAgICAgQ2Fubm90IHBlcmZvcm0gYWN0aW9uLlxuICAgICAgICBUaGUgYWN0aW9ucyB5b3UgdXNlZCBiZWxvbmcgdG8gYW4gb3V0ZGF0ZWQgcGhhc2VcblxuICAgICAgICBDdXJyZW50IHBoYXNlOiAke2V4cGVjdGVkfVxuICAgICAgICBZb3UgY2FsbGVkIGFuIGFjdGlvbiBmcm9tIG91dGRhdGVkIHBoYXNlOiAke3BoYXNlfVxuXG4gICAgICAgIFRpcHM6XG5cbiAgICAgICAgLSBEbyBub3QgdXNlIHByZURyYWdBY3Rpb25zIGFjdGlvbnMgYWZ0ZXIgY2FsbGluZyBwcmVEcmFnQWN0aW9ucy5saWZ0KClcbiAgICAgIGApIDogdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBjYW5TdGFydChfcmVmMikge1xuICBsZXQge1xuICAgIGxvY2tBUEksXG4gICAgc3RvcmUsXG4gICAgcmVnaXN0cnksXG4gICAgZHJhZ2dhYmxlSWRcbiAgfSA9IF9yZWYyO1xuICBpZiAobG9ja0FQSS5pc0NsYWltZWQoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBlbnRyeSA9IHJlZ2lzdHJ5LmRyYWdnYWJsZS5maW5kQnlJZChkcmFnZ2FibGVJZCk7XG4gIGlmICghZW50cnkpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKGBVbmFibGUgdG8gZmluZCBkcmFnZ2FibGUgd2l0aCBpZDogJHtkcmFnZ2FibGVJZH1gKSA6IHZvaWQgMDtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWVudHJ5Lm9wdGlvbnMuaXNFbmFibGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFjYW5TdGFydERyYWcoc3RvcmUuZ2V0U3RhdGUoKSwgZHJhZ2dhYmxlSWQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gdHJ5U3RhcnQoX3JlZjMpIHtcbiAgbGV0IHtcbiAgICBsb2NrQVBJLFxuICAgIGNvbnRleHRJZCxcbiAgICBzdG9yZSxcbiAgICByZWdpc3RyeSxcbiAgICBkcmFnZ2FibGVJZCxcbiAgICBmb3JjZVNlbnNvclN0b3AsXG4gICAgc291cmNlRXZlbnRcbiAgfSA9IF9yZWYzO1xuICBjb25zdCBzaG91bGRTdGFydCA9IGNhblN0YXJ0KHtcbiAgICBsb2NrQVBJLFxuICAgIHN0b3JlLFxuICAgIHJlZ2lzdHJ5LFxuICAgIGRyYWdnYWJsZUlkXG4gIH0pO1xuICBpZiAoIXNob3VsZFN0YXJ0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgZW50cnkgPSByZWdpc3RyeS5kcmFnZ2FibGUuZ2V0QnlJZChkcmFnZ2FibGVJZCk7XG4gIGNvbnN0IGVsID0gZmluZERyYWdnYWJsZShjb250ZXh0SWQsIGVudHJ5LmRlc2NyaXB0b3IuaWQpO1xuICBpZiAoIWVsKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhgVW5hYmxlIHRvIGZpbmQgZHJhZ2dhYmxlIGVsZW1lbnQgd2l0aCBpZDogJHtkcmFnZ2FibGVJZH1gKSA6IHZvaWQgMDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChzb3VyY2VFdmVudCAmJiAhZW50cnkub3B0aW9ucy5jYW5EcmFnSW50ZXJhY3RpdmVFbGVtZW50cyAmJiBpc0V2ZW50SW5JbnRlcmFjdGl2ZUVsZW1lbnQoZWwsIHNvdXJjZUV2ZW50KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbG9jayA9IGxvY2tBUEkuY2xhaW0oZm9yY2VTZW5zb3JTdG9wIHx8IG5vb3AkMik7XG4gIGxldCBwaGFzZSA9ICdQUkVfRFJBRyc7XG4gIGZ1bmN0aW9uIGdldFNob3VsZFJlc3BlY3RGb3JjZVByZXNzKCkge1xuICAgIHJldHVybiBlbnRyeS5vcHRpb25zLnNob3VsZFJlc3BlY3RGb3JjZVByZXNzO1xuICB9XG4gIGZ1bmN0aW9uIGlzTG9ja0FjdGl2ZSgpIHtcbiAgICByZXR1cm4gbG9ja0FQSS5pc0FjdGl2ZShsb2NrKTtcbiAgfVxuICBmdW5jdGlvbiB0cnlEaXNwYXRjaChleHBlY3RlZCwgZ2V0QWN0aW9uKSB7XG4gICAgaWYgKGlzQWN0aXZlKHtcbiAgICAgIGV4cGVjdGVkLFxuICAgICAgcGhhc2UsXG4gICAgICBpc0xvY2tBY3RpdmUsXG4gICAgICBzaG91bGRXYXJuOiB0cnVlXG4gICAgfSkpIHtcbiAgICAgIHN0b3JlLmRpc3BhdGNoKGdldEFjdGlvbigpKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdHJ5RGlzcGF0Y2hXaGVuRHJhZ2dpbmcgPSB0cnlEaXNwYXRjaC5iaW5kKG51bGwsICdEUkFHR0lORycpO1xuICBmdW5jdGlvbiBsaWZ0KGFyZ3MpIHtcbiAgICBmdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG4gICAgICBsb2NrQVBJLnJlbGVhc2UoKTtcbiAgICAgIHBoYXNlID0gJ0NPTVBMRVRFRCc7XG4gICAgfVxuICAgIGlmIChwaGFzZSAhPT0gJ1BSRV9EUkFHJykge1xuICAgICAgY29tcGxldGVkKCk7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGBDYW5ub3QgbGlmdCBpbiBwaGFzZSAke3BoYXNlfWApIDogaW52YXJpYW50KGZhbHNlKSA7XG4gICAgfVxuICAgIHN0b3JlLmRpc3BhdGNoKGxpZnQkMShhcmdzLmxpZnRBY3Rpb25BcmdzKSk7XG5cbiAgICBwaGFzZSA9ICdEUkFHR0lORyc7XG4gICAgZnVuY3Rpb24gZmluaXNoKHJlYXNvbiwgb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgIHNob3VsZEJsb2NrTmV4dENsaWNrOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgYXJncy5jbGVhbnVwKCk7XG5cbiAgICAgIGlmIChvcHRpb25zLnNob3VsZEJsb2NrTmV4dENsaWNrKSB7XG4gICAgICAgIGNvbnN0IHVuYmluZCA9IGJpbmRFdmVudHMod2luZG93LCBbe1xuICAgICAgICAgIGV2ZW50TmFtZTogJ2NsaWNrJyxcbiAgICAgICAgICBmbjogcHJldmVudERlZmF1bHQsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgb25jZTogdHJ1ZSxcbiAgICAgICAgICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgICAgICAgICAgY2FwdHVyZTogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfV0pO1xuICAgICAgICBzZXRUaW1lb3V0KHVuYmluZCk7XG4gICAgICB9XG5cbiAgICAgIGNvbXBsZXRlZCgpO1xuICAgICAgc3RvcmUuZGlzcGF0Y2goZHJvcCQxKHtcbiAgICAgICAgcmVhc29uXG4gICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc0FjdGl2ZTogKCkgPT4gaXNBY3RpdmUoe1xuICAgICAgICBleHBlY3RlZDogJ0RSQUdHSU5HJyxcbiAgICAgICAgcGhhc2UsXG4gICAgICAgIGlzTG9ja0FjdGl2ZSxcbiAgICAgICAgc2hvdWxkV2FybjogZmFsc2VcbiAgICAgIH0pLFxuICAgICAgc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3M6IGdldFNob3VsZFJlc3BlY3RGb3JjZVByZXNzLFxuICAgICAgZHJvcDogb3B0aW9ucyA9PiBmaW5pc2goJ0RST1AnLCBvcHRpb25zKSxcbiAgICAgIGNhbmNlbDogb3B0aW9ucyA9PiBmaW5pc2goJ0NBTkNFTCcsIG9wdGlvbnMpLFxuICAgICAgLi4uYXJncy5hY3Rpb25zXG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBmbHVpZExpZnQoY2xpZW50U2VsZWN0aW9uKSB7XG4gICAgY29uc3QgbW92ZSQxID0gcmFmU2NoZF9fZGVmYXVsdFtcImRlZmF1bHRcIl0oY2xpZW50ID0+IHtcbiAgICAgIHRyeURpc3BhdGNoV2hlbkRyYWdnaW5nKCgpID0+IG1vdmUoe1xuICAgICAgICBjbGllbnRcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgICBjb25zdCBhcGkgPSBsaWZ0KHtcbiAgICAgIGxpZnRBY3Rpb25BcmdzOiB7XG4gICAgICAgIGlkOiBkcmFnZ2FibGVJZCxcbiAgICAgICAgY2xpZW50U2VsZWN0aW9uLFxuICAgICAgICBtb3ZlbWVudE1vZGU6ICdGTFVJRCdcbiAgICAgIH0sXG4gICAgICBjbGVhbnVwOiAoKSA9PiBtb3ZlJDEuY2FuY2VsKCksXG4gICAgICBhY3Rpb25zOiB7XG4gICAgICAgIG1vdmU6IG1vdmUkMVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5hcGksXG4gICAgICBtb3ZlOiBtb3ZlJDFcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHNuYXBMaWZ0KCkge1xuICAgIGNvbnN0IGFjdGlvbnMgPSB7XG4gICAgICBtb3ZlVXA6ICgpID0+IHRyeURpc3BhdGNoV2hlbkRyYWdnaW5nKG1vdmVVcCksXG4gICAgICBtb3ZlUmlnaHQ6ICgpID0+IHRyeURpc3BhdGNoV2hlbkRyYWdnaW5nKG1vdmVSaWdodCksXG4gICAgICBtb3ZlRG93bjogKCkgPT4gdHJ5RGlzcGF0Y2hXaGVuRHJhZ2dpbmcobW92ZURvd24pLFxuICAgICAgbW92ZUxlZnQ6ICgpID0+IHRyeURpc3BhdGNoV2hlbkRyYWdnaW5nKG1vdmVMZWZ0KVxuICAgIH07XG4gICAgcmV0dXJuIGxpZnQoe1xuICAgICAgbGlmdEFjdGlvbkFyZ3M6IHtcbiAgICAgICAgaWQ6IGRyYWdnYWJsZUlkLFxuICAgICAgICBjbGllbnRTZWxlY3Rpb246IGdldEJvcmRlckJveENlbnRlclBvc2l0aW9uKGVsKSxcbiAgICAgICAgbW92ZW1lbnRNb2RlOiAnU05BUCdcbiAgICAgIH0sXG4gICAgICBjbGVhbnVwOiBub29wJDIsXG4gICAgICBhY3Rpb25zXG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gYWJvcnRQcmVEcmFnKCkge1xuICAgIGNvbnN0IHNob3VsZFJlbGVhc2UgPSBpc0FjdGl2ZSh7XG4gICAgICBleHBlY3RlZDogJ1BSRV9EUkFHJyxcbiAgICAgIHBoYXNlLFxuICAgICAgaXNMb2NrQWN0aXZlLFxuICAgICAgc2hvdWxkV2FybjogdHJ1ZVxuICAgIH0pO1xuICAgIGlmIChzaG91bGRSZWxlYXNlKSB7XG4gICAgICBsb2NrQVBJLnJlbGVhc2UoKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcHJlRHJhZyA9IHtcbiAgICBpc0FjdGl2ZTogKCkgPT4gaXNBY3RpdmUoe1xuICAgICAgZXhwZWN0ZWQ6ICdQUkVfRFJBRycsXG4gICAgICBwaGFzZSxcbiAgICAgIGlzTG9ja0FjdGl2ZSxcbiAgICAgIHNob3VsZFdhcm46IGZhbHNlXG4gICAgfSksXG4gICAgc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3M6IGdldFNob3VsZFJlc3BlY3RGb3JjZVByZXNzLFxuICAgIGZsdWlkTGlmdCxcbiAgICBzbmFwTGlmdCxcbiAgICBhYm9ydDogYWJvcnRQcmVEcmFnXG4gIH07XG4gIHJldHVybiBwcmVEcmFnO1xufVxuY29uc3QgZGVmYXVsdFNlbnNvcnMgPSBbdXNlTW91c2VTZW5zb3IsIHVzZUtleWJvYXJkU2Vuc29yLCB1c2VUb3VjaFNlbnNvcl07XG5mdW5jdGlvbiB1c2VTZW5zb3JNYXJzaGFsKF9yZWY0KSB7XG4gIGxldCB7XG4gICAgY29udGV4dElkLFxuICAgIHN0b3JlLFxuICAgIHJlZ2lzdHJ5LFxuICAgIGN1c3RvbVNlbnNvcnMsXG4gICAgZW5hYmxlRGVmYXVsdFNlbnNvcnNcbiAgfSA9IF9yZWY0O1xuICBjb25zdCB1c2VTZW5zb3JzID0gWy4uLihlbmFibGVEZWZhdWx0U2Vuc29ycyA/IGRlZmF1bHRTZW5zb3JzIDogW10pLCAuLi4oY3VzdG9tU2Vuc29ycyB8fCBbXSldO1xuICBjb25zdCBsb2NrQVBJID0gUmVhY3QudXNlU3RhdGUoKCkgPT4gY3JlYXRlKCkpWzBdO1xuICBjb25zdCB0cnlBYmFuZG9uTG9jayA9IHVzZU1lbW9PbmUudXNlQ2FsbGJhY2soZnVuY3Rpb24gdHJ5QWJhbmRvbkxvY2socHJldmlvdXMsIGN1cnJlbnQpIHtcbiAgICBpZiAoaXNEcmFnZ2luZyhwcmV2aW91cykgJiYgIWlzRHJhZ2dpbmcoY3VycmVudCkpIHtcbiAgICAgIGxvY2tBUEkudHJ5QWJhbmRvbigpO1xuICAgIH1cbiAgfSwgW2xvY2tBUEldKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoZnVuY3Rpb24gbGlzdGVuVG9TdG9yZSgpIHtcbiAgICBsZXQgcHJldmlvdXMgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgdHJ5QWJhbmRvbkxvY2socHJldmlvdXMsIGN1cnJlbnQpO1xuICAgICAgcHJldmlvdXMgPSBjdXJyZW50O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9LCBbbG9ja0FQSSwgc3RvcmUsIHRyeUFiYW5kb25Mb2NrXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gbG9ja0FQSS50cnlBYmFuZG9uO1xuICB9LCBbbG9ja0FQSS50cnlBYmFuZG9uXSk7XG4gIGNvbnN0IGNhbkdldExvY2sgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKGRyYWdnYWJsZUlkID0+IHtcbiAgICByZXR1cm4gY2FuU3RhcnQoe1xuICAgICAgbG9ja0FQSSxcbiAgICAgIHJlZ2lzdHJ5LFxuICAgICAgc3RvcmUsXG4gICAgICBkcmFnZ2FibGVJZFxuICAgIH0pO1xuICB9LCBbbG9ja0FQSSwgcmVnaXN0cnksIHN0b3JlXSk7XG4gIGNvbnN0IHRyeUdldExvY2sgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKChkcmFnZ2FibGVJZCwgZm9yY2VTdG9wLCBvcHRpb25zKSA9PiB0cnlTdGFydCh7XG4gICAgbG9ja0FQSSxcbiAgICByZWdpc3RyeSxcbiAgICBjb250ZXh0SWQsXG4gICAgc3RvcmUsXG4gICAgZHJhZ2dhYmxlSWQsXG4gICAgZm9yY2VTZW5zb3JTdG9wOiBmb3JjZVN0b3AgfHwgbnVsbCxcbiAgICBzb3VyY2VFdmVudDogb3B0aW9ucyAmJiBvcHRpb25zLnNvdXJjZUV2ZW50ID8gb3B0aW9ucy5zb3VyY2VFdmVudCA6IG51bGxcbiAgfSksIFtjb250ZXh0SWQsIGxvY2tBUEksIHJlZ2lzdHJ5LCBzdG9yZV0pO1xuICBjb25zdCBmaW5kQ2xvc2VzdERyYWdnYWJsZUlkID0gdXNlTWVtb09uZS51c2VDYWxsYmFjayhldmVudCA9PiB0cnlHZXRDbG9zZXN0RHJhZ2dhYmxlSWRGcm9tRXZlbnQoY29udGV4dElkLCBldmVudCksIFtjb250ZXh0SWRdKTtcbiAgY29uc3QgZmluZE9wdGlvbnNGb3JEcmFnZ2FibGUgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKGlkID0+IHtcbiAgICBjb25zdCBlbnRyeSA9IHJlZ2lzdHJ5LmRyYWdnYWJsZS5maW5kQnlJZChpZCk7XG4gICAgcmV0dXJuIGVudHJ5ID8gZW50cnkub3B0aW9ucyA6IG51bGw7XG4gIH0sIFtyZWdpc3RyeS5kcmFnZ2FibGVdKTtcbiAgY29uc3QgdHJ5UmVsZWFzZUxvY2sgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKGZ1bmN0aW9uIHRyeVJlbGVhc2VMb2NrKCkge1xuICAgIGlmICghbG9ja0FQSS5pc0NsYWltZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2NrQVBJLnRyeUFiYW5kb24oKTtcbiAgICBpZiAoc3RvcmUuZ2V0U3RhdGUoKS5waGFzZSAhPT0gJ0lETEUnKSB7XG4gICAgICBzdG9yZS5kaXNwYXRjaChmbHVzaCgpKTtcbiAgICB9XG4gIH0sIFtsb2NrQVBJLCBzdG9yZV0pO1xuICBjb25zdCBpc0xvY2tDbGFpbWVkID0gdXNlTWVtb09uZS51c2VDYWxsYmFjaygoKSA9PiBsb2NrQVBJLmlzQ2xhaW1lZCgpLCBbbG9ja0FQSV0pO1xuICBjb25zdCBhcGkgPSB1c2VNZW1vT25lLnVzZU1lbW8oKCkgPT4gKHtcbiAgICBjYW5HZXRMb2NrLFxuICAgIHRyeUdldExvY2ssXG4gICAgZmluZENsb3Nlc3REcmFnZ2FibGVJZCxcbiAgICBmaW5kT3B0aW9uc0ZvckRyYWdnYWJsZSxcbiAgICB0cnlSZWxlYXNlTG9jayxcbiAgICBpc0xvY2tDbGFpbWVkXG4gIH0pLCBbY2FuR2V0TG9jaywgdHJ5R2V0TG9jaywgZmluZENsb3Nlc3REcmFnZ2FibGVJZCwgZmluZE9wdGlvbnNGb3JEcmFnZ2FibGUsIHRyeVJlbGVhc2VMb2NrLCBpc0xvY2tDbGFpbWVkXSk7XG5cbiAgdXNlVmFsaWRhdGVTZW5zb3JIb29rcyh1c2VTZW5zb3JzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB1c2VTZW5zb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgdXNlU2Vuc29yc1tpXShhcGkpO1xuICB9XG59XG5cbmNvbnN0IGNyZWF0ZVJlc3BvbmRlcnMgPSBwcm9wcyA9PiAoe1xuICBvbkJlZm9yZUNhcHR1cmU6IHQgPT4ge1xuICAgIGNvbnN0IG9uQmVmb3JlQ2FwdXJlQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAocHJvcHMub25CZWZvcmVDYXB0dXJlKSB7XG4gICAgICAgIHByb3BzLm9uQmVmb3JlQ2FwdHVyZSh0KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChSZWFjdF9fZGVmYXVsdFtcImRlZmF1bHRcIl0udmVyc2lvbi5zdGFydHNXaXRoKCcxNicpIHx8IFJlYWN0X19kZWZhdWx0W1wiZGVmYXVsdFwiXS52ZXJzaW9uLnN0YXJ0c1dpdGgoJzE3JykpIHtcbiAgICAgIG9uQmVmb3JlQ2FwdXJlQ2FsbGJhY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RET00uZmx1c2hTeW5jKG9uQmVmb3JlQ2FwdXJlQ2FsbGJhY2spO1xuICAgIH1cbiAgfSxcbiAgb25CZWZvcmVEcmFnU3RhcnQ6IHByb3BzLm9uQmVmb3JlRHJhZ1N0YXJ0LFxuICBvbkRyYWdTdGFydDogcHJvcHMub25EcmFnU3RhcnQsXG4gIG9uRHJhZ0VuZDogcHJvcHMub25EcmFnRW5kLFxuICBvbkRyYWdVcGRhdGU6IHByb3BzLm9uRHJhZ1VwZGF0ZVxufSk7XG5jb25zdCBjcmVhdGVBdXRvU2Nyb2xsZXJPcHRpb25zID0gcHJvcHMgPT4gKHtcbiAgLi4uZGVmYXVsdEF1dG9TY3JvbGxlck9wdGlvbnMsXG4gIC4uLnByb3BzLmF1dG9TY3JvbGxlck9wdGlvbnMsXG4gIGR1cmF0aW9uRGFtcGVuaW5nOiB7XG4gICAgLi4uZGVmYXVsdEF1dG9TY3JvbGxlck9wdGlvbnMuZHVyYXRpb25EYW1wZW5pbmcsXG4gICAgLi4ucHJvcHMuYXV0b1Njcm9sbGVyT3B0aW9uc1xuICB9XG59KTtcbmZ1bmN0aW9uIGdldFN0b3JlKGxhenlSZWYpIHtcbiAgIWxhenlSZWYuY3VycmVudCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0NvdWxkIG5vdCBmaW5kIHN0b3JlIGZyb20gbGF6eSByZWYnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHJldHVybiBsYXp5UmVmLmN1cnJlbnQ7XG59XG5mdW5jdGlvbiBBcHAocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNvbnRleHRJZCxcbiAgICBzZXRDYWxsYmFja3MsXG4gICAgc2Vuc29ycyxcbiAgICBub25jZSxcbiAgICBkcmFnSGFuZGxlVXNhZ2VJbnN0cnVjdGlvbnNcbiAgfSA9IHByb3BzO1xuICBjb25zdCBsYXp5U3RvcmVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHVzZVN0YXJ0dXBWYWxpZGF0aW9uKCk7XG5cbiAgY29uc3QgbGFzdFByb3BzUmVmID0gdXNlUHJldmlvdXMocHJvcHMpO1xuICBjb25zdCBnZXRSZXNwb25kZXJzID0gdXNlTWVtb09uZS51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZVJlc3BvbmRlcnMobGFzdFByb3BzUmVmLmN1cnJlbnQpO1xuICB9LCBbbGFzdFByb3BzUmVmXSk7XG4gIGNvbnN0IGdldEF1dG9TY3JvbGxlck9wdGlvbnMgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICByZXR1cm4gY3JlYXRlQXV0b1Njcm9sbGVyT3B0aW9ucyhsYXN0UHJvcHNSZWYuY3VycmVudCk7XG4gIH0sIFtsYXN0UHJvcHNSZWZdKTtcbiAgY29uc3QgYW5ub3VuY2UgPSB1c2VBbm5vdW5jZXIoY29udGV4dElkKTtcbiAgY29uc3QgZHJhZ0hhbmRsZVVzYWdlSW5zdHJ1Y3Rpb25zSWQgPSB1c2VIaWRkZW5UZXh0RWxlbWVudCh7XG4gICAgY29udGV4dElkLFxuICAgIHRleHQ6IGRyYWdIYW5kbGVVc2FnZUluc3RydWN0aW9uc1xuICB9KTtcbiAgY29uc3Qgc3R5bGVNYXJzaGFsID0gdXNlU3R5bGVNYXJzaGFsKGNvbnRleHRJZCwgbm9uY2UpO1xuICBjb25zdCBsYXp5RGlzcGF0Y2ggPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKGFjdGlvbiA9PiB7XG4gICAgZ2V0U3RvcmUobGF6eVN0b3JlUmVmKS5kaXNwYXRjaChhY3Rpb24pO1xuICB9LCBbXSk7XG4gIGNvbnN0IG1hcnNoYWxDYWxsYmFja3MgPSB1c2VNZW1vT25lLnVzZU1lbW8oKCkgPT4gcmVkdXguYmluZEFjdGlvbkNyZWF0b3JzKHtcbiAgICBwdWJsaXNoV2hpbGVEcmFnZ2luZyxcbiAgICB1cGRhdGVEcm9wcGFibGVTY3JvbGwsXG4gICAgdXBkYXRlRHJvcHBhYmxlSXNFbmFibGVkLFxuICAgIHVwZGF0ZURyb3BwYWJsZUlzQ29tYmluZUVuYWJsZWQsXG4gICAgY29sbGVjdGlvblN0YXJ0aW5nXG4gIH0sIGxhenlEaXNwYXRjaCksIFtsYXp5RGlzcGF0Y2hdKTtcbiAgY29uc3QgcmVnaXN0cnkgPSB1c2VSZWdpc3RyeSgpO1xuICBjb25zdCBkaW1lbnNpb25NYXJzaGFsID0gdXNlTWVtb09uZS51c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gY3JlYXRlRGltZW5zaW9uTWFyc2hhbChyZWdpc3RyeSwgbWFyc2hhbENhbGxiYWNrcyk7XG4gIH0sIFtyZWdpc3RyeSwgbWFyc2hhbENhbGxiYWNrc10pO1xuICBjb25zdCBhdXRvU2Nyb2xsZXIgPSB1c2VNZW1vT25lLnVzZU1lbW8oKCkgPT4gY3JlYXRlQXV0b1Njcm9sbGVyKHtcbiAgICBzY3JvbGxXaW5kb3csXG4gICAgc2Nyb2xsRHJvcHBhYmxlOiBkaW1lbnNpb25NYXJzaGFsLnNjcm9sbERyb3BwYWJsZSxcbiAgICBnZXRBdXRvU2Nyb2xsZXJPcHRpb25zLFxuICAgIC4uLnJlZHV4LmJpbmRBY3Rpb25DcmVhdG9ycyh7XG4gICAgICBtb3ZlXG4gICAgfSwgbGF6eURpc3BhdGNoKVxuICB9KSwgW2RpbWVuc2lvbk1hcnNoYWwuc2Nyb2xsRHJvcHBhYmxlLCBsYXp5RGlzcGF0Y2gsIGdldEF1dG9TY3JvbGxlck9wdGlvbnNdKTtcbiAgY29uc3QgZm9jdXNNYXJzaGFsID0gdXNlRm9jdXNNYXJzaGFsKGNvbnRleHRJZCk7XG4gIGNvbnN0IHN0b3JlID0gdXNlTWVtb09uZS51c2VNZW1vKCgpID0+IGNyZWF0ZVN0b3JlKHtcbiAgICBhbm5vdW5jZSxcbiAgICBhdXRvU2Nyb2xsZXIsXG4gICAgZGltZW5zaW9uTWFyc2hhbCxcbiAgICBmb2N1c01hcnNoYWwsXG4gICAgZ2V0UmVzcG9uZGVycyxcbiAgICBzdHlsZU1hcnNoYWxcbiAgfSksIFthbm5vdW5jZSwgYXV0b1Njcm9sbGVyLCBkaW1lbnNpb25NYXJzaGFsLCBmb2N1c01hcnNoYWwsIGdldFJlc3BvbmRlcnMsIHN0eWxlTWFyc2hhbF0pO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGxhenlTdG9yZVJlZi5jdXJyZW50ICYmIGxhenlTdG9yZVJlZi5jdXJyZW50ICE9PSBzdG9yZSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZygndW5leHBlY3RlZCBzdG9yZSBjaGFuZ2UnKSA6IHZvaWQgMDtcbiAgICB9XG4gIH1cblxuICBsYXp5U3RvcmVSZWYuY3VycmVudCA9IHN0b3JlO1xuICBjb25zdCB0cnlSZXNldFN0b3JlID0gdXNlTWVtb09uZS51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgY3VycmVudCA9IGdldFN0b3JlKGxhenlTdG9yZVJlZik7XG4gICAgY29uc3Qgc3RhdGUgPSBjdXJyZW50LmdldFN0YXRlKCk7XG4gICAgaWYgKHN0YXRlLnBoYXNlICE9PSAnSURMRScpIHtcbiAgICAgIGN1cnJlbnQuZGlzcGF0Y2goZmx1c2goKSk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IGlzRHJhZ2dpbmcgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldFN0b3JlKGxhenlTdG9yZVJlZikuZ2V0U3RhdGUoKTtcbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdEUk9QX0FOSU1BVElORycpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdJRExFJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUuaXNEcmFnZ2luZztcbiAgfSwgW10pO1xuICBjb25zdCBhcHBDYWxsYmFja3MgPSB1c2VNZW1vT25lLnVzZU1lbW8oKCkgPT4gKHtcbiAgICBpc0RyYWdnaW5nLFxuICAgIHRyeUFib3J0OiB0cnlSZXNldFN0b3JlXG4gIH0pLCBbaXNEcmFnZ2luZywgdHJ5UmVzZXRTdG9yZV0pO1xuXG4gIHNldENhbGxiYWNrcyhhcHBDYWxsYmFja3MpO1xuICBjb25zdCBnZXRDYW5MaWZ0ID0gdXNlTWVtb09uZS51c2VDYWxsYmFjayhpZCA9PiBjYW5TdGFydERyYWcoZ2V0U3RvcmUobGF6eVN0b3JlUmVmKS5nZXRTdGF0ZSgpLCBpZCksIFtdKTtcbiAgY29uc3QgZ2V0SXNNb3ZlbWVudEFsbG93ZWQgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKCgpID0+IGlzTW92ZW1lbnRBbGxvd2VkKGdldFN0b3JlKGxhenlTdG9yZVJlZikuZ2V0U3RhdGUoKSksIFtdKTtcbiAgY29uc3QgYXBwQ29udGV4dCA9IHVzZU1lbW9PbmUudXNlTWVtbygoKSA9PiAoe1xuICAgIG1hcnNoYWw6IGRpbWVuc2lvbk1hcnNoYWwsXG4gICAgZm9jdXM6IGZvY3VzTWFyc2hhbCxcbiAgICBjb250ZXh0SWQsXG4gICAgY2FuTGlmdDogZ2V0Q2FuTGlmdCxcbiAgICBpc01vdmVtZW50QWxsb3dlZDogZ2V0SXNNb3ZlbWVudEFsbG93ZWQsXG4gICAgZHJhZ0hhbmRsZVVzYWdlSW5zdHJ1Y3Rpb25zSWQsXG4gICAgcmVnaXN0cnlcbiAgfSksIFtjb250ZXh0SWQsIGRpbWVuc2lvbk1hcnNoYWwsIGRyYWdIYW5kbGVVc2FnZUluc3RydWN0aW9uc0lkLCBmb2N1c01hcnNoYWwsIGdldENhbkxpZnQsIGdldElzTW92ZW1lbnRBbGxvd2VkLCByZWdpc3RyeV0pO1xuICB1c2VTZW5zb3JNYXJzaGFsKHtcbiAgICBjb250ZXh0SWQsXG4gICAgc3RvcmUsXG4gICAgcmVnaXN0cnksXG4gICAgY3VzdG9tU2Vuc29yczogc2Vuc29ycyB8fCBudWxsLFxuICAgIGVuYWJsZURlZmF1bHRTZW5zb3JzOiBwcm9wcy5lbmFibGVEZWZhdWx0U2Vuc29ycyAhPT0gZmFsc2VcbiAgfSk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gdHJ5UmVzZXRTdG9yZTtcbiAgfSwgW3RyeVJlc2V0U3RvcmVdKTtcbiAgcmV0dXJuIFJlYWN0X19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KEFwcENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogYXBwQ29udGV4dFxuICB9LCBSZWFjdF9fZGVmYXVsdFtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChyZWFjdFJlZHV4LlByb3ZpZGVyLCB7XG4gICAgY29udGV4dDogU3RvcmVDb250ZXh0LFxuICAgIHN0b3JlOiBzdG9yZVxuICB9LCBwcm9wcy5jaGlsZHJlbikpO1xufVxuXG5sZXQgY291bnQgPSAwO1xuZnVuY3Rpb24gcmVzZXREZXByZWNhdGVkVW5pcXVlQ29udGV4dElkKCkge1xuICBjb3VudCA9IDA7XG59XG5mdW5jdGlvbiB1c2VEZXByZWNhdGVkVW5pcXVlQ29udGV4dElkKCkge1xuICByZXR1cm4gdXNlTWVtb09uZS51c2VNZW1vKCgpID0+IGAke2NvdW50Kyt9YCwgW10pO1xufVxuZnVuY3Rpb24gdXNlVW5pcXVlQ29udGV4dElkKCkge1xuICByZXR1cm4gUmVhY3RfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnVzZUlkKCk7XG59XG5cbnZhciB1c2VVbmlxdWVDb250ZXh0SWQkMSA9ICd1c2VJZCcgaW4gUmVhY3RfX2RlZmF1bHRbXCJkZWZhdWx0XCJdID8gdXNlVW5pcXVlQ29udGV4dElkIDogdXNlRGVwcmVjYXRlZFVuaXF1ZUNvbnRleHRJZDtcblxuZnVuY3Rpb24gcmVzZXRTZXJ2ZXJDb250ZXh0KCkge1xuICBpZiAoJ3VzZUlkJyBpbiBSZWFjdF9fZGVmYXVsdFtcImRlZmF1bHRcIl0pIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB3YXJuaW5nKGBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNhbGwgcmVzZXRTZXJ2ZXJDb250ZXh0IHdoZW4gdXNpbmcgUmVhY3QgMTgrYCkgOiB2b2lkIDA7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJlc2V0RGVwcmVjYXRlZFVuaXF1ZUNvbnRleHRJZCgpO1xuICByZXNldERlcHJlY2F0ZWRVbmlxdWVJZCgpO1xufVxuZnVuY3Rpb24gRHJhZ0Ryb3BDb250ZXh0KHByb3BzKSB7XG4gIGNvbnN0IGNvbnRleHRJZCA9IHVzZVVuaXF1ZUNvbnRleHRJZCQxKCk7XG4gIGNvbnN0IGRyYWdIYW5kbGVVc2FnZUluc3RydWN0aW9ucyA9IHByb3BzLmRyYWdIYW5kbGVVc2FnZUluc3RydWN0aW9ucyB8fCBwcmVzZXQkMS5kcmFnSGFuZGxlVXNhZ2VJbnN0cnVjdGlvbnM7XG5cbiAgcmV0dXJuIFJlYWN0X19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KEVycm9yQm91bmRhcnksIG51bGwsIHNldENhbGxiYWNrcyA9PiBSZWFjdF9fZGVmYXVsdFtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChBcHAsIHtcbiAgICBub25jZTogcHJvcHMubm9uY2UsXG4gICAgY29udGV4dElkOiBjb250ZXh0SWQsXG4gICAgc2V0Q2FsbGJhY2tzOiBzZXRDYWxsYmFja3MsXG4gICAgZHJhZ0hhbmRsZVVzYWdlSW5zdHJ1Y3Rpb25zOiBkcmFnSGFuZGxlVXNhZ2VJbnN0cnVjdGlvbnMsXG4gICAgZW5hYmxlRGVmYXVsdFNlbnNvcnM6IHByb3BzLmVuYWJsZURlZmF1bHRTZW5zb3JzLFxuICAgIHNlbnNvcnM6IHByb3BzLnNlbnNvcnMsXG4gICAgb25CZWZvcmVDYXB0dXJlOiBwcm9wcy5vbkJlZm9yZUNhcHR1cmUsXG4gICAgb25CZWZvcmVEcmFnU3RhcnQ6IHByb3BzLm9uQmVmb3JlRHJhZ1N0YXJ0LFxuICAgIG9uRHJhZ1N0YXJ0OiBwcm9wcy5vbkRyYWdTdGFydCxcbiAgICBvbkRyYWdVcGRhdGU6IHByb3BzLm9uRHJhZ1VwZGF0ZSxcbiAgICBvbkRyYWdFbmQ6IHByb3BzLm9uRHJhZ0VuZCxcbiAgICBhdXRvU2Nyb2xsZXJPcHRpb25zOiBwcm9wcy5hdXRvU2Nyb2xsZXJPcHRpb25zXG4gIH0sIHByb3BzLmNoaWxkcmVuKSk7XG59XG5cbmNvbnN0IHpJbmRleE9wdGlvbnMgPSB7XG4gIGRyYWdnaW5nOiA1MDAwLFxuICBkcm9wQW5pbWF0aW5nOiA0NTAwXG59O1xuY29uc3QgZ2V0RHJhZ2dpbmdUcmFuc2l0aW9uID0gKHNob3VsZEFuaW1hdGVEcmFnTW92ZW1lbnQsIGRyb3BwaW5nKSA9PiB7XG4gIGlmIChkcm9wcGluZykge1xuICAgIHJldHVybiB0cmFuc2l0aW9ucy5kcm9wKGRyb3BwaW5nLmR1cmF0aW9uKTtcbiAgfVxuICBpZiAoc2hvdWxkQW5pbWF0ZURyYWdNb3ZlbWVudCkge1xuICAgIHJldHVybiB0cmFuc2l0aW9ucy5zbmFwO1xuICB9XG4gIHJldHVybiB0cmFuc2l0aW9ucy5mbHVpZDtcbn07XG5jb25zdCBnZXREcmFnZ2luZ09wYWNpdHkgPSAoaXNDb21iaW5pbmcsIGlzRHJvcEFuaW1hdGluZykgPT4ge1xuICBpZiAoIWlzQ29tYmluaW5nKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gaXNEcm9wQW5pbWF0aW5nID8gY29tYmluZS5vcGFjaXR5LmRyb3AgOiBjb21iaW5lLm9wYWNpdHkuY29tYmluaW5nO1xufTtcbmNvbnN0IGdldFNob3VsZERyYWdnaW5nQW5pbWF0ZSA9IGRyYWdnaW5nID0+IHtcbiAgaWYgKGRyYWdnaW5nLmZvcmNlU2hvdWxkQW5pbWF0ZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGRyYWdnaW5nLmZvcmNlU2hvdWxkQW5pbWF0ZTtcbiAgfVxuICByZXR1cm4gZHJhZ2dpbmcubW9kZSA9PT0gJ1NOQVAnO1xufTtcbmZ1bmN0aW9uIGdldERyYWdnaW5nU3R5bGUoZHJhZ2dpbmcpIHtcbiAgY29uc3QgZGltZW5zaW9uID0gZHJhZ2dpbmcuZGltZW5zaW9uO1xuICBjb25zdCBib3ggPSBkaW1lbnNpb24uY2xpZW50O1xuICBjb25zdCB7XG4gICAgb2Zmc2V0LFxuICAgIGNvbWJpbmVXaXRoLFxuICAgIGRyb3BwaW5nXG4gIH0gPSBkcmFnZ2luZztcbiAgY29uc3QgaXNDb21iaW5pbmcgPSBCb29sZWFuKGNvbWJpbmVXaXRoKTtcbiAgY29uc3Qgc2hvdWxkQW5pbWF0ZSA9IGdldFNob3VsZERyYWdnaW5nQW5pbWF0ZShkcmFnZ2luZyk7XG4gIGNvbnN0IGlzRHJvcEFuaW1hdGluZyA9IEJvb2xlYW4oZHJvcHBpbmcpO1xuICBjb25zdCB0cmFuc2Zvcm0gPSBpc0Ryb3BBbmltYXRpbmcgPyB0cmFuc2Zvcm1zLmRyb3Aob2Zmc2V0LCBpc0NvbWJpbmluZykgOiB0cmFuc2Zvcm1zLm1vdmVUbyhvZmZzZXQpO1xuICBjb25zdCBzdHlsZSA9IHtcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICB0b3A6IGJveC5tYXJnaW5Cb3gudG9wLFxuICAgIGxlZnQ6IGJveC5tYXJnaW5Cb3gubGVmdCxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICB3aWR0aDogYm94LmJvcmRlckJveC53aWR0aCxcbiAgICBoZWlnaHQ6IGJveC5ib3JkZXJCb3guaGVpZ2h0LFxuICAgIHRyYW5zaXRpb246IGdldERyYWdnaW5nVHJhbnNpdGlvbihzaG91bGRBbmltYXRlLCBkcm9wcGluZyksXG4gICAgdHJhbnNmb3JtLFxuICAgIG9wYWNpdHk6IGdldERyYWdnaW5nT3BhY2l0eShpc0NvbWJpbmluZywgaXNEcm9wQW5pbWF0aW5nKSxcbiAgICB6SW5kZXg6IGlzRHJvcEFuaW1hdGluZyA/IHpJbmRleE9wdGlvbnMuZHJvcEFuaW1hdGluZyA6IHpJbmRleE9wdGlvbnMuZHJhZ2dpbmcsXG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnXG4gIH07XG4gIHJldHVybiBzdHlsZTtcbn1cbmZ1bmN0aW9uIGdldFNlY29uZGFyeVN0eWxlKHNlY29uZGFyeSkge1xuICByZXR1cm4ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNmb3Jtcy5tb3ZlVG8oc2Vjb25kYXJ5Lm9mZnNldCksXG4gICAgdHJhbnNpdGlvbjogc2Vjb25kYXJ5LnNob3VsZEFuaW1hdGVEaXNwbGFjZW1lbnQgPyB1bmRlZmluZWQgOiAnbm9uZSdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFN0eWxlJDEobWFwcGVkKSB7XG4gIHJldHVybiBtYXBwZWQudHlwZSA9PT0gJ0RSQUdHSU5HJyA/IGdldERyYWdnaW5nU3R5bGUobWFwcGVkKSA6IGdldFNlY29uZGFyeVN0eWxlKG1hcHBlZCk7XG59XG5cbmZ1bmN0aW9uIGdldERpbWVuc2lvbiQxKGRlc2NyaXB0b3IsIGVsLCB3aW5kb3dTY3JvbGwpIHtcbiAgaWYgKHdpbmRvd1Njcm9sbCA9PT0gdm9pZCAwKSB7XG4gICAgd2luZG93U2Nyb2xsID0gb3JpZ2luO1xuICB9XG4gIGNvbnN0IGNvbXB1dGVkU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuICBjb25zdCBib3JkZXJCb3ggPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgY2xpZW50ID0gY3NzQm94TW9kZWwuY2FsY3VsYXRlQm94KGJvcmRlckJveCwgY29tcHV0ZWRTdHlsZXMpO1xuICBjb25zdCBwYWdlID0gY3NzQm94TW9kZWwud2l0aFNjcm9sbChjbGllbnQsIHdpbmRvd1Njcm9sbCk7XG4gIGNvbnN0IHBsYWNlaG9sZGVyID0ge1xuICAgIGNsaWVudCxcbiAgICB0YWdOYW1lOiBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgZGlzcGxheTogY29tcHV0ZWRTdHlsZXMuZGlzcGxheVxuICB9O1xuICBjb25zdCBkaXNwbGFjZUJ5ID0ge1xuICAgIHg6IGNsaWVudC5tYXJnaW5Cb3gud2lkdGgsXG4gICAgeTogY2xpZW50Lm1hcmdpbkJveC5oZWlnaHRcbiAgfTtcbiAgY29uc3QgZGltZW5zaW9uID0ge1xuICAgIGRlc2NyaXB0b3IsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgZGlzcGxhY2VCeSxcbiAgICBjbGllbnQsXG4gICAgcGFnZVxuICB9O1xuICByZXR1cm4gZGltZW5zaW9uO1xufVxuXG5mdW5jdGlvbiB1c2VEcmFnZ2FibGVQdWJsaXNoZXIoYXJncykge1xuICBjb25zdCB1bmlxdWVJZCA9IHVzZVVuaXF1ZUlkJDEoJ2RyYWdnYWJsZScpO1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRvcixcbiAgICByZWdpc3RyeSxcbiAgICBnZXREcmFnZ2FibGVSZWYsXG4gICAgY2FuRHJhZ0ludGVyYWN0aXZlRWxlbWVudHMsXG4gICAgc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3MsXG4gICAgaXNFbmFibGVkXG4gIH0gPSBhcmdzO1xuICBjb25zdCBvcHRpb25zID0gdXNlTWVtb09uZS51c2VNZW1vKCgpID0+ICh7XG4gICAgY2FuRHJhZ0ludGVyYWN0aXZlRWxlbWVudHMsXG4gICAgc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3MsXG4gICAgaXNFbmFibGVkXG4gIH0pLCBbY2FuRHJhZ0ludGVyYWN0aXZlRWxlbWVudHMsIGlzRW5hYmxlZCwgc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3NdKTtcbiAgY29uc3QgZ2V0RGltZW5zaW9uID0gdXNlTWVtb09uZS51c2VDYWxsYmFjayh3aW5kb3dTY3JvbGwgPT4ge1xuICAgIGNvbnN0IGVsID0gZ2V0RHJhZ2dhYmxlUmVmKCk7XG4gICAgIWVsID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IGdldCBkaW1lbnNpb24gd2hlbiBubyByZWYgaXMgc2V0JykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIHJldHVybiBnZXREaW1lbnNpb24kMShkZXNjcmlwdG9yLCBlbCwgd2luZG93U2Nyb2xsKTtcbiAgfSwgW2Rlc2NyaXB0b3IsIGdldERyYWdnYWJsZVJlZl0pO1xuICBjb25zdCBlbnRyeSA9IHVzZU1lbW9PbmUudXNlTWVtbygoKSA9PiAoe1xuICAgIHVuaXF1ZUlkLFxuICAgIGRlc2NyaXB0b3IsXG4gICAgb3B0aW9ucyxcbiAgICBnZXREaW1lbnNpb25cbiAgfSksIFtkZXNjcmlwdG9yLCBnZXREaW1lbnNpb24sIG9wdGlvbnMsIHVuaXF1ZUlkXSk7XG4gIGNvbnN0IHB1Ymxpc2hlZFJlZiA9IFJlYWN0LnVzZVJlZihlbnRyeSk7XG4gIGNvbnN0IGlzRmlyc3RQdWJsaXNoUmVmID0gUmVhY3QudXNlUmVmKHRydWUpO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgcmVnaXN0cnkuZHJhZ2dhYmxlLnJlZ2lzdGVyKHB1Ymxpc2hlZFJlZi5jdXJyZW50KTtcbiAgICByZXR1cm4gKCkgPT4gcmVnaXN0cnkuZHJhZ2dhYmxlLnVucmVnaXN0ZXIocHVibGlzaGVkUmVmLmN1cnJlbnQpO1xuICB9LCBbcmVnaXN0cnkuZHJhZ2dhYmxlXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNGaXJzdFB1Ymxpc2hSZWYuY3VycmVudCkge1xuICAgICAgaXNGaXJzdFB1Ymxpc2hSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsYXN0ID0gcHVibGlzaGVkUmVmLmN1cnJlbnQ7XG4gICAgcHVibGlzaGVkUmVmLmN1cnJlbnQgPSBlbnRyeTtcbiAgICByZWdpc3RyeS5kcmFnZ2FibGUudXBkYXRlKGVudHJ5LCBsYXN0KTtcbiAgfSwgW2VudHJ5LCByZWdpc3RyeS5kcmFnZ2FibGVdKTtcbn1cblxudmFyIERyb3BwYWJsZUNvbnRleHQgPSBSZWFjdF9fZGVmYXVsdFtcImRlZmF1bHRcIl0uY3JlYXRlQ29udGV4dChudWxsKTtcblxuZnVuY3Rpb24gY2hlY2tJc1ZhbGlkSW5uZXJSZWYoZWwpIHtcbiAgIShlbCAmJiBpc0h0bWxFbGVtZW50KGVsKSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGBcbiAgICBwcm92aWRlZC5pbm5lclJlZiBoYXMgbm90IGJlZW4gcHJvdmlkZWQgd2l0aCBhIEhUTUxFbGVtZW50LlxuXG4gICAgWW91IGNhbiBmaW5kIGEgZ3VpZGUgb24gdXNpbmcgdGhlIGlubmVyUmVmIGNhbGxiYWNrIGZ1bmN0aW9ucyBhdDpcbiAgICBodHRwczovL2dpdGh1Yi5jb20vaGVsbG8tcGFuZ2VhL2RuZC9ibG9iL21haW4vZG9jcy9ndWlkZXMvdXNpbmctaW5uZXItcmVmLm1kXG4gIGApIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbn1cblxuZnVuY3Rpb24gdXNlVmFsaWRhdGlvbiQxKHByb3BzLCBjb250ZXh0SWQsIGdldFJlZikge1xuICB1c2VEZXZTZXR1cFdhcm5pbmcoKCkgPT4ge1xuICAgIGZ1bmN0aW9uIHByZWZpeChpZCkge1xuICAgICAgcmV0dXJuIGBEcmFnZ2FibGVbaWQ6ICR7aWR9XTogYDtcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IHByb3BzLmRyYWdnYWJsZUlkO1xuICAgICFpZCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0RyYWdnYWJsZSByZXF1aXJlcyBhIGRyYWdnYWJsZUlkJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgICEodHlwZW9mIGlkID09PSAnc3RyaW5nJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGBEcmFnZ2FibGUgcmVxdWlyZXMgYSBbc3RyaW5nXSBkcmFnZ2FibGVJZC5cbiAgICAgIFByb3ZpZGVkOiBbdHlwZTogJHt0eXBlb2YgaWR9XSAodmFsdWU6ICR7aWR9KWApIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICAhTnVtYmVyLmlzSW50ZWdlcihwcm9wcy5pbmRleCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGAke3ByZWZpeChpZCl9IHJlcXVpcmVzIGFuIGludGVnZXIgaW5kZXggcHJvcGApIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBpZiAocHJvcHMubWFwcGVkLnR5cGUgPT09ICdEUkFHR0lORycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjaGVja0lzVmFsaWRJbm5lclJlZihnZXRSZWYoKSk7XG5cbiAgICBpZiAocHJvcHMuaXNFbmFibGVkKSB7XG4gICAgICAhZmluZERyYWdIYW5kbGUoY29udGV4dElkLCBpZCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsIGAke3ByZWZpeChpZCl9IFVuYWJsZSB0byBmaW5kIGRyYWcgaGFuZGxlYCkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHVzZUNsb25lUHJvcFZhbGlkYXRpb24oaXNDbG9uZSkge1xuICB1c2VEZXYoKCkgPT4ge1xuICAgIGNvbnN0IGluaXRpYWxSZWYgPSBSZWFjdC51c2VSZWYoaXNDbG9uZSk7XG5cbiAgICB1c2VEZXZTZXR1cFdhcm5pbmcoKCkgPT4ge1xuICAgICAgIShpc0Nsb25lID09PSBpbml0aWFsUmVmLmN1cnJlbnQpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnRHJhZ2dhYmxlIGlzQ2xvbmUgcHJvcCB2YWx1ZSBjaGFuZ2VkIGR1cmluZyBjb21wb25lbnQgbGlmZScpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICB9LCBbaXNDbG9uZV0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdXNlUmVxdWlyZWRDb250ZXh0KENvbnRleHQpIHtcbiAgY29uc3QgcmVzdWx0ID0gUmVhY3QudXNlQ29udGV4dChDb250ZXh0KTtcbiAgIXJlc3VsdCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0NvdWxkIG5vdCBmaW5kIHJlcXVpcmVkIGNvbnRleHQnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHByZXZlbnRIdG1sNURuZChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufVxuY29uc3QgRHJhZ2dhYmxlID0gcHJvcHMgPT4ge1xuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHNldFJlZiA9IHVzZU1lbW9PbmUudXNlQ2FsbGJhY2soZnVuY3Rpb24gKGVsKSB7XG4gICAgaWYgKGVsID09PSB2b2lkIDApIHtcbiAgICAgIGVsID0gbnVsbDtcbiAgICB9XG4gICAgcmVmLmN1cnJlbnQgPSBlbDtcbiAgfSwgW10pO1xuICBjb25zdCBnZXRSZWYgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKCgpID0+IHJlZi5jdXJyZW50LCBbXSk7XG5cbiAgY29uc3Qge1xuICAgIGNvbnRleHRJZCxcbiAgICBkcmFnSGFuZGxlVXNhZ2VJbnN0cnVjdGlvbnNJZCxcbiAgICByZWdpc3RyeVxuICB9ID0gdXNlUmVxdWlyZWRDb250ZXh0KEFwcENvbnRleHQpO1xuICBjb25zdCB7XG4gICAgdHlwZSxcbiAgICBkcm9wcGFibGVJZFxuICB9ID0gdXNlUmVxdWlyZWRDb250ZXh0KERyb3BwYWJsZUNvbnRleHQpO1xuICBjb25zdCBkZXNjcmlwdG9yID0gdXNlTWVtb09uZS51c2VNZW1vKCgpID0+ICh7XG4gICAgaWQ6IHByb3BzLmRyYWdnYWJsZUlkLFxuICAgIGluZGV4OiBwcm9wcy5pbmRleCxcbiAgICB0eXBlLFxuICAgIGRyb3BwYWJsZUlkXG4gIH0pLCBbcHJvcHMuZHJhZ2dhYmxlSWQsIHByb3BzLmluZGV4LCB0eXBlLCBkcm9wcGFibGVJZF0pO1xuXG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBkcmFnZ2FibGVJZCxcbiAgICBpc0VuYWJsZWQsXG4gICAgc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3MsXG4gICAgY2FuRHJhZ0ludGVyYWN0aXZlRWxlbWVudHMsXG4gICAgaXNDbG9uZSxcbiAgICBtYXBwZWQsXG4gICAgZHJvcEFuaW1hdGlvbkZpbmlzaGVkOiBkcm9wQW5pbWF0aW9uRmluaXNoZWRBY3Rpb25cbiAgfSA9IHByb3BzO1xuXG4gIHVzZVZhbGlkYXRpb24kMShwcm9wcywgY29udGV4dElkLCBnZXRSZWYpO1xuXG4gIHVzZUNsb25lUHJvcFZhbGlkYXRpb24oaXNDbG9uZSk7XG4gIGlmICghaXNDbG9uZSkge1xuICAgIGNvbnN0IGZvclB1Ymxpc2hlciA9IHVzZU1lbW9PbmUudXNlTWVtbygoKSA9PiAoe1xuICAgICAgZGVzY3JpcHRvcixcbiAgICAgIHJlZ2lzdHJ5LFxuICAgICAgZ2V0RHJhZ2dhYmxlUmVmOiBnZXRSZWYsXG4gICAgICBjYW5EcmFnSW50ZXJhY3RpdmVFbGVtZW50cyxcbiAgICAgIHNob3VsZFJlc3BlY3RGb3JjZVByZXNzLFxuICAgICAgaXNFbmFibGVkXG4gICAgfSksIFtkZXNjcmlwdG9yLCByZWdpc3RyeSwgZ2V0UmVmLCBjYW5EcmFnSW50ZXJhY3RpdmVFbGVtZW50cywgc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3MsIGlzRW5hYmxlZF0pO1xuICAgIHVzZURyYWdnYWJsZVB1Ymxpc2hlcihmb3JQdWJsaXNoZXIpO1xuICB9XG5cbiAgY29uc3QgZHJhZ0hhbmRsZVByb3BzID0gdXNlTWVtb09uZS51c2VNZW1vKCgpID0+IGlzRW5hYmxlZCA/IHtcbiAgICB0YWJJbmRleDogMCxcbiAgICByb2xlOiAnYnV0dG9uJyxcbiAgICAnYXJpYS1kZXNjcmliZWRieSc6IGRyYWdIYW5kbGVVc2FnZUluc3RydWN0aW9uc0lkLFxuICAgICdkYXRhLXJmZC1kcmFnLWhhbmRsZS1kcmFnZ2FibGUtaWQnOiBkcmFnZ2FibGVJZCxcbiAgICAnZGF0YS1yZmQtZHJhZy1oYW5kbGUtY29udGV4dC1pZCc6IGNvbnRleHRJZCxcbiAgICBkcmFnZ2FibGU6IGZhbHNlLFxuICAgIG9uRHJhZ1N0YXJ0OiBwcmV2ZW50SHRtbDVEbmRcbiAgfSA6IG51bGwsIFtjb250ZXh0SWQsIGRyYWdIYW5kbGVVc2FnZUluc3RydWN0aW9uc0lkLCBkcmFnZ2FibGVJZCwgaXNFbmFibGVkXSk7XG4gIGNvbnN0IG9uTW92ZUVuZCA9IHVzZU1lbW9PbmUudXNlQ2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIGlmIChtYXBwZWQudHlwZSAhPT0gJ0RSQUdHSU5HJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIW1hcHBlZC5kcm9wcGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5wcm9wZXJ0eU5hbWUgIT09ICd0cmFuc2Zvcm0nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChSZWFjdF9fZGVmYXVsdFtcImRlZmF1bHRcIl0udmVyc2lvbi5zdGFydHNXaXRoKCcxNicpIHx8IFJlYWN0X19kZWZhdWx0W1wiZGVmYXVsdFwiXS52ZXJzaW9uLnN0YXJ0c1dpdGgoJzE3JykpIHtcbiAgICAgIGRyb3BBbmltYXRpb25GaW5pc2hlZEFjdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERPTS5mbHVzaFN5bmMoZHJvcEFuaW1hdGlvbkZpbmlzaGVkQWN0aW9uKTtcbiAgICB9XG4gIH0sIFtkcm9wQW5pbWF0aW9uRmluaXNoZWRBY3Rpb24sIG1hcHBlZF0pO1xuICBjb25zdCBwcm92aWRlZCA9IHVzZU1lbW9PbmUudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgc3R5bGUgPSBnZXRTdHlsZSQxKG1hcHBlZCk7XG4gICAgY29uc3Qgb25UcmFuc2l0aW9uRW5kID0gbWFwcGVkLnR5cGUgPT09ICdEUkFHR0lORycgJiYgbWFwcGVkLmRyb3BwaW5nID8gb25Nb3ZlRW5kIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIGlubmVyUmVmOiBzZXRSZWYsXG4gICAgICBkcmFnZ2FibGVQcm9wczoge1xuICAgICAgICAnZGF0YS1yZmQtZHJhZ2dhYmxlLWNvbnRleHQtaWQnOiBjb250ZXh0SWQsXG4gICAgICAgICdkYXRhLXJmZC1kcmFnZ2FibGUtaWQnOiBkcmFnZ2FibGVJZCxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIG9uVHJhbnNpdGlvbkVuZFxuICAgICAgfSxcbiAgICAgIGRyYWdIYW5kbGVQcm9wc1xuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwgW2NvbnRleHRJZCwgZHJhZ0hhbmRsZVByb3BzLCBkcmFnZ2FibGVJZCwgbWFwcGVkLCBvbk1vdmVFbmQsIHNldFJlZl0pO1xuICBjb25zdCBydWJyaWMgPSB1c2VNZW1vT25lLnVzZU1lbW8oKCkgPT4gKHtcbiAgICBkcmFnZ2FibGVJZDogZGVzY3JpcHRvci5pZCxcbiAgICB0eXBlOiBkZXNjcmlwdG9yLnR5cGUsXG4gICAgc291cmNlOiB7XG4gICAgICBpbmRleDogZGVzY3JpcHRvci5pbmRleCxcbiAgICAgIGRyb3BwYWJsZUlkOiBkZXNjcmlwdG9yLmRyb3BwYWJsZUlkXG4gICAgfVxuICB9KSwgW2Rlc2NyaXB0b3IuZHJvcHBhYmxlSWQsIGRlc2NyaXB0b3IuaWQsIGRlc2NyaXB0b3IuaW5kZXgsIGRlc2NyaXB0b3IudHlwZV0pO1xuICByZXR1cm4gUmVhY3RfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoUmVhY3RfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLkZyYWdtZW50LCBudWxsLCBjaGlsZHJlbihwcm92aWRlZCwgbWFwcGVkLnNuYXBzaG90LCBydWJyaWMpKTtcbn07XG52YXIgRHJhZ2dhYmxlJDEgPSBEcmFnZ2FibGU7XG5cbnZhciBpc1N0cmljdEVxdWFsID0gKChhLCBiKSA9PiBhID09PSBiKTtcblxudmFyIHdoYXRJc0RyYWdnZWRPdmVyRnJvbVJlc3VsdCA9IChyZXN1bHQgPT4ge1xuICBjb25zdCB7XG4gICAgY29tYmluZSxcbiAgICBkZXN0aW5hdGlvblxuICB9ID0gcmVzdWx0O1xuICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICByZXR1cm4gZGVzdGluYXRpb24uZHJvcHBhYmxlSWQ7XG4gIH1cbiAgaWYgKGNvbWJpbmUpIHtcbiAgICByZXR1cm4gY29tYmluZS5kcm9wcGFibGVJZDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn0pO1xuXG5jb25zdCBnZXRDb21iaW5lV2l0aEZyb21SZXN1bHQgPSByZXN1bHQgPT4ge1xuICByZXR1cm4gcmVzdWx0LmNvbWJpbmUgPyByZXN1bHQuY29tYmluZS5kcmFnZ2FibGVJZCA6IG51bGw7XG59O1xuY29uc3QgZ2V0Q29tYmluZVdpdGhGcm9tSW1wYWN0ID0gaW1wYWN0ID0+IHtcbiAgcmV0dXJuIGltcGFjdC5hdCAmJiBpbXBhY3QuYXQudHlwZSA9PT0gJ0NPTUJJTkUnID8gaW1wYWN0LmF0LmNvbWJpbmUuZHJhZ2dhYmxlSWQgOiBudWxsO1xufTtcbmZ1bmN0aW9uIGdldERyYWdnYWJsZVNlbGVjdG9yKCkge1xuICBjb25zdCBtZW1vaXplZE9mZnNldCA9IG1lbW9pemVPbmVfX2RlZmF1bHRbXCJkZWZhdWx0XCJdKCh4LCB5KSA9PiAoe1xuICAgIHgsXG4gICAgeVxuICB9KSk7XG4gIGNvbnN0IGdldE1lbW9pemVkU25hcHNob3QgPSBtZW1vaXplT25lX19kZWZhdWx0W1wiZGVmYXVsdFwiXShmdW5jdGlvbiAobW9kZSwgaXNDbG9uZSwgZHJhZ2dpbmdPdmVyLCBjb21iaW5lV2l0aCwgZHJvcHBpbmcpIHtcbiAgICBpZiAoZHJhZ2dpbmdPdmVyID09PSB2b2lkIDApIHtcbiAgICAgIGRyYWdnaW5nT3ZlciA9IG51bGw7XG4gICAgfVxuICAgIGlmIChjb21iaW5lV2l0aCA9PT0gdm9pZCAwKSB7XG4gICAgICBjb21iaW5lV2l0aCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChkcm9wcGluZyA9PT0gdm9pZCAwKSB7XG4gICAgICBkcm9wcGluZyA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc0RyYWdnaW5nOiB0cnVlLFxuICAgICAgaXNDbG9uZSxcbiAgICAgIGlzRHJvcEFuaW1hdGluZzogQm9vbGVhbihkcm9wcGluZyksXG4gICAgICBkcm9wQW5pbWF0aW9uOiBkcm9wcGluZyxcbiAgICAgIG1vZGUsXG4gICAgICBkcmFnZ2luZ092ZXIsXG4gICAgICBjb21iaW5lV2l0aCxcbiAgICAgIGNvbWJpbmVUYXJnZXRGb3I6IG51bGxcbiAgICB9O1xuICB9KTtcbiAgY29uc3QgZ2V0TWVtb2l6ZWRQcm9wcyA9IG1lbW9pemVPbmVfX2RlZmF1bHRbXCJkZWZhdWx0XCJdKGZ1bmN0aW9uIChvZmZzZXQsIG1vZGUsIGRpbWVuc2lvbiwgaXNDbG9uZSxcbiAgZHJhZ2dpbmdPdmVyLFxuICBjb21iaW5lV2l0aCwgZm9yY2VTaG91bGRBbmltYXRlKSB7XG4gICAgaWYgKGRyYWdnaW5nT3ZlciA9PT0gdm9pZCAwKSB7XG4gICAgICBkcmFnZ2luZ092ZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAoY29tYmluZVdpdGggPT09IHZvaWQgMCkge1xuICAgICAgY29tYmluZVdpdGggPSBudWxsO1xuICAgIH1cbiAgICBpZiAoZm9yY2VTaG91bGRBbmltYXRlID09PSB2b2lkIDApIHtcbiAgICAgIGZvcmNlU2hvdWxkQW5pbWF0ZSA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBtYXBwZWQ6IHtcbiAgICAgICAgdHlwZTogJ0RSQUdHSU5HJyxcbiAgICAgICAgZHJvcHBpbmc6IG51bGwsXG4gICAgICAgIGRyYWdnaW5nT3ZlcixcbiAgICAgICAgY29tYmluZVdpdGgsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgZGltZW5zaW9uLFxuICAgICAgICBmb3JjZVNob3VsZEFuaW1hdGUsXG4gICAgICAgIHNuYXBzaG90OiBnZXRNZW1vaXplZFNuYXBzaG90KG1vZGUsIGlzQ2xvbmUsIGRyYWdnaW5nT3ZlciwgY29tYmluZVdpdGgsIG51bGwpXG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG4gIGNvbnN0IHNlbGVjdG9yID0gKHN0YXRlLCBvd25Qcm9wcykgPT4ge1xuICAgIGlmIChpc0RyYWdnaW5nKHN0YXRlKSkge1xuICAgICAgaWYgKHN0YXRlLmNyaXRpY2FsLmRyYWdnYWJsZS5pZCAhPT0gb3duUHJvcHMuZHJhZ2dhYmxlSWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBvZmZzZXQgPSBzdGF0ZS5jdXJyZW50LmNsaWVudC5vZmZzZXQ7XG4gICAgICBjb25zdCBkaW1lbnNpb24gPSBzdGF0ZS5kaW1lbnNpb25zLmRyYWdnYWJsZXNbb3duUHJvcHMuZHJhZ2dhYmxlSWRdO1xuICAgICAgY29uc3QgZHJhZ2dpbmdPdmVyID0gd2hhdElzRHJhZ2dlZE92ZXIoc3RhdGUuaW1wYWN0KTtcbiAgICAgIGNvbnN0IGNvbWJpbmVXaXRoID0gZ2V0Q29tYmluZVdpdGhGcm9tSW1wYWN0KHN0YXRlLmltcGFjdCk7XG4gICAgICBjb25zdCBmb3JjZVNob3VsZEFuaW1hdGUgPSBzdGF0ZS5mb3JjZVNob3VsZEFuaW1hdGU7XG4gICAgICByZXR1cm4gZ2V0TWVtb2l6ZWRQcm9wcyhtZW1vaXplZE9mZnNldChvZmZzZXQueCwgb2Zmc2V0LnkpLCBzdGF0ZS5tb3ZlbWVudE1vZGUsIGRpbWVuc2lvbiwgb3duUHJvcHMuaXNDbG9uZSwgZHJhZ2dpbmdPdmVyLCBjb21iaW5lV2l0aCwgZm9yY2VTaG91bGRBbmltYXRlKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdEUk9QX0FOSU1BVElORycpIHtcbiAgICAgIGNvbnN0IGNvbXBsZXRlZCA9IHN0YXRlLmNvbXBsZXRlZDtcbiAgICAgIGlmIChjb21wbGV0ZWQucmVzdWx0LmRyYWdnYWJsZUlkICE9PSBvd25Qcm9wcy5kcmFnZ2FibGVJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQ2xvbmUgPSBvd25Qcm9wcy5pc0Nsb25lO1xuICAgICAgY29uc3QgZGltZW5zaW9uID0gc3RhdGUuZGltZW5zaW9ucy5kcmFnZ2FibGVzW293blByb3BzLmRyYWdnYWJsZUlkXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbXBsZXRlZC5yZXN1bHQ7XG4gICAgICBjb25zdCBtb2RlID0gcmVzdWx0Lm1vZGU7XG4gICAgICBjb25zdCBkcmFnZ2luZ092ZXIgPSB3aGF0SXNEcmFnZ2VkT3ZlckZyb21SZXN1bHQocmVzdWx0KTtcbiAgICAgIGNvbnN0IGNvbWJpbmVXaXRoID0gZ2V0Q29tYmluZVdpdGhGcm9tUmVzdWx0KHJlc3VsdCk7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IHN0YXRlLmRyb3BEdXJhdGlvbjtcblxuICAgICAgY29uc3QgZHJvcHBpbmcgPSB7XG4gICAgICAgIGR1cmF0aW9uLFxuICAgICAgICBjdXJ2ZTogY3VydmVzLmRyb3AsXG4gICAgICAgIG1vdmVUbzogc3RhdGUubmV3SG9tZUNsaWVudE9mZnNldCxcbiAgICAgICAgb3BhY2l0eTogY29tYmluZVdpdGggPyBjb21iaW5lLm9wYWNpdHkuZHJvcCA6IG51bGwsXG4gICAgICAgIHNjYWxlOiBjb21iaW5lV2l0aCA/IGNvbWJpbmUuc2NhbGUuZHJvcCA6IG51bGxcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXBwZWQ6IHtcbiAgICAgICAgICB0eXBlOiAnRFJBR0dJTkcnLFxuICAgICAgICAgIG9mZnNldDogc3RhdGUubmV3SG9tZUNsaWVudE9mZnNldCxcbiAgICAgICAgICBkaW1lbnNpb24sXG4gICAgICAgICAgZHJvcHBpbmcsXG4gICAgICAgICAgZHJhZ2dpbmdPdmVyLFxuICAgICAgICAgIGNvbWJpbmVXaXRoLFxuICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgZm9yY2VTaG91bGRBbmltYXRlOiBudWxsLFxuICAgICAgICAgIHNuYXBzaG90OiBnZXRNZW1vaXplZFNuYXBzaG90KG1vZGUsIGlzQ2xvbmUsIGRyYWdnaW5nT3ZlciwgY29tYmluZVdpdGgsIGRyb3BwaW5nKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcbiAgcmV0dXJuIHNlbGVjdG9yO1xufVxuZnVuY3Rpb24gZ2V0U2Vjb25kYXJ5U25hcHNob3QoY29tYmluZVRhcmdldEZvcikge1xuICBpZiAoY29tYmluZVRhcmdldEZvciA9PT0gdm9pZCAwKSB7XG4gICAgY29tYmluZVRhcmdldEZvciA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBpc0RyYWdnaW5nOiBmYWxzZSxcbiAgICBpc0Ryb3BBbmltYXRpbmc6IGZhbHNlLFxuICAgIGlzQ2xvbmU6IGZhbHNlLFxuICAgIGRyb3BBbmltYXRpb246IG51bGwsXG4gICAgbW9kZTogbnVsbCxcbiAgICBkcmFnZ2luZ092ZXI6IG51bGwsXG4gICAgY29tYmluZVRhcmdldEZvcixcbiAgICBjb21iaW5lV2l0aDogbnVsbFxuICB9O1xufVxuY29uc3QgYXRSZXN0ID0ge1xuICBtYXBwZWQ6IHtcbiAgICB0eXBlOiAnU0VDT05EQVJZJyxcbiAgICBvZmZzZXQ6IG9yaWdpbixcbiAgICBjb21iaW5lVGFyZ2V0Rm9yOiBudWxsLFxuICAgIHNob3VsZEFuaW1hdGVEaXNwbGFjZW1lbnQ6IHRydWUsXG4gICAgc25hcHNob3Q6IGdldFNlY29uZGFyeVNuYXBzaG90KG51bGwpXG4gIH1cbn07XG5mdW5jdGlvbiBnZXRTZWNvbmRhcnlTZWxlY3RvcigpIHtcbiAgY29uc3QgbWVtb2l6ZWRPZmZzZXQgPSBtZW1vaXplT25lX19kZWZhdWx0W1wiZGVmYXVsdFwiXSgoeCwgeSkgPT4gKHtcbiAgICB4LFxuICAgIHlcbiAgfSkpO1xuICBjb25zdCBnZXRNZW1vaXplZFNuYXBzaG90ID0gbWVtb2l6ZU9uZV9fZGVmYXVsdFtcImRlZmF1bHRcIl0oZ2V0U2Vjb25kYXJ5U25hcHNob3QpO1xuICBjb25zdCBnZXRNZW1vaXplZFByb3BzID0gbWVtb2l6ZU9uZV9fZGVmYXVsdFtcImRlZmF1bHRcIl0oZnVuY3Rpb24gKG9mZnNldCxcbiAgY29tYmluZVRhcmdldEZvciwgc2hvdWxkQW5pbWF0ZURpc3BsYWNlbWVudCkge1xuICAgIGlmIChjb21iaW5lVGFyZ2V0Rm9yID09PSB2b2lkIDApIHtcbiAgICAgIGNvbWJpbmVUYXJnZXRGb3IgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbWFwcGVkOiB7XG4gICAgICAgIHR5cGU6ICdTRUNPTkRBUlknLFxuICAgICAgICBvZmZzZXQsXG4gICAgICAgIGNvbWJpbmVUYXJnZXRGb3IsXG4gICAgICAgIHNob3VsZEFuaW1hdGVEaXNwbGFjZW1lbnQsXG4gICAgICAgIHNuYXBzaG90OiBnZXRNZW1vaXplZFNuYXBzaG90KGNvbWJpbmVUYXJnZXRGb3IpXG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbiAgY29uc3QgZ2V0RmFsbGJhY2sgPSBjb21iaW5lVGFyZ2V0Rm9yID0+IHtcbiAgICByZXR1cm4gY29tYmluZVRhcmdldEZvciA/IGdldE1lbW9pemVkUHJvcHMob3JpZ2luLCBjb21iaW5lVGFyZ2V0Rm9yLCB0cnVlKSA6IG51bGw7XG4gIH07XG4gIGNvbnN0IGdldFByb3BzID0gKG93bklkLCBkcmFnZ2luZ0lkLCBpbXBhY3QsIGFmdGVyQ3JpdGljYWwpID0+IHtcbiAgICBjb25zdCB2aXN1YWxEaXNwbGFjZW1lbnQgPSBpbXBhY3QuZGlzcGxhY2VkLnZpc2libGVbb3duSWRdO1xuICAgIGNvbnN0IGlzQWZ0ZXJDcml0aWNhbEluVmlydHVhbExpc3QgPSBCb29sZWFuKGFmdGVyQ3JpdGljYWwuaW5WaXJ0dWFsTGlzdCAmJiBhZnRlckNyaXRpY2FsLmVmZmVjdGVkW293bklkXSk7XG4gICAgY29uc3QgY29tYmluZSA9IHRyeUdldENvbWJpbmUoaW1wYWN0KTtcbiAgICBjb25zdCBjb21iaW5lVGFyZ2V0Rm9yID0gY29tYmluZSAmJiBjb21iaW5lLmRyYWdnYWJsZUlkID09PSBvd25JZCA/IGRyYWdnaW5nSWQgOiBudWxsO1xuICAgIGlmICghdmlzdWFsRGlzcGxhY2VtZW50KSB7XG4gICAgICBpZiAoIWlzQWZ0ZXJDcml0aWNhbEluVmlydHVhbExpc3QpIHtcbiAgICAgICAgcmV0dXJuIGdldEZhbGxiYWNrKGNvbWJpbmVUYXJnZXRGb3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW1wYWN0LmRpc3BsYWNlZC5pbnZpc2libGVbb3duSWRdKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGFuZ2UgPSBuZWdhdGUoYWZ0ZXJDcml0aWNhbC5kaXNwbGFjZWRCeS5wb2ludCk7XG4gICAgICBjb25zdCBvZmZzZXQgPSBtZW1vaXplZE9mZnNldChjaGFuZ2UueCwgY2hhbmdlLnkpO1xuICAgICAgcmV0dXJuIGdldE1lbW9pemVkUHJvcHMob2Zmc2V0LCBjb21iaW5lVGFyZ2V0Rm9yLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKGlzQWZ0ZXJDcml0aWNhbEluVmlydHVhbExpc3QpIHtcbiAgICAgIHJldHVybiBnZXRGYWxsYmFjayhjb21iaW5lVGFyZ2V0Rm9yKTtcbiAgICB9XG4gICAgY29uc3QgZGlzcGxhY2VCeSA9IGltcGFjdC5kaXNwbGFjZWRCeS5wb2ludDtcbiAgICBjb25zdCBvZmZzZXQgPSBtZW1vaXplZE9mZnNldChkaXNwbGFjZUJ5LngsIGRpc3BsYWNlQnkueSk7XG4gICAgcmV0dXJuIGdldE1lbW9pemVkUHJvcHMob2Zmc2V0LCBjb21iaW5lVGFyZ2V0Rm9yLCB2aXN1YWxEaXNwbGFjZW1lbnQuc2hvdWxkQW5pbWF0ZSk7XG4gIH07XG4gIGNvbnN0IHNlbGVjdG9yID0gKHN0YXRlLCBvd25Qcm9wcykgPT4ge1xuICAgIGlmIChpc0RyYWdnaW5nKHN0YXRlKSkge1xuICAgICAgaWYgKHN0YXRlLmNyaXRpY2FsLmRyYWdnYWJsZS5pZCA9PT0gb3duUHJvcHMuZHJhZ2dhYmxlSWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gZ2V0UHJvcHMob3duUHJvcHMuZHJhZ2dhYmxlSWQsIHN0YXRlLmNyaXRpY2FsLmRyYWdnYWJsZS5pZCwgc3RhdGUuaW1wYWN0LCBzdGF0ZS5hZnRlckNyaXRpY2FsKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUucGhhc2UgPT09ICdEUk9QX0FOSU1BVElORycpIHtcbiAgICAgIGNvbnN0IGNvbXBsZXRlZCA9IHN0YXRlLmNvbXBsZXRlZDtcbiAgICAgIGlmIChjb21wbGV0ZWQucmVzdWx0LmRyYWdnYWJsZUlkID09PSBvd25Qcm9wcy5kcmFnZ2FibGVJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZXRQcm9wcyhvd25Qcm9wcy5kcmFnZ2FibGVJZCwgY29tcGxldGVkLnJlc3VsdC5kcmFnZ2FibGVJZCwgY29tcGxldGVkLmltcGFjdCwgY29tcGxldGVkLmFmdGVyQ3JpdGljYWwpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuICByZXR1cm4gc2VsZWN0b3I7XG59XG5cbmNvbnN0IG1ha2VNYXBTdGF0ZVRvUHJvcHMkMSA9ICgpID0+IHtcbiAgY29uc3QgZHJhZ2dpbmdTZWxlY3RvciA9IGdldERyYWdnYWJsZVNlbGVjdG9yKCk7XG4gIGNvbnN0IHNlY29uZGFyeVNlbGVjdG9yID0gZ2V0U2Vjb25kYXJ5U2VsZWN0b3IoKTtcbiAgY29uc3Qgc2VsZWN0b3IgPSAoc3RhdGUsIG93blByb3BzKSA9PiBkcmFnZ2luZ1NlbGVjdG9yKHN0YXRlLCBvd25Qcm9wcykgfHwgc2Vjb25kYXJ5U2VsZWN0b3Ioc3RhdGUsIG93blByb3BzKSB8fCBhdFJlc3Q7XG4gIHJldHVybiBzZWxlY3Rvcjtcbn07XG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMkMSA9IHtcbiAgZHJvcEFuaW1hdGlvbkZpbmlzaGVkOiBkcm9wQW5pbWF0aW9uRmluaXNoZWRcbn07XG5cbmNvbnN0IENvbm5lY3RlZERyYWdnYWJsZSA9IHJlYWN0UmVkdXguY29ubmVjdChcbm1ha2VNYXBTdGF0ZVRvUHJvcHMkMSwgbWFwRGlzcGF0Y2hUb1Byb3BzJDEsXG5udWxsLFxue1xuICBjb250ZXh0OiBTdG9yZUNvbnRleHQsXG4gIGFyZVN0YXRlUHJvcHNFcXVhbDogaXNTdHJpY3RFcXVhbFxufVxuKShEcmFnZ2FibGUkMSk7XG52YXIgQ29ubmVjdGVkRHJhZ2dhYmxlJDEgPSBDb25uZWN0ZWREcmFnZ2FibGU7XG5cbmZ1bmN0aW9uIFByaXZhdGVEcmFnZ2FibGUocHJvcHMpIHtcbiAgY29uc3QgZHJvcHBhYmxlQ29udGV4dCA9IHVzZVJlcXVpcmVkQ29udGV4dChEcm9wcGFibGVDb250ZXh0KTtcbiAgY29uc3QgaXNVc2luZ0Nsb25lRm9yID0gZHJvcHBhYmxlQ29udGV4dC5pc1VzaW5nQ2xvbmVGb3I7XG4gIGlmIChpc1VzaW5nQ2xvbmVGb3IgPT09IHByb3BzLmRyYWdnYWJsZUlkICYmICFwcm9wcy5pc0Nsb25lKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIFJlYWN0X19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KENvbm5lY3RlZERyYWdnYWJsZSQxLCBwcm9wcyk7XG59XG5cbmZ1bmN0aW9uIFB1YmxpY0RyYWdnYWJsZShwcm9wcykge1xuICBjb25zdCBpc0VuYWJsZWQgPSB0eXBlb2YgcHJvcHMuaXNEcmFnRGlzYWJsZWQgPT09ICdib29sZWFuJyA/ICFwcm9wcy5pc0RyYWdEaXNhYmxlZCA6IHRydWU7XG4gIGNvbnN0IGNhbkRyYWdJbnRlcmFjdGl2ZUVsZW1lbnRzID0gQm9vbGVhbihwcm9wcy5kaXNhYmxlSW50ZXJhY3RpdmVFbGVtZW50QmxvY2tpbmcpO1xuICBjb25zdCBzaG91bGRSZXNwZWN0Rm9yY2VQcmVzcyA9IEJvb2xlYW4ocHJvcHMuc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3MpO1xuICByZXR1cm4gUmVhY3RfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmNyZWF0ZUVsZW1lbnQoUHJpdmF0ZURyYWdnYWJsZSwgX2V4dGVuZHNfX2RlZmF1bHRbXCJkZWZhdWx0XCJdKHt9LCBwcm9wcywge1xuICAgIGlzQ2xvbmU6IGZhbHNlLFxuICAgIGlzRW5hYmxlZDogaXNFbmFibGVkLFxuICAgIGNhbkRyYWdJbnRlcmFjdGl2ZUVsZW1lbnRzOiBjYW5EcmFnSW50ZXJhY3RpdmVFbGVtZW50cyxcbiAgICBzaG91bGRSZXNwZWN0Rm9yY2VQcmVzczogc2hvdWxkUmVzcGVjdEZvcmNlUHJlc3NcbiAgfSkpO1xufVxuXG5jb25zdCBpc0VxdWFsID0gYmFzZSA9PiB2YWx1ZSA9PiBiYXNlID09PSB2YWx1ZTtcbmNvbnN0IGlzU2Nyb2xsID0gaXNFcXVhbCgnc2Nyb2xsJyk7XG5jb25zdCBpc0F1dG8gPSBpc0VxdWFsKCdhdXRvJyk7XG5jb25zdCBpc1Zpc2libGUgPSBpc0VxdWFsKCd2aXNpYmxlJyk7XG5jb25zdCBpc0VpdGhlciA9IChvdmVyZmxvdywgZm4pID0+IGZuKG92ZXJmbG93Lm92ZXJmbG93WCkgfHwgZm4ob3ZlcmZsb3cub3ZlcmZsb3dZKTtcbmNvbnN0IGlzQm90aCA9IChvdmVyZmxvdywgZm4pID0+IGZuKG92ZXJmbG93Lm92ZXJmbG93WCkgJiYgZm4ob3ZlcmZsb3cub3ZlcmZsb3dZKTtcbmNvbnN0IGlzRWxlbWVudFNjcm9sbGFibGUgPSBlbCA9PiB7XG4gIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuICBjb25zdCBvdmVyZmxvdyA9IHtcbiAgICBvdmVyZmxvd1g6IHN0eWxlLm92ZXJmbG93WCxcbiAgICBvdmVyZmxvd1k6IHN0eWxlLm92ZXJmbG93WVxuICB9O1xuICByZXR1cm4gaXNFaXRoZXIob3ZlcmZsb3csIGlzU2Nyb2xsKSB8fCBpc0VpdGhlcihvdmVyZmxvdywgaXNBdXRvKTtcbn07XG5cbmNvbnN0IGlzQm9keVNjcm9sbGFibGUgPSAoKSA9PiB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGJvZHkgPSBnZXRCb2R5RWxlbWVudCgpO1xuICBjb25zdCBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAhaHRtbCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuXG4gIGlmICghaXNFbGVtZW50U2Nyb2xsYWJsZShib2R5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBodG1sU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShodG1sKTtcbiAgY29uc3QgaHRtbE92ZXJmbG93ID0ge1xuICAgIG92ZXJmbG93WDogaHRtbFN0eWxlLm92ZXJmbG93WCxcbiAgICBvdmVyZmxvd1k6IGh0bWxTdHlsZS5vdmVyZmxvd1lcbiAgfTtcbiAgaWYgKGlzQm90aChodG1sT3ZlcmZsb3csIGlzVmlzaWJsZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhgXG4gICAgV2UgaGF2ZSBkZXRlY3RlZCB0aGF0IHlvdXIgPGJvZHk+IGVsZW1lbnQgbWlnaHQgYmUgYSBzY3JvbGwgY29udGFpbmVyLlxuICAgIFdlIGhhdmUgZm91bmQgbm8gcmVsaWFibGUgd2F5IG9mIGRldGVjdGluZyB3aGV0aGVyIHRoZSA8Ym9keT4gZWxlbWVudCBpcyBhIHNjcm9sbCBjb250YWluZXIuXG4gICAgVW5kZXIgbW9zdCBjaXJjdW1zdGFuY2VzIGEgPGJvZHk+IHNjcm9sbCBiYXIgd2lsbCBiZSBvbiB0aGUgPGh0bWw+IGVsZW1lbnQgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcblxuICAgIEJlY2F1c2Ugd2UgY2Fubm90IGRldGVybWluZSBpZiB0aGUgPGJvZHk+IGlzIGEgc2Nyb2xsIGNvbnRhaW5lciwgYW5kIGdlbmVyYWxseSBpdCBpcyBub3Qgb25lLFxuICAgIHdlIHdpbGwgYmUgdHJlYXRpbmcgdGhlIDxib2R5PiBhcyAqbm90KiBhIHNjcm9sbCBjb250YWluZXJcblxuICAgIE1vcmUgaW5mb3JtYXRpb246IGh0dHBzOi8vZ2l0aHViLmNvbS9oZWxsby1wYW5nZWEvZG5kL2Jsb2IvbWFpbi9kb2NzL2d1aWRlcy9ob3ctd2UtZGV0ZWN0LXNjcm9sbC1jb250YWluZXJzLm1kXG4gIGApIDogdm9pZCAwO1xuICByZXR1cm4gZmFsc2U7XG59O1xuY29uc3QgZ2V0Q2xvc2VzdFNjcm9sbGFibGUgPSBlbCA9PiB7XG4gIGlmIChlbCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoZWwgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICByZXR1cm4gaXNCb2R5U2Nyb2xsYWJsZSgpID8gZWwgOiBudWxsO1xuICB9XG5cbiAgaWYgKGVsID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoIWlzRWxlbWVudFNjcm9sbGFibGUoZWwpKSB7XG4gICAgcmV0dXJuIGdldENsb3Nlc3RTY3JvbGxhYmxlKGVsLnBhcmVudEVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsO1xufTtcbnZhciBnZXRDbG9zZXN0U2Nyb2xsYWJsZSQxID0gZ2V0Q2xvc2VzdFNjcm9sbGFibGU7XG5cbnZhciBjaGVja0Zvck5lc3RlZFNjcm9sbENvbnRhaW5lcnMgPSAoc2Nyb2xsYWJsZSA9PiB7XG4gIGlmICghc2Nyb2xsYWJsZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBhbm90aGVyU2Nyb2xsUGFyZW50ID0gZ2V0Q2xvc2VzdFNjcm9sbGFibGUkMShzY3JvbGxhYmxlLnBhcmVudEVsZW1lbnQpO1xuICBpZiAoIWFub3RoZXJTY3JvbGxQYXJlbnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhgXG4gICAgRHJvcHBhYmxlOiB1bnN1cHBvcnRlZCBuZXN0ZWQgc2Nyb2xsIGNvbnRhaW5lciBkZXRlY3RlZC5cbiAgICBBIERyb3BwYWJsZSBjYW4gb25seSBoYXZlIG9uZSBzY3JvbGwgcGFyZW50ICh3aGljaCBjYW4gYmUgaXRzZWxmKVxuICAgIE5lc3RlZCBzY3JvbGwgY29udGFpbmVycyBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuXG5cbiAgICBXZSBob3BlIHRvIHN1cHBvcnQgbmVzdGVkIHNjcm9sbCBjb250YWluZXJzIHNvb246IGh0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vcmVhY3QtYmVhdXRpZnVsLWRuZC9pc3N1ZXMvMTMxXG4gIGApIDogdm9pZCAwO1xufSk7XG5cbnZhciBnZXRTY3JvbGwgPSAoZWwgPT4gKHtcbiAgeDogZWwuc2Nyb2xsTGVmdCxcbiAgeTogZWwuc2Nyb2xsVG9wXG59KSk7XG5cbmNvbnN0IGdldElzRml4ZWQgPSBlbCA9PiB7XG4gIGlmICghZWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gIGlmIChzdHlsZS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBnZXRJc0ZpeGVkKGVsLnBhcmVudEVsZW1lbnQpO1xufTtcbnZhciBnZXRFbnYgPSAoc3RhcnQgPT4ge1xuICBjb25zdCBjbG9zZXN0U2Nyb2xsYWJsZSA9IGdldENsb3Nlc3RTY3JvbGxhYmxlJDEoc3RhcnQpO1xuICBjb25zdCBpc0ZpeGVkT25QYWdlID0gZ2V0SXNGaXhlZChzdGFydCk7XG4gIHJldHVybiB7XG4gICAgY2xvc2VzdFNjcm9sbGFibGUsXG4gICAgaXNGaXhlZE9uUGFnZVxuICB9O1xufSk7XG5cbnZhciBnZXREcm9wcGFibGVEaW1lbnNpb24gPSAoX3JlZiA9PiB7XG4gIGxldCB7XG4gICAgZGVzY3JpcHRvcixcbiAgICBpc0VuYWJsZWQsXG4gICAgaXNDb21iaW5lRW5hYmxlZCxcbiAgICBpc0ZpeGVkT25QYWdlLFxuICAgIGRpcmVjdGlvbixcbiAgICBjbGllbnQsXG4gICAgcGFnZSxcbiAgICBjbG9zZXN0XG4gIH0gPSBfcmVmO1xuICBjb25zdCBmcmFtZSA9ICgoKSA9PiB7XG4gICAgaWYgKCFjbG9zZXN0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgc2Nyb2xsU2l6ZSxcbiAgICAgIGNsaWVudDogZnJhbWVDbGllbnRcbiAgICB9ID0gY2xvc2VzdDtcblxuICAgIGNvbnN0IG1heFNjcm9sbCA9IGdldE1heFNjcm9sbCh7XG4gICAgICBzY3JvbGxIZWlnaHQ6IHNjcm9sbFNpemUuc2Nyb2xsSGVpZ2h0LFxuICAgICAgc2Nyb2xsV2lkdGg6IHNjcm9sbFNpemUuc2Nyb2xsV2lkdGgsXG4gICAgICBoZWlnaHQ6IGZyYW1lQ2xpZW50LnBhZGRpbmdCb3guaGVpZ2h0LFxuICAgICAgd2lkdGg6IGZyYW1lQ2xpZW50LnBhZGRpbmdCb3gud2lkdGhcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZU1hcmdpbkJveDogY2xvc2VzdC5wYWdlLm1hcmdpbkJveCxcbiAgICAgIGZyYW1lQ2xpZW50LFxuICAgICAgc2Nyb2xsU2l6ZSxcbiAgICAgIHNob3VsZENsaXBTdWJqZWN0OiBjbG9zZXN0LnNob3VsZENsaXBTdWJqZWN0LFxuICAgICAgc2Nyb2xsOiB7XG4gICAgICAgIGluaXRpYWw6IGNsb3Nlc3Quc2Nyb2xsLFxuICAgICAgICBjdXJyZW50OiBjbG9zZXN0LnNjcm9sbCxcbiAgICAgICAgbWF4OiBtYXhTY3JvbGwsXG4gICAgICAgIGRpZmY6IHtcbiAgICAgICAgICB2YWx1ZTogb3JpZ2luLFxuICAgICAgICAgIGRpc3BsYWNlbWVudDogb3JpZ2luXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9KSgpO1xuICBjb25zdCBheGlzID0gZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gdmVydGljYWwgOiBob3Jpem9udGFsO1xuICBjb25zdCBzdWJqZWN0ID0gZ2V0U3ViamVjdCh7XG4gICAgcGFnZSxcbiAgICB3aXRoUGxhY2Vob2xkZXI6IG51bGwsXG4gICAgYXhpcyxcbiAgICBmcmFtZVxuICB9KTtcbiAgY29uc3QgZGltZW5zaW9uID0ge1xuICAgIGRlc2NyaXB0b3IsXG4gICAgaXNDb21iaW5lRW5hYmxlZCxcbiAgICBpc0ZpeGVkT25QYWdlLFxuICAgIGF4aXMsXG4gICAgaXNFbmFibGVkLFxuICAgIGNsaWVudCxcbiAgICBwYWdlLFxuICAgIGZyYW1lLFxuICAgIHN1YmplY3RcbiAgfTtcbiAgcmV0dXJuIGRpbWVuc2lvbjtcbn0pO1xuXG5jb25zdCBnZXRDbGllbnQgPSAodGFyZ2V0UmVmLCBjbG9zZXN0U2Nyb2xsYWJsZSkgPT4ge1xuICBjb25zdCBiYXNlID0gY3NzQm94TW9kZWwuZ2V0Qm94KHRhcmdldFJlZik7XG5cbiAgaWYgKCFjbG9zZXN0U2Nyb2xsYWJsZSkge1xuICAgIHJldHVybiBiYXNlO1xuICB9XG5cbiAgaWYgKHRhcmdldFJlZiAhPT0gY2xvc2VzdFNjcm9sbGFibGUpIHtcbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuXG4gIGNvbnN0IHRvcCA9IGJhc2UucGFkZGluZ0JveC50b3AgLSBjbG9zZXN0U2Nyb2xsYWJsZS5zY3JvbGxUb3A7XG4gIGNvbnN0IGxlZnQgPSBiYXNlLnBhZGRpbmdCb3gubGVmdCAtIGNsb3Nlc3RTY3JvbGxhYmxlLnNjcm9sbExlZnQ7XG4gIGNvbnN0IGJvdHRvbSA9IHRvcCArIGNsb3Nlc3RTY3JvbGxhYmxlLnNjcm9sbEhlaWdodDtcbiAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgY2xvc2VzdFNjcm9sbGFibGUuc2Nyb2xsV2lkdGg7XG5cbiAgY29uc3QgcGFkZGluZ0JveCA9IHtcbiAgICB0b3AsXG4gICAgcmlnaHQsXG4gICAgYm90dG9tLFxuICAgIGxlZnRcbiAgfTtcblxuICBjb25zdCBib3JkZXJCb3ggPSBjc3NCb3hNb2RlbC5leHBhbmQocGFkZGluZ0JveCwgYmFzZS5ib3JkZXIpO1xuXG4gIGNvbnN0IGNsaWVudCA9IGNzc0JveE1vZGVsLmNyZWF0ZUJveCh7XG4gICAgYm9yZGVyQm94LFxuICAgIG1hcmdpbjogYmFzZS5tYXJnaW4sXG4gICAgYm9yZGVyOiBiYXNlLmJvcmRlcixcbiAgICBwYWRkaW5nOiBiYXNlLnBhZGRpbmdcbiAgfSk7XG4gIHJldHVybiBjbGllbnQ7XG59O1xudmFyIGdldERpbWVuc2lvbiA9IChfcmVmID0+IHtcbiAgbGV0IHtcbiAgICByZWYsXG4gICAgZGVzY3JpcHRvcixcbiAgICBlbnYsXG4gICAgd2luZG93U2Nyb2xsLFxuICAgIGRpcmVjdGlvbixcbiAgICBpc0Ryb3BEaXNhYmxlZCxcbiAgICBpc0NvbWJpbmVFbmFibGVkLFxuICAgIHNob3VsZENsaXBTdWJqZWN0XG4gIH0gPSBfcmVmO1xuICBjb25zdCBjbG9zZXN0U2Nyb2xsYWJsZSA9IGVudi5jbG9zZXN0U2Nyb2xsYWJsZTtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KHJlZiwgY2xvc2VzdFNjcm9sbGFibGUpO1xuICBjb25zdCBwYWdlID0gY3NzQm94TW9kZWwud2l0aFNjcm9sbChjbGllbnQsIHdpbmRvd1Njcm9sbCk7XG4gIGNvbnN0IGNsb3Nlc3QgPSAoKCkgPT4ge1xuICAgIGlmICghY2xvc2VzdFNjcm9sbGFibGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBmcmFtZUNsaWVudCA9IGNzc0JveE1vZGVsLmdldEJveChjbG9zZXN0U2Nyb2xsYWJsZSk7XG4gICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IHtcbiAgICAgIHNjcm9sbEhlaWdodDogY2xvc2VzdFNjcm9sbGFibGUuc2Nyb2xsSGVpZ2h0LFxuICAgICAgc2Nyb2xsV2lkdGg6IGNsb3Nlc3RTY3JvbGxhYmxlLnNjcm9sbFdpZHRoXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgY2xpZW50OiBmcmFtZUNsaWVudCxcbiAgICAgIHBhZ2U6IGNzc0JveE1vZGVsLndpdGhTY3JvbGwoZnJhbWVDbGllbnQsIHdpbmRvd1Njcm9sbCksXG4gICAgICBzY3JvbGw6IGdldFNjcm9sbChjbG9zZXN0U2Nyb2xsYWJsZSksXG4gICAgICBzY3JvbGxTaXplLFxuICAgICAgc2hvdWxkQ2xpcFN1YmplY3RcbiAgICB9O1xuICB9KSgpO1xuICBjb25zdCBkaW1lbnNpb24gPSBnZXREcm9wcGFibGVEaW1lbnNpb24oe1xuICAgIGRlc2NyaXB0b3IsXG4gICAgaXNFbmFibGVkOiAhaXNEcm9wRGlzYWJsZWQsXG4gICAgaXNDb21iaW5lRW5hYmxlZCxcbiAgICBpc0ZpeGVkT25QYWdlOiBlbnYuaXNGaXhlZE9uUGFnZSxcbiAgICBkaXJlY3Rpb24sXG4gICAgY2xpZW50LFxuICAgIHBhZ2UsXG4gICAgY2xvc2VzdFxuICB9KTtcbiAgcmV0dXJuIGRpbWVuc2lvbjtcbn0pO1xuXG5jb25zdCBpbW1lZGlhdGUgPSB7XG4gIHBhc3NpdmU6IGZhbHNlXG59O1xuY29uc3QgZGVsYXllZCA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcbnZhciBnZXRMaXN0ZW5lck9wdGlvbnMgPSAob3B0aW9ucyA9PiBvcHRpb25zLnNob3VsZFB1Ymxpc2hJbW1lZGlhdGVseSA/IGltbWVkaWF0ZSA6IGRlbGF5ZWQpO1xuXG5jb25zdCBnZXRDbG9zZXN0U2Nyb2xsYWJsZUZyb21EcmFnID0gZHJhZ2dpbmcgPT4gZHJhZ2dpbmcgJiYgZHJhZ2dpbmcuZW52LmNsb3Nlc3RTY3JvbGxhYmxlIHx8IG51bGw7XG5mdW5jdGlvbiB1c2VEcm9wcGFibGVQdWJsaXNoZXIoYXJncykge1xuICBjb25zdCB3aGlsZURyYWdnaW5nUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBhcHBDb250ZXh0ID0gdXNlUmVxdWlyZWRDb250ZXh0KEFwcENvbnRleHQpO1xuICBjb25zdCB1bmlxdWVJZCA9IHVzZVVuaXF1ZUlkJDEoJ2Ryb3BwYWJsZScpO1xuICBjb25zdCB7XG4gICAgcmVnaXN0cnksXG4gICAgbWFyc2hhbFxuICB9ID0gYXBwQ29udGV4dDtcbiAgY29uc3QgcHJldmlvdXNSZWYgPSB1c2VQcmV2aW91cyhhcmdzKTtcbiAgY29uc3QgZGVzY3JpcHRvciA9IHVzZU1lbW9PbmUudXNlTWVtbygoKSA9PiAoe1xuICAgIGlkOiBhcmdzLmRyb3BwYWJsZUlkLFxuICAgIHR5cGU6IGFyZ3MudHlwZSxcbiAgICBtb2RlOiBhcmdzLm1vZGVcbiAgfSksIFthcmdzLmRyb3BwYWJsZUlkLCBhcmdzLm1vZGUsIGFyZ3MudHlwZV0pO1xuICBjb25zdCBwdWJsaXNoZWREZXNjcmlwdG9yUmVmID0gUmVhY3QudXNlUmVmKGRlc2NyaXB0b3IpO1xuICBjb25zdCBtZW1vaXplZFVwZGF0ZVNjcm9sbCA9IHVzZU1lbW9PbmUudXNlTWVtbygoKSA9PiBtZW1vaXplT25lX19kZWZhdWx0W1wiZGVmYXVsdFwiXSgoeCwgeSkgPT4ge1xuICAgICF3aGlsZURyYWdnaW5nUmVmLmN1cnJlbnQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW4gb25seSB1cGRhdGUgc2Nyb2xsIHdoZW4gZHJhZ2dpbmcnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgY29uc3Qgc2Nyb2xsID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIG1hcnNoYWwudXBkYXRlRHJvcHBhYmxlU2Nyb2xsKGRlc2NyaXB0b3IuaWQsIHNjcm9sbCk7XG4gIH0pLCBbZGVzY3JpcHRvci5pZCwgbWFyc2hhbF0pO1xuICBjb25zdCBnZXRDbG9zZXN0U2Nyb2xsID0gdXNlTWVtb09uZS51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZHJhZ2dpbmcgPSB3aGlsZURyYWdnaW5nUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFkcmFnZ2luZyB8fCAhZHJhZ2dpbmcuZW52LmNsb3Nlc3RTY3JvbGxhYmxlKSB7XG4gICAgICByZXR1cm4gb3JpZ2luO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0U2Nyb2xsKGRyYWdnaW5nLmVudi5jbG9zZXN0U2Nyb2xsYWJsZSk7XG4gIH0sIFtdKTtcbiAgY29uc3QgdXBkYXRlU2Nyb2xsID0gdXNlTWVtb09uZS51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3Qgc2Nyb2xsID0gZ2V0Q2xvc2VzdFNjcm9sbCgpO1xuICAgIG1lbW9pemVkVXBkYXRlU2Nyb2xsKHNjcm9sbC54LCBzY3JvbGwueSk7XG4gIH0sIFtnZXRDbG9zZXN0U2Nyb2xsLCBtZW1vaXplZFVwZGF0ZVNjcm9sbF0pO1xuICBjb25zdCBzY2hlZHVsZVNjcm9sbFVwZGF0ZSA9IHVzZU1lbW9PbmUudXNlTWVtbygoKSA9PiByYWZTY2hkX19kZWZhdWx0W1wiZGVmYXVsdFwiXSh1cGRhdGVTY3JvbGwpLCBbdXBkYXRlU2Nyb2xsXSk7XG4gIGNvbnN0IG9uQ2xvc2VzdFNjcm9sbCA9IHVzZU1lbW9PbmUudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGRyYWdnaW5nID0gd2hpbGVEcmFnZ2luZ1JlZi5jdXJyZW50O1xuICAgIGNvbnN0IGNsb3Nlc3QgPSBnZXRDbG9zZXN0U2Nyb2xsYWJsZUZyb21EcmFnKGRyYWdnaW5nKTtcbiAgICAhKGRyYWdnaW5nICYmIGNsb3Nlc3QpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ291bGQgbm90IGZpbmQgc2Nyb2xsIG9wdGlvbnMgd2hpbGUgc2Nyb2xsaW5nJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBkcmFnZ2luZy5zY3JvbGxPcHRpb25zO1xuICAgIGlmIChvcHRpb25zLnNob3VsZFB1Ymxpc2hJbW1lZGlhdGVseSkge1xuICAgICAgdXBkYXRlU2Nyb2xsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNjaGVkdWxlU2Nyb2xsVXBkYXRlKCk7XG4gIH0sIFtzY2hlZHVsZVNjcm9sbFVwZGF0ZSwgdXBkYXRlU2Nyb2xsXSk7XG4gIGNvbnN0IGdldERpbWVuc2lvbkFuZFdhdGNoU2Nyb2xsID0gdXNlTWVtb09uZS51c2VDYWxsYmFjaygod2luZG93U2Nyb2xsLCBvcHRpb25zKSA9PiB7XG4gICAgISF3aGlsZURyYWdnaW5nUmVmLmN1cnJlbnQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgY29sbGVjdCBhIGRyb3BwYWJsZSB3aGlsZSBhIGRyYWcgaXMgb2NjdXJyaW5nJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAgIGNvbnN0IHByZXZpb3VzID0gcHJldmlvdXNSZWYuY3VycmVudDtcbiAgICBjb25zdCByZWYgPSBwcmV2aW91cy5nZXREcm9wcGFibGVSZWYoKTtcbiAgICAhcmVmID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQ2Fubm90IGNvbGxlY3Qgd2l0aG91dCBhIGRyb3BwYWJsZSByZWYnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgY29uc3QgZW52ID0gZ2V0RW52KHJlZik7XG4gICAgY29uc3QgZHJhZ2dpbmcgPSB7XG4gICAgICByZWYsXG4gICAgICBkZXNjcmlwdG9yLFxuICAgICAgZW52LFxuICAgICAgc2Nyb2xsT3B0aW9uczogb3B0aW9uc1xuICAgIH07XG4gICAgd2hpbGVEcmFnZ2luZ1JlZi5jdXJyZW50ID0gZHJhZ2dpbmc7XG4gICAgY29uc3QgZGltZW5zaW9uID0gZ2V0RGltZW5zaW9uKHtcbiAgICAgIHJlZixcbiAgICAgIGRlc2NyaXB0b3IsXG4gICAgICBlbnYsXG4gICAgICB3aW5kb3dTY3JvbGwsXG4gICAgICBkaXJlY3Rpb246IHByZXZpb3VzLmRpcmVjdGlvbixcbiAgICAgIGlzRHJvcERpc2FibGVkOiBwcmV2aW91cy5pc0Ryb3BEaXNhYmxlZCxcbiAgICAgIGlzQ29tYmluZUVuYWJsZWQ6IHByZXZpb3VzLmlzQ29tYmluZUVuYWJsZWQsXG4gICAgICBzaG91bGRDbGlwU3ViamVjdDogIXByZXZpb3VzLmlnbm9yZUNvbnRhaW5lckNsaXBwaW5nXG4gICAgfSk7XG4gICAgY29uc3Qgc2Nyb2xsYWJsZSA9IGVudi5jbG9zZXN0U2Nyb2xsYWJsZTtcbiAgICBpZiAoc2Nyb2xsYWJsZSkge1xuICAgICAgc2Nyb2xsYWJsZS5zZXRBdHRyaWJ1dGUoc2Nyb2xsQ29udGFpbmVyLmNvbnRleHRJZCwgYXBwQ29udGV4dC5jb250ZXh0SWQpO1xuXG4gICAgICBzY3JvbGxhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uQ2xvc2VzdFNjcm9sbCwgZ2V0TGlzdGVuZXJPcHRpb25zKGRyYWdnaW5nLnNjcm9sbE9wdGlvbnMpKTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNoZWNrRm9yTmVzdGVkU2Nyb2xsQ29udGFpbmVycyhzY3JvbGxhYmxlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRpbWVuc2lvbjtcbiAgfSwgW2FwcENvbnRleHQuY29udGV4dElkLCBkZXNjcmlwdG9yLCBvbkNsb3Nlc3RTY3JvbGwsIHByZXZpb3VzUmVmXSk7XG4gIGNvbnN0IGdldFNjcm9sbFdoaWxlRHJhZ2dpbmcgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBkcmFnZ2luZyA9IHdoaWxlRHJhZ2dpbmdSZWYuY3VycmVudDtcbiAgICBjb25zdCBjbG9zZXN0ID0gZ2V0Q2xvc2VzdFNjcm9sbGFibGVGcm9tRHJhZyhkcmFnZ2luZyk7XG4gICAgIShkcmFnZ2luZyAmJiBjbG9zZXN0KSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0NhbiBvbmx5IHJlY29sbGVjdCBEcm9wcGFibGUgY2xpZW50IGZvciBEcm9wcGFibGVzIHRoYXQgaGF2ZSBhIHNjcm9sbCBjb250YWluZXInKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICAgcmV0dXJuIGdldFNjcm9sbChjbG9zZXN0KTtcbiAgfSwgW10pO1xuICBjb25zdCBkcmFnU3RvcHBlZCA9IHVzZU1lbW9PbmUudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGRyYWdnaW5nID0gd2hpbGVEcmFnZ2luZ1JlZi5jdXJyZW50O1xuICAgICFkcmFnZ2luZyA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ0Nhbm5vdCBzdG9wIGRyYWcgd2hlbiBubyBhY3RpdmUgZHJhZycpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBjb25zdCBjbG9zZXN0ID0gZ2V0Q2xvc2VzdFNjcm9sbGFibGVGcm9tRHJhZyhkcmFnZ2luZyk7XG5cbiAgICB3aGlsZURyYWdnaW5nUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIGlmICghY2xvc2VzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNjaGVkdWxlU2Nyb2xsVXBkYXRlLmNhbmNlbCgpO1xuICAgIGNsb3Nlc3QucmVtb3ZlQXR0cmlidXRlKHNjcm9sbENvbnRhaW5lci5jb250ZXh0SWQpO1xuICAgIGNsb3Nlc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgb25DbG9zZXN0U2Nyb2xsLFxuICAgIGdldExpc3RlbmVyT3B0aW9ucyhkcmFnZ2luZy5zY3JvbGxPcHRpb25zKSk7XG4gIH0sIFtvbkNsb3Nlc3RTY3JvbGwsIHNjaGVkdWxlU2Nyb2xsVXBkYXRlXSk7XG4gIGNvbnN0IHNjcm9sbCA9IHVzZU1lbW9PbmUudXNlQ2FsbGJhY2soY2hhbmdlID0+IHtcbiAgICBjb25zdCBkcmFnZ2luZyA9IHdoaWxlRHJhZ2dpbmdSZWYuY3VycmVudDtcbiAgICAhZHJhZ2dpbmcgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3Qgc2Nyb2xsIHdoZW4gdGhlcmUgaXMgbm8gZHJhZycpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBjb25zdCBjbG9zZXN0ID0gZ2V0Q2xvc2VzdFNjcm9sbGFibGVGcm9tRHJhZyhkcmFnZ2luZyk7XG4gICAgIWNsb3Nlc3QgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3Qgc2Nyb2xsIGEgZHJvcHBhYmxlIHdpdGggbm8gY2xvc2VzdCBzY3JvbGxhYmxlJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuXG4gICAgY2xvc2VzdC5zY3JvbGxUb3AgKz0gY2hhbmdlLnk7XG4gICAgY2xvc2VzdC5zY3JvbGxMZWZ0ICs9IGNoYW5nZS54O1xuICB9LCBbXSk7XG4gIGNvbnN0IGNhbGxiYWNrcyA9IHVzZU1lbW9PbmUudXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldERpbWVuc2lvbkFuZFdhdGNoU2Nyb2xsLFxuICAgICAgZ2V0U2Nyb2xsV2hpbGVEcmFnZ2luZyxcbiAgICAgIGRyYWdTdG9wcGVkLFxuICAgICAgc2Nyb2xsXG4gICAgfTtcbiAgfSwgW2RyYWdTdG9wcGVkLCBnZXREaW1lbnNpb25BbmRXYXRjaFNjcm9sbCwgZ2V0U2Nyb2xsV2hpbGVEcmFnZ2luZywgc2Nyb2xsXSk7XG4gIGNvbnN0IGVudHJ5ID0gdXNlTWVtb09uZS51c2VNZW1vKCgpID0+ICh7XG4gICAgdW5pcXVlSWQsXG4gICAgZGVzY3JpcHRvcixcbiAgICBjYWxsYmFja3NcbiAgfSksIFtjYWxsYmFja3MsIGRlc2NyaXB0b3IsIHVuaXF1ZUlkXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBwdWJsaXNoZWREZXNjcmlwdG9yUmVmLmN1cnJlbnQgPSBlbnRyeS5kZXNjcmlwdG9yO1xuICAgIHJlZ2lzdHJ5LmRyb3BwYWJsZS5yZWdpc3RlcihlbnRyeSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICh3aGlsZURyYWdnaW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZygnVW5zdXBwb3J0ZWQ6IGNoYW5naW5nIHRoZSBkcm9wcGFibGVJZCBvciB0eXBlIG9mIGEgRHJvcHBhYmxlIGR1cmluZyBhIGRyYWcnKSA6IHZvaWQgMDtcbiAgICAgICAgZHJhZ1N0b3BwZWQoKTtcbiAgICAgIH1cbiAgICAgIHJlZ2lzdHJ5LmRyb3BwYWJsZS51bnJlZ2lzdGVyKGVudHJ5KTtcbiAgICB9O1xuICB9LCBbY2FsbGJhY2tzLCBkZXNjcmlwdG9yLCBkcmFnU3RvcHBlZCwgZW50cnksIG1hcnNoYWwsIHJlZ2lzdHJ5LmRyb3BwYWJsZV0pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCF3aGlsZURyYWdnaW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbWFyc2hhbC51cGRhdGVEcm9wcGFibGVJc0VuYWJsZWQocHVibGlzaGVkRGVzY3JpcHRvclJlZi5jdXJyZW50LmlkLCAhYXJncy5pc0Ryb3BEaXNhYmxlZCk7XG4gIH0sIFthcmdzLmlzRHJvcERpc2FibGVkLCBtYXJzaGFsXSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXdoaWxlRHJhZ2dpbmdSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBtYXJzaGFsLnVwZGF0ZURyb3BwYWJsZUlzQ29tYmluZUVuYWJsZWQocHVibGlzaGVkRGVzY3JpcHRvclJlZi5jdXJyZW50LmlkLCBhcmdzLmlzQ29tYmluZUVuYWJsZWQpO1xuICB9LCBbYXJncy5pc0NvbWJpbmVFbmFibGVkLCBtYXJzaGFsXSk7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuY29uc3QgZW1wdHkgPSB7XG4gIHdpZHRoOiAwLFxuICBoZWlnaHQ6IDAsXG4gIG1hcmdpbjogbm9TcGFjaW5nXG59O1xuY29uc3QgZ2V0U2l6ZSA9IF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGlzQW5pbWF0aW5nT3Blbk9uTW91bnQsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgYW5pbWF0ZVxuICB9ID0gX3JlZjtcbiAgaWYgKGlzQW5pbWF0aW5nT3Blbk9uTW91bnQpIHtcbiAgICByZXR1cm4gZW1wdHk7XG4gIH1cbiAgaWYgKGFuaW1hdGUgPT09ICdjbG9zZScpIHtcbiAgICByZXR1cm4gZW1wdHk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBoZWlnaHQ6IHBsYWNlaG9sZGVyLmNsaWVudC5ib3JkZXJCb3guaGVpZ2h0LFxuICAgIHdpZHRoOiBwbGFjZWhvbGRlci5jbGllbnQuYm9yZGVyQm94LndpZHRoLFxuICAgIG1hcmdpbjogcGxhY2Vob2xkZXIuY2xpZW50Lm1hcmdpblxuICB9O1xufTtcbmNvbnN0IGdldFN0eWxlID0gX3JlZjIgPT4ge1xuICBsZXQge1xuICAgIGlzQW5pbWF0aW5nT3Blbk9uTW91bnQsXG4gICAgcGxhY2Vob2xkZXIsXG4gICAgYW5pbWF0ZVxuICB9ID0gX3JlZjI7XG4gIGNvbnN0IHNpemUgPSBnZXRTaXplKHtcbiAgICBpc0FuaW1hdGluZ09wZW5Pbk1vdW50LFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIGFuaW1hdGVcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgZGlzcGxheTogcGxhY2Vob2xkZXIuZGlzcGxheSxcblxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIHdpZHRoOiBzaXplLndpZHRoLFxuICAgIGhlaWdodDogc2l6ZS5oZWlnaHQsXG4gICAgbWFyZ2luVG9wOiBzaXplLm1hcmdpbi50b3AsXG4gICAgbWFyZ2luUmlnaHQ6IHNpemUubWFyZ2luLnJpZ2h0LFxuICAgIG1hcmdpbkJvdHRvbTogc2l6ZS5tYXJnaW4uYm90dG9tLFxuICAgIG1hcmdpbkxlZnQ6IHNpemUubWFyZ2luLmxlZnQsXG4gICAgZmxleFNocmluazogJzAnLFxuICAgIGZsZXhHcm93OiAnMCcsXG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgIHRyYW5zaXRpb246IGFuaW1hdGUgIT09ICdub25lJyA/IHRyYW5zaXRpb25zLnBsYWNlaG9sZGVyIDogbnVsbFxuICB9O1xufTtcbmNvbnN0IFBsYWNlaG9sZGVyID0gcHJvcHMgPT4ge1xuICBjb25zdCBhbmltYXRlT3BlblRpbWVyUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCB0cnlDbGVhckFuaW1hdGVPcGVuVGltZXIgPSB1c2VNZW1vT25lLnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWFuaW1hdGVPcGVuVGltZXJSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjbGVhclRpbWVvdXQoYW5pbWF0ZU9wZW5UaW1lclJlZi5jdXJyZW50KTtcbiAgICBhbmltYXRlT3BlblRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICB9LCBbXSk7XG4gIGNvbnN0IHtcbiAgICBhbmltYXRlLFxuICAgIG9uVHJhbnNpdGlvbkVuZCxcbiAgICBvbkNsb3NlLFxuICAgIGNvbnRleHRJZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtpc0FuaW1hdGluZ09wZW5Pbk1vdW50LCBzZXRJc0FuaW1hdGluZ09wZW5Pbk1vdW50XSA9IFJlYWN0LnVzZVN0YXRlKHByb3BzLmFuaW1hdGUgPT09ICdvcGVuJyk7XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzQW5pbWF0aW5nT3Blbk9uTW91bnQpIHtcbiAgICAgIHJldHVybiBub29wO1xuICAgIH1cblxuICAgIGlmIChhbmltYXRlICE9PSAnb3BlbicpIHtcbiAgICAgIHRyeUNsZWFyQW5pbWF0ZU9wZW5UaW1lcigpO1xuICAgICAgc2V0SXNBbmltYXRpbmdPcGVuT25Nb3VudChmYWxzZSk7XG4gICAgICByZXR1cm4gbm9vcDtcbiAgICB9XG5cbiAgICBpZiAoYW5pbWF0ZU9wZW5UaW1lclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm4gbm9vcDtcbiAgICB9XG4gICAgYW5pbWF0ZU9wZW5UaW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBhbmltYXRlT3BlblRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgc2V0SXNBbmltYXRpbmdPcGVuT25Nb3VudChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ5Q2xlYXJBbmltYXRlT3BlblRpbWVyO1xuICB9LCBbYW5pbWF0ZSwgaXNBbmltYXRpbmdPcGVuT25Nb3VudCwgdHJ5Q2xlYXJBbmltYXRlT3BlblRpbWVyXSk7XG4gIGNvbnN0IG9uU2l6ZUNoYW5nZUVuZCA9IHVzZU1lbW9PbmUudXNlQ2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIGlmIChldmVudC5wcm9wZXJ0eU5hbWUgIT09ICdoZWlnaHQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9uVHJhbnNpdGlvbkVuZCgpO1xuICAgIGlmIChhbmltYXRlID09PSAnY2xvc2UnKSB7XG4gICAgICBvbkNsb3NlKCk7XG4gICAgfVxuICB9LCBbYW5pbWF0ZSwgb25DbG9zZSwgb25UcmFuc2l0aW9uRW5kXSk7XG4gIGNvbnN0IHN0eWxlID0gZ2V0U3R5bGUoe1xuICAgIGlzQW5pbWF0aW5nT3Blbk9uTW91bnQsXG4gICAgYW5pbWF0ZTogcHJvcHMuYW5pbWF0ZSxcbiAgICBwbGFjZWhvbGRlcjogcHJvcHMucGxhY2Vob2xkZXJcbiAgfSk7XG4gIHJldHVybiBSZWFjdF9fZGVmYXVsdFtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChwcm9wcy5wbGFjZWhvbGRlci50YWdOYW1lLCB7XG4gICAgc3R5bGUsXG4gICAgJ2RhdGEtcmZkLXBsYWNlaG9sZGVyLWNvbnRleHQtaWQnOiBjb250ZXh0SWQsXG4gICAgb25UcmFuc2l0aW9uRW5kOiBvblNpemVDaGFuZ2VFbmQsXG4gICAgcmVmOiBwcm9wcy5pbm5lclJlZlxuICB9KTtcbn07XG52YXIgUGxhY2Vob2xkZXIkMSA9IFJlYWN0X19kZWZhdWx0W1wiZGVmYXVsdFwiXS5tZW1vKFBsYWNlaG9sZGVyKTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbn1cbmZ1bmN0aW9uIHJ1bkNoZWNrcyhhcmdzLCBjaGVja3MpIHtcbiAgY2hlY2tzLmZvckVhY2goY2hlY2sgPT4gY2hlY2soYXJncykpO1xufVxuY29uc3Qgc2hhcmVkID0gW2Z1bmN0aW9uIHJlcXVpcmVkKF9yZWYpIHtcbiAgbGV0IHtcbiAgICBwcm9wc1xuICB9ID0gX3JlZjtcbiAgIXByb3BzLmRyb3BwYWJsZUlkID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnQSBEcm9wcGFibGUgcmVxdWlyZXMgYSBkcm9wcGFibGVJZCBwcm9wJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuICAhKHR5cGVvZiBwcm9wcy5kcm9wcGFibGVJZCA9PT0gJ3N0cmluZycpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCBgQSBEcm9wcGFibGUgcmVxdWlyZXMgYSBbc3RyaW5nXSBkcm9wcGFibGVJZC4gUHJvdmlkZWQ6IFske3R5cGVvZiBwcm9wcy5kcm9wcGFibGVJZH1dYCkgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xufSwgZnVuY3Rpb24gYm9vbGVhbihfcmVmMikge1xuICBsZXQge1xuICAgIHByb3BzXG4gIH0gPSBfcmVmMjtcbiAgIWlzQm9vbGVhbihwcm9wcy5pc0Ryb3BEaXNhYmxlZCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdpc0Ryb3BEaXNhYmxlZCBtdXN0IGJlIGEgYm9vbGVhbicpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgIWlzQm9vbGVhbihwcm9wcy5pc0NvbWJpbmVFbmFibGVkKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ2lzQ29tYmluZUVuYWJsZWQgbXVzdCBiZSBhIGJvb2xlYW4nKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gICFpc0Jvb2xlYW4ocHJvcHMuaWdub3JlQ29udGFpbmVyQ2xpcHBpbmcpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnaWdub3JlQ29udGFpbmVyQ2xpcHBpbmcgbXVzdCBiZSBhIGJvb2xlYW4nKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG59LCBmdW5jdGlvbiByZWYoX3JlZjMpIHtcbiAgbGV0IHtcbiAgICBnZXREcm9wcGFibGVSZWZcbiAgfSA9IF9yZWYzO1xuICBjaGVja0lzVmFsaWRJbm5lclJlZihnZXREcm9wcGFibGVSZWYoKSk7XG59XTtcbmNvbnN0IHN0YW5kYXJkID0gW2Z1bmN0aW9uIHBsYWNlaG9sZGVyKF9yZWY0KSB7XG4gIGxldCB7XG4gICAgcHJvcHMsXG4gICAgZ2V0UGxhY2Vob2xkZXJSZWZcbiAgfSA9IF9yZWY0O1xuICBpZiAoIXByb3BzLnBsYWNlaG9sZGVyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHJlZiA9IGdldFBsYWNlaG9sZGVyUmVmKCk7XG4gIGlmIChyZWYpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gd2FybmluZyhgXG4gICAgICBEcm9wcGFibGUgc2V0dXAgaXNzdWUgW2Ryb3BwYWJsZUlkOiBcIiR7cHJvcHMuZHJvcHBhYmxlSWR9XCJdOlxuICAgICAgRHJvcHBhYmxlUHJvdmlkZWQgPiBwbGFjZWhvbGRlciBjb3VsZCBub3QgYmUgZm91bmQuXG5cbiAgICAgIFBsZWFzZSBiZSBzdXJlIHRvIGFkZCB0aGUge3Byb3ZpZGVkLnBsYWNlaG9sZGVyfSBSZWFjdCBOb2RlIGFzIGEgY2hpbGQgb2YgeW91ciBEcm9wcGFibGUuXG4gICAgICBNb3JlIGluZm9ybWF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vaGVsbG8tcGFuZ2VhL2RuZC9ibG9iL21haW4vZG9jcy9hcGkvZHJvcHBhYmxlLm1kXG4gICAgYCkgOiB2b2lkIDA7XG59XTtcbmNvbnN0IHZpcnR1YWwgPSBbZnVuY3Rpb24gaGFzQ2xvbmUoX3JlZjUpIHtcbiAgbGV0IHtcbiAgICBwcm9wc1xuICB9ID0gX3JlZjU7XG4gICFwcm9wcy5yZW5kZXJDbG9uZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGludmFyaWFudChmYWxzZSwgJ011c3QgcHJvdmlkZSBhIGNsb25lIHJlbmRlciBmdW5jdGlvbiAocmVuZGVyQ2xvbmUpIGZvciB2aXJ0dWFsIGxpc3RzJykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xufSwgZnVuY3Rpb24gaGFzTm9QbGFjZWhvbGRlcihfcmVmNikge1xuICBsZXQge1xuICAgIGdldFBsYWNlaG9sZGVyUmVmXG4gIH0gPSBfcmVmNjtcbiAgISFnZXRQbGFjZWhvbGRlclJlZigpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgdmlydHVhbCBsaXN0IHRvIG5vdCBoYXZlIGEgcGxhY2Vob2xkZXInKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG59XTtcbmZ1bmN0aW9uIHVzZVZhbGlkYXRpb24oYXJncykge1xuICB1c2VEZXZTZXR1cFdhcm5pbmcoKCkgPT4ge1xuICAgIHJ1bkNoZWNrcyhhcmdzLCBzaGFyZWQpO1xuICAgIGlmIChhcmdzLnByb3BzLm1vZGUgPT09ICdzdGFuZGFyZCcpIHtcbiAgICAgIHJ1bkNoZWNrcyhhcmdzLCBzdGFuZGFyZCk7XG4gICAgfVxuICAgIGlmIChhcmdzLnByb3BzLm1vZGUgPT09ICd2aXJ0dWFsJykge1xuICAgICAgcnVuQ2hlY2tzKGFyZ3MsIHZpcnR1YWwpO1xuICAgIH1cbiAgfSk7XG59XG5cbmNsYXNzIEFuaW1hdGVJbk91dCBleHRlbmRzIFJlYWN0X19kZWZhdWx0W1wiZGVmYXVsdFwiXS5QdXJlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNWaXNpYmxlOiBCb29sZWFuKHRoaXMucHJvcHMub24pLFxuICAgICAgZGF0YTogdGhpcy5wcm9wcy5vbixcbiAgICAgIGFuaW1hdGU6IHRoaXMucHJvcHMuc2hvdWxkQW5pbWF0ZSAmJiB0aGlzLnByb3BzLm9uID8gJ29wZW4nIDogJ25vbmUnXG4gICAgfTtcbiAgICB0aGlzLm9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5hbmltYXRlICE9PSAnY2xvc2UnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc1Zpc2libGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgaWYgKCFwcm9wcy5zaG91bGRBbmltYXRlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1Zpc2libGU6IEJvb2xlYW4ocHJvcHMub24pLFxuICAgICAgICBkYXRhOiBwcm9wcy5vbixcbiAgICAgICAgYW5pbWF0ZTogJ25vbmUnXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5vbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgICAgICBkYXRhOiBwcm9wcy5vbixcbiAgICAgICAgYW5pbWF0ZTogJ29wZW4nXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS5pc1Zpc2libGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgZGF0YTogc3RhdGUuZGF0YSxcbiAgICAgICAgYW5pbWF0ZTogJ2Nsb3NlJ1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNWaXNpYmxlOiBmYWxzZSxcbiAgICAgIGFuaW1hdGU6ICdjbG9zZScsXG4gICAgICBkYXRhOiBudWxsXG4gICAgfTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmlzVmlzaWJsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHByb3ZpZGVkID0ge1xuICAgICAgb25DbG9zZTogdGhpcy5vbkNsb3NlLFxuICAgICAgZGF0YTogdGhpcy5zdGF0ZS5kYXRhLFxuICAgICAgYW5pbWF0ZTogdGhpcy5zdGF0ZS5hbmltYXRlXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbihwcm92aWRlZCk7XG4gIH1cbn1cblxuY29uc3QgRHJvcHBhYmxlID0gcHJvcHMgPT4ge1xuICBjb25zdCBhcHBDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChBcHBDb250ZXh0KTtcbiAgIWFwcENvbnRleHQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBpbnZhcmlhbnQoZmFsc2UsICdDb3VsZCBub3QgZmluZCBhcHAgY29udGV4dCcpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgY29uc3Qge1xuICAgIGNvbnRleHRJZCxcbiAgICBpc01vdmVtZW50QWxsb3dlZFxuICB9ID0gYXBwQ29udGV4dDtcbiAgY29uc3QgZHJvcHBhYmxlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBwbGFjZWhvbGRlclJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGRyb3BwYWJsZUlkLFxuICAgIHR5cGUsXG4gICAgbW9kZSxcbiAgICBkaXJlY3Rpb24sXG4gICAgaWdub3JlQ29udGFpbmVyQ2xpcHBpbmcsXG4gICAgaXNEcm9wRGlzYWJsZWQsXG4gICAgaXNDb21iaW5lRW5hYmxlZCxcbiAgICBzbmFwc2hvdCxcbiAgICB1c2VDbG9uZSxcbiAgICB1cGRhdGVWaWV3cG9ydE1heFNjcm9sbCxcbiAgICBnZXRDb250YWluZXJGb3JDbG9uZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGdldERyb3BwYWJsZVJlZiA9IHVzZU1lbW9PbmUudXNlQ2FsbGJhY2soKCkgPT4gZHJvcHBhYmxlUmVmLmN1cnJlbnQsIFtdKTtcbiAgY29uc3Qgc2V0RHJvcHBhYmxlUmVmID0gdXNlTWVtb09uZS51c2VDYWxsYmFjayhmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgdmFsdWUgPSBudWxsO1xuICAgIH1cbiAgICBkcm9wcGFibGVSZWYuY3VycmVudCA9IHZhbHVlO1xuICB9LCBbXSk7XG4gIGNvbnN0IGdldFBsYWNlaG9sZGVyUmVmID0gdXNlTWVtb09uZS51c2VDYWxsYmFjaygoKSA9PiBwbGFjZWhvbGRlclJlZi5jdXJyZW50LCBbXSk7XG4gIGNvbnN0IHNldFBsYWNlaG9sZGVyUmVmID0gdXNlTWVtb09uZS51c2VDYWxsYmFjayhmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgdmFsdWUgPSBudWxsO1xuICAgIH1cbiAgICBwbGFjZWhvbGRlclJlZi5jdXJyZW50ID0gdmFsdWU7XG4gIH0sIFtdKTtcbiAgdXNlVmFsaWRhdGlvbih7XG4gICAgcHJvcHMsXG4gICAgZ2V0RHJvcHBhYmxlUmVmLFxuICAgIGdldFBsYWNlaG9sZGVyUmVmXG4gIH0pO1xuICBjb25zdCBvblBsYWNlaG9sZGVyVHJhbnNpdGlvbkVuZCA9IHVzZU1lbW9PbmUudXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChpc01vdmVtZW50QWxsb3dlZCgpKSB7XG4gICAgICB1cGRhdGVWaWV3cG9ydE1heFNjcm9sbCh7XG4gICAgICAgIG1heFNjcm9sbDogZ2V0TWF4V2luZG93U2Nyb2xsKClcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2lzTW92ZW1lbnRBbGxvd2VkLCB1cGRhdGVWaWV3cG9ydE1heFNjcm9sbF0pO1xuICB1c2VEcm9wcGFibGVQdWJsaXNoZXIoe1xuICAgIGRyb3BwYWJsZUlkLFxuICAgIHR5cGUsXG4gICAgbW9kZSxcbiAgICBkaXJlY3Rpb24sXG4gICAgaXNEcm9wRGlzYWJsZWQsXG4gICAgaXNDb21iaW5lRW5hYmxlZCxcbiAgICBpZ25vcmVDb250YWluZXJDbGlwcGluZyxcbiAgICBnZXREcm9wcGFibGVSZWZcbiAgfSk7XG4gIGNvbnN0IHBsYWNlaG9sZGVyID0gdXNlTWVtb09uZS51c2VNZW1vKCgpID0+IFJlYWN0X19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KEFuaW1hdGVJbk91dCwge1xuICAgIG9uOiBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICBzaG91bGRBbmltYXRlOiBwcm9wcy5zaG91bGRBbmltYXRlUGxhY2Vob2xkZXJcbiAgfSwgX3JlZiA9PiB7XG4gICAgbGV0IHtcbiAgICAgIG9uQ2xvc2UsXG4gICAgICBkYXRhLFxuICAgICAgYW5pbWF0ZVxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiBSZWFjdF9fZGVmYXVsdFtcImRlZmF1bHRcIl0uY3JlYXRlRWxlbWVudChQbGFjZWhvbGRlciQxLCB7XG4gICAgICBwbGFjZWhvbGRlcjogZGF0YSxcbiAgICAgIG9uQ2xvc2U6IG9uQ2xvc2UsXG4gICAgICBpbm5lclJlZjogc2V0UGxhY2Vob2xkZXJSZWYsXG4gICAgICBhbmltYXRlOiBhbmltYXRlLFxuICAgICAgY29udGV4dElkOiBjb250ZXh0SWQsXG4gICAgICBvblRyYW5zaXRpb25FbmQ6IG9uUGxhY2Vob2xkZXJUcmFuc2l0aW9uRW5kXG4gICAgfSk7XG4gIH0pLCBbY29udGV4dElkLCBvblBsYWNlaG9sZGVyVHJhbnNpdGlvbkVuZCwgcHJvcHMucGxhY2Vob2xkZXIsIHByb3BzLnNob3VsZEFuaW1hdGVQbGFjZWhvbGRlciwgc2V0UGxhY2Vob2xkZXJSZWZdKTtcbiAgY29uc3QgcHJvdmlkZWQgPSB1c2VNZW1vT25lLnVzZU1lbW8oKCkgPT4gKHtcbiAgICBpbm5lclJlZjogc2V0RHJvcHBhYmxlUmVmLFxuICAgIHBsYWNlaG9sZGVyLFxuICAgIGRyb3BwYWJsZVByb3BzOiB7XG4gICAgICAnZGF0YS1yZmQtZHJvcHBhYmxlLWlkJzogZHJvcHBhYmxlSWQsXG4gICAgICAnZGF0YS1yZmQtZHJvcHBhYmxlLWNvbnRleHQtaWQnOiBjb250ZXh0SWRcbiAgICB9XG4gIH0pLCBbY29udGV4dElkLCBkcm9wcGFibGVJZCwgcGxhY2Vob2xkZXIsIHNldERyb3BwYWJsZVJlZl0pO1xuICBjb25zdCBpc1VzaW5nQ2xvbmVGb3IgPSB1c2VDbG9uZSA/IHVzZUNsb25lLmRyYWdnaW5nLmRyYWdnYWJsZUlkIDogbnVsbDtcbiAgY29uc3QgZHJvcHBhYmxlQ29udGV4dCA9IHVzZU1lbW9PbmUudXNlTWVtbygoKSA9PiAoe1xuICAgIGRyb3BwYWJsZUlkLFxuICAgIHR5cGUsXG4gICAgaXNVc2luZ0Nsb25lRm9yXG4gIH0pLCBbZHJvcHBhYmxlSWQsIGlzVXNpbmdDbG9uZUZvciwgdHlwZV0pO1xuICBmdW5jdGlvbiBnZXRDbG9uZSgpIHtcbiAgICBpZiAoIXVzZUNsb25lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgZHJhZ2dpbmcsXG4gICAgICByZW5kZXJcbiAgICB9ID0gdXNlQ2xvbmU7XG4gICAgY29uc3Qgbm9kZSA9IFJlYWN0X19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KFByaXZhdGVEcmFnZ2FibGUsIHtcbiAgICAgIGRyYWdnYWJsZUlkOiBkcmFnZ2luZy5kcmFnZ2FibGVJZCxcbiAgICAgIGluZGV4OiBkcmFnZ2luZy5zb3VyY2UuaW5kZXgsXG4gICAgICBpc0Nsb25lOiB0cnVlLFxuICAgICAgaXNFbmFibGVkOiB0cnVlXG4gICAgICAsXG4gICAgICBzaG91bGRSZXNwZWN0Rm9yY2VQcmVzczogZmFsc2UsXG4gICAgICBjYW5EcmFnSW50ZXJhY3RpdmVFbGVtZW50czogdHJ1ZVxuICAgIH0sIChkcmFnZ2FibGVQcm92aWRlZCwgZHJhZ2dhYmxlU25hcHNob3QpID0+IHJlbmRlcihkcmFnZ2FibGVQcm92aWRlZCwgZHJhZ2dhYmxlU25hcHNob3QsIGRyYWdnaW5nKSk7XG4gICAgcmV0dXJuIFJlYWN0RE9NX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jcmVhdGVQb3J0YWwobm9kZSwgZ2V0Q29udGFpbmVyRm9yQ2xvbmUoKSk7XG4gIH1cbiAgcmV0dXJuIFJlYWN0X19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jcmVhdGVFbGVtZW50KERyb3BwYWJsZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogZHJvcHBhYmxlQ29udGV4dFxuICB9LCBjaGlsZHJlbihwcm92aWRlZCwgc25hcHNob3QpLCBnZXRDbG9uZSgpKTtcbn07XG52YXIgRHJvcHBhYmxlJDEgPSBEcm9wcGFibGU7XG5cbmNvbnN0IGlzTWF0Y2hpbmdUeXBlID0gKHR5cGUsIGNyaXRpY2FsKSA9PiB0eXBlID09PSBjcml0aWNhbC5kcm9wcGFibGUudHlwZTtcbmNvbnN0IGdldERyYWdnYWJsZSA9IChjcml0aWNhbCwgZGltZW5zaW9ucykgPT4gZGltZW5zaW9ucy5kcmFnZ2FibGVzW2NyaXRpY2FsLmRyYWdnYWJsZS5pZF07XG5cbmNvbnN0IG1ha2VNYXBTdGF0ZVRvUHJvcHMgPSAoKSA9PiB7XG4gIGNvbnN0IGlkbGVXaXRoQW5pbWF0aW9uID0ge1xuICAgIHBsYWNlaG9sZGVyOiBudWxsLFxuICAgIHNob3VsZEFuaW1hdGVQbGFjZWhvbGRlcjogdHJ1ZSxcbiAgICBzbmFwc2hvdDoge1xuICAgICAgaXNEcmFnZ2luZ092ZXI6IGZhbHNlLFxuICAgICAgZHJhZ2dpbmdPdmVyV2l0aDogbnVsbCxcbiAgICAgIGRyYWdnaW5nRnJvbVRoaXNXaXRoOiBudWxsLFxuICAgICAgaXNVc2luZ1BsYWNlaG9sZGVyOiBmYWxzZVxuICAgIH0sXG4gICAgdXNlQ2xvbmU6IG51bGxcbiAgfTtcbiAgY29uc3QgaWRsZVdpdGhvdXRBbmltYXRpb24gPSB7XG4gICAgLi4uaWRsZVdpdGhBbmltYXRpb24sXG4gICAgc2hvdWxkQW5pbWF0ZVBsYWNlaG9sZGVyOiBmYWxzZVxuICB9O1xuICBjb25zdCBnZXREcmFnZ2FibGVSdWJyaWMgPSBtZW1vaXplT25lX19kZWZhdWx0W1wiZGVmYXVsdFwiXShkZXNjcmlwdG9yID0+ICh7XG4gICAgZHJhZ2dhYmxlSWQ6IGRlc2NyaXB0b3IuaWQsXG4gICAgdHlwZTogZGVzY3JpcHRvci50eXBlLFxuICAgIHNvdXJjZToge1xuICAgICAgaW5kZXg6IGRlc2NyaXB0b3IuaW5kZXgsXG4gICAgICBkcm9wcGFibGVJZDogZGVzY3JpcHRvci5kcm9wcGFibGVJZFxuICAgIH1cbiAgfSkpO1xuICBjb25zdCBnZXRNYXBQcm9wcyA9IG1lbW9pemVPbmVfX2RlZmF1bHRbXCJkZWZhdWx0XCJdKChpZCwgaXNFbmFibGVkLCBpc0RyYWdnaW5nT3ZlckZvckNvbnN1bWVyLCBpc0RyYWdnaW5nT3ZlckZvckltcGFjdCwgZHJhZ2dpbmcsIHJlbmRlckNsb25lKSA9PiB7XG4gICAgY29uc3QgZHJhZ2dhYmxlSWQgPSBkcmFnZ2luZy5kZXNjcmlwdG9yLmlkO1xuICAgIGNvbnN0IGlzSG9tZSA9IGRyYWdnaW5nLmRlc2NyaXB0b3IuZHJvcHBhYmxlSWQgPT09IGlkO1xuICAgIGlmIChpc0hvbWUpIHtcbiAgICAgIGNvbnN0IHVzZUNsb25lID0gcmVuZGVyQ2xvbmUgPyB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyQ2xvbmUsXG4gICAgICAgIGRyYWdnaW5nOiBnZXREcmFnZ2FibGVSdWJyaWMoZHJhZ2dpbmcuZGVzY3JpcHRvcilcbiAgICAgIH0gOiBudWxsO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSB7XG4gICAgICAgIGlzRHJhZ2dpbmdPdmVyOiBpc0RyYWdnaW5nT3ZlckZvckNvbnN1bWVyLFxuICAgICAgICBkcmFnZ2luZ092ZXJXaXRoOiBpc0RyYWdnaW5nT3ZlckZvckNvbnN1bWVyID8gZHJhZ2dhYmxlSWQgOiBudWxsLFxuICAgICAgICBkcmFnZ2luZ0Zyb21UaGlzV2l0aDogZHJhZ2dhYmxlSWQsXG4gICAgICAgIGlzVXNpbmdQbGFjZWhvbGRlcjogdHJ1ZVxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBsYWNlaG9sZGVyOiBkcmFnZ2luZy5wbGFjZWhvbGRlcixcbiAgICAgICAgc2hvdWxkQW5pbWF0ZVBsYWNlaG9sZGVyOiBmYWxzZSxcbiAgICAgICAgc25hcHNob3QsXG4gICAgICAgIHVzZUNsb25lXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoIWlzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuIGlkbGVXaXRob3V0QW5pbWF0aW9uO1xuICAgIH1cblxuICAgIGlmICghaXNEcmFnZ2luZ092ZXJGb3JJbXBhY3QpIHtcbiAgICAgIHJldHVybiBpZGxlV2l0aEFuaW1hdGlvbjtcbiAgICB9XG4gICAgY29uc3Qgc25hcHNob3QgPSB7XG4gICAgICBpc0RyYWdnaW5nT3ZlcjogaXNEcmFnZ2luZ092ZXJGb3JDb25zdW1lcixcbiAgICAgIGRyYWdnaW5nT3ZlcldpdGg6IGRyYWdnYWJsZUlkLFxuICAgICAgZHJhZ2dpbmdGcm9tVGhpc1dpdGg6IG51bGwsXG4gICAgICBpc1VzaW5nUGxhY2Vob2xkZXI6IHRydWVcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBwbGFjZWhvbGRlcjogZHJhZ2dpbmcucGxhY2Vob2xkZXIsXG4gICAgICBzaG91bGRBbmltYXRlUGxhY2Vob2xkZXI6IHRydWUsXG4gICAgICBzbmFwc2hvdCxcbiAgICAgIHVzZUNsb25lOiBudWxsXG4gICAgfTtcbiAgfSk7XG4gIGNvbnN0IHNlbGVjdG9yID0gKHN0YXRlLCBvd25Qcm9wcykgPT4ge1xuXG4gICAgY29uc3QgaWQgPSBvd25Qcm9wcy5kcm9wcGFibGVJZDtcbiAgICBjb25zdCB0eXBlID0gb3duUHJvcHMudHlwZTtcbiAgICBjb25zdCBpc0VuYWJsZWQgPSAhb3duUHJvcHMuaXNEcm9wRGlzYWJsZWQ7XG4gICAgY29uc3QgcmVuZGVyQ2xvbmUgPSBvd25Qcm9wcy5yZW5kZXJDbG9uZTtcbiAgICBpZiAoaXNEcmFnZ2luZyhzdGF0ZSkpIHtcbiAgICAgIGNvbnN0IGNyaXRpY2FsID0gc3RhdGUuY3JpdGljYWw7XG4gICAgICBpZiAoIWlzTWF0Y2hpbmdUeXBlKHR5cGUsIGNyaXRpY2FsKSkge1xuICAgICAgICByZXR1cm4gaWRsZVdpdGhvdXRBbmltYXRpb247XG4gICAgICB9XG4gICAgICBjb25zdCBkcmFnZ2luZyA9IGdldERyYWdnYWJsZShjcml0aWNhbCwgc3RhdGUuZGltZW5zaW9ucyk7XG4gICAgICBjb25zdCBpc0RyYWdnaW5nT3ZlciA9IHdoYXRJc0RyYWdnZWRPdmVyKHN0YXRlLmltcGFjdCkgPT09IGlkO1xuICAgICAgcmV0dXJuIGdldE1hcFByb3BzKGlkLCBpc0VuYWJsZWQsIGlzRHJhZ2dpbmdPdmVyLCBpc0RyYWdnaW5nT3ZlciwgZHJhZ2dpbmcsIHJlbmRlckNsb25lKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnRFJPUF9BTklNQVRJTkcnKSB7XG4gICAgICBjb25zdCBjb21wbGV0ZWQgPSBzdGF0ZS5jb21wbGV0ZWQ7XG4gICAgICBpZiAoIWlzTWF0Y2hpbmdUeXBlKHR5cGUsIGNvbXBsZXRlZC5jcml0aWNhbCkpIHtcbiAgICAgICAgcmV0dXJuIGlkbGVXaXRob3V0QW5pbWF0aW9uO1xuICAgICAgfVxuICAgICAgY29uc3QgZHJhZ2dpbmcgPSBnZXREcmFnZ2FibGUoY29tcGxldGVkLmNyaXRpY2FsLCBzdGF0ZS5kaW1lbnNpb25zKTtcblxuICAgICAgcmV0dXJuIGdldE1hcFByb3BzKGlkLCBpc0VuYWJsZWQsIHdoYXRJc0RyYWdnZWRPdmVyRnJvbVJlc3VsdChjb21wbGV0ZWQucmVzdWx0KSA9PT0gaWQsIHdoYXRJc0RyYWdnZWRPdmVyKGNvbXBsZXRlZC5pbXBhY3QpID09PSBpZCwgZHJhZ2dpbmcsIHJlbmRlckNsb25lKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLnBoYXNlID09PSAnSURMRScgJiYgc3RhdGUuY29tcGxldGVkICYmICFzdGF0ZS5zaG91bGRGbHVzaCkge1xuICAgICAgY29uc3QgY29tcGxldGVkID0gc3RhdGUuY29tcGxldGVkO1xuICAgICAgaWYgKCFpc01hdGNoaW5nVHlwZSh0eXBlLCBjb21wbGV0ZWQuY3JpdGljYWwpKSB7XG4gICAgICAgIHJldHVybiBpZGxlV2l0aG91dEFuaW1hdGlvbjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2FzT3ZlciA9IHdoYXRJc0RyYWdnZWRPdmVyKGNvbXBsZXRlZC5pbXBhY3QpID09PSBpZDtcbiAgICAgIGNvbnN0IHdhc0NvbWJpbmluZyA9IEJvb2xlYW4oY29tcGxldGVkLmltcGFjdC5hdCAmJiBjb21wbGV0ZWQuaW1wYWN0LmF0LnR5cGUgPT09ICdDT01CSU5FJyk7XG4gICAgICBjb25zdCBpc0hvbWUgPSBjb21wbGV0ZWQuY3JpdGljYWwuZHJvcHBhYmxlLmlkID09PSBpZDtcbiAgICAgIGlmICh3YXNPdmVyKSB7XG4gICAgICAgIHJldHVybiB3YXNDb21iaW5pbmcgPyBpZGxlV2l0aEFuaW1hdGlvbiA6IGlkbGVXaXRob3V0QW5pbWF0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNIb21lKSB7XG4gICAgICAgIHJldHVybiBpZGxlV2l0aEFuaW1hdGlvbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpZGxlV2l0aG91dEFuaW1hdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gaWRsZVdpdGhvdXRBbmltYXRpb247XG4gIH07XG4gIHJldHVybiBzZWxlY3Rvcjtcbn07XG5jb25zdCBtYXBEaXNwYXRjaFRvUHJvcHMgPSB7XG4gIHVwZGF0ZVZpZXdwb3J0TWF4U2Nyb2xsOiB1cGRhdGVWaWV3cG9ydE1heFNjcm9sbFxufTtcbmZ1bmN0aW9uIGdldEJvZHkoKSB7XG4gICFkb2N1bWVudC5ib2R5ID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gaW52YXJpYW50KGZhbHNlLCAnZG9jdW1lbnQuYm9keSBpcyBub3QgcmVhZHknKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5O1xufVxuY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICBtb2RlOiAnc3RhbmRhcmQnLFxuICB0eXBlOiAnREVGQVVMVCcsXG4gIGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyxcbiAgaXNEcm9wRGlzYWJsZWQ6IGZhbHNlLFxuICBpc0NvbWJpbmVFbmFibGVkOiBmYWxzZSxcbiAgaWdub3JlQ29udGFpbmVyQ2xpcHBpbmc6IGZhbHNlLFxuICByZW5kZXJDbG9uZTogbnVsbCxcbiAgZ2V0Q29udGFpbmVyRm9yQ2xvbmU6IGdldEJvZHlcbn07XG5cbmNvbnN0IENvbm5lY3RlZERyb3BwYWJsZSA9IHJlYWN0UmVkdXguY29ubmVjdChcbm1ha2VNYXBTdGF0ZVRvUHJvcHMsXG5tYXBEaXNwYXRjaFRvUHJvcHMsXG5udWxsLCB7XG4gIGNvbnRleHQ6IFN0b3JlQ29udGV4dCxcbiAgYXJlU3RhdGVQcm9wc0VxdWFsOiBpc1N0cmljdEVxdWFsXG59XG4pKERyb3BwYWJsZSQxKTtcbkNvbm5lY3RlZERyb3BwYWJsZS5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG52YXIgQ29ubmVjdGVkRHJvcHBhYmxlJDEgPSBDb25uZWN0ZWREcm9wcGFibGU7XG5cbmV4cG9ydHMuRHJhZ0Ryb3BDb250ZXh0ID0gRHJhZ0Ryb3BDb250ZXh0O1xuZXhwb3J0cy5EcmFnZ2FibGUgPSBQdWJsaWNEcmFnZ2FibGU7XG5leHBvcnRzLkRyb3BwYWJsZSA9IENvbm5lY3RlZERyb3BwYWJsZSQxO1xuZXhwb3J0cy5yZXNldFNlcnZlckNvbnRleHQgPSByZXNldFNlcnZlckNvbnRleHQ7XG5leHBvcnRzLnVzZUtleWJvYXJkU2Vuc29yID0gdXNlS2V5Ym9hcmRTZW5zb3I7XG5leHBvcnRzLnVzZU1vdXNlU2Vuc29yID0gdXNlTW91c2VTZW5zb3I7XG5leHBvcnRzLnVzZVRvdWNoU2Vuc29yID0gdXNlVG91Y2hTZW5zb3I7XG4iLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCdXR0b24sIEljb24gfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvaW5kZXguanMnO1xuY29uc3QgQWRkTmV3SXRlbUJ1dHRvbiA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHJlc291cmNlLFxuICAgIHByb3BlcnR5LFxuICAgIC4uLmJ0blByb3BzXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZVByb3BlcnR5LFxuICAgIHRyYW5zbGF0ZUJ1dHRvblxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgbGFiZWwgPSB0cmFuc2xhdGVQcm9wZXJ0eShgJHtwcm9wZXJ0eS5wYXRofS5hZGROZXdJdGVtYCwgcmVzb3VyY2UuaWQsIHtcbiAgICBkZWZhdWx0VmFsdWU6IHRyYW5zbGF0ZUJ1dHRvbignYWRkTmV3SXRlbScsIHJlc291cmNlLmlkKVxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJ1dHRvbiwgX2V4dGVuZHMoe1xuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgdmFyaWFudDogXCJvdXRsaW5lZFwiXG4gIH0sIGJ0blByb3BzKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIGljb246IFwiUGx1c1wiXG4gIH0pLCBsYWJlbCk7XG59O1xuZXhwb3J0IGRlZmF1bHQgQWRkTmV3SXRlbUJ1dHRvbjsiLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG5leHBvcnQgbGV0IEVycm9yVHlwZUVudW0gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKEVycm9yVHlwZUVudW0pIHtcbiAgRXJyb3JUeXBlRW51bVtcIkFwcFwiXSA9IFwiQXBwRXJyb3JcIjtcbiAgRXJyb3JUeXBlRW51bVtcIkNvbmZpZ3VyYXRpb25cIl0gPSBcIkNvbmZpZ3VyYXRpb25FcnJvclwiO1xuICBFcnJvclR5cGVFbnVtW1wiRm9yYmlkZGVuXCJdID0gXCJGb3JiaWRkZW5FcnJvclwiO1xuICBFcnJvclR5cGVFbnVtW1wiTm90Rm91bmRcIl0gPSBcIk5vdEZvdW5kRXJyb3JcIjtcbiAgRXJyb3JUeXBlRW51bVtcIk5vdEltcGxlbWVudGVkXCJdID0gXCJOb3RJbXBsZW1lbnRlZEVycm9yXCI7XG4gIEVycm9yVHlwZUVudW1bXCJSZWNvcmRcIl0gPSBcIlJlY29yZEVycm9yXCI7XG4gIEVycm9yVHlwZUVudW1bXCJWYWxpZGF0aW9uXCJdID0gXCJWYWxpZGF0aW9uRXJyb3JcIjtcbiAgcmV0dXJuIEVycm9yVHlwZUVudW07XG59KHt9KTtcbmV4cG9ydCBkZWZhdWx0IEVycm9yVHlwZUVudW07IiwiaW1wb3J0IHsgQm94LCBJY29uLCBUb29sdGlwIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vaG9va3MvaW5kZXguanMnO1xuY29uc3QgUHJvcGVydHlEZXNjcmlwdGlvbiA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHByb3BlcnR5XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHRtXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBpZiAoIXByb3BlcnR5LmRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgZGlyZWN0aW9uID0gcHJvcGVydHkuY3VzdG9tPy50b29sdGlwRGlyZWN0aW9uIHx8ICd0b3AnO1xuICBjb25zdCB0cmFuc2xhdGVkRGVzY3JpcHRpb24gPSB0bShwcm9wZXJ0eS5kZXNjcmlwdGlvbiwgcHJvcGVydHkucmVzb3VyY2VJZCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBteDogXCJzbVwiLFxuICAgIGRpc3BsYXk6IFwiaW5saW5lLWZsZXhcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUb29sdGlwLCB7XG4gICAgZGlyZWN0aW9uOiBkaXJlY3Rpb24sXG4gICAgdGl0bGU6IHRyYW5zbGF0ZWREZXNjcmlwdGlvbixcbiAgICBzaXplOiBcImxnXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgaWNvbjogXCJIZWxwQ2lyY2xlXCIsXG4gICAgY29sb3I6IFwiaW5mb1wiXG4gIH0pKSkpO1xufTtcbmNvbnN0IE92ZXJyaWRhYmxlUHJvcGVydHlEZXNjcmlwdGlvbiA9IGFsbG93T3ZlcnJpZGUoUHJvcGVydHlEZXNjcmlwdGlvbiwgJ1Byb3BlcnR5RGVzY3JpcHRpb24nKTtcbmV4cG9ydCB7IE92ZXJyaWRhYmxlUHJvcGVydHlEZXNjcmlwdGlvbiBhcyBkZWZhdWx0LCBPdmVycmlkYWJsZVByb3BlcnR5RGVzY3JpcHRpb24gYXMgUHJvcGVydHlEZXNjcmlwdGlvbiB9OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQcm9wZXJ0eURlc2NyaXB0aW9uIH0gZnJvbSAnLi4vcHJvcGVydHktZGVzY3JpcHRpb24vaW5kZXguanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vaG9va3MvaW5kZXguanMnO1xuY29uc3QgUHJvcGVydHlMYWJlbCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHByb3BlcnR5LFxuICAgIHByb3BzOiBsYWJlbFByb3BzLFxuICAgIGZpbHRlciA9IGZhbHNlXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZVByb3BlcnR5XG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBpZiAocHJvcGVydHkuaGlkZUxhYmVsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExhYmVsLCBfZXh0ZW5kcyh7XG4gICAgaHRtbEZvcjogZmlsdGVyID8gWydmaWx0ZXInLCBwcm9wZXJ0eS5wYXRoXS5qb2luKCctJykgOiBwcm9wZXJ0eS5wYXRoLFxuICAgIHJlcXVpcmVkOiAhZmlsdGVyICYmIHByb3BlcnR5LmlzUmVxdWlyZWRcbiAgfSwgbGFiZWxQcm9wcyksIHRyYW5zbGF0ZVByb3BlcnR5KHByb3BlcnR5LmxhYmVsLCBwcm9wZXJ0eS5yZXNvdXJjZUlkKSwgcHJvcGVydHkuZGVzY3JpcHRpb24gJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUHJvcGVydHlEZXNjcmlwdGlvbiwge1xuICAgIHByb3BlcnR5OiBwcm9wZXJ0eVxuICB9KSk7XG59O1xuY29uc3QgT3ZlcnJpZGFibGVQcm9wZXJ0eUxhYmVsID0gYWxsb3dPdmVycmlkZShQcm9wZXJ0eUxhYmVsLCAnUHJvcGVydHlMYWJlbCcpO1xuZXhwb3J0IHsgT3ZlcnJpZGFibGVQcm9wZXJ0eUxhYmVsIGFzIGRlZmF1bHQsIE92ZXJyaWRhYmxlUHJvcGVydHlMYWJlbCBhcyBQcm9wZXJ0eUxhYmVsIH07IiwiaW1wb3J0IHsgREVMSU1JVEVSIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvZmxhdC9jb25zdGFudHMuanMnO1xuZXhwb3J0IGNvbnN0IGdldFN1YnByb3BlcnR5UGF0aCA9IChwYXRoLCBpbmRleCkgPT4gW3BhdGgsIGluZGV4XS5qb2luKERFTElNSVRFUik7XG5leHBvcnQgY29uc3QgZ2V0SW5kZXhGcm9tU3VicHJvcGVydHlQYXRoID0gc3VicHJvcGVydHlQYXRoID0+IHtcbiAgY29uc3QgWywgaW5kZXhdID0gc3VicHJvcGVydHlQYXRoLnNwbGl0KERFTElNSVRFUik7XG4gIHJldHVybiBwYXJzZUludChpbmRleCwgMTApO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBwcm9wZXJ0eTogUHJvcGVydHlKU09OIGZyb20gYW4gYXJyYXkgdG8gYSBzdWItcHJvcGVydHkgZm9yIGFuIGFjdHVhbCBpdGVtIGluIHRoZSBhcnJheVxuICogSXQgY2hhbmdlIHBhdGggdGhhdCBpdCBoYXMgaW5kZXggaW5zaWRlIGFsb25nIHdpdGggdGhlIGxhYmVsLiBGdXRoZXJtb3JlIGZsYXQgaXNBcnJheSBpcyByZW1vdmVkXG4gKiAsYmVjYXVzZSBpdCB3YXMgYWxyZWFkeSBoYW5kbGVkLCBzbyB0aGF0IGl0ZW1SZW5kZXJlciBjYW4gcmVuZGVyIHByb3BlcnR5IGFzIGEgcmVndWxhciBvbmVcbiAqXG4gKiBAcGFyYW0ge1Byb3BlcnR5SlNPTn0gIGFycmF5UHJvcGVydHkgcHJvcGVydHkgd2l0aCBwYXRoIHNldCB0byBhbiByb290IEFycmF5IHR5cGUgcHJvcGVydHksXG4gKiBAcGFyYW0ge051bWJlcn0gICAgICAgIGluZGV4ICAgICAgICAgaW5kZXggdW5kZXIgd2hpY2ggc3ViLXByb3BlcnR5IHNob3VsZCBiZSBwbGFjZWRcbiAqIEBwcml2YXRlXG4gKiBAaGlkZVxuICovXG5leHBvcnQgY29uc3QgY29udmVydFRvU3ViUHJvcGVydHkgPSAoYXJyYXlQcm9wZXJ0eSwgaW5kZXgpID0+ICh7XG4gIC4uLmFycmF5UHJvcGVydHksXG4gIHBhdGg6IGdldFN1YnByb3BlcnR5UGF0aChhcnJheVByb3BlcnR5LnBhdGgsIGluZGV4KSxcbiAgbGFiZWw6IGBbJHtpbmRleCArIDF9XWAsXG4gIGlzQXJyYXk6IGZhbHNlLFxuICBpc0RyYWdnYWJsZTogZmFsc2Vcbn0pOyIsImltcG9ydCB7IGZsYXQgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9pbmRleC5qcyc7XG4vKipcbiAqIFJlbW92ZXMgc2VsZWN0ZWQgYXJyYXkgaXRlbSBmcm9tIGdpdmVuIHJlY29yZC4gSXQgcGVyZm9ybXMgZm9sbG93aW5nIHRhc2tzOlxuICogMS4gcmVtb3ZlcyBhcnJheSBpdGVtIGZyb20gdGhlIGFycmF5XG4gKiAyLiByZW9yZGVycyBrZXlzIGluIG5ldyBhcnJheSBpdGVtXG4gKiAzLiBpZiBwcm9wZXJ0eSBoYXMgcG9wdWxhdGVkIGZpZWxkcyBpdCBhbHNvIHJlb3JkZXJzIHRoZW1cbiAqIGl0IHVzZXMge0BsaW5rIGZsYXQgfSBtb2R1bGUgYW5kIGl0cyByZW1vdmVQYXRoIG1ldGhvZFxuICpcbiAqIEBwYXJhbSB7UmVjb3JkSlNPTn0gcmVjb3JkXG4gKiBAcGFyYW0ge3N0cmluZ30gICAgIHN1YlByb3BlcnR5UGF0aCAgICAgICAgICAgIHdoaWNoIGhhcyB0byBiZSByZW1vdmVkLiBJdCBoYXMgdG8gYmUgZmxhdHRlbmVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG5vdGF0aW9uLCBhbmQgZW5kaW5nIHdpdGggYXJyYXkgaW5kZXhcbiAqIEBwcml2YXRlXG4gKiBAaGlkZVxuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlU3ViUHJvcGVydHkgPSAocmVjb3JkLCBzdWJQcm9wZXJ0eVBhdGgpID0+IHtcbiAgLy8gYnkgZGVmYXVsdCBwb3B1bGF0ZWQgaXMgZmxhdHRlbiBqdXN0IHRvIHRoZSBwYXRoIGxldmVsIC0gb2JqZWN0IGl0c2VsZiBpcyBub3QgZmxhdHRlbi4gVGhhdCBpc1xuICAvLyB3aHkgd2UgaGF2ZSB0byByZXRyaWV2ZSB0aGUgb3JpZ2luYWwgc3RhdGUuIFRoYXQgaXMgd2h5IHdlIGhhdmUgdG8gcmVwbGFjZSByZWNvcmQucG9wdWxhdGVkIHRvXG4gIC8vIGZyb20geyAnc29tZS5uZXN0ZWQuMS5rZXknOiBSZWNvcmRKU09OIH0gdG8geyAnc29tZS5uZXN0ZWQuMS5rZXknOiAnc29tZS5uZXN0ZWQuMS5rZXknIH0sXG4gIC8vIHRoZW4gcmVtb3ZlIGtleXMsIGFuZCByZWZpbGwgYmFjayBzb21lLm5lc3RlZC4xLmtleSB0byB0aGUgdmFsdWUgZnJvbSB0aGUgb3JpZ2luYWwgcG9wdWxhdGVkXG4gIC8vIG9iamVjdC5cbiAgY29uc3QgcG9wdWxhdGVkS2V5TWFwID0gT2JqZWN0LmtleXMocmVjb3JkLnBvcHVsYXRlZCkucmVkdWNlKChtZW1vLCBwcm9wZXJ0eUtleSkgPT4gKHtcbiAgICAuLi5tZW1vLFxuICAgIFtwcm9wZXJ0eUtleV06IHByb3BlcnR5S2V5XG4gIH0pLCB7fSk7XG4gIGNvbnN0IG5ld1BvcHVsYXRlZEtleU1hcCA9IGZsYXQucmVtb3ZlUGF0aChwb3B1bGF0ZWRLZXlNYXAsIHN1YlByb3BlcnR5UGF0aCk7XG4gIGNvbnN0IG5ld1BvcHVsYXRlZCA9IE9iamVjdC5lbnRyaWVzKG5ld1BvcHVsYXRlZEtleU1hcCkucmVkdWNlKChtZW1vLCBbbmV3UHJvcGVydHlLZXksIG9sZFByb3BlcnR5S2V5XSkgPT4gKHtcbiAgICAuLi5tZW1vLFxuICAgIFtuZXdQcm9wZXJ0eUtleV06IG9sZFByb3BlcnR5S2V5ICYmIHJlY29yZC5wb3B1bGF0ZWRbb2xkUHJvcGVydHlLZXk/LnRvU3RyaW5nKCldXG4gIH0pLCB7fSk7XG4gIHJldHVybiB7XG4gICAgLi4ucmVjb3JkLFxuICAgIHBhcmFtczogZmxhdC5yZW1vdmVQYXRoKHJlY29yZC5wYXJhbXMsIHN1YlByb3BlcnR5UGF0aCksXG4gICAgcG9wdWxhdGVkOiBuZXdQb3B1bGF0ZWRcbiAgfTtcbn07IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCdXR0b24sIFNlY3Rpb24sIEZvcm1Hcm91cCwgRm9ybU1lc3NhZ2UsIEljb24sIEJveCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgRHJhZ0Ryb3BDb250ZXh0LCBEcm9wcGFibGUsIERyYWdnYWJsZSB9IGZyb20gJ0BoZWxsby1wYW5nZWEvZG5kJztcbmltcG9ydCBBZGROZXdJdGVtQnV0dG9uIGZyb20gJy4vYWRkLW5ldy1pdGVtLXRyYW5zbGF0aW9uLmpzJztcbmltcG9ydCB7IGZsYXQgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgeyBQcm9wZXJ0eUxhYmVsIH0gZnJvbSAnLi4vdXRpbHMvcHJvcGVydHktbGFiZWwvaW5kZXguanMnO1xuaW1wb3J0IHsgY29udmVydFRvU3ViUHJvcGVydHkgfSBmcm9tICcuL2NvbnZlcnQtdG8tc3ViLXByb3BlcnR5LmpzJztcbmltcG9ydCB7IHJlbW92ZVN1YlByb3BlcnR5IH0gZnJvbSAnLi9yZW1vdmUtc3ViLXByb3BlcnR5LmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL2luZGV4LmpzJztcbmNvbnN0IEl0ZW1SZW5kZXJlciA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIEl0ZW1Db21wb25lbnQsXG4gICAgcHJvcGVydHksXG4gICAgb25EZWxldGUsXG4gICAgaW5kZXgsXG4gICAgcmVjb3JkLFxuICAgIGlzRHJhZ2dhYmxlXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgdW5pcXVlRHJhZ2dhYmxlSWQgPSB3aW5kb3cuYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYCR7SlNPTi5zdHJpbmdpZnkoZmxhdC5nZXQocmVjb3JkLnBhcmFtcywgcHJvcGVydHkucGF0aCkpfS0ke3Byb3BlcnR5LnBhdGh9YCkpKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyYWdnYWJsZSwge1xuICAgIGRyYWdnYWJsZUlkOiB1bmlxdWVEcmFnZ2FibGVJZCxcbiAgICBpbmRleDogaW5kZXgsXG4gICAga2V5OiB1bmlxdWVEcmFnZ2FibGVJZCxcbiAgICBpc0RyYWdEaXNhYmxlZDogIWlzRHJhZ2dhYmxlXG4gIH0sIHByb3ZpZGVkID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwgX2V4dGVuZHMoe1xuICAgIGFzOiBcImRpdlwiLFxuICAgIHJlZjogcHJvdmlkZWQuaW5uZXJSZWZcbiAgfSwgcHJvdmlkZWQuZHJhZ2dhYmxlUHJvcHMsIHByb3ZpZGVkLmRyYWdIYW5kbGVQcm9wcywge1xuICAgIGJhY2tncm91bmRDb2xvcjogXCJ3aGl0ZVwiLFxuICAgIGZsZXg6IHRydWUsXG4gICAgZmxleERpcmVjdGlvbjogXCJyb3dcIixcbiAgICBhbGlnbkl0ZW1zOiBcInN0YXJ0XCIsXG4gICAgdmFyaWFudDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIFwiZGF0YS10ZXN0aWRcIjogcHJvcGVydHkucGF0aFxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgYXM6IFwiZGl2XCIsXG4gICAgZmxleEdyb3c6IDFcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSXRlbUNvbXBvbmVudCwgcHJvcHMpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7XG4gICAgcm91bmRlZDogdHJ1ZSxcbiAgICBtdDogXCJ4bFwiLFxuICAgIG1sOiBcImRlZmF1bHRcIixcbiAgICBcImRhdGEtdGVzdGlkXCI6IFwiZGVsZXRlLWl0ZW1cIixcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIHNpemU6IFwiaWNvblwiLFxuICAgIG9uQ2xpY2s6IGV2ZW50ID0+IG9uRGVsZXRlKGV2ZW50LCBwcm9wZXJ0eSksXG4gICAgdmFyaWFudDogXCJ0ZXh0XCIsXG4gICAgY29sb3I6IFwiZGFuZ2VyXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIGljb246IFwiVHJhc2gyXCJcbiAgfSkpKSk7XG59O1xuY29uc3QgSW5wdXRzSW5TZWN0aW9uID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcHJvcGVydHksXG4gICAgcmVjb3JkLFxuICAgIHJlc291cmNlLFxuICAgIG9uQ2hhbmdlXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgaXRlbXMgPSBmbGF0LmdldChyZWNvcmQucGFyYW1zLCBwcm9wZXJ0eS5wYXRoKSB8fCBbXTtcbiAgY29uc3QgYWRkTmV3ID0gdXNlQ2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLml0ZW1zLCBwcm9wZXJ0eS5zdWJQcm9wZXJ0aWVzLmxlbmd0aCA/IHt9IDogJyddO1xuICAgIG9uQ2hhbmdlKHByb3BlcnR5LnBhdGgsIG5ld0l0ZW1zKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSwgW3JlY29yZCwgb25DaGFuZ2UsIHByb3BlcnR5XSk7XG4gIGNvbnN0IHJlbW92ZUl0ZW0gPSB1c2VDYWxsYmFjaygoZXZlbnQsIHN1YlByb3BlcnR5KSA9PiB7XG4gICAgY29uc3QgbmV3UmVjb3JkID0gcmVtb3ZlU3ViUHJvcGVydHkocmVjb3JkLCBzdWJQcm9wZXJ0eS5wYXRoKTtcbiAgICBvbkNoYW5nZShuZXdSZWNvcmQpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBbcmVjb3JkLCBvbkNoYW5nZSwgcHJvcGVydHldKTtcbiAgY29uc3QgaGFuZGxlT25EcmFnRW5kID0gdXNlQ2FsbGJhY2socmVzdWx0ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzb3VyY2UsXG4gICAgICBkZXN0aW5hdGlvblxuICAgIH0gPSByZXN1bHQ7XG4gICAgaWYgKCFzb3VyY2UgfHwgIWRlc3RpbmF0aW9uIHx8IGRlc3RpbmF0aW9uLmluZGV4ID09PSBzb3VyY2UuaW5kZXgpIHJldHVybjtcbiAgICBjb25zdCBpdGVtc0NvcHkgPSBBcnJheS5mcm9tKGl0ZW1zKTtcbiAgICBjb25zdCBbc291cmNlSXRlbV0gPSBpdGVtc0NvcHkuc3BsaWNlKHNvdXJjZS5pbmRleCwgMSk7XG4gICAgaXRlbXNDb3B5LnNwbGljZShkZXN0aW5hdGlvbi5pbmRleCwgMCwgc291cmNlSXRlbSk7XG4gICAgb25DaGFuZ2UocHJvcGVydHkucGF0aCwgaXRlbXNDb3B5KTtcbiAgfSwgW3JlY29yZCwgb25DaGFuZ2UsIHByb3BlcnR5XSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEcmFnRHJvcENvbnRleHQsIHtcbiAgICBvbkRyYWdFbmQ6IGhhbmRsZU9uRHJhZ0VuZFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEcm9wcGFibGUsIHtcbiAgICBkcm9wcGFibGVJZDogcHJvcGVydHkucGF0aFxuICB9LCBwcm92aWRlZCA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTZWN0aW9uLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiBwcm92aWRlZC5pbm5lclJlZlxuICB9LCBwcm92aWRlZC5kcm9wcGFibGVQcm9wcywge1xuICAgIG10OiBcInhsXCIsXG4gICAgY2xhc3NOYW1lOiBwcm9wZXJ0eS5wYXRoXG4gIH0pLCBpdGVtcy5tYXAoKGl0ZW0sIGkpID0+IHtcbiAgICBjb25zdCBpdGVtUHJvcGVydHkgPSBjb252ZXJ0VG9TdWJQcm9wZXJ0eShwcm9wZXJ0eSwgaSk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEl0ZW1SZW5kZXJlciwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICBwcm9wZXJ0eTogaXRlbVByb3BlcnR5LFxuICAgICAgaXNEcmFnZ2FibGU6IHByb3BlcnR5LmlzRHJhZ2dhYmxlLFxuICAgICAga2V5OiBpdGVtUHJvcGVydHkucGF0aCxcbiAgICAgIG9uRGVsZXRlOiByZW1vdmVJdGVtLFxuICAgICAgaW5kZXg6IGlcbiAgICB9KSk7XG4gIH0pLCBwcm92aWRlZC5wbGFjZWhvbGRlciwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQWRkTmV3SXRlbUJ1dHRvbiwge1xuICAgIHJlc291cmNlOiByZXNvdXJjZSxcbiAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgb25DbGljazogYWRkTmV3LFxuICAgIFwiZGF0YS10ZXN0aWRcIjogYCR7cHJvcGVydHkucGF0aH0tYWRkYFxuICB9KSkpKTtcbn07XG5jb25zdCBFZGl0ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcHJvcGVydHksXG4gICAgcmVjb3JkLFxuICAgIHRlc3RJZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICB0bVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgZXJyb3IgPSByZWNvcmQuZXJyb3JzICYmIHJlY29yZC5lcnJvcnNbcHJvcGVydHkucHJvcGVydHlQYXRoXTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Hcm91cCwge1xuICAgIGVycm9yOiAhIWVycm9yLFxuICAgIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5TGFiZWwsIHtcbiAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KElucHV0c0luU2VjdGlvbiwgcHJvcHMpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtTWVzc2FnZSwgbnVsbCwgZXJyb3IgJiYgdG0oZXJyb3IubWVzc2FnZSwgcHJvcGVydHkucmVzb3VyY2VJZCkpKTtcbn07XG5jb25zdCBPdmVycmlkYWJsZUVkaXQgPSBhbGxvd092ZXJyaWRlKEVkaXQsICdEZWZhdWx0QXJyYXlFZGl0UHJvcGVydHknKTtcbmV4cG9ydCB7IE92ZXJyaWRhYmxlRWRpdCBhcyBkZWZhdWx0LCBPdmVycmlkYWJsZUVkaXQgYXMgRWRpdCB9OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZS10cmFuc2xhdGlvbi5qcyc7XG5pbXBvcnQgeyBmbGF0IH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmNvbnN0IExpc3QgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcm9wZXJ0eSxcbiAgICByZWNvcmRcbiAgfSA9IHByb3BzO1xuICBjb25zdCB2YWx1ZXMgPSBmbGF0LmdldChyZWNvcmQucGFyYW1zLCBwcm9wZXJ0eS5wYXRoKSB8fCBbXTtcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZVByb3BlcnR5XG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIGAke3RyYW5zbGF0ZVByb3BlcnR5KCdsZW5ndGgnKX06ICR7dmFsdWVzLmxlbmd0aH1gKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKExpc3QsICdEZWZhdWx0QXJyYXlMaXN0UHJvcGVydHknKTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTZWN0aW9uLCBWYWx1ZUdyb3VwIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBmbGF0IH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IHsgY29udmVydFRvU3ViUHJvcGVydHkgfSBmcm9tICcuL2NvbnZlcnQtdG8tc3ViLXByb3BlcnR5LmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL2luZGV4LmpzJztcbmNvbnN0IFNob3cgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcm9wZXJ0eSxcbiAgICByZWNvcmQsXG4gICAgSXRlbUNvbXBvbmVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICB0cmFuc2xhdGVQcm9wZXJ0eVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgaXRlbXMgPSBmbGF0LmdldChyZWNvcmQucGFyYW1zLCBwcm9wZXJ0eS5wYXRoKSB8fCBbXTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFZhbHVlR3JvdXAsIHtcbiAgICBsYWJlbDogdHJhbnNsYXRlUHJvcGVydHkocHJvcGVydHkubGFiZWwsIHByb3BlcnR5LnJlc291cmNlSWQpXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb24sIG51bGwsIChpdGVtcyB8fCBbXSkubWFwKChpdGVtLCBpKSA9PiB7XG4gICAgY29uc3QgaXRlbVByb3BlcnR5ID0gY29udmVydFRvU3ViUHJvcGVydHkocHJvcGVydHksIGkpO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJdGVtQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIGtleTogaXRlbVByb3BlcnR5LnBhdGgsXG4gICAgICBwcm9wZXJ0eTogaXRlbVByb3BlcnR5XG4gICAgfSkpO1xuICB9KSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGFsbG93T3ZlcnJpZGUoU2hvdywgJ0RlZmF1bHRBcnJheVNob3dQcm9wZXJ0eScpOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTZWN0aW9uLCBGb3JtR3JvdXAsIEZvcm1NZXNzYWdlLCBCdXR0b24sIElucHV0LCBCb3gsIEljb24gfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IFByb3BlcnR5TGFiZWwgfSBmcm9tICcuLi91dGlscy9wcm9wZXJ0eS1sYWJlbC9pbmRleC5qcyc7XG5pbXBvcnQgeyBmbGF0IH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvZmxhdC9pbmRleC5qcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZS10cmFuc2xhdGlvbi5qcyc7XG5jb25zdCBFZGl0S2V5VmFsdWVQYWlyID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgb25LZXlDaGFuZ2UsXG4gICAgb25WYWx1ZUNoYW5nZSxcbiAgICBvblJlbW92ZUl0ZW0sXG4gICAgcHJvcGVydHksXG4gICAgb2JqZWN0VmFsdWUsXG4gICAgb2JqZWN0S2V5LFxuICAgIGVycm9yXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHRtXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBbY3VycmVudFZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZShvYmplY3RWYWx1ZSA/PyAnJyk7XG4gIGNvbnN0IFtjdXJyZW50S2V5LCBzZXRLZXldID0gdXNlU3RhdGUob2JqZWN0S2V5ID8/ICcnKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIGZsZXg6IHRydWUsXG4gICAgbWI6IFwibGdcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBmbGV4OiB0cnVlLFxuICAgIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIixcbiAgICBmbGV4R3JvdzogMSxcbiAgICBmbGV4U2hyaW5rOiAwXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Hcm91cCwge1xuICAgIGVycm9yOiBCb29sZWFuKGVycm9yKSxcbiAgICBtcjogXCJsZ1wiLFxuICAgIG1iOiBcIjBweFwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KElucHV0LCBfZXh0ZW5kcyh7XG4gICAgcGxhY2Vob2xkZXI6IHRtKCdrZXlQbGFjZWhvbGRlcicpLFxuICAgIG9uQ2hhbmdlOiBlID0+IHNldEtleShlLnRhcmdldC52YWx1ZSksXG4gICAgb25CbHVyOiAoKSA9PiBvbktleUNoYW5nZShvYmplY3RLZXksIGN1cnJlbnRLZXkpLFxuICAgIG9uS2V5RG93bjogZSA9PiBlLmtleUNvZGUgPT09IDEzICYmIG9uS2V5Q2hhbmdlKG9iamVjdEtleSwgY3VycmVudEtleSksXG4gICAgdmFsdWU6IGN1cnJlbnRLZXlcbiAgfSwgcHJvcGVydHkucHJvcHM/LmtleUlucHV0UHJvcHMgPz8ge30pKSwgZXJyb3IgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9ybU1lc3NhZ2UsIG51bGwsIHRtKGVycm9yLm1lc3NhZ2UsIHByb3BlcnR5LnJlc291cmNlSWQpKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Hcm91cCwge1xuICAgIG1iOiBcIjBweFwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KElucHV0LCBfZXh0ZW5kcyh7XG4gICAgcGxhY2Vob2xkZXI6IHRtKCd2YWx1ZVBsYWNlaG9sZGVyJyksXG4gICAgb25DaGFuZ2U6IGUgPT4gc2V0VmFsdWUoZS50YXJnZXQudmFsdWUpLFxuICAgIG9uQmx1cjogKCkgPT4gb25WYWx1ZUNoYW5nZShjdXJyZW50S2V5LCBjdXJyZW50VmFsdWUpLFxuICAgIG9uS2V5RG93bjogZSA9PiBlLmtleUNvZGUgPT09IDEzICYmIG9uVmFsdWVDaGFuZ2UoY3VycmVudEtleSwgY3VycmVudFZhbHVlKSxcbiAgICB2YWx1ZTogY3VycmVudFZhbHVlLFxuICAgIGRpc2FibGVkOiAhb2JqZWN0S2V5XG4gIH0sIHByb3BlcnR5LnByb3BzPy52YWx1ZUlucHV0UHJvcHMgPz8ge30pKSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHtcbiAgICByb3VuZGVkOiB0cnVlLFxuICAgIG1sOiBcInNtXCIsXG4gICAgXCJkYXRhLXRlc3RpZFwiOiBcImRlbGV0ZS1pdGVtXCIsXG4gICAgdHlwZTogXCJidXR0b25cIixcbiAgICBzaXplOiBcImljb25cIixcbiAgICBvbkNsaWNrOiAoKSA9PiBvblJlbW92ZUl0ZW0oY3VycmVudEtleSksXG4gICAgdmFyaWFudDogXCJjb250YWluZWRcIixcbiAgICBjb2xvcjogXCJkYW5nZXJcIixcbiAgICBmbGV4R3JvdzogMCxcbiAgICBmbGV4U2hyaW5rOiAxXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICBpY29uOiBcIlRyYXNoMlwiXG4gIH0pKSk7XG59O1xuY29uc3QgRWRpdCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHByb3BlcnR5LFxuICAgIHJlY29yZCxcbiAgICBvbkNoYW5nZSxcbiAgICByZXNvdXJjZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICB0bSxcbiAgICB0YlxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgW29iamVjdFZhbHVlLCBzZXRPYmplY3RWYWx1ZV0gPSB1c2VTdGF0ZShmbGF0LmdldChyZWNvcmQucGFyYW1zLCBwcm9wZXJ0eS5wYXRoKSA/PyB7fSk7XG4gIGNvbnN0IGhhbmRsZUtleUNoYW5nZSA9IChvbGRLZXksIG5ld0tleSkgPT4ge1xuICAgIGlmIChvbGRLZXkgPT09IG5ld0tleSkgcmV0dXJuO1xuICAgIGNvbnN0IHRtcFZhbHVlID0gb2JqZWN0VmFsdWVbb2xkS2V5XTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7XG4gICAgICBbb2xkS2V5XTogX3JlbW92ZWRLZXksXG4gICAgICAuLi5vYmplY3RDb3B5XG4gICAgfSA9IG9iamVjdFZhbHVlO1xuICAgIG9iamVjdENvcHlbbmV3S2V5XSA9IHRtcFZhbHVlID8/ICcnO1xuICAgIHNldE9iamVjdFZhbHVlKHBhcnNlT2JqZWN0VmFsdWUob2JqZWN0Q29weSkpO1xuICB9O1xuICBjb25zdCBoYW5kbGVWYWx1ZUNoYW5nZSA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgb2JqZWN0VmFsdWVba2V5XSA9IHZhbHVlO1xuICAgIHNldE9iamVjdFZhbHVlKHBhcnNlT2JqZWN0VmFsdWUoe1xuICAgICAgLi4ub2JqZWN0VmFsdWVcbiAgICB9KSk7XG4gIH07XG4gIGNvbnN0IHBhcnNlT2JqZWN0VmFsdWUgPSBvYmogPT4gT2JqZWN0LmVudHJpZXMob2JqKS5yZWR1Y2UoKG1lbW8sIFtrLCB2XSkgPT4ge1xuICAgIGlmICghayB8fCAhay5sZW5ndGgpIHJldHVybiBtZW1vO1xuICAgIG1lbW9ba10gPSB2O1xuICAgIHJldHVybiBtZW1vO1xuICB9LCB7fSk7XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgdXNlZCB0byBwcmV2ZW50IGVtcHR5L2R1cGxpY2F0ZSBrZXlzIGZyb20gYmVpbmcgYWRkZWQgdG8gSlNPTlxuICAgKi9cbiAgY29uc3QgZ2V0TmV4dEtleSA9IHByZXZpb3VzSWQgPT4ge1xuICAgIGNvbnN0IG5leHRJZCA9IHByZXZpb3VzSWQgPyBwcmV2aW91c0lkICsgMSA6IE9iamVjdC5rZXlzKG9iamVjdFZhbHVlID8/IHt9KS5sZW5ndGggKyAxO1xuICAgIGNvbnN0IG5leHRLZXkgPSBgJHt0bSgnaW5pdGlhbEtleScsIHJlc291cmNlLmlkLCB7XG4gICAgICBudW1iZXI6IG5leHRJZFxuICAgIH0pfWA7XG4gICAgaWYgKG9iamVjdFZhbHVlW25leHRLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBnZXROZXh0S2V5KG5leHRJZCk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0S2V5O1xuICB9O1xuICBjb25zdCBhZGROZXdLZXlWYWx1ZVBhaXIgPSBldmVudCA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBrZXkgPSBnZXROZXh0S2V5KCk7XG4gICAgb2JqZWN0VmFsdWVba2V5XSA9ICcnO1xuICAgIHNldE9iamVjdFZhbHVlKHBhcnNlT2JqZWN0VmFsdWUoe1xuICAgICAgLi4ub2JqZWN0VmFsdWVcbiAgICB9KSk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZVJlbW92ZUl0ZW0gPSBrZXkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7XG4gICAgICBba2V5XTogX3JlbW92ZWRLZXksXG4gICAgICAuLi5vYmplY3RDb3B5XG4gICAgfSA9IG9iamVjdFZhbHVlO1xuICAgIHNldE9iamVjdFZhbHVlKHBhcnNlT2JqZWN0VmFsdWUob2JqZWN0Q29weSkpO1xuICB9O1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIG9uQ2hhbmdlKHByb3BlcnR5LnBhdGgsIG9iamVjdFZhbHVlKTtcbiAgfSwgW29iamVjdFZhbHVlXSk7XG4gIGNvbnN0IGVycm9yID0gcmVjb3JkLmVycm9ycyAmJiByZWNvcmQuZXJyb3JzW3Byb3BlcnR5LnBhdGhdO1xuICBpZiAocHJvcGVydHkuZGVzY3JpcHRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgIHByb3BlcnR5LmRlc2NyaXB0aW9uID0gdG0oJ2tleVZhbHVlUHJvcGVydHlEZWZhdWx0RGVzY3JpcHRpb24nLCByZXNvdXJjZS5pZCk7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Hcm91cCwge1xuICAgIGVycm9yOiAhIWVycm9yXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5TGFiZWwsIHtcbiAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb24sIHByb3BlcnR5LnByb3BzLCBPYmplY3QuZW50cmllcyhvYmplY3RWYWx1ZSkubWFwKChba2V5LCB2YWx1ZV0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEVkaXRLZXlWYWx1ZVBhaXIsIHtcbiAgICBrZXk6IGtleSxcbiAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgb2JqZWN0VmFsdWU6IHZhbHVlLFxuICAgIG9iamVjdEtleToga2V5LFxuICAgIG9uS2V5Q2hhbmdlOiBoYW5kbGVLZXlDaGFuZ2UsXG4gICAgb25WYWx1ZUNoYW5nZTogaGFuZGxlVmFsdWVDaGFuZ2UsXG4gICAgb25SZW1vdmVJdGVtOiBoYW5kbGVSZW1vdmVJdGVtLFxuICAgIGVycm9yOiByZWNvcmQuZXJyb3JzW2Ake3Byb3BlcnR5LnBhdGh9JHtmbGF0LkRFTElNSVRFUn0ke2tleX1gXVxuICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJ1dHRvbiwge1xuICAgIG10OiBcImxnXCIsXG4gICAgb25DbGljazogYWRkTmV3S2V5VmFsdWVQYWlyXG4gIH0sIHRiKCdhZGROZXdJdGVtJywgcmVzb3VyY2UuaWQpKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1NZXNzYWdlLCBudWxsLCBlcnJvciAmJiB0bShlcnJvci5tZXNzYWdlLCBwcm9wZXJ0eS5yZXNvdXJjZUlkKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IEVkaXQ7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFNlY3Rpb24sIEZvcm1Hcm91cCwgSW5wdXQsIEJveCwgVmFsdWVHcm91cCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgZmxhdCB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL2ZsYXQvaW5kZXguanMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2UtdHJhbnNsYXRpb24uanMnO1xuY29uc3QgU2hvd0tleVZhbHVlUGFpciA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIG9iamVjdFZhbHVlLFxuICAgIG9iamVjdEtleVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICB0bVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIGZsZXg6IHRydWUsXG4gICAgbWI6IFwibGdcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtR3JvdXAsIHtcbiAgICBtcjogXCJsZ1wiLFxuICAgIG1iOiBcIjBweFwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KElucHV0LCB7XG4gICAgcGxhY2Vob2xkZXI6IHRtKCdrZXlQbGFjZWhvbGRlcicpLFxuICAgIHZhbHVlOiBvYmplY3RLZXksXG4gICAgZGlzYWJsZWQ6IHRydWVcbiAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtR3JvdXAsIHtcbiAgICBtYjogXCIwcHhcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnB1dCwge1xuICAgIHBsYWNlaG9sZGVyOiB0bSgndmFsdWVQbGFjZWhvbGRlcicpLFxuICAgIHZhbHVlOiBvYmplY3RWYWx1ZSxcbiAgICBkaXNhYmxlZDogdHJ1ZVxuICB9KSkpO1xufTtcbmNvbnN0IFNob3cgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcm9wZXJ0eSxcbiAgICByZWNvcmRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBvYmplY3RWYWx1ZSA9IGZsYXQuZ2V0KHJlY29yZC5wYXJhbXMsIHByb3BlcnR5LnBhdGgpID8/IHt9O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVmFsdWVHcm91cCwge1xuICAgIGxhYmVsOiBwcm9wZXJ0eS5sYWJlbFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTZWN0aW9uLCBudWxsLCBPYmplY3QuZW50cmllcyhvYmplY3RWYWx1ZSkubWFwKChba2V5LCB2YWx1ZV0pID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNob3dLZXlWYWx1ZVBhaXIsIHtcbiAgICBrZXk6IGtleSxcbiAgICBvYmplY3RWYWx1ZTogdmFsdWUsXG4gICAgb2JqZWN0S2V5OiBrZXlcbiAgfSkpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgU2hvdzsiLCJpbXBvcnQgeyBERUxJTUlURVIgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9mbGF0L2NvbnN0YW50cy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvU3ViUHJvcGVydHkocHJvcGVydHksIHN1YlByb3BlcnR5KSB7XG4gIGNvbnN0IFtzdWJQcm9wZXJ0eVBhdGhdID0gc3ViUHJvcGVydHkubmFtZS5zcGxpdChERUxJTUlURVIpLnNsaWNlKC0xKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdWJQcm9wZXJ0eSxcbiAgICBwYXRoOiBbcHJvcGVydHkucGF0aCwgc3ViUHJvcGVydHlQYXRoXS5qb2luKERFTElNSVRFUilcbiAgfTtcbn0iLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTZWN0aW9uLCBGb3JtR3JvdXAsIEZvcm1NZXNzYWdlIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBQcm9wZXJ0eUxhYmVsIH0gZnJvbSAnLi4vdXRpbHMvcHJvcGVydHktbGFiZWwvaW5kZXguanMnO1xuaW1wb3J0IHsgY29udmVydFRvU3ViUHJvcGVydHkgfSBmcm9tICcuL2NvbnZlcnQtdG8tc3ViLXByb3BlcnR5LmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL2luZGV4LmpzJztcbmNvbnN0IEVkaXQgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcm9wZXJ0eSxcbiAgICByZWNvcmQsXG4gICAgSXRlbUNvbXBvbmVudFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGVycm9yID0gcmVjb3JkLmVycm9ycyAmJiByZWNvcmQuZXJyb3JzW3Byb3BlcnR5LnBhdGhdO1xuICBjb25zdCB7XG4gICAgdG1cbiAgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtR3JvdXAsIHtcbiAgICBlcnJvcjogISFlcnJvclxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQcm9wZXJ0eUxhYmVsLCB7XG4gICAgcHJvcGVydHk6IHByb3BlcnR5XG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTZWN0aW9uLCBwcm9wZXJ0eS5wcm9wcywgcHJvcGVydHkuc3ViUHJvcGVydGllcy5maWx0ZXIoc3ViUHJvcGVydHkgPT4gIXN1YlByb3BlcnR5LmlzSWQpLm1hcChzdWJQcm9wZXJ0eSA9PiB7XG4gICAgY29uc3Qgc3ViUHJvcGVydHlXaXRoUGF0aCA9IGNvbnZlcnRUb1N1YlByb3BlcnR5KHByb3BlcnR5LCBzdWJQcm9wZXJ0eSk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEl0ZW1Db21wb25lbnQsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAga2V5OiBzdWJQcm9wZXJ0eVdpdGhQYXRoLnBhdGgsXG4gICAgICBwcm9wZXJ0eTogc3ViUHJvcGVydHlXaXRoUGF0aFxuICAgIH0pKTtcbiAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtTWVzc2FnZSwgbnVsbCwgZXJyb3IgJiYgdG0oZXJyb3IubWVzc2FnZSwgcHJvcGVydHkucmVzb3VyY2VJZCkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKEVkaXQsICdEZWZhdWx0TWl4ZWRFZGl0UHJvcGVydHknKTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTZWN0aW9uLCBWYWx1ZUdyb3VwIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBjb252ZXJ0VG9TdWJQcm9wZXJ0eSB9IGZyb20gJy4vY29udmVydC10by1zdWItcHJvcGVydHkuanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvaW5kZXguanMnO1xuY29uc3QgU2hvdyA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHByb3BlcnR5LFxuICAgIEl0ZW1Db21wb25lbnRcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgdHJhbnNsYXRlUHJvcGVydHlcbiAgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChWYWx1ZUdyb3VwLCB7XG4gICAgbGFiZWw6IHRyYW5zbGF0ZVByb3BlcnR5KHByb3BlcnR5LmxhYmVsLCBwcm9wZXJ0eS5yZXNvdXJjZUlkKVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTZWN0aW9uLCBudWxsLCBwcm9wZXJ0eS5zdWJQcm9wZXJ0aWVzLmZpbHRlcihzdWJQcm9wZXJ0eSA9PiAhc3ViUHJvcGVydHkuaXNJZCkubWFwKHN1YlByb3BlcnR5ID0+IHtcbiAgICBjb25zdCBzdWJQcm9wZXJ0eVdpdGhQYXRoID0gY29udmVydFRvU3ViUHJvcGVydHkocHJvcGVydHksIHN1YlByb3BlcnR5KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSXRlbUNvbXBvbmVudCwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICBrZXk6IHN1YlByb3BlcnR5V2l0aFBhdGgucGF0aCxcbiAgICAgIHByb3BlcnR5OiBzdWJQcm9wZXJ0eVdpdGhQYXRoXG4gICAgfSkpO1xuICB9KSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGFsbG93T3ZlcnJpZGUoU2hvdywgJ0RlZmF1bHRNaXhlZFNob3dQcm9wZXJ0eScpOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgVmlld0hlbHBlcnMgZnJvbSAnLi4vLi4vLi4vLi4vYmFja2VuZC91dGlscy92aWV3LWhlbHBlcnMvdmlldy1oZWxwZXJzLmpzJztcbmltcG9ydCB7IGNvbnZlcnRUb1N1YlByb3BlcnR5IH0gZnJvbSAnLi9jb252ZXJ0LXRvLXN1Yi1wcm9wZXJ0eS5qcyc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuY29uc3QgTGlzdCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHByb3BlcnR5LFxuICAgIHJlY29yZCxcbiAgICByZXNvdXJjZSxcbiAgICBJdGVtQ29tcG9uZW50XG4gIH0gPSBwcm9wcztcbiAgY29uc3QgcmVuZGVySXRlbXMgPSAoKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgcHJvcGVydHkuc3ViUHJvcGVydGllcy5maWx0ZXIoc3ViUHJvcGVydHkgPT4gIXN1YlByb3BlcnR5LmlzSWQpLm1hcChzdWJQcm9wZXJ0eSA9PiB7XG4gICAgY29uc3Qgc3ViUHJvcGVydHlXaXRoUGF0aCA9IGNvbnZlcnRUb1N1YlByb3BlcnR5KHByb3BlcnR5LCBzdWJQcm9wZXJ0eSk7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgIGtleTogc3ViUHJvcGVydHlXaXRoUGF0aC5wYXRoXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGFiZWwsIHtcbiAgICAgIGlubGluZTogdHJ1ZVxuICAgIH0sIGAke3N1YlByb3BlcnR5LmxhYmVsfTogYCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEl0ZW1Db21wb25lbnQsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgcHJvcGVydHk6IHN1YlByb3BlcnR5V2l0aFBhdGhcbiAgICB9KSkpO1xuICB9KSk7XG4gIGNvbnN0IHNob3dBY3Rpb24gPSByZWNvcmQucmVjb3JkQWN0aW9ucy5maW5kKGEgPT4gYS5uYW1lID09PSAnc2hvdycpO1xuICBpZiAocmVzb3VyY2UudGl0bGVQcm9wZXJ0eS5wcm9wZXJ0eVBhdGggPT09IHByb3BlcnR5LnByb3BlcnR5UGF0aCAmJiBzaG93QWN0aW9uKSB7XG4gICAgY29uc3QgaCA9IG5ldyBWaWV3SGVscGVycygpO1xuICAgIGNvbnN0IGhyZWYgPSBoLnJlY29yZEFjdGlvblVybCh7XG4gICAgICByZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcbiAgICAgIHJlY29yZElkOiByZWNvcmQuaWQsXG4gICAgICBhY3Rpb25OYW1lOiAnc2hvdydcbiAgICB9KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGluaywge1xuICAgICAgdG86IGhyZWZcbiAgICB9LCByZW5kZXJJdGVtcygpKTtcbiAgfVxuICByZXR1cm4gcmVuZGVySXRlbXMoKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKExpc3QsICdEZWZhdWx0TWl4ZWRMaXN0UHJvcGVydHknKTsiLCIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvcHJlZmVyLWRlZmF1bHQtZXhwb3J0ICovXG5cbi8qKlxuICogRnVuY3Rpb24gdXNlZCBpbiBSZWFjdCBtZW1vIHRvIGNvbXBhcmUgaWYgcHJldmlvdXMgcHJvcGVydHkgdmFsdWUgYW5kIG5leHRcbiAqIHByb3BlcnR5IHZhbHVlIGFyZSB0aGUgc2FtZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgcmVjb3JkUHJvcGVydHlJc0VxdWFsID0gKHByZXZQcm9wcywgbmV4dFByb3BzKSA9PiB7XG4gIGNvbnN0IHByZXZWYWx1ZSA9IHByZXZQcm9wcy5yZWNvcmQucGFyYW1zW3ByZXZQcm9wcy5wcm9wZXJ0eS5wYXRoXTtcbiAgY29uc3QgbmV4dFZhbHVlID0gbmV4dFByb3BzLnJlY29yZC5wYXJhbXNbbmV4dFByb3BzLnByb3BlcnR5LnBhdGhdO1xuICBjb25zdCBwcmV2RXJyb3IgPSBwcmV2UHJvcHMucmVjb3JkLmVycm9yc1twcmV2UHJvcHMucHJvcGVydHkucGF0aF07XG4gIGNvbnN0IG5leHRFcnJvciA9IG5leHRQcm9wcy5yZWNvcmQuZXJyb3JzW25leHRQcm9wcy5wcm9wZXJ0eS5wYXRoXTtcbiAgcmV0dXJuIHByZXZWYWx1ZSA9PT0gbmV4dFZhbHVlICYmIHByZXZFcnJvciA9PT0gbmV4dEVycm9yO1xufTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCBSZWFjdCwgeyBtZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hlY2tCb3gsIEZvcm1Hcm91cCwgRm9ybU1lc3NhZ2UgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IHJlY29yZFByb3BlcnR5SXNFcXVhbCB9IGZyb20gJy4uL3JlY29yZC1wcm9wZXJ0eS1pcy1lcXVhbC5qcyc7XG5pbXBvcnQgeyBQcm9wZXJ0eUxhYmVsIH0gZnJvbSAnLi4vdXRpbHMvcHJvcGVydHktbGFiZWwvaW5kZXguanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvaW5kZXguanMnO1xuY29uc3QgcGFyc2VWYWx1ZSA9IHZhbHVlID0+ICEoIXZhbHVlIHx8IHZhbHVlID09PSAnZmFsc2UnKTtcbmNvbnN0IEVkaXQgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcm9wZXJ0eSxcbiAgICBvbkNoYW5nZSxcbiAgICByZWNvcmRcbiAgfSA9IHByb3BzO1xuICBjb25zdCB2YWx1ZSA9IHBhcnNlVmFsdWUocmVjb3JkLnBhcmFtcyAmJiByZWNvcmQucGFyYW1zW3Byb3BlcnR5LnBhdGhdKTtcbiAgY29uc3QgZXJyb3IgPSByZWNvcmQuZXJyb3JzICYmIHJlY29yZC5lcnJvcnNbcHJvcGVydHkucGF0aF07XG4gIGNvbnN0IHtcbiAgICB0bVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKCkgPT4ge1xuICAgIGlmICghcHJvcGVydHkuaXNEaXNhYmxlZCkge1xuICAgICAgb25DaGFuZ2UocHJvcGVydHkucGF0aCwgIXZhbHVlKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtR3JvdXAsIHtcbiAgICBlcnJvcjogISFlcnJvclxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDaGVja0JveCwgX2V4dGVuZHMoe1xuICAgIGlkOiBwcm9wZXJ0eS5wYXRoLFxuICAgIG5hbWU6IHByb3BlcnR5LnBhdGgsXG4gICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICBjaGVja2VkOiB2YWx1ZSxcbiAgICBkaXNhYmxlZDogcHJvcGVydHkuaXNEaXNhYmxlZFxuICB9LCBwcm9wZXJ0eS5wcm9wcykpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQcm9wZXJ0eUxhYmVsLCB7XG4gICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgIHByb3BzOiB7XG4gICAgICBpbmxpbmU6IHRydWVcbiAgICB9XG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtTWVzc2FnZSwgbnVsbCwgZXJyb3IgJiYgdG0oZXJyb3IubWVzc2FnZSwgcHJvcGVydHkucmVzb3VyY2VJZCkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKCAvKiNfX1BVUkVfXyovbWVtbyhFZGl0LCByZWNvcmRQcm9wZXJ0eUlzRXF1YWwpLCAnRGVmYXVsdEJvb2xlYW5FZGl0UHJvcGVydHknKTsiLCJleHBvcnQgZGVmYXVsdCAodmFsdWUgPT4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gdmFsdWUgPyAnWWVzJyA6ICdObyc7XG59KTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQmFkZ2UgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvaW5kZXguanMnO1xuaW1wb3J0IG1hcFZhbHVlIGZyb20gJy4vbWFwLXZhbHVlLmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5jb25zdCBCb29sZWFuUHJvcGVydHlWYWx1ZSA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHJlY29yZCxcbiAgICBwcm9wZXJ0eSxcbiAgICByZXNvdXJjZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICB0bFxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgcmF3VmFsdWUgPSByZWNvcmQ/LnBhcmFtc1twcm9wZXJ0eS5wYXRoXTtcbiAgaWYgKHR5cGVvZiByYXdWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcmF3VmFsdWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgYmFzZSA9IG1hcFZhbHVlKHJhd1ZhbHVlKTtcbiAgY29uc3QgdHJhbnNsYXRpb24gPSB0bChgJHtwcm9wZXJ0eS5wYXRofS4ke3Jhd1ZhbHVlfWAsIHJlc291cmNlLmlkLCB7XG4gICAgZGVmYXVsdFZhbHVlOiBiYXNlXG4gIH0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFkZ2UsIHtcbiAgICBvdXRsaW5lOiB0cnVlLFxuICAgIHNpemU6IFwic21cIlxuICB9LCB0cmFuc2xhdGlvbik7XG59O1xuZXhwb3J0IGRlZmF1bHQgYWxsb3dPdmVycmlkZShCb29sZWFuUHJvcGVydHlWYWx1ZSwgJ0Jvb2xlYW5Qcm9wZXJ0eVZhbHVlJyk7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFZhbHVlR3JvdXAgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBCb29sZWFuUHJvcGVydHlWYWx1ZSBmcm9tICcuL2Jvb2xlYW4tcHJvcGVydHktdmFsdWUuanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvaW5kZXguanMnO1xuY29uc3QgU2hvdyA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHByb3BlcnR5XG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZVByb3BlcnR5XG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVmFsdWVHcm91cCwge1xuICAgIGxhYmVsOiB0cmFuc2xhdGVQcm9wZXJ0eShwcm9wZXJ0eS5sYWJlbCwgcHJvcGVydHkucmVzb3VyY2VJZClcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm9vbGVhblByb3BlcnR5VmFsdWUsIHByb3BzKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgYWxsb3dPdmVycmlkZShTaG93LCAnRGVmYXVsdEJvb2xlYW5TaG93UHJvcGVydHknKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJvb2xlYW5Qcm9wZXJ0eVZhbHVlIGZyb20gJy4vYm9vbGVhbi1wcm9wZXJ0eS12YWx1ZS5qcyc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuY29uc3QgTGlzdCA9IHByb3BzID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJvb2xlYW5Qcm9wZXJ0eVZhbHVlLCBwcm9wcyk7XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKExpc3QsICdEZWZhdWx0Qm9vbGVhbkxpc3RQcm9wZXJ0eScpOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIFNlbGVjdCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IG1hcFZhbHVlIGZyb20gJy4vbWFwLXZhbHVlLmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgUHJvcGVydHlMYWJlbCBmcm9tICcuLi91dGlscy9wcm9wZXJ0eS1sYWJlbC9wcm9wZXJ0eS1sYWJlbC5qcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL2luZGV4LmpzJztcbmNvbnN0IGJvb2xWYWx1ZSA9IHMgPT4ge1xuICBpZiAoL3RydWUvaS50ZXN0KHMpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbmNvbnN0IEZpbHRlciA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHByb3BlcnR5LFxuICAgIGZpbHRlciA9IHt9LFxuICAgIG9uQ2hhbmdlXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHRsXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBmaWx0ZXJbcHJvcGVydHkucGF0aF0gPT09ICd1bmRlZmluZWQnID8gJycgOiBib29sVmFsdWUoZmlsdGVyW3Byb3BlcnR5LnBhdGhdKTtcbiAgY29uc3Qgb3B0aW9ucyA9IFt7XG4gICAgdmFsdWU6IHRydWUsXG4gICAgbGFiZWw6IHRsKGAke3Byb3BlcnR5LnBhdGh9LnRydWVgLCBwcm9wZXJ0eS5yZXNvdXJjZUlkLCB7XG4gICAgICBkZWZhdWx0VmFsdWU6IG1hcFZhbHVlKHRydWUpXG4gICAgfSlcbiAgfSwge1xuICAgIHZhbHVlOiBmYWxzZSxcbiAgICBsYWJlbDogdGwoYCR7cHJvcGVydHkucGF0aH0uZmFsc2VgLCBwcm9wZXJ0eS5yZXNvdXJjZUlkLCB7XG4gICAgICBkZWZhdWx0VmFsdWU6IG1hcFZhbHVlKGZhbHNlKVxuICAgIH0pXG4gIH1dO1xuICBjb25zdCBzZWxlY3RlZCA9IG9wdGlvbnMuZmluZChvID0+IG8udmFsdWUgPT09IHZhbHVlKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gcyA9PiB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBzID8gcy52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICBvbkNoYW5nZShwcm9wZXJ0eS5wYXRoLCBuZXdWYWx1ZSk7XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtR3JvdXAsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5TGFiZWwsIHtcbiAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgZmlsdGVyOiB0cnVlXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTZWxlY3QsIHtcbiAgICB2YXJpYW50OiBcImZpbHRlclwiLFxuICAgIHZhbHVlOiB0eXBlb2Ygc2VsZWN0ZWQgPT09ICd1bmRlZmluZWQnID8gJycgOiBzZWxlY3RlZCxcbiAgICBpc0NsZWFyYWJsZTogdHJ1ZSxcbiAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2VcbiAgfSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGFsbG93T3ZlcnJpZGUoRmlsdGVyLCAnRGVmYXVsdEJvb2xlYW5GaWx0ZXJQcm9wZXJ0eScpOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuaW1wb3J0IHsgQ3VycmVuY3lJbnB1dCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmNvbnN0IEN1cnJlbmN5SW5wdXRXcmFwcGVyID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgaW5pdGlhbCxcbiAgICBvbkNoYW5nZSxcbiAgICBvcHRpb25zXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZShpbml0aWFsKTtcbiAgY29uc3Qgb25WYWx1ZUNoYW5nZSA9IGN1cnJlbnRWYWx1ZSA9PiB7XG4gICAgc2V0VmFsdWUoY3VycmVudFZhbHVlKTtcbiAgICBvbkNoYW5nZShjdXJyZW50VmFsdWUpO1xuICB9O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VycmVuY3lJbnB1dCwgX2V4dGVuZHMoe1xuICAgIGlkOiBpZCxcbiAgICBuYW1lOiBpZCxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgb25WYWx1ZUNoYW5nZTogb25WYWx1ZUNoYW5nZVxuICB9LCBvcHRpb25zKSk7XG59O1xuY29uc3QgT3ZlcnJpZGFibGVDdXJyZW5jeUlucHV0V3JhcHBlciA9IGFsbG93T3ZlcnJpZGUoQ3VycmVuY3lJbnB1dFdyYXBwZXIsICdDdXJyZW5jeVByb3BlcnR5SW5wdXRXcmFwcGVyJyk7XG5leHBvcnQgeyBPdmVycmlkYWJsZUN1cnJlbmN5SW5wdXRXcmFwcGVyIGFzIEN1cnJlbmN5SW5wdXRXcmFwcGVyLCBPdmVycmlkYWJsZUN1cnJlbmN5SW5wdXRXcmFwcGVyIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1NZXNzYWdlIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgUmVhY3QsIHsgbWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlY29yZFByb3BlcnR5SXNFcXVhbCB9IGZyb20gJy4uL3JlY29yZC1wcm9wZXJ0eS1pcy1lcXVhbC5qcyc7XG5pbXBvcnQgeyBQcm9wZXJ0eUxhYmVsIH0gZnJvbSAnLi4vdXRpbHMvcHJvcGVydHktbGFiZWwvaW5kZXguanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmltcG9ydCB7IEN1cnJlbmN5SW5wdXRXcmFwcGVyIH0gZnJvbSAnLi9jdXJyZW5jeS1pbnB1dC13cmFwcGVyLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvaW5kZXguanMnO1xuY29uc3QgRWRpdCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIG9uQ2hhbmdlLFxuICAgIHByb3BlcnR5LFxuICAgIHJlY29yZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHByb3BWYWx1ZSA9IHJlY29yZC5wYXJhbXM/Lltwcm9wZXJ0eS5wYXRoXSA/PyAnJztcbiAgY29uc3QgZXJyb3IgPSByZWNvcmQuZXJyb3JzPy5bcHJvcGVydHkucGF0aF07XG4gIGNvbnN0IHtcbiAgICB0bVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Hcm91cCwge1xuICAgIGVycm9yOiBCb29sZWFuKGVycm9yKVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQcm9wZXJ0eUxhYmVsLCB7XG4gICAgcHJvcGVydHk6IHByb3BlcnR5XG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDdXJyZW5jeUlucHV0V3JhcHBlciwge1xuICAgIGlkOiBwcm9wZXJ0eS5wYXRoLFxuICAgIGluaXRpYWw6IHByb3BWYWx1ZSxcbiAgICBvcHRpb25zOiBwcm9wZXJ0eS5wcm9wcyxcbiAgICBvbkNoYW5nZTogdmFsdWUgPT4gb25DaGFuZ2UocHJvcGVydHkucGF0aCwgdmFsdWUpXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtTWVzc2FnZSwgbnVsbCwgZXJyb3IgJiYgdG0oZXJyb3IubWVzc2FnZSwgcHJvcGVydHkucmVzb3VyY2VJZCkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKCAvKiNfX1BVUkVfXyovbWVtbyhFZGl0LCByZWNvcmRQcm9wZXJ0eUlzRXF1YWwpLCAnRGVmYXVsdEN1cnJlbmN5RWRpdFByb3BlcnR5Jyk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5pbXBvcnQgeyBDdXJyZW5jeUlucHV0LCBGb3JtR3JvdXAgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQcm9wZXJ0eUxhYmVsIH0gZnJvbSAnLi4vdXRpbHMvcHJvcGVydHktbGFiZWwvaW5kZXguanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmNvbnN0IEZpbHRlciA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIG9uQ2hhbmdlLFxuICAgIHByb3BlcnR5LFxuICAgIGZpbHRlclxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHZhbHVlID0+IHtcbiAgICBvbkNoYW5nZShwcm9wZXJ0eS5wYXRoLCB2YWx1ZSk7XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtR3JvdXAsIHtcbiAgICB2YXJpYW50OiBcImZpbHRlclwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5TGFiZWwsIHtcbiAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgZmlsdGVyOiB0cnVlXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDdXJyZW5jeUlucHV0LCBfZXh0ZW5kcyh7XG4gICAgaWQ6IHByb3BlcnR5LnBhdGgsXG4gICAgbmFtZTogYGZpbHRlci0ke3Byb3BlcnR5LnBhdGh9YCxcbiAgICBvblZhbHVlQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgdmFsdWU6IGZpbHRlcltwcm9wZXJ0eS5wYXRoXVxuICB9LCBwcm9wZXJ0eS5wcm9wcykpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKEZpbHRlciwgJ0RlZmF1bHRDdXJyZW5jeUZpbHRlclByb3BlcnR5Jyk7IiwiaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3lQcm9wZXJ0eSB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuY29uc3Qgb3B0aW9uc0tleXMgPSBbJ3ZhbHVlJywgJ2RlY2ltYWxTZXBhcmF0b3InLCAnZ3JvdXBTZXBhcmF0b3InLCAnZGlzYWJsZUdyb3VwU2VwYXJhdG9ycycsICdpbnRsQ29uZmlnJywgJ2RlY2ltYWxTY2FsZScsICdwcmVmaXgnLCAnc3VmZml4J107XG5jb25zdCBwaWNrRm9ybWF0T3B0aW9ucyA9IHByb3BzID0+IHtcbiAgY29uc3QgcGlja2VkUHJvcHMgPSBPYmplY3Qua2V5cyhwcm9wcykucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICBpZiAob3B0aW9uc0tleXMuaW5jbHVkZXMoY3VycikpIHtcbiAgICAgIGlmIChwcm9wc1tjdXJyXSAhPT0gbnVsbCAmJiBwcm9wc1tjdXJyXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjY1tjdXJyXSA9IHByb3BzW2N1cnJdLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIHBpY2tlZFByb3BzO1xufTtcbmNvbnN0IGZvcm1hdFZhbHVlID0gKHZhbHVlLCBwcm9wcyA9IHt9KSA9PiB7XG4gIGNvbnN0IGZvcm1hdE9wdGlvbnMgPSBwaWNrRm9ybWF0T3B0aW9ucyh7XG4gICAgdmFsdWUsXG4gICAgLi4ucHJvcHNcbiAgfSk7XG4gIHJldHVybiBmb3JtYXRDdXJyZW5jeVByb3BlcnR5KGZvcm1hdE9wdGlvbnMpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1hdFZhbHVlOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZm9ybWF0VmFsdWUgZnJvbSAnLi9mb3JtYXQtdmFsdWUuanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmNvbnN0IExpc3QgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcm9wZXJ0eSxcbiAgICByZWNvcmRcbiAgfSA9IHByb3BzO1xuICBjb25zdCB2YWx1ZSA9IGZvcm1hdFZhbHVlKHJlY29yZC5wYXJhbXNbcHJvcGVydHkucGF0aF0sIHByb3BlcnR5LnByb3BzKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCBudWxsLCB2YWx1ZSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgYWxsb3dPdmVycmlkZShMaXN0LCAnRGVmYXVsdEN1cnJlbmN5TGlzdFByb3BlcnR5Jyk7IiwiaW1wb3J0IHsgVmFsdWVHcm91cCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBmb3JtYXRWYWx1ZSBmcm9tICcuL2Zvcm1hdC12YWx1ZS5qcyc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy9pbmRleC5qcyc7XG5jb25zdCBTaG93ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcHJvcGVydHksXG4gICAgcmVjb3JkXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgdmFsdWUgPSBgJHtyZWNvcmQucGFyYW1zW3Byb3BlcnR5LnBhdGhdfWA7XG4gIGNvbnN0IHtcbiAgICB0cmFuc2xhdGVQcm9wZXJ0eVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFZhbHVlR3JvdXAsIHtcbiAgICBsYWJlbDogdHJhbnNsYXRlUHJvcGVydHkocHJvcGVydHkubGFiZWwsIHByb3BlcnR5LnJlc291cmNlSWQpXG4gIH0sIGZvcm1hdFZhbHVlKHZhbHVlLCBwcm9wZXJ0eS5wcm9wcykpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGFsbG93T3ZlcnJpZGUoU2hvdywgJ0RlZmF1bHRDdXJyZW5jeVNob3dQcm9wZXJ0eScpOyIsImV4cG9ydCBjb25zdCBzdHJpcFRpbWVGcm9tSVNPID0gZGF0ZSA9PiB7XG4gIGlmIChkYXRlID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgaWYgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkYXRlLnJlcGxhY2UoL1RcXGR7Mn06XFxkezJ9OlxcZHsyfVxcLlxcZHszfVokLywgJycpO1xuICB9XG4gIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvVFxcZHsyfTpcXGR7Mn06XFxkezJ9XFwuXFxkezN9WiQvLCAnJyk7XG59OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuaW1wb3J0IFJlYWN0LCB7IG1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBEYXRlUGlja2VyLCBGb3JtR3JvdXAsIEZvcm1NZXNzYWdlIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyByZWNvcmRQcm9wZXJ0eUlzRXF1YWwgfSBmcm9tICcuLi9yZWNvcmQtcHJvcGVydHktaXMtZXF1YWwuanMnO1xuaW1wb3J0IHsgUHJvcGVydHlMYWJlbCB9IGZyb20gJy4uL3V0aWxzL3Byb3BlcnR5LWxhYmVsL2luZGV4LmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL2luZGV4LmpzJztcbmltcG9ydCB7IHN0cmlwVGltZUZyb21JU08gfSBmcm9tICcuL3N0cmlwLXRpbWUtZnJvbS1pc28uanMnO1xuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlLCBwcm9wZXJ0eVR5cGUpID0+IHtcbiAgaWYgKCFkYXRlKSByZXR1cm4gJyc7XG4gIGlmIChwcm9wZXJ0eVR5cGUgIT09ICdkYXRlJykgcmV0dXJuIGRhdGU7XG4gIHJldHVybiBgJHtzdHJpcFRpbWVGcm9tSVNPKGRhdGUpfVQwMDowMDowMGA7XG59O1xuY29uc3QgRWRpdCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHByb3BlcnR5LFxuICAgIG9uQ2hhbmdlLFxuICAgIHJlY29yZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHZhbHVlID0gcmVjb3JkLnBhcmFtcyA/IGZvcm1hdERhdGUocmVjb3JkLnBhcmFtc1twcm9wZXJ0eS5wYXRoXSwgcHJvcGVydHkudHlwZSkgOiAnJztcbiAgY29uc3QgZXJyb3IgPSByZWNvcmQuZXJyb3JzICYmIHJlY29yZC5lcnJvcnNbcHJvcGVydHkucGF0aF07XG4gIGNvbnN0IHtcbiAgICB0bVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Hcm91cCwge1xuICAgIGVycm9yOiAhIWVycm9yXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5TGFiZWwsIHtcbiAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERhdGVQaWNrZXIsIF9leHRlbmRzKHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgZGlzYWJsZWQ6IHByb3BlcnR5LmlzRGlzYWJsZWQsXG4gICAgb25DaGFuZ2U6IGRhdGUgPT4ge1xuICAgICAgb25DaGFuZ2UocHJvcGVydHkucGF0aCwgcHJvcGVydHkudHlwZSA9PT0gJ2RhdGUnID8gc3RyaXBUaW1lRnJvbUlTTyhkYXRlKSA/PyBkYXRlIDogZGF0ZSk7XG4gICAgfSxcbiAgICBwcm9wZXJ0eVR5cGU6IHByb3BlcnR5LnR5cGVcbiAgfSwgcHJvcGVydHkucHJvcHMpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9ybU1lc3NhZ2UsIG51bGwsIGVycm9yICYmIHRtKGVycm9yLm1lc3NhZ2UsIHByb3BlcnR5LnJlc291cmNlSWQpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgYWxsb3dPdmVycmlkZSggLyojX19QVVJFX18qL21lbW8oRWRpdCwgcmVjb3JkUHJvcGVydHlJc0VxdWFsKSwgJ0RlZmF1bHREYXRldGltZUVkaXRQcm9wZXJ0eScpOyIsImltcG9ydCB7IGZvcm1hdERhdGVQcm9wZXJ0eSB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgc3RyaXBUaW1lRnJvbUlTTyB9IGZyb20gJy4vc3RyaXAtdGltZS1mcm9tLWlzby5qcyc7XG5leHBvcnQgZGVmYXVsdCAoKHZhbHVlLCBwcm9wZXJ0eVR5cGUpID0+IHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBkYXRlID0gcHJvcGVydHlUeXBlID09PSAnZGF0ZScgPyBuZXcgRGF0ZShgJHtzdHJpcFRpbWVGcm9tSVNPKHZhbHVlKX1UMDA6MDA6MDBgKSA6IG5ldyBEYXRlKHZhbHVlKTtcbiAgaWYgKGRhdGUpIHtcbiAgICByZXR1cm4gZm9ybWF0RGF0ZVByb3BlcnR5KGRhdGUsIHByb3BlcnR5VHlwZSk7XG4gIH1cbiAgcmV0dXJuICcnO1xufSk7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFZhbHVlR3JvdXAgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgbWFwVmFsdWUgZnJvbSAnLi9tYXAtdmFsdWUuanMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy9pbmRleC5qcyc7XG5jb25zdCBTaG93ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcHJvcGVydHksXG4gICAgcmVjb3JkXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZVByb3BlcnR5XG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB2YWx1ZSA9IG1hcFZhbHVlKHJlY29yZC5wYXJhbXNbcHJvcGVydHkucGF0aF0sIHByb3BlcnR5LnR5cGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVmFsdWVHcm91cCwge1xuICAgIGxhYmVsOiB0cmFuc2xhdGVQcm9wZXJ0eShwcm9wZXJ0eS5sYWJlbCwgcHJvcGVydHkucmVzb3VyY2VJZClcbiAgfSwgdmFsdWUpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGFsbG93T3ZlcnJpZGUoU2hvdywgJ0RlZmF1bHREYXRldGltZVNob3dQcm9wZXJ0eScpOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgbWFwVmFsdWUgZnJvbSAnLi9tYXAtdmFsdWUuanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmNvbnN0IExpc3QgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcm9wZXJ0eSxcbiAgICByZWNvcmRcbiAgfSA9IHByb3BzO1xuICBjb25zdCB2YWx1ZSA9IG1hcFZhbHVlKHJlY29yZC5wYXJhbXNbcHJvcGVydHkucGF0aF0sIHByb3BlcnR5LnR5cGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIHZhbHVlKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKExpc3QsICdEZWZhdWx0RGF0ZXRpbWVMaXN0UHJvcGVydHknKTsiLCJpbXBvcnQgeyBmbGF0IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmxhdC9pbmRleC5qcyc7XG5leHBvcnQgY29uc3QgUEFSQU1fU0VQQVJBVE9SID0gJ35+Jztcbi8qKlxuICogRmlsdGVyIG9iamVjdCB3cmFwcGluZyB1cCBzZWxlY3RlZCBmaWx0ZXJzLlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIEZpbHRlciB7XG4gIC8qKlxuICAgKiBDaGFuZ2VzIHJhdyBuZXN0ZWQgZmlsdGVycyB0byBmb3JtIE9iamVjdDxwYXRoLCB2YWx1ZT4uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAqICBuZXN0ZWQ6IHtmaWVsZDogJ2FsYSd9LFxuICAgKiAgJ2RhdGFGaWVsZH5+ZnJvbSc6ICcyMDE5LTA4LTE0J1xuICAgKiB9XG4gICAqXG4gICAqIGNvbnN0IG5vcm1hbGl6ZWQgPSBGaWx0ZXIubm9ybWFsaXplRmlsdGVycyhmaWx0ZXJzKVxuICAgKiAvLyB7XG4gICAqIC8vICAgJ25lc3RlZC5maWx0ZXInOiAnYWxhJyxcbiAgICogLy8gICAnZGF0YUZpZWxkJzoge2Zyb206ICcyMDE5LTA4LTE0J31cbiAgICogLy8gfVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0gICB7T2JqZWN0fSAgZmlsdGVyc1xuICAgKlxuICAgKiBAcmV0dXJuICB7T2JqZWN0fVxuICAgKi9cbiAgc3RhdGljIG5vcm1hbGl6ZUtleXMoZmlsdGVycykge1xuICAgIHJldHVybiBmbGF0LnVuZmxhdHRlbihmbGF0LmZsYXR0ZW4oZmlsdGVycyksIHtcbiAgICAgIGRlbGltaXRlcjogUEFSQU1fU0VQQVJBVE9SXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtICAge09iamVjdDxTdHJpbmcsT2JqZWN0IHwgU3RyaW5nPn0gIGZpbHRlcnMgICBzZWxlY3RlZCBmaWx0ZXJzXG4gICAqIEBwYXJhbSAgIHtCYXNlUmVzb3VyY2V9ICAgICAgICAgICAgICAgICAgICByZXNvdXJjZSAgICByZXNvdXJjZSB3aGljaCBpcyBmaWx0ZXJlZFxuICAgKi9cbiAgY29uc3RydWN0b3IoZmlsdGVycyA9IHt9LCByZXNvdXJjZSkge1xuICAgIHRoaXMucmVzb3VyY2UgPSByZXNvdXJjZTtcbiAgICBjb25zdCBub3JtYWxpemVkID0gRmlsdGVyLm5vcm1hbGl6ZUtleXMoZmlsdGVycyk7XG4gICAgdGhpcy5maWx0ZXJzID0gT2JqZWN0LmtleXMobm9ybWFsaXplZCkucmVkdWNlKChtZW1vLCBwYXRoKSA9PiB7XG4gICAgICBtZW1vW3BhdGhdID0ge1xuICAgICAgICBwYXRoLFxuICAgICAgICBwcm9wZXJ0eTogdGhpcy5yZXNvdXJjZS5wcm9wZXJ0eShwYXRoKSxcbiAgICAgICAgdmFsdWU6IG5vcm1hbGl6ZWRbcGF0aF1cbiAgICAgIH07XG4gICAgICByZXR1cm4gbWVtbztcbiAgICB9LCB7fSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBmaWx0ZXIgZm9yIGEgZ2l2ZW4gcHJvcGVydHkga2V5XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgICAgICBwcm9wZXJ0eSBrZXlcbiAgICogQHJldHVybnMge0ZpbHRlci5Qcm9wZXJ0eSB8IHVuZGVmaW5lZH1cbiAgICovXG4gIGdldChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGVzIGFsbCBmaWx0ZXJlZCBwcm9wZXJ0aWVzIHdoaWNoIHJlZmVycyB0byBvdGhlciByZXNvdXJjZXNcbiAgICovXG4gIGFzeW5jIHBvcHVsYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5maWx0ZXJzKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwga2V5cy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgY29uc3QgcmVmZXJlbmNlUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlLmRlY29yYXRlKCkuZ2V0UHJvcGVydHlCeUtleShrZXkpPy5yZWZlcmVuY2UoKTtcbiAgICAgIGlmIChyZWZlcmVuY2VSZXNvdXJjZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZmlsdGVyc1trZXldLnZhbHVlO1xuICAgICAgICB0aGlzLmZpbHRlcnNba2V5XS5wb3B1bGF0ZWQgPSBhd2FpdCByZWZlcmVuY2VSZXNvdXJjZS5maW5kT25lKHZhbHVlLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgcmVkdWNlKGNhbGxiYWNrLCBpbml0aWFsKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5maWx0ZXJzKS5yZWR1Y2UoY2FsbGJhY2ssIGluaXRpYWwgfHwge30pO1xuICB9XG4gIGlzVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gISFPYmplY3Qua2V5cyh0aGlzLmZpbHRlcnMpLmxlbmd0aDtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgRmlsdGVyOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIExhYmVsLCBEYXRlUGlja2VyIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgKiBhcyBCYWNrZW5kRmlsdGVyIGZyb20gJy4uLy4uLy4uLy4uL2JhY2tlbmQvdXRpbHMvZmlsdGVyL2ZpbHRlci5qcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZS10cmFuc2xhdGlvbi5qcyc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IFByb3BlcnR5TGFiZWwgZnJvbSAnLi4vdXRpbHMvcHJvcGVydHktbGFiZWwvcHJvcGVydHktbGFiZWwuanMnO1xuY29uc3Qge1xuICBQQVJBTV9TRVBBUkFUT1Jcbn0gPSBCYWNrZW5kRmlsdGVyO1xuY29uc3QgRmlsdGVyID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcHJvcGVydHksXG4gICAgZmlsdGVyLFxuICAgIG9uQ2hhbmdlXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZVByb3BlcnR5XG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBmcm9tS2V5ID0gYCR7cHJvcGVydHkucGF0aH0ke1BBUkFNX1NFUEFSQVRPUn1mcm9tYDtcbiAgY29uc3QgdG9LZXkgPSBgJHtwcm9wZXJ0eS5wYXRofSR7UEFSQU1fU0VQQVJBVE9SfXRvYDtcbiAgY29uc3QgZnJvbVZhbHVlID0gZmlsdGVyW2Zyb21LZXldO1xuICBjb25zdCB0b1ZhbHVlID0gZmlsdGVyW3RvS2V5XTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Hcm91cCwge1xuICAgIHZhcmlhbnQ6IFwiZmlsdGVyXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUHJvcGVydHlMYWJlbCwge1xuICAgIHByb3BlcnR5OiBwcm9wZXJ0eSxcbiAgICBmaWx0ZXI6IHRydWVcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExhYmVsLCBudWxsLCBgLSAke3RyYW5zbGF0ZVByb3BlcnR5KCdmcm9tJyl9OiBgKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRGF0ZVBpY2tlciwge1xuICAgIHZhbHVlOiBmcm9tVmFsdWUsXG4gICAgb25DaGFuZ2U6IGRhdGUgPT4gb25DaGFuZ2UoZnJvbUtleSwgZGF0ZSksXG4gICAgcHJvcGVydHlUeXBlOiBwcm9wZXJ0eS50eXBlXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMYWJlbCwge1xuICAgIG10OiBcImRlZmF1bHRcIlxuICB9LCBgLSAke3RyYW5zbGF0ZVByb3BlcnR5KCd0bycpfTogYCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERhdGVQaWNrZXIsIHtcbiAgICB2YWx1ZTogdG9WYWx1ZSxcbiAgICBvbkNoYW5nZTogZGF0ZSA9PiBvbkNoYW5nZSh0b0tleSwgZGF0ZSksXG4gICAgcHJvcGVydHlUeXBlOiBwcm9wZXJ0eS50eXBlXG4gIH0pKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKEZpbHRlciwgJ0RlZmF1bHREYXRldGltZUZpbHRlclByb3BlcnR5Jyk7IiwiaW1wb3J0IHsgQmFkZ2UgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3RhcnRDYXNlIGZyb20gJ2xvZGFzaC9zdGFydENhc2UuanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlLXRyYW5zbGF0aW9uLmpzJztcbmNvbnN0IERlZmF1bHRQcm9wZXJ0eVZhbHVlID0gKHtcbiAgcHJvcGVydHk6IHtcbiAgICBwcm9wZXJ0eVBhdGgsXG4gICAgYXZhaWxhYmxlVmFsdWVzLFxuICAgIHBhdGhcbiAgfSxcbiAgcmVjb3JkLFxuICByZXNvdXJjZToge1xuICAgIGlkOiByZXNvdXJjZUlkXG4gIH1cbn0pID0+IHtcbiAgY29uc3QgcmF3VmFsdWUgPSByZWNvcmQ/LnBhcmFtc1twYXRoXTtcbiAgY29uc3Qge1xuICAgIHRsXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBpZiAodHlwZW9mIHJhd1ZhbHVlID09PSAndW5kZWZpbmVkJykgcmV0dXJuIG51bGw7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICBjb25zdCBvcHRpb24gPSBhdmFpbGFibGVWYWx1ZXM/LmZpbmQob3B0ID0+IG9wdC52YWx1ZSA9PSByYXdWYWx1ZSk7XG4gIGlmIChvcHRpb24pIHtcbiAgICBjb25zdCBsYWJlbCA9IG9wdGlvbi5sYWJlbCB8fCByYXdWYWx1ZTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFkZ2UsIG51bGwsIHRsKGAke3Byb3BlcnR5UGF0aH0uJHtsYWJlbH1gLCByZXNvdXJjZUlkLCB7XG4gICAgICBkZWZhdWx0VmFsdWU6IHN0YXJ0Q2FzZShsYWJlbClcbiAgICB9KSk7XG4gIH1cbiAgcmV0dXJuIHJhd1ZhbHVlO1xufTtcbmV4cG9ydCBkZWZhdWx0IGFsbG93T3ZlcnJpZGUoRGVmYXVsdFByb3BlcnR5VmFsdWUsICdEZWZhdWx0UHJvcGVydHlWYWx1ZScpOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBWYWx1ZUdyb3VwIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IERlZmF1bHRQcm9wZXJ0eVZhbHVlIGZyb20gJy4vZGVmYXVsdC1wcm9wZXJ0eS12YWx1ZS5qcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL2luZGV4LmpzJztcbmNvbnN0IFNob3cgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcm9wZXJ0eVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICB0cmFuc2xhdGVQcm9wZXJ0eVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFZhbHVlR3JvdXAsIHtcbiAgICBsYWJlbDogdHJhbnNsYXRlUHJvcGVydHkocHJvcGVydHkubGFiZWwsIHByb3BlcnR5LnJlc291cmNlSWQpXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERlZmF1bHRQcm9wZXJ0eVZhbHVlLCBwcm9wcykpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGFsbG93T3ZlcnJpZGUoU2hvdywgJ0RlZmF1bHRTaG93UHJvcGVydHknKTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZSAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCBtZW1vLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJbnB1dCwgRm9ybU1lc3NhZ2UsIEZvcm1Hcm91cCwgU2VsZWN0IH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyByZWNvcmRQcm9wZXJ0eUlzRXF1YWwgfSBmcm9tICcuLi9yZWNvcmQtcHJvcGVydHktaXMtZXF1YWwuanMnO1xuaW1wb3J0IHsgUHJvcGVydHlMYWJlbCB9IGZyb20gJy4uL3V0aWxzL3Byb3BlcnR5LWxhYmVsL2luZGV4LmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL2luZGV4LmpzJztcbmNvbnN0IEVkaXQgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcm9wZXJ0eSxcbiAgICByZWNvcmRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBlcnJvciA9IHJlY29yZC5lcnJvcnM/Lltwcm9wZXJ0eS5wYXRoXTtcbiAgY29uc3Qge1xuICAgIHRtXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9ybUdyb3VwLCB7XG4gICAgZXJyb3I6IEJvb2xlYW4oZXJyb3IpXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5TGFiZWwsIHtcbiAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgfSksIHByb3BlcnR5LmF2YWlsYWJsZVZhbHVlcyA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNlbGVjdEVkaXQsIHByb3BzKSA6IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHRFZGl0LCBwcm9wcyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1NZXNzYWdlLCBudWxsLCBlcnJvciAmJiB0bShlcnJvci5tZXNzYWdlLCBwcm9wZXJ0eS5yZXNvdXJjZUlkKSkpO1xufTtcbmNvbnN0IFNlbGVjdEVkaXQgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICByZWNvcmQsXG4gICAgcHJvcGVydHksXG4gICAgb25DaGFuZ2VcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgdGxcbiAgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGlmICghcHJvcGVydHkuYXZhaWxhYmxlVmFsdWVzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcHJvcFZhbHVlID0gcmVjb3JkLnBhcmFtcz8uW3Byb3BlcnR5LnBhdGhdID8/IHByb3BlcnR5LnByb3BzLnZhbHVlID8/ICcnO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICBjb25zdCBhdmFpbGFibGVWYWx1ZXMgPSBwcm9wZXJ0eS5hdmFpbGFibGVWYWx1ZXMubWFwKHYgPT4gKHtcbiAgICAuLi52LFxuICAgIGxhYmVsOiB0bChgJHtwcm9wZXJ0eS5wYXRofS4ke3YudmFsdWV9YCwgcHJvcGVydHkucmVzb3VyY2VJZCwge1xuICAgICAgZGVmYXVsdFZhbHVlOiB2LmxhYmVsID8/IHYudmFsdWVcbiAgICB9KVxuICB9KSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgY29uc3Qgc2VsZWN0ZWQgPSBhdmFpbGFibGVWYWx1ZXMuZmluZChhdiA9PiBhdi52YWx1ZSA9PSBwcm9wVmFsdWUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgdmFsdWU6IHNlbGVjdGVkLFxuICAgIG9wdGlvbnM6IGF2YWlsYWJsZVZhbHVlcyxcbiAgICBvbkNoYW5nZTogcyA9PiBvbkNoYW5nZShwcm9wZXJ0eS5wYXRoLCBzPy52YWx1ZSA/PyAnJyksXG4gICAgaXNEaXNhYmxlZDogcHJvcGVydHkuaXNEaXNhYmxlZFxuICB9LCBwcm9wZXJ0eS5wcm9wcykpO1xufTtcbmNvbnN0IFRleHRFZGl0ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcHJvcGVydHksXG4gICAgcmVjb3JkLFxuICAgIG9uQ2hhbmdlXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgcHJvcFZhbHVlID0gcmVjb3JkLnBhcmFtcz8uW3Byb3BlcnR5LnBhdGhdID8/IHByb3BlcnR5LnByb3BzLnZhbHVlID8/ICcnO1xuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKHByb3BWYWx1ZSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHZhbHVlICE9PSBwcm9wVmFsdWUpIHtcbiAgICAgIHNldFZhbHVlKHByb3BWYWx1ZSk7XG4gICAgfVxuICB9LCBbcHJvcFZhbHVlXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnB1dCwgX2V4dGVuZHMoe1xuICAgIGlkOiBwcm9wZXJ0eS5wYXRoLFxuICAgIG5hbWU6IHByb3BlcnR5LnBhdGgsXG4gICAgcmVxdWlyZWQ6IHByb3BlcnR5LmlzUmVxdWlyZWQsXG4gICAgb25DaGFuZ2U6IGUgPT4gc2V0VmFsdWUoZS50YXJnZXQudmFsdWUpLFxuICAgIG9uQmx1cjogKCkgPT4gb25DaGFuZ2UocHJvcGVydHkucGF0aCwgdmFsdWUpXG4gICAgLy8gaGFuZGxlIGNsaWNraW5nIEVOVEVSXG4gICAgLFxuICAgIG9uS2V5RG93bjogZSA9PiBlLmtleUNvZGUgPT09IDEzICYmIG9uQ2hhbmdlKHByb3BlcnR5LnBhdGgsIHZhbHVlKSxcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgZGlzYWJsZWQ6IHByb3BlcnR5LmlzRGlzYWJsZWRcbiAgfSwgcHJvcGVydHkucHJvcHMpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKCAvKiNfX1BVUkVfXyovbWVtbyhFZGl0LCByZWNvcmRQcm9wZXJ0eUlzRXF1YWwpLCAnRGVmYXVsdEVkaXRQcm9wZXJ0eScpOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIElucHV0LCBTZWxlY3QgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgUHJvcGVydHlMYWJlbCBmcm9tICcuLi91dGlscy9wcm9wZXJ0eS1sYWJlbC9wcm9wZXJ0eS1sYWJlbC5qcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZS10cmFuc2xhdGlvbi5qcyc7XG5jb25zdCBGaWx0ZXIgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcm9wZXJ0eSxcbiAgICBvbkNoYW5nZSxcbiAgICBmaWx0ZXJcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgdGxcbiAgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gZXZlbnQgPT4ge1xuICAgIG9uQ2hhbmdlKHByb3BlcnR5LnBhdGgsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gIH07XG4gIGNvbnN0IGhhbmRsZVNlbGVjdENoYW5nZSA9IHNlbGVjdGVkID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHNlbGVjdGVkID8gc2VsZWN0ZWQudmFsdWUgOiAnJztcbiAgICBvbkNoYW5nZShwcm9wZXJ0eS5wYXRoLCB2YWx1ZSk7XG4gIH07XG4gIGNvbnN0IHJlbmRlcklucHV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGZpbHRlcktleSA9IGBmaWx0ZXItJHtwcm9wZXJ0eS5wYXRofWA7XG4gICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJbcHJvcGVydHkucGF0aF0gfHwgJyc7XG4gICAgaWYgKHByb3BlcnR5LmF2YWlsYWJsZVZhbHVlcykge1xuICAgICAgY29uc3QgYXZhaWxhYmxlVmFsdWVzID0gcHJvcGVydHkuYXZhaWxhYmxlVmFsdWVzLm1hcCh2ID0+ICh7XG4gICAgICAgIC4uLnYsXG4gICAgICAgIGxhYmVsOiB0bChgJHtwcm9wZXJ0eS5wYXRofS4ke3YudmFsdWV9YCwgcHJvcGVydHkucmVzb3VyY2VJZCwge1xuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogdi5sYWJlbCA/PyB2LnZhbHVlXG4gICAgICAgIH0pXG4gICAgICB9KSk7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IGF2YWlsYWJsZVZhbHVlcy5maW5kKGF2ID0+IGF2LnZhbHVlID09PSB2YWx1ZSk7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0LCB7XG4gICAgICAgIHZhcmlhbnQ6IFwiZmlsdGVyXCIsXG4gICAgICAgIHZhbHVlOiB0eXBlb2Ygc2VsZWN0ZWQgPT09ICd1bmRlZmluZWQnID8gJycgOiBzZWxlY3RlZCxcbiAgICAgICAgaXNDbGVhcmFibGU6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IGF2YWlsYWJsZVZhbHVlcyxcbiAgICAgICAgb25DaGFuZ2U6IGhhbmRsZVNlbGVjdENoYW5nZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbnB1dCwge1xuICAgICAgbmFtZTogZmlsdGVyS2V5LFxuICAgICAgb25DaGFuZ2U6IGhhbmRsZUlucHV0Q2hhbmdlLFxuICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfSk7XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtR3JvdXAsIHtcbiAgICB2YXJpYW50OiBcImZpbHRlclwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5TGFiZWwsIHtcbiAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgZmlsdGVyOiB0cnVlXG4gIH0pLCByZW5kZXJJbnB1dCgpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKEZpbHRlciwgJ0RlZmF1bHRGaWx0ZXJQcm9wZXJ0eScpOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRGVmYXVsdFByb3BlcnR5VmFsdWUgZnJvbSAnLi9kZWZhdWx0LXByb3BlcnR5LXZhbHVlLmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5jb25zdCBMaXN0ID0gcHJvcHMgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRGVmYXVsdFByb3BlcnR5VmFsdWUsIHByb3BzKTtcbmV4cG9ydCBkZWZhdWx0IGFsbG93T3ZlcnJpZGUoTGlzdCwgJ0RlZmF1bHRMaXN0UHJvcGVydHknKTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZSAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCBtZW1vLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJbnB1dCwgRm9ybUdyb3VwLCBJbnB1dEdyb3VwLCBGb3JtTWVzc2FnZSwgQnV0dG9uLCBJY29uIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyByZWNvcmRQcm9wZXJ0eUlzRXF1YWwgfSBmcm9tICcuLi9yZWNvcmQtcHJvcGVydHktaXMtZXF1YWwuanMnO1xuaW1wb3J0IHsgUHJvcGVydHlMYWJlbCB9IGZyb20gJy4uL3V0aWxzL3Byb3BlcnR5LWxhYmVsL2luZGV4LmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL2luZGV4LmpzJztcbmNvbnN0IEVkaXQgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcm9wZXJ0eSxcbiAgICByZWNvcmQsXG4gICAgb25DaGFuZ2VcbiAgfSA9IHByb3BzO1xuICBjb25zdCBwcm9wVmFsdWUgPSByZWNvcmQucGFyYW1zW3Byb3BlcnR5LnBhdGhdO1xuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKHByb3BWYWx1ZSk7XG4gIGNvbnN0IGVycm9yID0gcmVjb3JkLmVycm9ycyAmJiByZWNvcmQuZXJyb3JzW3Byb3BlcnR5LnBhdGhdO1xuICBjb25zdCBbaXNJbnB1dCwgc2V0SXNJbnB1dF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHtcbiAgICB0bVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodmFsdWUgIT09IHByb3BWYWx1ZSkge1xuICAgICAgc2V0VmFsdWUocHJvcFZhbHVlKTtcbiAgICB9XG4gIH0sIFtwcm9wVmFsdWVdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Hcm91cCwge1xuICAgIGVycm9yOiAhIWVycm9yXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5TGFiZWwsIHtcbiAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KElucHV0R3JvdXAsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KElucHV0LCBfZXh0ZW5kcyh7XG4gICAgdHlwZTogaXNJbnB1dCA/ICdpbnB1dCcgOiAncGFzc3dvcmQnLFxuICAgIGNsYXNzTmFtZTogXCJpbnB1dFwiLFxuICAgIGlkOiBwcm9wZXJ0eS5wYXRoLFxuICAgIG5hbWU6IHByb3BlcnR5LnBhdGgsXG4gICAgb25DaGFuZ2U6IGV2ZW50ID0+IHNldFZhbHVlKGV2ZW50LnRhcmdldC52YWx1ZSksXG4gICAgb25CbHVyOiAoKSA9PiBvbkNoYW5nZShwcm9wZXJ0eS5wYXRoLCB2YWx1ZSksXG4gICAgb25LZXlEb3duOiBlID0+IGUua2V5Q29kZSA9PT0gMTMgJiYgb25DaGFuZ2UocHJvcGVydHkucGF0aCwgdmFsdWUpLFxuICAgIHZhbHVlOiB2YWx1ZSA/PyAnJyxcbiAgICBkaXNhYmxlZDogcHJvcGVydHkuaXNEaXNhYmxlZFxuICB9LCBwcm9wZXJ0eS5wcm9wcykpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIHNpemU6IFwiaWNvblwiLFxuICAgIG9uQ2xpY2s6ICgpID0+IHNldElzSW5wdXQoIWlzSW5wdXQpXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICBpY29uOiBcIkV5ZVwiXG4gIH0pKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1NZXNzYWdlLCBudWxsLCBlcnJvciAmJiB0bShlcnJvci5tZXNzYWdlLCBwcm9wZXJ0eS5yZXNvdXJjZUlkKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGFsbG93T3ZlcnJpZGUoIC8qI19fUFVSRV9fKi9tZW1vKEVkaXQsIHJlY29yZFByb3BlcnR5SXNFcXVhbCksICdEZWZhdWx0UGFzc3dvcmRFZGl0UHJvcGVydHknKTsiLCIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvcHJlZmVyLWRlZmF1bHQtZXhwb3J0ICovXG5pbXBvcnQgRWRpdCBmcm9tICcuL2VkaXQuanMnO1xuZXhwb3J0IHsgRWRpdCBhcyBlZGl0IH07IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5pbXBvcnQgeyBQaG9uZUlucHV0LCBGb3JtR3JvdXAsIEZvcm1NZXNzYWdlIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgUmVhY3QsIHsgbWVtbywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlY29yZFByb3BlcnR5SXNFcXVhbCB9IGZyb20gJy4uL3JlY29yZC1wcm9wZXJ0eS1pcy1lcXVhbC5qcyc7XG5pbXBvcnQgeyBQcm9wZXJ0eUxhYmVsIH0gZnJvbSAnLi4vdXRpbHMvcHJvcGVydHktbGFiZWwvaW5kZXguanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvaW5kZXguanMnO1xuY29uc3QgRWRpdCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIG9uQ2hhbmdlLFxuICAgIHByb3BlcnR5LFxuICAgIHJlY29yZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHByb3BWYWx1ZSA9IHJlY29yZC5wYXJhbXM/Lltwcm9wZXJ0eS5wYXRoXSA/PyAnJztcbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZShwcm9wVmFsdWUpO1xuICBjb25zdCBlcnJvciA9IHJlY29yZC5lcnJvcnM/Lltwcm9wZXJ0eS5wYXRoXTtcbiAgY29uc3Qge1xuICAgIHRtXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2YWx1ZSAhPT0gcHJvcFZhbHVlKSB7XG4gICAgICBzZXRWYWx1ZShwcm9wVmFsdWUpO1xuICAgIH1cbiAgfSwgW3Byb3BWYWx1ZV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9ybUdyb3VwLCB7XG4gICAgZXJyb3I6IEJvb2xlYW4oZXJyb3IpXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5TGFiZWwsIHtcbiAgICBwcm9wZXJ0eTogcHJvcGVydHlcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBob25lSW5wdXQsIF9leHRlbmRzKHtcbiAgICBpZDogcHJvcGVydHkucGF0aCxcbiAgICBpbnB1dFByb3BzOiB7XG4gICAgICBuYW1lOiBwcm9wZXJ0eS5wYXRoLFxuICAgICAgcmVxdWlyZWQ6IHByb3BlcnR5LmlzUmVxdWlyZWRcbiAgICB9LFxuICAgIG9uQ2hhbmdlOiBzZXRWYWx1ZSxcbiAgICBvbkJsdXI6ICgpID0+IG9uQ2hhbmdlKHByb3BlcnR5LnBhdGgsIHZhbHVlKSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSwgcHJvcGVydHkucHJvcHMpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9ybU1lc3NhZ2UsIG51bGwsIGVycm9yICYmIHRtKGVycm9yLm1lc3NhZ2UsIHByb3BlcnR5LnJlc291cmNlSWQpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgYWxsb3dPdmVycmlkZSggLyojX19QVVJFX18qL21lbW8oRWRpdCwgcmVjb3JkUHJvcGVydHlJc0VxdWFsKSwgJ0RlZmF1bHRQaG9uZUVkaXRQcm9wZXJ0eScpOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuaW1wb3J0IHsgUGhvbmVJbnB1dCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQcm9wZXJ0eUxhYmVsIH0gZnJvbSAnLi4vdXRpbHMvcHJvcGVydHktbGFiZWwvaW5kZXguanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmNvbnN0IEZpbHRlciA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIG9uQ2hhbmdlLFxuICAgIHByb3BlcnR5LFxuICAgIGZpbHRlclxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKHZhbHVlID0+IHtcbiAgICBvbkNoYW5nZShwcm9wZXJ0eS5wYXRoLCB2YWx1ZSk7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Hcm91cCwge1xuICAgIHZhcmlhbnQ6IFwiZmlsdGVyXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUHJvcGVydHlMYWJlbCwge1xuICAgIHByb3BlcnR5OiBwcm9wZXJ0eSxcbiAgICBmaWx0ZXI6IHRydWVcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBob25lSW5wdXQsIF9leHRlbmRzKHtcbiAgICBpZDogcHJvcGVydHkucGF0aCxcbiAgICBpbnB1dFByb3BzOiB7XG4gICAgICBuYW1lOiBgZmlsdGVyLSR7cHJvcGVydHkucGF0aH1gXG4gICAgfSxcbiAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgIHZhbHVlOiBmaWx0ZXJbcHJvcGVydHkucGF0aF1cbiAgfSwgcHJvcGVydHkucHJvcHMpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgYWxsb3dPdmVycmlkZShGaWx0ZXIsICdEZWZhdWx0UGhvbmVGaWx0ZXJQcm9wZXJ0eScpOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRGVmYXVsdFByb3BlcnR5VmFsdWUgZnJvbSAnLi4vZGVmYXVsdC10eXBlL2RlZmF1bHQtcHJvcGVydHktdmFsdWUuanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmNvbnN0IExpc3QgPSBwcm9wcyA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEZWZhdWx0UHJvcGVydHlWYWx1ZSwgcHJvcHMpO1xuZXhwb3J0IGRlZmF1bHQgYWxsb3dPdmVycmlkZShMaXN0LCAnRGVmYXVsdFBob25lTGlzdFByb3BlcnR5Jyk7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFZhbHVlR3JvdXAgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBEZWZhdWx0UHJvcGVydHlWYWx1ZSBmcm9tICcuLi9kZWZhdWx0LXR5cGUvZGVmYXVsdC1wcm9wZXJ0eS12YWx1ZS5qcyc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy9pbmRleC5qcyc7XG5jb25zdCBTaG93ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcHJvcGVydHlcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgdHJhbnNsYXRlUHJvcGVydHlcbiAgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChWYWx1ZUdyb3VwLCB7XG4gICAgbGFiZWw6IHRyYW5zbGF0ZVByb3BlcnR5KHByb3BlcnR5LmxhYmVsLCBwcm9wZXJ0eS5yZXNvdXJjZUlkKVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEZWZhdWx0UHJvcGVydHlWYWx1ZSwgcHJvcHMpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKFNob3csICdEZWZhdWx0UGhvbmVTaG93UHJvcGVydHknKTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VNZW1vLCBtZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtTWVzc2FnZSwgU2VsZWN0QXN5bmMgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBBcGlDbGllbnQgZnJvbSAnLi4vLi4vLi4vdXRpbHMvYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBQcm9wZXJ0eUxhYmVsIH0gZnJvbSAnLi4vdXRpbHMvcHJvcGVydHktbGFiZWwvaW5kZXguanMnO1xuaW1wb3J0IHsgZmxhdCB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL2ZsYXQvaW5kZXguanMnO1xuaW1wb3J0IHsgcmVjb3JkUHJvcGVydHlJc0VxdWFsIH0gZnJvbSAnLi4vcmVjb3JkLXByb3BlcnR5LWlzLWVxdWFsLmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5jb25zdCBFZGl0ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgb25DaGFuZ2UsXG4gICAgcHJvcGVydHksXG4gICAgcmVjb3JkXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHJlZmVyZW5jZTogcmVzb3VyY2VJZFxuICB9ID0gcHJvcGVydHk7XG4gIGlmICghcmVzb3VyY2VJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlZmVyZW5jZSByZXNvdXJjZSBpbiBwcm9wZXJ0eSAnJHtwcm9wZXJ0eS5wYXRofSdgKTtcbiAgfVxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSBzZWxlY3RlZCA9PiB7XG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICBvbkNoYW5nZShwcm9wZXJ0eS5wYXRoLCBzZWxlY3RlZC52YWx1ZSwgc2VsZWN0ZWQucmVjb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb25DaGFuZ2UocHJvcGVydHkucGF0aCwgbnVsbCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBsb2FkT3B0aW9ucyA9IGFzeW5jIGlucHV0VmFsdWUgPT4ge1xuICAgIGNvbnN0IGFwaSA9IG5ldyBBcGlDbGllbnQoKTtcbiAgICBjb25zdCBvcHRpb25SZWNvcmRzID0gYXdhaXQgYXBpLnNlYXJjaFJlY29yZHMoe1xuICAgICAgcmVzb3VyY2VJZCxcbiAgICAgIHF1ZXJ5OiBpbnB1dFZhbHVlXG4gICAgfSk7XG4gICAgcmV0dXJuIG9wdGlvblJlY29yZHMubWFwKG9wdGlvblJlY29yZCA9PiAoe1xuICAgICAgdmFsdWU6IG9wdGlvblJlY29yZC5pZCxcbiAgICAgIGxhYmVsOiBvcHRpb25SZWNvcmQudGl0bGUsXG4gICAgICByZWNvcmQ6IG9wdGlvblJlY29yZFxuICAgIH0pKTtcbiAgfTtcbiAgY29uc3QgZXJyb3IgPSByZWNvcmQ/LmVycm9yc1twcm9wZXJ0eS5wYXRoXTtcbiAgY29uc3Qgc2VsZWN0ZWRJZCA9IHVzZU1lbW8oKCkgPT4gZmxhdC5nZXQocmVjb3JkPy5wYXJhbXMsIHByb3BlcnR5LnBhdGgpLCBbcmVjb3JkXSk7XG4gIGNvbnN0IFtsb2FkZWRSZWNvcmQsIHNldExvYWRlZFJlY29yZF0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbbG9hZGluZ1JlY29yZCwgc2V0TG9hZGluZ1JlY29yZF0gPSB1c2VTdGF0ZSgwKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRJZCkge1xuICAgICAgc2V0TG9hZGluZ1JlY29yZChjID0+IGMgKyAxKTtcbiAgICAgIGNvbnN0IGFwaSA9IG5ldyBBcGlDbGllbnQoKTtcbiAgICAgIGFwaS5yZWNvcmRBY3Rpb24oe1xuICAgICAgICBhY3Rpb25OYW1lOiAnc2hvdycsXG4gICAgICAgIHJlc291cmNlSWQsXG4gICAgICAgIHJlY29yZElkOiBzZWxlY3RlZElkXG4gICAgICB9KS50aGVuKCh7XG4gICAgICAgIGRhdGFcbiAgICAgIH0pID0+IHtcbiAgICAgICAgc2V0TG9hZGVkUmVjb3JkKGRhdGEucmVjb3JkKTtcbiAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICBzZXRMb2FkaW5nUmVjb3JkKGMgPT4gYyAtIDEpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbc2VsZWN0ZWRJZCwgcmVzb3VyY2VJZF0pO1xuICBjb25zdCBzZWxlY3RlZFZhbHVlID0gbG9hZGVkUmVjb3JkO1xuICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHNlbGVjdGVkSWQgJiYgc2VsZWN0ZWRWYWx1ZSA/IHtcbiAgICB2YWx1ZTogc2VsZWN0ZWRWYWx1ZS5pZCxcbiAgICBsYWJlbDogc2VsZWN0ZWRWYWx1ZS50aXRsZVxuICB9IDoge1xuICAgIHZhbHVlOiAnJyxcbiAgICBsYWJlbDogJydcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Hcm91cCwge1xuICAgIGVycm9yOiBCb29sZWFuKGVycm9yKVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQcm9wZXJ0eUxhYmVsLCB7XG4gICAgcHJvcGVydHk6IHByb3BlcnR5XG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTZWxlY3RBc3luYywgX2V4dGVuZHMoe1xuICAgIGNhY2hlT3B0aW9uczogdHJ1ZSxcbiAgICB2YWx1ZTogc2VsZWN0ZWRPcHRpb24sXG4gICAgZGVmYXVsdE9wdGlvbnM6IHRydWUsXG4gICAgbG9hZE9wdGlvbnM6IGxvYWRPcHRpb25zLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgaXNDbGVhcmFibGU6IHRydWUsXG4gICAgaXNEaXNhYmxlZDogcHJvcGVydHkuaXNEaXNhYmxlZCxcbiAgICBpc0xvYWRpbmc6ICEhbG9hZGluZ1JlY29yZFxuICB9LCBwcm9wZXJ0eS5wcm9wcykpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtTWVzc2FnZSwgbnVsbCwgZXJyb3I/Lm1lc3NhZ2UpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKCAvKiNfX1BVUkVfXyovbWVtbyhFZGl0LCByZWNvcmRQcm9wZXJ0eUlzRXF1YWwpLCAnRGVmYXVsdFJlZmVyZW5jZUVkaXRQcm9wZXJ0eScpOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBCdXR0b25DU1MgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFZpZXdIZWxwZXJzIGZyb20gJy4uLy4uLy4uLy4uL2JhY2tlbmQvdXRpbHMvdmlldy1oZWxwZXJzL3ZpZXctaGVscGVycy5qcyc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuY29uc3QgU3R5bGVkTGluayA9IHN0eWxlZChMaW5rKWBcbiAgJHtCdXR0b25DU1N9O1xuICBwYWRkaW5nLWxlZnQ6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnNwYWNlLnhzfTtcbiAgcGFkZGluZy1yaWdodDogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc3BhY2UueHN9O1xuYDtcbmNvbnN0IFJlZmVyZW5jZVZhbHVlID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcHJvcGVydHksXG4gICAgcmVjb3JkXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgaCA9IG5ldyBWaWV3SGVscGVycygpO1xuICBjb25zdCByZWZJZCA9IHJlY29yZC5wYXJhbXNbcHJvcGVydHkucGF0aF07XG4gIGNvbnN0IHBvcHVsYXRlZCA9IHJlY29yZC5wb3B1bGF0ZWRbcHJvcGVydHkucGF0aF07XG4gIGNvbnN0IHZhbHVlID0gcG9wdWxhdGVkICYmIHBvcHVsYXRlZC50aXRsZSB8fCByZWZJZDtcbiAgaWYgKCFwcm9wZXJ0eS5yZWZlcmVuY2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHByb3BlcnR5OiBcIiR7cHJvcGVydHkucGF0aH1cIiBkb2VzIG5vdCBoYXZlIGEgcmVmZXJlbmNlYCk7XG4gIH1cbiAgaWYgKHBvcHVsYXRlZD8ucmVjb3JkQWN0aW9ucz8uZmluZChhID0+IGEubmFtZSA9PT0gJ3Nob3cnKSkge1xuICAgIGNvbnN0IGhyZWYgPSBoLnJlY29yZEFjdGlvblVybCh7XG4gICAgICByZXNvdXJjZUlkOiBwcm9wZXJ0eS5yZWZlcmVuY2UsXG4gICAgICByZWNvcmRJZDogcmVmSWQsXG4gICAgICBhY3Rpb25OYW1lOiAnc2hvdydcbiAgICB9KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkTGluaywge1xuICAgICAgdmFyaWFudDogXCJ0ZXh0XCIsXG4gICAgICB0bzogaHJlZlxuICAgIH0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIG51bGwsIHZhbHVlKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKFJlZmVyZW5jZVZhbHVlLCAnRGVmYXVsdFJlZmVyZW5jZVZhbHVlJyk7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFZhbHVlR3JvdXAgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBSZWZlcmVuY2VWYWx1ZSBmcm9tICcuL3JlZmVyZW5jZS12YWx1ZS5qcyc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy9pbmRleC5qcyc7XG5jb25zdCBTaG93ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcHJvcGVydHksXG4gICAgcmVjb3JkXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZVByb3BlcnR5XG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVmFsdWVHcm91cCwge1xuICAgIGxhYmVsOiB0cmFuc2xhdGVQcm9wZXJ0eShwcm9wZXJ0eS5sYWJlbCwgcHJvcGVydHkucmVzb3VyY2VJZClcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVmZXJlbmNlVmFsdWUsIHtcbiAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgcmVjb3JkOiByZWNvcmRcbiAgfSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGFsbG93T3ZlcnJpZGUoU2hvdywgJ0RlZmF1bHRSZWZlcmVuY2VTaG93UHJvcGVydHknKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlZmVyZW5jZVZhbHVlIGZyb20gJy4vcmVmZXJlbmNlLXZhbHVlLmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5jb25zdCBMaXN0ID0gcHJvcHMgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVmZXJlbmNlVmFsdWUsIHByb3BzKTtcbmV4cG9ydCBkZWZhdWx0IGFsbG93T3ZlcnJpZGUoTGlzdCwgJ0RlZmF1bHRSZWZlcmVuY2VMaXN0UHJvcGVydHknKTsiLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIFNlbGVjdEFzeW5jIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgQXBpQ2xpZW50IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FwaS1jbGllbnQuanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmltcG9ydCBQcm9wZXJ0eUxhYmVsIGZyb20gJy4uL3V0aWxzL3Byb3BlcnR5LWxhYmVsL3Byb3BlcnR5LWxhYmVsLmpzJztcbmNvbnN0IEZpbHRlciA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHByb3BlcnR5LFxuICAgIGZpbHRlcixcbiAgICBvbkNoYW5nZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtvcHRpb25zLCBzZXRPcHRpb25zXSA9IHVzZVN0YXRlKFtdKTtcbiAgY29uc3QgYXBpID0gbmV3IEFwaUNsaWVudCgpO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSBzZWxlY3RlZCA9PiB7XG4gICAgb25DaGFuZ2UocHJvcGVydHkucGF0aCwgc2VsZWN0ZWQgPyBzZWxlY3RlZC52YWx1ZSA6ICcnKTtcbiAgfTtcbiAgY29uc3QgbG9hZE9wdGlvbnMgPSBhc3luYyBpbnB1dFZhbHVlID0+IHtcbiAgICBjb25zdCByZWNvcmRzID0gYXdhaXQgYXBpLnNlYXJjaFJlY29yZHMoe1xuICAgICAgcmVzb3VyY2VJZDogcHJvcGVydHkucmVmZXJlbmNlLFxuICAgICAgcXVlcnk6IGlucHV0VmFsdWVcbiAgICB9KTtcbiAgICBjb25zdCBsb2FkZWRPcHRpb25zID0gcmVjb3Jkcy5tYXAociA9PiAoe1xuICAgICAgdmFsdWU6IHIuaWQsXG4gICAgICBsYWJlbDogci50aXRsZVxuICAgIH0pKTtcbiAgICBzZXRPcHRpb25zKGxvYWRlZE9wdGlvbnMpO1xuICAgIHJldHVybiBsb2FkZWRPcHRpb25zO1xuICB9O1xuICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBmaWx0ZXJbcHJvcGVydHkucGF0aF0gPT09ICd1bmRlZmluZWQnID8gJycgOiBmaWx0ZXJbcHJvcGVydHkucGF0aF07XG4gIGNvbnN0IHNlbGVjdGVkID0gKG9wdGlvbnMgfHwgW10pLmZpbmQobyA9PiBTdHJpbmcoby52YWx1ZSkgPT09IFN0cmluZyh2YWx1ZSkpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9ybUdyb3VwLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQcm9wZXJ0eUxhYmVsLCB7XG4gICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgIGZpbHRlcjogdHJ1ZVxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2VsZWN0QXN5bmMsIHtcbiAgICB2YXJpYW50OiBcImZpbHRlclwiLFxuICAgIHZhbHVlOiB0eXBlb2Ygc2VsZWN0ZWQgPT09ICd1bmRlZmluZWQnID8gJycgOiBzZWxlY3RlZCxcbiAgICBpc0NsZWFyYWJsZTogdHJ1ZSxcbiAgICBjYWNoZU9wdGlvbnM6IHRydWUsXG4gICAgbG9hZE9wdGlvbnM6IGxvYWRPcHRpb25zLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgZGVmYXVsdE9wdGlvbnM6IHRydWVcbiAgfSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGFsbG93T3ZlcnJpZGUoRmlsdGVyLCAnRGVmYXVsdFJlZmVyZW5jZUZpbHRlclByb3BlcnR5Jyk7IiwiaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtTWVzc2FnZSwgUmljaFRleHRFZGl0b3IsIFRpbnlNQ0UgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlY29yZFByb3BlcnR5SXNFcXVhbCB9IGZyb20gJy4uL3JlY29yZC1wcm9wZXJ0eS1pcy1lcXVhbC5qcyc7XG5pbXBvcnQgeyBQcm9wZXJ0eUxhYmVsIH0gZnJvbSAnLi4vdXRpbHMvcHJvcGVydHktbGFiZWwvaW5kZXguanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmNvbnN0IEVkaXQgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcm9wZXJ0eSxcbiAgICByZWNvcmQsXG4gICAgb25DaGFuZ2VcbiAgfSA9IHByb3BzO1xuICBjb25zdCB2YWx1ZSA9IHJlY29yZC5wYXJhbXM/Lltwcm9wZXJ0eS5wYXRoXTtcbiAgY29uc3QgZXJyb3IgPSByZWNvcmQuZXJyb3JzICYmIHJlY29yZC5lcnJvcnNbcHJvcGVydHkucGF0aF07XG4gIGNvbnN0IHtcbiAgICBjdXN0b20gPSB7fVxuICB9ID0gcHJvcGVydHk7XG4gIGNvbnN0IHtcbiAgICB2YXJpYW50ID0gJ2RlZmF1bHQnXG4gIH0gPSBjdXN0b207XG4gIGNvbnN0IGhhbmRsZVVwZGF0ZSA9IHVzZUNhbGxiYWNrKG5ld1ZhbHVlID0+IHtcbiAgICBvbkNoYW5nZShwcm9wZXJ0eS5wYXRoLCBuZXdWYWx1ZSk7XG4gIH0sIFtdKTtcbiAgaWYgKHZhcmlhbnQgPT09ICd0aW55bWNlJykge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtR3JvdXAsIHtcbiAgICAgIGVycm9yOiBCb29sZWFuKGVycm9yKVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFByb3BlcnR5TGFiZWwsIHtcbiAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eVxuICAgIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaW55TUNFLCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBvbkNoYW5nZTogaGFuZGxlVXBkYXRlLFxuICAgICAgb3B0aW9uczogcHJvcGVydHkucHJvcHNcbiAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9ybU1lc3NhZ2UsIG51bGwsIGVycm9yPy5tZXNzYWdlKSk7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Hcm91cCwge1xuICAgIGVycm9yOiBCb29sZWFuKGVycm9yKVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQcm9wZXJ0eUxhYmVsLCB7XG4gICAgcHJvcGVydHk6IHByb3BlcnR5XG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSaWNoVGV4dEVkaXRvciwge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBvbkNoYW5nZTogaGFuZGxlVXBkYXRlLFxuICAgIG9wdGlvbnM6IHByb3BlcnR5LnByb3BzXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtTWVzc2FnZSwgbnVsbCwgZXJyb3I/Lm1lc3NhZ2UpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKCAvKiNfX1BVUkVfXyovbWVtbyhFZGl0LCByZWNvcmRQcm9wZXJ0eUlzRXF1YWwpLCAnRGVmYXVsdFJpY2h0ZXh0RWRpdFByb3BlcnR5Jyk7IiwiLyoqXG4gKiBjc3NmaWx0ZXJcbiAqXG4gKiBAYXV0aG9yIOiAgembtzxsZWl6b25nbWluQGdtYWlsLmNvbT5cbiAqL1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0V2hpdGVMaXN0ICgpIHtcbiAgLy8g55m95ZCN5Y2V5YC86K+05piO77yaXG4gIC8vIHRydWU6IOWFgeiuuOivpeWxnuaAp1xuICAvLyBGdW5jdGlvbjogZnVuY3Rpb24gKHZhbCkgeyB9IOi/lOWbnnRydWXooajnpLrlhYHorrjor6XlsZ7mgKfvvIzlhbbku5blgLzlnYfooajnpLrkuI3lhYHorrhcbiAgLy8gUmVnRXhwOiByZWdleHAudGVzdCh2YWwpIOi/lOWbnnRydWXooajnpLrlhYHorrjor6XlsZ7mgKfvvIzlhbbku5blgLzlnYfooajnpLrkuI3lhYHorrhcbiAgLy8g6Zmk5LiK6Z2i5YiX5Ye655qE5YC85aSW5Z2H6KGo56S65LiN5YWB6K64XG4gIHZhciB3aGl0ZUxpc3QgPSB7fTtcblxuICB3aGl0ZUxpc3RbJ2FsaWduLWNvbnRlbnQnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnYWxpZ24taXRlbXMnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnYWxpZ24tc2VsZiddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0WydhbGlnbm1lbnQtYWRqdXN0J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ2FsaWdubWVudC1iYXNlbGluZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGJhc2VsaW5lXG4gIHdoaXRlTGlzdFsnYWxsJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogZGVwZW5kaW5nIG9uIGluZGl2aWR1YWwgcHJvcGVydGllc1xuICB3aGl0ZUxpc3RbJ2FuY2hvci1wb2ludCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0WydhbmltYXRpb24nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBkZXBlbmRpbmcgb24gaW5kaXZpZHVhbCBwcm9wZXJ0aWVzXG4gIHdoaXRlTGlzdFsnYW5pbWF0aW9uLWRlbGF5J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogMFxuICB3aGl0ZUxpc3RbJ2FuaW1hdGlvbi1kaXJlY3Rpb24nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub3JtYWxcbiAgd2hpdGVMaXN0WydhbmltYXRpb24tZHVyYXRpb24nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiAwXG4gIHdoaXRlTGlzdFsnYW5pbWF0aW9uLWZpbGwtbW9kZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0WydhbmltYXRpb24taXRlcmF0aW9uLWNvdW50J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogMVxuICB3aGl0ZUxpc3RbJ2FuaW1hdGlvbi1uYW1lJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogcnVubmluZ1xuICB3aGl0ZUxpc3RbJ2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBlYXNlXG4gIHdoaXRlTGlzdFsnYXppbXV0aCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGNlbnRlclxuICB3aGl0ZUxpc3RbJ2JhY2tmYWNlLXZpc2liaWxpdHknXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiB2aXNpYmxlXG4gIHdoaXRlTGlzdFsnYmFja2dyb3VuZCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogZGVwZW5kaW5nIG9uIGluZGl2aWR1YWwgcHJvcGVydGllc1xuICB3aGl0ZUxpc3RbJ2JhY2tncm91bmQtYXR0YWNobWVudCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogc2Nyb2xsXG4gIHdoaXRlTGlzdFsnYmFja2dyb3VuZC1jbGlwJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBib3JkZXItYm94XG4gIHdoaXRlTGlzdFsnYmFja2dyb3VuZC1jb2xvciddID0gdHJ1ZTsgLy8gZGVmYXVsdDogdHJhbnNwYXJlbnRcbiAgd2hpdGVMaXN0WydiYWNrZ3JvdW5kLWltYWdlJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsnYmFja2dyb3VuZC1vcmlnaW4nXSA9IHRydWU7IC8vIGRlZmF1bHQ6IHBhZGRpbmctYm94XG4gIHdoaXRlTGlzdFsnYmFja2dyb3VuZC1wb3NpdGlvbiddID0gdHJ1ZTsgLy8gZGVmYXVsdDogMCUgMCVcbiAgd2hpdGVMaXN0WydiYWNrZ3JvdW5kLXJlcGVhdCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogcmVwZWF0XG4gIHdoaXRlTGlzdFsnYmFja2dyb3VuZC1zaXplJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnYmFzZWxpbmUtc2hpZnQnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBiYXNlbGluZVxuICB3aGl0ZUxpc3RbJ2JpbmRpbmcnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsnYmxlZWQnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiA2cHRcbiAgd2hpdGVMaXN0Wydib29rbWFyay1sYWJlbCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGNvbnRlbnQoKVxuICB3aGl0ZUxpc3RbJ2Jvb2ttYXJrLWxldmVsJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ2Jvb2ttYXJrLXN0YXRlJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogb3BlblxuICB3aGl0ZUxpc3RbJ2JvcmRlciddID0gdHJ1ZTsgLy8gZGVmYXVsdDogZGVwZW5kaW5nIG9uIGluZGl2aWR1YWwgcHJvcGVydGllc1xuICB3aGl0ZUxpc3RbJ2JvcmRlci1ib3R0b20nXSA9IHRydWU7IC8vIGRlZmF1bHQ6IGRlcGVuZGluZyBvbiBpbmRpdmlkdWFsIHByb3BlcnRpZXNcbiAgd2hpdGVMaXN0Wydib3JkZXItYm90dG9tLWNvbG9yJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBjdXJyZW50IGNvbG9yXG4gIHdoaXRlTGlzdFsnYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyddID0gdHJ1ZTsgLy8gZGVmYXVsdDogMFxuICB3aGl0ZUxpc3RbJ2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiAwXG4gIHdoaXRlTGlzdFsnYm9yZGVyLWJvdHRvbS1zdHlsZSddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ2JvcmRlci1ib3R0b20td2lkdGgnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG1lZGl1bVxuICB3aGl0ZUxpc3RbJ2JvcmRlci1jb2xsYXBzZSddID0gdHJ1ZTsgLy8gZGVmYXVsdDogc2VwYXJhdGVcbiAgd2hpdGVMaXN0Wydib3JkZXItY29sb3InXSA9IHRydWU7IC8vIGRlZmF1bHQ6IGRlcGVuZGluZyBvbiBpbmRpdmlkdWFsIHByb3BlcnRpZXNcbiAgd2hpdGVMaXN0Wydib3JkZXItaW1hZ2UnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0Wydib3JkZXItaW1hZ2Utb3V0c2V0J10gPSB0cnVlOyAvLyBkZWZhdWx0OiAwXG4gIHdoaXRlTGlzdFsnYm9yZGVyLWltYWdlLXJlcGVhdCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogc3RyZXRjaFxuICB3aGl0ZUxpc3RbJ2JvcmRlci1pbWFnZS1zbGljZSddID0gdHJ1ZTsgLy8gZGVmYXVsdDogMTAwJVxuICB3aGl0ZUxpc3RbJ2JvcmRlci1pbWFnZS1zb3VyY2UnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0Wydib3JkZXItaW1hZ2Utd2lkdGgnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IDFcbiAgd2hpdGVMaXN0Wydib3JkZXItbGVmdCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogZGVwZW5kaW5nIG9uIGluZGl2aWR1YWwgcHJvcGVydGllc1xuICB3aGl0ZUxpc3RbJ2JvcmRlci1sZWZ0LWNvbG9yJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBjdXJyZW50IGNvbG9yXG4gIHdoaXRlTGlzdFsnYm9yZGVyLWxlZnQtc3R5bGUnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0Wydib3JkZXItbGVmdC13aWR0aCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbWVkaXVtXG4gIHdoaXRlTGlzdFsnYm9yZGVyLXJhZGl1cyddID0gdHJ1ZTsgLy8gZGVmYXVsdDogMFxuICB3aGl0ZUxpc3RbJ2JvcmRlci1yaWdodCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogZGVwZW5kaW5nIG9uIGluZGl2aWR1YWwgcHJvcGVydGllc1xuICB3aGl0ZUxpc3RbJ2JvcmRlci1yaWdodC1jb2xvciddID0gdHJ1ZTsgLy8gZGVmYXVsdDogY3VycmVudCBjb2xvclxuICB3aGl0ZUxpc3RbJ2JvcmRlci1yaWdodC1zdHlsZSddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ2JvcmRlci1yaWdodC13aWR0aCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbWVkaXVtXG4gIHdoaXRlTGlzdFsnYm9yZGVyLXNwYWNpbmcnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IDBcbiAgd2hpdGVMaXN0Wydib3JkZXItc3R5bGUnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IGRlcGVuZGluZyBvbiBpbmRpdmlkdWFsIHByb3BlcnRpZXNcbiAgd2hpdGVMaXN0Wydib3JkZXItdG9wJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBkZXBlbmRpbmcgb24gaW5kaXZpZHVhbCBwcm9wZXJ0aWVzXG4gIHdoaXRlTGlzdFsnYm9yZGVyLXRvcC1jb2xvciddID0gdHJ1ZTsgLy8gZGVmYXVsdDogY3VycmVudCBjb2xvclxuICB3aGl0ZUxpc3RbJ2JvcmRlci10b3AtbGVmdC1yYWRpdXMnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IDBcbiAgd2hpdGVMaXN0Wydib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyddID0gdHJ1ZTsgLy8gZGVmYXVsdDogMFxuICB3aGl0ZUxpc3RbJ2JvcmRlci10b3Atc3R5bGUnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0Wydib3JkZXItdG9wLXdpZHRoJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBtZWRpdW1cbiAgd2hpdGVMaXN0Wydib3JkZXItd2lkdGgnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IGRlcGVuZGluZyBvbiBpbmRpdmlkdWFsIHByb3BlcnRpZXNcbiAgd2hpdGVMaXN0Wydib3R0b20nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnYm94LWRlY29yYXRpb24tYnJlYWsnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IHNsaWNlXG4gIHdoaXRlTGlzdFsnYm94LXNoYWRvdyddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ2JveC1zaXppbmcnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IGNvbnRlbnQtYm94XG4gIHdoaXRlTGlzdFsnYm94LXNuYXAnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0Wydib3gtc3VwcHJlc3MnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IHNob3dcbiAgd2hpdGVMaXN0WydicmVhay1hZnRlciddID0gdHJ1ZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ2JyZWFrLWJlZm9yZSddID0gdHJ1ZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ2JyZWFrLWluc2lkZSddID0gdHJ1ZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ2NhcHRpb24tc2lkZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IHRvcFxuICB3aGl0ZUxpc3RbJ2NoYWlucyddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0WydjbGVhciddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ2NsaXAnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnY2xpcC1wYXRoJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ2NsaXAtcnVsZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vbnplcm9cbiAgd2hpdGVMaXN0Wydjb2xvciddID0gdHJ1ZTsgLy8gZGVmYXVsdDogaW1wbGVtZW50YXRpb24gZGVwZW5kZW50XG4gIHdoaXRlTGlzdFsnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnY29sdW1uLWNvdW50J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ2NvbHVtbi1maWxsJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYmFsYW5jZVxuICB3aGl0ZUxpc3RbJ2NvbHVtbi1nYXAnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub3JtYWxcbiAgd2hpdGVMaXN0Wydjb2x1bW4tcnVsZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGRlcGVuZGluZyBvbiBpbmRpdmlkdWFsIHByb3BlcnRpZXNcbiAgd2hpdGVMaXN0Wydjb2x1bW4tcnVsZS1jb2xvciddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGN1cnJlbnQgY29sb3JcbiAgd2hpdGVMaXN0Wydjb2x1bW4tcnVsZS1zdHlsZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG1lZGl1bVxuICB3aGl0ZUxpc3RbJ2NvbHVtbi1ydWxlLXdpZHRoJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbWVkaXVtXG4gIHdoaXRlTGlzdFsnY29sdW1uLXNwYW4nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsnY29sdW1uLXdpZHRoJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ2NvbHVtbnMnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBkZXBlbmRpbmcgb24gaW5kaXZpZHVhbCBwcm9wZXJ0aWVzXG4gIHdoaXRlTGlzdFsnY29udGFpbiddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0Wydjb250ZW50J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsnY291bnRlci1pbmNyZW1lbnQnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsnY291bnRlci1yZXNldCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0Wydjb3VudGVyLXNldCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0Wydjcm9wJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ2N1ZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGRlcGVuZGluZyBvbiBpbmRpdmlkdWFsIHByb3BlcnRpZXNcbiAgd2hpdGVMaXN0WydjdWUtYWZ0ZXInXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsnY3VlLWJlZm9yZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0WydjdXJzb3InXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnZGlyZWN0aW9uJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbHRyXG4gIHdoaXRlTGlzdFsnZGlzcGxheSddID0gdHJ1ZTsgLy8gZGVmYXVsdDogZGVwZW5kaW5nIG9uIGluZGl2aWR1YWwgcHJvcGVydGllc1xuICB3aGl0ZUxpc3RbJ2Rpc3BsYXktaW5zaWRlJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnZGlzcGxheS1saXN0J10gPSB0cnVlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsnZGlzcGxheS1vdXRzaWRlJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBpbmxpbmUtbGV2ZWxcbiAgd2hpdGVMaXN0Wydkb21pbmFudC1iYXNlbGluZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0WydlbGV2YXRpb24nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBsZXZlbFxuICB3aGl0ZUxpc3RbJ2VtcHR5LWNlbGxzJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogc2hvd1xuICB3aGl0ZUxpc3RbJ2ZpbHRlciddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0WydmbGV4J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogZGVwZW5kaW5nIG9uIGluZGl2aWR1YWwgcHJvcGVydGllc1xuICB3aGl0ZUxpc3RbJ2ZsZXgtYmFzaXMnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnZmxleC1kaXJlY3Rpb24nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiByb3dcbiAgd2hpdGVMaXN0WydmbGV4LWZsb3cnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBkZXBlbmRpbmcgb24gaW5kaXZpZHVhbCBwcm9wZXJ0aWVzXG4gIHdoaXRlTGlzdFsnZmxleC1ncm93J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogMFxuICB3aGl0ZUxpc3RbJ2ZsZXgtc2hyaW5rJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogMVxuICB3aGl0ZUxpc3RbJ2ZsZXgtd3JhcCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vd3JhcFxuICB3aGl0ZUxpc3RbJ2Zsb2F0J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ2Zsb2F0LW9mZnNldCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IDAgMFxuICB3aGl0ZUxpc3RbJ2Zsb29kLWNvbG9yJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYmxhY2tcbiAgd2hpdGVMaXN0WydmbG9vZC1vcGFjaXR5J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogMVxuICB3aGl0ZUxpc3RbJ2Zsb3ctZnJvbSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0WydmbG93LWludG8nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsnZm9udCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogZGVwZW5kaW5nIG9uIGluZGl2aWR1YWwgcHJvcGVydGllc1xuICB3aGl0ZUxpc3RbJ2ZvbnQtZmFtaWx5J10gPSB0cnVlOyAvLyBkZWZhdWx0OiBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnRcbiAgd2hpdGVMaXN0Wydmb250LWZlYXR1cmUtc2V0dGluZ3MnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG5vcm1hbFxuICB3aGl0ZUxpc3RbJ2ZvbnQta2VybmluZyddID0gdHJ1ZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ2ZvbnQtbGFuZ3VhZ2Utb3ZlcnJpZGUnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG5vcm1hbFxuICB3aGl0ZUxpc3RbJ2ZvbnQtc2l6ZSddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbWVkaXVtXG4gIHdoaXRlTGlzdFsnZm9udC1zaXplLWFkanVzdCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ2ZvbnQtc3RyZXRjaCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsnZm9udC1zdHlsZSddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsnZm9udC1zeW50aGVzaXMnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IHdlaWdodCBzdHlsZVxuICB3aGl0ZUxpc3RbJ2ZvbnQtdmFyaWFudCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsnZm9udC12YXJpYW50LWFsdGVybmF0ZXMnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG5vcm1hbFxuICB3aGl0ZUxpc3RbJ2ZvbnQtdmFyaWFudC1jYXBzJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBub3JtYWxcbiAgd2hpdGVMaXN0Wydmb250LXZhcmlhbnQtZWFzdC1hc2lhbiddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsnZm9udC12YXJpYW50LWxpZ2F0dXJlcyddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsnZm9udC12YXJpYW50LW51bWVyaWMnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG5vcm1hbFxuICB3aGl0ZUxpc3RbJ2ZvbnQtdmFyaWFudC1wb3NpdGlvbiddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsnZm9udC13ZWlnaHQnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG5vcm1hbFxuICB3aGl0ZUxpc3RbJ2dyaWQnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBkZXBlbmRpbmcgb24gaW5kaXZpZHVhbCBwcm9wZXJ0aWVzXG4gIHdoaXRlTGlzdFsnZ3JpZC1hcmVhJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogZGVwZW5kaW5nIG9uIGluZGl2aWR1YWwgcHJvcGVydGllc1xuICB3aGl0ZUxpc3RbJ2dyaWQtYXV0by1jb2x1bW5zJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ2dyaWQtYXV0by1mbG93J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ2dyaWQtYXV0by1yb3dzJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ2dyaWQtY29sdW1uJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogZGVwZW5kaW5nIG9uIGluZGl2aWR1YWwgcHJvcGVydGllc1xuICB3aGl0ZUxpc3RbJ2dyaWQtY29sdW1uLWVuZCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0WydncmlkLWNvbHVtbi1zdGFydCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0WydncmlkLXJvdyddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGRlcGVuZGluZyBvbiBpbmRpdmlkdWFsIHByb3BlcnRpZXNcbiAgd2hpdGVMaXN0WydncmlkLXJvdy1lbmQnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnZ3JpZC1yb3ctc3RhcnQnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnZ3JpZC10ZW1wbGF0ZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGRlcGVuZGluZyBvbiBpbmRpdmlkdWFsIHByb3BlcnRpZXNcbiAgd2hpdGVMaXN0WydncmlkLXRlbXBsYXRlLWFyZWFzJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0WydncmlkLXRlbXBsYXRlLXJvd3MnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsnaGFuZ2luZy1wdW5jdHVhdGlvbiddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0WydoZWlnaHQnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0WydoeXBoZW5zJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbWFudWFsXG4gIHdoaXRlTGlzdFsnaWNvbiddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0WydpbWFnZS1vcmllbnRhdGlvbiddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0WydpbWFnZS1yZXNvbHV0aW9uJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsnaW1lLW1vZGUnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnaW5pdGlhbC1sZXR0ZXJzJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsnaW5saW5lLWJveC1hbGlnbiddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGxhc3RcbiAgd2hpdGVMaXN0WydqdXN0aWZ5LWNvbnRlbnQnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnanVzdGlmeS1pdGVtcyddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0WydqdXN0aWZ5LXNlbGYnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnbGVmdCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0WydsZXR0ZXItc3BhY2luZyddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsnbGlnaHRpbmctY29sb3InXSA9IHRydWU7IC8vIGRlZmF1bHQ6IHdoaXRlXG4gIHdoaXRlTGlzdFsnbGluZS1ib3gtY29udGFpbiddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGJsb2NrIGlubGluZSByZXBsYWNlZFxuICB3aGl0ZUxpc3RbJ2xpbmUtYnJlYWsnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnbGluZS1ncmlkJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbWF0Y2gtcGFyZW50XG4gIHdoaXRlTGlzdFsnbGluZS1oZWlnaHQnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub3JtYWxcbiAgd2hpdGVMaXN0WydsaW5lLXNuYXAnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsnbGluZS1zdGFja2luZyddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGRlcGVuZGluZyBvbiBpbmRpdmlkdWFsIHByb3BlcnRpZXNcbiAgd2hpdGVMaXN0WydsaW5lLXN0YWNraW5nLXJ1YnknXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBleGNsdWRlLXJ1YnlcbiAgd2hpdGVMaXN0WydsaW5lLXN0YWNraW5nLXNoaWZ0J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogY29uc2lkZXItc2hpZnRzXG4gIHdoaXRlTGlzdFsnbGluZS1zdGFja2luZy1zdHJhdGVneSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGlubGluZS1saW5lLWhlaWdodFxuICB3aGl0ZUxpc3RbJ2xpc3Qtc3R5bGUnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IGRlcGVuZGluZyBvbiBpbmRpdmlkdWFsIHByb3BlcnRpZXNcbiAgd2hpdGVMaXN0WydsaXN0LXN0eWxlLWltYWdlJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsnbGlzdC1zdHlsZS1wb3NpdGlvbiddID0gdHJ1ZTsgLy8gZGVmYXVsdDogb3V0c2lkZVxuICB3aGl0ZUxpc3RbJ2xpc3Qtc3R5bGUtdHlwZSddID0gdHJ1ZTsgLy8gZGVmYXVsdDogZGlzY1xuICB3aGl0ZUxpc3RbJ21hcmdpbiddID0gdHJ1ZTsgLy8gZGVmYXVsdDogZGVwZW5kaW5nIG9uIGluZGl2aWR1YWwgcHJvcGVydGllc1xuICB3aGl0ZUxpc3RbJ21hcmdpbi1ib3R0b20nXSA9IHRydWU7IC8vIGRlZmF1bHQ6IDBcbiAgd2hpdGVMaXN0WydtYXJnaW4tbGVmdCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogMFxuICB3aGl0ZUxpc3RbJ21hcmdpbi1yaWdodCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogMFxuICB3aGl0ZUxpc3RbJ21hcmdpbi10b3AnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IDBcbiAgd2hpdGVMaXN0WydtYXJrZXItb2Zmc2V0J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ21hcmtlci1zaWRlJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbGlzdC1pdGVtXG4gIHdoaXRlTGlzdFsnbWFya3MnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsnbWFzayddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGJvcmRlci1ib3hcbiAgd2hpdGVMaXN0WydtYXNrLWJveCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IHNlZSBpbmRpdmlkdWFsIHByb3BlcnRpZXNcbiAgd2hpdGVMaXN0WydtYXNrLWJveC1vdXRzZXQnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiAwXG4gIHdoaXRlTGlzdFsnbWFzay1ib3gtcmVwZWF0J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogc3RyZXRjaFxuICB3aGl0ZUxpc3RbJ21hc2stYm94LXNsaWNlJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogMCBmaWxsXG4gIHdoaXRlTGlzdFsnbWFzay1ib3gtc291cmNlJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ21hc2stYm94LXdpZHRoJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ21hc2stY2xpcCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGJvcmRlci1ib3hcbiAgd2hpdGVMaXN0WydtYXNrLWltYWdlJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ21hc2stb3JpZ2luJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYm9yZGVyLWJveFxuICB3aGl0ZUxpc3RbJ21hc2stcG9zaXRpb24nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBjZW50ZXJcbiAgd2hpdGVMaXN0WydtYXNrLXJlcGVhdCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vLXJlcGVhdFxuICB3aGl0ZUxpc3RbJ21hc2stc2l6ZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGJvcmRlci1ib3hcbiAgd2hpdGVMaXN0WydtYXNrLXNvdXJjZS10eXBlJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ21hc2stdHlwZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGx1bWluYW5jZVxuICB3aGl0ZUxpc3RbJ21heC1oZWlnaHQnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0WydtYXgtbGluZXMnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsnbWF4LXdpZHRoJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsnbWluLWhlaWdodCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogMFxuICB3aGl0ZUxpc3RbJ21pbi13aWR0aCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogMFxuICB3aGl0ZUxpc3RbJ21vdmUtdG8nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub3JtYWxcbiAgd2hpdGVMaXN0WyduYXYtZG93biddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0WyduYXYtaW5kZXgnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnbmF2LWxlZnQnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsnbmF2LXJpZ2h0J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ25hdi11cCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0WydvYmplY3QtZml0J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogZmlsbFxuICB3aGl0ZUxpc3RbJ29iamVjdC1wb3NpdGlvbiddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IDUwJSA1MCVcbiAgd2hpdGVMaXN0WydvcGFjaXR5J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogMVxuICB3aGl0ZUxpc3RbJ29yZGVyJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogMFxuICB3aGl0ZUxpc3RbJ29ycGhhbnMnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiAyXG4gIHdoaXRlTGlzdFsnb3V0bGluZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGRlcGVuZGluZyBvbiBpbmRpdmlkdWFsIHByb3BlcnRpZXNcbiAgd2hpdGVMaXN0WydvdXRsaW5lLWNvbG9yJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogaW52ZXJ0XG4gIHdoaXRlTGlzdFsnb3V0bGluZS1vZmZzZXQnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiAwXG4gIHdoaXRlTGlzdFsnb3V0bGluZS1zdHlsZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0WydvdXRsaW5lLXdpZHRoJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbWVkaXVtXG4gIHdoaXRlTGlzdFsnb3ZlcmZsb3cnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBkZXBlbmRpbmcgb24gaW5kaXZpZHVhbCBwcm9wZXJ0aWVzXG4gIHdoaXRlTGlzdFsnb3ZlcmZsb3ctd3JhcCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vcm1hbFxuICB3aGl0ZUxpc3RbJ292ZXJmbG93LXgnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiB2aXNpYmxlXG4gIHdoaXRlTGlzdFsnb3ZlcmZsb3cteSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IHZpc2libGVcbiAgd2hpdGVMaXN0WydwYWRkaW5nJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBkZXBlbmRpbmcgb24gaW5kaXZpZHVhbCBwcm9wZXJ0aWVzXG4gIHdoaXRlTGlzdFsncGFkZGluZy1ib3R0b20nXSA9IHRydWU7IC8vIGRlZmF1bHQ6IDBcbiAgd2hpdGVMaXN0WydwYWRkaW5nLWxlZnQnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IDBcbiAgd2hpdGVMaXN0WydwYWRkaW5nLXJpZ2h0J10gPSB0cnVlOyAvLyBkZWZhdWx0OiAwXG4gIHdoaXRlTGlzdFsncGFkZGluZy10b3AnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IDBcbiAgd2hpdGVMaXN0WydwYWdlJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ3BhZ2UtYnJlYWstYWZ0ZXInXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsncGFnZS1icmVhay1iZWZvcmUnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsncGFnZS1icmVhay1pbnNpZGUnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsncGFnZS1wb2xpY3knXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBzdGFydFxuICB3aGl0ZUxpc3RbJ3BhdXNlJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogaW1wbGVtZW50YXRpb24gZGVwZW5kZW50XG4gIHdoaXRlTGlzdFsncGF1c2UtYWZ0ZXInXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnRcbiAgd2hpdGVMaXN0WydwYXVzZS1iZWZvcmUnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnRcbiAgd2hpdGVMaXN0WydwZXJzcGVjdGl2ZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0WydwZXJzcGVjdGl2ZS1vcmlnaW4nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiA1MCUgNTAlXG4gIHdoaXRlTGlzdFsncGl0Y2gnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBtZWRpdW1cbiAgd2hpdGVMaXN0WydwaXRjaC1yYW5nZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IDUwXG4gIHdoaXRlTGlzdFsncGxheS1kdXJpbmcnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsncG9zaXRpb24nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBzdGF0aWNcbiAgd2hpdGVMaXN0WydwcmVzZW50YXRpb24tbGV2ZWwnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiAwXG4gIHdoaXRlTGlzdFsncXVvdGVzJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogdGV4dFxuICB3aGl0ZUxpc3RbJ3JlZ2lvbi1mcmFnbWVudCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0WydyZXNpemUnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsncmVzdCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGRlcGVuZGluZyBvbiBpbmRpdmlkdWFsIHByb3BlcnRpZXNcbiAgd2hpdGVMaXN0WydyZXN0LWFmdGVyJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ3Jlc3QtYmVmb3JlJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ3JpY2huZXNzJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogNTBcbiAgd2hpdGVMaXN0WydyaWdodCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0Wydyb3RhdGlvbiddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IDBcbiAgd2hpdGVMaXN0Wydyb3RhdGlvbi1wb2ludCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IDUwJSA1MCVcbiAgd2hpdGVMaXN0WydydWJ5LWFsaWduJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ3J1YnktbWVyZ2UnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBzZXBhcmF0ZVxuICB3aGl0ZUxpc3RbJ3J1YnktcG9zaXRpb24nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBiZWZvcmVcbiAgd2hpdGVMaXN0WydzaGFwZS1pbWFnZS10aHJlc2hvbGQnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiAwLjBcbiAgd2hpdGVMaXN0WydzaGFwZS1vdXRzaWRlJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ3NoYXBlLW1hcmdpbiddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IDBcbiAgd2hpdGVMaXN0WydzaXplJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ3NwZWFrJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ3NwZWFrLWFzJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsnc3BlYWstaGVhZGVyJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogb25jZVxuICB3aGl0ZUxpc3RbJ3NwZWFrLW51bWVyYWwnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBjb250aW51b3VzXG4gIHdoaXRlTGlzdFsnc3BlYWstcHVuY3R1YXRpb24nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsnc3BlZWNoLXJhdGUnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBtZWRpdW1cbiAgd2hpdGVMaXN0WydzdHJlc3MnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiA1MFxuICB3aGl0ZUxpc3RbJ3N0cmluZy1zZXQnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsndGFiLXNpemUnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiA4XG4gIHdoaXRlTGlzdFsndGFibGUtbGF5b3V0J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ3RleHQtYWxpZ24nXSA9IHRydWU7IC8vIGRlZmF1bHQ6IHN0YXJ0XG4gIHdoaXRlTGlzdFsndGV4dC1hbGlnbi1sYXN0J10gPSB0cnVlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsndGV4dC1jb21iaW5lLXVwcmlnaHQnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0Wyd0ZXh0LWRlY29yYXRpb24nXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG5vbmVcbiAgd2hpdGVMaXN0Wyd0ZXh0LWRlY29yYXRpb24tY29sb3InXSA9IHRydWU7IC8vIGRlZmF1bHQ6IGN1cnJlbnRDb2xvclxuICB3aGl0ZUxpc3RbJ3RleHQtZGVjb3JhdGlvbi1saW5lJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsndGV4dC1kZWNvcmF0aW9uLXNraXAnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG9iamVjdHNcbiAgd2hpdGVMaXN0Wyd0ZXh0LWRlY29yYXRpb24tc3R5bGUnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IHNvbGlkXG4gIHdoaXRlTGlzdFsndGV4dC1lbXBoYXNpcyddID0gdHJ1ZTsgLy8gZGVmYXVsdDogZGVwZW5kaW5nIG9uIGluZGl2aWR1YWwgcHJvcGVydGllc1xuICB3aGl0ZUxpc3RbJ3RleHQtZW1waGFzaXMtY29sb3InXSA9IHRydWU7IC8vIGRlZmF1bHQ6IGN1cnJlbnRDb2xvclxuICB3aGl0ZUxpc3RbJ3RleHQtZW1waGFzaXMtcG9zaXRpb24nXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG92ZXIgcmlnaHRcbiAgd2hpdGVMaXN0Wyd0ZXh0LWVtcGhhc2lzLXN0eWxlJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsndGV4dC1oZWlnaHQnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0Wyd0ZXh0LWluZGVudCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogMFxuICB3aGl0ZUxpc3RbJ3RleHQtanVzdGlmeSddID0gdHJ1ZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ3RleHQtb3JpZW50YXRpb24nXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG1peGVkXG4gIHdoaXRlTGlzdFsndGV4dC1vdmVyZmxvdyddID0gdHJ1ZTsgLy8gZGVmYXVsdDogY2xpcFxuICB3aGl0ZUxpc3RbJ3RleHQtc2hhZG93J10gPSB0cnVlOyAvLyBkZWZhdWx0OiBub25lXG4gIHdoaXRlTGlzdFsndGV4dC1zcGFjZS1jb2xsYXBzZSddID0gdHJ1ZTsgLy8gZGVmYXVsdDogY29sbGFwc2VcbiAgd2hpdGVMaXN0Wyd0ZXh0LXRyYW5zZm9ybSddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ3RleHQtdW5kZXJsaW5lLXBvc2l0aW9uJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsndGV4dC13cmFwJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBub3JtYWxcbiAgd2hpdGVMaXN0Wyd0b3AnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBhdXRvXG4gIHdoaXRlTGlzdFsndHJhbnNmb3JtJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9uZVxuICB3aGl0ZUxpc3RbJ3RyYW5zZm9ybS1vcmlnaW4nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiA1MCUgNTAlIDBcbiAgd2hpdGVMaXN0Wyd0cmFuc2Zvcm0tc3R5bGUnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBmbGF0XG4gIHdoaXRlTGlzdFsndHJhbnNpdGlvbiddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGRlcGVuZGluZyBvbiBpbmRpdmlkdWFsIHByb3BlcnRpZXNcbiAgd2hpdGVMaXN0Wyd0cmFuc2l0aW9uLWRlbGF5J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogMHNcbiAgd2hpdGVMaXN0Wyd0cmFuc2l0aW9uLWR1cmF0aW9uJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogMHNcbiAgd2hpdGVMaXN0Wyd0cmFuc2l0aW9uLXByb3BlcnR5J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYWxsXG4gIHdoaXRlTGlzdFsndHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBlYXNlXG4gIHdoaXRlTGlzdFsndW5pY29kZS1iaWRpJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsndmVydGljYWwtYWxpZ24nXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBiYXNlbGluZVxuICB3aGl0ZUxpc3RbJ3Zpc2liaWxpdHknXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiB2aXNpYmxlXG4gIHdoaXRlTGlzdFsndm9pY2UtYmFsYW5jZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGNlbnRlclxuICB3aGl0ZUxpc3RbJ3ZvaWNlLWR1cmF0aW9uJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ3ZvaWNlLWZhbWlseSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGltcGxlbWVudGF0aW9uIGRlcGVuZGVudFxuICB3aGl0ZUxpc3RbJ3ZvaWNlLXBpdGNoJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbWVkaXVtXG4gIHdoaXRlTGlzdFsndm9pY2UtcmFuZ2UnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBtZWRpdW1cbiAgd2hpdGVMaXN0Wyd2b2ljZS1yYXRlJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsndm9pY2Utc3RyZXNzJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsndm9pY2Utdm9sdW1lJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbWVkaXVtXG4gIHdoaXRlTGlzdFsndm9sdW1lJ10gPSBmYWxzZTsgLy8gZGVmYXVsdDogbWVkaXVtXG4gIHdoaXRlTGlzdFsnd2hpdGUtc3BhY2UnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBub3JtYWxcbiAgd2hpdGVMaXN0Wyd3aWRvd3MnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiAyXG4gIHdoaXRlTGlzdFsnd2lkdGgnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0Wyd3aWxsLWNoYW5nZSddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGF1dG9cbiAgd2hpdGVMaXN0Wyd3b3JkLWJyZWFrJ10gPSB0cnVlOyAvLyBkZWZhdWx0OiBub3JtYWxcbiAgd2hpdGVMaXN0Wyd3b3JkLXNwYWNpbmcnXSA9IHRydWU7IC8vIGRlZmF1bHQ6IG5vcm1hbFxuICB3aGl0ZUxpc3RbJ3dvcmQtd3JhcCddID0gdHJ1ZTsgLy8gZGVmYXVsdDogbm9ybWFsXG4gIHdoaXRlTGlzdFsnd3JhcC1mbG93J10gPSBmYWxzZTsgLy8gZGVmYXVsdDogYXV0b1xuICB3aGl0ZUxpc3RbJ3dyYXAtdGhyb3VnaCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IHdyYXBcbiAgd2hpdGVMaXN0Wyd3cml0aW5nLW1vZGUnXSA9IGZhbHNlOyAvLyBkZWZhdWx0OiBob3Jpem9udGFsLXRiXG4gIHdoaXRlTGlzdFsnei1pbmRleCddID0gZmFsc2U7IC8vIGRlZmF1bHQ6IGF1dG9cblxuICByZXR1cm4gd2hpdGVMaXN0O1xufVxuXG5cbi8qKlxuICog5Yy56YWN5Yiw55m95ZCN5Y2V5LiK55qE5LiA5Liq5bGe5oCn5pe2XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gb25BdHRyIChuYW1lLCB2YWx1ZSwgb3B0aW9ucykge1xuICAvLyBkbyBub3RoaW5nXG59XG5cbi8qKlxuICog5Yy56YWN5Yiw5LiN5Zyo55m95ZCN5Y2V5LiK55qE5LiA5Liq5bGe5oCn5pe2XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gb25JZ25vcmVBdHRyIChuYW1lLCB2YWx1ZSwgb3B0aW9ucykge1xuICAvLyBkbyBub3RoaW5nXG59XG5cbnZhciBSRUdFWFBfVVJMX0pBVkFTQ1JJUFQgPSAvamF2YXNjcmlwdFxccypcXDovaW1nO1xuXG4vKipcbiAqIOi/h+a7pOWxnuaAp+WAvFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc2FmZUF0dHJWYWx1ZShuYW1lLCB2YWx1ZSkge1xuICBpZiAoUkVHRVhQX1VSTF9KQVZBU0NSSVBULnRlc3QodmFsdWUpKSByZXR1cm4gJyc7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuXG5leHBvcnRzLndoaXRlTGlzdCA9IGdldERlZmF1bHRXaGl0ZUxpc3QoKTtcbmV4cG9ydHMuZ2V0RGVmYXVsdFdoaXRlTGlzdCA9IGdldERlZmF1bHRXaGl0ZUxpc3Q7XG5leHBvcnRzLm9uQXR0ciA9IG9uQXR0cjtcbmV4cG9ydHMub25JZ25vcmVBdHRyID0gb25JZ25vcmVBdHRyO1xuZXhwb3J0cy5zYWZlQXR0clZhbHVlID0gc2FmZUF0dHJWYWx1ZTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBpbmRleE9mOiBmdW5jdGlvbiAoYXJyLCBpdGVtKSB7XG4gICAgdmFyIGksIGo7XG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICByZXR1cm4gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgfVxuICAgIGZvciAoaSA9IDAsIGogPSBhcnIubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICBpZiAoYXJyW2ldID09PSBpdGVtKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH0sXG4gIGZvckVhY2g6IGZ1bmN0aW9uIChhcnIsIGZuLCBzY29wZSkge1xuICAgIHZhciBpLCBqO1xuICAgIGlmIChBcnJheS5wcm90b3R5cGUuZm9yRWFjaCkge1xuICAgICAgcmV0dXJuIGFyci5mb3JFYWNoKGZuLCBzY29wZSk7XG4gICAgfVxuICAgIGZvciAoaSA9IDAsIGogPSBhcnIubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICBmbi5jYWxsKHNjb3BlLCBhcnJbaV0sIGksIGFycik7XG4gICAgfVxuICB9LFxuICB0cmltOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgaWYgKFN0cmluZy5wcm90b3R5cGUudHJpbSkge1xuICAgICAgcmV0dXJuIHN0ci50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiBzdHIucmVwbGFjZSgvKF5cXHMqKXwoXFxzKiQpL2csICcnKTtcbiAgfSxcbiAgdHJpbVJpZ2h0OiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgaWYgKFN0cmluZy5wcm90b3R5cGUudHJpbVJpZ2h0KSB7XG4gICAgICByZXR1cm4gc3RyLnRyaW1SaWdodCgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhcXHMqJCkvZywgJycpO1xuICB9XG59O1xuIiwiLyoqXG4gKiBjc3NmaWx0ZXJcbiAqXG4gKiBAYXV0aG9yIOiAgembtzxsZWl6b25nbWluQGdtYWlsLmNvbT5cbiAqL1xuXG52YXIgXyA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5cbi8qKlxuICog6Kej5p6Qc3R5bGVcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gY3NzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkF0dHIg5aSE55CG5bGe5oCn55qE5Ye95pWwXG4gKiAgIOWPguaVsOagvOW8j++8miBmdW5jdGlvbiAoc291cmNlUG9zaXRpb24sIHBvc2l0aW9uLCBuYW1lLCB2YWx1ZSwgc291cmNlKVxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBwYXJzZVN0eWxlIChjc3MsIG9uQXR0cikge1xuICBjc3MgPSBfLnRyaW1SaWdodChjc3MpO1xuICBpZiAoY3NzW2Nzcy5sZW5ndGggLSAxXSAhPT0gJzsnKSBjc3MgKz0gJzsnO1xuICB2YXIgY3NzTGVuZ3RoID0gY3NzLmxlbmd0aDtcbiAgdmFyIGlzUGFyZW50aGVzaXNPcGVuID0gZmFsc2U7XG4gIHZhciBsYXN0UG9zID0gMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmV0Q1NTID0gJyc7XG5cbiAgZnVuY3Rpb24gYWRkTmV3QXR0ciAoKSB7XG4gICAgLy8g5aaC5p6c5rKh5pyJ5q2j5bi455qE6Zet5ZCI5ZyG5ous5Y+377yM5YiZ55u05o6l5b+955Wl5b2T5YmN5bGe5oCnXG4gICAgaWYgKCFpc1BhcmVudGhlc2lzT3Blbikge1xuICAgICAgdmFyIHNvdXJjZSA9IF8udHJpbShjc3Muc2xpY2UobGFzdFBvcywgaSkpO1xuICAgICAgdmFyIGogPSBzb3VyY2UuaW5kZXhPZignOicpO1xuICAgICAgaWYgKGogIT09IC0xKSB7XG4gICAgICAgIHZhciBuYW1lID0gXy50cmltKHNvdXJjZS5zbGljZSgwLCBqKSk7XG4gICAgICAgIHZhciB2YWx1ZSA9IF8udHJpbShzb3VyY2Uuc2xpY2UoaiArIDEpKTtcbiAgICAgICAgLy8g5b+F6aG75pyJ5bGe5oCn5ZCN56ewXG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgdmFyIHJldCA9IG9uQXR0cihsYXN0UG9zLCByZXRDU1MubGVuZ3RoLCBuYW1lLCB2YWx1ZSwgc291cmNlKTtcbiAgICAgICAgICBpZiAocmV0KSByZXRDU1MgKz0gcmV0ICsgJzsgJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsYXN0UG9zID0gaSArIDE7XG4gIH1cblxuICBmb3IgKDsgaSA8IGNzc0xlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGMgPSBjc3NbaV07XG4gICAgaWYgKGMgPT09ICcvJyAmJiBjc3NbaSArIDFdID09PSAnKicpIHtcbiAgICAgIC8vIOWkh+azqOW8gOWni1xuICAgICAgdmFyIGogPSBjc3MuaW5kZXhPZignKi8nLCBpICsgMik7XG4gICAgICAvLyDlpoLmnpzmsqHmnInmraPluLjnmoTlpIfms6jnu5PmnZ/vvIzliJnlkI7pnaLnmoTpg6jliIblhajpg6jot7Pov4dcbiAgICAgIGlmIChqID09PSAtMSkgYnJlYWs7XG4gICAgICAvLyDnm7TmjqXlsIblvZPliY3kvY3nva7osIPliLDlpIfms6jnu5PlsL7vvIzlubbkuJTliJ3lp4vljJbnirbmgIFcbiAgICAgIGkgPSBqICsgMTtcbiAgICAgIGxhc3RQb3MgPSBpICsgMTtcbiAgICAgIGlzUGFyZW50aGVzaXNPcGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChjID09PSAnKCcpIHtcbiAgICAgIGlzUGFyZW50aGVzaXNPcGVuID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGMgPT09ICcpJykge1xuICAgICAgaXNQYXJlbnRoZXNpc09wZW4gPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGMgPT09ICc7Jykge1xuICAgICAgaWYgKGlzUGFyZW50aGVzaXNPcGVuKSB7XG4gICAgICAgIC8vIOWcqOWchuaLrOWPt+mHjOmdou+8jOW/veeVpVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWRkTmV3QXR0cigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYyA9PT0gJ1xcbicpIHtcbiAgICAgIGFkZE5ld0F0dHIoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gXy50cmltKHJldENTUyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VTdHlsZTtcbiIsIi8qKlxuICogY3NzZmlsdGVyXG4gKlxuICogQGF1dGhvciDogIHpm7c8bGVpem9uZ21pbkBnbWFpbC5jb20+XG4gKi9cblxudmFyIERFRkFVTFQgPSByZXF1aXJlKCcuL2RlZmF1bHQnKTtcbnZhciBwYXJzZVN0eWxlID0gcmVxdWlyZSgnLi9wYXJzZXInKTtcbnZhciBfID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cblxuLyoqXG4gKiDov5Tlm57lgLzmmK/lkKbkuLrnqbpcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc051bGwgKG9iaikge1xuICByZXR1cm4gKG9iaiA9PT0gdW5kZWZpbmVkIHx8IG9iaiA9PT0gbnVsbCk7XG59XG5cbi8qKlxuICog5rWF5ou36LSd5a+56LGhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBzaGFsbG93Q29weU9iamVjdCAob2JqKSB7XG4gIHZhciByZXQgPSB7fTtcbiAgZm9yICh2YXIgaSBpbiBvYmopIHtcbiAgICByZXRbaV0gPSBvYmpbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiDliJvlu7pDU1Pov4fmu6TlmahcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogICAtIHtPYmplY3R9IHdoaXRlTGlzdFxuICogICAtIHtGdW5jdGlvbn0gb25BdHRyXG4gKiAgIC0ge0Z1bmN0aW9ufSBvbklnbm9yZUF0dHJcbiAqICAgLSB7RnVuY3Rpb259IHNhZmVBdHRyVmFsdWVcbiAqL1xuZnVuY3Rpb24gRmlsdGVyQ1NTIChvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBzaGFsbG93Q29weU9iamVjdChvcHRpb25zIHx8IHt9KTtcbiAgb3B0aW9ucy53aGl0ZUxpc3QgPSBvcHRpb25zLndoaXRlTGlzdCB8fCBERUZBVUxULndoaXRlTGlzdDtcbiAgb3B0aW9ucy5vbkF0dHIgPSBvcHRpb25zLm9uQXR0ciB8fCBERUZBVUxULm9uQXR0cjtcbiAgb3B0aW9ucy5vbklnbm9yZUF0dHIgPSBvcHRpb25zLm9uSWdub3JlQXR0ciB8fCBERUZBVUxULm9uSWdub3JlQXR0cjtcbiAgb3B0aW9ucy5zYWZlQXR0clZhbHVlID0gb3B0aW9ucy5zYWZlQXR0clZhbHVlIHx8IERFRkFVTFQuc2FmZUF0dHJWYWx1ZTtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbn1cblxuRmlsdGVyQ1NTLnByb3RvdHlwZS5wcm9jZXNzID0gZnVuY3Rpb24gKGNzcykge1xuICAvLyDlhbzlrrnlkITnp43lpYfokanovpPlhaVcbiAgY3NzID0gY3NzIHx8ICcnO1xuICBjc3MgPSBjc3MudG9TdHJpbmcoKTtcbiAgaWYgKCFjc3MpIHJldHVybiAnJztcblxuICB2YXIgbWUgPSB0aGlzO1xuICB2YXIgb3B0aW9ucyA9IG1lLm9wdGlvbnM7XG4gIHZhciB3aGl0ZUxpc3QgPSBvcHRpb25zLndoaXRlTGlzdDtcbiAgdmFyIG9uQXR0ciA9IG9wdGlvbnMub25BdHRyO1xuICB2YXIgb25JZ25vcmVBdHRyID0gb3B0aW9ucy5vbklnbm9yZUF0dHI7XG4gIHZhciBzYWZlQXR0clZhbHVlID0gb3B0aW9ucy5zYWZlQXR0clZhbHVlO1xuXG4gIHZhciByZXRDU1MgPSBwYXJzZVN0eWxlKGNzcywgZnVuY3Rpb24gKHNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbiwgbmFtZSwgdmFsdWUsIHNvdXJjZSkge1xuXG4gICAgdmFyIGNoZWNrID0gd2hpdGVMaXN0W25hbWVdO1xuICAgIHZhciBpc1doaXRlID0gZmFsc2U7XG4gICAgaWYgKGNoZWNrID09PSB0cnVlKSBpc1doaXRlID0gY2hlY2s7XG4gICAgZWxzZSBpZiAodHlwZW9mIGNoZWNrID09PSAnZnVuY3Rpb24nKSBpc1doaXRlID0gY2hlY2sodmFsdWUpO1xuICAgIGVsc2UgaWYgKGNoZWNrIGluc3RhbmNlb2YgUmVnRXhwKSBpc1doaXRlID0gY2hlY2sudGVzdCh2YWx1ZSk7XG4gICAgaWYgKGlzV2hpdGUgIT09IHRydWUpIGlzV2hpdGUgPSBmYWxzZTtcblxuICAgIC8vIOWmguaenOi/h+a7pOWQjiB2YWx1ZSDkuLrnqbrliJnnm7TmjqXlv73nlaVcbiAgICB2YWx1ZSA9IHNhZmVBdHRyVmFsdWUobmFtZSwgdmFsdWUpO1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgIHZhciBvcHRzID0ge1xuICAgICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgICAgc291cmNlUG9zaXRpb246IHNvdXJjZVBvc2l0aW9uLFxuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBpc1doaXRlOiBpc1doaXRlXG4gICAgfTtcblxuICAgIGlmIChpc1doaXRlKSB7XG5cbiAgICAgIHZhciByZXQgPSBvbkF0dHIobmFtZSwgdmFsdWUsIG9wdHMpO1xuICAgICAgaWYgKGlzTnVsbChyZXQpKSB7XG4gICAgICAgIHJldHVybiBuYW1lICsgJzonICsgdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcblxuICAgICAgdmFyIHJldCA9IG9uSWdub3JlQXR0cihuYW1lLCB2YWx1ZSwgb3B0cyk7XG4gICAgICBpZiAoIWlzTnVsbChyZXQpKSB7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG5cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiByZXRDU1M7XG59O1xuXG5cbm1vZHVsZS5leHBvcnRzID0gRmlsdGVyQ1NTO1xuIiwiLyoqXG4gKiBjc3NmaWx0ZXJcbiAqXG4gKiBAYXV0aG9yIOiAgembtzxsZWl6b25nbWluQGdtYWlsLmNvbT5cbiAqL1xuXG52YXIgREVGQVVMVCA9IHJlcXVpcmUoJy4vZGVmYXVsdCcpO1xudmFyIEZpbHRlckNTUyA9IHJlcXVpcmUoJy4vY3NzJyk7XG5cblxuLyoqXG4gKiBYU1Pov4fmu6RcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gY3NzIOimgei/h+a7pOeahENTU+S7o+eggVxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMg6YCJ6aG577yad2hpdGVMaXN0LCBvbkF0dHIsIG9uSWdub3JlQXR0clxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBmaWx0ZXJDU1MgKGh0bWwsIG9wdGlvbnMpIHtcbiAgdmFyIHhzcyA9IG5ldyBGaWx0ZXJDU1Mob3B0aW9ucyk7XG4gIHJldHVybiB4c3MucHJvY2VzcyhodG1sKTtcbn1cblxuXG4vLyDovpPlh7pcbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZpbHRlckNTUztcbmV4cG9ydHMuRmlsdGVyQ1NTID0gRmlsdGVyQ1NTO1xuZm9yICh2YXIgaSBpbiBERUZBVUxUKSBleHBvcnRzW2ldID0gREVGQVVMVFtpXTtcblxuLy8g5Zyo5rWP6KeI5Zmo56uv5L2/55SoXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgd2luZG93LmZpbHRlckNTUyA9IG1vZHVsZS5leHBvcnRzO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGluZGV4T2Y6IGZ1bmN0aW9uIChhcnIsIGl0ZW0pIHtcbiAgICB2YXIgaSwgajtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIHtcbiAgICAgIHJldHVybiBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICB9XG4gICAgZm9yIChpID0gMCwgaiA9IGFyci5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gKGFyciwgZm4sIHNjb3BlKSB7XG4gICAgdmFyIGksIGo7XG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSB7XG4gICAgICByZXR1cm4gYXJyLmZvckVhY2goZm4sIHNjb3BlKTtcbiAgICB9XG4gICAgZm9yIChpID0gMCwgaiA9IGFyci5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgIGZuLmNhbGwoc2NvcGUsIGFycltpXSwgaSwgYXJyKTtcbiAgICB9XG4gIH0sXG4gIHRyaW06IGZ1bmN0aW9uIChzdHIpIHtcbiAgICBpZiAoU3RyaW5nLnByb3RvdHlwZS50cmltKSB7XG4gICAgICByZXR1cm4gc3RyLnRyaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oXlxccyopfChcXHMqJCkvZywgXCJcIik7XG4gIH0sXG4gIHNwYWNlSW5kZXg6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgcmVnID0gL1xcc3xcXG58XFx0LztcbiAgICB2YXIgbWF0Y2ggPSByZWcuZXhlYyhzdHIpO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoLmluZGV4IDogLTE7XG4gIH0sXG59O1xuIiwiLyoqXG4gKiBkZWZhdWx0IHNldHRpbmdzXG4gKlxuICogQGF1dGhvciBab25nbWluIExlaTxsZWl6b25nbWluQGdtYWlsLmNvbT5cbiAqL1xuXG52YXIgRmlsdGVyQ1NTID0gcmVxdWlyZShcImNzc2ZpbHRlclwiKS5GaWx0ZXJDU1M7XG52YXIgZ2V0RGVmYXVsdENTU1doaXRlTGlzdCA9IHJlcXVpcmUoXCJjc3NmaWx0ZXJcIikuZ2V0RGVmYXVsdFdoaXRlTGlzdDtcbnZhciBfID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFdoaXRlTGlzdCgpIHtcbiAgcmV0dXJuIHtcbiAgICBhOiBbXCJ0YXJnZXRcIiwgXCJocmVmXCIsIFwidGl0bGVcIl0sXG4gICAgYWJicjogW1widGl0bGVcIl0sXG4gICAgYWRkcmVzczogW10sXG4gICAgYXJlYTogW1wic2hhcGVcIiwgXCJjb29yZHNcIiwgXCJocmVmXCIsIFwiYWx0XCJdLFxuICAgIGFydGljbGU6IFtdLFxuICAgIGFzaWRlOiBbXSxcbiAgICBhdWRpbzogW1xuICAgICAgXCJhdXRvcGxheVwiLFxuICAgICAgXCJjb250cm9sc1wiLFxuICAgICAgXCJjcm9zc29yaWdpblwiLFxuICAgICAgXCJsb29wXCIsXG4gICAgICBcIm11dGVkXCIsXG4gICAgICBcInByZWxvYWRcIixcbiAgICAgIFwic3JjXCIsXG4gICAgXSxcbiAgICBiOiBbXSxcbiAgICBiZGk6IFtcImRpclwiXSxcbiAgICBiZG86IFtcImRpclwiXSxcbiAgICBiaWc6IFtdLFxuICAgIGJsb2NrcXVvdGU6IFtcImNpdGVcIl0sXG4gICAgYnI6IFtdLFxuICAgIGNhcHRpb246IFtdLFxuICAgIGNlbnRlcjogW10sXG4gICAgY2l0ZTogW10sXG4gICAgY29kZTogW10sXG4gICAgY29sOiBbXCJhbGlnblwiLCBcInZhbGlnblwiLCBcInNwYW5cIiwgXCJ3aWR0aFwiXSxcbiAgICBjb2xncm91cDogW1wiYWxpZ25cIiwgXCJ2YWxpZ25cIiwgXCJzcGFuXCIsIFwid2lkdGhcIl0sXG4gICAgZGQ6IFtdLFxuICAgIGRlbDogW1wiZGF0ZXRpbWVcIl0sXG4gICAgZGV0YWlsczogW1wib3BlblwiXSxcbiAgICBkaXY6IFtdLFxuICAgIGRsOiBbXSxcbiAgICBkdDogW10sXG4gICAgZW06IFtdLFxuICAgIGZpZ2NhcHRpb246IFtdLFxuICAgIGZpZ3VyZTogW10sXG4gICAgZm9udDogW1wiY29sb3JcIiwgXCJzaXplXCIsIFwiZmFjZVwiXSxcbiAgICBmb290ZXI6IFtdLFxuICAgIGgxOiBbXSxcbiAgICBoMjogW10sXG4gICAgaDM6IFtdLFxuICAgIGg0OiBbXSxcbiAgICBoNTogW10sXG4gICAgaDY6IFtdLFxuICAgIGhlYWRlcjogW10sXG4gICAgaHI6IFtdLFxuICAgIGk6IFtdLFxuICAgIGltZzogW1wic3JjXCIsIFwiYWx0XCIsIFwidGl0bGVcIiwgXCJ3aWR0aFwiLCBcImhlaWdodFwiXSxcbiAgICBpbnM6IFtcImRhdGV0aW1lXCJdLFxuICAgIGxpOiBbXSxcbiAgICBtYXJrOiBbXSxcbiAgICBuYXY6IFtdLFxuICAgIG9sOiBbXSxcbiAgICBwOiBbXSxcbiAgICBwcmU6IFtdLFxuICAgIHM6IFtdLFxuICAgIHNlY3Rpb246IFtdLFxuICAgIHNtYWxsOiBbXSxcbiAgICBzcGFuOiBbXSxcbiAgICBzdWI6IFtdLFxuICAgIHN1bW1hcnk6IFtdLFxuICAgIHN1cDogW10sXG4gICAgc3Ryb25nOiBbXSxcbiAgICBzdHJpa2U6IFtdLFxuICAgIHRhYmxlOiBbXCJ3aWR0aFwiLCBcImJvcmRlclwiLCBcImFsaWduXCIsIFwidmFsaWduXCJdLFxuICAgIHRib2R5OiBbXCJhbGlnblwiLCBcInZhbGlnblwiXSxcbiAgICB0ZDogW1wid2lkdGhcIiwgXCJyb3dzcGFuXCIsIFwiY29sc3BhblwiLCBcImFsaWduXCIsIFwidmFsaWduXCJdLFxuICAgIHRmb290OiBbXCJhbGlnblwiLCBcInZhbGlnblwiXSxcbiAgICB0aDogW1wid2lkdGhcIiwgXCJyb3dzcGFuXCIsIFwiY29sc3BhblwiLCBcImFsaWduXCIsIFwidmFsaWduXCJdLFxuICAgIHRoZWFkOiBbXCJhbGlnblwiLCBcInZhbGlnblwiXSxcbiAgICB0cjogW1wicm93c3BhblwiLCBcImFsaWduXCIsIFwidmFsaWduXCJdLFxuICAgIHR0OiBbXSxcbiAgICB1OiBbXSxcbiAgICB1bDogW10sXG4gICAgdmlkZW86IFtcbiAgICAgIFwiYXV0b3BsYXlcIixcbiAgICAgIFwiY29udHJvbHNcIixcbiAgICAgIFwiY3Jvc3NvcmlnaW5cIixcbiAgICAgIFwibG9vcFwiLFxuICAgICAgXCJtdXRlZFwiLFxuICAgICAgXCJwbGF5c2lubGluZVwiLFxuICAgICAgXCJwb3N0ZXJcIixcbiAgICAgIFwicHJlbG9hZFwiLFxuICAgICAgXCJzcmNcIixcbiAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICBcIndpZHRoXCIsXG4gICAgXSxcbiAgfTtcbn1cblxudmFyIGRlZmF1bHRDU1NGaWx0ZXIgPSBuZXcgRmlsdGVyQ1NTKCk7XG5cbi8qKlxuICogZGVmYXVsdCBvblRhZyBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YWdcbiAqIEBwYXJhbSB7U3RyaW5nfSBodG1sXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBvblRhZyh0YWcsIGh0bWwsIG9wdGlvbnMpIHtcbiAgLy8gZG8gbm90aGluZ1xufVxuXG4vKipcbiAqIGRlZmF1bHQgb25JZ25vcmVUYWcgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFnXG4gKiBAcGFyYW0ge1N0cmluZ30gaHRtbFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gb25JZ25vcmVUYWcodGFnLCBodG1sLCBvcHRpb25zKSB7XG4gIC8vIGRvIG5vdGhpbmdcbn1cblxuLyoqXG4gKiBkZWZhdWx0IG9uVGFnQXR0ciBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSB0YWdcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gb25UYWdBdHRyKHRhZywgbmFtZSwgdmFsdWUpIHtcbiAgLy8gZG8gbm90aGluZ1xufVxuXG4vKipcbiAqIGRlZmF1bHQgb25JZ25vcmVUYWdBdHRyIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHRhZ1xuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBvbklnbm9yZVRhZ0F0dHIodGFnLCBuYW1lLCB2YWx1ZSkge1xuICAvLyBkbyBub3RoaW5nXG59XG5cbi8qKlxuICogZGVmYXVsdCBlc2NhcGVIdG1sIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGh0bWxcbiAqL1xuZnVuY3Rpb24gZXNjYXBlSHRtbChodG1sKSB7XG4gIHJldHVybiBodG1sLnJlcGxhY2UoUkVHRVhQX0xULCBcIiZsdDtcIikucmVwbGFjZShSRUdFWFBfR1QsIFwiJmd0O1wiKTtcbn1cblxuLyoqXG4gKiBkZWZhdWx0IHNhZmVBdHRyVmFsdWUgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gdGFnXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge09iamVjdH0gY3NzRmlsdGVyXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNhZmVBdHRyVmFsdWUodGFnLCBuYW1lLCB2YWx1ZSwgY3NzRmlsdGVyKSB7XG4gIC8vIHVuZXNjYXBlIGF0dHJpYnV0ZSB2YWx1ZSBmaXJzdGx5XG4gIHZhbHVlID0gZnJpZW5kbHlBdHRyVmFsdWUodmFsdWUpO1xuXG4gIGlmIChuYW1lID09PSBcImhyZWZcIiB8fCBuYW1lID09PSBcInNyY1wiKSB7XG4gICAgLy8gZmlsdGVyIGBocmVmYCBhbmQgYHNyY2AgYXR0cmlidXRlXG4gICAgLy8gb25seSBhbGxvdyB0aGUgdmFsdWUgdGhhdCBzdGFydHMgd2l0aCBgaHR0cDovL2AgfCBgaHR0cHM6Ly9gIHwgYG1haWx0bzpgIHwgYC9gIHwgYCNgXG4gICAgdmFsdWUgPSBfLnRyaW0odmFsdWUpO1xuICAgIGlmICh2YWx1ZSA9PT0gXCIjXCIpIHJldHVybiBcIiNcIjtcbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICB2YWx1ZS5zdWJzdHIoMCwgNykgPT09IFwiaHR0cDovL1wiIHx8XG4gICAgICAgIHZhbHVlLnN1YnN0cigwLCA4KSA9PT0gXCJodHRwczovL1wiIHx8XG4gICAgICAgIHZhbHVlLnN1YnN0cigwLCA3KSA9PT0gXCJtYWlsdG86XCIgfHxcbiAgICAgICAgdmFsdWUuc3Vic3RyKDAsIDQpID09PSBcInRlbDpcIiB8fFxuICAgICAgICB2YWx1ZS5zdWJzdHIoMCwgMTEpID09PSBcImRhdGE6aW1hZ2UvXCIgfHxcbiAgICAgICAgdmFsdWUuc3Vic3RyKDAsIDYpID09PSBcImZ0cDovL1wiIHx8XG4gICAgICAgIHZhbHVlLnN1YnN0cigwLCAyKSA9PT0gXCIuL1wiIHx8XG4gICAgICAgIHZhbHVlLnN1YnN0cigwLCAzKSA9PT0gXCIuLi9cIiB8fFxuICAgICAgICB2YWx1ZVswXSA9PT0gXCIjXCIgfHxcbiAgICAgICAgdmFsdWVbMF0gPT09IFwiL1wiXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gXCJiYWNrZ3JvdW5kXCIpIHtcbiAgICAvLyBmaWx0ZXIgYGJhY2tncm91bmRgIGF0dHJpYnV0ZSAobWF5YmUgbm8gdXNlKVxuICAgIC8vIGBqYXZhc2NyaXB0OmBcbiAgICBSRUdFWFBfREVGQVVMVF9PTl9UQUdfQVRUUl80Lmxhc3RJbmRleCA9IDA7XG4gICAgaWYgKFJFR0VYUF9ERUZBVUxUX09OX1RBR19BVFRSXzQudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIGlmIChuYW1lID09PSBcInN0eWxlXCIpIHtcbiAgICAvLyBgZXhwcmVzc2lvbigpYFxuICAgIFJFR0VYUF9ERUZBVUxUX09OX1RBR19BVFRSXzcubGFzdEluZGV4ID0gMDtcbiAgICBpZiAoUkVHRVhQX0RFRkFVTFRfT05fVEFHX0FUVFJfNy50ZXN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIC8vIGB1cmwoKWBcbiAgICBSRUdFWFBfREVGQVVMVF9PTl9UQUdfQVRUUl84Lmxhc3RJbmRleCA9IDA7XG4gICAgaWYgKFJFR0VYUF9ERUZBVUxUX09OX1RBR19BVFRSXzgudGVzdCh2YWx1ZSkpIHtcbiAgICAgIFJFR0VYUF9ERUZBVUxUX09OX1RBR19BVFRSXzQubGFzdEluZGV4ID0gMDtcbiAgICAgIGlmIChSRUdFWFBfREVGQVVMVF9PTl9UQUdfQVRUUl80LnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY3NzRmlsdGVyICE9PSBmYWxzZSkge1xuICAgICAgY3NzRmlsdGVyID0gY3NzRmlsdGVyIHx8IGRlZmF1bHRDU1NGaWx0ZXI7XG4gICAgICB2YWx1ZSA9IGNzc0ZpbHRlci5wcm9jZXNzKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2NhcGUgYDw+XCJgIGJlZm9yZSByZXR1cm5zXG4gIHZhbHVlID0gZXNjYXBlQXR0clZhbHVlKHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vLyBSZWdFeHAgbGlzdFxudmFyIFJFR0VYUF9MVCA9IC88L2c7XG52YXIgUkVHRVhQX0dUID0gLz4vZztcbnZhciBSRUdFWFBfUVVPVEUgPSAvXCIvZztcbnZhciBSRUdFWFBfUVVPVEVfMiA9IC8mcXVvdDsvZztcbnZhciBSRUdFWFBfQVRUUl9WQUxVRV8xID0gLyYjKFthLXpBLVowLTldKik7Py9naW07XG52YXIgUkVHRVhQX0FUVFJfVkFMVUVfQ09MT04gPSAvJmNvbG9uOz8vZ2ltO1xudmFyIFJFR0VYUF9BVFRSX1ZBTFVFX05FV0xJTkUgPSAvJm5ld2xpbmU7Py9naW07XG4vLyB2YXIgUkVHRVhQX0RFRkFVTFRfT05fVEFHX0FUVFJfMyA9IC9cXC9cXCp8XFwqXFwvL2dtO1xudmFyIFJFR0VYUF9ERUZBVUxUX09OX1RBR19BVFRSXzQgPVxuICAvKChqXFxzKmFcXHMqdlxccyphfHZcXHMqYnxsXFxzKmlcXHMqdlxccyplKVxccypzXFxzKmNcXHMqclxccyppXFxzKnBcXHMqdFxccyp8bVxccypvXFxzKmNcXHMqaFxccyphKTovZ2k7XG4vLyB2YXIgUkVHRVhQX0RFRkFVTFRfT05fVEFHX0FUVFJfNSA9IC9eW1xcc1wiJ2BdKihkXFxzKmFcXHMqdFxccyphXFxzKilcXDovZ2k7XG4vLyB2YXIgUkVHRVhQX0RFRkFVTFRfT05fVEFHX0FUVFJfNiA9IC9eW1xcc1wiJ2BdKihkXFxzKmFcXHMqdFxccyphXFxzKilcXDpcXHMqaW1hZ2VcXC8vZ2k7XG52YXIgUkVHRVhQX0RFRkFVTFRfT05fVEFHX0FUVFJfNyA9XG4gIC9lXFxzKnhcXHMqcFxccypyXFxzKmVcXHMqc1xccypzXFxzKmlcXHMqb1xccypuXFxzKlxcKC4qL2dpO1xudmFyIFJFR0VYUF9ERUZBVUxUX09OX1RBR19BVFRSXzggPSAvdVxccypyXFxzKmxcXHMqXFwoLiovZ2k7XG5cbi8qKlxuICogZXNjYXBlIGRvdWJsZSBxdW90ZVxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge1N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVF1b3RlKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoUkVHRVhQX1FVT1RFLCBcIiZxdW90O1wiKTtcbn1cblxuLyoqXG4gKiB1bmVzY2FwZSBkb3VibGUgcXVvdGVcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHN0clxuICovXG5mdW5jdGlvbiB1bmVzY2FwZVF1b3RlKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoUkVHRVhQX1FVT1RFXzIsICdcIicpO1xufVxuXG4vKipcbiAqIGVzY2FwZSBodG1sIGVudGl0aWVzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVIdG1sRW50aXRpZXMoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShSRUdFWFBfQVRUUl9WQUxVRV8xLCBmdW5jdGlvbiByZXBsYWNlVW5pY29kZShzdHIsIGNvZGUpIHtcbiAgICByZXR1cm4gY29kZVswXSA9PT0gXCJ4XCIgfHwgY29kZVswXSA9PT0gXCJYXCJcbiAgICAgID8gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChjb2RlLnN1YnN0cigxKSwgMTYpKVxuICAgICAgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGNvZGUsIDEwKSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIGVzY2FwZSBodG1sNSBuZXcgZGFuZ2VyIGVudGl0aWVzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVEYW5nZXJIdG1sNUVudGl0aWVzKHN0cikge1xuICByZXR1cm4gc3RyXG4gICAgLnJlcGxhY2UoUkVHRVhQX0FUVFJfVkFMVUVfQ09MT04sIFwiOlwiKVxuICAgIC5yZXBsYWNlKFJFR0VYUF9BVFRSX1ZBTFVFX05FV0xJTkUsIFwiIFwiKTtcbn1cblxuLyoqXG4gKiBjbGVhciBub25wcmludGFibGUgY2hhcmFjdGVyc1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY2xlYXJOb25QcmludGFibGVDaGFyYWN0ZXIoc3RyKSB7XG4gIHZhciBzdHIyID0gXCJcIjtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHN0ci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHN0cjIgKz0gc3RyLmNoYXJDb2RlQXQoaSkgPCAzMiA/IFwiIFwiIDogc3RyLmNoYXJBdChpKTtcbiAgfVxuICByZXR1cm4gXy50cmltKHN0cjIpO1xufVxuXG4vKipcbiAqIGdldCBmcmllbmRseSBhdHRyaWJ1dGUgdmFsdWVcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZyaWVuZGx5QXR0clZhbHVlKHN0cikge1xuICBzdHIgPSB1bmVzY2FwZVF1b3RlKHN0cik7XG4gIHN0ciA9IGVzY2FwZUh0bWxFbnRpdGllcyhzdHIpO1xuICBzdHIgPSBlc2NhcGVEYW5nZXJIdG1sNUVudGl0aWVzKHN0cik7XG4gIHN0ciA9IGNsZWFyTm9uUHJpbnRhYmxlQ2hhcmFjdGVyKHN0cik7XG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogdW5lc2NhcGUgYXR0cmlidXRlIHZhbHVlXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVBdHRyVmFsdWUoc3RyKSB7XG4gIHN0ciA9IGVzY2FwZVF1b3RlKHN0cik7XG4gIHN0ciA9IGVzY2FwZUh0bWwoc3RyKTtcbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBgb25JZ25vcmVUYWdgIGZ1bmN0aW9uIGZvciByZW1vdmluZyBhbGwgdGhlIHRhZ3MgdGhhdCBhcmUgbm90IGluIHdoaXRlbGlzdFxuICovXG5mdW5jdGlvbiBvbklnbm9yZVRhZ1N0cmlwQWxsKCkge1xuICByZXR1cm4gXCJcIjtcbn1cblxuLyoqXG4gKiByZW1vdmUgdGFnIGJvZHlcbiAqIHNwZWNpZnkgYSBgdGFnc2AgbGlzdCwgaWYgdGhlIHRhZyBpcyBub3QgaW4gdGhlIGB0YWdzYCBsaXN0IHRoZW4gcHJvY2VzcyBieSB0aGUgc3BlY2lmeSBmdW5jdGlvbiAob3B0aW9uYWwpXG4gKlxuICogQHBhcmFtIHthcnJheX0gdGFnc1xuICogQHBhcmFtIHtmdW5jdGlvbn0gbmV4dFxuICovXG5mdW5jdGlvbiBTdHJpcFRhZ0JvZHkodGFncywgbmV4dCkge1xuICBpZiAodHlwZW9mIG5leHQgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIG5leHQgPSBmdW5jdGlvbiAoKSB7fTtcbiAgfVxuXG4gIHZhciBpc1JlbW92ZUFsbFRhZyA9ICFBcnJheS5pc0FycmF5KHRhZ3MpO1xuICBmdW5jdGlvbiBpc1JlbW92ZVRhZyh0YWcpIHtcbiAgICBpZiAoaXNSZW1vdmVBbGxUYWcpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBfLmluZGV4T2YodGFncywgdGFnKSAhPT0gLTE7XG4gIH1cblxuICB2YXIgcmVtb3ZlTGlzdCA9IFtdO1xuICB2YXIgcG9zU3RhcnQgPSBmYWxzZTtcblxuICByZXR1cm4ge1xuICAgIG9uSWdub3JlVGFnOiBmdW5jdGlvbiAodGFnLCBodG1sLCBvcHRpb25zKSB7XG4gICAgICBpZiAoaXNSZW1vdmVUYWcodGFnKSkge1xuICAgICAgICBpZiAob3B0aW9ucy5pc0Nsb3NpbmcpIHtcbiAgICAgICAgICB2YXIgcmV0ID0gXCJbL3JlbW92ZWRdXCI7XG4gICAgICAgICAgdmFyIGVuZCA9IG9wdGlvbnMucG9zaXRpb24gKyByZXQubGVuZ3RoO1xuICAgICAgICAgIHJlbW92ZUxpc3QucHVzaChbXG4gICAgICAgICAgICBwb3NTdGFydCAhPT0gZmFsc2UgPyBwb3NTdGFydCA6IG9wdGlvbnMucG9zaXRpb24sXG4gICAgICAgICAgICBlbmQsXG4gICAgICAgICAgXSk7XG4gICAgICAgICAgcG9zU3RhcnQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghcG9zU3RhcnQpIHtcbiAgICAgICAgICAgIHBvc1N0YXJ0ID0gb3B0aW9ucy5wb3NpdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFwiW3JlbW92ZWRdXCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXh0KHRhZywgaHRtbCwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIChodG1sKSB7XG4gICAgICB2YXIgcmV0aHRtbCA9IFwiXCI7XG4gICAgICB2YXIgbGFzdFBvcyA9IDA7XG4gICAgICBfLmZvckVhY2gocmVtb3ZlTGlzdCwgZnVuY3Rpb24gKHBvcykge1xuICAgICAgICByZXRodG1sICs9IGh0bWwuc2xpY2UobGFzdFBvcywgcG9zWzBdKTtcbiAgICAgICAgbGFzdFBvcyA9IHBvc1sxXTtcbiAgICAgIH0pO1xuICAgICAgcmV0aHRtbCArPSBodG1sLnNsaWNlKGxhc3RQb3MpO1xuICAgICAgcmV0dXJuIHJldGh0bWw7XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiByZW1vdmUgaHRtbCBjb21tZW50c1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBodG1sXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHN0cmlwQ29tbWVudFRhZyhodG1sKSB7XG4gIHZhciByZXRIdG1sID0gXCJcIjtcbiAgdmFyIGxhc3RQb3MgPSAwO1xuICB3aGlsZSAobGFzdFBvcyA8IGh0bWwubGVuZ3RoKSB7XG4gICAgdmFyIGkgPSBodG1sLmluZGV4T2YoXCI8IS0tXCIsIGxhc3RQb3MpO1xuICAgIGlmIChpID09PSAtMSkge1xuICAgICAgcmV0SHRtbCArPSBodG1sLnNsaWNlKGxhc3RQb3MpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldEh0bWwgKz0gaHRtbC5zbGljZShsYXN0UG9zLCBpKTtcbiAgICB2YXIgaiA9IGh0bWwuaW5kZXhPZihcIi0tPlwiLCBpKTtcbiAgICBpZiAoaiA9PT0gLTEpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBsYXN0UG9zID0gaiArIDM7XG4gIH1cbiAgcmV0dXJuIHJldEh0bWw7XG59XG5cbi8qKlxuICogcmVtb3ZlIGludmlzaWJsZSBjaGFyYWN0ZXJzXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGh0bWxcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc3RyaXBCbGFua0NoYXIoaHRtbCkge1xuICB2YXIgY2hhcnMgPSBodG1sLnNwbGl0KFwiXCIpO1xuICBjaGFycyA9IGNoYXJzLmZpbHRlcihmdW5jdGlvbiAoY2hhcikge1xuICAgIHZhciBjID0gY2hhci5jaGFyQ29kZUF0KDApO1xuICAgIGlmIChjID09PSAxMjcpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoYyA8PSAzMSkge1xuICAgICAgaWYgKGMgPT09IDEwIHx8IGMgPT09IDEzKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuICByZXR1cm4gY2hhcnMuam9pbihcIlwiKTtcbn1cblxuZXhwb3J0cy53aGl0ZUxpc3QgPSBnZXREZWZhdWx0V2hpdGVMaXN0KCk7XG5leHBvcnRzLmdldERlZmF1bHRXaGl0ZUxpc3QgPSBnZXREZWZhdWx0V2hpdGVMaXN0O1xuZXhwb3J0cy5vblRhZyA9IG9uVGFnO1xuZXhwb3J0cy5vbklnbm9yZVRhZyA9IG9uSWdub3JlVGFnO1xuZXhwb3J0cy5vblRhZ0F0dHIgPSBvblRhZ0F0dHI7XG5leHBvcnRzLm9uSWdub3JlVGFnQXR0ciA9IG9uSWdub3JlVGFnQXR0cjtcbmV4cG9ydHMuc2FmZUF0dHJWYWx1ZSA9IHNhZmVBdHRyVmFsdWU7XG5leHBvcnRzLmVzY2FwZUh0bWwgPSBlc2NhcGVIdG1sO1xuZXhwb3J0cy5lc2NhcGVRdW90ZSA9IGVzY2FwZVF1b3RlO1xuZXhwb3J0cy51bmVzY2FwZVF1b3RlID0gdW5lc2NhcGVRdW90ZTtcbmV4cG9ydHMuZXNjYXBlSHRtbEVudGl0aWVzID0gZXNjYXBlSHRtbEVudGl0aWVzO1xuZXhwb3J0cy5lc2NhcGVEYW5nZXJIdG1sNUVudGl0aWVzID0gZXNjYXBlRGFuZ2VySHRtbDVFbnRpdGllcztcbmV4cG9ydHMuY2xlYXJOb25QcmludGFibGVDaGFyYWN0ZXIgPSBjbGVhck5vblByaW50YWJsZUNoYXJhY3RlcjtcbmV4cG9ydHMuZnJpZW5kbHlBdHRyVmFsdWUgPSBmcmllbmRseUF0dHJWYWx1ZTtcbmV4cG9ydHMuZXNjYXBlQXR0clZhbHVlID0gZXNjYXBlQXR0clZhbHVlO1xuZXhwb3J0cy5vbklnbm9yZVRhZ1N0cmlwQWxsID0gb25JZ25vcmVUYWdTdHJpcEFsbDtcbmV4cG9ydHMuU3RyaXBUYWdCb2R5ID0gU3RyaXBUYWdCb2R5O1xuZXhwb3J0cy5zdHJpcENvbW1lbnRUYWcgPSBzdHJpcENvbW1lbnRUYWc7XG5leHBvcnRzLnN0cmlwQmxhbmtDaGFyID0gc3RyaXBCbGFua0NoYXI7XG5leHBvcnRzLmNzc0ZpbHRlciA9IGRlZmF1bHRDU1NGaWx0ZXI7XG5leHBvcnRzLmdldERlZmF1bHRDU1NXaGl0ZUxpc3QgPSBnZXREZWZhdWx0Q1NTV2hpdGVMaXN0O1xuIiwiLyoqXG4gKiBTaW1wbGUgSFRNTCBQYXJzZXJcbiAqXG4gKiBAYXV0aG9yIFpvbmdtaW4gTGVpPGxlaXpvbmdtaW5AZ21haWwuY29tPlxuICovXG5cbnZhciBfID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxuLyoqXG4gKiBnZXQgdGFnIG5hbWVcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaHRtbCBlLmcuICc8YSBoZWY9XCIjXCI+J1xuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUYWdOYW1lKGh0bWwpIHtcbiAgdmFyIGkgPSBfLnNwYWNlSW5kZXgoaHRtbCk7XG4gIHZhciB0YWdOYW1lO1xuICBpZiAoaSA9PT0gLTEpIHtcbiAgICB0YWdOYW1lID0gaHRtbC5zbGljZSgxLCAtMSk7XG4gIH0gZWxzZSB7XG4gICAgdGFnTmFtZSA9IGh0bWwuc2xpY2UoMSwgaSArIDEpO1xuICB9XG4gIHRhZ05hbWUgPSBfLnRyaW0odGFnTmFtZSkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKHRhZ05hbWUuc2xpY2UoMCwgMSkgPT09IFwiL1wiKSB0YWdOYW1lID0gdGFnTmFtZS5zbGljZSgxKTtcbiAgaWYgKHRhZ05hbWUuc2xpY2UoLTEpID09PSBcIi9cIikgdGFnTmFtZSA9IHRhZ05hbWUuc2xpY2UoMCwgLTEpO1xuICByZXR1cm4gdGFnTmFtZTtcbn1cblxuLyoqXG4gKiBpcyBjbG9zZSB0YWc/XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGh0bWwg5aaC77yaJzxhIGhlZj1cIiNcIj4nXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBpc0Nsb3NpbmcoaHRtbCkge1xuICByZXR1cm4gaHRtbC5zbGljZSgwLCAyKSA9PT0gXCI8L1wiO1xufVxuXG4vKipcbiAqIHBhcnNlIGlucHV0IGh0bWwgYW5kIHJldHVybnMgcHJvY2Vzc2VkIGh0bWxcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaHRtbFxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25UYWcgZS5nLiBmdW5jdGlvbiAoc291cmNlUG9zaXRpb24sIHBvc2l0aW9uLCB0YWcsIGh0bWwsIGlzQ2xvc2luZylcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVzY2FwZUh0bWxcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcGFyc2VUYWcoaHRtbCwgb25UYWcsIGVzY2FwZUh0bWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIHJldGh0bWwgPSBcIlwiO1xuICB2YXIgbGFzdFBvcyA9IDA7XG4gIHZhciB0YWdTdGFydCA9IGZhbHNlO1xuICB2YXIgcXVvdGVTdGFydCA9IGZhbHNlO1xuICB2YXIgY3VycmVudFBvcyA9IDA7XG4gIHZhciBsZW4gPSBodG1sLmxlbmd0aDtcbiAgdmFyIGN1cnJlbnRUYWdOYW1lID0gXCJcIjtcbiAgdmFyIGN1cnJlbnRIdG1sID0gXCJcIjtcblxuICBjaGFyaXRlcmF0b3I6IGZvciAoY3VycmVudFBvcyA9IDA7IGN1cnJlbnRQb3MgPCBsZW47IGN1cnJlbnRQb3MrKykge1xuICAgIHZhciBjID0gaHRtbC5jaGFyQXQoY3VycmVudFBvcyk7XG4gICAgaWYgKHRhZ1N0YXJ0ID09PSBmYWxzZSkge1xuICAgICAgaWYgKGMgPT09IFwiPFwiKSB7XG4gICAgICAgIHRhZ1N0YXJ0ID0gY3VycmVudFBvcztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChxdW90ZVN0YXJ0ID09PSBmYWxzZSkge1xuICAgICAgICBpZiAoYyA9PT0gXCI8XCIpIHtcbiAgICAgICAgICByZXRodG1sICs9IGVzY2FwZUh0bWwoaHRtbC5zbGljZShsYXN0UG9zLCBjdXJyZW50UG9zKSk7XG4gICAgICAgICAgdGFnU3RhcnQgPSBjdXJyZW50UG9zO1xuICAgICAgICAgIGxhc3RQb3MgPSBjdXJyZW50UG9zO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSBcIj5cIiB8fCBjdXJyZW50UG9zID09PSBsZW4gLSAxKSB7XG4gICAgICAgICAgcmV0aHRtbCArPSBlc2NhcGVIdG1sKGh0bWwuc2xpY2UobGFzdFBvcywgdGFnU3RhcnQpKTtcbiAgICAgICAgICBjdXJyZW50SHRtbCA9IGh0bWwuc2xpY2UodGFnU3RhcnQsIGN1cnJlbnRQb3MgKyAxKTtcbiAgICAgICAgICBjdXJyZW50VGFnTmFtZSA9IGdldFRhZ05hbWUoY3VycmVudEh0bWwpO1xuICAgICAgICAgIHJldGh0bWwgKz0gb25UYWcoXG4gICAgICAgICAgICB0YWdTdGFydCxcbiAgICAgICAgICAgIHJldGh0bWwubGVuZ3RoLFxuICAgICAgICAgICAgY3VycmVudFRhZ05hbWUsXG4gICAgICAgICAgICBjdXJyZW50SHRtbCxcbiAgICAgICAgICAgIGlzQ2xvc2luZyhjdXJyZW50SHRtbClcbiAgICAgICAgICApO1xuICAgICAgICAgIGxhc3RQb3MgPSBjdXJyZW50UG9zICsgMTtcbiAgICAgICAgICB0YWdTdGFydCA9IGZhbHNlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSAnXCInIHx8IGMgPT09IFwiJ1wiKSB7XG4gICAgICAgICAgdmFyIGkgPSAxO1xuICAgICAgICAgIHZhciBpYyA9IGh0bWwuY2hhckF0KGN1cnJlbnRQb3MgLSBpKTtcblxuICAgICAgICAgIHdoaWxlIChpYy50cmltKCkgPT09IFwiXCIgfHwgaWMgPT09IFwiPVwiKSB7XG4gICAgICAgICAgICBpZiAoaWMgPT09IFwiPVwiKSB7XG4gICAgICAgICAgICAgIHF1b3RlU3RhcnQgPSBjO1xuICAgICAgICAgICAgICBjb250aW51ZSBjaGFyaXRlcmF0b3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpYyA9IGh0bWwuY2hhckF0KGN1cnJlbnRQb3MgLSArK2kpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGMgPT09IHF1b3RlU3RhcnQpIHtcbiAgICAgICAgICBxdW90ZVN0YXJ0ID0gZmFsc2U7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGxhc3RQb3MgPCBsZW4pIHtcbiAgICByZXRodG1sICs9IGVzY2FwZUh0bWwoaHRtbC5zdWJzdHIobGFzdFBvcykpO1xuICB9XG5cbiAgcmV0dXJuIHJldGh0bWw7XG59XG5cbnZhciBSRUdFWFBfSUxMRUdBTF9BVFRSX05BTUUgPSAvW15hLXpBLVowLTlcXFxcXzouLV0vZ2ltO1xuXG4vKipcbiAqIHBhcnNlIGlucHV0IGF0dHJpYnV0ZXMgYW5kIHJldHVybnMgcHJvY2Vzc2VkIGF0dHJpYnV0ZXNcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaHRtbCBlLmcuIGBocmVmPVwiI1wiIHRhcmdldD1cIl9ibGFua1wiYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25BdHRyIGUuZy4gYGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSlgXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlQXR0cihodG1sLCBvbkF0dHIpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIGxhc3RQb3MgPSAwO1xuICB2YXIgbGFzdE1hcmtQb3MgPSAwO1xuICB2YXIgcmV0QXR0cnMgPSBbXTtcbiAgdmFyIHRtcE5hbWUgPSBmYWxzZTtcbiAgdmFyIGxlbiA9IGh0bWwubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIGFkZEF0dHIobmFtZSwgdmFsdWUpIHtcbiAgICBuYW1lID0gXy50cmltKG5hbWUpO1xuICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoUkVHRVhQX0lMTEVHQUxfQVRUUl9OQU1FLCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChuYW1lLmxlbmd0aCA8IDEpIHJldHVybjtcbiAgICB2YXIgcmV0ID0gb25BdHRyKG5hbWUsIHZhbHVlIHx8IFwiXCIpO1xuICAgIGlmIChyZXQpIHJldEF0dHJzLnB1c2gocmV0KTtcbiAgfVxuXG4gIC8vIOmAkOS4quWIhuaekOWtl+esplxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGMgPSBodG1sLmNoYXJBdChpKTtcbiAgICB2YXIgdiwgajtcbiAgICBpZiAodG1wTmFtZSA9PT0gZmFsc2UgJiYgYyA9PT0gXCI9XCIpIHtcbiAgICAgIHRtcE5hbWUgPSBodG1sLnNsaWNlKGxhc3RQb3MsIGkpO1xuICAgICAgbGFzdFBvcyA9IGkgKyAxO1xuICAgICAgbGFzdE1hcmtQb3MgPSBodG1sLmNoYXJBdChsYXN0UG9zKSA9PT0gJ1wiJyB8fCBodG1sLmNoYXJBdChsYXN0UG9zKSA9PT0gXCInXCIgPyBsYXN0UG9zIDogZmluZE5leHRRdW90YXRpb25NYXJrKGh0bWwsIGkgKyAxKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAodG1wTmFtZSAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChcbiAgICAgICAgaSA9PT0gbGFzdE1hcmtQb3NcbiAgICAgICkge1xuICAgICAgICBqID0gaHRtbC5pbmRleE9mKGMsIGkgKyAxKTtcbiAgICAgICAgaWYgKGogPT09IC0xKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdiA9IF8udHJpbShodG1sLnNsaWNlKGxhc3RNYXJrUG9zICsgMSwgaikpO1xuICAgICAgICAgIGFkZEF0dHIodG1wTmFtZSwgdik7XG4gICAgICAgICAgdG1wTmFtZSA9IGZhbHNlO1xuICAgICAgICAgIGkgPSBqO1xuICAgICAgICAgIGxhc3RQb3MgPSBpICsgMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoL1xcc3xcXG58XFx0Ly50ZXN0KGMpKSB7XG4gICAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9cXHN8XFxufFxcdC9nLCBcIiBcIik7XG4gICAgICBpZiAodG1wTmFtZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaiA9IGZpbmROZXh0RXF1YWwoaHRtbCwgaSk7XG4gICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgIHYgPSBfLnRyaW0oaHRtbC5zbGljZShsYXN0UG9zLCBpKSk7XG4gICAgICAgICAgYWRkQXR0cih2KTtcbiAgICAgICAgICB0bXBOYW1lID0gZmFsc2U7XG4gICAgICAgICAgbGFzdFBvcyA9IGkgKyAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGkgPSBqIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaiA9IGZpbmRCZWZvcmVFcXVhbChodG1sLCBpIC0gMSk7XG4gICAgICAgIGlmIChqID09PSAtMSkge1xuICAgICAgICAgIHYgPSBfLnRyaW0oaHRtbC5zbGljZShsYXN0UG9zLCBpKSk7XG4gICAgICAgICAgdiA9IHN0cmlwUXVvdGVXcmFwKHYpO1xuICAgICAgICAgIGFkZEF0dHIodG1wTmFtZSwgdik7XG4gICAgICAgICAgdG1wTmFtZSA9IGZhbHNlO1xuICAgICAgICAgIGxhc3RQb3MgPSBpICsgMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChsYXN0UG9zIDwgaHRtbC5sZW5ndGgpIHtcbiAgICBpZiAodG1wTmFtZSA9PT0gZmFsc2UpIHtcbiAgICAgIGFkZEF0dHIoaHRtbC5zbGljZShsYXN0UG9zKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZEF0dHIodG1wTmFtZSwgc3RyaXBRdW90ZVdyYXAoXy50cmltKGh0bWwuc2xpY2UobGFzdFBvcykpKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF8udHJpbShyZXRBdHRycy5qb2luKFwiIFwiKSk7XG59XG5cbmZ1bmN0aW9uIGZpbmROZXh0RXF1YWwoc3RyLCBpKSB7XG4gIGZvciAoOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGMgPSBzdHJbaV07XG4gICAgaWYgKGMgPT09IFwiIFwiKSBjb250aW51ZTtcbiAgICBpZiAoYyA9PT0gXCI9XCIpIHJldHVybiBpO1xuICAgIHJldHVybiAtMTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kTmV4dFF1b3RhdGlvbk1hcmsoc3RyLCBpKSB7XG4gIGZvciAoOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGMgPSBzdHJbaV07XG4gICAgaWYgKGMgPT09IFwiIFwiKSBjb250aW51ZTtcbiAgICBpZiAoYyA9PT0gXCInXCIgfHwgYyA9PT0gJ1wiJykgcmV0dXJuIGk7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRCZWZvcmVFcXVhbChzdHIsIGkpIHtcbiAgZm9yICg7IGkgPiAwOyBpLS0pIHtcbiAgICB2YXIgYyA9IHN0cltpXTtcbiAgICBpZiAoYyA9PT0gXCIgXCIpIGNvbnRpbnVlO1xuICAgIGlmIChjID09PSBcIj1cIikgcmV0dXJuIGk7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUXVvdGVXcmFwU3RyaW5nKHRleHQpIHtcbiAgaWYgKFxuICAgICh0ZXh0WzBdID09PSAnXCInICYmIHRleHRbdGV4dC5sZW5ndGggLSAxXSA9PT0gJ1wiJykgfHxcbiAgICAodGV4dFswXSA9PT0gXCInXCIgJiYgdGV4dFt0ZXh0Lmxlbmd0aCAtIDFdID09PSBcIidcIilcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmlwUXVvdGVXcmFwKHRleHQpIHtcbiAgaWYgKGlzUXVvdGVXcmFwU3RyaW5nKHRleHQpKSB7XG4gICAgcmV0dXJuIHRleHQuc3Vic3RyKDEsIHRleHQubGVuZ3RoIC0gMik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cbn1cblxuZXhwb3J0cy5wYXJzZVRhZyA9IHBhcnNlVGFnO1xuZXhwb3J0cy5wYXJzZUF0dHIgPSBwYXJzZUF0dHI7XG4iLCIvKipcbiAqIGZpbHRlciB4c3NcbiAqXG4gKiBAYXV0aG9yIFpvbmdtaW4gTGVpPGxlaXpvbmdtaW5AZ21haWwuY29tPlxuICovXG5cbnZhciBGaWx0ZXJDU1MgPSByZXF1aXJlKFwiY3NzZmlsdGVyXCIpLkZpbHRlckNTUztcbnZhciBERUZBVUxUID0gcmVxdWlyZShcIi4vZGVmYXVsdFwiKTtcbnZhciBwYXJzZXIgPSByZXF1aXJlKFwiLi9wYXJzZXJcIik7XG52YXIgcGFyc2VUYWcgPSBwYXJzZXIucGFyc2VUYWc7XG52YXIgcGFyc2VBdHRyID0gcGFyc2VyLnBhcnNlQXR0cjtcbnZhciBfID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxuLyoqXG4gKiByZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgYHVuZGVmaW5lZGAgb3IgYG51bGxgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNOdWxsKG9iaikge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsO1xufVxuXG4vKipcbiAqIGdldCBhdHRyaWJ1dGVzIGZvciBhIHRhZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBodG1sXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiAgIC0ge1N0cmluZ30gaHRtbFxuICogICAtIHtCb29sZWFufSBjbG9zaW5nXG4gKi9cbmZ1bmN0aW9uIGdldEF0dHJzKGh0bWwpIHtcbiAgdmFyIGkgPSBfLnNwYWNlSW5kZXgoaHRtbCk7XG4gIGlmIChpID09PSAtMSkge1xuICAgIHJldHVybiB7XG4gICAgICBodG1sOiBcIlwiLFxuICAgICAgY2xvc2luZzogaHRtbFtodG1sLmxlbmd0aCAtIDJdID09PSBcIi9cIixcbiAgICB9O1xuICB9XG4gIGh0bWwgPSBfLnRyaW0oaHRtbC5zbGljZShpICsgMSwgLTEpKTtcbiAgdmFyIGlzQ2xvc2luZyA9IGh0bWxbaHRtbC5sZW5ndGggLSAxXSA9PT0gXCIvXCI7XG4gIGlmIChpc0Nsb3NpbmcpIGh0bWwgPSBfLnRyaW0oaHRtbC5zbGljZSgwLCAtMSkpO1xuICByZXR1cm4ge1xuICAgIGh0bWw6IGh0bWwsXG4gICAgY2xvc2luZzogaXNDbG9zaW5nLFxuICB9O1xufVxuXG4vKipcbiAqIHNoYWxsb3cgY29weVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gc2hhbGxvd0NvcHlPYmplY3Qob2JqKSB7XG4gIHZhciByZXQgPSB7fTtcbiAgZm9yICh2YXIgaSBpbiBvYmopIHtcbiAgICByZXRbaV0gPSBvYmpbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24ga2V5c1RvTG93ZXJDYXNlKG9iaikge1xuICB2YXIgcmV0ID0ge307XG4gIGZvciAodmFyIGkgaW4gb2JqKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqW2ldKSkge1xuICAgICAgcmV0W2kudG9Mb3dlckNhc2UoKV0gPSBvYmpbaV0ubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0W2kudG9Mb3dlckNhc2UoKV0gPSBvYmpbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogRmlsdGVyWFNTIGNsYXNzXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAqICAgICAgICB3aGl0ZUxpc3QgKG9yIGFsbG93TGlzdCksIG9uVGFnLCBvblRhZ0F0dHIsIG9uSWdub3JlVGFnLFxuICogICAgICAgIG9uSWdub3JlVGFnQXR0ciwgc2FmZUF0dHJWYWx1ZSwgZXNjYXBlSHRtbFxuICogICAgICAgIHN0cmlwSWdub3JlVGFnQm9keSwgYWxsb3dDb21tZW50VGFnLCBzdHJpcEJsYW5rQ2hhclxuICogICAgICAgIGNzc3t3aGl0ZUxpc3QsIG9uQXR0ciwgb25JZ25vcmVBdHRyfSBgY3NzPWZhbHNlYCBtZWFucyBkb24ndCB1c2UgYGNzc2ZpbHRlcmBcbiAqL1xuZnVuY3Rpb24gRmlsdGVyWFNTKG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IHNoYWxsb3dDb3B5T2JqZWN0KG9wdGlvbnMgfHwge30pO1xuXG4gIGlmIChvcHRpb25zLnN0cmlwSWdub3JlVGFnKSB7XG4gICAgaWYgKG9wdGlvbnMub25JZ25vcmVUYWcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdOb3RlczogY2Fubm90IHVzZSB0aGVzZSB0d28gb3B0aW9ucyBcInN0cmlwSWdub3JlVGFnXCIgYW5kIFwib25JZ25vcmVUYWdcIiBhdCB0aGUgc2FtZSB0aW1lJ1xuICAgICAgKTtcbiAgICB9XG4gICAgb3B0aW9ucy5vbklnbm9yZVRhZyA9IERFRkFVTFQub25JZ25vcmVUYWdTdHJpcEFsbDtcbiAgfVxuICBpZiAob3B0aW9ucy53aGl0ZUxpc3QgfHwgb3B0aW9ucy5hbGxvd0xpc3QpIHtcbiAgICBvcHRpb25zLndoaXRlTGlzdCA9IGtleXNUb0xvd2VyQ2FzZShvcHRpb25zLndoaXRlTGlzdCB8fCBvcHRpb25zLmFsbG93TGlzdCk7XG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucy53aGl0ZUxpc3QgPSBERUZBVUxULndoaXRlTGlzdDtcbiAgfVxuXG4gIG9wdGlvbnMub25UYWcgPSBvcHRpb25zLm9uVGFnIHx8IERFRkFVTFQub25UYWc7XG4gIG9wdGlvbnMub25UYWdBdHRyID0gb3B0aW9ucy5vblRhZ0F0dHIgfHwgREVGQVVMVC5vblRhZ0F0dHI7XG4gIG9wdGlvbnMub25JZ25vcmVUYWcgPSBvcHRpb25zLm9uSWdub3JlVGFnIHx8IERFRkFVTFQub25JZ25vcmVUYWc7XG4gIG9wdGlvbnMub25JZ25vcmVUYWdBdHRyID0gb3B0aW9ucy5vbklnbm9yZVRhZ0F0dHIgfHwgREVGQVVMVC5vbklnbm9yZVRhZ0F0dHI7XG4gIG9wdGlvbnMuc2FmZUF0dHJWYWx1ZSA9IG9wdGlvbnMuc2FmZUF0dHJWYWx1ZSB8fCBERUZBVUxULnNhZmVBdHRyVmFsdWU7XG4gIG9wdGlvbnMuZXNjYXBlSHRtbCA9IG9wdGlvbnMuZXNjYXBlSHRtbCB8fCBERUZBVUxULmVzY2FwZUh0bWw7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgaWYgKG9wdGlvbnMuY3NzID09PSBmYWxzZSkge1xuICAgIHRoaXMuY3NzRmlsdGVyID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucy5jc3MgPSBvcHRpb25zLmNzcyB8fCB7fTtcbiAgICB0aGlzLmNzc0ZpbHRlciA9IG5ldyBGaWx0ZXJDU1Mob3B0aW9ucy5jc3MpO1xuICB9XG59XG5cbi8qKlxuICogc3RhcnQgcHJvY2VzcyBhbmQgcmV0dXJucyByZXN1bHRcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gaHRtbFxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5GaWx0ZXJYU1MucHJvdG90eXBlLnByb2Nlc3MgPSBmdW5jdGlvbiAoaHRtbCkge1xuICAvLyBjb21wYXRpYmxlIHdpdGggdGhlIGlucHV0XG4gIGh0bWwgPSBodG1sIHx8IFwiXCI7XG4gIGh0bWwgPSBodG1sLnRvU3RyaW5nKCk7XG4gIGlmICghaHRtbCkgcmV0dXJuIFwiXCI7XG5cbiAgdmFyIG1lID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBtZS5vcHRpb25zO1xuICB2YXIgd2hpdGVMaXN0ID0gb3B0aW9ucy53aGl0ZUxpc3Q7XG4gIHZhciBvblRhZyA9IG9wdGlvbnMub25UYWc7XG4gIHZhciBvbklnbm9yZVRhZyA9IG9wdGlvbnMub25JZ25vcmVUYWc7XG4gIHZhciBvblRhZ0F0dHIgPSBvcHRpb25zLm9uVGFnQXR0cjtcbiAgdmFyIG9uSWdub3JlVGFnQXR0ciA9IG9wdGlvbnMub25JZ25vcmVUYWdBdHRyO1xuICB2YXIgc2FmZUF0dHJWYWx1ZSA9IG9wdGlvbnMuc2FmZUF0dHJWYWx1ZTtcbiAgdmFyIGVzY2FwZUh0bWwgPSBvcHRpb25zLmVzY2FwZUh0bWw7XG4gIHZhciBjc3NGaWx0ZXIgPSBtZS5jc3NGaWx0ZXI7XG5cbiAgLy8gcmVtb3ZlIGludmlzaWJsZSBjaGFyYWN0ZXJzXG4gIGlmIChvcHRpb25zLnN0cmlwQmxhbmtDaGFyKSB7XG4gICAgaHRtbCA9IERFRkFVTFQuc3RyaXBCbGFua0NoYXIoaHRtbCk7XG4gIH1cblxuICAvLyByZW1vdmUgaHRtbCBjb21tZW50c1xuICBpZiAoIW9wdGlvbnMuYWxsb3dDb21tZW50VGFnKSB7XG4gICAgaHRtbCA9IERFRkFVTFQuc3RyaXBDb21tZW50VGFnKGh0bWwpO1xuICB9XG5cbiAgLy8gaWYgZW5hYmxlIHN0cmlwSWdub3JlVGFnQm9keVxuICB2YXIgc3RyaXBJZ25vcmVUYWdCb2R5ID0gZmFsc2U7XG4gIGlmIChvcHRpb25zLnN0cmlwSWdub3JlVGFnQm9keSkge1xuICAgIHN0cmlwSWdub3JlVGFnQm9keSA9IERFRkFVTFQuU3RyaXBUYWdCb2R5KFxuICAgICAgb3B0aW9ucy5zdHJpcElnbm9yZVRhZ0JvZHksXG4gICAgICBvbklnbm9yZVRhZ1xuICAgICk7XG4gICAgb25JZ25vcmVUYWcgPSBzdHJpcElnbm9yZVRhZ0JvZHkub25JZ25vcmVUYWc7XG4gIH1cblxuICB2YXIgcmV0SHRtbCA9IHBhcnNlVGFnKFxuICAgIGh0bWwsXG4gICAgZnVuY3Rpb24gKHNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbiwgdGFnLCBodG1sLCBpc0Nsb3NpbmcpIHtcbiAgICAgIHZhciBpbmZvID0ge1xuICAgICAgICBzb3VyY2VQb3NpdGlvbjogc291cmNlUG9zaXRpb24sXG4gICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgaXNDbG9zaW5nOiBpc0Nsb3NpbmcsXG4gICAgICAgIGlzV2hpdGU6IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3aGl0ZUxpc3QsIHRhZyksXG4gICAgICB9O1xuXG4gICAgICAvLyBjYWxsIGBvblRhZygpYFxuICAgICAgdmFyIHJldCA9IG9uVGFnKHRhZywgaHRtbCwgaW5mbyk7XG4gICAgICBpZiAoIWlzTnVsbChyZXQpKSByZXR1cm4gcmV0O1xuXG4gICAgICBpZiAoaW5mby5pc1doaXRlKSB7XG4gICAgICAgIGlmIChpbmZvLmlzQ2xvc2luZykge1xuICAgICAgICAgIHJldHVybiBcIjwvXCIgKyB0YWcgKyBcIj5cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhdHRycyA9IGdldEF0dHJzKGh0bWwpO1xuICAgICAgICB2YXIgd2hpdGVBdHRyTGlzdCA9IHdoaXRlTGlzdFt0YWddO1xuICAgICAgICB2YXIgYXR0cnNIdG1sID0gcGFyc2VBdHRyKGF0dHJzLmh0bWwsIGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIC8vIGNhbGwgYG9uVGFnQXR0cigpYFxuICAgICAgICAgIHZhciBpc1doaXRlQXR0ciA9IF8uaW5kZXhPZih3aGl0ZUF0dHJMaXN0LCBuYW1lKSAhPT0gLTE7XG4gICAgICAgICAgdmFyIHJldCA9IG9uVGFnQXR0cih0YWcsIG5hbWUsIHZhbHVlLCBpc1doaXRlQXR0cik7XG4gICAgICAgICAgaWYgKCFpc051bGwocmV0KSkgcmV0dXJuIHJldDtcblxuICAgICAgICAgIGlmIChpc1doaXRlQXR0cikge1xuICAgICAgICAgICAgLy8gY2FsbCBgc2FmZUF0dHJWYWx1ZSgpYFxuICAgICAgICAgICAgdmFsdWUgPSBzYWZlQXR0clZhbHVlKHRhZywgbmFtZSwgdmFsdWUsIGNzc0ZpbHRlcik7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5hbWUgKyAnPVwiJyArIHZhbHVlICsgJ1wiJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjYWxsIGBvbklnbm9yZVRhZ0F0dHIoKWBcbiAgICAgICAgICAgIHJldCA9IG9uSWdub3JlVGFnQXR0cih0YWcsIG5hbWUsIHZhbHVlLCBpc1doaXRlQXR0cik7XG4gICAgICAgICAgICBpZiAoIWlzTnVsbChyZXQpKSByZXR1cm4gcmV0O1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gYnVpbGQgbmV3IHRhZyBodG1sXG4gICAgICAgIGh0bWwgPSBcIjxcIiArIHRhZztcbiAgICAgICAgaWYgKGF0dHJzSHRtbCkgaHRtbCArPSBcIiBcIiArIGF0dHJzSHRtbDtcbiAgICAgICAgaWYgKGF0dHJzLmNsb3NpbmcpIGh0bWwgKz0gXCIgL1wiO1xuICAgICAgICBodG1sICs9IFwiPlwiO1xuICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNhbGwgYG9uSWdub3JlVGFnKClgXG4gICAgICAgIHJldCA9IG9uSWdub3JlVGFnKHRhZywgaHRtbCwgaW5mbyk7XG4gICAgICAgIGlmICghaXNOdWxsKHJldCkpIHJldHVybiByZXQ7XG4gICAgICAgIHJldHVybiBlc2NhcGVIdG1sKGh0bWwpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZXNjYXBlSHRtbFxuICApO1xuXG4gIC8vIGlmIGVuYWJsZSBzdHJpcElnbm9yZVRhZ0JvZHlcbiAgaWYgKHN0cmlwSWdub3JlVGFnQm9keSkge1xuICAgIHJldEh0bWwgPSBzdHJpcElnbm9yZVRhZ0JvZHkucmVtb3ZlKHJldEh0bWwpO1xuICB9XG5cbiAgcmV0dXJuIHJldEh0bWw7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZpbHRlclhTUztcbiIsIi8qKlxuICogeHNzXG4gKlxuICogQGF1dGhvciBab25nbWluIExlaTxsZWl6b25nbWluQGdtYWlsLmNvbT5cbiAqL1xuXG52YXIgREVGQVVMVCA9IHJlcXVpcmUoXCIuL2RlZmF1bHRcIik7XG52YXIgcGFyc2VyID0gcmVxdWlyZShcIi4vcGFyc2VyXCIpO1xudmFyIEZpbHRlclhTUyA9IHJlcXVpcmUoXCIuL3hzc1wiKTtcblxuLyoqXG4gKiBmaWx0ZXIgeHNzIGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGh0bWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIHsgd2hpdGVMaXN0LCBvblRhZywgb25UYWdBdHRyLCBvbklnbm9yZVRhZywgb25JZ25vcmVUYWdBdHRyLCBzYWZlQXR0clZhbHVlLCBlc2NhcGVIdG1sIH1cbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmlsdGVyWFNTKGh0bWwsIG9wdGlvbnMpIHtcbiAgdmFyIHhzcyA9IG5ldyBGaWx0ZXJYU1Mob3B0aW9ucyk7XG4gIHJldHVybiB4c3MucHJvY2VzcyhodG1sKTtcbn1cblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZmlsdGVyWFNTO1xuZXhwb3J0cy5maWx0ZXJYU1MgPSBmaWx0ZXJYU1M7XG5leHBvcnRzLkZpbHRlclhTUyA9IEZpbHRlclhTUztcblxuKGZ1bmN0aW9uICgpIHtcbiAgZm9yICh2YXIgaSBpbiBERUZBVUxUKSB7XG4gICAgZXhwb3J0c1tpXSA9IERFRkFVTFRbaV07XG4gIH1cbiAgZm9yICh2YXIgaiBpbiBwYXJzZXIpIHtcbiAgICBleHBvcnRzW2pdID0gcGFyc2VyW2pdO1xuICB9XG59KSgpO1xuXG4vLyB1c2luZyBgeHNzYCBvbiB0aGUgYnJvd3Nlciwgb3V0cHV0IGBmaWx0ZXJYU1NgIHRvIHRoZSBnbG9iYWxzXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICB3aW5kb3cuZmlsdGVyWFNTID0gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIHVzaW5nIGB4c3NgIG9uIHRoZSBXZWJXb3JrZXIsIG91dHB1dCBgZmlsdGVyWFNTYCB0byB0aGUgZ2xvYmFsc1xuZnVuY3Rpb24gaXNXb3JrZXJFbnYoKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICB0eXBlb2YgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICBzZWxmIGluc3RhbmNlb2YgRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGVcbiAgKTtcbn1cbmlmIChpc1dvcmtlckVudigpKSB7XG4gIHNlbGYuZmlsdGVyWFNTID0gbW9kdWxlLmV4cG9ydHM7XG59XG4iLCJpbXBvcnQgeyBCb3gsIFRleHQsIFZhbHVlR3JvdXAgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeHNzIGZyb20gJ3hzcyc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy9pbmRleC5qcyc7XG5jb25zdCBTaG93ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcHJvcGVydHksXG4gICAgcmVjb3JkXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZVByb3BlcnR5XG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB2YWx1ZSA9IHJlY29yZC5wYXJhbXNbcHJvcGVydHkucGF0aF0gfHwgJyc7XG4gIGNvbnN0IGNyZWF0ZU1hcmt1cCA9IGh0bWwgPT4gKHtcbiAgICBfX2h0bWw6IHhzcyhodG1sKVxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFZhbHVlR3JvdXAsIHtcbiAgICBsYWJlbDogdHJhbnNsYXRlUHJvcGVydHkocHJvcGVydHkubGFiZWwsIHByb3BlcnR5LnJlc291cmNlSWQpXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIHB5OiBcInhsXCIsXG4gICAgcHg6IFsnMCcsICd4bCddLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwge1xuICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiBjcmVhdGVNYXJrdXAodmFsdWUpXG4gIH0pKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgYWxsb3dPdmVycmlkZShTaG93LCAnRGVmYXVsdFJpY2h0ZXh0U2hvd1Byb3BlcnR5Jyk7IiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzUmVnRXhwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHJlZ2V4cCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNSZWdFeHAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gcmVnZXhwVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1JlZ0V4cDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsInZhciBiYXNlSXNSZWdFeHAgPSByZXF1aXJlKCcuL19iYXNlSXNSZWdFeHAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzUmVnRXhwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNSZWdFeHA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBSZWdFeHBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHJlZ2V4cCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzUmVnRXhwKC9hYmMvKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzUmVnRXhwKCcvYWJjLycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzUmVnRXhwID0gbm9kZUlzUmVnRXhwID8gYmFzZVVuYXJ5KG5vZGVJc1JlZ0V4cCkgOiBiYXNlSXNSZWdFeHA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNSZWdFeHA7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eTtcbiIsInZhciBiYXNlUHJvcGVydHkgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHknKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBzaXplIG9mIGFuIEFTQ0lJIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICovXG52YXIgYXNjaWlTaXplID0gYmFzZVByb3BlcnR5KCdsZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBhc2NpaVNpemU7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIEdldHMgdGhlIHNpemUgb2YgYSBVbmljb2RlIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIHN0cmluZyBzaXplLlxuICovXG5mdW5jdGlvbiB1bmljb2RlU2l6ZShzdHJpbmcpIHtcbiAgdmFyIHJlc3VsdCA9IHJlVW5pY29kZS5sYXN0SW5kZXggPSAwO1xuICB3aGlsZSAocmVVbmljb2RlLnRlc3Qoc3RyaW5nKSkge1xuICAgICsrcmVzdWx0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdW5pY29kZVNpemU7XG4iLCJ2YXIgYXNjaWlTaXplID0gcmVxdWlyZSgnLi9fYXNjaWlTaXplJyksXG4gICAgaGFzVW5pY29kZSA9IHJlcXVpcmUoJy4vX2hhc1VuaWNvZGUnKSxcbiAgICB1bmljb2RlU2l6ZSA9IHJlcXVpcmUoJy4vX3VuaWNvZGVTaXplJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbnVtYmVyIG9mIHN5bWJvbHMgaW4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgc3RyaW5nIHNpemUuXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ1NpemUoc3RyaW5nKSB7XG4gIHJldHVybiBoYXNVbmljb2RlKHN0cmluZylcbiAgICA/IHVuaWNvZGVTaXplKHN0cmluZylcbiAgICA6IGFzY2lpU2l6ZShzdHJpbmcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1NpemU7XG4iLCIvKiogVXNlZCB0byBtYXRjaCBhIHNpbmdsZSB3aGl0ZXNwYWNlIGNoYXJhY3Rlci4gKi9cbnZhciByZVdoaXRlc3BhY2UgPSAvXFxzLztcblxuLyoqXG4gKiBVc2VkIGJ5IGBfLnRyaW1gIGFuZCBgXy50cmltRW5kYCB0byBnZXQgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG5vbi13aGl0ZXNwYWNlXG4gKiBjaGFyYWN0ZXIgb2YgYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBpbnNwZWN0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLlxuICovXG5mdW5jdGlvbiB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSB7XG4gIHZhciBpbmRleCA9IHN0cmluZy5sZW5ndGg7XG5cbiAgd2hpbGUgKGluZGV4LS0gJiYgcmVXaGl0ZXNwYWNlLnRlc3Qoc3RyaW5nLmNoYXJBdChpbmRleCkpKSB7fVxuICByZXR1cm4gaW5kZXg7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdHJpbW1lZEVuZEluZGV4O1xuIiwidmFyIHRyaW1tZWRFbmRJbmRleCA9IHJlcXVpcmUoJy4vX3RyaW1tZWRFbmRJbmRleCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIHdoaXRlc3BhY2UuICovXG52YXIgcmVUcmltU3RhcnQgPSAvXlxccysvO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRyaW1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gdHJpbS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHRyaW1tZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVHJpbShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZ1xuICAgID8gc3RyaW5nLnNsaWNlKDAsIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpICsgMSkucmVwbGFjZShyZVRyaW1TdGFydCwgJycpXG4gICAgOiBzdHJpbmc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRyaW07XG4iLCJ2YXIgYmFzZVRyaW0gPSByZXF1aXJlKCcuL19iYXNlVHJpbScpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuXG4vKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xudmFyIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9OdW1iZXIoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IEluZmluaXR5XG4gKlxuICogXy50b051bWJlcignMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIE5BTjtcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgIHZhbHVlID0gaXNPYmplY3Qob3RoZXIpID8gKG90aGVyICsgJycpIDogb3RoZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlO1xuICB9XG4gIHZhbHVlID0gYmFzZVRyaW0odmFsdWUpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b051bWJlcjtcbiIsInZhciB0b051bWJlciA9IHJlcXVpcmUoJy4vdG9OdW1iZXInKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMCxcbiAgICBNQVhfSU5URUdFUiA9IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBmaW5pdGUgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMi4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9GaW5pdGUoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9GaW5pdGUoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvRmluaXRlKEluZmluaXR5KTtcbiAqIC8vID0+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4XG4gKlxuICogXy50b0Zpbml0ZSgnMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9GaW5pdGUodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogMDtcbiAgfVxuICB2YWx1ZSA9IHRvTnVtYmVyKHZhbHVlKTtcbiAgaWYgKHZhbHVlID09PSBJTkZJTklUWSB8fCB2YWx1ZSA9PT0gLUlORklOSVRZKSB7XG4gICAgdmFyIHNpZ24gPSAodmFsdWUgPCAwID8gLTEgOiAxKTtcbiAgICByZXR1cm4gc2lnbiAqIE1BWF9JTlRFR0VSO1xuICB9XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyB2YWx1ZSA6IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9GaW5pdGU7XG4iLCJ2YXIgdG9GaW5pdGUgPSByZXF1aXJlKCcuL3RvRmluaXRlJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvSW50ZWdlcmBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2ludGVnZXIpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9JbnRlZ2VyKDMuMik7XG4gKiAvLyA9PiAzXG4gKlxuICogXy50b0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiAwXG4gKlxuICogXy50b0ludGVnZXIoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvSW50ZWdlcignMy4yJyk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gdG9GaW5pdGUodmFsdWUpLFxuICAgICAgcmVtYWluZGVyID0gcmVzdWx0ICUgMTtcblxuICByZXR1cm4gcmVzdWx0ID09PSByZXN1bHQgPyAocmVtYWluZGVyID8gcmVzdWx0IC0gcmVtYWluZGVyIDogcmVzdWx0KSA6IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9JbnRlZ2VyO1xuIiwidmFyIGJhc2VUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VUb1N0cmluZycpLFxuICAgIGNhc3RTbGljZSA9IHJlcXVpcmUoJy4vX2Nhc3RTbGljZScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNSZWdFeHAgPSByZXF1aXJlKCcuL2lzUmVnRXhwJyksXG4gICAgc3RyaW5nU2l6ZSA9IHJlcXVpcmUoJy4vX3N0cmluZ1NpemUnKSxcbiAgICBzdHJpbmdUb0FycmF5ID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9BcnJheScpLFxuICAgIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vdG9JbnRlZ2VyJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKiBVc2VkIGFzIGRlZmF1bHQgb3B0aW9ucyBmb3IgYF8udHJ1bmNhdGVgLiAqL1xudmFyIERFRkFVTFRfVFJVTkNfTEVOR1RIID0gMzAsXG4gICAgREVGQVVMVF9UUlVOQ19PTUlTU0lPTiA9ICcuLi4nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBUcnVuY2F0ZXMgYHN0cmluZ2AgaWYgaXQncyBsb25nZXIgdGhhbiB0aGUgZ2l2ZW4gbWF4aW11bSBzdHJpbmcgbGVuZ3RoLlxuICogVGhlIGxhc3QgY2hhcmFjdGVycyBvZiB0aGUgdHJ1bmNhdGVkIHN0cmluZyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgb21pc3Npb25cbiAqIHN0cmluZyB3aGljaCBkZWZhdWx0cyB0byBcIi4uLlwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIHRydW5jYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBUaGUgb3B0aW9ucyBvYmplY3QuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubGVuZ3RoPTMwXSBUaGUgbWF4aW11bSBzdHJpbmcgbGVuZ3RoLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm9taXNzaW9uPScuLi4nXSBUaGUgc3RyaW5nIHRvIGluZGljYXRlIHRleHQgaXMgb21pdHRlZC5cbiAqIEBwYXJhbSB7UmVnRXhwfHN0cmluZ30gW29wdGlvbnMuc2VwYXJhdG9yXSBUaGUgc2VwYXJhdG9yIHBhdHRlcm4gdG8gdHJ1bmNhdGUgdG8uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cnVuY2F0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRydW5jYXRlKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJyk7XG4gKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnaGJvLi4uJ1xuICpcbiAqIF8udHJ1bmNhdGUoJ2hpLWRpZGRseS1obyB0aGVyZSwgbmVpZ2hib3Jpbm8nLCB7XG4gKiAgICdsZW5ndGgnOiAyNCxcbiAqICAgJ3NlcGFyYXRvcic6ICcgJ1xuICogfSk7XG4gKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLC4uLidcbiAqXG4gKiBfLnRydW5jYXRlKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJywge1xuICogICAnbGVuZ3RoJzogMjQsXG4gKiAgICdzZXBhcmF0b3InOiAvLD8gKy9cbiAqIH0pO1xuICogLy8gPT4gJ2hpLWRpZGRseS1obyB0aGVyZS4uLidcbiAqXG4gKiBfLnRydW5jYXRlKCdoaS1kaWRkbHktaG8gdGhlcmUsIG5laWdoYm9yaW5vJywge1xuICogICAnb21pc3Npb24nOiAnIFsuLi5dJ1xuICogfSk7XG4gKiAvLyA9PiAnaGktZGlkZGx5LWhvIHRoZXJlLCBuZWlnIFsuLi5dJ1xuICovXG5mdW5jdGlvbiB0cnVuY2F0ZShzdHJpbmcsIG9wdGlvbnMpIHtcbiAgdmFyIGxlbmd0aCA9IERFRkFVTFRfVFJVTkNfTEVOR1RILFxuICAgICAgb21pc3Npb24gPSBERUZBVUxUX1RSVU5DX09NSVNTSU9OO1xuXG4gIGlmIChpc09iamVjdChvcHRpb25zKSkge1xuICAgIHZhciBzZXBhcmF0b3IgPSAnc2VwYXJhdG9yJyBpbiBvcHRpb25zID8gb3B0aW9ucy5zZXBhcmF0b3IgOiBzZXBhcmF0b3I7XG4gICAgbGVuZ3RoID0gJ2xlbmd0aCcgaW4gb3B0aW9ucyA/IHRvSW50ZWdlcihvcHRpb25zLmxlbmd0aCkgOiBsZW5ndGg7XG4gICAgb21pc3Npb24gPSAnb21pc3Npb24nIGluIG9wdGlvbnMgPyBiYXNlVG9TdHJpbmcob3B0aW9ucy5vbWlzc2lvbikgOiBvbWlzc2lvbjtcbiAgfVxuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gIHZhciBzdHJMZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICBpZiAoaGFzVW5pY29kZShzdHJpbmcpKSB7XG4gICAgdmFyIHN0clN5bWJvbHMgPSBzdHJpbmdUb0FycmF5KHN0cmluZyk7XG4gICAgc3RyTGVuZ3RoID0gc3RyU3ltYm9scy5sZW5ndGg7XG4gIH1cbiAgaWYgKGxlbmd0aCA+PSBzdHJMZW5ndGgpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG4gIHZhciBlbmQgPSBsZW5ndGggLSBzdHJpbmdTaXplKG9taXNzaW9uKTtcbiAgaWYgKGVuZCA8IDEpIHtcbiAgICByZXR1cm4gb21pc3Npb247XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHN0clN5bWJvbHNcbiAgICA/IGNhc3RTbGljZShzdHJTeW1ib2xzLCAwLCBlbmQpLmpvaW4oJycpXG4gICAgOiBzdHJpbmcuc2xpY2UoMCwgZW5kKTtcblxuICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcmVzdWx0ICsgb21pc3Npb247XG4gIH1cbiAgaWYgKHN0clN5bWJvbHMpIHtcbiAgICBlbmQgKz0gKHJlc3VsdC5sZW5ndGggLSBlbmQpO1xuICB9XG4gIGlmIChpc1JlZ0V4cChzZXBhcmF0b3IpKSB7XG4gICAgaWYgKHN0cmluZy5zbGljZShlbmQpLnNlYXJjaChzZXBhcmF0b3IpKSB7XG4gICAgICB2YXIgbWF0Y2gsXG4gICAgICAgICAgc3Vic3RyaW5nID0gcmVzdWx0O1xuXG4gICAgICBpZiAoIXNlcGFyYXRvci5nbG9iYWwpIHtcbiAgICAgICAgc2VwYXJhdG9yID0gUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIHRvU3RyaW5nKHJlRmxhZ3MuZXhlYyhzZXBhcmF0b3IpKSArICdnJyk7XG4gICAgICB9XG4gICAgICBzZXBhcmF0b3IubGFzdEluZGV4ID0gMDtcbiAgICAgIHdoaWxlICgobWF0Y2ggPSBzZXBhcmF0b3IuZXhlYyhzdWJzdHJpbmcpKSkge1xuICAgICAgICB2YXIgbmV3RW5kID0gbWF0Y2guaW5kZXg7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSByZXN1bHQuc2xpY2UoMCwgbmV3RW5kID09PSB1bmRlZmluZWQgPyBlbmQgOiBuZXdFbmQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzdHJpbmcuaW5kZXhPZihiYXNlVG9TdHJpbmcoc2VwYXJhdG9yKSwgZW5kKSAhPSBlbmQpIHtcbiAgICB2YXIgaW5kZXggPSByZXN1bHQubGFzdEluZGV4T2Yoc2VwYXJhdG9yKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIGluZGV4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdCArIG9taXNzaW9uO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRydW5jYXRlO1xuIiwiaW1wb3J0IHRydW5jYXRlIGZyb20gJ2xvZGFzaC90cnVuY2F0ZS5qcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmNvbnN0IHN0cmlwSHRtbCA9IGh0bWwgPT4ge1xuICBjb25zdCBlbCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgZWwuaW5uZXJIVE1MID0gaHRtbDtcbiAgcmV0dXJuIGVsLnRleHRDb250ZW50IHx8IGVsLmlubmVyVGV4dCB8fCAnJztcbn07XG5jb25zdCBMaXN0ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcHJvcGVydHksXG4gICAgcmVjb3JkXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgbWF4TGVuZ3RoID0gcHJvcGVydHkuY3VzdG9tPy5tYXhMZW5ndGggfHwgMTU7XG4gIGNvbnN0IHZhbHVlID0gcmVjb3JkLnBhcmFtc1twcm9wZXJ0eS5wYXRoXSB8fCAnJztcbiAgY29uc3QgdGV4dFZhbHVlID0gc3RyaXBIdG1sKHZhbHVlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCB0cnVuY2F0ZSh0ZXh0VmFsdWUsIHtcbiAgICBsZW5ndGg6IG1heExlbmd0aCxcbiAgICBzZXBhcmF0b3I6ICcgJ1xuICB9KSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgYWxsb3dPdmVycmlkZShMaXN0LCAnRGVmYXVsdFJlZmVyZW5jZUxpc3RQcm9wZXJ0eScpOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBWYWx1ZUdyb3VwIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy9pbmRleC5qcyc7XG5jb25zdCBTaG93ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcHJvcGVydHksXG4gICAgcmVjb3JkXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZVByb3BlcnR5XG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB2YWx1ZSA9IHJlY29yZC5wYXJhbXNbcHJvcGVydHkucGF0aF0gfHwgJyc7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChWYWx1ZUdyb3VwLCB7XG4gICAgbGFiZWw6IHRyYW5zbGF0ZVByb3BlcnR5KHByb3BlcnR5LmxhYmVsLCBwcm9wZXJ0eS5yZXNvdXJjZUlkKVxuICB9LCB2YWx1ZS5zcGxpdCgvKD86XFxyXFxufFxccnxcXG4pL2cpLm1hcCgobGluZSwgaSkgPT5cbiAgLyojX19QVVJFX18qL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5XG4gIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBrZXk6IGlcbiAgfSwgbGluZSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJiclwiLCBudWxsKSkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKFNob3csICdEZWZhdWx0VGV4dGFyZWFTaG93UHJvcGVydHknKTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZSAqL1xuaW1wb3J0IFJlYWN0LCB7IG1lbW8sIHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJbnB1dCwgRm9ybUdyb3VwLCBGb3JtTWVzc2FnZSB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgcmVjb3JkUHJvcGVydHlJc0VxdWFsIH0gZnJvbSAnLi4vcmVjb3JkLXByb3BlcnR5LWlzLWVxdWFsLmpzJztcbmltcG9ydCB7IFByb3BlcnR5TGFiZWwgfSBmcm9tICcuLi91dGlscy9wcm9wZXJ0eS1sYWJlbC9pbmRleC5qcyc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy9pbmRleC5qcyc7XG5jb25zdCBFZGl0ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgb25DaGFuZ2UsXG4gICAgcHJvcGVydHksXG4gICAgcmVjb3JkXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgcHJvcFZhbHVlID0gcmVjb3JkLnBhcmFtcz8uW3Byb3BlcnR5LnBhdGhdID8/ICcnO1xuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKHByb3BWYWx1ZSk7XG4gIGNvbnN0IGVycm9yID0gcmVjb3JkLmVycm9ycz8uW3Byb3BlcnR5LnBhdGhdO1xuICBjb25zdCB7XG4gICAgdG1cbiAgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHZhbHVlICE9PSBwcm9wVmFsdWUpIHtcbiAgICAgIHNldFZhbHVlKHByb3BWYWx1ZSk7XG4gICAgfVxuICB9LCBbcHJvcFZhbHVlXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtR3JvdXAsIHtcbiAgICBlcnJvcjogQm9vbGVhbihlcnJvcilcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUHJvcGVydHlMYWJlbCwge1xuICAgIHByb3BlcnR5OiBwcm9wZXJ0eVxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5wdXQsIF9leHRlbmRzKHtcbiAgICBhczogXCJ0ZXh0YXJlYVwiLFxuICAgIHJvd3M6ICh2YWx1ZS5tYXRjaCgvXFxuL2cpIHx8IFtdKS5sZW5ndGggKyAxLFxuICAgIGlkOiBwcm9wZXJ0eS5wYXRoLFxuICAgIG5hbWU6IHByb3BlcnR5LnBhdGgsXG4gICAgb25DaGFuZ2U6IGUgPT4gc2V0VmFsdWUoZS50YXJnZXQudmFsdWUpLFxuICAgIG9uQmx1cjogKCkgPT4gb25DaGFuZ2UocHJvcGVydHkucGF0aCwgdmFsdWUpLFxuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBkaXNhYmxlZDogcHJvcGVydHkuaXNEaXNhYmxlZFxuICB9LCBwcm9wZXJ0eS5wcm9wcykpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb3JtTWVzc2FnZSwgbnVsbCwgZXJyb3IgJiYgdG0oZXJyb3IubWVzc2FnZSwgcHJvcGVydHkucmVzb3VyY2VJZCkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKCAvKiNfX1BVUkVfXyovbWVtbyhFZGl0LCByZWNvcmRQcm9wZXJ0eUlzRXF1YWwpLCAnRGVmYXVsdFRleHRhcmVhRWRpdFByb3BlcnR5Jyk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5pbXBvcnQgeyBCb3ggfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSAnLi4vYXBwL2Vycm9yLWJvdW5kYXJ5LmpzJztcbmltcG9ydCAqIGFzIEFycmF5VHlwZSBmcm9tICcuL2FycmF5L2luZGV4LmpzJztcbmltcG9ydCAqIGFzIEtleVZhbHVlVHlwZSBmcm9tICcuL2tleS12YWx1ZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBNaXhlZFR5cGUgZnJvbSAnLi9taXhlZC9pbmRleC5qcyc7XG5pbXBvcnQgeyBnZXRBY3Rpb25FbGVtZW50Q3NzIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgYm9vbGVhbiBmcm9tICcuL2Jvb2xlYW4vaW5kZXguanMnO1xuaW1wb3J0ICogYXMgY3VycmVuY3kgZnJvbSAnLi9jdXJyZW5jeS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBkYXRldGltZSBmcm9tICcuL2RhdGV0aW1lL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIGRlZmF1bHRUeXBlIGZyb20gJy4vZGVmYXVsdC10eXBlL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHBhc3N3b3JkIGZyb20gJy4vcGFzc3dvcmQvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgcGhvbmUgZnJvbSAnLi9waG9uZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2UgZnJvbSAnLi9yZWZlcmVuY2UvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgcmljaHRleHQgZnJvbSAnLi9yaWNodGV4dC9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB0ZXh0YXJlYSBmcm9tICcuL3RleHRhcmVhL2luZGV4LmpzJztcbmxldCBnbG9iYWxBbnkgPSB7fTtcbnRyeSB7XG4gIGdsb2JhbEFueSA9IHdpbmRvdztcbn0gY2F0Y2ggKGVycm9yKSB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmVmZXJlbmNlRXJyb3IpKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbmNvbnN0IHR5cGVzID0ge1xuICB0ZXh0YXJlYSxcbiAgYm9vbGVhbixcbiAgZGF0ZXRpbWUsXG4gIHJlZmVyZW5jZSxcbiAgcGFzc3dvcmQsXG4gIGRhdGU6IGRhdGV0aW1lLFxuICByaWNodGV4dCxcbiAgc3RyaW5nOiBkZWZhdWx0VHlwZSxcbiAgbnVtYmVyOiBkZWZhdWx0VHlwZSxcbiAgZmxvYXQ6IGRlZmF1bHRUeXBlLFxuICB1dWlkOiBkZWZhdWx0VHlwZSxcbiAgbWl4ZWQ6IG51bGwsXG4gICdrZXktdmFsdWUnOiBudWxsLFxuICBjdXJyZW5jeSxcbiAgcGhvbmVcbn07XG5cbi8qKlxuICogQGxvYWQgLi9iYXNlLXByb3BlcnR5LWNvbXBvbmVudC5kb2MubWRcbiAqIEBjb21wb25lbnRcbiAqIEBuYW1lIEJhc2VQcm9wZXJ0eUNvbXBvbmVudFxuICogQHN1YmNhdGVnb3J5IEFwcGxpY2F0aW9uXG4gKiBAY2xhc3NcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqL1xuY29uc3QgQmFzZVByb3BlcnR5Q29tcG9uZW50ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcHJvcGVydHk6IGJhc2VQcm9wZXJ0eSxcbiAgICByZXNvdXJjZSxcbiAgICByZWNvcmQsXG4gICAgZmlsdGVyLFxuICAgIHdoZXJlLFxuICAgIG9uQ2hhbmdlXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgcHJvcGVydHkgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgLi4uYmFzZVByb3BlcnR5LFxuICAgIC8vIHdlIGZpbGwgdGhlIHBhdGggaWYgaXQgaXMgbm90IHRoZXJlLiBUaGF0IGlzIHdoeSBhbGwgdGhlIGFjdHVhbCBDb21wb25lbnQgUmVuZGVyZXJzIGFyZVxuICAgIC8vIGNhbGxlZCB3aXRoIHRoZSBwYXRoIHNldCB0byB0aGlzIHJvb3QgcGF0aC4gTmV4dCBtaXhlZCBhbmQgYXJyYXkgY29tcG9uZW50cyBhZGRzIHRvIHRoaXNcbiAgICAvLyBwYXRoIGVpdGhlciBpbmRleCAoZm9yIGFycmF5KSBvciBzdWJQcm9wZXJ0eSBuYW1lLlxuICAgIHBhdGg6IGJhc2VQcm9wZXJ0eS5wYXRoIHx8IGJhc2VQcm9wZXJ0eS5wcm9wZXJ0eVBhdGhcbiAgfSksIFtiYXNlUHJvcGVydHldKTtcbiAgY29uc3QgdGVzdElkID0gYHByb3BlcnR5LSR7d2hlcmV9LSR7cHJvcGVydHkucGF0aH1gO1xuICBjb25zdCBjb250ZW50VGFnID0gZ2V0QWN0aW9uRWxlbWVudENzcyhyZXNvdXJjZS5pZCwgd2hlcmUsIHByb3BlcnR5LnBhdGgpO1xuICBsZXQgQ29tcG9uZW50ID0gdHlwZXNbcHJvcGVydHkudHlwZV0gJiYgdHlwZXNbcHJvcGVydHkudHlwZV1bd2hlcmVdIHx8IGRlZmF1bHRUeXBlW3doZXJlXTtcbiAgaWYgKHByb3BlcnR5LmNvbXBvbmVudHMgJiYgcHJvcGVydHkuY29tcG9uZW50c1t3aGVyZV0pIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBwcm9wZXJ0eS5jb21wb25lbnRzW3doZXJlXTtcbiAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0aGVyZSBpcyBubyBcIiR7cHJvcGVydHkucGF0aH0uY29tcG9uZW50cy4ke3doZXJlfVwiYCk7XG4gICAgfVxuICAgIENvbXBvbmVudCA9IGdsb2JhbEFueS5BZG1pbkpTLlVzZXJDb21wb25lbnRzW2NvbXBvbmVudF0gPz8gKCgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IFwiJHtjb21wb25lbnR9XCIgaGFzIG5vdCBiZWVuIGJ1bmRsZWQsIGVuc3VyZSBpdCB3YXMgYWRkZWQgdG8geW91ciBDb21wb25lbnRMb2FkZXIgaW5zdGFuY2UgKHRoZSBvbmUgaW5jbHVkZWQgaW4gQWRtaW5KUyBvcHRpb25zKS5gKTtcbiAgICB9KTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRXJyb3JCb3VuZGFyeSwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgICBcImRhdGEtY3NzXCI6IGNvbnRlbnRUYWcsXG4gICAgICBcImRhdGEtdGVzdGlkXCI6IHRlc3RJZFxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwge1xuICAgICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgICAgcmVjb3JkOiByZWNvcmQsXG4gICAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICAgIHdoZXJlOiB3aGVyZVxuICAgIH0pKSk7XG4gIH1cbiAgY29uc3QgQXJyYXkgPSBBcnJheVR5cGVbd2hlcmVdO1xuICBjb25zdCBNaXhlZCA9IE1peGVkVHlwZVt3aGVyZV07XG4gIGNvbnN0IEtleVZhbHVlID0gS2V5VmFsdWVUeXBlW3doZXJlXTtcbiAgaWYgKGJhc2VQcm9wZXJ0eS5pc0FycmF5KSB7XG4gICAgaWYgKCFBcnJheSkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQXJyYXksIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgICAgSXRlbUNvbXBvbmVudDogQmFzZVByb3BlcnR5Q29tcG9uZW50LFxuICAgICAgdGVzdElkOiB0ZXN0SWRcbiAgICB9KSk7XG4gIH1cbiAgaWYgKGJhc2VQcm9wZXJ0eS50eXBlID09PSAna2V5LXZhbHVlJykge1xuICAgIGlmICghS2V5VmFsdWUpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEtleVZhbHVlLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eSxcbiAgICAgIHRlc3RJZDogdGVzdElkXG4gICAgfSkpO1xuICB9XG4gIGlmIChiYXNlUHJvcGVydHkudHlwZSA9PT0gJ21peGVkJykge1xuICAgIGlmICghTWl4ZWQpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1peGVkLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIHByb3BlcnR5OiBwcm9wZXJ0eSxcbiAgICAgIEl0ZW1Db21wb25lbnQ6IEJhc2VQcm9wZXJ0eUNvbXBvbmVudCxcbiAgICAgIHRlc3RJZDogdGVzdElkXG4gICAgfSkpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChFcnJvckJvdW5kYXJ5LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBcImRhdGEtY3NzXCI6IGNvbnRlbnRUYWcsXG4gICAgXCJkYXRhLXRlc3RpZFwiOiB0ZXN0SWRcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCB7XG4gICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgIHJlc291cmNlOiByZXNvdXJjZSxcbiAgICByZWNvcmQ6IHJlY29yZCxcbiAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgd2hlcmU6IHdoZXJlXG4gIH0pKSk7XG59O1xuZXhwb3J0IHsgQmFzZVByb3BlcnR5Q29tcG9uZW50IGFzIGRlZmF1bHQsIEJhc2VQcm9wZXJ0eUNvbXBvbmVudCB9OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCYXNlUHJvcGVydHlDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UtcHJvcGVydHktY29tcG9uZW50LmpzJztcbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgdGhlIHNhbWUgYXMgYEJhc2VQcm9wZXJ0eUNvbXBvbmVudGAgYnV0IGl0IHdpbGwgbm90IHJlbmRlclxuICogY3VzdG9tIGNvbXBvbmVudHMuIFVzZSB0aGlzIGluIHlvdXIgY3VzdG9tIGNvbXBvbmVudHMgdG8gcmVuZGVyIHRoZSBkZWZhdWx0XG4gKiBwcm9wZXJ0eSBjb21wb25lbnQuXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgeW91ciBjdXN0b20gY29tcG9uZW50IHRvIGFwcGVhciBjdXN0b20gb25seSBmb3JcbiAqIHNwZWNpZmljIGB3aGVyZWAgdmFsdWUgYW5kIGRlZmF1bHQgZm9yIGFsbCBvdGhlcnMuXG4gKi9cbmNvbnN0IENsZWFuUHJvcGVydHlDb21wb25lbnQgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcm9wZXJ0eVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNsZWFuUHJvcGVydHkgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgLi4ucHJvcGVydHksXG4gICAgY29tcG9uZW50czoge31cbiAgfSksIFtwcm9wZXJ0eV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZVByb3BlcnR5Q29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBwcm9wZXJ0eTogY2xlYW5Qcm9wZXJ0eVxuICB9KSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgQ2xlYW5Qcm9wZXJ0eUNvbXBvbmVudDsiLCJpbXBvcnQgQmFzZVByb3BlcnR5Q29tcG9uZW50IGZyb20gJy4vYmFzZS1wcm9wZXJ0eS1jb21wb25lbnQuanMnO1xuaW1wb3J0IENsZWFuUHJvcGVydHlDb21wb25lbnQgZnJvbSAnLi9jbGVhbi1wcm9wZXJ0eS1jb21wb25lbnQuanMnO1xuaW1wb3J0ICogYXMgZGVmYXVsdFR5cGUgZnJvbSAnLi9kZWZhdWx0LXR5cGUvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgYm9vbGVhbiBmcm9tICcuL2Jvb2xlYW4vaW5kZXguanMnO1xuaW1wb3J0ICogYXMgZGF0ZXRpbWUgZnJvbSAnLi9kYXRldGltZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyByaWNodGV4dCBmcm9tICcuL3JpY2h0ZXh0L2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHJlZmVyZW5jZSBmcm9tICcuL3JlZmVyZW5jZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB0ZXh0YXJlYSBmcm9tICcuL3RleHRhcmVhL2luZGV4LmpzJztcbmltcG9ydCAqIGFzIHBhc3N3b3JkIGZyb20gJy4vcGFzc3dvcmQvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgY3VycmVuY3kgZnJvbSAnLi9jdXJyZW5jeS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBwaG9uZSBmcm9tICcuL3Bob25lL2luZGV4LmpzJztcbmZ1bmN0aW9uIGNhbWVsaXplUHJvcGVydHlUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHtcbiAgICBFZGl0OiB0eXBlLmVkaXQsXG4gICAgU2hvdzogdHlwZS5zaG93LFxuICAgIExpc3Q6IHR5cGUubGlzdCxcbiAgICBGaWx0ZXI6IHR5cGUuZmlsdGVyXG4gIH07XG59XG5jb25zdCBCYXNlUHJvcGVydHlDb21wb25lbnRFeHRlbmRlZCA9IE9iamVjdC5hc3NpZ24oQmFzZVByb3BlcnR5Q29tcG9uZW50LCB7XG4gIERlZmF1bHRUeXBlOiBjYW1lbGl6ZVByb3BlcnR5VHlwZShkZWZhdWx0VHlwZSksXG4gIEJvb2xlYW46IGNhbWVsaXplUHJvcGVydHlUeXBlKGJvb2xlYW4pLFxuICBEYXRlVGltZTogY2FtZWxpemVQcm9wZXJ0eVR5cGUoZGF0ZXRpbWUpLFxuICBSaWNoVGV4dDogY2FtZWxpemVQcm9wZXJ0eVR5cGUocmljaHRleHQpLFxuICBSZWZlcmVuY2U6IGNhbWVsaXplUHJvcGVydHlUeXBlKHJlZmVyZW5jZSksXG4gIFRleHRBcmVhOiBjYW1lbGl6ZVByb3BlcnR5VHlwZSh0ZXh0YXJlYSksXG4gIFBhc3N3b3JkOiBjYW1lbGl6ZVByb3BlcnR5VHlwZShwYXNzd29yZCksXG4gIEN1cnJlbmN5OiBjYW1lbGl6ZVByb3BlcnR5VHlwZShjdXJyZW5jeSksXG4gIFBob25lOiBjYW1lbGl6ZVByb3BlcnR5VHlwZShwaG9uZSlcbn0pO1xuZXhwb3J0IHsgQmFzZVByb3BlcnR5Q29tcG9uZW50RXh0ZW5kZWQgYXMgZGVmYXVsdCwgQmFzZVByb3BlcnR5Q29tcG9uZW50RXh0ZW5kZWQgYXMgQmFzZVByb3BlcnR5Q29tcG9uZW50LCBDbGVhblByb3BlcnR5Q29tcG9uZW50IH07XG5leHBvcnQgKiBmcm9tICcuL2Jhc2UtcHJvcGVydHktcHJvcHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9pbmRleC5qcyc7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgRGVzaWduU3lzdGVtIGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IEJhc2VQcm9wZXJ0eUNvbXBvbmVudCBmcm9tICcuLi8uLi9wcm9wZXJ0eS10eXBlL2luZGV4LmpzJztcbmV4cG9ydCBjb25zdCBMYXlvdXRFbGVtZW50UmVuZGVyZXIgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBsYXlvdXRFbGVtZW50LFxuICAgIHJlc291cmNlLFxuICAgIHdoZXJlLFxuICAgIHJlY29yZCxcbiAgICBvbkNoYW5nZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICBwcm9wczogbGF5b3V0UHJvcHMsXG4gICAgcHJvcGVydGllczogcHJvcGVydHlOYW1lcyxcbiAgICBsYXlvdXRFbGVtZW50czogaW5uZXJMYXlvdXRFbGVtZW50cyxcbiAgICBjb21wb25lbnRcbiAgfSA9IGxheW91dEVsZW1lbnQ7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICAuLi5vdGhlclxuICB9ID0gbGF5b3V0UHJvcHM7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBwcm9wZXJ0eU5hbWVzLm1hcChuYW1lID0+IHJlc291cmNlLnByb3BlcnRpZXNbbmFtZV0pO1xuICBjb25zdCBDb21wb25lbnQgPSBEZXNpZ25TeXN0ZW1bY29tcG9uZW50XTtcbiAgaWYgKCFDb21wb25lbnQpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRGVzaWduU3lzdGVtLk1lc3NhZ2VCb3gsIHtcbiAgICAgIHNpemU6IFwic21cIixcbiAgICAgIG1lc3NhZ2U6IFwiSmF2YXNjcmlwdCBFcnJvclwiLFxuICAgICAgdmFyaWFudDogXCJkYW5nZXJcIixcbiAgICAgIHB5OiBcInhsXCJcbiAgICB9LCBcIlRoZXJlIGlzIG5vIGNvbXBvbmVudCBieSB0aGUgbmFtZSBvZlwiLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEZXNpZ25TeXN0ZW0uQmFkZ2UsIHtcbiAgICAgIHNpemU6IFwic21cIixcbiAgICAgIHZhcmlhbnQ6IFwiZGFuZ2VyXCIsXG4gICAgICBteDogXCJkZWZhdWx0XCJcbiAgICB9LCBjb21wb25lbnQpLCBcImluIEBhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0uIENoYW5nZVwiLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEZXNpZ25TeXN0ZW0uQmFkZ2UsIHtcbiAgICAgIHNpemU6IFwic21cIixcbiAgICAgIHZhcmlhbnQ6IFwiZGFuZ2VyXCIsXG4gICAgICBteDogXCJkZWZhdWx0XCJcbiAgICB9LCBgQCR7Y29tcG9uZW50fWApLCBcInRvIGF2YWlsYWJsZSBjb21wb25lbnQgbGlrZSBASGVhZGVyXCIpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIG90aGVyLCBwcm9wZXJ0aWVzLm1hcChwcm9wZXJ0eSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEZXNpZ25TeXN0ZW0uQm94LCB7XG4gICAgZmxleEdyb3c6IDEsXG4gICAga2V5OiBwcm9wZXJ0eS5wcm9wZXJ0eVBhdGhcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZVByb3BlcnR5Q29tcG9uZW50LCB7XG4gICAga2V5OiBwcm9wZXJ0eS5wcm9wZXJ0eVBhdGgsXG4gICAgd2hlcmU6IHdoZXJlLFxuICAgIHByb3BlcnR5OiBwcm9wZXJ0eSxcbiAgICByZXNvdXJjZTogcmVzb3VyY2UsXG4gICAgcmVjb3JkOiByZWNvcmQsXG4gICAgb25DaGFuZ2U6IG9uQ2hhbmdlXG4gIH0pKSksIGlubmVyTGF5b3V0RWxlbWVudHMubWFwKChpbm5lckxheW91dEVsZW1lbnQsIGkpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExheW91dEVsZW1lbnRSZW5kZXJlciwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWFycmF5LWluZGV4LWtleVxuICAgIGtleTogaSxcbiAgICBsYXlvdXRFbGVtZW50OiBpbm5lckxheW91dEVsZW1lbnRcbiAgfSkpKSwgY2hpbGRyZW4pO1xufTtcbmV4cG9ydCBkZWZhdWx0IExheW91dEVsZW1lbnRSZW5kZXJlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCB7IEJveCwgQnV0dG9uLCBEcmF3ZXJDb250ZW50LCBEcmF3ZXJGb290ZXIsIEljb24gfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBwaWNrIGZyb20gJ2xvZGFzaC9waWNrLmpzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VOYXZpZ2F0ZSB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgdXNlUXVlcnlQYXJhbXMgfSBmcm9tICcuLi8uLi9ob29rcy91c2UtcXVlcnktcGFyYW1zLmpzJztcbmltcG9ydCB1c2VSZWNvcmQgZnJvbSAnLi4vLi4vaG9va3MvdXNlLXJlY29yZC91c2UtcmVjb3JkLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlLXRyYW5zbGF0aW9uLmpzJztcbmltcG9ydCB7IGdldEFjdGlvbkVsZW1lbnRDc3MgfSBmcm9tICcuLi8uLi91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgQWN0aW9uSGVhZGVyIGZyb20gJy4uL2FwcC9hY3Rpb24taGVhZGVyL2FjdGlvbi1oZWFkZXIuanMnO1xuaW1wb3J0IEJhc2VQcm9wZXJ0eUNvbXBvbmVudCBmcm9tICcuLi9wcm9wZXJ0eS10eXBlL2luZGV4LmpzJztcbmltcG9ydCB7IGFwcGVuZEZvcmNlUmVmcmVzaCB9IGZyb20gJy4vdXRpbHMvYXBwZW5kLWZvcmNlLXJlZnJlc2guanMnO1xuaW1wb3J0IExheW91dEVsZW1lbnRSZW5kZXJlciBmcm9tICcuL3V0aWxzL2xheW91dC1lbGVtZW50LXJlbmRlcmVyLmpzJztcbmNvbnN0IE5ldyA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHJlY29yZDogaW5pdGlhbFJlY29yZCxcbiAgICByZXNvdXJjZSxcbiAgICBhY3Rpb25cbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgcmVjb3JkLFxuICAgIGhhbmRsZUNoYW5nZSxcbiAgICBzdWJtaXQsXG4gICAgbG9hZGluZyxcbiAgICBzZXRSZWNvcmRcbiAgfSA9IHVzZVJlY29yZChpbml0aWFsUmVjb3JkLCByZXNvdXJjZS5pZCk7XG4gIGNvbnN0IHtcbiAgICB0cmFuc2xhdGVCdXR0b25cbiAgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgY29uc3Qge1xuICAgIHBhcnNlZFF1ZXJ5LFxuICAgIHJlZGlyZWN0VXJsXG4gIH0gPSB1c2VRdWVyeVBhcmFtcygpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbml0aWFsUmVjb3JkKSB7XG4gICAgICBzZXRSZWNvcmQoaW5pdGlhbFJlY29yZCk7XG4gICAgfVxuICB9LCBbaW5pdGlhbFJlY29yZCwgcGFyc2VkUXVlcnldKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGFyc2VkUXVlcnkpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlUHJvcGVydGllcyA9IHBpY2socGFyc2VkUXVlcnksIE9iamVjdC5rZXlzKHJlc291cmNlLnByb3BlcnRpZXMpKTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhyZXNvdXJjZVByb3BlcnRpZXMpLmxlbmd0aCkge1xuICAgICAgICBzZXRSZWNvcmQoe1xuICAgICAgICAgIC4uLnJlY29yZCxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnJlY29yZC5wYXJhbXMsXG4gICAgICAgICAgICAuLi5yZXNvdXJjZVByb3BlcnRpZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW3BhcnNlZFF1ZXJ5XSk7XG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IGV2ZW50ID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghZXZlbnQuY3VycmVudFRhcmdldCkgcmV0dXJuIGZhbHNlO1xuICAgIHN1Ym1pdCgpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEucmVkaXJlY3RVcmwpIHtcbiAgICAgICAgbmF2aWdhdGUoYXBwZW5kRm9yY2VSZWZyZXNoKHJlc3BvbnNlLmRhdGEucmVkaXJlY3RVcmwpKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIHJlY29yZCBoYXMgaWQgPT09IGhhcyBiZWVuIGNyZWF0ZWRcbiAgICAgIGlmIChyZXNwb25zZS5kYXRhLnJlY29yZC5pZCAmJiAhT2JqZWN0LmtleXMocmVzcG9uc2UuZGF0YS5yZWNvcmQuZXJyb3JzKS5sZW5ndGgpIHtcbiAgICAgICAgaGFuZGxlQ2hhbmdlKHtcbiAgICAgICAgICBwYXJhbXM6IHt9LFxuICAgICAgICAgIHBvcHVsYXRlZDoge30sXG4gICAgICAgICAgZXJyb3JzOiB7fVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICBpZiAocmVkaXJlY3RVcmwpIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RVcmw7XG4gICAgfVxuICB9O1xuICBjb25zdCBjb250ZW50VGFnID0gZ2V0QWN0aW9uRWxlbWVudENzcyhyZXNvdXJjZS5pZCwgYWN0aW9uLm5hbWUsICdkcmF3ZXItY29udGVudCcpO1xuICBjb25zdCBmb3JtVGFnID0gZ2V0QWN0aW9uRWxlbWVudENzcyhyZXNvdXJjZS5pZCwgYWN0aW9uLm5hbWUsICdmb3JtJyk7XG4gIGNvbnN0IGZvb3RlclRhZyA9IGdldEFjdGlvbkVsZW1lbnRDc3MocmVzb3VyY2UuaWQsIGFjdGlvbi5uYW1lLCAnZHJhd2VyLWZvb3RlcicpO1xuICBjb25zdCBidXR0b25UYWcgPSBnZXRBY3Rpb25FbGVtZW50Q3NzKHJlc291cmNlLmlkLCBhY3Rpb24ubmFtZSwgJ2RyYXdlci1zdWJtaXQnKTtcbiAgY29uc3QgY2FuY2VsQnV0dG9uVGFnID0gZ2V0QWN0aW9uRWxlbWVudENzcyhyZXNvdXJjZS5pZCwgYWN0aW9uLm5hbWUsICdkcmF3ZXItY2FuY2VsJyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBhczogXCJmb3JtXCIsXG4gICAgZmxleDogdHJ1ZSxcbiAgICBmbGV4R3JvdzogMSxcbiAgICBvblN1Ym1pdDogaGFuZGxlU3VibWl0LFxuICAgIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gICAgXCJkYXRhLWNzc1wiOiBmb3JtVGFnXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyYXdlckNvbnRlbnQsIHtcbiAgICBcImRhdGEtY3NzXCI6IGNvbnRlbnRUYWdcbiAgfSwgYWN0aW9uPy5zaG93SW5EcmF3ZXIgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBY3Rpb25IZWFkZXIsIHByb3BzKSA6IG51bGwsIGFjdGlvbi5sYXlvdXQgPyBhY3Rpb24ubGF5b3V0Lm1hcCgobGF5b3V0RWxlbWVudCwgaSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGF5b3V0RWxlbWVudFJlbmRlcmVyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcbiAgLCBfZXh0ZW5kcyh7XG4gICAga2V5OiBpLFxuICAgIGxheW91dEVsZW1lbnQ6IGxheW91dEVsZW1lbnRcbiAgfSwgcHJvcHMsIHtcbiAgICB3aGVyZTogXCJlZGl0XCIsXG4gICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICByZWNvcmQ6IHJlY29yZFxuICB9KSkpIDogcmVzb3VyY2UuZWRpdFByb3BlcnRpZXMubWFwKHByb3BlcnR5ID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJhc2VQcm9wZXJ0eUNvbXBvbmVudCwge1xuICAgIGtleTogcHJvcGVydHkucHJvcGVydHlQYXRoLFxuICAgIHdoZXJlOiBcImVkaXRcIixcbiAgICBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLFxuICAgIHByb3BlcnR5OiBwcm9wZXJ0eSxcbiAgICByZXNvdXJjZTogcmVzb3VyY2UsXG4gICAgcmVjb3JkOiByZWNvcmRcbiAgfSkpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJhd2VyRm9vdGVyLCB7XG4gICAgXCJkYXRhLWNzc1wiOiBmb290ZXJUYWdcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgZmxleDogdHJ1ZSxcbiAgICBzdHlsZToge1xuICAgICAgZ2FwOiAxNlxuICAgIH1cbiAgfSwgcmVkaXJlY3RVcmwgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQnV0dG9uLCB7XG4gICAgdmFyaWFudDogXCJsaWdodFwiLFxuICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgb25DbGljazogaGFuZGxlQ2FuY2VsLFxuICAgIFwiZGF0YS1jc3NcIjogY2FuY2VsQnV0dG9uVGFnLFxuICAgIFwiZGF0YS10ZXN0aWRcIjogXCJidXR0b24tY2FuY2VsXCJcbiAgfSwgdHJhbnNsYXRlQnV0dG9uKCdjYW5jZWwnLCByZXNvdXJjZS5pZCkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHtcbiAgICB2YXJpYW50OiBcImNvbnRhaW5lZFwiLFxuICAgIHR5cGU6IFwic3VibWl0XCIsXG4gICAgXCJkYXRhLWNzc1wiOiBidXR0b25UYWcsXG4gICAgXCJkYXRhLXRlc3RpZFwiOiBcImJ1dHRvbi1zYXZlXCIsXG4gICAgZGlzYWJsZWQ6IGxvYWRpbmdcbiAgfSwgbG9hZGluZyA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICBpY29uOiBcIkxvYWRlclwiLFxuICAgIHNwaW46IHRydWVcbiAgfSkgOiBudWxsLCB0cmFuc2xhdGVCdXR0b24oJ3NhdmUnLCByZXNvdXJjZS5pZCkpKSkpO1xufTtcbmNvbnN0IE92ZXJyaWRhYmxlTmV3ID0gYWxsb3dPdmVycmlkZShOZXcsICdEZWZhdWx0TmV3QWN0aW9uJyk7XG5leHBvcnQgeyBPdmVycmlkYWJsZU5ldyBhcyBkZWZhdWx0LCBPdmVycmlkYWJsZU5ldyBhcyBOZXcsIE5ldyBhcyBPcmlnaW5hbE5ldyB9OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuaW1wb3J0IHsgQm94LCBCdXR0b24sIERyYXdlckNvbnRlbnQsIERyYXdlckZvb3RlciwgSWNvbiB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU5hdmlnYXRlIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgdXNlUmVjb3JkIGZyb20gJy4uLy4uL2hvb2tzL3VzZS1yZWNvcmQvdXNlLXJlY29yZC5qcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZS10cmFuc2xhdGlvbi5qcyc7XG5pbXBvcnQgeyBnZXRBY3Rpb25FbGVtZW50Q3NzIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IEFjdGlvbkhlYWRlciBmcm9tICcuLi9hcHAvYWN0aW9uLWhlYWRlci9hY3Rpb24taGVhZGVyLmpzJztcbmltcG9ydCBCYXNlUHJvcGVydHlDb21wb25lbnQgZnJvbSAnLi4vcHJvcGVydHktdHlwZS9pbmRleC5qcyc7XG5pbXBvcnQgeyBhcHBlbmRGb3JjZVJlZnJlc2ggfSBmcm9tICcuL3V0aWxzL2FwcGVuZC1mb3JjZS1yZWZyZXNoLmpzJztcbmltcG9ydCBMYXlvdXRFbGVtZW50UmVuZGVyZXIgZnJvbSAnLi91dGlscy9sYXlvdXQtZWxlbWVudC1yZW5kZXJlci5qcyc7XG5jb25zdCBFZGl0ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcmVjb3JkOiBpbml0aWFsUmVjb3JkLFxuICAgIHJlc291cmNlLFxuICAgIGFjdGlvblxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICByZWNvcmQsXG4gICAgaGFuZGxlQ2hhbmdlLFxuICAgIHN1Ym1pdDogaGFuZGxlU3VibWl0LFxuICAgIGxvYWRpbmcsXG4gICAgc2V0UmVjb3JkXG4gIH0gPSB1c2VSZWNvcmQoaW5pdGlhbFJlY29yZCwgcmVzb3VyY2UuaWQpO1xuICBjb25zdCB7XG4gICAgdHJhbnNsYXRlQnV0dG9uXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGluaXRpYWxSZWNvcmQpIHtcbiAgICAgIHNldFJlY29yZChpbml0aWFsUmVjb3JkKTtcbiAgICB9XG4gIH0sIFtpbml0aWFsUmVjb3JkXSk7XG4gIGNvbnN0IHN1Ym1pdCA9IGV2ZW50ID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGhhbmRsZVN1Ym1pdCgpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEucmVkaXJlY3RVcmwpIHtcbiAgICAgICAgbmF2aWdhdGUoYXBwZW5kRm9yY2VSZWZyZXNoKHJlc3BvbnNlLmRhdGEucmVkaXJlY3RVcmwpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG4gIGNvbnN0IGNvbnRlbnRUYWcgPSBnZXRBY3Rpb25FbGVtZW50Q3NzKHJlc291cmNlLmlkLCBhY3Rpb24ubmFtZSwgJ2RyYXdlci1jb250ZW50Jyk7XG4gIGNvbnN0IGZvcm1UYWcgPSBnZXRBY3Rpb25FbGVtZW50Q3NzKHJlc291cmNlLmlkLCBhY3Rpb24ubmFtZSwgJ2Zvcm0nKTtcbiAgY29uc3QgZm9vdGVyVGFnID0gZ2V0QWN0aW9uRWxlbWVudENzcyhyZXNvdXJjZS5pZCwgYWN0aW9uLm5hbWUsICdkcmF3ZXItZm9vdGVyJyk7XG4gIGNvbnN0IGJ1dHRvblRhZyA9IGdldEFjdGlvbkVsZW1lbnRDc3MocmVzb3VyY2UuaWQsIGFjdGlvbi5uYW1lLCAnZHJhd2VyLXN1Ym1pdCcpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgYXM6IFwiZm9ybVwiLFxuICAgIG9uU3VibWl0OiBzdWJtaXQsXG4gICAgZmxleDogdHJ1ZSxcbiAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgIFwiZGF0YS1jc3NcIjogZm9ybVRhZ1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEcmF3ZXJDb250ZW50LCB7XG4gICAgXCJkYXRhLWNzc1wiOiBjb250ZW50VGFnXG4gIH0sIGFjdGlvbj8uc2hvd0luRHJhd2VyID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQWN0aW9uSGVhZGVyLCBwcm9wcykgOiBudWxsLCBhY3Rpb24ubGF5b3V0ID8gYWN0aW9uLmxheW91dC5tYXAoKGxheW91dEVsZW1lbnQsIGkpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExheW91dEVsZW1lbnRSZW5kZXJlclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5XG4gICwgX2V4dGVuZHMoe1xuICAgIGtleTogaSxcbiAgICBsYXlvdXRFbGVtZW50OiBsYXlvdXRFbGVtZW50XG4gIH0sIHByb3BzLCB7XG4gICAgd2hlcmU6IFwiZWRpdFwiLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgcmVjb3JkOiByZWNvcmRcbiAgfSkpKSA6IHJlc291cmNlLmVkaXRQcm9wZXJ0aWVzLm1hcChwcm9wZXJ0eSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlUHJvcGVydHlDb21wb25lbnQsIHtcbiAgICBrZXk6IHByb3BlcnR5LnByb3BlcnR5UGF0aCxcbiAgICB3aGVyZTogXCJlZGl0XCIsXG4gICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgIHJlY29yZDogcmVjb3JkXG4gIH0pKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyYXdlckZvb3Rlciwge1xuICAgIFwiZGF0YS1jc3NcIjogZm9vdGVyVGFnXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJ1dHRvbiwge1xuICAgIHZhcmlhbnQ6IFwiY29udGFpbmVkXCIsXG4gICAgdHlwZTogXCJzdWJtaXRcIixcbiAgICBcImRhdGEtY3NzXCI6IGJ1dHRvblRhZyxcbiAgICBcImRhdGEtdGVzdGlkXCI6IFwiYnV0dG9uLXNhdmVcIixcbiAgICBkaXNhYmxlZDogbG9hZGluZ1xuICB9LCBsb2FkaW5nID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIGljb246IFwiTG9hZGVyXCIsXG4gICAgc3BpbjogdHJ1ZVxuICB9KSA6IG51bGwsIHRyYW5zbGF0ZUJ1dHRvbignc2F2ZScsIHJlc291cmNlLmlkKSkpKTtcbn07XG5jb25zdCBPdmVycmlkYWJsZUVkaXQgPSBhbGxvd092ZXJyaWRlKEVkaXQsICdEZWZhdWx0RWRpdEFjdGlvbicpO1xuZXhwb3J0IHsgT3ZlcnJpZGFibGVFZGl0IGFzIGRlZmF1bHQsIE92ZXJyaWRhYmxlRWRpdCBhcyBFZGl0LCBFZGl0IGFzIE9yaWdpbmFsRWRpdCB9OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuaW1wb3J0IHsgRHJhd2VyQ29udGVudCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgeyBnZXRBY3Rpb25FbGVtZW50Q3NzIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IEFjdGlvbkhlYWRlciBmcm9tICcuLi9hcHAvYWN0aW9uLWhlYWRlci9hY3Rpb24taGVhZGVyLmpzJztcbmltcG9ydCBCYXNlUHJvcGVydHlDb21wb25lbnQgZnJvbSAnLi4vcHJvcGVydHktdHlwZS9pbmRleC5qcyc7XG5pbXBvcnQgTGF5b3V0RWxlbWVudFJlbmRlcmVyIGZyb20gJy4vdXRpbHMvbGF5b3V0LWVsZW1lbnQtcmVuZGVyZXIuanMnO1xuXG4vKipcbiAqIEBuYW1lIFNob3dBY3Rpb25cbiAqIEBjYXRlZ29yeSBBY3Rpb25zXG4gKiBAZGVzY3JpcHRpb24gU2hvd3MgYSBnaXZlbiByZWNvcmQuXG4gKiBAY29tcG9uZW50XG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBTaG93ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcmVzb3VyY2UsXG4gICAgcmVjb3JkLFxuICAgIGFjdGlvblxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSByZXNvdXJjZS5zaG93UHJvcGVydGllcztcbiAgY29uc3QgY29udGVudFRhZyA9IGdldEFjdGlvbkVsZW1lbnRDc3MocmVzb3VyY2UuaWQsIGFjdGlvbi5uYW1lLCAnZHJhd2VyLWNvbnRlbnQnKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyYXdlckNvbnRlbnQsIHtcbiAgICBcImRhdGEtY3NzXCI6IGNvbnRlbnRUYWdcbiAgfSwgYWN0aW9uPy5zaG93SW5EcmF3ZXIgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBY3Rpb25IZWFkZXIsIHByb3BzKSA6IG51bGwsIGFjdGlvbi5sYXlvdXQgPyBhY3Rpb24ubGF5b3V0Lm1hcCgobGF5b3V0RWxlbWVudCwgaSkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGF5b3V0RWxlbWVudFJlbmRlcmVyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcbiAgLCBfZXh0ZW5kcyh7XG4gICAga2V5OiBpLFxuICAgIGxheW91dEVsZW1lbnQ6IGxheW91dEVsZW1lbnRcbiAgfSwgcHJvcHMsIHtcbiAgICB3aGVyZTogXCJzaG93XCJcbiAgfSkpKSA6IHByb3BlcnRpZXMubWFwKHByb3BlcnR5ID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJhc2VQcm9wZXJ0eUNvbXBvbmVudCwge1xuICAgIGtleTogcHJvcGVydHkucHJvcGVydHlQYXRoLFxuICAgIHdoZXJlOiBcInNob3dcIixcbiAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgIHJlY29yZDogcmVjb3JkXG4gIH0pKSk7XG59O1xuY29uc3QgT3ZlcnJpZGFibGVTaG93ID0gYWxsb3dPdmVycmlkZShTaG93LCAnRGVmYXVsdFNob3dBY3Rpb24nKTtcbmV4cG9ydCB7IE92ZXJyaWRhYmxlU2hvdyBhcyBkZWZhdWx0LCBPdmVycmlkYWJsZVNob3cgYXMgU2hvdywgU2hvdyBhcyBPcmlnaW5hbFNob3cgfTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVGV4dCwgQnV0dG9uLCBJY29uLCBJbmZvQm94IH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL2luZGV4LmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgQWN0aW9uQnV0dG9uIGZyb20gJy4uL2FjdGlvbi1idXR0b24vYWN0aW9uLWJ1dHRvbi5qcyc7XG5jb25zdCBOb1JlY29yZHNPcmlnaW5hbCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHJlc291cmNlXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZUJ1dHRvbixcbiAgICB0cmFuc2xhdGVNZXNzYWdlXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBjYW5DcmVhdGUgPSByZXNvdXJjZS5yZXNvdXJjZUFjdGlvbnMuZmluZChhID0+IGEubmFtZSA9PT0gJ25ldycpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5mb0JveCwge1xuICAgIHRpdGxlOiB0cmFuc2xhdGVNZXNzYWdlKCdub1JlY29yZHMnLCByZXNvdXJjZS5pZCksXG4gICAgaWxsdXN0cmF0aW9uOiBcIkRvY3NcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7XG4gICAgbWI6IFwieHhsXCJcbiAgfSwgdHJhbnNsYXRlTWVzc2FnZSgnbm9SZWNvcmRzSW5SZXNvdXJjZScsIHJlc291cmNlLmlkKSksIGNhbkNyZWF0ZSAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBY3Rpb25CdXR0b24sIHtcbiAgICBhY3Rpb246IGNhbkNyZWF0ZSxcbiAgICByZXNvdXJjZUlkOiByZXNvdXJjZS5pZFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHtcbiAgICB2YXJpYW50OiBcImNvbnRhaW5lZFwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICBpY29uOiBcIlBsdXNcIlxuICB9KSwgdHJhbnNsYXRlQnV0dG9uKCdjcmVhdGVGaXJzdFJlY29yZCcsIHJlc291cmNlLmlkKSkpKTtcbn07XG5cbi8vIFRoaXMgaGFjayBwcmV2ZW50cyByb2xsdXAgZnJvbSB0aHJvd2luZyBhbiBlcnJvclxuY29uc3QgTm9SZWNvcmRzID0gYWxsb3dPdmVycmlkZShOb1JlY29yZHNPcmlnaW5hbCwgJ05vUmVjb3JkcycpO1xuZXhwb3J0IHsgTm9SZWNvcmRzLCBOb1JlY29yZHNPcmlnaW5hbCBhcyBPcmlnaW5hbE5vUmVjb3JkcyB9O1xuZXhwb3J0IGRlZmF1bHQgTm9SZWNvcmRzOyIsImV4cG9ydCBjb25zdCBkaXNwbGF5ID0gaXNUaXRsZSA9PiBbaXNUaXRsZSA/ICd0YWJsZS1jZWxsJyA6ICdub25lJywgaXNUaXRsZSA/ICd0YWJsZS1jZWxsJyA6ICdub25lJywgJ3RhYmxlLWNlbGwnLCAndGFibGUtY2VsbCddOyIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU5hdmlnYXRlLCB1c2VMb2NhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgeyBQbGFjZWhvbGRlciwgVGFibGVSb3csIFRhYmxlQ2VsbCwgQ2hlY2tCb3gsIEJ1dHRvbkdyb3VwIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgQmFzZVByb3BlcnR5Q29tcG9uZW50IGZyb20gJy4uLy4uL3Byb3BlcnR5LXR5cGUvaW5kZXguanMnO1xuaW1wb3J0IHsgYnVpbGRBY3Rpb25DbGlja0hhbmRsZXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2luZGV4LmpzJztcbmltcG9ydCB7IGRpc3BsYXkgfSBmcm9tICcuL3V0aWxzL2Rpc3BsYXkuanMnO1xuaW1wb3J0IG1lcmdlUmVjb3JkUmVzcG9uc2UgZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlLXJlY29yZC9tZXJnZS1yZWNvcmQtcmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgdXNlQWN0aW9uUmVzcG9uc2VIYW5kbGVyLCB1c2VUcmFuc2xhdGlvbiwgdXNlTW9kYWwgfSBmcm9tICcuLi8uLi8uLi9ob29rcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBhY3Rpb25zVG9CdXR0b25Hcm91cCB9IGZyb20gJy4uL2FjdGlvbi1oZWFkZXIvYWN0aW9ucy10by1idXR0b24tZ3JvdXAuanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmltcG9ydCB7IGdldFJlc291cmNlRWxlbWVudENzcyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmNvbnN0IFJlY29yZEluTGlzdCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHJlc291cmNlLFxuICAgIHJlY29yZDogcmVjb3JkRnJvbVByb3BzLFxuICAgIGFjdGlvblBlcmZvcm1lZCxcbiAgICBpc0xvYWRpbmcsXG4gICAgb25TZWxlY3QsXG4gICAgaXNTZWxlY3RlZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtyZWNvcmQsIHNldFJlY29yZF0gPSB1c2VTdGF0ZShyZWNvcmRGcm9tUHJvcHMpO1xuICBjb25zdCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgY29uc3QgdHJhbnNsYXRlRnVuY3Rpb25zID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgbW9kYWxGdW5jdGlvbnMgPSB1c2VNb2RhbCgpO1xuICBjb25zdCBoYW5kbGVBY3Rpb25DYWxsYmFjayA9IHVzZUNhbGxiYWNrKGFjdGlvblJlc3BvbnNlID0+IHtcbiAgICBpZiAoYWN0aW9uUmVzcG9uc2UucmVjb3JkICYmICFhY3Rpb25SZXNwb25zZS5yZWRpcmVjdFVybCkge1xuICAgICAgc2V0UmVjb3JkKG1lcmdlUmVjb3JkUmVzcG9uc2UocmVjb3JkLCBhY3Rpb25SZXNwb25zZSkpO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uUGVyZm9ybWVkKSB7XG4gICAgICBhY3Rpb25QZXJmb3JtZWQoYWN0aW9uUmVzcG9uc2UpO1xuICAgIH1cbiAgfSwgW2FjdGlvblBlcmZvcm1lZCwgcmVjb3JkXSk7XG4gIGNvbnN0IGFjdGlvblJlc3BvbnNlSGFuZGxlciA9IHVzZUFjdGlvblJlc3BvbnNlSGFuZGxlcihoYW5kbGVBY3Rpb25DYWxsYmFjayk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0UmVjb3JkKHJlY29yZEZyb21Qcm9wcyk7XG4gIH0sIFtyZWNvcmRGcm9tUHJvcHNdKTtcbiAgY29uc3Qge1xuICAgIHJlY29yZEFjdGlvbnNcbiAgfSA9IHJlY29yZDtcbiAgY29uc3Qgc2hvdyA9IHJlY29yZC5yZWNvcmRBY3Rpb25zLmZpbmQoKHtcbiAgICBuYW1lXG4gIH0pID0+IG5hbWUgPT09ICdzaG93Jyk7XG4gIGNvbnN0IGVkaXQgPSByZWNvcmQucmVjb3JkQWN0aW9ucy5maW5kKCh7XG4gICAgbmFtZVxuICB9KSA9PiBuYW1lID09PSAnZWRpdCcpO1xuICBjb25zdCBhY3Rpb24gPSBzaG93IHx8IGVkaXQ7XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IHRhcmdldFRhZ05hbWUgPSBldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChhY3Rpb24gJiYgdGFyZ2V0VGFnTmFtZSAhPT0gJ2EnICYmIHRhcmdldFRhZ05hbWUgIT09ICdidXR0b24nICYmIHRhcmdldFRhZ05hbWUgIT09ICdzdmcnKSB7XG4gICAgICBidWlsZEFjdGlvbkNsaWNrSGFuZGxlcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgcmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG4gICAgICAgICAgcmVjb3JkSWQ6IHJlY29yZC5pZFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpb25SZXNwb25zZUhhbmRsZXIsXG4gICAgICAgIG5hdmlnYXRlLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgdHJhbnNsYXRlRnVuY3Rpb25zLFxuICAgICAgICBtb2RhbEZ1bmN0aW9uc1xuICAgICAgfSkoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgYWN0aW9uUGFyYW1zID0ge1xuICAgIHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuICAgIHJlY29yZElkOiByZWNvcmQuaWRcbiAgfTtcbiAgY29uc3QgaGFuZGxlQWN0aW9uQ2xpY2sgPSAoZXZlbnQsIHNvdXJjZUFjdGlvbikgPT4gYnVpbGRBY3Rpb25DbGlja0hhbmRsZXIoe1xuICAgIGFjdGlvbjogc291cmNlQWN0aW9uLFxuICAgIHBhcmFtczogYWN0aW9uUGFyYW1zLFxuICAgIGFjdGlvblJlc3BvbnNlSGFuZGxlcixcbiAgICBuYXZpZ2F0ZSxcbiAgICBsb2NhdGlvbixcbiAgICB0cmFuc2xhdGVGdW5jdGlvbnMsXG4gICAgbW9kYWxGdW5jdGlvbnNcbiAgfSkoZXZlbnQpO1xuICBjb25zdCBidXR0b25zID0gW3tcbiAgICBpY29uOiAnTW9yZUhvcml6b250YWwnLFxuICAgIHZhcmlhbnQ6ICdsaWdodCcsXG4gICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICAnZGF0YS10ZXN0aWQnOiAnYWN0aW9ucy1kcm9wZG93bicsXG4gICAgYnV0dG9uczogYWN0aW9uc1RvQnV0dG9uR3JvdXAoe1xuICAgICAgYWN0aW9uczogcmVjb3JkQWN0aW9ucyxcbiAgICAgIHBhcmFtczogYWN0aW9uUGFyYW1zLFxuICAgICAgaGFuZGxlQ2xpY2s6IGhhbmRsZUFjdGlvbkNsaWNrLFxuICAgICAgdHJhbnNsYXRlRnVuY3Rpb25zLFxuICAgICAgbW9kYWxGdW5jdGlvbnNcbiAgICB9KVxuICB9XTtcbiAgY29uc3QgY29udGVudFRhZyA9IGdldFJlc291cmNlRWxlbWVudENzcyhyZXNvdXJjZS5pZCwgJ3RhYmxlLXJvdycpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGFibGVSb3csIHtcbiAgICBjbGFzc05hbWU6IGlzU2VsZWN0ZWQgPyAnc2VsZWN0ZWQnIDogJ25vdC1zZWxlY3RlZCcsXG4gICAgb25DbGljazogaGFuZGxlQ2xpY2ssXG4gICAgXCJkYXRhLWlkXCI6IHJlY29yZC5pZCxcbiAgICBcImRhdGEtY3NzXCI6IGNvbnRlbnRUYWdcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGFibGVDZWxsLCB7XG4gICAgd2lkdGg6IDBcbiAgfSwgb25TZWxlY3QgJiYgcmVjb3JkLmJ1bGtBY3Rpb25zLmxlbmd0aCA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrQm94LCB7XG4gICAgb25DaGFuZ2U6ICgpID0+IG9uU2VsZWN0KHJlY29yZCksXG4gICAgY2hlY2tlZDogaXNTZWxlY3RlZFxuICB9KSA6IG51bGwpLCByZXNvdXJjZS5saXN0UHJvcGVydGllcy5tYXAocHJvcGVydHkgPT4ge1xuICAgIGNvbnN0IGNlbGxUYWcgPSBgJHtyZXNvdXJjZS5pZH0tJHtwcm9wZXJ0eS5uYW1lfS10YWJsZS1jZWxsYDtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGFibGVDZWxsLCB7XG4gICAgICBzdHlsZToge1xuICAgICAgICBjdXJzb3I6ICdwb2ludGVyJ1xuICAgICAgfSxcbiAgICAgIGtleTogcHJvcGVydHkucHJvcGVydHlQYXRoLFxuICAgICAgXCJkYXRhLXByb3BlcnR5LW5hbWVcIjogcHJvcGVydHkucHJvcGVydHlQYXRoLFxuICAgICAgZGlzcGxheTogZGlzcGxheShwcm9wZXJ0eS5pc1RpdGxlKSxcbiAgICAgIFwiZGF0YS1jc3NcIjogY2VsbFRhZ1xuICAgIH0sIGlzTG9hZGluZyA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBsYWNlaG9sZGVyLCB7XG4gICAgICBzdHlsZToge1xuICAgICAgICBoZWlnaHQ6IDE0XG4gICAgICB9XG4gICAgfSkgOiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlUHJvcGVydHlDb21wb25lbnQsIHtcbiAgICAgIGtleTogcHJvcGVydHkucHJvcGVydHlQYXRoLFxuICAgICAgd2hlcmU6IFwibGlzdFwiLFxuICAgICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgICAgcmVjb3JkOiByZWNvcmRcbiAgICB9KSk7XG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUYWJsZUNlbGwsIHtcbiAgICBrZXk6IFwib3B0aW9uc1wiLFxuICAgIGNsYXNzTmFtZTogXCJvcHRpb25zXCJcbiAgfSwgcmVjb3JkQWN0aW9ucy5sZW5ndGggPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b25Hcm91cCwge1xuICAgIGJ1dHRvbnM6IGJ1dHRvbnNcbiAgfSkgOiBudWxsKSk7XG59O1xuY29uc3QgT3ZlcnJpZGFibGVSZWNvcmRJbkxpc3QgPSBhbGxvd092ZXJyaWRlKFJlY29yZEluTGlzdCwgJ1JlY29yZEluTGlzdCcpO1xuZXhwb3J0IHsgT3ZlcnJpZGFibGVSZWNvcmRJbkxpc3QgYXMgZGVmYXVsdCwgT3ZlcnJpZGFibGVSZWNvcmRJbkxpc3QgYXMgUmVjb3JkSW5MaXN0LCBSZWNvcmRJbkxpc3QgYXMgT3JpZ2luYWxSZWNvcmRJbkxpc3QgfTsiLCJpbXBvcnQgUmVhY3QsIHsgbWVtbywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUxvY2F0aW9uLCBOYXZMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBJY29uLCBjc3NDbGFzcyB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9ob29rcy9pbmRleC5qcyc7XG5jb25zdCBTb3J0TGluayA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHNvcnRCeSxcbiAgICBwcm9wZXJ0eSxcbiAgICBkaXJlY3Rpb25cbiAgfSA9IHByb3BzO1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IHtcbiAgICB0cmFuc2xhdGVQcm9wZXJ0eVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgaXNBY3RpdmUgPSB1c2VNZW1vKCgpID0+IHNvcnRCeSA9PT0gcHJvcGVydHkucHJvcGVydHlQYXRoLCBbc29ydEJ5LCBwcm9wZXJ0eV0pO1xuICBjb25zdCBxdWVyeSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKTtcbiAgY29uc3Qgb3Bwb3NpdGVEaXJlY3Rpb24gPSBpc0FjdGl2ZSAmJiBkaXJlY3Rpb24gPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XG4gIGNvbnN0IHNvcnRlZEJ5SWNvbiA9IGRpcmVjdGlvbiA9PT0gJ2FzYycgPyAnQ2hldnJvblVwJyA6ICdDaGV2cm9uRG93bic7XG4gIHF1ZXJ5LnNldCgnZGlyZWN0aW9uJywgb3Bwb3NpdGVEaXJlY3Rpb24pO1xuICBxdWVyeS5zZXQoJ3NvcnRCeScsIHByb3BlcnR5LnByb3BlcnR5UGF0aCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOYXZMaW5rLCB7XG4gICAgdG86IHtcbiAgICAgIHNlYXJjaDogcXVlcnkudG9TdHJpbmcoKVxuICAgIH0sXG4gICAgY2xhc3NOYW1lOiBjc3NDbGFzcygnU29ydExpbmsnKVxuICB9LCB0cmFuc2xhdGVQcm9wZXJ0eShwcm9wZXJ0eS5sYWJlbCwgcHJvcGVydHkucmVzb3VyY2VJZCksIGlzQWN0aXZlICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHtcbiAgICBpY29uOiBzb3J0ZWRCeUljb24sXG4gICAgY29sb3I6IFwiZ3JleTQwXCIsXG4gICAgbWw6IFwibGdcIlxuICB9KSk7XG59O1xuY29uc3QgY2hlY2tTb3J0UHJvcHMgPSAocHJldlByb3BzLCBuZXh0UHJvcHMpID0+IHByZXZQcm9wcy5kaXJlY3Rpb24gPT09IG5leHRQcm9wcy5kaXJlY3Rpb24gJiYgcHJldlByb3BzLnByb3BlcnR5LnByb3BlcnR5UGF0aCA9PT0gbmV4dFByb3BzLnByb3BlcnR5LnByb3BlcnR5UGF0aCAmJiBwcmV2UHJvcHMuc29ydEJ5ID09PSBuZXh0UHJvcHMuc29ydEJ5ICYmIHByZXZQcm9wcy5wcm9wZXJ0eS5yZXNvdXJjZUlkID09PSBuZXh0UHJvcHMucHJvcGVydHkucmVzb3VyY2VJZDtcbmV4cG9ydCBkZWZhdWx0IC8qI19fUFVSRV9fKi9tZW1vKFNvcnRMaW5rLCBjaGVja1NvcnRQcm9wcyk7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRhYmxlQ2VsbCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IFNvcnRMaW5rIGZyb20gJy4uL3NvcnQtbGluay5qcyc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi8uLi9ob29rcy9pbmRleC5qcyc7XG5jb25zdCBQcm9wZXJ0eUhlYWRlciA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHByb3BlcnR5LFxuICAgIHRpdGxlUHJvcGVydHksXG4gICAgZGlzcGxheVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICB0cmFuc2xhdGVQcm9wZXJ0eVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgaXNNYWluID0gcHJvcGVydHkucHJvcGVydHlQYXRoID09PSB0aXRsZVByb3BlcnR5LnByb3BlcnR5UGF0aDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRhYmxlQ2VsbCwge1xuICAgIGNsYXNzTmFtZTogaXNNYWluID8gJ21haW4nIDogdW5kZWZpbmVkLFxuICAgIGRpc3BsYXk6IGRpc3BsYXlcbiAgfSwgcHJvcGVydHkuaXNTb3J0YWJsZSA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNvcnRMaW5rLCBwcm9wcykgOiB0cmFuc2xhdGVQcm9wZXJ0eShwcm9wZXJ0eS5sYWJlbCwgcHJvcGVydHkucmVzb3VyY2VJZCkpO1xufTtcbmNvbnN0IE92ZXJyaWRhYmxlUHJvcGVydHlIZWFkZXIgPSBhbGxvd092ZXJyaWRlKFByb3BlcnR5SGVhZGVyLCAnUHJvcGVydHlIZWFkZXInKTtcbmV4cG9ydCB7IE92ZXJyaWRhYmxlUHJvcGVydHlIZWFkZXIgYXMgZGVmYXVsdCwgT3ZlcnJpZGFibGVQcm9wZXJ0eUhlYWRlciBhcyBQcm9wZXJ0eUhlYWRlciwgUHJvcGVydHlIZWFkZXIgYXMgT3JpZ2luYWxQcm9wZXJ0eUhlYWRlciB9OyIsImltcG9ydCB7IENoZWNrQm94LCBUYWJsZUNlbGwsIFRhYmxlSGVhZCwgVGFibGVSb3cgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VFbGVtZW50Q3NzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IFByb3BlcnR5SGVhZGVyIGZyb20gJy4vcHJvcGVydHktaGVhZGVyLmpzJztcbmltcG9ydCB7IGRpc3BsYXkgfSBmcm9tICcuL3V0aWxzL2Rpc3BsYXkuanMnO1xuXG4vKipcbiAqIEBtZW1iZXJvZiBSZWNvcmRzVGFibGVIZWFkZXJcbiAqIEBhbGlhcyBSZWNvcmRzVGFibGVIZWFkZXJQcm9wc1xuICovXG5cbi8qKlxuICogUHJpbnRzIGB0aGVhZGAgc2VjdGlvbiBmb3IgdGFibGUgd2l0aCByZWNvcmRzLlxuICpcbiAqIGBgYFxuICogaW1wb3J0IHsgUmVjb3Jkc1RhYmxlSGVhZGVyIH0gZnJvbSAnYWRtaW5qcydcbiAqIGBgYFxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBzdWJjYXRlZ29yeSBBcHBsaWNhdGlvblxuICogQGV4YW1wbGUgPGNhcHRpb24+TGlzdCB3aXRoIDIgcHJvcGVydGllczwvY2FwdGlvbj5cbiAqIGNvbnN0IHByb3BlcnRpZXMgPSBbe1xuICogICBsYWJlbDogJ0ZpcnN0IE5hbWUnLFxuICogICBuYW1lOiAnZmlyc3ROYW1lJyxcbiAqICAgaXNTb3J0YWJsZTogdHJ1ZSxcbiAqIH0sIHtcbiAqICAgbGFiZWw6ICdMYXN0IE5hbWUnLFxuICogICBuYW1lOiAnbGFzdE5hbWUnLFxuICogfV1cbiAqIHJldHVybiAoXG4gKiA8Qm94IHB5PVwieGxcIj5cbiAqICAgPFRhYmxlPlxuICogICAgPFJlY29yZHNUYWJsZUhlYWRlclxuICogICAgICBwcm9wZXJ0aWVzPXtwcm9wZXJ0aWVzfVxuICogICAgICB0aXRsZVByb3BlcnR5PXtwcm9wZXJ0aWVzWzBdfVxuICogICAgICBzb3J0Qnk9eydmaXJzdE5hbWUnfVxuICogICAgICBkaXJlY3Rpb249eydhc2MnfVxuICogICAgLz5cbiAqICAgIDxUYWJsZUJvZHk+XG4gKiAgICAgIDxUYWJsZVJvdz5cbiAqICAgICAgICA8VGFibGVDZWxsPkpvaG48L1RhYmxlQ2VsbD5cbiAqICAgICAgICA8VGFibGVDZWxsPkRvZTwvVGFibGVDZWxsPlxuICogICAgICAgIDxUYWJsZUNlbGw+PC9UYWJsZUNlbGw+XG4gKiAgICAgIDwvVGFibGVSb3c+XG4gKiAgICAgIDxUYWJsZVJvdz5cbiAqICAgICAgICA8VGFibGVDZWxsPk1heDwvVGFibGVDZWxsPlxuICogICAgICAgIDxUYWJsZUNlbGw+S29kYWx5PC9UYWJsZUNlbGw+XG4gKiAgICAgICAgPFRhYmxlQ2VsbD48L1RhYmxlQ2VsbD5cbiAqICAgICAgPC9UYWJsZVJvdz5cbiAqICAgIDwvVGFibGVCb2R5PlxuICogICA8L1RhYmxlPlxuICogPC9Cb3g+XG4gKiApXG4gKi9cbmNvbnN0IFJlY29yZHNUYWJsZUhlYWRlciA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHRpdGxlUHJvcGVydHksXG4gICAgcHJvcGVydGllcyxcbiAgICBzb3J0QnksXG4gICAgZGlyZWN0aW9uLFxuICAgIG9uU2VsZWN0QWxsLFxuICAgIHNlbGVjdGVkQWxsXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY29udGVudFRhZyA9IGdldFJlc291cmNlRWxlbWVudENzcyh0aXRsZVByb3BlcnR5LnJlc291cmNlSWQsICd0YWJsZS1oZWFkJyk7XG4gIGNvbnN0IHJvd1RhZyA9IGAke3RpdGxlUHJvcGVydHkucmVzb3VyY2VJZH0tdGFibGUtaGVhZC1yb3dgO1xuICBjb25zdCBjaGVja2JveENzcyA9IGAke3RpdGxlUHJvcGVydHkucmVzb3VyY2VJZH0tY2hlY2tib3gtdGFibGUtY2VsbGA7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUYWJsZUhlYWQsIHtcbiAgICBcImRhdGEtY3NzXCI6IGNvbnRlbnRUYWdcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGFibGVSb3csIHtcbiAgICBcImRhdGEtY3NzXCI6IHJvd1RhZ1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUYWJsZUNlbGwsIHtcbiAgICBcImRhdGEtY3NzXCI6IGNoZWNrYm94Q3NzXG4gIH0sIG9uU2VsZWN0QWxsID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2tCb3gsIHtcbiAgICBzdHlsZToge1xuICAgICAgbWFyZ2luTGVmdDogNVxuICAgIH0sXG4gICAgb25DaGFuZ2U6ICgpID0+IG9uU2VsZWN0QWxsKCksXG4gICAgY2hlY2tlZDogc2VsZWN0ZWRBbGxcbiAgfSkgOiBudWxsKSwgcHJvcGVydGllcy5tYXAocHJvcGVydHkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUHJvcGVydHlIZWFkZXIsIHtcbiAgICBkaXNwbGF5OiBkaXNwbGF5KHByb3BlcnR5LmlzVGl0bGUpLFxuICAgIGtleTogcHJvcGVydHkucHJvcGVydHlQYXRoLFxuICAgIHRpdGxlUHJvcGVydHk6IHRpdGxlUHJvcGVydHksXG4gICAgcHJvcGVydHk6IHByb3BlcnR5LFxuICAgIHNvcnRCeTogc29ydEJ5LFxuICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGFibGVDZWxsLCB7XG4gICAga2V5OiBcImFjdGlvbnNcIixcbiAgICBzdHlsZToge1xuICAgICAgd2lkdGg6IDgwXG4gICAgfVxuICB9KSkpO1xufTtcbmNvbnN0IE92ZXJyaWRhYmxlUmVjb3Jkc1RhYmxlSGVhZGVyID0gYWxsb3dPdmVycmlkZShSZWNvcmRzVGFibGVIZWFkZXIsICdSZWNvcmRzVGFibGVIZWFkZXInKTtcbmV4cG9ydCB7IE92ZXJyaWRhYmxlUmVjb3Jkc1RhYmxlSGVhZGVyIGFzIGRlZmF1bHQsIE92ZXJyaWRhYmxlUmVjb3Jkc1RhYmxlSGVhZGVyIGFzIFJlY29yZHNUYWJsZUhlYWRlciwgUmVjb3Jkc1RhYmxlSGVhZGVyIGFzIE9yaWdpbmFsUmVjb3Jkc1RhYmxlSGVhZGVyIH07IiwiY29uc3QgZ2V0QnVsa0FjdGlvbnNGcm9tUmVjb3JkcyA9IHJlY29yZHMgPT4ge1xuICBjb25zdCBhY3Rpb25zID0gT2JqZWN0LnZhbHVlcyhyZWNvcmRzLnJlZHVjZSgobWVtbywgcmVjb3JkKSA9PiAoe1xuICAgIC4uLm1lbW8sXG4gICAgLi4ucmVjb3JkLmJ1bGtBY3Rpb25zLnJlZHVjZSgoYWN0aW9uc01lbW8sIGFjdGlvbikgPT4gKHtcbiAgICAgIC4uLmFjdGlvbnNNZW1vLFxuICAgICAgW2FjdGlvbi5uYW1lXTogYWN0aW9uXG4gICAgfSksIHt9KVxuICB9KSwge30pKTtcbiAgcmV0dXJuIGFjdGlvbnM7XG59O1xuZXhwb3J0IGRlZmF1bHQgZ2V0QnVsa0FjdGlvbnNGcm9tUmVjb3JkczsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVGFibGVDYXB0aW9uLCBUaXRsZSwgQnV0dG9uR3JvdXAsIEJveCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IHsgdXNlTmF2aWdhdGUsIHVzZUxvY2F0aW9uIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCB7IGJ1aWxkQWN0aW9uQ2xpY2tIYW5kbGVyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9pbmRleC5qcyc7XG5pbXBvcnQgZ2V0QnVsa0FjdGlvbnNGcm9tUmVjb3JkcyBmcm9tICcuL3V0aWxzL2dldC1idWxrLWFjdGlvbnMtZnJvbS1yZWNvcmRzLmpzJztcbmltcG9ydCB7IHVzZUFjdGlvblJlc3BvbnNlSGFuZGxlciwgdXNlVHJhbnNsYXRpb24sIHVzZU1vZGFsIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvaW5kZXguanMnO1xuaW1wb3J0IHsgYWN0aW9uc1RvQnV0dG9uR3JvdXAgfSBmcm9tICcuLi9hY3Rpb24taGVhZGVyL2FjdGlvbnMtdG8tYnV0dG9uLWdyb3VwLmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZUVsZW1lbnRDc3MgfSBmcm9tICcuLi8uLi8uLi91dGlscy9pbmRleC5qcyc7XG5jb25zdCBTZWxlY3RlZFJlY29yZHMgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICByZXNvdXJjZSxcbiAgICBzZWxlY3RlZFJlY29yZHNcbiAgfSA9IHByb3BzO1xuICBjb25zdCB0cmFuc2xhdGVGdW5jdGlvbnMgPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB7XG4gICAgdHJhbnNsYXRlTGFiZWxcbiAgfSA9IHRyYW5zbGF0ZUZ1bmN0aW9ucztcbiAgY29uc3QgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZSgpO1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IGFjdGlvblJlc3BvbnNlSGFuZGxlciA9IHVzZUFjdGlvblJlc3BvbnNlSGFuZGxlcigpO1xuICBjb25zdCBtb2RhbEZ1bmN0aW9ucyA9IHVzZU1vZGFsKCk7XG4gIGlmICghc2VsZWN0ZWRSZWNvcmRzIHx8ICFzZWxlY3RlZFJlY29yZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcGFyYW1zID0ge1xuICAgIHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuICAgIHJlY29yZElkczogc2VsZWN0ZWRSZWNvcmRzLm1hcChyZWNvcmRzID0+IHJlY29yZHMuaWQpXG4gIH07XG4gIGNvbnN0IGhhbmRsZUFjdGlvbkNsaWNrID0gKGV2ZW50LCBzb3VyY2VBY3Rpb24pID0+IGJ1aWxkQWN0aW9uQ2xpY2tIYW5kbGVyKHtcbiAgICBhY3Rpb246IHNvdXJjZUFjdGlvbixcbiAgICBwYXJhbXMsXG4gICAgYWN0aW9uUmVzcG9uc2VIYW5kbGVyLFxuICAgIG5hdmlnYXRlLFxuICAgIGxvY2F0aW9uLFxuICAgIHRyYW5zbGF0ZUZ1bmN0aW9ucyxcbiAgICBtb2RhbEZ1bmN0aW9uc1xuICB9KShldmVudCk7XG4gIGNvbnN0IGJ1bGtCdXR0b25zID0gYWN0aW9uc1RvQnV0dG9uR3JvdXAoe1xuICAgIGFjdGlvbnM6IGdldEJ1bGtBY3Rpb25zRnJvbVJlY29yZHMoc2VsZWN0ZWRSZWNvcmRzKSxcbiAgICBwYXJhbXMsXG4gICAgaGFuZGxlQ2xpY2s6IGhhbmRsZUFjdGlvbkNsaWNrLFxuICAgIHRyYW5zbGF0ZUZ1bmN0aW9ucyxcbiAgICBtb2RhbEZ1bmN0aW9uc1xuICB9KTtcbiAgY29uc3QgY29udGVudFRhZyA9IGdldFJlc291cmNlRWxlbWVudENzcyhyZXNvdXJjZS5pZCwgJ3RhYmxlLWNhcHRpb24nKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRhYmxlQ2FwdGlvbiwge1xuICAgIFwiZGF0YS1jc3NcIjogY29udGVudFRhZ1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBmbGV4OiB0cnVlLFxuICAgIHB5OiBcInNtXCIsXG4gICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaXRsZSwge1xuICAgIG1yOiBcImxnXCJcbiAgfSwgdHJhbnNsYXRlTGFiZWwoJ3NlbGVjdGVkUmVjb3JkcycsIHJlc291cmNlLmlkLCB7XG4gICAgc2VsZWN0ZWQ6IHNlbGVjdGVkUmVjb3Jkcy5sZW5ndGhcbiAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b25Hcm91cCwge1xuICAgIHNpemU6IFwic21cIixcbiAgICByb3VuZGVkOiB0cnVlLFxuICAgIGJ1dHRvbnM6IGJ1bGtCdXR0b25zXG4gIH0pKSk7XG59O1xuY29uc3QgT3ZlcnJpZGFibGVTZWxlY3RlZFJlY29yZHMgPSBhbGxvd092ZXJyaWRlKFNlbGVjdGVkUmVjb3JkcywgJ1NlbGVjdGVkUmVjb3JkcycpO1xuZXhwb3J0IHsgT3ZlcnJpZGFibGVTZWxlY3RlZFJlY29yZHMgYXMgZGVmYXVsdCwgT3ZlcnJpZGFibGVTZWxlY3RlZFJlY29yZHMgYXMgU2VsZWN0ZWRSZWNvcmRzLCBTZWxlY3RlZFJlY29yZHMgYXMgT3JpZ2luYWxTZWxlY3RlZFJlY29yZHMgfTsiLCJpbXBvcnQgeyBMb2FkZXIsIFRhYmxlLCBUYWJsZUJvZHkgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VFbGVtZW50Q3NzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IE5vUmVjb3JkcyBmcm9tICcuL25vLXJlY29yZHMuanMnO1xuaW1wb3J0IFJlY29yZEluTGlzdCBmcm9tICcuL3JlY29yZC1pbi1saXN0LmpzJztcbmltcG9ydCBSZWNvcmRzVGFibGVIZWFkZXIgZnJvbSAnLi9yZWNvcmRzLXRhYmxlLWhlYWRlci5qcyc7XG5pbXBvcnQgU2VsZWN0ZWRSZWNvcmRzIGZyb20gJy4vc2VsZWN0ZWQtcmVjb3Jkcy5qcyc7XG5cbi8qKlxuICogQGFsaWFzIFJlY29yZHNUYWJsZVByb3BzXG4gKiBAbWVtYmVyb2YgUmVjb3Jkc1RhYmxlXG4gKi9cblxuLyoqXG4gKiBAY2xhc3NkZXNjXG4gKiBSZW5kZXJzIGFuIGVudGlyZSByZWNvcmRzIHRhYmxlLiBUbyBmaWxsIHRoZSBkYXRhIHlvdSBtaWdodCBuZWVkOlxuICpcbiAqIC0ge0BsaW5rIHVzZVJlY29yZHN9IGFuZFxuICogLSB7QGxpbmsgdXNlU2VsZWN0ZWRSZWNvcmRzfSBob29rc1xuICpcbiAqIHNvIG1ha2Ugc3VyZSB0byBzZWUgYXQgdGhlIGRvY3VtZW50YXRpb24gcGFnZXMgZm9yIGJvdGggb2YgdGhlbVxuICpcbiAqIEBjb21wb25lbnRcbiAqIEBjbGFzc1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHN1YmNhdGVnb3J5IEFwcGxpY2F0aW9uXG4gKi9cbmNvbnN0IFJlY29yZHNUYWJsZSA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHJlc291cmNlLFxuICAgIHJlY29yZHMsXG4gICAgYWN0aW9uUGVyZm9ybWVkLFxuICAgIHNvcnRCeSxcbiAgICBkaXJlY3Rpb24sXG4gICAgaXNMb2FkaW5nLFxuICAgIG9uU2VsZWN0LFxuICAgIHNlbGVjdGVkUmVjb3JkcyxcbiAgICBvblNlbGVjdEFsbFxuICB9ID0gcHJvcHM7XG4gIGlmICghcmVjb3Jkcy5sZW5ndGgpIHtcbiAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTG9hZGVyLCBudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE5vUmVjb3Jkcywge1xuICAgICAgcmVzb3VyY2U6IHJlc291cmNlXG4gICAgfSk7XG4gIH1cbiAgY29uc3Qgc2VsZWN0ZWRBbGwgPSBzZWxlY3RlZFJlY29yZHMgJiYgISFyZWNvcmRzLmZpbmQocmVjb3JkID0+IHNlbGVjdGVkUmVjb3Jkcy5maW5kKHNlbGVjdGVkID0+IHNlbGVjdGVkLmlkID09PSByZWNvcmQuaWQpKTtcbiAgY29uc3QgcmVjb3Jkc0hhdmVCdWxrQWN0aW9uID0gISFyZWNvcmRzLmZpbmQocmVjb3JkID0+IHJlY29yZC5idWxrQWN0aW9ucy5sZW5ndGgpO1xuICBjb25zdCBjb250ZW50VGFnID0gZ2V0UmVzb3VyY2VFbGVtZW50Q3NzKHJlc291cmNlLmlkLCAndGFibGUnKTtcbiAgY29uc3Qgc2VsZWN0ZWRUYWcgPSBnZXRSZXNvdXJjZUVsZW1lbnRDc3MocmVzb3VyY2UuaWQsICd0YWJsZS1zZWxlY3RlZC1yZWNvcmRzJyk7XG4gIGNvbnN0IGJvZHlUYWcgPSBnZXRSZXNvdXJjZUVsZW1lbnRDc3MocmVzb3VyY2UuaWQsICd0YWJsZS1ib2R5Jyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUYWJsZSwge1xuICAgIFwiZGF0YS1jc3NcIjogY29udGVudFRhZ1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTZWxlY3RlZFJlY29yZHMsIHtcbiAgICByZXNvdXJjZTogcmVzb3VyY2UsXG4gICAgc2VsZWN0ZWRSZWNvcmRzOiBzZWxlY3RlZFJlY29yZHMsXG4gICAgXCJkYXRhLWNzc1wiOiBzZWxlY3RlZFRhZ1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVjb3Jkc1RhYmxlSGVhZGVyLCB7XG4gICAgcHJvcGVydGllczogcmVzb3VyY2UubGlzdFByb3BlcnRpZXMsXG4gICAgdGl0bGVQcm9wZXJ0eTogcmVzb3VyY2UudGl0bGVQcm9wZXJ0eSxcbiAgICBkaXJlY3Rpb246IGRpcmVjdGlvbixcbiAgICBzb3J0Qnk6IHNvcnRCeSxcbiAgICBvblNlbGVjdEFsbDogcmVjb3Jkc0hhdmVCdWxrQWN0aW9uID8gb25TZWxlY3RBbGwgOiB1bmRlZmluZWQsXG4gICAgc2VsZWN0ZWRBbGw6IHNlbGVjdGVkQWxsXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUYWJsZUJvZHksIHtcbiAgICBcImRhdGEtY3NzXCI6IGJvZHlUYWdcbiAgfSwgcmVjb3Jkcy5tYXAocmVjb3JkID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlY29yZEluTGlzdCwge1xuICAgIHJlY29yZDogcmVjb3JkLFxuICAgIHJlc291cmNlOiByZXNvdXJjZSxcbiAgICBrZXk6IHJlY29yZC5pZCxcbiAgICBhY3Rpb25QZXJmb3JtZWQ6IGFjdGlvblBlcmZvcm1lZCxcbiAgICBpc0xvYWRpbmc6IGlzTG9hZGluZyxcbiAgICBvblNlbGVjdDogb25TZWxlY3QsXG4gICAgaXNTZWxlY3RlZDogc2VsZWN0ZWRSZWNvcmRzICYmICEhc2VsZWN0ZWRSZWNvcmRzLmZpbmQoc2VsZWN0ZWQgPT4gc2VsZWN0ZWQuaWQgPT09IHJlY29yZC5pZClcbiAgfSkpKSk7XG59O1xuY29uc3QgT3ZlcnJpZGFibGVSZWNvcmRzVGFibGUgPSBhbGxvd092ZXJyaWRlKFJlY29yZHNUYWJsZSwgJ1JlY29yZHNUYWJsZScpO1xuZXhwb3J0IHsgT3ZlcnJpZGFibGVSZWNvcmRzVGFibGUgYXMgZGVmYXVsdCwgT3ZlcnJpZGFibGVSZWNvcmRzVGFibGUgYXMgUmVjb3Jkc1RhYmxlLCBSZWNvcmRzVGFibGUgYXMgT3JpZ2luYWxSZWNvcmRzVGFibGUgfTsiLCJpbXBvcnQgeyBCb3gsIFBhZ2luYXRpb24sIFRleHQgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VMb2NhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgdXNlUXVlcnlQYXJhbXMgfSBmcm9tICcuLi8uLi9ob29rcy91c2UtcXVlcnktcGFyYW1zLmpzJztcbmltcG9ydCB1c2VSZWNvcmRzIGZyb20gJy4uLy4uL2hvb2tzL3VzZS1yZWNvcmRzL3VzZS1yZWNvcmRzLmpzJztcbmltcG9ydCB1c2VTZWxlY3RlZFJlY29yZHMgZnJvbSAnLi4vLi4vaG9va3MvdXNlLXNlbGVjdGVkLXJlY29yZHMvdXNlLXNlbGVjdGVkLXJlY29yZHMuanMnO1xuaW1wb3J0IHsgZ2V0QWN0aW9uRWxlbWVudENzcyB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBSZWNvcmRzVGFibGUgZnJvbSAnLi4vYXBwL3JlY29yZHMtdGFibGUvcmVjb3Jkcy10YWJsZS5qcyc7XG5pbXBvcnQgeyBSRUZSRVNIX0tFWSB9IGZyb20gJy4vdXRpbHMvYXBwZW5kLWZvcmNlLXJlZnJlc2guanMnO1xuY29uc3QgTGlzdCA9ICh7XG4gIHJlc291cmNlLFxuICBzZXRUYWdcbn0pID0+IHtcbiAgY29uc3Qge1xuICAgIHJlY29yZHMsXG4gICAgbG9hZGluZyxcbiAgICBkaXJlY3Rpb24sXG4gICAgc29ydEJ5LFxuICAgIHBhZ2UsXG4gICAgdG90YWwsXG4gICAgZmV0Y2hEYXRhLFxuICAgIHBlclBhZ2VcbiAgfSA9IHVzZVJlY29yZHMocmVzb3VyY2UuaWQpO1xuICBjb25zdCB7XG4gICAgc2VsZWN0ZWRSZWNvcmRzLFxuICAgIGhhbmRsZVNlbGVjdCxcbiAgICBoYW5kbGVTZWxlY3RBbGwsXG4gICAgc2V0U2VsZWN0ZWRSZWNvcmRzXG4gIH0gPSB1c2VTZWxlY3RlZFJlY29yZHMocmVjb3Jkcyk7XG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgY29uc3Qge1xuICAgIHN0b3JlUGFyYW1zXG4gIH0gPSB1c2VRdWVyeVBhcmFtcygpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZXRUYWcpIHtcbiAgICAgIHNldFRhZyh0b3RhbC50b1N0cmluZygpKTtcbiAgICB9XG4gIH0sIFt0b3RhbF0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlbGVjdGVkUmVjb3JkcyhbXSk7XG4gIH0sIFtyZXNvdXJjZS5pZF0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24uc2VhcmNoKTtcbiAgICBpZiAoc2VhcmNoLmdldChSRUZSRVNIX0tFWSkpIHtcbiAgICAgIHNldFNlbGVjdGVkUmVjb3JkcyhbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlY29yZElkcyA9IHNlYXJjaC5nZXQoJ3JlY29yZElkcycpPy5zcGxpdD8uKCcsJykgPz8gW107XG4gICAgICBzZXRTZWxlY3RlZFJlY29yZHMocmVjb3Jkcy5maWx0ZXIociA9PiByZWNvcmRJZHMuaW5jbHVkZXMoci5pZC50b1N0cmluZygpKSkpO1xuICAgIH1cbiAgfSwgW2xvY2F0aW9uLnNlYXJjaCwgcmVjb3Jkc10pO1xuICBjb25zdCBoYW5kbGVBY3Rpb25QZXJmb3JtZWQgPSAoKSA9PiBmZXRjaERhdGEoKTtcbiAgY29uc3QgaGFuZGxlUGFnaW5hdGlvbkNoYW5nZSA9IHBhZ2VOdW1iZXIgPT4ge1xuICAgIHN0b3JlUGFyYW1zKHtcbiAgICAgIHBhZ2U6IHBhZ2VOdW1iZXIudG9TdHJpbmcoKVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBjb250ZW50VGFnID0gZ2V0QWN0aW9uRWxlbWVudENzcyhyZXNvdXJjZS5pZCwgJ2xpc3QnLCAndGFibGUtd3JhcHBlcicpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgdmFyaWFudDogXCJjb250YWluZXJcIixcbiAgICBcImRhdGEtY3NzXCI6IGNvbnRlbnRUYWdcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVjb3Jkc1RhYmxlLCB7XG4gICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgIHJlY29yZHM6IHJlY29yZHMsXG4gICAgYWN0aW9uUGVyZm9ybWVkOiBoYW5kbGVBY3Rpb25QZXJmb3JtZWQsXG4gICAgb25TZWxlY3Q6IGhhbmRsZVNlbGVjdCxcbiAgICBvblNlbGVjdEFsbDogaGFuZGxlU2VsZWN0QWxsLFxuICAgIHNlbGVjdGVkUmVjb3Jkczogc2VsZWN0ZWRSZWNvcmRzLFxuICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uLFxuICAgIHNvcnRCeTogc29ydEJ5LFxuICAgIGlzTG9hZGluZzogbG9hZGluZ1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwge1xuICAgIG10OiBcInhsXCIsXG4gICAgdGV4dEFsaWduOiBcImNlbnRlclwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFBhZ2luYXRpb24sIHtcbiAgICBwYWdlOiBwYWdlLFxuICAgIHBlclBhZ2U6IHBlclBhZ2UsXG4gICAgdG90YWw6IHRvdGFsLFxuICAgIG9uQ2hhbmdlOiBoYW5kbGVQYWdpbmF0aW9uQ2hhbmdlXG4gIH0pKSk7XG59O1xuY29uc3QgT3ZlcnJpZGFibGVMaXN0ID0gYWxsb3dPdmVycmlkZShMaXN0LCAnRGVmYXVsdExpc3RBY3Rpb24nKTtcbmV4cG9ydCB7IE92ZXJyaWRhYmxlTGlzdCBhcyBkZWZhdWx0LCBPdmVycmlkYWJsZUxpc3QgYXMgTGlzdCwgTGlzdCBhcyBPcmlnaW5hbExpc3QgfTsiLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBhZGROb3RpY2UgfSBmcm9tICcuLi9zdG9yZS9hY3Rpb25zL2FkZC1ub3RpY2UuanMnO1xuXG4vKipcbiAqIEFkZGl0aW9uYWwgcHJvcHMgd2hpY2ggYXJlIHBhc3NlZCB0byB5b3VyIGNvbXBvbmVudFxuICogQGFsaWFzIEFkZE5vdGljZVByb3BzXG4gKiBAbWVtYmVyb2Ygd2l0aE5vdGljZVxuICovXG5cbmNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IGRpc3BhdGNoID0+ICh7XG4gIGFkZE5vdGljZTogbm90aWNlID0+IGRpc3BhdGNoKGFkZE5vdGljZShub3RpY2UpKVxufSk7XG5cbi8qKlxuICogSGlnaGVyIE9yZGVyIENvbXBvbmVudCB3aGljaCBhbGxvd3MgeW91IHRvIHBvc3Qgbm90aWNlIG1lc3NhZ2VzIGZyb20geW91ciBjb21wb25lbnRzXG4gKlxuICogSXQgZ2l2ZXMgeW91IHRoZSBhZGRpdGlvbmFsIHByb3A6IGBhZGROb3RpY2Uobm90aWNlTWVzc2FnZSlgIHRha2luZyB7QGxpbmsgTm90aWNlTWVzc2FnZX0uXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogaW1wb3J0IHsgd2l0aE5vdGljZSB9IGZyb20gJ2FkbWluanMvY29yZSdcbiAqXG4gKiBjb25zdCBNWV9NRVNTQUdFID0ge1xuICogICBtZXNzYWdlOiAnSSBhbSB0b2FzdCBtZXNzYWdlJyxcbiAqICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICogfVxuICogY29uc3QgTXlDdXN0b21Db21wb25lbnQgPSAoeyBhZGROb3RpY2UgfSkgPT4ge1xuICogICByZXR1cm4gKFxuICogICAgIDxhIG9uQ2xpY2s9eygpID0+IGFkZE5vdGljZShNWV9NRVNTQUdFKX0+Q2xpY2sgTWU8L2E+XG4gKiAgIClcbiAqIH1cbiAqIGV4cG9ydCBkZWZhdWx0IHdpdGhOb3RpY2UoTXlDdXN0b21Db21wb25lbnQpXG4gKiBgYGBcbiAqXG4gKiBAY29tcG9uZW50XG4gKiBAc3ViY2F0ZWdvcnkgSE9DXG4gKi9cbmNvbnN0IHdpdGhOb3RpY2UgPSBDb21wb25lbnQgPT4gY29ubmVjdChudWxsLCBtYXBEaXNwYXRjaFRvUHJvcHMpKENvbXBvbmVudCk7XG5leHBvcnQgeyB3aXRoTm90aWNlIGFzIGRlZmF1bHQsIHdpdGhOb3RpY2UgfTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCB7IEJ1dHRvbiwgRHJhd2VyQ29udGVudCwgRHJhd2VyRm9vdGVyLCBJY29uLCBNZXNzYWdlQm94LCBUYWJsZSwgVGFibGVCb2R5LCBUYWJsZUNlbGwsIFRhYmxlUm93LCBUZXh0IH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VOYXZpZ2F0ZSB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHdpdGhOb3RpY2UgZnJvbSAnLi4vLi4vaG9jL3dpdGgtbm90aWNlLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vaG9va3MvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0QWN0aW9uRWxlbWVudENzcyB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBBcGlDbGllbnQgZnJvbSAnLi4vLi4vdXRpbHMvYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQgQWN0aW9uSGVhZGVyIGZyb20gJy4uL2FwcC9hY3Rpb24taGVhZGVyL2FjdGlvbi1oZWFkZXIuanMnO1xuaW1wb3J0IEJhc2VQcm9wZXJ0eUNvbXBvbmVudCBmcm9tICcuLi9wcm9wZXJ0eS10eXBlL2luZGV4LmpzJztcbmltcG9ydCB7IGFwcGVuZEZvcmNlUmVmcmVzaCB9IGZyb20gJy4vdXRpbHMvYXBwZW5kLWZvcmNlLXJlZnJlc2guanMnO1xuXG4vKipcbiAqIEBuYW1lIEJ1bGtEZWxldGVBY3Rpb25cbiAqIEBjYXRlZ29yeSBBY3Rpb25zXG4gKiBAZGVzY3JpcHRpb24gRGVsZXRlcyBzZWxlY3RlZCByZWNvcmRzLlxuICogQGNvbXBvbmVudFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgQnVsa0RlbGV0ZSA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHJlc291cmNlLFxuICAgIHJlY29yZHMsXG4gICAgYWN0aW9uLFxuICAgIGFkZE5vdGljZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB7XG4gICAgdHJhbnNsYXRlTWVzc2FnZSxcbiAgICB0cmFuc2xhdGVCdXR0b25cbiAgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGlmICghcmVjb3Jkcykge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCBudWxsLCB0cmFuc2xhdGVNZXNzYWdlKCdwaWNrU29tZUZpcnN0VG9SZW1vdmUnLCByZXNvdXJjZS5pZCkpO1xuICB9XG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKCkgPT4ge1xuICAgIGNvbnN0IGFwaSA9IG5ldyBBcGlDbGllbnQoKTtcbiAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgIGNvbnN0IHJlY29yZElkcyA9IHJlY29yZHMubWFwKHIgPT4gci5pZCk7XG4gICAgYXBpLmJ1bGtBY3Rpb24oe1xuICAgICAgcmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG4gICAgICBhY3Rpb25OYW1lOiBhY3Rpb24ubmFtZSxcbiAgICAgIHJlY29yZElkcyxcbiAgICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIGlmIChyZXNwb25zZS5kYXRhLm5vdGljZSkge1xuICAgICAgICBhZGROb3RpY2UocmVzcG9uc2UuZGF0YS5ub3RpY2UpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEucmVkaXJlY3RVcmwpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICAgICAgLy8gYnVsayBmdW5jdGlvbiBoYXZlIHJlY29yZElkcyBpbiB0aGUgVVJMIHNvIGl0IGhhcyB0byBiZSBzdHJpcHBlZCBiZWZvcmUgcmVkaXJlY3RcbiAgICAgICAgc2VhcmNoLmRlbGV0ZSgncmVjb3JkSWRzJyk7XG4gICAgICAgIG5hdmlnYXRlKGFwcGVuZEZvcmNlUmVmcmVzaChyZXNwb25zZS5kYXRhLnJlZGlyZWN0VXJsLCBzZWFyY2gudG9TdHJpbmcoKSkpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgYWRkTm90aWNlKHtcbiAgICAgICAgbWVzc2FnZTogdHJhbnNsYXRlTWVzc2FnZSgnYnVsa0RlbGV0ZUVycm9yJywgcmVzb3VyY2UuaWQpLFxuICAgICAgICB0eXBlOiAnZXJyb3InXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9O1xuICBjb25zdCBjb250ZW50VGFnID0gZ2V0QWN0aW9uRWxlbWVudENzcyhyZXNvdXJjZS5pZCwgYWN0aW9uLm5hbWUsICdkcmF3ZXItY29udGVudCcpO1xuICBjb25zdCB0YWJsZVRhZyA9IGdldEFjdGlvbkVsZW1lbnRDc3MocmVzb3VyY2UuaWQsIGFjdGlvbi5uYW1lLCAndGFibGUnKTtcbiAgY29uc3QgZm9vdGVyVGFnID0gZ2V0QWN0aW9uRWxlbWVudENzcyhyZXNvdXJjZS5pZCwgYWN0aW9uLm5hbWUsICdkcmF3ZXItZm9vdGVyJyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJhd2VyQ29udGVudCwge1xuICAgIFwiZGF0YS1jc3NcIjogY29udGVudFRhZ1xuICB9LCBhY3Rpb24/LnNob3dJbkRyYXdlciA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEFjdGlvbkhlYWRlciwgX2V4dGVuZHMoe1xuICAgIG9taXRBY3Rpb25zOiB0cnVlXG4gIH0sIHByb3BzKSkgOiBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZXNzYWdlQm94LCB7XG4gICAgbWI6IFwieHhsXCIsXG4gICAgdmFyaWFudDogXCJkYW5nZXJcIixcbiAgICBtZXNzYWdlOiB0cmFuc2xhdGVNZXNzYWdlKHJlY29yZHMubGVuZ3RoID4gMSA/ICd0aGVzZVJlY29yZHNXaWxsQmVSZW1vdmVkX3BsdXJhbCcgOiAndGhlc2VSZWNvcmRzV2lsbEJlUmVtb3ZlZCcsIHJlc291cmNlLmlkLCB7XG4gICAgICBjb3VudDogcmVjb3Jkcy5sZW5ndGhcbiAgICB9KVxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGFibGUsIHtcbiAgICBcImRhdGEtY3NzXCI6IHRhYmxlVGFnXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRhYmxlQm9keSwgbnVsbCwgcmVjb3Jkcy5tYXAocmVjb3JkID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRhYmxlUm93LCB7XG4gICAga2V5OiByZWNvcmQuaWRcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGFibGVDZWxsLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlUHJvcGVydHlDb21wb25lbnQsIHtcbiAgICB3aGVyZTogXCJsaXN0XCIsXG4gICAgcHJvcGVydHk6IHJlc291cmNlLnRpdGxlUHJvcGVydHksXG4gICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgIHJlY29yZDogcmVjb3JkXG4gIH0pKSkpKSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEcmF3ZXJGb290ZXIsIHtcbiAgICBcImRhdGEtY3NzXCI6IGZvb3RlclRhZ1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHtcbiAgICB2YXJpYW50OiBcImNvbnRhaW5lZFwiLFxuICAgIHNpemU6IFwibGdcIixcbiAgICBvbkNsaWNrOiBoYW5kbGVDbGljayxcbiAgICBkaXNhYmxlZDogbG9hZGluZ1xuICB9LCBsb2FkaW5nID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIGljb246IFwiTG9hZGVyXCIsXG4gICAgc3BpbjogdHJ1ZVxuICB9KSA6IG51bGwsIHRyYW5zbGF0ZUJ1dHRvbihyZWNvcmRzLmxlbmd0aCA+IDEgPyAnY29uZmlybVJlbW92YWxNYW55X3BsdXJhbCcgOiAnY29uZmlybVJlbW92YWxNYW55JywgcmVzb3VyY2UuaWQsIHtcbiAgICBjb3VudDogcmVjb3Jkcy5sZW5ndGhcbiAgfSkpKSk7XG59O1xuY29uc3QgRm9ybWF0dGVkQnVsa0RlbGV0ZSA9IHdpdGhOb3RpY2UoQnVsa0RlbGV0ZSk7XG5jb25zdCBPdmVycmlkYWJsZUZvcm1hdHRlZEJ1bGtEZWxldGUgPSBhbGxvd092ZXJyaWRlKEZvcm1hdHRlZEJ1bGtEZWxldGUsICdEZWZhdWx0QnVsa0RlbGV0ZUFjdGlvbicpO1xuZXhwb3J0IHsgT3ZlcnJpZGFibGVGb3JtYXR0ZWRCdWxrRGVsZXRlIGFzIGRlZmF1bHQsIE92ZXJyaWRhYmxlRm9ybWF0dGVkQnVsa0RlbGV0ZSBhcyBCdWxrRGVsZXRlLCBGb3JtYXR0ZWRCdWxrRGVsZXRlIGFzIE9yaWdpbmFsQnVsa0RlbGV0ZSB9OyIsImltcG9ydCB7IE5ldyB9IGZyb20gJy4vbmV3LmpzJztcbmltcG9ydCB7IEVkaXQgfSBmcm9tICcuL2VkaXQuanMnO1xuaW1wb3J0IHsgU2hvdyB9IGZyb20gJy4vc2hvdy5qcyc7XG5pbXBvcnQgeyBMaXN0IH0gZnJvbSAnLi9saXN0LmpzJztcbmltcG9ydCB7IEJ1bGtEZWxldGUgfSBmcm9tICcuL2J1bGstZGVsZXRlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbmV3LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9uLnByb3BzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZWRpdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Nob3cuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9saXN0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYnVsay1kZWxldGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9pbmRleC5qcyc7XG5leHBvcnQgY29uc3QgYWN0aW9ucyA9IHtcbiAgbmV3OiBOZXcsXG4gIGVkaXQ6IEVkaXQsXG4gIHNob3c6IFNob3csXG4gIGxpc3Q6IExpc3QsXG4gIGJ1bGtEZWxldGU6IEJ1bGtEZWxldGVcbn07IiwiLyogY3NwZWxsOiBkaXNhYmxlICovXG5leHBvcnQgY29uc3QgRE9DUyA9ICdodHRwczovL2RvY3MuYWRtaW5qcy5jbyc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QQVRIUyA9IHtcbiAgcm9vdFBhdGg6ICcvYWRtaW4nLFxuICBsb2dvdXRQYXRoOiAnL2FkbWluL2xvZ291dCcsXG4gIGxvZ2luUGF0aDogJy9hZG1pbi9sb2dpbicsXG4gIHJlZnJlc2hUb2tlblBhdGg6ICcvYWRtaW4vcmVmcmVzaC10b2tlbidcbn07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRyYW5zIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBNZXNzYWdlQm94LCBMaW5rIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgRXJyb3JCb3VuZGFyeSBmcm9tICcuL2Vycm9yLWJvdW5kYXJ5LmpzJztcbmltcG9ydCB7IGFjdGlvbnMgfSBmcm9tICcuLi9hY3Rpb25zL2luZGV4LmpzJztcbmltcG9ydCB7IERPQ1MgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9ob29rcy9pbmRleC5qcyc7XG4vKipcbiAqIENvbXBvbmVudCB3aGljaCByZW5kZXJzIGFsbCB0aGUgZGVmYXVsdCBhbmQgY3VzdG9tIGFjdGlvbnMgZm9yIGJvdGggdGhlIFJlc291cmNlIGFuZCB0aGUgUmVjb3JkLlxuICpcbiAqIEl0IHBhc3NlcyBhbGwgcHJvcHMgZG93biB0byB0aGUgYWN0dWFsIEFjdGlvbiBjb21wb25lbnQuXG4gKlxuICogRXhhbXBsZSBvZiBjcmVhdGluZyB5b3VyIG93biBhY3Rpb25zOlxuICogYGBgXG4gKiAvLyBBZG1pbkpTIG9wdGlvbnNcbiAqIGNvbnN0IEFkbWluSlNPcHRpb25zID0ge1xuICogICByZXNvdXJjZXM6IFtcbiAqICAgICAgcmVzb3VyY2UsXG4gKiAgICAgIG9wdGlvbnM6IHtcbiAqICAgICAgICBhY3Rpb25zOiB7XG4gKiAgICAgICAgICAgbXlOZXdBY3Rpb246IHtcbiAqICAgICAgICAgICAgIGxhYmVsOiAnYW1hemluZyBhY3Rpb24nLFxuICogICAgICAgICAgICAgaWNvbjogJ0FkZCcsXG4gKiAgICAgICAgICAgICBpblZpc2libGU6IChyZXNvdXJjZSwgcmVjb3JkKSA9PiByZWNvcmQucGFyYW0oJ2VtYWlsJykgIT09ICcnLFxuICogICAgICAgICAgICAgYWN0aW9uVHlwZTogJ3JlY29yZCcsXG4gKiAgICAgICAgICAgICBjb21wb25lbnQ6ICdNeU5ld0FjdGlvbicsXG4gKiAgICAgICAgICAgICBoYW5kbGVyOiAocmVxdWVzdCwgcmVzcG9uc2UsIGRhdGEpID0+IHtcbiAqICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAgICAgICAgICAgLi4uXG4gKiAgICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICAgIH1cbiAqICAgICAgICAgICB9XG4gKiAgICAgICAgfVxuICogICAgICB9XG4gKiAgIF1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIGBgYFxuICogLy8gLi9teS1uZXctYWN0aW9uLmpzXG4gKiBpbXBvcnQgeyBCb3ggfSBmcm9tICdhZG1pbmpzJ1xuICpcbiAqIGNvbnN0IE15TmV3QWN0aW9uID0gKHByb3BzKSA9PiB7XG4gKiAgIGNvbnN0IHsgcmVzb3VyY2UsIGFjdGlvbiwgcmVjb3JkIH0gPSBwcm9wc1xuICogICAvLyBkbyBzb21ldGhpbmcgd2l0aCB0aGUgcHJvcHMgYW5kIHJlbmRlciBhY3Rpb25cbiAqICAgcmV0dXJuIChcbiAqICAgICA8Qm94PlNvbWUgQWN0aW9uIENvbnRlbnQ8L0JveD5cbiAqICAgKVxuICogfVxuICogYGBgXG4gKlxuICogQGNvbXBvbmVudFxuICogQG5hbWUgQmFzZUFjdGlvbkNvbXBvbmVudFxuICogQHN1YmNhdGVnb3J5IEFwcGxpY2F0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBCYXNlQWN0aW9uQ29tcG9uZW50ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcmVzb3VyY2UsXG4gICAgYWN0aW9uLFxuICAgIHJlY29yZCxcbiAgICByZWNvcmRzLFxuICAgIHNldFRhZ1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGRvY3VtZW50YXRpb25MaW5rID0gW0RPQ1MsICdCYXNlQWN0aW9uLmh0bWwnXS5qb2luKCcvJyk7XG4gIGNvbnN0IHtcbiAgICB0cmFuc2xhdGVNZXNzYWdlXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBsZXQgQWN0aW9uID0gYWN0aW9uc1thY3Rpb24ubmFtZV07XG4gIGlmIChhY3Rpb24uY29tcG9uZW50KSB7XG4gICAgQWN0aW9uID0gQWRtaW5KUy5Vc2VyQ29tcG9uZW50c1thY3Rpb24uY29tcG9uZW50XTtcbiAgfVxuICBpZiAoQWN0aW9uKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEVycm9yQm91bmRhcnksIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEFjdGlvbiwge1xuICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICByZXNvdXJjZTogcmVzb3VyY2UsXG4gICAgICByZWNvcmQ6IHJlY29yZCxcbiAgICAgIHJlY29yZHM6IHJlY29yZHMsXG4gICAgICBzZXRUYWc6IHNldFRhZ1xuICAgIH0pKTtcbiAgfVxuICByZXR1cm4gQWN0aW9uIHx8IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1lc3NhZ2VCb3gsIHtcbiAgICB2YXJpYW50OiBcImRhbmdlclwiXG4gIH0sIHRyYW5zbGF0ZU1lc3NhZ2UoJ25vQWN0aW9uQ29tcG9uZW50JyksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zLCB7XG4gICAga2V5OiBcIm1lc3NhZ2VzLmJ1dHRvbnMuc2VlVGhlRG9jdW1lbnRhdGlvblwiXG4gIH0sIFwiU2VlOlwiLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMaW5rLCB7XG4gICAgbWw6IFwiZGVmYXVsdFwiLFxuICAgIGhyZWY6IGRvY3VtZW50YXRpb25MaW5rXG4gIH0sIFwidGhlIGRvY3VtZW50YXRpb25cIikpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBCYXNlQWN0aW9uQ29tcG9uZW50OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCBSb2NrZXRTVkcgPSAoKSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gIHZpZXdCb3g6IFwiLTk3LjExNDkgLTE4LjQ0NyA0MDYuODE3MiAzMTIuNDMwOFwiLFxuICB3aWR0aDogXCI0MDYuODE3MlwiLFxuICBoZWlnaHQ6IFwiMzEyLjQzMDhcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkZWZzXCIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2xpcFBhdGhcIiwge1xuICBpZDogXCJjbGlwMF8xMjg4XzI1MDEyXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHdpZHRoOiBcIjYzOS4zNjRcIixcbiAgaGVpZ2h0OiBcIjQ1Mi40ODdcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKC0zLjkyNTA1IDQuNTg4ODcpXCJcbn0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjbGlwUGF0aFwiLCB7XG4gIGlkOiBcImNsaXAxXzEyODhfMjUwMTJcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgd2lkdGg6IFwiMjI3LjY2N1wiLFxuICBoZWlnaHQ6IFwiMTQ1LjI5OVwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMjk5LjIxNCAxMDguNzUxKVwiXG59KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2xpcFBhdGhcIiwge1xuICBpZDogXCJjbGlwMl8xMjg4XzI1MDEyXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHdpZHRoOiBcIjM4Ljg2OTlcIixcbiAgaGVpZ2h0OiBcIjMyLjM5MTZcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDE3NC4yNzUgMTE2LjE1NSlcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNsaXBQYXRoXCIsIHtcbiAgaWQ6IFwiY2xpcDNfMTI4OF8yNTAxMlwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICB3aWR0aDogXCIxMDEuMzY3XCIsXG4gIGhlaWdodDogXCI1NC43MzgzXCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgyMC42NDYyIDM3MC44MzYpIHJvdGF0ZSgtNi45MTY3KVwiXG59KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2xpcFBhdGhcIiwge1xuICBpZDogXCJjbGlwNF8xMjg4XzI1MDEyXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHdpZHRoOiBcIjY2LjYzNDFcIixcbiAgaGVpZ2h0OiBcIjM3LjAxOVwiLFxuICBmaWxsOiBcIndoaXRlXCIsXG4gIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUoMTA4LjU2NiA0MTUuMDgzKVwiXG59KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2xpcFBhdGhcIiwge1xuICBpZDogXCJjbGlwNV8xMjg4XzI1MDEyXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHdpZHRoOiBcIjQ3LjE5OTJcIixcbiAgaGVpZ2h0OiBcIjY2LjYzNDFcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDExNi44OTYgMjA0LjA3NSlcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNsaXBQYXRoXCIsIHtcbiAgaWQ6IFwiY2xpcDZfMTI4OF8yNTAxMlwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICB3aWR0aDogXCIxNzAuNzVcIixcbiAgaGVpZ2h0OiBcIjQ3LjQzMDZcIixcbiAgZmlsbDogXCJ3aGl0ZVwiLFxuICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDI0OS4zNTQgMzk0LjQ2OClcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNsaXBQYXRoXCIsIHtcbiAgaWQ6IFwiY2xpcDdfMTI4OF8yNTAxMlwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICB3aWR0aDogXCI1NC4wNzA4XCIsXG4gIGhlaWdodDogXCIyNS42MTI1XCIsXG4gIGZpbGw6IFwid2hpdGVcIixcbiAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSg4My41Nzg2IDg3LjgyNjQpIHJvdGF0ZSgtMTcuMzE3KVwiXG59KSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICBjbGlwUGF0aDogXCJ1cmwoI2NsaXAwXzEyODhfMjUwMTIpXCIsXG4gIHRyYW5zZm9ybTogXCJtYXRyaXgoMC42OTc4NTgwOTUxNjkwNjc1LCAwLCAwLCAwLjY5Nzg1ODA5NTE2OTA2NzUsIC05OC4xNzY3MTIwMzYxMzI4MSwgLTIxLjY0OTM4MzU0NDkyMTg0NylcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNIDIwMy40MTIgMjI3Ljc0NiBMIDExNS45OTggMjcyLjU0IEwgMTA1LjU2MSAyOTYuODk1IEwgMjA2LjAyMiAyNDguMTg1IEwgMjE5LjA2OSAyNDUuMTQxIEwgMTgzLjg0MyAyODAuMzY4IEwgMjA2LjAyMiAyNzYuODg5IEwgMTgzLjg0MyAyOTIuOTgxIEMgMTkwLjM2NiAyOTIuMjU1IDIwNS45MzUgMjkwLjI4NCAyMTYuMDI1IDI4OC4xOTYgQyAyMjYuMTE0IDI4Ni4xMDkgMjM3LjMzNSAyNzkuNzg5IDI0MS42ODQgMjc2Ljg4OSBDIDI0Mi44NDQgMjc5LjM1MyAyNDYuMDMzIDI4NS4wNjUgMjQ5LjUxMiAyODguMTk2IEMgMjUyLjk5MSAyOTEuMzI3IDI3My41NzcgMjg0LjI4MyAyODMuNDM1IDI4MC4zNjggQyAyODUuODk4IDI4Mi4zOTcgMjkyLjA0NSAyODYuODA1IDI5Ni45MTYgMjg4LjE5NiBDIDMwMS43ODcgMjg5LjU4OCAzMjUuOTEgMjg2LjE2NyAzMzcuMzYyIDI4NC4yODMgTCAzMzAuODM4IDMxMy40MiBDIDMyNS4wNCAzMjYuNjEyIDMxNy43MDQgMzUxLjE3IDMzNC43NTMgMzQzLjg2NCBDIDM1MS44MDEgMzM2LjU1NyAzODguNTM1IDI4My4xMjMgNDA0Ljc3MSAyNTcuMzE5IEMgNDEyLjU5OSAyNTEuMjMgNDM3LjY0OSAyMzMuNDg2IDQ3NS4yMjQgMjExLjIxOSBDIDUyMi4xOTMgMTgzLjM4NiA1NzAuMDMyIDEwNC42NjkgNTgwLjkwNSA4MC4zMTUgQyA1OTEuNjM0IDU2LjI4MSA1NzYuNTI5IDU0LjI3MSA1NTcuMzIxIDUxLjcxNCBMIDU1Ni41NTEgNTEuNjEyIEMgNTQwLjg5NSA0OS41MjQgNDgzLjkyMyA1My45MzEgNDU3LjM5NCA1Ni4zOTUgQyA0NTQuNzg0IDU0LjIyMSA0NDkuMzA1IDQ5LjAwMiA0NDguMjYxIDQ1LjUyMyBDIDQ0Ni45NTcgNDEuMTc0IDQzMC40MyAzMi40NzYgNDE5LjU1NyAzNy4yNiBDIDQxMC44NTkgNDEuMDg3IDQwOC45NzUgNTUuNjcxIDQwOS4xMiA2Mi40ODQgQyA0MDEuODcyIDU4LjI4IDM4Ni4yNDUgNDkuMDAyIDM4MS43MjIgNDUuNTIzIEMgMzc3LjE5OCA0Mi4wNDQgMzY2LjUgNDEuMTc0IDM2MS43MTYgNDEuMTc0IEMgMzUxLjcxNCAyOC4xMjcgMzI4LjkyNSAyLjI5NCAzMTcuNzkxIDMuMzM4IEMgMzAzLjg3NCA0LjY0MiAzMDAuODMgMTguNTU5IDMwNy43ODkgMzcuMjYgQyAzMTMuMzU1IDUyLjIyIDMyOC4wODQgNjAuMzA5IDMzNC43NTMgNjIuNDg0IEMgMzI4LjA4NCA2OC4yODMgMzEzLjg3NyA4MS40NDUgMzEwLjM5OCA4Ny43MDggQyAzMDYuOTE5IDkzLjk3IDMxMy44NzcgMTEyLjM1MyAzMTcuNzkxIDEyMC43NjEgTCAyODAuMzkgMTM4LjU5MSBDIDI1OS42NiAxMzUuNDAyIDIxNy43NjUgMTMwLjMyOCAyMTYuMDI1IDEzNS41NDcgQyAyMTQuMjg1IDE0MC43NjYgMjM3LjYyNSAxNjIuNjU2IDI0OS41MTIgMTcyLjk0OCBDIDI0My43MTQgMTgxLjc5MiAyMzAuNzI1IDIwMC42OTUgMjI1LjE1OCAyMDUuNTY1IEMgMjE5LjU5MSAyMTAuNDM3IDIxNi43NSAyMjIuMzgyIDIxNi4wMjUgMjI3Ljc0NiBMIDE1Ni44NzkgMjY0LjcxMiBMIDIwMy40MTIgMjI3Ljc0NiBaXCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTSAxNTMuODU2IDE3Ni4wODggQyAxNTIuNDk4IDE2NS45MDUgMTQ0LjIzOCAxNjEuNjYyIDE0MC4yNzggMTYwLjgxMyBDIDk4LjE4OSAxODYuNjExIDEwNy40NjYgMjUwLjc2NCAxMTcuMzY2IDI3OS42MTYgQyAxMjkuNTI5IDI3MC44NDYgMTUzLjg1NiAyNTIuNDYgMTUzLjg1NiAyNDkuMDY3IEMgMTUzLjg1NiAyNDUuNjcyIDE4Ny43OTkgMjE4LjIzNCAyMDQuNzcgMjA0Ljk0IEMgMjAyLjUwNyAxOTkuODQ4IDE5NS4wOTcgMTg4LjY0NyAxODMuNTU2IDE4NC41NzQgQyAxNjkuMTMgMTc5LjQ4MyAxNTUuNTUzIDE4OC44MTcgMTUzLjg1NiAxNzYuMDg4IFpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNIDI3My4yMjYgMzEuMzc3IEMgMjcyLjgyOCAyOC41MjIgMjcxLjk4NiAyNS40NDEgMjcwLjcwOCAyMi4xMzUgQyAyNzAuMzg0IDIxLjMwMSAyNjkuOTkzIDIwLjM2OSAyNjkuNTQyIDE5LjM1NSBDIDI2OC43OSAxNy42MDQgMjY3Ljg1MSAxNS41OTEgMjY2LjcyNCAxMy4zMDcgQyAyNjYuMDQ3IDExLjkwMiAyNjUuMzkzIDEwLjg4NyAyNjQuNzY5IDEwLjI2NCBDIDI2My43OTEgOS4yMzQgMjYyLjcxNyA4Ljc5OCAyNjEuNTM3IDguOTQ5IEMgMjYwLjgzOCA5LjA0NiAyNjAuMTYxIDkuMzk5IDI1OS41MDcgMTAuMDAxIEMgMjU5LjA1NiAxMC4zNzYgMjU4LjUzIDEwLjk3NyAyNTcuOTI5IDExLjgwNCBDIDI1Ni43NDkgMTMuNDA0IDI1NS45MTQgMTQuNjQ0IDI1NS40MSAxNS41MjMgQyAyNTQuNjA2IDE2Ljg2OCAyNTQuMDU3IDE4LjE0NSAyNTMuNzU3IDE5LjM1NSBDIDI1My43NDkgMTkuNDMgMjUzLjczNCAxOS41MDUgMjUzLjcxOSAxOS41OCBDIDI1My41OTEgMjAuMTgyIDI1My40NzggMjEuMTA2IDI1My4zODEgMjIuMzYgQyAyNTMuMTYzIDI1LjI5OCAyNTMuMDY1IDI4LjI2NiAyNTMuMDggMzEuMjY0IEMgMjUyLjc0MiAzMS40MjkgMjUyLjM3MyAzMS43MDcgMjUxLjk5IDMyLjA5MSBDIDI0OS4yMDkgMzQuODE4IDI0Ny4zMTQgMzguNjg4IDI0Ni4zMTUgNDMuNjk5IEMgMjQ2LjE1NiA0NC40NTggMjQ2LjAyOSA0NS4xNzIgMjQ1LjkzOSA0NS44NDEgQyAyNDUuOTE2IDQ1Ljg2MyAyNDUuODkzIDQ1Ljg3IDI0NS44NjQgNDUuODc4IEMgMjQ1LjM2IDQ2LjAwNiAyNDQuOTAxIDQ2LjM2NiAyNDQuNDczIDQ2Ljk2NyBDIDI0NC4xOTUgNDcuMzIxIDI0My45ODQgNDcuNjgxIDI0My44MzQgNDguMDU3IEMgMjQzLjUzMyA0OC44MDggMjQzLjQzNiA0OS45MiAyNDMuNTMzIDUxLjQwMSBDIDI0My41MzMgNTEuODI5IDI0My41NzEgNTIuMTUyIDI0My42NDYgNTIuMzc3IEMgMjQzLjcyMSA1Mi41NSAyNDMuOTMyIDUyLjg4MSAyNDQuMjg1IDUzLjM1NCBDIDI0NC44MzQgNTQuMDgzIDI0NS4yMDkgNTQuNTA0IDI0NS40MTMgNTQuNjMxIEMgMjQ1Ljk5MSA1NC45OTIgMjQ2LjcwNiA1NS4wNDUgMjQ3LjU1NSA1NC43ODIgQyAyNDcuNTkyIDU0Ljg1NyAyNDcuNjMgNTQuOTMyIDI0Ny42NjcgNTUuMDA3IEMgMjQ4LjcyIDU2LjkzOCAyNTAuMTI2IDU4LjYyOSAyNTEuODc3IDYwLjA3OSBDIDI1NS4wODcgNjIuNzMxIDI1OS4xMzIgNjQuMzc3IDI2NC4wMTcgNjUgQyAyNjUuODQ0IDY1LjI0OCAyNjcuMjUgNjUuMDc1IDI2OC4yMjcgNjQuNDc0IEMgMjY4LjY3OCA2NC4xOTYgMjY4Ljk0MSA2My44NzMgMjY5LjAxNiA2My40OTcgQyAyNjkuMDkxIDYzLjQ4MiAyNjkuMTY2IDYzLjQ3NSAyNjkuMjQyIDYzLjQ2IEMgMjcwLjY0NyA2My4yMTIgMjcxLjc4MiA2Mi41NzMgMjcyLjY2MiA2MS41NDQgQyAyNzMuMzkyIDYwLjY5NSAyNzMuOTU1IDU5LjUgMjc0LjM1MyA1Ny45NzUgQyAyNzQuODI2IDU2LjE3MiAyNzUuMDUyIDU0LjA5IDI3NS4wMyA1MS43MzkgQyAyNzUuMDMgNTAuMjM2IDI3NC44OTQgNDguMTE3IDI3NC42MTcgNDUuMzkgTCAyNzMuNjAxIDM0Ljc1OCBDIDI3My41MjYgMzMuNTAzIDI3My4zOTkgMzIuMzc2IDI3My4yMjYgMzEuMzc3IFogTSAyNTAuNzEzIDM4LjI4OSBDIDI1MS4zODggMzYuNzQxIDI1Mi4yMDggMzUuNDEyIDI1My4xNTUgMzQuMzA3IEMgMjUzLjIgMzUuNTI0IDI1My4yNjEgMzYuNzQxIDI1My4zNDMgMzcuOTUxIEwgMjUzLjU2OSA0MS4wNjkgQyAyNTMuNjY2IDQyLjI3MiAyNTMuNzcxIDQzLjE5NiAyNTMuODY5IDQzLjg0OSBDIDI1NC4xNyA0NS45NTMgMjU0Ljc0OSA0OC4wOCAyNTUuNTk4IDUwLjIzNiBDIDI1Ni4zNzMgNTIuMTg5IDI1Ny4yOSA1My45NDggMjU4LjM0MiA1NS40OTUgQyAyNTguMjg5IDU1LjQ5NSAyNTguMjM3IDU1LjQ5NSAyNTguMTkyIDU1LjQ5NSBDIDI1NS4zODggNTUuMTk1IDI1Mi40OTMgNTMuMzkyIDI0OS41MSA1MC4wODYgQyAyNDkuMDUxIDQ5LjYyNyAyNDguNjYgNDkuMzQ5IDI0OC4zNDQgNDkuMjU5IEMgMjQ4LjE4NiA0Ny45MzcgMjQ4LjM0NCA0Ni4yMTYgMjQ4LjgzMyA0NC4xMTIgQyAyNDkuMzgxIDQxLjc2MSAyNTAuMDEzIDM5LjgxNSAyNTAuNzEzIDM4LjI4OSBaIE0gMjYzLjM0MSAzNC45ODMgQyAyNjMuNTg5IDM0Ljk1MyAyNjMuODE0IDM0LjkzOCAyNjQuMDE3IDM0Ljk0NiBDIDI2My43ODQgMzQuOTk4IDI2My41NTkgMzUuMDk2IDI2My4zNDEgMzUuMjQ2IEMgMjYzLjM0OSAzNS4xNjQgMjYzLjM0OSAzNS4wNzQgMjYzLjM0MSAzNC45ODMgWiBNIDI2OC40OSA0My4zOTkgQyAyNjguNTEzIDQzLjU3MSAyNjguNTM2IDQzLjc1MiAyNjguNTY1IDQzLjkyNSBMIDI2OC43MTUgNDQuODI2IEMgMjY4LjU3MyA0NS45NDYgMjY4LjMxIDQ3LjAxMyAyNjcuOTI2IDQ4LjAxOSBMIDI2OC40OSA0My4zOTkgWiBNIDI2MS41NzQgNTUuMDQ1IEMgMjYxLjY4NyA1NS4wMTUgMjYxLjggNTQuOTcgMjYxLjkxMyA1NC44OTQgQyAyNjEuOTQzIDU1IDI2MS45NjUgNTUuMjI1IDI2MS45ODggNTUuNTcxIEMgMjYxLjg0NSA1NS4zOSAyNjEuNzAyIDU1LjIxNyAyNjEuNTc0IDU1LjA0NSBaIE0gMjY1LjU5NiA0OS44MjMgTCAyNjUuNzA5IDQ5LjYzNSBDIDI2NS44MDcgNDkuNDYyIDI2NS44MzYgNDkuMjk3IDI2NS43ODQgNDkuMTQ2IEwgMjY1Ljg5NyA0OS4xNDYgQyAyNjUuODc0IDQ5LjM0OSAyNjUuODc0IDQ5LjYzNSAyNjUuODk3IDUwLjAxMSBMIDI2NS44MjEgNTAuMjc0IEMgMjY1LjcyMyA1MC41MjEgMjY1LjYxOSA1MC42ODcgMjY1LjUyMSA1MC43NjIgQyAyNjUuNDY4IDUwLjMzNCAyNjUuNDk4IDUwLjAyNiAyNjUuNTk2IDQ5LjgyMyBaIE0gMjY1LjE4MiA1Mi4wMDIgQyAyNjUuMzU2IDUxLjcyNCAyNjUuNDMxIDUxLjUyOCAyNjUuNDA4IDUxLjQwMSBMIDI2NS41MjEgNTEuNDAxIEMgMjY1LjUyMSA1Mi43MyAyNjUuNTQ0IDUzLjczIDI2NS41OTYgNTQuNDA2IEwgMjY1LjQwOCA1NC41MTkgQyAyNjUuNDMxIDU0LjE5NiAyNjUuMzkzIDUzLjg4IDI2NS4yOTUgNTMuNTc5IEMgMjY1LjE0NSA1My4yMjYgMjY1LjA1NSA1Mi45NjMgMjY1LjAzMiA1Mi43OTEgTCAyNjUuMTgyIDUyLjAwMiBaIE0gMjQ1LjgyNiA0OC41ODMgQyAyNDUuODI2IDQ4LjYyOCAyNDUuODI2IDQ4LjY2NiAyNDUuODI2IDQ4LjY5NiBDIDI0NS44OTMgNTAuMDc4IDI0Ni4xNjUgNTEuNDMxIDI0Ni42NTIgNTIuNzUzIEMgMjQ2LjU5MyA1Mi43NjggMjQ2LjU0IDUyLjc2OCAyNDYuNTAyIDUyLjc1MyBDIDI0Ni4yNzcgNTIuNjc4IDI0Ni4wNjYgNTIuNTA1IDI0NS44NjQgNTIuMjI3IEMgMjQ1LjQzNSA1MS42MjYgMjQ1LjI0NyA1MC45MjcgMjQ1LjMgNTAuMTIzIEMgMjQ1LjM1MiA0OS41MzcgMjQ1LjUzMyA0OS4wMjYgMjQ1LjgyNiA0OC41ODMgWiBNIDI0OC4zODIgNDkuNTYgTCAyNTAuMjYxIDUyLjIyNyBDIDI1MS4wMTIgNTMuMzMyIDI1MS42MjkgNTQuMTIgMjUyLjEwMyA1NC41OTQgQyAyNTMuOSA1Ni4zNzUgMjU2LjUzIDU3LjM4OSAyNTkuOTk1IDU3LjYzNyBDIDI2MC43MTcgNTguNDg2IDI2MS41OTcgNTkuNDQ4IDI2Mi42MjcgNjAuNTMgQyAyNjMuMzE4IDYxLjIyMSAyNjMuOTA0IDYxLjc2OSAyNjQuMzkzIDYyLjE4MyBDIDI2Mi40NjkgNjIuMDYyIDI2MC4zNDEgNjEuNDkxIDI1OC4wMDQgNjAuNDU0IEMgMjU1LjU0NiA1OS40MDMgMjUzLjYyOCA1OC4xODUgMjUyLjI1MyA1Ni44MSBDIDI1MS4xNDggNTUuNjMxIDI1MC4yMDggNTQuMjMzIDI0OS40MzQgNTIuNjAzIEMgMjQ4LjkwOCA1MS41MjggMjQ4LjU1NSA1MC41MjEgMjQ4LjM4MiA0OS41OTcgTCAyNDguMzgyIDQ5LjU2IFogTSAyNzEuNzYgNDcuMDA1IEMgMjcxLjYxIDQ1Ljc1IDI3MS40NzQgNDQuODExIDI3MS4zNDcgNDQuMTg3IEMgMjcxLjE0MyA0Mi45NjMgMjcwLjkxIDQxLjg4MSAyNzAuNjMzIDQwLjk1NyBDIDI3MC4xMDYgMzkuMTMxIDI2OS4zNyAzNy4zMzUgMjY4LjQxNSAzNS41ODQgQyAyNjcuNjY0IDM0LjIzMiAyNjYuODc0IDMzLjQyMSAyNjYuMDQ3IDMzLjE0MyBDIDI2NS41NDQgMzIuOTQgMjY0LjgyMiAzMi45MTcgMjYzLjg2NyAzMy4wNjcgQyAyNjMuNjY0IDMzLjEwNSAyNjMuNDYxIDMzLjE0MyAyNjMuMjY2IDMzLjE4IEMgMjYzLjIxMyAzMi41MTEgMjYzLjA4NSAzMS42NTUgMjYyLjg5IDMwLjYyNSBDIDI2Mi44MzcgMzAuMzg1IDI2Mi43OTIgMzAuMTUyIDI2Mi43NCAyOS45MTIgQyAyNjIuNjE5IDI4Ljk2NSAyNjIuNDMyIDI3Ljk4MSAyNjIuMTc2IDI2Ljk0NCBDIDI2Mi4xMzEgMjYuNzkzIDI2Mi4wODUgMjYuNjUxIDI2Mi4wMjUgMjYuNTMxIEMgMjYxLjk4OCAyNi4yODMgMjYxLjk1IDI2LjA1NyAyNjEuOTEzIDI1Ljg1NCBDIDI2MS41NiAyNC4wMjkgMjYxLjQwMSAyMi40MjEgMjYxLjQyNCAyMS4wNDYgQyAyNjEuNDI0IDIwLjU4NyAyNjEuNDM5IDIwLjEzNiAyNjEuNDYyIDE5LjY5MyBDIDI2MS41MDYgMTkuNjMzIDI2MS41NDQgMTkuNTU4IDI2MS41NzQgMTkuNDY4IEMgMjYxLjU4OSAxOS40MzggMjYxLjU5NyAxOS40IDI2MS42MTIgMTkuMzU1IEMgMjYxLjcxIDE5LjA0NyAyNjEuODMgMTguNTE0IDI2MS45ODggMTcuNzQgQyAyNjIuMDc4IDE3LjI4MSAyNjIuMTc2IDE2Ljg5OCAyNjIuMjg5IDE2LjU3NSBDIDI2Mi4zOTQgMTYuMzUgMjYyLjUwNyAxNi4xMzkgMjYyLjYyNyAxNS45MzYgQyAyNjIuODgyIDE1LjU5OCAyNjMuMDE4IDE1LjI5OCAyNjMuMDQgMTUuMDM1IEMgMjYzLjE5OCAxNC44NjkgMjYzLjM1NiAxNC43MDQgMjYzLjUyOCAxNC41NDYgQyAyNjMuNzI0IDE0LjM2NiAyNjMuODc1IDE0LjIxNiAyNjMuOTc5IDE0LjA5NiBDIDI2NC4zNjMgMTQuNzcyIDI2NC43NzYgMTUuNTk4IDI2NS4yMiAxNi41NzUgQyAyNjUuNjk0IDE3LjYxOSAyNjYuMTA3IDE4LjU0NCAyNjYuNDYxIDE5LjM1NSBDIDI2Ni45OTQgMjAuNTEyIDI2Ny40MDggMjEuNDQ0IDI2Ny43MDEgMjIuMTM1IEMgMjY4LjU1IDI0LjIzOSAyNjkuMTg5IDI2LjE3IDI2OS42MTcgMjcuOTIxIEMgMjcwLjEyMSAyOS45MjcgMjcwLjYxIDMzLjIwMyAyNzEuMDg0IDM3Ljc2MyBMIDI3MS44NzMgNDUuOTUzIEMgMjcyLjEyMSA0OC41MyAyNzIuMjQ4IDUwLjQ4NCAyNzIuMjQ4IDUxLjgxNCBDIDI3Mi4yMjYgNTMuOTkzIDI3MS45NDggNTUuOTA5IDI3MS40MjIgNTcuNTYyIEMgMjcxLjA2OCA1OC42MTQgMjcwLjYxIDU5LjQyNSAyNzAuMDMxIDYwLjAwNCBDIDI2OS4xODIgNjAuNzU1IDI2OC4zMDIgNjEuMDAzIDI2Ny40IDYwLjc1NSBDIDI2Ny4wMjQgNjAuNjI3IDI2Ni41MiA2MC4yODIgMjY1Ljg5NyA1OS43MDMgQyAyNjUuNjQxIDU5LjQ2MyAyNjUuMzkzIDU5LjIyMiAyNjUuMTQ1IDU4Ljk4OSBDIDI2NS4zODUgNTguODQ3IDI2NS41NTggNTguNjQ0IDI2NS42NzEgNTguMzg4IEMgMjY1Ljc0NiA1OC4xODUgMjY1Ljc4NCA1Ny44ODUgMjY1Ljc4NCA1Ny40ODcgQyAyNjUuODA3IDU3LjA4OCAyNjUuODQ0IDU2Ljc4OCAyNjUuODk3IDU2LjU4NSBMIDI2Ni45NDkgNTYuNjIzIEMgMjY3Ljg1MiA1NC43NDQgMjY4LjQ3NSA1Mi42OTMgMjY4LjgyOCA1MC40NjEgQyAyNjkuMDU0IDUxLjgxNCAyNjguOTk0IDUzLjE2NiAyNjguNjQgNTQuNTE5IEMgMjY4LjQ5OCA1NS4wNiAyNjguNDk4IDU1LjQ1OCAyNjguNjQgNTUuNzIxIEMgMjY4LjMzOSA1Ni4zOSAyNjguMTc0IDU2Ljg0OCAyNjguMTUxIDU3LjExMSBDIDI2OC4wOTkgNTcuNDExIDI2OC4xMzcgNTcuNjk3IDI2OC4yNjQgNTcuOTc1IEMgMjY4LjQxNSA1OC4yOTggMjY4LjYyNSA1OC41MDEgMjY4LjkwMyA1OC41NzYgQyAyNjkuMjI3IDU4LjcwNCAyNjkuNTY1IDU4LjY1MSAyNjkuOTE4IDU4LjQyNiBDIDI3MC4yMTkgNTguMjIzIDI3MC40NjcgNTcuOTUyIDI3MC42NyA1Ny41OTkgQyAyNzEuMzI0IDU2LjYyMyAyNzEuNzM3IDU1LjQzNSAyNzEuOTExIDU0LjAzIEMgMjcyLjA2MSA1My4wMDEgMjcyLjA4MyA1MS43MTYgMjcxLjk4NSA1MC4xNjEgQyAyNzEuOTYzIDQ5LjEwOSAyNzEuODg4IDQ4LjA1NyAyNzEuNzYgNDcuMDA1IFogTSAyNjAuNjcyIDEyLjc4MSBDIDI2MS4xOTggMTIuMDgyIDI2MS43MSAxMS43ODEgMjYyLjIxMyAxMS44NzkgQyAyNjIuMzU2IDExLjkwMiAyNjIuNTA3IDExLjk3NyAyNjIuNjY1IDEyLjEwNCBDIDI2Mi4yODEgMTIuMzA3IDI2MS44NzUgMTIuNjc1IDI2MS40MjQgMTMuMTk0IEMgMjYxLjE2MSAxMy41MDIgMjYwLjkzNSAxMy43OTUgMjYwLjc0NyAxNC4wNTggQyAyNjAuMzAzIDE0LjM5NiAyNTkuOTI4IDE0Ljk3NSAyNTkuNjE5IDE1Ljc4NiBDIDI1OS4yNTkgMTYuNzkzIDI1OS4wMzQgMTcuOTggMjU4Ljk0NCAxOS4zNTUgQyAyNTguOTIxIDE5Ljc5OCAyNTguOTA2IDIwLjI2NCAyNTguOTA2IDIwLjc0NSBDIDI1OC44ODMgMjMuNzI4IDI1OS4yMDcgMjYuNjY2IDI1OS44ODMgMjkuNTc0IEMgMjU5Ljk1OCAyOS44ODkgMjYwLjA0OSAzMC4yOCAyNjAuMTQ2IDMwLjczOCBDIDI2MC4xODMgMzEuNTIgMjYwLjEzMSAzMi40MDYgMjU5Ljk5NSAzMy40MDUgQyAyNTkuNjczIDM1LjQ1NyAyNTkuMjI5IDM3LjMzNSAyNTguNjgxIDM5LjA0MSBDIDI1OC4xMzEgNDAuNzkxIDI1Ny44MzggNDEuNzQ2IDI1Ny44MTYgNDEuODk2IEMgMjU3LjU2NyA0Mi45NyAyNTcuNDE3IDQ0LjA5IDI1Ny4zNjUgNDUuMjM5IEMgMjU3LjM1NyA0NS42NjggMjU3LjM2NSA0Ni4wODEgMjU3LjQwMiA0Ni40NzkgQyAyNTcuMzM0IDQ2LjIzOSAyNTcuMjc1IDQ1Ljk5MSAyNTcuMjE0IDQ1LjcyOCBDIDI1Ni45MTQgNDQuMzIzIDI1Ni42MjggNDIuNDc0IDI1Ni4zNSA0MC4xNjggQyAyNTUuOTIyIDM2Ljk4OSAyNTUuNjczIDM0LjIzMiAyNTUuNTk4IDMxLjkwMyBDIDI1NS41NzYgMzAuMTc1IDI1NS42MjEgMjguMTIzIDI1NS43NDggMjUuNzQyIEMgMjU1LjgwMSAyNC41MTcgMjU1Ljg4NCAyMy4zOTcgMjU2LjAxMSAyMi4zOTggQyAyNTYuMTc3IDIxLjM2OSAyNTYuNDI1IDIwLjM1NCAyNTYuNzYzIDE5LjM1NSBDIDI1Ny41ODMgMTcuMTAxIDI1OC44ODMgMTQuOTE0IDI2MC42NzIgMTIuNzgxIFogTSAzNDAuOTE3IDE4LjgyOSBDIDM0MC41MjYgMTguOTU3IDM0MC4xODEgMTkuMTMgMzM5Ljg2NSAxOS4zNTUgQyAzMzkuNTExIDE5LjYyNSAzMzkuMjExIDE5Ljk2NCAzMzguOTYzIDIwLjM2OSBDIDMzOC43MTQgMjAuNzY4IDMzOC41MzUgMjEuMTczIDMzOC40MzcgMjEuNTcyIEMgMzM4LjI4NiAyMS45NyAzMzguMjExIDIyLjI4NSAzMzguMjExIDIyLjUxMSBDIDMzOC4yMTEgMjIuODY0IDMzOC4zMjQgMjMuMTQ5IDMzOC41NDkgMjMuMzc1IEMgMzM4LjY3NyAyMy40NzMgMzM4Ljg2NSAyMy41NDggMzM5LjExMyAyMy42IEMgMzM5LjQxNCAyMy43MjggMzM5LjcxNSAyMy43NjYgMzQwLjAxNiAyMy43MTMgQyAzNDAuMzY5IDIzLjY2IDM0MC42MTYgMjMuNTAzIDM0MC43NjcgMjMuMjI1IEwgMzQwLjkxNyAyMi41ODYgQyAzNDEuMDQ1IDIyLjE1OCAzNDEuMjkzIDIxLjg1IDM0MS42NjkgMjEuNjQ3IEMgMzQyLjAyMiAyMS40OTYgMzQyLjI1NiAyMS4zNjkgMzQyLjM4MyAyMS4yNzEgQyAzNDIuNTQxIDIxLjEyOCAzNDIuNjU0IDIwLjkwMyAzNDIuNzIxIDIwLjU5NSBMIDM0Mi45MDkgMjAuOTMzIEMgMzQyLjkzMSAyMS4wMzEgMzQyLjk2MiAyMS4xOTYgMzQyLjk4NSAyMS40MjEgTCAzNDMuMjQ4IDIxLjY4NCBMIDM0NC4xNSAyMi4zMjMgQyAzNDQuMjQ3IDIyLjQyMSAzNDQuMzYgMjIuNDg4IDM0NC40ODcgMjIuNTExIEMgMzQ0LjYxNiAyMi41NjMgMzQ0Ljc1MSAyMi41NjMgMzQ0LjkwMSAyMi41MTEgTCAzNDUuMTI2IDIyLjQ3MyBDIDM0NS4xOCAyMi40NzMgMzQ1LjI1NSAyMi40MTMgMzQ1LjM1MiAyMi4yODUgQyAzNDUuNTAyIDIyLjAzNyAzNDUuNTQgMjEuNzgyIDM0NS40NjUgMjEuNTM0IEMgMzQ1LjM5IDIxLjI1NiAzNDUuMjI1IDIxLjA2MSAzNDQuOTc2IDIwLjkzMyBDIDM0NC42MjMgMjAuODA1IDM0NC40NSAyMC43MyAzNDQuNDUgMjAuNzA3IEMgMzQ0LjM5OCAyMC42NTUgMzQ0LjMyMiAyMC41MzUgMzQ0LjIyNSAyMC4zMzIgQyAzNDQgMTkuOTc5IDM0My42NzYgMTkuODQzIDM0My4yNDggMTkuOTE5IEwgMzQzLjI0OCAyMC4wMzEgQyAzNDMuMDc0IDE5Ljk3OSAzNDIuOTI0IDIwLjAxNiAzNDIuNzk3IDIwLjE0NCBDIDM0Mi44NDIgMTkuODEzIDM0Mi44MzQgMTkuNTU4IDM0Mi43NTkgMTkuMzkzIEMgMzQyLjc1OSAxOS4zNzggMzQyLjc0NCAxOS4zNyAzNDIuNzIxIDE5LjM1NSBDIDM0Mi42MzIgMTkuMDQ3IDM0Mi4zNzYgMTguODUyIDM0MS45NyAxOC43NTQgQyAzNDEuNjQ3IDE4LjY3OSAzNDEuMjkzIDE4LjcwMSAzNDAuOTE3IDE4LjgyOSBaIE0gMzM1Ljk5NCAxNS4zMzUgQyAzMzUuNDY4IDE1LjU2MSAzMzUuMTUxIDE1Ljc3MSAzMzUuMDU0IDE1Ljk3NCBDIDMzNC45MjYgMTYuMjUyIDMzNC45NDEgMTYuNSAzMzUuMDkyIDE2LjcyNSBDIDMzNS4yMTkgMTYuOTUxIDMzNS40MyAxNy4wNjMgMzM1LjczMSAxNy4wNjMgQyAzMzUuNzgzIDE3LjA2MyAzMzUuODUxIDE3LjA0OCAzMzUuOTE4IDE3LjAyNiBDIDMzNS4zMjUgMTcuNzg1IDMzNC44NzQgMTguNTU5IDMzNC41NjUgMTkuMzU1IEMgMzM0LjI3MiAyMC4wODQgMzM0LjExNCAyMC44MzUgMzM0LjA3NyAyMS42MDkgQyAzMzQuMDI0IDIyLjM4MyAzMzMuOTQ5IDIyLjg2NCAzMzMuODUxIDIzLjAzNyBDIDMzMy43OTkgMjMuMTg3IDMzMy40OTggMjMuNTI1IDMzMi45NDkgMjQuMDUxIEMgMzMyLjc0NiAyNC4yODQgMzMyLjYwMyAyNC40OTQgMzMyLjUzNSAyNC42OSBDIDMzMi4yOTUgMjQuNDQ5IDMzMS45OTQgMjQuMjc2IDMzMS42MzMgMjQuMTY0IEMgMzMwLjQ1MyAyMy43ODggMzI5LjAxOCAyNC4wNjYgMzI3LjMxMiAyNC45OSBDIDMyNS42MDUgMjUuOTE0IDMyNC4xNTQgMjcuMTE3IDMyMi45NTIgMjguNTk3IEMgMzIxLjY5NiAzMC4xMjIgMzIwLjg0NyAzMS43NzUgMzIwLjM5NSAzMy41NTYgQyAzMjAuMzIgMzMuODU2IDMyMC4yMDcgMzQuMzA3IDMyMC4wNTcgMzQuOTA4IEMgMzE5LjkwNyAzNS40MTIgMzE5LjcwNCAzNS43OTUgMzE5LjQ1NiAzNi4wNzMgQyAzMTkuMzI4IDM2LjI3NiAzMTkuMTE3IDM2LjU0NiAzMTguODE3IDM2Ljg5OSBDIDMxOC43NDIgMzcuMDUgMzE4LjcxOSAzNy4yMjIgMzE4Ljc0MiAzNy40MjUgQyAzMTguNzY0IDM3LjU5OCAzMTguODU0IDM3LjcyNiAzMTkuMDA0IDM3LjgwMSBDIDMxOS4xMzMgMzcuODc2IDMxOS4zMDUgMzcuODkxIDMxOS41MzEgMzcuODM4IEMgMzIwLjMzNiAzNy42MzYgMzIwLjk3NCAzNy4wNzIgMzIxLjQ0OCAzNi4xNDggQyAzMjEuNTQ1IDM1Ljk3NSAzMjEuODYyIDM1LjE1NiAzMjIuMzg4IDMzLjcwNiBDIDMyMy4wMTEgMzEuOTU1IDMyNC4wMTkgMzAuNCAzMjUuMzk0IDI5LjA0OCBDIDMyNi43NyAyNy42OTUgMzI4LjM0MSAyNi43MTggMzMwLjA5MyAyNi4xMTcgQyAzMzAuNTk2IDI2LjU2OCAzMzEuMTA4IDI2Ljc5MyAzMzEuNjMzIDI2Ljc5MyBDIDMzMS45MzQgMjYuODE2IDMzMi4yMTMgMjYuNzQxIDMzMi40NiAyNi41NjggQyAzMzIuNzM5IDI2LjM5NSAzMzIuODk3IDI2LjE3IDMzMi45NDkgMjUuODkyIEMgMzMyLjk3MiAyNS44MDIgMzMyLjk4NyAyNS43MTkgMzMyLjk4NyAyNS42MjkgQyAzMzMuMDg1IDI1LjY2NyAzMzMuMTk3IDI1LjY5NiAzMzMuMzI1IDI1LjcwNCBDIDMzMy42NDkgMjUuNzI3IDMzMy45NDkgMjUuNjY3IDMzNC4yMjcgMjUuNTE2IEMgMzM0Ljk3OSAyNS4wNjUgMzM1LjUwNSAyNC4zMTQgMzM1LjgwNiAyMy4yNjIgQyAzMzYuMDg0IDIyLjAzNyAzMzYuMzE3IDIxLjEzNiAzMzYuNTE5IDIwLjU1NyBDIDMzNi42NTUgMjAuMTQ0IDMzNi44MjcgMTkuNzM4IDMzNy4wNDYgMTkuMzU1IEMgMzM3LjQ4OSAxOC41MzYgMzM4LjEwNiAxNy43ODUgMzM4Ljg4OCAxNy4xMDEgQyAzMzkuOTQgMTYuMTQ3IDM0MS4xNjUgMTUuNDQ4IDM0Mi41NzEgMTQuOTk3IEMgMzQzLjE3MyAxNC44NDcgMzQzLjU3IDE0LjY4MiAzNDMuNzc0IDE0LjUwOSBDIDM0NC4yMjUgMTQuMTU2IDM0NC4zNzUgMTMuNzggMzQ0LjIyNSAxMy4zODIgQyAzNDQuMTI3IDEzLjA1OSAzNDMuODI2IDEyLjgxOCAzNDMuMzIzIDEyLjY2OCBDIDM0Mi41NDggMTIuNDk1IDM0MS40ODEgMTIuNzk2IDM0MC4xMjggMTMuNTcgQyAzMzkuOTQgMTMuNjkgMzM5Ljc1MiAxMy44MDMgMzM5LjU2NCAxMy45MDggQyAzMzkuNTQyIDEzLjkwOCAzMzkuNTE5IDEzLjkwOCAzMzkuNDg5IDEzLjkwOCBDIDMzOS40MTQgMTMuOSAzMzkuMzE2IDEzLjg4NSAzMzkuMTg5IDEzLjg3IEMgMzM5LjA3NiAxMy41MzIgMzM4Ljc5NyAxMy4xNDEgMzM4LjM2MSAxMi43MDYgQyAzMzYuMTgxIDEwLjUyNyAzMzQuNyA5LjA4NCAzMzMuOTI2IDguMzg1IEMgMzMyLjIyIDYuODMgMzMwLjc0NiA1Ljc3OCAzMjkuNDkxIDUuMjI5IEMgMzI3Ljk2NSA0LjUwMSAzMjYuMTYxIDQuMTYzIDMyNC4wNzkgNC4yMTUgQyAzMjAuNTk4IDQuMjM4IDMxNy4xODYgNS4yNTIgMzEzLjg1NiA3LjI1OCBDIDMxMi4wNTEgOC4zMzMgMzEwLjU2MyA5LjUyNyAzMDkuMzgzIDEwLjgyNyBDIDMwOC41NTYgMTEuNzUxIDMwNy44MDQgMTIuNzgxIDMwNy4xMjggMTMuOTA4IEMgMzA2LjAxNSAxNS43MzMgMzA1LjE2NiAxNy41NTIgMzA0LjU3MiAxOS4zNTUgQyAzMDQuMTA2IDIwLjg0MyAzMDMuODIgMjIuMzE1IDMwMy43MDggMjMuNzg4IEMgMzAzLjUzNSAyNi4zNDMgMzAzLjkzMyAyOC44NDUgMzA0LjkxMSAzMS4zMDIgQyAzMDUuODY1IDMzLjcyOSAzMDcuMjYzIDM1LjgyNSAzMDkuMTIgMzcuNTc2IEMgMzA5LjI0OCAzNy43MDMgMzA5Ljg1NiAzOC4yMzcgMzEwLjk2MSAzOS4xOTEgQyAzMTEuNzEzIDM5Ljg0NSAzMTIuMyA0MC40MDggMzEyLjcyOCA0MC44ODEgQyAzMTMuMjc2IDQxLjUzNSAzMTMuNzQzIDQxLjg0MyAzMTQuMTE5IDQxLjgyMSBDIDMxNC4zNDUgNDEuNzk4IDMxNC41NTUgNDEuNjg2IDMxNC43NTcgNDEuNDgzIEMgMzE0LjkwOCA0MS4yNTcgMzE0Ljk5OCA0MS4wMTcgMzE1LjAyIDQwLjc2OSBDIDMxNS4wNDMgNDAuMzE4IDMxNC45MDggMzkuODUyIDMxNC42MDggMzkuMzc5IEMgMzE0LjIzMiAzOC43NTUgMzEzLjY2OCAzOC4xMDEgMzEyLjkxNiAzNy40MjUgQyAzMTIuMDM3IDM2LjY1MSAzMTEuMzkgMzYuMDU4IDMxMC45NjEgMzUuNjYgQyAzMDkuMjg1IDM0LjA1OSAzMDguMDMgMzIuMTQzIDMwNy4yMDMgMjkuOTEyIEMgMzA2LjM3NiAyNy42NTggMzA2LjA5MSAyNS4zODkgMzA2LjMzOCAyMy4xMTIgQyAzMDYuNDY3IDIyLjE4OCAzMDYuNjU1IDIxLjI4NiAzMDYuOTAyIDIwLjQwNyBDIDMwNy4wMDggMjAuMDU0IDMwNy4xMiAxOS43MDEgMzA3LjI0IDE5LjM1NSBDIDMwOC4zMDggMTYuNDE3IDMxMC4wNzUgMTMuODQ4IDMxMi41NCAxMS42NTQgQyAzMTUuMjk5IDkuMTc0IDMxOC40MTkgNy42MzQgMzIxLjg5OSA3LjAzMyBDIDMyMy45MDYgNi42OCAzMjUuNjcyIDYuNzMyIDMyNy4xOTkgNy4xODMgQyAzMjguNzI1IDcuNjU2IDMzMC4zMzMgOC42NzEgMzMyLjAwOSAxMC4yMjYgQyAzMzIuOTg3IDExLjEyOCAzMzQuMzk5IDEyLjUxOCAzMzYuMjU2IDE0LjM5NiBDIDMzNi40MzcgMTQuNTU0IDMzNi42MSAxNC42OTcgMzM2Ljc4MyAxNC44MDkgQyAzMzYuNTU3IDE0Ljk2IDMzNi4yOTQgMTUuMTMyIDMzNS45OTQgMTUuMzM1IFogTSA1MjAuNjEzIDUyLjQxNSBDIDUyMC4zMDUgNTIuNzM4IDUyMC4wMTIgNTMuMDYxIDUxOS43NDkgNTMuMzkyIEMgNTEzLjI2MSA1My42NzcgNTA1LjQ5NiA1NC4wNzUgNDk2LjQ0NiA1NC41OTQgQyA0ODcuNzQ4IDU1LjEyIDQ4MC43OTUgNTUuNjQ2IDQ3NS41ODYgNTYuMTcyIEMgNDY3Ljk3MSA1Ni45NDYgNDYxLjA5MyA1Ny45NzUgNDU0Ljk1MiA1OS4yNTIgQyA0NTQuMjkgNTkuNDAzIDQ1My43MjYgNTkuNjM1IDQ1My4yNiA1OS45NjYgQyA0NTIuNzM0IDU5Ljc0OCA0NTIuMTcgNTkuNTA4IDQ1MS41NjkgNTkuMjUyIEMgNDQ4Ljk5OCA1OC4xNjMgNDQ2LjY5MSA1Ny4zNTkgNDQ0LjY1MyA1Ni44NDggQyA0NDQuODA0IDU2LjY3NSA0NDQuOTU0IDU2LjM1OSA0NDUuMTA0IDU1LjkwOSBDIDQ0NS44MzMgNTMuNTc5IDQ0Ni4xMzQgNTEuNjg2IDQ0Ni4wMDcgNTAuMjM2IEMgNDQ1LjkwOCA0OS4yMzcgNDQ1LjYxNSA0OC4zMiA0NDUuMTQyIDQ3LjQ5MyBDIDQ0NC42MzkgNDYuNTkyIDQ0My45NzcgNDUuOTMxIDQ0My4xNDkgNDUuNTAyIEMgNDQyLjcyOSA0NS4yNjIgNDQyLjMxNSA0NS4xNDkgNDQxLjkxIDQ1LjE2NCBDIDQ0MS44MTIgNDQuODExIDQ0MS42OTkgNDQuNDUgNDQxLjU3MSA0NC4wNzUgQyA0NDEuMjcxIDQzLjI3MSA0NDAuOTcgNDIuNzIyIDQ0MC42NjkgNDIuNDIyIEMgNDQwLjI0MSA0MS45OTMgNDM5LjUxOSA0MS42ODYgNDM4LjQ4OSA0MS40ODMgQyA0MzcuNTg3IDQxLjI1NyA0MzYuODIgNDEuMTQ1IDQzNi4xOTYgNDEuMTQ1IEMgNDM1LjgyMSA0MS4xNDUgNDM1LjUzNCA0MS4yMzUgNDM1LjMzMiA0MS40MDcgQyA0MzUuMzAyIDQxLjQzIDQzNS4yOCA0MS40NTMgNDM1LjI1NyA0MS40ODMgTCA0MzQuNjkzIDQwLjYxOCBDIDQzNC4zNyA0MC4xOSA0MzQuMTA3IDM5LjkyNyA0MzMuOTAzIDM5LjgzIEMgNDMzLjY3OSAzOS43MDIgNDMzLjI0MiAzOS42NjQgNDMyLjU4OCAzOS43MTcgQyA0MzEuNjg2IDM5LjczOSA0MzEuMDI1IDM5Ljc1NCA0MzAuNTk2IDM5Ljc1NCBDIDQyOS43OTIgMzkuODA3IDQyOS4xNTMgMzkuOTU3IDQyOC42OCA0MC4yMDUgQyA0MjguNDc2IDQwLjMwMyA0MjguMTkxIDQwLjUyMSA0MjcuODE1IDQwLjg0NCBDIDQyNy40MzkgNDEuMTIyIDQyNy4xMzggNDEuMzEgNDI2LjkxMyA0MS40MDcgQyA0MjYuNDQgNDEuNjg2IDQyNi4xODQgNDEuODQzIDQyNi4xNjEgNDEuODk2IEMgNDI2LjEzOSA0MS45MzMgNDI2LjExNiA0MS45NzEgNDI2LjA4NiA0Mi4wMDkgQyA0MjYuMDAzIDQxLjg5NiA0MjUuOTIxIDQxLjc4MyA0MjUuODIyIDQxLjY3IEMgNDI1LjEyNCA0MC44MjEgNDI0LjUzIDQwLjI2NSA0MjQuMDU3IDQwLjAxNyBDIDQyMy4wMjcgMzkuNDY5IDQyMS44NjEgMzkuNDU0IDQyMC41NjEgMzkuOTggQyA0MTkuNzg2IDQwLjI4IDQxOC43OCA0MC45MTkgNDE3LjU1NCA0MS44OTYgQyA0MTYuODAyIDQyLjQ5NyA0MTYuMzE0IDQzLjA0NSA0MTYuMDg5IDQzLjU0OSBDIDQxNS45MzggNDMuOTAyIDQxNS44NCA0NC40NzMgNDE1Ljc4OCA0NS4yNzcgTCA0MTUuNTYyIDUwLjE2MSBDIDQxNS41NjIgNTAuMTYxIDQxNS41NjIgNTAuMTkxIDQxNS41NjIgNTAuMTk4IEMgNDE0LjQ0MiA1MC4wMDMgNDEzLjMxNCA1MC4xNjggNDEyLjE4IDUwLjY4NyBDIDQxMS42IDUwLjkzNSA0MTEuMTY1IDUxLjI3MyA0MTAuODY0IDUxLjcwMSBDIDQxMC40NjUgNTIuMjI3IDQxMC4zMzggNTIuNzUzIDQxMC40ODggNTMuMjc5IEMgNDEwLjU4NiA1My41NzkgNDEwLjg0MSA1My45NTUgNDExLjI0IDU0LjQwNiBDIDQxMS42NjggNTQuODc5IDQxMS45MzEgNTUuMjQ4IDQxMi4wMjkgNTUuNDk1IEMgNDEyLjE1NyA1NS43OTYgNDEyLjE5NCA1Ni4xOTQgNDEyLjE0MiA1Ni42OTggTCA0MTIuMTA1IDYxLjg4MiBDIDQxMS43OTYgNjEuOTcyIDQxMS41MzMgNjIuMTMgNDExLjMxNSA2Mi4zNyBDIDQxMC45NjEgNjIuNzY5IDQxMC43MTQgNjMuNDQ1IDQxMC41NjMgNjQuMzk5IEMgNDEwLjM5IDY0LjM3NyA0MDkuOTk5IDY0LjE1MSA0MDkuMzk4IDYzLjcyMyBDIDQwOC44NTcgNjMuMzc3IDQwOC4yOTMgNjMuMjQ5IDQwNy43MDcgNjMuMzQ3IEMgNDA3LjYyNCA2My4yNzIgNDA3LjUyNiA2My4xODIgNDA3LjQwNiA2My4wODQgQyA0MDUuNjc3IDYxLjc1NCA0MDEuNjcgNTkuNDAzIDM5NS4zNzggNTYuMDIxIEMgMzkwLjI2NyA1My4yOTQgMzg2LjU2MSA1MC42MTIgMzg0LjI1MyA0Ny45ODIgQyAzODMuMTI1IDQ2LjY4MiAzODIuNTYyIDQ2LjAxMyAzODIuNTYyIDQ1Ljk5MSBDIDM4MS44NjMgNDUuMjYyIDM4MS4xODYgNDQuNzI4IDM4MC41MzIgNDQuMzc1IEMgMzc5LjE1IDQzLjYzMSAzNzcuMzY4IDQzLjQ4MSAzNzUuMTk1IDQzLjkyNSBDIDM3NS4xMzUgNDMuOTAyIDM3NS4wNjcgNDMuODk0IDM3NS4wMDcgNDMuODg3IEMgMzc0LjQ4MSA0My44NDkgMzc0LjA3NSA0My45NzcgMzczLjgwNSA0NC4yNjMgQyAzNzMuMjU2IDQ0LjQyOCAzNzIuNjg0IDQ0LjYzMSAzNzIuMDc2IDQ0Ljg2NCBDIDM2OS43OTggNDUuNzg4IDM2OC4wNjkgNDYuNDY0IDM2Ni44ODkgNDYuODkyIEMgMzY0Ljg4MSA0Ny42NDQgMzYzLjExNSA0OC4xNDcgMzYxLjU4OSA0OC4zOTUgQyAzNjAuNDg0IDQ4LjU2OCAzNTkuOTczIDQ4Ljk0NCAzNjAuMDQ4IDQ5LjUyMiBDIDM2MC4xMDEgNTAuMDQ4IDM2MC41ODkgNTAuMzM0IDM2MS41MTQgNTAuMzg2IEMgMzYzLjM0MSA1MC40ODQgMzY0Ljg4MSA1MC4zNzEgMzY2LjEzNyA1MC4wNDggQyAzNjYuNDM3IDQ5Ljk3MyAzNjcuMTY3IDQ5LjcyNSAzNjguMzE3IDQ5LjI5NyBMIDM3Mi4wMzggNDcuNzk0IEMgMzcyLjIwMyA0OC40OTMgMzcyLjU0MSA0OS4xOTIgMzczLjA1MyA0OS44OTggQyAzNzMuMzU0IDUwLjM0OSAzNzMuODY0IDUwLjk3MiAzNzQuNTkzIDUxLjc3NiBMIDM4Ny43MTEgNjUuNTI2IEMgMzg3LjY2NiA2NS41MTEgMzg3LjYxNCA2NS40ODEgMzg3LjU2IDY1LjQ1MSBDIDM4NC44NzggNjMuNzIzIDM4My4yMDEgNjIuNjExIDM4Mi41MjQgNjIuMTA3IEMgMzgxLjM3NCA2MS4yMjggMzgwLjA5NyA2MC4xNjkgMzc4LjY5IDU4LjkxNCBDIDM3Ni43ODkgNTcuMjM5IDM3NC43OTcgNTUuMzY4IDM3Mi43MTUgNTMuMzE3IEMgMzcxLjUzNSA1Mi4xMzcgMzcwLjczOCA1MS4xOSAzNzAuMzA5IDUwLjQ2MSBDIDM3MC4xMDYgNTAuMDg2IDM2OS44OTYgNDkuODc1IDM2OS42NzEgNDkuODIzIEMgMzY5LjQ0NSA0OS43NyAzNjkuMjQxIDQ5Ljg2IDM2OS4wNjkgNTAuMDg2IEMgMzY4LjkxOSA1MC4zMTEgMzY4Ljg1OCA1MC41NTIgMzY4Ljg4MSA1MC43OTkgQyAzNjguOTAzIDUxLjMwMyAzNjkuMjQxIDUxLjkwNCAzNjkuODk2IDUyLjYwMyBMIDM3MS44NSA1NC44MTkgQyAzNzQuNDU5IDU3LjcyNyAzNzYuNDU4IDU5LjgxNiAzNzcuODY0IDYxLjA5MyBDIDM3OS44OTMgNjIuOTcxIDM4My42NzUgNjUuODA0IDM4OS4yMTUgNjkuNTgzIEMgMzk0LjE5OCA3Mi45ODcgMzk3Ljg1OSA3NS45MTcgNDAwLjE4OSA3OC4zNzQgQyA0MDAuNTM1IDc4LjcyIDQwMC44NTEgNzguOTY4IDQwMS4xMjkgNzkuMTI2IEMgNDAxLjA3NyA3OS4yOTEgNDAxLjAwOSA3OS40NzkgNDAwLjk0MSA3OS42ODkgQyA0MDAuNzkxIDc5Ljk2NyA0MDAuNDc1IDgwLjM1IDQwMC4wMDEgODAuODU0IEMgMzk5Ljc3NiA4MS4xNzcgMzk5LjU2NiA4MS43NCAzOTkuMzYzIDgyLjU0NCBMIDM5OC42ODYgODUuMDI0IEwgMzg3LjE0NyA4MS44NjggQyAzODIuNzM1IDgwLjY2NiAzNzkuNDA1IDc5LjkzIDM3Ny4xNSA3OS42NTIgQyAzNzMuOTcgNzkuNDc5IDM3MS41NzIgNzkuMzE0IDM2OS45NyA3OS4xNjMgQyAzNjguOTE5IDc5LjA2NiAzNjcuMzI1IDc4Ljg2MyAzNjUuMTk4IDc4LjU2MiBDIDM2My4wNzEgNzguMjM5IDM2MS40NjEgNzguMDIxIDM2MC4zODcgNzcuOTI0IEMgMzU5LjQ2MiA3Ny44MjYgMzU3LjYyIDc3LjcxMyAzNTQuODYxIDc3LjU4NSBDIDM1Mi41MzIgNzcuNDU4IDM1MC42ODkgNzcuMyAzNDkuMzM2IDc3LjA5NyBDIDM0OC40NTcgNzYuOTY5IDM0Ny4xNTcgNzYuNzIxIDM0NS40MjcgNzYuMzQ2IEMgMzQzLjY5OSA3NS45NyAzNDIuNDA2IDc1LjcyMiAzNDEuNTU2IDc1LjU5NCBDIDMzOC45NDcgNzUuMjY0IDMzNi43MTYgNzUuMzYxIDMzNC44NjYgNzUuODk1IEMgMzM1LjMzOSA3NC44MjggMzM1LjY3IDczLjk5NCAzMzUuODQ0IDczLjM3OCBDIDMzNi4xMjEgNzIuNDI0IDMzNi4yMzQgNzAuOTM2IDMzNi4xODEgNjguOTA3IEMgMzM2LjEyOSA2Ny41MDIgMzM2LjA1NCA2Ni40NjUgMzM1Ljk1NSA2NS43ODkgQyAzMzUuODg5IDY1LjQ1OCAzMzUuODM1IDY1LjE1OCAzMzUuODA2IDY0Ljg4NyBDIDMzNi43OTggNjYuMDM3IDMzNy44MTIgNjcuMjYyIDMzOC44NSA2OC41NjkgQyAzMzguODI3IDY4Ljg5MiAzMzkuMDc2IDY5LjE5MyAzMzkuNjAyIDY5LjQ3MSBDIDMzOS45MDMgNjkuNjIxIDM0MC42NjkgNjkuOTM3IDM0MS44OTQgNzAuNDEgQyAzNDYuNTU1IDcyLjA4NiAzNTAuNTM5IDczLjI2NSAzNTMuODQ2IDczLjk0MSBDIDM1OC4yODEgNzQuODk2IDM2Mi4zNzggNzUuMTk2IDM2Ni4xMzcgNzQuODQzIEMgMzY3LjA2MiA3NC43NDUgMzY3LjczOSA3NC42MTggMzY4LjE2NyA3NC40NjcgQyAzNjkuMDE2IDc0LjIxOSAzNjkuNzY4IDczLjc2OSAzNzAuNDIxIDczLjExNSBDIDM3MS4wNzYgNzIuNDYxIDM3MS41MzUgNzEuNzI1IDM3MS44MTIgNzAuODk4IEMgMzcyLjMxNiA2OS40NzEgMzcyLjIyNiA2OC4xMzMgMzcxLjU0OSA2Ni44NzkgQyAzNzEuMzQ3IDY2LjQ1IDM3MC45NDggNjUuODg3IDM3MC4zNDYgNjUuMTg4IEMgMzY5Ljg0MyA2NC42MDkgMzY5LjE5NiA2My45NzEgMzY4LjM5MiA2My4yNzIgQyAzNjcuODE0IDYyLjc3NiAzNjcuMzE4IDYyLjQ1MyAzNjYuODg5IDYyLjI5NSBDIDM2Ni43OTEgNjEuOTggMzY2LjY5MyA2MS42NDIgMzY2LjU4OCA2MS4yODEgQyAzNjYuMDA5IDU5LjM4IDM2NS40NjEgNTcuOTUyIDM2NC45MzUgNTYuOTk4IEMgMzY0LjUzNiA1Ni4yNjkgMzYzLjg4MiA1NS4yODUgMzYyLjk4IDU0LjAzIEMgMzYyLjQzMSA1My4yNzkgMzYxLjk4IDUyLjc1MyAzNjEuNjI2IDUyLjQ1MiBDIDM2MS41NzQgNTIuNDMgMzYwLjk2NSA1Mi4wMzkgMzU5Ljc4NSA1MS4yODggQyAzNTguOTM1IDUwLjc2MiAzNTguMTMxIDUwLjA4NiAzNTcuMzc5IDQ5LjI1OSBDIDM1OC4zMDQgNDguNTA4IDM1OS4wNzggNDcuNzExIDM1OS43MSA0Ni44NTUgQyAzNjAuMTM4IDQ2LjI3NiAzNjAuNzAyIDQ1LjM2NyAzNjEuNDAxIDQ0LjExMiBDIDM2Mi4zNTYgNDIuNTM0IDM2Mi41ODIgNDEuMzE3IDM2Mi4wNzggNDAuNDY4IEMgMzYxLjg3NSA0MC4wOTMgMzYxLjQ5MiAzOS43MzIgMzYwLjkxMyAzOS4zNzkgQyAzNjAuNDA5IDM5LjA3MSAzNjAuMDMzIDM4LjgzIDM1OS43ODUgMzguNjY1IEMgMzU5LjY3MiAzOC40MjUgMzU5LjUwNyAzOC4xNjkgMzU5LjI5NyAzNy45MTQgQyAzNTguODQ1IDM3LjMxMyAzNTguMTMxIDM2LjQ4NiAzNTcuMTU1IDM1LjQzNCBDIDM1Ni4xMjQgMzQuMzMgMzU1LjQwMiAzMy40OTYgMzU0Ljk3NCAzMi45MTcgQyAzNTQuNTQ2IDMyLjMxNiAzNTQuMjA4IDMxLjg2NSAzNTMuOTU5IDMxLjU2NSBDIDM1My41NjEgMzEuMDYxIDM1My4xNTUgMzAuNjc4IDM1Mi43NTcgMzAuNCBDIDM1Mi41OTggMzAuMzAyIDM1Mi40NDEgMzAuMjEyIDM1Mi4yNjggMzAuMTM3IEMgMzUyLjM4OCAyOS42MDQgMzUyLjIwMSAyOC45OTUgMzUxLjcwNCAyOC4yOTYgQyAzNTAuODAyIDI2Ljg2OSAzNDkuNjM3IDI1LjY1MSAzNDguMjA5IDI0LjY1MiBMIDM0OC4xNzIgMjQuNjE1IEMgMzQ4LjQyNiAyNC4xMjYgMzQ4LjY1MiAyMy41ODUgMzQ4Ljg0NyAyMi45OTkgQyAzNDkuMDUxIDIyLjMgMzQ5LjE0OCAyMS43MzcgMzQ5LjE0OCAyMS4zMDkgQyAzNDkuMTI2IDIwLjc2OCAzNDguOTQ1IDIwLjExNCAzNDguNjIzIDE5LjM1NSBDIDM0OC42MjMgMTkuMzQgMzQ4LjYyMyAxOS4zMzMgMzQ4LjYyMyAxOS4zMTggQyAzNDguMjI0IDE4LjIxMyAzNDcuODEgMTcuNDM5IDM0Ny4zODIgMTYuOTg4IEMgMzQ2Ljk4MyAxNi42MzUgMzQ2LjY4MyAxNi4zNjUgMzQ2LjQ4IDE2LjE2MiBDIDM0Ni4xMjcgMTUuODM5IDM0NS45MDEgMTUuNTIzIDM0NS44MDMgMTUuMjIzIEMgMzQ1LjY3NiAxNC44MjQgMzQ1LjU5MyAxNC41OTkgMzQ1LjU0IDE0LjU0NiBDIDM0NS40MTMgMTQuMzc0IDM0NS4yMjUgMTQuMjk4IDM0NC45NzYgMTQuMzIxIEMgMzQ0Ljc1MSAxNC4zMjEgMzQ0LjU0OCAxNC4zOTYgMzQ0LjM3NiAxNC41NDYgQyAzNDQuMTI3IDE0Ljc3MiAzNDMuOTg0IDE1LjA4NyAzNDMuOTYyIDE1LjQ4NiBDIDM0My45NjIgMTUuODM5IDM0NC4wNTIgMTYuMTg0IDM0NC4yMjUgMTYuNTM3IEMgMzQ0LjQ3MyAxNi45NjYgMzQ0LjkzOSAxNy41MjkgMzQ1LjYxNSAxOC4yMjggQyAzNDUuODk0IDE4LjU4OSAzNDYuMTIgMTguOTY0IDM0Ni4yOTIgMTkuMzU1IEMgMzQ2LjY4MyAyMC4yNzIgMzQ2Ljc4OCAyMS4yNzEgMzQ2LjU5MyAyMi4zNiBDIDM0Ni4zMTUgMjMuODg2IDM0NS40ODggMjUuMDUgMzQ0LjExMiAyNS44NTQgQyAzNDMuOTM5IDI1Ljk1OSAzNDMuNjkxIDI2LjA5NSAzNDMuMzYxIDI2LjI2OCBDIDM0My4yOTMgMjYuMjM3IDM0My4yMTcgMjYuMiAzNDMuMTM1IDI2LjE1NSBMIDMzOS4xMTMgMjMuOTc2IEMgMzM4LjM4NCAyMy41MjUgMzM3Ljg1OCAyMy40ODggMzM3LjUzNCAyMy44NjMgQyAzMzcuMzA5IDI0LjE0MSAzMzcuMzA5IDI0LjQ2NCAzMzcuNTM0IDI0Ljg0IEMgMzM3LjY2MiAyNS4wNDMgMzM3LjkxIDI1LjI3NiAzMzguMjg2IDI1LjU1NCBDIDMzOS42NjIgMjYuNTMxIDM0MS4xOTYgMjcuNTQ1IDM0Mi44NzIgMjguNTk3IEMgMzQyLjc0NCAyOS4xMjMgMzQyLjQwNiAyOS42MzQgMzQxLjg1NyAzMC4xMzcgQyAzNDEuNTU2IDMwLjQzOCAzNDEuMDY3IDMwLjgzNiAzNDAuMzkxIDMxLjMzOSBDIDMzOS44NTcgMzEuNzkgMzM5LjU1NiAzMi4yMjYgMzM5LjQ4OSAzMi42NTQgQyAzMzYuODY1IDM1LjA2NiAzMzQuOTQ5IDM4LjAzNCAzMzMuNzM4IDQxLjU1OCBDIDMzMy41MDUgNDEuNTUgMzMzLjI4IDQxLjU4OCAzMzMuMDYyIDQxLjY3IEMgMzMyLjQ4MyA0MS45MTggMzMyLjAwOSA0Mi4zODQgMzMxLjYzMyA0My4wNiBDIDMzMS4zODYgNDMuNTY0IDMzMS4xMyA0NC4yNCAzMzAuODgyIDQ1LjA4OSBDIDMzMC42MjYgNDYuMDU4IDMzMC40NzYgNDYuODMyIDMzMC40MzEgNDcuNDE4IEMgMzMwLjMyNiA0Ny4zODggMzMwLjIyIDQ3LjM1OCAzMzAuMTMgNDcuMzQzIEMgMzI5LjY1NiA0Ny4yMTUgMzI5LjI1MSA0Ny4yMDggMzI4LjkyNyA0Ny4zMDYgQyAzMjguNTUxIDQ3LjQzMyAzMjguMzExIDQ3LjQ5MyAzMjguMjEzIDQ3LjQ5MyBDIDMyOC4xOTEgNDcuNDkzIDMyNy45ODcgNDcuMzgxIDMyNy42MTIgNDcuMTU1IEMgMzI2LjkzNiA0Ni42MjkgMzI2LjE0NiA0Ni40MjcgMzI1LjI0NCA0Ni41NTQgQyAzMjQuNjY2IDQ2LjY1MiAzMjQuMzIgNDYuODc3IDMyNC4xOTEgNDcuMjMgQyAzMjQuMTkxIDQ3LjI1MyAzMjQuMTY5IDQ3LjI4MyAzMjQuMTU0IDQ3LjMwNiBDIDMyNC4wNDggNDcuMDk1IDMyMy45NTkgNDYuOTQ1IDMyMy44OTEgNDYuODU1IEMgMzIzLjY4OCA0Ni41NzcgMzIzLjQ2MyA0Ni40MTkgMzIzLjIxNCA0Ni4zNjYgQyAzMjIuOTE0IDQ2LjMxNCAzMjIuNjM1IDQ2LjQyNyAzMjIuMzg4IDQ2LjcwNSBDIDMyMi4xMzkgNDYuOTgzIDMyMi4wMTIgNDcuMjkxIDMyMi4wMTIgNDcuNjQ0IEMgMzIyLjAzNCA0OC4xMTcgMzIyLjMyNyA0OC43MTEgMzIyLjg3NyA0OS40MDkgQyAzMjMuMDI3IDQ5LjU5NyAzMjMuMTc3IDQ5Ljc4NSAzMjMuMzI3IDQ5Ljk3MyBDIDMyMy4wMjcgNTAuMTUzIDMyMi42OTYgNTAuNDA5IDMyMi4zNSA1MC43MjQgQyAzMjEuNjIgNTEuMzQ4IDMyMS4wODcgNTEuNzE2IDMyMC43MzQgNTEuODE0IEMgMzIwLjE1NSA1MS45NjQgMzE5LjQ0MSA1MS45MDQgMzE4LjU5MiA1MS42MjYgQyAzMTYuOTE1IDUxLjEgMzE1LjQ4NyA1MC4xMjMgMzE0LjMwNyA0OC42OTYgQyAzMTMuODMzIDQ4LjA3MiAzMTMuNjA3IDQ3LjUxNiAzMTMuNjMgNDcuMDQzIEMgMzEzLjY1MiA0Ni41OTIgMzEzLjk0NiA0Ni4wODggMzE0LjQ5NSA0NS41NCBDIDMxNC42NiA0NS4zOSAzMTQuODE4IDQ1LjI1NCAzMTQuOTgzIDQ1LjEyNyBDIDMxNS4xMTEgNDUuMTk0IDMxNS4yNDYgNDUuMjE3IDMxNS4zOTYgNDUuMjAyIEMgMzE1LjY3NSA0NS4xNzkgMzE2LjAyMSA0NC45NzYgMzE2LjQ0OSA0NC42MDEgQyAzMTYuNDk0IDQ0LjU2MyAzMTYuNTQ3IDQ0LjUyNiAzMTYuNTk5IDQ0LjQ4OCBDIDMxNi43ODcgNDQuNDU4IDMxNy4wNTEgNDQuNDIgMzE3LjM4OSA0NC4zNzUgQyAzMTcuNzEyIDQ0LjMgMzE3Ljk1MyA0NC4xNjUgMzE4LjEwMyA0My45NjIgQyAzMTguMjk4IDQzLjY5MiAzMTguMjk4IDQzLjQwNiAzMTguMTAzIDQzLjA5OCBDIDMxOC40NzkgNDIuNzQ1IDMxOC44MTcgNDIuMzkyIDMxOS4xMTcgNDIuMDQ2IEMgMzE5Ljc0MiA0MS4yNDIgMzIwLjIyMyA0MC42NDEgMzIwLjU0NiA0MC4yNDMgQyAzMjEuMTI0IDM5LjU0NCAzMjEuNjc0IDM5LjAxOCAzMjIuMiAzOC42NjUgQyAzMjIuMzQyIDM4LjU3NSAzMjIuNDYzIDM4LjQ5MiAzMjIuNTc2IDM4LjQwMiBDIDMyMi40NjMgMzguNTM3IDMyMi40MSAzOC43MDMgMzIyLjQyNSAzOC44OSBDIDMyMi40MjUgMzkuMTM4IDMyMi42NTEgMzkuMzc5IDMyMy4xMDEgMzkuNjA0IEMgMzI0LjM3OSA0MC4zMDMgMzI1LjQwOSA0MC43OTEgMzI2LjE4NCA0MS4wNjkgQyAzMjcuMzg2IDQxLjQ2OCAzMjguNDkyIDQxLjU1OCAzMjkuNDkxIDQxLjMzMiBDIDMzMC43NDYgNDEuMDMyIDMzMi4wNDcgNDAuMTUzIDMzMy40IDM4LjcwMyBDIDMzNC4zMjQgMzcuNzAzIDMzNS4xMjkgMzYuNjk2IDMzNS44MDYgMzUuNjk3IEMgMzM3LjAwOCAzMy45MTYgMzM3LjQ3NSAzMi4zOTEgMzM3LjE5NiAzMS4xMTQgQyAzMzcuMDY5IDMwLjQzOCAzMzYuNzYxIDI5Ljk2NCAzMzYuMjU2IDI5LjY4NiBDIDMzNi4wMDkgMjkuNTU5IDMzNS43MzEgMjkuNTIxIDMzNS40MyAyOS41NzQgQyAzMzUuMTA2IDI5LjY0OSAzMzQuODgxIDI5LjgxNCAzMzQuNzUzIDMwLjA2MiBDIDMzNC42NTUgMzAuMjY1IDMzNC42MjUgMzAuNjYzIDMzNC42NzggMzEuMjY0IEMgMzM0LjczIDMyLjE0MyAzMzQuNDc1IDMzLjA2NyAzMzMuOTI2IDM0LjA0NCBDIDMzMy42MDMgMzQuNjQ1IDMzMy4wMDkgMzUuNDU3IDMzMi4xNTkgMzYuNDg2IEMgMzMxLjM4NiAzNy4zODggMzMwLjcwOSAzOC4wNDEgMzMwLjEzIDM4LjQ0IEMgMzI5LjI4IDM5LjA0MSAzMjguNDM5IDM5LjMwNCAzMjcuNjEyIDM5LjIyOSBDIDMyNy4yNTkgMzkuMjA2IDMyNi40OTkgMzguOTQzIDMyNS4zMTkgMzguNDQgQyAzMjQuMzk1IDM4LjA0MSAzMjMuNjQzIDM3LjkzNiAzMjMuMDY1IDM4LjEzOSBDIDMyMy4wMTEgMzguMTU0IDMyMi45NTkgMzguMTY5IDMyMi45MTQgMzguMTc3IEMgMzIzLjI4OSAzNy45MTQgMzIzLjUzIDM3LjcwMyAzMjMuNjI4IDM3LjUzOCBDIDMyMy44MDEgMzcuMjYgMzIzLjg1MyAzNi45NTkgMzIzLjc3OCAzNi42MzYgQyAzMjMuNzI2IDM2LjI4MyAzMjMuNTUyIDM2LjA3MyAzMjMuMjUyIDM1Ljk5OCBDIDMyMi45NTIgMzUuOTQ1IDMyMi41OTggMzYuMDczIDMyMi4yIDM2LjM3MyBDIDMyMC45MjIgMzcuMjc1IDMxOS4zOTYgMzguNzc4IDMxNy42MTQgNDAuODgxIEwgMzE2LjM3NCA0Mi4zMDkgQyAzMTUuNzggNDIuMjc5IDMxNS4xNzkgNDIuMzU0IDMxNC41NyA0Mi41MzQgQyAzMTMuODQgNDIuNzYgMzEzLjIxNyA0My4xMzYgMzEyLjY5MSA0My42NjIgQyAzMTIuMTQxIDQ0LjE2NSAzMTEuNzM2IDQ0Ljc4OSAzMTEuNDg4IDQ1LjU0IEMgMzExLjI0IDQ2LjIzOSAzMTEuMTY1IDQ2Ljk2NyAzMTEuMjYyIDQ3LjcxOSBDIDMxMS41MSA0OS44IDMxMy4wMTMgNTEuNTg4IDMxNS43NzIgNTMuMDkxIEMgMzE3LjE0OCA1My44NDIgMzE4LjQwNCA1NC4yNzEgMzE5LjUzMSA1NC4zNjggQyAzMjAuNTgzIDU0LjQ2NiAzMjEuNjEzIDU0LjI5MyAzMjIuNjEzIDUzLjg0MiBDIDMyMy42MiA1My4zOTkgMzI0LjQzMyA1Mi43NiAzMjUuMDU2IDUxLjkyNiBDIDMyNS43NjMgNTIuNzE1IDMyNi41NTIgNTMuNTY0IDMyNy40MjQgNTQuNDgxIEMgMzI3LjYzNCA1NS4xMjcgMzI4LjAxIDU1Ljg3OSAzMjguNTUxIDU2LjczNSBDIDMyOS4xMyA1Ny41NjIgMzMwLjEwNyA1OC43MTEgMzMxLjQ4NCA2MC4xOTEgTCAzMzMuNjYzIDYyLjU5NiBDIDMzMy42NjMgNjIuNTk2IDMzMy42MjYgNjIuNjQxIDMzMy41ODggNjIuNjcxIEMgMzMzLjM2MiA2Mi44OTYgMzMzLjIxMiA2My4xNDQgMzMzLjEzNyA2My40MjIgQyAzMzMuMDQgNjMuNzc1IDMzMy4xMjIgNjQuMzc3IDMzMy40IDY1LjIyNiBDIDMzMy45MzQgNjYuODI2IDMzNC4xMDcgNjguNDQxIDMzMy45MjYgNzAuMDcyIEMgMzMzLjU3MyA3MC4yNjcgMzMzLjE2IDcwLjY5NSAzMzIuNjg2IDcxLjM0OSBDIDMzMi42MDMgNzEuNDA5IDMzMi41MTMgNzEuNDY5IDMzMi40MjMgNzEuNTM3IEMgMzI4LjY2NCA3NC4xODkgMzI1LjYyIDc3LjUxIDMyMy4yODkgODEuNDkzIEMgMzIyLjk2NiA4Mi4wNzEgMzIyLjQ3OCA4Mi45NDMgMzIxLjgyNCA4NC4xMjIgQyAzMjEuMjQ1IDg1LjE1MiAzMjAuNjk2IDg1Ljk4NiAzMjAuMTcgODYuNjM5IEMgMzE5Ljc0MiA4Ny4xODggMzE4Ljk5IDg3Ljk5MiAzMTcuOTE1IDg5LjA0NCBDIDMxNi44ODUgOTAuMDQzIDMxNi4xNDggOTAuODQ3IDMxNS42OTcgOTEuNDQ4IEMgMzE0Ljk0NSA5Mi40NDcgMzE0LjMwNyA5My42ODcgMzEzLjc4MSA5NS4xNjggQyAzMTMuNDI3IDk2LjEyMSAzMTMuMDQ0IDk3LjQ1OSAzMTIuNjE1IDk5LjE4NyBDIDMxMi4wNjYgMTAxLjE5MyAzMTEuODExIDEwMi43NDEgMzExLjg2NCAxMDMuODQ1IEMgMzExLjkxNyAxMDUuMTc1IDMxMi4zNjcgMTA2LjgyOCAzMTMuMjE3IDEwOC44MDQgQyAzMTQuMTQxIDExMS4wMzYgMzE1LjE5NCAxMTMuMjYgMzE2LjM3NCAxMTUuNDkxIEMgMzE3LjIwMSAxMTcuMDY5IDMxNy42NzQgMTE3Ljk3MSAzMTcuODAyIDExOC4xOTYgQyAzMTguMTcgMTE4Ljk0OCAzMTguNDcxIDExOS42NDcgMzE4LjcwNSAxMjAuMyBMIDI5OS42NDggMTMwLjc4MiBDIDI5Ni4wMTcgMTMyLjc4OCAyOTMuMjA2IDEzNC40MjUgMjkxLjIyOSAxMzUuNzAzIEMgMjg5LjUgMTM2Ljg1MyAyODguMjQ1IDEzNy42MzQgMjg3LjQ3MSAxMzguMDMzIEwgMjg1LjcwNCAxMzguODk2IEMgMjg0Ljk3NSAxMzkuMjE5IDI4NC40MDQgMTM5LjUzNSAyODMuOTc1IDEzOS44MzUgQyAyODMuNjUyIDE0MC4wMzkgMjgzLjM0NCAxNDAuMjYzIDI4My4wMzYgMTQwLjUxMiBDIDI4Mi45MyAxNDAuNTEyIDI4Mi44MTcgMTQwLjUxMiAyODIuNjk3IDE0MC41MTIgQyAyODAuOTY4IDE0MC40MTQgMjc4Ljk1NCAxNDAuMTc0IDI3Ni42NDYgMTM5Ljc5OCBDIDI3Ni41NyAxMzkuNzk4IDI3NC41NjQgMTM5LjQ0NSAyNzAuNjMzIDEzOC43NDYgQyAyNTUuMjQ1IDEzNS45NDQgMjM5LjgxMiAxMzQuNjUxIDIyNC4zMjcgMTM0Ljg3NyBDIDIyMy4xMjQgMTM0LjkyOSAyMjIuNTYgMTM1LjI3NSAyMjIuNjM2IDEzNS45MjggQyAyMjIuNjg4IDEzNi40MDEgMjIzLjE3NyAxMzYuNzAyIDIyNC4xMDIgMTM2LjgzMSBDIDIyNi41MyAxMzcuMDU1IDIzMS44NTkgMTM3LjQzMSAyNDAuMDc1IDEzNy45NTcgQyAyNDYuNjY4IDEzOC4zODYgMjUxLjk3NSAxMzguODQ0IDI1Ni4wMTEgMTM5LjM0NyBDIDI1OC41OSAxMzkuNyAyNjEuNjY0IDE0MC4xNzQgMjY1LjIyIDE0MC43NzUgQyAyNjcuMjUgMTQxLjEyOCAyNzAuMjk0IDE0MS42NjIgMjc0LjM1MyAxNDIuMzkgQyAyNzYuMzYgMTQyLjcxMyAyNzcuODY0IDE0Mi45MzEgMjc4Ljg2NCAxNDMuMDI5IEMgMjc5Ljg2MyAxNDMuMTM0IDI4MC44MDMgMTQzLjE5NCAyODEuNjgyIDE0My4yMTcgQyAyODEuOTk5IDE0My40MiAyODIuNDA0IDE0My40MiAyODIuODg1IDE0My4yMTcgQyAyODMuMzA2IDE0My42MDcgMjg0LjA0MiAxNDMuNzI4IDI4NS4xMDIgMTQzLjU5MyBDIDI4Ni4yODMgMTQzLjQyIDI4Ny4xNyAxNDMuMzQ0IDI4Ny43NzIgMTQzLjM2NyBDIDI4OC43NDkgMTQzLjQ0MiAyODkuNDc4IDE0My43NjUgMjg5Ljk1MSAxNDQuMzQ0IEwgMjgyLjY5NyAxNDguOTI3IEMgMjc3Ljg2NCAxNTEuOTU1IDI3NC4xNjUgMTU0LjMzNyAyNzEuNjEgMTU2LjA2NSBDIDI2Ny42MDMgMTU4Ljc3IDI2NC4wOTIgMTYxLjM3NyAyNjEuMDg2IDE2My44NzkgTCAyNTIuNjI5IDE3MS4yNDIgQyAyNTIuNTg0IDE3MS4yODcgMjUyLjUzMSAxNzEuMzE4IDI1Mi40NzggMTcxLjM1NSBDIDI1Mi40MTkgMTcxLjExNSAyNTIuMjk4IDE3MC44ODIgMjUyLjEwMyAxNzAuNjQxIEMgMjUxLjkgMTcwLjQzOCAyNTEuNDQ5IDE3MC4wOTMgMjUwLjc0OSAxNjkuNTg5IEMgMjQ5LjI0NiAxNjguNTYgMjQ3LjYwOCAxNjcuMDEzIDI0NS44MjYgMTY0LjkzMSBDIDI0Mi45MTcgMTYxLjYwMyAyNDEuNDEzIDE1OS44NzQgMjQxLjMxNiAxNTkuNzQ3IEMgMjQwLjUxMiAxNTguOTIgMjM5LjQ5NyAxNTcuOTU4IDIzOC4yNzEgMTU2Ljg1NCBDIDIzNC4wMzkgMTUyLjk0NyAyMzAuNTA2IDE0OS44NTEgMjI3LjY3MiAxNDcuNTc1IEMgMjI1LjM2NCAxNDUuNzE5IDIyMy44OTggMTQ0LjQ3OSAyMjMuMjc1IDE0My44NTUgQyAyMjEuNjk2IDE0Mi4zNzUgMjIwLjUxNiAxNDAuOTEgMjE5Ljc0MiAxMzkuNDYgQyAyMTkuNzQyIDEzOS4xMDYgMjE5LjgzOSAxMzguNjg2IDIyMC4wNDMgMTM4LjE4MyBDIDIyMC4zMiAxMzcuNDgzIDIyMC40NzggMTM3LjA1NSAyMjAuNTMxIDEzNi45MDUgQyAyMjAuNjgyIDEzNi40MzIgMjIwLjY2NiAxMzUuOTgxIDIyMC40OTQgMTM1LjU1MiBDIDIyMC4yOSAxMzUuMDc5IDIxOS45ODIgMTM0LjgyNCAyMTkuNTU0IDEzNC44MDEgQyAyMTguOTUyIDEzNC43NzggMjE4LjQ0MSAxMzUuMjM3IDIxOC4wMTMgMTM2LjE5MSBDIDIxNy40NjQgMTM3LjM0MSAyMTcuMTQ4IDEzOC4yMiAyMTcuMDczIDEzOC44MjEgQyAyMTYuOTIyIDE0MC40NzQgMjE3LjcxMiAxNDIuMjQgMjE5LjQ0MSAxNDQuMTE4IEMgMjIwLjE5MyAxNDQuOTY3IDIyMS43NzEgMTQ2LjQ0NyAyMjQuMTc3IDE0OC41NTEgTCAyMzQuNCAxNTcuMjY3IEMgMjM2LjE1MiAxNTguNzcgMjM3LjQ0NSAxNTkuOTM0IDIzOC4yNzEgMTYwLjc2MSBDIDIzOC44NSAxNjEuMzQgMjQwLjU2NCAxNjMuMzUzIDI0My40MiAxNjYuODA5IEMgMjQ1LjA4OSAxNjguODIzIDI0Ni42MyAxNzAuNDAxIDI0OC4wNDMgMTcxLjU0MyBDIDI0Ny45NzYgMTcxLjY3MSAyNDcuOSAxNzEuNzk4IDI0Ny44MTggMTcxLjkxOCBDIDI0Ny4zOSAxNzIuNTk1IDI0Ni43NjUgMTczLjY0NyAyNDUuOTM5IDE3NS4wNzQgQyAyNDUuNTEgMTc1LjY5OCAyNDQuODQ5IDE3Ni40NzkgMjQzLjk0NyAxNzcuNDAzIEMgMjQyLjg5NCAxNzguNDU2IDI0Mi4xOTUgMTc5LjIwNyAyNDEuODQyIDE3OS42NTggQyAyNDAuNjE2IDE4MS4yMTMgMjM5Ljc1MiAxODMuMDc2IDIzOS4yNDggMTg1LjI1NiBDIDIzOC43OTcgMTg3LjIwOSAyMzguNjcgMTg5LjI5NyAyMzguODcyIDE5MS41MjkgQyAyMzguOTAzIDE5MS44MzcgMjM4Ljk0IDE5Mi4xNTMgMjM4Ljk4NSAxOTIuNDY4IEMgMjMzLjYzMyAxOTYuNjE2IDIyOC40MzkgMjAxLjE4NCAyMjMuMzg3IDIwNi4xODEgQyAyMjIuMTYyIDIwNy40MDYgMjIxLjMyIDIwOC40MzQgMjIwLjg3IDIwOS4yNjEgQyAyMjAuMTkzIDIxMC41NjEgMjE5Ljg5MiAyMTIuMTMxIDIxOS45NjcgMjEzLjk1NyBDIDIxOS45ODkgMjE1LjAzMiAyMjAuMTkzIDIxNi40NTkgMjIwLjU2OSAyMTguMjQgQyAyMTkuODc3IDIxNy45MTcgMjE5LjIzOCAyMTcuOTU1IDIxOC42NTIgMjE4LjM1MyBDIDIxOC4wMjggMjE4Ljc1MSAyMTcuNTg0IDIxOS42NTMgMjE3LjMzNiAyMjEuMDU4IEMgMjE2Ljc1NyAyMjQuNzkyIDIxNy4wOTYgMjI4Ljk0NyAyMTguMzUxIDIzMy41MyBDIDIxOS4xMjYgMjM2LjM2MyAyMjAuNjIxIDI0MC4zNTIgMjIyLjgyNCAyNDUuNTE1IEwgMjI3LjEwOCAyNTUuNDY5IEMgMjI4LjEzOCAyNTcuNzc2IDIyOC44OSAyNTkuMzkyIDIyOS4zNjQgMjYwLjMxNiBDIDIzMC4yNDMgMjYyLjA0NCAyMzEuNDY4IDI2NC4xMjUgMjMzLjA0NyAyNjYuNTUyIEMgMjM1LjM1NSAyNzAuMjEyIDIzNy4xMDYgMjcyLjkzOSAyMzguMzA4IDI3NC43NDIgQyAyNDAuMzE2IDI3Ny43MjUgMjQyLjIzMyAyODAuMzQgMjQ0LjA1OSAyODIuNTk0IEMgMjQ1LjczNSAyODQuNjk4IDI0Ny4zNDUgMjg1LjkzOCAyNDguODcgMjg2LjMxMyBDIDI0OS43OTUgMjg2LjUxNiAyNTAuOTkgMjg2LjQ3OSAyNTIuNDQxIDI4Ni4yMDEgQyAyNTQuMzA1IDI4NS44NTUgMjU2LjA5NCAyODUuMzgxIDI1Ny44MTYgMjg0Ljc3MyBDIDI2MC4xNjEgMjg2LjU5OSAyNjIuMjgxIDI4Ny4yMyAyNjQuMTY3IDI4Ni42NTEgQyAyNjQuNTIxIDI4Ni41NzYgMjY0LjcxNyAyODYuMzI4IDI2NC43NjkgMjg1LjkgQyAyNjQuODA2IDI4NS41OTIgMjY0Ljc1NCAyODUuMzE0IDI2NC42MTggMjg1LjA3MyBDIDI2NC42NjMgMjg1LjA3MyAyNjQuNzAxIDI4NS4wNzMgMjY0LjczMSAyODUuMDczIEMgMjY4LjU0MyAyODUuMzUyIDI3Mi4wMjMgMjg1LjE2NCAyNzUuMTggMjg0LjUxIEMgMjc2Ljg1NyAyODQuMTM0IDI3OS4yMjQgMjgzLjQzNSAyODIuMjg0IDI4Mi40MDYgTCAyODQuMDg4IDI4MS43NjggQyAyODQuMzUxIDI4Mi4wNiAyODQuNjE1IDI4Mi4zNTMgMjg0Ljg3NyAyODIuNjMxIEMgMjg2LjIwOCAyODQuMDgyIDI4Ny4zOTYgMjg1LjE3MSAyODguNDQ4IDI4NS45IEMgMjg5Ljg5OSAyODYuOTI5IDI5MS4zNDIgMjg3LjQ5MyAyOTIuNzcxIDI4Ny41OTEgQyAyOTMuNDI0IDI4Ny4xNjIgMjkzLjU4MiAyODYuNDc5IDI5My4yNTkgMjg1LjUyNCBDIDI5My4xNjEgMjg1LjIzOSAyOTMuMDM0IDI4NC45NjkgMjkyLjg4MyAyODQuNjk4IEMgMjkzLjI4OSAyODQuNzI3IDI5My42NzIgMjg0Ljc3MyAyOTQuMDQ4IDI4NC44NDggQyAyOTUuMjU4IDI4NS44MTggMjk2LjM0OCAyODYuMTkzIDI5Ny4zMTggMjg1Ljk3NSBDIDI5Ny4zNDggMjg1Ljk5IDI5Ny4zNzggMjg2LjAwNSAyOTcuMzk0IDI4Ni4wMTMgQyAyOTcuOTk0IDI4Ni4zNjYgMjk4LjQ2MSAyODYuNTkxIDI5OC43ODQgMjg2LjY4OSBDIDI5OS4xODMgMjg2Ljc4NyAyOTkuNzAxIDI4Ni44MTYgMzAwLjMyNSAyODYuNzY0IEwgMzE0LjQ5NSAyODYuMTYzIEMgMzE2Ljk5OCAyODYuMTEgMzE4Ljg3IDI4NS45OTcgMzIwLjA5NSAyODUuODI1IEMgMzIwLjk3NCAyODUuNjk3IDMyMi4zNjUgMjg1LjM5NyAzMjQuMjY3IDI4NC45MjMgQyAzMjYuMDcxIDI4NC40OTQgMzI3LjQ3NyAyODQuMjI0IDMyOC40NzYgMjg0LjA5NyBDIDMyOS42MDQgMjgzLjk2OSAzMzEuMzMzIDI4My44NzEgMzMzLjY2MyAyODMuNzk2IEMgMzM0LjY2MyAyODMuNzIxIDMzNS41NjUgMjgzLjU4NiAzMzYuMzY5IDI4My4zODMgQyAzMzQuMDU0IDI5Mi4yMTEgMzMyLjEzNyAzMDEuMSAzMzAuNjE5IDMxMC4wNTYgQyAzMjkuMDI1IDMxMC45MiAzMjcuMjQ0IDMxMS44ODkgMzI1LjI4MiAzMTIuOTQ5IEMgMjk1LjYxMiAzMjguODc4IDI2NS44NDQgMzQzLjUyOSAyMzUuOTc5IDM1Ni45MDMgQyAyMzcuNjg1IDM1Ni43MzEgMjM5LjUzNCAzNTYuMjg3IDI0MS41NDIgMzU1LjU4OSBDIDI0Mi44OTQgMzU1LjEzNyAyNDQuNjc2IDM1NC40MjQgMjQ2Ljg3OCAzNTMuNDQ4IEMgMjYyLjYxMSAzNDYuNjEgMjgwLjA4MSAzMzguMzA3IDI5OS4yNzIgMzI4LjUzOSBDIDMwNi45MDIgMzI0LjY0NyAzMTcuMjIzIDMxOS4yNjggMzMwLjI0MyAzMTIuMzg1IEMgMzMwLjE3NSAzMTIuODk2IDMzMC4xIDMxMy40MTUgMzMwLjAxOCAzMTMuOTI2IEMgMzI4LjgxNSAzMjEuNTg5IDMyOC4xNTMgMzI1LjgxMiAzMjguMDI1IDMyNi41ODYgQyAzMjcuMTI0IDMzMS4zNDIgMzI2LjAzNCAzMzUuNDM3IDMyNC43NTUgMzM4Ljg3IEMgMzI0LjU1MyAzMzkuNDIgMzIzLjg2OSAzNDEuMTg1IDMyMi42ODkgMzQ0LjE2NyBDIDMyMS44MDggMzQ2LjI5NCAzMjEuMTg1IDM0OC4wNzUgMzIwLjgwOSAzNDkuNTAyIEMgMzIwLjQxMSAzNTEuMTAzIDMyMC41MjQgMzUyLjIyMyAzMjEuMTQ3IDM1Mi44NDYgQyAzMjEuNjc0IDM1My40MjUgMzIyLjYxMyAzNTMuNjU3IDMyMy45NjYgMzUzLjU1OSBDIDMyOC4xMjMgMzUzLjI4MiAzMzIuMzEgMzUxLjczNCAzMzYuNTE5IDM0OC45MDEgQyAzMzkuNzMgMzQ2Ljc0NSAzNDMuMTczIDM0My42NTcgMzQ2Ljg1NiAzMzkuNjIyIEMgMzUzLjY5NiAzMzIuMTMxIDM2MC44NiAzMjIuNjc5IDM2OC4zNTUgMzExLjI1OCBDIDM3Ni43OTcgMjk3Ljc4NiAzODMuMTQxIDI4Ny42ODggMzg3LjM3MyAyODAuOTc4IEMgMzkwLjM1NyAyNzYuMzIgMzkyLjU4MiAyNzIuODExIDM5NC4wNjMgMjcwLjQ1OSBDIDM5Ni41OTcgMjY2LjQwMiAzOTguNzM5IDI2Mi44NDggNDAwLjQ5IDI1OS43OSBDIDQwMy41MTkgMjU0LjQ3OCA0MDYuNjc2IDI0OC4zNTQgNDA5Ljk2MiAyNDEuNDIgQyA0MTEuOTM5IDIzNy4yNjQgNDE0Ljc4NyAyMzAuOTkxIDQxOC40OTQgMjIyLjU5OCBDIDQxOC44NDcgMjIxLjc0OSA0MTkuMDggMjIxLjExIDQxOS4yMDggMjIwLjY4MiBDIDQxOS40MSAyMTkuOTUzIDQxOS40NzEgMjE5LjI5MiA0MTkuMzk2IDIxOC42OTEgQyA0MTkuMjQ1IDIxNy42MzggNDE4LjY2NyAyMTYuNzYgNDE3LjY2NyAyMTYuMDYxIEMgNDE2Ljc2NCAyMTUuMzg1IDQxNS43MjcgMjE1LjAyNCA0MTQuNTQ3IDIxNC45NzEgQyA0MTMuNTcgMjE0LjkxOSA0MTIuNDk1IDIxNS4wNjkgNDExLjMxNSAyMTUuNDIyIEMgNDEwLjU2MyAyMTUuNjI1IDQwOS41MTEgMjE2LjAwOCA0MDguMTU4IDIxNi41ODcgQyAzOTEuMzcyIDIyMy43MjUgMzczLjk1NSAyMzAuMjg1IDM1NS45MTQgMjM2LjI3MyBDIDM1NC41MzkgMjM2LjcyMyAzNTMuNDE4IDIzNy4zNDcgMzUyLjU2OSAyMzguMTUxIEMgMzUxLjU2OSAyMzkuMTUgMzUxLjI5MSAyNDAuMTU3IDM1MS43NDIgMjQxLjE1NiBMIDQxMy4yMzEgMjE4LjYxNiBDIDQxNC40MzQgMjE4LjE4OCA0MTUuMjc2IDIxOC4yMTcgNDE1Ljc1IDIxOC42OTEgQyA0MTYuMjc2IDIxOS4yMTYgNDE2LjI2MSAyMjAuMDk2IDQxNS43MTMgMjIxLjMyMSBDIDQwOC4zNjggMjM4LjE3NCAzOTkuNDAxIDI1NS41MyAzODguODAxIDI3My4zOSBDIDM3OS43MjggMjg4LjY2NSAzNjkuMDA5IDMwNS4wMjIgMzU2LjYyOCAzMjIuNDU0IEMgMzUxLjE5MyAzMzAuMTE3IDM0Ni40MjggMzM1LjkxOCAzNDIuMzQ1IDMzOS44NDggQyAzMzguNTk0IDM0My40NTQgMzM0Ljc0NiAzNDYuMjU3IDMzMC44MDcgMzQ4LjI2MiBDIDMzMi4yNzIgMzQ3LjI0MSAzMzMuNzI0IDM0Ni4wNzYgMzM1LjE2NyAzNDQuNzY5IEMgMzM4LjMwMSAzNDEuOTM3IDM0MS45NDcgMzM3LjgxOSAzNDYuMTA0IDMzMi40MDkgQyAzNzIuNTY0IDI5OC4yMjMgMzk0LjIzNiAyNjEuMTY1IDQxMS4xMjcgMjIxLjI0NiBDIDQwOS43MjEgMjIxLjE3IDQwOC40NDMgMjIyLjMzNSA0MDcuMjkzIDIyNC43MzkgQyA0MDEuMjc5IDIzNy41MzUgMzk2LjM1NiAyNDcuNjcxIDM5Mi41MjIgMjU1LjEzMiBDIDM4Ni44NjIgMjY2LjE3NiAzODEuMzIyIDI3NS45NjcgMzc1LjkwOSAyODQuNTEgQyAzNzMuNjc3IDI4OC4wNjQgMzcwLjIxMSAyOTMuMzIzIDM2NS40OTkgMzAwLjI4OCBMIDM1My41NDYgMzE3Ljk0NSBDIDM0OC4xNTYgMzI1Ljg4NyAzNDMuODI2IDMzMS43MTggMzQwLjU0MSAzMzUuNDUyIEMgMzM1LjQ0NSAzNDEuMjYgMzMwLjE4MyAzNDUuNjMzIDMyNC43NTUgMzQ4LjU2MyBDIDMyNi43NyAzNDMuNTIyIDMyOC41MTQgMzM3LjgxMSAzMjkuOTggMzMxLjQzMiBDIDMzMS4wMSAzMjYuOTI0IDMzMi4yNTggMzIwLjE0NyAzMzMuNzM4IDMxMS4xMDggQyAzMzMuNzc2IDMxMC45MDUgMzMzLjc5OSAzMTAuNjg3IDMzMy44MTQgMzEwLjQ3IEMgMzM5LjAzOCAzMDcuNzM1IDM0NC42NDYgMzA0Ljc2NyAzNTAuNjUyIDMwMS41NjYgQyAzNDkuOTk4IDMwMC45ODcgMzQ4Ljk3NiAzMDEuMDI1IDM0Ny41NyAzMDEuNjc4IEMgMzQ0Ljg2MyAzMDIuODggMzQyLjE5NSAzMDQuMTIgMzM5LjU2NCAzMDUuMzk3IEMgMzM4LjMwMSAzMDYuMDIxIDMzNi41MjggMzA2LjkzOCAzMzQuMjI3IDMwOC4xNCBDIDMzNS41MTMgMzAwLjQ5MSAzMzYuNjAzIDI5NC43MDYgMzM3LjQ5NyAyOTAuNzg0IEMgMzM5LjE3MyAyODMuMzIzIDM0MS4yMzMgMjc2Ljc5MyAzNDMuNjYxIDI3MS4yMTEgQyAzNDMuOTQ2IDI3MC41NSAzNDQuMTIgMjY5Ljk3OSAzNDQuMTg4IDI2OS40ODMgQyAzNDQuNTEgMjY5LjQ1MiAzNDQuODE4IDI2OS40MTUgMzQ1LjA4OSAyNjkuMzcgQyAzNDYuMTk0IDI2OS4xOTggMzQ3LjM5NyAyNjguODU5IDM0OC42OTggMjY4LjM1NiBDIDM0OS41MjQgMjY4LjAwMyAzNTAuNjUyIDI2Ny40NjkgMzUyLjA4IDI2Ni43NCBDIDM1Ny4wOTQgMjY0LjIwOCAzNjIuMjA2IDI2MS40NDMgMzY3LjQxNSAyNTguNDM4IEMgMzcwLjk0OCAyNTYuNDMxIDM3My41MjYgMjU0LjY1OCAzNzUuMTU3IDI1My4xMDMgQyAzNzUuNjA4IDI1Mi42NzUgMzc2LjMzNyAyNTEuOTI0IDM3Ny4zMzggMjUwLjg0OSBDIDM3OC4yNCAyNDkuODczIDM3OC45NjkgMjQ5LjEzNSAzNzkuNTE3IDI0OC42MzIgQyAzODAuMzY3IDI0Ny45MDQgMzgwLjg5NCAyNDcuMzE3IDM4MS4wOTYgMjQ2Ljg2NyBDIDM4MS4yOTkgMjQ2LjUxNCAzODEuMzgxIDI0Ni4xMzggMzgxLjM1OSAyNDUuNzQgQyAzODEuMzM2IDI0NS4yODkgMzgxLjE4NiAyNDQuOTM2IDM4MC45MDggMjQ0LjY4NyBDIDM4MC40MDUgMjQ0LjIzNyAzNzkuNTMzIDI0NC4yMjIgMzc4LjI3OCAyNDQuNjUgTCAzNTQuNjczIDI1Mi45NTMgQyAzNTAuMzM2IDI1NC40ODYgMzQ2LjUxIDI1NS44NjggMzQzLjIxIDI1Ny4wODUgQyAzNDMuMzgzIDI1Ni44OTcgMzQzLjU0OCAyNTYuNjUgMzQzLjY5OSAyNTYuMzM0IEMgMzQ0LjAyMiAyNTUuNjU3IDM0NC4zNTMgMjU0LjUzMSAzNDQuNjc1IDI1Mi45NTMgQyAzNDQuOTk5IDI1MS40MjggMzQ1LjM1MiAyNTAuMzA4IDM0NS43MjggMjQ5LjYwOSBDIDM0Ni4yNTQgMjQ4LjY4NSAzNDYuNTU1IDI0OC4wODQgMzQ2LjYzIDI0Ny44MDYgQyAzNDYuNzI4IDI0Ny40ODMgMzQ2Ljc0MyAyNDcuMTQ1IDM0Ni42NjggMjQ2Ljc5MiBDIDM0Ni41NyAyNDYuNDM5IDM0Ni4zODIgMjQ2LjE3NiAzNDYuMTA0IDI0Ni4wMDIgQyAzNDYuMzI5IDI0NC43NDggMzQ2LjY2OCAyNDMuNTAxIDM0Ny4xMTkgMjQyLjI0NiBDIDM0Ny4zNjcgMjQxLjUxNyAzNDcuNDIgMjQwLjk5MSAzNDcuMjY5IDI0MC42NjggQyAzNDcuMDk2IDI0MC4xOTUgMzQ2LjY4MyAyMzkuOTU0IDM0Ni4wMjkgMjM5Ljk1NCBDIDM0NS43MDYgMjM5Ljk1NCAzNDUuMjE3IDI0MC4wODkgMzQ0LjU2MyAyNDAuMzY4IEMgMzQyLjc4MSAyNDEuMjQ2IDM0MC43MTQgMjQyLjYwNyAzMzguMzYxIDI0NC40NjMgQyAzMzguMDM4IDI0NC43NDEgMzM3Ljc4MyAyNDUuMDI2IDMzNy42MSAyNDUuMzI3IEMgMzM3LjQzNyAyNDUuNzAyIDMzNy40NDUgMjQ2LjAxOCAzMzcuNjQ3IDI0Ni4yNjUgQyAzMzcuNzk4IDI0Ni40NjggMzM4LjE1MSAyNDYuNTg5IDMzOC43IDI0Ni42NDEgQyAzNDAuNjAyIDI0Ni43OTIgMzQxLjg3MiAyNDcuMjggMzQyLjQ5NiAyNDguMTA3IEMgMzQzLjI3IDI0OS4xMzUgMzQzLjIzMiAyNTAuNzUxIDM0Mi4zODMgMjUyLjk1MyBDIDM0MS42NTQgMjU0LjgzMSAzNDEuNDIxIDI1Ni4yNTkgMzQxLjY2OSAyNTcuMjM1IEMgMzQxLjc2NyAyNTcuMzc4IDM0MS45MDkgMjU3LjQ2MSAzNDIuMDgyIDI1Ny40OTkgQyAzMzkuMzMxIDI1OC41NSAzMzYuOTcxIDI1OS40NzUgMzM1LjAxNyAyNjAuMjc5IEMgMzI4Ljc3NyAyNjMuMDA2IDMyNC4wNzkgMjY1LjAzNSAzMjAuOTIyIDI2Ni4zNjQgQyAzMjAuMjY4IDI2Ni41OSAzMTkuNzcyIDI2Ni44NzUgMzE5LjQxOCAyNjcuMjI5IEMgMzE5LjIxNSAyNjcuNDU0IDMxOS4wOTUgMjY3LjcwMiAzMTkuMDQyIDI2Ny45OCBDIDMxOC45NjggMjY4LjMwMyAzMTkuMDA0IDI2OC41ODEgMzE5LjE1NSAyNjguODA2IEMgMzE5LjU4NCAyNjkuNTA2IDMyMC40NzEgMjY5LjU0MiAzMjEuODI0IDI2OC45MTkgQyAzMjcuNTkgMjY2LjIxNCAzMzEuODgyIDI2NC4yNzYgMzM0LjcxNiAyNjMuMDk2IEMgMzM5LjUyNyAyNjEuMDQ1IDM0My45MjQgMjU5LjQxNCAzNDcuOTA4IDI1OC4yMTIgQyAzNDguODEgMjU3LjkzNCAzNTAuMzc0IDI1Ny40NzYgMzUyLjYwNyAyNTYuODIyIEMgMzU0LjU4NCAyNTYuMjc0IDM1Ni4xNCAyNTUuODA4IDM1Ny4yNjYgMjU1LjQzMiBDIDM1OC4zMTkgMjU1LjA3OSAzNjEuMjczIDI1My45OSAzNjYuMTM3IDI1Mi4xNjQgQyAzNjkuNzQ2IDI1MC44MTIgMzcyLjczNyAyNDkuODU3IDM3NS4xMiAyNDkuMzA5IEMgMzczLjcxNCAyNTAuOTYyIDM3MS41NDkgMjUyLjY2NyAzNjguNjE4IDI1NC40MTggQyAzNjYuNDYgMjU1LjY5NSAzNjIuOTIgMjU3LjYyNiAzNTcuOTgxIDI2MC4yMDQgTCAzNTEuODU1IDI2My4zNiBDIDM1MC4yMjQgMjY0LjE4NiAzNDkuMDIxIDI2NC43NjQgMzQ4LjI0NyAyNjUuMDg3IEMgMzQ2Ljg3IDI2NS42NjYgMzQ1LjYwMSAyNjYuMDY0IDM0NC40NSAyNjYuMjg5IEMgMzQzLjY5OSAyNjYuNDE3IDM0Mi43NTkgMjY2LjUgMzQxLjYzMSAyNjYuNTUyIEMgMzQwLjM3NiAyNjYuNjA1IDMzOS40MzYgMjY2LjY0MiAzMzguODEzIDI2Ni42NjUgQyAzMzYuNzMgMjY2Ljc2MyAzMzMuNjQgMjY3LjI0NCAzMjkuNTI5IDI2OC4wOTMgQyAzMjguNjggMjY4LjI0MyAzMjguMDQxIDI2OC40NjkgMzI3LjYxMiAyNjguNzY4IEMgMzI2LjkzNiAyNjkuMjczIDMyNi42ODcgMjY5Ljg0MyAzMjYuODYxIDI3MC40OTcgQyAzMjcuMDExIDI3MS4wOTggMzI3LjQ4NCAyNzEuNDczIDMyOC4yODggMjcxLjYyNCBDIDMyOC43MTcgMjcxLjY3NyAzMjkuMzU2IDI3MS42MDIgMzMwLjIwNiAyNzEuMzk5IEMgMzM0LjM0IDI3MC4zMjQgMzM3LjM2OSAyNjkuNzMgMzM5LjMwMSAyNjkuNjMzIEMgMzM5LjQ1MiAyNjkuNjE3IDMzOS44MDUgMjY5LjYxIDM0MC4zNTMgMjY5LjU5NSBDIDM0MC4yNTYgMjY5LjgyOCAzNDAuMTY1IDI3MC4wODMgMzQwLjA5IDI3MC4zNDYgQyAzMzkuMTUxIDI3My4zODIgMzM4LjI2MyAyNzYuNDI2IDMzNy40MjIgMjc5LjQ3NiBDIDMzNi43NTMgMjc5LjI5NiAzMzYuMjQyIDI3OS4xNiAzMzUuODggMjc5LjA2MyBDIDMzNC45NTYgMjc4LjgzNyAzMzMuNTczIDI3OC45MjcgMzMxLjc0NiAyNzkuMzI2IEMgMzI5LjQzOSAyNzkuNzk5IDMyNS45OCAyODAuMzYyIDMyMS4zNzMgMjgxLjAxNiBDIDMxNy43MTIgMjgxLjQ5IDMxNS4xMTkgMjgxLjczIDMxMy41OTMgMjgxLjczIEMgMzExLjM2IDI4MS43MyAzMTAuMDIyIDI4MS43NTIgMzA5LjU3MSAyODEuODA1IEMgMzA4Ljc2NiAyODEuODggMzA3LjQ1MSAyODIuMTU4IDMwNS42MjUgMjgyLjYzMSBDIDMwMy45NDggMjgzLjAyOSAzMDIuNjE3IDI4My4yNTUgMzAxLjY0MSAyODMuMzA4IEMgMzAwLjc2MSAyODMuMzYgMjk5LjQyMyAyODMuMjcgMjk3LjYxOCAyODMuMDQ1IEMgMjk3LjA2MyAyODIuOTc3IDI5Ni41NDQgMjgyLjkwOSAyOTYuMDc4IDI4Mi44NTcgQyAyOTUuNjQxIDI4Mi4zMTYgMjk0LjkwNSAyODEuNDkgMjkzLjg2IDI4MC4zNzggQyAyODIuMTU2IDI2Ny45MjggMjcxLjk2MyAyNTQuMjQ1IDI2My4yNjYgMjM5LjMxNSBDIDI1NC41OTggMjI0LjQxNiAyNDcuNzI4IDIwOC43OTYgMjQyLjY2OCAxOTIuNDY4IEMgMjQyLjI0IDE5MS4wNjMgMjQxLjk1NSAxODkuOTY2IDI0MS44MDUgMTg5LjE2MyBDIDI0MS42MDEgMTg3LjkwNyAyNDEuNTk0IDE4Ni43OCAyNDEuNzY3IDE4NS43ODEgQyAyNDIuMDE1IDE4NC40NTIgMjQyLjY5MSAxODMuMDc2IDI0My43OTYgMTgxLjY0OSBDIDI0NC4wNDUgMTgxLjI5NiAyNDUuMDk2IDE4MC4wOTMgMjQ2Ljk1MyAxNzguMDQyIEMgMjQ3LjAyMSAxNzcuOTY3IDI0Ny4wODkgMTc3Ljg5MiAyNDcuMTQxIDE3Ny44MTcgQyAyNDcuMDI4IDE3OC4xMzkgMjQ2LjkwMSAxNzguNDc4IDI0Ni43NjUgMTc4LjgzMSBDIDI0Ni4zMzcgMTc5Ljk1OCAyNDYuMzc1IDE4MC43MzMgMjQ2Ljg3OCAxODEuMTYxIEMgMjQ3LjIwMiAxODEuNDA4IDI0Ny42MyAxODEuNDQ2IDI0OC4xNTYgMTgxLjI3MyBDIDI0OC40OCAxODEuMTQ1IDI0OC44MzMgMTgwLjg5OCAyNDkuMjA5IDE4MC41MjIgQyAyNDkuNjYgMTgwLjA0OCAyNTAuMjA4IDE3OS4zMiAyNTAuODYyIDE3OC4zNDMgQyAyNTEuNjE0IDE3Ny4yNjggMjUyLjE1NiAxNzYuNTI1IDI1Mi40NzggMTc2LjEyNiBDIDI1My4xMDMgMTc1LjM1MiAyNTMuMjUzIDE3NC43NzMgMjUyLjkzIDE3NC4zOTggTCAyNTIuNzA0IDE3NC4xNzMgQyAyNTIuNjI5IDE3NC4wOTggMjUyLjU3NyAxNzQuMDA4IDI1Mi41NTQgMTczLjkxIEMgMjUyLjUzMiAxNzMuODM1IDI1Mi41MzkgMTczLjcyMiAyNTIuNTkxIDE3My41NzEgQyAyNTIuNjY2IDE3My4zNjkgMjUyLjcwNCAxNzMuMjU2IDI1Mi43MDQgMTczLjIzMyBDIDI1Mi43NTYgMTcyLjk3MSAyNTIuNjU5IDE3Mi42ODUgMjUyLjQwMyAxNzIuMzY5IEMgMjUyLjQzNCAxNzIuMzM5IDI1Mi40NTYgMTcyLjMwMSAyNTIuNDc4IDE3Mi4yNTcgQyAyNTIuNDc4IDE3Mi4yNDIgMjUyLjQ3OCAxNzIuMjEyIDI1Mi40NzggMTcyLjE4MSBDIDI1My45NzUgMTcxLjgwNiAyNTUuNTIzIDE3MS4wNzcgMjU3LjEzOSAxNzAuMDAzIEMgMjU3Ljg2OCAxNjkuNTMgMjU5LjQ1NCAxNjguMzEyIDI2MS45MTMgMTY2LjM1OSBDIDI2NS4zOTMgMTYzLjU1NiAyNzAuNjcgMTU5LjkxOSAyNzcuNzM2IDE1NS40NjQgTCAyODUuNDAzIDE1MC41OCBDIDI4OC42ODggMTQ4LjU1MSAyOTAuNzAzIDE0Ny4zMTIgMjkxLjQ1NSAxNDYuODYxIEwgMjk0LjUzNyAxNDUuMDU3IEMgMjk1LjI2NSAxNDQuNjgyIDI5NS43NzcgMTQ0LjI5MSAyOTYuMDc4IDE0My44OTMgQyAyOTYuMjgxIDE0My42NDUgMjk2LjQwMSAxNDMuMzQ0IDI5Ni40NTQgMTQyLjk5MSBDIDI5Ni40NzYgMTQyLjYzOCAyOTYuNDAxIDE0Mi4zMzggMjk2LjIyOCAxNDIuMDkgQyAyOTUuOTI4IDE0MS43MTQgMjk1LjM2NCAxNDEuNDc0IDI5NC41MzcgMTQxLjM3NiBDIDI5Mi44MyAxNDEuMTIxIDI5MS4zMDQgMTQwLjkyNSAyODkuOTUxIDE0MC43NzUgTCAzMTMuODE4IDEyNi43NjIgQyAzMTYuMzc0IDEyNS4zMTIgMzE4LjI2OCAxMjQuMTcgMzE5LjQ5MyAxMjMuMzQ0IEMgMzE5LjUxNiAxMjMuMzI4IDMxOS41NDYgMTIzLjI5OCAzMTkuNTY4IDEyMy4yNjggQyAzMTkuNzY0IDEyMy44MDkgMzE5Ljk4OSAxMjQuMjQ1IDMyMC4yNDUgMTI0LjU4MyBDIDMyMC4zMiAxMjQuNjU4IDMyMC42MDYgMTI0Ljk1OCAzMjEuMTEgMTI1LjQ4NSBDIDMyMS40NjMgMTI1Ljg2MSAzMjEuNjk2IDEyNi4xOTggMzIxLjgyNCAxMjYuNDk5IEMgMzIxLjg5OSAxMjYuNjk0IDMyMS45MzcgMTI2LjkwNSAzMjEuOTM3IDEyNy4xMzggQyAzMjEuOTE0IDEyNy4xMyAzMjEuODkyIDEyNy4xMTUgMzIxLjg2MiAxMjcuMSBDIDMyMS4zMzUgMTI2Ljc3NyAzMjAuNjIxIDEyNi45NjUgMzE5LjcxOSAxMjcuNjYzIEMgMzE4LjQ0MSAxMjguNjE4IDMxNy4wNTEgMTI5Ljg2NSAzMTUuNTQ3IDEzMS40MjEgQyAzMTQuNTcgMTMyLjM5NyAzMTMuOTQ2IDEzMy4yNzcgMzEzLjY2OCAxMzQuMDUgQyAzMTMuNDk1IDEzNC41OTkgMzEzLjQ0MiAxMzUuMTQgMzEzLjUxOCAxMzUuNjY1IEMgMzEzLjU5MyAxMzYuMjQ0IDMxMy44MTggMTM2LjcwMiAzMTQuMTk0IDEzNy4wNTUgQyAzMTQuNTcgMTM3LjQ1NCAzMTUuMTExIDEzNy43MDkgMzE1LjgxIDEzNy44MDcgQyAzMTYuMjM5IDEzNy44ODIgMzE2Ljg2MyAxMzcuODk3IDMxNy42OSAxMzcuODQ1IEwgMzIxLjI2IDEzNy42MTkgQyAzMjIuMDM0IDEzNy41NjcgMzIyLjY1MSAxMzcuNDQ2IDMyMy4xMDEgMTM3LjI0MyBDIDMyMy4yNiAxMzcuMTY4IDMyMy4zOTUgMTM3LjA4NSAzMjMuNTE1IDEzNi45OCBDIDMyNS40NyAxMzYuODYgMzI3LjU5NyAxMzYuNTc1IDMyOS45MDUgMTM2LjExNiBDIDMzMS4yOTYgMTM1LjgzMSAzMzMuMzAzIDEzNS4zNSAzMzUuOTE4IDEzNC42ODkgQyAzMzYuMjQyIDEzNC42MTMgMzM2LjU3MyAxMzQuNTI0IDMzNi44OTUgMTM0LjQyNSBDIDMzNi45NCAxMzQuNDM0IDMzNi45NzggMTM0LjQzNCAzMzcuMDA4IDEzNC40MjUgQyAzNTQuOTk3IDEyOS45MTggMzY4LjQ4MiAxMjYuMjczIDM3Ny40NTEgMTIzLjQ5MyBDIDM5Mi4yNTkgMTE4LjkxIDQwNS4yMjYgMTEzLjg3NiA0MTYuMzUyIDEwOC4zOTEgQyA0MjEuOTM3IDEwNS42MTEgNDI4LjA5MyAxMDIuMjE1IDQzNC44MDYgOTguMjEgQyA0MzguODEyIDk1LjgwNiA0NDQuNzgxIDkyLjA4NyA0NTIuNjk2IDg3LjA1MyBMIDQ1OS4zMTIgODIuODgyIEwgNDU5LjQyNCA4Mi44MDcgQyA0NTkuNjY1IDgyLjg3NSA0NTkuOTI4IDgyLjg5IDQ2MC4yMTMgODIuODQ1IEMgNDYwLjU4OSA4Mi43NDcgNDYxLjEzIDgyLjQ1NCA0NjEuODMgODEuOTgxIEwgNDYzLjY3MSA4MC41OTEgQyA0NjQuNzI0IDc5Ljc4NyA0NjUuNDk4IDc5LjE3OCA0NjYuMDAyIDc4Ljc1IEMgNDY2LjgwNiA3OC4wNzQgNDY3LjQ4MyA3Ny40NTggNDY4LjAzMSA3Ni45MDkgQyA0NzAuMTEzIDc0Ljg4MSA0NzEuOTc4IDcyLjczOSA0NzMuNjMxIDcwLjQ4NSBDIDQ3My42NTQgNzAuNDU1IDQ3My42NzYgNzAuNDE3IDQ3My43MDcgNzAuMzcyIEwgNDc2LjE1IDY5LjE3IEMgNDc2LjgyNiA2OC43NzIgNDc3LjIwMiA2OC41MzIgNDc3LjI3NyA2OC40NTYgQyA0NzcuNjUzIDY4LjA4MSA0NzcuODQxIDY3LjY5IDQ3Ny44NDEgNjcuMjkyIEMgNDc3Ljg2NCA2Ni45OTEgNDc3Ljc2NiA2Ni42OTEgNDc3LjU0IDY2LjM5IEMgNDc3LjQ4OCA2Ni4zMjMgNDc3LjQyIDY2LjI2MiA0NzcuMzUyIDY2LjIwMiBDIDQ3OC45NTMgNjUuOTU0IDQ4MC41NyA2NS44MTkgNDgyLjIwMSA2NS43ODkgTCA0NzIuOTE3IDc0LjQzIEMgNDY5LjAzMSA3OC4wNTkgNDY2LjEgODAuNzU2IDQ2NC4xMjIgODIuNTA3IEMgNDYwLjc5MyA4NS40MzcgNDU3LjY5NSA4Ny45MzkgNDU0LjgzOSA5MC4wMiBDIDQ1MS4xNzggOTIuNzQ4IDQ0Ni41MzIgOTUuNzQ1IDQ0MC44OTUgOTguOTk5IEMgNDM0LjMwMiAxMDIuODMxIDQyOC4wMjUgMTA2LjEzNyA0MjIuMDY0IDEwOC45MTcgQyA0MTYuMDUxIDExMS42NzUgNDA5LjE1IDExNC40MTcgNDAxLjM1NSAxMTcuMTQ0IEMgMzk2LjY3MiAxMTguNzk4IDM4OS41OTEgMTIxLjEyNyAzODAuMTE5IDEyNC4xMzIgTCAzNTMuOTU5IDEzMi40MzUgQyAzNDUuNDEzIDEzNS4xNCAzMzkuMTY2IDEzNi45MjggMzM1LjIwNSAxMzcuODA3IEMgMzI5LjE2OCAxMzkuMTgyIDMyMi45NzQgMTQwLjA2MSAzMTYuNjM3IDE0MC40MzcgQyAzMTUuNzEzIDE0MC41MTIgMzE0Ljg5MyAxNDAuNDE0IDMxNC4xOTQgMTQwLjEzNiBDIDMxMy4zMTQgMTM5LjgxMyAzMTIuODY0IDEzOS4yODcgMzEyLjg0MSAxMzguNTU4IEMgMzEyLjg0MSAxMzguNDA4IDMxMi44OTMgMTM4LjAzMyAzMTIuOTkxIDEzNy40MzEgQyAzMTMuMDg5IDEzNy4wMDMgMzEzLjA2NyAxMzYuNjY1IDMxMi45MTYgMTM2LjQxNyBDIDMxMi42MzggMTM1LjkxNCAzMTIuMTg3IDEzNS44MzEgMzExLjU2MyAxMzYuMTU0IEMgMzEwLjk2MSAxMzYuNDU1IDMxMC42MDEgMTM2Ljg5IDMxMC40NzMgMTM3LjQ2OSBDIDMxMC40MiAxMzcuNzc3IDMxMC40MDYgMTM4LjA3OCAzMTAuNDM1IDEzOC4zNyBDIDMxMC4yMTggMTM4LjU4OCAzMDkuOTU0IDEzOC45MTkgMzA5LjY0NiAxMzkuMzQ3IEMgMzA5LjQ5NiAxMzkuNTIgMzA5LjIxNyAxMzkuNzQ1IDMwOC44MTkgMTQwLjAyMyBDIDMwOC40NDMgMTQwLjMwMSAzMDguMTggMTQwLjUyNyAzMDguMDMgMTQwLjcgQyAzMDcuNzgyIDE0MC45NzggMzA3LjYzOSAxNDEuMzAxIDMwNy42MTYgMTQxLjY3NiBDIDMwNy41NjQgMTQyLjA3NCAzMDcuNjcgMTQyLjM3NSAzMDcuOTE3IDE0Mi41NzggQyAzMDguMTY2IDE0Mi43ODEgMzA4LjU3MSAxNDIuODc5IDMwOS4xMiAxNDIuODc5IEwgMzEzLjIxNyAxNDIuOTE2IEMgMzEzLjc0MyAxNDIuOTE2IDMxNC4xMTkgMTQyLjg1NiAzMTQuMzQ1IDE0Mi43MjggQyAzMTQuNTEgMTQyLjY2IDMxNC42NDUgMTQyLjU2MyAzMTQuNzU3IDE0Mi40MjcgQyAzMTUuNzY1IDE0Mi42MzEgMzE2Ljk2OCAxNDIuNzIxIDMxOC4zNjYgMTQyLjY5MSBDIDMyNy4zNjQgMTQyLjYxNSAzMzUuOTE4IDE0MS4yMTEgMzQ0LjAzNyAxMzguNDgzIEMgMzQ1Ljg2NCAxMzcuODU5IDM0OC42IDEzNi45MDUgMzUyLjIzMSAxMzUuNjI4IEMgMzUzLjMzNiAxMzUuMjc1IDM1NS4yMTQgMTM0Ljc2NCAzNTcuODY4IDEzNC4wODggQyAzNjAuMjk2IDEzMy40NjQgMzYyLjE3NiAxMzIuOTIzIDM2My41MDYgMTMyLjQ3MiBDIDM2NC45NTcgMTMxLjk5OSAzNjcuMTMgMTMxLjE3MiAzNzAuMDA5IDEyOS45OTMgQyAzNzIuODY1IDEyOC44NDMgMzc1LjAzIDEyOC4wMjQgMzc2LjUxMSAxMjcuNTUgQyAzNzguMTY1IDEyNy4wMjUgMzgwLjQ4IDEyNi40MzkgMzgzLjQ2NCAxMjUuNzg1IEMgMzg2Ljc5NCAxMjUuMDMzIDM4OS4xMTYgMTI0LjQ4NSAzOTAuNDE4IDEyNC4xMzIgQyAzOTIuNSAxMjMuNTU0IDM5NC45MTIgMTIyLjcyNyAzOTcuNjcxIDEyMS42NTMgQyAzOTkuMjUgMTIxLjAyOSA0MDEuNjE4IDEyMC4wNzUgNDA0Ljc3NSAxMTguNzk4IEMgNDA2LjY3NiAxMTguMDY5IDQwOS41MzMgMTE2Ljk5NCA0MTMuMzQ0IDExNS41NjYgQyA0MTYuNzggMTE0LjI2NyA0MTkuNjA2IDExMy4xMSA0MjEuODM4IDExMi4xMSBDIDQyNS4wNzIgMTEwLjY2IDQyOS42MzQgMTA4LjMxNiA0MzUuNTIgMTA1LjA4NSBDIDQ0MC40MjggMTAyLjQwMyA0NDQuMTI3IDEwMC4zMjkgNDQ2LjYwNyA5OC44NDkgQyA0NTAuNjY3IDk2LjQ0NSA0NTQuMiA5NC4wOTMgNDU3LjIwNyA5MS43ODYgQyA0NjAuMTE2IDg5LjU1NSA0NjMuNzg0IDg2LjM5OSA0NjguMjE5IDgyLjMxOSBMIDQ4Mi41MzkgNjkuMjgzIEMgNDgzLjQ5NCA2OC40MzQgNDg0LjE3OCA2Ny41NzcgNDg0LjYwNyA2Ni43MjggQyA0ODUuMTMyIDY1LjY1NCA0ODUuMTMyIDY0LjcyMiA0ODQuNjA3IDYzLjk0OCBDIDQ4My44NTUgNjIuODc0IDQ4Mi4yNjEgNjIuNTczIDQ3OS44MzMgNjMuMDQ3IEwgNDY5Ljk4NiA2NS4wMzggQyA0NjkuNjkyIDY1LjA5OCA0NjkuNDIyIDY1LjE1OCA0NjkuMTU5IDY1LjIyNiBDIDQ2OS4wNjIgNjUuMjAzIDQ2OC45NjMgNjUuMTczIDQ2OC44NTggNjUuMTUgQyA0NjcuNjc4IDY0Ljg1IDQ2Ni42MTggNjQuNzIyIDQ2NS42NjMgNjQuNzc1IEMgNDY0LjczOSA2NC44NSA0NjQuMDQ3IDY0Ljg2NSA0NjMuNTk2IDY0LjgxMiBMIDQ2My40ODMgNjQuNzc1IEMgNDYzLjQ1NCA2NC43MyA0NjMuNDE2IDY0LjY3NyA0NjMuMzcxIDY0LjYyNCBDIDQ2Mi45NDIgNjQuMDk5IDQ2Mi4wMTggNjMuNTczIDQ2MC41ODkgNjMuMDQ3IEMgNDYwLjI1MSA2Mi45MTkgNDU4LjYwNSA2Mi4yMzUgNDU1LjY2NSA2MC45OCBDIDQ3NS44MTkgNTguNDcxIDQ5Ni4yMjEgNTYuOTA4IDUxNi44NTUgNTYuMjg0IEMgNTE5LjEzMyA1Ni4yMDkgNTI1LjggNTYuMDgyIDUzNi44NSA1NS45MDkgQyA1NDMuODQyIDU1Ljg1NiA1NDguODYzIDU1Ljk0NiA1NTEuOTIyIDU2LjE3MiBDIDU1NS41ODMgNTYuNDcyIDU1OS42NjUgNTcuMDU4IDU2NC4xNzUgNTcuOTM3IEMgNTY2Ljk1NiA1OC40ODYgNTcxLjAwMSA1OS4zOCA1NzYuMzE1IDYwLjYwNSBDIDU3OC4yNyA2MS4xMDggNTc5LjM1OSA2MS44NiA1NzkuNTg1IDYyLjg1OSBDIDU3OS42MDggNjIuOTc5IDU3OS42MjIgNjMuMDk5IDU3OS42MjIgNjMuMjM0IEMgNTc5LjQxMiA2My4zMjUgNTc5LjIyNCA2My40NDUgNTc5LjA1OSA2My42MSBDIDU3OC43ODEgNjMuOTExIDU3OC40OCA2NC41MzQgNTc4LjE1NyA2NS40ODkgQyA1NzQuOTI0IDc2LjIzMyA1NzEuNDI5IDg2LjkwMiA1NjcuNjcgOTcuNDk3IEMgNTY1Ljg4OSAxMDIuNTA4IDU2NC4zNDggMTA2LjM3OCA1NjMuMDQ3IDEwOS4xMDUgQyA1NjEuMDkzIDExMy4xODUgNTU4LjM4NyAxMTcuNzgzIDU1NC45MjkgMTIyLjg5MiBDIDU1MC43MTIgMTI5LjE0NCA1NDUuOTAxIDEzNS41MyA1NDAuNDk2IDE0Mi4wNTIgQyA1NDAuNDI5IDE0MS44ODYgNTQwLjMzMSAxNDEuNzM2IDU0MC4xOTUgMTQxLjYwMSBDIDUzOS45NDcgMTQxLjM1NCA1MzkuNjA5IDE0MS4xNSA1MzkuMTgxIDE0MSBDIDUzOS4xNTggMTQxIDUzOC43NTIgMTQwLjg4OCA1MzcuOTc4IDE0MC42NjIgQyA1MzYuMzk5IDE0MC4yMzQgNTM0Ljc2OCAxMzkuNDM3IDUzMy4wOTIgMTM4LjI1NyBDIDUzMi4wMTcgMTM3LjUyOSA1MzAuNTU4IDEzNi4zNzkgNTI4LjczMiAxMzQuODAxIEMgNTI2LjEyMyAxMzIuNTQ4IDUyNC4xODQgMTMwLjg0MiA1MjIuOTA3IDEyOS42OTIgQyA1MjAuNDQ4IDEyNy40OTEgNTE4LjYwNiAxMjUuNzYyIDUxNy4zODEgMTI0LjUwOCBDIDUxNS40NDkgMTIyLjUwMiA1MTMuOTA4IDEyMC41NDEgNTEyLjc1OCAxMTguNjEgQyA1MTEuMjc3IDExNi4xMyA1MTAuMDc0IDExMy4xNDggNTA5LjE1IDEwOS42NjkgQyA1MDguNjAxIDEwNy40ODkgNTA3Ljk4NSAxMDQuMjgxIDUwNy4zMDggMTAwLjA1MSBDIDUwNi41MDQgOTUuMDkzIDUwNi4wODMgOTEuMzUgNTA2LjAzMSA4OC44MTggQyA1MDUuOTc4IDg2LjgxMiA1MDYuMDkgODQuMTQ1IDUwNi4zNjggODAuODE2IEMgNTA2Ljg0MiA3NC45MDMgNTA3LjQzNiA3MC4yMDcgNTA4LjEzNSA2Ni43MjggQyA1MDguNDU5IDY1LjI0OCA1MDguNjgzIDY0LjE1MSA1MDguODEyIDYzLjQyMiBDIDUwOS4wNTkgNjIuMTQ1IDUwOS4yMSA2MS4wMzMgNTA5LjI2MyA2MC4wNzkgQyA1MDkuMjg1IDU5LjcyNiA1MDkuMjEgNTkuNDAzIDUwOS4wMzcgNTkuMTAyIEMgNTA4LjgzNCA1OC44MDEgNTA4LjYwOCA1OC43MjYgNTA4LjM2MSA1OC44NzcgQyA1MDcuMDYgNjMuODU4IDUwNi4wNjcgNjguOTgyIDUwNS4zOTIgNzQuMjQyIEMgNTA1LjAzOCA3Ni45OTkgNTA0LjcxNSA4MC4zMDUgNTA0LjQxNCA4NC4xNiBDIDUwNC4yNjQgODYuNDE0IDUwNC4yMDMgODguMTA0IDUwNC4yMjYgODkuMjMxIEMgNTA0LjI0OSA5MC42MDYgNTA0LjQzNyA5Mi42MjggNTA0Ljc5IDk1LjI4IEMgNTA1LjYzOSAxMDEuODE3IDUwNi40OTYgMTA2LjczOCA1MDcuMzQ2IDExMC4wNDQgQyA1MDguNzUxIDExNS40MzIgNTEwLjc1MSAxMTkuOTAyIDUxMy4zNiAxMjMuNDU2IEMgNTE1LjE0MSAxMjUuODYxIDUxNy43NzkgMTI4LjU2NSA1MjEuMjkgMTMxLjU3IEMgNTIyLjcxOSAxMzIuODI1IDUyNC45MTMgMTM0LjY1MSA1MjcuODY3IDEzNy4wNTUgQyA1MzAuMjk1IDEzOS4wMzIgNTMyLjIxMiAxNDAuNDM3IDUzMy42MTggMTQxLjI2MyBDIDUzNS41NjUgMTQyLjQ1OCA1MzcuNDQ0IDE0My4yMSA1MzkuMjU2IDE0My41MTggQyA1MzQuMzU0IDE0OS40MDEgNTI4Ljk4IDE1NS4zODkgNTIzLjEzMiAxNjEuNDc1IEMgNTE1LjMxNCAxNjkuNTg5IDUwMy4yNjQgMTgxLjE5OCA0ODYuOTc0IDE5Ni4zIEMgNDgyLjAxMyAyMDAuODYxIDQ3OS4yMTYgMjAzLjQxNSA0NzguNTkzIDIwMy45NjQgQyA0NzYuMjQgMjA2LjAxNiA0NzIuNjMyIDIwOS4wNTEgNDY3Ljc2OSAyMTMuMDU2IEMgNDU4LjM3MiAyMjAuNzk0IDQ1MS4xMzMgMjI2LjUwNSA0NDYuMDQ0IDIzMC4xODYgQyA0MzcuNzIyIDIzNi4xOTggNDI5Ljg0NCAyNDAuOTMxIDQyMi40MDIgMjQ0LjM4OCBDIDQyMC4xMjUgMjQ1LjM4NiA0MTguNDE4IDI0Ni4xNTMgNDE3LjI5MSAyNDYuNjc5IEMgNDE1LjMzNyAyNDcuNjAzIDQxMy42ODMgMjQ4LjQ2NyA0MTIuMzMgMjQ5LjI3MSBDIDQyMS4xNzcgMjQ3LjA5MyA0MzAuMjk1IDI0My4xNDggNDM5LjY5MiAyMzcuNDM3IEMgNDQ2LjU4NSAyMzMuMjMgNDU0LjcyNiAyMjcuMzMxIDQ2NC4xMjIgMjE5Ljc0MyBDIDQ3OC45MjQgMjA3Ljc1OSA0OTMuNDQ3IDE5NC44MjcgNTA3LjY4NCAxODAuOTM1IEMgNTA3LjczNiAxODEuMzYzIDUwNy44MiAxODEuODI5IDUwNy45NDcgMTgyLjMyNSBMIDUwOS40NTEgMTg5LjgwMSBDIDUwOS42NzYgMTkwLjg1MyA1MDkuODA0IDE5MS43NjkgNTA5LjgyNyAxOTIuNTQzIEMgNTA5Ljg3OSAxOTMuMjcyIDUwOS45MTcgMTk0LjM2OSA1MDkuOTQgMTk1Ljg1IEMgNTEwLjAxNSAxOTYuNjI0IDUxMC4xNDkgMTk3LjQ4NyA1MTAuMzUyIDE5OC40NDIgQyA1MTAuNzgxIDIwMC4wNzIgNTExLjI0IDIwMS4zNTcgNTExLjc0MyAyMDIuMzExIEMgNTExLjkxNiAyMDIuNjM0IDUxMi4xOCAyMDMuMSA1MTIuNTMzIDIwMy43MDEgQyA1MTIuODMzIDIwNC4yOCA1MTMuMDIxIDIwNC43NzYgNTEzLjA5NiAyMDUuMjA0IEwgNTE0LjU5OSAyMDUuMzkyIEwgNTE3LjQ5NCAyMDMuNDAxIEMgNTE4Ljc3MiAyMDIuNDk5IDUxOS42MzYgMjAxLjc4NSA1MjAuMDg3IDIwMS4yNiBDIDUyMC44MTYgMjAwLjQxIDUyMS4yNzUgMTk5LjU0NiA1MjEuNDc4IDE5OC42NjcgQyA1MjEuNjI4IDE5OC4wNjYgNTIxLjcxOCAxOTcuMzE1IDUyMS43NDEgMTk2LjQxMyBDIDUyMS43MTggMTk1LjQxMyA1MjEuNzE4IDE5NC42NjIgNTIxLjc0MSAxOTQuMTU5IEMgNTIxLjc5MyAxOTMuNDMgNTIxLjk2NyAxOTIuNDE2IDUyMi4yNjcgMTkxLjExNiBMIDUyMy4yMDYgMTg2Ljg3IEMgNTIzLjU2IDE4NS40MjEgNTIzLjc3IDE4NC4zMTYgNTIzLjg0NSAxODMuNTY1IEMgNTIzLjk0NCAxODIuNzM4IDUyMy45OTYgMTgxLjQ5OCA1MjMuOTk2IDE3OS44NDYgTCA1MjMuOTk2IDE2Ni41NDYgQyA1MjMuOTk2IDE2NS41NjIgNTI0LjA1NiAxNjQuODI2IDUyNC4xODQgMTY0LjMzIEMgNTI3LjkzNSAxNjAuNDM3IDUzMS42NzEgMTU2LjQ2NCA1MzUuMzg1IDE1Mi40MjEgQyA1NDEuMzE1IDE0NS45NjcgNTQ2LjA4OSAxNDAuMzM5IDU0OS43MDQgMTM1LjU1MiBDIDU1MC42NTIgMTM1Ljg0NiA1NTEuNjY3IDEzNS45NTkgNTUyLjc0OSAxMzUuODkxIEMgNTUyLjcyNyAxMzUuNzk0IDU1Mi44MDIgMTM1LjY4MSA1NTIuOTc0IDEzNS41NTIgTCA1NTMuMzUgMTM1LjQ0MSBDIDU1My41NTQgMTM1LjI5IDU1My42NTEgMTM1LjAwNCA1NTMuNjUxIDEzNC41NzYgTCA1NTMuNjg4IDEzMS44NzEgQyA1NTMuNjg4IDEzMS4zOTggNTUzLjU5MSAxMzEuMDY3IDU1My4zODggMTMwLjg5NCBDIDU1My4zMjEgMTMwLjg0MiA1NTMuMjQ1IDEzMC44MDUgNTUzLjE2MiAxMzAuNzgyIEMgNTU0LjQxOCAxMjguOTQgNTU2LjA0OSAxMjYuNDM5IDU1OC4wNDggMTIzLjI2OCBDIDU2MC4zNTYgMTE5LjYzOSA1NjIuMTIzIDExNi43NTQgNTYzLjM0OCAxMTQuNjI3IEMgNTY1LjIwNSAxMTEuMzk2IDU2Ni43NDYgMTA4LjM5MSA1NjcuOTcxIDEwNS42MTEgQyA1NjguODIgMTAzLjY4IDU2OS43IDEwMS40MTggNTcwLjYwMiA5OC44MTIgQyA1NzEuMDAxIDk3LjY2MiA1NzEuNzY3IDk1LjM1NSA1NzIuODk1IDkxLjg5OSBMIDU4MC41MjUgNjguMTU2IEMgNTgwLjk5OCA2Ny45MTUgNTgxLjM5NyA2Ny4zMjIgNTgxLjcyOCA2Ni4zOSBDIDU4Mi43NTcgNjMuOTExIDU4Mi45MTUgNjIuMDMyIDU4Mi4yMTYgNjAuNzU1IEMgNTgxLjY2NyA1OS44MzEgNTgwLjQxMiA1OS4wMjcgNTc4LjQ1NyA1OC4zNTEgQyA1NzAuNTg3IDU1LjY5OCA1NjEuNTgxIDU0LjAxNSA1NTEuNDM0IDUzLjMxNyBDIDU0NC4zNjcgNTIuODQzIDUzNS4xMDYgNTIuODEzIDUyMy42NTcgNTMuMjQxIEMgNTIzLjQ4NSA1My4yNDEgNTIzLjMxMiA1My4yNDEgNTIzLjEzMiA1My4yNDEgQyA1MjMuMDA0IDUyLjkxOCA1MjIuODkxIDUyLjY3OCA1MjIuNzk0IDUyLjUyOCBDIDUyMi40NyA1Mi4wMDIgNTIxLjk4OSA1MS43OTkgNTIxLjM2NSA1MS45MjYgTCA1MjEuMzY1IDUyLjA3NyBDIDUyMS4xNCA1Mi4wMjQgNTIwLjg5MSA1Mi4xMzcgNTIwLjYxMyA1Mi40MTUgWiBNIDQ2NC4zODUgNjcuMDY2IEMgNDY1LjIzNSA2Ny4xMjYgNDY2LjA5OSA2Ny4yNTQgNDY2Ljk3OSA2Ny40NDIgQyA0NjYuOTk0IDY3Ljk1MyA0NjcuMTg5IDY4LjMxNCA0NjcuNTgxIDY4LjUzMiBDIDQ2OC4wMDkgNjguNzc5IDQ2OC42NyA2OC43MTkgNDY5LjU3MiA2OC4zNDQgQyA0NjkuNjQ3IDY4LjMxNCA0NjkuNzIzIDY4LjI3NiA0NjkuNzk4IDY4LjIzMSBDIDQ3MC4zMDkgNjguNDI2IDQ3MC44MTMgNjguNjIyIDQ3MS4zMDIgNjguODMyIEMgNDY4Ljk0OSA3Mi4wNCA0NjYuMjQ5IDc0Ljg2NiA0NjMuMjIxIDc3LjMyMiBDIDQ2Mi4yMiA3OC4yMDIgNDYxLjE2OCA3OC45OSA0NjAuMDYzIDc5LjY4OSBDIDQ1OS43NzggNzkuODc3IDQ1OS41NDUgODAuMDUgNDU5LjM0OSA4MC4yMTUgQyA0NTkuMTQ2IDgwLjEyNSA0NTguOTM2IDgwLjA4IDQ1OC43MSA4MC4wNjUgQyA0NTguMTA5IDgwLjAxMiA0NTcuMjMgODAuMzUgNDU2LjA3OSA4MS4wNzkgQyA0NTQuMjM4IDgyLjMxOSA0NTIuNDMzIDgzLjUyMSA0NTAuNjY3IDg0LjY4NiBDIDQ1MC43NSA4NC41ODggNDUwLjg0IDg0LjQ4MyA0NTAuOTMgODQuMzg1IEwgNDYyLjI0MyA3MS44IEMgNDYzLjI3MyA3MC42NzMgNDYzLjg4MiA2OS43MzQgNDY0LjA4NSA2OC45ODIgQyA0NjQuMjIgNjguNDM0IDQ2NC4yNTggNjcuNzk1IDQ2NC4xOTcgNjcuMDY2IEwgNDY0LjM4NSA2Ny4wNjYgWiBNIDQ1OC40ODUgNjUuNDg5IEMgNDU5LjMzNCA2NS43MTQgNDU5LjgzNyA2NS44NjQgNDU5Ljk4OCA2NS45MzkgQyA0NjAuNTM3IDY2LjE2NSA0NjAuOTA2IDY2LjQ4IDQ2MS4wNzggNjYuODc5IEMgNDYxLjQwMiA2Ny41NzcgNDYxLjA1NiA2OC41MzIgNDYwLjAyNSA2OS43MzQgTCA0NTguOTM2IDcwLjg5OCBDIDQ1OC42MiA3MC40MDIgNDU4LjE2MSA2OS45MzcgNDU3LjU0NSA2OS41MDggQyA0NTcuMDcxIDY5LjE4NSA0NTYuMzQyIDY4Ljc5NSA0NTUuMzY1IDY4LjM0NCBDIDQ1Mi4yODMgNjYuOTM5IDQ0OS44NCA2Ni4wMTUgNDQ4LjAzNiA2NS41NjQgQyA0NDYuNDggNjUuMTY1IDQ0NC45NjkgNjQuOTQ4IDQ0My40ODggNjQuOTI1IEMgNDQyLjk2MSA2NC45MjUgNDQyLjU4NiA2NC45ODUgNDQyLjM2IDY1LjExMyBDIDQ0MS44NTcgNjUuMzkxIDQ0MS42NjEgNjUuOTU0IDQ0MS43NTkgNjYuODAzIEMgNDQxLjc4MSA2Ny4wMDYgNDQxLjgzNSA2Ny4zMTQgNDQxLjkxIDY3Ljc0MyBDIDQ0MS45ODUgNjguMTE4IDQ0Mi4wMDcgNjguNDM0IDQ0MS45ODUgNjguNjgyIEMgNDQ0LjMzOCA2OC4zMjkgNDQ2LjkzMSA2OS4xOTMgNDQ5Ljc2NSA3MS4yNzQgQyA0NTAuNTY5IDcxLjg1MyA0NTEuMDU4IDcyLjE5MSA0NTEuMjMgNzIuMjg4IEMgNDUxLjgxIDcyLjY2NCA0NTIuMzM2IDcyLjkxMiA0NTIuODA5IDczLjA0IEMgNDUyLjg2MSA3My4wNjIgNDUzLjEzMyA3My4xMzcgNDUzLjYzNiA3My4yNjUgQyA0NTMuOTU5IDczLjM0IDQ1NC4yMjIgNzMuNDM4IDQ1NC40MjYgNzMuNTY2IEMgNDU0LjY1MSA3My43MzggNDU0Ljk2NyA3NC4wMTYgNDU1LjM2NSA3NC4zOTIgQyA0NTUuNDYzIDc0LjQ2IDQ1NS41NzYgNzQuNTEyIDQ1NS43MDMgNzQuNTQyIEwgNDQ5LjY5IDgxLjI2NyBDIDQ0OS4wMzYgODIuMDAzIDQ0OC40MDQgODIuNjggNDQ3LjgxIDgzLjI5NiBDIDQ0Ny44MzMgODIuOTM1IDQ0Ny44NDggODIuNTIyIDQ0Ny44NDggODIuMDU2IEMgNDQ3Ljg0OCA4MS4wNzkgNDQ3LjczNSA4MC4zMjggNDQ3LjUwOSA3OS44MDIgQyA0NDcuMzM3IDc5LjQ0OSA0NDcuMDgxIDc5LjE2MyA0NDYuNzU4IDc4LjkzOCBDIDQ0Ni40MDUgNzguNzEyIDQ0Ni4wNTkgNzguNjIyIDQ0NS43MDYgNzguNjc1IEMgNDQ0LjkzMSA3OC44MDMgNDQ0LjM1MiA3OS41NjEgNDQzLjk3NyA4MC45NjcgTCA0NDMuMTg3IDgzLjY3MSBDIDQ0Mi44MTEgODUuMDI0IDQ0Mi41NzEgODYuMDAxIDQ0Mi40NzMgODYuNjAyIEMgNDQyLjMyMiA4Ny4zNjggNDQyLjIxMSA4OC4xNzIgNDQyLjEzNSA4OS4wMDYgQyA0NDEuNTI2IDg5LjU0NyA0NDAuOTA5IDkwLjA0MyA0NDAuMjkzIDkwLjUwOSBDIDQ0MC4zMDEgOTAuMjUzIDQ0MC4zMDEgODkuOTgzIDQ0MC4yOTMgODkuNjgyIEMgNDQwLjI3IDg4LjUzMyA0NDAuMzE2IDg3LjU5NCA0NDAuNDQ0IDg2Ljg2NSBDIDQ0MC42NDYgODUuNzkgNDQwLjc0NCA4NS4xNzQgNDQwLjc0NCA4NS4wMjQgTCA0NDAuNzgyIDgzLjU5NiBMIDQ0MS4wNDUgODIuMjA2IEMgNDQxLjE5NiA4MS4zMjcgNDQxLjEzNSA4MC42NTEgNDQwLjg1NyA4MC4xNzggQyA0NDAuNzA3IDc5Ljg3NyA0NDAuMzU0IDc5LjUyNCA0MzkuODA1IDc5LjEyNiBDIDQzOS4zMzEgNzguNzUgNDM4Ljg4OCA3OC41MSA0MzguNDg5IDc4LjQxMiBDIDQzNy44MzUgNzguMjg0IDQzNy4wNjEgNzguNTc3IDQzNi4xNTkgNzkuMjc2IEMgNDM0LjQ4MyA4MC41NzYgNDMzLjE3NCA4Mi4xOTEgNDMyLjI1IDg0LjEyMiBMIDQyOS43NjkgOTAuMTcxIEwgNDI4LjExNiA5Ni44NTggQyA0MjcuOTI4IDk3LjYzMSA0MjcuNzc3IDk4LjMwMSA0MjcuNjY1IDk4Ljg0OSBDIDQyNi45MiA5OS4yOTIgNDI2LjE4NCA5OS43MiA0MjUuNDQ3IDEwMC4xMjYgQyA0MjQuMzUgMTAwLjczNSA0MjMuMjQ0IDEwMS4zMzYgNDIyLjEzOSAxMDEuOTI5IEMgNDIxLjU5MSA5OC4wNzUgNDIxLjU3NSA5My43NzggNDIyLjEwMiA4OS4wNDQgQyA0MjIuNDc4IDg1LjY2MyA0MjMuMjY3IDgxLjE3NyA0MjQuNDcgNzUuNTk0IEMgNDI1LjE0NyA3Mi4zNDEgNDI1Ljg0NSA2OS44ODQgNDI2LjU3NCA2OC4yMzEgQyA0MjcuMDc4IDY3LjA4MSA0MjguMDE4IDY1LjMxNiA0MjkuMzk0IDYyLjkzNCBDIDQzMC4zMTggNjEuNDA5IDQzMS4wNyA2MC4yNjcgNDMxLjY0OSA1OS41MTUgQyA0MzIuNTUxIDU4LjMzNiA0MzMuNTEzIDU3LjQzNCA0MzQuNTQyIDU2LjgxIEMgNDM0LjczIDU2LjY5OCA0MzQuODg4IDU2LjYgNDM1LjAzMSA1Ni41MSBDIDQzNS4wOTIgNTYuNjgzIDQzNS4xNjcgNTYuODI1IDQzNS4yNTcgNTYuOTIzIEMgNDM1LjQ2IDU3LjE3MSA0MzUuNzQ1IDU3LjI5OSA0MzYuMTIxIDU3LjI5OSBDIDQzNi40NzQgNTcuMjc2IDQzNi43NDUgNTcuMTMzIDQzNi45NDggNTYuODg2IEMgNDM2Ljk4NiA1Ni45MzggNDM3LjAyNCA1Ni45ODMgNDM3LjA2MSA1Ny4wMzYgQyA0MzcuNDE0IDU3LjQ4NyA0MzguMTczIDU3Ljg2MiA0MzkuMzUzIDU4LjE2MyBDIDQ0NC45NjkgNTkuNTM4IDQ1MC4yOTEgNjEuNTI5IDQ1NS4zMjcgNjQuMTM2IEMgNDU2Ljc1NiA2NC44NjUgNDU3LjgwOCA2NS4zMTYgNDU4LjQ4NSA2NS40ODkgWiBNIDQ1Ny4yNDQgNzEuNjg3IEMgNDU3LjU3NSA3MS44IDQ1Ny44NzYgNzEuODUzIDQ1OC4xNDcgNzEuODM3IEwgNDU2Ljc5MyA3My4zNCBDIDQ1Ni4xNyA3Mi45NTcgNDU1LjY5NiA3Mi42NjQgNDU1LjM2NSA3Mi40NzYgQyA0NTQuNDQgNzIuMTUzIDQ1My43NDkgNzEuODk4IDQ1My4yOTggNzEuNzI1IEMgNDUyLjc5NSA3MS41MjIgNDUxLjM0MyA3MC42NzMgNDQ4LjkzOCA2OS4xNyBDIDQ0Ny4yMDkgNjguMDk2IDQ0NS43MDYgNjcuNTc3IDQ0NC40MjggNjcuNjMgQyA0NDMuNjI0IDY3LjYzIDQ0My4yMDMgNjcuNDU3IDQ0My4xNDkgNjcuMTA0IEMgNDQzLjkyNCA2Ny4wMDYgNDQ0LjgwNCA2Ny4wNDQgNDQ1Ljc4MSA2Ny4yMTcgQyA0NDYuMzI5IDY3LjI5MiA0NDcuMjA5IDY3LjQ5NSA0NDguNDEyIDY3LjgxOCBDIDQ1MC4wNjYgNjguMjY5IDQ1MS4yOTEgNjguNjQ0IDQ1Mi4wOTUgNjguOTQ1IEMgNDUzLjQyNSA2OS40MTggNDU0LjU1MyA2OS45ODIgNDU1LjQ3NyA3MC42MzUgQyA0NTYuMjgyIDcxLjIzNiA0NTYuODY4IDcxLjU5IDQ1Ny4yNDQgNzEuNjg3IFogTSA1NTEuNjIyIDEzMi45OTggTCA1NTEuNjIyIDEzMy4xODYgQyA1NTEuNjIyIDEzMy42MzcgNTUxLjU2MSAxMzMuOTc1IDU1MS40MzQgMTM0LjIgQyA1NTEuMDg4IDEzNC4zMjggNTUwLjgxNyAxMzQuMzgxIDU1MC42MDcgMTM0LjM1IEMgNTUwLjk2IDEzMy44OTMgNTUxLjI5OCAxMzMuNDQyIDU1MS42MjIgMTMyLjk5OCBaIE0gNDE5LjgwOSA0My4wNiBDIDQyMC40MzMgNDIuNjEgNDIwLjc4NyA0Mi4zNjIgNDIwLjg2MSA0Mi4zMDkgQyA0MjEuMjkgNDIuMDYxIDQyMS42ODggNDEuOTMzIDQyMi4wNjQgNDEuOTMzIEMgNDIyLjc0MSA0MS45NTYgNDIzLjQ3IDQyLjQ1OSA0MjQuMjQ0IDQzLjQzNiBDIDQyNS40NjkgNDQuOTE2IDQyNi4zNzIgNDYuMDgxIDQyNi45NSA0Ni45MyBDIDQyNy44NTMgNDguMzA1IDQyOC40NzYgNDkuNjIgNDI4LjgzIDUwLjg3NSBDIDQyOS4wNTYgNTEuNjc5IDQyOS4yNTggNTIuMjA0IDQyOS40MzEgNTIuNDUyIEMgNDI5LjYwNCA1Mi43IDQyOS44MjkgNTIuODgxIDQzMC4xMDcgNTIuOTc4IEMgNDMwLjQwOCA1My4xMDYgNDMwLjY3MSA1My4xMDYgNDMwLjg5NyA1Mi45NzggQyA0MzEuNTIxIDUyLjcgNDMxLjcwMSA1Mi4wMjQgNDMxLjQyMyA1MC45NSBDIDQzMS4wNDcgNDkuMzQ5IDQzMC4zMTEgNDcuNzA0IDQyOS4yMDYgNDYuMDI4IEMgNDI4LjcwOSA0NS4yNzcgNDI4LjAxOCA0NC4zNiA0MjcuMTM4IDQzLjI4NiBDIDQyNy41NTIgNDMuMjExIDQyOC4wMSA0My4wNiA0MjguNTI5IDQyLjgzNSBMIDQyOS45OTQgNDIuMTU5IEMgNDMwLjQ5OSA0MS45ODYgNDMxLjI5NiA0MS45MTggNDMyLjQgNDEuOTcxIEwgNDMyLjcwMSA0Mi4wMDkgTCA0MzIuODg5IDQyLjMwOSBDIDQzMy4xNjcgNDIuODU4IDQzMy41NDMgNDMuNDE0IDQzNC4wMTYgNDMuOTYyIEMgNDM0LjI2NSA0NC4yMSA0MzQuNDMgNDQuNDI4IDQzNC41MDUgNDQuNjAxIEMgNDM0LjU4IDQ0LjgwNCA0MzQuNTk2IDQ1LjIxNyA0MzQuNTQyIDQ1Ljg0MSBDIDQzNC41MiA0Ni40NjQgNDM0LjY1NSA0Ny4zODEgNDM0Ljk1NiA0OC41ODMgTCA0MzUuMjE5IDQ5Ljg5OCBDIDQzNS4zMTcgNTAuNTc0IDQzNS4zNjkgNTEuMzQgNDM1LjM2OSA1Mi4xODkgQyA0MzUuMzY5IDUyLjg2NiA0MzUuMzMyIDUzLjM2OSA0MzUuMjU3IDUzLjY5MiBMIDQzNS4xODEgNTMuOTU1IEMgNDM1LjExNCA1My45NCA0MzUuMDU0IDUzLjkyNSA0MzQuOTkzIDUzLjkxOCBDIDQzNC41MiA1My44MiA0MzMuOTU2IDUzLjkzMyA0MzMuMzAzIDU0LjI1NiBDIDQzMi41MjggNTQuNjU0IDQzMS42NDkgNTUuMzY4IDQzMC42NzEgNTYuMzk3IEMgNDI2Ljk4OCA2MC4zMDQgNDI0LjMyIDY0LjgzNSA0MjIuNjY2IDY5Ljk5NyBDIDQyMi4xOTIgNzEuNTIyIDQyMS41NTMgNzQuMjQyIDQyMC43NDkgNzguMTQ5IEMgNDIwLjMxMyA4MC40MTggNDE5Ljk2IDgyLjQzMiA0MTkuNjk3IDg0LjE5NyBDIDQxOS4yNTMgODMuNDY5IDQxOC43NDIgODIuOTI4IDQxOC4xNTUgODIuNTgyIEMgNDE4LjExOCA4Mi41NTkgNDE4LjA2NSA4Mi41MzcgNDE4LjAwNSA4Mi41MDcgQyA0MTguMDI4IDgyLjMxOSA0MTguMDI4IDgyLjEwMSA0MTguMDA1IDgxLjg2OCBDIDQxNy45MDggODAuOTE0IDQxNy43NzkgODAuMTkzIDQxNy42MjkgNzkuNjg5IEMgNDE3LjM4MSA3OC45MTUgNDE2Ljk5IDc4LjMzNyA0MTYuNDY0IDc3Ljk2MSBDIDQxNi4wMzUgNzcuNjM4IDQxNS4zOTYgNzcuNDM1IDQxNC41NDcgNzcuMzYgQyA0MTQuNzg3IDc3LjA3NCA0MTQuOTM4IDc2LjgxOSA0MTQuOTk4IDc2LjYwOSBDIDQxNS4xMjYgNzYuMjMzIDQxNS4xMTEgNzUuNzMgNDE0Ljk2MSA3NS4xMDYgQyA0MTQuODMzIDc0LjQ5IDQxNC43NDIgNzQuMDQ3IDQxNC42OTggNzMuNzkxIEMgNDE0LjgwMyA3My41OTYgNDE0Ljg5MyA3My4zNyA0MTQuOTYxIDczLjExNSBDIDQxNS4xMTEgNzIuNDM5IDQxNS4yMzkgNzEuOTM1IDQxNS4zMzcgNzEuNjEyIEMgNDE1LjQ4NyA3MS4yMzYgNDE1Ljc2NSA3MC43NjMgNDE2LjE2NCA3MC4xODUgQyA0MTYuNjM3IDY5LjQ4NiA0MTYuOTM4IDY5LjAyIDQxNy4wNjUgNjguNzk1IEMgNDE3LjI0NiA2OC40ODYgNDE3LjUwOSA2Ny44MSA0MTcuODU0IDY2Ljc2NiBDIDQxNy45MTUgNjYuNzg4IDQxNy45ODMgNjYuODAzIDQxOC4wNDIgNjYuODAzIEMgNDE4LjM2NiA2Ni44MDMgNDE4LjY2NyA2Ni43MDYgNDE4Ljk0NSA2Ni41MDMgQyA0MTkuMTE3IDY2LjM3NSA0MTkuMzM1IDY2LjE2NSA0MTkuNTg0IDY1Ljg2NCBDIDQxOS45MDcgNjUuNTExIDQyMC4xMjUgNjUuMjg2IDQyMC4yMjMgNjUuMTg4IEwgNDIxLjQ2MyA2NC4yODYgQyA0MjEuOTY3IDYzLjgzNiA0MjIuMjY4IDYzLjQzNyA0MjIuMzY1IDYzLjA4NCBDIDQyMi40MTggNjIuODM2IDQyMi40MDIgNjIuNTgxIDQyMi4zMjcgNjIuMzMzIEMgNDIyLjIzIDYyLjA1NSA0MjIuMDY0IDYxLjg2NyA0MjEuODM4IDYxLjc2OSBDIDQyMS42ODggNjEuNjk0IDQyMS4zNjUgNjEuNjc5IDQyMC44NjEgNjEuNzMyIEwgNDE5LjgwOSA2MS44ODIgQyA0MTkuNzI3IDYxLjgxNCA0MTkuNjIxIDYxLjc1NCA0MTkuNTA5IDYxLjY5NCBDIDQxOS4xMzMgNjEuNDkxIDQxOC43NTcgNjEuNDU0IDQxOC4zODEgNjEuNTgxIEMgNDE3Ljg1NCA2MS43ODQgNDE3LjM0NCA2Mi4zMSA0MTYuODM5IDYzLjE1OSBDIDQxNi41OTIgNjMuNjEgNDE2LjE0OCA2NC41NzIgNDE1LjUyNSA2Ni4wNTIgTCA0MTUuNDg3IDY2LjA1MiBDIDQxNS4zODkgNjUuOTAyIDQxNS4yODMgNjUuNjU0IDQxNS4xODYgNjUuMzAxIEwgNDE0Ljc3MyA2My43MjMgQyA0MTQuNTcgNjMuMjQ5IDQxNC40NDkgNjIuODQ0IDQxNC4zOTcgNjIuNTIxIEMgNDE0LjI2OSA2Mi4wNyA0MTQuMjMyIDYxLjQ2OSA0MTQuMjg0IDYwLjcxNyBMIDQxNC4yODQgNTYuMDk2IEMgNDE0LjMzNiA1NC41OTQgNDE0LjA4MSA1My41NDIgNDEzLjUzMiA1Mi45NDEgQyA0MTMuODg2IDUyLjcxNSA0MTQuMzA3IDUyLjYxOCA0MTQuODEgNTIuNjQgQyA0MTUuMjYxIDUyLjY0IDQxNS42OTcgNTIuNzUzIDQxNi4xMjYgNTIuOTc4IEMgNDE2Ljc1IDUzLjMzMiA0MTcuMzY2IDUzLjk5MyA0MTcuOTY3IDU0Ljk3IEMgNDE4LjQxOCA1NS42OTggNDE4Ljc0MiA1Ni40MTIgNDE4Ljk0NSA1Ny4xMTEgQyA0MTkuMDIgNTcuMjg0IDQxOS4wNzkgNTcuNTQ3IDQxOS4xMzMgNTcuOSBDIDQxOS4xMzMgNTcuOTQ1IDQxOS4xMzMgNTcuOTgyIDQxOS4xMzMgNTguMDEyIEMgNDE5LjAwNSA1OC4yMzggNDE4Ljg5MiA1OC40MzMgNDE4Ljc5NCA1OC42MTQgQyA0MTguNTkyIDU4Ljk2NyA0MTguNDU2IDU5LjI3NSA0MTguMzgxIDU5LjU1MyBDIDQxOC4zMjkgNTkuOTgxIDQxOC40NDEgNjAuMjg5IDQxOC43MTkgNjAuNDkyIEMgNDE5LjA3MiA2MC43MTcgNDE5LjQzMyA2MC42OTUgNDE5LjgwOSA2MC40MTcgQyA0MjAuMDEyIDYwLjMwNCA0MjAuMjM4IDYwLjA1NiA0MjAuNDg2IDU5LjY2NiBDIDQyMC41OTEgNTkuNjY2IDQyMC42OTYgNTkuNjU4IDQyMC43ODcgNTkuNjI4IEMgNDIxLjE3NyA1OS4yNzUgNDIxLjQxOCA1OC44MjQgNDIxLjUgNTguMjc1IEMgNDIxLjk5NiA1Ny42MjkgNDIyLjQ2MyA1Ny4wNTggNDIyLjg5MSA1Ni41NDcgQyA0MjMuNTY4IDU1Ljc5NiA0MjQuMTg0IDU1LjE1NyA0MjQuNzMzIDU0LjYzMSBDIDQyNC43NzggNTQuNTg2IDQyNC44MTYgNTQuNTQxIDQyNC44NDYgNTQuNDgxIEMgNDI0Ljk5NiA1NC43NjcgNDI1LjE1NCA1NS4xMiA0MjUuMzM0IDU1LjUzMyBDIDQyNS42MTMgNTYuMjA5IDQyNS44NDUgNTYuNjk4IDQyNi4wNDggNTYuOTk4IEMgNDI2LjI5NyA1Ny4zNTEgNDI2LjU5NyA1Ny42MTQgNDI2Ljk1IDU3Ljc4NyBDIDQyNy4zNDkgNTcuOTkgNDI3LjcwMiA1Ny45OTcgNDI4LjAwMyA1Ny44MjUgQyA0MjguNDAxIDU3LjU3NyA0MjguNTgxIDU3LjE2MyA0MjguNTI5IDU2LjU4NSBDIDQyOC40NzYgNTYuMjA5IDQyOC4zMTggNTUuNzgxIDQyOC4wNDEgNTUuMzA4IEMgNDI3LjI2NiA1My44MjcgNDI2LjYzNSA1Mi44MTMgNDI2LjE2MSA1Mi4yNjUgQyA0MjUuNjEzIDUxLjU2NiA0MjQuNDg1IDUwLjUzNyA0MjIuNzc4IDQ5LjE4NCBDIDQyMS4yNTMgNDcuOTU5IDQyMC4xODUgNDYuODc3IDQxOS41ODQgNDUuOTUzIEMgNDE5LjE4NSA0NS4zMyA0MTguODcgNDQuOTM5IDQxOC42NDQgNDQuNzg5IEMgNDE4LjUwOCA0NC42OTggNDE4LjM1OCA0NC42MzEgNDE4LjE5MyA0NC42MDEgQyA0MTguMjQ1IDQ0LjUyNiA0MTguMjkxIDQ0LjQ1IDQxOC4zNDMgNDQuMzc1IEMgNDE4LjQ5NCA0NC4xNSA0MTguOTgyIDQzLjcxNCA0MTkuODA5IDQzLjA2IFogTSA0MTcuNzA0IDUxLjAyNSBDIDQxNy42ODkgNTAuODM3IDQxNy42NjcgNTAuNjEyIDQxNy42MjkgNTAuMzQ5IEMgNDE3LjUzMiA0OS41NjcgNDE3LjU2OSA0OC4yOSA0MTcuNzQyIDQ2LjUxNyBDIDQxOC43MjYgNDguMDk1IDQxOS45ODIgNDkuNTYgNDIxLjUgNTAuOTEyIEMgNDIxLjg3NiA1MS4yMzUgNDIyLjQyNSA1MS43MjQgNDIzLjE1NCA1Mi4zNzcgQyA0MjMuMjUyIDUyLjQ2NyA0MjMuMzQyIDUyLjU1OCA0MjMuNDE3IDUyLjY0IEMgNDIzLjI5NyA1Mi43IDQyMy4xNzcgNTIuNzc2IDQyMy4wNDEgNTIuODY2IEMgNDIyLjcxOCA1My4xNDQgNDIyLjM2NSA1My41MjcgNDIxLjk4OSA1NC4wMyBDIDQyMS42NDMgNTQuNDg5IDQyMS4zMiA1NC45MDkgNDIxLjAxMSA1NS4zMDggQyA0MjAuMjIzIDUzLjMwOSA0MTkuMTE4IDUxLjg4MSA0MTcuNzA0IDUxLjAyNSBaIE0gNDA0Ljg4NyA2NC44MTIgQyA0MDUuMTEzIDY1IDQwNS4zMzEgNjUuMTU4IDQwNS41MjcgNjUuMzAxIEMgNDA1LjA2OCA2Ni4yNjIgNDA0LjkzMiA2Ny4yNjIgNDA1LjExMyA2OC4zMDYgQyA0MDUuMTY2IDY4LjY1OSA0MDUuMjg2IDY4LjkzIDQwNS40ODkgNjkuMTMzIEMgNDA1Ljc2NyA2OS40MTEgNDA2LjIyNiA2OS40OTMgNDA2Ljg4IDY5LjM5NiBDIDQwNy4wODMgNjkuMjY4IDQwNy4xODEgNjkuMDM1IDQwNy4xODEgNjguNjgyIEMgNDA3LjE1OCA2OC4yMzEgNDA3LjE0MyA2Ny45MDggNDA3LjE0MyA2Ny43MDUgQyA0MDcuMTQzIDY3LjIzMiA0MDcuMzY5IDY2LjYxNiA0MDcuODIgNjUuODY0IEMgNDA4LjEyIDY1Ljg4NyA0MDguNDQzIDY2LjAzNyA0MDguNzk2IDY2LjMxNSBDIDQwOS4zMDEgNjYuNjkxIDQwOS42MjMgNjYuOTE2IDQwOS43NzQgNjYuOTkxIEMgNDEwLjE1IDY3LjE2NCA0MTAuNTQ4IDY3LjE5NCA0MTAuOTc3IDY3LjA2NiBDIDQxMS40MDUgNjYuOTM5IDQxMS43NjYgNjYuNzI4IDQxMi4wNjcgNjYuNDI4IEMgNDEyLjM3NSA2Ni4xNzIgNDEyLjY0NSA2NS43ODIgNDEyLjg5MyA2NS4yNjMgTCA0MTMuMjY5IDY2LjQyOCBDIDQxMy40MTkgNjYuOTMxIDQxMy41ODUgNjcuMjc3IDQxMy43NTggNjcuNDggQyA0MTMuOTI0IDY3LjY3NSA0MTQuMjM5IDY3Ljg2MyA0MTQuNjk4IDY4LjA0MyBMIDQxNC4zOTcgNjguODcgQyA0MTMuOTk5IDY5LjgyNCA0MTMuNjk4IDcwLjY3MyA0MTMuNDk1IDcxLjQyNCBDIDQxMy4xOTQgNzEuMzQ5IDQxMi44MzMgNzEuMzEyIDQxMi40MDQgNzEuMzEyIEMgNDA5Ljc5NyA3MS4zNjQgNDA3Ljg3MiA3MS41NTIgNDA2LjYxNyA3MS44NzUgQyA0MDUuMDE2IDcyLjM0OCA0MDMuOTI2IDczLjA5MiA0MDMuMzQ3IDc0LjA5MiBDIDQwMi44OTYgNzQuODEzIDQwMi43MDEgNzUuOTc4IDQwMi43NDYgNzcuNTg1IEMgNDAyLjY3IDc3LjM2IDQwMi41NTggNzcuMTUgNDAyLjQwNyA3Ni45NDcgQyA0MDEuOTc5IDc2LjM2OCA0MDEuMzAyIDc1LjY4NCA0MDAuMzc3IDc0Ljg4MSBDIDM5OS4xODIgNzMuODg5IDM5Ny45NzkgNzIuOTI3IDM5Ni43NjkgNzEuOTg4IEMgMzk2LjUyOSA3MS4wOTQgMzk2LjExNSA3MC4xMTcgMzk1LjUyOCA2OS4wNTcgQyAzOTUuNDAxIDY4LjgzMiAzOTQuODMgNjcuODU1IDM5My44IDY2LjEyNyBMIDM4Ny43NDggNTUuNzIxIEMgMzg3LjA4IDU0Ljc4MiAzODYuMzg4IDUzLjg4IDM4NS42ODIgNTMuMDE2IEMgMzg3LjQ2MyA1NC40OTYgMzg5LjM1OCA1NS44MjYgMzkxLjM1NyA1Ni45OTggQyAzOTEuOTA2IDU3LjMyMSAzOTQuMjE0IDU4LjU1MyAzOTguMjczIDYwLjY4IEMgNDAxLjA3NyA2Mi4xMyA0MDMuMjg3IDYzLjUxMiA0MDQuODg3IDY0LjgxMiBaIE0gNDEyLjU5MiA3NS44NTcgQyA0MTIuNDk1IDc2LjEzNSA0MTIuMjkyIDc2LjM5OCA0MTEuOTkyIDc2LjY0NiBDIDQxMS43MDYgNzYuODk0IDQxMS4yOTIgNzcuMjAyIDQxMC43NTEgNzcuNTg1IEwgNDA2LjEyOCA3OC4wNzQgQyA0MDYuMTI4IDc4LjA3NCA0MDYuMDUzIDc4LjAyMSA0MDYuMDE1IDc3Ljk5OSBDIDQwNS43MTUgNzcuODI2IDQwNS4zMTcgNzcuNzM2IDQwNC44MTIgNzcuNzM2IEMgNDA0LjcxNSA3Ni42NjEgNDA0Ljg3MyA3NS44MzUgNDA1LjMwMSA3NS4yNTYgQyA0MDUuNyA3NC42NTUgNDA2LjQ0MyA3NC4yMTkgNDA3LjUxOSA3My45NDEgQyA0MDkuMDc1IDczLjQ2OCA0MTAuNzM2IDczLjMyNSA0MTIuNTE3IDczLjUyOCBDIDQxMi40NDIgNzMuNzc2IDQxMi40NTggNzQuMTY3IDQxMi41NTUgNzQuNjkzIEMgNDEyLjY4MyA3NS4yMTkgNDEyLjY5IDc1LjYwOSA0MTIuNTkyIDc1Ljg1NyBaIE0gNDQyLjMyMiA0Ni42MjkgQyA0NDIuODQ5IDQ3LjA3MyA0NDMuMjcgNDcuNjIxIDQ0My42MDEgNDguMjgyIEMgNDQ0LjAyOSA0OS4xMDkgNDQ0LjIyNSA0OS45NzMgNDQ0LjIwMiA1MC44NzUgQyA0NDQuMTc5IDUxLjUyOCA0NDQuMDM3IDUyLjMyNSA0NDMuNzg5IDUzLjI3OSBDIDQ0My40MzYgNTQuNjMxIDQ0My4yNCA1NS40MzUgNDQzLjE4NyA1NS42ODMgQyA0NDMuMTQ5IDU2LjAxNCA0NDMuMTQ5IDU2LjI5MiA0NDMuMTg3IDU2LjUxIEMgNDQyLjg5NSA1Ni40NTcgNDQyLjYwOCA1Ni40MDUgNDQyLjMyMiA1Ni4zNiBDIDQ0Mi4xOCA1Ni4zMzcgNDQyLjAzNyA1Ni4zMDcgNDQxLjkxIDU2LjI4NCBDIDQ0Mi4wNjggNTYuMDc0IDQ0Mi4yMDIgNTUuNzk2IDQ0Mi4zMjIgNTUuNDU4IEMgNDQzLjEyNyA1Mi45MTEgNDQzLjEyNyA0OS45NzMgNDQyLjMyMiA0Ni42MjkgWiBNIDQzOC40MTQgNDMuNDc0IEMgNDM4Ljk2MyA0My44MjcgNDM5LjQyOSA0NC42NjEgNDM5LjgwNSA0NS45OTEgQyA0NDAuNDU4IDQ4LjM5NSA0NDAuNzU5IDUwLjIzNiA0NDAuNzA3IDUxLjUxMyBDIDQ0MC42ODQgNTIuMzkyIDQ0MC41MTkgNTMuMzMyIDQ0MC4yMTggNTQuMzMxIEMgNDQwLjAxNSA1NC45MzIgNDM5LjkzMiA1NS40MDUgNDM5Ljk1NSA1NS43NTggQyA0MzkuOTU1IDU1LjgwNCA0MzkuOTU1IDU1Ljg1NiA0MzkuOTU1IDU1LjkwOSBDIDQzOS42MDIgNTUuNzk2IDQzOS4yODYgNTUuNjUzIDQzOS4wMTUgNTUuNDk1IEMgNDM4LjcxNCA1NS4zMjMgNDM4LjQ4OSA1NS4xOTUgNDM4LjMzOCA1NS4xMiBDIDQzOC4wOTEgNTQuOTkyIDQzNy44NTEgNTQuOTQ3IDQzNy42MjUgNTQuOTcgQyA0MzcuNjAyIDU0Ljk3IDQzNy41NzkgNTQuOTcgNDM3LjU1IDU0Ljk3IEMgNDM3LjYzMiA1NC41NzEgNDM3LjY4NSA1NC4yNzEgNDM3LjcgNTQuMDY4IEMgNDM3LjcyMiA1My43OSA0MzcuNzIyIDUzLjM5MiA0MzcuNyA1Mi44NjYgQyA0MzcuNjc3IDUyLjI4NyA0MzcuNjYzIDUxLjg4OSA0MzcuNjYzIDUxLjY2MyBMIDQzNy43IDUwLjYxMiBDIDQzNy43MjIgNTAuMjEzIDQzNy43MTUgNDkuODc1IDQzNy42NjMgNDkuNTk3IEwgNDM3LjM2MiA0OC41MDggTCA0MzcuMjg3IDQ3LjQ1NiBDIDQzNy4xNTggNDYuOTgzIDQzNy4wNzYgNDYuNjE0IDQzNy4wMjQgNDYuMzY2IEMgNDM2Ljk3IDQ2LjE0MSA0MzYuOTMzIDQ1Ljc0MyA0MzYuOTExIDQ1LjE2NCBDIDQzNi45MTEgNDQuNjE2IDQzNi44NTggNDQuMjAzIDQzNi43NiA0My45MjUgQyA0MzYuNjU1IDQzLjY2OSA0MzYuNTE5IDQzLjQwNiA0MzYuMzQ3IDQzLjEzNiBDIDQzNy4yNTYgNDMuMDgzIDQzNy45NDggNDMuMTk2IDQzOC40MTQgNDMuNDc0IFogTSAzNDQuODYzIDI5Ljc5OSBDIDM0NS4xNzIgMjkuMTkgMzQ1LjI2MiAyOC42MzQgMzQ1LjEyNiAyOC4xNDYgTCAzNDUuMTI2IDI4LjEwOCBDIDM0NS44NzggMjcuNjg4IDM0Ni41NDggMjcuMTA5IDM0Ny4xMTkgMjYuMzggQyAzNDcuMTM0IDI2LjM4OCAzNDcuMTQxIDI2LjQwMyAzNDcuMTU3IDI2LjQxOCBMIDM0OS4wMzUgMjguNjM0IEMgMzQ3LjQ0MiAyOC43MjUgMzQ2LjA1MiAyOS4xMTUgMzQ0Ljg2MyAyOS43OTkgWiBNIDM0Mi45NDcgMzIuMjQxIEMgMzQzLjAyMiAzMi4xNzMgMzQzLjA5IDMyLjA5OCAzNDMuMTM1IDMyLjAxNSBDIDM0My4xNjUgMzIuMDkxIDM0My4xODcgMzIuMTUxIDM0My4yMSAzMi4yMDMgQyAzNDMuMjYyIDMyLjM2MSAzNDMuMzY4IDMyLjQ4MSAzNDMuNTExIDMyLjU3OSBDIDM0My40OTUgMzIuNjA5IDM0My40NzMgMzIuNjMyIDM0My40MzYgMzIuNjU0IEMgMzQzLjMxNiAzMi41MTkgMzQzLjE1IDMyLjM4NCAzNDIuOTQ3IDMyLjI0MSBaIE0gMzUwLjA1IDMyLjY5MiBDIDM1MC4xMzMgMzIuODM0IDM1MC4yMjQgMzMuMDA3IDM1MC4zMTMgMzMuMjE4IEMgMzUwLjAwNSAzMy4wMTUgMzQ5Ljc1NyAzMi44MTIgMzQ5LjU2MiAzMi42MTcgQyAzNDkuNjc0IDMyLjU4NiAzNDkuNzg3IDMyLjU0OSAzNDkuOSAzMi41MDQgQyAzNDkuOTQ1IDMyLjU2NCAzNDkuOTk4IDMyLjYyNCAzNTAuMDUgMzIuNjkyIFogTSAzNTAuNTc3IDM4LjU5IEMgMzUwLjYyMiAzOC42NDIgMzUwLjY1OSAzOC42ODggMzUwLjY4OSAzOC43NCBDIDM1MC4yNTQgMzkuMTk4IDM0OS41ODUgMzkuOTQyIDM0OC42OTggNDAuOTU3IEMgMzQ3Ljc3MyA0MS45ODYgMzQ3LjAwNiA0Mi43NiAzNDYuNDA1IDQzLjI4NiBDIDM0NS45MzkgNDMuNjc3IDM0NS4yMjUgNDQuMjYzIDM0NC4yNjMgNDUuMDUyIEMgMzQ0LjEzNCA0NS4wNzQgMzQzLjk5MSA0NS4xMDQgMzQzLjg0OSA0NS4xMjcgTCAzNDMuNTg2IDQ1LjE2NCBDIDM0My42NzYgNDUuMTE5IDM0My43NjYgNDUuMDY3IDM0My44NDkgNDUuMDE0IEMgMzQ0LjgwNCA0NC40MTMgMzQ1LjU0IDQzLjkwMiAzNDYuMDY2IDQzLjQ3NCBDIDM0Ni42MTYgNDMuMDIzIDM0Ny4yNTQgNDIuMzg0IDM0Ny45ODQgNDEuNTU4IEMgMzQ5LjA4OCA0MC4zMDMgMzQ5LjY3NCAzOS42MjcgMzQ5Ljc1IDM5LjUyOSBDIDM1MC4wNzMgMzkuMTgzIDM1MC4zNDQgMzguODY4IDM1MC41NzcgMzguNTkgWiBNIDM0Ni44OTMgMzMuOTMxIEMgMzQ3Ljg0OCAzNC40MzUgMzQ4LjYzNyAzNS4wNTggMzQ5LjI2MSAzNS44MSBDIDM0Ni42MyAzOS44NjcgMzQzLjA5NyA0Mi44NzMgMzM4LjY2MiA0NC44MjYgQyAzMzcuNjcgNDUuMjg0IDMzNy4wMzEgNDUuNjgzIDMzNi43NDUgNDYuMDI4IEMgMzM3LjAwOCA0NS4zIDMzNy4xOTYgNDQuNjM4IDMzNy4zMDkgNDQuMDM3IEMgMzM4LjA4NCA0NC4yNCAzMzguNzkgNDMuNjM5IDMzOS40MTQgNDIuMjM0IEMgMzM5LjYyNCA0MS43NTMgMzM5LjgzNSA0MS4yOCAzNDAuMDUzIDQwLjgwNiBDIDM0MC4yNCA0MC42NjQgMzQwLjQyOCA0MC40NzYgMzQwLjYxNiA0MC4yNDMgQyAzNDEuODcyIDM4LjY2NSAzNDIuODE5IDM3LjUgMzQzLjQ3MyAzNi43NDkgQyAzNDQuNjIzIDM1LjQ0OSAzNDUuNzY2IDM0LjUxIDM0Ni44OTMgMzMuOTMxIFogTSAzNTkuMDMzIDQxLjcwOCBDIDM1OC45NTggNDEuOTQ4IDM1OC44NjggNDIuMTg5IDM1OC43NyA0Mi40MjIgQyAzNTguNDE3IDQxLjgyMSAzNTguMDk0IDQxLjQyMiAzNTcuNzkzIDQxLjIyIEMgMzU3LjU1MyA0MS4wNTQgMzU3LjI3NSA0MC45NTcgMzU2Ljk2NyA0MC45MTkgQyAzNTcuMDEyIDQwLjc3NiAzNTcuMDM0IDQwLjY0MSAzNTcuMDQyIDQwLjUwNiBDIDM1Ny40MTcgNDAuODU5IDM1OC4wNzkgNDEuMjU3IDM1OS4wMzMgNDEuNzA4IFogTSAzNTUuNTM4IDQ2LjMyOSBDIDM1NS44NzYgNDYuMTg2IDM1Ni4xOTkgNDYuMDM2IDM1Ni41MTYgNDUuODc4IEMgMzU2LjI2NyA0Ni4xMjYgMzU2LjAwNCA0Ni4zNTkgMzU1LjcyNiA0Ni41OTIgQyAzNTUuNjg4IDQ2LjUwMiAzNTUuNjI4IDQ2LjQxOSAzNTUuNTM4IDQ2LjMyOSBaIE0gMzUyLjUzMiA1Mi40NTIgQyAzNTIuNTMyIDUyLjQ1MiAzNTIuNTU0IDUyLjUwNSAzNTIuNTY5IDUyLjUyOCBMIDM1OC41ODIgNjQuNjI0IEMgMzU5LjEwOSA2NS43MjkgMzU5LjY1OCA2Ni4zNzUgMzYwLjIzNiA2Ni41NzggQyAzNjAuNTE0IDY2LjY3NiAzNjAuNzg1IDY2LjY5MSAzNjEuMDYzIDY2LjYxNiBDIDM2MS4zNDEgNjYuNTYzIDM2MS41MzcgNjYuNDI4IDM2MS42NjQgNjYuMjAyIEMgMzYxLjg2OCA2NS45MDIgMzYxLjkxMiA2NS41MDQgMzYxLjgxNCA2NSBDIDM2MS42MTIgNjMuMzcgMzYwLjk2NSA2MS40NTQgMzU5Ljg2IDU5LjI1MiBDIDM1OC41ODIgNTYuODI1IDM1Ny42NjUgNTQuOTg1IDM1Ny4xMTYgNTMuNzMgQyAzNTYuNjQzIDUyLjYwMyAzNTYuMTU0IDUxLjkxMSAzNTUuNjUxIDUxLjY2MyBDIDM1NS4xOTIgNTEuNTEzIDM1NC44MzEgNTEuMzcxIDM1NC41NjEgNTEuMjUgQyAzNTQuNzExIDUxLjE3NSAzNTQuODQ3IDUxLjEgMzU0Ljk3NCA1MS4wMjUgQyAzNTUuMjY4IDUwLjg0NCAzNTUuNTYgNTAuNjU3IDM1NS44MzkgNTAuNDYxIEMgMzU2LjAzNCA1MC43OTkgMzU2LjI3NCA1MS4xMzggMzU2LjU1MyA1MS40NzYgQyAzNTcuMTc3IDUyLjE3NCAzNTcuNzcxIDUyLjcxNSAzNTguMzE5IDUzLjA5MSBDIDM1OS4yOTcgNTMuNzE1IDM1OS44MDcgNTQuMDUzIDM1OS44NiA1NC4xMDUgQyAzNjAuMTYxIDU0LjM4MyAzNjAuNDg0IDU0Ljc1OSAzNjAuODM4IDU1LjIzMiBDIDM2MS41MTQgNTYuMjA5IDM2Mi4wNTYgNTcuMDU4IDM2Mi40NTMgNTcuNzg3IEMgMzYyLjg1MiA1OC40MTEgMzYzLjE4MiA1OS4wNDIgMzYzLjQzMSA1OS42NjYgQyAzNjMuNTU4IDYwLjAxOSAzNjMuNzMyIDYwLjYyNyAzNjMuOTU3IDYxLjUwNiBMIDM2NC4yNTggNjIuNzQ2IEMgMzY0LjQ4NCA2My41NSAzNjQuODA2IDY0LjQ1OSAzNjUuMjM1IDY1LjQ4OSBMIDM2Ni4wNjIgNjcuMjkyIEMgMzY2LjQ5MSA2OC4wOTYgMzY2Ljg1MSA2OC42MjIgMzY3LjE1MiA2OC44NyBDIDM2Ny43MyA2OS4zOTYgMzY4LjMzMiA2OS41NjEgMzY4Ljk1NiA2OS4zNTggQyAzNjkuMTc0IDY5LjI5IDM2OS4zNjIgNjkuMTc4IDM2OS41MiA2OS4wMiBDIDM2OS41MiA2OS4wNDIgMzY5LjUyIDY5LjA3MyAzNjkuNTIgNjkuMDk1IEMgMzY5LjU0MiA2OS41OTggMzY5LjM5MiA3MC4wODcgMzY5LjA2OSA3MC41NiBDIDM2OC43NjggNzEuMDExIDM2OC4zNjkgNzEuMzcyIDM2Ny44NjYgNzEuNjUgQyAzNjcuMTM3IDcyLjAyNSAzNjYuMTE1IDcyLjIzNiAzNjQuNzg0IDcyLjI4OCBDIDM2MS45OCA3Mi40MzkgMzU4LjE1NCA3Mi4xMDEgMzUzLjMyIDcxLjI3NCBDIDM1MS44MzkgNzEuMDI2IDM1MC43NzkgNzAuODAxIDM1MC4xMjYgNzAuNTk4IEMgMzQ5LjYyMiA3MC40NyAzNDguOTQ1IDcwLjI0NSAzNDguMDk2IDY5LjkyMiBDIDM0Ny4xMTkgNjkuNTY4IDM0Ni40NDIgNjkuMzM1IDM0Ni4wNjYgNjkuMjA4IEMgMzQ1LjM2OCA2OS4wMDUgMzQ0LjM3NSA2OC43OTUgMzQzLjA5NyA2OC41NjkgTCAzNDEuNDgxIDY4LjIzMSBDIDM0MS40ODEgNjguMjMxIDM0MS40ODEgNjguMTg2IDM0MS40ODEgNjguMTU2IEMgMzQxLjQ1OSA2Ny42NTIgMzQxLjEyOCA2Ny4wMTQgMzQwLjUwMyA2Ni4yNCBDIDMzOS43NzQgNjUuMjg2IDMzOC45MjUgNjQuMzA5IDMzNy45NDggNjMuMzEgTCAzMzcuMTk2IDYyLjU1OCBDIDMzNS40NjggNjAuOTggMzM0LjUyOCA2MC4xMDEgMzM0LjM3NyA1OS45MjggQyAzMzQuMjI3IDU5Ljc3OCAzMzMuNzk5IDU5LjI5NyAzMzMuMDk5IDU4LjUwMSBDIDMzMy41ODEgNTguNTc2IDMzNC4xMjIgNTguNjE0IDMzNC43MTYgNTguNjE0IEMgMzM2LjY5MyA1OC42NjYgMzM4LjE3NCA1OC41NzYgMzM5LjE1MSA1OC4zNTEgQyAzMzkuNDE0IDU4LjI4MyAzMzkuNzUyIDU4LjE3IDM0MC4xNjUgNTguMDEyIEMgMzQwLjM1MyA1OC4wOCAzNDAuNTE5IDU4LjE1NSAzNDAuNjU0IDU4LjIzOCBDIDM0MC44NzkgNTguMzY2IDM0MS4yMDMgNTguNTc2IDM0MS42MzEgNTguODc3IEMgMzQyLjAzIDU5LjA0OSAzNDIuNzIxIDU5LjA4NyAzNDMuNjk5IDU4Ljk4OSBDIDM0OC4wNTkgNTguMzg4IDM1MS4yNjggNTcuNzcyIDM1My4zMiA1Ny4xNDggQyAzNTMuOTIyIDU2Ljk5OCAzNTQuMjQ1IDU2Ljc1IDM1NC4yOTcgNTYuMzk3IEMgMzU0LjMyIDU2LjIyNCAzNTQuMjc1IDU2LjAzNiAzNTQuMTQ3IDU1LjgzNCBDIDM1NC4wMiA1NS42NjEgMzUzLjg2MiA1NS41NDggMzUzLjY1OCA1NS40OTUgQyAzNTMuNDExIDU1LjQyIDM1My4wMDUgNTUuNDM1IDM1Mi40NTYgNTUuNTMzIEwgMzQ4LjMyMiA1Ni4zMjIgQyAzNDkuNjc0IDU1LjM0NSAzNTAuOTM4IDU0LjIzMyAzNTIuMTE4IDUyLjk3OCBDIDM1Mi4yOSA1Mi43OTEgMzUyLjQyNiA1Mi42MTggMzUyLjUzMiA1Mi40NTIgWiBNIDM0OC4wNTkgNTQuNDgxIEMgMzQ3LjcxMyA1NC44MDQgMzQ3LjQyIDU1LjA1MiAzNDcuMTk0IDU1LjIzMiBDIDM0NS42OSA1Ni40MTIgMzQ0LjE3MiA1Ny4wNTggMzQyLjY0NiA1Ny4xODYgQyAzNDIuNDk2IDU3LjE5MyAzNDIuMzIzIDU3LjE5MyAzNDIuMTIgNTcuMTg2IEwgMzQ4LjA1OSA1NC40ODEgWiBNIDM0MC40MjggNDcuNTY5IEMgMzM5Ljc4MiA0Ny42NjYgMzM5LjE4MSA0Ny43NDEgMzM4LjYyNSA0Ny43OTQgTCAzMzkuMzAxIDQ3LjQxOCBDIDMzOS40MjkgNDcuMzQzIDMzOS43MjIgNDcuMjA4IDM0MC4xNjUgNDcuMDA1IEMgMzQwLjE3MyA0Ny4wNTggMzQwLjE4OCA0Ny4xMSAzNDAuMjAzIDQ3LjE1NSBDIDM0MC4yNTYgNDcuMzEzIDM0MC4zMzEgNDcuNDQ4IDM0MC40MjggNDcuNTY5IFogTSAzMzQuMjY1IDQ4LjEzMiBDIDMzNC4zNCA0Ny44MzIgMzM0LjM5OSA0Ny41MzEgMzM0LjQ1MyA0Ny4yMyBDIDMzNC42NDggNDcuMzI4IDMzNC44NDMgNDcuMzg4IDMzNS4wNTQgNDcuNDE4IEMgMzM1LjQ1MiA0Ny41MTYgMzM1Ljc5IDQ3LjQ1NiAzMzYuMDY4IDQ3LjIzIEMgMzM2LjE5NyA0Ny4xMjUgMzM2LjMwOSA0Ni45NzUgMzM2LjQwNyA0Ni43OCBDIDMzNi4zOTkgNDYuOTIyIDMzNi4zOTkgNDcuMDU4IDMzNi40MDcgNDcuMTkzIEMgMzM2LjQzIDQ3LjU2MSAzMzYuNTU3IDQ3LjgzOSAzMzYuNzgzIDQ4LjAxOSBDIDMzNi40NjcgNDguMDQ5IDMzNi4xODEgNDguMDcyIDMzNS45MTggNDguMDk1IEMgMzM1LjMzOSA0OC4xMzIgMzM0Ljc5MSA0OC4xNDcgMzM0LjI2NSA0OC4xMzIgWiBNIDMzNC4yNjUgNTUuODcxIEMgMzM0LjI2NSA1NS44NzEgMzM0LjMxNyA1NS44NzEgMzM0LjM0IDU1Ljg3MSBDIDMzNC44NjYgNTUuNzQzIDMzNS4yOTQgNTUuNzA2IDMzNS42MTggNTUuNzU4IEMgMzM1LjYxOCA1NS44MDQgMzM1LjYxOCA1NS44NDEgMzM1LjYxOCA1NS44NzEgQyAzMzUuNDMgNTUuODg2IDMzNS4yMjcgNTUuOTAxIDMzNS4wMTcgNTUuOTA5IEMgMzM0Ljc2MSA1NS45MDkgMzM0LjUwNSA1NS44OTQgMzM0LjI2NSA1NS44NzEgWiBNIDMzMS4xNDUgNTQuMjU2IEMgMzMxLjE0NSA1NC4yNTYgMzMxLjEzIDU0LjMzMSAzMzEuMTA4IDU0LjM2OCBDIDMzMS4wMSA1NC4yNzEgMzMwLjg5NyA1NC4xNTggMzMwLjc2OSA1NC4wMyBDIDMzMC45MTIgNTQuMTEzIDMzMS4wMzMgNTQuMTg4IDMzMS4xNDUgNTQuMjU2IFogTSAzMzEuNTk2IDc1LjY2OSBDIDMzMS4zODYgNzUuNjkyIDMzMS4xOTggNzUuNzY3IDMzMS4wMzMgNzUuODk1IEMgMzMxLjAwMiA3NS45NTUgMzMwLjk2NSA3Ni4wMjMgMzMwLjkyIDc2LjA4MyBDIDMzMC43NDYgNzYuMzMxIDMzMC42OTQgNzYuNTg2IDMzMC43NjkgNzYuODM0IEMgMzMwLjc5MSA3Ni45ODQgMzMwLjkwNCA3Ny4xODcgMzMxLjEwOCA3Ny40MzUgQyAzMzEuMjggNzcuNjgzIDMzMS4zODYgNzcuODg2IDMzMS40MDkgNzguMDM2IEwgMzI4Ljk2NSA3OC4yOTkgQyAzMjkuNjY1IDc3LjM5OCAzMzAuMzQ5IDc2LjU5NCAzMzEuMDMzIDc1Ljg5NSBDIDMzMS41NTkgNzUuNDE0IDMzMi4wNzcgNzQuOTcxIDMzMi41NzMgNzQuNTggQyAzMzIuNDY4IDc0LjkwMyAzMzIuMzQgNzUuMjQxIDMzMi4xOTcgNzUuNTk0IEMgMzMyLjE2OCA3NS42NzcgMzMyLjE0NSA3NS43NjcgMzMyLjEyMiA3NS44NTcgQyAzMzEuOTI3IDc1Ljc2NyAzMzEuNzU0IDc1LjcgMzMxLjU5NiA3NS42NjkgWiBNIDM3Ny43MTQgNDguMTMyIEMgMzgwLjY2OCA1MC40ODQgMzgzLjIyMyA1My4xNDQgMzg1LjM4MSA1Ni4wOTYgQyAzODYuODMyIDU4LjAyOCAzODcuODQ3IDU5LjgzMSAzODguNDI1IDYxLjUwNiBDIDM4OC4wNDkgNjAuNzU1IDM4Ny4yIDU5LjcxOCAzODUuODcgNTguMzg4IEMgMzgyLjgxIDU1LjI1NSAzODAuMDk3IDUxLjgzNiAzNzcuNzE0IDQ4LjEzMiBaIE0gMzc0LjAzIDQ3LjA4IEMgMzc0LjE1OCA0Ny4zNjYgMzc0LjI3OCA0Ny42MTQgMzc0LjQwNSA0Ny44MzIgQyAzNzQuNzA2IDQ4LjM1OCAzNzUuNDA2IDQ5LjE5OSAzNzYuNTExIDUwLjM0OSBDIDM3Ny40ODggNTEuMzc4IDM3OC4xMjcgNTIuMjUgMzc4LjQyNyA1Mi45NzggTCAzNzUuODM0IDUwLjQ5OSBDIDM3NC42NTQgNDkuMzcyIDM3My44OTUgNDguNDQ4IDM3My41NDIgNDcuNzE5IEMgMzczLjQ3NCA0Ny41NjEgMzczLjQxMyA0Ny40MjYgMzczLjM1NCA0Ny4zMDYgQyAzNzMuNTk0IDQ3LjIzIDM3My44MiA0Ny4xNTUgMzc0LjAzIDQ3LjA4IFogTSAzOTAuMTE3IDg1LjgxMyBDIDM4OS41NiA4NS41MjcgMzg5LjA1IDg1LjI3OSAzODguNTc2IDg1LjA2MSBMIDM5NS45MDQgODcuMDUzIEMgMzk2LjQ5OSA4Ny4yMSAzOTcuMDYyIDg3LjM2MSAzOTcuNTk2IDg3LjUwMyBDIDM5Ny40NiA4Ny41OTQgMzk3LjMzMyA4Ny43MDYgMzk3LjIyIDg3Ljg0MSBDIDM5Ni45NDIgODguMTY1IDM5Ni44MjIgODguNTE4IDM5Ni44NDQgODguODkzIEMgMzk2LjY0MiA4OC40MDUgMzk2LjQgODguMDIyIDM5Ni4xMyA4Ny43MjkgTCAzOTYuMTY4IDg3LjY1NCBDIDM5Ni4wOTIgODcuNjE2IDM5Ni4wMDMgODcuNTc5IDM5NS45MDQgODcuNTQxIEMgMzk1LjY0MSA4Ny4zMDggMzk1LjM0MSA4Ny4xNzMgMzk1LjAwMyA4Ny4xMjggQyAzOTQuODUzIDg3LjExMyAzOTQuNzAyIDg3LjExMyAzOTQuNTUyIDg3LjEyOCBDIDM5NC41MzYgODcuMTI4IDM5NC41MTQgODcuMTI4IDM5NC40NzcgODcuMTI4IEMgMzkzLjM0OSA4Ni45MjUgMzkyLjc0NyA4Ni44MTIgMzkyLjY3MiA4Ni43OSBDIDM5Mi4xNjkgODYuNjkyIDM5MS4zMTkgODYuMzYxIDM5MC4xMTcgODUuODEzIFogTSAzNzkuMjkyIDgzLjI5NiBDIDM3OS41NCA4My4xOTEgMzc5LjcyOCA4My4wNCAzNzkuODU2IDgyLjg0NSBDIDM4MC4zNjcgODIuOTU4IDM4MC45MDEgODMuMDcgMzgxLjQ3MiA4My4xODMgQyAzODEuMzU5IDgzLjIyOCAzODEuMjYxIDgzLjI3MyAzODEuMTcxIDgzLjMzMyBDIDM4MC44OTQgODMuNTU5IDM4MC43NTggODQuMDEgMzgwLjc1OCA4NC42ODYgQyAzODAuMTcyIDg0LjQ4MyAzNzkuNTcgODQuMzMzIDM3OC45NTMgODQuMjM1IEMgMzc4Ljk1MyA4NC4yMTIgMzc4Ljk1MyA4NC4xOSAzNzguOTUzIDg0LjE2IEMgMzc4Ljg3OCA4My44MDcgMzc4LjcwNiA4My41NDQgMzc4LjQyNyA4My4zNzEgQyAzNzguNzA2IDgzLjQ0NiAzNzguOTkxIDgzLjQyMyAzNzkuMjkyIDgzLjI5NiBaIE0gMzc3LjkwMiA4NS44ODggQyAzNzguMDkgODUuODEzIDM3OC4yNTUgODUuNzE1IDM3OC4zOSA4NS41ODcgQyAzNzguNjk4IDg1LjY0IDM3OS4wMjEgODUuNzE1IDM3OS4zNjcgODUuODEzIEMgMzc5LjY0NiA4NS44ODggMzgwLjM0NCA4Ni4xMjggMzgxLjQ3MiA4Ni41MjcgQyAzODEuNjQ1IDg2LjU3OSAzODIuODAzIDg2LjkxNyAzODQuOTMgODcuNTQxIEwgMzkyLjEwOCA4OS40NTcgQyAzOTIuMDU2IDg5LjU0NyAzOTIuMDExIDg5LjY1MiAzOTEuOTU4IDg5Ljc1NyBDIDM5MS43ODYgOTAuMjA4IDM5MS43NDggOTAuOTIyIDM5MS44NDUgOTEuODk5IEMgMzkxLjQ5MiA5Mi4yMjIgMzkxLjA0MSA5Mi4yMTQgMzkwLjQ5MyA5MS44NjEgQyAzODkuOTQ0IDkxLjQ4NiAzODkuNSA5MS4yNDUgMzg5LjE3NyA5MS4xNDcgQyAzODguOTUxIDkxLjA3MiAzODguNzExIDkxLjA4NyAzODguNDYzIDkxLjE4NSBDIDM4OC4xODUgOTEuMjYgMzg4LjAyNyA5MS40MSAzODcuOTc0IDkxLjYzNiBDIDM4Ny45MjIgOTEuODYxIDM4OC4wMjcgOTIuMTQ2IDM4OC4yNzUgOTIuNDk5IEMgMzg4LjQ5MyA5Mi43NzggMzg4Ljc3MSA5My4wMDQgMzg5LjEwMiA5My4xNzYgQyAzODUuNDMzIDkyLjQ3NyAzODMuMDU4IDkxLjk1OCAzODEuOTYxIDkxLjYzNiBDIDM4MS42MDcgOTEuNTM4IDM3OS41NyA5MC44MDkgMzc1LjgzNCA4OS40NTcgQyAzNzUuMTggODkuMjI0IDM3NC41NDkgODkuMDE0IDM3My45NTUgODguODE4IEwgMzczLjk5MyA4OC43ODEgQyAzNzQuMTIgODguNjUzIDM3NC4xOTYgODguNTAzIDM3NC4yMTggODguMzMgQyAzNzQuMjE4IDg4LjEyNyAzNzQuMTY1IDg3Ljk3NyAzNzQuMDY4IDg3Ljg3OSBDIDM3NC40MjEgODcuNzg5IDM3NC43MDYgODcuNTc5IDM3NC45MzIgODcuMjQgQyAzNzUuMDgyIDg3LjMzMSAzNzUuMjcgODcuNDIxIDM3NS40OTYgODcuNTAzIEwgMzgxLjAyMSA4OS40MTkgQyAzODIuNjc1IDg5Ljk0NSAzODMuNzUgOTAuMjY4IDM4NC4yNTMgOTAuMzk2IEMgMzg1LjQzMyA5MC42NzQgMzg3LjQyNiA5MC44ODQgMzkwLjIzIDkxLjAzNSBDIDM5MC44NTMgOTEuMDg3IDM5MS4yMjIgOTAuOTIyIDM5MS4zMTkgOTAuNTQ2IEMgMzkxLjM5NCA5MC4yOTggMzkxLjI5NyA5MC4wODEgMzkxLjAxOSA4OS45MDggQyAzOTAuOTIxIDg5LjgzMyAzOTAuNjgxIDg5Ljc0MiAzOTAuMzA1IDg5LjY0NSBDIDM4Ni45NDQgODkuMTE5IDM4NC40NDEgODguNjY4IDM4Mi43ODcgODguMjkyIEMgMzgxLjQzNSA4OC4wMTQgMzgwLjQwNSA4Ny42MzkgMzc5LjcwNSA4Ny4xNjUgQyAzNzkuMDE0IDg2LjU5NCAzNzguNDEyIDg2LjE2NiAzNzcuOTAyIDg1Ljg4OCBaIE0gMzc1LjI3IDg2LjE4OSBMIDM3NS40OTYgODYuMTUxIEwgMzc1LjQ5NiA4Ni4wNzYgQyAzNzUuNTcxIDg2LjA3NiAzNzUuNjY5IDg2LjE2NiAzNzUuNzk2IDg2LjMzOSBMIDM3Ni4xMzUgODYuNzE0IEMgMzc1LjgxMiA4Ni43MTQgMzc1LjUxMSA4Ni42NzcgMzc1LjIzMyA4Ni42MDIgQyAzNzUuMjcgODYuNDY3IDM3NS4yODYgODYuMzMxIDM3NS4yNyA4Ni4xODkgWiBNIDM2NS4wMSA5MC4wOTYgQyAzNjYuNTg4IDkwLjE0OCAzNjcuODI4IDkwLjIyMyAzNjguNzMxIDkwLjMyMSBDIDM3MC41ODcgOTAuNTY5IDM3Mi45NCA5MS4yMDggMzc1Ljc5NiA5Mi4yMzcgQyAzNzkuNDA1IDkzLjUzNiAzODEuNzEyIDk0LjMxOSAzODIuNzEyIDk0LjU2NiBDIDM4My4zNjcgOTQuNzM5IDM4NS43NTcgOTUuMjI3IDM4OS44OTEgOTYuMDMxIEMgMzkxLjE3NyA5Ni4yODYgMzkyLjM0MSA5Ni41NjUgMzkzLjM4NyA5Ni44NTggQyAzOTMuMTA5IDk3LjMzOSAzOTIuODQ2IDk3Ljg2NCAzOTIuNTk3IDk4LjQzNiBDIDM5Mi4wMTkgOTkuNzM2IDM5MS41MDcgMTAxLjQ1NiAzOTEuMDU3IDEwMy41ODIgQyAzOTAuMzggMTA2LjU2NSAzODkuNzQxIDEwOS41NDkgMzg5LjEzOSAxMTIuNTI0IEMgMzg3Ljg2OSAxMTIuMjgzIDM4Ni41NzYgMTEyLjIzMSAzODUuMjY4IDExMi4zNzQgQyAzODQuMjE2IDExMi40NDkgMzgzLjMyOSAxMTIuNjczIDM4Mi41OTkgMTEzLjA0OSBDIDM4MS41NDcgMTEzLjU1MyAzODAuNzA2IDExNC4zMTIgMzgwLjA4MSAxMTUuMzQyIEMgMzgwLjA1OSAxMTUuMzg3IDM4MC4wMjkgMTE1LjQyNCAzODAuMDA2IDExNS40NTQgQyAzNzQuMzMgMTEwLjQ1IDM2OC43NjggMTA1LjE3NSAzNjMuMzE4IDk5LjYzOCBDIDM2MS41MzcgOTcuODU3IDM2MC4zNDkgOTYuNzMgMzU5Ljc0OCA5Ni4yNTcgQyAzNTguNzcgOTUuNDgzIDM1Ny4yODkgOTQuNTQzIDM1NS4zMTMgOTMuNDM5IEMgMzUzLjA1NyA5Mi4xMzkgMzUxLjMxMyA5MS4yNiAzNTAuMDg4IDkwLjgwOSBDIDM0Ny4zMDcgODkuNzU3IDM0NC4zOSA4OS4zNjcgMzQxLjMzIDg5LjY0NSBDIDM0MC4xMDUgODkuNzk1IDMzOS4xNTEgOTAuMDczIDMzOC40NzQgOTAuNDcxIEMgMzM3LjcyMiA5MC45NDUgMzM2LjkxOCA5MS45MTQgMzM2LjA2OCA5My4zNjQgQyAzMzUuNzY4IDkzLjg5IDMzNS42NzggOTQuMzAzIDMzNS44MDYgOTQuNjA0IEMgMzM1LjkzMyA5NC44ODIgMzM2LjE5NyA5NS4wMDIgMzM2LjU5NSA5NC45OCBDIDMzNi45NzEgOTQuOTU3IDMzNy4yODcgOTQuODE0IDMzNy41MzQgOTQuNTY2IEMgMzM3LjY4NSA5NC40MTYgMzM3Ljg3MyA5NC4xMzEgMzM4LjA5OCA5My43MDIgQyAzMzguMzAxIDkzLjMwNCAzMzguNDg5IDkzLjAxMSAzMzguNjYyIDkyLjgzOCBDIDMzOS4xNjYgOTIuMjg5IDM0MC4xMTMgOTEuOTg5IDM0MS41MTggOTEuOTM2IEMgMzQ0LjQyOCA5MS44MzggMzQ2Ljc2NiA5Mi4xMjQgMzQ4LjU0OCA5Mi44IEMgMzQ5LjM3NCA5My4xMDEgMzUwLjcyNyA5My43OTIgMzUyLjYwNyA5NC44NjcgQyAzNTUuNjY2IDk2LjcyMyAzNTcuODE2IDk4LjE1OCAzNTkuMDcxIDk5LjE4NyBDIDM1OS45OTUgOTkuOTM4IDM2MS4wMjYgMTAwLjg5MyAzNjIuMTUzIDEwMi4wNDIgQyAzNjIuODI5IDEwMi42OTYgMzYzLjgwNyAxMDMuNjk1IDM2NS4wODUgMTA1LjA0NyBDIDM2Ny4yNjUgMTA3LjMwMSAzNzAuMzQ2IDExMC4yNTUgMzc0LjMzIDExMy45MTQgTCAzNzkuMjE3IDExOC40MjIgQyAzNzkuMjE3IDExOC40OTcgMzc5LjIxNyAxMTguNTU3IDM3OS4yMTcgMTE4LjYxIEMgMzc5LjIxNyAxMTguOTkzIDM3OS4yNTQgMTE5LjMzMSAzNzkuMzI5IDExOS42MjQgQyAzNzguNTExIDExOS44OCAzNzcuNjYxIDEyMC4xNDMgMzc2Ljc3NCAxMjAuNDEzIEMgMzc2LjU0OCAxMjAuMjc3IDM3Ni4yNjIgMTIwLjE0MyAzNzUuOTA5IDEyMCBDIDM3My4wMyAxMTguNjk5IDM3MC44MzUgMTE3LjgyMSAzNjkuMzMyIDExNy4zNyBDIDM2OS4wMDkgMTE3LjI3MiAzNjcuODA2IDExNi45NzIgMzY1LjcyMyAxMTYuNDY5IEMgMzY0LjI3MyAxMTYuMTE2IDM2My4xMDggMTE1Ljc0IDM2Mi4yMjggMTE1LjM0MiBDIDM2MS42OCAxMTUuMDkzIDM2MC44OTcgMTE0LjY2NSAzNTkuODk4IDExNC4wNjQgQyAzNTcuNDE3IDExMi42MzcgMzU0Ljg2MSAxMTEuMzU5IDM1Mi4yMzEgMTEwLjIzMiBDIDM1MS43MjYgMTEwLjAyOSAzNTEuMzI5IDEwOS45NTQgMzUxLjAyOCAxMTAuMDA2IEMgMzUwLjUwMSAxMTAuMTM1IDM1MC4xODYgMTEwLjUxIDM1MC4wODggMTExLjEzNCBDIDM1MC4wMzYgMTExLjU2MiAzNTAuMTI2IDExMi4wNzMgMzUwLjM1MSAxMTIuNjczIEMgMzUxLjAyOCAxMTQuNDc3IDM1Mi41ODQgMTE2LjM1NiAzNTUuMDEyIDExOC4zMDkgQyAzNTYuMTQgMTE5LjE1OCAzNTYuOTQ0IDExOS43MjIgMzU3LjQxNyAxMjAgQyAzNTguMjY3IDEyMC41MDMgMzU5LjIyMSAxMjAuOTU0IDM2MC4yNzQgMTIxLjM1MiBDIDM2MS44NzUgMTIxLjk1NCAzNjMuMzMzIDEyMi4zMTQgMzY0LjYzNCAxMjIuNDQxIEMgMzY2LjU2NiAxMjIuNjY3IDM2OC40NTIgMTIyLjUxNyAzNzAuMzA5IDEyMS45OTEgQyAzNzAuOTg1IDEyMS44MTggMzcxLjQ3NCAxMjEuNTc4IDM3MS43NzUgMTIxLjI3NyBDIDM3MS4wOTggMTIwLjY1MyAzNzAuMzI0IDEyMC4zMzggMzY5LjQ0NSAxMjAuMzM4IEMgMzY5LjE5NiAxMjAuMzE1IDM2OC42MDIgMTIwLjM2IDM2Ny42NzggMTIwLjQ4OCBDIDM2Ny4wMDEgMTIwLjU0MSAzNjYuMDA5IDEyMC40NjUgMzY0LjcwOSAxMjAuMjYzIEMgMzYzLjAwMyAxMjAuMDE0IDM2MS43NTUgMTE5Ljc1MiAzNjAuOTUxIDExOS40NzMgQyAzNjAuMDcgMTE5LjIyNiAzNTkuMTIzIDExOC43NzUgMzU4LjA5NCAxMTguMTIxIEMgMzU1LjkzNiAxMTYuNzY4IDM1NC4xNjMgMTE1LjA1NiAzNTIuNzU3IDExMi45NzQgQyAzNTQuNDEgMTEzLjU5OCAzNTYuMzEyIDExNC41MyAzNTguNDY5IDExNS43NTQgQyAzNTkuNzI1IDExNi40NTMgMzYwLjU4OSAxMTYuOTE5IDM2MS4wNjMgMTE3LjE0NCBDIDM2Mi4wNjMgMTE3LjYxNyAzNjMuNDE2IDExOC4wNjEgMzY1LjEyMyAxMTguNDU5IEMgMzY3LjQgMTE5LjAzOCAzNjguNzgzIDExOS4zOTggMzY5LjI1NyAxMTkuNTQ5IEMgMzY5LjgzNiAxMTkuNzIyIDM3MC44NzMgMTIwLjExMiAzNzIuMzc2IDEyMC43MTQgQyAzNzIuOTAzIDEyMC45MjQgMzczLjM3NiAxMjEuMTI3IDM3My44MDUgMTIxLjMxNCBDIDM2NS41NTEgMTIzLjc5NCAzNTguNTIzIDEyNS44MzggMzUyLjcxOSAxMjcuNDM5IEMgMzUyLjY0NCAxMjcuMDc3IDM1Mi4zMzUgMTI2LjY2NCAzNTEuNzggMTI2LjE5OCBDIDM0OS41OTkgMTI0LjMyIDM0Ny40NzkgMTIyLjM1MiAzNDUuNDI3IDEyMC4zIEMgMzQzLjk3NyAxMTguNzk4IDM0Mi45MjQgMTE3LjU1OCAzNDIuMjcgMTE2LjU4MSBDIDM0MS45MTcgMTE2LjAzMiAzNDEuNDY2IDExNS4xNzYgMzQwLjkxNyAxMTQuMDI2IEwgMzM3Ljk4NiAxMDguMTI4IEMgMzM2LjE4MSAxMDQuMzk0IDMzNC41OCAxMDEuNjY3IDMzMy4xNzQgOTkuOTM4IEMgMzMyLjcyMyA5OS4zOSAzMzIuMjk1IDk5LjEyNyAzMzEuODk2IDk5LjE1IEMgMzMxLjU5NiA5OS4xNzIgMzMxLjM1NSA5OS4zMzcgMzMxLjE4MyA5OS42MzggQyAzMzEuMTMgOTkuNzEzIDMzMS4wNzcgOTkuNzg4IDMzMS4wMzMgOTkuODYzIEMgMzMwLjU1MSA5OS41NyAzMzAuMDU1IDk5LjI5MiAzMjkuNTI5IDk5LjAzNyBDIDMyOS43NCA5OS4xMjcgMzI5Ljk2NCA5OS4xNzIgMzMwLjIwNiA5OS4xODcgQyAzMzAuNzU0IDk5LjI0IDMzMS4xODMgOTkuMDc1IDMzMS40ODQgOTguNjk5IEMgMzMxLjcyNCA5OC4zOTEgMzMxLjgyMSA5Ny45OTMgMzMxLjc4NCA5Ny40OTcgQyAzMzEuNzg0IDk3LjQ3NCAzMzEuNzg0IDk3LjQ1MiAzMzEuNzg0IDk3LjQyMSBDIDMzMS43ODQgOTcuMTIxIDMzMS42OTQgOTYuNjQ4IDMzMS41MjEgOTUuOTk0IEMgMzMxLjM1NSA5NS4zNCAzMzEuMjU4IDk0LjY2MyAzMzEuMjIxIDkzLjk2NSBDIDMzMS41MTMgOTMuODQ1IDMzMS43MzkgOTMuNjU3IDMzMS44OTYgOTMuNDAyIEMgMzMyLjE3NSA5Mi44OTggMzMyLjI1OCA5Mi4xNDYgMzMyLjE1OSA5MS4xNDcgQyAzMzIuMTA3IDkwLjUwOSAzMzIuMDcgODkuOTA4IDMzMi4wNDcgODkuMzQ0IEMgMzMyLjEgODkuMjE2IDMzMi4xMjIgODkuMDgxIDMzMi4xMjIgODguOTMxIEMgMzMyLjE1MiA4OC43MTMgMzMyLjExNSA4OC41MSAzMzIuMDA5IDg4LjMzIEMgMzMyLjAxNyA4OC4xMzQgMzMyLjAxNyA4Ny45MzIgMzMyLjAwOSA4Ny43MjkgQyAzMzIuMTU5IDg3LjY2MSAzMzIuMjggODcuNTg2IDMzMi4zODUgODcuNTAzIEMgMzMyLjQwOCA4Ny41MDMgMzMyLjQzOCA4Ny41MDMgMzMyLjQ2IDg3LjUwMyBDIDMzNC4zMjQgODcuNDgxIDMzNy4wOTkgODcuMzc2IDM0MC43NjcgODcuMjAzIEMgMzQxLjA2IDg3LjUyNiAzNDEuNjI0IDg3LjY5MSAzNDIuNDU4IDg3LjY5MSBDIDM0NS43NjYgODcuNzA2IDM0OC41MzkgODcuNzE0IDM1MC43NjUgODcuNzI5IEMgMzUxLjg3NyA4Ny45NjIgMzUzLjQ3IDg4LjMyMiAzNTUuNTM4IDg4LjgxOCBDIDM1Ny45NDMgODkuMzk3IDM1OS44NDUgODkuNzU3IDM2MS4yNTEgODkuOTA4IEMgMzYxLjk4IDg5Ljk4MyAzNjMuMjI4IDkwLjA0MyAzNjUuMDEgOTAuMDk2IFogTSAzNTMuNjU4IDgxLjU2OCBMIDM1My42OTYgODEuNTY4IEMgMzUzLjczNCA4MS41ODMgMzUzLjc1NyA4MS41OTggMzUzLjc3MSA4MS42MDUgTCAzNTMuNjk2IDgxLjYwNSBDIDM1My42OTYgODEuNjA1IDM1My42NzQgODEuNTgzIDM1My42NTggODEuNTY4IFogTSAzNDYuNzQzIDg0LjM0OCBDIDM0Ni44MDQgODQuMzQ4IDM0Ny40NjUgODQuMzcgMzQ4LjczNSA4NC40MjMgQyAzNDguMTQxIDg0LjU4OCAzNDcuNTQgODQuNzMxIDM0Ni45MzEgODQuODM2IEMgMzQ2LjE4NiA4NC43OTEgMzQ1LjQxMyA4NC43NTMgMzQ0LjYgODQuNzIzIEMgMzQ1LjYwOCA4NC41MTMgMzQ2LjMyMiA4NC4zODUgMzQ2Ljc0MyA4NC4zNDggWiBNIDM0Mi40MjEgNzcuOTYxIEMgMzQyLjQyMSA3Ny45NjEgMzQyLjQwNiA3Ny45ODQgMzQyLjM4MyA3Ny45OTkgQyAzNDIuMDMgNzguMjk5IDM0MS45MSA3OC42MjIgMzQyLjAwNyA3OC45NzUgQyAzNDEuMTI4IDc5LjA3MyAzNDAuMTgxIDc5LjgxNyAzMzkuMTUxIDgxLjE5MiBDIDMzOC40NzQgODIuMDk0IDMzOC4xNTkgODIuODIyIDMzOC4yMTEgODMuMzcxIEMgMzM4LjI4NiA4My45NDkgMzM4LjYwMiA4NC40MDggMzM5LjE1MSA4NC43NjEgTCAzMzkuMTg5IDg0Ljc2MSBDIDMzNy4yNTcgODQuODc0IDMzNS4yMTkgODUuMDQ2IDMzMy4wNjIgODUuMjg3IEMgMzMyLjczMSA4NS4zMzIgMzMyLjQzOCA4NS4zODUgMzMyLjE5NyA4NS40MzcgQyAzMzIuMjU4IDg1LjA2MSAzMzIuMzMzIDg0LjcxNiAzMzIuNDIzIDg0LjM4NSBMIDMzMi40MjMgODQuMzQ4IEMgMzMyLjQ4MyA4NC4zNDggMzMyLjUyOCA4NC4zMzMgMzMyLjU3MyA4NC4zMSBDIDMzMi45NDkgODQuMTM3IDMzMy4xNiA4My44MzcgMzMzLjIxMiA4My40MDggQyAzMzMuMjY1IDgzLjExNSAzMzMuMjEyIDgyLjgzNyAzMzMuMDI0IDgyLjU4MiBDIDMzMy4xOTcgODIuMDk0IDMzMy4zNCA4MS42OCAzMzMuNDM4IDgxLjM0MiBDIDMzMy40OTggODEuMTMyIDMzMy41NzMgODAuODE2IDMzMy42NjMgODAuNDAzIEMgMzM0LjM0IDgwLjA4IDMzNC43MTYgNzkuNjI5IDMzNC43OTEgNzkuMDUxIEMgMzM0Ljg1OSA3OC42IDMzNC42ODYgNzguMTI2IDMzNC4yNjUgNzcuNjIzIEwgMzM0LjI2NSA3Ny41ODUgQyAzMzQuNDIyIDc3LjU4NSAzMzQuNTczIDc3LjU3OCAzMzQuNzE2IDc3LjU0OCBDIDMzNi4zNDcgNzcuMjI1IDMzOC4yNjMgNzcuMjMyIDM0MC40NjYgNzcuNTg1IEMgMzQxLjAxNSA3Ny42NjggMzQxLjY2MSA3Ny43OTYgMzQyLjQyMSA3Ny45NjEgWiBNIDMzMS41OTYgMTAxLjg1NSBDIDMzMS42NjMgMTAxLjk1OSAzMzEuNzI0IDEwMi4wNTcgMzMxLjc4NCAxMDIuMTU1IEMgMzMyLjM4NSAxMDMuMDU3IDMzMy4wMDIgMTA0LjEzMSAzMzMuNjI2IDEwNS4zODYgQyAzMzMuNzAxIDEwNS41NTggMzM0LjIyNyAxMDYuNjg2IDMzNS4yMDUgMTA4Ljc2NiBMIDMzOC40MzcgMTE1LjQ1NCBDIDMzOC45MSAxMTYuNDA4IDMzOS4yMjYgMTE3LjAxIDMzOS4zNzcgMTE3LjI1NyBDIDMzOS41ODYgMTE3LjYzMyAzMzkuODI4IDExOC4wMjQgMzQwLjA5IDExOC40MjIgTCAzMzkuNzE1IDExOC41MzQgQyAzMzkuODg3IDExOC44NTcgMzQwLjIxOCAxMTkuMTUxIDM0MC42OTEgMTE5LjM5OCBDIDM0MC43NTIgMTE5LjQyOCAzNDAuODIgMTE5LjQ1MSAzNDAuODc5IDExOS40NzMgQyAzNDEuNjU0IDEyMC40NTEgMzQyLjU3OCAxMjEuNDY1IDM0My42NjEgMTIyLjUxNyBMIDM0My43MzYgMTIyLjU5MiBMIDM0Ni4wNjYgMTI3LjA2MyBMIDM0NS4wNTEgMTI3LjE3NSBDIDM0NC41NzggMTI2LjY3MiAzNDMuODEyIDEyNi40MjQgMzQyLjc1OSAxMjYuNDI0IEMgMzQxLjcwNiAxMjYuNDI0IDM0MC43MjkgMTI2LjY0OSAzMzkuNzUyIDEyNy4xIEMgMzM4Ljc5NyAxMjcuNTI4IDMzNy45ODYgMTI4LjExNCAzMzcuMzA5IDEyOC44NjUgQyAzMzYuOTMzIDEyOS4yOTQgMzM2LjYxIDEyOS43MyAzMzYuMzMxIDEzMC4xOCBDIDMzNi4yNjQgMTMwLjExMyAzMzYuMTg5IDEzMC4wMzggMzM2LjEwNiAxMjkuOTU2IEwgMzM1LjM1NSAxMjkuMjA0IEMgMzM0Ljg4MSAxMjguNzMxIDMzNC4yMDQgMTI4LjE1MiAzMzMuMzI1IDEyNy40NzUgQyAzMzIuMjUgMTI2LjY0OSAzMzEuNTQzIDEyNi4xMDEgMzMxLjIyMSAxMjUuODIzIEMgMzI5LjY0MiAxMjQuMjk3IDMyOC40MjQgMTIzLjE5MyAzMjcuNTc0IDEyMi41MTcgQyAzMjcuMTAxIDEyMi4xNDEgMzI2LjQwOSAxMjEuNjUzIDMyNS41MDcgMTIxLjA1MSBDIDMyNC41MDggMTIwLjM5OCAzMjMuODAxIDExOS45MjQgMzIzLjQwMiAxMTkuNjI0IEMgMzIxLjgwMSAxMTguNCAzMjAuNzU3IDExNy4xMDcgMzIwLjI4MyAxMTUuNzU0IEMgMzIwLjExIDExNS4zNTYgMzE5Ljk0NCAxMTUuMTE2IDMxOS43OTQgMTE1LjA0MSBDIDMxOS43MTkgMTE0Ljk5NiAzMTkuNjI5IDExNC45NzMgMzE5LjUzMSAxMTQuOTY2IEMgMzE5LjMxMyAxMTQuNSAzMTkuMDggMTE0LjAxMSAzMTguODE3IDExMy41MDEgQyAzMTcuMDM2IDExMC4wNjcgMzE1LjkwOCAxMDcuNzc1IDMxNS40MzQgMTA2LjYyNSBDIDMxNC45NjEgMTA1LjQ5OSAzMTQuNzA1IDEwNC41NzQgMzE0LjY4MiAxMDMuODQ1IEMgMzE0LjY2IDEwMy4yOTcgMzE0Ljc0MyAxMDIuNjQzIDMxNC45NDUgMTAxLjg5MiBDIDMxNS4xOTQgMTAxLjAxMyAzMTUuMzgyIDEwMC4zNjcgMzE1LjUwOSA5OS45MzggQyAzMTUuODEgOTguODM0IDMxNi4wMzUgOTggMzE2LjE4NiA5Ny40MjEgQyAzMTYuNDM0IDk2LjQ0NSAzMTYuNzI3IDk1LjY0MSAzMTcuMDUxIDk1LjAxNyBDIDMxNy40NzkgOTQuMTY4IDMxOC4xNDEgOTMuMjM3IDMxOS4wNDIgOTIuMjM3IEMgMzIwLjA2NCA5MS4xNDcgMzIwLjgxNiA5MC4zMDYgMzIxLjI5OCA4OS43MiBDIDMyMS4zOTYgODkuODEgMzIxLjQ1NSA4OS45IDMyMS40ODYgODkuOTgzIEwgMzIxLjU5OCA5MC4zOTYgQyAzMjEuNzI2IDkwLjYyMiAzMjIuMDM0IDkwLjczNCAzMjIuNTM4IDkwLjczNCBDIDMyMi43NjQgOTAuNDExIDMyMy4zMDUgOTAuMjk4IDMyNC4xNTQgOTAuMzk2IEMgMzI0LjQ1NSA5MC40NDkgMzI1LjM5NCA5MC41MzEgMzI2Ljk3MyA5MC42NTkgQyAzMjcuMzcxIDkwLjY4MiAzMjcuNzQ3IDkwLjcxMiAzMjguMSA5MC43MzQgTCAzMjcuNDYxIDkxLjg2MSBDIDMyNi45OTUgOTIuNTk4IDMyNi43MTggOTMuMjI4IDMyNi42MzUgOTMuNzQgQyAzMjYuNTUyIDkzLjcxNyAzMjYuNDc3IDkzLjY5NCAzMjYuNDA5IDkzLjY2NSBDIDMyNS4wMDQgOTMuMDYzIDMyMy43MDMgOTIuNzI1IDMyMi41MDEgOTIuNjUgQyAzMjEuMiA5Mi41NTMgMzIwLjE1NSA5Mi44MjMgMzE5LjM4IDkzLjQ3NyBDIDMxOC45NTIgOTMuODMgMzE4LjY4OSA5NC4yODggMzE4LjU5MiA5NC44NjcgQyAzMTguNDk0IDk1LjQ2OCAzMTguNjE0IDk1Ljk3MSAzMTguOTY3IDk2LjM3IEMgMzE5LjI5MSA5Ni42OTMgMzE5LjY5NyA5Ni45MzMgMzIwLjE3IDk3LjA4MyBDIDMyMC44OTkgOTcuMzg0IDMyMS45MTQgOTcuNzIyIDMyMy4yMTQgOTguMDk3IEMgMzI0LjcxOCA5OC41NDggMzI1LjczMyA5OC44NjQgMzI2LjI1OSA5OS4wMzcgQyAzMjguMjQzIDk5Ljc1OCAzMzAuMDE4IDEwMC42OTggMzMxLjU5NiAxMDEuODU1IFogTSA0NDYuMDgyIDg0LjI3MyBDIDQ0Ni4wNDQgODQuNTQzIDQ0NS45ODQgODQuOTA0IDQ0NS44OTQgODUuMzYyIEMgNDQ1LjE2NCA4Ni4xNDMgNDQ0LjUxIDg2LjgxMiA0NDMuOTM5IDg3LjM1MyBDIDQ0NC40MTMgODUuMzA5IDQ0NC45MDEgODMuNDkxIDQ0NS40MDUgODEuOTA2IEMgNDQ1LjYzMSA4MS4yODIgNDQ1Ljg1NiA4MC44NzYgNDQ2LjA4MiA4MC43MDQgQyA0NDYuMjMyIDgyLjMwNCA0NDYuMjMyIDgzLjQ5OSA0NDYuMDgyIDg0LjI3MyBaIE0gNDM3LjU1IDgwLjU5MSBDIDQzNy43MjIgODAuNTE2IDQzOC4wMTYgODAuNDc4IDQzOC40MTQgODAuNDc4IEMgNDM4LjU0MiA4MC41NTMgNDM4LjY2MiA4MC42NTEgNDM4Ljc5IDgwLjc3OSBDIDQzOS4xNDMgODEuMTMyIDQzOS4zMTYgODEuNDMyIDQzOS4zMTYgODEuNjggQyA0MzkuMjk0IDgxLjg1MyA0MzkuMjAzIDgyLjA3OSA0MzkuMDUzIDgyLjM1NyBDIDQzOC45NTUgODIuNTgyIDQzOC45MTggODIuODY4IDQzOC45NCA4My4yMjEgTCA0MzguOTQgODQuMTIyIEMgNDM4LjkxOCA4NC41NzMgNDM4Ljc3NSA4NS4yMTIgNDM4LjUyNiA4Ni4wMzggQyA0MzguNDc0IDg2LjMxNiA0MzguNDc0IDg3LjAzIDQzOC41MjYgODguMTggQyA0MzguNTcyIDg4LjgwMyA0MzguNTcyIDkwLjAwNSA0MzguNTI2IDkxLjc4NiBDIDQzNy45ODUgOTIuMTU1IDQzNy40NTIgOTIuNDkyIDQzNi45MTEgOTIuOCBDIDQzNi4wMDkgOTMuMzI3IDQzNS40NDUgOTMuNzc4IDQzNS4yMTkgOTQuMTUzIEMgNDM1LjE0NCA5NC4yODEgNDM1LjA3NiA5NC40MDggNDM1LjAzMSA5NC41MjkgQyA0MzMuMDY5IDk1LjczMSA0MzEuMTUzIDk2Ljg3MyA0MjkuMjgxIDk3Ljk0NyBDIDQyOS4zNzggOTcuNTcyIDQyOS40NzYgOTcuMjExIDQyOS41ODEgOTYuODU4IEwgNDI5Ljk1NyA5NS40NjggQyA0MzAuMDQgOTUuMjk1IDQzMC4xMTUgOTUuMTMgNDMwLjE4MiA5NC45OCBMIDQzNi43MjMgODEuNTY4IEMgNDM2Ljk3IDgxLjA0MiA0MzcuMjQ5IDgwLjcxOSA0MzcuNTUgODAuNTkxIFogTSA0MTQuODg2IDc5Ljg0IEMgNDE1LjIwOCA4MC4wNDIgNDE1LjQzNCA4MC4zOCA0MTUuNTYyIDgwLjg1NCBDIDQxNS42MDcgODEuMDg3IDQxNS42NDUgODEuNDg1IDQxNS42NzUgODIuMDU2IEMgNDEyLjYxNSA4MS45MjggNDA5LjY5OSA4Mi4zMTkgNDA2LjkxOCA4My4yMjEgQyA0MDUuNTg3IDgzLjY3MSA0MDQuNjg1IDg0LjE5NyA0MDQuMjExIDg0Ljc5OCBDIDQwMy45ODUgODQuMTQ1IDQwNC4wNzYgODMuMjI4IDQwNC40NzQgODIuMDU2IEMgNDA0Ljc1MyA4MS4zOCA0MDUgODAuOTI5IDQwNS4yMjYgODAuNzA0IEMgNDA1LjU4IDgwLjM4IDQwNi4yMTggODAuMTkzIDQwNy4xNDMgODAuMTQgTCA0MDkuMDk3IDc5Ljk5IEMgNDA5LjExMyA4MC4wNDIgNDA5LjEyIDgwLjA4NyA0MDkuMTM1IDgwLjE0IEMgNDA5LjIzMyA4MC40NDEgNDA5LjQxMyA4MC42NDMgNDA5LjY2MSA4MC43NDEgQyA0MTAuMTEyIDgwLjk2NyA0MTAuNjc2IDgwLjc5NCA0MTEuMzUzIDgwLjIxNSBDIDQxMS41NDggODAuMDcyIDQxMS43MzYgNzkuOTIyIDQxMS45MTcgNzkuNzY0IEwgNDEzLjUzMiA3OS42NTIgQyA0MTQuMTU3IDc5LjU5OSA0MTQuNjA4IDc5LjY2NyA0MTQuODg2IDc5Ljg0IFogTSA0MTYuODM5IDg0LjcyMyBDIDQxNy4wODggODQuODc0IDQxNy4zMDYgODUuMDk5IDQxNy40NzkgODUuNCBDIDQxNy42MDcgODUuNjAyIDQxNy43NTcgODUuODg4IDQxNy45MyA4Ni4yNjQgQyA0MTguMzEzIDg2Ljk3NyA0MTguNzQ5IDg3LjMzOCA0MTkuMjQ1IDg3LjM1MyBDIDQxOS4yMDggODcuODc5IDQxOS4xNyA4OC40NSA0MTkuMTMzIDg5LjA4MSBDIDQxOS4wNTcgODguODMzIDQxOC45IDg4LjYwOCA0MTguNjQ0IDg4LjQwNSBDIDQxOC40OTQgODguMzA3IDQxOC4xMTggODguMTY1IDQxNy41MTYgODcuOTkyIEwgNDE1LjE0OSA4Ny41NzkgQyA0MTQuMjQ2IDg3LjQyOCA0MTMuNTkzIDg3LjM1MyA0MTMuMTk0IDg3LjM1MyBDIDQxMi40MiA4Ny4zNTMgNDExLjE3OSA4Ny41OTQgNDA5LjQ3MyA4OC4wNjcgQyA0MDYuOTkzIDg4LjgxOCA0MDUuNjU0IDg5LjIzMSA0MDUuNDUxIDg5LjMwNyBDIDQwNS4yODYgODkuMzY3IDQwNS4xMzYgODkuNDM0IDQwNSA4OS40OTQgTCA0MDUgODkuMDQ0IEMgNDA0Ljk3OCA4OC41OTMgNDA1LjAxNiA4OC4yMzIgNDA1LjExMyA4Ny45NTQgQyA0MDUuNDM3IDg2LjYyNCA0MDYuNzQ0IDg1LjY3OCA0MDkuMDIyIDg1LjA5OSBDIDQxMS4xNDkgODQuNTczIDQxMy4zODIgODQuMzcgNDE1LjcxMyA4NC40OTggQyA0MTYuMTg2IDg0LjQ5OCA0MTYuNTYyIDg0LjU3MyA0MTYuODM5IDg0LjcyMyBaIE0gNDE0LjI4NCA5My4xMDEgQyA0MTMuMjg1IDkzLjAyNiA0MTIuMTggOTMuMjE0IDQxMC45NzcgOTMuNjY1IEMgNDEwLjIyNSA5My45NDMgNDA5LjE5NSA5NC40NTMgNDA3Ljg5NSA5NS4yMDQgQyA0MDcuNDk2IDk1LjQ1MyA0MDcuMjcxIDk1LjY3OCA0MDcuMjE4IDk1Ljg4MSBDIDQwNy4xNDMgOTYuMjU3IDQwNy4yOTMgOTYuNTQyIDQwNy42NjkgOTYuNzQ1IEMgNDA3Ljk0NyA5Ni44OTUgNDA4LjI5MyA5Ni45NDggNDA4LjcyMSA5Ni44OTUgQyA0MDkuMDA3IDk2Ljg2NSA0MDkuMzUzIDk2Ljc5MSA0MDkuNzc0IDk2LjY3IEwgNDA5LjUxMSA5OC45OTkgQyA0MDkuMjEgMTAyLjAwNCA0MDkuMTU4IDEwNC4yNDMgNDA5LjM2IDEwNS43MjQgQyA0MDkuMzkgMTA1Ljg1OSA0MDkuNDEzIDEwNS45ODYgNDA5LjQzNSAxMDYuMDk5IEMgNDA5LjMzIDEwNi4wNCA0MDkuMjAyIDEwNS45NzIgNDA5LjA1OSAxMDUuOTEyIEMgNDA5LjMxNSAxMDUuNjExIDQwOS4zNTMgMTA1LjIyOCA0MDkuMTcyIDEwNC43NDcgQyA0MDguODQ5IDEwNC4yMjEgNDA4LjYwOCAxMDMuODMxIDQwOC40NTggMTAzLjU4MiBDIDQwOC4zMDggMTAzLjM4IDQwOC4wNiAxMDIuODY5IDQwNy43MDcgMTAyLjA0MiBDIDQwNi44OCAxMDAuMTQxIDQwNi4wOSA5OC4wOTcgNDA1LjMzOSA5NS45MTkgQyA0MDUuMTM2IDk1LjM3IDQwNS4wMzggOTQuOTQyIDQwNS4wMzggOTQuNjQxIEMgNDA1LjAxNiA5NC4xOSA0MDUuMTg4IDkzLjUxNCA0MDUuNTY0IDkyLjYxMiBDIDQwNS42OTIgOTIuMzM0IDQwNS44NDIgOTIuMDg3IDQwNi4wMTUgOTEuODYxIEMgNDA2LjE2NiA5MS43MzQgNDA2LjQxNCA5MS42MjEgNDA2Ljc2NyA5MS41MjMgQyA0MDcuNjY5IDkxLjIgNDA4LjgxOSA5MC44MzIgNDEwLjIyNSA5MC40MzQgQyA0MTEuMjAyIDkwLjExMSA0MTIuMDA2IDg5LjkzIDQxMi42MyA4OS45MDggQyA0MTMuMTc5IDg5Ljg1NSA0MTQuMDA2IDg5LjkwOCA0MTUuMTExIDkwLjA1OCBMIDQxNi45NTIgOTAuMzIxIEMgNDE3LjYyOSA5MC4zNzQgNDE4LjA2NSA5MC4zNzQgNDE4LjI2OCA5MC4zMjEgQyA0MTguNjgyIDkwLjIyMyA0MTguOTU5IDkwLjAyIDQxOS4wOTUgODkuNzIgQyA0MTkuMDU3IDkwLjQwNCA0MTkuMDIgOTEuMTQgNDE4Ljk4MiA5MS45MzYgQyA0MTguOTIyIDkxLjkzNiA0MTguODYyIDkxLjkzNiA0MTguNzk0IDkxLjkzNiBDIDQxOC41NDYgOTEuOTU4IDQxOC4yNjggOTIuMTAyIDQxNy45NjcgOTIuMzUgQyA0MTcuNTE2IDkyLjcyNSA0MTcuMjUzIDkyLjkzNiA0MTcuMTc4IDkyLjk4OCBDIDQxNi44MDIgOTMuMTkxIDQxNi4zMzYgOTMuMjc0IDQxNS43ODggOTMuMjUxIEMgNDE1LjExMSA5My4xNzYgNDE0LjYwOCA5My4xMjQgNDE0LjI4NCA5My4xMDEgWiBNIDQwMS4zNTUgODUuNzc1IEMgNDAxLjU4NyA4NS4zOTIgNDAxLjc3NSA4NC44ODkgNDAxLjkxOCA4NC4yNzMgTCA0MDIuMjU3IDgyLjU0NCBDIDQwMi4yMzQgODIuNzYyIDQwMi4yMTIgODIuOTg4IDQwMi4xODIgODMuMjIxIEMgNDAyLjA1NCA4NC4yMiA0MDIuMTU5IDg1LjAzOSA0MDIuNDgyIDg1LjY2MyBDIDQwMi42ODUgODYuMDYxIDQwMi45NzEgODYuMzc2IDQwMy4zNDcgODYuNjAyIEMgNDAzLjM2MiA4Ni42MTcgNDAzLjM3NiA4Ni42MjQgNDAzLjM4NSA4Ni42MzkgQyA0MDMuMzYyIDg2Ljc0NSA0MDMuMzM5IDg2Ljg1NyA0MDMuMzA5IDg2Ljk3NyBDIDQwMy4yODcgODcuMDY4IDQwMy4yNjUgODcuMTUgNDAzLjIzNCA4Ny4yNCBDIDQwMy4xNzQgODcuMDMgNDAzLjA2MSA4Ni44NDIgNDAyLjg5NiA4Ni42NzcgQyA0MDIuNjE3IDg2LjMzOSA0MDIuMTA2IDg2LjAzOCA0MDEuMzU1IDg1Ljc3NSBaIE0gNDAzLjE5NyA5MC4zNTkgQyA0MDIuOTkzIDkwLjM0NCA0MDIuNzY4IDkwLjM0NCA0MDIuNTIgOTAuMzU5IEMgNDAyLjM0NyA5MC4wNTggNDAyLjI0MSA4OS42NjcgNDAyLjIxOSA4OS4xOTQgQyA0MDIuMjE5IDg5LjEwNCA0MDIuMjA0IDg5LjAxNCA0MDIuMTgyIDg4LjkzMSBDIDQwMi40MTUgODguOTMxIDQwMi42MDIgODguODkzIDQwMi43NDYgODguODE4IEMgNDAyLjg0MyA4OC43NTggNDAyLjkzNCA4OC42ODMgNDAzLjAwOSA4OC41OTMgQyA0MDIuOTkzIDg4LjgxMSA0MDIuOTkzIDg4Ljk5OSA0MDMuMDA5IDg5LjE1NiBDIDQwMy4wNTQgODkuNDQ5IDQwMy4xMTMgODkuODQ4IDQwMy4xOTcgOTAuMzU5IFogTSAzOTUuOTA0IDk3LjcyMiBDIDM5Ni4wNjMgOTcuNzgyIDM5Ni4yMTMgOTcuODI3IDM5Ni4zNTYgOTcuODczIEMgMzk2LjExNSA5OC4yMSAzOTUuODc1IDk4LjYwOSAzOTUuNjQxIDk5LjA3NSBDIDM5NS42NDEgOTguNjA5IDM5NS43MzIgOTguMTU4IDM5NS45MDQgOTcuNzIyIFogTSA0MTkuMjQ1IDEwMy4xMzIgQyA0MTkuMjkgMTAzLjIyMiA0MTkuMzI4IDEwMy4zMTIgNDE5LjM1OCAxMDMuMzk0IEMgNDE2Ljc1NyAxMDQuNzYyIDQxNC4xNzkgMTA2LjA0NyA0MTEuNjE2IDEwNy4yNjUgTCA0MTEuNjE2IDEwNi42NjMgQyA0MTEuNDY1IDEwNS40NjEgNDExLjM2NyAxMDQuNTYgNDExLjMxNSAxMDMuOTU4IEMgNDExLjI2MiAxMDMuMzM1IDQxMS4zMyAxMDIuMDI3IDQxMS41MDMgMTAwLjA1MSBDIDQxMS42NTMgOTguNDQzIDQxMS42IDk3LjE2NiA0MTEuMzUzIDk2LjIxOSBDIDQxMi4xODcgOTUuOTQyIDQxMi44MjYgOTUuNzc2IDQxMy4yNjkgOTUuNzMxIEMgNDE0LjA0NCA5NS42MDMgNDE1LjIwOCA5NS41OCA0MTYuNzY1IDk1LjY1NSBDIDQxNy42NTkgOTUuNTk2IDQxOC4zNzMgOTUuMzcgNDE4LjkwNyA5NC45OCBDIDQxOC44OTIgOTYuNzIzIDQxOC44OTIgOTguNjU0IDQxOC45MDcgMTAwLjc2NSBDIDQxOC45MDcgMTAxLjgxNyA0MTkuMDIgMTAyLjYwNiA0MTkuMjQ1IDEwMy4xMzIgWiBNIDM5NS4wNzggMTE0LjM2NCBDIDM5NC43NjIgMTE0LjQ5MyAzOTQuNDM5IDExNC42MiAzOTQuMTAxIDExNC43NCBDIDM5NC4xNTMgMTE0LjA5NCAzOTQuMjg5IDExMy42MzUgMzk0LjUxNCAxMTMuMzUgQyAzOTQuNTc0IDExMy43NzEgMzk0Ljc2MiAxMTQuMTA5IDM5NS4wNzggMTE0LjM2NCBaIE0gNTE0LjkgMTc2LjQyNyBDIDUxNC45NzUgMTc2Ljk1MyA1MTUuMTQxIDE3Ny43MiA1MTUuMzg5IDE3OC43MTggQyA1MTUuNjY3IDE3OS43NzEgNTE1Ljg0IDE4MC41NDUgNTE1LjkxNSAxODEuMDQ4IEMgNTE2LjA0MyAxODEuOTQ5IDUxNi4xMDMgMTgzLjMwMiA1MTYuMTAzIDE4NS4xMDUgTCA1MTYuMTAzIDE5NS42OTkgQyA1MTYuMTAzIDE5Ni40MjggNTE1Ljk3NiAxOTYuOTAxIDUxNS43MjcgMTk3LjEyNyBDIDUxNS41NzcgMTk2LjI3OCA1MTUuNTE3IDE5NS4wMDggNTE1LjUzOSAxOTMuMzMzIEMgNTE1LjU2MiAxOTEuNjA0IDUxNS41MjQgMTkwLjM0MiA1MTUuNDI2IDE4OS41MzggTCA1MTQuOSAxODYuNzk1IEMgNTE0Ljc1IDE4NS43NjYgNTE0LjY5NyAxODQuMjAzIDUxNC43NSAxODIuMSBMIDUxNC45IDE3Ni40MjcgWiBNIDUyMC4xNjIgMTc2LjI3NiBDIDUyMC4yMzcgMTc0LjY3NiA1MjAuMzY1IDE3My40MzcgNTIwLjUzOCAxNzIuNTU3IEMgNTIwLjc0MSAxNzEuNjc4IDUyMS4wODcgMTcxLjE2NyA1MjEuNTkxIDE3MS4wMTcgTCA1MjEuMDI3IDE4MC4xNDYgQyA1MjAuODc2IDE4Mi42NDggNTIwLjcxMSAxODQuNTE4IDUyMC41MzggMTg1Ljc0MyBDIDUyMC4xODUgMTg4LjIyMyA1MTkuNTc2IDE5MC41NjcgNTE4LjY5NyAxOTIuNzY5IEMgNTE4LjQxOCAxOTEuOTIgNTE4LjM5NiAxOTAuODM4IDUxOC42MjIgMTg5LjUzOCBDIDUxOC45NDUgMTg4LjA4OCA1MTkuMTQ3IDE4Ni45ODMgNTE5LjIyMiAxODYuMjMyIEMgNTE5LjI0NSAxODQuNjU0IDUxOS4yOTggMTgzLjQ3NCA1MTkuMzczIDE4Mi43IEMgNTE5LjU5OCAxODEuNDk4IDUxOS43NjQgMTgwLjU5NyA1MTkuODYxIDE3OS45OTUgQyA1MTkuOTYgMTc5LjI2NyA1MjAuMDY1IDE3OC4wMjggNTIwLjE2MiAxNzYuMjc2IFogTSA1MTkuMDcyIDE3MS4wOTIgQyA1MTguNjIyIDE3My40MjEgNTE4LjM4MSAxNzUuNjM4IDUxOC4zNTkgMTc3Ljc0MiBDIDUxOC4zMDUgMTc5LjE0NyA1MTguMTQ4IDE4MC4wOTMgNTE3Ljg3IDE4MC41OTcgQyA1MTcuNDQxIDE3OS43NDggNTE3LjA4IDE3OC40MzMgNTE2Ljc4IDE3Ni42NTIgTCA1MTYuNDQxIDE3NC41ODYgQyA1MTYuMzA2IDE3My44NDIgNTE2LjExOSAxNzMuMjU2IDUxNS44NzcgMTcyLjgyIEMgNTE3LjE5MyAxNzEuNTEzIDUxOC40OTMgMTcwLjE4MyA1MTkuNzg2IDE2OC44MzggQyA1MTkuNDk0IDE2OS40MDEgNTE5LjI1MyAxNzAuMTUzIDUxOS4wNzIgMTcxLjA5MiBaIE0gNTEzLjA1OSAxNzUuNjc2IEwgNTEzLjA1OSAxNzUuODI2IEMgNTEzLjA1OSAxNzYuMjc2IDUxMy4wODEgMTc2LjkzIDUxMy4xMzQgMTc3Ljc3OSBDIDUxMy4xMzQgMTc4LjU1MyA1MTMuMDc0IDE3OS4yMDcgNTEyLjk0NiAxNzkuNzMzIEMgNTEyLjc5NiAxNzkuNDU0IDUxMi43MjEgMTc5LjExIDUxMi43MjEgMTc4LjY4IEMgNTEyLjc0MyAxNzguMTc3IDUxMi43NTggMTc3LjgwMiA1MTIuNzU4IDE3Ny41NTQgQyA1MTIuNzM1IDE3Ny4xNTYgNTEyLjYwOCAxNzYuODAzIDUxMi4zODIgMTc2LjUwMiBDIDUxMi4zNTkgMTc2LjQ3MiA1MTIuMzMgMTc2LjQ1IDUxMi4zMDcgMTc2LjQyNyBDIDUxMi41NTUgMTc2LjE3OSA1MTIuODEgMTc1LjkyMyA1MTMuMDU5IDE3NS42NzYgWiBNIDUxMC41NCAxNzguMTU1IEMgNTEwLjU5MyAxNzguMTE3IDUxMC42MzEgMTc4LjA4IDUxMC42NTMgMTc4LjA0MiBDIDUxMC42NzYgMTc4LjM5NSA1MTAuNjkgMTc4LjYyMSA1MTAuNjkgMTc4LjcxOCBDIDUxMC42NjggMTc5LjA5NCA1MTAuNTYzIDE3OS4zOTUgNTEwLjM5IDE3OS42MiBDIDUxMC41NDggMTc5LjA0MiA1MTAuNjAxIDE3OC41NTMgNTEwLjU0IDE3OC4xNTUgWiBNIDMyOS43NTQgODQuNDk4IEMgMzI5Ljc0NyA4NC41MzUgMzI5LjczMSA4NC41NzMgMzI5LjcxNyA4NC42MTEgQyAzMjkuNzE3IDg0LjYxMSAzMjkuNzAyIDg0LjYxMSAzMjkuNjc5IDg0LjYxMSBDIDMyOC40MDEgODQuNjMzIDMyNy40MzkgODQuNjI2IDMyNi43ODUgODQuNTczIEwgMzI5Ljc1NCA4NC40OTggWiBNIDMzMC42NTcgODEuNjggQyAzMjkuOTI4IDgxLjQ2MiAzMjkuMzI2IDgxLjE5OSAzMjguODUyIDgwLjg5MSBDIDMyOS4zMzQgODAuODY5IDMzMC4wMzIgODAuODI0IDMzMC45NTcgODAuNzQxIEMgMzMwLjkyNyA4MC44NDYgMzMwLjkwNCA4MC45MjkgMzMwLjg4MiA4MS4wMDQgTCAzMzAuNjU3IDgxLjY4IFogTSAzMjYuMjIyIDk0LjcxNyBDIDMyNi4zNzkgOTQuNzQ3IDMyNi41NTIgOTQuODIyIDMyNi43NDggOTQuOTQyIEMgMzI2LjgxNSA5NS4wODQgMzI2LjkwNiA5NS4yMiAzMjcuMDExIDk1LjM1NSBDIDMyNy4yNjYgOTUuNjQ4IDMyNy41NTIgOTUuODEzIDMyNy44NzUgOTUuODQzIEMgMzI3Ljk0MyA5NS45MDQgMzI4LjAwMyA5NS45NDkgMzI4LjA2MyA5NS45OTQgQyAzMjguMDYzIDk2LjIxOSAzMjguMDc4IDk2LjQzNyAzMjguMSA5Ni42MzIgQyAzMjguMDQxIDk2LjYxIDMyNy45OCA5Ni41OCAzMjcuOTEyIDk2LjU1NyBDIDMyNy4xNjEgOTYuMjM0IDMyNi42NTcgOTYuMDUzIDMyNi40MDkgOTYuMDMxIEMgMzI2LjM4NyA5NS45NTYgMzI2LjI5NyA5NS44NDMgMzI2LjE0NiA5NS42OTMgQyAzMjUuNjk1IDk1LjM5MiAzMjQuOTQzIDk1LjA3IDMyMy44OTEgOTQuNzE3IEwgMzIwLjk1OSA5My43NCBDIDMyMS45MzcgOTMuNTM2IDMyMi45MzYgOTMuNDk5IDMyMy45NjYgOTMuNjI3IEMgMzI0LjEzOSA5My45MjcgMzI0LjQ5MiA5NC4xIDMyNS4wMTkgOTQuMTUzIEMgMzI1LjY0MyA5NC4yMDYgMzI2LjA0OCA5NC4yNjUgMzI2LjIyMiA5NC4zNDEgTCAzMjYuMjIyIDk0LjcxNyBaIE0gMzI4LjQzOSA5Ny45MDkgQyAzMjguNTY3IDk4LjE2NSAzMjguNzE3IDk4LjM5MSAzMjguODkgOTguNTg2IEMgMzI5LjAzMyA5OC43MzYgMzI5LjE4MyA5OC44NjQgMzI5LjM0MSA5OC45NjIgQyAzMjguOTU4IDk4Ljc2NyAzMjguNTUxIDk4LjU5MyAzMjguMTM4IDk4LjQzNiBDIDMyNy4zNjQgOTguMTEzIDMyNS45MzUgOTcuNjYyIDMyMy44NTMgOTcuMDgzIEMgMzIyLjAyNyA5Ni41NTcgMzIwLjYyMSA5Ni4wNTMgMzE5LjY0NCA5NS41OCBDIDMyMC42NzMgOTUuMTA3IDMyMS45NTkgOTUuMTkgMzIzLjUxNSA5NS44NDMgQyAzMjMuNjg4IDk1LjkxOSAzMjQuMjgyIDk2LjIzNCAzMjUuMjgyIDk2Ljc4MiBDIDMyNi4wMTEgOTcuMTgxIDMyNi42MTkgOTcuNDU5IDMyNy4xMjQgOTcuNjA5IEMgMzI3LjQ5OSA5Ny43MzcgMzI3LjkzNSA5Ny44MzUgMzI4LjQzOSA5Ny45MDkgWiBNIDMyMi43NjQgMTIzLjA0MyBDIDMyMi41NTMgMTIyLjcwNSAzMjIuMjkgMTIyLjAzNiAzMjEuOTc0IDEyMS4wNTEgQyAzMjIuNDAzIDEyMS40MDQgMzIzLjEwMiAxMjEuOTMxIDMyNC4wNzkgMTIyLjYyOSBDIDMyNS4wNTYgMTIzLjMyOCAzMjUuNzcgMTIzLjk1OSAzMjYuMjIyIDEyNC41MDggQyAzMjUuNDkzIDEyNC43NDEgMzI1LjA0MSAxMjUuMjIxIDMyNC44NjggMTI1LjkzNiBDIDMyNC44IDEyNS42ODcgMzI0LjcwMyAxMjUuNDQ3IDMyNC41NjcgMTI1LjIyMSBDIDMyNC4zOTUgMTI0LjkyMSAzMjQuMDk0IDEyNC41NiAzMjMuNjY1IDEyNC4xMzIgQyAzMjMuMjE0IDEyMy42NTkgMzIyLjkxNCAxMjMuMjkgMzIyLjc2NCAxMjMuMDQzIFogTSAzMjcuNjEyIDEyNy43NzYgQyAzMjcuNjg3IDEyNy43NzYgMzI3Ljg2IDEyNy44NzQgMzI4LjEzOCAxMjguMDc3IEMgMzI5LjY0MiAxMjkuNTggMzMxLjI5NiAxMzAuNzY3IDMzMy4wOTkgMTMxLjY0NSBDIDMzMi4xOTcgMTMxLjY2OCAzMzEuMDkyIDEzMS4yMSAzMjkuNzkyIDEzMC4yNTUgTCAzMjguODE1IDEyOS41NDIgQyAzMjguMjg4IDEyOS4wMzkgMzI3Ljg5IDEyOC40NTMgMzI3LjYxMiAxMjcuNzc2IFogTSAzMjQuMTkxIDEzMS4yNyBDIDMyNC42NjYgMTI5Ljk5MyAzMjQuOTU4IDEyOC45NjMgMzI1LjA1NiAxMjguMTkgQyAzMjUuMDc5IDEyOC4wMjQgMzI1LjA4NiAxMjcuODU5IDMyNS4wOTQgMTI3LjcwMSBDIDMyNS4zNzIgMTI4LjYxOCAzMjUuNzg1IDEyOS40MjkgMzI2LjMzNCAxMzAuMTQzIEMgMzI2LjgwNyAxMzAuODE5IDMyNy42NDkgMTMxLjYwOCAzMjguODUyIDEzMi41MSBDIDMyOS4xOTggMTMyLjc2NSAzMjkuNTI5IDEzMi45OTEgMzI5LjgzIDEzMy4xODYgQyAzMjcuNTA3IDEzMy42OTcgMzI1LjI0NCAxMzQuMTcxIDMyMy4wMjcgMTM0LjYxMyBDIDMyMy4wNjUgMTM0LjAwNSAzMjMuMDcyIDEzMy4zODggMzIzLjA2NSAxMzIuNzczIEMgMzIzLjUgMTMyLjYgMzIzLjg3NiAxMzIuMDk3IDMyNC4xOTEgMTMxLjI3IFogTSAzMTguNDQxIDEzNC4zODggQyAzMTguNTkyIDEzNC4zMzYgMzE4LjY4MiAxMzQuMjYgMzE4LjcwNSAxMzQuMTYzIEwgMzE5LjE5MiAxMzQuNTM4IEMgMzE4LjUxNyAxMzQuNjY3IDMxOC4xNDEgMTM0LjcyNiAzMTguMDY2IDEzNC43MjYgTCAzMTguNDQxIDEzNC4zODggWiBNIDIzMi4yMiAyMDUuNzI5IEMgMjM0LjAwMiAyMDQuMDI0IDIzNS4yMjcgMjAyLjQ4NCAyMzUuOTAzIDIwMS4xMDkgQyAyMzUuODI4IDIwMC44MzEgMjM1LjY0IDIwMC42MjggMjM1LjMzOSAyMDAuNTA4IEMgMjM2Ljg1MSAxOTkuMDQyIDIzOC4yOTQgMTk3LjUwMiAyMzkuNjYyIDE5NS44ODcgQyAyMzkuODA1IDE5Ni40NjYgMjM5Ljk3IDE5Ny4wNTkgMjQwLjE1MSAxOTcuNjUyIEMgMjQwLjU0OSAxOTguOTgzIDI0MS4yNDEgMjAwLjk1OSAyNDIuMjE4IDIwMy41ODggQyAyNDguODMzIDIyMS4zMjEgMjU0LjY5NyAyMzUuMjczIDI1OS44MDcgMjQ1LjQzOSBDIDI2NS45ODcgMjU3LjY5NCAyNzIuNzUyIDI2OC4yODEgMjgwLjEwNCAyNzcuMTg0IEwgMjY3LjQgMjgwLjU2NSBDIDI2Ni4wNyAyODAuOTQgMjY1LjAzMiAyODEuMTA2IDI2NC4yOCAyODEuMDUzIEwgMjY0LjI0MyAyODEuMDUzIEMgMjY2LjIxOSAyNzguMDAzIDI2Ny45NzIgMjc0Ljk1MyAyNjkuNTA1IDI3MS44ODcgQyAyNjkuOTA0IDI3MS4wNjEgMjY5Ljk3MSAyNzAuNDQ1IDI2OS42OTMgMjcwLjA0NyBDIDI2OS41MTkgMjY5Ljc5OCAyNjkuMTA3IDI2OS41OCAyNjguNDUyIDI2OS40MDggQyAyNjUuMzQ3IDI2OC43ODQgMjYyLjMyNiAyNjguNjAzIDI1OS4zOTQgMjY4Ljg4MSBDIDI1Ni4yMTUgMjY5LjIwNSAyNTMuMzI4IDI3MC4wNDcgMjUwLjc0OSAyNzEuMzk5IEMgMjUxLjIgMjcwLjM2OSAyNTIuMDg4IDI2OC44ODEgMjUzLjQxOCAyNjYuOTI4IEwgMjU5LjM1NiAyNTguNDc1IEMgMjYwLjIwNiAyNTcuMTk4IDI2MC43MjUgMjU2LjIzNiAyNjAuODk4IDI1NS41ODIgQyAyNjEuMjIxIDI1NC4zMDUgMjYwLjk4NyAyNTMuMjkxIDI2MC4xODMgMjUyLjU0IEMgMjU5LjY4IDI1Mi4wODkgMjU4LjgwOCAyNTEuNzg4IDI1Ny41NTMgMjUxLjYzOCBDIDI1MC4zNTkgMjUwLjgxMiAyNDMuMTggMjUxLjA1OSAyMzYuMDE2IDI1Mi4zOSBDIDIzNy44OTYgMjUwLjYzOCAyNDAuMTM2IDI0Ny43ODMgMjQyLjc0NCAyNDMuODI0IEMgMjQ1LjUyNiAyMzkuNTk0IDI0Ny43MDUgMjM2LjY2NCAyNDkuMjg0IDIzNS4wMzMgQyAyNTAuMjA4IDIzNC4xMDkgMjUwLjU4NCAyMzMuMzI3IDI1MC40MTIgMjMyLjcwMyBDIDI1MC4xODYgMjMxLjkyOSAyNDkuMzc0IDIzMS40ODcgMjQ3Ljk2OCAyMzEuMzg4IEMgMjQxLjU3OSAyMzAuODYzIDIzNS4zMTcgMjMwLjk5OCAyMjkuMTc2IDIzMS44MDIgQyAyMzIuNjM0IDIyNi4wOTEgMjM2LjQ4OSAyMjAuNzU3IDI0MC43NTIgMjE1Ljc5OCBDIDI0MS4zMzEgMjE1LjA5OSAyNDEuNzE0IDIxNC40MyAyNDEuOTE3IDIxMy44MDcgQyAyNDIuMTY1IDIxMi45OCAyNDIuMDQ1IDIxMi4zNTcgMjQxLjU0MiAyMTEuOTI5IEMgMjQxLjE2NiAyMTEuNjA1IDI0MC41MjYgMjExLjQ2MyAyMzkuNjI0IDIxMS41MTUgQyAyMzUuMjggMjExLjY0MyAyMzAuNzkyIDIxMi4wNDIgMjI2LjE2OCAyMTIuNzE3IEMgMjI3LjM3MSAyMTAuOTYgMjI4LjAwMyAyMTAuMDUgMjI4LjA0OCAyMDkuOTc1IEMgMjI4LjU3NCAyMDkuMjk5IDIyOS45NjUgMjA3Ljg4NiAyMzIuMjIgMjA1LjcyOSBaIE0gMjIzLjUzOCAyMTMuMTMxIEMgMjIzLjQ0OCAyMTMuMTYxIDIyMy4zNDMgMjEzLjE5IDIyMy4yMzcgMjEzLjIwNiBMIDIyMy4yMzcgMjEzLjUwNyBDIDIyMy4xNzcgMjEzLjU2NiAyMjMuMTEgMjEzLjYzNCAyMjMuMDQ5IDIxMy42OTQgQyAyMjMuMTEgMjEzLjE0NiAyMjMuMjIyIDIxMi42MzUgMjIzLjM4NyAyMTIuMTU0IEMgMjIzLjc4NSAyMTEuMDggMjI0LjUxNSAyMTAuMDEyIDIyNS41NjcgMjA4Ljk2MSBDIDIyNS45NSAyMDguNTc3IDIyNi42ODcgMjA3LjkzOSAyMjcuNzg1IDIwNy4wNDQgQyAyMjcuMjA2IDIwNy44MDQgMjI2LjUxNCAyMDguODMzIDIyNS43MTcgMjEwLjEyNSBDIDIyNC45NDMgMjExLjM4IDIyNC4yMjIgMjEyLjM3OSAyMjMuNTM4IDIxMy4xMzEgWiBNIDIyMy4wNDkgMjE2LjA5OSBDIDIyMy4yOTggMjE1Ljk5MyAyMjMuNTQ1IDIxNS44MzYgMjIzLjgwMSAyMTUuNjEgQyAyMjQuMTM5IDIxNS4zMTcgMjI0LjQ5MiAyMTQuOTU2IDIyNC44NTQgMjE0LjUyMSBDIDIyOS40MzEgMjE0LjQxNSAyMzQuMjEyIDIxNC4xMTUgMjM5LjIxMSAyMTMuNjE5IEwgMjI2LjczMiAyMzAuNTYyIEwgMjIzLjgzOSAyMTkuODE4IEMgMjIzLjQ0IDIxOC4yODUgMjIzLjE3NyAyMTcuMDQ1IDIyMy4wNDkgMjE2LjA5OSBaIE0gMjIwLjk0NCAyMjIuMTQ3IEMgMjIxLjA4NyAyMjEuOTU5IDIyMS4yMTUgMjIxLjc3MSAyMjEuMzIgMjIxLjU4NCBDIDIyMi45MjIgMjI4LjY2OSAyMjQuMzEyIDIzNC4xMDEgMjI1LjQ5MiAyMzcuODg4IEMgMjI3LjMxOSAyNDMuNzc5IDIyOS40NjEgMjQ4Ljk1NiAyMzEuOTE5IDI1My40MDQgQyAyMzEuNTI5IDI1NC4yMjIgMjMxLjUyMSAyNTQuOTM3IDIzMS44ODIgMjU1LjU0NSBDIDIzMi4zMDMgMjU1LjYwNSAyMzIuNzM5IDI1NS42MzUgMjMzLjE5OCAyNTUuNjIgQyAyMzMuMjI3IDI1NS42NjUgMjMzLjI1NyAyNTUuNzAyIDIzMy4yNzMgMjU1LjczMyBDIDIzNC44MjkgMjU4LjI4NyAyMzYuNzY4IDI2MS4wMyAyMzkuMDk4IDI2My45NiBDIDI0MC40NzQgMjY1LjY4OSAyNDIuNjQ2IDI2OC4yNTggMjQ1LjYwMSAyNzEuNjYxIEMgMjQ2LjA2NiAyNzIuMTg4IDI0Ni41MTggMjcyLjcwNiAyNDYuOTUzIDI3My4yMDIgQyAyNDYuNjY4IDI3NC4yMzEgMjQ2LjY1MiAyNzUuMTExIDI0Ni45MTYgMjc1LjgzMSBMIDI0OC4yMzEgMjc1Ljc5NCBDIDI0OC40MjcgMjc1LjYzNiAyNDguNjMgMjc1LjQ3MSAyNDguODMzIDI3NS4zMDYgQyAyNTEuODYyIDI3OC43MjQgMjU0LjEyNSAyODEuMjE5IDI1NS42MzUgMjgyLjc4MiBDIDI1NS43NjQgMjgyLjkxNyAyNTUuODkxIDI4My4wMzcgMjU2LjAxMSAyODMuMTU4IEMgMjU1LjUzMSAyODMuMzA4IDI1NS4xMjUgMjgzLjM2IDI1NC44MDkgMjgzLjMwOCBDIDI1NS4wMTIgMjgyLjgwNSAyNTQuNjc0IDI4Mi4zODQgMjUzLjc5NCAyODIuMDMxIEMgMjUwLjM4OSAyODAuNTggMjQ3LjEyNiAyNzguMTM4IDI0NC4wMjIgMjc0LjcwNSBDIDI0Mi4wMTUgMjcyLjQ3MyAyMzkuNTM0IDI2OS4xMyAyMzYuNTggMjY0LjY3NCBDIDIzNS4yOCAyNjIuNzIgMjM0LjM0NyAyNjEuMjMzIDIzMy43OTggMjYwLjIwNCBDIDIzMy4xNzUgMjU5LjEyOSAyMzIuMzMzIDI1Ny40NjEgMjMxLjI4IDI1NS4yMDcgQyAyMjguMDQ4IDI0OC4xNjYgMjI1LjI1MiAyNDEuMTE5IDIyMi44OTkgMjM0LjA1NiBMIDIxOS43NDIgMjI0LjE3NiBDIDIxOS44NjkgMjIzLjc0OCAyMjAuMjY4IDIyMy4wNzEgMjIwLjk0NCAyMjIuMTQ3IFogTSAyNjguMTUxIDI1Mi4wMTQgQyAyNjguNjI1IDI1Mi41NjIgMjY4Ljk3OCAyNTMuMDg4IDI2OS4yMDQgMjUzLjU5MiBDIDI2OS4yMjcgMjUzLjY0NCAyNjkuMzc3IDI1My45NjcgMjY5LjY1NSAyNTQuNTY4IEMgMjY5Ljg1OCAyNTQuOTQ0IDI3MC4wMzEgMjU1LjI0NSAyNzAuMTgxIDI1NS40NjkgQyAyNzAuMzA5IDI1NS42MiAyNzAuNDk3IDI1NS44MjMgMjcwLjc0NSAyNTYuMDcxIEMgMjcwLjk0OCAyNTYuMjk3IDI3MS4wODQgMjU2LjUwNyAyNzEuMTU5IDI1Ni43MDkgQyAyNzAuNDA3IDI1Ni4xODQgMjY5Ljc5MSAyNTUuNTA3IDI2OS4zMTcgMjU0LjY4MSBMIDI2OC44MjggMjUzLjg1NSBDIDI2OC40NTIgMjUzLjQ1NiAyNjguMTg5IDI1My4xNDEgMjY4LjAzOSAyNTIuOTE1IEMgMjY3LjczOSAyNTIuNTE3IDI2Ny42NjQgMjUyLjE0MSAyNjcuODEzIDI1MS43ODggTCAyNjguMTUxIDI1Mi4wMTQgWiBNIDIzMC4yMjggMjQyLjU0NiBDIDIyOS41NTkgMjQwLjY3NiAyMjguNzMyIDIzNy45MzMgMjI3Ljc0NyAyMzQuMzE5IEMgMjI5LjY5NCAyMzQuMTc2IDIzMi4zODUgMjMzLjkyOCAyMzUuODI4IDIzMy41NjggQyAyNDAuMjg2IDIzMy4xMTcgMjQzLjg4NyAyMzMuMDI3IDI0Ni42MTUgMjMzLjMwNSBDIDI0NC4xNTcgMjM3LjIxMiAyNDEuNjU0IDI0MC45ODQgMjM5LjA5OCAyNDQuNjEyIEMgMjM3LjE1OSAyNDcuMzU1IDIzNS40ODMgMjQ5LjQyOSAyMzQuMDYxIDI1MC44NDkgQyAyMzIuNTIxIDI0OC4wNTMgMjMxLjI0MyAyNDUuMjg5IDIzMC4yMjggMjQyLjU0NiBaIE0gMjM2LjYxOCAyNTUuMjA3IEMgMjM3LjIxOSAyNTUuMTAyIDIzNy45OTMgMjU0Ljk1MSAyMzguOTQ4IDI1NC43NTYgQyAyNDUuNDM1IDI1My40MjYgMjUxLjkxNSAyNTMuMzI4IDI1OC4zOCAyNTQuNDU1IEMgMjU3LjUzIDI1Ni43MDkgMjU1LjgwMSAyNTkuNTY0IDI1My4xOTMgMjYzLjAyMSBDIDI1MC45NDUgMjY2LjA0MiAyNDkuMzIyIDI2OC40MzEgMjQ4LjMwNyAyNzAuMTk2IEMgMjQ1LjY1MyAyNjcuMjUxIDI0My40ODggMjY0LjY5NiAyNDEuODA1IDI2Mi41MzIgQyAyMzkuODk1IDI2MC4wNzYgMjM4LjE2NiAyNTcuNjMzIDIzNi42MTggMjU1LjIwNyBaIE0gMjU2LjkxNCAyNzEuNTg2IEMgMjYwLjE2OSAyNzAuODM1IDI2My4zNzkgMjcwLjgxMiAyNjYuNTM2IDI3MS41MTEgQyAyNjUuMDg1IDI3NS40MTkgMjYyLjkyOCAyNzguODc1IDI2MC4wNzEgMjgxLjg4IEMgMjU5Ljk2NiAyODEuOTg1IDI1OS44NjggMjgyLjA5IDI1OS43NyAyODIuMTgxIEMgMjU5LjI3NCAyODEuNzYgMjU4LjUxNSAyODEuMDI0IDI1Ny40NzggMjc5Ljk2NCBDIDI1NS4yOSAyNzcuNzEgMjUzLjI3NSAyNzUuNTkxIDI1MS40MjYgMjczLjYxNSBDIDI1My4xMjUgMjcyLjcxNCAyNTQuOTUxIDI3Mi4wMzcgMjU2LjkxNCAyNzEuNTg2IFogTSAyNTAuMTExIDI4NC4wOTcgQyAyNDkuNjgyIDI4NC4xNzIgMjQ5LjExOSAyODQuMDM3IDI0OC40MTkgMjgzLjY4MyBMIDI0OC4wNDMgMjgzLjQ5NiBDIDI0Ny43MjEgMjgzLjE3MiAyNDcuNDY1IDI4Mi45MzIgMjQ3LjI5MSAyODIuNzgyIEMgMjQ4LjA0MyAyODIuOTU1IDI0OC45ODMgMjgzLjM5OCAyNTAuMTExIDI4NC4wOTcgWiBNIDI2Mi45MjggMjg0LjAyMSBDIDI2Mi45MjggMjg0LjAyMSAyNjIuOTU3IDI4My45OTkgMjYyLjk2NSAyODMuOTg0IEMgMjYyLjk3MyAyODMuOTk5IDI2Mi45NzMgMjg0LjAxNCAyNjIuOTY1IDI4NC4wMjEgQyAyNjIuOTY1IDI4NC4wMjEgMjYyLjk0MiAyODQuMDIxIDI2Mi45MjggMjg0LjAyMSBaIE0gMjg3Ljg4NCAyNzguMDg2IEMgMjg3LjcyNyAyNzguMDQ5IDI4Ny41MzkgMjc4LjAyNiAyODcuMzIgMjc4LjAxMSBDIDI4Ny40MDMgMjc3Ljg2OCAyODcuNDQxIDI3Ny43MTggMjg3LjQzMyAyNzcuNTYgTCAyODcuODg0IDI3OC4wODYgWiBNIDI4OS4yNzQgMjc5LjcwMSBDIDI4OS4yNzQgMjc5LjcwMSAyODkuMjc0IDI3OS42NzkgMjg5LjI3NCAyNzkuNjYzIEwgMjkyLjM1NyAyODMuMTIgQyAyOTIuMjc1IDI4My4xOCAyOTIuMTk5IDI4My4yNCAyOTIuMTMxIDI4My4zMDggQyAyOTIuMDcxIDI4My4zNiAyOTIuMDI2IDI4My40MDUgMjkxLjk4MSAyODMuNDU4IEMgMjkxLjkwNiAyODMuMzgzIDI5MS44MzEgMjgzLjMwOCAyOTEuNzU2IDI4My4yMzMgQyAyOTAuNzI2IDI4Mi4yMjYgMjg5LjcxMSAyODEuMTk2IDI4OC43MTEgMjgwLjE1MiBDIDI4OC45OTcgMjgwLjAwOSAyODkuMTg0IDI3OS44NTkgMjg5LjI3NCAyNzkuNzAxIFogTSAyODYuMDQyIDI3NS45NDQgQyAyODUuNzE5IDI3NS44OTkgMjg1LjMzNiAyNzUuOTE0IDI4NC44NzcgMjc1Ljk4MiBDIDI4MS4wNjYgMjcxLjY5MiAyNzcuNDg4IDI2Ny4xNDUgMjc0LjEyOCAyNjIuMzQ1IEwgMjg2LjA0MiAyNzUuOTQ0IFogTSAzMzMuOTI2IDExMi45MzcgQyAzMzMuNzI0IDExMi4xNjMgMzMzLjIyOCAxMTEuMDczIDMzMi40MjMgMTA5LjY2OSBDIDMzMS42NzIgMTA4LjMzOCAzMzEuMDEgMTA3LjM1NCAzMzAuNDMxIDEwNi43MDEgQyAzMjkuODgyIDEwNi4wNzcgMzI4Ljk1IDEwNS4yMzUgMzI3LjY0OSAxMDQuMTg0IEwgMzI1LjU4MiAxMDIuNjQzIEMgMzI0LjQzMyAxMDEuODkyIDMyMy4yNTIgMTAxLjMxNCAzMjIuMDUgMTAwLjkxNSBDIDMyMS42MiAxMDAuNzQzIDMyMS4yNDUgMTAwLjY1MiAzMjAuOTIyIDEwMC42NTIgQyAzMjAuNDk0IDEwMC42NTIgMzE5Ljk5NyAxMDAuNzY1IDMxOS40MTggMTAwLjk5IEMgMzE4Ljc2NCAxMDEuMjkxIDMxOC4zNDMgMTAxLjYyOSAzMTguMTQxIDEwMi4wMDQgQyAzMTcuOTkgMTAyLjI1MyAzMTcuOTE1IDEwMi42MDYgMzE3LjkxNSAxMDMuMDU3IEMgMzE3Ljg5MiAxMDMuODMxIDMxNy45OSAxMDQuNjEyIDMxOC4yMTYgMTA1LjM4NiBDIDMxOC4yNjggMTA1LjU4OCAzMTguMzQzIDEwNS43NjIgMzE4LjQ0MSAxMDUuOTEyIEMgMzE4LjQ2MyAxMDUuOTQxIDMxOC40OTQgMTA1Ljk3MiAzMTguNTE3IDEwNS45ODYgQyAzMTguNTg0IDEwNy4yNTYgMzE4Ljg4NCAxMDguNDY3IDMxOS40MTggMTA5LjYzMSBDIDMxOS45NjcgMTEwLjgzMyAzMjAuNzE5IDExMS44NjMgMzIxLjY3NCAxMTIuNzExIEMgMzIyLjA3MiAxMTMuMDEyIDMyMi40MDMgMTEzLjE2MiAzMjIuNjUxIDExMy4xNjIgQyAzMjIuOTUyIDExMy4xODUgMzIzLjE5OSAxMTMuMDM1IDMyMy40MDIgMTEyLjcxMSBDIDMyMy41NzUgMTEyLjM4OCAzMjMuNjQzIDExMi4wNSAzMjMuNTkgMTExLjY5NyBDIDMyMy40OTMgMTExLjI2OSAzMjMuMTI0IDExMC43MiAzMjIuNTAxIDExMC4wNDQgQyAzMjEuMDQ5IDEwOC40NDQgMzIwLjQzMyAxMDYuOTI2IDMyMC42NTkgMTA1LjQ5OSBDIDMyMS40NjMgMTA1LjE5OCAzMjIuMzI3IDEwNS41NTggMzIzLjI1MiAxMDYuNTg4IEMgMzI1LjAzMyAxMDguNTE5IDMyNi4xNjggMTEwLjc1OCAzMjYuNjczIDExMy4zMTMgQyAzMjYuMzk0IDExMy40NjMgMzI1Ljg2IDExMy40ODUgMzI1LjA1NiAxMTMuMzg4IEMgMzI0LjM1NyAxMTMuMzEzIDMyMy44NzYgMTEzLjQxMSAzMjMuNjI4IDExMy42ODggQyAzMjMuNDc3IDExMy44OTEgMzIzLjQwMiAxMTQuMTM5IDMyMy40MDIgMTE0LjQzOSBDIDMyMy40MjUgMTE0LjY4OCAzMjMuNTE1IDExNC45MjggMzIzLjY2NSAxMTUuMTU0IEMgMzIzLjc5NCAxMTUuMzI2IDMyNC4xOTEgMTE1LjY2NCAzMjQuODY4IDExNi4xNjggQyAzMjUuODQ2IDExNi44NDQgMzI2LjQyNCAxMTcuMjM1IDMyNi41OTcgMTE3LjMzMiBDIDMyNy4yOTYgMTE3LjcwOCAzMjcuOTM1IDExNy44NDMgMzI4LjUxNCAxMTcuNzQ2IEMgMzI4LjY4NyAxMTcuNzE2IDMyOC44NDUgMTE3LjY2MyAzMjkuMDAzIDExNy41OTUgTCAzMzEuNjcyIDExNy41OTUgQyAzMzIuNjQ4IDExNy40NjggMzMzLjM0IDExNy4wOTIgMzMzLjczOCAxMTYuNDY5IEMgMzMzLjk4NyAxMTYuMDQgMzM0LjExNCAxMTUuNDY5IDMzNC4xMTQgMTE0Ljc0IEMgMzM0LjExNCAxMTQuMjE0IDMzNC4wNTQgMTEzLjYxMyAzMzMuOTI2IDExMi45MzcgWiBNIDMzMi4yNzIgMTE0LjI4OSBDIDMzMi4zMjUgMTE0Ljc2MyAzMzIuMTk3IDExNS4xMTYgMzMxLjg5NiAxMTUuMzQyIEMgMzMxLjY3MSAxMTUuNTQ0IDMzMS4yMzUgMTE1LjY0MiAzMzAuNTgxIDExNS42NDIgTCAzMzAuNTA2IDExNS42NDIgQyAzMzAuNTQ0IDExNS41MjEgMzMwLjU3NCAxMTUuMzk0IDMzMC41ODEgMTE1LjI2NyBDIDMzMC42NzkgMTE0LjQ5MyAzMzAuNTI4IDExMy42NTEgMzMwLjEzIDExMi43NDkgQyAzMjkuODUyIDExMi4xNDggMzI5LjM5MyAxMTEuMzc0IDMyOC43MzkgMTEwLjQyIEwgMzI2LjQ0NyAxMDcuMTE0IEMgMzI1LjQ0NyAxMDUuNzM5IDMyNC42NTggMTA0LjgwNyAzMjQuMDc5IDEwNC4zMzQgQyAzMjMuMDQ5IDEwMy40MzIgMzIxLjkzNyAxMDMuMDM0IDMyMC43MzQgMTAzLjEzMiBDIDMxOS45OTcgMTAzLjE3NyAzMTkuNDM0IDEwMy40MSAzMTkuMDQyIDEwMy44NDUgQyAzMTguOTkgMTAzLjUzNyAzMTkuMDIgMTAzLjI1OSAzMTkuMTE3IDEwMy4wMTkgQyAzMTkuMjQ2IDEwMi43MTkgMzE5LjU5MSAxMDIuNDQxIDMyMC4xNyAxMDIuMTkyIEMgMzIwLjQ5NCAxMDIuMDIgMzIwLjc4NiAxMDEuOTQ1IDMyMS4wMzUgMTAxLjk2NyBMIDMyMS43MTEgMTAyLjMwNSBDIDMyMi4wMTIgMTAyLjQ3OCAzMjIuNDc4IDEwMi42NjYgMzIzLjEwMSAxMDIuODY5IEMgMzIzLjQ1NSAxMDMuMDE5IDMyMy45MTQgMTAzLjMzNSAzMjQuNDkyIDEwMy44MDggTCAzMjguNDc2IDEwNy4wMzkgQyAzMjguNzc3IDEwNy4zMzkgMzI5LjE3NiAxMDcuODEzIDMyOS42NzkgMTA4LjQ2NyBMIDMzMC4zOTMgMTA5LjYzMSBDIDMzMC44NjcgMTEwLjQ1NyAzMzEuMzkzIDExMS42NDUgMzMxLjk3MSAxMTMuMiBDIDMzMi4xNzUgMTEzLjcwMyAzMzIuMjcyIDExNC4wNjQgMzMyLjI3MiAxMTQuMjg5IFogTSAxODkuNzExIDE4My4zMzkgQyAxOTAuNjY1IDE4NC43MTUgMTkxLjI4OSAxODYuMjE3IDE5MS41OSAxODcuODQ4IEMgMTkxLjg2OCAxODkuNTUzIDE5MS43MjUgMTkxLjE1MyAxOTEuMTc2IDE5Mi42NTYgQyAxOTAuOTc0IDE5My4xODIgMTkwLjY1MSAxOTMuOTg2IDE5MC4yIDE5NS4wNiBDIDE4OS44NzYgMTk2LjAxNSAxODkuODM4IDE5Ni44MjYgMTkwLjA4NyAxOTcuNTAyIEwgMTk5LjcwOCAxOTcuMDg5IEMgMjAwLjU3MyAxOTkuODAyIDIwMS43NzYgMjAyLjM0OSAyMDMuMzE3IDIwNC43MTUgTCAxOTkuNjcxIDIwOC4wNTkgQyAxOTcuNDM5IDIxMC4xNjMgMTk1LjU1MiAyMTIuMDU2IDE5My45OTYgMjEzLjczMSBDIDE5My4wOTMgMjE0LjcwOSAxOTEuODMxIDIxNi4xNzQgMTkwLjIgMjE4LjEyNyBDIDE4OC41MjQgMjIwLjE1NiAxODcuMjY3IDIyMS42MjEgMTg2LjQ0MSAyMjIuNTIzIEMgMTg3Ljc3MiAyMjEuNTY4IDE4OS4yNDUgMjIwLjI2OSAxOTAuODc2IDIxOC42MTYgQyAxOTIuNjggMjE2LjcxNSAxOTQuMDMzIDIxNS4yODcgMTk0LjkzNiAyMTQuMzMzIEMgMTk2LjA2MiAyMTMuMTgzIDE5OC4xNDUgMjExLjE5MiAyMDEuMTc0IDIwOC4zNTkgTCAyMDkuNjMxIDIwMC44NDYgQyAyMTguNTc2IDE5My4wODQgMjI3Ljg0NSAxODUuNTMzIDIzNy40NDUgMTc4LjE5MyBDIDIzNy43MjMgMTc3Ljk2NyAyMzcuOTExIDE3Ny43MiAyMzguMDA5IDE3Ny40NDEgQyAyMzguMTU4IDE3Ny4xMTggMjM4LjEyIDE3Ni44OTIgMjM3Ljg5NiAxNzYuNzY1IEMgMjMxLjU1OCAxODEuMzQ4IDIyNS43NCAxODUuNzY2IDIyMC40NTYgMTkwLjAyNiBDIDIxNC42OTEgMTk0LjYzOSAyMDkuMjc4IDE5OS4yNDYgMjA0LjIxOCAyMDMuODUyIEMgMjA0LjI3MiAyMDIuODkgMjA0LjEyOSAyMDEuOTEzIDIwMy44MDYgMjAwLjkyMSBDIDIwMy4yNzkgMTk5LjMyMSAyMDIuMzk5IDE5OC4wMDUgMjAxLjE3NCAxOTYuOTc3IEMgMTk5Ljk0OSAxOTUuOTQ3IDE5OC41MDYgMTk1LjMzOCAxOTYuODUyIDE5NS4xMzUgQyAxOTUuMTc2IDE5NC45MzMgMTkzLjYwNSAxOTUuMTg5IDE5Mi4xNTQgMTk1Ljg4NyBDIDE5My4yMjkgMTkzLjkzMyAxOTMuNjggMTkxLjc1NSAxOTMuNTA3IDE4OS4zNTEgQyAxOTMuMzM0IDE4Ny4wMjEgMTkyLjYyIDE4NC44OCAxOTEuMzY0IDE4Mi45MjYgQyAxOTAuMTYyIDE4MS4wNyAxODguNTYxIDE3OS40OTIgMTg2LjU1NCAxNzguMTkzIEMgMTg0LjY3NCAxNzYuOTY4IDE4Mi41ODUgMTc2LjA3NCAxODAuMjc3IDE3NS41MjUgQyAxNzYuNDk1IDE3NC42MjMgMTcyLjY2OSAxNzQuNzM2IDE2OC44MTQgMTc1Ljg2NCBDIDE2NC45MjcgMTc2Ljk5MSAxNjEuNjM0IDE3OC45NDQgMTU4LjkyOCAxODEuNzI0IEMgMTU5LjQ1NSAxNzcuNzQyIDE1OS4xMzEgMTczLjc3NCAxNTcuOTUxIDE2OS44MTUgQyAxNTYuNzQ5IDE2NS44ODUgMTU0LjgzMSAxNjIuMzkxIDE1Mi4yMDEgMTU5LjMzNCBDIDE0OS41NjkgMTU2LjMwNSAxNDYuMzc1IDE1My45MjQgMTQyLjYxNiAxNTIuMTk1IEMgMTM4Ljg4IDE1MC40OSAxMzUuMDAxIDE0OS42MTggMTMwLjk2NSAxNDkuNTY2IEMgMTI2LjI1MSAxNDkuNTQ0IDEyMS4zNDMgMTUwLjY3IDExNi4yMzEgMTUyLjk0NyBDIDExMi4yNDcgMTU0Ljc1IDEwNy44MzUgMTU3LjQxNyAxMDMuMDAxIDE2MC45NDkgQyA5OC41NjYgMTY0LjIzMyA5NC44NjggMTY3LjQxMSA5MS45MTQgMTcwLjQ5MSBDIDg4LjI1MyAxNzQuMjcgODUuNDM0IDE3OC4xNzcgODMuNDU3IDE4Mi4yMTIgQyA4MS4yMjQgMTg2Ljc3MyA4MC4xMTIgMTkxLjQ5MiA4MC4xMTIgMTk2LjM3NSBDIDgwLjExMiAyMDEuNTgyIDgxLjQxMiAyMDYuMTI4IDg0LjAyIDIxMC4wMTIgQyA4MC44NDEgMjEwLjA4OCA3Ny43NTkgMjEwLjc2NCA3NC43NzQgMjEyLjA0MiBDIDcxLjc2OCAyMTMuMzE5IDY5LjEzNyAyMTUuMDY5IDY2Ljg4MSAyMTcuMzAxIEMgNjMuNjI2IDIyMC40NTYgNjIuMDg2IDIyMy43MSA2Mi4yNTggMjI3LjA2OCBDIDYyLjMzNCAyMjguNDIgNjIuNzI1IDIyOS44NjQgNjMuNDI0IDIzMS4zODggQyA2My44OTcgMjMyLjQxOCA2NC42NjQgMjMzLjc0IDY1LjcxNiAyMzUuMzcxIEMgNjcuNTczIDIzOC4yMjYgNjkuNDkgMjQxLjA0NCA3MS40NjcgMjQzLjgyNCBDIDcxLjc5IDI0NC4yOTcgNzIuMTk2IDI0NC42NSA3Mi42NyAyNDQuODc1IEMgNzMuMTk2IDI0NS4xMDEgNzMuNTg3IDI0NS4wMjYgNzMuODM1IDI0NC42NSBDIDcxLjM1NCAyNDEuNDQyIDY4Ljg5NiAyMzcuOTAzIDY2LjQ2OCAyMzQuMDE4IEMgNjUuNjE5IDIzMi42NDQgNjQuOTg3IDIzMS41MTcgNjQuNTg5IDIzMC42MzggQyA2NC4wMSAyMjkuMzA3IDYzLjcwMiAyMjguMDY3IDYzLjY0OSAyMjYuOTE5IEMgNjMuNTc0IDIyNS4yNDIgNjQuMDEgMjIzLjUzNyA2NC45NjUgMjIxLjgwOSBDIDY1Ljc5MSAyMjAuMzI5IDY2Ljk1NyAyMTguOTMxIDY4LjQ2IDIxNy42MDIgQyA3MS4zMzkgMjE1LjAyNCA3NC42MjQgMjEzLjI5NiA3OC4zMDcgMjEyLjQxNyBDIDgyLjIxNiAyMTEuNTE1IDg1LjgwOSAyMTEuNzc4IDg5LjA5NCAyMTMuMjA2IEMgODUuMjA4IDIxMC4wNzMgODIuODE4IDIwNS43MDcgODEuOTE2IDIwMC4wOTUgQyA4MS4wNjYgMTk0LjgzNSA4MS42NzUgMTg5LjcwNCA4My43NTcgMTg0LjY5MiBDIDg1LjU4NCAxODAuMzEyIDg4LjQ1NSAxNzYuMDY2IDkyLjM2NSAxNzEuOTU2IEMgOTUuMzk0IDE2OC43NDcgOTkuMzU1IDE2NS4zNjcgMTA0LjI0MSAxNjEuODEzIEMgMTA4Ljg3OSAxNTguNDMxIDExMy4wNTEgMTU1Ljg5MiAxMTYuNzU3IDE1NC4xODcgQyAxMjEuNTkgMTUxLjk1NSAxMjYuMjI5IDE1MC44MjggMTMwLjY2NCAxNTAuODA1IEMgMTM0Ljc5OSAxNTAuNzgzIDEzOC43ODMgMTUxLjczIDE0Mi42MTYgMTUzLjY2MSBDIDE0Ni40NSAxNTUuNTYxIDE0OS42MDcgMTU4LjE4NCAxNTIuMDg4IDE2MS41MTIgQyAxNTQuNTY4IDE2NC44NDEgMTU2LjE4NSAxNjguNjEzIDE1Ni45MzcgMTcyLjgyIEMgMTU3LjY2NiAxNzcuMDI4IDE1Ny40NCAxODEuMTA4IDE1Ni4yNiAxODUuMDY4IEMgMTU2LjgzOSAxODUuMjE4IDE1Ny40NCAxODUuMDgyIDE1OC4wNjQgMTg0LjY1NCBDIDE1OC40OTMgMTg0LjM3NiAxNTkuMDAzIDE4My45MDMgMTU5LjYwNSAxODMuMjI3IEMgMTYyLjM2NCAxODAuMjc0IDE2NS44MDYgMTc4LjI4MyAxNjkuOTQgMTc3LjI1MyBDIDE3NC4wNzUgMTc2LjI1NCAxNzguMDYgMTc2LjQwNSAxODEuODkzIDE3Ny43MDQgQyAxODUuNDAzIDE3OC45MjkgMTg4LjAwNSAxODAuODA3IDE4OS43MTEgMTgzLjMzOSBaIE0gMTY1LjMxOCAyNzQuNzA1IEMgMTYyLjUzNiAyNzYuMTMyIDE1OC4zODcgMjc4LjMyNiAxNTIuODc3IDI4MS4yNzkgQyAxMzYuMTY3IDI5MC4yOTUgMTIzLjcxIDI5Ny4xNyAxMTUuNTE3IDMwMS45MDQgQyAxMDEuODU4IDMwOS44NDUgODkuODk5IDMxNy40OCA3OS42MjMgMzI0LjgyIEMgOTkuNDQ1IDMxMi40OTggMTE2LjY1OSAzMDIuMjA1IDEzMS4yNjYgMjkzLjk0IEMgMTUwLjE1NiAyODMuMjE3IDE2Ny45NjQgMjc0LjAwNiAxODQuNjc0IDI2Ni4yODkgQyAxODUuNzI3IDI2NS43ODYgMTg2LjQ1NiAyNjUuMzI3IDE4Ni44NTUgMjY0Ljg5OSBDIDE3OS4zNiAyNjcuOTU3IDE3Mi4xODEgMjcxLjIyNiAxNjUuMzE4IDI3NC43MDUgWiBNIDE0NS45NjEgMjc1LjQ1NiBDIDE0MS43NzUgMjc3LjUzNyAxMzcuNzQ1IDI3OS44ODkgMTMzLjg1OSAyODIuNTE5IEwgMTkxLjI4OSAyNTUuOTU4IEMgMTk1LjcwMiAyNTMuOTMgMTk5LjI4IDI1Mi4yMDIgMjAyLjAzOSAyNTAuNzc0IEMgMjA3LjI0OCAyNDguMDQ2IDIxMi4yNjMgMjQ0Ljk3NCAyMTcuMDczIDI0MS41NyBDIDIxNy40NDkgMjQxLjI5MSAyMTcuNzI3IDI0MC45ODQgMjE3LjkgMjQwLjYzIEMgMjE4LjEyNSAyNDAuMjAyIDIxOC4xMDMgMjM5Ljg2NCAyMTcuODI1IDIzOS42MTYgQyAyMDkuMjMzIDI0NS41MjkgMjAxLjEyMiAyNTAuMTM1IDE5My41MDcgMjUzLjQ0MSBDIDE5Mi4yNTIgMjU0LjAyIDE5MC4zNjUgMjU0LjgxNiAxODcuODMxIDI1NS44NDUgQyAxODUuMjc2IDI1Ni44OTcgMTgzLjM3NCAyNTcuNzAxIDE4Mi4xMTkgMjU4LjI1IEMgMTgwLjE4NyAyNTkuMTI5IDE3Ny42MjMgMjYwLjQwNiAxNzQuNDEzIDI2Mi4wODEgQyAxNzAuNzUzIDI2NC4wMTIgMTY4LjIxMiAyNjUuMzEzIDE2Ni43ODMgMjY1Ljk4OSBDIDE2NC42NTYgMjY3LjA0MSAxNjEuMTg0IDI2OC42MDMgMTU2LjM3MyAyNzAuNjg1IEMgMTUxLjgwOSAyNzIuNjYxIDE0OC4zNDQgMjc0LjI1MyAxNDUuOTYxIDI3NS40NTYgWiBNIDI0MS40ODEgMzIzLjE5IEMgMjM5LjMwMSAzMjIuMzQxIDIzNy4xNzQgMzIyLjA3OCAyMzUuMDkyIDMyMi40MDEgQyAyMzIuNzM5IDMyMi43NzcgMjMwLjY1NyAzMjMuODg5IDIyOC44NTIgMzI1Ljc0NSBDIDIyNy4wNDggMzI3LjU3IDIyNS45MzYgMzI5LjY4OSAyMjUuNTA3IDMzMi4wOTMgQyAyMjUuMzc5IDMzMi42MiAyMjUuMjk2IDMzMi45NTcgMjI1LjI0NCAzMzMuMTA4IEMgMjI1LjExNyAzMzMuNDYxIDIyNC45NDMgMzMzLjcyNCAyMjQuNzE4IDMzMy44OTcgQyAyMjQuMzY1IDMzNC4xMjMgMjIzLjgxNiAzMzQuMTgyIDIyMy4wNjQgMzM0LjA4NSBDIDIyMC43ODYgMzMzLjcwOSAyMTkuMDggMzMzLjQzMSAyMTcuOTUzIDMzMy4yNTggQyAyMTUuOTQ2IDMzMi45NTcgMjE0LjIzMSAzMzIuODYgMjEyLjgwNCAzMzIuOTU3IEMgMjEwLjc3MyAzMzMuMDg2IDIwOC42MTYgMzMzLjYxMSAyMDYuMzM4IDMzNC41MzUgQyAyMDQuNzM3IDMzNS4xODkgMjAyLjczIDMzNi4yMDMgMjAwLjMyNSAzMzcuNTc4IEMgMTk2LjU0NCAzMzkuNzM1IDE5My4zNTcgMzQxLjgwMSAxOTAuNzc4IDM0My43NzcgQyAxODcuNDkzIDM0Ni4yMzQgMTg0Ljc1IDM0OC44MjYgMTgyLjU0NyAzNTEuNTU0IEMgMTgwLjA0NCAzNTQuNjM0IDE3OC4xODcgMzU3Ljk0IDE3Ni45ODQgMzYxLjQ3MSBDIDE3NS42ODQgMzY1LjI4MSAxNzUuMjc4IDM2OC45ODYgMTc1Ljc4MiAzNzIuNTkyIEMgMTc2LjQwNiAzNzYuODk3IDE3OC4yNzcgMzgwLjc0NCAxODEuMzgyIDM4NC4xMjUgQyAxODQuNDYzIDM4Ny41MDYgMTg4LjEyNSAzODkuNzAxIDE5Mi4zNTcgMzkwLjcgQyAxODYuOTk3IDM5NC41MDkgMTgzLjYxNCAzOTguNTc0IDE4Mi4yMDkgNDAyLjkwOSBDIDE4MS4zMjkgNDA1LjU5MiAxODEuMjg0IDQwOC4yNjYgMTgyLjA1OCA0MTAuOTQ4IEMgMTgyLjg4NSA0MTMuODA0IDE4NC40MjYgNDE1Ljg4NSAxODYuNjgxIDQxNy4xODUgQyAxODcuNzM0IDQxNy43ODYgMTg5LjAxMSA0MTguMjM3IDE5MC41MTUgNDE4LjUzOCBDIDE5MS40NyA0MTguNzEgMTkyLjg0NiA0MTguODc2IDE5NC42NDkgNDE5LjAyNSBDIDE5Ny4wNTUgNDE5LjIyOSAxOTguNzg0IDQxOS4wMjUgMTk5LjgzNiA0MTguNDI1IEMgMTk4Ljc4NCA0MTguMDQ5IDE5Ny40NjggNDE3Ljc0OCAxOTUuODkgNDE3LjUyMyBDIDE5NC4xMDggNDE3LjMyIDE5Mi43NzEgNDE3LjE0OCAxOTEuODY4IDQxNi45OTcgQyAxODguNTA4IDQxNi40NzEgMTg2LjE1NSA0MTUuMjkyIDE4NC44MDIgNDEzLjQ2NiBDIDE4My43MjcgNDEyLjAzOCAxODMuMjA4IDQxMC4wOTkgMTgzLjI2MSA0MDcuNjQzIEMgMTgzLjM1OSA0MDQuMTY0IDE4NC41MzkgNDAwLjk0IDE4Ni43OTQgMzk3Ljk4OCBDIDE4OS4wNzIgMzk1LjA1NyAxOTEuODgzIDM5My4xMTkgMTk1LjIxMyAzOTIuMTY0IEMgMTk2Ljg5IDM5MS42NjEgMTk3Ljc2OSAzOTEgMTk3Ljg0NCAzOTAuMTc0IEMgMTkyLjUzIDM4OS42NDcgMTg4LjA1IDM4Ny44NDUgMTg0LjM4OCAzODQuNzY0IEMgMTgyLjQ1NyAzODMuMTYzIDE4MC44NzggMzgxLjI5MiAxNzkuNjUzIDM3OS4xNjYgQyAxNzguMzk3IDM3Ni45MzQgMTc3LjY0NiAzNzQuNjIgMTc3LjM5OCAzNzIuMjE2IEMgMTc3LjA5NyAzNjkuMjYzIDE3Ny41NjMgMzY1Ljg5IDE3OC43ODkgMzYyLjExMSBDIDE3OS43NjYgMzU5LjEyOCAxODAuOTMxIDM1Ni42NDggMTgyLjI4NCAzNTQuNjcyIEMgMTgzLjcxMiAzNTIuNjIgMTg1Ljk4MyAzNTAuMjU0IDE4OS4wODcgMzQ3LjU3MiBDIDE5Mi4xMTYgMzQ0Ljk2NCAxOTQuODUyIDM0Mi44NTMgMTk3LjI4IDM0MS4yMjIgQyAyMDAuNDE1IDMzOS4xNDEgMjAzLjQ2NyAzMzcuNTc4IDIwNi40NTEgMzM2LjUyNyBDIDIwOS44ODcgMzM1LjMwMiAyMTMuMzA3IDMzNC43MzggMjE2LjcxMiAzMzQuODM2IEMgMjIwLjM3MyAzMzQuOTM0IDIyMy42NDMgMzM1LjgxMiAyMjYuNTIyIDMzNy40NjYgQyAyMjcuMDcxIDMzNy43ODggMjI3LjU5NyAzMzcuOTY5IDIyOC4xIDMzNy45OTIgQyAyMjguNzAyIDMzOC4wNDQgMjI5LjA2MyAzMzcuODQyIDIyOS4xOTEgMzM3LjM5IEMgMjI5LjI4OSAzMzcuMDY4IDIyOS4yMDUgMzM2LjcyOSAyMjguOTI3IDMzNi4zNzYgQyAyMjguNTMgMzM2IDIyOC4yMzYgMzM1LjcxNSAyMjguMDYzIDMzNS41MTMgQyAyMjcuNDYxIDMzNC45MzQgMjI3LjEwMSAzMzQuMTgyIDIyNi45NzMgMzMzLjI1OCBDIDIyNi44NzUgMzMyLjQwOSAyMjYuOTg4IDMzMS41NTIgMjI3LjMxMSAzMzAuNzAzIEMgMjI3LjgxNSAzMjkuNDQ5IDIyOC45MTMgMzI4LjE2NCAyMzAuNjE5IDMyNi44MzQgQyAyMzQuMDI0IDMyNC4yMDQgMjM3LjA4MyAzMjMuMzc3IDIzOS43ODkgMzI0LjM1NSBDIDI0MC4xODggMzI0LjUwNSAyNDEuNDA2IDMyNS4xODEgMjQzLjQzNiAzMjYuMzgzIEMgMjQ0Ljg2MyAzMjcuMjYyIDI0Ni4xMDQgMzI3LjYyMyAyNDcuMTU3IDMyNy40NzIgQyAyNDUuNjUzIDMyNS41NDEgMjQzLjc1OSAzMjQuMTE0IDI0MS40ODEgMzIzLjE5IFogTSAyMDUuOTEgMzA0LjE1OCBDIDE5OC41MjEgMzA4LjY2NiAxOTIuOTU4IDMxMi4wMjUgMTg5LjIyMiAzMTQuMjI2IEMgMTgzLjAzNiAzMTcuOTA4IDE3Ny4zOTggMzIxLjExNiAxNzIuMzA5IDMyMy44NDQgQyAxNzAuNzUzIDMyNC42NyAxNjcuMjcyIDMyNi40OTYgMTYxLjg2IDMyOS4zMjggQyAxNTcuNTUzIDMzMS42MDUgMTU0LjA4IDMzMy40NzYgMTUxLjQ0OSAzMzQuOTI2IEMgMTQzLjkwOSAzMzkuMTM0IDEzNS42ODUgMzQ0LjIyMSAxMjYuNzkzIDM1MC4xNzkgQyAxMjEuMDI3IDM1NC4wODYgMTEzLjExMiAzNTkuNjYxIDEwMy4wMzkgMzY2Ljg5NyBDIDEwMC41NTggMzY4LjY3NyA5OC42NjQgMzcwLjEwNSA5Ny4zNjQgMzcxLjE3OSBDIDk1LjM1NyAzNzIuODMyIDkzLjY5NSAzNzQuNDcxIDkyLjM2NSAzNzYuMTAxIEMgMTE1LjU3IDM1OC40OTYgMTM5Ljk2MyAzNDIuNzI1IDE2NS41NDQgMzI4LjgwMyBDIDE3MC40MDcgMzI2LjE3MyAxNzQuMDUzIDMyNC4yMDQgMTc2LjQ4MSAzMjIuOTA0IEMgMTgwLjc2NiAzMjAuNTUyIDE4NC4zNTkgMzE4LjUwOSAxODcuMjY3IDMxNi43ODEgQyAxOTMuNTgyIDMxMy4wMjQgMTk5Ljc5OSAzMDguODE3IDIwNS45MSAzMDQuMTU4IFogTSAxNzUuODA0IDMyOC42MTUgQyAxNjMuNjc5IDMzNy4yMzMgMTU0LjY5NiAzNDMuNzY5IDE0OC44NTUgMzQ4LjIyNSBDIDEzOS4wMyAzNTUuNzE2IDEzMC41MzYgMzYyLjgzOSAxMjMuMzcyIDM2OS42MDIgQyAxMzkuNzA3IDM1Ni43NzYgMTU4LjUxNSAzNDIuODE1IDE3OS43ODggMzI3LjcxMyBDIDE5Mi4xNjkgMzE4Ljk0NSAyMTEuNDEzIDMwNS41ODUgMjM3LjUyIDI4Ny42MjggQyAyMjguMDI1IDI5My4xNjYgMjE3LjU4NCAyOTkuNzYyIDIwNi4yMTEgMzA3LjQyNyBDIDE5OS4zOTMgMzEyLjAzMiAxODkuMjYgMzE5LjA5NSAxNzUuODA0IDMyOC42MTUgWiBNIDIyMS45OTcgMzguMTc3IEMgMjIxLjc0OSAzOC40MjUgMjIxLjU4MyAzOC43MjUgMjIxLjUwOCAzOS4wNzggQyAyMjAuNDc4IDQ0LjU0MSAyMjAuNzE5IDUwLjAzMyAyMjIuMjIyIDU1LjU3MSBDIDIyMy43NDggNjEuMTA4IDIyNi4zNDIgNjUuOTYyIDIzMC4wMDIgNzAuMTQ3IEMgMjMwLjg4MiA3MS4xMDEgMjMxLjYzMyA3MS40MzkgMjMyLjI1OCA3MS4xNjEgQyAyMjguMTk5IDY1LjcyOSAyMjUuMzQxIDYwLjU0NSAyMjMuNjg4IDU1LjYwOCBDIDIyMS42MDYgNDkuMzk0IDIyMS4yOTggNDMuNTM0IDIyMi43NDggMzguMDI2IEMgMjIyLjUyMyAzNy44MjMgMjIyLjI3NSAzNy44NzYgMjIxLjk5NyAzOC4xNzcgWiBNIDI0My41MzMgMjkuNTM2IEMgMjQzLjE1NyAyOS4yMTMgMjQyLjQ1OCAyOS4wMjUgMjQxLjQyOSAyOC45NzIgQyAyMzkuNzc1IDI4LjkyIDIzOC41NTcgMjkuMDQ4IDIzNy43ODMgMjkuMzQ4IEMgMjM2Ljc4MyAyOS43MjQgMjM1LjgwNSAzMC41MjggMjM0Ljg1MSAzMS43NTIgQyAyMzIuNjE4IDM0LjUzMyAyMzEuMjIgMzguMDA0IDIzMC42NDEgNDIuMTU5IEMgMjMwLjE5IDQ1LjQ2NSAyMzAuMzAzIDQ5LjI0NCAyMzAuOTggNTMuNTA0IEMgMjMxLjQ4MyA1Mi43NTMgMjMxLjc4NCA1MS43OTEgMjMxLjg4MiA1MC42MTIgQyAyMzEuOTA1IDUwLjI1OCAyMzEuOTE5IDQ5LjIwNyAyMzEuOTE5IDQ3LjQ1NiBDIDIzMS45MTkgNDMuODQ5IDIzMi42MTEgNDAuMzQxIDIzMy45ODYgMzYuOTM3IEMgMjM0LjYxMSAzNS40MzQgMjM1LjIyNyAzNC4zNDUgMjM1LjgyOCAzMy42NjggQyAyMzYuNzgzIDMyLjU2NCAyMzcuOTg2IDMxLjgxMyAyMzkuNDM2IDMxLjQxNCBDIDI0MC44ODcgMzAuOTg2IDI0Mi4zMDggMzEuMDAxIDI0My42ODMgMzEuNDUyIEMgMjQzLjk4NCAzMS4yNDkgMjQ0LjExMiAzMC45NDEgMjQ0LjA1OSAzMC41MTMgQyAyNDQuMDM2IDMwLjA4NCAyNDMuODU3IDI5Ljc2MSAyNDMuNTMzIDI5LjUzNiBaIE0gNDQ1LjgxOSAyNzguOTg3IEMgNDQzLjkzOSAyODAuNjYzIDQ0MS4wMjIgMjgzLjA1OSA0MzcuMDYxIDI4Ni4xNjMgQyA0MjEuODAxIDI5OC4xNjIgNDEwLjAxNCAzMDcuMTYzIDQwMS42OTMgMzEzLjE3NCBDIDQwMC44NDQgMzEzLjgyOCA0MDAuMzU1IDMxNC4zNzcgNDAwLjIyNyAzMTQuODI3IEMgNDAyLjEyOSAzMTMuODczIDQwNC4xODkgMzEyLjY0OCA0MDYuMzkxIDMxMS4xNDYgQyA0MDcuNzY3IDMxMC4xOTEgNDA5LjcxNCAzMDguNzc5IDQxMi4yMTcgMzA2LjkgQyA0MjEuMDY1IDMwMC4yNjUgNDI3Ljk1IDI5NC45MzkgNDMyLjg4OSAyOTAuOTM0IEMgNDQwLjIzMyAyODQuOTc2IDQ0Ny4yNDYgMjc4LjgxNCA0NTMuOTM3IDI3Mi40NTEgQyA0NTIuNjgyIDI3My4yMDIgNDUxLjI5MSAyNzQuMjMxIDQ0OS43NjUgMjc1LjUzMSBDIDQ0OC44NjMgMjc2LjI4MyA0NDcuNTQ3IDI3Ny40MzIgNDQ1LjgxOSAyNzguOTg3IFogTSA0MDYuMjQxIDI4OS4xMyBDIDQwNS41ODcgMjg5Ljc4NCA0MDUuMTI5IDI5MC40NDUgNDA0Ljg1IDI5MS4xMjIgQyA0MjUuOTIxIDI3Ny4zMiA0NDYuNTQ4IDI2Mi40NDMgNDY2LjcxNiAyNDYuNDkxIEMgNDcxLjI3OSAyNDIuOTA3IDQ3NS4wOTggMjM5Ljc4MSA0NzguMTc5IDIzNy4wOTkgQyA0ODQuNzE5IDIzMS4zMzYgNDkwLjY0MyAyMjUuMjg3IDQ5NS45NTcgMjE4Ljk1NCBDIDQ5NC40NzcgMjIwLjAwNiA0OTIuODYgMjIxLjM0MyA0OTEuMTA5IDIyMi45NzQgQyA0OTAuOTM1IDIyMy4xMjMgNDg5LjQwMiAyMjQuNTY3IDQ4Ni41MjMgMjI3LjI5NCBDIDQ3Ni42MjMgMjM2Ljg1OSA0NjMuOTE5IDI0Ny4zNCA0NDguNDEyIDI1OC43MzggQyA0MzkuNTY0IDI2NS4yNTMgNDI2LjE0NiAyNzQuODU1IDQwOC4xNTggMjg3LjU1MiBDIDQwNy4yNzggMjg4LjIwNiA0MDYuNjM5IDI4OC43MzIgNDA2LjI0MSAyODkuMTMgWiBNIDUzNi4yODYgMTI0LjgwOCBDIDUzNS43MDggMTI0LjcxMSA1MzUuMzMyIDEyNC44MzEgNTM1LjE1OSAxMjUuMTg0IEMgNTM1LjA4NCAxMjUuMzEyIDUzNS4wNDcgMTI1LjUwOCA1MzUuMDQ3IDEyNS43ODUgTCA1MzUuMDg0IDEyNy4wNjMgQyA1MzUuMDg0IDEyNy40MzkgNTM1LjE0NCAxMjcuNjg2IDUzNS4yNzIgMTI3LjgxNCBDIDUzNS4zNjkgMTI3Ljk0MiA1MzUuNTM1IDEyOC4wNTQgNTM1Ljc2MSAxMjguMTUyIEwgNTM3Ljk0IDEyOS4xMjggQyA1MzcuNzM4IDEyOS44MDUgNTM3LjgxMyAxMzAuMzg0IDUzOC4xNjYgMTMwLjg1NyBDIDUzOC4zNjkgMTMxLjEwNCA1MzguNjE3IDEzMS4yNyA1MzguOTE4IDEzMS4zNDYgQyA1MzkuMjQgMTMxLjQyMSA1MzkuNTM0IDEzMS4zNjggNTM5Ljc4MiAxMzEuMTk1IEMgNTM5Ljk1NSAxMzEuMDk3IDU0MC4xMzUgMTMwLjg5NCA1NDAuMzA4IDEzMC41OTQgQyA1NDAuNTExIDEzMC4yNzEgNTQwLjY2MiAxMzAuMDUzIDU0MC43NTkgMTI5Ljk1NiBDIDU0MS4xNTggMTI5LjcwNyA1NDEuNDM2IDEyOS40ODEgNTQxLjU4NiAxMjkuMjc5IEMgNTQxLjc1OSAxMjkuMDc2IDU0MS44NDkgMTI4LjY3OCA1NDEuODQ5IDEyOC4wNzcgTCA1NDEuODQ5IDEyNi4xNiBDIDU0MS44NDkgMTI1LjU2IDU0MS43NTIgMTI1LjE2OSA1NDEuNTQ4IDEyNC45OTYgQyA1NDEuMTcyIDEyNC42MjEgNTQwLjc1OSAxMjQuNjA1IDU0MC4zMDggMTI0Ljk1OCBDIDUzOS45ODUgMTI1LjE4NCA1MzkuNzQ1IDEyNS41NiA1MzkuNTk0IDEyNi4wODYgTCA1MzkuMjE4IDEyNy40MDEgQyA1MzkuMDE1IDEyNy4zNDggNTM4LjczIDEyNy4zNDggNTM4LjM1NCAxMjcuNDAxIEMgNTM3LjkyNiAxMjcuNDIzIDUzNy42MjUgMTI3LjQyMyA1MzcuNDUyIDEyNy40MDEgQyA1MzcuMTUxIDEyNy4zNDggNTM2Ljg4OCAxMjcuMjI4IDUzNi42NjIgMTI3LjAyNSBDIDUzNi40MTUgMTI2Ljc5OSA1MzYuMzI0IDEyNi41NTIgNTM2LjM5OSAxMjYuMjczIEwgNTM3LjcxNSAxMjUuODk4IEMgNTM3LjczOCAxMjUuNTk3IDUzNy42NzcgMTI1LjI4MiA1MzcuNTI3IDEyNC45NTggQyA1MzcuMzc2IDEyNC45ODEgNTM3LjE3NCAxMjQuOTc0IDUzNi45MjUgMTI0LjkyMSBDIDUzNi41NDkgMTI0Ljg0NiA1MzYuMzM5IDEyNC44MDggNTM2LjI4NiAxMjQuODA4IFogTSA1MTkuOTM3IDExMS43MzUgQyA1MTkuNzExIDExMS40MzQgNTE5LjYyMSAxMTAuOTIzIDUxOS42NzMgMTEwLjE5NCBDIDUxOS43MjcgMTA5LjQ0MyA1MTkuNjU5IDEwOC45MTcgNTE5LjQ4NiAxMDguNjE3IEwgNTE4LjczNSAxMDguNjE3IEMgNTE4LjgwOSAxMDkuOTQ3IDUxOC43NDkgMTExLjE0OSA1MTguNTQ3IDExMi4yMjMgQyA1MTguNDE4IDExMi44MjQgNTE4LjM0MyAxMTMuMjYgNTE4LjMyMSAxMTMuNTM4IEMgNTE4LjMyMSAxMTQuMDExIDUxOC40MzQgMTE0LjQxNyA1MTguNjU4IDExNC43NCBDIDUxOC45NTkgMTE1LjE2OCA1MTkuNjE0IDExNS40MzIgNTIwLjYxMyAxMTUuNTI5IEMgNTIxLjAxMiAxMTUuNTI5IDUyMS4yNTIgMTE1LjUxNCA1MjEuMzI4IDExNS40OTEgQyA1MjEuMzggMTE1LjQ5MSA1MjEuNjY2IDExNS4zNTYgNTIyLjE5MiAxMTUuMDc5IEMgNTIyLjcxOSAxMTQuODUzIDUyMy4xMDkgMTE0LjY2NSA1MjMuMzU3IDExNC41MTUgQyA1MjQuMTYyIDExMy45NjYgNTI0LjUyMiAxMTMuMjIzIDUyNC40NDcgMTEyLjI5OCBDIDUyNC4zOTUgMTExLjkgNTI0LjI4MiAxMTEuNjA3IDUyNC4xMDkgMTExLjQzNCBDIDUyMy44MDggMTExLjEzNCA1MjMuNTIzIDExMS4wNzMgNTIzLjI0NCAxMTEuMjQ3IEwgNTIyLjg2OSAxMTIuMzc0IEMgNTIyLjU2OCAxMTIuMiA1MjIuMjE0IDExMi4yODMgNTIxLjgxNiAxMTIuNjM3IEMgNTIxLjM2NSAxMTIuOTkgNTIxLjAyNyAxMTMuMTQ4IDUyMC44MDEgMTEzLjEyNSBDIDUyMC45MjkgMTEyLjgyNCA1MjAuODU0IDExMi41NjIgNTIwLjU3NiAxMTIuMzM2IEMgNTIwLjI3NSAxMTIuMDg4IDUyMC4wNjUgMTExLjg4NSA1MTkuOTM3IDExMS43MzUgWiBNIDUxMy4yODQgODguODE4IEMgNTEyLjg1NSA4OS4xNDEgNTEyLjU3IDg5Ljg1NSA1MTIuNDIgOTAuOTYgQyA1MTIuMzY3IDkxLjI2IDUxMi4zODIgOTEuNTQ2IDUxMi40NTcgOTEuODI0IEMgNTEyLjU1NSA5Mi4wNzEgNTEyLjc3MyA5Mi4zMzQgNTEzLjA5NiA5Mi42MTIgQyA1MTMuOTk5IDkzLjQzOSA1MTQuNjIyIDkzLjk4IDUxNC45NzUgOTQuMjI4IEwgNTE1LjgwMiA5NC43MTcgQyA1MTUuOTc2IDk0Ljc5MiA1MTYuMjMgOTQuOTA1IDUxNi41NTQgOTUuMDU1IEMgNTE2Ljg3OCA5NS4xODIgNTE3LjQwMyA5NS4yNDIgNTE4LjEzMyA5NS4yNDIgQyA1MTguNTMxIDk0Ljg0NCA1MTguODA5IDk0LjM3OCA1MTguOTU5IDkzLjg1MiBDIDUxOS4wODggOTMuNDI0IDUxOS4xNDcgOTIuODkxIDUxOS4xNDcgOTIuMjM3IEMgNTE5LjE0NyA5MS4zMzUgNTE4Ljg2OSA5MC44NDcgNTE4LjMyMSA5MC43NzIgTCA1MTYuODkyIDkyLjgzOCBDIDUxNi40OTQgOTIuODM4IDUxNi4xMTkgOTIuNzAzIDUxNS43NjUgOTIuNDI1IEMgNTE1LjQ0MiA5Mi4xNDYgNTE1LjIzOCA5MS44MDEgNTE1LjE2MyA5MS4zNzMgQyA1MTUuMTQxIDkxLjE3IDUxNS4xNDEgOTAuOTA3IDUxNS4xNjMgOTAuNTg0IEwgNTE1LjI3NiA4OS43OTUgQyA1MTUuMzUxIDg5LjE5NCA1MTUuMjc2IDg4LjYxNSA1MTUuMDUgODguMDY3IEMgNTE0Ljk5OCA4Ny44NDEgNTE0LjkxNiA4Ny43MDYgNTE0Ljc4NyA4Ny42NTQgQyA1MTQuNjE1IDg3LjQ4MSA1MTQuNDY0IDg3LjQ4MSA1MTQuMzM3IDg3LjY1NCBDIDUxNC4yODQgODcuNjc2IDUxNC4yMzkgODcuODA0IDUxNC4xODcgODguMDI5IEMgNTE0LjEzMyA4OC4xOCA1MTQuMDEzIDg4LjMzIDUxMy44MTEgODguNDggTCA1MTMuMjg0IDg4LjgxOCBaIE0gNTE1Ljg0IDcyLjI1MSBDIDUxNS41NjIgNzIuMTk4IDUxNS4zNzQgNzIuMTk4IDUxNS4yNzYgNzIuMjUxIEMgNTE0Ljk5OCA3Mi4zMjYgNTE0Ljc3MyA3Mi42NzkgNTE0LjU5OSA3My4zMDMgTCA1MTMuODQ4IDczLjMwMyBDIDUxMy43OTUgNzIuNDAxIDUxMy44NDggNzEuNzQgNTEzLjk5OSA3MS4zMTIgQyA1MTQuMjAxIDcwLjg4MyA1MTQuMzIxIDcwLjU2IDUxNC4zNzUgNzAuMzM1IEMgNTE0LjQ3MiA2OS44ODQgNTE0LjQyNyA2OS41NjEgNTE0LjIyNCA2OS4zNTggQyA1MTMuMzk3IDY5LjQ1NiA1MTIuODg2IDY5Ljc4NiA1MTIuNjgzIDcwLjMzNSBDIDUxMi41ODUgNzAuNTYgNTEyLjUzMyA3MC45MzYgNTEyLjUzMyA3MS40NjIgTCA1MTIuNTMzIDczLjc5MSBDIDUxMi41MzMgNzQuMDY5IDUxMi41ODUgNzQuMjk0IDUxMi42ODMgNzQuNDY3IEMgNTEyLjgxIDc0LjYxOCA1MTMuMDIxIDc0LjczIDUxMy4zMjIgNzQuODA1IEMgNTEzLjcyIDc0Ljg4MSA1MTMuOTYxIDc0Ljk0MSA1MTQuMDM2IDc0Ljk5MyBMIDUxNC4wMzYgNzUuNTU3IEwgNTE1LjkxNSA3NS43NDUgQyA1MTUuODkzIDc1LjYxNyA1MTUuOTc2IDc1LjUwNCA1MTYuMTc4IDc1LjQwNiBMIDUxNi41OTIgNzUuMjU2IEMgNTE2LjY5IDc1LjE1OSA1MTYuNzY1IDc0Ljk3MSA1MTYuODE3IDc0LjY5MyBMIDUxNi44OTIgNzMuNTY2IEMgNTE2Ljg5MiA3My4wNCA1MTYuNzggNzIuNjc5IDUxNi41NTQgNzIuNDc2IEMgNTE2LjQyNyA3Mi4zNzkgNTE2LjE5MyA3Mi4zMDMgNTE1Ljg0IDcyLjI1MSBaIE0gMzI0LjI2NyAyMy4wMzcgQyAzMjQuMTE2IDIyLjg2NCAzMjMuOTE0IDIyLjc1MSAzMjMuNjY1IDIyLjY5OSBDIDMyMy4xNjIgMjIuNjQ2IDMyMi43NDggMjIuNzc0IDMyMi40MjUgMjMuMDc0IEMgMzIyLjIgMjMuMjQ3IDMyMS45NTkgMjMuNTg1IDMyMS43MTEgMjQuMDg5IEMgMzIxLjExIDI1LjI5MSAzMjAuNjM2IDI2LjQ1NSAzMjAuMjgzIDI3LjU4MiBDIDMyMC4xMzIgMjguMDMzIDMyMC4wNzMgMjguMzg2IDMyMC4wOTUgMjguNjM0IEMgMzIwLjE0OCAyOS4xMDggMzIwLjMyIDI5LjQwOCAzMjAuNjIxIDI5LjUzNiBDIDMyMC44NDcgMjkuNjg2IDMyMS4xMSAyOS43MDkgMzIxLjQxIDI5LjYxMSBDIDMyMS42ODggMjkuNTM2IDMyMS45MTQgMjkuMzcxIDMyMi4wODcgMjkuMTIzIEMgMzIyLjIzOCAyOC44OTcgMzIyLjQ0IDI4LjM3MSAzMjIuNjg5IDI3LjU0NSBDIDMyMi45MzYgMjYuNjIxIDMyMy4zNSAyNS43MDQgMzIzLjkyOCAyNC44MDIgQyAzMjQuMTc3IDI0LjQ0OSAzMjQuMzQyIDI0LjE2NCAzMjQuNDE3IDIzLjkzOCBDIDMyNC41MTUgMjMuNTYzIDMyNC40NyAyMy4yNjIgMzI0LjI2NyAyMy4wMzcgWiBNIDMzMS45MzQgMzAuNDM4IEMgMzMyLjAwOSAzMC4wMzkgMzMxLjg1OSAyOS43MjQgMzMxLjQ4NCAyOS40OTggQyAzMzEuMjU4IDI5LjMyNiAzMzAuODk3IDI5LjIzNSAzMzAuMzkzIDI5LjIzNSBDIDMyOS44NjcgMjkuMjM1IDMyOS4zMjYgMjkuMzMzIDMyOC43NzcgMjkuNTM2IEMgMzI3Ljc0NyAyOS45ODcgMzI3LjAyNiAzMC42NzggMzI2LjU5NyAzMS42MDIgTCAzMjUuNDMyIDM0LjkwOCBDIDMyNS4yMjkgMzUuNDM0IDMyNS4yMjkgMzUuODEgMzI1LjQzMiAzNi4wMzUgQyAzMjUuNTMgMzYuMTYzIDMyNS42OCAzNi4yMzggMzI1Ljg4MyAzNi4yNjEgQyAzMjYuMDU2IDM2LjI2MSAzMjYuMjA2IDM2LjIwOCAzMjYuMzM0IDM2LjExIEMgMzI2LjU2IDM1Ljk2IDMyNi43NDggMzUuNjk3IDMyNi44OTggMzUuMzIxIEMgMzI3LjM3MSAzNS41NDcgMzI3Ljg1MyAzNS40NDkgMzI4LjMyNiAzNS4wMjEgQyAzMjguNjA1IDM0Ljc3MyAzMjguODkgMzQuMzQ1IDMyOS4xOSAzMy43NDQgQyAzMjkuNzQgMzIuNjE3IDMzMC4zNTYgMzEuODI4IDMzMS4wMzMgMzEuMzc3IEMgMzMxLjI4IDMxLjIwNCAzMzEuNDYxIDMxLjA2MSAzMzEuNTU5IDMwLjk2NCBDIDMzMS43NjIgMzAuODEzIDMzMS44ODIgMzAuNjQxIDMzMS45MzQgMzAuNDM4IFpcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICBjbGlwUGF0aDogXCJ1cmwoI2NsaXAxXzEyODhfMjUwMTIpXCIsXG4gIHRyYW5zZm9ybTogXCJtYXRyaXgoMC45MTY3LCAwLCAwLCAwLjkxNjcsIDAuMTM4MjE1LCAwLjMwMDQzNylcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTSA0MzkuMTY1IDU3LjkzNyBDIDQzOS4xODggNTcuNzEyIDQzOS4xNDMgNTcuNTI0IDQzOS4wMTUgNTcuMzc0IEMgNDM4LjMxNiA1Ny4yMDEgNDM3LjU3MiA1Ny4xODYgNDM2Ljc5OCA1Ny4zMzYgTCA0MzUuNTU3IDU5LjQ3OCBDIDQzNC4yMDQgNjEuNzg0IDQzMy4yNDIgNjMuNTIgNDMyLjY2NCA2NC42OTkgTCA0MzEuODM3IDY2LjU0IEMgNDMxLjYxMSA2Ny4wODkgNDMxLjA3IDY4LjU0NiA0MzAuMjIgNzAuODk4IEwgNDI5LjczMSA3Mi40MzggQyA0MjkuMjggNzMuNzY4IDQyOC45NDIgNzUuMTIxIDQyOC43MTYgNzYuNDk2IEMgNDI4LjQ5MiA3Ny42NzUgNDI4LjMwNCA3OC40MjcgNDI4LjE1MyA3OC43NSBDIDQyNy45MjggNzkuMTQ4IDQyNy43OTkgNzkuNDExIDQyNy43NzcgNzkuNTM5IEMgNDI3LjcyNCA3OS42ODkgNDI3LjcyNCA3OS45MyA0MjcuNzc3IDgwLjI1MyBDIDQyNy43OTkgODAuNTUzIDQyNy43OTkgODAuNzc5IDQyNy43NzcgODAuOTI5IEMgNDI3Ljc1NCA4MS4xNTQgNDI3LjY3OSA4MS40MDIgNDI3LjU1MiA4MS42OCBDIDQyNy40NzcgODEuODMgNDI3LjM0OCA4Mi4wNzEgNDI3LjE3NiA4Mi4zOTQgQyA0MjcuMDI1IDgyLjc5MiA0MjYuOTUgODMuNjE5IDQyNi45NSA4NC44NzMgQyA0MjcuMDI1IDg2LjQ1MSA0MjYuOTEzIDg3Ljg3OSA0MjYuNjEyIDg5LjE1NiBMIDQyNi4yMzYgOTAuNjIxIEMgNDI2LjEwOSA5MS4yMjIgNDI2LjAyNiA5MS45MTQgNDI1Ljk3MyA5Mi42ODcgTCA0MjYuMDQ4IDk0LjYwNCBDIDQyNi4xIDk1LjM3OCA0MjYuMDcxIDk2LjAxNiA0MjUuOTczIDk2LjUxOSBDIDQyNS44OTggOTcuMDQ2IDQyNS42OTUgOTcuODEyIDQyNS4zNzEgOTguODEyIEMgNDI1LjE0NiA5OS43MzYgNDI1LjEzMSAxMDAuNTAxIDQyNS4zMzQgMTAxLjEwMyBMIDQyNy4xNzYgMTAxLjI5MSBDIDQyNy4xNTMgMTAwLjk5IDQyNy4yMTMgMTAwLjY3NSA0MjcuMzY0IDEwMC4zNTEgQyA0MjYuOTY1IDEwMC4xMDMgNDI2LjczOSA5OS43MzYgNDI2LjY4NyA5OS4yNjIgQyA0MjcuMTkxIDk4LjYwOCA0MjcuNDM5IDk3LjY5OSA0MjcuNDM5IDk2LjUxOSBDIDQyNy4zNDEgOTUuMTY3IDQyNy4yODkgOTQuMTUzIDQyNy4yODkgOTMuNDc3IEMgNDI3LjMxMSA5Mi45NTEgNDI3LjQwMSA5Mi4yODkgNDI3LjU1MiA5MS40ODUgQyA0MjcuNzU0IDkwLjMwNiA0MjcuODY3IDg5LjYzIDQyNy44OSA4OS40NTcgQyA0MjguMDYzIDg4LjEyNyA0MjguMDU1IDg2LjEyOCA0MjcuODUzIDgzLjQ0NiBMIDQyOC42NzkgODMuMDcgTCA0MjguNjc5IDgwLjQ0IEwgNDI5LjQ2OCA4MC4wNjUgQyA0MjkuMjQzIDc5LjM4OSA0MjkuMzE4IDc4LjQ2NCA0MjkuNjk0IDc3LjI4NSBDIDQzMC4wOTMgNzUuOTMyIDQzMC4yNzIgNzQuOTc4IDQzMC4yMiA3NC40MyBMIDQzMC45NzIgNzQuMDU0IEMgNDMwLjc0NiA3My4wNTUgNDMxLjAyNCA3MS43NDcgNDMxLjc5OSA3MC4xNDcgQyA0MzIuNzAxIDY4LjI0NiA0MzMuMTc0IDY2LjkxNiA0MzMuMjI3IDY2LjE2NSBMIDQzMy45MDMgNjUuNzg5IEMgNDM0LjM1NCA2NC4yODYgNDM1LjM2OSA2Mi4yNzMgNDM2Ljk0OCA1OS43NDEgQyA0MzcuMzAxIDU5LjE2MiA0MzcuNjQ3IDU4LjgxNiA0MzggNTguNjg5IEMgNDM4LjM5OSA1OC42MzYgNDM4LjY5MiA1OC41NjEgNDM4Ljg2NSA1OC40NjMgQyA0MzkuMDM4IDU4LjM2NiA0MzkuMTQzIDU4LjE4NSA0MzkuMTY1IDU3LjkzNyBaIE0gMzMzLjk2NCA2My4xOTcgQyAzMzIuOTM0IDYzLjg5NiAzMzIuMTQ1IDY0LjgyNyAzMzEuNTk2IDY1Ljk3NyBDIDMzMS4zOTMgNjYuNDA1IDMzMS4wOTIgNjcuMDY2IDMzMC42OTQgNjcuOTY4IEMgMzMwLjY0OCA2OC4wNTggMzMwLjQwOCA2OC4zODkgMzI5Ljk4IDY4Ljk0NSBMIDMyOC4wNjMgNjkuNzM0IEMgMzI1LjgzIDcwLjcxIDMyMy44OTEgNzIuMTIzIDMyMi4yMzcgNzMuOTc5IEMgMzIwLjU4MyA3NS44NTcgMzE5LjQwMyA3Ny45NDYgMzE4LjcwNCA4MC4yNTMgQyAzMTguNTUzIDgwLjc3OSAzMTguMzUxIDgxLjU1MiAzMTguMTAyIDgyLjU4MiBDIDMxNy44MjQgODMuNDYxIDMxNy41MzkgODQuMTk3IDMxNy4yMzggODQuNzk4IEMgMzE2Ljk5IDg1LjMwMiAzMTYuNjIxIDg1Ljg1IDMxNi4xNDggODYuNDUxIEMgMzE1Ljg3IDg2Ljc3NCAzMTUuNDM0IDg3LjI3OCAzMTQuODMyIDg3Ljk1NCBDIDMxMy4wMDYgOTAuMTU2IDMxMS41NCA5Mi41NzUgMzEwLjQzNSA5NS4yMDQgQyAzMDkuOTYyIDk2LjQ4MiAzMDkuNzk2IDk3LjQ4MSAzMDkuOTQ2IDk4LjIxIEMgMzEwLjA5NyA5OC43MzYgMzEwLjM5NyA5OS4xNDkgMzEwLjg0OCA5OS40NSBDIDMxMS4zMjMgOTkuNzczIDMxMS44MDMgOTkuODQ4IDMxMi4yNzcgOTkuNjc1IEMgMzExLjM3NSA5OS4wNzQgMzEwLjkwOSA5OC4xNTggMzEwLjg4NiA5Ni45MzMgQyAzMTAuODg2IDk1LjcwOCAzMTEuMzIzIDk0Ljc3NiAzMTIuMjAyIDk0LjE1MyBDIDMxMy43MjggOTQuNjU2IDMxNS4yNjkgOTQuNjA0IDMxNi44MjUgOTQuMDAyIEMgMzE1Ljk5OCA5My4zMDQgMzE1LjA3NCA5Mi43NDEgMzE0LjA0MyA5Mi4zMTEgQyAzMTYuMzc0IDg5Ljk4MyAzMTguMTkzIDg3LjM5IDMxOS40OTMgODQuNTM1IEMgMzIwLjU2OSA4MS45MjggMzIxLjQxIDgwLjAwNSAzMjIuMDEyIDc4Ljc1IEMgMzIzLjA2NCA3Ni41OTQgMzI0LjMwNCA3NS4wMTYgMzI1LjczMyA3NC4wMTYgQyAzMjYuNDMxIDczLjUxMyAzMjcuODIyIDcyLjg1MiAzMjkuOTA1IDcyLjAyNSBDIDMzMS43MDggNzEuMjk2IDMzMy4wMDkgNzAuNTQ1IDMzMy44MTQgNjkuNzcxIEMgMzM0LjE5IDY5LjM5NSAzMzQuNDMgNjguOTY3IDMzNC41MjggNjguNDk0IEMgMzM0LjY1NSA2Ny45NjggMzM0LjUyOCA2Ny41OTIgMzM0LjE1MiA2Ny4zNjcgQyAzMzMuNzAxIDY3LjA2NiAzMzIuOTg3IDY3LjI1NCAzMzIuMDA5IDY3LjkzIEMgMzMxLjg3NCA2OC4wMiAzMzEuNzI0IDY4LjExMSAzMzEuNTU4IDY4LjE5MyBDIDMzMS45MTIgNjcuNjM3IDMzMi4xNDUgNjcuMjg0IDMzMi4yNzIgNjcuMTQxIEMgMzMyLjg1MSA2Ni41NjMgMzMzLjI2NCA2Ni4xMTIgMzMzLjUxMyA2NS43ODkgTCAzMzQuMzQgNjQuODEyIEMgMzM0LjY5MyA2NC40NTkgMzM1LjA2OSA2NC4zMDEgMzM1LjQ2NyA2NC4zMjQgQyAzMzUuNDkgNjQuMDAxIDMzNS40MjkgNjMuNjcgMzM1LjI3OSA2My4zNDcgTCAzMzMuOTY0IDYzLjE5NyBaIE0gNTIzLjk5NiAxNTUuODAyIEwgNTIzLjI0NCAxNTUuODAyIEMgNTIzLjE0NyAxNTYuMDc5IDUyMi45NDMgMTU2LjM0MyA1MjIuNjQyIDE1Ni41OTEgTCA1MjIuNTMgMTU2LjcwNCBDIDUyMi40NTQgMTU2LjgzMSA1MjIuNDQgMTU3LjAyNyA1MjIuNDkyIDE1Ny4zMDQgTCA1MjMuMzE5IDE1Ny40NTUgQyA1MjMuNjIgMTU3LjUwNyA1MjMuODgzIDE1Ny40NTUgNTI0LjEwOSAxNTcuMzA0IEMgNTI0LjIwNyAxNTcuMjgyIDUyNC4yODIgMTU3LjE5MiA1MjQuMzM0IDE1Ny4wNDEgQyA1MjQuMzU3IDE1Ni45MTQgNTI0LjMzNCAxNTYuNzc5IDUyNC4yNTkgMTU2LjYyOSBMIDUyMy45OTYgMTU1LjgwMiBaIE0gNDk3LjgzNiAxNzcuNjY2IEMgNDk3LjQwOCAxNzcuNTY5IDQ5Ny4xMDcgMTc3LjU2OSA0OTYuOTM0IDE3Ny42NjYgQyA0OTYuNzg0IDE3Ny43NDIgNDk2LjU4MSAxNzcuOTA3IDQ5Ni4zMzMgMTc4LjE1NSBDIDQ5Ni4wNTUgMTc4LjM4MSA0OTUuOTA0IDE3OC41MDggNDk1Ljg4MiAxNzguNTMgQyA0OTUuNzg0IDE3OC42NTggNDk1Ljc1NCAxNzguODQ2IDQ5NS44MDcgMTc5LjA5NCBDIDQ5NS44NTkgMTgwLjA0OCA0OTYuMDg1IDE4MC42OTQgNDk2LjQ4NCAxODEuMDQ4IEMgNDk2LjcwOCAxODEuMjUxIDQ5Ny4xIDE4MS40MDEgNDk3LjY0OCAxODEuNDk4IEMgNDk3Ljk0OSAxODEuNTUxIDQ5OC4xOTcgMTgxLjUyMSA0OTguNCAxODEuNDIzIEMgNDk4LjU1IDE4MS4zNzEgNDk4LjcxNiAxODEuMjM1IDQ5OC44ODkgMTgxLjAxIEwgNTAwLjI4IDE3OC43MTggQyA1MDAuMjI3IDE3OC4zOTUgNDk5Ljg4OCAxNzguMTM5IDQ5OS4yNjUgMTc3Ljk2NyBMIDQ5Ny44MzYgMTc3LjY2NiBaIE0gNDY4LjU1NyAxOTYuMTg3IEMgNDY4LjkzMyAxOTYuMjYyIDQ2OS4zMDkgMTk2LjIwMyA0NjkuNjg1IDE5NS45OTkgQyA0NjkuMzg0IDE5NS42NDYgNDY5LjE5NiAxOTUuMjcxIDQ2OS4xMjEgMTk0Ljg3MiBMIDQ2Ny45OTMgMTk0LjY4NCBDIDQ2Ny44OTYgMTk0LjkxIDQ2Ny41OTUgMTk1LjA5OCA0NjcuMDkxIDE5NS4yNDggQyA0NjYuNTY2IDE5NS4zOTkgNDY2LjI0MiAxOTUuNTcxIDQ2Ni4xMTUgMTk1Ljc3NSBDIDQ2Ni4wMzkgMTk1Ljg3MiA0NjUuOTc5IDE5Ni4wMjIgNDY1LjkyNyAxOTYuMjI1IEMgNDY1Ljg1MSAxOTYuNDUgNDY1Ljc5MSAxOTYuNjE1IDQ2NS43MzkgMTk2LjcxMyBDIDQ2NS42NjMgMTk2Ljg0MSA0NjUuNTI4IDE5Ni45OTkgNDY1LjMyNSAxOTcuMjAyIEMgNDY1LjI1IDE5Ny4zMyA0NjUuMTg5IDE5Ny42MTUgNDY1LjEzNyAxOTguMDY2IEMgNDY1LjEzNyAxOTguOTkgNDY1LjIxMiAxOTkuNjgyIDQ2NS4zNjMgMjAwLjEzMiBDIDQ2Ni45MTkgMjAwLjM4IDQ2OC4xMDYgMjAwLjUwOCA0NjguOTMzIDIwMC41MDggQyA0NjkuNDA2IDIwMC41MDggNDY5Ljc0NSAyMDAuNDE4IDQ2OS45NDggMjAwLjI0NSBDIDQ3MC4xNTEgMjAwLjA5NCA0NzAuMzM5IDE5OS43NDEgNDcwLjUxMiAxOTkuMTkzIEMgNDcwLjY4NCAxOTguNjY2IDQ3MC45MSAxOTguMzUxIDQ3MS4xODggMTk4LjI1NCBDIDQ3MS4wMzcgMTk4LjAwNSA0NzAuNzkgMTk3LjgyNiA0NzAuNDM3IDE5Ny43MjggQyA0NzAuMTM2IDE5Ny42NTIgNDY5LjgxMiAxOTcuNjM4IDQ2OS40NTkgMTk3LjY5IEMgNDY5LjI1NyAxOTcuNjkgNDY5LjEzNiAxOTcuNzEzIDQ2OS4wODQgMTk3Ljc2NSBDIDQ2OC45ODUgMTk3Ljg0IDQ2OC44ODEgMTk3Ljk3NiA0NjguNzgzIDE5OC4xNzkgQyA0NjguNzA4IDE5OC4yMzEgNDY4LjU0MyAxOTguMjU0IDQ2OC4yOTQgMTk4LjI1NCBDIDQ2OC4wOTEgMTk4LjI3NiA0NjcuNzkxIDE5OC40MTkgNDY3LjM5MiAxOTguNjY2IEMgNDY3LjAxNiAxOTguOTE1IDQ2Ni43MTYgMTk5LjAyOCA0NjYuNDkgMTk5LjAwNSBDIDQ2Ni40NjggMTk4Ljc3OSA0NjYuNjE4IDE5OC40MjYgNDY2Ljk0MiAxOTcuOTUzIEMgNDY3LjI0MSAxOTcuNTI1IDQ2Ny4zNCAxOTcuMTg3IDQ2Ny4yNDEgMTk2LjkzOSBMIDQ2OC41NTcgMTk2LjU2MyBMIDQ2OC41NTcgMTk2LjE4NyBaIE0gNDMyLjMyNSAyMTMuODQ0IEwgNDMxLjQ5OCAyMTMuODQ0IEMgNDMwLjc2OSAyMTUuMzQ3IDQzMC41MzUgMjE2Ljk3NyA0MzAuNzg0IDIxOC43MjkgQyA0MzAuOTExIDIxOC44MDMgNDMxLjE4MyAyMTguOTc2IDQzMS42MTEgMjE5LjI1NCBDIDQzMS45MzQgMjE5LjUwMyA0MzIuMjI3IDIxOS42NjggNDMyLjQ3NiAyMTkuNzQzIEMgNDMyLjcyMyAyMTkuODQgNDMzLjEyOSAyMTkuOTE1IDQzMy42NzggMjE5Ljk2OCBDIDQzNC42MDMgMjIwLjAyMSA0MzUuMjQyIDIxOS45OSA0MzUuNTk1IDIxOS44OTMgQyA0MzYuMzY5IDIxOS42OSA0MzcuMjExIDIxOC45NzYgNDM4LjExMyAyMTcuNzUxIEMgNDM4LjMxNiAyMTcuNTQ5IDQzOC40MjkgMjE3LjM1MyA0MzguNDUxIDIxNy4xNTEgQyA0MzguNDUxIDIxNi45MjUgNDM4LjM2MSAyMTYuNjk5IDQzOC4xODggMjE2LjQ3NCBDIDQzNy45NCAyMTYuMTUxIDQzNy42MDkgMjE1LjkxMSA0MzcuMjExIDIxNS43NjEgQyA0MzYuODEzIDIxNS42MzIgNDM2LjQwNiAyMTUuNjI1IDQzNi4wMDkgMjE1LjcyMyBDIDQzNS44MDUgMjE2LjYwMiA0MzUuNDgyIDIxNy4xMzUgNDM1LjAzMSAyMTcuMzM5IEMgNDM0Ljg4MSAyMTcuNDEzIDQzNC42MzIgMjE3LjQ1IDQzNC4yNzkgMjE3LjQ1IEMgNDMzLjc3NiAyMTcuNDUgNDMzLjE4OSAyMTcuMzkxIDQzMi41MTMgMjE3LjI2MyBDIDQzMi4xNTkgMjE3LjE2NSA0MzEuOTI2IDIxNy4wMjIgNDMxLjc5OSAyMTYuODUgQyA0MzEuNzI0IDIxNi42OTkgNDMxLjcwOCAyMTYuNDE0IDQzMS43NjEgMjE1Ljk4NiBMIDQzMi4zMjUgMjEzLjg0NCBaIE0gMzI5LjM3OCAyNTcuNzYxIEMgMzI5LjIwNSAyNTcuNjg3IDMyOS4wNCAyNTcuNjY0IDMyOC44OSAyNTcuNjg3IEMgMzI4LjczOSAyNTcuNjg3IDMyOC41MzcgMjU3Ljc4NCAzMjguMjg4IDI1Ny45ODYgTCAzMjcuMzExIDI1OC43MDEgQyAzMjYuNjEyIDI1OS4wOTkgMzI1LjgyMyAyNTkuMzAxIDMyNC45NDMgMjU5LjMwMSBDIDMyNC45NjUgMjU5LjIwNCAzMjQuOTY1IDI1OS4wMTYgMzI0Ljk0MyAyNTguNzM4IEMgMzI0LjkyIDI1OC40OSAzMjQuOTQzIDI1OC4zMSAzMjUuMDE5IDI1OC4yMTIgQyAzMjUuMDQxIDI1OC4xNiAzMjUuMTY5IDI1OC4wNDcgMzI1LjM5NCAyNTcuODc0IEMgMzI1LjYyIDI1Ny42NzEgMzI1LjczMyAyNTcuMzYzIDMyNS43MzMgMjU2LjkzNSBDIDMyNS43MzMgMjU2LjcwOSAzMjUuNjU4IDI1Ni4zNzIgMzI1LjUwNyAyNTUuOTIxIEMgMzI1LjI1OSAyNTUuODk4IDMyNS4wMDMgMjU1Ljk1OCAzMjQuNzU1IDI1Ni4xMDkgQyAzMjQuODMxIDI1Ni4zMTEgMzI0LjgwOCAyNTYuNTM3IDMyNC42OCAyNTYuNzg0IEMgMzI0LjYwNSAyNTYuOTM1IDMyNC40NjkgMjU3LjE0NiAzMjQuMjY3IDI1Ny40MjMgQyAzMjMuOTE0IDI1OC4wMDIgMzIzLjg5MSAyNTguODczIDMyNC4xOTEgMjYwLjA1MyBMIDMyNi4wMzQgMjYwLjM5MSBDIDMyNi4xMDkgMjYwLjM5MSAzMjYuMTY4IDI2MC40MTMgMzI2LjIyMiAyNjAuNDY2IEMgMzI2LjI3NCAyNjAuNTE5IDMyNi4yODEgMjYwLjU2NCAzMjYuMjU5IDI2MC42MTYgTCAzMjguNzAyIDI2MC42MTYgQyAzMjguNjI3IDI2MC40MTMgMzI4Ljc5MiAyNjAuMTY2IDMyOS4xOSAyNTkuODY1IEMgMzI5LjQ5MSAyNTkuNTg3IDMyOS43MzkgMjU5LjMxNyAzMjkuOTQyIDI1OS4wMzkgQyAzMzAuMTY4IDI1OC43MTUgMzMwLjIyIDI1OC40MzggMzMwLjA5MyAyNTguMjEyIEMgMzMwLjAxOCAyNTguMDA5IDMyOS43NzYgMjU3Ljg1OSAzMjkuMzc4IDI1Ny43NjEgWiBNIDI5Ny42OTMgMjY2LjYyNyBDIDI5Ny41NDMgMjY2LjYyNyAyOTcuMjggMjY2LjY2NSAyOTYuOTA0IDI2Ni43NCBDIDI5Ni42MDQgMjY2Ljc5MiAyOTYuMzYzIDI2Ni43OTIgMjk2LjE5MSAyNjYuNzQgQyAyOTUuODM3IDI2Ni41OSAyOTUuNTg5IDI2Ni4yMzcgMjk1LjQzOSAyNjUuNjg5IEMgMjk2LjE5MSAyNjUuMDg3IDI5Ni42NDIgMjY0LjM1MSAyOTYuNzkxIDI2My40NzEgQyAyOTYuNTg5IDI2My4zMjEgMjk2LjM5MyAyNjMuMzc0IDI5Ni4xOTEgMjYzLjYyMiBDIDI5Ni4wOTMgMjYzLjc3MiAyOTUuOTUgMjYzLjk4MiAyOTUuNzc3IDI2NC4yNjEgQyAyOTUuNjQ5IDI2NC40MTEgMjk1LjQyMyAyNjQuNTg0IDI5NS4xIDI2NC43ODYgQyAyOTQuODIzIDI2NS4wMzUgMjk0LjY3MiAyNjUuMzcyIDI5NC42NDkgMjY1LjgwMSBDIDI5NC42MjYgMjY2LjIyOSAyOTQuNzM5IDI2Ni41OSAyOTQuOTg4IDI2Ni44OTEgQyAyOTUuMzY0IDI2Ny40MTYgMjk2LjA0IDI2Ny43NTQgMjk3LjAxNyAyNjcuOTA1IEMgMjk4LjA0NyAyNjguMTMgMjk5LjE0NSAyNjguMTUyIDMwMC4zMjUgMjY3Ljk4IEMgMzAwLjYyNiAyNjcuOTI4IDMwMC44MzYgMjY3LjgzIDMwMC45NjMgMjY3LjY3OSBDIDMwMS4wMTYgMjY3LjM1NiAzMDEuMDYxIDI2Ny4xMDEgMzAxLjExNCAyNjYuOTI4IEMgMzAxLjI4NyAyNjYuNjQ5IDMwMS40MTQgMjY2LjQ1NCAzMDEuNDkgMjY2LjMyNyBDIDMwMS43MzggMjY1Ljk3NCAzMDEuODY1IDI2NS41OSAzMDEuODY1IDI2NS4xNjIgQyAzMDEuODQzIDI2NC43MTEgMzAxLjcgMjY0LjMyIDMwMS40NTIgMjYzLjk5OCBDIDMwMC45NDkgMjYzLjk5OCAzMDAuNTI4IDI2NC4xNyAzMDAuMTc1IDI2NC41MjMgQyAyOTkuOTcxIDI2NC43MjcgMjk5LjcwOCAyNjUuMDQ5IDI5OS4zODUgMjY1LjUwMSBDIDI5OS4wNjIgMjY1LjgyMyAyOTguNDk4IDI2Ni4wNjQgMjk3LjY5MyAyNjYuMjE0IEwgMjk3LjY5MyAyNjYuNjI3IFogTSA1MjguNzMyIDE0My45MyBDIDUyOS42MTEgMTQzLjM1MiA1MzAuMjUgMTQyLjkxNiA1MzAuNjQ5IDE0Mi42MTUgQyA1MzEuMzI1IDE0Mi4wNjcgNTMxLjc5OSAxNDEuNTAzIDUzMi4wNzcgMTQwLjkyNSBMIDUzMS4xNzQgMTQwLjgxMiBMIDUyNi40MzkgMTQ0Ljc5NCBDIDUyNS40ODQgMTQ1LjY0MyA1MjQuMTMyIDE0Ni45ODggNTIyLjM4IDE0OC44MTQgQyA1MjAuODAxIDE1MC40MTUgNTE5LjA4OCAxNTEuODczIDUxNy4yMzEgMTUzLjE3MiBDIDUxNS42IDE1NC4zNzQgNTEzLjA3NCAxNTYuMDUgNTA5LjYzOCAxNTguMjA3IEMgNTA5LjA5IDE1OC41ODIgNTA4LjU2MyAxNTguOTk1IDUwOC4wNiAxNTkuNDQ2IEMgNTA3LjcwNiAxNTkuODIxIDUwNy4yMzMgMTYwLjQzNyA1MDYuNjMxIDE2MS4yODcgQyA1MDYuMDA4IDE2Mi4wOTEgNTA1LjA2OCAxNjIuOTc3IDUwMy44MTMgMTYzLjk1NCBDIDUwMi4xODEgMTY1LjIwOSA1MDEuMTY2IDE2Ni4wMzUgNTAwLjc2OSAxNjYuNDMzIEMgNTAwLjMxNyAxNjYuODg0IDUwMC4xMDYgMTY3LjI5OCA1MDAuMTI5IDE2Ny42NzMgTCA1MDIuOTg2IDE2NS43MiBDIDUwMy45NCAxNjUuMDQzIDUwNC41NjUgMTY0LjU3IDUwNC44NjUgMTY0LjI5MiBDIDUwNS4yNCAxNjMuOTM5IDUwNS43MDcgMTYzLjQyOCA1MDYuMjU1IDE2Mi43NTIgQyA1MDYuOTA5IDE2MS45NDggNTA3LjM2OCAxNjEuNDE1IDUwNy42NDYgMTYxLjEzNiBDIDUwOC4zNDUgMTYwLjQwNyA1MDkuNDEzIDE1OS41NzQgNTEwLjg0MSAxNTguNjE5IEwgNTIwLjA4NyAxNTIuMTU4IEwgNTI2LjI4OSAxNDYuMTQ2IEMgNTI3LjM0MSAxNDUuMDk1IDUyOC4xNTMgMTQ0LjM1OCA1MjguNzMyIDE0My45MyBaIE0gNDQxLjU3MSAyMDIuOTg3IEMgNDQwLjg2NSAyMDMuMzkzIDQ0MC4xNzMgMjAzLjc1NCA0MzkuNTA0IDIwNC4wNzYgQyA0MzkuMjEgMjA0LjA2MiA0MzguODcyIDIwNC4xMDcgNDM4LjQ4OSAyMDQuMjI3IEwgNDM3LjY2MiAyMDQuNDkgQyA0MzcuMjExIDIwNC41ODggNDM2LjkxMSAyMDQuNzY4IDQzNi43NiAyMDUuMDE2IEMgNDM2Ljg1IDIwNS4wNjggNDM2Ljk1NiAyMDUuMTA2IDQzNy4wNjEgMjA1LjEyOSBDIDQzNi4yMDQgMjA1LjQ0NCA0MzUuNDA3IDIwNS42NyA0MzQuNjU1IDIwNS44MDUgQyA0MzMuNjAzIDIwNS45NzggNDMyLjg4OCAyMDYuMTI3IDQzMi41MTMgMjA2LjI1NiBDIDQzMS43MzggMjA2LjUzNCA0MzEuMjEyIDIwNi45NDcgNDMwLjkzNCAyMDcuNDk1IEMgNDMwLjkxMSAyMDcuNTEgNDMwLjg4MiAyMDcuNTI2IDQzMC44NTkgMjA3LjUzMyBDIDQzMC4yODEgMjA3LjgxMSA0MjkuNzY5IDIwOC4xMTIgNDI5LjMxOCAyMDguNDM0IEwgNDI1LjQ0NyAyMTAuOTg5IEMgNDI2LjA3MSAyMTEuMjkgNDI2Ljg5NyAyMTEuMTAyIDQyNy45MjggMjEwLjQyNiBMIDQzMC44MjIgMjA4LjczNSBDIDQzMS4zMjUgMjA4LjYwOCA0MzEuNjYzIDIwOC40NzIgNDMxLjgzNyAyMDguMzIyIEwgNDMyLjIxMiAyMDcuOTg0IEwgNDMzLjExNCAyMDcuNzU5IEMgNDMzLjU0MyAyMDcuNjA4IDQzMy42OTMgMjA3LjM4MyA0MzMuNTY1IDIwNy4wODIgTCA0MzMuMzM5IDIwNy4wNDQgQyA0MzYuNzA3IDIwNi4zMTUgNDM5Ljg2NCAyMDUuMDkxIDQ0Mi44MTEgMjAzLjM2MyBMIDQ0Ni4wODEgMjAxLjQ0NyBDIDQ0Ni43MDUgMjAxLjE0NyA0NDguMTcxIDIwMC41NjggNDUwLjQ3OCAxOTkuNzE5IEMgNDUyLjI4MyAxOTkuMDY1IDQ1My42NzQgMTk4LjQwNCA0NTQuNjUgMTk3LjcyOCBDIDQ1NS4wNzkgMTk3LjQ1IDQ1NS42NDMgMTk3LjAyOSA0NTYuMzQyIDE5Ni40NSBDIDQ1Ny4wNzEgMTk1LjgyNyA0NTcuNjIgMTk1LjM4MyA0NTcuOTk2IDE5NS4xMzUgQyA0NTguNTk3IDE5NC43MDcgNDU5Ljc0IDE5NC4wOTggNDYxLjQxNiAxOTMuMjk0IEMgNDY0LjI1IDE5MS45MiA0NjcuMzkyIDE5MC4yMzYgNDcwLjg1IDE4OC4yNiBDIDQ3Mi44MDQgMTg3LjExMSA0NzUuODY0IDE4NS4yNzggNDgwLjAyMSAxODIuNzc1IEwgNDkzLjUxNCAxNzQuNTg2IEMgNDkzLjgzOCAxNzQuMzgzIDQ5NC4wOTMgMTc0LjE1NyA0OTQuMjY2IDE3My45MSBDIDQ5NC40OTEgMTczLjU4NiA0OTQuNTA2IDE3My4zMDggNDk0LjMwMyAxNzMuMDgzIEwgNDcxLjkwMiAxODYuNDIgQyA0NjcuNjE3IDE4OC45NzUgNDY0LjM3MSAxOTAuNzE4IDQ2Mi4xNjggMTkxLjY0MiBDIDQ2MC4yNjYgMTkyLjQ0NSA0NTkuMDQ4IDE5My4wMzIgNDU4LjUyMiAxOTMuNDA3IEMgNDU4LjA0OCAxOTMuNzA4IDQ1Ny40NDcgMTk0LjIxMSA0NTYuNzE4IDE5NC45MSBDIDQ1NS44OTEgMTk1LjY4NCA0NTUuMjg5IDE5Ni4yMSA0NTQuOTE0IDE5Ni40ODggQyA0NTQuNDAzIDE5Ni44NDEgNDUzLjc4NyAxOTcuMTc5IDQ1My4wNzIgMTk3LjUwMiBMIDQ1Mi45NiAxOTcuMTI3IEwgNDUyLjEzMiAxOTcuNTAyIEMgNDUxLjUwOSAxOTcuNzUgNDUwLjcyIDE5OC4xOTMgNDQ5Ljc2NSAxOTguODE3IEMgNDQ5LjE1NSAxOTkuMDM1IDQ0OC42NTIgMTk5LjIyMyA0NDguMjYxIDE5OS4zODEgQyA0NDcuMzgyIDE5OS43NTcgNDQ1LjE1NyAyMDAuOTU5IDQ0MS41NzEgMjAyLjk4NyBaIE0gMzM0LjE1MiAyNDUuOTY1IEMgMzMzLjc5OCAyNDYuMjQzIDMzMy4yNjQgMjQ2LjQxNiAzMzIuNTM1IDI0Ni40OTEgQyAzMzEuNjMzIDI0Ni41ODggMzMxLjA1NSAyNDYuNjk0IDMzMC44MDYgMjQ2Ljc5MiBDIDMzMC41MjggMjQ2LjkxOSAzMzAuMTgzIDI0Ny4xMjkgMzI5Ljc1NCAyNDcuNDMgQyAzMjkuMjUgMjQ3LjgwNiAzMjguOTEzIDI0OC4wNDYgMzI4LjczOSAyNDguMTQ0IEwgMzI3Ljc2MiAyNDguNjMyIEMgMzI3LjM4NiAyNDguOTEgMzI3LjE5OCAyNDkuMjExIDMyNy4xOTggMjQ5LjUzNCBDIDMyNy43MDIgMjQ5LjU1NiAzMjguMjY1IDI0OS4zMzEgMzI4Ljg5IDI0OC44NTggQyAzMjkuNDkxIDI0OC4zMzIgMzMwLjAwMiAyNDcuOTk0IDMzMC40MzEgMjQ3Ljg0MyBDIDMzMC41ODEgMjQ3Ljc5MSAzMzAuODIyIDI0Ny43NTQgMzMxLjE0NCAyNDcuNzMxIEwgMzMxLjgyMSAyNDcuNjU2IEMgMzMyLjQ3NSAyNDcuNjAzIDMzMi45NDkgMjQ3LjUyOCAzMzMuMjUgMjQ3LjQzIEMgMzMzLjc3NiAyNDcuMjA0IDMzNC4xMjkgMjQ2LjkwNSAzMzQuMzAyIDI0Ni41MjkgTCAzMzQuMTUyIDI0NS45NjUgWiBNIDMxNC4yMzEgMjUzLjAyOCBDIDMxNC4zNTkgMjUyLjg3NyAzMTQuNzk1IDI1Mi40NjQgMzE1LjU0NyAyNTEuNzg4IEwgMzE1LjM5NiAyNTEuMjk5IEwgMzEyLjY1MyAyNTIuNjE0IEMgMzExLjcyOCAyNTMuMTE4IDMxMC44MTEgMjUzLjcxOSAzMDkuOTA5IDI1NC40MTggTCAzMTAuMDk3IDI1NC44MzEgQyAzMTEuMDIyIDI1NC4xNTUgMzEyLjA2NiAyNTMuNzQxIDMxMy4yMTcgMjUzLjU5MiBDIDMxMy41NCAyNTMuNTM4IDMxMy43MjggMjUzLjQ5NCAzMTMuNzggMjUzLjQ0MSBDIDMxMy44MzMgMjUzLjQxOCAzMTMuOTgzIDI1My4yNzUgMzE0LjIzMSAyNTMuMDI4IFogTSAzMDUuNjI0IDI1Ni40MDkgQyAzMDUuODQ5IDI1Ni4yMzYgMzA1LjkwMyAyNTYuMDcxIDMwNS43NzQgMjU1LjkyMSBMIDMwMi42NTUgMjU1Ljc3IEMgMzAyLjM3NyAyNTUuNzE4IDMwMi4xMjkgMjU1LjczMyAzMDEuOTAzIDI1NS44MDggTCAzMDEuMzc3IDI1NS45OTYgQyAzMDAuNjc4IDI1Ni4yMjEgMjk5Ljg4OSAyNTYuMTMxIDI5OS4wMDkgMjU1LjczMyBDIDI5OC45MzQgMjU1LjkwNSAyOTguODA3IDI1NS45NzMgMjk4LjYzMyAyNTUuOTIxIEwgMjk4LjYzMyAyNTYuMjk3IEMgMjk5LjMxIDI1Ni42MTkgMzAwLjExNCAyNTYuOTEzIDMwMS4wMzggMjU3LjE2IEMgMzAxLjI2NCAyNTcuMjU3IDMwMS40NTIgMjU3LjI3MyAzMDEuNjAyIDI1Ny4xOTggQyAzMDEuNyAyNTcuMTc1IDMwMS44MjggMjU3LjA4NSAzMDEuOTc4IDI1Ni45MzUgQyAzMDIuMDUzIDI1Ni44ODIgMzAyLjI1NyAyNTYuODM4IDMwMi41OCAyNTYuNzg0IEwgMzA1LjA5OSAyNTYuNTU5IEMgMzA1LjM5OCAyNTYuNTA3IDMwNS41NzIgMjU2LjQ2MiAzMDUuNjI0IDI1Ni40MDkgWiBNIDI4Mi4xMzMgMjU4Ljk2NCBDIDI4Mi4wMDYgMjU5LjA2MSAyODEuOTgzIDI1OS4xNzQgMjgyLjA1OCAyNTkuMzAxIEMgMjgzLjIzOCAyNTkuNDUyIDI4NC40MjYgMjU5LjQ1MiAyODUuNjI5IDI1OS4zMDEgQyAyODYuMjgyIDI1OS4yMjYgMjg3LjI0NSAyNTkuMDkxIDI4OC41MjIgMjU4Ljg4OSBDIDI4OC42OTYgMjU4Ljg4OSAyODkuNTE2IDI1OC45MDMgMjkwLjk2NiAyNTguOTI2IEMgMjkxLjk0MyAyNTguOTc5IDI5Mi43MzIgMjU4LjkxMSAyOTMuMzM0IDI1OC43MzggTCAyOTMuMzM0IDI1OC4zMjUgTCAyOTUuODkgMjU3LjI3MyBDIDI5Ni4yODggMjU3LjEgMjk2LjQ1NCAyNTYuODk3IDI5Ni4zNzkgMjU2LjY3MiBMIDI5NC44NzUgMjU2LjQ4NCBDIDI5NC43MDIgMjU2Ljc2MiAyOTQuMzYzIDI1Ni45NTggMjkzLjg2IDI1Ny4wODUgQyAyOTMuMTYxIDI1Ny4yODggMjkyLjMwNCAyNTcuNDM4IDI5MS4zMDQgMjU3LjUzNiBDIDI5MC4xNTQgMjU3LjY2NCAyODkuMjc0IDI1Ny43NDYgMjg4LjY3MyAyNTcuNzk4IEMgMjg3LjU0NiAyNTcuODk3IDI4NS41MDEgMjU4LjIyOCAyODIuNTQ3IDI1OC43NzYgQyAyODIuMzk3IDI1OC43OTggMjgyLjI2MSAyNTguODY2IDI4Mi4xMzMgMjU4Ljk2NCBaIE0gMTA3LjQ3NCAyMTguNTAzIEwgMTA3LjU4NiAyMTguMTI3IEMgMTA3LjYwOSAyMTcuOTAyIDEwNy41NjMgMjE3LjY2MSAxMDcuNDM2IDIxNy40MTQgTCAxMDYuNjg0IDIxNy40MTQgQyAxMDYuNzA3IDIxNy42NjEgMTA2LjcyMiAyMTguMDUyIDEwNi43MjIgMjE4LjU3OCBMIDEwNi44NzIgMjE5LjE3OSBDIDEwNi44NzIgMjE5LjQ4IDEwNi44ODcgMjE5LjY1MiAxMDYuOTEgMjE5LjcwNSBMIDEwNy4xNzMgMjIwLjExOCBMIDEwNy4yNDggMjIwLjE5MyBDIDEwNy4zMjMgMjIwLjI0NiAxMDcuNDUxIDIyMC4yNTMgMTA3LjYyNCAyMjAuMjMxIEMgMTA3LjYyNCAyMTkuNTAzIDEwNy41ODYgMjE5LjAyOCAxMDcuNTExIDIxOC44MDMgTCAxMDcuNDc0IDIxOC41MDMgWiBNIDk4LjIyNyAyMTYuMDk4IEMgOTguMDAyIDIxNi4wMDEgOTcuODMgMjE2LjA2MSA5Ny43MDEgMjE2LjI4NiBDIDk3Ljk4IDIxNy4yMSA5OC4zMTcgMjE4LjEwNCA5OC43MTYgMjE4Ljk1MyBDIDk4Ljk2NSAyMTkuNDU3IDk5LjExNSAyMTkuODcgOTkuMTY3IDIyMC4xOTMgQyA5OS4xODkgMjIwLjM5NiA5OS4xODkgMjIwLjg0NyA5OS4xNjcgMjIxLjU0NSBDIDk5LjE0NCAyMjIuMDk1IDk5LjIwNSAyMjIuNTM3IDk5LjM1NSAyMjIuODYgTCA5OS43MzEgMjIyLjg2IEMgMTAwLjAzMiAyMjIuMDU3IDk5Ljk3MSAyMjEuMDIgOTkuNTQzIDIxOS43NDMgQyA5OC44NjcgMjE4LjE0MiA5OC40MyAyMTYuOTI1IDk4LjIyNyAyMTYuMDk4IFogTSA5MC40NDcgMjE1LjM4NSBDIDkwLjI5NyAyMTUuMzg1IDkwLjE5OSAyMTUuNDM3IDkwLjE0NyAyMTUuNTM1IEMgOTAuMjk3IDIxNi4wNjEgOTAuNjM1IDIxNi43NTIgOTEuMTYxIDIxNy42MDEgQyA5MS43NCAyMTguNTI1IDkyLjExNiAyMTkuMjAyIDkyLjI4OSAyMTkuNjMgQyA5Mi40MzkgMjE5LjkzMSA5Mi41MTQgMjIwLjI1MyA5Mi41MTQgMjIwLjYwNiBDIDkyLjUxNCAyMjAuNzU3IDkyLjQ5OSAyMjAuOTgyIDkyLjQ3NyAyMjEuMjgzIEMgOTIuNDk5IDIyMS41MDggOTIuNjEyIDIyMS43NzEgOTIuODE1IDIyMi4wNzIgQyA5My4xMTYgMjIyLjUgOTMuMjg5IDIyMi43NjMgOTMuMzQxIDIyMi44NiBMIDkzLjcxNyAyMjIuNjczIEMgOTMuNzkyIDIyMi40NyA5My43NTUgMjIyLjI3NCA5My42MDQgMjIyLjA3MiBMIDkzLjIyOCAyMjEuNTQ1IEMgOTMuMTUzIDIyMS4zNzMgOTMuMTE2IDIyMS4wOCA5My4xMTYgMjIwLjY4MiBDIDkzLjA2MyAyMjAuMDA2IDkyLjgxNSAyMTkuMjE2IDkyLjM2NSAyMTguMzE1IEMgOTEuNzg1IDIxNy4zMzkgOTEuMzg3IDIxNi41ODcgOTEuMTYxIDIxNi4wNjEgQyA5MC45NTggMjE1LjcwNyA5MC44MzggMjE1LjUxOSA5MC43ODYgMjE1LjQ5NyBDIDkwLjY4OCAyMTUuNDIyIDkwLjU3NSAyMTUuMzg1IDkwLjQ0NyAyMTUuMzg1IFogTSAxODMuNDM0IDE5NC4zMDkgQyAxODMuMzM3IDE5NC45MzMgMTgzLjEzMyAxOTUuNjg0IDE4Mi44MzIgMTk2LjU2MyBMIDE4Mi4wOCAxOTguODE3IEMgMTgxLjkzIDE5OS4zNDMgMTgxLjkzIDE5OS43MTkgMTgyLjA4IDE5OS45NDQgQyAxODIuMzU5IDE5OS44NjkgMTgyLjU2OSAxOTkuNTY5IDE4Mi43MTkgMTk5LjA0MiBMIDE4My4zMjEgMTk3LjE2NSBDIDE4My41OTkgMTk2LjMxNiAxODMuODI0IDE5NS43MTQgMTgzLjk5OCAxOTUuMzYxIEMgMTg0LjI5OCAxOTQuNzgyIDE4NC4zNTEgMTk0LjM2OSAxODQuMTQ4IDE5NC4xMjEgQyAxODMuODcgMTk0LjA2OCAxODMuNjM2IDE5NC4xMzYgMTgzLjQzNCAxOTQuMzA5IFogTSAxNzguMTM0IDE5MS4xMTYgQyAxNzcuOTA4IDE5MS41NjcgMTc3Ljc0MyAxOTIuMjA1IDE3Ny42NDUgMTkzLjAzMiBMIDE3Ny4zODMgMTk0LjUzNCBDIDE3Ny4zMDggMTk1LjIxMSAxNzcuMjcgMTk1LjU3MSAxNzcuMjcgMTk1LjYyNCBDIDE3Ny4yMTcgMTk2LjE3MiAxNzcuMjcgMTk2LjY3NiAxNzcuNDIxIDE5Ny4xMjcgTCAxNzguMzIyIDE5Ny4zMTQgQyAxNzguMjcgMTk2Ljg4NiAxNzguMzIyIDE5Ni4zIDE3OC40NzIgMTk1LjU0OSBMIDE3OS4xNDkgMTkyLjI0MyBDIDE3OS4yMDEgMTkxLjg5IDE3OS4yMDEgMTkxLjY1NyAxNzkuMTQ5IDE5MS41MjkgQyAxNzkuMDc0IDE5MS4zNTYgMTc4LjkzOSAxOTEuMjI4IDE3OC43MzUgMTkxLjE1MyBDIDE3OC41MzMgMTkxLjA3OCAxNzguMzM4IDE5MS4wNjMgMTc4LjEzNCAxOTEuMTE2IFogTSAxNzEuNjMyIDE5Mi4zMTggQyAxNzEuNDU5IDE5MS40MTYgMTcxLjMwOCAxOTAuODMxIDE3MS4xODEgMTkwLjU1MiBDIDE3MC45NzggMTkwLjU1MiAxNzAuNzkgMTkwLjYxMiAxNzAuNjE3IDE5MC43NCBDIDE3MC41OTUgMTkwLjk4OCAxNzAuNjkyIDE5MS40OTIgMTcwLjkxOCAxOTIuMjQzIEMgMTcwLjk3IDE5Mi4zOTMgMTcxLjAwOCAxOTIuNjMzIDE3MS4wMzEgMTkyLjk1NyBMIDE3MS4xODEgMTkzLjc4MyBDIDE3MS4yMzMgMTk0LjIxMSAxNzEuMzU0IDE5NC41MTIgMTcxLjU1NyAxOTQuNjg0IEwgMTcxLjkzMyAxOTQuNDk3IEMgMTcxLjk4NSAxOTQuMTk3IDE3MS45NyAxOTMuODM1IDE3MS44OTUgMTkzLjQwNyBDIDE3MS43NjcgMTkyLjkzNCAxNzEuNjg0IDE5Mi41NjYgMTcxLjYzMiAxOTIuMzE4IFogTSA4NC4yNDYgMjkyLjA5OCBDIDg0Ljc3MiAyOTMuNjU0IDg1LjA4OCAyOTQuNjc2IDg1LjE4NSAyOTUuMTc5IEwgODUuNjM2IDI5Ni45ODIgQyA4NS45MTUgMjk3LjY4MSA4Ni4yOSAyOTguMTQ2IDg2Ljc2NCAyOTguMzcyIEwgODcuMTQgMjk3Ljk5NyBDIDg3LjExNyAyOTcuODI0IDg3LjA0MiAyOTcuNjM2IDg2LjkxNCAyOTcuNDMzIEMgODYuNzQxIDI5Ny4yMyA4Ni42MTQgMjk3LjA3MyA4Ni41MzggMjk2Ljk0NCBDIDg2LjI2IDI5Ni41NjkgODYuMDUgMjk1LjkzIDg1Ljg5OSAyOTUuMDI5IEMgODUuNjUxIDI5My45NTQgODUuMjM4IDI5Mi42ODQgODQuNjU5IDI5MS4yMzUgQyA4NC41ODQgMjkxLjE4MiA4NC40OTQgMjkxLjE4MiA4NC4zOTYgMjkxLjIzNSBDIDg0LjI5OCAyOTEuMjg3IDg0LjIyMyAyOTEuMzYyIDg0LjE3MSAyOTEuNDU5IEMgODQuMTE4IDI5MS42MzMgODQuMTQ4IDI5MS44NTEgODQuMjQ2IDI5Mi4wOTggWiBNIDc0LjgxMiAyODkuNzMyIEMgNzQuNDEzIDI4OS4xODQgNzQuMDIyIDI4OC45MjggNzMuNjQ3IDI4OC45OCBMIDc4Ljc5NiAyOTYuNDU3IEMgNzkuMjI0IDI5Ny4wNTcgNzkuNTEgMjk3LjU0NiA3OS42NiAyOTcuOTIyIEMgNzkuNzEzIDI5Ny45OTcgNzkuODExIDI5OC4yMzcgNzkuOTYxIDI5OC42MzUgQyA4MC4wNTkgMjk4LjkzNiA4MC4xNzIgMjk5LjE2MSA4MC4yOTkgMjk5LjMxMiBDIDgwLjQ1IDI5OS41MzYgODAuNjUzIDI5OS42ODcgODAuOTAxIDI5OS43NjIgQyA4MS4xNDkgMjk5Ljg2IDgxLjM4OSAyOTkuODUzIDgxLjYxNSAyOTkuNzI0IEwgNzkuMDU5IDI5NS43MDUgQyA3Ny44NTYgMjkzLjk1NCA3Ni40NDMgMjkxLjk2NCA3NC44MTIgMjg5LjczMiBaIE0gNjQuMjEzIDI5MS41MzUgQyA2NS44ODkgMjkyLjMzOSA2Ny4yMDQgMjkzLjA5MSA2OC4xNTkgMjkzLjc4OSBDIDY5LjI4NyAyOTQuNjE1IDcwLjgwNSAyOTYuMDU4IDcyLjcwNyAyOTguMTA5IEMgNzMuMzYxIDI5OC44ODQgNzMuNzIyIDI5OS40NzcgNzMuNzk3IDI5OS44NzUgTCA3NC4xNzMgMjk5Ljg3NSBDIDc0LjQ3NCAyOTkuMzcxIDc0LjI4NiAyOTguNzMzIDczLjYwOSAyOTcuOTU5IEMgNzAuODggMjk0LjcwNSA2Ny41NDMgMjkyLjE4OCA2My42MTEgMjkwLjQwOCBDIDYzLjUzNiAyOTAuNDYxIDYzLjQwOCAyOTAuNDgzIDYzLjIzNSAyOTAuNDgzIEMgNjMuMjU4IDI5MC44MzYgNjMuNTg5IDI5MS4xODIgNjQuMjEzIDI5MS41MzUgWiBNIDU1Ljc5NCAyOTUuMDI5IEwgNTUuNzU2IDI5NS4zNjcgQyA1Ny43MzMgMjk1LjgxNyA1OS41NjcgMjk2LjEzMyA2MS4yNDMgMjk2LjMwNiBDIDYyLjMxOCAyOTYuNDAzIDYzLjA4NSAyOTYuNTg0IDYzLjUzNiAyOTYuODMyIEMgNjMuNzYyIDI5Ni45NiA2NC4xIDI5Ny4xNTUgNjQuNTUxIDI5Ny40MzMgQyA2NC45MjcgMjk3LjYzNiA2NS4yNjUgMjk3LjY4MSA2NS41NjYgMjk3LjU4MyBDIDY0Ljc2MSAyOTYuNjU5IDYzLjc2MiAyOTYuMDQzIDYyLjU1OSAyOTUuNzQyIEMgNjIuMTMgMjk1LjYxNSA2MS42MTkgMjk1LjUzMiA2MS4wMTggMjk1LjQ3OSBMIDU1Ljk0NCAyOTQuNzY2IEwgNTUuNzk0IDI5NS4wMjkgWiBNIDQ3LjUyNSAyOTkuNTM2IEwgNDcuNDg3IDI5OS44NzUgTCA1NC4wMjcgMzAwLjIxMyBDIDU0LjM4IDMwMC4yMTMgNTQuNjI4IDMwMC4yNTEgNTQuNzc5IDMwMC4zMjYgQyA1NC45MDcgMzAwLjM3OCA1NS4wNjQgMzAwLjQ2MSA1NS4yNjcgMzAwLjU4OSBDIDU1LjQ0IDMwMC42ODYgNTUuNjA2IDMwMC43MDIgNTUuNzU2IDMwMC42MjcgQyA1NS42MDYgMzAwLjEgNTUuNDE4IDI5OS43NjIgNTUuMTkyIDI5OS42MTIgQyA1NS4wMTkgMjk5LjUxNCA1NC43NzkgMjk5LjQ2MSA1NC40NzggMjk5LjQ2MSBMIDQ3LjY3NSAyOTkuMzEyIEwgNDcuNTI1IDI5OS41MzYgWiBNIDE1NS4zOTUgMTgzLjc5IEMgMTU1LjA5NSAxODMuNzkgMTU0LjkyMSAxODMuODA1IDE1NC44NjkgMTgzLjgyNyBMIDE1NC41MzEgMTg0LjA1MyBDIDE1NC4zMDUgMTg0LjIyNiAxNTQuMDk0IDE4NC4zNTMgMTUzLjg5MiAxODQuNDI5IEwgMTUzLjE0IDE4NC43MjkgTCAxNTIuNTc2IDE4NS4xNDIgTCAxNTIuNDI1IDE4NS4zMyBDIDE1Mi4zNzMgMTg1LjQyOCAxNTIuMzY2IDE4NS42MDkgMTUyLjM4OCAxODUuODU2IEwgMTUzLjUxNiAxODYuMDQ0IEMgMTUzLjQ5NCAxODUuODk0IDE1My41NTMgMTg1LjcyMSAxNTMuNzA0IDE4NS41MTggTCAxNTQuMTkyIDE4NS4xNDIgQyAxNTQuNjk2IDE4NC43NDQgMTU1LjA5NSAxODQuMjk0IDE1NS4zOTUgMTgzLjc5IFogTSAxNTQuMDggMTY3LjA3MiBMIDE1My4yOSAxNjcuMDcyIEwgMTUyLjkxNCAxNzAuMTE2IEMgMTUyLjg2MiAxNzAuODY2IDE1Mi43MjYgMTcxLjQ1MiAxNTIuNTAxIDE3MS44ODEgQyAxNTIuNDc5IDE3MS45NzkgMTUyLjM1IDE3Mi4xOTcgMTUyLjEyNSAxNzIuNTIgQyAxNTEuOTc0IDE3Mi43OTggMTUxLjg4NCAxNzMuMDIzIDE1MS44NjIgMTczLjE5NSBDIDE1MS44MDkgMTczLjQyMSAxNTEuNzg3IDE3My43NTkgMTUxLjc4NyAxNzQuMjEgQyAxNTEuNjg5IDE3NC43MTQgMTUxLjY5NyAxNzUuMDIyIDE1MS44MjUgMTc1LjE0OSBDIDE1Mi4wMjggMTc1LjE3MSAxNTIuMjIzIDE3NS4wMzcgMTUyLjQyNSAxNzQuNzM2IEMgMTUzLjIgMTczLjMwOCAxNTMuNzk0IDE3MS4xMTUgMTU0LjE5MiAxNjguMTYyIEMgMTU0LjI0NSAxNjcuNjU4IDE1NC4yMDcgMTY3LjI5OCAxNTQuMDggMTY3LjA3MiBaIE0gMTQ4LjkzIDE1OS4yOTYgQyAxNDkuMTAzIDE1Ny43NyAxNDkuMDgxIDE1Ni40MDMgMTQ4Ljg1NSAxNTUuMjAxIEwgMTQ4LjAyOCAxNTUuMjAxIEMgMTQ4LjE3OCAxNTYuMTI1IDE0OC4xNTYgMTU3LjE3NyAxNDcuOTUzIDE1OC4zNTYgQyAxNDcuODU2IDE1OC45MzUgMTQ3LjYxNSAxNTkuOTcyIDE0Ny4yMzkgMTYxLjQ3NSBMIDE0Ni40NSAxNjQuNjMxIEMgMTQ2LjE0OSAxNjYuMTg2IDE0NS44NDggMTY3LjMzNSAxNDUuNTQ4IDE2OC4wODYgQyAxNDUuMjQ3IDE2OC45MTMgMTQ1LjA4MiAxNjkuMzc5IDE0NS4wNTkgMTY5LjQ3NiBDIDE0NC45MDkgMTcwLjAwMyAxNDQuODk0IDE3MC40NTMgMTQ1LjAyMSAxNzAuODI5IEwgMTQ1Ljk2MSAxNzEuMDE3IEMgMTQ2LjAxMyAxNzAuNzM5IDE0Ni4yNDYgMTcwLjA2MiAxNDYuNjc1IDE2OC45ODggQyAxNDcuMTQ5IDE2Ny44MDkgMTQ3LjY2OCAxNjUuOTQ1IDE0OC4yMTYgMTYzLjM5MSBDIDE0OC41OTIgMTYxLjYxIDE0OC44MzMgMTYwLjI1IDE0OC45MyAxNTkuMjk2IFogTSAxNDEuMTEzIDE1MC42NTUgQyAxNDAuOTEgMTUwLjYwMyAxNDAuNzYgMTUwLjcwNyAxNDAuNjYxIDE1MC45NTYgQyAxNDAuNTY0IDE1MS4xODEgMTQwLjUzNCAxNTEuNDIxIDE0MC41ODYgMTUxLjY2OSBMIDE0MC45MjUgMTU0LjI2MSBDIDE0MS4xNzMgMTU2LjMxMyAxNDEuMzIzIDE1Ny45NTggMTQxLjM3NiAxNTkuMTgzIEMgMTQxLjM5OSAxNjAuOTg2IDE0MS4yNCAxNjIuNjAxIDE0MC44ODcgMTY0LjAyOSBDIDE0MC43MTUgMTY0LjcyOCAxNDAuNjA5IDE2NS4yNDcgMTQwLjU4NiAxNjUuNTY5IEMgMTQwLjUzNCAxNjYuMTQ4IDE0MC42NDcgMTY2LjYyMSAxNDAuOTI1IDE2Ni45OTcgQyAxNDEuNzc0IDE2NC42NjggMTQyLjE2NSAxNjEuOTc4IDE0Mi4wOSAxNTguOTIgQyAxNDIuMDM3IDE1Ni44MTcgMTQxLjcxNCAxNTQuMDU4IDE0MS4xMTMgMTUwLjY1NSBaIE0gMTI4LjIyMSAxNDkuMjI3IEMgMTI3Ljk3MyAxNDkuMTMgMTI3Ljc5MyAxNDkuMTkgMTI3LjY5NCAxNDkuNDE1IEMgMTI4LjQyMyAxNTAuMDY5IDEyOS4zNjMgMTUxLjE4MSAxMzAuNTE0IDE1Mi43NTkgQyAxMzAuNzM5IDE1My4wMzcgMTMxLjA5MiAxNTMuNDIgMTMxLjU2NiAxNTMuOTI0IEMgMTMxLjk2NCAxNTQuMzc0IDEzMi4yOCAxNTQuNzg3IDEzMi41MDUgMTU1LjE2MyBDIDEzMi44MDYgMTU1Ljc0MiAxMzMuMDY5IDE1Ni42MDYgMTMzLjI5NSAxNTcuNzU2IEMgMTMzLjUyIDE1OS4wMzMgMTMzLjc0NiAxNTkuOTE5IDEzMy45NzIgMTYwLjQyMyBMIDEzNC4zMSAxNjAuNDYgQyAxMzQuNDYgMTYwLjEzNyAxMzQuNDk4IDE1OS43MDkgMTM0LjQyMyAxNTkuMTgzIEMgMTM0LjQyMyAxNTkuMTMgMTM0LjMxIDE1OC42OTQgMTM0LjA4NCAxNTcuODY4IEMgMTMzLjg4MSAxNTYuOTE0IDEzMy42OTMgMTU2LjIxNSAxMzMuNTIgMTU1Ljc2NCBDIDEzMy4xOTcgMTU0Ljk5IDEzMi41NjYgMTU0LjA4OSAxMzEuNjQxIDE1My4wNTkgTCAxMjguNjM0IDE0OS42MDMgQyAxMjguNTA3IDE0OS40MyAxMjguMzcxIDE0OS4zMDIgMTI4LjIyMSAxNDkuMjI3IFogTSAxMjQuMTk5IDE1OS4zMzQgTCAxMjQuNTM3IDE1OS4xNDYgQyAxMjQuNjEzIDE1OC43NDggMTI0LjM4NyAxNTguMjA3IDEyMy44NjEgMTU3LjUzIEwgMTIwLjQ3OCAxNTMuMzk3IEMgMTIwLjM1MSAxNTMuMjI1IDEyMC4yIDE1My4wODIgMTIwLjAyNyAxNTIuOTg0IEMgMTE5Ljc0OSAxNTIuODg3IDExOS41NzYgMTUyLjkzMiAxMTkuNTAxIDE1My4xMzQgTCAxMjEuOTA3IDE1Ni4wMjcgQyAxMjMuMDg3IDE1Ny40MDIgMTIzLjg0NiAxNTguNTA2IDEyNC4xOTkgMTU5LjMzNCBaIE0gMjA0LjgyIDI0MS40NTcgTCAyMDcuMzM4IDI0MC4xOCBDIDIwOS41OTMgMjM5LjEyNyAyMTAuOTQ3IDIzOC41MDQgMjExLjM5OCAyMzguMzAxIEwgMjExLjAyMiAyMzcuNyBDIDIwNi40ODkgMjM5LjY1NCAyMDIuMDkxIDI0MS45NjEgMTk3LjgyOSAyNDQuNjEyIEwgMTk4LjA1NSAyNDUuMDI2IEMgMTk5LjUwNSAyNDQuMTQ2IDIwMS43NiAyNDIuOTYgMjA0LjgyIDI0MS40NTcgWiBNIDIwMy40MjkgMjY3LjA0MSBDIDIwNS4wMzEgMjY1LjQ4NSAyMDYuMTU4IDI2NC40MjYgMjA2LjgxMiAyNjMuODQ3IEMgMjA4LjY5MSAyNjIuMjY5IDIxMS44NDggMjYwLjE4MSAyMTYuMjgzIDI1Ny41NzQgTCAyMTkuMDI4IDI1NS45OTYgQyAyMTguMjUzIDI1NS43NyAyMTcuMzg5IDI1NS44MjIgMjE2LjQzNCAyNTYuMTQ2IEMgMjE1LjgzMiAyNTYuMzcyIDIxNS4wMjEgMjU2LjggMjEzLjk5MSAyNTcuNDIzIEMgMjEwLjI4NSAyNTkuNzc1IDIwNy42MDEgMjYxLjY4MyAyMDUuOTQ4IDI2My4xMzMgQyAyMDUuMTczIDI2My44MSAyMDQuMzMxIDI2NC41OTggMjAzLjQyOSAyNjUuNTAxIEwgMTk4LjMxOCAyNzAuNDU5IEMgMTk4LjUyMSAyNzAuNjg1IDE5OC43OTEgMjcwLjc0NCAxOTkuMTQ0IDI3MC42NDcgQyAxOTkuNDIzIDI3MC41NzIgMTk5LjcwOCAyNzAuNDA3IDIwMC4wMDkgMjcwLjE1OCBDIDIwMC44ODggMjY5LjQ2IDIwMi4wMjMgMjY4LjQxNSAyMDMuNDI5IDI2Ny4wNDEgWiBNIDIwNy40ODggMjczLjMxNSBDIDIwNi45ODUgMjcyLjY5MSAyMDYuMjMzIDI3Mi40MzUgMjA1LjIzMyAyNzIuNTYzIEMgMjA0LjYxIDI3Mi42OTEgMjAzLjg1OCAyNzIuOTk5IDIwMi45NzkgMjczLjUwMiBDIDIwMS4wNjkgMjc0LjUyNCAxOTkuMTE1IDI3NS40NzEgMTk3LjExNSAyNzYuMzU4IEMgMTk5LjM2MiAyNzQuNzcyIDIwMS43ODMgMjczLjEzNCAyMDQuMzY5IDI3MS40MzYgQyAyMDcuMTUxIDI2OS42MzMgMjExLjUyNSAyNjYuODkxIDIxNy40ODYgMjYzLjIwOCBDIDIxNy41ODQgMjYyLjk4NCAyMTcuNTAyIDI2Mi44NDggMjE3LjIyMyAyNjIuNzk2IEMgMjE2Ljk0NSAyNjIuNzIgMjE2LjY5NyAyNjIuNzU4IDIxNi40NzEgMjYyLjkwOCBDIDIxMC44MzQgMjY2LjA2NCAyMDYuNDg5IDI2OC42NzkgMjAzLjQyOSAyNzAuNzYgQyAyMDAuMjA0IDI3Mi45MzEgMTk3LjMzMyAyNzUuMTMzIDE5NC44MjIgMjc3LjM3MiBDIDE5My4wNTYgMjc4LjEyMyAxOTEuMjUxIDI3OC44MjIgMTg5LjQxIDI3OS40NzUgQyAxOTAuMjE0IDI3OC44NTIgMTkxLjA2MyAyNzcuOTU4IDE5MS45NjYgMjc2LjgwOCBDIDE5Mi45NjUgMjc1LjQ3OCAxOTMuNzMzIDI3NC40OTQgMTk0LjI1OSAyNzMuODQxIEMgMTk1LjAzMyAyNzIuODg2IDE5Ni4yNzMgMjcxLjUzNCAxOTcuOTggMjY5Ljc4MyBMIDIwNC43MDcgMjYyLjgzMyBDIDIwOS43MjEgMjU3Ljc5OCAyMTQuODkzIDI1My4xMjYgMjIwLjIzIDI0OC44MiBDIDIyMC4zMDUgMjQ4LjYxNyAyMjAuMjA4IDI0OC40OTcgMjE5LjkzIDI0OC40NDQgQyAyMTkuNjUxIDI0OC40MjIgMjE5LjQxOCAyNDguNDgyIDIxOS4yMTYgMjQ4LjYzMiBMIDIxNS44MzIgMjUxLjExMSBDIDIxNC4zMDYgMjUyLjIxNiAyMTIuOTkxIDI1My4yIDIxMS44ODYgMjU0LjA3OSBDIDIxMC4yMzIgMjU1LjM4IDIwOC40ODggMjU2LjkxMyAyMDYuNjYyIDI1OC42NjMgQyAyMDEuNzc2IDI2My4yOTkgMTk2LjQyNCAyNjguOTE5IDE5MC42MTIgMjc1LjUzMSBMIDE4Ny4xMTcgMjc5LjUxMyBDIDE4Ni4wMTIgMjgwLjg0MyAxODUuODE3IDI4MS44MiAxODYuNTE2IDI4Mi40NDMgQyAxOTEuNjA1IDI4MC45MTggMTk2LjU4OSAyNzguODg5IDIwMS40NzUgMjc2LjM1OCBDIDE5Ny4zOTMgMjgwLjcxNSAxOTEuNDYyIDI4Ni4yOTggMTgzLjY5NyAyOTMuMTEzIEMgMTgyLjI0NiAyOTQuMzkgMTgxLjYwNyAyOTUuNTE3IDE4MS43OCAyOTYuNDk0IEMgMTg1LjQ2NCAyOTYuMzQ0IDE4OC4yMjIgMjk2LjE3OSAxOTAuMDQ5IDI5Ni4wMDUgQyAxOTMuMDc4IDI5NS43MjggMTk1Ljc4NSAyOTUuMzA3IDE5OC4xNjggMjk0LjcyOCBDIDE5OS43NjkgMjk0LjMzIDIwMS42MDIgMjkzLjc4OSAyMDMuNjU1IDI5My4xMTMgQyAyMDQuNTg3IDI5Mi44MTIgMjA1LjQ4MiAyOTIuNTEyIDIwNi4zNjEgMjkyLjIxMSBDIDIwNi4yODYgMjkyLjMwOCAyMDYuMjExIDI5Mi40MTQgMjA2LjEzNiAyOTIuNTEyIEMgMjA2LjMzOCAyOTIuMzYyIDIwNi41MzQgMjkyLjIxMSAyMDYuNzM3IDI5Mi4wNjEgQyAyMTEuMDgyIDI5MC41NTEgMjE0LjcyIDI4OS4wNjMgMjE3LjYzNyAyODcuNTkgQyAyMjIuNTIzIDI4NS4xMzQgMjI2LjUzIDI4Mi4yNzEgMjI5LjY2NCAyNzguOTg3IEwgMjMxLjA1NSAyNzcuNDg1IEMgMjMwLjMwMyAyNzcuMDM0IDIyOS40MDEgMjc3LjA0OSAyMjguMzQ5IDI3Ny41MjIgQyAyMjcuOCAyNzcuOCAyMjcuMDU1IDI3OC4zNzEgMjI2LjEzMSAyNzkuMjUxIEMgMjIyLjUgMjgyLjU1NiAyMTguNDQxIDI4NS4yMDkgMjEzLjk1MyAyODcuMjE1IEMgMjEzLjM1OSAyODcuNDcgMjEyLjc3MyAyODcuNzEgMjEyLjE4NiAyODcuOTI4IEMgMjEzLjYyMiAyODYuODU0IDIxNC45NTMgMjg1LjgyNSAyMTYuMTcgMjg0Ljg0NyBMIDIyMC4yNjcgMjgxLjU0MiBDIDIyMS4zNzMgMjgwLjY0IDIyMi4xNyAyNzkuOTQxIDIyMi42NzMgMjc5LjQzOCBDIDIyMy41MjIgMjc4LjYxMiAyMjQuMTc3IDI3Ny43ODUgMjI0LjYyNyAyNzYuOTU4IEMgMjIyLjQ0OCAyNzguMTA4IDIxOS41NzYgMjgwLjIyNyAyMTYuMDIgMjgzLjMwOCBMIDIxMS40MzUgMjg3LjIxNSBDIDIxMC42NDYgMjg3Ljg3NiAyMDkuOTE2IDI4OC41MDcgMjA5LjI1NSAyODkuMDkzIEMgMjA0LjYxNyAyOTAuODU5IDIwMC43MyAyOTIuMTEzIDE5Ny42MDQgMjkyLjg0OSBDIDE5Ni4xNjggMjkzLjE4OCAxOTQuNzYyIDI5My40NTEgMTkzLjM5NCAyOTMuNjM5IEMgMTk1LjM5MyAyOTMuMDUzIDE5Ny40NDYgMjkyLjE4OCAxOTkuNTU4IDI5MS4wNDcgQyAyMDEuODEzIDI4OS44MjIgMjA0LjgzNSAyODcuODM4IDIwOC42MTYgMjg1LjExMSBDIDIxMC45OTkgMjgzLjQwNSAyMTIuNzczIDI4Mi4wMTUgMjEzLjk1MyAyODAuOTQgQyAyMTUuODEgMjc5LjI2NSAyMTcuMTg1IDI3Ny41MjIgMjE4LjA4OCAyNzUuNzE5IEMgMjEyLjk1NCAyODAuMTc0IDIwNy40MzYgMjg0LjQ4NyAyMDEuNTUgMjg4LjY0MyBDIDE5OS4xMjIgMjkwLjM0OCAxOTcuMTUzIDI5MS40NTkgMTk1LjY0OSAyOTEuOTg2IEMgMTk0LjE5OCAyOTIuMzg0IDE5My4xMTUgMjkyLjcgMTkyLjQxNyAyOTIuOTI1IEMgMTkxLjQ5MyAyOTMuMjQxIDE5MC43MzMgMjkzLjYwMSAxOTAuMTI0IDI5NC4wMTUgQyAxODguNDU2IDI5NC4xNDIgMTg2Ljg1NCAyOTQuMTU3IDE4NS4zMTMgMjk0LjA1MiBDIDE4Ni4wNTcgMjkzLjQyOCAxODYuNzk0IDI5Mi43OSAxODcuNTMxIDI5Mi4xMzYgQyAxOTYuMTkgMjg3Ljc0IDIwNC4yMDQgMjgyLjMzOCAyMTEuNTg1IDI3NS45NDQgQyAyMDkuMTU3IDI3Ny4xOTkgMjA1LjY2OSAyNzkuNDYxIDIwMS4xMzcgMjgyLjc0NCBDIDE5Ni42NzkgMjg1Ljk5NyAxOTMuMTkxIDI4OC4yNjcgMTkwLjY4NyAyODkuNTQ0IEMgMTkwLjU2NyAyODkuNjA0IDE5MC40NCAyODkuNjcxIDE5MC4zMTIgMjg5LjczMiBDIDE5Ni4xODMgMjg0LjU2MiAyMDEuOTAzIDI3OS4wOTIgMjA3LjQ4OCAyNzMuMzE1IFogTSAyMzAuNDE2IDI5NS4yNTQgQyAyMjkuNTEzIDI5NS41NzcgMjI3Ljg5OCAyOTYuMDk1IDIyNS41NjcgMjk2Ljc5NCBMIDIyMy4xNjIgMjk3LjUwOCBDIDIyNC45NjUgMjk4LjEzMiAyMjcuMjA2IDI5OC4wNzIgMjI5Ljg4OSAyOTcuMzIgQyAyMzMuNTUxIDI5Ni4yOTEgMjM2Ljg5NSAyOTQuNTI2IDIzOS45MjUgMjkyLjAyMyBDIDI0Mi45NTQgMjg5LjUyMSAyNDUuMzE1IDI4Ni41NjEgMjQ2Ljk5MSAyODMuMTU4IEMgMjQ2LjkzOCAyODIuODU3IDI0Ni43NDMgMjgyLjY0NiAyNDYuMzg5IDI4Mi41MTkgQyAyNDYuMDY2IDI4Mi40MjEgMjQ1Ljc1IDI4Mi40NDMgMjQ1LjQ1IDI4Mi41OTQgQyAyNDUuMDc0IDI4Mi43OTYgMjQ0LjY3NiAyODMuMjg1IDI0NC4yNDcgMjg0LjA1OSBDIDI0Mi4wNDUgMjg4LjAxOCAyMzguOTcgMjkxLjA2OSAyMzUuMDM5IDI5My4yMjUgQyAyMzMuNzM5IDI5My45NTQgMjMyLjE5NyAyOTQuNjMgMjMwLjQxNiAyOTUuMjU0IFogTSAyMDEuNjYzIDI0MS4wODEgQyAyMDMuNzE1IDIzOS4yMDIgMjA1LjM0NiAyMzcuODEyIDIwNi41NDkgMjM2LjkxMSBDIDIwOC40NTEgMjM1LjQ4MyAyMTAuMjkyIDIzNC40NDYgMjEyLjA3NCAyMzMuNzkzIEMgMjEyLjcyOCAyMzMuNTY3IDIxMy43MDUgMjMzLjI0NCAyMTUuMDA2IDIzMi44MTYgQyAyMTYuMTU2IDIzMi40MTggMjE3LjA1OCAyMzEuOTUyIDIxNy43MTIgMjMxLjQyNiBDIDIxNy4zNTkgMjMwLjU3NyAyMTYuNDM0IDIzMC4zNzQgMjE0LjkzMSAyMzAuODI2IEMgMjExLjM0NSAyMzEuOTI5IDIwNy42OTIgMjMzLjkwNSAyMDMuOTU1IDIzNi43NjEgQyAyMDEuNTcyIDIzOC41ODYgMTk4LjQxNSAyNDEuNDM0IDE5NC40ODQgMjQ1LjI4OSBDIDE5My4yODEgMjQ2LjM5MyAxOTIuNzcgMjQ3LjM3OCAxOTIuOTQzIDI0OC4yNTcgQyAxOTQuNzI1IDI0OC43MyAxOTcuMTMgMjQ4LjQ5NyAyMDAuMTU5IDI0Ny41NDMgQyAyMDMuNzE1IDI0Ni4zOTMgMjA2LjE1IDI0NS44IDIwNy40NTEgMjQ1Ljc3NyBDIDIwNi40MjEgMjQ2LjQ1MyAyMDUuNjYyIDI0Ny4zMzMgMjA1LjE1OCAyNDguNDA2IEMgMjA1LjcwNyAyNDguOTEgMjA2LjUyNiAyNDguODA1IDIwNy42MDEgMjQ4LjEwNyBDIDIwOS4zODIgMjQ2Ljk4IDIxMS4wNzQgMjQ1LjYxMiAyMTIuNjc1IDI0NC4wMTIgQyAyMTEuMjcgMjQzLjQ2MyAyMDkuNjQ2IDI0My4yODMgMjA3Ljc4OSAyNDMuNDg1IEMgMjA2LjU4NyAyNDMuNjM2IDIwNC45MzMgMjQ0LjAxMiAyMDIuODI4IDI0NC42MTIgTCAxOTUuNTM2IDI0Ni42NzkgTCAyMDEuNjYzIDI0MS4wODEgWiBNIDM3NS44MzQgNzMuNjAzIEMgMzc1LjkwOSA3NC4xNTIgMzc2LjA2IDc0Ljk3MSAzNzYuMjg1IDc2LjA0NSBDIDM3Ni40MTMgNzYuODQ5IDM3Ni40NzMgNzguMDM2IDM3Ni40NzMgNzkuNjE0IEMgMzc2LjYwMSA4MS4xMTcgMzc2Ljg3MSA4Mi41MjIgMzc3LjMgODMuODIyIEMgMzc3LjYgODQuNzQ2IDM3Ny45NjEgODUuMzk5IDM3OC4zODkgODUuNzc1IEMgMzc4LjY2OCA4Ni4wNTMgMzc4Ljk5MSA4Ni4yNDEgMzc5LjM2NyA4Ni4zMzkgQyAzNzkuNzY2IDg2LjQxNCAzODAuMTMzIDg2LjM2MSAzODAuNDU3IDg2LjE4OCBDIDM4MS4xMTEgODUuMDYxIDM4MS4xNTYgODMuNjExIDM4MC42MDcgODEuODMgQyAzODAuMzA3IDgwLjg3NiAzODAuMDgxIDgwLjE2MiAzNzkuOTMxIDc5LjY4OSBDIDM3OS42NTMgNzguODQgMzc5LjQ5NCA3OC4xMTEgMzc5LjQ0MiA3Ny41MSBDIDM3OS40MTkgNzYuNjYxIDM3OS4zNjcgNzYuMDIyIDM3OS4yOTIgNzUuNTk0IEMgMzc5LjE5NCA3NC44OTUgMzc4LjkzMSA3NC4zOTIgMzc4LjUwMiA3NC4wOTEgQyAzNzcuODQ4IDczLjg0NCAzNzcuNDEzIDczLjU4MSAzNzcuMTg3IDczLjMwMyBDIDM3Ni45NjIgNzMuMDI1IDM3Ni44NzEgNzIuNTc0IDM3Ni45MjQgNzEuOTUgTCAzNzYuOTk5IDY5LjYyMSBDIDM3Ny4wNTIgNjkuMDQyIDM3Ni45NzcgNjguNjI5IDM3Ni43NzQgNjguMzgxIEMgMzc2LjY0NiA2OC4xNzggMzc2LjQ3MyA2OC4wNjYgMzc2LjI0OCA2OC4wNDMgQyAzNzUuOTY5IDY3Ljk5IDM3NS43ODIgNjguMDU4IDM3NS42ODQgNjguMjMxIEMgMzc1LjU4NiA3MC42MzUgMzc1LjYzMSA3Mi40MjMgMzc1LjgzNCA3My42MDMgWlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZ1wiLCB7XG4gIGNsaXBQYXRoOiBcInVybCgjY2xpcDJfMTI4OF8yNTAxMilcIixcbiAgdHJhbnNmb3JtOiBcIm1hdHJpeCgwLjkxNjkxNywgMCwgMCwgMC45MTY5MTcsIDAsIDApXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTIwMi4yMzcgMTI5LjMwMUMyMDEuNzg5IDEyOS45MjYgMjAxLjUwOSAxMzAuNzE1IDIwMS4zOTMgMTMxLjY2N0MyMDEuMzE3IDEzMi4yNjkgMjAxLjI5NCAxMzMuMTI4IDIwMS4zMzQgMTM0LjIzOEMyMDEuMzM0IDEzNS4yMTMgMjAxLjQ2OCAxMzUuOTMyIDIwMS43NDIgMTM2LjRDMjAyLjAxNiAxMzYuOTA4IDIwMi40NTMgMTM3LjI3NiAyMDMuMDUzIDEzNy41MUMyMDMuNjE4IDEzNy43MjYgMjA0LjE4OSAxMzcuNzYxIDIwNC43NzIgMTM3LjYyNkMyMDUuODk3IDEzNy4zNzUgMjA2Ljc2NSAxMzYuNjIyIDIwNy4zNjUgMTM1LjM3N0MyMDcuNTk4IDEzNC45MjcgMjA3LjY3NCAxMzQuNTQ3IDIwNy41OTggMTM0LjIzOEMyMDcuNTU3IDEzNC4wNDUgMjA3LjQ3IDEzMy44NyAyMDcuMzM2IDEzMy43MTJDMjA3LjE2MSAxMzMuNTU0IDIwNi45NzUgMTMzLjQ5IDIwNi43ODIgMTMzLjUwN0MyMDYuNDUgMTMzLjUyNSAyMDYuMTQxIDEzMy44NDYgMjA1Ljg1IDEzNC40NzFDMjA1LjU0MSAxMzUuMDk3IDIwNS4yMzggMTM1LjUwNiAyMDQuOTQ3IDEzNS42OThDMjA0LjQ2MyAxMzYuMDkgMjAzLjk5NyAxMzYuMTI1IDIwMy41NDggMTM1LjgxNUMyMDMuMjQgMTM1LjU4MiAyMDMuMDY1IDEzNS4xNzMgMjAzLjAyNCAxMzQuNTg4QzIwMi44NjcgMTMzLjMwMyAyMDMuMDA3IDEzMi4wMjkgMjAzLjQzMiAxMzAuNzYxQzIwMy42MDcgMTMwLjE5NSAyMDMuODY5IDEyOS45MDMgMjA0LjIxOSAxMjkuODg1TDIwNC44MyAxMjkuOTczQzIwNC45ODggMTI5Ljk3MyAyMDUuMTIyIDEyOS45MDMgMjA1LjIzOCAxMjkuNzY4QzIwNS4zNTUgMTI5LjY1MSAyMDUuNDI1IDEyOS41MDUgMjA1LjQ0MiAxMjkuMzNDMjA1LjQ4MyAxMjguOTc5IDIwNS4zNTUgMTI4LjY5OSAyMDUuMDYzIDEyOC40ODNDMjA0LjYzOCAxMjguMTE1IDIwNC4xMTQgMTI4LjAzMyAyMDMuNDkgMTI4LjI0OUMyMDIuOTgzIDEyOC40MjQgMjAyLjU3IDEyOC43NzUgMjAyLjIzNyAxMjkuMzAxWlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE5OS4wMDQgMTMxLjg0MkMxOTguNTc4IDEzMS4wNjUgMTk4LjA1NCAxMzAuNTg2IDE5Ny40MyAxMzAuNDExQzE5Ni44NjUgMTMwLjIxOCAxOTYuMjY1IDEzMC4yNTMgMTk1LjYyNCAxMzAuNTI4QzE5NC45ODMgMTMwLjgwMiAxOTQuNDU5IDEzMS4yMTEgMTk0LjA1MSAxMzEuNzU1QzE5My43MTkgMTMyLjIwNCAxOTMuNTk3IDEzMi42MDIgMTkzLjY3MiAxMzIuOTUyQzE5My43MTMgMTMzLjE4NiAxOTMuODE4IDEzMy4zNzkgMTkzLjk5MyAxMzMuNTM3QzE5NC4xODUgMTMzLjY5NCAxOTQuMzg5IDEzMy43NDEgMTk0LjYwNSAxMzMuNjgzQzE5NC45MTMgMTMzLjAyMiAxOTUuMjI4IDEzMi41NzMgMTk1LjUzNyAxMzIuMzM5QzE5NS43NyAxMzIuMTY0IDE5Ni4wMzIgMTMyLjA2NCAxOTYuMzIzIDEzMi4wNDdDMTk2LjYxNSAxMzIuMDA2IDE5Ni44NjUgMTMyLjA3NiAxOTcuMDgxIDEzMi4yNTFDMTk3LjI1NiAxMzIuNDA5IDE5Ny40MDEgMTMyLjY3MiAxOTcuNTE4IDEzMy4wNEMxOTcuNTg4IDEzMy4yMzkgMTk3LjY0NiAxMzMuNDcyIDE5Ny42OTMgMTMzLjc0MUMxOTcuNjExIDEzMy43MTIgMTk3LjUxMiAxMzMuNjk0IDE5Ny40MDEgMTMzLjY4M0MxOTYuNTY4IDEzMy42MjQgMTk1Ljc5OSAxMzMuOTg2IDE5NS4xIDEzNC43NjRDMTk0LjIwOCAxMzUuNzU3IDE5My43NDIgMTM2Ljk3MiAxOTMuNzAxIDEzOC40MTVDMTkzLjY2MSAxMzkuNDI2IDE5My44ODggMTQwLjE1IDE5NC4zNzEgMTQwLjU3N0MxOTQuNjIyIDE0MC44MjggMTk1LjA0MiAxNDEuMDE1IDE5NS42MjQgMTQxLjEzMkMxOTYuMzgyIDE0MS4yOSAxOTcuMTM5IDE0MS4yMiAxOTcuODk3IDE0MC45MjhDMTk4LjU3OCAxNDAuNjgyIDE5OS4xNDkgMTQwLjMwMiAxOTkuNjE2IDEzOS43ODhDMTk5LjY2MiAxMzkuNzg4IDE5OS43MDkgMTM5Ljc3MSAxOTkuNzYxIDEzOS43NTlDMjAwLjE1MiAxMzkuNjYgMjAwLjM0NCAxMzkuMzc5IDIwMC4zNDQgMTM4LjkxMkMyMDAuMzYxIDEzOC42OTYgMjAwLjMwMyAxMzguMzI4IDIwMC4xNjkgMTM3LjgwMkMyMDAuMDM1IDEzNy4yOTMgMTk5LjkxOCAxMzYuNjUxIDE5OS44MTkgMTM1Ljg3NEwxOTkuNTU3IDEzMy45NDZDMTk5LjQ1OCAxMzMuMDY5IDE5OS4yNzggMTMyLjM2OCAxOTkuMDA0IDEzMS44NDJaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTk3LjM0MyAxMzUuMzc3QzE5Ny40NiAxMzUuMzU5IDE5Ny42NDYgMTM1LjMxOSAxOTcuODk3IDEzNS4yNkMxOTcuOTI2IDEzNS4yNDggMTk3Ljk1NSAxMzUuMjQzIDE5Ny45ODQgMTM1LjIzMUMxOTguMDEzIDEzNS40NTkgMTk4LjA0MiAxMzUuNzA0IDE5OC4wNzEgMTM1Ljk2MUMxOTguMjQ2IDEzNy4zMDUgMTk4LjM4IDEzOC4xNyAxOTguNDc5IDEzOC41NjFDMTk4LjQ3OSAxMzguNTczIDE5OC40NzkgMTM4LjU4NSAxOTguNDc5IDEzOC41OUwxOTguMDcxIDEzOC45NDFDMTk3LjcwNCAxMzkuMjMzIDE5Ny4yNjcgMTM5LjM5NyAxOTYuNzYgMTM5LjQzOEMxOTYuMjc3IDEzOS40OTYgMTk1LjgxNiAxMzkuNDIgMTk1LjM5MSAxMzkuMjA0QzE5NS40MzIgMTM4LjIyOCAxOTUuNTU0IDEzNy40OCAxOTUuNzcgMTM2Ljk1NUMxOTYuMDc5IDEzNi4wOTYgMTk2LjYwMyAxMzUuNTcgMTk3LjM0MyAxMzUuMzc3WlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0yMDcuODAyIDExNi4xODRDMjA3LjUyOCAxMTYuMjYgMjA3LjM5NCAxMTYuNTIzIDIwNy4zOTQgMTE2Ljk3M0MyMDcuMzcxIDExNy4zMjkgMjA3LjM2NSAxMTcuNjMzIDIwNy4zNjUgMTE3Ljg3OEMyMDcuMzc3IDExOC4wNjUgMjA3LjQgMTE4LjIyMyAyMDcuNDIzIDExOC4zNDZMMjA3LjY1NiAxMTkuMjIyQzIwNy43MzIgMTE5LjQ1NiAyMDcuODQzIDExOS44NDcgMjA3Ljk3NyAxMjAuMzkxQzIwOC4xMTEgMTIwLjkxNyAyMDguMzA5IDEyMS43ODEgMjA4LjU1OSAxMjIuOTkxTDIwOC45MDkgMTI0Ljk0OEMyMDguMzAzIDEyNS40MzMgMjA3Ljc1NSAxMjUuOTE4IDIwNy4yNzcgMTI2LjQwOUMyMDYuOTQ1IDEyNi43MDEgMjA2Ljc0MSAxMjYuOTgxIDIwNi42NjYgMTI3LjI1NkMyMDYuNTMyIDEyNy42ODIgMjA2LjYyNSAxMjcuOTk4IDIwNi45NTcgMTI4LjE5MUMyMDcuMzI0IDEyOC40MDcgMjA3Ljc2MSAxMjguMjYxIDIwOC4yNjggMTI3Ljc1M0wyMDguOTk2IDEyNy4wMjJDMjA5LjA4NCAxMjYuOTM1IDIwOS4xNzEgMTI2Ljg0NyAyMDkuMjU5IDEyNi43NTlMMjEwLjIyIDEzMi4wMThDMjEwLjM1NCAxMzIuNDg1IDIxMC41ODEgMTMyLjk1MiAyMTAuODkgMTMzLjQyQzIxMS4xNDEgMTMzLjgxMSAyMTEuNDAzIDEzNC4wNjMgMjExLjY3NyAxMzQuMTc5QzIxMS44NTEgMTM0LjI1NSAyMTIuMDM4IDEzNC4yNzkgMjEyLjIzIDEzNC4yMzhDMjEyLjQ0NiAxMzQuMTc5IDIxMi41OTcgMTM0LjA3NCAyMTIuNjk2IDEzMy45MTdDMjEyLjg1NCAxMzMuNjgzIDIxMi44MyAxMzMuMzc5IDIxMi42MzggMTMzLjAxMUwyMTIuMTQzIDEzMi4xOTNDMjEyLjAwOSAxMzIgMjExLjg4MSAxMzEuNjI2IDIxMS43NjQgMTMxLjA4M0wyMTAuNjI4IDEyNS43NjZDMjEwLjc1IDEyNS43MDggMjEwLjg5IDEyNS42MzcgMjExLjAzNiAxMjUuNTYyQzIxMS42MzYgMTI1LjIyOSAyMTIuMDY3IDEyNC45NzcgMjEyLjMxOCAxMjQuODAyQzIxMi42ODUgMTI0LjUyNyAyMTIuOTI5IDEyNC4yNzYgMjEzLjA0NiAxMjQuMDQyQzIxMy4yMzggMTIzLjU5MyAyMTMuMTYyIDEyMy4yNjUgMjEyLjgxMyAxMjMuMDQ5QzIxMi41NjIgMTIyLjg3NCAyMTIuMTYgMTIyLjkzMiAyMTEuNjE4IDEyMy4yMjRDMjExLjE0MSAxMjMuNDkzIDIxMC42OCAxMjMuNzY4IDIxMC4yNDkgMTI0LjA0MkwyMDkuMiAxMTkuMTY0QzIwOS4wOSAxMTguNjc5IDIwOC45ODUgMTE4LjI0NyAyMDguODggMTE3Ljg3OEMyMDguNzY5IDExNy40NTIgMjA4LjY2NCAxMTcuMTAxIDIwOC41NTkgMTE2LjgyN0MyMDguMzg1IDExNi4yODMgMjA4LjEzNCAxMTYuMDY3IDIwNy44MDIgMTE2LjE4NFpcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xOTEuNDI5IDEzMy44MjlDMTkwLjg4NyAxMzMuMzc5IDE5MC4yMzQgMTMzLjIwMyAxODkuNDc3IDEzMy4zMDNDMTg4LjcyIDEzMy40MDIgMTg4LjEyNSAxMzMuNzIzIDE4Ny43IDEzNC4yNjdDMTg3LjQ4NCAxMzQuNTE4IDE4Ny4yOTIgMTM0Ljg5OCAxODcuMTE3IDEzNS40MDZDMTg2LjQ3NiAxMzcuMjM1IDE4Ni40NzYgMTM5LjA1OCAxODcuMTE3IDE0MC44NjlDMTg3LjM1IDE0MS41ODggMTg3LjY4MiAxNDIuMTY2IDE4OC4xMDggMTQyLjU5M0MxODguNjMyIDE0My4xNTkgMTg5LjIzMiAxNDMuNDIyIDE4OS45MTQgMTQzLjM4MUMxOTAuNjMxIDE0My4zNjQgMTkxLjI5NSAxNDIuOTYxIDE5MS44OTUgMTQyLjE4NEMxOTIuMTg2IDE0MS43NzUgMTkyLjMzMiAxNDEuNDEyIDE5Mi4zMzIgMTQxLjEwM0MxOTIuMzE1IDE0MC44ODcgMTkyLjI0NSAxNDAuNzA1IDE5Mi4xMjggMTQwLjU0OEMxOTEuOTk0IDE0MC4zNzIgMTkxLjgyNSAxNDAuMjczIDE5MS42MzMgMTQwLjI1NkMxOTEuMzgyIDE0MC4yMzggMTkxLjA2MiAxNDAuNDE5IDE5MC42NzEgMTQwLjgxMUMxOTAuMjgxIDE0MS4yMDIgMTg5Ljk2MSAxNDEuMzgzIDE4OS43MSAxNDEuMzY2QzE4OS4wODcgMTQwLjY4MiAxODguNzIgMTM5Ljg3NiAxODguNjAzIDEzOC45NDFDMTg5LjMyIDEzOC4zMTYgMTkwLjEzIDEzNy44NzIgMTkxLjAyMSAxMzcuNTk3QzE5MS41MDUgMTM3LjQ2MyAxOTEuNzk2IDEzNy4zNTIgMTkxLjg5NSAxMzcuMjc2QzE5Mi4yMDQgMTM3LjA0MiAxOTIuMzc5IDEzNi42NTEgMTkyLjQxOSAxMzYuMTA3QzE5Mi40NiAxMzUuMTU1IDE5Mi4xMjggMTM0LjM5NSAxOTEuNDI5IDEzMy44MjlaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTg5LjUwNiAxMzUuMzQ4QzE4OS42MDUgMTM1LjI4OSAxODkuNjk5IDEzNS4yNiAxODkuNzk4IDEzNS4yNkMxODkuODU2IDEzNS4yNiAxODkuOTQzIDEzNS4zMDEgMTkwLjA2IDEzNS4zNzdDMTkwLjE3NiAxMzUuNDk0IDE5MC4yNDYgMTM1LjU5OSAxOTAuMjY0IDEzNS42OThMMTg5LjYyMyAxMzYuMDJMMTg4Ljg2NSAxMzYuNTE2QzE4OC44MDcgMTM2LjQ1OCAxODguNzk1IDEzNi4zODIgMTg4LjgzNiAxMzYuMjgzQzE4OS4wMTEgMTM1LjgzMyAxODkuMjMyIDEzNS41MjMgMTg5LjUwNiAxMzUuMzQ4WlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNzkuMTM1IDEyNS42NzhDMTc4LjEyNyAxMjUuNjc4IDE3Ny4zNjkgMTI1LjgwNyAxNzYuODYyIDEyNi4wNThDMTc2LjI5NyAxMjYuMzMzIDE3NS42ODUgMTI2LjkzNCAxNzUuMDI3IDEyNy44NjlDMTc0LjY5NSAxMjguMjk2IDE3NC40NzMgMTI4LjY5OSAxNzQuMzU3IDEyOS4wNjdDMTc0LjIyMyAxMjkuNTkzIDE3NC4yNTggMTMwLjA0MyAxNzQuNDczIDEzMC40MTFDMTc0LjU5IDEzMC42MDQgMTc0Ljc2NSAxMzAuNzUgMTc0Ljk5OCAxMzAuODQ5QzE3NS4wNzQgMTMwLjg3MiAxNzUuMTQzIDEzMC44ODQgMTc1LjIwMiAxMzAuODc4TDE3Ni43MTcgMTM5LjE3NUMxNzYuNzI4IDEzOS4yMjcgMTc2LjczNCAxMzkuMjggMTc2Ljc0NiAxMzkuMzIxQzE3Ni42OTkgMTM5LjM2OCAxNzYuNjU4IDEzOS40MDggMTc2LjYyOSAxMzkuNDM4QzE3Ni4yOCAxMzkuNzQ3IDE3Ni4xMzQgMTQwLjA4IDE3Ni4xOTIgMTQwLjQzMUMxNzYuMjEgMTQwLjY4MiAxNzYuMzUgMTQwLjg5OCAxNzYuNiAxNDEuMDc0QzE3Ni43NTcgMTQxLjE3OSAxNzYuOTMyIDE0MS4yNDkgMTc3LjEyNSAxNDEuMjc4QzE3Ny42MTQgMTQzLjc0NCAxNzguMDUxIDE0NS42NDggMTc4LjQzNiAxNDcuMDA0QzE3OC41OTMgMTQ3LjU0NyAxNzguNzY4IDE0Ny45MjcgMTc4Ljk2IDE0OC4xNDNDMTc5LjMxIDE0OC41MzUgMTc5LjY3MSAxNDguNjQgMTgwLjAzOCAxNDguNDY1QzE4MC40MDUgMTQ4LjMzIDE4MC41OTEgMTQ4LjAxNSAxODAuNTkxIDE0Ny41M0MxODAuNTkxIDE0Ny4yNzggMTgwLjQ5MiAxNDYuODk5IDE4MC4zIDE0Ni4zOUMxNzkuODExIDE0NS4wMjMgMTc5LjMxNSAxNDMuMTEzIDE3OC44MTQgMTQwLjY2NUMxNzguODM4IDE0MC42NTkgMTc4Ljg1NSAxNDAuNjQ3IDE3OC44NzMgMTQwLjYzNUMxNzkuNTg5IDE0MC4wOTggMTgwLjE2NiAxMzkuNjAxIDE4MC41OTEgMTM5LjE0NkMxODEuOTE0IDE0MS40ODggMTgzLjQ3IDE0My4zNTggMTg1LjI1MyAxNDQuNzU0QzE4NS42MDIgMTQ1LjA2NCAxODUuOTQgMTQ1LjI1MSAxODYuMjcyIDE0NS4zMDlDMTg2LjczOSAxNDUuNDI2IDE4Ny4wNzcgMTQ1LjMwOSAxODcuMjkyIDE0NC45NTlDMTg3LjQ4NCAxNDQuNjA4IDE4Ny40NDkgMTQ0LjI1OCAxODcuMTc2IDE0My45MDdDMTg3LjA3NyAxNDMuNzczIDE4Ni44MDggMTQzLjUxNiAxODYuMzYgMTQzLjE0OEMxODQuMzczIDE0MS42ODcgMTgyLjggMTM5Ljg3NiAxODEuNjQgMTM3LjcxNEMxODEuNzY4IDEzNy41MTUgMTgxLjkwOCAxMzcuMjkzIDE4Mi4wNDggMTM3LjA0MkMxODIuNDczIDEzNi4yNDIgMTgyLjc0NyAxMzUuNjg3IDE4Mi44NjQgMTM1LjM3N0wxODMuNDc2IDEzMy4yNDRDMTgzLjU3NSAxMzIuNzc3IDE4My42MjEgMTMxLjc2NiAxODMuNjIxIDEzMC4yMDZDMTgzLjY2MiAxMjkuNzM5IDE4My42MzkgMTI5LjM0MiAxODMuNTYzIDEyOS4wMDlDMTgzLjQ2NCAxMjguNjE3IDE4My4yMjUgMTI4LjE1IDE4Mi44MzUgMTI3LjYwNkMxODIuMDM2IDEyNi41OTYgMTgxLjI1IDEyNS45ODIgMTgwLjQ3NSAxMjUuNzY2QzE4MC4yNTkgMTI1LjcwNyAxNzkuODE2IDEyNS42NzggMTc5LjEzNSAxMjUuNjc4WlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE3Ny4xMjQgMTI4LjIyQzE3Ny40MTYgMTI3LjkyOCAxNzcuNjQ5IDEyNy43NDEgMTc3LjgyNCAxMjcuNjY1QzE3Ny45OTkgMTI3LjYwNiAxNzguMjc4IDEyNy41NzcgMTc4LjY2OSAxMjcuNTc3QzE3OS41ODMgMTI3LjYxOCAxODAuMjMgMTI3Ljc4MiAxODAuNjIxIDEyOC4wNzRDMTgwLjgzNiAxMjguMjMyIDE4MS4wNDYgMTI4LjUxMiAxODEuMjYxIDEyOC45MjFDMTgxLjU5NCAxMjkuNTgxIDE4MS43NTcgMTMwLjI3NiAxODEuNzU3IDEzMC45OTVDMTgxLjczOSAxMzEuNTc5IDE4MS41NTMgMTMyLjQxNSAxODEuMjAzIDEzMy41MDdDMTgwLjgzIDEzNC42MTIgMTgwLjQ2OSAxMzUuNDg4IDE4MC4xMjUgMTM2LjEzN0MxODAuMDQ0IDEzNi4xNjYgMTc5Ljk2OCAxMzYuMjA3IDE3OS44OTIgMTM2LjI1M0MxNzkuNjUzIDEzNi40MjMgMTc5LjU0MyAxMzYuNjY4IDE3OS41NzIgMTM2Ljk4NEMxNzkuMjEgMTM3LjUwNCAxNzguODAzIDEzNy45NDIgMTc4LjM0OCAxMzguMjk4TDE3Ni40MjUgMTI5LjAzOEMxNzYuNjA2IDEyOC43OTggMTc2LjgzOSAxMjguNTI0IDE3Ny4xMjQgMTI4LjIyWlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgY2xpcFBhdGg6IFwidXJsKCNjbGlwM18xMjg4XzI1MDEyKVwiLFxuICB0cmFuc2Zvcm06IFwibWF0cml4KDAuOTE2OTE3LCAwLCAwLCAwLjkxNjkxNywgMCwgMClcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTIxLjA4NyAzNjQuOTMyQzEyMS4xODMgMzY0LjQxOSAxMjEuMDY1IDM2My43ODggMTIwLjcyMiAzNjMuMDU0QzEyMC4zODIgMzYyLjM0IDExOS45ODEgMzYxLjg2MSAxMTkuNTIgMzYxLjYyMUMxMTkuMDA5IDM2MS4zNjEgMTE4LjQ0NiAzNjEuMzU0IDExNy44MzYgMzYxLjU4NkMxMTcuMjY1IDM2MS43OTIgMTE2LjgwOCAzNjIuMTU2IDExNi40NiAzNjIuNjc5QzExNS45OTkgMzYzLjQwMSAxMTUuNzAyIDM2NC41MDcgMTE1LjU2MiAzNjYuMDE0TDExNS40MzYgMzY3LjIzQzExNS4zMDUgMzY4LjQxMyAxMTUuMzEgMzY5LjMwNCAxMTUuNDUxIDM2OS45MDVDMTE1Ljc0MSAzNzAuOTg4IDExNi40MjIgMzcxLjg2IDExNy40ODEgMzcyLjUwN0MxMTguMzE5IDM3My4wMjMgMTE5LjEyIDM3My4xODcgMTE5Ljg3MyAzNzMuMDA2QzEyMC4zNiAzNzIuODk5IDEyMC45MzMgMzcyLjUzNCAxMjEuNTkxIDM3MS45MDVDMTIyLjIxOCAzNzEuMjYgMTIyLjU3MiAzNzAuNjY4IDEyMi42NDQgMzcwLjEzQzEyMi42NjQgMzY5LjkwMiAxMjIuNjI0IDM2OS42ODcgMTIyLjUzMiAzNjkuNDkyQzEyMi4zOSAzNjkuMjgzIDEyMi4yMTkgMzY5LjE3MyAxMjIuMDE0IDM2OS4xNzdDMTIxLjgyOSAzNjkuMTc5IDEyMS42MyAzNjkuMjkzIDEyMS40MDUgMzY5LjUyNkwxMjAuNDgxIDM3MC4zOTNDMTIwLjExNyAzNzAuNzggMTE5Ljc2OCAzNzEuMDE1IDExOS40MzYgMzcxLjEwM0MxMTguNzY5IDM3MS4yNTMgMTE4LjIxIDM3MC45OTggMTE3Ljc2NyAzNzAuMzQ1QzExNy40NjggMzY5Ljk2OSAxMTcuMjUxIDM2OS4zNjQgMTE3LjEwMyAzNjguNTM4QzExOC4xNzYgMzY3Ljk0OCAxMTkuMTIzIDM2Ny4yNzcgMTE5Ljk0MiAzNjYuNTEyQzEyMC42MDUgMzY1LjkzIDEyMC45ODcgMzY1LjQwNCAxMjEuMDg3IDM2NC45MzJaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTE4LjM5NyAzNjUuMzYxQzExNy44MjYgMzY1LjkxMSAxMTcuNTA2IDM2Ni4yMSAxMTcuNDQ0IDM2Ni4yNjZMMTE3LjM2OCAzNjYuMjA2QzExNy41MDMgMzY1LjQ1NiAxMTcuNjEyIDM2NC45OTYgMTE3LjY4MSAzNjQuODNMMTE4LjA2OSAzNjMuNzg4QzExOC4xODIgMzYzLjU4OSAxMTguMzcxIDM2My40NTYgMTE4LjYzNiAzNjMuMzc2TDExOC44MTIgMzYzLjY5OEMxMTguOTM5IDM2NC4wMDUgMTE5LjA2NyAzNjQuMjE2IDExOS4xOTggMzY0LjMzN0MxMTkuMDUxIDM2NC42NSAxMTguNzg0IDM2NC45OTEgMTE4LjM5NyAzNjUuMzYxWlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMTEuNTkyIDM2NS41QzExMS4zODUgMzY1LjY2MyAxMTEuMjU4IDM2NS45NzMgMTExLjIyNSAzNjYuNDM3QzExMS4xOTUgMzY2LjkyMSAxMTEuMTkxIDM2Ny45NjUgMTExLjIyNyAzNjkuNTU5TDExMS4zNDcgMzcyLjgwNUMxMTAuNDk3IDM3MS42MjUgMTA5LjgwMSAzNzAuMzUgMTA5LjI3MSAzNjguOTczQzEwOS4wNDggMzY4LjI2NiAxMDguNzQzIDM2Ny45MDUgMTA4LjM1IDM2Ny44ODRDMTA4LjE5MiAzNjcuODgyIDEwOC4wMjggMzY3Ljk0MyAxMDcuODYgMzY4LjA4MUMxMDcuNzE4IDM2OC4yMTQgMTA3LjYyMSAzNjguMzcgMTA3LjU3NSAzNjguNTYxQzEwNy40OTMgMzY4Ljg0NiAxMDcuNTMxIDM2OS4yMTkgMTA3LjY3NyAzNjkuNjgxQzEwOC4zMDYgMzcxLjg3IDEwOS42MyAzNzQuMDI5IDExMS42NTEgMzc2LjE2NUMxMTIuMzY2IDM3Ni45NzEgMTEyLjk4OSAzNzcuMTkgMTEzLjUxNSAzNzYuODMyQzExMy44OTggMzc2LjYgMTE0LjAzMSAzNzYuMTcyIDExMy45MDggMzc1LjU0OUMxMTMuNjQ5IDM3NC45NDIgMTEzLjQ3MSAzNzQuNDkgMTEzLjM2OCAzNzQuMjA3QzExMy4yMjggMzczLjc5MiAxMTMuMTYzIDM3My4yNSAxMTMuMTcxIDM3Mi41ODRDMTEzLjIzNiAzNzEuODIxIDExMy4yNjMgMzcxLjI1NSAxMTMuMjQgMzcwLjg5NEMxMTMuMDg3IDM2OS42MjkgMTEzLjAyNiAzNjguNjc2IDExMy4wNjUgMzY4LjAzM0MxMTMuMTAxIDM2Ny41OTYgMTEzLjEzIDM2Ny4yNyAxMTMuMTUyIDM2Ny4wNjFDMTEzLjE3NiAzNjYuNjk0IDExMy4xNTEgMzY2LjM3NSAxMTMuMDcxIDM2Ni4xMUMxMTIuOTY1IDM2NS44IDExMi43NTMgMzY1LjU3OSAxMTIuNDQxIDM2NS40MzJDMTEyLjA5OCAzNjUuMjY3IDExMS44MiAzNjUuMjg3IDExMS41OTIgMzY1LjVaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTA0LjA0MSAzNjUuMTQ2TDEwNC4wNTQgMzY1LjI0OEMxMDMuODk2IDM2NS4yNDYgMTAzLjczMiAzNjUuMzA3IDEwMy41NjMgMzY1LjQ0NUMxMDMuNDE5IDM2NS41NTEgMTAzLjMzMyAzNjUuNjkyIDEwMy4zMDQgMzY1Ljg1M0wxMDMuNDQ3IDM2Ny4zMTJDMTAzLjQ2OSAzNjcuNDk0IDEwMy41MDQgMzY3LjYxNCAxMDMuNTYgMzY3LjY3NkMxMDMuNjM4IDM2Ny43NTUgMTAzLjc2OCAzNjcuODA4IDEwMy45NTYgMzY3LjgzM0MxMDQuMzI1IDM2Ny44NzggMTA0LjYwNiAzNjcuODIzIDEwNC43OTIgMzY3LjY2M0MxMDQuOTgxIDM2Ny41MjQgMTA1LjA3OCAzNjcuMzA2IDEwNS4wOSAzNjcuMDA5QzEwNS4xIDM2Ni45MTkgMTA1LjA4MSAzNjYuNjU0IDEwNS4wMyAzNjYuMjI4QzEwNC45ODYgMzY1Ljg2OSAxMDQuOTM3IDM2NS42MzUgMTA0Ljg3NiAzNjUuNTI2QzEwNC43MTQgMzY1LjMxOSAxMDQuNDM3IDM2NS4xODggMTA0LjA0MSAzNjUuMTQ2WlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEwNC41NzggMzY5Ljg1MUMxMDQuMjkgMzY5LjkwNyAxMDQuMTE4IDM3MC4xMjcgMTA0LjA3MyAzNzAuNDk2QzEwNC4wMyAzNzAuNzA3IDEwNC4wNTIgMzcwLjk5OSAxMDQuMTQ2IDM3MS4zNzlDMTA0LjUwOSAzNzIuODQ1IDEwNC44ODUgMzc0LjE5MyAxMDUuMjg4IDM3NS40MjdDMTA1LjcxNyAzNzYuNyAxMDYuMDkyIDM3Ny42NDMgMTA2LjQxOCAzNzguMjQxQzEwNi42NzYgMzc4LjY3IDEwNi44OTQgMzc4LjkzOSAxMDcuMDY2IDM3OS4wNTVDMTA3LjQxNiAzNzkuMjg3IDEwNy43MzEgMzc5LjI4MyAxMDguMDI0IDM3OS4wNDJDMTA4LjMzMSAzNzguNzUxIDEwOC4zMjEgMzc4LjI3MSAxMDcuOTg3IDM3Ny42MDVDMTA3LjA1MSAzNzUuNTQzIDEwNi4zMDcgMzczLjM2OCAxMDUuNzU1IDM3MS4wODFDMTA1LjY1NiAzNzAuNjYxIDEwNS41NDUgMzcwLjM2NSAxMDUuNDA4IDM3MC4xOTdDMTA1LjE0MiAzNjkuODY1IDEwNC44NiAzNjkuNzQ4IDEwNC41NzggMzY5Ljg1MVpcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMDAuMzUgMzY4LjA2NUM5OS45MzEzIDM2OC4xMTYgOTkuNTMyNCAzNjguMjE5IDk5LjE1NDUgMzY4LjM4MkM5OS4wOTI2IDM2OC4yMTEgOTkuMDMwNyAzNjguMDQgOTguOTUzNyAzNjcuODU3Qzk4LjA1NyAzNjUuNzIxIDk3LjU0NzggMzY0LjA2NyA5Ny40MjYxIDM2Mi44OTVDOTcuMzUyMyAzNjIuMjg2IDk3LjIwMzQgMzYxLjkwNiA5Ni45Nzg1IDM2MS43NDhDOTYuODI5NCAzNjEuNjQ5IDk2LjY1MzkgMzYxLjYxNiA5Ni40NTEyIDM2MS42NEM5Ni4yNzEzIDM2MS42ODMgOTYuMTM5MiAzNjEuNzgxIDk2LjA0MDcgMzYxLjkzQzk1LjkwNzUgMzYyLjEzMiA5NS44NjAxIDM2Mi40MTkgOTUuOTA2OCAzNjIuODA1Qzk2LjE1NDkgMzY1LjAxOSA5Ni43MzQ4IDM2Ny4yIDk3LjY2MSAzNjkuMzUyQzk3LjY4ODYgMzY5LjQxIDk3LjcwMTkgMzY5LjQ2NCA5Ny43MTUzIDM2OS41MTdDOTcuNTg5OCAzNjkuNjcgOTcuNDUxNiAzNjkuODMgOTcuMjk1NiAzNzAuMDE0TDk1Ljk0NzYgMzcxLjYxOUM5NS43Njk2IDM3MS44NDYgOTUuNjY4NCAzNzIuMDMgOTUuNjM3NiAzNzIuMTcxQzk1LjYwNTMgMzcyLjQ3IDk1LjczNyAzNzIuNzA4IDk2LjAzMTkgMzcyLjg3OEM5Ni4yNzM3IDM3My4wMDcgOTYuNTY0OSAzNzMuMDMzIDk2Ljg5NyAzNzIuOTQ1TDk4LjI2NTUgMzcxLjUwOUM5OC4zMjU3IDM3MS40NCA5OC4zNzMyIDM3MS4zOCA5OC40MTM5IDM3MS4zMkM5OC41MSAzNzEuNjAzIDk4LjYxNTkgMzcxLjk2OCA5OC43MTgyIDM3Mi40MTVDOTguODA5IDM3Mi43NjggOTkuMDA4OSAzNzMuMjg2IDk5LjMxNjQgMzczLjk1NkM5OS42MzU0IDM3NC43MiA5OS45MzkgMzc1LjUyNyAxMDAuMjI4IDM3Ni4zODRMMTAxLjIzMyAzNzkuODY2TDEwMS43NjEgMzgxLjEwNkMxMDIuMDAxIDM4MS41NTcgMTAyLjI0NSAzODEuODIyIDEwMi41MDkgMzgxLjkwN0MxMDIuNzI2IDM4MS45OTggMTAyLjk1IDM4MS45NzcgMTAzLjE4OSAzODEuODU5QzEwMy40MjUgMzgxLjcxNCAxMDMuNTc0IDM4MS41MjQgMTAzLjYzNCAzODEuMjlDMTAzLjY5NSAzODEuMDU2IDEwMy42NTkgMzgwLjc1OSAxMDMuNTI4IDM4MC40MTFDMTAyLjk0OSAzNzguNDcgMTAyLjE4NCAzNzYuMjI5IDEwMS4yMzggMzczLjY4OEMxMDAuOTEgMzcyLjc5NCAxMDAuNDUgMzcxLjYwMSA5OS44NDQ5IDM3MC4xMTdDOTkuOTE4NCAzNzAuMTAxIDk5Ljk4NDMgMzcwLjA3OSAxMDAuMDQzIDM3MC4wNThDMTAwLjQzNSAzNjkuODk0IDEwMC42NjIgMzY5Ljc5MSAxMDAuNzI0IDM2OS43MzVDMTAwLjgzMyAzNjkuNjc0IDEwMC45NjcgMzY5LjQ3OSAxMDEuMTMyIDM2OS4xMzdDMTAxLjI1MiAzNjguODI3IDEwMS4yODYgMzY4LjYwMyAxMDEuMjIzIDM2OC40NzRDMTAxLjA5OSAzNjguMTk0IDEwMC44MDkgMzY4LjA1NyAxMDAuMzUgMzY4LjA2NVpcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk05NS4zMzIxIDM3NS4wMjJDOTQuNjIxMSAzNzQuODEzIDkzLjg5NjMgMzc0Ljk0MyA5My4xNTI1IDM3NS40MjRDOTIuNjIyMSAzNzUuNzQyIDkyLjA5MTYgMzc2LjI4NyA5MS41NjggMzc3LjA1N0M5MS4yNDAzIDM3Ny41NzggOTEuMTY1NSAzNzcuOTc4IDkxLjMzNTkgMzc4LjI1MkM5MS40NDg0IDM3OC40NDUgOTEuNjI1MyAzNzguNTQ3IDkxLjg1NCAzNzguNTY3QzkyLjA4MjcgMzc4LjU4NyA5Mi4yOTU3IDM3OC41MzQgOTIuNDg3NyAzNzguNDIxQzkyLjYzMjQgMzc4LjMxNSA5Mi43OTkzIDM3OC4xNjQgOTIuOTgzMSAzNzcuOTg0TDkzLjQwMjggMzc3LjQ4N0M5My43NjQ3IDM3Ny4wNzkgOTQuMTM0MiAzNzYuOTA0IDk0LjUwNjMgMzc2Ljk3NkM5NC43NjQ1IDM3Ny4wMTMgOTUuMDI5NyAzNzcuMjIxIDk1LjMwMTkgMzc3LjZDOTUuNDUxNCAzNzcuODE1IDk1LjU4MzIgMzc4LjA1MyA5NS42OTYyIDM3OC4zMDdDOTUuMzE5NSAzNzguMzY2IDk0Ljk1ODUgMzc4LjQ5OSA5NC42MTQyIDM3OC43MTNDOTMuNzQwMiAzNzkuMjUxIDkzLjE1ODkgMzgwLjExMSA5Mi44NzAyIDM4MS4yOTJDOTIuNjUzNiAzODIuMTYyIDkyLjY3MjYgMzgzLjIyNCA5Mi45MTM5IDM4NC40NzhDOTMuMDY3OSAzODUuMzUyIDkzLjM1MjYgMzg2LjAwMyA5My43NjgyIDM4Ni40MzNDOTQuMTU1MiAzODYuNzk4IDk0LjYzOTEgMzg3IDk1LjIxMzkgMzg3LjA0N0M5NS43Njg0IDM4Ny4wOTcgOTYuMjg5NyAzODYuOTg2IDk2Ljc4NTMgMzg2LjcxOUM5Ny4xNjE2IDM4Ni41NDMgOTcuNTI1NiAzODYuMjY2IDk3Ljg4NTcgMzg1LjlDOTguMTY2OSAzODYuMTI2IDk4LjQ2OTggMzg2LjE5MyA5OC44MDEgMzg2LjA5N0M5OS4wNjU2IDM4Ni4wMTcgOTkuMjYxMyAzODUuODIyIDk5LjM4MTQgMzg1LjUxMkM5OS41MDY0IDM4NS4yNDMgOTkuNTQwNCAzODQuOTU4IDk5LjQ4MTUgMzg0LjY0MkM5OS40NzY2IDM4NC42MDIgOTkuNDAzMSAzODQuMzkxIDk5LjI2ODUgMzg0LjAxNkM5OS4zMDE4IDM4My44OTUgOTkuMzA5IDM4My43ODUgOTkuMjk1IDM4My42N0M5OS4yNjc5IDM4My40NDcgOTkuMTQ1MiAzODMuMjgzIDk4LjkyNTMgMzgzLjE2NkM5OC45MTIgMzgzLjExMiA5OC44OTE5IDM4My4wNiA5OC44NzEgMzgzLjAwMUM5OC43MDY5IDM4Mi42MDkgOTguNTg5NyAzODIuMDk0IDk4LjUxMzQgMzgxLjQ2NUM5OC40Nzg2IDM4MC43ODMgOTguNDIyMiAzODAuMjYyIDk4LjM1ODQgMzc5LjkwNkM5OC4xODQ3IDM3OC42NDMgOTcuNzIxMSAzNzcuNDc4IDk2Ljk3MzUgMzc2LjQwMkM5Ni40NzIxIDM3NS42NiA5NS45MjMzIDM3NS4yMDUgOTUuMzMyMSAzNzUuMDIyWlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTk0Ljg4OCAzODEuMjUzQzk1LjA1OTIgMzgwLjggOTUuMjkzNCAzODAuNDY5IDk1LjU5MjEgMzgwLjI3NUM5NS43NjYzIDM4MC4xODYgOTYuMDAxMiAzODAuMTQzIDk2LjI5NzUgMzgwLjE1NUM5Ni4zMTc4IDM4MC4xNTMgOTYuMzM4IDM4MC4xNTEgOTYuMzY1MSAzODAuMTQ3Qzk2LjQyNDEgMzgwLjQwOCA5Ni40NzcyIDM4MC42NzYgOTYuNTMxMSAzODAuOTUxQzk2Ljc4IDM4Mi40MzcgOTYuOTUzNiAzODMuNDczIDk3LjA0MzYgMzg0LjA0NkM5Ni43MTYxIDM4NC41MTEgOTYuNDYzNSAzODQuODAyIDk2LjI5MzQgMzg0LjkyNkM5Ni4xMDcxIDM4NS4wODYgOTUuODkyMyAzODUuMTgxIDk1LjY0MjMgMzg1LjIxMUM5NS4zOTIzIDM4NS4yNDEgOTUuMTc5OCAzODUuMTg1IDk1LjAwNTUgMzg1LjA0OEM5NC43MjUxIDM4NC44MjggOTQuNTgwMyAzODQuNDgyIDk0LjU3MDIgMzg0LjAwM0M5NC40NjM1IDM4My4xMjMgOTQuNTcxNCAzODIuMjA0IDk0Ljg4OCAzODEuMjUzWlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk03NS4zMzExIDM3NC4wNTFDNzUuMjM2MSAzNzQuMTczIDc1LjE3MDYgMzc0LjMxMSA3NS4xMzk3IDM3NC40NTJDNzUuMTI0NCAzNzQuNDk1IDc1LjEwMzEgMzc0LjU0NiA3NS4wODg2IDM3NC41OTVDNzUuMDA0IDM3NC44NiA3NS4wMDk2IDM3NS4xODggNzUuMTA2MiAzNzUuNTg5Qzc1LjIxOTEgMzc2LjEyNCA3NS40MjU3IDM3Ni45MjIgNzUuNzM5NCAzNzcuOTgyTDc3LjYzNDcgMzgzLjk5OEM3OC41MTk5IDM4Ni43NzMgNzkuNTM0NCAzODkuNDg1IDgwLjY3OTIgMzkyLjEzOUM4MS4yMTIgMzkzLjMxIDgxLjY0MTQgMzk0LjEzNiA4MS45NzQ4IDM5NC42MjRDODIuMjc5OCAzOTUuMDQ3IDgyLjU3MzUgMzk1LjMyMSA4Mi44NjI2IDM5NS40NDNDODMuMzQ4MiAzOTUuNjU5IDgzLjcyNDEgMzk1LjU5MyA4NC4wMDMxIDM5NS4yMzZDODQuMTk5IDM5NC45ODYgODQuMjMwNSAzOTQuNjggODQuMDk5MSAzOTQuMzMyQzg0LjAyMTUgMzk0LjA4OCA4My44NzgxIDM5My44MSA4My42NTQ2IDM5My40OTRDODMuMDM1OCAzOTIuNTE5IDgyLjM0OTYgMzkxLjA0NCA4MS42MTAyIDM4OS4wNzVMNzguMTUzOCAzNzkuMjM0TDgzLjYyNDQgMzg2LjQ2M0M4NC45NDQ5IDM4OC4xMzUgODYuMDg5NSAzODkuMzc2IDg3LjA2MDEgMzkwLjE5OEM4Ny43NDc4IDM5MC43ODEgODguMzg4OSAzOTEuMTQ5IDg4Ljk3NjggMzkxLjMwNEM4OS4zMzk1IDM5MS40MTEgODkuNjM2NiAzOTEuNDMgODkuODc1NyAzOTEuMzY3Qzg5Ljk1OTEgMzkxLjQzMiA5MC4wMzQ5IDM5MS40OTIgOTAuMTAzIDM5MS41NDVDOTAuMjk2MSAzOTEuNjExIDkwLjUwMjEgMzkxLjYxMyA5MC43MTk0IDM5MS41MzlDOTAuOTE2MyAzOTEuNDY3IDkxLjA1OTQgMzkxLjM0NyA5MS4xNTU0IDM5MS4xNzdDOTEuMzM5OCAzOTAuODMyIDkxLjI2NSAzOTAuMjcyIDkwLjkxNjUgMzg5LjQ5QzkwLjU4MiAzODguODI0IDkwLjE0NSAzODcuNzY1IDg5LjYwNjQgMzg2LjMyMUw4NC4wNjIzIDM3MS4xMzlDODMuOTc0IDM3MC44MDcgODMuODc2MSAzNzAuNTY1IDgzLjc2OTQgMzcwLjQyQzgzLjU1NDEgMzcwLjE3MSA4My4zMzUgMzcwLjA2MSA4My4xMTIgMzcwLjA4OEM4Mi43ODI0IDM3MC4xOTYgODIuNTg4MSAzNzAuNDYgODIuNTIyNSAzNzAuODhDODIuNDc5NiAzNzEuMDkxIDgyLjUwNzEgMzcxLjQzMSA4Mi42MTE4IDM3MS44OThDODIuNzc5MiAzNzIuNTQ0IDgzLjA4MDYgMzczLjUwMiA4My41MDkzIDM3NC43NzVMODguMTEgMzg4LjExNUM4OC4xNjI3IDM4OC4yNjcgODguMjE0NSAzODguNDExIDg4LjI2NDcgMzg4LjU0MkM4Ny44OTM0IDM4OC4yNTEgODcuNDcwMSAzODcuODcgODYuOTkzOSAzODcuMzkzTDg0LjQ1OTQgMzg0LjMwM0M4NC4yNjI5IDM4My45ODMgODMuODcwMyAzODMuNTE2IDgzLjI5NSAzODIuOUM4My4xMzUzIDM4Mi43MTMgODIuNTI3NiAzODEuOTQzIDgxLjQ3MTEgMzgwLjU4Mkw3OS4zODcxIDM3Ny44MTVDNzguOTMwNiAzNzcuMDQ2IDc4LjYwMyAzNzYuNTUxIDc4LjQxNzMgMzc2LjMxOUM3OC4yNTc1IDM3Ni4xMzMgNzcuOTQ2MiAzNzUuODI3IDc3LjQ4MzQgMzc1LjQwM0M3Ny4wNzYgMzc1LjA0MSA3Ni43NzE1IDM3NC43MzQgNzYuNTgzMyAzNzQuNDgzQzc2LjI2MTMgMzc0LjA4OSA3Ni4wMDk2IDM3My44OCA3NS44MjE0IDM3My44NTVDNzUuNjMzMiAzNzMuODI5IDc1LjQ3MDEgMzczLjg5NyA3NS4zMzExIDM3NC4wNTFaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNDkuNjE3NyA0MDMuNDIzQzQ5Ljg2MzMgNDAzLjE4NyA1MC4xNTM1IDQwMy4wMzUgNTAuNDg4OCA0MDIuOTc0QzUwLjgyMDkgNDAyLjg4NSA1MS4xMjEzIDQwMi45MzEgNTEuMzk1OSA0MDMuMTA0QzUxLjYyMDggNDAzLjI2MiA1MS44MjY2IDQwMy41NDYgNTIuMDEzNSA0MDMuOTU1QzUyLjEwODEgNDA0LjE3IDUyLjIyMiA0MDQuNDMxIDUyLjM0ODQgNDA0LjczOEM1Mi4yMzExIDQwNC43MzIgNTIuMTA2MiA0MDQuNzIgNTEuOTY4NiA0MDQuNzE2QzUwLjk5NDIgNDA0Ljc2NSA1MC4xNTMxIDQwNS4yOTMgNDkuNDUxNCA0MDYuMjkxQzQ4LjU1NzEgNDA3LjU2NiA0OC4xODcyIDQwOS4wMzkgNDguMzQyNiA0MTAuNzE1QzQ4LjQzNzMgNDExLjg5MSA0OC44MDI1IDQxMi42OTggNDkuNDIzMiA0MTMuMTIzQzQ5Ljc0OTEgNDEzLjM3OSA1MC4yNjE4IDQxMy41MzYgNTAuOTUzOSA0MTMuNTlDNTEuODU0NCA0MTMuNjY2IDUyLjcyMyA0MTMuNDc4IDUzLjU2MDMgNDEzLjAzM0M1NC4zMTU2IDQxMi42NDcgNTQuOTI0NSA0MTIuMTI3IDU1LjM5MzYgNDExLjQ3M0M1NS40NDA5IDQxMS40NjcgNTUuNDkzMyA0MTEuNDQ3IDU1LjU1ODQgNDExLjQxOEM1NS45OTcyIDQxMS4yNDggNTYuMTgwOCA0MTAuODk3IDU2LjExNTEgNDEwLjM1NkM1Ni4xMDUxIDQxMC4xMDMgNTUuOTg1OCA0MDkuNjg1IDU1Ljc1NjUgNDA5LjA5NUM1NS41Mjk4IDQwOC41MjUgNTUuMzA0NCA0MDcuNzk4IDU1LjA4MDQgNDA2LjkxMkw1NC41MDU1IDQwNC43MTdDNTQuMjY3NiA0MDMuNzE2IDUzLjk1OTcgNDAyLjkzIDUzLjU2ODMgNDAyLjM2QzUyLjk2NTkgNDAxLjUyIDUyLjI5MDUgNDAxLjAzOSA1MS41NDI5IDQwMC45MjRDNTAuODYwNCA0MDAuNzggNTAuMTY5NCA0MDAuOTA1IDQ5LjQ2NDcgNDAxLjMxM0M0OC43NiA0MDEuNzIyIDQ4LjIwOTMgNDAyLjI2OSA0Ny44MTI2IDQwMi45NTVDNDcuNDkwNyA0MDMuNTIzIDQ3LjQwNDYgNDA0IDQ3LjU0MTcgNDA0LjM5NUM0Ny42MjE4IDQwNC42NiA0Ny43NzA1IDQwNC44NjggNDcuOTk1MyA0MDUuMDI2QzQ4LjI0MDUgNDA1LjE4MiA0OC40ODM1IDQwNS4yMDcgNDguNzI1MyA0MDUuMTA5QzQ4Ljk5MDcgNDA0LjMwMiA0OS4yOTI0IDQwMy43MzcgNDkuNjE3NyA0MDMuNDIzWlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTUyLjAzMzYgNDExLjQ2OEM1MS40ODEgNDExLjYwNCA1MC45MzY1IDQxMS41ODEgNTAuNDEyOSA0MTEuMzlDNTAuMzIzMiA0MTAuMjU1IDUwLjM2MDEgNDA5LjM3MiA1MC41MzYyIDQwOC43MzNDNTAuNzczNyA0MDcuNjk1IDUxLjMwOCA0MDcuMDEzIDUyLjEzOSA0MDYuNjg2QzUyLjI3MTcgNDA2LjY0OSA1Mi40ODIyIDQwNi41NzUgNTIuNzY0NSA0MDYuNDcyQzUyLjc4MjMgNDA2LjQ1IDUyLjgxNDUgNDA2LjQzMiA1Mi44NjE4IDQwNi40MjZDNTIuOTE0OSA0MDYuNjk0IDUyLjk4MzEgNDA2Ljk3NCA1My4wNjU3IDQwNy4yNTlDNTMuNDU3MSA0MDguNzkxIDUzLjczMzkgNDA5Ljc3MyA1My45MDM4IDQxMC4yMTJDNTMuOTA2MyA0MTAuMjMyIDUzLjkyMyA0MTAuMjU4IDUzLjk0NTggNDEwLjI3NUw1My40ODQxIDQxMC43MDlDNTMuMDk5NSA0MTEuMDk5IDUyLjYxNTcgNDExLjM1IDUyLjAzMzYgNDExLjQ2OFpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNDYuNTMyIDQwOC4yMjRDNDYuNDQ1NiA0MDcuMTE2IDQ1Ljk1MzggNDA2LjI4MyA0NS4wNjMzIDQwNS43MjVDNDQuMzcxOCA0MDUuMjgxIDQzLjU5MDQgNDA1LjE3IDQyLjcyNiA0MDUuMzkxQzQxLjg2MTUgNDA1LjYxMyA0MS4yMTc1IDQwNi4wNjggNDAuODAwNSA0MDYuNzU3QzQwLjU4NTggNDA3LjA3OCA0MC40MTYxIDQwNy41NDUgNDAuMjg0OCA0MDguMTU4QzM5Ljc5ODQgNDEwLjM2NSA0MC4wNTQ0IDQxMi40NzYgNDEuMDUyIDQxNC40ODJDNDEuNDIzMiA0MTUuMjgxIDQxLjg4OTYgNDE1LjkwNCA0Mi40NDI3IDQxNi4zMzhDNDMuMTMwNCA0MTYuOTIgNDMuODYzMyA0MTcuMTQgNDQuNjQ4MSA0MTYuOTk3QzQ1LjQ3NjcgNDE2Ljg3NiA0Ni4xOTA0IDQxNi4zMTYgNDYuNzc3MiA0MTUuMzMyQzQ3LjA1NzYgNDE0LjgxNyA0Ny4xNzU3IDQxNC4zNzggNDcuMTMyMiA0MTQuMDE5QzQ3LjA4MTYgNDEzLjc3MSA0Ni45NzUgNDEzLjU3MSA0Ni44MTc3IDQxMy40MDVDNDYuNjM3NyA0MTMuMjIxIDQ2LjQyNzggNDEzLjEzIDQ2LjIwMjQgNDEzLjEzN0M0NS45MDk0IDQxMy4xNTIgNDUuNTYzMiA0MTMuNDA2IDQ1LjE2NTUgNDEzLjkxNUM0NC43Njc3IDQxNC40MjMgNDQuNDIxNSA0MTQuNjc3IDQ0LjEyODUgNDE0LjY5MkM0My4zMDk2IDQxMy45ODkgNDIuNzcwNiA0MTMuMTA3IDQyLjUwNDIgNDEyLjA0MUM0My4yNDc1IDQxMS4yMTcgNDQuMTI0NCA0MTAuNTg5IDQ1LjExOTYgNDEwLjE0NUM0NS42NjE1IDQwOS45MjIgNDUuOTgzOCA0MDkuNzUyIDQ2LjA4OCA0MDkuNjVDNDYuNDEzMyA0MDkuMzM2IDQ2LjU2MSA0MDguODU5IDQ2LjUzMiA0MDguMjI0WlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTQzLjY5MzEgNDA3LjcxQzQzLjg0NDYgNDA3LjgyOSA0My45NDA1IDQwNy45NDEgNDMuOTc0NyA0MDguMDU0TDQzLjI3NjYgNDA4LjUxNkw0Mi40Njc5IDQwOS4xOTdDNDIuMzkyMiA0MDkuMTM4IDQyLjM2OCA0MDkuMDUxIDQyLjQwMTMgNDA4LjkzMUM0Mi41NDA5IDQwOC4zODUgNDIuNzU0MSA0MDcuOTk2IDQzLjA0NzEgNDA3Ljc1NEM0My4xNTM3IDQwNy42NzMgNDMuMjU3NyA0MDcuNjI2IDQzLjM3MjYgNDA3LjYxMkM0My40NDAyIDQwNy42MDQgNDMuNTQ3MyA0MDcuNjM5IDQzLjY5MzEgNDA3LjcxWlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0yNS4yMDYxIDQwMS4xMzNDMjQuODgwOSA0MDEuNjc0IDI0LjY4MDcgNDAyLjE3MiAyNC41OTczIDQwMi42MTRDMjQuNTE1NyA0MDMuMjQyIDI0LjYxOTQgNDAzLjc1OCAyNC45MjExIDQwNC4xNTRDMjUuMDgzNCA0MDQuMzYgMjUuMzA2NiA0MDQuNTA1IDI1LjU5MDggNDA0LjU4N0MyNS42ODExIDQwNC41OTcgMjUuNzc5IDQwNC42MTIgMjUuODY5MyA0MDQuNjIyTDI4Ljc1MzMgNDEzLjk4NEMyOC43ODE4IDQxNC4wNDkgMjguODAzNSA0MTQuMTE1IDI4LjgxMTcgNDE0LjE4MkMyOC43NjY4IDQxNC4yMDggMjguNzMwNCA0MTQuMjQ3IDI4LjY4ODkgNDE0LjNDMjguMzI2OSA0MTQuNzA4IDI4LjIwNDggNDE1LjExNCAyOC4zMjE2IDQxNS41MTJDMjguMzc3MSA0MTUuOCAyOC41Njk2IDQxNi4wMzEgMjguODg0OCA0MTYuMTk4QzI5LjA4MTIgNDE2LjI5MSAyOS4yOTI5IDQxNi4zNDEgMjkuNTIxNiA0MTYuMzYxQzMwLjQyOTUgNDE5LjE1NCAzMS4yMDQ2IDQyMS4zMDQgMzEuODQ2IDQyMi44MDVDMzIuMTA0OCA0MjMuNDEyIDMyLjM2MDggNDIzLjgyNyAzMi42MTQxIDQyNC4wNUMzMy4wNzQ1IDQyNC40NTQgMzMuNTA4MiA0MjQuNTI1IDMzLjkwOTMgNDI0LjI3MUMzNC4zMTYxIDQyNC4wNjQgMzQuNDg4IDQyMy42NzIgMzQuNDE5OSA0MjMuMTExQzM0LjM4NDYgNDIyLjgyIDM0LjIxNjQgNDIyLjM5NCAzMy45MjIxIDQyMS44MzNDMzMuMTcwMSA0MjAuMzI1IDMyLjMzNDIgNDE4LjE4MiAzMS40Mjg4IDQxNS40MDlMMzEuNDU4NCA0MTUuMzcxQzMyLjIxMzIgNDE0LjY0MSAzMi44MTMyIDQxMy45OTIgMzMuMjQ2NiA0MTMuNDM4QzM1LjEwNjEgNDE1LjkzOCAzNy4xNjQ0IDQxNy44NyAzOS40MzU2IDQxOS4yNDJDMzkuODg0NSA0MTkuNTUxIDQwLjMwMjcgNDE5LjcyIDQwLjY5NiA0MTkuNzQxQzQxLjI1MyA0MTkuODExIDQxLjYyODUgNDE5LjYyOCA0MS44MjkyIDQxOS4xOTJDNDIuMDAzIDQxOC43NTkgNDEuOTEzMiA0MTguMzU4IDQxLjU0NjQgNDE3Ljk5MUM0MS40MTI3IDQxNy44NDkgNDEuMDY1OCA0MTcuNTg5IDQwLjQ5MzggNDE3LjIyNkMzNy45OTEzIDQxNS44MTQgMzUuOTI2MSA0MTMuOTM3IDM0LjI5MTUgNDExLjU5NkMzNC4zOTk1IDQxMS4zNTYgMzQuNTE2MiA0MTEuMDc1IDM0LjYzNjMgNDEwLjc2NUMzNS4wMTcxIDQwOS43NzggMzUuMjU2OCA0MDkuMDk3IDM1LjM0ODQgNDA4LjcyMkwzNS43NTg0IDQwNi4xNjhDMzUuODA3NiA0MDUuNjEzIDM1LjcxOTcgNDA0LjQzNiAzNS41MDA3IDQwMi42M0MzNS40ODIzIDQwMi4wODMgMzUuMzk5NSA0MDEuNjI2IDM1LjI2NDkgNDAxLjI1MkMzNS4wOTUgNDAwLjgxMiAzNC43NTI0IDQwMC4zMDUgMzQuMjIzNCAzOTkuNzMxQzMzLjE1NTcgMzk4LjY3MyAzMi4xNTc0IDM5OC4wNzMgMzEuMjI4NCAzOTcuOTMyQzMwLjk3MDIgMzk3Ljg5NSAzMC40NTI2IDM5Ny45MjMgMjkuNjYyIDM5OC4wMTlDMjguNDkzMSAzOTguMTYxIDI3LjYzMjcgMzk4LjQxNiAyNy4wODAyIDM5OC43NzhDMjYuNDYzMyAzOTkuMTc2IDI1LjgzODQgMzk5Ljk1OSAyNS4yMDYxIDQwMS4xMzNaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjcuMDI5OCA0MDIuMzE5QzI3LjE3NjkgNDAyLjAwNiAyNy4zOTM1IDQwMS42NDQgMjcuNjg3OCA0MDEuMjQ0QzI3Ljk4NDcgNDAwLjg2NSAyOC4yMjg3IDQwMC42MTYgMjguNDIwNyA0MDAuNTAzQzI4LjYxNTIgNDAwLjQxMSAyOC45MzU0IDQwMC4zMzggMjkuMzg4MiA0MDAuMjgzQzMwLjQ1NDcgNDAwLjIwMiAzMS4yMjc3IDQwMC4zIDMxLjcyMTQgNDAwLjU4M0MzMS45OTM2IDQwMC43MzYgMzIuMjc2MiA0MDEuMDMxIDMyLjU4MzcgNDAxLjQ3NEMzMy4wNjE1IDQwMi4xOTIgMzMuMzQ4MyA0MDIuOTczIDMzLjQ0OTMgNDAzLjgwNUMzMy41MTExIDQwNC40ODQgMzMuNDEyMiA0MDUuNDc4IDMzLjE2MDIgNDA2Ljc5MkMzMi44OTA0IDQwOC4xMjggMzIuNTk2MiA0MDkuMjA3IDMyLjI4MzUgNDEwLjAyMUMzMi4xOTgxIDQxMC4wNTIgMzIuMTA3NiA0MTAuMDk3IDMyLjAyNTUgNDEwLjE1NUMzMS43Nzk5IDQxMC4zOTEgMzEuNzAwMyA0MTAuNjk2IDMxLjc5NDQgNDExLjA3NUMzMS40MTMgNDExLjcxOSAzMC45OTQ4IDQxMi4yODQgMzAuNTI2MyA0MTIuNzczTDI3LjAyOTggNDAyLjMxOVpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNNjAuMTIzNiAzOTcuNjE4QzU5LjU3ODcgMzk3LjI1MiA1OC45NTkxIDM5Ny4yMzEgNTguMjY2NSAzOTcuNTY5QzU3LjcwMzIgMzk3Ljg0MyA1Ny4yNzI3IDM5OC4zMDcgNTYuOTYxNCAzOTguOTYzQzU2LjUyOSAzOTkuNzUgNTYuMzE1NCA0MDAuNzAyIDU2LjMxNCA0MDEuODIxQzU2LjMxMDcgNDAyLjUyOCA1Ni40MDQzIDQwMy41MjYgNTYuNjA3NCA0MDQuODA1QzU2Ljc0NDUgNDA1LjkzNSA1Ny4wMDA4IDQwNi43NDggNTcuMzg0IDQwNy4yNUM1Ny43NzMgNDA3LjggNTguMzMxNCA0MDguMTY1IDU5LjA2MDIgNDA4LjM1MUM1OS43NDYgNDA4LjUyMiA2MC40MTMxIDQwOC40ODIgNjEuMDY5OSA0MDguMjQ1QzYyLjMzODcgNDA3Ljc5NSA2My4yMzk2IDQwNi44MDEgNjMuNzYwOCA0MDUuMjc2QzYzLjk2NzkgNDA0LjcyMiA2NC4wMDI0IDQwNC4yNzIgNjMuODcxIDQwMy45MjRDNjMuNzk2NyA0MDMuNzA3IDYzLjY3MDcgNDAzLjUxNiA2My40OTMxIDQwMy4zNTJDNjMuMjY4MyA0MDMuMTk0IDYzLjA0MyA0MDMuMTQ2IDYyLjgyMjUgNDAzLjE5M0M2Mi40Mzk5IDQwMy4yNiA2Mi4xMjY5IDQwMy42NzYgNjEuODc2OCA0MDQuNDRDNjEuNjA2NSA0MDUuMjA4IDYxLjMxMjYgNDA1LjcyNCA2MS4wMDE4IDQwNS45ODhDNjAuNDk2IDQwNi41MDkgNTkuOTYwMyA0MDYuNjE1IDU5LjM5NjYgNDA2LjMyQzU5LjAwNTcgNDA2LjA5MyA1OC43NDU1IDQwNS42NDQgNTguNjE2MiA0MDQuOTczQzU4LjI1MzIgNDAzLjUwNyA1OC4yMzY1IDQwMi4wMTMgNTguNTUxNyA0MDAuNDg2QzU4LjY3NDggMzk5LjgwNSA1OC45Mzc5IDM5OS40MyA1OS4zNDA4IDM5OS4zNkw2MC4wNjI2IDM5OS4zNzZDNjAuMjQ1IDM5OS4zNTQgNjAuMzkwNiAzOTkuMjU0IDYwLjUwNjggMzk5LjA4MkM2MC42MjU2IDM5OC45MyA2MC42ODYxIDM5OC43NTEgNjAuNjgxOCAzOTguNTQ2QzYwLjY3OTkgMzk4LjEzNCA2MC40OTE4IDM5Ny44MjggNjAuMTIzNiAzOTcuNjE4WlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTYxLjQzNjYgMzg1LjU1MUw2MS44Mjk5IDM4Ni41MzNDNjEuOTUwNiAzODYuNzkzIDYyLjEzMzkgMzg3LjIzMSA2Mi4zNjU3IDM4Ny44NDFDNjIuNTk0OSAzODguNDMxIDYyLjk0NjEgMzg5LjQwNCA2My40MDY1IDM5MC43NjlMNjQuMTI0NiAzOTMuMDE1QzYzLjQ2NzMgMzkzLjY0NCA2Mi44OTI3IDM5NC4yNzYgNjIuNCAzOTQuOTA2QzYyLjA1NTggMzk1LjI5MSA2MS44NTg3IDM5NS42NDQgNjEuODA5NSAzOTUuOTczQzYxLjcxMzkgMzk2LjQ4NSA2MS44NjY0IDM5Ni44MzcgNjIuMjc4NiAzOTcuMDE0QzYyLjczNDYgMzk3LjIxMiA2My4yMjA5IDM5Ni45ODIgNjMuNzM3MyAzOTYuMzIyTDY0LjQ3OTQgMzk1LjM3NEM2NC41ODAzIDM5NS4yNDUgNjQuNjcxIDM5NS4xNDUgNjQuNzUwNiAzOTUuMDY3TDY2LjU5OTggNDAwLjk4NUM2Ni44MjA5IDQwMS41MDcgNjcuMTUgNDAyLjAxNiA2Ny41NzM4IDQwMi41MTRDNjcuOTE5MyA0MDIuOTMyIDY4LjI1ODcgNDAzLjE4NiA2OC41OTI2IDQwMy4yODNDNjguODA2IDQwMy4zNDYgNjkuMDI1NSA0MDMuMzQ3IDY5LjI0MjcgNDAzLjI3MkM2OS40ODQ1IDQwMy4xNzUgNjkuNjQ1NCA0MDMuMDMxIDY5LjczODIgNDAyLjgzNUM2OS44ODc4IDQwMi41NDIgNjkuODE4MSA0MDIuMTk0IDY5LjU0MzQgNDAxLjc5NUw2OC44NTQyIDQwMC45MTdDNjguNjcxNyA0MDAuNzEzIDY4LjQ3MDYgNDAwLjI5OCA2OC4yNTkxIDM5OS42ODZMNjYuMTk5IDM5My43MjRDNjYuMzIzNCAzOTMuNjIgNjYuNDY3NCAzOTMuNTA2IDY2LjYzOTEgMzkzLjM5NkM2Ny4yODgzIDM5Mi45MjYgNjcuNzUzIDM5Mi41NzUgNjguMDE5IDM5Mi4zMzdDNjguNDA2MSAzOTEuOTY3IDY4LjY1NDYgMzkxLjY0MiA2OC43NTY5IDM5MS4zNTVDNjguOTE2NyAzOTAuODA3IDY4Ljc4MjkgMzkwLjQzOSA2OC4zNDcyIDM5MC4yMzhDNjguMDMyIDM5MC4wNyA2Ny41NzQgMzkwLjE5NCA2Ni45ODY2IDM5MC42MDlDNjYuNDY0NCAzOTAuOTk1IDY1Ljk2ODMgMzkxLjM3MSA2NS41MTM2IDM5MS43NDhMNjMuNjEyMyAzODYuMjQ4QzYzLjQwOSAzODUuNzAzIDYzLjIzMzUgMzg1LjIxNyA2My4wOTM5IDM4NC44MDFDNjIuODc4NiAzODQuMzI2IDYyLjY5NDMgMzgzLjkzNyA2Mi41NDA4IDM4My42MzNDNjIuMjYxOCAzODMuMDI4IDYxLjk0MDkgMzgyLjgxMyA2MS41NzIyIDM4Mi45OTVDNjEuMjY1MyAzODMuMTIyIDYxLjE0NjggMzgzLjQ0NSA2MS4yMSAzODMuOTY2QzYxLjIzODkgMzg0LjM3NCA2MS4yODE2IDM4NC43MjYgNjEuMzM3MiAzODUuMDE0QzYxLjM2NDIgMzg1LjIzOCA2MS4zOTk5IDM4NS40MTggNjEuNDM2NiAzODUuNTUxWlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0gMTIyLjI4NSAyODIuMjk2IEMgMTIyLjY3NCAyODQuMjcgMTIzLjE0MiAyODUuODIgMTIzLjY4NCAyODYuOTUyIEMgMTI0LjMyIDI4My40MDIgMTI0LjAxOCAyNzkuODU0IDEyMi43OTEgMjc2LjMxMiBDIDEyMS41OCAyNzIuNzc3IDExOS42MjcgMjY5LjgxOCAxMTYuOTI3IDI2Ny40MzIgQyAxMTQuOTU0IDI2NS42ODggMTEyLjc1NiAyNjQuNDI4IDExMC4zMjkgMjYzLjYzNyBDIDEwNy43NTQgMjYyLjgyNCAxMDUuMjY0IDI2Mi42NTYgMTAyLjg1MSAyNjMuMTM5IEMgMTAwLjMyMiAyNjMuNjMzIDk4LjEzMiAyNjQuODQ3IDk2LjI5IDI2Ni43OTEgQyA5NC4zOTkgMjY4Ljc3OSA5My4zOTUgMjcxLjAxOSA5My4yNjcgMjczLjUwMiBDIDg1LjkyMiAyNzAuNzQyIDc4LjIzNCAyNjkuNDQxIDcwLjE4OCAyNjkuNiBDIDYyLjE1NiAyNjkuNzg3IDU0LjUyNiAyNzEuNDMxIDQ3LjMxMiAyNzQuNTMxIEMgNDIuMzQgMjc2LjY4NCAzOC41MDUgMjc5LjIxMiAzNS44MDkgMjgyLjEyNSBDIDM0LjE2NCAyODMuODg3IDMyLjg5NSAyODUuODI5IDMyLjAwMyAyODcuOTQ4IEMgMzEuMDY2IDI5MC4yMDYgMzAuNjQ2IDI5Mi40NjIgMzAuNzQ3IDI5NC43MTIgQyAzMC44MjQgMjk2LjI0MSAzMS4xNTIgMjk3Ljg4MyAzMS43MzUgMjk5LjY1MyBDIDMyLjEzOSAzMDAuODI5IDMyLjc4IDMwMi40MDcgMzMuNjUxIDMwNC4zODMgQyAzNC4xMDcgMzA1LjQ5NSAzNC4xOTUgMzA2LjMwNyAzMy45MDggMzA2LjgxIEMgMzMuNTQgMzA3LjQ4MSAzMi41ODQgMzA3Ljc4MiAzMS4wMzMgMzA3LjcxMiBDIDI2LjY0OSAzMDcuNDEzIDIyLjk3MyAzMDcuODg1IDE5Ljk5MSAzMDkuMTI3IEMgMTguMTk2IDMwOS45MDMgMTYuNjYgMzEwLjk2IDE1LjM4MiAzMTIuMjk4IEMgMTMuOTk0IDMxMy43MjIgMTMuMDc1IDMxNS4zMDcgMTIuNjM5IDMxNy4wNDYgQyAxMi4xNjcgMzE4LjkwNSAxMi4zMDEgMzIwLjc1MSAxMy4wNDEgMzIyLjU2OSBDIDEzLjgwMSAzMjQuNDQ1IDE1LjAwNyAzMjUuNzc1IDE2LjY1MiAzMjYuNTU4IEMgMTUuNjc5IDMyNi45NjkgMTQuMzcxIDMyNy4zNDMgMTIuNzM5IDMyNy42ODggQyAxMC40NTcgMzI4LjE4NCA5LjEyIDMyOC40ODkgOC43MjQgMzI4LjU5NiBDIDUuNDEzIDMyOS40NzYgMy4yMTEgMzMwLjk1OSAyLjExOCAzMzMuMDUzIEMgMS40NTYgMzM0LjMgMS4zNDcgMzM1LjY0NCAxLjc4MSAzMzcuMDg5IEMgMi4yNDcgMzM4LjU3IDMuMTE3IDMzOS40OTIgNC4zOTUgMzM5Ljg0NiBDIDMuMTEyIDMzOC44MjMgMi42NzQgMzM3LjM1NiAzLjA4NCAzMzUuNDM4IEMgMy40NzMgMzMzLjYwOCA0LjQwNyAzMzIuMTk2IDUuODkyIDMzMS4yMDQgQyA3LjEgMzMwLjQwMyA4LjY2MyAzMjkuODI2IDEwLjU3MiAzMjkuNDc3IEMgMTIuODcyIDMyOS4xNzUgMTQuNTggMzI4Ljk0MyAxNS42OSAzMjguNzgyIEMgMTYuOTgyIDMyOC41NzIgMTcuNzU1IDMyOC4xMzUgMTggMzI3LjQ3NSBDIDE4LjE4NCAzMjYuOTQ0IDE4LjAyMyAzMjYuMzg2IDE3LjUyMiAzMjUuODAyIEMgMTcuMzgyIDMyNS42MTkgMTYuODg2IDMyNS4xNDIgMTYuMDMzIDMyNC4zNzIgQyAxNC40MjIgMzIyLjkzNyAxMy43MzggMzIwLjk4OSAxMy45OTggMzE4LjUxOCBDIDE0LjI1NCAzMTYuMTQ0IDE1LjI0NCAzMTQuMTkzIDE2Ljk1NSAzMTIuNjY5IEMgMTkuODA4IDMxMC4xMDYgMjMuOTg0IDMwOS4wNDcgMjkuNDkxIDMwOS40ODkgQyAzMC42NjQgMzA5LjU4NiAzMS41MTkgMzA5LjYxNCAzMi4wNjYgMzA5LjU3OSBDIDMzLjAyNiAzMDkuNDg2IDMzLjc4IDMwOS4yMDUgMzQuMzMgMzA4LjczIEMgMzQuOTQgMzA4LjIxNiAzNS4zMTcgMzA3LjQ5NSAzNS40NjggMzA2LjU1NSBDIDM1LjU4MyAzMDUuNzM3IDM1LjUwNSAzMDQuODg4IDM1LjIzNyAzMDQuMDA0IEMgMzUuMDQ5IDMwMy4zODUgMzQuNzA2IDMwMi42MTUgMzQuMjA0IDMwMS42ODggQyAzMy41NzcgMzAwLjU0NCAzMy4xODQgMjk5Ljc3OSAzMy4wMTggMjk5LjQwNCBDIDMyLjA0OCAyOTcuMjAyIDMxLjc5NyAyOTQuNzc4IDMyLjI3NSAyOTIuMTM3IEMgMzIuNjk5IDI4OS42NTYgMzMuNjc3IDI4Ny4zNTYgMzUuMjEyIDI4NS4yNDYgQyAzNy43MTQgMjgxLjgyOCA0MS42NzQgMjc4Ljg3NyA0Ny4xMDcgMjc2LjM5NCBDIDU0LjY3NyAyNzIuOTgyIDYyLjczOSAyNzEuMjY5IDcxLjI4NiAyNzEuMjU4IEMgNzkuODMzIDI3MS4yNDggODcuODkzIDI3Mi45MzkgOTUuNDU5IDI3Ni4zMzUgQyA5NS42MzcgMjc1LjkxOCA5NS43MTEgMjc1LjM3NSA5NS42NzcgMjc0LjcxOSBDIDk1LjYyNiAyNzMuOTU5IDk1LjU5OSAyNzMuMzk1IDk1LjU4OSAyNzMuMDI2IEMgOTUuNTcyIDI3MS4zNjcgOTYuMTM5IDI2OS44IDk3LjI3NSAyNjguMzI2IEMgOTguMzQzIDI2Ni45MDggOTkuNjk2IDI2NS44ODcgMTAxLjM0NSAyNjUuMjc2IEMgMTAyLjg4IDI2NC42OTkgMTA0LjU1OSAyNjQuNTAxIDEwNi4zODEgMjY0LjY4MSBDIDEwOC4wNSAyNjQuODM2IDEwOS43MTEgMjY1LjI4MyAxMTEuMzU5IDI2Ni4wMTkgQyAxMTMuNzM1IDI2Ny4xMDIgMTE1Ljc5NyAyNjguNjYyIDExNy41NDIgMjcwLjY4MyBDIDExOS4zMSAyNzIuNzE0IDEyMC41NDUgMjc0Ljk4MSAxMjEuMjY1IDI3Ny40NzcgQyAxMjEuNDUzIDI3OC4wOTYgMTIxLjc5IDI3OS43MDIgMTIyLjI3OSAyODIuMjkzXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgY2xpcFBhdGg6IFwidXJsKCNjbGlwNF8xMjg4XzI1MDEyKVwiLFxuICB0cmFuc2Zvcm06IFwibWF0cml4KDAuOTE2OTE3LCAwLCAwLCAwLjkxNjkxNywgMCwgMClcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTcwLjc1MiA0MTUuMTE1QzE3MC41NiA0MTUuMDcgMTcwLjI3MiA0MTUuMDcgMTY5Ljg4OCA0MTUuMTE1QzE2OS4xMzkgNDE1LjEzNCAxNjguNTg4IDQxNS4xNjYgMTY4LjIyMyA0MTUuMjEyQzE2Ny40NjIgNDE1LjMxNCAxNjYuNzQ1IDQxNS41NzggMTY2LjA3OSA0MTYuMDE1QzE2NS44NjEgNDE1Ljk2NCAxNjUuNjM3IDQxNi4wMDkgMTY1LjQwNyA0MTYuMTQ0QzE2NS4wODcgNDE2LjMxOCAxNjQuODgyIDQxNi42NDUgMTY0Ljc5OSA0MTcuMTQxQzE2NC43NjcgNDE3LjM0NiAxNjQuNzY3IDQxNy42MDQgMTY0Ljc5OSA0MTcuOTEyQzE2NC43NzMgNDE4LjA5OSAxNjQuNzk5IDQxOC4yNTkgMTY0Ljg2MyA0MTguMzk0TDE2Ni40OTUgNDI5LjQ4N0MxNjYuNjIzIDQzMC42NDQgMTY2LjczOCA0MzEuNTEyIDE2Ni44NDcgNDMyLjA5MUwxNjcuMTM1IDQzMy42OThDMTY3LjI1IDQzNC4xMjMgMTY3LjM5MSA0MzQuNDc3IDE2Ny41NTEgNDM0Ljc1OUMxNjcuNSA0MzQuNzc5IDE2Ny40NDkgNDM0Ljc5OCAxNjcuMzkxIDQzNC44MjRDMTY3LjE4IDQzNC45MzMgMTY2Ljk5NCA0MzUuMDgxIDE2Ni44NDcgNDM1LjI3NEMxNjYuNyA0MzUuNDg2IDE2Ni42NDIgNDM1LjcwNSAxNjYuNjg3IDQzNS45MTdDMTY2Ljc1MSA0MzYuNDEyIDE2Ny4xNDggNDM2LjY3NiAxNjcuODcxIDQzNi43MjFDMTY4LjcyMyA0MzYuNzg1IDE2OS43NiA0MzYuMzk5IDE3MC45NzYgNDM1LjU2M0MxNzIuMjM3IDQzNC43NDcgMTczLjE5NyA0MzMuOTM2IDE3My44NTYgNDMzLjEyQzE3NC43NzIgNDMxLjk2MiAxNzUuMjIgNDMwLjc5MiAxNzUuMiA0MjkuNjE1QzE3NS4yIDQyOS4wMzcgMTc1LjA5MiA0MjguNDI2IDE3NC44OCA0MjcuNzgzQzE3NC42MDUgNDI2Ljk2NiAxNzQuMzA0IDQyNi4zNjggMTczLjk4NCA0MjUuOTgyQzE3My41ODEgNDI1LjQ4NyAxNzMuMDc1IDQyNS4xMjcgMTcyLjQ4IDQyNC44ODlDMTcxLjg1OSA0MjQuNjMyIDE3MS4yNDUgNDI0LjU0OCAxNzAuNjI0IDQyNC42MzJDMTcxLjc1NyA0MjMuMTA4IDE3Mi40MTYgNDIxLjM5NyAxNzIuNjA4IDQxOS40ODhDMTcyLjc4MSA0MTcuODggMTcyLjQ4IDQxNi42MzkgMTcxLjcxMiA0MTUuNzU4QzE3MS40MTEgNDE1LjQxNyAxNzEuMDkxIDQxNS4xOTkgMTcwLjc1MiA0MTUuMTE1WlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE3MC42MjQgNDE5LjM1OUwxNzAuNDMyIDQyMC4yMjdDMTcwLjExMiA0MjEuNDMgMTY5LjU4NyA0MjIuNTU1IDE2OC44NjQgNDIzLjYwM0MxNjguNTQ0IDQyNC4wNzIgMTY4LjIxMSA0MjQuNDIgMTY3Ljg3MiA0MjQuNjMyQzE2Ny44NjUgNDI0LjYzOCAxNjcuODIgNDI0LjY2NCAxNjcuNzQ0IDQyNC42OTZDMTY3LjczMSA0MjQuNjQ1IDE2Ny43MjQgNDI0LjU4NyAxNjcuNzEyIDQyNC41MzVDMTY3LjUzOSA0MjMuODA5IDE2Ny40MTEgNDIzLjA4OSAxNjcuMzI3IDQyMi4zODFMMTY2LjUyNyA0MTcuODE2QzE2Ni44MzUgNDE3LjUwMSAxNjcuMjYzIDQxNy4yODkgMTY3LjgwOCA0MTcuMTczQzE2OC4yMTEgNDE3LjA2MyAxNjguODMyIDQxNy4wMzEgMTY5LjY2NCA0MTcuMDc2QzE2OS45MDEgNDE3LjA3NiAxNzAuMDYxIDQxNy4xMDggMTcwLjE0NCA0MTcuMTczQzE3MC4yNzIgNDE3LjI1NiAxNzAuMzgxIDQxNy40MTcgMTcwLjQ2NCA0MTcuNjU1QzE3MC42MzcgNDE4LjE1IDE3MC42ODggNDE4LjcxNiAxNzAuNjI0IDQxOS4zNTlaXCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE3MS45MDQgNDI2Ljg4M0MxNzIuMTE1IDQyNi45NjYgMTcyLjMyIDQyNy4xNCAxNzIuNTEyIDQyNy4zOTdDMTczLjE1MiA0MjguMjUyIDE3My4zNzYgNDI5LjExNCAxNzMuMTg0IDQyOS45NjlDMTczLjEwMSA0MzAuNDM5IDE3Mi44ODMgNDMwLjkyMSAxNzIuNTQ0IDQzMS40MTZDMTcyLjIwNSA0MzEuOTc1IDE3MS44MjcgNDMyLjQyNSAxNzEuNDI0IDQzMi43NjZDMTcxLjA4NSA0MzMuMDg4IDE3MC42MjQgNDMzLjQyMiAxNzAuMDQ4IDQzMy43NjNDMTY5Ljg4OCA0MzMuODcyIDE2OS43MjggNDMzLjk2OSAxNjkuNTY4IDQzNC4wNTJDMTY5LjUzNiA0MzMuOTQ5IDE2OS40OTcgNDMzLjgyNyAxNjkuNDQgNDMzLjY5OUMxNjkuMTIgNDMzLjA3NSAxNjguOTE1IDQzMi40NTggMTY4LjgzMiA0MzEuODM0TDE2OC43MDQgNDMwLjM4N0wxNjguNTEyIDQyOS40MjNDMTY4LjUxMiA0MjkuNDIzIDE2OC40OCA0MjguOTkyIDE2OC40MTYgNDI4LjIwMUMxNjguMzkgNDI3Ljg5MiAxNjguMzQ1IDQyNy41MzggMTY4LjI4OCA0MjcuMTRDMTY4LjQ0MSA0MjcuMTA4IDE2OC42NDYgNDI3LjA0MyAxNjguODk2IDQyNi45NDdDMTY5LjQwOCA0MjYuNzk5IDE3MC4xOTUgNDI2Ljc0MSAxNzEuMjY0IDQyNi43ODZDMTcxLjU2NSA0MjYuNzg2IDE3MS43NzYgNDI2LjgxOCAxNzEuOTA0IDQyNi44ODNaXCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1Ny4zNDIgNDE4LjYyQzE1Ni44ODcgNDE4LjY0NSAxNTYuNTAzIDQxOC43MDMgMTU2LjE5IDQxOC43ODFDMTU2LjE5NiA0MTguNzEgMTU2LjE5NiA0MTguNjU4IDE1Ni4xOSA0MTguNjJDMTU2LjEwNiA0MTguMjE1IDE1NS45MDIgNDE3Ljk5IDE1NS41ODIgNDE3Ljk0NUMxNTUuNjAxIDQxNy45OSAxNTUuNDk4IDQxOC4wNDEgMTU1LjI2MiA0MTguMTA1QzE1NS4wODkgNDE4LjEyNSAxNTUuMDA2IDQxOC4yODUgMTU1LjAwNiA0MTguNTg4QzE1NC45ODYgNDE4Ljk4IDE1NC45NzMgNDE5LjM4NSAxNTQuOTczIDQxOS44MDlDMTU0LjcxNyA0MjAuMjE0IDE1NC42MDIgNDIwLjU1NSAxNTQuNjIxIDQyMC44MzhDMTU0LjY2NiA0MjEuMDUgMTU0Ljc4MSA0MjEuMjM3IDE1NC45NzMgNDIxLjM4NUMxNTUuMDA2IDQyMS40MDQgMTU1LjAzOCA0MjEuNDE3IDE1NS4wNyA0MjEuNDE3QzE1NS4wOTUgNDIxLjg2NyAxNTUuMTQgNDIyLjMzIDE1NS4xOTggNDIyLjc5OUwxNTUuNDg2IDQyNS4xNDZDMTU1LjQ4NiA0MjUuMTQ2IDE1NS41MTggNDI1LjcwNiAxNTUuNTgyIDQyNi43NTRMMTU1Ljk5OCA0MzEuNjA5QzE1Ni4wMTcgNDMxLjk3NSAxNTYuMTI2IDQzMi43NTMgMTU2LjMxOCA0MzMuOTU2TDE1Ny4wNTQgNDM3LjQ2QzE1Ny4yNjUgNDM4LjM0MSAxNTcuNTY2IDQzOC45NTkgMTU3Ljk1IDQzOS4zMjVDMTU4LjI1MSA0MzkuNjAyIDE1OC41NTggNDM5LjcyNCAxNTguODc4IDQzOS42NzlDMTU5LjI4MSA0MzkuNjM0IDE1OS41MzcgNDM5LjQzNCAxNTkuNjQ2IDQzOS4wNjhDMTU5LjY0NiA0MzkuMDM2IDE1OS42NDYgNDM5LjAxIDE1OS42NDYgNDM4Ljk3MkMxNTkuNzkzIDQzOC45MDEgMTU5Ljk0MSA0MzguODE3IDE2MC4wOTQgNDM4LjcxNEMxNjAuNjcgNDM4LjM0OCAxNjEuMjAyIDQzNy44NjYgMTYxLjY5NSA0MzcuMjY3QzE2Mi4zNTQgNDM2LjQ5NiAxNjIuODQ3IDQzNS42NDcgMTYzLjE2NyA0MzQuNzI4QzE2My4zNCA0MzQuMjU4IDE2My41MDYgNDMzLjUwNiAxNjMuNjc5IDQzMi40NzdMMTYzLjk2NyA0MzAuOTk4QzE2NC4wNzYgNDMwLjI0NiAxNjQuMTI3IDQyOS41ODMgMTY0LjEyNyA0MjkuMDA1QzE2NC4xMjcgNDI4LjE4OCAxNjMuOTk5IDQyNi45NjYgMTYzLjc0MyA0MjUuMzM5QzE2My42MTUgNDI0LjU2OCAxNjMuNSA0MjMuOTg5IDE2My4zOTEgNDIzLjYwM0MxNjIuOTg4IDQyMi4xNjkgMTYyLjI3MSA0MjAuOTQ4IDE2MS4yNDYgNDE5LjkzOEMxNjAuNTYyIDQxOS4yNSAxNTkuODgzIDQxOC44MjYgMTU5LjE5OCA0MTguNjUyQzE1OC43MzEgNDE4LjU0MyAxNTguMTEgNDE4LjUzNiAxNTcuMzQyIDQxOC42MlpcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNTYuMzUgNDIwLjgwNkMxNTYuNjk1IDQyMC42NDUgMTU3LjA3OSA0MjAuNTQ5IDE1Ny41MDIgNDIwLjUxN0MxNTguMzE1IDQyMC40NzIgMTU4Ljk5MyA0MjAuNjk3IDE1OS41NSA0MjEuMTkyQzE1OS44NTEgNDIxLjQ0OSAxNjAuMTU4IDQyMS44MzUgMTYwLjQ3OCA0MjIuMzQ5QzE2MC43MzQgNDIyLjg0NCAxNjAuOTcxIDQyMy4zOTEgMTYxLjE4MiA0MjMuOTg5QzE2MS4zNTUgNDI0LjU0OCAxNjEuNTU0IDQyNS42NDIgMTYxLjc5IDQyNy4yNjhDMTYxLjg3NCA0MjguMTI0IDE2MS45MTggNDI4Ljc2IDE2MS45MTggNDI5LjE2NUMxNjEuODk5IDQyOS44MDggMTYxLjc5IDQzMC41NjEgMTYxLjU5OCA0MzEuNDE2QzE2MS40MDYgNDMyLjQ0NSAxNjEuMjE0IDQzMy4yMjkgMTYxLjAyMiA0MzMuNzYzQzE2MC43NDcgNDM0LjU4IDE2MC40NDYgNDM1LjE5IDE2MC4xMjYgNDM1LjU5NkMxNTkuNzc0IDQzNi4wNjUgMTU5LjM1MiA0MzYuNDUxIDE1OC44NDYgNDM2Ljc1M0MxNTguNzUgNDM2LjM0OCAxNTguNjE2IDQzNS42NzkgMTU4LjQzIDQzNC43NkwxNTguMTEgNDMzLjE1MkMxNTcuOTgyIDQzMi40OSAxNTcuODg2IDQzMS44MTUgMTU3LjgyMiA0MzEuMTI3QzE1Ny44MjIgNDMwLjIyNiAxNTcuODAzIDQyOS42NDggMTU3Ljc1OCA0MjkuMzlMMTU3LjQ3IDQyNy44NDdDMTU3LjQyNSA0MjcuNjU0IDE1Ny4zODcgNDI3LjA4OCAxNTcuMzQyIDQyNi4xNDNDMTU3LjI3OCA0MjUuNDU1IDE1Ny4wOTkgNDI0LjM3NSAxNTYuNzk4IDQyMi44OTZMMTU2LjQ0NiA0MjEuMTkyTDE1Ni4zNSA0MjAuODA2WlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xNTEuMjkzIDQzMC40MTlDMTUwLjggNDMwLjQzOCAxNTAuMzQ2IDQzMC41OTMgMTQ5LjkxNyA0MzAuODY5QzE0OS4xNjggNDMxLjMxOSAxNDguNTkyIDQzMi4wOTEgMTQ4LjE4OCA0MzMuMTg0QzE0Ny43NCA0MzQuMzQyIDE0Ny41MjkgNDM1LjU1IDE0Ny41NDggNDM2LjgxN0MxNDcuNTY4IDQzNy41ODkgMTQ3LjcyMSA0MzguMjk2IDE0Ny45OTYgNDM4LjkzOUMxNDguMzE2IDQzOS42NjYgMTQ4Ljc2NSA0NDAuMTkzIDE0OS4zNDEgNDQwLjUxNUMxNDkuODcyIDQ0MC44MTcgMTUwLjQ3NCA0NDAuOSAxNTEuMTMzIDQ0MC43NzJDMTUxLjc5MiA0NDAuNjYzIDE1Mi4zMyA0NDAuMzY3IDE1Mi43MzMgNDM5Ljg3MkMxNTMuMTE3IDQzOS4zNzYgMTUzLjM4NiA0MzguNzI3IDE1My41MzMgNDM3LjkxQzE1My42OCA0MzcuMDc0IDE1My43NTcgNDM1LjgyMSAxNTMuNzU3IDQzNC4xNDlDMTUzLjc1NyA0MzIuNDc3IDE1My4zOTIgNDMxLjM2NCAxNTIuNjY5IDQzMC44MDVDMTUyLjI4NSA0MzAuNTI4IDE1MS44MjQgNDMwLjQgMTUxLjI5MyA0MzAuNDE5WlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE1MS4zMjUgNDMyLjUwOUMxNTEuNTM2IDQzMi44NSAxNTEuNjQ1IDQzMy4xMzMgMTUxLjY0NSA0MzMuMzQ1QzE1MS42NjQgNDMzLjQ3NCAxNTEuNjU4IDQzMy42ODYgMTUxLjYxMyA0MzMuOTg4QzE1MS41OTQgNDM0LjM3NCAxNTEuNjU4IDQzNC45NjUgMTUxLjgwNSA0MzUuNzU2QzE1MS44MDUgNDM2LjEyMyAxNTEuNzYgNDM2LjQ0NCAxNTEuNjc3IDQzNi43MjFMMTUxLjQ4NSA0MzcuM0MxNTEuNDQgNDM3LjQ3MyAxNTEuNDAyIDQzNy43MTggMTUxLjM1NyA0MzguMDM5QzE1MS4yOTMgNDM4LjMxNiAxNTEuMjEgNDM4LjUzNCAxNTEuMTAxIDQzOC42ODJDMTUwLjcxNyA0MzguNzY2IDE1MC40NDIgNDM4Ljc2NiAxNTAuMjY5IDQzOC42ODJDMTUwLjE2IDQzOC41OTggMTUwLjAzMiA0MzguMzkzIDE0OS44ODUgNDM4LjA3MUMxNDkuNjQ4IDQzNy4zMTkgMTQ5LjUzMyA0MzYuNzg1IDE0OS41MzMgNDM2LjQ2NEMxNDkuNTMzIDQzNi4wOTcgMTQ5LjYxIDQzNS42NDcgMTQ5Ljc1NyA0MzUuMTEzTDE1MC4wMTMgNDM0LjIxM0MxNTAuMTg2IDQzMy43MTggMTUwLjQxIDQzMy4yOTQgMTUwLjY4NSA0MzIuOTI3QzE1MC45MjIgNDMyLjY1IDE1MS4xMzMgNDMyLjUwOSAxNTEuMzI1IDQzMi41MDlaXCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE0MS40MDQgNDMzLjYzNEMxNDAuODI3IDQzNC4xMjkgMTQwLjM3OSA0MzQuODQzIDE0MC4wNTkgNDM1Ljc4OEMxMzkuODQ4IDQzNi4zNDggMTM5LjcwNyA0MzYuOTc4IDEzOS42NDMgNDM3LjY4NUMxMzkuNTc5IDQzOC4xMzUgMTM5LjU2NiA0MzguNjYzIDEzOS42MTEgNDM5LjI2MUMxMzkuNjExIDQzOS43MyAxMzkuNjc1IDQ0MC4xMSAxMzkuODAzIDQ0MC4zODZDMTM5Ljg4NiA0NDAuNjI0IDE0MC4xNDMgNDQwLjk3OCAxNDAuNTcxIDQ0MS40NDdDMTQxIDQ0MS44NzggMTQxLjM1MiA0NDIuMTQxIDE0MS42MjggNDQyLjI1MUMxNDEuOTI4IDQ0Mi4zNiAxNDIuMyA0NDIuNDEyIDE0Mi43NDggNDQyLjQxMkMxNDMuNDcxIDQ0Mi40MTIgMTQzLjk5NiA0NDIuMzI4IDE0NC4zMTYgNDQyLjE1NEMxNDQuNTA4IDQ0Mi41NCAxNDQuNjg3IDQ0My4xMzggMTQ0Ljg2IDQ0My45NTVDMTQ0Ljk4OCA0NDQuODM2IDE0NS4wNTIgNDQ2LjE3MyAxNDUuMDUyIDQ0Ny45NzRDMTQ1LjAwNyA0NDguNTk3IDE0NC45MzcgNDQ4Ljk5IDE0NC44MjggNDQ5LjE2M0MxNDQuNTkxIDQ0OS42NTggMTQ0LjI2NSA0NDkuODI2IDE0My44MzYgNDQ5LjY3OEMxNDMuNTE2IDQ0OS4yOTIgMTQzLjMwNSA0NDguNzEzIDE0My4xOTYgNDQ3Ljk0MkMxNDMuMDQ5IDQ0Ni43MDEgMTQyLjk1OSA0NDYuMDQ1IDE0Mi45NCA0NDUuOThDMTQyLjc0OCA0NDUuMzgyIDE0Mi40NzIgNDQ1LjA5MyAxNDIuMTA4IDQ0NS4xMTJDMTQxLjg1MiA0NDUuMTEyIDE0MS42NiA0NDUuMjU0IDE0MS41MzIgNDQ1LjUzQzE0MS40NDggNDQ1LjY3OCAxNDEuMzg0IDQ0NS45MTYgMTQxLjM0IDQ0Ni4yMzhDMTQxLjI3NSA0NDYuNjIzIDE0MS4yMjQgNDQ3LjE1NyAxNDEuMTc5IDQ0Ny44NDVDMTQxLjEzNSA0NDguNDQzIDE0MS4xNjcgNDQ4LjkzOCAxNDEuMjc1IDQ0OS4zMjRDMTQxLjQ4NyA0NTAuMDUxIDE0MS45MzUgNDUwLjcwNyAxNDIuNjIgNDUxLjI4NUMxNDMuMDg3IDQ1MS43NTUgMTQzLjU2MSA0NTIuMDI1IDE0NC4wMjggNDUyLjA4OUMxNDQuNzUxIDQ1Mi4xNzMgMTQ1LjQzNiA0NTEuODUxIDE0Ni4wNzYgNDUxLjEyNUMxNDYuNDQxIDQ1MC42OTQgMTQ2LjY4NCA0NTAuMjg5IDE0Ni44MTIgNDQ5LjkwM0MxNDYuOTIxIDQ0OS42MDEgMTQ2Ljk5MiA0NDkuMDIyIDE0Ny4wMzYgNDQ4LjE2N0MxNDcuMDM2IDQ0Ni4wMjUgMTQ2Ljk3MiA0NDQuNTM0IDE0Ni44NDQgNDQzLjY5OEMxNDYuOCA0NDMuMzc2IDE0Ni42NTIgNDQyLjcwMSAxNDYuMzk2IDQ0MS42NzJDMTQ2LjIwNCA0NDAuODM2IDE0Ni4wODkgNDQwLjE0OCAxNDYuMDQ0IDQzOS42MTRDMTQ2LjAyNSA0MzkuMjkzIDE0Ni4wMzEgNDM4LjMxNSAxNDYuMDc2IDQzNi42ODlDMTQ2LjA3NiA0MzUuOTM2IDE0NS45OTkgNDM1LjM5IDE0NS44NTIgNDM1LjA0OUMxNDUuNjYgNDM0LjYxOCAxNDUuMzIxIDQzNC4yIDE0NC44MjggNDMzLjc5NUMxNDQuMzk5IDQzMy40NTQgMTQ0LjA2IDQzMy4yMzYgMTQzLjgwNCA0MzMuMTUyQzE0Mi45OTEgNDMyLjgzIDE0Mi4xOTEgNDMyLjk5MSAxNDEuNDA0IDQzMy42MzRaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTQzLjAzNiA0MzUuMTEzQzE0My4xODMgNDM1LjA2OCAxNDMuMjkyIDQzNS4xIDE0My4zNTYgNDM1LjIxQzE0My40MzkgNDM1LjI5MyAxNDMuNDY1IDQzNS40MDMgMTQzLjQyIDQzNS41MzFWNDM2LjIwNkMxNDMuMzc1IDQzNi40NjQgMTQzLjM4OCA0MzYuNjc2IDE0My40NTIgNDM2Ljg0OUwxNDMuNjQ0IDQzNy4zMzJDMTQzLjcyNyA0MzcuNTQ0IDE0My43NzIgNDM3Ljg1OSAxNDMuNzcyIDQzOC4yNjRDMTQzLjc3MiA0MzguODYyIDE0My43MjcgNDM5LjMxMiAxNDMuNjQ0IDQzOS42MTRDMTQzLjUxNiA0MzkuOTE3IDE0My4zNjkgNDQwLjEyOSAxNDMuMTk2IDQ0MC4yNTdDMTQyLjk4NCA0NDAuMzg2IDE0Mi43NDggNDQwLjQxOCAxNDIuNDkyIDQ0MC4zNTRDMTQyLjI1NSA0NDAuMjkgMTQyLjA1NiA0NDAuMTYxIDE0MS44ODMgNDM5Ljk2OEMxNDEuNTgzIDQzOS42NDcgMTQxLjQ1NSA0MzkuMTk2IDE0MS40OTkgNDM4LjYxOEMxNDEuNTE5IDQzOC4zMTUgMTQxLjY0IDQzNy44NDYgMTQxLjg1MSA0MzcuMjAzTDE0Mi4xMDggNDM2LjUyOEMxNDIuMjggNDM1Ljk2OCAxNDIuNDc5IDQzNS41NzYgMTQyLjcxNiA0MzUuMzM4QzE0Mi43OTkgNDM1LjIyOSAxNDIuOTA4IDQzNS4xNTggMTQzLjAzNiA0MzUuMTEzWlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMzEuMjkgNDM0LjgyNEMxMzEuMjA3IDQzNS4wODEgMTMxLjE4MSA0MzUuMzgzIDEzMS4yMjYgNDM1LjcyNEMxMzEuNjEgNDQwLjAxMyAxMzIuMDc3IDQ0My4xNyAxMzIuNjM0IDQ0NS4yMDlDMTMyLjkwOSA0NDYuMjgzIDEzMy4zNTcgNDQ2LjgwMyAxMzMuOTc4IDQ0Ni43ODRDMTM0LjI3OSA0NDYuNzg0IDEzNC41MjIgNDQ2LjY1NiAxMzQuNzE0IDQ0Ni4zOThDMTM0LjkwNiA0NDYuMTYgMTM1LjAxNSA0NDUuODg0IDEzNS4wMzQgNDQ1LjU2MkMxMzUuMDU0IDQ0NS4yODYgMTM0Ljk1MSA0NDQuNzA3IDEzNC43MTQgNDQzLjgyNkMxMzQuNDM5IDQ0Mi43OTcgMTM0LjM1IDQ0MS43MzYgMTM0LjQ1OCA0NDAuNjQzQzEzNC41ODYgNDM5LjUzMSAxMzQuOTA2IDQzOC41MDggMTM1LjQxOSA0MzcuNTg5QzEzNi4wNzggNDM4LjUzNCAxMzYuNDc1IDQzOS41MzcgMTM2LjYwMyA0NDAuNjExQzEzNi42NjcgNDQxLjA2MSAxMzYuNzE4IDQ0MS43NjkgMTM2Ljc2MyA0NDIuNzMzQzEzNi44NzIgNDQzLjUyNCAxMzcuMTI4IDQ0NC4xMjggMTM3LjUzMSA0NDQuNTM0QzEzNy45MzQgNDQ0LjkzOSAxMzguMzE4IDQ0NS4wNDggMTM4LjY4MyA0NDQuODU1QzEzOS4wMjIgNDQ0LjY0MyAxMzkuMTUgNDQ0LjE4IDEzOS4wNjcgNDQzLjQ3M0MxMzguODc1IDQ0MS44MDEgMTM4LjU3NCA0NDAuMjM4IDEzOC4xNzEgNDM4Ljc3OEMxMzcuODcgNDM3Ljc1IDEzNy41NDQgNDM3LjAyMyAxMzcuMTc5IDQzNi41OTJDMTM2LjkyMyA0MzYuMjUxIDEzNi42MDMgNDM2LjAwMSAxMzYuMjE5IDQzNS44NTNDMTM1LjgxNSA0MzUuNjc5IDEzNS40MzEgNDM1LjY0IDEzNS4wNjcgNDM1LjcyNEMxMzQuMjc5IDQzNS44OTggMTMzLjYwNyA0MzYuNzUzIDEzMy4wNSA0MzguMjk2QzEzMi45MjIgNDM3LjI0OCAxMzIuNzYyIDQzNi4yMzggMTMyLjU3IDQzNS4yNzRDMTMyLjQ4NyA0MzQuNzYgMTMyLjI5NSA0MzQuNDU3IDEzMS45OTQgNDM0LjM3NEMxMzEuNjkzIDQzNC4zMDkgMTMxLjQ2MyA0MzQuNDU3IDEzMS4yOSA0MzQuODI0WlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEyOS42OSA0MzguMTAzQzEyOS41ODEgNDM3LjQ2IDEyOS4zNTcgNDM2LjkzMyAxMjkuMDE3IDQzNi41MjhDMTI4LjY3OCA0MzYuMTIzIDEyOC4yMDQgNDM1LjgwOCAxMjcuNjA5IDQzNS41OTVDMTI2LjY0OSA0MzUuMjEgMTI1Ljc5OCA0MzUuMTc3IDEyNS4wNDkgNDM1LjQ5OUMxMjQuNTM3IDQzNS43MTEgMTI0LjA2OSA0MzYuMTU1IDEyMy42NDEgNDM2LjgxN0MxMjIuNTk3IDQzOC4zNDEgMTIyLjExNyA0NDAuMzM1IDEyMi4yIDQ0Mi43OTdDMTIyLjI0NSA0NDQuOTE5IDEyMi44MjEgNDQ2LjM5OCAxMjMuOTI5IDQ0Ny4yMzRDMTI0LjQ4NiA0NDcuNjM5IDEyNS4xMzIgNDQ3Ljg0NSAxMjUuODgxIDQ0Ny44NDVDMTI2LjYzIDQ0Ny44NDUgMTI3LjI0NCA0NDcuNjM5IDEyNy44MDEgNDQ3LjIzNEMxMjguNzQyIDQ0Ni41MjcgMTI5LjMyNSA0NDUuMzE4IDEyOS41NjIgNDQzLjYwMUMxMjkuNjcgNDQyLjkzOSAxMjkuNzQxIDQ0MS42ODUgMTI5Ljc4NiA0MzkuODM5QzEyOS43ODYgNDM5LjA0OCAxMjkuNzU0IDQzOC40NyAxMjkuNjkgNDM4LjEwM1pcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMjUuNDMzIDQzNy44NzhDMTI1LjcwOCA0MzcuNTEyIDEyNS45NzcgNDM3LjMzMiAxMjYuMjMzIDQzNy4zMzJDMTI2LjA2IDQzNy42MzQgMTI2LjEyNCA0MzcuOTk0IDEyNi40MjUgNDM4LjQyNUMxMjYuNTk4IDQzOC42MzcgMTI2Ljg3MyA0MzguOTI2IDEyNy4yNTcgNDM5LjI5M0MxMjcuNjIyIDQzOS43ODggMTI3Ljc4MiA0NDAuNTY2IDEyNy43MzcgNDQxLjY0QzEyNy42NzMgNDQyLjU0IDEyNy41IDQ0My41MDUgMTI3LjIyNSA0NDQuNTM0QzEyNy4wMzMgNDQ1LjA2NyAxMjYuODQxIDQ0NS40MDIgMTI2LjY0OSA0NDUuNTNDMTI2LjQzOCA0NDUuNzA0IDEyNi4xNjkgNDQ1Ljc3NSAxMjUuODQ5IDQ0NS43NTVDMTI1LjU0OCA0NDUuNzEgMTI1LjI5MiA0NDUuNTk1IDEyNS4wODEgNDQ1LjQwMkMxMjQuNjUyIDQ0NS4wMTYgMTI0LjM5NiA0NDQuMzQxIDEyNC4zMTMgNDQzLjM3NkMxMjQuMTIxIDQ0MS4wMTYgMTI0LjQ5MiA0MzkuMTg0IDEyNS40MzMgNDM3Ljg3OFpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTEzLjg3OSA0MzIuNTA5QzExMy43NyA0MzIuOTc4IDExMy43IDQzMy41MDYgMTEzLjY1NSA0MzQuMDg0QzExMy42MzYgNDM0LjYxOCAxMTMuNjEgNDM0Ljk0IDExMy41OTEgNDM1LjA0OUMxMTMuNTI3IDQzNS4zOSAxMTMuNDEyIDQzNS42NzMgMTEzLjIzOSA0MzUuODg1QzExMy4wOTIgNDM1LjY5MiAxMTIuOTUxIDQzNS4zMjUgMTEyLjgyMyA0MzQuNzkyQzExMi42OTUgNDM0LjI5NyAxMTIuNTQ4IDQzMy45NTYgMTEyLjM3NSA0MzMuNzYzQzExMi4xMzggNDMzLjUwNiAxMTEuODMxIDQzMy4zNjQgMTExLjQ0NyA0MzMuMzQ1QzExMS4wODIgNDMzLjMyNiAxMTAuNzYyIDQzMy40MjkgMTEwLjQ4NyA0MzMuNjY2QzExMC4yNSA0MzMuODU5IDExMC4wMzkgNDM0LjIgMTA5Ljg0NiA0MzQuNjk1QzEwOS4xMjMgNDM2LjM2NyAxMDguNzA3IDQzOC4xNDggMTA4LjU5OCA0NDAuMDMyQzEwOC41NTMgNDQwLjU2NiAxMDguNTUzIDQ0MS4zODMgMTA4LjU5OCA0NDIuNDc2QzEwOC41OTggNDQzLjA1NSAxMDguNjMgNDQzLjQ4NSAxMDguNjk0IDQ0My43NjJMMTA4LjkxOCA0NDQuNTY2QzEwOC45MzggNDQ0Ljc1OSAxMDguOTM4IDQ0NS4wOTMgMTA4LjkxOCA0NDUuNTYyQzEwOC44OTkgNDQ1Ljk2OCAxMDguOTE4IDQ0Ni4yODkgMTA4Ljk4MiA0NDYuNTI3QzEwOS4wNDYgNDQ2LjcyIDEwOS4xNTUgNDQ3LjAwOSAxMDkuMzAyIDQ0Ny4zOTVDMTA5LjM2NiA0NDcuNjUyIDEwOS4zNzkgNDQ4LjA1MSAxMDkuMzM0IDQ0OC41ODVDMTA5LjI5IDQ0OS4wNTQgMTA5LjM1NCA0NDkuNDQgMTA5LjUyNiA0NDkuNzQyQzEwOS42MzUgNDQ5LjkzNSAxMDkuNzcgNDUwLjA3NiAxMDkuOTQzIDQ1MC4xNkMxMTAuMTM1IDQ1MC4yNDQgMTEwLjMyNyA0NTAuMjQ0IDExMC41MTkgNDUwLjE2QzExMC43OTQgNDQ5LjgxOSAxMTAuOTU0IDQ0OS4zNDMgMTEwLjk5OSA0NDguNzQ1QzExMS4wNjMgNDQ4LjEwMiAxMTEuMDExIDQ0Ny4xMzggMTEwLjgzOSA0NDUuODUyTDExMC42MTUgNDQzLjg1OEMxMTAuNDg3IDQ0Mi43NjUgMTEwLjQxIDQ0MS45ODEgMTEwLjM5MSA0NDEuNTExQzExMC4zNDYgNDM5LjgzOSAxMTAuNjM0IDQzOC4yNDUgMTExLjI1NSA0MzYuNzIxQzExMS41NTYgNDM3LjQ3MyAxMTEuODc2IDQzOC42MTggMTEyLjIxNSA0NDAuMTYxTDExMy45NDMgNDQ4LjE5OUMxMTQuMDkgNDQ5LjExOCAxMTQuMjYzIDQ0OS43NDIgMTE0LjQ1NSA0NTAuMDY0QzExNC42NjYgNDUwLjM0IDExNC45MzUgNDUwLjUzMyAxMTUuMjU1IDQ1MC42NDJDMTE1LjU5NSA0NTAuNzcxIDExNS44ODMgNDUwLjczOSAxMTYuMTE5IDQ1MC41NDZDMTE2LjUwNCA0NTAuMzA4IDExNi42NTEgNDQ5Ljg4NCAxMTYuNTY4IDQ0OS4yNkMxMTYuNTQ4IDQ0OS4wNjcgMTE2LjQ4NCA0NDguODQyIDExNi4zNzUgNDQ4LjU4NUwxMTYuMTUxIDQ0Ny45MDlDMTE2LjA0MyA0NDcuNTQzIDExNS45NDcgNDQ3LjAyMiAxMTUuODYzIDQ0Ni4zMzRMMTE1LjM1MSA0NDAuNjQzQzExNS4yMjMgNDM5LjAzNiAxMTUuMjY4IDQzNy40OCAxMTUuNDc5IDQzNS45ODFDMTE1LjY3MSA0MzQuNjEyIDExNS43NjcgNDMzLjg5MiAxMTUuNzY3IDQzMy44MjdDMTE2LjE3MSA0MzQuMTY4IDExNi40NTkgNDM0LjgyNCAxMTYuNjMyIDQzNS43ODhDMTE2Ljk1MiA0MzcuMzMyIDExNy4xOTUgNDM4LjcyNyAxMTcuMzY4IDQzOS45NjhMMTE3LjcyIDQ0Mi41NzJDMTE3Ljg0OCA0NDQuMTk5IDExNy45NzYgNDQ1LjQwMiAxMTguMTA0IDQ0Ni4xNzNMMTE4LjM2IDQ0Ny40MjdDMTE4LjQ0MyA0NDcuODU4IDExOC41NTIgNDQ4LjE1NCAxMTguNjggNDQ4LjMyN0MxMTguODkxIDQ0OC41NjUgMTE5LjEwOSA0NDguNzEzIDExOS4zMiA0NDguNzc4QzExOS42MjEgNDQ4Ljg2MSAxMTkuOTA5IDQ0OC44MjkgMTIwLjE4NCA0NDguNjgxQzEyMC40ODUgNDQ4LjUwNyAxMjAuNjUxIDQ0OC4yNzYgMTIwLjY5NiA0NDcuOTc0QzEyMC43MTUgNDQ3Ljc2MiAxMjAuNjc3IDQ0Ny40NzkgMTIwLjU2OCA0NDcuMTM4QzEyMC4zMTIgNDQ2LjE1NCAxMjAuMTAxIDQ0NC44MjMgMTE5LjkyOCA0NDMuMTUxQzExOS45MDkgNDQyLjU1MyAxMTkuODQ1IDQ0MS45MTYgMTE5LjczNiA0NDEuMjU0QzExOS43MzYgNDQxLjE5IDExOS42NCA0NDAuNTM0IDExOS40NDggNDM5LjI5M0MxMTkuMTQ3IDQzNy42MDIgMTE4LjkwNCA0MzYuMzU0IDExOC43MTIgNDM1LjU2M0MxMTguMzkyIDQzNC4xOTQgMTE4LjAwOCA0MzIuOTkxIDExNy41NiA0MzEuOTYyQzExNy4xNzYgNDMxLjA2MiAxMTYuNzE1IDQzMC41NDggMTE2LjE4MyA0MzAuNDE5QzExNS41ODggNDMwLjI0NiAxMTUuMDYzIDQzMC40MzIgMTE0LjYxNSA0MzAuOTY2QzExNC4yNzYgNDMxLjM1MiAxMTQuMDI2IDQzMS44NjYgMTEzLjg3OSA0MzIuNTA5WlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSkpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJnXCIsIHtcbiAgY2xpcFBhdGg6IFwidXJsKCNjbGlwNV8xMjg4XzI1MDEyKVwiLFxuICB0cmFuc2Zvcm06IFwibWF0cml4KDAuNjk3ODU4MDk1MTY5MDY3NSwgMCwgMCwgMC42OTc4NTgwOTUxNjkwNjc1LCAtOTguMTc2NzEyMDM2MTMyODEsIC0yMS42NDkzODM1NDQ5MjE4NDcpXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE2MC4yNTggMjQ0Ljk4OEwxNjMuMjUgMjQyLjUzNEMxNjMuODg1IDI0Mi4wNDQgMTY0LjE2MyAyNDEuNTg0IDE2NC4wODMgMjQxLjE1NUMxNjQuMDIxIDI0MC44OTEgMTYzLjg0OCAyNDAuNjgyIDE2My41NTggMjQwLjU0MUMxNjMuMjY4IDI0MC40MTkgMTYyLjk4NSAyNDAuMzg4IDE2Mi42OTUgMjQwLjQ0OUMxNjIuMjYzIDI0MC41NzIgMTYxLjc4OCAyNDAuODkxIDE2MS4yNzYgMjQxLjRDMTYwLjQ1NiAyNDIuMTU0IDE1OS42MjkgMjQyLjgxIDE1OC44MDkgMjQzLjM2MkMxNTguNzI5IDI0My40NDIgMTU4LjY0MiAyNDMuNDg1IDE1OC41NjIgMjQzLjQ4NUMxNTguNDM5IDI0My40NjcgMTU4LjM0NiAyNDMuMzgxIDE1OC4yODQgMjQzLjI0QzE1Ny45MTQgMjQyLjYyNiAxNTcuNDIxIDI0MS42NjQgMTU2LjgwNCAyNDAuMzU3TDE1Ni4wOTUgMjM4Ljc5M0MxNTUuODQ4IDIzOC4yNDEgMTU1LjY5NCAyMzcuODg2IDE1NS42MzIgMjM3LjcyTDE1NS4xNyAyMzYuNDMyQzE1NS4wODkgMjM2LjI0OCAxNTQuOTQxIDIzNS45OTEgMTU0LjczOCAyMzUuNjY2QzE1NC41MSAyMzUuMzQxIDE1NC4zNTUgMjM1LjA4MyAxNTQuMjc1IDIzNC44OTlDMTU0LjA5IDIzNC4zOSAxNTMuOTQ4IDIzMy45OTcgMTUzLjg0MyAyMzMuNzM0QzE1My42MTUgMjMzLjI2MiAxNTMuMzM4IDIzMi45NjcgMTUzLjAxMSAyMzIuODQ0QzE1Mi44MjYgMjMyLjc2NSAxNTIuNjIyIDIzMi43NjUgMTUyLjM5NCAyMzIuODQ0QzE1Mi4xOSAyMzIuOTA2IDE1Mi4wNDIgMjMzLjAyOCAxNTEuOTYyIDIzMy4yMTJDMTUxLjg4MiAyMzMuNDM5IDE1MS45MTkgMjMzLjc1MiAxNTIuMDg1IDIzNC4xNjNMMTU2LjEyNiAyNDMuNDg1QzE1Ni41MzkgMjQ0LjI2NCAxNTYuODk3IDI0NC44MDQgMTU3LjIwNSAyNDUuMTFDMTU3Ljc3OSAyNDUuNjQ0IDE1OC4zNzcgMjQ1Ljg0NiAxNTguOTk0IDI0NS43MjRDMTU5LjI1OSAyNDUuNjgxIDE1OS42ODUgMjQ1LjQzNSAxNjAuMjU4IDI0NC45ODhaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTQ1LjgyNSAyMzcuNjI4QzE0NS4yMjYgMjM4LjA1OCAxNDQuNzc2IDIzOC42MDkgMTQ0LjQ2OCAyMzkuMjg0QzE0My45MzEgMjQwLjQ0OSAxNDMuODMyIDI0MS44NDIgMTQ0LjE1OSAyNDMuNDU0QzE0NC41NDggMjQ1LjY0NCAxNDUuNDczIDI0Ny41MTQgMTQ2LjkzNSAyNDkuMDY2QzE0Ny45MDMgMjUwLjA2NiAxNDguODY2IDI1MC42NzMgMTQ5LjgzNCAyNTAuODc1QzE1MC40MDggMjUxLjAxNiAxNTAuOTg4IDI1MS4wMTYgMTUxLjU2MSAyNTAuODc1QzE1Mi4xNTkgMjUwLjcxIDE1Mi42MjggMjUwLjQxNSAxNTIuOTggMjQ5Ljk4NkMxNTMuMzAxIDI0OS42MTIgMTUzLjUyOSAyNDkuMDkxIDE1My42NTggMjQ4LjQyMkMxNTQuNjU4IDI0OC45MzEgMTU1LjczNyAyNDkuNDM0IDE1Ni44OTcgMjQ5LjkyNUMxNTcuNTU3IDI1MC4xODggMTU4LjAyNSAyNTAuMjAxIDE1OC4zMTUgMjQ5Ljk1NUMxNTguNDU3IDI0OS44MTQgMTU4LjUzMSAyNDkuNjE4IDE1OC41MzEgMjQ5LjM3M0MxNTguNTMxIDI0OS4xMjcgMTU4LjQ1NyAyNDguOTI1IDE1OC4zMTUgMjQ4Ljc1OUMxNTguMTMgMjQ4LjQ5NiAxNTcuNzYgMjQ4LjI1IDE1Ny4yMDUgMjQ4LjAyM0MxNTYuMDY0IDI0Ny41MDggMTU0Ljk0MSAyNDYuOTYyIDE1My44NDMgMjQ2LjM5OEMxNTMuODYyIDI0NS42NzUgMTUzLjg0MyAyNDQuOTgyIDE1My43ODIgMjQ0LjMxM0MxNTMuNjc3IDI0My4wODYgMTUzLjQyNCAyNDIuMDQ0IDE1My4wMTEgMjQxLjE4NUMxNTIuNjQxIDI0MC40NDkgMTUyLjAxMSAyMzkuNjQgMTUxLjEyOSAyMzguNzYzQzE0OS45MTQgMjM3LjU5OCAxNDguODA0IDIzNy4wMDMgMTQ3Ljc5OSAyMzYuOTg0QzE0Ny4xMiAyMzYuOTY2IDE0Ni40NiAyMzcuMTggMTQ1LjgyNSAyMzcuNjI4WlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTE0Ni4wNCAyNDEuODZDMTQ2LjA4NCAyNDEuMDIgMTQ2LjMgMjQwLjI4NCAxNDYuNjg4IDIzOS42NTJDMTQ2Ljk1MyAyMzkuMjY2IDE0Ny4yMjUgMjM5LjA1NyAxNDcuNDkgMjM5LjAzOUMxNDcuNjU3IDIzOS4wMzkgMTQ3Ljg3OSAyMzkuMTE5IDE0OC4xNjkgMjM5LjI4NEMxNDkuMjk3IDIzOS45NCAxNTAuMDkzIDI0MC42MDMgMTUwLjU0MyAyNDEuMjc3QzE1MS4wNTUgMjQxLjk5NSAxNTEuMzk0IDI0Mi44OSAxNTEuNTYxIDI0My45NzZDMTUxLjYxNyAyNDQuMzE5IDE1MS42NTQgMjQ0Ljc0OSAxNTEuNjg0IDI0NS4yNjRDMTUxLjIyOCAyNDUuMDEyIDE1MC43NzIgMjQ0Ljc1NSAxNTAuMzI3IDI0NC40OTdDMTQ5LjkxNCAyNDQuMjUyIDE0OS41NzUgMjQ0LjEyOSAxNDkuMzEgMjQ0LjEyOUMxNDkuMTI1IDI0NC4xMTEgMTQ4Ljk1OCAyNDQuMTYgMTQ4LjgxNiAyNDQuMjgyQzE0OC42NSAyNDQuMzg3IDE0OC41NTcgMjQ0LjUyOCAxNDguNTM5IDI0NC43MTJDMTQ4LjUyIDI0NC45NzUgMTQ4LjY5MyAyNDUuMjUxIDE0OS4wNjMgMjQ1LjU0QzE0OS44MjggMjQ2LjE0NyAxNTAuNzA0IDI0Ni43NDIgMTUxLjY4NCAyNDcuMzE4QzE1MS42MDQgMjQ4LjEyMiAxNTEuMzU3IDI0OC42MjUgMTUwLjk0NCAyNDguODIxQzE1MC4zODkgMjQ5LjEwOSAxNDkuNzIzIDI0OC44MzkgMTQ4Ljk0IDI0OC4wMjRDMTQ3LjY2MyAyNDYuNzE3IDE0Ni44MTIgMjQ1LjQyOSAxNDYuMzggMjQ0LjE2QzE0Ni4xMTUgMjQzLjQwNSAxNDUuOTk3IDI0Mi42MzkgMTQ2LjA0IDI0MS44NlpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTMyLjg0MSAyNDcuMzc5QzEzMy4wMDcgMjQ3LjcyOSAxMzMuMzIyIDI0OC4xMzQgMTMzLjc5NyAyNDguNjA2QzEzNC40MTMgMjQ5LjE3NiAxMzQuOTI1IDI0OS41MDggMTM1LjMzOSAyNDkuNTg3QzEzNS42MjkgMjQ5LjY0OSAxMzUuOTA2IDI0OS42NzkgMTM2LjE3MSAyNDkuNjc5TDEzOC45NDcgMjQ5LjcxTDEzOS41OTUgMjQ5LjU4N0MxMzkuODYgMjQ5LjUyNiAxNDAuMDc2IDI0OS41MDggMTQwLjI0MiAyNDkuNTI2QzE0MC42NTYgMjQ5LjYwNiAxNDEuMDAxIDI0OS44NjMgMTQxLjI5MSAyNTAuMjkzQzE0MS40NzYgMjUwLjU4MSAxNDEuNjkyIDI1MS4wNDcgMTQxLjkzOSAyNTEuNzAzQzE0Mi4yMDQgMjUyLjQ4MiAxNDIuMjU5IDI1My4wNCAxNDIuMDkzIDI1My4zOUMxNDEuOTcgMjUzLjYzNSAxNDEuNjQ5IDI1My45MTEgMTQxLjEzNyAyNTQuMjE4QzE0MC4xNjggMjU0LjcwOCAxMzkuNDIyIDI1NC43ODIgMTM4Ljg4NSAyNTQuNDMyQzEzOC41OTYgMjU0LjE2OSAxMzguMzYxIDI1My45OTEgMTM4LjE3NiAyNTMuOTExQzEzNy45NDggMjUzLjgwNyAxMzcuNzAxIDI1My44MTkgMTM3LjQzNiAyNTMuOTQyQzEzNy4xNzEgMjU0LjA0NiAxMzYuOTg2IDI1NC4yMTggMTM2Ljg4MSAyNTQuNDYzQzEzNi42NTMgMjU0Ljk1NCAxMzYuNzM5IDI1NS40NDQgMTM3LjEyNyAyNTUuOTM1QzEzNy40NTQgMjU2LjM0NiAxMzcuOTQyIDI1Ni42MjIgMTM4LjU3NyAyNTYuNzYzQzEzOC44NjcgMjU2LjgyNCAxMzkuNDQxIDI1Ni44NTUgMTQwLjMwNCAyNTYuODU1TDE0MS4yMjkgMjU2Ljc2M0MxNDEuNDc2IDI1Ni43MDEgMTQxLjc1NCAyNTYuNTkxIDE0Mi4wNjIgMjU2LjQyNkMxNDIuNzIyIDI1Ni4wNzYgMTQzLjI1MyAyNTUuNjE2IDE0My42NjYgMjU1LjA0NkMxNDQuMTQxIDI1NC40MzIgMTQ0LjM5NCAyNTMuNzg4IDE0NC40MzcgMjUzLjExNEMxNDQuNDggMjUyLjUxOSAxNDQuMzMyIDI1MS43OTUgMTQ0LjAwNSAyNTAuOTM3QzE0My42OTcgMjUwLjE1OCAxNDMuMjgzIDI0OS40MjIgMTQyLjc3MSAyNDguNzI5QzE0Mi4zMjEgMjQ4LjEzNCAxNDEuODQ2IDI0Ny43NDcgMTQxLjM1MyAyNDcuNTYzQzE0MS4wNDQgMjQ3LjQ0MSAxNDAuNTUxIDI0Ny4zOTggMTM5Ljg3MiAyNDcuNDQxTDEzNi42NjUgMjQ3LjYyNUMxMzYuNCAyNDcuNjY4IDEzNi4xNzEgMjQ3LjY0MyAxMzUuOTg2IDI0Ny41NjNDMTM1Ljg0NSAyNDcuNTIxIDEzNS42NjYgMjQ3LjM5OCAxMzUuNDYyIDI0Ny4xOTVDMTM1LjEzNSAyNDYuODcgMTM0LjkzOCAyNDYuNjU2IDEzNC44NzYgMjQ2LjU1MkMxMzQuNDI2IDI0NS45MzggMTM0LjM1MiAyNDUuMjgyIDEzNC42NiAyNDQuNTg5QzEzNC45NSAyNDMuODUzIDEzNS40NSAyNDMuNDI0IDEzNi4xNzEgMjQzLjMwMUMxMzYuNTg1IDI0My4xOTcgMTM2Ljk0MiAyNDMuMjQgMTM3LjI1MSAyNDMuNDI0QzEzNy40MTcgMjQzLjUyOCAxMzcuNjIxIDI0My43MTggMTM3Ljg2OCAyNDQuMDA2QzEzOC4xMzMgMjQ0LjIzMyAxMzguMzkyIDI0NC4zMzEgMTM4LjYzOSAyNDQuMzEzQzEzOC45OSAyNDQuMjUyIDEzOS4xODIgMjQ0LjAxOSAxMzkuMjI1IDI0My42MDhDMTM5LjIyNSAyNDMuMzQ0IDEzOS4xMzIgMjQzLjAyNSAxMzguOTQ3IDI0Mi42NTdDMTM4LjY1NyAyNDIuMDYyIDEzOC4yOTkgMjQxLjY3NiAxMzcuODY4IDI0MS40OTJDMTM3LjYyMSAyNDEuMzg4IDEzNy4xNCAyNDEuMzM5IDEzNi40MTggMjQxLjMzOUMxMzUuNzgzIDI0MS4yOTYgMTM1LjMwOCAyNDEuMzIgMTM0Ljk5OSAyNDEuNEMxMzQuNjQ4IDI0MS40OCAxMzQuMjkgMjQxLjY4OCAxMzMuOTIgMjQyLjAxM0MxMzMuMjYgMjQyLjYwOCAxMzIuODUzIDI0My4yMDkgMTMyLjY4NiAyNDMuODIyQzEzMi42MjUgMjQ0LjAwNiAxMzIuNTc1IDI0NC40MjMgMTMyLjUzMiAyNDUuMDhDMTMyLjQ4OSAyNDYuMTA0IDEzMi41OTQgMjQ2Ljg3IDEzMi44NDEgMjQ3LjM3OVpcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMzIuOTY0IDI1My4xNDRDMTMyLjczNiAyNTMuNDA4IDEzMi43MDUgMjUzLjg2MiAxMzIuODcxIDI1NC40OTRMMTMzLjk1MSAyNjAuMDQ0QzEzMi45MzkgMjU5LjM0NSAxMzEuNzk4IDI1OC4xOTIgMTMwLjUyNyAyNTYuNTc5QzEzMC4yMzggMjU2LjIxMSAxMjkuOTkxIDI1NS45NzggMTI5Ljc4NyAyNTUuODc0QzEyOS42MDIgMjU1Ljc5NCAxMjkuNDMgMjU1Ljc2OSAxMjkuMjYzIDI1NS44MTJDMTI5LjA1OSAyNTUuODU1IDEyOC45MTEgMjU1Ljk0NyAxMjguODMxIDI1Ni4wODhDMTI4LjcwOCAyNTYuMjkxIDEyOC43NTcgMjU2LjYyMiAxMjguOTg1IDI1Ny4wN0MxMzAuMjM4IDI1OS4zMzkgMTMyLjAwOCAyNjEuMTQ4IDEzNC4yOSAyNjIuNDk3QzEzNC4zMzkgMjYyLjUyOCAxMzQuMzk1IDI2Mi41NDYgMTM0LjQ0NCAyNjIuNTU5TDEzNS41MjQgMjY4LjE3QzEzNS42OSAyNjkuMTMzIDEzNS45MzcgMjY5LjgwOCAxMzYuMjY0IDI3MC4xOTRDMTM2LjQ5MiAyNzAuNDU4IDEzNi43NTcgMjcwLjYyMyAxMzcuMDY2IDI3MC42ODVDMTM3LjQxNyAyNzAuNzQ2IDEzNy43MDEgMjcwLjY2NiAxMzcuOTI5IDI3MC40MzlDMTM4LjE1OCAyNzAuMTc2IDEzOC4yMTkgMjY5Ljg0NCAxMzguMTE0IDI2OS40NThDMTM4LjA5NiAyNjkuMzM1IDEzNy45NzkgMjY5LjAxNiAxMzcuNzc1IDI2OC41MDdDMTM3LjYwOSAyNjguMTM5IDEzNy40NDggMjY3LjQ2NSAxMzcuMjgyIDI2Ni40ODRMMTM2LjAxNyAyNTkuNjQ1QzEzNS43MDkgMjU4LjI1MyAxMzUuNTExIDI1Ny40MDcgMTM1LjQzMSAyNTcuMUMxMzUuMDE4IDI1NS45NzggMTM0Ljc1MyAyNTUuMTE5IDEzNC42MjkgMjU0LjUyNEMxMzQuNTQ5IDI1NC4wMzQgMTM0LjQ1NyAyNTMuNjk2IDEzNC4zNTIgMjUzLjUxMkMxMzQuMTY3IDI1My4xMDIgMTMzLjg4OSAyNTIuODk5IDEzMy41MTkgMjUyLjg5OUMxMzMuMjcyIDI1Mi44OTkgMTMzLjA4NyAyNTIuOTc5IDEzMi45NjQgMjUzLjE0NFpcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMjUuNzQ3IDI1Ni4zNjRDMTI0LjUzMiAyNTQuODkyIDEyMy42ODEgMjUzLjgwMSAxMjMuMTg3IDI1My4wODNDMTIyLjgxNyAyNTIuNDg4IDEyMi40NzggMjUyLjExNCAxMjIuMTcgMjUxLjk0OEMxMjEuOTIzIDI1MS44MDcgMTIxLjY2NCAyNTEuNzQ2IDEyMS4zOTkgMjUxLjc2NEMxMjEuMTA5IDI1MS43ODMgMTIwLjg5MyAyNTEuODg3IDEyMC43NTEgMjUyLjA3MUMxMjAuNjI4IDI1Mi4yMTIgMTIwLjU0NyAyNTIuNDcgMTIwLjUwNCAyNTIuODM4QzEyMC40ODYgMjUzLjMyOCAxMjAuNTQ3IDI1My45NiAxMjAuNjg5IDI1NC43MzlMMTIxLjA1OSAyNTYuNzAxQzEyMS4zNjggMjU4LjIzNSAxMjEuODEyIDI2MC4wNzUgMTIyLjM4NSAyNjIuMjIxQzEyMC45MDUgMjYwLjYyNiAxMTkuOSAyNTkuMzU3IDExOS4zNjMgMjU4LjQxOUMxMTguOTc0IDI1Ny43ODcgMTE4LjY4NSAyNTcuMzk0IDExOC40OTkgMjU3LjI1M0MxMTguMjk2IDI1Ny4xMTIgMTE4LjA2OCAyNTcuMDI2IDExNy44MjEgMjU3LjAwOEMxMTcuNTU2IDI1Ny4wMDggMTE3LjM0IDI1Ny4wODggMTE3LjE3MyAyNTcuMjUzQzExNi45ODggMjU3LjQ2MiAxMTYuODk2IDI1Ny44MDUgMTE2Ljg5NiAyNTguMjk2QzExNi44OTYgMjU5LjgxMSAxMTYuOTU3IDI2MC45NDUgMTE3LjA4MSAyNjEuN0MxMTcuMTg2IDI2Mi4zMzEgMTE3LjM1OCAyNjMuMDkyIDExNy42MDUgMjYzLjk2OUMxMTguMDM3IDI2NS41NDUgMTE4LjYwNCAyNjcuMjUgMTE5LjMwMSAyNjkuMDlMMTE5LjYxIDI2OS43MDNDMTE5Ljg1NiAyNjkuOTkxIDEyMC4xMzQgMjcwLjE0NSAxMjAuNDQyIDI3MC4xNjNDMTIwLjgxMyAyNzAuMjA2IDEyMS4wOSAyNzAuMDU5IDEyMS4yNzUgMjY5LjczNEMxMjEuNDE3IDI2OS40NyAxMjEuMzU1IDI2OS4wMjkgMTIxLjA5IDI2OC40MTVDMTIwLjU1NCAyNjcuMTI3IDExOS45NjEgMjY1LjM5OCAxMTkuMzAxIDI2My4yMzNDMTE5LjA1NSAyNjIuNDM2IDExOC45ODEgMjYxLjgyMiAxMTkuMDg1IDI2MS4zOTNDMTIwLjc5NCAyNjMuNDk3IDEyMi4xODggMjY1LjEzNCAxMjMuMjggMjY2LjI5OUMxMjMuNTg4IDI2Ni42MDYgMTIzLjg2NiAyNjYuODIxIDEyNC4xMTMgMjY2Ljk0M0MxMjQuNTAxIDI2Ny4xNDYgMTI0Ljg0IDI2Ny4xNDYgMTI1LjEzIDI2Ni45NDNDMTI1LjUgMjY2Ljc0MSAxMjUuNjQyIDI2Ni4zNzMgMTI1LjU2MiAyNjUuODM5QzEyNS41NDQgMjY1LjY5OCAxMjUuMzk2IDI2NS4zMDYgMTI1LjEzIDI2NC42NzRDMTI0Ljg4NCAyNjQuMTA0IDEyNC41ODggMjYzLjA5MiAxMjQuMjM2IDI2MS42MzhMMTIzLjA5NSAyNTYuMjcyTDEyOC4yMTQgMjYzLjExQzEyOC42ODkgMjYzLjc0MiAxMjkuMTQgMjY0LjA0OSAxMjkuNTcxIDI2NC4wM0MxMjkuODk4IDI2NC4wMTIgMTMwLjE0NSAyNjMuODQ2IDEzMC4zMTIgMjYzLjU0QzEzMC40OTcgMjYzLjIxNSAxMzAuNTI4IDI2Mi44OTYgMTMwLjQwNCAyNjIuNTg5QzEzMC4zNDIgMjYyLjQwNSAxMzAuMDY1IDI2Mi4wNDkgMTI5LjU3MSAyNjEuNTE2QzEyOS4zNDMgMjYxLjI1MiAxMjguOTExIDI2MC42MzkgMTI4LjI3NiAyNTkuNjc2QzEyNy43MzkgMjU4Ljg2IDEyNi45MDEgMjU3Ljc1NiAxMjUuNzQ3IDI1Ni4zNjRaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTQyLjE4NSAyMDQuMTQyQzE0MS4zNjUgMjA0LjM0NSAxNDAuNjc0IDIwNC43OTkgMTQwLjExOSAyMDUuNDkyQzEzOS41NjQgMjA2LjIwOSAxMzkuMjc0IDIwNi45ODIgMTM5LjI1NiAyMDcuODIyQzEzOS4yMzcgMjA4LjY2MiAxMzkuNDkgMjA5LjQ0NyAxNDAuMDI3IDIxMC4xODNDMTQwLjU2MyAyMTAuOTAxIDE0MS4yNDIgMjExLjM2NyAxNDIuMDYyIDIxMS41OTRDMTQyLjI2NiAyMTEuNjU1IDE0Mi42NzkgMjExLjcyOSAxNDMuMjk2IDIxMS44MDhDMTQzLjgwOCAyMTEuODcgMTQ0LjIwOSAyMTEuOTYyIDE0NC40OTkgMjEyLjA4NEMxNDUuMTc3IDIxMi4zMyAxNDUuNzAxIDIxMi43NzEgMTQ2LjA3MSAyMTMuNDAzQzE0Ni4yMTMgMjEzLjY2NyAxNDYuMjc1IDIxMy44OTQgMTQ2LjI1NyAyMTQuMDc4QzE0Ni4xOTUgMjE0LjM0MSAxNDUuOTkxIDIxNC41NTYgMTQ1LjY0IDIxNC43MjJDMTQ1LjA2NiAyMTUuMDEgMTQ0LjQ1NSAyMTUuMDQ3IDE0My44MiAyMTQuODQ0QzE0My40MDcgMjE0LjY3OSAxNDMuMDkyIDIxNC41NTYgMTQyLjg2NCAyMTQuNDc2QzE0Mi40OTQgMjE0LjM1NCAxNDIuMTg1IDIxNC4zNTQgMTQxLjkzOSAyMTQuNDc2QzE0MS42NDkgMjE0LjU5OSAxNDEuNDc2IDIxNC44MjYgMTQxLjQxNCAyMTUuMTUxQzE0MS4zMzQgMjE1LjQ3NiAxNDEuMzcxIDIxNS43ODMgMTQxLjUzOCAyMTYuMDcxQzE0MS43ODUgMjE2LjU0MyAxNDIuMjc4IDIxNi44OCAxNDMuMDE4IDIxNy4wODNDMTQ0LjM3NSAyMTcuNDk0IDE0NS42ODkgMjE3LjM1OSAxNDYuOTY2IDIxNi42ODRDMTQ3LjYyNiAyMTYuMzM1IDE0OC4wNzYgMjE1Ljg5OSAxNDguMzIzIDIxNS4zNjZDMTQ4LjcxMSAyMTQuNjExIDE0OC42NjIgMjEzLjc0IDE0OC4xNjkgMjEyLjc1OUMxNDcuNzk5IDIxMS45OCAxNDcuMjU2IDIxMS4zMTggMTQ2LjUzNCAyMTAuNzY2QzE0NS44MTIgMjEwLjIzMiAxNDUuMDM1IDIwOS44ODkgMTQ0LjE5IDIwOS43MjNDMTQzLjUxMiAyMDkuNjQ0IDE0My4wMTggMjA5LjU1OCAxNDIuNzEgMjA5LjQ3OEMxNDIuMTU1IDIwOS4zNTUgMTQxLjc3MiAyMDkuMTIyIDE0MS41NjkgMjA4Ljc3M0MxNDEuMjc5IDIwOC4zNDMgMTQxLjI3MyAyMDcuODUzIDE0MS41MzggMjA3LjMwMUMxNDEuNzg1IDIwNi44MSAxNDIuMTY3IDIwNi40NDIgMTQyLjY3OSAyMDYuMTk3QzE0My4wNDkgMjA2LjAzMSAxNDMuMzE0IDIwNS44OSAxNDMuNDgxIDIwNS43NjhDMTQzLjc3MSAyMDUuNTg0IDE0My45MzEgMjA1LjM2OSAxNDMuOTc0IDIwNS4xMjRDMTQzLjk5MyAyMDQuOTQgMTQzLjk1NiAyMDQuNzU2IDE0My44NTEgMjA0LjU3MkMxNDMuNzI4IDIwNC4zODggMTQzLjU3MyAyMDQuMjUzIDE0My4zODggMjA0LjE3M0MxNDMuMDggMjA0LjA1IDE0Mi42NzkgMjA0LjAzOCAxNDIuMTg1IDIwNC4xNDJaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTM1LjY3OCAyMDkuNjkzQzEzNi4wNjcgMjEwLjUwOCAxMzYuNDMgMjExLjUyIDEzNi43NTcgMjEyLjcyOEMxMzcuMDg0IDIxMy44NzUgMTM3LjM2MiAyMTUuMDU5IDEzNy41OSAyMTYuMjg2QzEzNy43NTcgMjE3LjAyMSAxMzcuNzg3IDIxNy42MjIgMTM3LjY4MyAyMTguMDk1QzEzNi43NTcgMjE3LjE1NiAxMzUuOTY4IDIxNi4xMDIgMTM1LjMwOCAyMTQuOTM2QzEzNC43NTMgMjEzLjk1NSAxMzQuMzM5IDIxMi45NzQgMTM0LjA3NCAyMTEuOTkyQzEzMy45MzIgMjExLjU0NSAxMzMuODI3IDIxMS4yNjkgMTMzLjc2NiAyMTEuMTY1QzEzMy42MjQgMjEwLjkzOCAxMzMuNDI3IDIxMC43NzggMTMzLjE4IDIxMC42NzRDMTMyLjkzMyAyMTAuNTcgMTMyLjY4NiAyMTAuNTUxIDEzMi40NCAyMTAuNjEzQzEzMi4xOTMgMjEwLjY3NCAxMzEuOTg5IDIxMC44MTUgMTMxLjgyMyAyMTEuMDQyQzEzMS42NTYgMjExLjI2OSAxMzEuNTg4IDIxMS41MDIgMTMxLjYwNyAyMTEuNzQ3QzEzMS42MjUgMjExLjk5MiAxMzEuNzQzIDIxMi4zNDggMTMxLjk0NiAyMTIuODJDMTMxLjk4OSAyMTIuOTg2IDEzMS45ODkgMjEzLjIzMSAxMzEuOTQ2IDIxMy41NTZDMTMxLjkwMyAyMTMuOTA2IDEzMS44OTcgMjE0LjE1MSAxMzEuOTE1IDIxNC4yOTJDMTMxLjkzNCAyMTQuNTk5IDEzMi4wNTEgMjE1LjAyOCAxMzIuMjU1IDIxNS41OEMxMzIuMjczIDIxNS44MDcgMTMyLjI3MyAyMTYuMTUxIDEzMi4yNTUgMjE2LjYyM0MxMzIuMjk4IDIxNi44NSAxMzIuMzkgMjE3LjE5MyAxMzIuNTMyIDIxNy42NjVDMTMyLjU3NSAyMTcuODY4IDEzMi41ODEgMjE4LjE5OSAxMzIuNTYzIDIxOC42NDdDMTMyLjU0NCAyMTkuMDc2IDEzMi41NjMgMjE5LjQwMSAxMzIuNjI1IDIxOS42MjhDMTMyLjY2OCAyMTkuNzY5IDEzMi43MjkgMjE5Ljk3OCAxMzIuODEgMjIwLjI0MUMxMzIuODcxIDIyMC41MDUgMTMyLjg1OSAyMjAuNzEzIDEzMi43NzkgMjIwLjg1NUMxMzIuMTgxIDIyMC4yNiAxMzEuNjE5IDIxOS4zNyAxMzEuMDgzIDIxOC4xODdMMTMwLjAzNCAyMTUuODU2QzEyOS41NDEgMjE0LjYzIDEyOS4xNTggMjEzLjUzOCAxMjguODkzIDIxMi41NzVDMTI4LjcyNiAyMTEuOSAxMjguNTM1IDIxMS40NTMgMTI4LjMwNyAyMTEuMjI2QzEyOC4xMjIgMjExLjA0MiAxMjcuODg3IDIxMC45MzggMTI3LjU5OCAyMTAuOTE5QzEyNy4zMzIgMjEwLjkwMSAxMjcuMTIzIDIxMC45OTMgMTI2Ljk4MSAyMTEuMTk1QzEyNi44NTcgMjExLjM3OSAxMjYuODE0IDIxMS42NTUgMTI2Ljg1NyAyMTIuMDIzTDEyNy43MjEgMjE1LjA5QzEyNy45NjggMjE1Ljg2OCAxMjguMTcxIDIxNi40NTEgMTI4LjMzOCAyMTYuODM3QzEyOC40MTggMjE3LjEwMSAxMjguNTQxIDIxNy40MDIgMTI4LjcwOCAyMTcuNzI3TDEyOS4xNyAyMTguNzY5QzEyOS44NjcgMjIwLjI0MSAxMzAuNTcxIDIyMS4zODggMTMxLjI2OCAyMjIuMjA0QzEzMS42NTYgMjIyLjY3NiAxMzIuMDM5IDIyMi45ODMgMTMyLjQwOSAyMjMuMTI0QzEzMi42MTIgMjIzLjIwMyAxMzIuOTQ1IDIyMy4yNjUgMTMzLjM5NiAyMjMuMzA4QzEzMy44NDYgMjIzLjM1MSAxMzQuMTY3IDIyMy4zMDggMTM0LjM1MiAyMjMuMTg1QzEzNC41OCAyMjMuMDYyIDEzNC43MzQgMjIyLjc1NiAxMzQuODE0IDIyMi4yNjVDMTM0Ljg5NSAyMjEuNjk1IDEzNC44NjQgMjIwLjg5NyAxMzQuNzIyIDIxOS44NzNDMTM0LjU1NSAyMTguNzUxIDEzNC40ODcgMjE3Ljk0MSAxMzQuNTA2IDIxNy40NTFDMTM1LjQ1IDIxOC44MTggMTM2LjIwMiAyMTkuNzUxIDEzNi43NTcgMjIwLjI0MUMxMzcuNjY0IDIyMS4xMTggMTM4LjU0NiAyMjEuNDI1IDEzOS40MSAyMjEuMTYxQzEzOS43OTggMjIwLjk3NyAxNDAuMDM5IDIyMC42MjggMTQwLjExOSAyMjAuMTE5QzE0MC4xNjIgMjE5LjgzIDE0MC4xMzggMjE5LjM5NSAxNDAuMDU3IDIxOC44TDEzOS40NzEgMjE0Ljk2N0MxMzkuMDQgMjEyLjc0MSAxMzguMzczIDIxMC41MzMgMTM3LjQ2NyAyMDguMzQzQzEzNy4zMjUgMjA3Ljk1NyAxMzcuMTQ2IDIwNy42ODEgMTM2Ljk0MiAyMDcuNTE1QzEzNi42NzcgMjA3LjMxMyAxMzYuMzY5IDIwNy4yNTggMTM2LjAxNyAyMDcuMzYyQzEzNS42NDcgMjA3LjQ2NiAxMzUuNDEzIDIwNy42NjkgMTM1LjMwOCAyMDcuOTc1QzEzNS4yMjggMjA4LjIyMSAxMzUuMjM0IDIwOC41MDkgMTM1LjMzOSAyMDguODM0QzEzNS4zODIgMjA4Ljk3NSAxMzUuNDkzIDIwOS4yNjMgMTM1LjY3OCAyMDkuNjkzWlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEyMS41NTMgMjE1LjA1OUMxMjEuNDkxIDIxNS40MjcgMTIxLjQ2IDIxNS45OTcgMTIxLjQ2IDIxNi43NzZWMjIyLjQ4QzEyMS40NiAyMjMuMTEyIDEyMS41MDMgMjIzLjU3MiAxMjEuNTg0IDIyMy44NkwxMjEuNzY5IDIyNC4zODFDMTIxLjgzIDIyNC41NjUgMTIxLjg2MSAyMjQuNzMxIDEyMS44NjEgMjI0Ljg3MkMxMjEuODggMjI1LjAzNyAxMjEuODggMjI1LjI4MyAxMjEuODYxIDIyNS42MDhMMTIyLjA3NyAyMjYuMTZDMTIyLjEzOSAyMjYuMzI1IDEyMi4xODggMjI2LjU3NyAxMjIuMjMxIDIyNi45MjZMMTIyLjUwOSAyMjcuNjYyQzEyMi42NzUgMjI4LjE3MSAxMjIuNzg2IDIyOC40NzIgMTIyLjg0OCAyMjguNTUyQzEyMy4wNzYgMjI4Ljc5NyAxMjMuNDY1IDIyOC45MDEgMTI0LjAyIDIyOC44NThDMTI0LjI2NyAyMjguNzE3IDEyNC4zNDcgMjI4LjM4NiAxMjQuMjY3IDIyNy44NzdMMTIzLjU4OCAyMjQuMzJDMTIzLjY4NyAyMjQuMjQ2IDEyMy43NjEgMjI0LjE1NCAxMjMuODA0IDIyNC4wNDRDMTI0LjY4IDIyMy43NTYgMTI1LjUgMjIzLjM0NSAxMjYuMjcxIDIyMi44MTdDMTI2LjY2NiAyMjMuNjY0IDEyNi44ODggMjI0LjE1NCAxMjYuOTUgMjI0LjI4OUwxMjcuNjU5IDIyNS42MDhDMTI4LjAxMSAyMjYuMjM5IDEyOC4zODEgMjI2LjY1IDEyOC43NyAyMjYuODM0QzEyOS4wMzUgMjI2Ljk1NyAxMjkuMzEyIDIyNi45NzUgMTI5LjYwMiAyMjYuODk2QzEyOS44OTIgMjI2LjgzNCAxMzAuMDk2IDIyNi42ODEgMTMwLjIxOSAyMjYuNDM2QzEzMC4zNDIgMjI2LjE0NyAxMzAuMzEyIDIyNS44NDEgMTMwLjEyNyAyMjUuNTE2QzEzMC4xMDggMjI1LjQ5NyAxMjkuOTI5IDIyNS4yMjcgMTI5LjYwMiAyMjQuNzE4QzEyOS4zNTYgMjI0LjM2OSAxMjkuMDc4IDIyMy44NzggMTI4Ljc3IDIyMy4yNDdMMTI2LjY0MiAyMTguNTg2QzEyNi40MzggMjE4LjExMyAxMjYuMTQ4IDIxNy41NDMgMTI1Ljc3OCAyMTYuODY4TDEyNC4wODIgMjEzLjY3OUMxMjMuODc4IDIxMy4yOTMgMTIzLjY2OCAyMTMuMDM1IDEyMy40NjUgMjEyLjkxM0MxMjMuMiAyMTIuNzcyIDEyMi44OTEgMjEyLjc0NyAxMjIuNTQgMjEyLjg1MUMxMjIuMjUgMjEyLjg5NCAxMjIuMDM0IDIxMy4wMTcgMTIxLjg5MiAyMTMuMjE5QzEyMS44NDkgMjEzLjI5OSAxMjEuNzk5IDIxMy41NjkgMTIxLjczOCAyMTQuMDE3TDEyMS41NTMgMjE1LjA1OVpcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMjMuMzcyIDIxNi45OTFDMTIzLjc4NiAyMTcuNDAyIDEyNC4xODcgMjE4LjA1MiAxMjQuNTc1IDIxOC45NTRMMTI1LjQzOSAyMjAuOTc3QzEyNS4zNCAyMjEuMDU3IDEyNS4yMjkgMjIxLjEzNyAxMjUuMDk5IDIyMS4yMjNDMTI0LjcyOSAyMjEuNDUgMTI0LjE3NCAyMjEuNzM4IDEyMy40MzQgMjIyLjA4MUwxMjMuMzcyIDIxNi45OTFaXCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICBjbGlwUGF0aDogXCJ1cmwoI2NsaXA2XzEyODhfMjUwMTIpXCIsXG4gIHRyYW5zZm9ybTogXCJtYXRyaXgoMC42OTc4NTgwOTUxNjkwNjc1LCAwLCAwLCAwLjY5Nzg1ODA5NTE2OTA2NzUsIC05OC4xNzY3MTIwMzYxMzI4MSwgLTIxLjY0OTM4MzU0NDkyMTg0NylcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMzI5LjExNSAzOTQuNTFDMzI4Ljg1NSAzOTQuNTggMzI4LjY3MiAzOTQuOTEgMzI4LjU1MiAzOTUuNDkzTDMyOC40NDYgMzk2Ljk2N0MzMjguNDQ2IDM5Ny41NSAzMjguNDgxIDM5OC4xMjYgMzI4LjU1MiAzOTguNjg3QzMyOC42OTMgNDAwLjAyMSAzMjguODE5IDQwMC45ODMgMzI4LjkzOSA0MDEuNTY2TDMyOS4yOTEgNDAzLjMyMUMzMjkuNDUzIDQwMy45NzQgMzI5LjcyOCA0MDQuOTU3IDMzMC4xMDEgNDA2LjI2OUMzMzAuNDAzIDQwNy40MTQgMzMwLjU5MyA0MDguMzk3IDMzMC42NjQgNDA5LjIxOEMzMzAuNzEzIDQwOS42NiAzMzAuNzY5IDQwOS45OSAzMzAuODQgNDEwLjIwMUMzMzAuODYxIDQxMC4zNDEgMzMwLjkzMSA0MTAuNTM4IDMzMS4wNTEgNDEwLjc5OEMzMzEuMDcyIDQxMC45MTcgMzMxLjA4NiA0MTEuMjY4IDMzMS4wODYgNDExLjg1MUMzMzEuMTA3IDQxMi4xODEgMzMxLjI0MSA0MTIuNjQ0IDMzMS40NzMgNDEzLjI1NUMzMzEuNjE0IDQxMy41ODUgMzMxLjc0MSA0MTMuODE3IDMzMS44NjEgNDEzLjk1N0MzMzIuMTQyIDQxNC4yODcgMzMyLjU0MyA0MTQuNDI3IDMzMy4wNTcgNDE0LjM3OEMzMzMuMzE4IDQxNC4zNTcgMzMzLjc0IDQxNC4yMzggMzM0LjMyNSA0MTQuMDI3QzMzNS42NjIgNDEzLjQ0NCAzMzYuOTE1IDQxMi43NzcgMzM4LjA5MSA0MTIuMDI2QzMzOC41MTMgNDExLjY5NiAzMzguNzgxIDQxMS40NjUgMzM4LjkgNDExLjMyNEMzMzkuMTEyIDQxMC45NzMgMzM5LjE2OCA0MTAuNjQzIDMzOS4wNzYgNDEwLjM0MUMzMzguOTE0IDQwOS45NDEgMzM4LjYwNSA0MDkuNzQ1IDMzOC4xNjEgNDA5Ljc0NUMzMzcuODMgNDA5LjcyNCAzMzcuNDU3IDQwOS44MTUgMzM3LjAzNSA0MTAuMDI1QzMzNi44OTQgNDEwLjA5NiAzMzYuMzE3IDQxMC40ODIgMzM1LjMxIDQxMS4xODRDMzM0LjYwNiA0MTEuNjc1IDMzMy45ODcgNDExLjk0MiAzMzMuNDQ1IDQxMS45OTFMMzMyLjE3NyA0MDYuODMxQzMzMS42ODUgNDA0Ljg4NiAzMzEuMTkyIDQwMi43NzMgMzMwLjY5OSA0MDAuNDc4TDMzMC40MTcgMzk4LjkzM0MzMzAuMTg1IDM5Ny41NzggMzMwLjA1MSAzOTYuNTYgMzMwLjAzIDM5NS44NzlDMzI5Ljk2IDM5NS4zMzkgMzI5LjkxMSAzOTUuMDIzIDMyOS44ODkgMzk0LjkzMUMzMjkuNjk5IDM5NC41MzEgMzI5LjQ0NiAzOTQuMzkxIDMyOS4xMTUgMzk0LjUxWlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTMyMS45NDIgMzk2LjkzMkMzMjAuODg2IDM5Ni41MTEgMzE5Ljk1NiAzOTYuNDU1IDMxOS4xNjEgMzk2Ljc1N0MzMTguMTA1IDM5Ny4xOTkgMzE3LjM1MiAzOTguMjE3IDMxNi45MDggMzk5LjgxMUMzMTYuNzY3IDQwMC4yODEgMzE2LjYyNyA0MDAuOTU1IDMxNi40ODYgNDAxLjg0N0MzMTYuMzY2IDQwMi43MSAzMTYuMzEgNDAzLjQ4MiAzMTYuMzEgNDA0LjE2M0MzMTYuMjM5IDQwNS42NTkgMzE2LjMzMSA0MDcuMTk2IDMxNi41OTEgNDA4Ljc2MkMzMTYuNjYyIDQwOS4zMjMgMzE2LjgxNyA0MTAuMTQ1IDMxNy4wNDkgNDExLjIxOUwzMTcuMjk1IDQxMi4yNzJDMzE3LjQ1NyA0MTIuODU1IDMxNy42NjEgNDEzLjMzOSAzMTcuODk0IDQxMy43MTFDMzE3Ljk2NCA0MTMuODUyIDMxOC4xOTYgNDE0LjE4MiAzMTguNTk4IDQxNC42OTRDMzE5LjQ5MiA0MTUuODE3IDMyMC4zMzcgNDE2LjU2OSAzMjEuMTMyIDQxNi45NDFDMzIxLjY3NCA0MTcuMjIyIDMyMi4yMjMgNDE3LjM2MiAzMjIuNzg2IDQxNy4zNjJDMzIzLjM5OSA0MTcuMzYyIDMyMy45MzQgNDE3LjIwOCAzMjQuNDA2IDQxNi45MDZDMzI0Ljc3OSA0MTYuNjQ2IDMyNS4xNTkgNDE2LjIyNSAzMjUuNTMyIDQxNS42NDJDMzI2LjA0NiA0MTQuODkxIDMyNi4zOTggNDE0LjMwOCAzMjYuNTg4IDQxMy44ODdDMzI2LjYyMyA0MTMuODE3IDMyNi42NTggNDEzLjcxMSAzMjYuNjkzIDQxMy41NzFDMzI3Ljg2OSA0MTQuNDQ4IDMyOC43NjMgNDE0Ljk5NiAzMjkuMzY5IDQxNS4yMjFDMzI5Ljg4MiA0MTUuNDMxIDMzMC4zMTkgNDE1LjQ4IDMzMC42NzEgNDE1LjM2MUMzMzAuOTAzIDQxNS4yOTEgMzMxLjA3OSA0MTUuMTUxIDMzMS4xOTkgNDE0Ljk0QzMzMS4zNCA0MTQuNzI5IDMzMS4zNzUgNDE0LjUxOSAzMzEuMzA0IDQxNC4zMDhDMzMxLjIxMyA0MTQuMDQ4IDMzMC45NjcgNDEzLjgzMSAzMzAuNTY1IDQxMy42NDFDMzI5LjM3NiA0MTIuOTc0IDMyOC4yODQgNDEyLjI5MyAzMjcuMjkyIDQxMS42MDVMMzI3LjUzOCA0MTAuNTUyQzMyNy43MjggNDA5LjI2NyAzMjcuNDgyIDQwNy41NTQgMzI2Ljc5OSA0MDUuNDI3QzMyNi42NTggNDA0Ljg2NSAzMjYuNDY4IDQwNC4zNzQgMzI2LjIzNiA0MDMuOTUzQzMyNS44MTMgNDAzLjEzMSAzMjUuNTg4IDQwMi42NjggMzI1LjU2NyA0MDIuNTQ5TDMyNS4yNSA0MDEuMzlDMzI1LjAxOCA0MDEuMDM5IDMyNC44ODQgNDAwLjgxNSAzMjQuODYzIDQwMC43MjNWNDAwLjA5MkMzMjQuODQyIDM5OS42OTEgMzI0LjY1MiAzOTkuMjYzIDMyNC4zIDM5OC43OTNDMzIzLjcxNiAzOTguMDIgMzIyLjkyNyAzOTcuNDAzIDMyMS45NDIgMzk2LjkzMlpcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zMjAuOTg0IDM5OC44NjNDMzIwLjg5MyAzOTkuMTY1IDMyMC45NjMgMzk5LjQ4MSAzMjEuMTk1IDM5OS44MTFDMzIxLjI2NiAzOTkuOTMgMzIxLjUxMiA0MDAuMjExIDMyMS45MzUgNDAwLjY1M0MzMjIuNTQ3IDQwMS4yODUgMzIzLjE1MiA0MDIuMzUyIDMyMy43NjUgNDAzLjg0N0MzMjQuMzQ5IDQwNS4yNTEgMzI0Ljc2NSA0MDYuMzU0IDMyNC45OTcgNDA3LjE0N0MzMjUuMjU3IDQwOC4xMyAzMjUuMzc3IDQwOS4wMjggMzI1LjM0OSA0MDkuODVDMzI1LjIzNiA0MDkuNjg4IDMyNS4xMzggNDA5LjUyNyAzMjUuMDY3IDQwOS4zNThDMzI0LjkyNiA0MDkuMDA3IDMyNC44MDcgNDA4Ljc0OCAzMjQuNzE1IDQwOC41ODZDMzI0LjU1MyA0MDguMzA1IDMyNC4zNDkgNDA4LjE0NCAzMjQuMTE3IDQwOC4wOTVDMzIzLjkwNiA0MDguMDc0IDMyMy43MTYgNDA4LjEzIDMyMy41NTQgNDA4LjI3QzMyMy4zNjQgNDA4LjM5IDMyMy4yNTEgNDA4LjU1MSAzMjMuMjAyIDQwOC43NjJDMzIzLjEzMSA0MDkuMDY0IDMyMy4xODggNDA5LjQ2NCAzMjMuMzc4IDQwOS45NTVDMzIzLjY1OSA0MTAuNjA4IDMyNC4xMTcgNDExLjI1NCAzMjQuNzUgNDExLjg4NkMzMjQuOCA0MTEuOTQyIDMyNC44NjMgNDExLjk5OCAzMjQuOTI2IDQxMi4wNjFDMzI0Ljg3IDQxMi4xOTUgMzI0LjgwNyA0MTIuMzIxIDMyNC43NSA0MTIuNDQ3QzMyNC4zNzcgNDEzLjM4MSAzMjMuODU2IDQxNC4yNTIgMzIzLjIwMiA0MTUuMDQ1QzMyMi4xMjUgNDE1LjEzNiAzMjEuMTc0IDQxNC42NTkgMzIwLjM1MSA0MTMuNjA2QzMxOS44MzcgNDEyLjkwNCAzMTkuNDIxIDQxMS44NzIgMzE5LjExOSA0MTAuNTE3QzMxOC4xNTQgNDA2LjY3NyAzMTguMDk4IDQwMy4zNDIgMzE4Ljk0MyA0MDAuNTEzQzMxOS4xMzMgMzk5Ljg4MSAzMTkuMzUxIDM5OS40MzggMzE5LjYxMSAzOTkuMTc5QzMyMC4wMzQgMzk4LjcwOCAzMjAuNDkxIDM5OC42MDMgMzIwLjk4NCAzOTguODYzWlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zMTEuMzQgMzk5LjU2NUMzMTEuMjIgMzk5LjA3MyAzMTEuMDIzIDM5OC42ODcgMzEwLjc0MSAzOTguNDA2QzMxMC40ODEgMzk4LjEyNiAzMTAuMTI5IDM5Ny45MjkgMzA5LjY4NSAzOTcuODFDMzA5LjQyNSAzOTcuNzQgMzA5LjAxNiAzOTcuNjgzIDMwOC40NTMgMzk3LjYzNEMzMDcuMjc4IDM5Ny41ODUgMzA2LjQ2MSAzOTcuNjY5IDMwNS45ODkgMzk3Ljg4QzMwNS40NDcgMzk4LjE0IDMwNC44MjggMzk4Ljc3OSAzMDQuMTI0IDM5OS44MTFDMzAzLjYzMSA0MDAuNTYyIDMwMy4zMTQgNDAxLjEzIDMwMy4xNzMgNDAxLjUzMUMzMDMuMDMzIDQwMi4wMDEgMzAyLjkxMyA0MDIuNzI0IDMwMi44MjEgNDAzLjcwN0wzMDIuNTA1IDQwNS4xODFDMzAyLjUwNSA0MDUuMzIyIDMwMi41NjEgNDA1Ljc0MyAzMDIuNjgxIDQwNi40NDVDMzAyLjkxMyA0MDcuMzM3IDMwMy4xMjQgNDA3Ljk4OSAzMDMuMzE0IDQwOC40MTFDMzAzLjY4NyA0MDkuMTgzIDMwNC4yNDMgNDA5Ljg1IDMwNC45NjkgNDEwLjQxMkMzMDUuNjk0IDQxMC45NTIgMzA2LjUwMyA0MTEuMzEgMzA3LjM5NyA0MTEuNUMzMDcuODQxIDQxMS41OTEgMzA4LjUxIDQxMS42NjEgMzA5LjQwNCA0MTEuNzFDMzEwLjMxOSA0MTEuNzU5IDMxMC45ODggNDExLjgxNiAzMTEuNDEgNDExLjg4NkMzMTEuODgyIDQxMS45NzcgMzEyLjE5OCA0MTIuMTExIDMxMi4zNiA0MTIuMjcyQzMxMi41NzIgNDEyLjQzMyAzMTIuNzQ4IDQxMi43ODQgMzEyLjg4OCA0MTMuMzI1TDMxMy43NjggNDE2LjM3OUMzMTMuNTc4IDQxNi41OSAzMTMuNDUyIDQxNi45OTcgMzEzLjM4MSA0MTcuNjA4QzMxMy4yMTkgNDE4LjE5IDMxMi44MTggNDE4LjY0IDMxMi4xODQgNDE4Ljk0MUMzMTEuNjcgNDE5LjIwMSAzMTEuMDU4IDQxOS4zMjggMzEwLjM1NCA0MTkuMzI4QzMwOS43NyA0MTkuMzc3IDMwOS4zMzMgNDE5LjI3OCAzMDkuMDUyIDQxOS4wNDdDMzA4Ljk2IDQxOC45NzcgMzA4LjgwNSA0MTguODIyIDMwOC41OTQgNDE4LjU5QzMwOC40MzIgNDE4LjQwMSAzMDguMjc3IDQxOC4yNzUgMzA4LjEzNiA0MTguMjA0QzMwNy45MjUgNDE4LjExMyAzMDcuNzE0IDQxOC4xMTMgMzA3LjUwMyA0MTguMjA0QzMwNy4yNzEgNDE4LjI3NSAzMDcuMDk1IDQxOC40MDEgMzA2Ljk3NSA0MTguNTlDMzA2Ljc0MyA0MTguOTQxIDMwNi43MDcgNDE5LjM0OSAzMDYuODY5IDQxOS44MTlDMzA3LjA1OSA0MjAuNDUxIDMwNy41MzggNDIwLjkyOCAzMDguMzEyIDQyMS4yNThDMzA4Ljg3NiA0MjEuNDY5IDMwOS41NjYgNDIxLjU3NCAzMTAuMzg5IDQyMS41NzRDMzExLjIxMyA0MjEuNTc0IDMxMS44NjggNDIxLjQ5IDMxMi4zNiA0MjEuMzI4QzMxMi43ODMgNDIxLjE4OCAzMTMuMzQ2IDQyMC44NTggMzE0LjA1IDQyMC4zNDZDMzE0LjU5MiA0MTkuOTAzIDMxNC45NTEgNDE5LjUyNCAzMTUuMTQxIDQxOS4yMjJDMzE1LjMzMSA0MTguOTIgMzE1LjUyOCA0MTguMjk2IDMxNS43MzkgNDE3LjM2MkMzMTUuODU5IDQxNi42ODEgMzE1Ljg5NCA0MTYuMjE4IDMxNS44NDUgNDE1Ljk1OEwzMTQuOTY1IDQxMi44NjlDMzE0LjYzNCA0MTEuNzY3IDMxNC4yNDcgNDExLjAyMiAzMTMuODAzIDQxMC42MjJDMzEzLjMxMSA0MTAuMjIyIDMxMi42MDcgNDA5Ljk1NSAzMTEuNjkyIDQwOS44MTVDMzEwLjk4OCA0MDkuNjk1IDMxMC4xOTkgNDA5LjYxOCAzMDkuMzMzIDQwOS41NjlDMzA4LjM5NyA0MDkuNTY5IDMwNy43IDQwOS40OTkgMzA3LjI1NiA0MDkuMzU4QzMwNi4zOTEgNDA5LjA1NyAzMDUuNzA4IDQwOC40MTEgMzA1LjIxNSA0MDcuNDI4QzMwNC45MTIgNDA2Ljc0NyAzMDQuNzU3IDQwNi4wOCAzMDQuNzU3IDQwNS40MjdDMzA0LjczNiA0MDUuMDk3IDMwNC43NzEgNDA0LjYwNiAzMDQuODYzIDQwMy45NTNDMzA1LjAyNSA0MDIuNzggMzA1LjMzNSA0MDEuODQ3IDMwNS43NzggNDAxLjE0NEMzMDYuNDYxIDQwMC4xNjIgMzA3LjI3OCAzOTkuNjcgMzA4LjI0MiAzOTkuNjdDMzA4LjU5NCAzOTkuNjcgMzA4Ljg5IDM5OS43NTQgMzA5LjEyMiAzOTkuOTE2QzMwOS4yNjMgNDAwLjAwNyAzMDkuNDA0IDQwMC4xNjIgMzA5LjU0NCA0MDAuMzcyQzMwOS42MzYgNDAwLjQ5MiAzMDkuNzU2IDQwMC42NjcgMzA5Ljg5NiA0MDAuODk5QzMxMC4yOTggNDAxLjM0MSAzMTAuNjU3IDQwMS40NzQgMzEwLjk4OCA0MDEuMjg1QzMxMS40MzEgNDAxLjAwNCAzMTEuNTUxIDQwMC40MjggMzExLjM0IDM5OS41NjVaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMzAwLjY4MSA0MTUuMzk2QzMwMC4yNTkgNDE1LjI3NyAyOTkuODIyIDQxNS4yNzcgMjk5LjM3OSA0MTUuMzk2QzI5OC45MzUgNDE1LjUxNiAyOTguNTU1IDQxNS43MzMgMjk4LjI1MyA0MTYuMDYzQzI5Ny45MDEgNDE2LjQzNSAyOTcuNjA1IDQxNy4xMyAyOTcuMzczIDQxOC4xMzRDMjk3LjA0MiA0MTkuNjMgMjk2LjkzNiA0MjAuNzUzIDI5Ny4wNTYgNDIxLjUwNEMyOTcuMTI2IDQyMi4wODcgMjk3LjMxNiA0MjIuNjI3IDI5Ny42MTkgNDIzLjExOUMyOTcuOTUgNDIzLjYxIDI5OC4zNzIgNDIzLjk2MSAyOTguODg2IDQyNC4xNzJDMjk5LjI4NyA0MjQuMzYxIDI5OS45MjggNDI0LjQ1MyAzMDAuODIyIDQyNC40NTNDMzAxLjQ1NiA0MjQuNDUzIDMwMS45MjcgNDI0LjM5NiAzMDIuMjMgNDI0LjI3N0MzMDIuNzcyIDQyNC4xMTYgMzAzLjExIDQyMy44MDcgMzAzLjI1MSA0MjMuMzY0QzMwMy4zMjEgNDIzLjEzMyAzMDMuMyA0MjIuODk0IDMwMy4xOCA0MjIuNjYyQzMwMy4wODkgNDIyLjQzMSAzMDIuOTIgNDIyLjI3NiAzMDIuNjg4IDQyMi4yMDZDMzAyLjQ5NyA0MjIuMTU3IDMwMi4yNzkgNDIyLjE4NSAzMDIuMDE5IDQyMi4yNzZDMzAxLjcxNiA0MjIuNDE3IDMwMS40NzcgNDIyLjUwOCAzMDEuMzE1IDQyMi41NTdDMzAwLjY4MSA0MjIuNzQ3IDMwMC4xMDQgNDIyLjY3NiAyOTkuNTkgNDIyLjM0NkMyOTkuMDc2IDQyMi4wMTYgMjk4Ljg4NiA0MjEuNjU4IDI5OS4wMjcgNDIxLjI1OEMyOTkuMDk3IDQyMC45MjggMjk5LjQ0OSA0MjAuNjQ3IDMwMC4wODMgNDIwLjQxNkMzMDAuODA4IDQyMC4wNjUgMzAxLjM4NSA0MTkuNzI4IDMwMS44MDggNDE5LjM5OEMzMDIuMjc5IDQxOC45OTggMzAyLjU2OCA0MTguNjI2IDMwMi42ODggNDE4LjI3NUMzMDIuNzc5IDQxNy45NDUgMzAyLjczNyA0MTcuNTU4IDMwMi41NDcgNDE3LjExNkMzMDIuMTk1IDQxNi4yMjUgMzAxLjU3NSA0MTUuNjU2IDMwMC42ODEgNDE1LjM5NlpcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0zMDAuNTA1IDQxNy45MjRDMzAwLjM0NCA0MTguMTgzIDMwMC4xMDQgNDE4LjQwMSAyOTkuODAxIDQxOC41OTFMMjk5LjQ4NSA0MTguODAxQzI5OS40MzUgNDE4LjgyMiAyOTkuMzU4IDQxOC44MjIgMjk5LjIzOCA0MTguODAxQzI5OS4yMTcgNDE4LjYxMiAyOTkuMjE3IDQxOC40NzEgMjk5LjIzOCA0MTguMzhMMjk5LjQxNCA0MTguMDY0QzI5OS41MDYgNDE3LjgwNCAyOTkuNTc2IDQxNy42MjIgMjk5LjYyNSA0MTcuNTAyQzI5OS43MTcgNDE3LjI3MSAyOTkuODcyIDQxNy4xNzIgMzAwLjA4MyA0MTcuMjIyTDMwMC4yOTQgNDE3LjM2MkwzMDAuNTA1IDQxNy42MDhMMzAwLjU0MSA0MTcuNzgzTDMwMC41MDUgNDE3LjkyNFpcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0yOTIuNDQ1IDQxNi43M0MyOTIuMzA0IDQxNi41OSAyOTIuMTE0IDQxNi41MzQgMjkxLjg4MiA0MTYuNTU1QzI5MS42NyA0MTYuNTc2IDI5MS40OCA0MTYuNjYgMjkxLjMxOCA0MTYuOEMyOTEuMDg2IDQxNy4wMzIgMjkwLjkxNyA0MTcuMzk3IDI5MC44MjYgNDE3Ljg4OEMyOTAuNzA2IDQxOC42NjEgMjkwLjc2OSA0MTkuNjIzIDI5MS4wMDIgNDIwLjc2N0MyOTEuMzU0IDQyMi40NTIgMjkxLjU0NCA0MjMuNCAyOTEuNTY1IDQyMy42MUMyOTEuNjU2IDQyNC40NzQgMjkxLjcyIDQyNC45NzkgMjkxLjc0MSA0MjUuMTJDMjkxLjg2IDQyNS42NiAyOTIuMDc5IDQyNi4wNjcgMjkyLjQwOSA0MjYuMzQ4QzI5Mi43NCA0MjYuNjI5IDI5My4wOTIgNDI2LjczNCAyOTMuNDY1IDQyNi42NjRDMjkzLjkzNyA0MjYuNTczIDI5NC4yMDUgNDI2LjMyNyAyOTQuMjc1IDQyNS45MjdDMjk0LjI5NiA0MjUuNzY1IDI5NC4yMjYgNDI1LjQ1IDI5NC4wNjQgNDI0Ljk3OUMyOTMuOTAyIDQyNC41MzcgMjkzLjc2MSA0MjQuMDUyIDI5My42NDEgNDIzLjU0TDI5My4yNTQgNDIxLjk5NUMyOTMuMzE4IDQyMS45MzIgMjkzLjM3NCA0MjEuODQ4IDI5My40MyA0MjEuNzVDMjkzLjg1MyA0MjAuOTU2IDI5NC4zMSA0MjAuMjQgMjk0LjgwMyA0MTkuNjA5QzI5NS4wMzUgNDE5LjI3OSAyOTUuMTc2IDQxOS4wNDcgMjk1LjIyNSA0MTguOTA2QzI5NS4zNjYgNDE4LjY0NyAyOTUuMzggNDE4LjM4IDI5NS4yNjEgNDE4LjA5OUMyOTUuMTQxIDQxNy44MTggMjk0Ljg1OSA0MTcuNjU3IDI5NC40MTYgNDE3LjYwOEMyOTMuOTIzIDQxNy43NDggMjkzLjQ4NyA0MTguMTIgMjkzLjExMyA0MTguNzMxTDI5Mi42OTEgNDE5LjU3M0MyOTIuNTc4IDQxOS4wNCAyOTIuNTQzIDQxOC41OTggMjkyLjU4NSA0MTguMjRDMjkyLjYzNSA0MTcuODg4IDI5Mi42NyA0MTcuNjIyIDI5Mi42OTEgNDE3LjQzMkMyOTIuNjkxIDQxNy4xMyAyOTIuNjA3IDQxNi44OTIgMjkyLjQ0NSA0MTYuNzNaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjg4LjQ2IDQyMS4xODhDMjg4LjA1OSA0MjAuOTI4IDI4Ny43MjEgNDIwLjc1MyAyODcuNDQgNDIwLjY2MkMyODcuMTU4IDQyMC41NyAyODYuNzE0IDQyMC41MjEgMjg2LjEwMiA0MjAuNTIxQzI4NS40NDcgNDIwLjUyMSAyODQuOTkgNDIwLjYxMyAyODQuNzI5IDQyMC44MDJDMjg0LjYxIDQyMC44OTMgMjg0LjM3NyA0MjEuMjIzIDI4NC4wMjUgNDIxLjc4NUwyODMuNDI3IDQyMi44NzNDMjgzLjIzNyA0MjMuMjczIDI4My4wOTYgNDIzLjkyNiAyODMuMDA1IDQyNC44MzlDMjgyLjkxMyA0MjUuNTkgMjgyLjkyIDQyNi4xOTQgMjgzLjA0IDQyNi42NjRDMjgzLjE1OSA0MjcuMzQ1IDI4My40NjIgNDI3Ljg1OCAyODMuOTU1IDQyOC4yMDlDMjg0LjQ0OCA0MjguNTgxIDI4NS4yOTIgNDI4Ljc0OSAyODYuNDg5IDQyOC43QzI4Ni43OTIgNDI4LjcgMjg3LjAzMSA0MjguNjc5IDI4Ny4xOTMgNDI4LjYzQzI4Ny41NDUgNDI4LjU2IDI4Ny44NDggNDI4LjM5OCAyODguMTA4IDQyOC4xMzhDMjg4LjI5OCA0MjguNzIxIDI4OC40ODEgNDI5LjU5OSAyODguNjcyIDQzMC43NzFMMjg4Ljk1MyA0MzIuNTk3QzI4OS4wNzMgNDMzLjA2NyAyODkuMTQzIDQzMy41MyAyODkuMTY0IDQzNC4wMDFMMjg5LjIzNSA0MzUuNDA1QzI4OS4yMzUgNDM1LjcwNyAyODkuMTg1IDQzNS45MSAyODkuMDk0IDQzNi4wMDFDMjg4Ljk3NCA0MzYuMTQyIDI4OC43OTggNDM2LjIzMyAyODguNTY2IDQzNi4yODJDMjg4LjAwMyA0MzYuNDcyIDI4Ny41NjYgNDM2LjQ3OSAyODcuMjY0IDQzNi4zMTdDMjg3LjA1MiA0MzYuMjI2IDI4Ni44MjcgNDM1Ljk0NSAyODYuNTk1IDQzNS40NzVDMjg2LjM2MyA0MzUuMDU0IDI4Ni4xMjMgNDM0LjgwOCAyODUuODkxIDQzNC43MzhDMjg1LjY1OSA0MzQuNjY4IDI4NS40MzMgNDM0LjY4OSAyODUuMjIyIDQzNC44MDhDMjg1LjAxMSA0MzQuOTI3IDI4NC44NTYgNDM1LjA4OSAyODQuNzY0IDQzNS4yOTlDMjg0LjU3NCA0MzUuNjUgMjg0LjU3NCA0MzYuMDkzIDI4NC43NjQgNDM2LjYzM0MyODQuOTI2IDQzNy4xMjUgMjg1LjIwMSA0MzcuNTQ2IDI4NS41NzQgNDM3Ljg5N0MyODUuOTQ3IDQzOC4yNjkgMjg2LjM4NCA0MzguNTE1IDI4Ni44NzYgNDM4LjYzNEMyODcuNTMxIDQzOC43NzUgMjg4LjMwNSA0MzguNzI1IDI4OS4yIDQzOC40OTRDMjg5Ljk3NCA0MzguMjYyIDI5MC41MTYgNDM3Ljk0NiAyOTAuODE5IDQzNy41NDZDMjkxLjEyMSA0MzcuMTQ2IDI5MS4yNzYgNDM2LjQ3MiAyOTEuMjc2IDQzNS41MUMyOTEuMjc2IDQzNC42ODkgMjkxLjI0MSA0MzMuODk1IDI5MS4xNzEgNDMzLjEyM0wyODkuODY4IDQyNS43ODdDMjg5LjcwNiA0MjUuMjc0IDI4OS41ODcgNDI0Ljg5NSAyODkuNTE2IDQyNC42NjNDMjg5LjM3NiA0MjQuMjIxIDI4OS4zMDUgNDIzLjgzNSAyODkuMzA1IDQyMy41MDVDMjg5LjM1NCA0MjMuMDg0IDI4OS4zOSA0MjIuNzY4IDI4OS40MTEgNDIyLjU1N0MyODkuNDExIDQyMi4yMDYgMjg5LjM0IDQyMS45MjUgMjg5LjIgNDIxLjcxNUMyODkuMDggNDIxLjU1MyAyODguODMzIDQyMS4zNzggMjg4LjQ2IDQyMS4xODhaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjg2LjI1IDQyMi41NTdIMjg2LjgxM0wyODYuOTU0IDQyMi43NjhMMjg3LjIzNSA0MjQuMTAyTDI4Ny40ODIgNDI0LjU1OEMyODcuNjQ0IDQyNC45MyAyODcuNTczIDQyNS40NSAyODcuMjcxIDQyNi4xMDJDMjg3LjEzIDQyNi40MDQgMjg2Ljk4OSA0MjYuNTk0IDI4Ni44NDggNDI2LjY2NEMyODYuNzA3IDQyNi43NTUgMjg2LjQ4MiA0MjYuODE5IDI4Ni4xNzkgNDI2Ljg0QzI4NS44MjcgNDI2Ljg0IDI4NS42MDIgNDI2Ljg1NCAyODUuNTExIDQyNi44NzVDMjg1LjA4OCA0MjYuMzEzIDI4NC44NjMgNDI1Ljg1NyAyODQuODQyIDQyNS41MDZDMjg0Ljg0MiA0MjUuMjk1IDI4NC44OTEgNDI1IDI4NC45ODMgNDI0LjYyOEMyODUuMjE1IDQyMy45NDcgMjg1LjQ3NSA0MjMuMzUgMjg1Ljc1NyA0MjIuODM4QzI4NS44NDggNDIyLjY5OCAyODUuOTQ3IDQyMi42MTMgMjg2LjAzOSA0MjIuNTkyTDI4Ni4yNSA0MjIuNTU3WlwiLFxuICBmaWxsOiBcIndoaXRlXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0yODEuMjQ1IDQxNy4yMjFDMjgxLjQ3NyA0MTcuMDMyIDI4MS42MzIgNDE2LjggMjgxLjcwMiA0MTYuNTE5QzI4MS43NzMgNDE2LjIxOCAyODEuNzE2IDQxNS45NzIgMjgxLjUyNiA0MTUuNzgyQzI4MS4yOTQgNDE1LjU1MSAyODAuOTc3IDQxNS40OCAyODAuNTc2IDQxNS41NzJDMjgwLjQ4NCA0MTUuNTkzIDI4MC4xNjcgNDE1LjcyNiAyNzkuNjI1IDQxNS45NThDMjc5LjUzNCA0MTYgMjc5LjQxNCA0MTYuMDQ5IDI3OS4yNzMgNDE2LjA5OEMyNzguODY1IDQxNC4zNTcgMjc4LjM3MiA0MTIuNjU4IDI3Ny43OTUgNDExLjAwOEMyNzcuNjMzIDQxMC40OTYgMjc3LjQwOCA0MTAuMjM2IDI3Ny4xMjYgNDEwLjIzNkMyNzYuNjgzIDQxMC40OTYgMjc2LjQzNiA0MTAuODgyIDI3Ni4zODcgNDExLjM5NEMyNzYuMzM4IDQxMS43MjQgMjc2LjQwOCA0MTIuMTY3IDI3Ni41OTggNDEyLjcyOEMyNzcuMDIxIDQxNC4wNzYgMjc3LjM3MyA0MTUuNDU5IDI3Ny42NTQgNDE2Ljg3QzI3Ny40NjQgNDE3LjA2IDI3Ny4yMzkgNDE3LjI4NSAyNzYuOTg1IDQxNy41MzdDMjc2LjY1NSA0MTcuNzk3IDI3Ni4xNDEgNDE4LjEzNCAyNzUuNDM3IDQxOC41NTVDMjc1LjAxNCA0MTguOTI3IDI3NC44NTkgNDE5LjI5MyAyNzQuOTc5IDQxOS42NDRDMjc1LjA1IDQxOS44NTQgMjc1LjIwNCA0MTkuOTk1IDI3NS40MzcgNDIwLjA2NUMyNzUuNjQ4IDQyMC4xMzUgMjc1Ljg3MyA0MjAuMTQ5IDI3Ni4xMDYgNDIwLjFDMjc2LjM4NyA0MjAuMDA5IDI3Ni43NiA0MTkuNzQ5IDI3Ny4yMzIgNDE5LjMyOEMyNzcuNDkyIDQxOS4xMjQgMjc3Ljc1MyA0MTguOTQyIDI3OC4wMDYgNDE4Ljc2NkMyNzguMTQ3IDQxOS42MDEgMjc4LjI2NyA0MjAuNDQ0IDI3OC4zNTggNDIxLjI5M0MyNzguNDc4IDQyMi40NjYgMjc4LjU2OSA0MjMuMjAzIDI3OC42NCA0MjMuNTA1QzI3OC44NzIgNDI0LjQxOCAyNzkuMDA2IDQyNC45MyAyNzkuMDI3IDQyNS4wNDlDMjc5LjA3NiA0MjUuNDIxIDI3OS4wODMgNDI1Ljk5NyAyNzkuMDYyIDQyNi43NjlDMjc5LjA4MyA0MjcuMDcxIDI3OS4xODkgNDI3LjUwNyAyNzkuMzc5IDQyOC4wNjhMMjc5Ljg3MiA0MjkuODIzQzI4MC4wNjIgNDMwLjUyNSAyODAuMzA4IDQzMC45ODIgMjgwLjYxMSA0MzEuMTkyQzI4MC44MjIgNDMxLjM4MiAyODEuMDgzIDQzMS40NTkgMjgxLjM4NSA0MzEuNDM4QzI4MS42ODggNDMxLjM4OSAyODEuODkyIDQzMS4yNDggMjgxLjk4NCA0MzEuMDE3QzI4Mi4wNzUgNDMwLjgyNyAyODIuMDc1IDQzMC41ODIgMjgxLjk4NCA0MzAuMjhDMjgxLjkxMyA0MjkuODU4IDI4MS43MzcgNDI5LjE3NyAyODEuNDU2IDQyOC4yNDRDMjgxLjE5NSA0MjcuMzUyIDI4MS4wMzMgNDI2LjY2NCAyODAuOTYzIDQyNi4xNzNMMjgwLjAxMyA0MTkuNDMzQzI3OS45MjEgNDE4LjkzNCAyNzkuODE1IDQxOC40MjkgMjc5LjY5NiA0MTcuOTI0QzI4MC40OTggNDE3LjY2NCAyODEuMDEyIDQxNy40MzIgMjgxLjI0NSA0MTcuMjIxWlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTI3Ni40NTcgNDI1LjQzNUMyNzYuMzE3IDQyNS4wMzUgMjc2LjA1NiA0MjQuNzEyIDI3NS42ODMgNDI0LjQ1M0MyNzUuMzEgNDI0LjE5MyAyNzQuODk1IDQyNC4wNjYgMjc0LjQ1MSA0MjQuMDY2QzI3My41ODUgNDI0LjA2NiAyNzIuODQ2IDQyNC40NjcgMjcyLjIzNCA0MjUuMjZDMjcxLjc0MSA0MjUuODkyIDI3MS40MzggNDI2LjY4NSAyNzEuMzE4IDQyNy42NDdDMjcxLjEyOCA0MjkuMDcyIDI3MS40NTkgNDMwLjAzNCAyNzIuMzA0IDQzMC41MjVDMjcyLjkzOCA0MzAuOTQ3IDI3My44NjcgNDMwLjkxMSAyNzUuMDg1IDQzMC40MkMyNzUuNDU4IDQzMC4yOCAyNzUuNzMyIDQzMC4yNDQgMjc1Ljg5NCA0MzAuMzE1QzI3Ni4zMTcgNDMwLjQ3NiAyNzYuNDAxIDQzMC44NjIgMjc2LjE0MSA0MzEuNDczQzI3NS45NzkgNDMxLjkxNSAyNzUuNjYyIDQzMi4yNTkgMjc1LjE5IDQzMi40OTFDMjc0Ljc0NyA0MzIuNzUxIDI3NC4yODkgNDMyLjgyOCAyNzMuODE4IDQzMi43MzdDMjczLjQ2NiA0MzIuNjQ1IDI3My4xOTggNDMyLjYxIDI3My4wMDggNDMyLjYzMUMyNzIuNzA1IDQzMi42NTIgMjcyLjQ1OSA0MzIuODIxIDI3Mi4yNjkgNDMzLjEyM0MyNzIuMDc5IDQzMy40MDQgMjcyLjAyMiA0MzMuNjk5IDI3Mi4wOTMgNDM0QzI3Mi4xNjMgNDM0LjI4MSAyNzIuMzI1IDQzNC41NDEgMjcyLjU4NiA0MzQuNzczQzI3Mi44NDYgNDM0Ljk4MyAyNzMuMTI4IDQzNS4xMSAyNzMuNDMgNDM1LjE1OUMyNzMuOTIzIDQzNS4yNzggMjc0LjUzNiA0MzUuMjA4IDI3NS4yNjEgNDM0Ljk0OEMyNzYuNTc3IDQzNC40NTcgMjc3LjQ3OCA0MzMuNjg1IDI3Ny45NzEgNDMyLjYzMUMyNzguMjAzIDQzMi4xMTkgMjc4LjMwMiA0MzEuNTIyIDI3OC4yNTMgNDMwLjg0MUMyNzguMTMzIDQyOS42OTcgMjc3LjY2OCA0MjguOTMyIDI3Ni44NDUgNDI4LjU2QzI3Ni4xNDEgNDI4LjE4NyAyNzUuMjExIDQyOC4yNDQgMjc0LjA2NCA0MjguNzM1QzI3My43NjEgNDI4Ljg5NyAyNzMuNTIyIDQyOC45MTEgMjczLjM2IDQyOC43N0MyNzMuMjE5IDQyOC42NzkgMjczLjE3IDQyOC41MDMgMjczLjIxOSA0MjguMjQ0QzI3My4yOSA0MjcuMjgyIDI3My42OTggNDI2LjUyNCAyNzQuNDUxIDQyNS45NjJDMjc0LjYxMyA0MjYuMDgxIDI3NC44MzggNDI2LjI2NCAyNzUuMTIgNDI2LjUyNEMyNzUuNDAxIDQyNi43MzQgMjc1LjY0OCA0MjYuODE4IDI3NS44NTkgNDI2Ljc2OUMyNzYuMTIgNDI2LjcyIDI3Ni4zMDMgNDI2LjU1OSAyNzYuNDIyIDQyNi4yNzhDMjc2LjUxNCA0MjUuOTk3IDI3Ni41MjggNDI1LjcxNiAyNzYuNDU3IDQyNS40MzVaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjY5LjM4OSA0MjkuNTA3QzI2OS4wNTkgNDI4LjY0NCAyNjguMzEyIDQyNy45NzcgMjY3LjEzNyA0MjcuNTA2QzI2Ni40MTIgNDI3LjIwNSAyNjUuNzk5IDQyNy4wNzEgMjY1LjMwNiA0MjcuMTJDMjY0LjUzMiA0MjcuMTkxIDI2My44MjggNDI3LjYyNiAyNjMuMTk0IDQyOC40MTlDMjYyLjgyMSA0MjguOTMyIDI2Mi40NTUgNDI5LjY5NyAyNjIuMTAzIDQzMC43MDFDMjYxLjY2IDQzMi4wMzUgMjYxLjQyIDQzMy4xMjMgMjYxLjM5OSA0MzMuOTY1QzI2MS4zNSA0MzUuMjUgMjYxLjY2NyA0MzYuMjk2IDI2Mi4zNSA0MzcuMDg5QzI2Mi43MDIgNDM3LjUzMiAyNjMuMTU5IDQzNy44NDggMjYzLjcyMiA0MzguMDM3QzI2NC4yODYgNDM4LjI0OCAyNjQuODI4IDQzOC4yNjkgMjY1LjM0MiA0MzguMTA3QzI2NS45MDUgNDM3Ljk0NiAyNjYuNTAzIDQzNy40OTcgMjY3LjEzNyA0MzYuNzc0QzI2OC4yMTQgNDM1LjQ4OSAyNjguOTY3IDQzMy45MyAyNjkuMzg5IDQzMi4xMDVDMjY5LjY1IDQzMS4wMzEgMjY5LjY1IDQzMC4xNiAyNjkuMzg5IDQyOS41MDdaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjY2LjQ2MSA0MjkuMjYyQzI2Ni41ODEgNDI5LjMzMiAyNjYuNjU4IDQyOS40OTMgMjY2LjcwNyA0MjkuNzUzTDI2Ni45ODkgNDMxLjY4NEMyNjcuMDggNDMyLjI0NSAyNjcuMTA5IDQzMi42NjcgMjY3LjA1OSA0MzIuOTQ3QzI2Ny4wMSA0MzMuMjA3IDI2Ni44ODMgNDMzLjUyMyAyNjYuNjcyIDQzMy44OTVDMjY2LjM0MSA0MzQuNDc4IDI2NS45MzMgNDM1LjA3NSAyNjUuNDQgNDM1LjY4NUMyNjUuMTU5IDQzNS45NjYgMjY0LjkyNiA0MzYuMTI4IDI2NC43MzYgNDM2LjE3N0MyNjQuNDU1IDQzNi4xOTggMjY0LjE5NCA0MzYuMDkzIDI2My45NjIgNDM1Ljg2MUMyNjMuMzQ5IDQzNS4yOTkgMjYzLjE4NyA0MzQuMzUyIDI2My40NjkgNDMzLjAxOEMyNjMuNzUxIDQzMS42MTQgMjY0LjI0MyA0MzAuNDY5IDI2NC45NDcgNDI5LjU3OEMyNjUuMDY3IDQyOS40MzcgMjY1LjE4IDQyOS4zMzIgMjY1LjI5OSA0MjkuMjYyTDI2NS42MTYgNDI5LjIyN0gyNjYuMTQ0TDI2Ni40NjEgNDI5LjI2MlpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMjU5LjI0NSA0MTcuMjU3QzI1OC40IDQxNi43NjUgMjU3LjQ1IDQxNi41NCAyNTYuMzk0IDQxNi41OUMyNTUuMzg3IDQxNi42MzkgMjU0LjQyMyA0MTYuOTIgMjUzLjUwOCA0MTcuNDMyQzI1MS45NTkgNDE4LjMyNCAyNTAuNjcxIDQxOS44MDUgMjQ5LjYzNiA0MjEuODlDMjQ5LjQyNSA0MjIuMjkgMjQ5LjMzMyA0MjIuNjI3IDI0OS4zNTQgNDIyLjkwOEMyNDkuMzU0IDQyMy4wOTggMjQ5LjQxMSA0MjMuMjczIDI0OS41MyA0MjMuNDM1QzI0OS42NzEgNDIzLjU3NSAyNDkuODI2IDQyMy42NTkgMjQ5Ljk4OCA0MjMuNjhDMjUwLjM0IDQyMy43MDEgMjUwLjY3MSA0MjMuNCAyNTAuOTczIDQyMi43NjhDMjUxLjI4MyA0MjIuMTU3IDI1MS42NDIgNDIxLjU5NSAyNTIuMDY1IDQyMS4wODNMMjUyLjU1NyA0MjQuODc0QzI1Mi43MTkgNDI2LjE4IDI1Mi44NzQgNDI3LjQwOCAyNTMuMDE1IDQyOC41NkMyNTIuNjI4IDQyOC42OTMgMjUyLjM2NyA0MjguODEyIDI1Mi4yNDEgNDI4LjkxMUMyNTEuOTggNDI5LjEgMjUxLjgwNCA0MjkuMzQ2IDI1MS43MTMgNDI5LjY0OEMyNTEuNTkzIDQyOS45NzggMjUxLjYyOCA0MzAuMjU5IDI1MS44MTggNDMwLjQ5QzI1Mi4wNzkgNDMwLjgyIDI1Mi41NTcgNDMwLjkzMyAyNTMuMjYxIDQzMC44NDFDMjUzLjI5IDQzMC44NDEgMjUzLjMxMSA0MzAuODI3IDI1My4zMzIgNDMwLjgwNkMyNTMuNjI3IDQzMi43NzIgMjUzLjkwOSA0MzQuNDkyIDI1NC4xNzcgNDM1Ljk2NkwyNTQuODQ1IDQzOS4yMzFDMjU0Ljk2NSA0MzkuODEzIDI1NS4xMjcgNDQwLjI4NCAyNTUuMzM4IDQ0MC42MzVDMjU1LjcxMSA0NDEuMjg4IDI1Ni4yNjcgNDQxLjY4OCAyNTYuOTkyIDQ0MS44MjhDMjU3LjQ2NCA0NDEuOTY5IDI1Ny44MTYgNDQxLjg5OSAyNTguMDQ4IDQ0MS42MThDMjU4LjIxIDQ0MS40MjggMjU4LjI3NCA0NDEuMTk3IDI1OC4yMjQgNDQwLjkxNkMyNTguMTc1IDQ0MC42NTYgMjU4LjA2MiA0NDAuNDM4IDI1Ny44NzIgNDQwLjI0OUMyNTcuNTQyIDQ0MC4wMTcgMjU3LjMyMyA0MzkuODEzIDI1Ny4yMDQgNDM5LjY1MkMyNTcuMDg0IDQzOS41MTIgMjU2Ljk3OCA0MzkuMjQ1IDI1Ni44ODcgNDM4Ljg0NUwyNTUuMTYyIDQzMC4zMTVDMjU2LjE2MiA0MjkuOTI5IDI1Ny4xMjYgNDI5LjM1MyAyNTguMDQ4IDQyOC41OTVDMjYwLjA5IDQyNi45OCAyNjEuMjg3IDQyNS4xNDEgMjYxLjYzOSA0MjMuMDg0QzI2MS44NSA0MjEuOTYgMjYxLjc0NCA0MjAuODU4IDI2MS4zMjIgNDE5Ljc4NEMyNjAuODc4IDQxOC42NjEgMjYwLjE4MSA0MTcuODE4IDI1OS4yNDUgNDE3LjI1N1pcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0yNTUuOTQ0IDQxOC42OTZDMjU3LjA3IDQxOC41MzQgMjU3Ljk4NSA0MTguODAxIDI1OC42ODkgNDE5LjUwM0MyNTkuMzkzIDQyMC4yMDUgMjU5LjY2MSA0MjEuMTY3IDI1OS40OTkgNDIyLjM4MkMyNTkuMzU4IDQyMy4yMjQgMjU4LjkyMSA0MjQuMTU4IDI1OC4xOTYgNDI1LjE5QzI1Ny4xNzYgNDI2LjU1OSAyNTYuMDE0IDQyNy41MjEgMjU0LjcxMiA0MjguMDY4TDI1My4xMjggNDIwLjA2NUMyNTMuMTg0IDQyMC4wMTYgMjUzLjI0NyA0MTkuOTczIDI1My4zMDQgNDE5LjkyNEMyNTQuMTk4IDQxOS4yMDEgMjU1LjA3OCA0MTguNzg3IDI1NS45NDQgNDE4LjY5NlpcIixcbiAgZmlsbDogXCJ3aGl0ZVwiXG59KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTSAxNjcuMDY1IDI3Ni45OTggQyAxNjYuNTM5IDI3Ny40MzkgMTY2LjE2NiAyNzguMDI3IDE2NS45MzUgMjc4Ljc2MiBDIDE2NS44ODYgMjc4Ljg3NCAxNjUuNzc4IDI3OS4yNjYgMTY1LjYxNiAyNzkuOTM4IEwgMTY1LjQ5MyAyODAuNzcgQyAxNjUuNDQ0IDI4MS41MDUgMTY1LjY1NSAyODIuMTY3IDE2Ni4xMzIgMjgyLjc1NCBDIDE2Ni42MjMgMjgzLjM1NyAxNjcuMjM3IDI4My43MSAxNjcuOTc0IDI4My44MDggQyAxNjguMjgzIDI4My44NDIgMTY4LjUgMjgzLjg5MSAxNjguNjEzIDI4My45NTUgQyAxNjguNzc1IDI4NC4wNTMgMTY4LjkyMiAyODQuMjI1IDE2OS4wNTUgMjg0LjQ3IEMgMTY5LjI4NSAyODQuNzk4IDE2OS40NDggMjg1LjA5NiAxNjkuNTQ2IDI4NS4zNzUgQyAxNjkuNzI4IDI4NS45MTUgMTY5Ljc1NyAyODYuNTg2IDE2OS42NDQgMjg3LjM4NSBDIDE2OS41NDYgMjg4LjAwNiAxNjkuMzg0IDI4OC40NzIgMTY5LjE1MyAyODguNzgxIEMgMTY4Ljg0NCAyODkuMTcyIDE2OC40MzEgMjg5LjM5MyAxNjcuOTI1IDI4OS40NDIgQyAxNjcuNDQ4IDI4OS41MDYgMTY3LjExNCAyODkuMzc4IDE2Ni45MTggMjg5LjA1IEMgMTY2LjgzNSAyODguOTAzIDE2Ni44MDUgMjg4LjY4MyAxNjYuODE5IDI4OC4zODkgQyAxNjYuODU0IDI4OC4wNjEgMTY2Ljg0NCAyODcuODM1IDE2Ni43OTUgMjg3LjcwMyBDIDE2Ni43MTIgMjg3LjQ3MyAxNjYuNTgzIDI4Ny4zMzYgMTY2LjQwMiAyODcuMjg2IEMgMTY2LjEyMiAyODcuMTc0IDE2NS44NTIgMjg3LjI2MiAxNjUuNTkxIDI4Ny41NTYgQyAxNjUuMTgzIDI4OC4wNDYgMTY1LjEyNSAyODguNjQ4IDE2NS40MTkgMjg5LjM2OSBDIDE2NS42MTYgMjg5Ljg3MyAxNjUuOTI1IDI5MC4zIDE2Ni4zNTMgMjkwLjY0MyBDIDE2Ni41IDI5MC43NzUgMTY2LjY0OCAyOTAuODUzIDE2Ni43OTUgMjkwLjg4OCBDIDE2Ni45NDIgMjkwLjkzNyAxNjcuMSAyOTAuOTYxIDE2Ny4yNjIgMjkwLjk2MSBDIDE2Ny45ODQgMjkxLjAyNSAxNjguNTI5IDI5MC45ODYgMTY4LjkwNyAyOTAuODM4IEMgMTY5LjE4OCAyOTAuNzA2IDE2OS40ODIgMjkwLjUwNSAxNjkuNzkxIDI5MC4yMjYgQyAxNzAuMzgxIDI4OS42ODggMTcwLjc3NCAyODkuMTE0IDE3MC45NzEgMjg4LjUxMiBDIDE3MS4wNjkgMjg4LjE2OCAxNzEuMTE4IDI4Ny42MiAxNzEuMTE4IDI4Ni44NyBDIDE3MS4xMTggMjg2LjE3IDE3MS4wODQgMjg1LjY0NiAxNzEuMDIgMjg1LjMwMiBDIDE3MC45MjIgMjg0Ljg5NSAxNzAuNzY0IDI4NC40NyAxNzAuNTU0IDI4NC4wMjkgQyAxNzAuMzA4IDI4My41MzkgMTcwLjA3NyAyODMuMTk1IDE2OS44NjUgMjgzIEMgMTY5LjUzNiAyODIuNzA1IDE2OS4wNyAyODIuNSAxNjguNDY2IDI4Mi4zODcgQyAxNjcuOTYgMjgyLjI3NCAxNjcuNjQgMjgyLjE2NyAxNjcuNTA3IDI4Mi4wNjkgQyAxNjcuMzYgMjgxLjk1NiAxNjcuMjI4IDI4MS43NzQgMTY3LjExNCAyODEuNTMgQyAxNjYuOTgyIDI4MS4yNyAxNjYuOTE4IDI4MS4wNjQgMTY2LjkxOCAyODAuOTE4IEMgMTY2LjkwMyAyODAuODE5IDE2Ni45MzIgMjgwLjYzMyAxNjcuMDE2IDI4MC4zNTQgTCAxNjcuMjg2IDI3OS40NzIgQyAxNjcuNTE3IDI3OC44ODQgMTY3LjY5NCAyNzguNTAyIDE2Ny44MjcgMjc4LjMyMSBDIDE2OC4xMzYgMjc3LjkyOSAxNjguNSAyNzcuNzQzIDE2OC45MDcgMjc3Ljc1OCBDIDE2OS4xMTkgMjc3Ljc3MiAxNjkuMzExIDI3Ny44NjUgMTY5LjQ3MyAyNzguMDI3IEMgMTY5LjYzNCAyNzguMTg4IDE2OS43MDggMjc4LjM3IDE2OS42OTQgMjc4LjU2NiBDIDE2OS42NzkgMjc4LjY2MyAxNjkuNjU0IDI3OC44MDEgMTY5LjYyIDI3OC45ODIgQyAxNjkuNjM0IDI3OS4xNDQgMTY5LjczMyAyNzkuMjc2IDE2OS45MTQgMjc5LjM3NCBDIDE3MC4wOTYgMjc5LjQ3MiAxNzAuMjczIDI3OS40ODcgMTcwLjQ1NSAyNzkuNDIzIEMgMTcwLjc4NCAyNzkuMzEgMTcwLjk4MSAyNzkuMDIxIDE3MS4wNDUgMjc4LjU2NiBDIDE3MS4xMDggMjc4LjEyNSAxNzEuMDA1IDI3Ny42OTMgMTcwLjcyNSAyNzcuMjY4IEMgMTcwLjQ2NSAyNzYuODYxIDE3MC4xMTEgMjc2LjU3MiAxNjkuNjY5IDI3Ni40MSBDIDE2OS4yNDIgMjc2LjI2MyAxNjguNzg0IDI3Ni4yNDggMTY4LjI5MyAyNzYuMzYxIEMgMTY3LjgzNyAyNzYuNDc0IDE2Ny40MjQgMjc2LjY4OSAxNjcuMDY1IDI3Ni45OTggWlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIixcbiAgdHJhbnNmb3JtOiBcIm1hdHJpeCgxLCAwLCAwLCAxLCAwLCAyLjg0MjE3MDk0MzA0MDQwMWUtMTQpXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0gMTYyLjgyMSAyNzguODExIEMgMTYyLjgyMSAyNzguMTg4IDE2Mi42NzMgMjc3Ljc5NyAxNjIuMzc4IDI3Ny42MzUgQyAxNjIuMTY3IDI3Ny41MjIgMTYxLjc5OSAyNzcuNTUyIDE2MS4yNzMgMjc3LjczMiBDIDE2MC41ODUgMjc3Ljg5NCAxNjAuMDcgMjc4LjAyNyAxNTkuNzI2IDI3OC4xMjUgQyAxNTkuMTM2IDI3OC4yNzIgMTU4LjY2OSAyNzguNDY4IDE1OC4zMjYgMjc4LjcxMyBDIDE1OC4wOTUgMjc4LjkwOCAxNTcuOTU3IDI3OS4wOSAxNTcuOTA4IDI3OS4yNTIgQyAxNTcuODA5IDI3OS41MzEgMTU3Ljg0OSAyNzkuNzQyIDE1OC4wMyAyNzkuODg4IEMgMTU4LjE3OCAyODAuMDIxIDE1OC40NjMgMjgwLjAzNSAxNTguODkgMjc5LjkzOCBMIDE2MS4yNzMgMjc5LjMwMSBMIDE2MS4yNzMgMjg1LjgxNiBDIDE2MS4zMDggMjg2LjM5IDE2MS4yODMgMjg2Ljg2IDE2MS4xOTkgMjg3LjIzNyBMIDE2MS4wNTIgMjg4LjExOSBDIDE2MS4wMzggMjg4LjI4MSAxNjEuMDI4IDI4OC41NzUgMTYxLjAyOCAyODkuMDAyIEMgMTYxLjAyOCAyODkuMzc4IDE2MS4wMDMgMjg5LjY3MiAxNjAuOTU0IDI4OS44ODMgQyAxNjAuODcgMjkwLjM1OCAxNjAuNjg0IDI5MC43NjUgMTYwLjM4OCAyOTEuMTA4IEMgMTU5Ljg5NyAyOTEuNjYyIDE1OS4xODUgMjkyLjAzOSAxNTguMjUyIDI5Mi4yMzUgQyAxNTcuODkzIDI5Mi4zMzMgMTU3LjU3OSAyOTIuMzQ4IDE1Ny4zMTkgMjkyLjI4NCBDIDE1Ny4xMzYgMjkyLjIyIDE1Ni45OTkgMjkyLjE3MSAxNTYuOTAxIDI5Mi4xMzcgQyAxNTYuNzM5IDI5Mi4wODggMTU2LjU5NiAyOTIuMDczIDE1Ni40ODMgMjkyLjA4OCBDIDE1Ni4zMDEgMjkyLjEwMyAxNTYuMTU0IDI5Mi4yMDEgMTU2LjA0MSAyOTIuMzgyIEMgMTU1LjkyOCAyOTIuNTQzIDE1NS44ODQgMjkyLjcyNSAxNTUuOTE4IDI5Mi45MjEgQyAxNTUuOTgyIDI5My4yNzkgMTU2LjIwMyAyOTMuNTU4IDE1Ni41ODIgMjkzLjc1NCBDIDE1Ni45ODkgMjkzLjk2NCAxNTcuNTE1IDI5NC4wMzMgMTU4LjE1MyAyOTMuOTQ5IEMgMTU4LjQ5NyAyOTMuODg2IDE1OC45OTggMjkzLjcwNCAxNTkuNjUyIDI5My40MTEgQyAxNjAuNjE5IDI5Mi45ODQgMTYxLjI4OCAyOTIuNTU0IDE2MS42NjYgMjkyLjExMyBDIDE2Mi4xNDMgMjkxLjU3MyAxNjIuNDE4IDI5MC44NTMgMTYyLjUwMSAyODkuOTU3IEMgMTYyLjUzNiAyODkuMzM0IDE2Mi41NzUgMjg4Ljg2OSAxNjIuNjI0IDI4OC41NiBMIDE2Mi43NDcgMjg3LjcwMyBDIDE2Mi43OTYgMjg3LjM2IDE2Mi44MjEgMjg2LjgzNiAxNjIuODIxIDI4Ni4xMzUgTCAxNjIuODIxIDI3OC44MTEgWlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIixcbiAgdHJhbnNmb3JtOiBcIm1hdHJpeCgxLCAwLCAwLCAxLCAwLCAyLjg0MjE3MDk0MzA0MDQwMWUtMTQpXCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICBjbGlwUGF0aDogXCJ1cmwoI2NsaXA3XzEyODhfMjUwMTIpXCIsXG4gIHRyYW5zZm9ybTogXCJtYXRyaXgoMC42OTc4NTgwOTUxNjkwNjc1LCAwLCAwLCAwLjY5Nzg1ODA5NTE2OTA2NzUsIC05OC4xNzY3MTIwMzYxMzI4MSwgLTIxLjY0OTM4MzU0NDkyMTg0NylcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTMyLjkxNiA3Mi42Mjg5QzEzMi41MzkgNzIuNTg4NiAxMzIuMTE5IDcyLjY1NzQgMTMxLjY3NSA3Mi44NDQxQzEzMS4zNjEgNzIuOTQyIDEzMS4wNDQgNzMuMDk1OCAxMzAuNzE5IDczLjMxMzlDMTMwLjAxNCA3My44NTY4IDEyOS40NzYgNzQuOTU5MSAxMjkuMTA0IDc2LjYzNTJDMTI4Ljk2NSA3Ny4yOTY4IDEyOC44NzggNzcuNzIyNyAxMjguODQ5IDc3LjkxNzJDMTI4LjgwOCA3OC4yOTQyIDEyOC44MjIgNzguNzE1NyAxMjguODk2IDc5LjE3MzdDMTI4Ljk5MiA3OS45ODkxIDEyOS4yODkgODAuNjUyNiAxMjkuNzkyIDgxLjE2MjNDMTI5Ljk4MiA4MS4zMjk5IDEzMC4zOTIgODEuNjA3NCAxMzEuMDEyIDgxLjk4NDRDMTMxLjgxMSA4Mi40MDIxIDEzMi4zNTIgODIuNjggMTMyLjY0OSA4Mi44MTQzQzEzMy4yODIgODMuMDc3NCAxMzMuODY1IDgzLjIyNTQgMTM0LjQwNyA4My4yNjI2QzEzNC41NzEgODMuMjgwMiAxMzQuODA5IDgzLjI5NTEgMTM1LjExMyA4My4zMTc0QzEzNS4zOTcgODMuMzQ1NiAxMzUuNjM3IDgzLjQwODIgMTM1LjgyNiA4My41MDczQzEzNi4wOTIgODMuNjMwNiAxMzYuMzg0IDgzLjkwMzggMTM2LjcwMyA4NC4zMzMzQzEzNi45NjUgODQuNjY0IDEzNy4xNiA4NC45ODExIDEzNy4yNzcgODUuMjg4NEMxMzcuNTkyIDg1LjkyNTMgMTM3LjcyNyA4Ni41Nzc1IDEzNy42ODQgODcuMjU3NEMxMzcuNjgxIDg3LjYyMjYgMTM3LjYxIDg3Ljk0NzEgMTM3LjQ2NyA4OC4yMTg0QzEzNy4xNjQgODguNzkzOCAxMzYuNzAyIDg5LjE0NDEgMTM2LjA3NCA4OS4yNzEzQzEzNS41MDggODkuMzc5IDEzNC45MzEgODkuMjQ5OCAxMzQuMzM1IDg4Ljg4NTdDMTM0LjA3NCA4OC43MTI3IDEzMy45MTYgODguNTM1MyAxMzMuODU3IDg4LjM0NzVDMTMzLjgwNCA4OC4xNzgzIDEzMy43ODkgODcuOTA4MiAxMzMuODExIDg3LjUzNzJDMTMzLjgxNCA4Ny4xNzE5IDEzMy43MjMgODYuODc3NiAxMzMuNTM4IDg2LjY2MDNDMTMzLjIgODYuMzA1MyAxMzIuNzk3IDg2LjI3MjggMTMyLjMzNCA4Ni41NTQ2QzEzMS45NDcgODYuNzkyMiAxMzEuNzI5IDg3LjE1NTQgMTMxLjY3OCA4Ny42NTI2QzEzMS42MjUgODcuOTkxOSAxMzEuNjc3IDg4LjQyMjUgMTMxLjgzOSA4OC45NDI0QzEzMS45MzggODkuNDEzMyAxMzIuMTE5IDg5Ljc5NjUgMTMyLjM2NyA5MC4wODM1QzEzMi42MjMgOTAuMzk1NSAxMzIuOTc1IDkwLjY2MzYgMTMzLjQxMSA5MC44OTE4QzEzNC4wODIgOTEuMjExNyAxMzQuNzk4IDkxLjM2NjMgMTM1LjU1MyA5MS4zNTc3QzEzNi4zMTYgOTEuMzc0MiAxMzcuMDI2IDkxLjIyMTYgMTM3LjY4MyA5MC44OTk4QzEzOC4wNzggOTAuNjg3MyAxMzguMzY5IDkwLjQ5MzUgMTM4LjU2OCA5MC4zMTQ2QzEzOS4zNDkgODkuNjU5IDEzOS43ODUgODguODQ5NSAxMzkuODc1IDg3Ljg3OTlDMTM5LjkzMSA4Ny4xNzUzIDEzOS43MjkgODYuMTUyNCAxMzkuMjYxIDg0LjgwN0MxMzguOTcgODQuMDI1MyAxMzguNjk0IDgzLjQ3MjEgMTM4LjQzMiA4My4xNDE0QzEzOC4yMzQgODIuODgwMyAxMzcuODI3IDgyLjUyNiAxMzcuMjA2IDgyLjA4MDVDMTM2LjQ5NSA4MS41NjY5IDEzNS45MDQgODEuMjgzOSAxMzUuNDI1IDgxLjIyNzFDMTM0LjkyMiA4MS4yMjU5IDEzNC41NDQgODEuMjA2MyAxMzQuMzA0IDgxLjE2NDRDMTM0LjA5IDgxLjE0MTcgMTMzLjcxNiA4MS4wMDM5IDEzMy4xNzkgODAuNzU5MkwxMzEuNzA3IDgwLjAxNTRDMTMxLjMwOSA3OS43NzU1IDEzMS4wNjQgNzkuNTQyNiAxMzAuOTczIDc5LjMxNjdDMTMwLjg4OSA3OS4xMTU5IDEzMC44OCA3OC44NDM4IDEzMC45NTggNzguNDk2NkMxMzEuMDA0IDc4LjA0OTIgMTMxLjExNCA3Ny4zODI5IDEzMS4zIDc2LjUwMDJDMTMxLjQyNyA3NS45NTg5IDEzMS41NTEgNzUuNTgzNSAxMzEuNjc2IDc1LjM4NjZDMTMxLjk2OCA3NC45OTk5IDEzMi4zMDMgNzQuODEzMSAxMzIuNjc0IDc0LjgzNDdDMTMyLjkwMiA3NC45MDEyIDEzMy4xNzkgNzUuMTkyOSAxMzMuNDk5IDc1LjcxMTVDMTMzLjc1IDc2LjIzMSAxMzQuMDcgNzYuNDQwNCAxMzQuNDUzIDc2LjM0MThDMTM0Ljg2OCA3Ni4yODExIDEzNS4wNTIgNzUuOTAwNyAxMzQuOTk1IDc1LjIxMDVDMTM0LjkwNyA3NC41NTEgMTM0LjcwNiA3My45OTUxIDEzNC40MDUgNzMuNTM5MUMxMzQuMDIyIDczLjAzOTkgMTMzLjUyMSA3Mi43MzU4IDEzMi45MTYgNzIuNjI4OVpcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMjEuMjg0IDc4LjI4MjlDMTIxLjQ0NSA3OC41NzY1IDEyMS43NjkgNzguNjY3OCAxMjIuMjY2IDc4LjU2MDlDMTIzLjM4NiA3OC4zOTczIDEyNC4zMTQgNzcuODM5OSAxMjUuMDU0IDc2LjkwMTNMMTI2LjU4MiA4MS41NzkxQzEyNi44NTUgODIuNDU1OSAxMjcuMDEyIDgzLjExNDggMTI3LjA2MiA4My41NTk4TDEyNy4xNDcgODQuNDk1NEMxMjcuMTgxIDg0Ljc1OTYgMTI3LjI4MyA4NS4xNTM4IDEyNy40NDUgODUuNjczN0MxMjcuNTU3IDg2LjE4ODQgMTI3LjYyNCA4Ni41Nzk5IDEyNy42NCA4Ni44NUwxMjcuNjE4IDg4LjQzNzNDMTI3LjY0NyA4OC43NTEyIDEyNy42MjEgODkuMDQxMyAxMjcuNTQ4IDg5LjMxOEMxMjcuMzg4IDkwLjI4MjEgMTI2Ljg2OSA5MC45NTkzIDEyNS45NzkgOTEuMzUzNUMxMjUuMzA3IDkwLjk2NTIgMTI0LjgwMiA5MC44NDc3IDEyNC40NTggOTEuMDAzMUMxMjQuMjMyIDkxLjA5NDMgMTI0LjA4MSA5MS4yNzIgMTI0LjAwMSA5MS41MjM3QzEyMy45MTUgOTEuNzU2NiAxMjMuOTA4IDkxLjk5OTMgMTIzLjk4NiA5Mi4yNDk4QzEyNC4xMTcgOTIuNjY5NSAxMjQuNDI4IDkzLjAwNTMgMTI0LjkyMiA5My4yNjM3QzEyNS4yNTEgOTMuNDM2IDEyNS41MjggOTMuNTA3NiAxMjUuNzQ5IDkzLjQ4NjlDMTI1Ljg2MiA5My40NzI0IDEyNi4wMjkgOTMuNDM0IDEyNi4yNjEgOTMuMzYxNkwxMjYuOTUxIDkzLjE0NjNDMTI3LjIwMyA5My4wNjgxIDEyNy4zODUgOTIuOTkwNiAxMjcuNDk3IDkyLjkwNzZDMTI3LjYxNyA5Mi44NDk3IDEyNy44ODcgOTIuNjE0IDEyOC4zMTEgOTIuMjA2OUMxMjguODUyIDkxLjU3NzkgMTI5LjIwMyA5MS4wOTA1IDEyOS4zNyA5MC43NDI5QzEyOS42MzUgOTAuMiAxMjkuNzc0IDg5LjU2NTUgMTI5Ljc3MiA4OC44MzA3QzEyOS43NjEgODguMzUzMiAxMjkuNjkyIDg3LjY4NzcgMTI5LjU2MyA4Ni44MzQ0TDEyOS4zOTggODUuNzUyQzEyOS4yNyA4NC44OTg2IDEyOS4yIDg0LjQ1MzIgMTI5LjE4NiA4NC40MDkzTDEyOS4wMDEgODMuMjY0NEMxMjguOTM0IDgyLjg5MzYgMTI4Ljc4MSA4Mi4zMzY2IDEyOC41NDYgODEuNTg1TDEyNy4zNzUgNzcuODI3MUMxMjcuMTkzIDc3LjI0NDYgMTI3LjEwMyA3Ni44NDY1IDEyNy4xMDggNzYuNjM5MUMxMjcuMTAxIDc2LjAyMjUgMTI3LjA4OSA3NS42OTY1IDEyNy4wNzUgNzUuNjUyNkMxMjcuMDAyIDc1LjI2MzEgMTI2Ljc1NCA3NC45OTY5IDEyNi4zNDMgNzQuODUwMUMxMjYuMDM5IDc0Ljc1OTMgMTI1LjY4MSA3NC43ODE2IDEyNS4yNjEgNzQuOTEyN0MxMjQuNjk2IDc1LjA4ODkgMTI0LjA5MiA3NS40MjgyIDEyMy40NDIgNzUuOTI2NUMxMjIuNzI5IDc2LjUxMjkgMTIyLjE5MiA3Ni45NTUyIDEyMS44MjUgNzcuMjU1NEMxMjEuMzUxIDc3LjY1NzQgMTIxLjE3NCA3Ny45OTQ0IDEyMS4yODQgNzguMjgyOVpcIixcbiAgZmlsbDogXCIjMDIxMDQ4XCJcbn0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICBkOiBcIk0xMTUuMzExIDgwLjExMDlDMTE1LjEwNSA3OS42MDQ4IDExNC44NzggNzkuMzM5IDExNC42MiA3OS4zM0MxMTQuMzggNzkuMjg4MSAxMTQuMjA5IDc5LjQwMzEgMTE0LjEwNCA3OS42NjI3QzExNC4wNjcgNzkuODMyMiAxMTQuMDc2IDgwLjAxNSAxMTQuMTM1IDgwLjIwMjlMMTE1LjkxMSA4Ny4wMDIzQzExNS4yNzUgODcuMzkzIDExNC43MDYgODcuODg2NiAxMTQuMjA3IDg4LjQ5NTdDMTEzLjkwOCA4OC44NjM2IDExMy43OTggODkuMTcyOCAxMTMuODc2IDg5LjQyMzRDMTEzLjkxIDg5LjU5ODQgMTE0LjAyMiA4OS43MzU0IDExNC4yMTEgODkuODM0NEMxMTQuMzk0IDg5LjkxNDcgMTE0LjU4NyA4OS45MzcgMTE0Ljc4MSA4OS44OTcxQzExNS4wNDYgODkuODYyNiAxMTUuMzg0IDg5LjY4ODQgMTE1Ljc5IDg5LjM3NjVDMTE2LjAwNSA4OS4yMjY5IDExNi4yMDkgODkuMDg3NiAxMTYuNDEyIDg4Ljk0MkwxMTcuMDg3IDkxLjU0OUMxMTcuNzU2IDk0LjEzNzMgMTE4LjMwNCA5Ni4wNjk1IDExOC43MjcgOTcuMzYwMUMxMTguODgzIDk3Ljg2MTIgMTE5LjA3MiA5OC4xODAyIDExOS4zIDk4LjMxNTNDMTE5LjQ1MiA5OC40MjYgMTE5LjYzNiA5OC40NjQ4IDExOS44NDkgOTguNDE5QzEyMC4wNTEgOTguNDA0MSAxMjAuMjE5IDk4LjMyNDMgMTIwLjM2MyA5OC4xOUMxMjAuNjc1IDk3Ljg2NTkgMTIwLjY5NyA5Ny4yNzQ4IDEyMC40MyA5Ni40MTY4TDExOS4yNTQgOTIuODY2M0MxMTguOTg5IDkyLjE3MjMgMTE4Ljc5OSA5MS41MTcgMTE4LjY4IDkwLjkxNDlMMTE4LjQ1OCA4OS41NDFDMTE4LjM5MyA4OS4xNzY1IDExOC4yNjUgODguNzAwOSAxMTguMDgyIDg4LjExMjJDMTE4LjExMyA4OC4xMDI0IDExOC4xNDQgODguMDkyNiAxMTguMTc2IDg4LjA4MjhDMTE4Ljg0NyA4Ny44MDQ5IDExOS4yMzkgODcuNjI3NiAxMTkuMzUxIDg3LjU0NDZDMTE5Ljc2MiA4Ny4xNjIyIDExOS44NTEgODYuNzg0MSAxMTkuNjEzIDg2LjM5NzdDMTE5LjM4MyA4Ni4wMzY0IDExOC45NTEgODUuOTMwNyAxMTguMzEgODYuMDgyNUMxMTguMDExIDg2LjE0MTIgMTE3LjcyMSA4Ni4yMDQyIDExNy40NDMgODYuMjg0MUwxMTUuMzExIDgwLjExMDlaXCIsXG4gIGZpbGw6IFwiIzAyMTA0OFwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgZDogXCJNMTA4LjY0OCA5Ni4wN0MxMDguNzkxIDk2LjUyNzIgMTA4Ljk3OCA5Ni44NjA3IDEwOS4yIDk3LjA2NjJDMTA5LjUxOSA5Ny4zNTg2IDEwOS45ODYgOTcuNDg3OCAxMTAuNTk2IDk3LjQ1NTdDMTEwLjk0MyA5Ny40NjQ0IDExMS40NjIgOTcuNDA1NyAxMTIuMTU5IDk3LjI3NzdDMTEyLjg3NCA5Ny4xNDM4IDExMy4zNDkgOTcuMjk4MSAxMTMuNTc0IDk3LjcyOTlDMTEzLjc1OSA5OC4xMDQ5IDExMy42OTEgOTguNTA0MSAxMTMuMzYyIDk4LjkyOTZDMTEyLjk2NCA5OS40ODY3IDExMi40MTUgOTkuODIyOSAxMTEuNzEgOTkuOTI1OEwxMTEuMTc5IDk5Ljk4ODRDMTEwLjk2NiAxMDAuMDM0IDExMC43ODQgMTAwLjA5MSAxMTAuNjQ1IDEwMC4xNTVDMTEwLjQxNCAxMDAuMjk2IDExMC4yNzggMTAwLjUyNCAxMTAuMjM3IDEwMC44MzJDMTEwLjE5NSAxMDEuMTQgMTEwLjI0NiAxMDEuNDEzIDExMC4zODYgMTAxLjY0NEMxMTAuNjkzIDEwMi4xMTkgMTExLjE4OCAxMDIuMzM2IDExMS44NiAxMDIuMjg0QzExMi40MDEgMTAyLjI1MyAxMTIuOTI1IDEwMi4wNTUgMTEzLjQzMSAxMDEuNjkxQzExNC41NTcgMTAwLjk0OSAxMTUuMjU2IDEwMC4wNzggMTE1LjU0MiA5OS4wNzQ1QzExNS43MTQgOTguNTE5NSAxMTUuNzI5IDk3Ljk1MTEgMTE1LjU5OCA5Ny4zNzM3QzExNS40NTIgOTYuNzUyNSAxMTUuMTY0IDk2LjI3MTggMTE0LjczMyA5NS45MjUzQzExMy44NDUgOTUuMjE5NSAxMTIuNDQ4IDk1LjExMjIgMTEwLjUzOSA5NS42MTc5QzExMC40MzMgOTUuMTIxOSAxMTAuNTIgOTQuNjI3NSAxMTAuNzk4IDk0LjEyODVDMTExLjA4MiA5My42NDgyIDExMS40NjMgOTMuMzIzMyAxMTEuOTQgOTMuMTUzOEMxMTIuMTM1IDkzLjYyMjQgMTEyLjMyNiA5My45NDc3IDExMi41MjMgOTQuMTQwM0MxMTIuODk3IDk0LjQ1NjYgMTEzLjI0OCA5NC41MTkyIDExMy41OCA5NC4zMjYyQzExMy44MzcgOTIuOTQwNSAxMTMuNjY0IDkyLjAxMTYgMTEzLjA1NCA5MS41MzUyQzExMi40NjkgOTEuMDUxIDExMS43MjMgOTEuMDIyNCAxMTAuODIxIDkxLjQ0MTJDMTA5Ljk3NSA5MS44MjE2IDEwOS4zMzcgOTIuNDY3NSAxMDguOTExIDkzLjM3NjhDMTA4LjUwNCA5NC4yODAzIDEwOC40MTkgOTUuMTc5NCAxMDguNjQ4IDk2LjA3WlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEwNy41MTkgOTYuNDIyM0MxMDcuMDU3IDk1LjYwNDEgMTA2LjU1MSA5NS4wMTk3IDEwNi4wMDUgOTQuNjYwN0MxMDUuNDU5IDk0LjMwMTcgMTA0LjgyOCA5NC4xNTQ5IDEwNC4xMTIgOTQuMjIwM0MxMDMuMzk1IDk0LjI4NTYgMTAyLjc3MyA5NC41MjA5IDEwMi4yMzYgOTQuOTQyNEMxMDEuMTc1IDk1LjczMzkgMTAwLjYwNyA5Ni44OTM3IDEwMC41MzQgOTguNDI4MkMxMDAuNDg4IDk5LjM4NDEgMTAwLjcxMyAxMDAuNTkyIDEwMS4yMiAxMDIuMDYzQzEwMS4zOTUgMTAyLjYyNyAxMDEuNTg5IDEwMy4wMjcgMTAxLjc5OSAxMDMuMjU3QzEwMi4wOTkgMTAzLjYyNCAxMDIuNTIgMTAzLjg3IDEwMy4wNjIgMTAzLjk5N0MxMDMuODY1IDEwNC4yMDcgMTA0LjY4OCAxMDQuMTk3IDEwNS41MzcgMTAzLjk4MUMxMDYuMzY2IDEwMy43NyAxMDcuMDc5IDEwMy4zNjMgMTA3LjY3MSAxMDIuNzY2QzEwOC4wODMgMTAyLjM4MyAxMDguMjgzIDEwMi4wMTEgMTA4LjI4NyAxMDEuNjQ2QzEwOC4zMDQgMTAxLjQxNCAxMDguMjM3IDEwMS4yMDEgMTA4LjA5MSAxMDEuMDJDMTA3Ljk2NCAxMDAuODMzIDEwNy43NzkgMTAwLjcyNSAxMDcuNTQ3IDEwMC43MDlDMTA3LjI5NSAxMDAuNzE4IDEwNy4wMDQgMTAwLjg5MSAxMDYuNjczIDEwMS4yMjFDMTA2LjI0MyAxMDEuNTQxIDEwNS44MiAxMDEuNzk3IDEwNS40IDEwMS45OTZDMTA0LjkxMiAxMDIuMTk3IDEwNC40NjUgMTAyLjI2NyAxMDQuMDU1IDEwMi4yMUMxMDMuNjQ0IDEwMi4xNTIgMTAzLjMwMyAxMDEuOTQyIDEwMy4wMjggMTAxLjU2OEMxMDIuNzY2IDEwMS4xNjggMTAyLjY3NCAxMDAuNzY0IDEwMi43NTEgMTAwLjM0OEMxMDQuMjMyIDk5Ljc5NzIgMTA1LjY3IDk5LjEwODMgMTA3LjA2NSA5OC4yODE2QzEwNy40NjEgOTguMDY5MSAxMDcuNyA5Ny44NDMyIDEwNy43ODYgOTcuNjEwM0MxMDcuODk2IDk3LjMwMTEgMTA3LjgwNiA5Ni45MDMgMTA3LjUxOSA5Ni40MjIzWlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTEwMy4wMDkgOTYuODY2NEMxMDMuMDUxIDk2LjcxNTcgMTAzLjExNiA5Ni42MTMxIDEwMy4xOTEgOTYuNTY4OUwxMDMuNDY0IDk2LjQ0OTVMMTA0LjI0OSA5Ni4yMDQ5TDEwNC42MDQgOTYuMTI4NkMxMDQuNjUzIDk2LjEzMzYgMTA0LjgyNiA5Ni4yNDQ4IDEwNS4xMTcgOTYuNDQ5NkMxMDUuNDAyIDk2LjYzNTUgMTA1LjU0NSA5Ni43NjI3IDEwNS41NDYgOTYuODMxMkwxMDQuMDggOTcuODcyNEMxMDMuMzggOTguMzQ0OSAxMDIuODUxIDk4LjYxMyAxMDIuNTA0IDk4LjY3MjlDMTAyLjY0MiA5OC4wMTEzIDEwMi44MTMgOTcuNDA4NSAxMDMuMDA5IDk2Ljg2NjRaXCIsXG4gIGZpbGw6IFwid2hpdGVcIlxufSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gIGQ6IFwiTTg2LjgyOTcgOTEuMzYyMkM4Ni44Mjk3IDkxLjM2MjIgODYuODQ5MiA5MS40MjQ4IDg2Ljg1OSA5MS40NTYxQzg2Ljg2OTIgOTEuNDY2NyA4Ni44NzExIDkxLjQ3MjkgODYuODY4OCA5MS40ODc0Qzg2Ljc3NzEgOTEuNzAxNSA4Ni44MDUzIDkyLjA1NyA4Ni45NjE1IDkyLjU1OEM4Ny4zMTg5IDkzLjcwNDIgODcuNjE2MSA5NC45NDQ3IDg3Ljg0MzEgOTYuMjY5TDg5LjQ5NiAxMDUuNTQ2Qzg5LjgzNTcgMTA3LjM2NSA5MC4xMzA4IDEwOC43MDkgOTAuMzcxMyAxMDkuNTY4QzkwLjU0OCAxMTAuMjkgOTAuNzc0NCAxMTAuODE3IDkxLjAzNTkgMTExLjE0OEM5MS40NTc2IDExMS42ODMgOTEuOTQ5OCAxMTEuOTE0IDkyLjUyOTEgMTExLjg1MUM5Mi44MTI3IDExMS44MSA5My4wNTI5IDExMS42NTMgOTMuMjQ1NCAxMTEuMzg3QzkzLjQzNzggMTExLjEyMSA5My40OTUgMTEwLjg2MiA5My40MTY5IDExMC42MTJDOTMuMzY0MiAxMTAuNDQzIDkzLjI1NTQgMTEwLjI3IDkzLjA4NDIgMTEwLjA5N0M5Mi44ODA2IDEwOS44ODYgOTIuNzI3OSAxMDkuNzI3IDkyLjYyNiAxMDkuNjIxQzkyLjQyNzUgMTA5LjM2IDkyLjI5NDMgMTA4Ljk1NSA5Mi4yMTM5IDEwOC40MUw4OS44NzQ2IDk2LjA0NzlMOTUuMzI0MyAxMDQuNjkxQzk1LjgzNDQgMTA1LjM3NyA5Ni40NDg4IDEwNi4wNDUgOTcuMTU1IDEwNi42OTdDOTcuNjg4NiAxMDcuMTUgOTguMTE2MSAxMDcuMzk0IDk4LjQ1MDIgMTA3LjQyN0M5OC43MTU2IDEwNy40NjIgOTguOTYgMTA3LjQwNiA5OS4xOTE1IDEwNy4yNjVDOTkuMjA4NCAxMDcuMjUzIDk5LjIyOTYgMTA3LjIzMyA5OS4yNDQ1IDEwNy4yMTRDOTkuMzM5NCAxMDcuMjUzIDk5LjQ0MjkgMTA3LjI3NiA5OS41NDQ0IDEwNy4yOTJDOTkuODc4NSAxMDcuMzI2IDEwMC4xNjUgMTA3LjI1IDEwMC40MDIgMTA3LjA2QzEwMC42IDEwNi44MTIgMTAwLjYxMyAxMDYuNDc4IDEwMC40MzIgMTA2LjA1NEw5OS44NTY4IDEwNS4yMDJDOTkuNTU2MiAxMDQuNzQ2IDk5LjI5MTkgMTAzLjgzMiA5OS4wNzAxIDEwMi40NThDOTguNzMyOSAxMDAuOTM1IDk4LjUwMjEgOTkuNzk3IDk4LjM4MDQgOTkuMDMxTDk4LjA5MjMgOTcuMzM0Qzk3LjcyMTcgOTQuODg2MyA5Ny4yMDI4IDkyLjc4MDMgOTYuNTM1NyA5MS4wMTZDOTYuMjk2NCA5MC40MDM0IDk2LjEzMTEgODkuOTM5NiA5Ni4wMzM1IDg5LjYyNjRDOTUuODM4OSA4OS4wNjg2IDk1LjcwNzQgODguNTgwNCA5NS42NDcxIDg4LjE2NjNDOTUuNjExNiA4Ny43NjUgOTUuNTU1MSA4Ny40NzM0IDk1LjQ3NzYgODcuMjkxNEM5NS4zMjI0IDg2Ljk0ODEgOTUuMDk3MSA4Ni43Nzc4IDk0LjgwMTggODYuNzgwNUM5NC40ODczIDg2LjgwOTkgOTQuMjgyIDg2Ljk5MDcgOTQuMTc3NyA4Ny4zMTg4Qzk0LjExMDcgODcuNTQ1OCA5NC4xMDcyIDg3LjgyMTggOTQuMTYwOSA4OC4xNDg2Qzk0LjIwOTUgODguNTI1MiA5NC40MDM0IDg5LjMyMzggOTQuNzM2MyA5MC41NDYyTDk1LjI2NzEgOTIuNTc5OEM5NS43NDc2IDk0LjYyOTEgOTYuMTI1NiA5Ni44MTMzIDk2LjQxMzcgOTkuMTI4OEw5Ni45OTY3IDEwMS42NjFDOTcuMDc1NSAxMDEuOTggOTcuMTQwOCAxMDIuNDU1IDk3LjE5NjkgMTAzLjA3N0M5Ny4yMjA2IDEwMy4yNDEgOTcuMjUyMSAxMDMuNDMgOTcuMzAwMSAxMDMuNjI4Qzk3LjAzNjIgMTAzLjMxMiA5Ni43ODcyIDEwMi45NzcgOTYuNTQwNiAxMDIuNjI4TDg5LjMxOTUgOTEuNjE2N0M4OC45ODAxIDkxLjEyNDYgODguNzA5OSA5MC44MTAzIDg4LjUwNyA5MC42Njc0Qzg4LjA4ODkgOTAuMzY0OCA4Ny43MTAyIDkwLjI3NjcgODcuMzU4MyA5MC40MDdDODcuMTcgOTAuNDY1OCA4Ny4wMTc3IDkwLjU5NTcgODYuODkzMiA5MC43OTI2Qzg2Ljc2ODYgOTAuOTg5NSA4Ni43NTIzIDkxLjE4MDEgODYuODI5NyA5MS4zNjIyWlwiLFxuICBmaWxsOiBcIiMwMjEwNDhcIlxufSkpKTtcbmV4cG9ydCB7IFJvY2tldFNWRyB9O1xuZXhwb3J0IGRlZmF1bHQgUm9ja2V0U1ZHOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCBEaXNjb3JkTG9nbyA9ICgpID0+IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgdmlld0JveDogXCIxMTUuMjM3IDExNS40NjIgNjYuODk4IDY2Ljg5OFwiLFxuICB3aWR0aDogXCI2Ni44OThcIixcbiAgaGVpZ2h0OiBcIjY2Ljg5OFwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICB0cmFuc2Zvcm06IFwibWF0cml4KDAuMzM0NDkxMDQ0MjgyOTEzMiwgMCwgMCwgMC4zMzQ0OTEwNDQyODI5MTMyLCA5My44MjkzOTE0Nzk0OTIxOSwgMTA5Ljc3NTY3MjkxMjU5NzY2KVwiXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRlZnNcIiwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgaWQ6IFwiU1ZHSURfMV9cIixcbiAgeDogXCI3OFwiLFxuICB5OiBcIjMxXCIsXG4gIHdpZHRoOiBcIjE3MlwiLFxuICBoZWlnaHQ6IFwiMTcyXCJcbn0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjbGlwUGF0aFwiLCB7XG4gIGlkOiBcIlNWR0lEXzJfXCJcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gIHg6IFwiNzhcIixcbiAgeTogXCIzMVwiLFxuICB3aWR0aDogXCIxNzJcIixcbiAgaGVpZ2h0OiBcIjE3MlwiLFxuICBzdHlsZToge1xuICAgIG92ZXJmbG93OiAndmlzaWJsZSdcbiAgfVxufSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImdcIiwge1xuICBjbGFzc05hbWU6IFwic3QwXCIsXG4gIGNsaXBQYXRoOiBcInVybCgnI1NWR0lEXzJfJylcIlxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgY2xhc3NOYW1lOiBcInN0MVwiLFxuICBkOiBcIk03OCwxMTYuOEM3OCw2OS40LDExNi40LDMxLDE2My44LDMxYzQ3LjQsMCw4NS44LDM4LjQsODUuOCw4NS44cy0zOC40LDg1LjgtODUuOCw4NS44YzAsMCwwLDAsMCwwICAgIEMxMTYuNCwyMDIuNSw3OCwxNjQuMSw3OCwxMTYuOEM3OCwxMTYuOCw3OCwxMTYuOCw3OCwxMTYuOHpcIixcbiAgZmlsbDogXCJyZ2IoODgsIDEwMSwgMjQyKVwiXG59KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgY2xhc3NOYW1lOiBcInN0MlwiLFxuICBkOiBcIk0yMDIuNCw4MS45Yy03LjMtMy4zLTE0LjktNS43LTIyLjgtN2MtMSwxLjgtMi4xLDQuMS0yLjksNmMtOC40LTEuMy0xNi45LTEuMy0yNS4zLDBjLTAuOS0yLjEtMS45LTQuMS0zLTYgICAgYy03LjksMS4zLTE1LjYsMy43LTIyLjgsNy4xYy0xNC40LDIxLjUtMTguMyw0Mi40LTE2LjQsNjMuMWM4LjUsNi4zLDE3LjksMTEuMSwyOCwxNC4xYzIuMy0zLjEsNC4zLTYuMyw2LTkuNyAgICBjLTMuMy0xLjItNi40LTIuNy05LjQtNC41YzAuOC0wLjYsMS41LTEuMiwyLjMtMS44YzE3LjcsOC40LDM4LjMsOC40LDU2LDBjMC44LDAuNiwxLjUsMS4yLDIuMywxLjhjLTMsMS44LTYuMiwzLjMtOS41LDQuNSAgICBjMS43LDMuNCwzLjcsNi42LDYsOS43YzEwLjEtMy4xLDE5LjYtNy44LDI4LTE0LjFDMjIxLjEsMTIxLjEsMjE0LjksMTAwLjMsMjAyLjQsODEuOXogTTE0NS42LDEzMi4zYy01LjUsMC05LjktNS05LjktMTEuMSAgICBzNC40LTExLjIsOS45LTExLjJjNS42LDAsMTAsNSwxMCwxMS4yQzE1NS41LDEyNy4zLDE1MS4yLDEzMi4zLDE0NS42LDEzMi4zeiBNMTgyLjQsMTMyLjNjLTUuNSwwLTkuOS01LTkuOS0xMS4xICAgIHM0LjQtMTEuMiw5LjktMTEuMmM1LjYsMCwxMCw1LDkuOSwxMS4yUzE4Ny45LDEzMi4zLDE4Mi40LDEzMi4zelwiLFxuICBmaWxsOiBcInJnYigyNTUsIDI1NSwgMjU1KVwiXG59KSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICB4OiBcIjExNS4yMzdcIixcbiAgeTogXCIxMTUuNDYyXCIsXG4gIGNsYXNzTmFtZTogXCJzdDNcIixcbiAgd2lkdGg6IFwiNjYuODk4XCIsXG4gIGhlaWdodDogXCI2Ni44OThcIixcbiAgZmlsbDogXCJub25lXCJcbn0pKTtcbmV4cG9ydCB7IERpc2NvcmRMb2dvIH07XG5leHBvcnQgZGVmYXVsdCBEaXNjb3JkTG9nbzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQm94LCBCdXR0b24sIEgyLCBINSwgSWxsdXN0cmF0aW9uLCBUZXh0IH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vaG9va3MvaW5kZXguanMnO1xuaW1wb3J0IFJvY2tldFNWRyBmcm9tICcuL3V0aWxzL3JvY2tldC1zdmcuanMnO1xuaW1wb3J0IERpc2NvcmRMb2dvIGZyb20gJy4vdXRpbHMvZGlzY29yZC1sb2dvLXN2Zy5qcyc7XG5jb25zdCBwYWdlSGVhZGVySGVpZ2h0ID0gMzAwO1xuY29uc3QgcGFnZUhlYWRlclBhZGRpbmdZID0gNzQ7XG5jb25zdCBwYWdlSGVhZGVyUGFkZGluZ1ggPSAyNTA7XG5leHBvcnQgY29uc3QgRGFzaGJvYXJkSGVhZGVyID0gKCkgPT4ge1xuICBjb25zdCB7XG4gICAgdHJhbnNsYXRlTWVzc2FnZVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIFwiZGF0YS1jc3NcIjogXCJkZWZhdWx0LWRhc2hib2FyZFwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsXG4gICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgYmc6IFwid2hpdGVcIixcbiAgICBoZWlnaHQ6IHBhZ2VIZWFkZXJIZWlnaHQsXG4gICAgcHk6IHBhZ2VIZWFkZXJQYWRkaW5nWSxcbiAgICBweDogWydkZWZhdWx0JywgJ2xnJywgcGFnZUhlYWRlclBhZGRpbmdYXVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgIHRvcDogMzAsXG4gICAgbGVmdDogMCxcbiAgICBvcGFjaXR5OiAwLjksXG4gICAgYW5pbWF0ZTogdHJ1ZSxcbiAgICBkaXNwbGF5OiBbJ25vbmUnLCAnbm9uZScsICdub25lJywgJ2Jsb2NrJ11cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm9ja2V0U1ZHLCBudWxsKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHtcbiAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgY29sb3I6IFwiZ3JleTEwMFwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEgyLCB7XG4gICAgZm9udFdlaWdodDogXCJib2xkXCJcbiAgfSwgdHJhbnNsYXRlTWVzc2FnZSgnd2VsY29tZU9uQm9hcmRfdGl0bGUnKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHtcbiAgICBvcGFjaXR5OiAwLjhcbiAgfSwgdHJhbnNsYXRlTWVzc2FnZSgnd2VsY29tZU9uQm9hcmRfc3VidGl0bGUnKSkpKSk7XG59O1xuY29uc3QgYm94ZXMgPSAoe1xuICB0cmFuc2xhdGVNZXNzYWdlXG59KSA9PiBbe1xuICB2YXJpYW50OiAnRGV0YWlscycsXG4gIHRpdGxlOiB0cmFuc2xhdGVNZXNzYWdlKCdhZGRpbmdSZXNvdXJjZXNfdGl0bGUnKSxcbiAgc3VidGl0bGU6IHRyYW5zbGF0ZU1lc3NhZ2UoJ2FkZGluZ1Jlc291cmNlc19zdWJ0aXRsZScpLFxuICBocmVmOiAnaHR0cHM6Ly9kb2NzLmFkbWluanMuY28vYmFzaWNzL3Jlc291cmNlI3Byb3ZpZGluZy1yZXNvdXJjZXMtZXhwbGljaXRseSdcbn0sIHtcbiAgdmFyaWFudDogJ0RvY3MnLFxuICB0aXRsZTogdHJhbnNsYXRlTWVzc2FnZSgnY3VzdG9taXplUmVzb3VyY2VzX3RpdGxlJyksXG4gIHN1YnRpdGxlOiB0cmFuc2xhdGVNZXNzYWdlKCdjdXN0b21pemVSZXNvdXJjZXNfc3VidGl0bGUnKSxcbiAgaHJlZjogJ2h0dHBzOi8vZG9jcy5hZG1pbmpzLmNvL2Jhc2ljcy9yZXNvdXJjZSNjdXN0b21pemluZy1yZXNvdXJjZXMnXG59LCB7XG4gIHZhcmlhbnQ6ICdQbHVnJyxcbiAgdGl0bGU6IHRyYW5zbGF0ZU1lc3NhZ2UoJ2N1c3RvbWl6ZUFjdGlvbnNfdGl0bGUnKSxcbiAgc3VidGl0bGU6IHRyYW5zbGF0ZU1lc3NhZ2UoJ2N1c3RvbWl6ZUFjdGlvbnNfc3VidGl0bGUnKSxcbiAgaHJlZjogJ2h0dHBzOi8vZG9jcy5hZG1pbmpzLmNvL2Jhc2ljcy9hY3Rpb24nXG59LCB7XG4gIHZhcmlhbnQ6ICdDdXAnLFxuICB0aXRsZTogdHJhbnNsYXRlTWVzc2FnZSgnd3JpdGVPd25Db21wb25lbnRzX3RpdGxlJyksXG4gIHN1YnRpdGxlOiB0cmFuc2xhdGVNZXNzYWdlKCd3cml0ZU93bkNvbXBvbmVudHNfc3VidGl0bGUnKSxcbiAgaHJlZjogJ2h0dHBzOi8vZG9jcy5hZG1pbmpzLmNvL3VpLWN1c3RvbWl6YXRpb24vd3JpdGluZy15b3VyLW93bi1jb21wb25lbnRzJ1xufSwge1xuICB2YXJpYW50OiAnUGhvdG9zJyxcbiAgdGl0bGU6IHRyYW5zbGF0ZU1lc3NhZ2UoJ2N1c3RvbURhc2hib2FyZF90aXRsZScpLFxuICBzdWJ0aXRsZTogdHJhbnNsYXRlTWVzc2FnZSgnY3VzdG9tRGFzaGJvYXJkX3N1YnRpdGxlJyksXG4gIGhyZWY6ICdodHRwczovL2RvY3MuYWRtaW5qcy5jby91aS1jdXN0b21pemF0aW9uL2Rhc2hib2FyZC1jdXN0b21pemF0aW9uJ1xufSwge1xuICB2YXJpYW50OiAnSWRlbnRpdHlDYXJkJyxcbiAgdGl0bGU6IHRyYW5zbGF0ZU1lc3NhZ2UoJ3JvbGVCYXNlZEFjY2Vzc190aXRsZScpLFxuICBzdWJ0aXRsZTogdHJhbnNsYXRlTWVzc2FnZSgncm9sZUJhc2VkQWNjZXNzX3N1YnRpdGxlJyksXG4gIGhyZWY6ICdodHRwczovL2RvY3MuYWRtaW5qcy5jby90dXRvcmlhbHMvYWRkaW5nLXJvbGUtYmFzZWQtYWNjZXNzLWNvbnRyb2wnXG59XTtcbmNvbnN0IENhcmQgPSBzdHlsZWQoQm94KWBcbiAgZGlzcGxheTogJHsoe1xuICBmbGV4XG59KSA9PiBmbGV4ID8gJ2ZsZXgnIDogJ2Jsb2NrJ307XG4gIGNvbG9yOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5jb2xvcnMuZ3JleTEwMH07XG4gIGhlaWdodDogMTAwJTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJhZGl1czogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc3BhY2UubWR9O1xuICB0cmFuc2l0aW9uOiBhbGwgMC4xcyBlYXNlLWluO1xuXG4gICY6aG92ZXIge1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5wcmltYXJ5NjB9O1xuICAgIGJveC1zaGFkb3c6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnNoYWRvd3MuY2FyZEhvdmVyfTtcbiAgfVxuXG4gICYgLmRzYy1pY29uIHN2ZywgLmdoLWljb24gc3ZnIHtcbiAgICB3aWR0aDogNjRweDtcbiAgICBoZWlnaHQ6IDY0cHg7XG4gIH1cbmA7XG5DYXJkLmRlZmF1bHRQcm9wcyA9IHtcbiAgdmFyaWFudDogJ2NvbnRhaW5lcicsXG4gIGJveFNoYWRvdzogJ2NhcmQnXG59O1xuZXhwb3J0IGNvbnN0IERhc2hib2FyZCA9ICgpID0+IHtcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZU1lc3NhZ2UsXG4gICAgdHJhbnNsYXRlQnV0dG9uXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEYXNoYm9hcmRIZWFkZXIsIG51bGwpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBtdDogWyd4bCcsICd4bCcsICctMTAwcHgnXSxcbiAgICBtYjogXCJ4bFwiLFxuICAgIG14OiBbMCwgMCwgMCwgJ2F1dG8nXSxcbiAgICBweDogWydkZWZhdWx0JywgJ2xnJywgJ3h4bCcsICcwJ10sXG4gICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICBmbGV4OiB0cnVlLFxuICAgIGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG4gICAgZmxleFdyYXA6IFwid3JhcFwiLFxuICAgIHdpZHRoOiBbMSwgMSwgMSwgMTAyNF1cbiAgfSwgYm94ZXMoe1xuICAgIHRyYW5zbGF0ZU1lc3NhZ2VcbiAgfSkubWFwKChib3gsIGluZGV4KSA9PlxuICAvKiNfX1BVUkVfXyovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXlcbiAgUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBrZXk6IGluZGV4LFxuICAgIHdpZHRoOiBbMSwgMSAvIDIsIDEgLyAyLCAxIC8gM10sXG4gICAgcDogXCJsZ1wiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENhcmQsIHtcbiAgICBhczogXCJhXCIsXG4gICAgaHJlZjogYm94LmhyZWYsXG4gICAgdGFyZ2V0OiBcIl9ibGFua1wiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHtcbiAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWxsdXN0cmF0aW9uLCB7XG4gICAgdmFyaWFudDogYm94LnZhcmlhbnQsXG4gICAgd2lkdGg6IDEwMCxcbiAgICBoZWlnaHQ6IDcwXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChINSwge1xuICAgIG10OiBcIm1kXCJcbiAgfSwgYm94LnRpdGxlKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgbnVsbCwgYm94LnN1YnRpdGxlKSkpKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENhcmQsIHtcbiAgICB3aWR0aDogMSxcbiAgICBtOiBcImxnXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwge1xuICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbGx1c3RyYXRpb24sIHtcbiAgICB2YXJpYW50OiBcIkFkbWluSlNMb2dvXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEg1LCBudWxsLCB0cmFuc2xhdGVNZXNzYWdlKCduZWVkTW9yZVNvbHV0aW9uc190aXRsZScpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgbnVsbCwgdHJhbnNsYXRlTWVzc2FnZSgnbmVlZE1vcmVTb2x1dGlvbnNfc3VidGl0bGUnKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIHtcbiAgICBtdDogXCJ4eGxcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHtcbiAgICBhczogXCJhXCIsXG4gICAgdmFyaWFudDogXCJjb250YWluZWRcIixcbiAgICBocmVmOiBcImh0dHBzOi8vZm9ybXMuYWRtaW5qcy5jby9cIixcbiAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcbiAgfSwgdHJhbnNsYXRlQnV0dG9uKCdjb250YWN0VXMnKSkpKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIHdpZHRoOiBbMSwgMSwgMSAvIDJdLFxuICAgIHA6IFwibGdcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDYXJkLCB7XG4gICAgYXM6IFwiYVwiLFxuICAgIGZsZXg6IHRydWUsXG4gICAgaHJlZjogXCJodHRwczovL2FkbWluanMucGFnZS5saW5rL2Rpc2NvcmRcIixcbiAgICB0YXJnZXQ6IFwiX2JsYW5rXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgZmxleFNocmluazogMCxcbiAgICBjbGFzc05hbWU6IFwiZHNjLWljb25cIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEaXNjb3JkTG9nbywgbnVsbCkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBtbDogXCJ4bFwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEg1LCBudWxsLCB0cmFuc2xhdGVNZXNzYWdlKCdjb21tdW5pdHlfdGl0bGUnKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIG51bGwsIHRyYW5zbGF0ZU1lc3NhZ2UoJ2NvbW11bml0eV9zdWJ0aXRsZScpKSkpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgd2lkdGg6IFsxLCAxLCAxIC8gMl0sXG4gICAgcDogXCJsZ1wiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENhcmQsIHtcbiAgICBhczogXCJhXCIsXG4gICAgZmxleDogdHJ1ZSxcbiAgICBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9Tb2Z0d2FyZUJyb3RoZXJzL2FkbWluanMvaXNzdWVzXCIsXG4gICAgdGFyZ2V0OiBcIl9ibGFua1wiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgY2xhc3NOYW1lOiBcImdoLWljb25cIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbGx1c3RyYXRpb24sIHtcbiAgICB2YXJpYW50OiBcIkdpdGh1YkxvZ29cIlxuICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIG1sOiBcInhsXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSDUsIG51bGwsIHRyYW5zbGF0ZU1lc3NhZ2UoJ2ZvdW5kQnVnX3RpdGxlJykpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCBudWxsLCB0cmFuc2xhdGVNZXNzYWdlKCdmb3VuZEJ1Z19zdWJ0aXRsZScpKSkpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IERhc2hib2FyZDsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBtID0gcmVxdWlyZSgncmVhY3QtZG9tJyk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBleHBvcnRzLmNyZWF0ZVJvb3QgPSBtLmNyZWF0ZVJvb3Q7XG4gIGV4cG9ydHMuaHlkcmF0ZVJvb3QgPSBtLmh5ZHJhdGVSb290O1xufSBlbHNlIHtcbiAgdmFyIGkgPSBtLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO1xuICBleHBvcnRzLmNyZWF0ZVJvb3QgPSBmdW5jdGlvbihjLCBvKSB7XG4gICAgaS51c2luZ0NsaWVudEVudHJ5UG9pbnQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbS5jcmVhdGVSb290KGMsIG8pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpLnVzaW5nQ2xpZW50RW50cnlQb2ludCA9IGZhbHNlO1xuICAgIH1cbiAgfTtcbiAgZXhwb3J0cy5oeWRyYXRlUm9vdCA9IGZ1bmN0aW9uKGMsIGgsIG8pIHtcbiAgICBpLnVzaW5nQ2xpZW50RW50cnlQb2ludCA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBtLmh5ZHJhdGVSb290KGMsIGgsIG8pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpLnVzaW5nQ2xpZW50RW50cnlQb2ludCA9IGZhbHNlO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2gsIHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IGNyZWF0ZVJvb3QgfSBmcm9tICdyZWFjdC1kb20vY2xpZW50JztcbmltcG9ydCB7IERyYXdlciwgREVGQVVMVF9EUkFXRVJfV0lEVEggfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbi8vIEB0cy1pZ25vcmUgTm90ZTogSWdub3JlIHdoaWxlIEBhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0vc3R5bGVkLWNvbXBvbmVudHMgZG9lc24ndCBleHBvcnQgdHlwZXNcbmltcG9ydCB7IFRoZW1lUHJvdmlkZXIgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7IHNldERyYXdlclByZVJvdXRlIH0gZnJvbSAnLi4vLi4vc3RvcmUvYWN0aW9ucy9zZXQtZHJhd2VyLXByZXJvdXRlLmpzJztcblxuLyoqXG4gKiBAYWxpYXMgRHJhd2VyUG9ydGFsUHJvcHNcbiAqIEBtZW1iZXJvZiBEcmF3ZXJQb3J0YWxcbiAqL1xuXG5jb25zdCBEUkFXRVJfUE9SVEFMX0lEID0gJ2RyYXdlclBvcnRhbCc7XG5jb25zdCBEUkFXRVJfUE9SVEFMX1dSQVBQRVJfSUQgPSAnZHJhd2VyUG9ydGFsV3JhcHBlcic7XG5jb25zdCBEcmF3ZXJXcmFwcGVyID0gKHtcbiAgb25Nb3VudCxcbiAgb25Vbm1vdW50XG59KSA9PiB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb25Nb3VudCgpO1xuICAgIHJldHVybiBvblVubW91bnQ7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRoZW1lUHJvdmlkZXIsIHtcbiAgICB0aGVtZTogd2luZG93LlRIRU1FXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyYXdlciwge1xuICAgIGlkOiBEUkFXRVJfUE9SVEFMX0lELFxuICAgIGNsYXNzTmFtZTogXCJoaWRkZW5cIixcbiAgICBcImRhdGEtY3NzXCI6IFwiZHJhd2VyXCJcbiAgfSkpO1xufTtcbmNvbnN0IGdldE9yQ3JlYXRlUG9ydGFsQ29udGFpbmVyID0gaWQgPT4ge1xuICBsZXQgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICBpZiAoIWNvbnRhaW5lcikge1xuICAgIGNvbnRhaW5lciA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb250YWluZXIuaWQgPSBpZDtcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICB9XG4gIHJldHVybiBjb250YWluZXI7XG59O1xuXG4vKipcbiAqIFNob3dzIGFsbCBvZiBpdHMgY2hpbGRyZW4gaW4gYSBEcmF3ZXIgb24gdGhlIHJpZ2h0LlxuICogSW5zdGVhZCBvZiByZW5kZXJpbmcgaXQncyBvd24ge0BsaW5rIERyYXdlcn0gY29tcG9uZW50IGl0IHJldXNlc1xuICogdGhlIGdsb2JhbCBEcmF3ZXIgdmlhIFJlYWN0IFBvcnRhbC5cbiAqXG4gKiAjIyMgVXNhZ2VcbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7IERyYXdlclBvcnRhbCB9IGZyb20gJ2FkbWluanMnXG4gKiBgYGBcbiAqXG4gKiBAY29tcG9uZW50XG4gKiBAc3ViY2F0ZWdvcnkgQXBwbGljYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IERyYXdlclBvcnRhbCA9ICh7XG4gIGNoaWxkcmVuLFxuICB3aWR0aFxufSkgPT4ge1xuICBjb25zdCBbZHJhd2VyRWxlbWVudCwgc2V0RHJhd2VyRWxlbWVudF0gPSB1c2VTdGF0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChEUkFXRVJfUE9SVEFMX0lEKSk7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gbnVsbFxuICB9ID0gdXNlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUucm91dGVyKTtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICBjb25zdCBoYW5kbGVEcmF3ZXJNb3VudCA9ICgpID0+IHtcbiAgICBkaXNwYXRjaChzZXREcmF3ZXJQcmVSb3V0ZSh7XG4gICAgICBwcmV2aW91c1JvdXRlOiBmcm9tXG4gICAgfSkpO1xuICAgIHNldERyYXdlckVsZW1lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoRFJBV0VSX1BPUlRBTF9JRCkpO1xuICB9O1xuICBjb25zdCBoYW5kbGVEcmF3ZXJVbm1vdW50ID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldERyYXdlclByZVJvdXRlKHtcbiAgICAgIHByZXZpb3VzUm91dGU6IG51bGxcbiAgICB9KSk7XG4gIH07XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaW5uZXJXcmFwcGVyRWxlbWVudCA9IGdldE9yQ3JlYXRlUG9ydGFsQ29udGFpbmVyKERSQVdFUl9QT1JUQUxfV1JBUFBFUl9JRCk7XG4gICAgaWYgKCFkcmF3ZXJFbGVtZW50ICYmIHdpbmRvdykge1xuICAgICAgY29uc3QgZHJhd2VyUm9vdCA9IGNyZWF0ZVJvb3QoaW5uZXJXcmFwcGVyRWxlbWVudCk7XG4gICAgICBkcmF3ZXJSb290LnJlbmRlciggLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJhd2VyV3JhcHBlciwge1xuICAgICAgICBvbk1vdW50OiBoYW5kbGVEcmF3ZXJNb3VudCxcbiAgICAgICAgb25Vbm1vdW50OiBoYW5kbGVEcmF3ZXJVbm1vdW50XG4gICAgICB9KSk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb25zdCBpbm5lcldyYXBwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChEUkFXRVJfUE9SVEFMX1dSQVBQRVJfSUQpO1xuICAgICAgaWYgKGlubmVyV3JhcHBlcikgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChpbm5lcldyYXBwZXIpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZHJhd2VyRWxlbWVudCkge1xuICAgICAgZHJhd2VyRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgIGlmICh3aWR0aCkge1xuICAgICAgICBkcmF3ZXJFbGVtZW50LnN0eWxlLndpZHRoID0gQXJyYXkuaXNBcnJheSh3aWR0aCkgPyB3aWR0aFswXS50b1N0cmluZygpIDogd2lkdGgudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGRyYXdlckVsZW1lbnQuc3R5bGUud2lkdGggPSBERUZBVUxUX0RSQVdFUl9XSURUSDtcbiAgICAgICAgZHJhd2VyRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgICAgZHJhd2VyRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY3NzJywgJ2RyYXdlci1lbGVtZW50Jyk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4gdW5kZWZpbmVkO1xuICB9LCBbZHJhd2VyRWxlbWVudF0pO1xuICBpZiAoIWRyYXdlckVsZW1lbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL2NyZWF0ZVBvcnRhbChjaGlsZHJlbiwgZHJhd2VyRWxlbWVudCk7XG59O1xuZXhwb3J0IGRlZmF1bHQgRHJhd2VyUG9ydGFsOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJbmZvQm94LCBNZXNzYWdlQm94LCBUZXh0IH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL2hvb2tzL2luZGV4LmpzJztcblxuLyoqXG4gKiBAbWVtYmVyb2YgRXJyb3JNZXNzYWdlQm94XG4gKiBAYWxpYXMgRXJyb3JNZXNzYWdlQm94UHJvcHNcbiAqL1xuXG4vKipcbiAqIEBjbGFzc1xuICogUHJpbnRzIGVycm9yIG1lc3NhZ2VcbiAqXG4gKiBAY29tcG9uZW50XG4gKiBAcHJpdmF0ZVxuICogQGV4YW1wbGVcbiAqIHJldHVybiAoXG4gKiA8RXJyb3JNZXNzYWdlQm94IHRpdGxlPXsnU29tZSBlcnJvcid9PlxuICogICA8cD5UZXh0IGJlbG93IHRoZSB0aXRsZTwvcD5cbiAqIDwvRXJyb3JNZXNzYWdlQm94PlxuICogKVxuICovXG5jb25zdCBFcnJvck1lc3NhZ2VCb3ggPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICB0aXRsZSxcbiAgICB0ZXN0SWRcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVzc2FnZUJveCwge1xuICAgIFwiZGF0YS10ZXN0aWRcIjogdGVzdElkLFxuICAgIG1lc3NhZ2U6IHRpdGxlXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIG51bGwsIGNoaWxkcmVuKSk7XG59O1xuY29uc3QgTm9SZXNvdXJjZUVycm9yID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgcmVzb3VyY2VJZFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICB0cmFuc2xhdGVNZXNzYWdlXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5mb0JveCwge1xuICAgIHRpdGxlOiB0cmFuc2xhdGVNZXNzYWdlKCdwYWdlTm90Rm91bmRfdGl0bGUnLCByZXNvdXJjZUlkLCB7XG4gICAgICByZXNvdXJjZUlkXG4gICAgfSksXG4gICAgaWxsdXN0cmF0aW9uOiBcIk5vdEZvdW5kXCIsXG4gICAgdGVzdElkOiBcIk5vUmVzb3VyY2VFcnJvclwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRleHQsIG51bGwsIHRyYW5zbGF0ZU1lc3NhZ2UoJ2Vycm9yNDA0UmVzb3VyY2UnLCByZXNvdXJjZUlkLCB7XG4gICAgcmVzb3VyY2VJZFxuICB9KSkpO1xufTtcbmNvbnN0IE5vQWN0aW9uRXJyb3IgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICByZXNvdXJjZUlkLFxuICAgIGFjdGlvbk5hbWVcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgdHJhbnNsYXRlTWVzc2FnZVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluZm9Cb3gsIHtcbiAgICB0aXRsZTogdHJhbnNsYXRlTWVzc2FnZSgncGFnZU5vdEZvdW5kX3RpdGxlJywgcmVzb3VyY2VJZCwge1xuICAgICAgcmVzb3VyY2VJZFxuICAgIH0pLFxuICAgIGlsbHVzdHJhdGlvbjogXCJOb3RGb3VuZFwiLFxuICAgIHRlc3RJZDogXCJOb0FjdGlvbkVycm9yXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgbnVsbCwgdHJhbnNsYXRlTWVzc2FnZSgnZXJyb3I0MDRBY3Rpb24nLCByZXNvdXJjZUlkLCB7XG4gICAgcmVzb3VyY2VJZCxcbiAgICBhY3Rpb25OYW1lXG4gIH0pKSk7XG59O1xuY29uc3QgTm9SZWNvcmRFcnJvciA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHJlc291cmNlSWQsXG4gICAgcmVjb3JkSWRcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgdHJhbnNsYXRlTWVzc2FnZVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEluZm9Cb3gsIHtcbiAgICB0aXRsZTogdHJhbnNsYXRlTWVzc2FnZSgncGFnZU5vdEZvdW5kX3RpdGxlJywgcmVzb3VyY2VJZCwge1xuICAgICAgcmVzb3VyY2VJZFxuICAgIH0pLFxuICAgIGlsbHVzdHJhdGlvbjogXCJOb3RGb3VuZFwiLFxuICAgIHRlc3RJZDogXCJOb1JlY29yZEVycm9yXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwgbnVsbCwgdHJhbnNsYXRlTWVzc2FnZSgnZXJyb3I0MDRSZWNvcmQnLCByZXNvdXJjZUlkLCB7XG4gICAgcmVzb3VyY2VJZCxcbiAgICByZWNvcmRJZFxuICB9KSkpO1xufTtcbmV4cG9ydCB7IE5vUmVzb3VyY2VFcnJvciwgTm9BY3Rpb25FcnJvciwgTm9SZWNvcmRFcnJvciwgRXJyb3JNZXNzYWdlQm94LCBFcnJvck1lc3NhZ2VCb3ggYXMgZGVmYXVsdCB9OyIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG51bGxpc2gsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc05pbChudWxsKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTmlsKHZvaWQgMCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc05pbChOYU4pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOaWwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNOaWw7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBzdGFja0NsZWFyID0gcmVxdWlyZSgnLi9fc3RhY2tDbGVhcicpLFxuICAgIHN0YWNrRGVsZXRlID0gcmVxdWlyZSgnLi9fc3RhY2tEZWxldGUnKSxcbiAgICBzdGFja0dldCA9IHJlcXVpcmUoJy4vX3N0YWNrR2V0JyksXG4gICAgc3RhY2tIYXMgPSByZXF1aXJlKCcuL19zdGFja0hhcycpLFxuICAgIHN0YWNrU2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTdGFja2AuXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBzdGFja0NsZWFyO1xuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IHN0YWNrRGVsZXRlO1xuU3RhY2sucHJvdG90eXBlLmdldCA9IHN0YWNrR2V0O1xuU3RhY2sucHJvdG90eXBlLmhhcyA9IHN0YWNrSGFzO1xuU3RhY2sucHJvdG90eXBlLnNldCA9IHN0YWNrU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YWNrO1xuIiwiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVBZGQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLCJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpLFxuICAgIHNldENhY2hlQWRkID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVBZGQnKSxcbiAgICBzZXRDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX3NldENhY2hlSGFzJyk7XG5cbi8qKlxuICpcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzID09IG51bGwgPyAwIDogdmFsdWVzLmxlbmd0aDtcblxuICB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHRoaXMuYWRkKHZhbHVlc1tpbmRleF0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBzZXRDYWNoZUFkZDtcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBzZXRDYWNoZUhhcztcblxubW9kdWxlLmV4cG9ydHMgPSBTZXRDYWNoZTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsIi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwVG9BcnJheTtcbiIsIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpLFxuICAgIGVxID0gcmVxdWlyZSgnLi9lcScpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBtYXBUb0FycmF5ID0gcmVxdWlyZSgnLi9fbWFwVG9BcnJheScpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXG4gKiB0aGUgc2FtZSBgdG9TdHJpbmdUYWdgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTnVtYmVyYCwgYFJlZ0V4cGAsIG9yIGBTdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCB0YWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XG5cbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxuICAgICAgICAgICFlcXVhbEZ1bmMobmV3IFVpbnQ4QXJyYXkob2JqZWN0KSwgbmV3IFVpbnQ4QXJyYXkob3RoZXIpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgICAvLyBDb2VyY2UgYm9vbGVhbnMgdG8gYDFgIG9yIGAwYCBhbmQgZGF0ZXMgdG8gbWlsbGlzZWNvbmRzLlxuICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cbiAgICAgIHJldHVybiBlcSgrb2JqZWN0LCArb3RoZXIpO1xuXG4gICAgY2FzZSBlcnJvclRhZzpcbiAgICAgIHJldHVybiBvYmplY3QubmFtZSA9PSBvdGhlci5uYW1lICYmIG9iamVjdC5tZXNzYWdlID09IG90aGVyLm1lc3NhZ2U7XG5cbiAgICBjYXNlIHJlZ2V4cFRhZzpcbiAgICBjYXNlIHN0cmluZ1RhZzpcbiAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG4gICAgICAvLyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XG5cbiAgICBjYXNlIG1hcFRhZzpcbiAgICAgIHZhciBjb252ZXJ0ID0gbWFwVG9BcnJheTtcblxuICAgIGNhc2Ugc2V0VGFnOlxuICAgICAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRztcbiAgICAgIGNvbnZlcnQgfHwgKGNvbnZlcnQgPSBzZXRUb0FycmF5KTtcblxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gICAgICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICAgICAgaWYgKHN0YWNrZWQpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XG4gICAgICB9XG4gICAgICBiaXRtYXNrIHw9IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc7XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICAgICAgdmFyIHJlc3VsdCA9IGVxdWFsQXJyYXlzKGNvbnZlcnQob2JqZWN0KSwgY29udmVydChvdGhlciksIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuXG4gICAgY2FzZSBzeW1ib2xUYWc6XG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xuICAgICAgICByZXR1cm4gc3ltYm9sVmFsdWVPZi5jYWxsKG9iamVjdCkgPT0gc3ltYm9sVmFsdWVPZi5jYWxsKG90aGVyKTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxCeVRhZztcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkFycmF5O1xuIiwidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9scztcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxuICovXG5mdW5jdGlvbiBiYXNlVGltZXMobiwgaXRlcmF0ZWUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcblxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRpbWVzO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpLFxuICAgIHN0dWJGYWxzZSA9IHJlcXVpcmUoJy4vc3R1YkZhbHNlJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IHJvb3QuQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjMuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgQnVmZmVyKDIpKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBVaW50OEFycmF5KDIpKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0J1ZmZlciA9IG5hdGl2ZUlzQnVmZmVyIHx8IHN0dWJGYWxzZTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0J1ZmZlcjtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzO1xuIiwidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcbiAqIGVxdWFsIHRvIGAwYCBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICFpc0Z1bmN0aW9uKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZTtcbiIsInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5cztcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChvYmpTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbE9iamVjdHM7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFdlYWtNYXAgPSBnZXROYXRpdmUocm9vdCwgJ1dlYWtNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBXZWFrTWFwO1xuIiwidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgZXF1YWxCeVRhZyA9IHJlcXVpcmUoJy4vX2VxdWFsQnlUYWcnKSxcbiAgICBlcXVhbE9iamVjdHMgPSByZXF1aXJlKCcuL19lcXVhbE9iamVjdHMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWxEZWVwO1xuIiwidmFyIGJhc2VJc0VxdWFsRGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsRGVlcCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNFcXVhbGAgd2hpY2ggc3VwcG9ydHMgcGFydGlhbCBjb21wYXJpc29uc1xuICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFpc09iamVjdExpa2UodmFsdWUpICYmICFpc09iamVjdExpa2Uob3RoZXIpKSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xuICB9XG4gIHJldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxuICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuICFsZW5ndGg7XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgPyBkYXRhWzFdICE9PSBvYmplY3RbZGF0YVswXV1cbiAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXG4gICAgICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XG5cbiAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgICAgIDogcmVzdWx0XG4gICAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hdGNoO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaWYgc3VpdGFibGUgZm9yIHN0cmljdFxuICogIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlICYmICFpc09iamVjdCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTdHJpY3RDb21wYXJhYmxlO1xuIiwidmFyIGlzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX2lzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBtYXRjaCBkYXRhIG9mIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBnZXRNYXRjaERhdGEob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBrZXlzKG9iamVjdCksXG4gICAgICBsZW5ndGggPSByZXN1bHQubGVuZ3RoO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBrZXkgPSByZXN1bHRbbGVuZ3RoXSxcbiAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgIHJlc3VsdFtsZW5ndGhdID0gW2tleSwgdmFsdWUsIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSldO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWF0Y2hEYXRhO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYG1hdGNoZXNQcm9wZXJ0eWAgZm9yIHNvdXJjZSB2YWx1ZXMgc3VpdGFibGVcbiAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShrZXksIHNyY1ZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxuICAgICAgKHNyY1ZhbHVlICE9PSB1bmRlZmluZWQgfHwgKGtleSBpbiBPYmplY3Qob2JqZWN0KSkpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlO1xuIiwidmFyIGJhc2VJc01hdGNoID0gcmVxdWlyZSgnLi9fYmFzZUlzTWF0Y2gnKSxcbiAgICBnZXRNYXRjaERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXRjaERhdGEnKSxcbiAgICBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2hEYXRhID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7XG4gIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXRjaGVzO1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpLFxuICAgIGdldCA9IHJlcXVpcmUoJy4vZ2V0JyksXG4gICAgaGFzSW4gPSByZXF1aXJlKCcuL2hhc0luJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIGlzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX2lzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSwgc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIgb2JqVmFsdWUgPSBnZXQob2JqZWN0LCBwYXRoKTtcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICA6IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWF0Y2hlc1Byb3BlcnR5O1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gYmFzZUdldChvYmplY3QsIHBhdGgpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eURlZXA7XG4iLCJ2YXIgYmFzZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5JyksXG4gICAgYmFzZVByb3BlcnR5RGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eURlZXAnKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFtcbiAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcbiAqICAgeyAnYSc6IHsgJ2InOiAxIH0gfVxuICogXTtcbiAqXG4gKiBfLm1hcChvYmplY3RzLCBfLnByb3BlcnR5KCdhLmInKSk7XG4gKiAvLyA9PiBbMiwgMV1cbiAqXG4gKiBfLm1hcChfLnNvcnRCeShvYmplY3RzLCBfLnByb3BlcnR5KFsnYScsICdiJ10pKSwgJ2EuYicpO1xuICogLy8gPT4gWzEsIDJdXG4gKi9cbmZ1bmN0aW9uIHByb3BlcnR5KHBhdGgpIHtcbiAgcmV0dXJuIGlzS2V5KHBhdGgpID8gYmFzZVByb3BlcnR5KHRvS2V5KHBhdGgpKSA6IGJhc2VQcm9wZXJ0eURlZXAocGF0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHJvcGVydHk7XG4iLCJ2YXIgYmFzZU1hdGNoZXMgPSByZXF1aXJlKCcuL19iYXNlTWF0Y2hlcycpLFxuICAgIGJhc2VNYXRjaGVzUHJvcGVydHkgPSByZXF1aXJlKCcuL19iYXNlTWF0Y2hlc1Byb3BlcnR5JyksXG4gICAgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIHByb3BlcnR5ID0gcmVxdWlyZSgnLi9wcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLml0ZXJhdGVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSBbdmFsdWU9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxuICovXG5mdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUpIHtcbiAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cbiAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYwMzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGlkZW50aXR5O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gaXNBcnJheSh2YWx1ZSlcbiAgICAgID8gYmFzZU1hdGNoZXNQcm9wZXJ0eSh2YWx1ZVswXSwgdmFsdWVbMV0pXG4gICAgICA6IGJhc2VNYXRjaGVzKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcHJvcGVydHkodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJdGVyYXRlZTtcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRQcm90b3R5cGU7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzSW4gPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHdoaWxlIChvYmplY3QpIHtcbiAgICBhcnJheVB1c2gocmVzdWx0LCBnZXRTeW1ib2xzKG9iamVjdCkpO1xuICAgIG9iamVjdCA9IGdldFByb3RvdHlwZShvYmplY3QpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHNJbjtcbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBleGNlcHQgdGhhdCBpdCBpbmNsdWRlcyBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBuYXRpdmVLZXlzSW4ob2JqZWN0KSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XG4gICAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXNJbjtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5c0luID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5c0luJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XG4gIGlmICghaXNPYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzSW4ob2JqZWN0KTtcbiAgfVxuICB2YXIgaXNQcm90byA9IGlzUHJvdG90eXBlKG9iamVjdCksXG4gICAgICByZXN1bHQgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKCEoa2V5ID09ICdjb25zdHJ1Y3RvcicgJiYgKGlzUHJvdG8gfHwgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXNJbjtcbiIsInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzSW4gPSByZXF1aXJlKCcuL19iYXNlS2V5c0luJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXNJbihuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICovXG5mdW5jdGlvbiBrZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QsIHRydWUpIDogYmFzZUtleXNJbihvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXNJbjtcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9sc0luID0gcmVxdWlyZSgnLi9fZ2V0U3ltYm9sc0luJyksXG4gICAga2V5c0luID0gcmVxdWlyZSgnLi9rZXlzSW4nKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxuICovXG5mdW5jdGlvbiBnZXRBbGxLZXlzSW4ob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNJbiwgZ2V0U3ltYm9sc0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRBbGxLZXlzSW47XG4iLCJ2YXIgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIGJhc2VQaWNrQnkgPSByZXF1aXJlKCcuL19iYXNlUGlja0J5JyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIGBvYmplY3RgIHByb3BlcnRpZXMgYHByZWRpY2F0ZWAgcmV0dXJuc1xuICogdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50czogKHZhbHVlLCBrZXkpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ucGlja0J5KG9iamVjdCwgXy5pc051bWJlcik7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2MnOiAzIH1cbiAqL1xuZnVuY3Rpb24gcGlja0J5KG9iamVjdCwgcHJlZGljYXRlKSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICB2YXIgcHJvcHMgPSBhcnJheU1hcChnZXRBbGxLZXlzSW4ob2JqZWN0KSwgZnVuY3Rpb24ocHJvcCkge1xuICAgIHJldHVybiBbcHJvcF07XG4gIH0pO1xuICBwcmVkaWNhdGUgPSBiYXNlSXRlcmF0ZWUocHJlZGljYXRlKTtcbiAgcmV0dXJuIGJhc2VQaWNrQnkob2JqZWN0LCBwcm9wcywgZnVuY3Rpb24odmFsdWUsIHBhdGgpIHtcbiAgICByZXR1cm4gcHJlZGljYXRlKHZhbHVlLCBwYXRoWzBdKTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGlja0J5O1xuIiwiaW1wb3J0IHsgQm94LCBCdXR0b24sIERyYXdlciwgRHJhd2VyQ29udGVudCwgRHJhd2VyRm9vdGVyLCBIMywgSWNvbiB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IGlzTmlsIGZyb20gJ2xvZGFzaC9pc05pbC5qcyc7XG5pbXBvcnQgcGlja0J5IGZyb20gJ2xvZGFzaC9waWNrQnkuanMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVBhcmFtcyB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vaG9va3MvaW5kZXguanMnO1xuaW1wb3J0IHsgdXNlRmlsdGVyRHJhd2VyIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlLWZpbHRlci1kcmF3ZXIuanMnO1xuaW1wb3J0IHsgdXNlUXVlcnlQYXJhbXMgfSBmcm9tICcuLi8uLi9ob29rcy91c2UtcXVlcnktcGFyYW1zLmpzJztcbmltcG9ydCB7IGdldFJlc291cmNlRWxlbWVudENzcyB9IGZyb20gJy4uLy4uL3V0aWxzL2luZGV4LmpzJztcbmltcG9ydCBCYXNlUHJvcGVydHlDb21wb25lbnQgZnJvbSAnLi4vcHJvcGVydHktdHlwZS9pbmRleC5qcyc7XG5jb25zdCBGaWx0ZXJEcmF3ZXIgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICByZXNvdXJjZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSByZXNvdXJjZS5maWx0ZXJQcm9wZXJ0aWVzO1xuICBjb25zdCBbZmlsdGVyLCBzZXRGaWx0ZXJdID0gdXNlU3RhdGUoe30pO1xuICBjb25zdCBwYXJhbXMgPSB1c2VQYXJhbXMoKTtcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZUJ1dHRvbixcbiAgICB0cmFuc2xhdGVMYWJlbFxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgaW5pdGlhbExvYWQgPSB1c2VSZWYodHJ1ZSk7XG4gIGNvbnN0IHtcbiAgICBpc1Zpc2libGUsXG4gICAgdG9nZ2xlRmlsdGVyXG4gIH0gPSB1c2VGaWx0ZXJEcmF3ZXIoKTtcbiAgY29uc3Qge1xuICAgIHN0b3JlUGFyYW1zLFxuICAgIGNsZWFyUGFyYW1zLFxuICAgIGZpbHRlcnNcbiAgfSA9IHVzZVF1ZXJ5UGFyYW1zKCk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGluaXRpYWxMb2FkLmN1cnJlbnQpIHtcbiAgICAgIGluaXRpYWxMb2FkLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RmlsdGVyKHt9KTtcbiAgICB9XG4gIH0sIFtwYXJhbXMucmVzb3VyY2VJZF0pO1xuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBldmVudCA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBzdG9yZVBhcmFtcyh7XG4gICAgICBmaWx0ZXJzOiBwaWNrQnkoZmlsdGVyLCB2ID0+ICFpc05pbCh2KSksXG4gICAgICBwYWdlOiAnMSdcbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlUmVzZXQgPSBldmVudCA9PiB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjbGVhclBhcmFtcygnZmlsdGVycycpO1xuICAgIHNldEZpbHRlcih7fSk7XG4gIH07XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIHNldEZpbHRlcihmaWx0ZXJzKTtcbiAgICB9XG4gIH0sIFtmaWx0ZXJzXSk7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChwcm9wZXJ0eU5hbWUsIHZhbHVlKSA9PiB7XG4gICAgaWYgKHByb3BlcnR5TmFtZS5wYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigneW91IGNhbiBub3QgcGFzcyBSZWNvcmRKU09OIHRvIGZpbHRlcnMnKTtcbiAgICB9XG4gICAgc2V0RmlsdGVyKHtcbiAgICAgIC4uLmZpbHRlcixcbiAgICAgIFtwcm9wZXJ0eU5hbWVdOiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICF2YWx1ZS5sZW5ndGggPyB1bmRlZmluZWQgOiB2YWx1ZVxuICAgIH0pO1xuICB9O1xuICBjb25zdCBjb250ZW50VGFnID0gZ2V0UmVzb3VyY2VFbGVtZW50Q3NzKHJlc291cmNlLmlkLCAnZmlsdGVyLWRyYXdlcicpO1xuICBjb25zdCBjc3NDb250ZW50ID0gZ2V0UmVzb3VyY2VFbGVtZW50Q3NzKHJlc291cmNlLmlkLCAnZmlsdGVyLWRyYXdlci1jb250ZW50Jyk7XG4gIGNvbnN0IGNzc0Zvb3RlciA9IGdldFJlc291cmNlRWxlbWVudENzcyhyZXNvdXJjZS5pZCwgJ2ZpbHRlci1kcmF3ZXItZm9vdGVyJyk7XG4gIGNvbnN0IGNzc0J1dHRvbkFwcGx5ID0gZ2V0UmVzb3VyY2VFbGVtZW50Q3NzKHJlc291cmNlLmlkLCAnZmlsdGVyLWRyYXdlci1idXR0b24tYXBwbHknKTtcbiAgY29uc3QgY3NzQnV0dG9uUmVzZXQgPSBnZXRSZXNvdXJjZUVsZW1lbnRDc3MocmVzb3VyY2UuaWQsICdmaWx0ZXItZHJhd2VyLWJ1dHRvbi1yZXNldCcpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJhd2VyLCB7XG4gICAgdmFyaWFudDogXCJmaWx0ZXJcIixcbiAgICBpc0hpZGRlbjogIWlzVmlzaWJsZSxcbiAgICBhczogXCJmb3JtXCIsXG4gICAgb25TdWJtaXQ6IGhhbmRsZVN1Ym1pdCxcbiAgICBvblJlc2V0OiBoYW5kbGVSZXNldCxcbiAgICBcImRhdGEtY3NzXCI6IGNvbnRlbnRUYWdcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJhd2VyQ29udGVudCwge1xuICAgIFwiZGF0YS1jc3NcIjogY3NzQ29udGVudFxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBmbGV4OiB0cnVlLFxuICAgIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChIMywgbnVsbCwgdHJhbnNsYXRlTGFiZWwoJ2ZpbHRlcnMnLCByZXNvdXJjZS5pZCkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIHZhcmlhbnQ6IFwibGlnaHRcIixcbiAgICBzaXplOiBcImljb25cIixcbiAgICByb3VuZGVkOiB0cnVlLFxuICAgIGNvbG9yOiBcInRleHRcIixcbiAgICBvbkNsaWNrOiB0b2dnbGVGaWx0ZXJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgIGljb246IFwiWFwiXG4gIH0pKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIG15OiBcIngzXCJcbiAgfSwgcHJvcGVydGllcy5tYXAocHJvcGVydHkgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZVByb3BlcnR5Q29tcG9uZW50LCB7XG4gICAga2V5OiBwcm9wZXJ0eS5wcm9wZXJ0eVBhdGgsXG4gICAgd2hlcmU6IFwiZmlsdGVyXCIsXG4gICAgb25DaGFuZ2U6IGhhbmRsZUNoYW5nZSxcbiAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgcmVzb3VyY2U6IHJlc291cmNlXG4gIH0pKSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEcmF3ZXJGb290ZXIsIHtcbiAgICBcImRhdGEtY3NzXCI6IGNzc0Zvb3RlclxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHtcbiAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgIHZhcmlhbnQ6IFwibGlnaHRcIixcbiAgICBvbkNsaWNrOiBoYW5kbGVSZXNldCxcbiAgICBcImRhdGEtY3NzXCI6IGNzc0J1dHRvblJlc2V0XG4gIH0sIHRyYW5zbGF0ZUJ1dHRvbigncmVzZXRGaWx0ZXInLCByZXNvdXJjZS5pZCkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCdXR0b24sIHtcbiAgICB0eXBlOiBcInN1Ym1pdFwiLFxuICAgIHZhcmlhbnQ6IFwiY29udGFpbmVkXCIsXG4gICAgXCJkYXRhLWNzc1wiOiBjc3NCdXR0b25BcHBseVxuICB9LCB0cmFuc2xhdGVCdXR0b24oJ2FwcGx5Q2hhbmdlcycsIHJlc291cmNlLmlkKSkpKTtcbn07XG5jb25zdCBPdmVycmlkYWJsZUZpbHRlckRyYXdlciA9IGFsbG93T3ZlcnJpZGUoRmlsdGVyRHJhd2VyLCAnRmlsdGVyRHJhd2VyJyk7XG5leHBvcnQgeyBPdmVycmlkYWJsZUZpbHRlckRyYXdlciBhcyBkZWZhdWx0LCBPdmVycmlkYWJsZUZpbHRlckRyYXdlciBhcyBGaWx0ZXJEcmF3ZXIsIEZpbHRlckRyYXdlciBhcyBPcmlnaW5hbEZpbHRlckRyYXdlciB9OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDdXJyZW50VXNlck5hdiwgQm94IH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL2hvb2tzL2luZGV4LmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5jb25zdCBMb2dnZWRJbiA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIHNlc3Npb24sXG4gICAgcGF0aHNcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgdHJhbnNsYXRlQnV0dG9uXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBkcm9wQWN0aW9ucyA9IFt7XG4gICAgbGFiZWw6IHRyYW5zbGF0ZUJ1dHRvbignbG9nb3V0JyksXG4gICAgb25DbGljazogZXZlbnQgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcGF0aHMubG9nb3V0UGF0aDtcbiAgICB9LFxuICAgIGljb246ICdMb2dPdXQnXG4gIH1dO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgZmxleFNocmluazogMCxcbiAgICBcImRhdGEtY3NzXCI6IFwibG9nZ2VkLWluXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ3VycmVudFVzZXJOYXYsIHtcbiAgICBuYW1lOiBzZXNzaW9uLmVtYWlsLFxuICAgIHRpdGxlOiBzZXNzaW9uLnRpdGxlLFxuICAgIGF2YXRhclVybDogc2Vzc2lvbi5hdmF0YXJVcmwsXG4gICAgZHJvcEFjdGlvbnM6IGRyb3BBY3Rpb25zXG4gIH0pKTtcbn07XG5jb25zdCBPdmVycmlkYWJsZUxvZ2dlZEluID0gYWxsb3dPdmVycmlkZShMb2dnZWRJbiwgJ0xvZ2dlZEluJyk7XG5leHBvcnQgeyBPdmVycmlkYWJsZUxvZ2dlZEluIGFzIGRlZmF1bHQsIE92ZXJyaWRhYmxlTG9nZ2VkSW4gYXMgTG9nZ2VkSW4sIExvZ2dlZEluIGFzIE9yaWdpbmFsTG9nZ2VkSW4gfTsiLCJpbXBvcnQgeyBCb3gsIE1lc3NhZ2VCb3ggfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vaG9va3MvaW5kZXguanMnO1xuaW1wb3J0IHsgZHJvcE5vdGljZSB9IGZyb20gJy4uLy4uL3N0b3JlL2FjdGlvbnMvZHJvcC1ub3RpY2UuanMnO1xuaW1wb3J0IHsgc2V0Tm90aWNlUHJvZ3Jlc3MgfSBmcm9tICcuLi8uLi9zdG9yZS9hY3Rpb25zL3NldC1ub3RpY2UtcHJvZ3Jlc3MuanMnO1xuY29uc3QgVElNRV9UT19ESVNBUFBFQVIgPSAzO1xuY29uc3QgTm90aWNlRWxlbWVudCA9IHByb3BzID0+IHtcbiAgY29uc3Qge1xuICAgIGRyb3AsXG4gICAgbm90aWNlLFxuICAgIG5vdGlmeVByb2dyZXNzXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW3Byb2dyZXNzLCBzZXRQcm9ncmVzc10gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgaW50ZXJ2YWxSZWYgPSB1c2VSZWYoKTtcbiAgY29uc3Qge1xuICAgIHRtLFxuICAgIGkxOG46IHtcbiAgICAgIGxhbmd1YWdlXG4gICAgfVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgbWVzc2FnZSA9IHVzZU1lbW8oKCkgPT4gdG0obm90aWNlLm1lc3NhZ2UsIG5vdGljZS5yZXNvdXJjZUlkLCBub3RpY2Uub3B0aW9ucyksIFtub3RpY2UuaWQsIGxhbmd1YWdlXSk7XG4gIGNvbnN0IHZhcmlhbnQgPSBub3RpY2UudHlwZSA9PT0gJ2Vycm9yJyA/ICdkYW5nZXInIDogbm90aWNlLnR5cGUgPz8gJ2luZm8nO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGludGVydmFsUmVmLmN1cnJlbnQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgX3Byb2dyZXNzID0gcHJvZ3Jlc3MgKyAxMDAgLyBUSU1FX1RPX0RJU0FQUEVBUjtcbiAgICAgIG5vdGlmeVByb2dyZXNzKHtcbiAgICAgICAgbm90aWNlSWQ6IG5vdGljZS5pZCxcbiAgICAgICAgcHJvZ3Jlc3NcbiAgICAgIH0pO1xuICAgICAgc2V0UHJvZ3Jlc3MoX3Byb2dyZXNzKTtcbiAgICAgIHJldHVybiBfcHJvZ3Jlc3M7XG4gICAgfSwgMTAwMCk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxSZWYuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW25vdGljZV0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChwcm9ncmVzcyA+PSAxMDApIHtcbiAgICAgIGRyb3AoKTtcbiAgICB9XG4gIH0sIFtkcm9wLCBwcm9ncmVzc10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTWVzc2FnZUJveCwge1xuICAgIHN0eWxlOiB7XG4gICAgICBtaW5XaWR0aDogJzQ4MHB4J1xuICAgIH0sXG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICB2YXJpYW50OiB2YXJpYW50LFxuICAgIG9uQ2xvc2VDbGljazogZHJvcFxuICB9LCBub3RpY2UuYm9keSk7XG59O1xuY29uc3QgTm90aWNlQm94ID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgZHJvcCxcbiAgICBub3RpY2VzLFxuICAgIG5vdGlmeVByb2dyZXNzXG4gIH0gPSBwcm9wcztcbiAgaWYgKCFub3RpY2VzLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBhczogXCJkaXZcIixcbiAgICBcImRhdGEtdGVzdGlkXCI6IFwibm90aWNlLXdyYXBwZXJcIixcbiAgICBcImRhdGEtY3NzXCI6IFwibm90aWNlLXdyYXBwZXJcIixcbiAgICBmbGV4OiB0cnVlLFxuICAgIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gICAgcDogXCJzbVwiLFxuICAgIHN0eWxlOiB7XG4gICAgICBnYXA6IDRcbiAgICB9XG4gIH0sIG5vdGljZXMubWFwKG5vdGljZSA9PiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOb3RpY2VFbGVtZW50LCB7XG4gICAga2V5OiBub3RpY2UuaWQsXG4gICAgbm90aWNlOiBub3RpY2UsXG4gICAgZHJvcDogKCkgPT4gZHJvcChub3RpY2UuaWQpLFxuICAgIG5vdGlmeVByb2dyZXNzOiBub3RpZnlQcm9ncmVzc1xuICB9KSkpO1xufTtcbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9IHN0YXRlID0+ICh7XG4gIG5vdGljZXM6IHN0YXRlLm5vdGljZXNcbn0pO1xuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gZGlzcGF0Y2ggPT4gKHtcbiAgZHJvcDogbm90aWNlSWQgPT4gZGlzcGF0Y2goZHJvcE5vdGljZShub3RpY2VJZCkpLFxuICBub3RpZnlQcm9ncmVzczogKHtcbiAgICBub3RpY2VJZCxcbiAgICBwcm9ncmVzc1xuICB9KSA9PiBkaXNwYXRjaChzZXROb3RpY2VQcm9ncmVzcyh7XG4gICAgbm90aWNlSWQsXG4gICAgcHJvZ3Jlc3NcbiAgfSkpXG59KTtcbmNvbnN0IENvbm5lY3RlZE5vdGljZUJveCA9IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMpKE5vdGljZUJveCk7XG5jb25zdCBPdmVycmlkYWJsZUNvbm5lY3RlZE5vdGljZUJveCA9IGFsbG93T3ZlcnJpZGUoQ29ubmVjdGVkTm90aWNlQm94LCAnTm90aWNlQm94Jyk7XG5leHBvcnQgeyBPdmVycmlkYWJsZUNvbm5lY3RlZE5vdGljZUJveCBhcyBOb3RpY2VCb3gsIE92ZXJyaWRhYmxlQ29ubmVjdGVkTm90aWNlQm94IGFzIGRlZmF1bHQsIENvbm5lY3RlZE5vdGljZUJveCBhcyBPcmlnaW5hbE5vdGljZUJveCB9OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBjc3NDbGFzcywgdGhlbWVHZXQgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFZpZXdIZWxwZXJzIGZyb20gJy4uLy4uLy4uLy4uL2JhY2tlbmQvdXRpbHMvdmlldy1oZWxwZXJzL3ZpZXctaGVscGVycy5qcyc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuZXhwb3J0IGNvbnN0IFN0eWxlZExvZ28gPSBzdHlsZWQoTGluaylgXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24tY29udGVudDogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZmxleC1zaHJpbms6IDA7XG4gIHBhZGRpbmc6ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ2xnJyl9ICR7dGhlbWVHZXQoJ3NwYWNlJywgJ3h4bCcpfSAke3RoZW1lR2V0KCdzcGFjZScsICd4eGwnKX07XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAmID4gaDEge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBmb250LXdlaWdodDogJHt0aGVtZUdldCgnZm9udFdlaWdodHMnLCAnYm9sZGVyJyl9O1xuICAgIGZvbnQtc2l6ZTogJHt0aGVtZUdldCgnZm9udFdlaWdodHMnLCAnYm9sZGVyJyl9O1xuICAgIGNvbG9yOiAke3RoZW1lR2V0KCdjb2xvcnMnLCAnZ3JleTgwJyl9O1xuICAgIGZvbnQtc2l6ZTogJHt0aGVtZUdldCgnZm9udFNpemVzJywgJ3hsJyl9O1xuICAgIGxpbmUtaGVpZ2h0OiAke3RoZW1lR2V0KCdsaW5lSGVpZ2h0cycsICd4bCcpfTtcbiAgfVxuXG4gICYgPiBpbWcge1xuICAgIG1heC13aWR0aDogMTcwcHg7XG4gIH1cblxuICAmOmhvdmVyIGgxIHtcbiAgICBjb2xvcjogJHt0aGVtZUdldCgnY29sb3JzJywgJ3ByaW1hcnkxMDAnKX07XG4gIH1cbmA7XG5jb25zdCBoID0gbmV3IFZpZXdIZWxwZXJzKCk7XG5jb25zdCBTaWRlYmFyQnJhbmRpbmcgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBicmFuZGluZ1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICBsb2dvLFxuICAgIGNvbXBhbnlOYW1lXG4gIH0gPSBicmFuZGluZztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZExvZ28sIHtcbiAgICBjbGFzc05hbWU6IGNzc0NsYXNzKCdMb2dvJyksXG4gICAgdG86IGguZGFzaGJvYXJkVXJsKCksXG4gICAgXCJkYXRhLWNzc1wiOiBcInNpZGViYXItbG9nb1wiXG4gIH0sIGxvZ28gPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7XG4gICAgc3JjOiBsb2dvLFxuICAgIGFsdDogY29tcGFueU5hbWVcbiAgfSkgOiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImgxXCIsIG51bGwsIGNvbXBhbnlOYW1lKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgYWxsb3dPdmVycmlkZShTaWRlYmFyQnJhbmRpbmcsICdTaWRlYmFyQnJhbmRpbmcnKTtcbmV4cG9ydCB7IFNpZGViYXJCcmFuZGluZyBhcyBPcmlnaW5hbFNpZGViYXJCcmFuZGluZywgU2lkZWJhckJyYW5kaW5nIH07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJveCwgTWFkZVdpdGhMb3ZlIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5jb25zdCBTaWRlYmFyRm9vdGVyID0gKCkgPT4ge1xuICBjb25zdCBicmFuZGluZyA9IHVzZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLmJyYW5kaW5nKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIG10OiBcImxnXCIsXG4gICAgbWI6IFwibWRcIixcbiAgICBcImRhdGEtY3NzXCI6IFwic2lkZWJhci1mb290ZXJcIlxuICB9LCBicmFuZGluZy53aXRoTWFkZVdpdGhMb3ZlICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1hZGVXaXRoTG92ZSwgbnVsbCkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGFsbG93T3ZlcnJpZGUoU2lkZWJhckZvb3RlciwgJ1NpZGViYXJGb290ZXInKTtcbmV4cG9ydCB7IFNpZGViYXJGb290ZXIgYXMgT3JpZ2luYWxTaWRlYmFyRm9vdGVyLCBTaWRlYmFyRm9vdGVyIH07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE5hdmlnYXRpb24gfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IHVzZU5hdmlnYXRlLCB1c2VMb2NhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgVmlld0hlbHBlcnMgZnJvbSAnLi4vLi4vLi4vLi4vYmFja2VuZC91dGlscy92aWV3LWhlbHBlcnMvdmlldy1oZWxwZXJzLmpzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlLXRyYW5zbGF0aW9uLmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5jb25zdCBoID0gbmV3IFZpZXdIZWxwZXJzKCk7XG5jb25zdCBTaWRlYmFyUGFnZXMgPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwYWdlc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHtcbiAgICB0cmFuc2xhdGVMYWJlbCxcbiAgICB0cmFuc2xhdGVQYWdlXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKTtcbiAgaWYgKCFwYWdlcyB8fCAhcGFnZXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgaXNBY3RpdmUgPSBwYWdlID0+ICEhbG9jYXRpb24ucGF0aG5hbWUubWF0Y2goYC9wYWdlcy8ke3BhZ2UubmFtZX1gKTtcbiAgY29uc3QgZWxlbWVudHMgPSBwYWdlcy5tYXAocGFnZSA9PiAoe1xuICAgIGlkOiBwYWdlLm5hbWUsXG4gICAgbGFiZWw6IHRyYW5zbGF0ZVBhZ2UocGFnZS5uYW1lKSxcbiAgICBpc1NlbGVjdGVkOiBpc0FjdGl2ZShwYWdlKSxcbiAgICBpY29uOiBwYWdlLmljb24sXG4gICAgaHJlZjogaC5wYWdlVXJsKHBhZ2UubmFtZSksXG4gICAgb25DbGljazogKGV2ZW50LCBlbGVtZW50KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKGVsZW1lbnQuaHJlZikge1xuICAgICAgICBuYXZpZ2F0ZShlbGVtZW50LmhyZWYpO1xuICAgICAgfVxuICAgIH1cbiAgfSkpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTmF2aWdhdGlvbiwge1xuICAgIGxhYmVsOiB0cmFuc2xhdGVMYWJlbCgncGFnZXMnKSxcbiAgICBlbGVtZW50czogZWxlbWVudHNcbiAgfSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgYWxsb3dPdmVycmlkZShTaWRlYmFyUGFnZXMsICdTaWRlYmFyUGFnZXMnKTtcbmV4cG9ydCB7IFNpZGViYXJQYWdlcyBhcyBPcmlnaW5hbFNpZGViYXJQYWdlcywgU2lkZWJhclBhZ2VzIH07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE5hdmlnYXRpb24gfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlLXRyYW5zbGF0aW9uLmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgeyB1c2VOYXZpZ2F0aW9uUmVzb3VyY2VzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvaW5kZXguanMnO1xuXG4vKipcbiAqIEBhbGlhcyBTaWRlYmFyUmVzb3VyY2VTZWN0aW9uUHJvcHNcbiAqIEBtZW1iZXJvZiBTaWRlYmFyUmVzb3VyY2VTZWN0aW9uXG4gKi9cblxuLyoqXG4gKiBHcm91cHMgcmVzb3VyY2VzIGJ5IHNlY3Rpb25zIGFuZCByZW5kZXJzIHRoZSBsaXN0IGluIHtAbGluayBTaWRlYmFyfVxuICpcbiAqICMjIyBVc2FnZVxuICpcbiAqIGBgYFxuICogaW1wb3J0IHsgU2lkZWJhclJlc291cmNlU2VjdGlvbiB9IGZyb20gJ2FkbWluanNgXG4gKiBgYGBcbiAqXG4gKiBAY29tcG9uZW50XG4gKiBAc3ViY2F0ZWdvcnkgQXBwbGljYXRpb25cbiAqIEBuYW1lIFNpZGViYXJSZXNvdXJjZVNlY3Rpb25cbiAqL1xuY29uc3QgU2lkZWJhclJlc291cmNlU2VjdGlvbk9yaWdpbmFsID0gKHtcbiAgcmVzb3VyY2VzXG59KSA9PiB7XG4gIGNvbnN0IGVsZW1lbnRzID0gdXNlTmF2aWdhdGlvblJlc291cmNlcyhyZXNvdXJjZXMpO1xuICBjb25zdCB7XG4gICAgdHJhbnNsYXRlTGFiZWxcbiAgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOYXZpZ2F0aW9uLCB7XG4gICAgbGFiZWw6IHRyYW5zbGF0ZUxhYmVsKCduYXZpZ2F0aW9uJyksXG4gICAgZWxlbWVudHM6IGVsZW1lbnRzXG4gIH0pO1xufTtcblxuLy8gUm9sbHVwIGNhbm5vdCBoYW5kbGUgdHlwZSBleHBvcnRzIHdlbGwgLSB0aGF0IGlzIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgaGFjayB3aXRoXG4vLyBleHBvcnRpbmcgZGVmYXVsdCBhbmQgbmFtZWQgU2lkZWJhclJlc291cmNlU2VjdGlvblxuY29uc3QgU2lkZWJhclJlc291cmNlU2VjdGlvbiA9IGFsbG93T3ZlcnJpZGUoU2lkZWJhclJlc291cmNlU2VjdGlvbk9yaWdpbmFsLCAnU2lkZWJhclJlc291cmNlU2VjdGlvbicpO1xuZXhwb3J0IHsgU2lkZWJhclJlc291cmNlU2VjdGlvbiwgU2lkZWJhclJlc291cmNlU2VjdGlvbk9yaWdpbmFsIGFzIE9yaWdpbmFsU2lkZWJhclJlc291cmNlU2VjdGlvbiB9O1xuZXhwb3J0IGRlZmF1bHQgU2lkZWJhclJlc291cmNlU2VjdGlvbjsiLCJpbXBvcnQgeyBCb3gsIGNzc0NsYXNzIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgU2lkZWJhckJyYW5kaW5nIGZyb20gJy4vc2lkZWJhci1icmFuZGluZy5qcyc7XG5pbXBvcnQgU2lkZWJhckZvb3RlciBmcm9tICcuL3NpZGViYXItZm9vdGVyLmpzJztcbmltcG9ydCBTaWRlYmFyUGFnZXMgZnJvbSAnLi9zaWRlYmFyLXBhZ2VzLmpzJztcbmltcG9ydCBTaWRlYmFyUmVzb3VyY2VTZWN0aW9uIGZyb20gJy4vc2lkZWJhci1yZXNvdXJjZS1zZWN0aW9uLmpzJztcbmV4cG9ydCBjb25zdCBTSURFQkFSX1pfSU5ERVggPSA1MDtcbmNvbnN0IFN0eWxlZFNpZGViYXIgPSBzdHlsZWQoQm94KWBcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHdpZHRoOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zaXplcy5zaWRlYmFyV2lkdGh9O1xuICBib3JkZXItcmlnaHQ6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmJvcmRlcnMuZGVmYXVsdH07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXgtc2hyaW5rOiAwO1xuICB6LWluZGV4OiAke1NJREVCQVJfWl9JTkRFWH07XG4gIGJhY2tncm91bmQ6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5zaWRlYmFyfTtcblxuICB0cmFuc2l0aW9uOiBsZWZ0IDAuMjVzIGVhc2UtaW4tb3V0O1xuXG4gICYuaGlkZGVuIHtcbiAgICBsZWZ0OiAtJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc2l6ZXMuc2lkZWJhcldpZHRofTtcbiAgfVxuICAmLnZpc2libGUge1xuICAgIGxlZnQ6IDA7XG4gIH1cbmA7XG5TdHlsZWRTaWRlYmFyLmRlZmF1bHRQcm9wcyA9IHtcbiAgcG9zaXRpb246IFsnYWJzb2x1dGUnLCAnYWJzb2x1dGUnLCAnYWJzb2x1dGUnLCAnYWJzb2x1dGUnLCAnaW5pdGlhbCddXG59O1xuY29uc3QgU2lkZWJhck9yaWdpbmFsID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgaXNWaXNpYmxlXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgYnJhbmRpbmcgPSB1c2VTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5icmFuZGluZyk7XG4gIGNvbnN0IHJlc291cmNlcyA9IHVzZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLnJlc291cmNlcyk7XG4gIGNvbnN0IHBhZ2VzID0gdXNlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUucGFnZXMpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3R5bGVkU2lkZWJhciwge1xuICAgIGNsYXNzTmFtZTogaXNWaXNpYmxlID8gJ3Zpc2libGUnIDogJ2hpZGRlbicsXG4gICAgXCJkYXRhLWNzc1wiOiBcInNpZGViYXJcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChTaWRlYmFyQnJhbmRpbmcsIHtcbiAgICBicmFuZGluZzogYnJhbmRpbmdcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIGZsZXhHcm93OiAxLFxuICAgIGNsYXNzTmFtZTogY3NzQ2xhc3MoJ1Jlc291cmNlcycpLFxuICAgIFwiZGF0YS1jc3NcIjogXCJzaWRlYmFyLXJlc291cmNlc1wiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNpZGViYXJSZXNvdXJjZVNlY3Rpb24sIHtcbiAgICByZXNvdXJjZXM6IHJlc291cmNlc1xuICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFNpZGViYXJQYWdlcywge1xuICAgIHBhZ2VzOiBwYWdlc1xuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhckZvb3RlciwgbnVsbCkpO1xufTtcbmNvbnN0IFNpZGViYXIgPSBhbGxvd092ZXJyaWRlKFNpZGViYXJPcmlnaW5hbCwgJ1NpZGViYXInKTtcbmV4cG9ydCB7IFNpZGViYXIsIFNpZGViYXJPcmlnaW5hbCBhcyBPcmlnaW5hbFNpZGViYXIgfTtcbmV4cG9ydCBkZWZhdWx0IFNpZGViYXI7IiwiaW1wb3J0IHsgQm94LCBCdXR0b24sIERyb3BEb3duLCBEcm9wRG93bkl0ZW0sIERyb3BEb3duTWVudSwgRHJvcERvd25UcmlnZ2VyLCBJY29uIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvaW5kZXguanMnO1xuY29uc3QgTGFuZ3VhZ2VTZWxlY3QgPSAoKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpMThuOiB7XG4gICAgICBsYW5ndWFnZSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgc3VwcG9ydGVkTG5nc1xuICAgICAgfSxcbiAgICAgIGNoYW5nZUxhbmd1YWdlXG4gICAgfSxcbiAgICB0cmFuc2xhdGVDb21wb25lbnRcbiAgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGF2YWlsYWJsZUxhbmd1YWdlcyA9IHVzZU1lbW8oKCkgPT4gc3VwcG9ydGVkTG5ncyA/IHN1cHBvcnRlZExuZ3MuZmlsdGVyKGxhbmcgPT4gbGFuZyAhPT0gJ2NpbW9kZScpIDogW10sIFtzdXBwb3J0ZWRMbmdzXSk7XG4gIGlmIChhdmFpbGFibGVMYW5ndWFnZXMubGVuZ3RoIDw9IDEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgZmxleDogdHJ1ZSxcbiAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyb3BEb3duLCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEcm9wRG93blRyaWdnZXIsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJ1dHRvbiwge1xuICAgIGNvbG9yOiBcInRleHRcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgaWNvbjogXCJHbG9iZVwiXG4gIH0pLCB0cmFuc2xhdGVDb21wb25lbnQoYExhbmd1YWdlU2VsZWN0b3IuYXZhaWxhYmxlTGFuZ3VhZ2VzLiR7bGFuZ3VhZ2V9YCwge1xuICAgIGRlZmF1bHRWYWx1ZTogbGFuZ3VhZ2VcbiAgfSkpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJvcERvd25NZW51LCBudWxsLCBhdmFpbGFibGVMYW5ndWFnZXMubWFwKGxhbmcgPT4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJvcERvd25JdGVtLCB7XG4gICAga2V5OiBsYW5nLFxuICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgIGNoYW5nZUxhbmd1YWdlKGxhbmcpO1xuICAgIH1cbiAgfSwgdHJhbnNsYXRlQ29tcG9uZW50KGBMYW5ndWFnZVNlbGVjdG9yLmF2YWlsYWJsZUxhbmd1YWdlcy4ke2xhbmd9YCwge1xuICAgIGRlZmF1bHRWYWx1ZTogbGFuZ1xuICB9KSkpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IExhbmd1YWdlU2VsZWN0OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjc3NDbGFzcywgVGV4dCwgQm94IH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vaG9va3MvaW5kZXguanMnO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmNvbnN0IFZlcnNpb25JdGVtID0gc3R5bGVkKFRleHQpYFxuICBwYWRkaW5nOiAxMnB4IDI0cHggMTJweCAwO1xuYDtcblZlcnNpb25JdGVtLmRlZmF1bHRQcm9wcyA9IHtcbiAgZGlzcGxheTogWydub25lJywgJ2Jsb2NrJ10sXG4gIGNvbG9yOiAnZ3JleTEwMCdcbn07XG5jb25zdCBWZXJzaW9uID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgdmVyc2lvbnNcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgYWRtaW4sXG4gICAgYXBwXG4gIH0gPSB2ZXJzaW9ucztcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZUxhYmVsXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgZmxleDogdHJ1ZSxcbiAgICBmbGV4R3JvdzogMSxcbiAgICBweTogXCJkZWZhdWx0XCIsXG4gICAgcHg6IFwieHhsXCIsXG4gICAgY2xhc3NOYW1lOiBjc3NDbGFzcygnVmVyc2lvbicpLFxuICAgIFwiZGF0YS1jc3NcIjogXCJ2ZXJzaW9uXCJcbiAgfSwgYWRtaW4gJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVmVyc2lvbkl0ZW0sIG51bGwsIHRyYW5zbGF0ZUxhYmVsKCdhZG1pblZlcnNpb24nLCB7XG4gICAgdmVyc2lvbjogYWRtaW5cbiAgfSkpLCBhcHAgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVmVyc2lvbkl0ZW0sIG51bGwsIHRyYW5zbGF0ZUxhYmVsKCdhcHBWZXJzaW9uJywge1xuICAgIHZlcnNpb246IGFwcFxuICB9KSkpO1xufTtcbmNvbnN0IE92ZXJyaWRhYmxlVmVyc2lvbiA9IGFsbG93T3ZlcnJpZGUoVmVyc2lvbiwgJ1ZlcnNpb24nKTtcbmV4cG9ydCB7IE92ZXJyaWRhYmxlVmVyc2lvbiBhcyBkZWZhdWx0LCBPdmVycmlkYWJsZVZlcnNpb24gYXMgVmVyc2lvbiwgVmVyc2lvbiBhcyBPcmlnaW5hbFZlcnNpb24gfTsiLCJpbXBvcnQgeyBCb3gsIEljb24sIGNzc0NsYXNzIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgTGFuZ3VhZ2VTZWxlY3QgZnJvbSAnLi9sYW5ndWFnZS1zZWxlY3QvbGFuZ3VhZ2Utc2VsZWN0LmpzJztcbmltcG9ydCBMb2dnZWRJbiBmcm9tICcuL2xvZ2dlZC1pbi5qcyc7XG5pbXBvcnQgVmVyc2lvbiBmcm9tICcuL3ZlcnNpb24uanMnO1xuY29uc3QgTmF2QmFyID0gc3R5bGVkKEJveClgXG4gIGhlaWdodDogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc2l6ZXMubmF2YmFySGVpZ2h0fTtcbiAgYm9yZGVyLWJvdHRvbTogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuYm9yZGVycy5kZWZhdWx0fTtcbiAgYmFja2dyb3VuZDogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLmNvbnRhaW5lcn07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGZsZXgtc2hyaW5rOiAwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuYDtcbk5hdkJhci5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZTogY3NzQ2xhc3MoJ05hdkJhcicpXG59O1xuY29uc3QgVG9wQmFyID0gcHJvcHMgPT4ge1xuICBjb25zdCB7XG4gICAgdG9nZ2xlU2lkZWJhclxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHNlc3Npb24gPSB1c2VTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5zZXNzaW9uKTtcbiAgY29uc3QgcGF0aHMgPSB1c2VTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5wYXRocyk7XG4gIGNvbnN0IHZlcnNpb25zID0gdXNlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUudmVyc2lvbnMpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTmF2QmFyLCB7XG4gICAgXCJkYXRhLWNzc1wiOiBcInRvcGJhclwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIHB5OiBcImxnXCIsXG4gICAgcHg6IFsnZGVmYXVsdCcsICdsZyddLFxuICAgIG9uQ2xpY2s6IHRvZ2dsZVNpZGViYXIsXG4gICAgZGlzcGxheTogWydibG9jaycsICdibG9jaycsICdibG9jaycsICdibG9jaycsICdub25lJ10sXG4gICAgc3R5bGU6IHtcbiAgICAgIGN1cnNvcjogJ3BvaW50ZXInXG4gICAgfVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7XG4gICAgaWNvbjogXCJNZW51XCIsXG4gICAgc2l6ZTogMjRcbiAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChWZXJzaW9uLCB7XG4gICAgdmVyc2lvbnM6IHZlcnNpb25zXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMYW5ndWFnZVNlbGVjdCwgbnVsbCksIHNlc3Npb24gJiYgc2Vzc2lvbi5lbWFpbCA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExvZ2dlZEluLCB7XG4gICAgc2Vzc2lvbjogc2Vzc2lvbixcbiAgICBwYXRoczogcGF0aHNcbiAgfSkgOiAnJyk7XG59O1xuY29uc3QgT3ZlcnJpZGFibGVUb3BiYXIgPSBhbGxvd092ZXJyaWRlKFRvcEJhciwgJ1RvcEJhcicpO1xuZXhwb3J0IHsgT3ZlcnJpZGFibGVUb3BiYXIgYXMgVG9wQmFyLCBPdmVycmlkYWJsZVRvcGJhciBhcyBkZWZhdWx0LCBUb3BCYXIgYXMgT3JpZ2luYWxUb3BCYXIgfTsiLCJpbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuY29uc3QgRm9vdGVyID0gKCkgPT4gbnVsbDtcbmNvbnN0IE92ZXJyaWRhYmxlRm9vdGVyID0gYWxsb3dPdmVycmlkZShGb290ZXIsICdGb290ZXInKTtcbmV4cG9ydCB7IE92ZXJyaWRhYmxlRm9vdGVyIGFzIGRlZmF1bHQsIE92ZXJyaWRhYmxlRm9vdGVyIGFzIEZvb3RlciwgRm9vdGVyIGFzIE9yaWdpbmFsRm9vdGVyIH07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgRGVmYXVsdERhc2hib2FyZCBmcm9tICcuLi9hcHAvZGVmYXVsdC1kYXNoYm9hcmQuanMnO1xuaW1wb3J0IEVycm9yQm91bmRhcnkgZnJvbSAnLi4vYXBwL2Vycm9yLWJvdW5kYXJ5LmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5jbGFzcyBEYXNoYm9hcmQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNDbGllbnQ6IGZhbHNlXG4gICAgfTtcbiAgfVxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzQ2xpZW50OiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhc2hib2FyZFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHtcbiAgICAgIGlzQ2xpZW50XG4gICAgfSA9IHRoaXMuc3RhdGU7XG4gICAgbGV0IENvbXBvbmVudDtcbiAgICBpZiAoZGFzaGJvYXJkICYmIGRhc2hib2FyZC5jb21wb25lbnQgJiYgaXNDbGllbnQgJiYgQWRtaW5KUy5Vc2VyQ29tcG9uZW50c1tkYXNoYm9hcmQuY29tcG9uZW50XSkge1xuICAgICAgQ29tcG9uZW50ID0gQWRtaW5KUy5Vc2VyQ29tcG9uZW50c1tkYXNoYm9hcmQuY29tcG9uZW50XTtcbiAgICB9IGVsc2Uge1xuICAgICAgQ29tcG9uZW50ID0gRGVmYXVsdERhc2hib2FyZDtcbiAgICB9XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEVycm9yQm91bmRhcnksIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgbnVsbCkpO1xuICB9XG59XG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSBzdGF0ZSA9PiAoe1xuICBkYXNoYm9hcmQ6IHN0YXRlLmRhc2hib2FyZFxufSk7XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzKShEYXNoYm9hcmQpLCAnRGFzaGJvYXJkUm91dGUnKTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBCb3gsIERyYXdlciwgRHJhd2VyQ29udGVudCwgRHJhd2VyRm9vdGVyIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5jb25zdCBTdHlsZWRXcmFwcGVyV2l0aEZpbHRlciA9IHN0eWxlZChCb3gpYFxuICAmID4gJHtEcmF3ZXJ9IHtcbiAgICBib3JkZXItcmFkaXVzOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS5zbX07XG4gIH1cblxuICAmID4gJHtEcmF3ZXJDb250ZW50fSB7XG4gICAgYmFja2dyb3VuZDogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLmNvbnRhaW5lcn07XG4gICAgcGFkZGluZzogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc3BhY2UueHhsfTtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxuXG4gICYgPiAke0RyYXdlckZvb3Rlcn0ge1xuICAgIGJhY2tncm91bmQ6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5jb250YWluZXJ9O1xuICAgIHBhZGRpbmc6IDAgJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuc3BhY2UueHhsfSAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS54eGx9O1xuICB9XG5gO1xuY29uc3QgU3R5bGVkV3JhcHBlciA9IHN0eWxlZChCb3gpYFxuICAmICR7RHJhd2VyQ29udGVudH0ge1xuICAgIGJhY2tncm91bmQ6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLmNvbG9ycy5jb250YWluZXJ9O1xuICAgIHBhZGRpbmc6ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnNwYWNlLnh4bH07XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gIH1cblxuICAmICR7RHJhd2VyRm9vdGVyfSB7XG4gICAgYmFja2dyb3VuZDogJHsoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUuY29sb3JzLmNvbnRhaW5lcn07XG4gICAgcGFkZGluZzogMCAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS54eGx9ICR7KHtcbiAgdGhlbWVcbn0pID0+IHRoZW1lLnNwYWNlLnh4bH07XG4gIH1cbmA7XG5jb25zdCBXcmFwcGVyID0gcHJvcHMgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICB2YXJpYW50LFxuICAgIGNvbG9yLFxuICAgIHNob3dGaWx0ZXIgPSBmYWxzZSxcbiAgICAnZGF0YS1jc3MnOiBkYXRhQ3NzLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICBjb25zdCBDb21wb25lbnQgPSBzaG93RmlsdGVyID8gU3R5bGVkV3JhcHBlcldpdGhGaWx0ZXIgOiBTdHlsZWRXcmFwcGVyO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xuICAgIHZhcmlhbnQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICBteDogXCJhdXRvXCIsXG4gICAgXCJkYXRhLWNzc1wiOiBkYXRhQ3NzIHx8ICdzdHlsZWQtd3JhcHBlcidcbiAgfSksIGNoaWxkcmVuKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKFdyYXBwZXIsICdSb3V0ZVdyYXBwZXInKTsiLCJpbXBvcnQgeyBCb3gsIEJ1dHRvbiwgRm9ybUdyb3VwLCBIMiwgSDUsIElsbHVzdHJhdGlvbiwgSW5wdXQsIExhYmVsLCBNYWRlV2l0aExvdmUsIE1lc3NhZ2VCb3gsIFRleHQgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVNlbGVjdG9yIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgYWxsb3dPdmVycmlkZSB9IGZyb20gJy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL2hvb2tzL2luZGV4LmpzJztcbmNvbnN0IFdyYXBwZXIgPSBzdHlsZWQoQm94KWBcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGhlaWdodDogMTAwJTtcbmA7XG5jb25zdCBTdHlsZWRMb2dvID0gc3R5bGVkLmltZ2BcbiAgbWF4LXdpZHRoOiAyMDBweDtcbiAgbWFyZ2luOiAkeyh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS5zcGFjZS5tZH0gMDtcbmA7XG5jb25zdCBJbGx1c3RyYXRpb25zV3JhcHBlciA9IHN0eWxlZChCb3gpYFxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAmIHN2ZyBbc3Ryb2tlPScjM0IzNTUyJ10ge1xuICAgIHN0cm9rZTogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICB9XG4gICYgc3ZnIFtmaWxsPScjMzA0MEQ2J10ge1xuICAgIGZpbGw6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMSk7XG4gIH1cbmA7XG5leHBvcnQgY29uc3QgTG9naW4gPSAoKSA9PiB7XG4gIGNvbnN0IHByb3BzID0gd2luZG93Ll9fQVBQX1NUQVRFX187XG4gIGNvbnN0IHtcbiAgICBhY3Rpb24sXG4gICAgZXJyb3JNZXNzYWdlOiBtZXNzYWdlXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHRyYW5zbGF0ZUNvbXBvbmVudCxcbiAgICB0cmFuc2xhdGVNZXNzYWdlXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBicmFuZGluZyA9IHVzZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLmJyYW5kaW5nKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZXIsIHtcbiAgICBmbGV4OiB0cnVlLFxuICAgIHZhcmlhbnQ6IFwiZ3JleVwiLFxuICAgIGNsYXNzTmFtZTogXCJsb2dpbl9fV3JhcHBlclwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIGJnOiBcIndoaXRlXCIsXG4gICAgaGVpZ2h0OiBcIjQ0MHB4XCIsXG4gICAgZmxleDogdHJ1ZSxcbiAgICBib3hTaGFkb3c6IFwibG9naW5cIixcbiAgICB3aWR0aDogWzEsIDIgLyAzLCAnYXV0byddXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIGJnOiBcInByaW1hcnkxMDBcIixcbiAgICBjb2xvcjogXCJ3aGl0ZVwiLFxuICAgIHA6IFwieDNcIixcbiAgICB3aWR0aDogXCIzODBweFwiLFxuICAgIGZsZXhHcm93OiAwLFxuICAgIGRpc3BsYXk6IFsnbm9uZScsICdub25lJywgJ2Jsb2NrJ10sXG4gICAgcG9zaXRpb246IFwicmVsYXRpdmVcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChIMiwge1xuICAgIGZvbnRXZWlnaHQ6IFwibGlnaHRlclwiXG4gIH0sIHRyYW5zbGF0ZUNvbXBvbmVudCgnTG9naW4ud2VsY29tZUhlYWRlcicpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwge1xuICAgIGZvbnRXZWlnaHQ6IFwibGlnaHRlclwiLFxuICAgIG10OiBcImRlZmF1bHRcIlxuICB9LCB0cmFuc2xhdGVDb21wb25lbnQoJ0xvZ2luLndlbGNvbWVNZXNzYWdlJykpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbGx1c3RyYXRpb25zV3JhcHBlciwge1xuICAgIHA6IFwieHhsXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgZGlzcGxheTogXCJpbmxpbmVcIixcbiAgICBtcjogXCJkZWZhdWx0XCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWxsdXN0cmF0aW9uLCB7XG4gICAgdmFyaWFudDogXCJQbGFuZXRcIixcbiAgICB3aWR0aDogODIsXG4gICAgaGVpZ2h0OiA5MVxuICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIGRpc3BsYXk6IFwiaW5saW5lXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSWxsdXN0cmF0aW9uLCB7XG4gICAgdmFyaWFudDogXCJBc3Ryb25hdXRcIixcbiAgICB3aWR0aDogODIsXG4gICAgaGVpZ2h0OiA5MVxuICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIGRpc3BsYXk6IFwiaW5saW5lXCIsXG4gICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICB0b3A6IFwiLTIwcHhcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbGx1c3RyYXRpb24sIHtcbiAgICB2YXJpYW50OiBcIkZsYWdJbkNvZ1wiLFxuICAgIHdpZHRoOiA4MixcbiAgICBoZWlnaHQ6IDkxXG4gIH0pKSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBhczogXCJmb3JtXCIsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICBwOiBcIngzXCIsXG4gICAgZmxleEdyb3c6IDEsXG4gICAgd2lkdGg6IFsnMTAwJScsICcxMDAlJywgJzQ4MHB4J11cbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSDUsIHtcbiAgICBtYXJnaW5Cb3R0b206IFwieHhsXCJcbiAgfSwgYnJhbmRpbmcubG9nbyA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFN0eWxlZExvZ28sIHtcbiAgICBzcmM6IGJyYW5kaW5nLmxvZ28sXG4gICAgYWx0OiBicmFuZGluZy5jb21wYW55TmFtZVxuICB9KSA6IGJyYW5kaW5nLmNvbXBhbnlOYW1lKSwgbWVzc2FnZSAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChNZXNzYWdlQm94LCB7XG4gICAgbXk6IFwibGdcIixcbiAgICBtZXNzYWdlOiBtZXNzYWdlLnNwbGl0KCcgJykubGVuZ3RoID4gMSA/IG1lc3NhZ2UgOiB0cmFuc2xhdGVNZXNzYWdlKG1lc3NhZ2UpLFxuICAgIHZhcmlhbnQ6IFwiZGFuZ2VyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Hcm91cCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGFiZWwsIHtcbiAgICByZXF1aXJlZDogdHJ1ZVxuICB9LCB0cmFuc2xhdGVDb21wb25lbnQoJ0xvZ2luLnByb3BlcnRpZXMuZW1haWwnKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KElucHV0LCB7XG4gICAgbmFtZTogXCJlbWFpbFwiLFxuICAgIHBsYWNlaG9sZGVyOiB0cmFuc2xhdGVDb21wb25lbnQoJ0xvZ2luLnByb3BlcnRpZXMuZW1haWwnKVxuICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZvcm1Hcm91cCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTGFiZWwsIHtcbiAgICByZXF1aXJlZDogdHJ1ZVxuICB9LCB0cmFuc2xhdGVDb21wb25lbnQoJ0xvZ2luLnByb3BlcnRpZXMucGFzc3dvcmQnKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KElucHV0LCB7XG4gICAgdHlwZTogXCJwYXNzd29yZFwiLFxuICAgIG5hbWU6IFwicGFzc3dvcmRcIixcbiAgICBwbGFjZWhvbGRlcjogdHJhbnNsYXRlQ29tcG9uZW50KCdMb2dpbi5wcm9wZXJ0aWVzLnBhc3N3b3JkJyksXG4gICAgYXV0b0NvbXBsZXRlOiBcIm5ldy1wYXNzd29yZFwiXG4gIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwge1xuICAgIG10OiBcInhsXCIsXG4gICAgdGV4dEFsaWduOiBcImNlbnRlclwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJ1dHRvbiwge1xuICAgIHZhcmlhbnQ6IFwiY29udGFpbmVkXCJcbiAgfSwgdHJhbnNsYXRlQ29tcG9uZW50KCdMb2dpbi5sb2dpbkJ1dHRvbicpKSkpKSwgYnJhbmRpbmcud2l0aE1hZGVXaXRoTG92ZSA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIG10OiBcInh4bFwiXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1hZGVXaXRoTG92ZSwgbnVsbCkpIDogbnVsbCk7XG59O1xuZXhwb3J0IGRlZmF1bHQgYWxsb3dPdmVycmlkZShMb2dpbiwgJ0xvZ2luJyk7IiwiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxuICogQSBoaWdoZXItb3JkZXIgY29tcG9uZW50IHRoYXQgcHJldmVudHMgYSBjb21wb25lbnQgZnJvbSByZW5kZXJpbmcgc2VydmVyLXNpZGVcbiAqXG4gKiBAdGVtcGxhdGUgUCAtIFRoZSBwcm9wcyBvYmplY3Qgb2YgdGhlIHdyYXBwZWQgY29tcG9uZW50XG4gKiBAcGFyYW0ge1JlYWN0LkNvbXBvbmVudFR5cGU8UD59IENvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgdG8gYmUgd3JhcHBlZFxuICogQHJldHVybnMge1JlYWN0LkZDPFA+fSBBIG5ldyBjb21wb25lbnQgdGhhdCByZW5kZXJzIHRoZSBnaXZlbiBjb21wb25lbnQgY2xpZW50LXNpZGUgb25seVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuY29uc3Qgd2l0aE5vU1NSID0gQ29tcG9uZW50ID0+IHByb3BzID0+IHtcbiAgY29uc3QgW2lzQ2xpZW50LCBzZXRJc0NsaWVudF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgLyoqXG4gICAqIFNldHMgaXNDbGllbnQgdG8gdHJ1ZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZCBvbiB0aGUgY2xpZW50IHNpZGVcbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0SXNDbGllbnQodHJ1ZSk7XG4gIH0sIFtdKTtcblxuICAvLyBSZW5kZXJzIG5vdGhpbmcgaWYgdGhlIGNvbXBvbmVudCBpcyBub3QgbW91bnRlZCBvbiB0aGUgY2xpZW50IHNpZGVcbiAgaWYgKCFpc0NsaWVudCkgcmV0dXJuIG51bGw7XG5cbiAgLy8gUmVuZGVycyB0aGUgd3JhcHBlZCBjb21wb25lbnQgd2l0aCB0aGUgZ2l2ZW4gcHJvcHMgaWYgaXQncyBtb3VudGVkIG9uIHRoZSBjbGllbnQgc2lkZVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBwcm9wcyk7XG59O1xuZXhwb3J0IHsgd2l0aE5vU1NSIGFzIGRlZmF1bHQsIHdpdGhOb1NTUiB9OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZXZUb29sc0VuaGFuY2VyID0gZXhwb3J0cy5jb21wb3NlV2l0aERldlRvb2xzID0gdm9pZCAwO1xudmFyIF9yZWR1eCA9IHJlcXVpcmUoXCJyZWR1eFwiKTtcbmZ1bmN0aW9uIGV4dGVuc2lvbkNvbXBvc2VTdHViKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiBmdW5jc1swXSA9PT0gJ29iamVjdCcpIHJldHVybiBfcmVkdXguY29tcG9zZTtcbiAgcmV0dXJuICgwLCBfcmVkdXguY29tcG9zZSkoLi4uZnVuY3MpO1xufVxuY29uc3QgY29tcG9zZVdpdGhEZXZUb29scyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfXyA/IHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX18gOiBleHRlbnNpb25Db21wb3NlU3R1YjtcbmV4cG9ydHMuY29tcG9zZVdpdGhEZXZUb29scyA9IGNvbXBvc2VXaXRoRGV2VG9vbHM7XG5jb25zdCBkZXZUb29sc0VuaGFuY2VyID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyA/IHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKG5vb3ApIHtcbiAgICByZXR1cm4gbm9vcDtcbiAgfTtcbn07XG5leHBvcnRzLmRldlRvb2xzRW5oYW5jZXIgPSBkZXZUb29sc0VuaGFuY2VyOyIsImZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7XG4gICAgXCJkZWZhdWx0XCI6IG9ialxuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSBhc3NpZ247XG5jb25zdCBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICBjb25zdCBrZXlzID0gW107XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59O1xuZnVuY3Rpb24gYXNzaWduKG9iaiwgbmV3S2V5LCBuZXdWYWx1ZSkge1xuICBjb25zdCBrZXlzID0gb2JqZWN0S2V5cyhvYmopO1xuICBjb25zdCBjb3B5ID0ge307XG4gIGZvciAobGV0IGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgIGNvcHlba2V5XSA9IG9ialtrZXldO1xuICB9XG4gIGNvcHlbbmV3S2V5XSA9IG5ld1ZhbHVlO1xuICByZXR1cm4gY29weTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHRcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wb3NlV2l0aERldlRvb2xzID0gY29tcG9zZVdpdGhEZXZUb29scztcbmV4cG9ydHMuZGV2VG9vbHNFbmhhbmNlciA9IHZvaWQgMDtcbnZhciBfYXNzaWduID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9hc3NpZ25cIikpO1xudmFyIF9yZWR1eCA9IHJlcXVpcmUoXCJyZWR1eFwiKTtcbmZ1bmN0aW9uIGVuaGFuY2VyKG9wdGlvbnMpIHtcbiAgY29uc3QgY29uZmlnID0gb3B0aW9ucyB8fCB7fTtcbiAgY29uZmlnLmZlYXR1cmVzID0ge1xuICAgIHBhdXNlOiB0cnVlLFxuICAgIGV4cG9ydDogdHJ1ZSxcbiAgICB0ZXN0OiB0cnVlXG4gIH07XG4gIGNvbmZpZy50eXBlID0gJ3JlZHV4JztcbiAgaWYgKGNvbmZpZy5hdXRvUGF1c2UgPT09IHVuZGVmaW5lZCkgY29uZmlnLmF1dG9QYXVzZSA9IHRydWU7XG4gIGlmIChjb25maWcubGF0ZW5jeSA9PT0gdW5kZWZpbmVkKSBjb25maWcubGF0ZW5jeSA9IDUwMDtcbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUpIHtcbiAgICAgIGNvbnN0IHN0b3JlID0gY3JlYXRlU3RvcmUocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUpO1xuICAgICAgY29uc3Qgb3JpZ0Rpc3BhdGNoID0gc3RvcmUuZGlzcGF0Y2g7XG4gICAgICBjb25zdCBkZXZUb29scyA9IHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fLmNvbm5lY3QoY29uZmlnKTtcbiAgICAgIGRldlRvb2xzLmluaXQoc3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgICBjb25zdCBkaXNwYXRjaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgY29uc3QgciA9IG9yaWdEaXNwYXRjaChhY3Rpb24pO1xuICAgICAgICBkZXZUb29scy5zZW5kKGFjdGlvbiwgc3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfTtcbiAgICAgIGlmIChPYmplY3QuYXNzaWduKSByZXR1cm4gT2JqZWN0LmFzc2lnbihzdG9yZSwge1xuICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2hcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuICgwLCBfYXNzaWduLmRlZmF1bHQpKHN0b3JlLCAnZGlzcGF0Y2gnLCBkaXNwYXRjaCk7XG4gICAgfTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGNvbXBvc2VXaXRoRW5oYW5jZXIoY29uZmlnKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICgwLCBfcmVkdXguY29tcG9zZSkoKDAsIF9yZWR1eC5jb21wb3NlKSguLi5hcmd1bWVudHMpLCBlbmhhbmNlcihjb25maWcpKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGNvbXBvc2VXaXRoRGV2VG9vbHMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBmdW5jcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBmdW5jc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18pIHtcbiAgICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSByZXR1cm4gZW5oYW5jZXIoKTtcbiAgICBpZiAodHlwZW9mIGZ1bmNzWzBdID09PSAnb2JqZWN0JykgcmV0dXJuIGNvbXBvc2VXaXRoRW5oYW5jZXIoZnVuY3NbMF0pO1xuICAgIHJldHVybiBjb21wb3NlV2l0aEVuaGFuY2VyKCkoLi4uZnVuY3MpO1xuICB9XG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgZnVuY3NbMF0gPT09ICdvYmplY3QnKSByZXR1cm4gX3JlZHV4LmNvbXBvc2U7XG4gIHJldHVybiAoMCwgX3JlZHV4LmNvbXBvc2UpKC4uLmZ1bmNzKTtcbn1cbmNvbnN0IGRldlRvb2xzRW5oYW5jZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyA/IGVuaGFuY2VyIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKG5vb3ApIHtcbiAgICByZXR1cm4gbm9vcDtcbiAgfTtcbn07XG5leHBvcnRzLmRldlRvb2xzRW5oYW5jZXIgPSBkZXZUb29sc0VuaGFuY2VyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZXZUb29sc0VuaGFuY2VyID0gZXhwb3J0cy5jb21wb3NlV2l0aERldlRvb2xzID0gdm9pZCAwO1xudmFyIF9yZWR1eCA9IHJlcXVpcmUoXCJyZWR1eFwiKTtcbnZhciBsb2dPbmx5ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vbG9nT25seVwiKSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApIHsgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsOyB2YXIgY2FjaGVCYWJlbEludGVyb3AgPSBuZXcgV2Vha01hcCgpOyB2YXIgY2FjaGVOb2RlSW50ZXJvcCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKG5vZGVJbnRlcm9wKSB7IHJldHVybiBub2RlSW50ZXJvcCA/IGNhY2hlTm9kZUludGVyb3AgOiBjYWNoZUJhYmVsSW50ZXJvcDsgfSkobm9kZUludGVyb3ApOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmosIG5vZGVJbnRlcm9wKSB7IGlmICghbm9kZUludGVyb3AgJiYgb2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgeyByZXR1cm4geyBkZWZhdWx0OiBvYmogfTsgfSB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUobm9kZUludGVyb3ApOyBpZiAoY2FjaGUgJiYgY2FjaGUuaGFzKG9iaikpIHsgcmV0dXJuIGNhY2hlLmdldChvYmopOyB9IHZhciBuZXdPYmogPSB7fTsgdmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChrZXkgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHsgdmFyIGRlc2MgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSA6IG51bGw7IGlmIChkZXNjICYmIChkZXNjLmdldCB8fCBkZXNjLnNldCkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09iaiwga2V5LCBkZXNjKTsgfSBlbHNlIHsgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IH0gbmV3T2JqLmRlZmF1bHQgPSBvYmo7IGlmIChjYWNoZSkgeyBjYWNoZS5zZXQob2JqLCBuZXdPYmopOyB9IHJldHVybiBuZXdPYmo7IH1cbmZ1bmN0aW9uIGV4dGVuc2lvbkNvbXBvc2VTdHViKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiBmdW5jc1swXSA9PT0gJ29iamVjdCcpIHJldHVybiBfcmVkdXguY29tcG9zZTtcbiAgcmV0dXJuICgwLCBfcmVkdXguY29tcG9zZSkoLi4uZnVuY3MpO1xufVxuY29uc3QgY29tcG9zZVdpdGhEZXZUb29scyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgPyBsb2dPbmx5LmNvbXBvc2VXaXRoRGV2VG9vbHMgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fID8gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfXyA6IGV4dGVuc2lvbkNvbXBvc2VTdHViO1xuZXhwb3J0cy5jb21wb3NlV2l0aERldlRvb2xzID0gY29tcG9zZVdpdGhEZXZUb29scztcbmNvbnN0IGRldlRvb2xzRW5oYW5jZXIgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nID8gbG9nT25seS5kZXZUb29sc0VuaGFuY2VyIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX18gPyB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChub29wKSB7XG4gICAgcmV0dXJuIG5vb3A7XG4gIH07XG59O1xuZXhwb3J0cy5kZXZUb29sc0VuaGFuY2VyID0gZGV2VG9vbHNFbmhhbmNlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcG9zZVdpdGhEZXZUb29scyA9IHZvaWQgMDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXBvc2VXaXRoRGV2VG9vbHNEZXZlbG9wbWVudE9ubHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2RldmVsb3BtZW50T25seS5jb21wb3NlV2l0aERldlRvb2xzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXBvc2VXaXRoRGV2VG9vbHNMb2dPbmx5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9sb2dPbmx5LmNvbXBvc2VXaXRoRGV2VG9vbHM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcG9zZVdpdGhEZXZUb29sc0xvZ09ubHlJblByb2R1Y3Rpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2xvZ09ubHlJblByb2R1Y3Rpb24uY29tcG9zZVdpdGhEZXZUb29scztcbiAgfVxufSk7XG5leHBvcnRzLmRldlRvb2xzRW5oYW5jZXIgPSB2b2lkIDA7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZXZUb29sc0VuaGFuY2VyRGV2ZWxvcG1lbnRPbmx5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kZXZlbG9wbWVudE9ubHkuZGV2VG9vbHNFbmhhbmNlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZXZUb29sc0VuaGFuY2VyTG9nT25seVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfbG9nT25seS5kZXZUb29sc0VuaGFuY2VyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRldlRvb2xzRW5oYW5jZXJMb2dPbmx5SW5Qcm9kdWN0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9sb2dPbmx5SW5Qcm9kdWN0aW9uLmRldlRvb2xzRW5oYW5jZXI7XG4gIH1cbn0pO1xudmFyIF9yZWR1eCA9IHJlcXVpcmUoXCJyZWR1eFwiKTtcbnZhciBfZGV2ZWxvcG1lbnRPbmx5ID0gcmVxdWlyZShcIi4vZGV2ZWxvcG1lbnRPbmx5XCIpO1xudmFyIF9sb2dPbmx5ID0gcmVxdWlyZShcIi4vbG9nT25seVwiKTtcbnZhciBfbG9nT25seUluUHJvZHVjdGlvbiA9IHJlcXVpcmUoXCIuL2xvZ09ubHlJblByb2R1Y3Rpb25cIik7XG5mdW5jdGlvbiBleHRlbnNpb25Db21wb3NlU3R1YigpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZ1bmNzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZ1bmNzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgZnVuY3NbMF0gPT09ICdvYmplY3QnKSByZXR1cm4gX3JlZHV4LmNvbXBvc2U7XG4gIHJldHVybiAoMCwgX3JlZHV4LmNvbXBvc2UpKC4uLmZ1bmNzKTtcbn1cbmNvbnN0IGNvbXBvc2VXaXRoRGV2VG9vbHMgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fQ09NUE9TRV9fID8gd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX0NPTVBPU0VfXyA6IGV4dGVuc2lvbkNvbXBvc2VTdHViO1xuZXhwb3J0cy5jb21wb3NlV2l0aERldlRvb2xzID0gY29tcG9zZVdpdGhEZXZUb29scztcbmNvbnN0IGRldlRvb2xzRW5oYW5jZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXyA/IHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKG5vb3ApIHtcbiAgICByZXR1cm4gbm9vcDtcbiAgfTtcbn07XG5leHBvcnRzLmRldlRvb2xzRW5oYW5jZXIgPSBkZXZUb29sc0VuaGFuY2VyOyIsImltcG9ydCB7IEFTU0VUU19JTklUSUFMSVpFIH0gZnJvbSAnLi4vYWN0aW9ucy9pbml0aWFsaXplLWFzc2V0cy5qcyc7XG5leHBvcnQgY29uc3QgYXNzZXRzUmVkdWNlciA9IChzdGF0ZSA9IHt9LCBhY3Rpb24pID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgQVNTRVRTX0lOSVRJQUxJWkU6XG4gICAgICByZXR1cm4gYWN0aW9uLmRhdGE7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTsiLCJpbXBvcnQgeyBCUkFORElOR19JTklUSUFMSVpFIH0gZnJvbSAnLi4vYWN0aW9ucy9pbml0aWFsaXplLWJyYW5kaW5nLmpzJztcbmV4cG9ydCBjb25zdCBicmFuZGluZ1JlZHVjZXIgPSAoc3RhdGUgPSB7fSwgYWN0aW9uKSA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIEJSQU5ESU5HX0lOSVRJQUxJWkU6XG4gICAgICByZXR1cm4gYWN0aW9uLmRhdGE7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTsiLCJpbXBvcnQgeyBEQVNIQk9BUkRfSU5JVElBTElaRSB9IGZyb20gJy4uL2FjdGlvbnMvaW5pdGlhbGl6ZS1kYXNoYm9hcmQuanMnO1xuZXhwb3J0IGNvbnN0IGRhc2hib2FyZFJlZHVjZXIgPSAoc3RhdGUgPSB7fSwgYWN0aW9uKSA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIERBU0hCT0FSRF9JTklUSUFMSVpFOlxuICAgICAgcmV0dXJuIGFjdGlvbi5kYXRhO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07IiwiaW1wb3J0IHsgRFJBV0VSX1BSRVJPVVRFX1NFVCB9IGZyb20gJy4uL2FjdGlvbnMvc2V0LWRyYXdlci1wcmVyb3V0ZS5qcyc7XG5leHBvcnQgY29uc3QgZHJhd2VyUmVkdWNlciA9IChzdGF0ZSA9IHtcbiAgcHJldmlvdXNSb3V0ZTogbnVsbFxufSwgYWN0aW9uKSA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIERSQVdFUl9QUkVST1VURV9TRVQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgLi4uYWN0aW9uLmRhdGFcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9XG4gIH1cbn07IiwiaW1wb3J0IHsgQ0xPU0VfRklMVEVSX0RSQVdFUiwgT1BFTl9GSUxURVJfRFJBV0VSIH0gZnJvbSAnLi4vYWN0aW9ucy9maWx0ZXItZHJhd2VyLmpzJztcbmNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgaXNWaXNpYmxlOiBmYWxzZVxufTtcbmV4cG9ydCBjb25zdCBmaWx0ZXJEcmF3ZXJSZWR1Y2VyID0gKHN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb24pID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgT1BFTl9GSUxURVJfRFJBV0VSOlxuICAgICAge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGlzVmlzaWJsZTogYWN0aW9uLmlzVmlzaWJsZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIGNhc2UgQ0xPU0VfRklMVEVSX0RSQVdFUjpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBpc1Zpc2libGU6IGFjdGlvbi5pc1Zpc2libGVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9XG4gIH1cbn07IiwiaW1wb3J0IHsgTE9DQUxFX0lOSVRJQUxJWkUgfSBmcm9tICcuLi9hY3Rpb25zL2luaXRpYWxpemUtbG9jYWxlLmpzJztcbmNvbnN0IGRlZmF1bHRMb2NhbGUgPSB7XG4gIGxhbmd1YWdlOiAnZW4nLFxuICB0cmFuc2xhdGlvbnM6IHt9XG59O1xuZXhwb3J0IGNvbnN0IGxvY2FsZXNSZWR1Y2VyID0gKHN0YXRlID0gZGVmYXVsdExvY2FsZSwgYWN0aW9uKSA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIExPQ0FMRV9JTklUSUFMSVpFOlxuICAgICAgcmV0dXJuIGFjdGlvbi5kYXRhO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07IiwiaW1wb3J0IHsgSElERV9NT0RBTCwgU0hPV19NT0RBTCB9IGZyb20gJy4uL2FjdGlvbnMvbW9kYWwuanMnO1xuZXhwb3J0IGNvbnN0IG1vZGFsUmVkdWNlciA9IChzdGF0ZSA9IHtcbiAgc2hvdzogZmFsc2Vcbn0sIGFjdGlvbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBTSE9XX01PREFMOlxuICAgICAge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmFjdGlvbi5kYXRhLFxuICAgICAgICAgIHNob3c6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICBjYXNlIEhJREVfTU9EQUw6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2hvdzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59OyIsImltcG9ydCB7IEFERF9OT1RJQ0UgfSBmcm9tICcuLi9hY3Rpb25zL2FkZC1ub3RpY2UuanMnO1xuaW1wb3J0IHsgRFJPUF9OT1RJQ0UgfSBmcm9tICcuLi9hY3Rpb25zL2Ryb3Atbm90aWNlLmpzJztcbmltcG9ydCB7IFNFVF9OT1RJQ0VfUFJPR1JFU1MgfSBmcm9tICcuLi9hY3Rpb25zL3NldC1ub3RpY2UtcHJvZ3Jlc3MuanMnO1xuZXhwb3J0IGNvbnN0IG5vdGljZXNSZWR1Y2VyID0gKHN0YXRlID0gW10sIGFjdGlvbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBBRERfTk9USUNFOlxuICAgICAge1xuICAgICAgICByZXR1cm4gWy4uLnN0YXRlLCBhY3Rpb24uZGF0YV07XG4gICAgICB9XG4gICAgY2FzZSBEUk9QX05PVElDRTpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlLmZpbHRlcihub3RpY2UgPT4gbm90aWNlLmlkICE9PSBhY3Rpb24uZGF0YS5ub3RpY2VJZCk7XG4gICAgICB9XG4gICAgY2FzZSBTRVRfTk9USUNFX1BST0dSRVNTOlxuICAgICAge1xuICAgICAgICByZXR1cm4gc3RhdGUubWFwKG5vdGljZSA9PiAoe1xuICAgICAgICAgIC4uLm5vdGljZSxcbiAgICAgICAgICBwcm9ncmVzczogbm90aWNlLmlkID09PSBhY3Rpb24uZGF0YS5ub3RpY2VJZCA/IGFjdGlvbi5kYXRhLnByb2dyZXNzIDogbm90aWNlLnByb2dyZXNzXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59OyIsImltcG9ydCB7IFBBR0VTX0lOSVRJQUxJWkUgfSBmcm9tICcuLi9hY3Rpb25zL2luaXRpYWxpemUtcGFnZXMuanMnO1xuZXhwb3J0IGNvbnN0IHBhZ2VzUmVkdWNlciA9IChzdGF0ZSA9IFtdLCBhY3Rpb24pID0+IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgUEFHRVNfSU5JVElBTElaRTpcbiAgICAgIHJldHVybiBhY3Rpb24uZGF0YTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59OyIsImltcG9ydCB7IERFRkFVTFRfUEFUSFMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgUEFUSFNfSU5JVElBTElaRSB9IGZyb20gJy4uL2FjdGlvbnMvaW5pdGlhbGl6ZS1wYXRocy5qcyc7XG5leHBvcnQgY29uc3QgcGF0aHNSZWR1Y2VyID0gKHN0YXRlID0gREVGQVVMVF9QQVRIUywgYWN0aW9uKSA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIFBBVEhTX0lOSVRJQUxJWkU6XG4gICAgICByZXR1cm4gYWN0aW9uLmRhdGE7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTsiLCJpbXBvcnQgeyBSRVNPVVJDRVNfSU5JVElBTElaRSB9IGZyb20gJy4uL2FjdGlvbnMvaW5pdGlhbGl6ZS1yZXNvdXJjZXMuanMnO1xuZXhwb3J0IGNvbnN0IHJlc291cmNlc1JlZHVjZXIgPSAoc3RhdGUgPSBbXSwgYWN0aW9uKSA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIFJFU09VUkNFU19JTklUSUFMSVpFOlxuICAgICAgcmV0dXJuIGFjdGlvbi5kYXRhO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07IiwiaW1wb3J0IHsgUk9VVEVfQ0hBTkdFRCwgSU5JVElBTF9ST1VURSB9IGZyb20gJy4uL2FjdGlvbnMvcm91dGUtY2hhbmdlZC5qcyc7XG5leHBvcnQgY29uc3Qgcm91dGVyUmVkdWNlciA9IChzdGF0ZSA9IHtcbiAgZnJvbToge30sXG4gIHRvOiB7fVxufSwgYWN0aW9uKSA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIElOSVRJQUxfUk9VVEU6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgZnJvbToge1xuICAgICAgICAgIC4uLmFjdGlvbi5kYXRhXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgY2FzZSBST1VURV9DSEFOR0VEOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbToge1xuICAgICAgICAgIC4uLnN0YXRlLnRvXG4gICAgICAgIH0sXG4gICAgICAgIHRvOiB7XG4gICAgICAgICAgLi4uYWN0aW9uLmRhdGFcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59OyIsImltcG9ydCB7IFNFU1NJT05fSU5JVElBTElaRSB9IGZyb20gJy4uL2FjdGlvbnMvc2V0LWN1cnJlbnQtYWRtaW4uanMnO1xuZXhwb3J0IGNvbnN0IHNlc3Npb25SZWR1Y2VyID0gKHN0YXRlID0gbnVsbCwgYWN0aW9uKSA9PiB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIFNFU1NJT05fSU5JVElBTElaRTpcbiAgICAgIHJldHVybiBhY3Rpb24uZGF0YTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59OyIsImltcG9ydCB7IFRIRU1FX0lOSVRJQUxJWkUgfSBmcm9tICcuLi9hY3Rpb25zL2luaXRpYWxpemUtdGhlbWUuanMnO1xuZXhwb3J0IGNvbnN0IHRoZW1lUmVkdWNlciA9IChzdGF0ZSA9IG51bGwsIGFjdGlvbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBUSEVNRV9JTklUSUFMSVpFOlxuICAgICAgcmV0dXJuIGFjdGlvbi5kYXRhO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07IiwiaW1wb3J0IHsgVkVSU0lPTlNfSU5JVElBTElaRSB9IGZyb20gJy4uL2FjdGlvbnMvaW5pdGlhbGl6ZS12ZXJzaW9ucy5qcyc7XG5leHBvcnQgY29uc3QgdmVyc2lvbnNSZWR1Y2VyID0gKHN0YXRlID0ge30sIGFjdGlvbikgPT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSBWRVJTSU9OU19JTklUSUFMSVpFOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWRtaW46IGFjdGlvbi5kYXRhLmFkbWluLFxuICAgICAgICBhcHA6IGFjdGlvbi5kYXRhLmFwcFxuICAgICAgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59OyIsIi8vIE5vdGU6IFdlIGFyZSB1c2luZyBsZWdhY3kgXCJjcmVhdGVTdG9yZVwiXG5pbXBvcnQgeyBjb21wb3NlV2l0aERldlRvb2xzRGV2ZWxvcG1lbnRPbmx5IH0gZnJvbSAnQHJlZHV4LWRldnRvb2xzL2V4dGVuc2lvbic7XG5pbXBvcnQgeyBjb21iaW5lUmVkdWNlcnMsIGxlZ2FjeV9jcmVhdGVTdG9yZSBhcyBjcmVhdGVTdG9yZSB9IGZyb20gJ3JlZHV4JztcbmltcG9ydCB7IGFzc2V0c1JlZHVjZXIsIGJyYW5kaW5nUmVkdWNlciwgZGFzaGJvYXJkUmVkdWNlciwgZHJhd2VyUmVkdWNlciwgZmlsdGVyRHJhd2VyUmVkdWNlciwgbG9jYWxlc1JlZHVjZXIsIG1vZGFsUmVkdWNlciwgbm90aWNlc1JlZHVjZXIsIHBhZ2VzUmVkdWNlciwgcGF0aHNSZWR1Y2VyLCByZXNvdXJjZXNSZWR1Y2VyLCByb3V0ZXJSZWR1Y2VyLCBzZXNzaW9uUmVkdWNlciwgdGhlbWVSZWR1Y2VyLCB2ZXJzaW9uc1JlZHVjZXIgfSBmcm9tICcuL3JlZHVjZXJzL2luZGV4LmpzJztcbmNvbnN0IHJlZHVjZXIgPSBjb21iaW5lUmVkdWNlcnMoe1xuICBhc3NldHM6IGFzc2V0c1JlZHVjZXIsXG4gIGJyYW5kaW5nOiBicmFuZGluZ1JlZHVjZXIsXG4gIGRhc2hib2FyZDogZGFzaGJvYXJkUmVkdWNlcixcbiAgZHJhd2VyOiBkcmF3ZXJSZWR1Y2VyLFxuICBmaWx0ZXJEcmF3ZXI6IGZpbHRlckRyYXdlclJlZHVjZXIsXG4gIGxvY2FsZTogbG9jYWxlc1JlZHVjZXIsXG4gIG1vZGFsOiBtb2RhbFJlZHVjZXIsXG4gIG5vdGljZXM6IG5vdGljZXNSZWR1Y2VyLFxuICBwYWdlczogcGFnZXNSZWR1Y2VyLFxuICBwYXRoczogcGF0aHNSZWR1Y2VyLFxuICByZXNvdXJjZXM6IHJlc291cmNlc1JlZHVjZXIsXG4gIHJvdXRlcjogcm91dGVyUmVkdWNlcixcbiAgc2Vzc2lvbjogc2Vzc2lvblJlZHVjZXIsXG4gIHRoZW1lOiB0aGVtZVJlZHVjZXIsXG4gIHZlcnNpb25zOiB2ZXJzaW9uc1JlZHVjZXJcbn0pO1xuZXhwb3J0IGRlZmF1bHQgKChpbml0aWFsU3RhdGUgPSB7fSkgPT4gY3JlYXRlU3RvcmUocmVkdWNlciwgaW5pdGlhbFN0YXRlLCBjb21wb3NlV2l0aERldlRvb2xzRGV2ZWxvcG1lbnRPbmx5KCkpKTsiLCJ2YXIgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhc3NpZ25WYWx1ZWAgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBhc3NpZ25cbiAqIGB1bmRlZmluZWRgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxuICovXG5mdW5jdGlvbiBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWVxKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XG4gICAgICAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSkge1xuICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduTWVyZ2VWYWx1ZTtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VGb3I7XG4iLCJ2YXIgY3JlYXRlQmFzZUZvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUJhc2VGb3InKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxuICogcHJvcGVydGllcyByZXR1cm5lZCBieSBga2V5c0Z1bmNgIGFuZCBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0ga2V5c0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUga2V5cyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbnZhciBiYXNlRm9yID0gY3JlYXRlQmFzZUZvcigpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGb3I7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUJ1ZmZlcjtcbiIsInZhciBVaW50OEFycmF5ID0gcmVxdWlyZSgnLi9fVWludDhBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgYXJyYXlCdWZmZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5QnVmZmVyfSBhcnJheUJ1ZmZlciBUaGUgYXJyYXkgYnVmZmVyIHRvIGNsb25lLlxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxuICovXG5mdW5jdGlvbiBjbG9uZUFycmF5QnVmZmVyKGFycmF5QnVmZmVyKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XG4gIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuc2V0KG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVBcnJheUJ1ZmZlcjtcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgdHlwZWRBcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB0eXBlZEFycmF5IFRoZSB0eXBlZCBhcnJheSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIodHlwZWRBcnJheS5idWZmZXIpIDogdHlwZWRBcnJheS5idWZmZXI7XG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lVHlwZWRBcnJheTtcbiIsIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgZ2V0UHJvdG90eXBlID0gcmVxdWlyZSgnLi9fZ2V0UHJvdG90eXBlJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpO1xuXG4vKipcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkpXG4gICAgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKVxuICAgIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lT2JqZWN0O1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxuICogaXMgYW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LWxpa2Ugb2JqZWN0LFxuICogIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGlzQXJyYXlMaWtlKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5TGlrZU9iamVjdDtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1BsYWluT2JqZWN0O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCwgdW5sZXNzIGBrZXlgIGlzIFwiX19wcm90b19fXCIgb3IgXCJjb25zdHJ1Y3RvclwiLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc2FmZUdldChvYmplY3QsIGtleSkge1xuICBpZiAoa2V5ID09PSAnY29uc3RydWN0b3InICYmIHR5cGVvZiBvYmplY3Rba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICByZXR1cm4gb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2FmZUdldDtcbiIsInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG4iLCJ2YXIgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY29udmVydGVkIHBsYWluIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgbmV3IEZvbyk7XG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cbiAqXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBfLnRvUGxhaW5PYmplY3QobmV3IEZvbykpO1xuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cbiAqL1xuZnVuY3Rpb24gdG9QbGFpbk9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gY29weU9iamVjdCh2YWx1ZSwga2V5c0luKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9QbGFpbk9iamVjdDtcbiIsInZhciBhc3NpZ25NZXJnZVZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduTWVyZ2VWYWx1ZScpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjbG9uZVR5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19jbG9uZVR5cGVkQXJyYXknKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBpbml0Q2xvbmVPYmplY3QgPSByZXF1aXJlKCcuL19pbml0Q2xvbmVPYmplY3QnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzUGxhaW5PYmplY3QgPSByZXF1aXJlKCcuL2lzUGxhaW5PYmplY3QnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpLFxuICAgIHNhZmVHZXQgPSByZXF1aXJlKCcuL19zYWZlR2V0JyksXG4gICAgdG9QbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vdG9QbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBtZXJnZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBzb3VyY2UgdmFsdWVzIGFuZCB0aGVpciBtZXJnZWRcbiAqICBjb3VudGVycGFydHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VNZXJnZURlZXAob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIG1lcmdlRnVuYywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgdmFyIG9ialZhbHVlID0gc2FmZUdldChvYmplY3QsIGtleSksXG4gICAgICBzcmNWYWx1ZSA9IHNhZmVHZXQoc291cmNlLCBrZXkpLFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XG5cbiAgaWYgKHN0YWNrZWQpIHtcbiAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBzdGFja2VkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxuICAgID8gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICA6IHVuZGVmaW5lZDtcblxuICB2YXIgaXNDb21tb24gPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG4gIGlmIChpc0NvbW1vbikge1xuICAgIHZhciBpc0FyciA9IGlzQXJyYXkoc3JjVmFsdWUpLFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgaXNCdWZmZXIoc3JjVmFsdWUpLFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHNyY1ZhbHVlKTtcblxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgaWYgKGlzQXJyIHx8IGlzQnVmZiB8fCBpc1R5cGVkKSB7XG4gICAgICBpZiAoaXNBcnJheShvYmpWYWx1ZSkpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzQXJyYXlMaWtlT2JqZWN0KG9ialZhbHVlKSkge1xuICAgICAgICBuZXdWYWx1ZSA9IGNvcHlBcnJheShvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICAgICAgbmV3VmFsdWUgPSBjbG9uZUJ1ZmZlcihzcmNWYWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpc1R5cGVkKSB7XG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgICAgIG5ld1ZhbHVlID0gY2xvbmVUeXBlZEFycmF5KHNyY1ZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBuZXdWYWx1ZSA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHNyY1ZhbHVlKSB8fCBpc0FyZ3VtZW50cyhzcmNWYWx1ZSkpIHtcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XG4gICAgICBpZiAoaXNBcmd1bWVudHMob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdG9QbGFpbk9iamVjdChvYmpWYWx1ZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghaXNPYmplY3Qob2JqVmFsdWUpIHx8IGlzRnVuY3Rpb24ob2JqVmFsdWUpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gaW5pdENsb25lT2JqZWN0KHNyY1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBpZiAoaXNDb21tb24pIHtcbiAgICAvLyBSZWN1cnNpdmVseSBtZXJnZSBvYmplY3RzIGFuZCBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xuICAgIHN0YWNrWydkZWxldGUnXShzcmNWYWx1ZSk7XG4gIH1cbiAgYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZURlZXA7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFzc2lnbk1lcmdlVmFsdWUgPSByZXF1aXJlKCcuL19hc3NpZ25NZXJnZVZhbHVlJyksXG4gICAgYmFzZUZvciA9IHJlcXVpcmUoJy4vX2Jhc2VGb3InKSxcbiAgICBiYXNlTWVyZ2VEZWVwID0gcmVxdWlyZSgnLi9fYmFzZU1lcmdlRGVlcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyksXG4gICAgc2FmZUdldCA9IHJlcXVpcmUoJy4vX3NhZmVHZXQnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tZXJnZWAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIG1lcmdlZCB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxuICogIGNvdW50ZXJwYXJ0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGJhc2VGb3Ioc291cmNlLCBmdW5jdGlvbihzcmNWYWx1ZSwga2V5KSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICBpZiAoaXNPYmplY3Qoc3JjVmFsdWUpKSB7XG4gICAgICBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBiYXNlTWVyZ2UsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXG4gICAgICAgID8gY3VzdG9taXplcihzYWZlR2V0KG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XG4gICAgICB9XG4gICAgICBhc3NpZ25NZXJnZVZhbHVlKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBrZXlzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNZXJnZTtcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUmVzdChmdW5jLCBzdGFydCkge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgc3RhcnQsIGlkZW50aXR5KSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUmVzdDtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzSXRlcmF0ZWVDYWxsID0gcmVxdWlyZSgnLi9faXNJdGVyYXRlZUNhbGwnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5hc3NpZ25gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhc3NpZ25lciBUaGUgZnVuY3Rpb24gdG8gYXNzaWduIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihhc3NpZ25lcikge1xuICByZXR1cm4gYmFzZVJlc3QoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXG4gICAgICAgIGd1YXJkID0gbGVuZ3RoID4gMiA/IHNvdXJjZXNbMl0gOiB1bmRlZmluZWQ7XG5cbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcbiAgICAgID8gKGxlbmd0aC0tLCBjdXN0b21pemVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZ3VhcmQgJiYgaXNJdGVyYXRlZUNhbGwoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH1cbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xuICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICBhc3NpZ25lcihvYmplY3QsIHNvdXJjZSwgaW5kZXgsIGN1c3RvbWl6ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVBc3NpZ25lcjtcbiIsInZhciBiYXNlTWVyZ2UgPSByZXF1aXJlKCcuL19iYXNlTWVyZ2UnKSxcbiAgICBjcmVhdGVBc3NpZ25lciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUFzc2lnbmVyJyk7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXG4gKiBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBzb3VyY2Ugb2JqZWN0cyBpbnRvIHRoZVxuICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2UgcHJvcGVydGllcyB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAgYXJlXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcbiAqIGFyZSBtZXJnZWQgcmVjdXJzaXZlbHkuIE90aGVyIG9iamVjdHMgYW5kIHZhbHVlIHR5cGVzIGFyZSBvdmVycmlkZGVuIGJ5XG4gKiBhc3NpZ25tZW50LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFN1YnNlcXVlbnRcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjUuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0ge1xuICogICAnYSc6IFt7ICdiJzogMiB9LCB7ICdkJzogNCB9XVxuICogfTtcbiAqXG4gKiB2YXIgb3RoZXIgPSB7XG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXG4gKiB9O1xuICpcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiB7ICdhJzogW3sgJ2InOiAyLCAnYyc6IDMgfSwgeyAnZCc6IDQsICdlJzogNSB9XSB9XG4gKi9cbnZhciBtZXJnZSA9IGNyZWF0ZUFzc2lnbmVyKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCkge1xuICBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlO1xuIiwiaW1wb3J0IHN0YXJ0Q2FzZSBmcm9tICdsb2Rhc2gvc3RhcnRDYXNlLmpzJztcbmNvbnN0IERFRkFVTFRfTE9BRCA9ICdjdXJyZW50T25seSc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9OUyA9ICd0cmFuc2xhdGlvbic7XG5leHBvcnQgY29uc3QgZGVmYXVsdExvY2FsZSA9IHtcbiAgbGFuZ3VhZ2U6ICdlbicsXG4gIHRyYW5zbGF0aW9uczoge30sXG4gIGF2YWlsYWJsZUxhbmd1YWdlczogWydlbiddXG59O1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb25maWcgPSB7XG4gIGRlYnVnOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyxcbiAgcGFydGlhbEJ1bmRsZWRMYW5ndWFnZXM6IHRydWUsXG4gIGludGVycG9sYXRpb246IHtcbiAgICBlc2NhcGVWYWx1ZTogZmFsc2VcbiAgfSxcbiAgbnM6IFtERUZBVUxUX05TXSxcbiAgZGVmYXVsdE5TOiBERUZBVUxUX05TLFxuICBmYWxsYmFja05TOiBERUZBVUxUX05TLFxuICBsb2FkOiBERUZBVUxUX0xPQUQsXG4gIHJlYWN0OiB7XG4gICAgdXNlU3VzcGVuc2U6IGZhbHNlXG4gIH0sXG4gIHJlc291cmNlczoge30sXG4gIHBhcnNlTWlzc2luZ0tleUhhbmRsZXI6IChrZXksIGRlZmF1bHRWYWx1ZSkgPT4gZGVmYXVsdFZhbHVlID8/IHN0YXJ0Q2FzZShrZXkpLFxuICBnZXQgaW5pdEltbWVkaWF0ZSgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cbn07IiwiaW1wb3J0IGRlTG9jYWxlIGZyb20gJy4vZGUvdHJhbnNsYXRpb24uanNvbicgd2l0aCB7IHR5cGU6ICdqc29uJyB9O1xuaW1wb3J0IGVuTG9jYWxlIGZyb20gJy4vZW4vdHJhbnNsYXRpb24uanNvbicgd2l0aCB7IHR5cGU6ICdqc29uJyB9O1xuaW1wb3J0IGVzTG9jYWxlIGZyb20gJy4vZXMvdHJhbnNsYXRpb24uanNvbicgd2l0aCB7IHR5cGU6ICdqc29uJyB9O1xuaW1wb3J0IGl0TG9jYWxlIGZyb20gJy4vaXQvdHJhbnNsYXRpb24uanNvbicgd2l0aCB7IHR5cGU6ICdqc29uJyB9O1xuaW1wb3J0IGphTG9jYWxlIGZyb20gJy4vamEvdHJhbnNsYXRpb24uanNvbicgd2l0aCB7IHR5cGU6ICdqc29uJyB9O1xuaW1wb3J0IHBsTG9jYWxlIGZyb20gJy4vcGwvdHJhbnNsYXRpb24uanNvbicgd2l0aCB7IHR5cGU6ICdqc29uJyB9O1xuaW1wb3J0IHB0QnJMb2NhbGUgZnJvbSAnLi9wdC1CUi90cmFuc2xhdGlvbi5qc29uJyB3aXRoIHsgdHlwZTogJ2pzb24nIH07XG5pbXBvcnQgdWFMb2NhbGUgZnJvbSAnLi91YS90cmFuc2xhdGlvbi5qc29uJyB3aXRoIHsgdHlwZTogJ2pzb24nIH07XG5pbXBvcnQgemhDTkxvY2FsZSBmcm9tICcuL3poLUNOL3RyYW5zbGF0aW9uLmpzb24nIHdpdGggeyB0eXBlOiAnanNvbicgfTtcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlnLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGVmYXVsdC1jb25maWcuanMnO1xuZXhwb3J0IGNvbnN0IGxvY2FsZXMgPSB7XG4gIGRlOiBkZUxvY2FsZSxcbiAgZW46IGVuTG9jYWxlLFxuICBlczogZXNMb2NhbGUsXG4gIGl0OiBpdExvY2FsZSxcbiAgamE6IGphTG9jYWxlLFxuICBwbDogcGxMb2NhbGUsXG4gICdwdC1CUic6IHB0QnJMb2NhbGUsXG4gIHVhOiB1YUxvY2FsZSxcbiAgJ3poLUNOJzogemhDTkxvY2FsZVxufTsiLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VQYXJhbXMgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgeyBFcnJvclR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZXJyb3ItdHlwZS5lbnVtLmpzJztcbmltcG9ydCBCYXNlQWN0aW9uQ29tcG9uZW50IGZyb20gJy4uL2FwcC9iYXNlLWFjdGlvbi1jb21wb25lbnQuanMnO1xuaW1wb3J0IEFwaUNsaWVudCBmcm9tICcuLi8uLi91dGlscy9hcGktY2xpZW50LmpzJztcbmltcG9ydCB7IGFjdGlvbkhhc0Rpc2FibGVkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBOb1Jlc291cmNlRXJyb3IsIE5vQWN0aW9uRXJyb3IsIE5vUmVjb3JkRXJyb3IgfSBmcm9tICcuLi9hcHAvZXJyb3ItbWVzc2FnZS5qcyc7XG5pbXBvcnQgV3JhcHBlciBmcm9tICcuL3V0aWxzL3dyYXBwZXIuanMnO1xuaW1wb3J0IHsgQWN0aW9uSGVhZGVyIH0gZnJvbSAnLi4vYXBwL2luZGV4LmpzJztcbmltcG9ydCB7IHVzZU5vdGljZSwgdXNlUmVzb3VyY2UgfSBmcm9tICcuLi8uLi9ob29rcy9pbmRleC5qcyc7XG5pbXBvcnQgRHJhd2VyUG9ydGFsIGZyb20gJy4uL2FwcC9kcmF3ZXItcG9ydGFsLmpzJztcbmltcG9ydCBtZXJnZVJlY29yZFJlc3BvbnNlIGZyb20gJy4uLy4uL2hvb2tzL3VzZS1yZWNvcmQvbWVyZ2UtcmVjb3JkLXJlc3BvbnNlLmpzJztcbmltcG9ydCBhbGxvd092ZXJyaWRlIGZyb20gJy4uLy4uL2hvYy9hbGxvdy1vdmVycmlkZS5qcyc7XG5pbXBvcnQgeyBnZXREYXRhQ3NzIH0gZnJvbSAnLi4vLi4vaW5kZXguanMnO1xuY29uc3QgYXBpID0gbmV3IEFwaUNsaWVudCgpO1xuY29uc3QgUmVjb3JkQWN0aW9uID0gKCkgPT4ge1xuICBjb25zdCBbcmVjb3JkLCBzZXRSZWNvcmRdID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUodHJ1ZSk7XG4gIGNvbnN0IFt0YWcsIHNldFRhZ10gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtmaWx0ZXJWaXNpYmxlLCBzZXRGaWx0ZXJWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcGFyYW1zID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IGFkZE5vdGljZSA9IHVzZU5vdGljZSgpO1xuICBjb25zdCB7XG4gICAgYWN0aW9uTmFtZSxcbiAgICByZWNvcmRJZCxcbiAgICByZXNvdXJjZUlkXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHJlc291cmNlID0gdXNlUmVzb3VyY2UocmVzb3VyY2VJZCk7XG4gIGNvbnN0IGFjdGlvbiA9IHJlY29yZCAmJiByZWNvcmQucmVjb3JkQWN0aW9ucy5maW5kKHIgPT4gci5uYW1lID09PSBhY3Rpb25OYW1lKTtcbiAgY29uc3QgYWN0aW9uRnJvbVJlc291cmNlID0gcmVzb3VyY2U/LmFjdGlvbnMuZmluZChhID0+IGEubmFtZSA9PT0gYWN0aW9uTmFtZSk7XG4gIGNvbnN0IGxpc3RBY3Rpb25OYW1lID0gJ2xpc3QnO1xuICBjb25zdCBsaXN0QWN0aW9uID0gcmVzb3VyY2U/LnJlc291cmNlQWN0aW9ucy5maW5kKHIgPT4gci5uYW1lID09PSBsaXN0QWN0aW9uTmFtZSk7XG4gIGNvbnN0IGZldGNoUmVjb3JkID0gKCkgPT4ge1xuICAgIC8vIERvIG5vdCBjYWxsIEFQSSBvbiByb3V0ZSBlbnRlciBpZiB0aGUgYWN0aW9uIGRvZXNuJ3QgaGF2ZSBhIGNvbXBvbmVudFxuICAgIGlmIChhY3Rpb25Gcm9tUmVzb3VyY2UgJiYgYWN0aW9uSGFzRGlzYWJsZWRDb21wb25lbnQoYWN0aW9uRnJvbVJlc291cmNlKSkge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgYXBpLnJlY29yZEFjdGlvbihwYXJhbXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEubm90aWNlICYmIHJlc3BvbnNlLmRhdGEubm90aWNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgYWRkTm90aWNlKHJlc3BvbnNlLmRhdGEubm90aWNlKTtcbiAgICAgIH1cbiAgICAgIGlmICghcmVzcG9uc2UuZGF0YS5yZWNvcmQ/LmJhc2VFcnJvcj8udHlwZSB8fCAhW0Vycm9yVHlwZUVudW0uQXBwLCBFcnJvclR5cGVFbnVtLk5vdEZvdW5kLCBFcnJvclR5cGVFbnVtLkZvcmJpZGRlbl0uaW5jbHVkZXMocmVzcG9uc2UuZGF0YS5yZWNvcmQ/LmJhc2VFcnJvcj8udHlwZSkpIHtcbiAgICAgICAgc2V0UmVjb3JkKHJlc3BvbnNlLmRhdGEucmVjb3JkKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICBhZGROb3RpY2Uoe1xuICAgICAgICBtZXNzYWdlOiAnZXJyb3JGZXRjaGluZ1JlY29yZCcsXG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHJlc291cmNlSWRcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICB9KTtcbiAgfTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaFJlY29yZCgpO1xuICB9LCBbYWN0aW9uTmFtZSwgcmVjb3JkSWQsIHJlc291cmNlSWRdKTtcbiAgY29uc3QgaGFuZGxlQWN0aW9uUGVyZm9ybWVkID0gdXNlQ2FsbGJhY2soKG9sZFJlY29yZCwgcmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2UucmVjb3JkKSB7XG4gICAgICBzZXRSZWNvcmQobWVyZ2VSZWNvcmRSZXNwb25zZShvbGRSZWNvcmQsIHJlc3BvbnNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZldGNoUmVjb3JkKCk7XG4gICAgfVxuICB9LCBbZmV0Y2hSZWNvcmRdKTtcbiAgaWYgKCFyZXNvdXJjZSkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOb1Jlc291cmNlRXJyb3IsIHtcbiAgICAgIHJlc291cmNlSWQ6IHJlc291cmNlSWRcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFdoZW4gdGhlIHVzZXIgdmlzaXRzIHRoaXMgcm91dGUgKHJlY29yZCBhY3Rpb24pIGZyb20gYSBkaWZmZXJlbnQsIHRoYW4gdGhlIGN1cnJlbnQgb25lLCByZWNvcmQuXG4gIC8vIEl0IHJlbmRlcnMgZXZlcnl0aGluZyB3aXRoIGEgbmV3IHJlc291cmNlLiBUaGUgb2xkIHJlY29yZCByZW1haW5zIHVudGlsIHVzZUVmZmVjdCBmZXRjaGVzIGRhdGFcbiAgLy8gZnJvbSB0aGUgQVBJLiB0aGF0IGlzIHdoeSB3ZSBoYXZlIHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50IHJlY29yZCBoYXMgY29ycmVjdCByZWNvcmQuaWQuXG4gIC8vIEFsdGVybmF0aXZlIGFwcHJvYWNoIHdvdWxkIGJlIHRvIHNldFJlY29yZCh1bmRlZmluZWQpIGJlZm9yZSB0aGUgZmV0Y2gsIGJ1dCBpdCBpcyBhc3luYyBhbmRcbiAgLy8gd2UgY2Fubm90IGJlIHN1cmUgdGhhdCB0aGUgY29tcG9uZW50IHdvbnQgYmUgcmVuZGVyZWQgKGl0IHdpbGwgYmUgYXQgbGVhc3Qgb25jZSkgd2l0aCB0aGVcbiAgLy8gd3JvbmcgZGF0YS5cbiAgY29uc3QgaGFzRGlmZmVyZW50UmVjb3JkID0gcmVjb3JkICYmIHJlY29yZC5pZCAmJiByZWNvcmQuaWQudG9TdHJpbmcoKSAhPT0gcmVjb3JkSWQ7XG4gIGlmIChsb2FkaW5nIHx8IGhhc0RpZmZlcmVudFJlY29yZCkge1xuICAgIHJldHVybiBhY3Rpb25Gcm9tUmVzb3VyY2U/LnNob3dJbkRyYXdlciA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyYXdlclBvcnRhbCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTG9hZGVyLCBudWxsKSkgOiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChMb2FkZXIsIG51bGwpO1xuICB9XG4gIGlmICghYWN0aW9uIHx8IGFjdGlvbkZyb21SZXNvdXJjZSAmJiBhY3Rpb25IYXNEaXNhYmxlZENvbXBvbmVudChhY3Rpb25Gcm9tUmVzb3VyY2UpKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE5vQWN0aW9uRXJyb3IsIHtcbiAgICAgIHJlc291cmNlSWQ6IHJlc291cmNlSWQsXG4gICAgICBhY3Rpb25OYW1lOiBhY3Rpb25OYW1lXG4gICAgfSk7XG4gIH1cbiAgaWYgKCFyZWNvcmQpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTm9SZWNvcmRFcnJvciwge1xuICAgICAgcmVzb3VyY2VJZDogcmVzb3VyY2VJZCxcbiAgICAgIHJlY29yZElkOiByZWNvcmRJZFxuICAgIH0pO1xuICB9XG4gIGNvbnN0IHJvdXRlV3JhcHBlckNzcyA9IGdldERhdGFDc3MocmVzb3VyY2UuaWQsIGFjdGlvbi5hY3Rpb25UeXBlLCBhY3Rpb24ubmFtZSwgJ3JvdXRlLXdyYXBwZXInKTtcbiAgY29uc3Qgcm91dGVBY3Rpb25Dc3MgPSBnZXREYXRhQ3NzKHJlc291cmNlLmlkLCBhY3Rpb24uYWN0aW9uVHlwZSwgYWN0aW9uLm5hbWUsICdyb3V0ZScpO1xuICBpZiAoYWN0aW9uLnNob3dJbkRyYXdlcikge1xuICAgIGlmICghbGlzdEFjdGlvbikge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyYXdlclBvcnRhbCwge1xuICAgICAgICB3aWR0aDogYWN0aW9uLmNvbnRhaW5lcldpZHRoLFxuICAgICAgICBcImRhdGEtY3NzXCI6IHJvdXRlQWN0aW9uQ3NzXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlQWN0aW9uQ29tcG9uZW50LCB7XG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICByZXNvdXJjZTogcmVzb3VyY2UsXG4gICAgICAgIHJlY29yZDogcmVjb3JkXG4gICAgICB9KSk7XG4gICAgfVxuICAgIGNvbnN0IHRvZ2dsZUZpbHRlciA9IGxpc3RBY3Rpb24uc2hvd0ZpbHRlciA/ICgpID0+IHNldEZpbHRlclZpc2libGUoIWZpbHRlclZpc2libGUpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRHJhd2VyUG9ydGFsLCB7XG4gICAgICB3aWR0aDogYWN0aW9uLmNvbnRhaW5lcldpZHRoLFxuICAgICAgXCJkYXRhLWNzc1wiOiByb3V0ZUFjdGlvbkNzc1xuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJhc2VBY3Rpb25Db21wb25lbnQsIHtcbiAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgICAgcmVjb3JkOiByZWNvcmRcbiAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZXIsIHtcbiAgICAgIHdpZHRoOiBsaXN0QWN0aW9uLmNvbnRhaW5lcldpZHRoLFxuICAgICAgXCJkYXRhLWNzc1wiOiByb3V0ZVdyYXBwZXJDc3NcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBY3Rpb25IZWFkZXIsIHtcbiAgICAgIHJlc291cmNlOiByZXNvdXJjZSxcbiAgICAgIGFjdGlvbjogbGlzdEFjdGlvbixcbiAgICAgIHRhZzogdGFnLFxuICAgICAgdG9nZ2xlRmlsdGVyOiB0b2dnbGVGaWx0ZXJcbiAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUFjdGlvbkNvbXBvbmVudCwge1xuICAgICAgYWN0aW9uOiBsaXN0QWN0aW9uLFxuICAgICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgICAgc2V0VGFnOiBzZXRUYWdcbiAgICB9KSkpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVyLCB7XG4gICAgd2lkdGg6IGFjdGlvbi5jb250YWluZXJXaWR0aCxcbiAgICBcImRhdGEtY3NzXCI6IHJvdXRlV3JhcHBlckNzc1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBY3Rpb25IZWFkZXIsIHtcbiAgICByZXNvdXJjZTogcmVzb3VyY2UsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgcmVjb3JkOiByZWNvcmQsXG4gICAgYWN0aW9uUGVyZm9ybWVkOiByZXNwb25zZSA9PiBoYW5kbGVBY3Rpb25QZXJmb3JtZWQocmVjb3JkLCByZXNwb25zZSlcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJhc2VBY3Rpb25Db21wb25lbnQsIHtcbiAgICBhY3Rpb246IGFjdGlvbixcbiAgICByZXNvdXJjZTogcmVzb3VyY2UsXG4gICAgcmVjb3JkOiByZWNvcmRcbiAgfSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGFsbG93T3ZlcnJpZGUoUmVjb3JkQWN0aW9uLCAnUmVjb3JkQWN0aW9uUm91dGUnKTsiLCJpbXBvcnQgeyBCb3ggfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyB1c2VQYXJhbXMgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IGFsbG93T3ZlcnJpZGUgZnJvbSAnLi4vLi4vaG9jL2FsbG93LW92ZXJyaWRlLmpzJztcbmltcG9ydCB7IGFjdGlvbkhhc0Rpc2FibGVkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9pbmRleC5qcyc7XG5pbXBvcnQgQmFzZUFjdGlvbkNvbXBvbmVudCBmcm9tICcuLi9hcHAvYmFzZS1hY3Rpb24tY29tcG9uZW50LmpzJztcbmltcG9ydCBEcmF3ZXJQb3J0YWwgZnJvbSAnLi4vYXBwL2RyYXdlci1wb3J0YWwuanMnO1xuaW1wb3J0IHsgTm9BY3Rpb25FcnJvciwgTm9SZXNvdXJjZUVycm9yIH0gZnJvbSAnLi4vYXBwL2Vycm9yLW1lc3NhZ2UuanMnO1xuaW1wb3J0IEZpbHRlckRyYXdlciBmcm9tICcuLi9hcHAvZmlsdGVyLWRyYXdlci5qcyc7XG5pbXBvcnQgeyBBY3Rpb25IZWFkZXIgfSBmcm9tICcuLi9hcHAvaW5kZXguanMnO1xuaW1wb3J0IFdyYXBwZXIgZnJvbSAnLi91dGlscy93cmFwcGVyLmpzJztcbmltcG9ydCB7IGdldERhdGFDc3MsIGdldFJlc291cmNlRWxlbWVudENzcyB9IGZyb20gJy4uLy4uL3V0aWxzL2RhdGEtY3NzLW5hbWUuanMnO1xuY29uc3QgUmVzb3VyY2VBY3Rpb24gPSBwcm9wcyA9PiB7XG4gIGNvbnN0IHBhcmFtcyA9IHVzZVBhcmFtcygpO1xuICBjb25zdCB7XG4gICAgcmVzb3VyY2VzXG4gIH0gPSBwcm9wcztcbiAgY29uc3Qge1xuICAgIHJlc291cmNlSWQsXG4gICAgYWN0aW9uTmFtZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBbdGFnLCBzZXRUYWddID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbZmlsdGVyVmlzaWJsZSwgc2V0RmlsdGVyVmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJlc291cmNlID0gcmVzb3VyY2VzLmZpbmQociA9PiByLmlkID09PSByZXNvdXJjZUlkKTtcbiAgaWYgKCFyZXNvdXJjZSkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOb1Jlc291cmNlRXJyb3IsIHtcbiAgICAgIHJlc291cmNlSWQ6IHJlc291cmNlSWRcbiAgICB9KTtcbiAgfVxuICBjb25zdCBhY3Rpb24gPSByZXNvdXJjZS5yZXNvdXJjZUFjdGlvbnMuZmluZChyID0+IHIubmFtZSA9PT0gYWN0aW9uTmFtZSk7XG4gIGlmICghYWN0aW9uIHx8IGFjdGlvbkhhc0Rpc2FibGVkQ29tcG9uZW50KGFjdGlvbikpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTm9BY3Rpb25FcnJvciwge1xuICAgICAgcmVzb3VyY2VJZDogcmVzb3VyY2VJZCxcbiAgICAgIGFjdGlvbk5hbWU6IGFjdGlvbk5hbWVcbiAgICB9KTtcbiAgfVxuICBjb25zdCBsaXN0QWN0aW9uTmFtZSA9ICdsaXN0JztcbiAgY29uc3QgbGlzdEFjdGlvbiA9IHJlc291cmNlLnJlc291cmNlQWN0aW9ucy5maW5kKHIgPT4gci5uYW1lID09PSBsaXN0QWN0aW9uTmFtZSk7XG4gIGNvbnN0IGNvbnRlbnRUYWcgPSBnZXRSZXNvdXJjZUVsZW1lbnRDc3MocmVzb3VyY2UuaWQsIGFjdGlvbi5uYW1lKTtcbiAgY29uc3Qgcm91dGVBY3Rpb25Dc3MgPSBnZXREYXRhQ3NzKHJlc291cmNlLmlkLCBhY3Rpb24uYWN0aW9uVHlwZSwgYWN0aW9uLm5hbWUsICdyb3V0ZScpO1xuICBpZiAoYWN0aW9uLnNob3dJbkRyYXdlcikge1xuICAgIGlmICghbGlzdEFjdGlvbikge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyYXdlclBvcnRhbCwge1xuICAgICAgICB3aWR0aDogYWN0aW9uLmNvbnRhaW5lcldpZHRoLFxuICAgICAgICBcImRhdGEtY3NzXCI6IHJvdXRlQWN0aW9uQ3NzXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlQWN0aW9uQ29tcG9uZW50LCB7XG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICByZXNvdXJjZTogcmVzb3VyY2VcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgY29uc3QgdG9nZ2xlRmlsdGVyID0gbGlzdEFjdGlvbi5zaG93RmlsdGVyID8gKCkgPT4gc2V0RmlsdGVyVmlzaWJsZSghZmlsdGVyVmlzaWJsZSkgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEcmF3ZXJQb3J0YWwsIHtcbiAgICAgIHdpZHRoOiBhY3Rpb24uY29udGFpbmVyV2lkdGgsXG4gICAgICBcImRhdGEtY3NzXCI6IHJvdXRlQWN0aW9uQ3NzXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUFjdGlvbkNvbXBvbmVudCwge1xuICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICByZXNvdXJjZTogcmVzb3VyY2UsXG4gICAgICBzZXRUYWc6IHNldFRhZ1xuICAgIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoV3JhcHBlciwge1xuICAgICAgd2lkdGg6IGxpc3RBY3Rpb24uY29udGFpbmVyV2lkdGgsXG4gICAgICBcImRhdGEtY3NzXCI6IGNvbnRlbnRUYWdcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBY3Rpb25IZWFkZXIsIHtcbiAgICAgIHJlc291cmNlOiByZXNvdXJjZSxcbiAgICAgIGFjdGlvbjogbGlzdEFjdGlvbixcbiAgICAgIHRhZzogdGFnLFxuICAgICAgdG9nZ2xlRmlsdGVyOiB0b2dnbGVGaWx0ZXJcbiAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUFjdGlvbkNvbXBvbmVudCwge1xuICAgICAgYWN0aW9uOiBsaXN0QWN0aW9uLFxuICAgICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgICAgc2V0VGFnOiBzZXRUYWdcbiAgICB9KSkpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVyLCB7XG4gICAgd2lkdGg6IGFjdGlvbi5jb250YWluZXJXaWR0aCxcbiAgICBzaG93RmlsdGVyOiBhY3Rpb24uc2hvd0ZpbHRlcixcbiAgICBcImRhdGEtY3NzXCI6IGNvbnRlbnRUYWdcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgZmxleDogdHJ1ZSxcbiAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgIGZsZXhHcm93OiAxXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEFjdGlvbkhlYWRlciwge1xuICAgIHJlc291cmNlOiByZXNvdXJjZSxcbiAgICBhY3Rpb246IGFjdGlvbixcbiAgICB0b2dnbGVGaWx0ZXI6IGFjdGlvbi5zaG93RmlsdGVyLFxuICAgIHRhZzogdGFnXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlQWN0aW9uQ29tcG9uZW50LCB7XG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgIHNldFRhZzogc2V0VGFnXG4gIH0pKSwgYWN0aW9uLnNob3dGaWx0ZXIgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRmlsdGVyRHJhd2VyLCB7XG4gICAgcmVzb3VyY2U6IHJlc291cmNlXG4gIH0pKTtcbn07XG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSBzdGF0ZSA9PiAoe1xuICByZXNvdXJjZXM6IHN0YXRlLnJlc291cmNlc1xufSk7XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzKShSZXNvdXJjZUFjdGlvbiksICdSZXNvdXJjZUFjdGlvblJvdXRlJyk7IiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IHVzZUxvY2F0aW9uLCB1c2VQYXJhbXMgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IEFwaUNsaWVudCBmcm9tICcuLi8uLi91dGlscy9hcGktY2xpZW50LmpzJztcbmltcG9ydCBnZXRCdWxrQWN0aW9uc0Zyb21SZWNvcmRzIGZyb20gJy4uL2FwcC9yZWNvcmRzLXRhYmxlL3V0aWxzL2dldC1idWxrLWFjdGlvbnMtZnJvbS1yZWNvcmRzLmpzJztcbmltcG9ydCBXcmFwcGVyIGZyb20gJy4vdXRpbHMvd3JhcHBlci5qcyc7XG5pbXBvcnQgeyBBY3Rpb25IZWFkZXIsIERyYXdlclBvcnRhbCwgQmFzZUFjdGlvbkNvbXBvbmVudCwgRXJyb3JNZXNzYWdlQm94LCBOb1Jlc291cmNlRXJyb3IsIE5vQWN0aW9uRXJyb3IgfSBmcm9tICcuLi9hcHAvaW5kZXguanMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24sIHVzZU5vdGljZSwgdXNlUmVzb3VyY2UgfSBmcm9tICcuLi8uLi9ob29rcy9pbmRleC5qcyc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgZ2V0RGF0YUNzcyB9IGZyb20gJy4uLy4uL2luZGV4LmpzJztcbmNvbnN0IGFwaSA9IG5ldyBBcGlDbGllbnQoKTtcbmNvbnN0IEJ1bGtBY3Rpb24gPSAoKSA9PiB7XG4gIGNvbnN0IHBhcmFtcyA9IHVzZVBhcmFtcygpO1xuICBjb25zdCBbcmVjb3Jkcywgc2V0UmVjb3Jkc10gPSB1c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3RhZywgc2V0VGFnXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW2ZpbHRlclZpc2libGUsIHNldEZpbHRlclZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB7XG4gICAgdHJhbnNsYXRlTWVzc2FnZVxuICB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgYWRkTm90aWNlID0gdXNlTm90aWNlKCk7XG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKTtcbiAgY29uc3Qge1xuICAgIHJlc291cmNlSWQsXG4gICAgYWN0aW9uTmFtZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCByZXNvdXJjZSA9IHVzZVJlc291cmNlKHJlc291cmNlSWQpO1xuICBjb25zdCBsaXN0QWN0aW9uTmFtZSA9ICdsaXN0JztcbiAgY29uc3QgbGlzdEFjdGlvbiA9IHJlc291cmNlPy5yZXNvdXJjZUFjdGlvbnMuZmluZChyID0+IHIubmFtZSA9PT0gbGlzdEFjdGlvbk5hbWUpO1xuICBjb25zdCBmZXRjaFJlY29yZHMgPSAoKSA9PiB7XG4gICAgY29uc3QgcmVjb3JkSWRzU3RyaW5nID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhsb2NhdGlvbi5zZWFyY2gpLmdldCgncmVjb3JkSWRzJyk7XG4gICAgY29uc3QgcmVjb3JkSWRzID0gcmVjb3JkSWRzU3RyaW5nID8gcmVjb3JkSWRzU3RyaW5nLnNwbGl0KCcsJykgOiBbXTtcbiAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgIHJldHVybiBhcGkuYnVsa0FjdGlvbih7XG4gICAgICByZXNvdXJjZUlkOiByZXNvdXJjZUlkLFxuICAgICAgcmVjb3JkSWRzLFxuICAgICAgYWN0aW9uTmFtZTogYWN0aW9uTmFtZVxuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICBzZXRSZWNvcmRzKHJlc3BvbnNlLmRhdGEucmVjb3Jkcyk7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICBhZGROb3RpY2Uoe1xuICAgICAgICBtZXNzYWdlOiAnZXJyb3JGZXRjaGluZ1JlY29yZHMnLFxuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICByZXNvdXJjZUlkXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9O1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZldGNoUmVjb3JkcygpO1xuICB9LCBbcGFyYW1zLnJlc291cmNlSWQsIHBhcmFtcy5hY3Rpb25OYW1lLCBsb2NhdGlvbi5zZWFyY2hdKTtcbiAgaWYgKCFyZXNvdXJjZSkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOb1Jlc291cmNlRXJyb3IsIHtcbiAgICAgIHJlc291cmNlSWQ6IHJlc291cmNlSWRcbiAgICB9KTtcbiAgfVxuICBpZiAoIXJlY29yZHMgJiYgIWxvYWRpbmcpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRXJyb3JNZXNzYWdlQm94LCB7XG4gICAgICB0aXRsZTogXCJObyByZWNvcmRzXCJcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBcIiwgbnVsbCwgdHJhbnNsYXRlTWVzc2FnZSgnbm9SZWNvcmRzU2VsZWN0ZWQnLCByZXNvdXJjZUlkKSkpO1xuICB9XG4gIGNvbnN0IGFjdGlvbiA9IGdldEJ1bGtBY3Rpb25zRnJvbVJlY29yZHMocmVjb3JkcyB8fCBbXSkuZmluZChyID0+IHIubmFtZSA9PT0gYWN0aW9uTmFtZSk7XG4gIGlmIChsb2FkaW5nKSB7XG4gICAgY29uc3QgYWN0aW9uRnJvbVJlc291cmNlID0gcmVzb3VyY2UuYWN0aW9ucy5maW5kKHIgPT4gci5uYW1lID09PSBhY3Rpb25OYW1lKTtcbiAgICByZXR1cm4gYWN0aW9uRnJvbVJlc291cmNlPy5zaG93SW5EcmF3ZXIgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEcmF3ZXJQb3J0YWwsIG51bGwsIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExvYWRlciwgbnVsbCkpIDogLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTG9hZGVyLCBudWxsKTtcbiAgfVxuICBpZiAoIWFjdGlvbikge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChOb0FjdGlvbkVycm9yLCB7XG4gICAgICByZXNvdXJjZUlkOiByZXNvdXJjZUlkLFxuICAgICAgYWN0aW9uTmFtZTogYWN0aW9uTmFtZVxuICAgIH0pO1xuICB9XG4gIGNvbnN0IHJvdXRlV3JhcHBlckNzcyA9IGdldERhdGFDc3MocmVzb3VyY2UuaWQsIGFjdGlvbi5hY3Rpb25UeXBlLCBhY3Rpb24ubmFtZSwgJ3JvdXRlLXdyYXBwZXInKTtcbiAgY29uc3Qgcm91dGVBY3Rpb25Dc3MgPSBnZXREYXRhQ3NzKHJlc291cmNlLmlkLCBhY3Rpb24uYWN0aW9uVHlwZSwgYWN0aW9uLm5hbWUsICdyb3V0ZScpO1xuICBpZiAoYWN0aW9uLnNob3dJbkRyYXdlcikge1xuICAgIGlmICghbGlzdEFjdGlvbikge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERyYXdlclBvcnRhbCwge1xuICAgICAgICB3aWR0aDogYWN0aW9uLmNvbnRhaW5lcldpZHRoLFxuICAgICAgICBcImRhdGEtY3NzXCI6IHJvdXRlQWN0aW9uQ3NzXG4gICAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCYXNlQWN0aW9uQ29tcG9uZW50LCB7XG4gICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICByZXNvdXJjZTogcmVzb3VyY2UsXG4gICAgICAgIHJlY29yZHM6IHJlY29yZHNcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgY29uc3QgdG9nZ2xlRmlsdGVyID0gbGlzdEFjdGlvbi5zaG93RmlsdGVyID8gKCkgPT4gc2V0RmlsdGVyVmlzaWJsZSghZmlsdGVyVmlzaWJsZSkgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEcmF3ZXJQb3J0YWwsIHtcbiAgICAgIHdpZHRoOiBhY3Rpb24uY29udGFpbmVyV2lkdGgsXG4gICAgICBcImRhdGEtY3NzXCI6IHJvdXRlQWN0aW9uQ3NzXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUFjdGlvbkNvbXBvbmVudCwge1xuICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICByZXNvdXJjZTogcmVzb3VyY2UsXG4gICAgICByZWNvcmRzOiByZWNvcmRzLFxuICAgICAgc2V0VGFnOiBzZXRUYWdcbiAgICB9KSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZXIsIHtcbiAgICAgIHdpZHRoOiBsaXN0QWN0aW9uLmNvbnRhaW5lcldpZHRoLFxuICAgICAgXCJkYXRhLWNzc1wiOiByb3V0ZVdyYXBwZXJDc3NcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBY3Rpb25IZWFkZXIsIHtcbiAgICAgIHJlc291cmNlOiByZXNvdXJjZSxcbiAgICAgIGFjdGlvbjogbGlzdEFjdGlvbixcbiAgICAgIHRhZzogdGFnLFxuICAgICAgdG9nZ2xlRmlsdGVyOiB0b2dnbGVGaWx0ZXJcbiAgICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUFjdGlvbkNvbXBvbmVudCwge1xuICAgICAgYWN0aW9uOiBsaXN0QWN0aW9uLFxuICAgICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgICAgc2V0VGFnOiBzZXRUYWdcbiAgICB9KSkpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVyLCB7XG4gICAgd2lkdGg6IGFjdGlvbi5jb250YWluZXJXaWR0aCxcbiAgICBcImRhdGEtY3NzXCI6IHJvdXRlV3JhcHBlckNzc1xuICB9LCAhYWN0aW9uPy5zaG93SW5EcmF3ZXIgPyAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBY3Rpb25IZWFkZXIsIHtcbiAgICByZXNvdXJjZTogcmVzb3VyY2UsXG4gICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgdGFnOiB0YWdcbiAgfSkgOiAnJywgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUFjdGlvbkNvbXBvbmVudCwge1xuICAgIGFjdGlvbjogYWN0aW9uLFxuICAgIHJlc291cmNlOiByZXNvdXJjZSxcbiAgICByZWNvcmRzOiByZWNvcmRzLFxuICAgIHNldFRhZzogc2V0VGFnXG4gIH0pKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKEJ1bGtBY3Rpb24sICdCdWxrQWN0aW9uUm91dGUnKTsiLCJpbXBvcnQgeyBJbmZvQm94LCBUZXh0IH0gZnJvbSAnQGFkbWluanMvZGVzaWduLXN5c3RlbSc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRyYW5zIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHVzZVBhcmFtcyB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHdpdGhOb1NTUiBmcm9tICcuLi8uLi9ob2Mvd2l0aC1uby1zc3IuanMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICcuLi8uLi9ob29rcy9pbmRleC5qcyc7XG5pbXBvcnQgRXJyb3JCb3VuZGFyeSBmcm9tICcuLi9hcHAvZXJyb3ItYm91bmRhcnkuanMnO1xuY29uc3QgUGFnZSA9ICgpID0+IHtcbiAgY29uc3QgcGFnZXMgPSB1c2VTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5wYWdlcyk7XG4gIGNvbnN0IHBhcmFtcyA9IHVzZVBhcmFtcygpO1xuICBjb25zdCB7XG4gICAgcGFnZU5hbWVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3Qge1xuICAgIHRtXG4gIH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBjdXJyZW50UGFnZSA9IHVzZU1lbW8oKCkgPT4gcGFnZXMuZmluZCgoe1xuICAgIG5hbWVcbiAgfSkgPT4gbmFtZSA9PT0gcGFnZU5hbWUpLCBbcGFnZXMsIHBhZ2VOYW1lXSk7XG4gIGlmICghY3VycmVudFBhZ2UpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoSW5mb0JveCwge1xuICAgICAgdGl0bGU6IHRtKCdwYWdlTm90Rm91bmRfdGl0bGUnKSxcbiAgICAgIGlsbHVzdHJhdGlvbjogXCJOb3RGb3VuZFwiXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGV4dCwge1xuICAgICAgbWI6IFwieHhsXCJcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFucywge1xuICAgICAgaTE4bktleTogXCJtZXNzYWdlcy5wYWdlTm90Rm91bmRfc3VidGl0bGVcIixcbiAgICAgIHZhbHVlczoge1xuICAgICAgICBwYWdlTmFtZVxuICAgICAgfSxcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgc3Ryb25nOiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN0cm9uZ1wiLCBudWxsKVxuICAgICAgfVxuICAgIH0pKSk7XG4gIH1cbiAgY29uc3QgQ29tcG9uZW50ID0gQWRtaW5KUy5Vc2VyQ29tcG9uZW50c1tjdXJyZW50UGFnZS5jb21wb25lbnRdO1xuICBpZiAoIUNvbXBvbmVudCkge1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJbmZvQm94LCB7XG4gICAgICB0aXRsZTogdG0oJ2NvbXBvbmVudE5vdEZvdW5kX3RpdGxlJyksXG4gICAgICBpbGx1c3RyYXRpb246IFwiQmV3YXJlXCJcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUZXh0LCB7XG4gICAgICBtYjogXCJ4eGxcIlxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zLCB7XG4gICAgICBpMThuS2V5OiBcIm1lc3NhZ2VzLmNvbXBvbmVudE5vdEZvdW5kX3N1YnRpdGxlXCJcbiAgICB9KSkpO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChFcnJvckJvdW5kYXJ5LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIG51bGwpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKHdpdGhOb1NTUihQYWdlKSwgJ1BhZ2VSb3V0ZScpOyIsImltcG9ydCB7IEJveCB9IGZyb20gJ0BhZG1pbmpzL2Rlc2lnbi1zeXN0ZW0nO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHVzZU1hdGNoLCB1c2VQYXJhbXMgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IFZpZXdIZWxwZXJzIGZyb20gJy4uLy4uLy4uL2JhY2tlbmQvdXRpbHMvdmlldy1oZWxwZXJzL3ZpZXctaGVscGVycy5qcyc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi8uLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VFbGVtZW50Q3NzIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5kZXguanMnO1xuaW1wb3J0IEJhc2VBY3Rpb24gZnJvbSAnLi4vYXBwL2Jhc2UtYWN0aW9uLWNvbXBvbmVudC5qcyc7XG5pbXBvcnQgeyBOb0FjdGlvbkVycm9yLCBOb1Jlc291cmNlRXJyb3IgfSBmcm9tICcuLi9hcHAvZXJyb3ItbWVzc2FnZS5qcyc7XG5pbXBvcnQgRmlsdGVyRHJhd2VyIGZyb20gJy4uL2FwcC9maWx0ZXItZHJhd2VyLmpzJztcbmltcG9ydCB7IEFjdGlvbkhlYWRlciB9IGZyb20gJy4uL2FwcC9pbmRleC5qcyc7XG5jb25zdCBnZXRBY3Rpb24gPSByZXNvdXJjZSA9PiB7XG4gIGNvbnN0IGggPSBuZXcgVmlld0hlbHBlcnMoKTtcbiAgY29uc3QgcmVzb3VyY2VJZCA9ICc6cmVzb3VyY2VJZCc7XG4gIGNvbnN0IGFjdGlvbk5hbWUgPSAnOmFjdGlvbk5hbWUnO1xuICBjb25zdCByZWNvcmRJZCA9ICc6cmVjb3JkSWQnO1xuICBjb25zdCByZWNvcmRBY3Rpb25VcmwgPSBoLnJlY29yZEFjdGlvblVybCh7XG4gICAgcmVzb3VyY2VJZCxcbiAgICByZWNvcmRJZCxcbiAgICBhY3Rpb25OYW1lXG4gIH0pO1xuICBjb25zdCByZXNvdXJjZUFjdGlvblVybCA9IGgucmVzb3VyY2VBY3Rpb25Vcmwoe1xuICAgIHJlc291cmNlSWQsXG4gICAgYWN0aW9uTmFtZVxuICB9KTtcbiAgY29uc3QgYnVsa0FjdGlvblVybCA9IGguYnVsa0FjdGlvblVybCh7XG4gICAgcmVzb3VyY2VJZCxcbiAgICBhY3Rpb25OYW1lXG4gIH0pO1xuICBjb25zdCByZXNvdXJjZUFjdGlvbk1hdGNoID0gdXNlTWF0Y2gocmVzb3VyY2VBY3Rpb25VcmwpO1xuICBjb25zdCByZWNvcmRBY3Rpb25NYXRjaCA9IHVzZU1hdGNoKHJlY29yZEFjdGlvblVybCk7XG4gIGNvbnN0IGJ1bGtBY3Rpb25NYXRjaCA9IHVzZU1hdGNoKGJ1bGtBY3Rpb25VcmwpO1xuICBjb25zdCBhY3Rpb24gPSByZXNvdXJjZUFjdGlvbk1hdGNoPy5wYXJhbXMuYWN0aW9uTmFtZSB8fCByZWNvcmRBY3Rpb25NYXRjaD8ucGFyYW1zLmFjdGlvbk5hbWUgfHwgYnVsa0FjdGlvbk1hdGNoPy5wYXJhbXMuYWN0aW9uTmFtZTtcbiAgcmV0dXJuIGFjdGlvbiA/IHJlc291cmNlLmFjdGlvbnMuZmluZChhID0+IGEubmFtZSA9PT0gYWN0aW9uKSA6IHVuZGVmaW5lZDtcbn07XG5jb25zdCBSZXNvdXJjZUFjdGlvbiA9IHByb3BzID0+IHtcbiAgY29uc3QgcGFyYW1zID0gdXNlUGFyYW1zKCk7XG4gIGNvbnN0IHtcbiAgICByZXNvdXJjZXNcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgcmVzb3VyY2VJZFxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBbdGFnLCBzZXRUYWddID0gdXNlU3RhdGUoJycpO1xuICBpZiAoIXJlc291cmNlSWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZXNvdXJjZSA9IHJlc291cmNlcy5maW5kKHIgPT4gci5pZCA9PT0gcmVzb3VyY2VJZCk7XG4gIGlmICghcmVzb3VyY2UpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTm9SZXNvdXJjZUVycm9yLCB7XG4gICAgICByZXNvdXJjZUlkOiByZXNvdXJjZUlkXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgcmVhbEVuZEFjdGlvbiA9IGdldEFjdGlvbihyZXNvdXJjZSk7XG4gIGlmIChyZWFsRW5kQWN0aW9uICYmICFyZWFsRW5kQWN0aW9uLnNob3dJbkRyYXdlcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGxpc3RBY3Rpb25OYW1lID0gJ2xpc3QnO1xuICBjb25zdCBsaXN0QWN0aW9uID0gcmVzb3VyY2UucmVzb3VyY2VBY3Rpb25zLmZpbmQociA9PiByLm5hbWUgPT09IGxpc3RBY3Rpb25OYW1lKTtcbiAgaWYgKCFsaXN0QWN0aW9uKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE5vQWN0aW9uRXJyb3IsIHtcbiAgICAgIHJlc291cmNlSWQ6IHJlc291cmNlSWQsXG4gICAgICBhY3Rpb25OYW1lOiBsaXN0QWN0aW9uTmFtZVxuICAgIH0pO1xuICB9XG4gIGNvbnN0IGNvbnRlbnRUYWcgPSBnZXRSZXNvdXJjZUVsZW1lbnRDc3MocmVzb3VyY2UuaWQsICdsaXN0Jyk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBmbGV4OiB0cnVlLFxuICAgIHZhcmlhbnQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICBhbGlnbkl0ZW1zOiBcInN0YXJ0XCIsXG4gICAgd2lkdGg6IGxpc3RBY3Rpb24uY29udGFpbmVyV2lkdGgsXG4gICAgbXg6IFwiYXV0b1wiLFxuICAgIHN0eWxlOiB7XG4gICAgICBnYXA6IDE2XG4gICAgfSxcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIFwiZGF0YS1jc3NcIjogY29udGVudFRhZ1xuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCb3gsIHtcbiAgICBmbGV4OiB0cnVlLFxuICAgIGZsZXhEaXJlY3Rpb246IFwiY29sdW1uXCIsXG4gICAgZmxleEdyb3c6IDFcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQWN0aW9uSGVhZGVyLCB7XG4gICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgIGFjdGlvbjogbGlzdEFjdGlvbixcbiAgICB0YWc6IHRhZyxcbiAgICB0b2dnbGVGaWx0ZXI6IGxpc3RBY3Rpb24uc2hvd0ZpbHRlclxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQmFzZUFjdGlvbiwge1xuICAgIGFjdGlvbjogbGlzdEFjdGlvbixcbiAgICByZXNvdXJjZTogcmVzb3VyY2UsXG4gICAgc2V0VGFnOiBzZXRUYWdcbiAgfSkpLCBsaXN0QWN0aW9uLnNob3dGaWx0ZXIgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRmlsdGVyRHJhd2VyLCB7XG4gICAgcmVzb3VyY2U6IHJlc291cmNlXG4gIH0pKTtcbn07XG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSBzdGF0ZSA9PiAoe1xuICByZXNvdXJjZXM6IHN0YXRlLnJlc291cmNlc1xufSk7XG5leHBvcnQgZGVmYXVsdCBhbGxvd092ZXJyaWRlKGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzKShSZXNvdXJjZUFjdGlvbiksICdSZXNvdXJjZVJvdXRlJyk7IiwiLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tY2hpbGRyZW4tcHJvcCAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBSb3V0ZXMsIFJvdXRlIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgeyBCb3gsIE92ZXJsYXkgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtJztcbmltcG9ydCB7IHVzZUxvY2F0aW9uIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCBWaWV3SGVscGVycyBmcm9tICcuLi8uLi9iYWNrZW5kL3V0aWxzL3ZpZXctaGVscGVycy92aWV3LWhlbHBlcnMuanMnO1xuaW1wb3J0IFNpZGViYXIsIHsgU0lERUJBUl9aX0lOREVYIH0gZnJvbSAnLi9hcHAvc2lkZWJhci9zaWRlYmFyLmpzJztcbmltcG9ydCBUb3BCYXIgZnJvbSAnLi9hcHAvdG9wLWJhci5qcyc7XG5pbXBvcnQgTm90aWNlIGZyb20gJy4vYXBwL25vdGljZS5qcyc7XG5pbXBvcnQgYWxsb3dPdmVycmlkZSBmcm9tICcuLi9ob2MvYWxsb3ctb3ZlcnJpZGUuanMnO1xuaW1wb3J0IHsgQWRtaW5Nb2RhbCBhcyBNb2RhbCB9IGZyb20gJy4vYXBwL2FkbWluLW1vZGFsLmpzJztcbmltcG9ydCB7IERhc2hib2FyZFJvdXRlLCBSZXNvdXJjZUFjdGlvblJvdXRlLCBSZWNvcmRBY3Rpb25Sb3V0ZSwgUGFnZVJvdXRlLCBCdWxrQWN0aW9uUm91dGUsIFJlc291cmNlUm91dGUgfSBmcm9tICcuL3JvdXRlcy9pbmRleC5qcyc7XG5pbXBvcnQgdXNlSGlzdG9yeUxpc3RlbiBmcm9tICcuLi9ob29rcy91c2UtaGlzdG9yeS1saXN0ZW4uanMnO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25CYWNrZ3JvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAvYXV0aC1iYWNrZ3JvdW5kLWNvbXBvbmVudC5qcyc7XG5pbXBvcnQgeyBGb290ZXIgfSBmcm9tICcuL2FwcC9mb290ZXIuanMnO1xuY29uc3QgaCA9IG5ldyBWaWV3SGVscGVycygpO1xuY29uc3QgQXBwID0gKCkgPT4ge1xuICBjb25zdCBbc2lkZWJhclZpc2libGUsIHRvZ2dsZVNpZGViYXJdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBsb2NhdGlvbiA9IHVzZUxvY2F0aW9uKCk7XG4gIHVzZUhpc3RvcnlMaXN0ZW4oKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2lkZWJhclZpc2libGUpIHtcbiAgICAgIHRvZ2dsZVNpZGViYXIoZmFsc2UpO1xuICAgIH1cbiAgfSwgW2xvY2F0aW9uXSk7XG4gIGNvbnN0IHJlc291cmNlSWQgPSAnOnJlc291cmNlSWQnO1xuICBjb25zdCBhY3Rpb25OYW1lID0gJzphY3Rpb25OYW1lJztcbiAgY29uc3QgcmVjb3JkSWQgPSAnOnJlY29yZElkJztcbiAgY29uc3QgcGFnZU5hbWUgPSAnOnBhZ2VOYW1lJztcblxuICAvLyBOb3RlOiByZXBsYWNlcyBhcmUgcmVxdWlyZWQgc28gdGhhdCByZWNvcmQvcmVzb3VyY2UvYnVsayBhY3Rpb25zIHVybHNcbiAgLy8gYXJlIHJlbGF0aXZlIHRvIHRoZWlyIHBhcmVudCByb3V0ZVxuICBjb25zdCBkYXNoYm9hcmRVcmwgPSBoLmRhc2hib2FyZFVybCgpO1xuICBjb25zdCByZXNvdXJjZVVybCA9IGgucmVzb3VyY2VVcmwoe1xuICAgIHJlc291cmNlSWRcbiAgfSk7XG4gIGNvbnN0IHJlY29yZEFjdGlvblVybCA9IGgucmVjb3JkQWN0aW9uVXJsKHtcbiAgICByZXNvdXJjZUlkLFxuICAgIHJlY29yZElkLFxuICAgIGFjdGlvbk5hbWVcbiAgfSkucmVwbGFjZShyZXNvdXJjZVVybCwgJycpLnN1YnN0cmluZygxKTtcbiAgY29uc3QgcmVzb3VyY2VBY3Rpb25VcmwgPSBoLnJlc291cmNlQWN0aW9uVXJsKHtcbiAgICByZXNvdXJjZUlkLFxuICAgIGFjdGlvbk5hbWVcbiAgfSkucmVwbGFjZShyZXNvdXJjZVVybCwgJycpLnN1YnN0cmluZygxKTtcbiAgY29uc3QgYnVsa0FjdGlvblVybCA9IGguYnVsa0FjdGlvblVybCh7XG4gICAgcmVzb3VyY2VJZCxcbiAgICBhY3Rpb25OYW1lXG4gIH0pLnJlcGxhY2UocmVzb3VyY2VVcmwsICcnKS5zdWJzdHJpbmcoMSk7XG4gIGNvbnN0IHBhZ2VVcmwgPSBoLnBhZ2VVcmwocGFnZU5hbWUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBmbGV4OiB0cnVlLFxuICAgIFwiZGF0YS1jc3NcIjogXCJhcHBcIlxuICB9LCBzaWRlYmFyVmlzaWJsZSA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE92ZXJsYXksIHtcbiAgICBvbkNsaWNrOiAoKSA9PiB0b2dnbGVTaWRlYmFyKCFzaWRlYmFyVmlzaWJsZSksXG4gICAgekluZGV4OiBTSURFQkFSX1pfSU5ERVggLSAxXG4gIH0pIDogbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU2lkZWJhciwge1xuICAgIGlzVmlzaWJsZTogc2lkZWJhclZpc2libGUsXG4gICAgXCJkYXRhLWNzc1wiOiBcInNpZGViYXJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQm94LCB7XG4gICAgZmxleDogdHJ1ZSxcbiAgICBmbGV4R3JvdzogMSxcbiAgICBmbGV4RGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgIG92ZXJmbG93WTogXCJhdXRvXCIsXG4gICAgYmc6IFwiYmdcIixcbiAgICBcImRhdGEtY3NzXCI6IFwiYXBwLWNvbnRlbnRcIlxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUb3BCYXIsIHtcbiAgICB0b2dnbGVTaWRlYmFyOiAoKSA9PiB0b2dnbGVTaWRlYmFyKCFzaWRlYmFyVmlzaWJsZSlcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEJveCwge1xuICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgdG9wOiAwLFxuICAgIHpJbmRleDogMjAwMCxcbiAgICBcImRhdGEtY3NzXCI6IFwibm90aWNlXCJcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTm90aWNlLCBudWxsKSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlcywgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGUsIHtcbiAgICBwYXRoOiBkYXNoYm9hcmRVcmxcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGUsIHtcbiAgICBpbmRleDogdHJ1ZSxcbiAgICBlbGVtZW50OiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEYXNoYm9hcmRSb3V0ZSwgbnVsbClcbiAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZSwge1xuICAgIHBhdGg6IHJlc291cmNlVXJsXG4gIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlLCB7XG4gICAgaW5kZXg6IHRydWUsXG4gICAgZWxlbWVudDogLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUmVzb3VyY2VSb3V0ZSwgbnVsbClcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlLCB7XG4gICAgcGF0aDogYnVsa0FjdGlvblVybCxcbiAgICBlbGVtZW50OiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChCdWxrQWN0aW9uUm91dGUsIG51bGwpXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZSwge1xuICAgIHBhdGg6IHJlc291cmNlQWN0aW9uVXJsLFxuICAgIGVsZW1lbnQ6IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlc291cmNlQWN0aW9uUm91dGUsIG51bGwpXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZSwge1xuICAgIHBhdGg6IHJlY29yZEFjdGlvblVybCxcbiAgICBlbGVtZW50OiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSZWNvcmRBY3Rpb25Sb3V0ZSwgbnVsbClcbiAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZSwge1xuICAgIHBhdGg6IHBhZ2VVcmxcbiAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGUsIHtcbiAgICBpbmRleDogdHJ1ZSxcbiAgICBlbGVtZW50OiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQYWdlUm91dGUsIG51bGwpXG4gIH0pKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGUsIHtcbiAgICBwYXRoOiBcIipcIixcbiAgICBlbGVtZW50OiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChEYXNoYm9hcmRSb3V0ZSwgbnVsbClcbiAgfSkpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGb290ZXIsIG51bGwpKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTW9kYWwsIG51bGwpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChBdXRoZW50aWNhdGlvbkJhY2tncm91bmRDb21wb25lbnQsIG51bGwpKTtcbn07XG5jb25zdCBPdmVycmlkYWJsZUFwcCA9IGFsbG93T3ZlcnJpZGUoQXBwLCAnQXBwbGljYXRpb24nKTtcbmV4cG9ydCB7IE92ZXJyaWRhYmxlQXBwIGFzIGRlZmF1bHQsIE92ZXJyaWRhYmxlQXBwIGFzIEFwcCwgQXBwIGFzIE9yaWdpbmFsQXBwIH07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHtcbiAgICAgIHZhbHVlOiBzdWJDbGFzcyxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpO1xufSIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikge1xuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbn0iLCJpbXBvcnQgYXJyYXlXaXRoSG9sZXMgZnJvbSBcIi4vYXJyYXlXaXRoSG9sZXMuanNcIjtcbmltcG9ydCBpdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5LmpzXCI7XG5pbXBvcnQgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgZnJvbSBcIi4vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCBub25JdGVyYWJsZVJlc3QgZnJvbSBcIi4vbm9uSXRlcmFibGVSZXN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9BcnJheShhcnIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aEhvbGVzKGFycikgfHwgaXRlcmFibGVUb0FycmF5KGFycikgfHwgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YnO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjayc7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzJztcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZCc7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzJztcbmltcG9ydCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJztcbmltcG9ydCBfZ2V0UHJvdG90eXBlT2YgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YnO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eSc7XG5pbXBvcnQgX3RvQXJyYXkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9BcnJheSc7XG5cbmZ1bmN0aW9uIG93bktleXMkNihvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQkNih0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyQ2KE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMkNihPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSByZXR1cm4gdGFyZ2V0OyB9XG52YXIgY29uc29sZUxvZ2dlciA9IHtcbiAgdHlwZTogJ2xvZ2dlcicsXG4gIGxvZzogZnVuY3Rpb24gbG9nKGFyZ3MpIHtcbiAgICB0aGlzLm91dHB1dCgnbG9nJywgYXJncyk7XG4gIH0sXG4gIHdhcm46IGZ1bmN0aW9uIHdhcm4oYXJncykge1xuICAgIHRoaXMub3V0cHV0KCd3YXJuJywgYXJncyk7XG4gIH0sXG4gIGVycm9yOiBmdW5jdGlvbiBlcnJvcihhcmdzKSB7XG4gICAgdGhpcy5vdXRwdXQoJ2Vycm9yJywgYXJncyk7XG4gIH0sXG4gIG91dHB1dDogZnVuY3Rpb24gb3V0cHV0KHR5cGUsIGFyZ3MpIHtcbiAgICBpZiAoY29uc29sZSAmJiBjb25zb2xlW3R5cGVdKSBjb25zb2xlW3R5cGVdLmFwcGx5KGNvbnNvbGUsIGFyZ3MpO1xuICB9XG59O1xudmFyIExvZ2dlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTG9nZ2VyKGNvbmNyZXRlTG9nZ2VyKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMb2dnZXIpO1xuICAgIHRoaXMuaW5pdChjb25jcmV0ZUxvZ2dlciwgb3B0aW9ucyk7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKExvZ2dlciwgW3tcbiAgICBrZXk6IFwiaW5pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0KGNvbmNyZXRlTG9nZ2VyKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB0aGlzLnByZWZpeCA9IG9wdGlvbnMucHJlZml4IHx8ICdpMThuZXh0Oic7XG4gICAgICB0aGlzLmxvZ2dlciA9IGNvbmNyZXRlTG9nZ2VyIHx8IGNvbnNvbGVMb2dnZXI7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgdGhpcy5kZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldERlYnVnXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldERlYnVnKGJvb2wpIHtcbiAgICAgIHRoaXMuZGVidWcgPSBib29sO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2dcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9nKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5mb3J3YXJkKGFyZ3MsICdsb2cnLCAnJywgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIndhcm5cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gd2FybigpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5mb3J3YXJkKGFyZ3MsICd3YXJuJywgJycsIHRydWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJlcnJvclwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlcnJvcigpIHtcbiAgICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5mb3J3YXJkKGFyZ3MsICdlcnJvcicsICcnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVwcmVjYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlcHJlY2F0ZSgpIHtcbiAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5mb3J3YXJkKGFyZ3MsICd3YXJuJywgJ1dBUk5JTkcgREVQUkVDQVRFRDogJywgdHJ1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZvcndhcmRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZm9yd2FyZChhcmdzLCBsdmwsIHByZWZpeCwgZGVidWdPbmx5KSB7XG4gICAgICBpZiAoZGVidWdPbmx5ICYmICF0aGlzLmRlYnVnKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIGFyZ3NbMF0gPSBcIlwiLmNvbmNhdChwcmVmaXgpLmNvbmNhdCh0aGlzLnByZWZpeCwgXCIgXCIpLmNvbmNhdChhcmdzWzBdKTtcbiAgICAgIHJldHVybiB0aGlzLmxvZ2dlcltsdmxdKGFyZ3MpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjcmVhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlKG1vZHVsZU5hbWUpIHtcbiAgICAgIHJldHVybiBuZXcgTG9nZ2VyKHRoaXMubG9nZ2VyLCBfb2JqZWN0U3ByZWFkJDYoX29iamVjdFNwcmVhZCQ2KHt9LCB7XG4gICAgICAgIHByZWZpeDogXCJcIi5jb25jYXQodGhpcy5wcmVmaXgsIFwiOlwiKS5jb25jYXQobW9kdWxlTmFtZSwgXCI6XCIpXG4gICAgICB9KSwgdGhpcy5vcHRpb25zKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsb25lXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNsb25lKG9wdGlvbnMpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHRoaXMub3B0aW9ucztcbiAgICAgIG9wdGlvbnMucHJlZml4ID0gb3B0aW9ucy5wcmVmaXggfHwgdGhpcy5wcmVmaXg7XG4gICAgICByZXR1cm4gbmV3IExvZ2dlcih0aGlzLmxvZ2dlciwgb3B0aW9ucyk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBMb2dnZXI7XG59KCk7XG52YXIgYmFzZUxvZ2dlciA9IG5ldyBMb2dnZXIoKTtcblxudmFyIEV2ZW50RW1pdHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFdmVudEVtaXR0ZXIpO1xuICAgIHRoaXMub2JzZXJ2ZXJzID0ge307XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKEV2ZW50RW1pdHRlciwgW3tcbiAgICBrZXk6IFwib25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb24oZXZlbnRzLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIF90aGlzLm9ic2VydmVyc1tldmVudF0gPSBfdGhpcy5vYnNlcnZlcnNbZXZlbnRdIHx8IFtdO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnNbZXZlbnRdLnB1c2gobGlzdGVuZXIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwib2ZmXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9mZihldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgIGlmICghdGhpcy5vYnNlcnZlcnNbZXZlbnRdKSByZXR1cm47XG4gICAgICBpZiAoIWxpc3RlbmVyKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm9ic2VydmVyc1tldmVudF07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMub2JzZXJ2ZXJzW2V2ZW50XSA9IHRoaXMub2JzZXJ2ZXJzW2V2ZW50XS5maWx0ZXIoZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgcmV0dXJuIGwgIT09IGxpc3RlbmVyO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImVtaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9ic2VydmVyc1tldmVudF0pIHtcbiAgICAgICAgdmFyIGNsb25lZCA9IFtdLmNvbmNhdCh0aGlzLm9ic2VydmVyc1tldmVudF0pO1xuICAgICAgICBjbG9uZWQuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgICBvYnNlcnZlci5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9ic2VydmVyc1snKiddKSB7XG4gICAgICAgIHZhciBfY2xvbmVkID0gW10uY29uY2F0KHRoaXMub2JzZXJ2ZXJzWycqJ10pO1xuICAgICAgICBfY2xvbmVkLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuYXBwbHkob2JzZXJ2ZXIsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBFdmVudEVtaXR0ZXI7XG59KCk7XG5cbmZ1bmN0aW9uIGRlZmVyKCkge1xuICB2YXIgcmVzO1xuICB2YXIgcmVqO1xuICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICByZXMgPSByZXNvbHZlO1xuICAgIHJlaiA9IHJlamVjdDtcbiAgfSk7XG4gIHByb21pc2UucmVzb2x2ZSA9IHJlcztcbiAgcHJvbWlzZS5yZWplY3QgPSByZWo7XG4gIHJldHVybiBwcm9taXNlO1xufVxuZnVuY3Rpb24gbWFrZVN0cmluZyhvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSByZXR1cm4gJyc7XG4gIHJldHVybiAnJyArIG9iamVjdDtcbn1cbmZ1bmN0aW9uIGNvcHkoYSwgcywgdCkge1xuICBhLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICBpZiAoc1ttXSkgdFttXSA9IHNbbV07XG4gIH0pO1xufVxuZnVuY3Rpb24gZ2V0TGFzdE9mUGF0aChvYmplY3QsIHBhdGgsIEVtcHR5KSB7XG4gIGZ1bmN0aW9uIGNsZWFuS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkgJiYga2V5LmluZGV4T2YoJyMjIycpID4gLTEgPyBrZXkucmVwbGFjZSgvIyMjL2csICcuJykgOiBrZXk7XG4gIH1cbiAgZnVuY3Rpb24gY2FuTm90VHJhdmVyc2VEZWVwZXIoKSB7XG4gICAgcmV0dXJuICFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZyc7XG4gIH1cbiAgdmFyIHN0YWNrID0gdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnID8gW10uY29uY2F0KHBhdGgpIDogcGF0aC5zcGxpdCgnLicpO1xuICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMSkge1xuICAgIGlmIChjYW5Ob3RUcmF2ZXJzZURlZXBlcigpKSByZXR1cm4ge307XG4gICAgdmFyIGtleSA9IGNsZWFuS2V5KHN0YWNrLnNoaWZ0KCkpO1xuICAgIGlmICghb2JqZWN0W2tleV0gJiYgRW1wdHkpIG9iamVjdFtrZXldID0gbmV3IEVtcHR5KCk7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpIHtcbiAgICAgIG9iamVjdCA9IG9iamVjdFtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3QgPSB7fTtcbiAgICB9XG4gIH1cbiAgaWYgKGNhbk5vdFRyYXZlcnNlRGVlcGVyKCkpIHJldHVybiB7fTtcbiAgcmV0dXJuIHtcbiAgICBvYmo6IG9iamVjdCxcbiAgICBrOiBjbGVhbktleShzdGFjay5zaGlmdCgpKVxuICB9O1xufVxuZnVuY3Rpb24gc2V0UGF0aChvYmplY3QsIHBhdGgsIG5ld1ZhbHVlKSB7XG4gIHZhciBfZ2V0TGFzdE9mUGF0aCA9IGdldExhc3RPZlBhdGgob2JqZWN0LCBwYXRoLCBPYmplY3QpLFxuICAgIG9iaiA9IF9nZXRMYXN0T2ZQYXRoLm9iaixcbiAgICBrID0gX2dldExhc3RPZlBhdGguaztcbiAgb2JqW2tdID0gbmV3VmFsdWU7XG59XG5mdW5jdGlvbiBwdXNoUGF0aChvYmplY3QsIHBhdGgsIG5ld1ZhbHVlLCBjb25jYXQpIHtcbiAgdmFyIF9nZXRMYXN0T2ZQYXRoMiA9IGdldExhc3RPZlBhdGgob2JqZWN0LCBwYXRoLCBPYmplY3QpLFxuICAgIG9iaiA9IF9nZXRMYXN0T2ZQYXRoMi5vYmosXG4gICAgayA9IF9nZXRMYXN0T2ZQYXRoMi5rO1xuICBvYmpba10gPSBvYmpba10gfHwgW107XG4gIGlmIChjb25jYXQpIG9ialtrXSA9IG9ialtrXS5jb25jYXQobmV3VmFsdWUpO1xuICBpZiAoIWNvbmNhdCkgb2JqW2tdLnB1c2gobmV3VmFsdWUpO1xufVxuZnVuY3Rpb24gZ2V0UGF0aChvYmplY3QsIHBhdGgpIHtcbiAgdmFyIF9nZXRMYXN0T2ZQYXRoMyA9IGdldExhc3RPZlBhdGgob2JqZWN0LCBwYXRoKSxcbiAgICBvYmogPSBfZ2V0TGFzdE9mUGF0aDMub2JqLFxuICAgIGsgPSBfZ2V0TGFzdE9mUGF0aDMuaztcbiAgaWYgKCFvYmopIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBvYmpba107XG59XG5mdW5jdGlvbiBnZXRQYXRoV2l0aERlZmF1bHRzKGRhdGEsIGRlZmF1bHREYXRhLCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0UGF0aChkYXRhLCBrZXkpO1xuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZ2V0UGF0aChkZWZhdWx0RGF0YSwga2V5KTtcbn1cbmZ1bmN0aW9uIGRlZXBFeHRlbmQodGFyZ2V0LCBzb3VyY2UsIG92ZXJ3cml0ZSkge1xuICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSkge1xuICAgIGlmIChwcm9wICE9PSAnX19wcm90b19fJyAmJiBwcm9wICE9PSAnY29uc3RydWN0b3InKSB7XG4gICAgICBpZiAocHJvcCBpbiB0YXJnZXQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXRbcHJvcF0gPT09ICdzdHJpbmcnIHx8IHRhcmdldFtwcm9wXSBpbnN0YW5jZW9mIFN0cmluZyB8fCB0eXBlb2Ygc291cmNlW3Byb3BdID09PSAnc3RyaW5nJyB8fCBzb3VyY2VbcHJvcF0gaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgICBpZiAob3ZlcndyaXRlKSB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVlcEV4dGVuZCh0YXJnZXRbcHJvcF0sIHNvdXJjZVtwcm9wXSwgb3ZlcndyaXRlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuZnVuY3Rpb24gcmVnZXhFc2NhcGUoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2csICdcXFxcJCYnKTtcbn1cbnZhciBfZW50aXR5TWFwID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiMzOTsnLFxuICAnLyc6ICcmI3gyRjsnXG59O1xuZnVuY3Rpb24gZXNjYXBlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkYXRhLnJlcGxhY2UoL1smPD5cIidcXC9dL2csIGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gX2VudGl0eU1hcFtzXTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cbnZhciBpc0lFMTAgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cubmF2aWdhdG9yICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudERhdGEgPT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50ICYmIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSA+IC0xO1xudmFyIGNoYXJzID0gWycgJywgJywnLCAnPycsICchJywgJzsnXTtcbmZ1bmN0aW9uIGxvb2tzTGlrZU9iamVjdFBhdGgoa2V5LCBuc1NlcGFyYXRvciwga2V5U2VwYXJhdG9yKSB7XG4gIG5zU2VwYXJhdG9yID0gbnNTZXBhcmF0b3IgfHwgJyc7XG4gIGtleVNlcGFyYXRvciA9IGtleVNlcGFyYXRvciB8fCAnJztcbiAgdmFyIHBvc3NpYmxlQ2hhcnMgPSBjaGFycy5maWx0ZXIoZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gbnNTZXBhcmF0b3IuaW5kZXhPZihjKSA8IDAgJiYga2V5U2VwYXJhdG9yLmluZGV4T2YoYykgPCAwO1xuICB9KTtcbiAgaWYgKHBvc3NpYmxlQ2hhcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHIgPSBuZXcgUmVnRXhwKFwiKFwiLmNvbmNhdChwb3NzaWJsZUNoYXJzLm1hcChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjID09PSAnPycgPyAnXFxcXD8nIDogYztcbiAgfSkuam9pbignfCcpLCBcIilcIikpO1xuICB2YXIgbWF0Y2hlZCA9ICFyLnRlc3Qoa2V5KTtcbiAgaWYgKCFtYXRjaGVkKSB7XG4gICAgdmFyIGtpID0ga2V5LmluZGV4T2Yoa2V5U2VwYXJhdG9yKTtcbiAgICBpZiAoa2kgPiAwICYmICFyLnRlc3Qoa2V5LnN1YnN0cmluZygwLCBraSkpKSB7XG4gICAgICBtYXRjaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1hdGNoZWQ7XG59XG5mdW5jdGlvbiBkZWVwRmluZChvYmosIHBhdGgpIHtcbiAgdmFyIGtleVNlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJy4nO1xuICBpZiAoIW9iaikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKG9ialtwYXRoXSkgcmV0dXJuIG9ialtwYXRoXTtcbiAgdmFyIHBhdGhzID0gcGF0aC5zcGxpdChrZXlTZXBhcmF0b3IpO1xuICB2YXIgY3VycmVudCA9IG9iajtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7ICsraSkge1xuICAgIGlmICghY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAodHlwZW9mIGN1cnJlbnRbcGF0aHNbaV1dID09PSAnc3RyaW5nJyAmJiBpICsgMSA8IHBhdGhzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRbcGF0aHNbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBqID0gMjtcbiAgICAgIHZhciBwID0gcGF0aHMuc2xpY2UoaSwgaSArIGopLmpvaW4oa2V5U2VwYXJhdG9yKTtcbiAgICAgIHZhciBtaXggPSBjdXJyZW50W3BdO1xuICAgICAgd2hpbGUgKG1peCA9PT0gdW5kZWZpbmVkICYmIHBhdGhzLmxlbmd0aCA+IGkgKyBqKSB7XG4gICAgICAgIGorKztcbiAgICAgICAgcCA9IHBhdGhzLnNsaWNlKGksIGkgKyBqKS5qb2luKGtleVNlcGFyYXRvcik7XG4gICAgICAgIG1peCA9IGN1cnJlbnRbcF07XG4gICAgICB9XG4gICAgICBpZiAobWl4ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAobWl4ID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmIChwYXRoLmVuZHNXaXRoKHApKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWl4ID09PSAnc3RyaW5nJykgcmV0dXJuIG1peDtcbiAgICAgICAgaWYgKHAgJiYgdHlwZW9mIG1peFtwXSA9PT0gJ3N0cmluZycpIHJldHVybiBtaXhbcF07XG4gICAgICB9XG4gICAgICB2YXIgam9pbmVkUGF0aCA9IHBhdGhzLnNsaWNlKGkgKyBqKS5qb2luKGtleVNlcGFyYXRvcik7XG4gICAgICBpZiAoam9pbmVkUGF0aCkgcmV0dXJuIGRlZXBGaW5kKG1peCwgam9pbmVkUGF0aCwga2V5U2VwYXJhdG9yKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhdGhzW2ldXTtcbiAgfVxuICByZXR1cm4gY3VycmVudDtcbn1cblxuZnVuY3Rpb24gb3duS2V5cyQ1KG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCQ1KHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzJDUoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyQ1KE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlciQzKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0JDMoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQzKCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cbnZhciBSZXNvdXJjZVN0b3JlID0gZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzKFJlc291cmNlU3RvcmUsIF9FdmVudEVtaXR0ZXIpO1xuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyJDMoUmVzb3VyY2VTdG9yZSk7XG4gIGZ1bmN0aW9uIFJlc291cmNlU3RvcmUoZGF0YSkge1xuICAgIHZhciBfdGhpcztcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgICAgbnM6IFsndHJhbnNsYXRpb24nXSxcbiAgICAgIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJ1xuICAgIH07XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlc291cmNlU3RvcmUpO1xuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgaWYgKGlzSUUxMCkge1xuICAgICAgRXZlbnRFbWl0dGVyLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgIH1cbiAgICBfdGhpcy5kYXRhID0gZGF0YSB8fCB7fTtcbiAgICBfdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAoX3RoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgX3RoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IgPSAnLic7XG4gICAgfVxuICAgIGlmIChfdGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgX3RoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG4gIF9jcmVhdGVDbGFzcyhSZXNvdXJjZVN0b3JlLCBbe1xuICAgIGtleTogXCJhZGROYW1lc3BhY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZE5hbWVzcGFjZXMobnMpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihucykgPCAwKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5ucy5wdXNoKG5zKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlTmFtZXNwYWNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW1vdmVOYW1lc3BhY2VzKG5zKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLm9wdGlvbnMubnMuaW5kZXhPZihucyk7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UmVzb3VyY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVzb3VyY2UobG5nLCBucywga2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMua2V5U2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcbiAgICAgIHZhciBpZ25vcmVKU09OU3RydWN0dXJlID0gb3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUgOiB0aGlzLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZTtcbiAgICAgIHZhciBwYXRoID0gW2xuZywgbnNdO1xuICAgICAgaWYgKGtleSAmJiB0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykgcGF0aCA9IHBhdGguY29uY2F0KGtleSk7XG4gICAgICBpZiAoa2V5ICYmIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aC5jb25jYXQoa2V5U2VwYXJhdG9yID8ga2V5LnNwbGl0KGtleVNlcGFyYXRvcikgOiBrZXkpO1xuICAgICAgaWYgKGxuZy5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICBwYXRoID0gbG5nLnNwbGl0KCcuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0UGF0aCh0aGlzLmRhdGEsIHBhdGgpO1xuICAgICAgaWYgKHJlc3VsdCB8fCAhaWdub3JlSlNPTlN0cnVjdHVyZSB8fCB0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykgcmV0dXJuIHJlc3VsdDtcbiAgICAgIHJldHVybiBkZWVwRmluZCh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhW2xuZ10gJiYgdGhpcy5kYXRhW2xuZ11bbnNdLCBrZXksIGtleVNlcGFyYXRvcik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFJlc291cmNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFJlc291cmNlKGxuZywgbnMsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiB7XG4gICAgICAgIHNpbGVudDogZmFsc2VcbiAgICAgIH07XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcbiAgICAgIGlmIChrZXlTZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkga2V5U2VwYXJhdG9yID0gJy4nO1xuICAgICAgdmFyIHBhdGggPSBbbG5nLCBuc107XG4gICAgICBpZiAoa2V5KSBwYXRoID0gcGF0aC5jb25jYXQoa2V5U2VwYXJhdG9yID8ga2V5LnNwbGl0KGtleVNlcGFyYXRvcikgOiBrZXkpO1xuICAgICAgaWYgKGxuZy5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICBwYXRoID0gbG5nLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhbHVlID0gbnM7XG4gICAgICAgIG5zID0gcGF0aFsxXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkTmFtZXNwYWNlcyhucyk7XG4gICAgICBzZXRQYXRoKHRoaXMuZGF0YSwgcGF0aCwgdmFsdWUpO1xuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkgdGhpcy5lbWl0KCdhZGRlZCcsIGxuZywgbnMsIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhZGRSZXNvdXJjZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkUmVzb3VyY2VzKGxuZywgbnMsIHJlc291cmNlcykge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHtcbiAgICAgICAgc2lsZW50OiBmYWxzZVxuICAgICAgfTtcbiAgICAgIGZvciAodmFyIG0gaW4gcmVzb3VyY2VzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzb3VyY2VzW21dID09PSAnc3RyaW5nJyB8fCBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHJlc291cmNlc1ttXSkgPT09ICdbb2JqZWN0IEFycmF5XScpIHRoaXMuYWRkUmVzb3VyY2UobG5nLCBucywgbSwgcmVzb3VyY2VzW21dLCB7XG4gICAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkgdGhpcy5lbWl0KCdhZGRlZCcsIGxuZywgbnMsIHJlc291cmNlcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFJlc291cmNlQnVuZGxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFJlc291cmNlQnVuZGxlKGxuZywgbnMsIHJlc291cmNlcywgZGVlcCwgb3ZlcndyaXRlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDoge1xuICAgICAgICBzaWxlbnQ6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdmFyIHBhdGggPSBbbG5nLCBuc107XG4gICAgICBpZiAobG5nLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGggPSBsbmcuc3BsaXQoJy4nKTtcbiAgICAgICAgZGVlcCA9IHJlc291cmNlcztcbiAgICAgICAgcmVzb3VyY2VzID0gbnM7XG4gICAgICAgIG5zID0gcGF0aFsxXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkTmFtZXNwYWNlcyhucyk7XG4gICAgICB2YXIgcGFjayA9IGdldFBhdGgodGhpcy5kYXRhLCBwYXRoKSB8fCB7fTtcbiAgICAgIGlmIChkZWVwKSB7XG4gICAgICAgIGRlZXBFeHRlbmQocGFjaywgcmVzb3VyY2VzLCBvdmVyd3JpdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFjayA9IF9vYmplY3RTcHJlYWQkNShfb2JqZWN0U3ByZWFkJDUoe30sIHBhY2spLCByZXNvdXJjZXMpO1xuICAgICAgfVxuICAgICAgc2V0UGF0aCh0aGlzLmRhdGEsIHBhdGgsIHBhY2spO1xuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkgdGhpcy5lbWl0KCdhZGRlZCcsIGxuZywgbnMsIHJlc291cmNlcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbW92ZVJlc291cmNlQnVuZGxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbW92ZVJlc291cmNlQnVuZGxlKGxuZywgbnMpIHtcbiAgICAgIGlmICh0aGlzLmhhc1Jlc291cmNlQnVuZGxlKGxuZywgbnMpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmRhdGFbbG5nXVtuc107XG4gICAgICB9XG4gICAgICB0aGlzLnJlbW92ZU5hbWVzcGFjZXMobnMpO1xuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVkJywgbG5nLCBucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc1Jlc291cmNlQnVuZGxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc1Jlc291cmNlQnVuZGxlKGxuZywgbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlKGxuZywgbnMpICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFJlc291cmNlQnVuZGxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlc291cmNlQnVuZGxlKGxuZywgbnMpIHtcbiAgICAgIGlmICghbnMpIG5zID0gdGhpcy5vcHRpb25zLmRlZmF1bHROUztcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUFQSSA9PT0gJ3YxJykgcmV0dXJuIF9vYmplY3RTcHJlYWQkNShfb2JqZWN0U3ByZWFkJDUoe30sIHt9KSwgdGhpcy5nZXRSZXNvdXJjZShsbmcsIG5zKSk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZShsbmcsIG5zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0RGF0YUJ5TGFuZ3VhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGF0YUJ5TGFuZ3VhZ2UobG5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhW2xuZ107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc0xhbmd1YWdlU29tZVRyYW5zbGF0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnMobG5nKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuZ2V0RGF0YUJ5TGFuZ3VhZ2UobG5nKTtcbiAgICAgIHZhciBuID0gZGF0YSAmJiBPYmplY3Qua2V5cyhkYXRhKSB8fCBbXTtcbiAgICAgIHJldHVybiAhIW4uZmluZChmdW5jdGlvbiAodikge1xuICAgICAgICByZXR1cm4gZGF0YVt2XSAmJiBPYmplY3Qua2V5cyhkYXRhW3ZdKS5sZW5ndGggPiAwO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvSlNPTlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUmVzb3VyY2VTdG9yZTtcbn0oRXZlbnRFbWl0dGVyKTtcblxudmFyIHBvc3RQcm9jZXNzb3IgPSB7XG4gIHByb2Nlc3NvcnM6IHt9LFxuICBhZGRQb3N0UHJvY2Vzc29yOiBmdW5jdGlvbiBhZGRQb3N0UHJvY2Vzc29yKG1vZHVsZSkge1xuICAgIHRoaXMucHJvY2Vzc29yc1ttb2R1bGUubmFtZV0gPSBtb2R1bGU7XG4gIH0sXG4gIGhhbmRsZTogZnVuY3Rpb24gaGFuZGxlKHByb2Nlc3NvcnMsIHZhbHVlLCBrZXksIG9wdGlvbnMsIHRyYW5zbGF0b3IpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHByb2Nlc3NvcnMuZm9yRWFjaChmdW5jdGlvbiAocHJvY2Vzc29yKSB7XG4gICAgICBpZiAoX3RoaXMucHJvY2Vzc29yc1twcm9jZXNzb3JdKSB2YWx1ZSA9IF90aGlzLnByb2Nlc3NvcnNbcHJvY2Vzc29yXS5wcm9jZXNzKHZhbHVlLCBrZXksIG9wdGlvbnMsIHRyYW5zbGF0b3IpO1xuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gb3duS2V5cyQ0KG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCQ0KHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzJDQoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyQ0KE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlciQyKERlcml2ZWQpIHsgdmFyIGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QgPSBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0JDIoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQyKCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cbnZhciBjaGVja2VkTG9hZGVkRm9yID0ge307XG52YXIgVHJhbnNsYXRvciA9IGZ1bmN0aW9uIChfRXZlbnRFbWl0dGVyKSB7XG4gIF9pbmhlcml0cyhUcmFuc2xhdG9yLCBfRXZlbnRFbWl0dGVyKTtcbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlciQyKFRyYW5zbGF0b3IpO1xuICBmdW5jdGlvbiBUcmFuc2xhdG9yKHNlcnZpY2VzKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHJhbnNsYXRvcik7XG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICBpZiAoaXNJRTEwKSB7XG4gICAgICBFdmVudEVtaXR0ZXIuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgfVxuICAgIGNvcHkoWydyZXNvdXJjZVN0b3JlJywgJ2xhbmd1YWdlVXRpbHMnLCAncGx1cmFsUmVzb2x2ZXInLCAnaW50ZXJwb2xhdG9yJywgJ2JhY2tlbmRDb25uZWN0b3InLCAnaTE4bkZvcm1hdCcsICd1dGlscyddLCBzZXJ2aWNlcywgX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgIF90aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIGlmIChfdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBfdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciA9ICcuJztcbiAgICB9XG4gICAgX3RoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ3RyYW5zbGF0b3InKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKFRyYW5zbGF0b3IsIFt7XG4gICAga2V5OiBcImNoYW5nZUxhbmd1YWdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNoYW5nZUxhbmd1YWdlKGxuZykge1xuICAgICAgaWYgKGxuZykgdGhpcy5sYW5ndWFnZSA9IGxuZztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXhpc3RzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGV4aXN0cyhrZXkpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7XG4gICAgICAgIGludGVycG9sYXRpb246IHt9XG4gICAgICB9O1xuICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmUoa2V5LCBvcHRpb25zKTtcbiAgICAgIHJldHVybiByZXNvbHZlZCAmJiByZXNvbHZlZC5yZXMgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXh0cmFjdEZyb21LZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXh0cmFjdEZyb21LZXkoa2V5LCBvcHRpb25zKSB7XG4gICAgICB2YXIgbnNTZXBhcmF0b3IgPSBvcHRpb25zLm5zU2VwYXJhdG9yICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5zU2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLm5zU2VwYXJhdG9yO1xuICAgICAgaWYgKG5zU2VwYXJhdG9yID09PSB1bmRlZmluZWQpIG5zU2VwYXJhdG9yID0gJzonO1xuICAgICAgdmFyIGtleVNlcGFyYXRvciA9IG9wdGlvbnMua2V5U2VwYXJhdG9yICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmtleVNlcGFyYXRvciA6IHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7XG4gICAgICB2YXIgbmFtZXNwYWNlcyA9IG9wdGlvbnMubnMgfHwgdGhpcy5vcHRpb25zLmRlZmF1bHROUyB8fCBbXTtcbiAgICAgIHZhciB3b3VsZENoZWNrRm9yTnNJbktleSA9IG5zU2VwYXJhdG9yICYmIGtleS5pbmRleE9mKG5zU2VwYXJhdG9yKSA+IC0xO1xuICAgICAgdmFyIHNlZW1zTmF0dXJhbExhbmd1YWdlID0gIXRoaXMub3B0aW9ucy51c2VyRGVmaW5lZEtleVNlcGFyYXRvciAmJiAhb3B0aW9ucy5rZXlTZXBhcmF0b3IgJiYgIXRoaXMub3B0aW9ucy51c2VyRGVmaW5lZE5zU2VwYXJhdG9yICYmICFvcHRpb25zLm5zU2VwYXJhdG9yICYmICFsb29rc0xpa2VPYmplY3RQYXRoKGtleSwgbnNTZXBhcmF0b3IsIGtleVNlcGFyYXRvcik7XG4gICAgICBpZiAod291bGRDaGVja0Zvck5zSW5LZXkgJiYgIXNlZW1zTmF0dXJhbExhbmd1YWdlKSB7XG4gICAgICAgIHZhciBtID0ga2V5Lm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO1xuICAgICAgICBpZiAobSAmJiBtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICBuYW1lc3BhY2VzOiBuYW1lc3BhY2VzXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFydHMgPSBrZXkuc3BsaXQobnNTZXBhcmF0b3IpO1xuICAgICAgICBpZiAobnNTZXBhcmF0b3IgIT09IGtleVNlcGFyYXRvciB8fCBuc1NlcGFyYXRvciA9PT0ga2V5U2VwYXJhdG9yICYmIHRoaXMub3B0aW9ucy5ucy5pbmRleE9mKHBhcnRzWzBdKSA+IC0xKSBuYW1lc3BhY2VzID0gcGFydHMuc2hpZnQoKTtcbiAgICAgICAga2V5ID0gcGFydHMuam9pbihrZXlTZXBhcmF0b3IpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJykgbmFtZXNwYWNlcyA9IFtuYW1lc3BhY2VzXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBuYW1lc3BhY2VzOiBuYW1lc3BhY2VzXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0cmFuc2xhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdHJhbnNsYXRlKGtleXMsIG9wdGlvbnMsIGxhc3RLZXkpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgaWYgKF90eXBlb2Yob3B0aW9ucykgIT09ICdvYmplY3QnICYmIHRoaXMub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcikge1xuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zLm92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyKGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgICAgIGlmIChrZXlzID09PSB1bmRlZmluZWQgfHwga2V5cyA9PT0gbnVsbCkgcmV0dXJuICcnO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtleXMpKSBrZXlzID0gW1N0cmluZyhrZXlzKV07XG4gICAgICB2YXIgcmV0dXJuRGV0YWlscyA9IG9wdGlvbnMucmV0dXJuRGV0YWlscyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5yZXR1cm5EZXRhaWxzIDogdGhpcy5vcHRpb25zLnJldHVybkRldGFpbHM7XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMua2V5U2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcbiAgICAgIHZhciBfdGhpcyRleHRyYWN0RnJvbUtleSA9IHRoaXMuZXh0cmFjdEZyb21LZXkoa2V5c1trZXlzLmxlbmd0aCAtIDFdLCBvcHRpb25zKSxcbiAgICAgICAga2V5ID0gX3RoaXMkZXh0cmFjdEZyb21LZXkua2V5LFxuICAgICAgICBuYW1lc3BhY2VzID0gX3RoaXMkZXh0cmFjdEZyb21LZXkubmFtZXNwYWNlcztcbiAgICAgIHZhciBuYW1lc3BhY2UgPSBuYW1lc3BhY2VzW25hbWVzcGFjZXMubGVuZ3RoIC0gMV07XG4gICAgICB2YXIgbG5nID0gb3B0aW9ucy5sbmcgfHwgdGhpcy5sYW5ndWFnZTtcbiAgICAgIHZhciBhcHBlbmROYW1lc3BhY2VUb0NJTW9kZSA9IG9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGUgfHwgdGhpcy5vcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlO1xuICAgICAgaWYgKGxuZyAmJiBsbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2NpbW9kZScpIHtcbiAgICAgICAgaWYgKGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlKSB7XG4gICAgICAgICAgdmFyIG5zU2VwYXJhdG9yID0gb3B0aW9ucy5uc1NlcGFyYXRvciB8fCB0aGlzLm9wdGlvbnMubnNTZXBhcmF0b3I7XG4gICAgICAgICAgaWYgKHJldHVybkRldGFpbHMpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHJlczogXCJcIi5jb25jYXQobmFtZXNwYWNlKS5jb25jYXQobnNTZXBhcmF0b3IpLmNvbmNhdChrZXkpLFxuICAgICAgICAgICAgICB1c2VkS2V5OiBrZXksXG4gICAgICAgICAgICAgIGV4YWN0VXNlZEtleToga2V5LFxuICAgICAgICAgICAgICB1c2VkTG5nOiBsbmcsXG4gICAgICAgICAgICAgIHVzZWROUzogbmFtZXNwYWNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQobmFtZXNwYWNlKS5jb25jYXQobnNTZXBhcmF0b3IpLmNvbmNhdChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXR1cm5EZXRhaWxzKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlczoga2V5LFxuICAgICAgICAgICAgdXNlZEtleToga2V5LFxuICAgICAgICAgICAgZXhhY3RVc2VkS2V5OiBrZXksXG4gICAgICAgICAgICB1c2VkTG5nOiBsbmcsXG4gICAgICAgICAgICB1c2VkTlM6IG5hbWVzcGFjZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgIH1cbiAgICAgIHZhciByZXNvbHZlZCA9IHRoaXMucmVzb2x2ZShrZXlzLCBvcHRpb25zKTtcbiAgICAgIHZhciByZXMgPSByZXNvbHZlZCAmJiByZXNvbHZlZC5yZXM7XG4gICAgICB2YXIgcmVzVXNlZEtleSA9IHJlc29sdmVkICYmIHJlc29sdmVkLnVzZWRLZXkgfHwga2V5O1xuICAgICAgdmFyIHJlc0V4YWN0VXNlZEtleSA9IHJlc29sdmVkICYmIHJlc29sdmVkLmV4YWN0VXNlZEtleSB8fCBrZXk7XG4gICAgICB2YXIgcmVzVHlwZSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkocmVzKTtcbiAgICAgIHZhciBub09iamVjdCA9IFsnW29iamVjdCBOdW1iZXJdJywgJ1tvYmplY3QgRnVuY3Rpb25dJywgJ1tvYmplY3QgUmVnRXhwXSddO1xuICAgICAgdmFyIGpvaW5BcnJheXMgPSBvcHRpb25zLmpvaW5BcnJheXMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuam9pbkFycmF5cyA6IHRoaXMub3B0aW9ucy5qb2luQXJyYXlzO1xuICAgICAgdmFyIGhhbmRsZUFzT2JqZWN0SW5JMThuRm9ybWF0ID0gIXRoaXMuaTE4bkZvcm1hdCB8fCB0aGlzLmkxOG5Gb3JtYXQuaGFuZGxlQXNPYmplY3Q7XG4gICAgICB2YXIgaGFuZGxlQXNPYmplY3QgPSB0eXBlb2YgcmVzICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgcmVzICE9PSAnYm9vbGVhbicgJiYgdHlwZW9mIHJlcyAhPT0gJ251bWJlcic7XG4gICAgICBpZiAoaGFuZGxlQXNPYmplY3RJbkkxOG5Gb3JtYXQgJiYgcmVzICYmIGhhbmRsZUFzT2JqZWN0ICYmIG5vT2JqZWN0LmluZGV4T2YocmVzVHlwZSkgPCAwICYmICEodHlwZW9mIGpvaW5BcnJheXMgPT09ICdzdHJpbmcnICYmIHJlc1R5cGUgPT09ICdbb2JqZWN0IEFycmF5XScpKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5yZXR1cm5PYmplY3RzICYmICF0aGlzLm9wdGlvbnMucmV0dXJuT2JqZWN0cykge1xuICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignYWNjZXNzaW5nIGFuIG9iamVjdCAtIGJ1dCByZXR1cm5PYmplY3RzIG9wdGlvbnMgaXMgbm90IGVuYWJsZWQhJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciByID0gdGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlciA/IHRoaXMub3B0aW9ucy5yZXR1cm5lZE9iamVjdEhhbmRsZXIocmVzVXNlZEtleSwgcmVzLCBfb2JqZWN0U3ByZWFkJDQoX29iamVjdFNwcmVhZCQ0KHt9LCBvcHRpb25zKSwge30sIHtcbiAgICAgICAgICAgIG5zOiBuYW1lc3BhY2VzXG4gICAgICAgICAgfSkpIDogXCJrZXkgJ1wiLmNvbmNhdChrZXksIFwiIChcIikuY29uY2F0KHRoaXMubGFuZ3VhZ2UsIFwiKScgcmV0dXJuZWQgYW4gb2JqZWN0IGluc3RlYWQgb2Ygc3RyaW5nLlwiKTtcbiAgICAgICAgICBpZiAocmV0dXJuRGV0YWlscykge1xuICAgICAgICAgICAgcmVzb2x2ZWQucmVzID0gcjtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleVNlcGFyYXRvcikge1xuICAgICAgICAgIHZhciByZXNUeXBlSXNBcnJheSA9IHJlc1R5cGUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgICAgICAgdmFyIGNvcHkgPSByZXNUeXBlSXNBcnJheSA/IFtdIDoge307XG4gICAgICAgICAgdmFyIG5ld0tleVRvVXNlID0gcmVzVHlwZUlzQXJyYXkgPyByZXNFeGFjdFVzZWRLZXkgOiByZXNVc2VkS2V5O1xuICAgICAgICAgIGZvciAodmFyIG0gaW4gcmVzKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlcywgbSkpIHtcbiAgICAgICAgICAgICAgdmFyIGRlZXBLZXkgPSBcIlwiLmNvbmNhdChuZXdLZXlUb1VzZSkuY29uY2F0KGtleVNlcGFyYXRvcikuY29uY2F0KG0pO1xuICAgICAgICAgICAgICBjb3B5W21dID0gdGhpcy50cmFuc2xhdGUoZGVlcEtleSwgX29iamVjdFNwcmVhZCQ0KF9vYmplY3RTcHJlYWQkNCh7fSwgb3B0aW9ucyksIHtcbiAgICAgICAgICAgICAgICBqb2luQXJyYXlzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBuczogbmFtZXNwYWNlc1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIGlmIChjb3B5W21dID09PSBkZWVwS2V5KSBjb3B5W21dID0gcmVzW21dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXMgPSBjb3B5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGhhbmRsZUFzT2JqZWN0SW5JMThuRm9ybWF0ICYmIHR5cGVvZiBqb2luQXJyYXlzID09PSAnc3RyaW5nJyAmJiByZXNUeXBlID09PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICAgIHJlcyA9IHJlcy5qb2luKGpvaW5BcnJheXMpO1xuICAgICAgICBpZiAocmVzKSByZXMgPSB0aGlzLmV4dGVuZFRyYW5zbGF0aW9uKHJlcywga2V5cywgb3B0aW9ucywgbGFzdEtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdXNlZERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgdmFyIHVzZWRLZXkgPSBmYWxzZTtcbiAgICAgICAgdmFyIG5lZWRzUGx1cmFsSGFuZGxpbmcgPSBvcHRpb25zLmNvdW50ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuY291bnQgIT09ICdzdHJpbmcnO1xuICAgICAgICB2YXIgaGFzRGVmYXVsdFZhbHVlID0gVHJhbnNsYXRvci5oYXNEZWZhdWx0VmFsdWUob3B0aW9ucyk7XG4gICAgICAgIHZhciBkZWZhdWx0VmFsdWVTdWZmaXggPSBuZWVkc1BsdXJhbEhhbmRsaW5nID8gdGhpcy5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgobG5nLCBvcHRpb25zLmNvdW50LCBvcHRpb25zKSA6ICcnO1xuICAgICAgICB2YXIgZGVmYXVsdFZhbHVlID0gb3B0aW9uc1tcImRlZmF1bHRWYWx1ZVwiLmNvbmNhdChkZWZhdWx0VmFsdWVTdWZmaXgpXSB8fCBvcHRpb25zLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRMb29rdXAocmVzKSAmJiBoYXNEZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICB1c2VkRGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgcmVzID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkTG9va3VwKHJlcykpIHtcbiAgICAgICAgICB1c2VkS2V5ID0gdHJ1ZTtcbiAgICAgICAgICByZXMgPSBrZXk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1pc3NpbmdLZXlOb1ZhbHVlRmFsbGJhY2tUb0tleSA9IG9wdGlvbnMubWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5IHx8IHRoaXMub3B0aW9ucy5taXNzaW5nS2V5Tm9WYWx1ZUZhbGxiYWNrVG9LZXk7XG4gICAgICAgIHZhciByZXNGb3JNaXNzaW5nID0gbWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5ICYmIHVzZWRLZXkgPyB1bmRlZmluZWQgOiByZXM7XG4gICAgICAgIHZhciB1cGRhdGVNaXNzaW5nID0gaGFzRGVmYXVsdFZhbHVlICYmIGRlZmF1bHRWYWx1ZSAhPT0gcmVzICYmIHRoaXMub3B0aW9ucy51cGRhdGVNaXNzaW5nO1xuICAgICAgICBpZiAodXNlZEtleSB8fCB1c2VkRGVmYXVsdCB8fCB1cGRhdGVNaXNzaW5nKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIubG9nKHVwZGF0ZU1pc3NpbmcgPyAndXBkYXRlS2V5JyA6ICdtaXNzaW5nS2V5JywgbG5nLCBuYW1lc3BhY2UsIGtleSwgdXBkYXRlTWlzc2luZyA/IGRlZmF1bHRWYWx1ZSA6IHJlcyk7XG4gICAgICAgICAgaWYgKGtleVNlcGFyYXRvcikge1xuICAgICAgICAgICAgdmFyIGZrID0gdGhpcy5yZXNvbHZlKGtleSwgX29iamVjdFNwcmVhZCQ0KF9vYmplY3RTcHJlYWQkNCh7fSwgb3B0aW9ucyksIHt9LCB7XG4gICAgICAgICAgICAgIGtleVNlcGFyYXRvcjogZmFsc2VcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlmIChmayAmJiBmay5yZXMpIHRoaXMubG9nZ2VyLndhcm4oJ1NlZW1zIHRoZSBsb2FkZWQgdHJhbnNsYXRpb25zIHdlcmUgaW4gZmxhdCBKU09OIGZvcm1hdCBpbnN0ZWFkIG9mIG5lc3RlZC4gRWl0aGVyIHNldCBrZXlTZXBhcmF0b3I6IGZhbHNlIG9uIGluaXQgb3IgbWFrZSBzdXJlIHlvdXIgdHJhbnNsYXRpb25zIGFyZSBwdWJsaXNoZWQgaW4gbmVzdGVkIGZvcm1hdC4nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGxuZ3MgPSBbXTtcbiAgICAgICAgICB2YXIgZmFsbGJhY2tMbmdzID0gdGhpcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nLCBvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlKTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nVG8gPT09ICdmYWxsYmFjaycgJiYgZmFsbGJhY2tMbmdzICYmIGZhbGxiYWNrTG5nc1swXSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWxsYmFja0xuZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgbG5ncy5wdXNoKGZhbGxiYWNrTG5nc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdUbyA9PT0gJ2FsbCcpIHtcbiAgICAgICAgICAgIGxuZ3MgPSB0aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KG9wdGlvbnMubG5nIHx8IHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsbmdzLnB1c2gob3B0aW9ucy5sbmcgfHwgdGhpcy5sYW5ndWFnZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBzZW5kID0gZnVuY3Rpb24gc2VuZChsLCBrLCBzcGVjaWZpY0RlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIGRlZmF1bHRGb3JNaXNzaW5nID0gaGFzRGVmYXVsdFZhbHVlICYmIHNwZWNpZmljRGVmYXVsdFZhbHVlICE9PSByZXMgPyBzcGVjaWZpY0RlZmF1bHRWYWx1ZSA6IHJlc0Zvck1pc3Npbmc7XG4gICAgICAgICAgICBpZiAoX3RoaXMyLm9wdGlvbnMubWlzc2luZ0tleUhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgX3RoaXMyLm9wdGlvbnMubWlzc2luZ0tleUhhbmRsZXIobCwgbmFtZXNwYWNlLCBrLCBkZWZhdWx0Rm9yTWlzc2luZywgdXBkYXRlTWlzc2luZywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF90aGlzMi5iYWNrZW5kQ29ubmVjdG9yICYmIF90aGlzMi5iYWNrZW5kQ29ubmVjdG9yLnNhdmVNaXNzaW5nKSB7XG4gICAgICAgICAgICAgIF90aGlzMi5iYWNrZW5kQ29ubmVjdG9yLnNhdmVNaXNzaW5nKGwsIG5hbWVzcGFjZSwgaywgZGVmYXVsdEZvck1pc3NpbmcsIHVwZGF0ZU1pc3NpbmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMyLmVtaXQoJ21pc3NpbmdLZXknLCBsLCBuYW1lc3BhY2UsIGssIHJlcyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nUGx1cmFscyAmJiBuZWVkc1BsdXJhbEhhbmRsaW5nKSB7XG4gICAgICAgICAgICAgIGxuZ3MuZm9yRWFjaChmdW5jdGlvbiAobGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgICAgICBfdGhpczIucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4ZXMobGFuZ3VhZ2UsIG9wdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKHN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgc2VuZChbbGFuZ3VhZ2VdLCBrZXkgKyBzdWZmaXgsIG9wdGlvbnNbXCJkZWZhdWx0VmFsdWVcIi5jb25jYXQoc3VmZml4KV0gfHwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZW5kKGxuZ3MsIGtleSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gdGhpcy5leHRlbmRUcmFuc2xhdGlvbihyZXMsIGtleXMsIG9wdGlvbnMsIHJlc29sdmVkLCBsYXN0S2V5KTtcbiAgICAgICAgaWYgKHVzZWRLZXkgJiYgcmVzID09PSBrZXkgJiYgdGhpcy5vcHRpb25zLmFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleSkgcmVzID0gXCJcIi5jb25jYXQobmFtZXNwYWNlLCBcIjpcIikuY29uY2F0KGtleSk7XG4gICAgICAgIGlmICgodXNlZEtleSB8fCB1c2VkRGVmYXVsdCkgJiYgdGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkgIT09ICd2MScpIHtcbiAgICAgICAgICAgIHJlcyA9IHRoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyKHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb01pc3NpbmdLZXkgPyBcIlwiLmNvbmNhdChuYW1lc3BhY2UsIFwiOlwiKS5jb25jYXQoa2V5KSA6IGtleSwgdXNlZERlZmF1bHQgPyByZXMgOiB1bmRlZmluZWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSB0aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcihyZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJldHVybkRldGFpbHMpIHtcbiAgICAgICAgcmVzb2x2ZWQucmVzID0gcmVzO1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJleHRlbmRUcmFuc2xhdGlvblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBleHRlbmRUcmFuc2xhdGlvbihyZXMsIGtleSwgb3B0aW9ucywgcmVzb2x2ZWQsIGxhc3RLZXkpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgaWYgKHRoaXMuaTE4bkZvcm1hdCAmJiB0aGlzLmkxOG5Gb3JtYXQucGFyc2UpIHtcbiAgICAgICAgcmVzID0gdGhpcy5pMThuRm9ybWF0LnBhcnNlKHJlcywgX29iamVjdFNwcmVhZCQ0KF9vYmplY3RTcHJlYWQkNCh7fSwgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcyksIG9wdGlvbnMpLCByZXNvbHZlZC51c2VkTG5nLCByZXNvbHZlZC51c2VkTlMsIHJlc29sdmVkLnVzZWRLZXksIHtcbiAgICAgICAgICByZXNvbHZlZDogcmVzb2x2ZWRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnNraXBJbnRlcnBvbGF0aW9uKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmludGVycG9sYXRpb24pIHRoaXMuaW50ZXJwb2xhdG9yLmluaXQoX29iamVjdFNwcmVhZCQ0KF9vYmplY3RTcHJlYWQkNCh7fSwgb3B0aW9ucyksIHtcbiAgICAgICAgICBpbnRlcnBvbGF0aW9uOiBfb2JqZWN0U3ByZWFkJDQoX29iamVjdFNwcmVhZCQ0KHt9LCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiksIG9wdGlvbnMuaW50ZXJwb2xhdGlvbilcbiAgICAgICAgfSkpO1xuICAgICAgICB2YXIgc2tpcE9uVmFyaWFibGVzID0gdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgJiYgKG9wdGlvbnMgJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uICYmIG9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMgOiB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMpO1xuICAgICAgICB2YXIgbmVzdEJlZjtcbiAgICAgICAgaWYgKHNraXBPblZhcmlhYmxlcykge1xuICAgICAgICAgIHZhciBuYiA9IHJlcy5tYXRjaCh0aGlzLmludGVycG9sYXRvci5uZXN0aW5nUmVnZXhwKTtcbiAgICAgICAgICBuZXN0QmVmID0gbmIgJiYgbmIubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXRhID0gb3B0aW9ucy5yZXBsYWNlICYmIHR5cGVvZiBvcHRpb25zLnJlcGxhY2UgIT09ICdzdHJpbmcnID8gb3B0aW9ucy5yZXBsYWNlIDogb3B0aW9ucztcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmRlZmF1bHRWYXJpYWJsZXMpIGRhdGEgPSBfb2JqZWN0U3ByZWFkJDQoX29iamVjdFNwcmVhZCQ0KHt9LCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzKSwgZGF0YSk7XG4gICAgICAgIHJlcyA9IHRoaXMuaW50ZXJwb2xhdG9yLmludGVycG9sYXRlKHJlcywgZGF0YSwgb3B0aW9ucy5sbmcgfHwgdGhpcy5sYW5ndWFnZSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChza2lwT25WYXJpYWJsZXMpIHtcbiAgICAgICAgICB2YXIgbmEgPSByZXMubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7XG4gICAgICAgICAgdmFyIG5lc3RBZnQgPSBuYSAmJiBuYS5sZW5ndGg7XG4gICAgICAgICAgaWYgKG5lc3RCZWYgPCBuZXN0QWZ0KSBvcHRpb25zLm5lc3QgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5uZXN0ICE9PSBmYWxzZSkgcmVzID0gdGhpcy5pbnRlcnBvbGF0b3IubmVzdChyZXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsYXN0S2V5ICYmIGxhc3RLZXlbMF0gPT09IGFyZ3NbMF0gJiYgIW9wdGlvbnMuY29udGV4dCkge1xuICAgICAgICAgICAgX3RoaXMzLmxvZ2dlci53YXJuKFwiSXQgc2VlbXMgeW91IGFyZSBuZXN0aW5nIHJlY3Vyc2l2ZWx5IGtleTogXCIuY29uY2F0KGFyZ3NbMF0sIFwiIGluIGtleTogXCIpLmNvbmNhdChrZXlbMF0pKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gX3RoaXMzLnRyYW5zbGF0ZS5hcHBseShfdGhpczMsIGFyZ3MuY29uY2F0KFtrZXldKSk7XG4gICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgICBpZiAob3B0aW9ucy5pbnRlcnBvbGF0aW9uKSB0aGlzLmludGVycG9sYXRvci5yZXNldCgpO1xuICAgICAgfVxuICAgICAgdmFyIHBvc3RQcm9jZXNzID0gb3B0aW9ucy5wb3N0UHJvY2VzcyB8fCB0aGlzLm9wdGlvbnMucG9zdFByb2Nlc3M7XG4gICAgICB2YXIgcG9zdFByb2Nlc3Nvck5hbWVzID0gdHlwZW9mIHBvc3RQcm9jZXNzID09PSAnc3RyaW5nJyA/IFtwb3N0UHJvY2Vzc10gOiBwb3N0UHJvY2VzcztcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCAmJiByZXMgIT09IG51bGwgJiYgcG9zdFByb2Nlc3Nvck5hbWVzICYmIHBvc3RQcm9jZXNzb3JOYW1lcy5sZW5ndGggJiYgb3B0aW9ucy5hcHBseVBvc3RQcm9jZXNzb3IgIT09IGZhbHNlKSB7XG4gICAgICAgIHJlcyA9IHBvc3RQcm9jZXNzb3IuaGFuZGxlKHBvc3RQcm9jZXNzb3JOYW1lcywgcmVzLCBrZXksIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucG9zdFByb2Nlc3NQYXNzUmVzb2x2ZWQgPyBfb2JqZWN0U3ByZWFkJDQoe1xuICAgICAgICAgIGkxOG5SZXNvbHZlZDogcmVzb2x2ZWRcbiAgICAgICAgfSwgb3B0aW9ucykgOiBvcHRpb25zLCB0aGlzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlc29sdmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzb2x2ZShrZXlzKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHZhciBmb3VuZDtcbiAgICAgIHZhciB1c2VkS2V5O1xuICAgICAgdmFyIGV4YWN0VXNlZEtleTtcbiAgICAgIHZhciB1c2VkTG5nO1xuICAgICAgdmFyIHVzZWROUztcbiAgICAgIGlmICh0eXBlb2Yga2V5cyA9PT0gJ3N0cmluZycpIGtleXMgPSBba2V5c107XG4gICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgaWYgKF90aGlzNC5pc1ZhbGlkTG9va3VwKGZvdW5kKSkgcmV0dXJuO1xuICAgICAgICB2YXIgZXh0cmFjdGVkID0gX3RoaXM0LmV4dHJhY3RGcm9tS2V5KGssIG9wdGlvbnMpO1xuICAgICAgICB2YXIga2V5ID0gZXh0cmFjdGVkLmtleTtcbiAgICAgICAgdXNlZEtleSA9IGtleTtcbiAgICAgICAgdmFyIG5hbWVzcGFjZXMgPSBleHRyYWN0ZWQubmFtZXNwYWNlcztcbiAgICAgICAgaWYgKF90aGlzNC5vcHRpb25zLmZhbGxiYWNrTlMpIG5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzLmNvbmNhdChfdGhpczQub3B0aW9ucy5mYWxsYmFja05TKTtcbiAgICAgICAgdmFyIG5lZWRzUGx1cmFsSGFuZGxpbmcgPSBvcHRpb25zLmNvdW50ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbnMuY291bnQgIT09ICdzdHJpbmcnO1xuICAgICAgICB2YXIgbmVlZHNaZXJvU3VmZml4TG9va3VwID0gbmVlZHNQbHVyYWxIYW5kbGluZyAmJiAhb3B0aW9ucy5vcmRpbmFsICYmIG9wdGlvbnMuY291bnQgPT09IDAgJiYgX3RoaXM0LnBsdXJhbFJlc29sdmVyLnNob3VsZFVzZUludGxBcGkoKTtcbiAgICAgICAgdmFyIG5lZWRzQ29udGV4dEhhbmRsaW5nID0gb3B0aW9ucy5jb250ZXh0ICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBvcHRpb25zLmNvbnRleHQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvcHRpb25zLmNvbnRleHQgPT09ICdudW1iZXInKSAmJiBvcHRpb25zLmNvbnRleHQgIT09ICcnO1xuICAgICAgICB2YXIgY29kZXMgPSBvcHRpb25zLmxuZ3MgPyBvcHRpb25zLmxuZ3MgOiBfdGhpczQubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkob3B0aW9ucy5sbmcgfHwgX3RoaXM0Lmxhbmd1YWdlLCBvcHRpb25zLmZhbGxiYWNrTG5nKTtcbiAgICAgICAgbmFtZXNwYWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChucykge1xuICAgICAgICAgIGlmIChfdGhpczQuaXNWYWxpZExvb2t1cChmb3VuZCkpIHJldHVybjtcbiAgICAgICAgICB1c2VkTlMgPSBucztcbiAgICAgICAgICBpZiAoIWNoZWNrZWRMb2FkZWRGb3JbXCJcIi5jb25jYXQoY29kZXNbMF0sIFwiLVwiKS5jb25jYXQobnMpXSAmJiBfdGhpczQudXRpbHMgJiYgX3RoaXM0LnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSAmJiAhX3RoaXM0LnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSh1c2VkTlMpKSB7XG4gICAgICAgICAgICBjaGVja2VkTG9hZGVkRm9yW1wiXCIuY29uY2F0KGNvZGVzWzBdLCBcIi1cIikuY29uY2F0KG5zKV0gPSB0cnVlO1xuICAgICAgICAgICAgX3RoaXM0LmxvZ2dlci53YXJuKFwia2V5IFxcXCJcIi5jb25jYXQodXNlZEtleSwgXCJcXFwiIGZvciBsYW5ndWFnZXMgXFxcIlwiKS5jb25jYXQoY29kZXMuam9pbignLCAnKSwgXCJcXFwiIHdvbid0IGdldCByZXNvbHZlZCBhcyBuYW1lc3BhY2UgXFxcIlwiKS5jb25jYXQodXNlZE5TLCBcIlxcXCIgd2FzIG5vdCB5ZXQgbG9hZGVkXCIpLCAnVGhpcyBtZWFucyBzb21ldGhpbmcgSVMgV1JPTkcgaW4geW91ciBzZXR1cC4gWW91IGFjY2VzcyB0aGUgdCBmdW5jdGlvbiBiZWZvcmUgaTE4bmV4dC5pbml0IC8gaTE4bmV4dC5sb2FkTmFtZXNwYWNlIC8gaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSB3YXMgZG9uZS4gV2FpdCBmb3IgdGhlIGNhbGxiYWNrIG9yIFByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgYWNjZXNzaW5nIGl0ISEhJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvZGVzLmZvckVhY2goZnVuY3Rpb24gKGNvZGUpIHtcbiAgICAgICAgICAgIGlmIChfdGhpczQuaXNWYWxpZExvb2t1cChmb3VuZCkpIHJldHVybjtcbiAgICAgICAgICAgIHVzZWRMbmcgPSBjb2RlO1xuICAgICAgICAgICAgdmFyIGZpbmFsS2V5cyA9IFtrZXldO1xuICAgICAgICAgICAgaWYgKF90aGlzNC5pMThuRm9ybWF0ICYmIF90aGlzNC5pMThuRm9ybWF0LmFkZExvb2t1cEtleXMpIHtcbiAgICAgICAgICAgICAgX3RoaXM0LmkxOG5Gb3JtYXQuYWRkTG9va3VwS2V5cyhmaW5hbEtleXMsIGtleSwgY29kZSwgbnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIHBsdXJhbFN1ZmZpeDtcbiAgICAgICAgICAgICAgaWYgKG5lZWRzUGx1cmFsSGFuZGxpbmcpIHBsdXJhbFN1ZmZpeCA9IF90aGlzNC5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXgoY29kZSwgb3B0aW9ucy5jb3VudCwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIHZhciB6ZXJvU3VmZml4ID0gXCJcIi5jb25jYXQoX3RoaXM0Lm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yLCBcInplcm9cIik7XG4gICAgICAgICAgICAgIGlmIChuZWVkc1BsdXJhbEhhbmRsaW5nKSB7XG4gICAgICAgICAgICAgICAgZmluYWxLZXlzLnB1c2goa2V5ICsgcGx1cmFsU3VmZml4KTtcbiAgICAgICAgICAgICAgICBpZiAobmVlZHNaZXJvU3VmZml4TG9va3VwKSB7XG4gICAgICAgICAgICAgICAgICBmaW5hbEtleXMucHVzaChrZXkgKyB6ZXJvU3VmZml4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKG5lZWRzQ29udGV4dEhhbmRsaW5nKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRleHRLZXkgPSBcIlwiLmNvbmNhdChrZXkpLmNvbmNhdChfdGhpczQub3B0aW9ucy5jb250ZXh0U2VwYXJhdG9yKS5jb25jYXQob3B0aW9ucy5jb250ZXh0KTtcbiAgICAgICAgICAgICAgICBmaW5hbEtleXMucHVzaChjb250ZXh0S2V5KTtcbiAgICAgICAgICAgICAgICBpZiAobmVlZHNQbHVyYWxIYW5kbGluZykge1xuICAgICAgICAgICAgICAgICAgZmluYWxLZXlzLnB1c2goY29udGV4dEtleSArIHBsdXJhbFN1ZmZpeCk7XG4gICAgICAgICAgICAgICAgICBpZiAobmVlZHNaZXJvU3VmZml4TG9va3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsS2V5cy5wdXNoKGNvbnRleHRLZXkgKyB6ZXJvU3VmZml4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwb3NzaWJsZUtleTtcbiAgICAgICAgICAgIHdoaWxlIChwb3NzaWJsZUtleSA9IGZpbmFsS2V5cy5wb3AoKSkge1xuICAgICAgICAgICAgICBpZiAoIV90aGlzNC5pc1ZhbGlkTG9va3VwKGZvdW5kKSkge1xuICAgICAgICAgICAgICAgIGV4YWN0VXNlZEtleSA9IHBvc3NpYmxlS2V5O1xuICAgICAgICAgICAgICAgIGZvdW5kID0gX3RoaXM0LmdldFJlc291cmNlKGNvZGUsIG5zLCBwb3NzaWJsZUtleSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlczogZm91bmQsXG4gICAgICAgIHVzZWRLZXk6IHVzZWRLZXksXG4gICAgICAgIGV4YWN0VXNlZEtleTogZXhhY3RVc2VkS2V5LFxuICAgICAgICB1c2VkTG5nOiB1c2VkTG5nLFxuICAgICAgICB1c2VkTlM6IHVzZWROU1xuICAgICAgfTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaXNWYWxpZExvb2t1cFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkTG9va3VwKHJlcykge1xuICAgICAgcmV0dXJuIHJlcyAhPT0gdW5kZWZpbmVkICYmICEoIXRoaXMub3B0aW9ucy5yZXR1cm5OdWxsICYmIHJlcyA9PT0gbnVsbCkgJiYgISghdGhpcy5vcHRpb25zLnJldHVybkVtcHR5U3RyaW5nICYmIHJlcyA9PT0gJycpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZXNvdXJjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZXNvdXJjZShjb2RlLCBucywga2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG4gICAgICBpZiAodGhpcy5pMThuRm9ybWF0ICYmIHRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZSkgcmV0dXJuIHRoaXMuaTE4bkZvcm1hdC5nZXRSZXNvdXJjZShjb2RlLCBucywga2V5LCBvcHRpb25zKTtcbiAgICAgIHJldHVybiB0aGlzLnJlc291cmNlU3RvcmUuZ2V0UmVzb3VyY2UoY29kZSwgbnMsIGtleSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XSwgW3tcbiAgICBrZXk6IFwiaGFzRGVmYXVsdFZhbHVlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc0RlZmF1bHRWYWx1ZShvcHRpb25zKSB7XG4gICAgICB2YXIgcHJlZml4ID0gJ2RlZmF1bHRWYWx1ZSc7XG4gICAgICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsIG9wdGlvbikgJiYgcHJlZml4ID09PSBvcHRpb24uc3Vic3RyaW5nKDAsIHByZWZpeC5sZW5ndGgpICYmIHVuZGVmaW5lZCAhPT0gb3B0aW9uc1tvcHRpb25dKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIFRyYW5zbGF0b3I7XG59KEV2ZW50RW1pdHRlcik7XG5cbmZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59XG52YXIgTGFuZ3VhZ2VVdGlsID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBMYW5ndWFnZVV0aWwob3B0aW9ucykge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMYW5ndWFnZVV0aWwpO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5zdXBwb3J0ZWRMbmdzID0gdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MgfHwgZmFsc2U7XG4gICAgdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyLmNyZWF0ZSgnbGFuZ3VhZ2VVdGlscycpO1xuICB9XG4gIF9jcmVhdGVDbGFzcyhMYW5ndWFnZVV0aWwsIFt7XG4gICAga2V5OiBcImdldFNjcmlwdFBhcnRGcm9tQ29kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTY3JpcHRQYXJ0RnJvbUNvZGUoY29kZSkge1xuICAgICAgaWYgKCFjb2RlIHx8IGNvZGUuaW5kZXhPZignLScpIDwgMCkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgcCA9IGNvZGUuc3BsaXQoJy0nKTtcbiAgICAgIGlmIChwLmxlbmd0aCA9PT0gMikgcmV0dXJuIG51bGw7XG4gICAgICBwLnBvcCgpO1xuICAgICAgaWYgKHBbcC5sZW5ndGggLSAxXS50b0xvd2VyQ2FzZSgpID09PSAneCcpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKHAuam9pbignLScpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoY29kZSkge1xuICAgICAgaWYgKCFjb2RlIHx8IGNvZGUuaW5kZXhPZignLScpIDwgMCkgcmV0dXJuIGNvZGU7XG4gICAgICB2YXIgcCA9IGNvZGUuc3BsaXQoJy0nKTtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShwWzBdKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0TGFuZ3VhZ2VDb2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvcm1hdExhbmd1YWdlQ29kZShjb2RlKSB7XG4gICAgICBpZiAodHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIGNvZGUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgICAgdmFyIHNwZWNpYWxDYXNlcyA9IFsnaGFucycsICdoYW50JywgJ2xhdG4nLCAnY3lybCcsICdjYW5zJywgJ21vbmcnLCAnYXJhYiddO1xuICAgICAgICB2YXIgcCA9IGNvZGUuc3BsaXQoJy0nKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmcpIHtcbiAgICAgICAgICBwID0gcC5tYXAoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBwWzBdID0gcFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHBbMV0gPSBwWzFdLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKHNwZWNpYWxDYXNlcy5pbmRleE9mKHBbMV0udG9Mb3dlckNhc2UoKSkgPiAtMSkgcFsxXSA9IGNhcGl0YWxpemUocFsxXS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChwLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgIHBbMF0gPSBwWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKHBbMV0ubGVuZ3RoID09PSAyKSBwWzFdID0gcFsxXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGlmIChwWzBdICE9PSAnc2duJyAmJiBwWzJdLmxlbmd0aCA9PT0gMikgcFsyXSA9IHBbMl0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICBpZiAoc3BlY2lhbENhc2VzLmluZGV4T2YocFsxXS50b0xvd2VyQ2FzZSgpKSA+IC0xKSBwWzFdID0gY2FwaXRhbGl6ZShwWzFdLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIGlmIChzcGVjaWFsQ2FzZXMuaW5kZXhPZihwWzJdLnRvTG93ZXJDYXNlKCkpID4gLTEpIHBbMl0gPSBjYXBpdGFsaXplKHBbMl0udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHAuam9pbignLScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jbGVhbkNvZGUgfHwgdGhpcy5vcHRpb25zLmxvd2VyQ2FzZUxuZyA/IGNvZGUudG9Mb3dlckNhc2UoKSA6IGNvZGU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzU3VwcG9ydGVkQ29kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1N1cHBvcnRlZENvZGUoY29kZSkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2FkID09PSAnbGFuZ3VhZ2VPbmx5JyB8fCB0aGlzLm9wdGlvbnMubm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzKSB7XG4gICAgICAgIGNvZGUgPSB0aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGNvZGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICF0aGlzLnN1cHBvcnRlZExuZ3MgfHwgIXRoaXMuc3VwcG9ydGVkTG5ncy5sZW5ndGggfHwgdGhpcy5zdXBwb3J0ZWRMbmdzLmluZGV4T2YoY29kZSkgPiAtMTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0QmVzdE1hdGNoRnJvbUNvZGVzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEJlc3RNYXRjaEZyb21Db2Rlcyhjb2Rlcykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIGlmICghY29kZXMpIHJldHVybiBudWxsO1xuICAgICAgdmFyIGZvdW5kO1xuICAgICAgY29kZXMuZm9yRWFjaChmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICBpZiAoZm91bmQpIHJldHVybjtcbiAgICAgICAgdmFyIGNsZWFuZWRMbmcgPSBfdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoY29kZSk7XG4gICAgICAgIGlmICghX3RoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzIHx8IF90aGlzLmlzU3VwcG9ydGVkQ29kZShjbGVhbmVkTG5nKSkgZm91bmQgPSBjbGVhbmVkTG5nO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWZvdW5kICYmIHRoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzKSB7XG4gICAgICAgIGNvZGVzLmZvckVhY2goZnVuY3Rpb24gKGNvZGUpIHtcbiAgICAgICAgICBpZiAoZm91bmQpIHJldHVybjtcbiAgICAgICAgICB2YXIgbG5nT25seSA9IF90aGlzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGNvZGUpO1xuICAgICAgICAgIGlmIChfdGhpcy5pc1N1cHBvcnRlZENvZGUobG5nT25seSkpIHJldHVybiBmb3VuZCA9IGxuZ09ubHk7XG4gICAgICAgICAgZm91bmQgPSBfdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MuZmluZChmdW5jdGlvbiAoc3VwcG9ydGVkTG5nKSB7XG4gICAgICAgICAgICBpZiAoc3VwcG9ydGVkTG5nID09PSBsbmdPbmx5KSByZXR1cm4gc3VwcG9ydGVkTG5nO1xuICAgICAgICAgICAgaWYgKHN1cHBvcnRlZExuZy5pbmRleE9mKCctJykgPCAwICYmIGxuZ09ubHkuaW5kZXhPZignLScpIDwgMCkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHN1cHBvcnRlZExuZy5pbmRleE9mKGxuZ09ubHkpID09PSAwKSByZXR1cm4gc3VwcG9ydGVkTG5nO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghZm91bmQpIGZvdW5kID0gdGhpcy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZylbMF07XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldEZhbGxiYWNrQ29kZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RmFsbGJhY2tDb2RlcyhmYWxsYmFja3MsIGNvZGUpIHtcbiAgICAgIGlmICghZmFsbGJhY2tzKSByZXR1cm4gW107XG4gICAgICBpZiAodHlwZW9mIGZhbGxiYWNrcyA9PT0gJ2Z1bmN0aW9uJykgZmFsbGJhY2tzID0gZmFsbGJhY2tzKGNvZGUpO1xuICAgICAgaWYgKHR5cGVvZiBmYWxsYmFja3MgPT09ICdzdHJpbmcnKSBmYWxsYmFja3MgPSBbZmFsbGJhY2tzXTtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KGZhbGxiYWNrcykgPT09ICdbb2JqZWN0IEFycmF5XScpIHJldHVybiBmYWxsYmFja3M7XG4gICAgICBpZiAoIWNvZGUpIHJldHVybiBmYWxsYmFja3NbXCJkZWZhdWx0XCJdIHx8IFtdO1xuICAgICAgdmFyIGZvdW5kID0gZmFsbGJhY2tzW2NvZGVdO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbdGhpcy5nZXRTY3JpcHRQYXJ0RnJvbUNvZGUoY29kZSldO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoY29kZSldO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbdGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKV07XG4gICAgICBpZiAoIWZvdW5kKSBmb3VuZCA9IGZhbGxiYWNrc1tcImRlZmF1bHRcIl07XG4gICAgICByZXR1cm4gZm91bmQgfHwgW107XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvUmVzb2x2ZUhpZXJhcmNoeVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b1Jlc29sdmVIaWVyYXJjaHkoY29kZSwgZmFsbGJhY2tDb2RlKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBmYWxsYmFja0NvZGVzID0gdGhpcy5nZXRGYWxsYmFja0NvZGVzKGZhbGxiYWNrQ29kZSB8fCB0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcgfHwgW10sIGNvZGUpO1xuICAgICAgdmFyIGNvZGVzID0gW107XG4gICAgICB2YXIgYWRkQ29kZSA9IGZ1bmN0aW9uIGFkZENvZGUoYykge1xuICAgICAgICBpZiAoIWMpIHJldHVybjtcbiAgICAgICAgaWYgKF90aGlzMi5pc1N1cHBvcnRlZENvZGUoYykpIHtcbiAgICAgICAgICBjb2Rlcy5wdXNoKGMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzMi5sb2dnZXIud2FybihcInJlamVjdGluZyBsYW5ndWFnZSBjb2RlIG5vdCBmb3VuZCBpbiBzdXBwb3J0ZWRMbmdzOiBcIi5jb25jYXQoYykpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJyAmJiBjb2RlLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9hZCAhPT0gJ2xhbmd1YWdlT25seScpIGFkZENvZGUodGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoY29kZSkpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvYWQgIT09ICdsYW5ndWFnZU9ubHknICYmIHRoaXMub3B0aW9ucy5sb2FkICE9PSAnY3VycmVudE9ubHknKSBhZGRDb2RlKHRoaXMuZ2V0U2NyaXB0UGFydEZyb21Db2RlKGNvZGUpKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2FkICE9PSAnY3VycmVudE9ubHknKSBhZGRDb2RlKHRoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoY29kZSkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYWRkQ29kZSh0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShjb2RlKSk7XG4gICAgICB9XG4gICAgICBmYWxsYmFja0NvZGVzLmZvckVhY2goZnVuY3Rpb24gKGZjKSB7XG4gICAgICAgIGlmIChjb2Rlcy5pbmRleE9mKGZjKSA8IDApIGFkZENvZGUoX3RoaXMyLmZvcm1hdExhbmd1YWdlQ29kZShmYykpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29kZXM7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBMYW5ndWFnZVV0aWw7XG59KCk7XG5cbnZhciBzZXRzID0gW3tcbiAgbG5nczogWydhY2gnLCAnYWsnLCAnYW0nLCAnYXJuJywgJ2JyJywgJ2ZpbCcsICdndW4nLCAnbG4nLCAnbWZlJywgJ21nJywgJ21pJywgJ29jJywgJ3B0JywgJ3B0LUJSJywgJ3RnJywgJ3RsJywgJ3RpJywgJ3RyJywgJ3V6JywgJ3dhJ10sXG4gIG5yOiBbMSwgMl0sXG4gIGZjOiAxXG59LCB7XG4gIGxuZ3M6IFsnYWYnLCAnYW4nLCAnYXN0JywgJ2F6JywgJ2JnJywgJ2JuJywgJ2NhJywgJ2RhJywgJ2RlJywgJ2RldicsICdlbCcsICdlbicsICdlbycsICdlcycsICdldCcsICdldScsICdmaScsICdmbycsICdmdXInLCAnZnknLCAnZ2wnLCAnZ3UnLCAnaGEnLCAnaGknLCAnaHUnLCAnaHknLCAnaWEnLCAnaXQnLCAna2snLCAna24nLCAna3UnLCAnbGInLCAnbWFpJywgJ21sJywgJ21uJywgJ21yJywgJ25haCcsICduYXAnLCAnbmInLCAnbmUnLCAnbmwnLCAnbm4nLCAnbm8nLCAnbnNvJywgJ3BhJywgJ3BhcCcsICdwbXMnLCAncHMnLCAncHQtUFQnLCAncm0nLCAnc2NvJywgJ3NlJywgJ3NpJywgJ3NvJywgJ3NvbicsICdzcScsICdzdicsICdzdycsICd0YScsICd0ZScsICd0aycsICd1cicsICd5byddLFxuICBucjogWzEsIDJdLFxuICBmYzogMlxufSwge1xuICBsbmdzOiBbJ2F5JywgJ2JvJywgJ2NnZycsICdmYScsICdodCcsICdpZCcsICdqYScsICdqYm8nLCAna2EnLCAna20nLCAna28nLCAna3knLCAnbG8nLCAnbXMnLCAnc2FoJywgJ3N1JywgJ3RoJywgJ3R0JywgJ3VnJywgJ3ZpJywgJ3dvJywgJ3poJ10sXG4gIG5yOiBbMV0sXG4gIGZjOiAzXG59LCB7XG4gIGxuZ3M6IFsnYmUnLCAnYnMnLCAnY25yJywgJ2R6JywgJ2hyJywgJ3J1JywgJ3NyJywgJ3VrJ10sXG4gIG5yOiBbMSwgMiwgNV0sXG4gIGZjOiA0XG59LCB7XG4gIGxuZ3M6IFsnYXInXSxcbiAgbnI6IFswLCAxLCAyLCAzLCAxMSwgMTAwXSxcbiAgZmM6IDVcbn0sIHtcbiAgbG5nczogWydjcycsICdzayddLFxuICBucjogWzEsIDIsIDVdLFxuICBmYzogNlxufSwge1xuICBsbmdzOiBbJ2NzYicsICdwbCddLFxuICBucjogWzEsIDIsIDVdLFxuICBmYzogN1xufSwge1xuICBsbmdzOiBbJ2N5J10sXG4gIG5yOiBbMSwgMiwgMywgOF0sXG4gIGZjOiA4XG59LCB7XG4gIGxuZ3M6IFsnZnInXSxcbiAgbnI6IFsxLCAyXSxcbiAgZmM6IDlcbn0sIHtcbiAgbG5nczogWydnYSddLFxuICBucjogWzEsIDIsIDMsIDcsIDExXSxcbiAgZmM6IDEwXG59LCB7XG4gIGxuZ3M6IFsnZ2QnXSxcbiAgbnI6IFsxLCAyLCAzLCAyMF0sXG4gIGZjOiAxMVxufSwge1xuICBsbmdzOiBbJ2lzJ10sXG4gIG5yOiBbMSwgMl0sXG4gIGZjOiAxMlxufSwge1xuICBsbmdzOiBbJ2p2J10sXG4gIG5yOiBbMCwgMV0sXG4gIGZjOiAxM1xufSwge1xuICBsbmdzOiBbJ2t3J10sXG4gIG5yOiBbMSwgMiwgMywgNF0sXG4gIGZjOiAxNFxufSwge1xuICBsbmdzOiBbJ2x0J10sXG4gIG5yOiBbMSwgMiwgMTBdLFxuICBmYzogMTVcbn0sIHtcbiAgbG5nczogWydsdiddLFxuICBucjogWzEsIDIsIDBdLFxuICBmYzogMTZcbn0sIHtcbiAgbG5nczogWydtayddLFxuICBucjogWzEsIDJdLFxuICBmYzogMTdcbn0sIHtcbiAgbG5nczogWydtbmsnXSxcbiAgbnI6IFswLCAxLCAyXSxcbiAgZmM6IDE4XG59LCB7XG4gIGxuZ3M6IFsnbXQnXSxcbiAgbnI6IFsxLCAyLCAxMSwgMjBdLFxuICBmYzogMTlcbn0sIHtcbiAgbG5nczogWydvciddLFxuICBucjogWzIsIDFdLFxuICBmYzogMlxufSwge1xuICBsbmdzOiBbJ3JvJ10sXG4gIG5yOiBbMSwgMiwgMjBdLFxuICBmYzogMjBcbn0sIHtcbiAgbG5nczogWydzbCddLFxuICBucjogWzUsIDEsIDIsIDNdLFxuICBmYzogMjFcbn0sIHtcbiAgbG5nczogWydoZScsICdpdyddLFxuICBucjogWzEsIDIsIDIwLCAyMV0sXG4gIGZjOiAyMlxufV07XG52YXIgX3J1bGVzUGx1cmFsc1R5cGVzID0ge1xuICAxOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPiAxKTtcbiAgfSxcbiAgMjogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICE9IDEpO1xuICB9LFxuICAzOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgNDogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAgPT0gMSAmJiBuICUgMTAwICE9IDExID8gMCA6IG4gJSAxMCA+PSAyICYmIG4gJSAxMCA8PSA0ICYmIChuICUgMTAwIDwgMTAgfHwgbiAlIDEwMCA+PSAyMCkgPyAxIDogMik7XG4gIH0sXG4gIDU6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAwID8gMCA6IG4gPT0gMSA/IDEgOiBuID09IDIgPyAyIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTAgPyAzIDogbiAlIDEwMCA+PSAxMSA/IDQgOiA1KTtcbiAgfSxcbiAgNjogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiA+PSAyICYmIG4gPD0gNCA/IDEgOiAyKTtcbiAgfSxcbiAgNzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiAlIDEwID49IDIgJiYgbiAlIDEwIDw9IDQgJiYgKG4gJSAxMDAgPCAxMCB8fCBuICUgMTAwID49IDIwKSA/IDEgOiAyKTtcbiAgfSxcbiAgODogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiA9PSAyID8gMSA6IG4gIT0gOCAmJiBuICE9IDExID8gMiA6IDMpO1xuICB9LFxuICA5OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPj0gMik7XG4gIH0sXG4gIDEwOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDIgPyAxIDogbiA8IDcgPyAyIDogbiA8IDExID8gMyA6IDQpO1xuICB9LFxuICAxMTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgfHwgbiA9PSAxMSA/IDAgOiBuID09IDIgfHwgbiA9PSAxMiA/IDEgOiBuID4gMiAmJiBuIDwgMjAgPyAyIDogMyk7XG4gIH0sXG4gIDEyOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMCAhPSAxIHx8IG4gJSAxMDAgPT0gMTEpO1xuICB9LFxuICAxMzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICE9PSAwKTtcbiAgfSxcbiAgMTQ6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMiA/IDEgOiBuID09IDMgPyAyIDogMyk7XG4gIH0sXG4gIDE1OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMCA9PSAxICYmIG4gJSAxMDAgIT0gMTEgPyAwIDogbiAlIDEwID49IDIgJiYgKG4gJSAxMDAgPCAxMCB8fCBuICUgMTAwID49IDIwKSA/IDEgOiAyKTtcbiAgfSxcbiAgMTY6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiAlIDEwID09IDEgJiYgbiAlIDEwMCAhPSAxMSA/IDAgOiBuICE9PSAwID8gMSA6IDIpO1xuICB9LFxuICAxNzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgfHwgbiAlIDEwID09IDEgJiYgbiAlIDEwMCAhPSAxMSA/IDAgOiAxKTtcbiAgfSxcbiAgMTg6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAwID8gMCA6IG4gPT0gMSA/IDEgOiAyKTtcbiAgfSxcbiAgMTk6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMCB8fCBuICUgMTAwID4gMSAmJiBuICUgMTAwIDwgMTEgPyAxIDogbiAlIDEwMCA+IDEwICYmIG4gJSAxMDAgPCAyMCA/IDIgOiAzKTtcbiAgfSxcbiAgMjA6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMCB8fCBuICUgMTAwID4gMCAmJiBuICUgMTAwIDwgMjAgPyAxIDogMik7XG4gIH0sXG4gIDIxOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMDAgPT0gMSA/IDEgOiBuICUgMTAwID09IDIgPyAyIDogbiAlIDEwMCA9PSAzIHx8IG4gJSAxMDAgPT0gNCA/IDMgOiAwKTtcbiAgfSxcbiAgMjI6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMiA/IDEgOiAobiA8IDAgfHwgbiA+IDEwKSAmJiBuICUgMTAgPT0gMCA/IDIgOiAzKTtcbiAgfVxufTtcbnZhciBkZXByZWNhdGVkSnNvblZlcnNpb25zID0gWyd2MScsICd2MicsICd2MyddO1xudmFyIHN1ZmZpeGVzT3JkZXIgPSB7XG4gIHplcm86IDAsXG4gIG9uZTogMSxcbiAgdHdvOiAyLFxuICBmZXc6IDMsXG4gIG1hbnk6IDQsXG4gIG90aGVyOiA1XG59O1xuZnVuY3Rpb24gY3JlYXRlUnVsZXMoKSB7XG4gIHZhciBydWxlcyA9IHt9O1xuICBzZXRzLmZvckVhY2goZnVuY3Rpb24gKHNldCkge1xuICAgIHNldC5sbmdzLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgIHJ1bGVzW2xdID0ge1xuICAgICAgICBudW1iZXJzOiBzZXQubnIsXG4gICAgICAgIHBsdXJhbHM6IF9ydWxlc1BsdXJhbHNUeXBlc1tzZXQuZmNdXG4gICAgICB9O1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHJ1bGVzO1xufVxudmFyIFBsdXJhbFJlc29sdmVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBQbHVyYWxSZXNvbHZlcihsYW5ndWFnZVV0aWxzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQbHVyYWxSZXNvbHZlcik7XG4gICAgdGhpcy5sYW5ndWFnZVV0aWxzID0gbGFuZ3VhZ2VVdGlscztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ3BsdXJhbFJlc29sdmVyJyk7XG4gICAgaWYgKCghdGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OIHx8IHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiA9PT0gJ3Y0JykgJiYgKHR5cGVvZiBJbnRsID09PSAndW5kZWZpbmVkJyB8fCAhSW50bC5QbHVyYWxSdWxlcykpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiA9ICd2Myc7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcignWW91ciBlbnZpcm9ubWVudCBzZWVtcyBub3QgdG8gYmUgSW50bCBBUEkgY29tcGF0aWJsZSwgdXNlIGFuIEludGwuUGx1cmFsUnVsZXMgcG9seWZpbGwuIFdpbGwgZmFsbGJhY2sgdG8gdGhlIGNvbXBhdGliaWxpdHlKU09OIHYzIGZvcm1hdCBoYW5kbGluZy4nKTtcbiAgICB9XG4gICAgdGhpcy5ydWxlcyA9IGNyZWF0ZVJ1bGVzKCk7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKFBsdXJhbFJlc29sdmVyLCBbe1xuICAgIGtleTogXCJhZGRSdWxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFJ1bGUobG5nLCBvYmopIHtcbiAgICAgIHRoaXMucnVsZXNbbG5nXSA9IG9iajtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UnVsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSdWxlKGNvZGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIGlmICh0aGlzLnNob3VsZFVzZUludGxBcGkoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBuZXcgSW50bC5QbHVyYWxSdWxlcyhjb2RlLCB7XG4gICAgICAgICAgICB0eXBlOiBvcHRpb25zLm9yZGluYWwgPyAnb3JkaW5hbCcgOiAnY2FyZGluYWwnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnJ1bGVzW2NvZGVdIHx8IHRoaXMucnVsZXNbdGhpcy5sYW5ndWFnZVV0aWxzLmdldExhbmd1YWdlUGFydEZyb21Db2RlKGNvZGUpXTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibmVlZHNQbHVyYWxcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbmVlZHNQbHVyYWwoY29kZSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgdmFyIHJ1bGUgPSB0aGlzLmdldFJ1bGUoY29kZSwgb3B0aW9ucyk7XG4gICAgICBpZiAodGhpcy5zaG91bGRVc2VJbnRsQXBpKCkpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUgJiYgcnVsZS5yZXNvbHZlZE9wdGlvbnMoKS5wbHVyYWxDYXRlZ29yaWVzLmxlbmd0aCA+IDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gcnVsZSAmJiBydWxlLm51bWJlcnMubGVuZ3RoID4gMTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UGx1cmFsRm9ybXNPZktleVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQbHVyYWxGb3Jtc09mS2V5KGNvZGUsIGtleSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3VmZml4ZXMoY29kZSwgb3B0aW9ucykubWFwKGZ1bmN0aW9uIChzdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGtleSkuY29uY2F0KHN1ZmZpeCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U3VmZml4ZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3VmZml4ZXMoY29kZSkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHZhciBydWxlID0gdGhpcy5nZXRSdWxlKGNvZGUsIG9wdGlvbnMpO1xuICAgICAgaWYgKCFydWxlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNob3VsZFVzZUludGxBcGkoKSkge1xuICAgICAgICByZXR1cm4gcnVsZS5yZXNvbHZlZE9wdGlvbnMoKS5wbHVyYWxDYXRlZ29yaWVzLnNvcnQoZnVuY3Rpb24gKHBsdXJhbENhdGVnb3J5MSwgcGx1cmFsQ2F0ZWdvcnkyKSB7XG4gICAgICAgICAgcmV0dXJuIHN1ZmZpeGVzT3JkZXJbcGx1cmFsQ2F0ZWdvcnkxXSAtIHN1ZmZpeGVzT3JkZXJbcGx1cmFsQ2F0ZWdvcnkyXTtcbiAgICAgICAgfSkubWFwKGZ1bmN0aW9uIChwbHVyYWxDYXRlZ29yeSkge1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChfdGhpcy5vcHRpb25zLnByZXBlbmQpLmNvbmNhdChwbHVyYWxDYXRlZ29yeSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJ1bGUubnVtYmVycy5tYXAoZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICByZXR1cm4gX3RoaXMuZ2V0U3VmZml4KGNvZGUsIG51bWJlciwgb3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U3VmZml4XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1ZmZpeChjb2RlLCBjb3VudCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgdmFyIHJ1bGUgPSB0aGlzLmdldFJ1bGUoY29kZSwgb3B0aW9ucyk7XG4gICAgICBpZiAocnVsZSkge1xuICAgICAgICBpZiAodGhpcy5zaG91bGRVc2VJbnRsQXBpKCkpIHtcbiAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQodGhpcy5vcHRpb25zLnByZXBlbmQpLmNvbmNhdChydWxlLnNlbGVjdChjb3VudCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN1ZmZpeFJldHJvQ29tcGF0aWJsZShydWxlLCBjb3VudCk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKFwibm8gcGx1cmFsIHJ1bGUgZm91bmQgZm9yOiBcIi5jb25jYXQoY29kZSkpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRTdWZmaXhSZXRyb0NvbXBhdGlibGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U3VmZml4UmV0cm9Db21wYXRpYmxlKHJ1bGUsIGNvdW50KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcbiAgICAgIHZhciBpZHggPSBydWxlLm5vQWJzID8gcnVsZS5wbHVyYWxzKGNvdW50KSA6IHJ1bGUucGx1cmFscyhNYXRoLmFicyhjb3VudCkpO1xuICAgICAgdmFyIHN1ZmZpeCA9IHJ1bGUubnVtYmVyc1tpZHhdO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCAmJiBydWxlLm51bWJlcnMubGVuZ3RoID09PSAyICYmIHJ1bGUubnVtYmVyc1swXSA9PT0gMSkge1xuICAgICAgICBpZiAoc3VmZml4ID09PSAyKSB7XG4gICAgICAgICAgc3VmZml4ID0gJ3BsdXJhbCc7XG4gICAgICAgIH0gZWxzZSBpZiAoc3VmZml4ID09PSAxKSB7XG4gICAgICAgICAgc3VmZml4ID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciByZXR1cm5TdWZmaXggPSBmdW5jdGlvbiByZXR1cm5TdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIub3B0aW9ucy5wcmVwZW5kICYmIHN1ZmZpeC50b1N0cmluZygpID8gX3RoaXMyLm9wdGlvbnMucHJlcGVuZCArIHN1ZmZpeC50b1N0cmluZygpIDogc3VmZml4LnRvU3RyaW5nKCk7XG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiA9PT0gJ3YxJykge1xuICAgICAgICBpZiAoc3VmZml4ID09PSAxKSByZXR1cm4gJyc7XG4gICAgICAgIGlmICh0eXBlb2Ygc3VmZml4ID09PSAnbnVtYmVyJykgcmV0dXJuIFwiX3BsdXJhbF9cIi5jb25jYXQoc3VmZml4LnRvU3RyaW5nKCkpO1xuICAgICAgICByZXR1cm4gcmV0dXJuU3VmZml4KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiA9PT0gJ3YyJykge1xuICAgICAgICByZXR1cm4gcmV0dXJuU3VmZml4KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCAmJiBydWxlLm51bWJlcnMubGVuZ3RoID09PSAyICYmIHJ1bGUubnVtYmVyc1swXSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gcmV0dXJuU3VmZml4KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnByZXBlbmQgJiYgaWR4LnRvU3RyaW5nKCkgPyB0aGlzLm9wdGlvbnMucHJlcGVuZCArIGlkeC50b1N0cmluZygpIDogaWR4LnRvU3RyaW5nKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNob3VsZFVzZUludGxBcGlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkVXNlSW50bEFwaSgpIHtcbiAgICAgIHJldHVybiAhZGVwcmVjYXRlZEpzb25WZXJzaW9ucy5pbmNsdWRlcyh0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04pO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUGx1cmFsUmVzb2x2ZXI7XG59KCk7XG5cbmZ1bmN0aW9uIG93bktleXMkMyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQkMyh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyQzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMkMyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5mdW5jdGlvbiBkZWVwRmluZFdpdGhEZWZhdWx0cyhkYXRhLCBkZWZhdWx0RGF0YSwga2V5KSB7XG4gIHZhciBrZXlTZXBhcmF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6ICcuJztcbiAgdmFyIGlnbm9yZUpTT05TdHJ1Y3R1cmUgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRydWU7XG4gIHZhciBwYXRoID0gZ2V0UGF0aFdpdGhEZWZhdWx0cyhkYXRhLCBkZWZhdWx0RGF0YSwga2V5KTtcbiAgaWYgKCFwYXRoICYmIGlnbm9yZUpTT05TdHJ1Y3R1cmUgJiYgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICBwYXRoID0gZGVlcEZpbmQoZGF0YSwga2V5LCBrZXlTZXBhcmF0b3IpO1xuICAgIGlmIChwYXRoID09PSB1bmRlZmluZWQpIHBhdGggPSBkZWVwRmluZChkZWZhdWx0RGF0YSwga2V5LCBrZXlTZXBhcmF0b3IpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxudmFyIEludGVycG9sYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gSW50ZXJwb2xhdG9yKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSW50ZXJwb2xhdG9yKTtcbiAgICB0aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXIuY3JlYXRlKCdpbnRlcnBvbGF0b3InKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuZm9ybWF0ID0gb3B0aW9ucy5pbnRlcnBvbGF0aW9uICYmIG9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQgfHwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICB0aGlzLmluaXQob3B0aW9ucyk7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKEludGVycG9sYXRvciwgW3tcbiAgICBrZXk6IFwiaW5pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0KCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgaWYgKCFvcHRpb25zLmludGVycG9sYXRpb24pIG9wdGlvbnMuaW50ZXJwb2xhdGlvbiA9IHtcbiAgICAgICAgZXNjYXBlVmFsdWU6IHRydWVcbiAgICAgIH07XG4gICAgICB2YXIgaU9wdHMgPSBvcHRpb25zLmludGVycG9sYXRpb247XG4gICAgICB0aGlzLmVzY2FwZSA9IGlPcHRzLmVzY2FwZSAhPT0gdW5kZWZpbmVkID8gaU9wdHMuZXNjYXBlIDogZXNjYXBlO1xuICAgICAgdGhpcy5lc2NhcGVWYWx1ZSA9IGlPcHRzLmVzY2FwZVZhbHVlICE9PSB1bmRlZmluZWQgPyBpT3B0cy5lc2NhcGVWYWx1ZSA6IHRydWU7XG4gICAgICB0aGlzLnVzZVJhd1ZhbHVlVG9Fc2NhcGUgPSBpT3B0cy51c2VSYXdWYWx1ZVRvRXNjYXBlICE9PSB1bmRlZmluZWQgPyBpT3B0cy51c2VSYXdWYWx1ZVRvRXNjYXBlIDogZmFsc2U7XG4gICAgICB0aGlzLnByZWZpeCA9IGlPcHRzLnByZWZpeCA/IHJlZ2V4RXNjYXBlKGlPcHRzLnByZWZpeCkgOiBpT3B0cy5wcmVmaXhFc2NhcGVkIHx8ICd7eyc7XG4gICAgICB0aGlzLnN1ZmZpeCA9IGlPcHRzLnN1ZmZpeCA/IHJlZ2V4RXNjYXBlKGlPcHRzLnN1ZmZpeCkgOiBpT3B0cy5zdWZmaXhFc2NhcGVkIHx8ICd9fSc7XG4gICAgICB0aGlzLmZvcm1hdFNlcGFyYXRvciA9IGlPcHRzLmZvcm1hdFNlcGFyYXRvciA/IGlPcHRzLmZvcm1hdFNlcGFyYXRvciA6IGlPcHRzLmZvcm1hdFNlcGFyYXRvciB8fCAnLCc7XG4gICAgICB0aGlzLnVuZXNjYXBlUHJlZml4ID0gaU9wdHMudW5lc2NhcGVTdWZmaXggPyAnJyA6IGlPcHRzLnVuZXNjYXBlUHJlZml4IHx8ICctJztcbiAgICAgIHRoaXMudW5lc2NhcGVTdWZmaXggPSB0aGlzLnVuZXNjYXBlUHJlZml4ID8gJycgOiBpT3B0cy51bmVzY2FwZVN1ZmZpeCB8fCAnJztcbiAgICAgIHRoaXMubmVzdGluZ1ByZWZpeCA9IGlPcHRzLm5lc3RpbmdQcmVmaXggPyByZWdleEVzY2FwZShpT3B0cy5uZXN0aW5nUHJlZml4KSA6IGlPcHRzLm5lc3RpbmdQcmVmaXhFc2NhcGVkIHx8IHJlZ2V4RXNjYXBlKCckdCgnKTtcbiAgICAgIHRoaXMubmVzdGluZ1N1ZmZpeCA9IGlPcHRzLm5lc3RpbmdTdWZmaXggPyByZWdleEVzY2FwZShpT3B0cy5uZXN0aW5nU3VmZml4KSA6IGlPcHRzLm5lc3RpbmdTdWZmaXhFc2NhcGVkIHx8IHJlZ2V4RXNjYXBlKCcpJyk7XG4gICAgICB0aGlzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yID0gaU9wdHMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3IgPyBpT3B0cy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvciA6IGlPcHRzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yIHx8ICcsJztcbiAgICAgIHRoaXMubWF4UmVwbGFjZXMgPSBpT3B0cy5tYXhSZXBsYWNlcyA/IGlPcHRzLm1heFJlcGxhY2VzIDogMTAwMDtcbiAgICAgIHRoaXMuYWx3YXlzRm9ybWF0ID0gaU9wdHMuYWx3YXlzRm9ybWF0ICE9PSB1bmRlZmluZWQgPyBpT3B0cy5hbHdheXNGb3JtYXQgOiBmYWxzZTtcbiAgICAgIHRoaXMucmVzZXRSZWdFeHAoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVzZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zKSB0aGlzLmluaXQodGhpcy5vcHRpb25zKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVzZXRSZWdFeHBcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRSZWdFeHAoKSB7XG4gICAgICB2YXIgcmVnZXhwU3RyID0gXCJcIi5jb25jYXQodGhpcy5wcmVmaXgsIFwiKC4rPylcIikuY29uY2F0KHRoaXMuc3VmZml4KTtcbiAgICAgIHRoaXMucmVnZXhwID0gbmV3IFJlZ0V4cChyZWdleHBTdHIsICdnJyk7XG4gICAgICB2YXIgcmVnZXhwVW5lc2NhcGVTdHIgPSBcIlwiLmNvbmNhdCh0aGlzLnByZWZpeCkuY29uY2F0KHRoaXMudW5lc2NhcGVQcmVmaXgsIFwiKC4rPylcIikuY29uY2F0KHRoaXMudW5lc2NhcGVTdWZmaXgpLmNvbmNhdCh0aGlzLnN1ZmZpeCk7XG4gICAgICB0aGlzLnJlZ2V4cFVuZXNjYXBlID0gbmV3IFJlZ0V4cChyZWdleHBVbmVzY2FwZVN0ciwgJ2cnKTtcbiAgICAgIHZhciBuZXN0aW5nUmVnZXhwU3RyID0gXCJcIi5jb25jYXQodGhpcy5uZXN0aW5nUHJlZml4LCBcIiguKz8pXCIpLmNvbmNhdCh0aGlzLm5lc3RpbmdTdWZmaXgpO1xuICAgICAgdGhpcy5uZXN0aW5nUmVnZXhwID0gbmV3IFJlZ0V4cChuZXN0aW5nUmVnZXhwU3RyLCAnZycpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpbnRlcnBvbGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbnRlcnBvbGF0ZShzdHIsIGRhdGEsIGxuZywgb3B0aW9ucykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIHZhciBtYXRjaDtcbiAgICAgIHZhciB2YWx1ZTtcbiAgICAgIHZhciByZXBsYWNlcztcbiAgICAgIHZhciBkZWZhdWx0RGF0YSA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiAmJiB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzIHx8IHt9O1xuICAgICAgZnVuY3Rpb24gcmVnZXhTYWZlKHZhbCkge1xuICAgICAgICByZXR1cm4gdmFsLnJlcGxhY2UoL1xcJC9nLCAnJCQkJCcpO1xuICAgICAgfVxuICAgICAgdmFyIGhhbmRsZUZvcm1hdCA9IGZ1bmN0aW9uIGhhbmRsZUZvcm1hdChrZXkpIHtcbiAgICAgICAgaWYgKGtleS5pbmRleE9mKF90aGlzLmZvcm1hdFNlcGFyYXRvcikgPCAwKSB7XG4gICAgICAgICAgdmFyIHBhdGggPSBkZWVwRmluZFdpdGhEZWZhdWx0cyhkYXRhLCBkZWZhdWx0RGF0YSwga2V5LCBfdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciwgX3RoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlKTtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuYWx3YXlzRm9ybWF0ID8gX3RoaXMuZm9ybWF0KHBhdGgsIHVuZGVmaW5lZCwgbG5nLCBfb2JqZWN0U3ByZWFkJDMoX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyh7fSwgb3B0aW9ucyksIGRhdGEpLCB7fSwge1xuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbmtleToga2V5XG4gICAgICAgICAgfSkpIDogcGF0aDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcCA9IGtleS5zcGxpdChfdGhpcy5mb3JtYXRTZXBhcmF0b3IpO1xuICAgICAgICB2YXIgayA9IHAuc2hpZnQoKS50cmltKCk7XG4gICAgICAgIHZhciBmID0gcC5qb2luKF90aGlzLmZvcm1hdFNlcGFyYXRvcikudHJpbSgpO1xuICAgICAgICByZXR1cm4gX3RoaXMuZm9ybWF0KGRlZXBGaW5kV2l0aERlZmF1bHRzKGRhdGEsIGRlZmF1bHREYXRhLCBrLCBfdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvciwgX3RoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlKSwgZiwgbG5nLCBfb2JqZWN0U3ByZWFkJDMoX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyh7fSwgb3B0aW9ucyksIGRhdGEpLCB7fSwge1xuICAgICAgICAgIGludGVycG9sYXRpb25rZXk6IGtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICAgIHRoaXMucmVzZXRSZWdFeHAoKTtcbiAgICAgIHZhciBtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXIgPSBvcHRpb25zICYmIG9wdGlvbnMubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyIHx8IHRoaXMub3B0aW9ucy5taXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI7XG4gICAgICB2YXIgc2tpcE9uVmFyaWFibGVzID0gb3B0aW9ucyAmJiBvcHRpb25zLmludGVycG9sYXRpb24gJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyA6IHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcztcbiAgICAgIHZhciB0b2RvcyA9IFt7XG4gICAgICAgIHJlZ2V4OiB0aGlzLnJlZ2V4cFVuZXNjYXBlLFxuICAgICAgICBzYWZlVmFsdWU6IGZ1bmN0aW9uIHNhZmVWYWx1ZSh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gcmVnZXhTYWZlKHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgcmVnZXg6IHRoaXMucmVnZXhwLFxuICAgICAgICBzYWZlVmFsdWU6IGZ1bmN0aW9uIHNhZmVWYWx1ZSh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuZXNjYXBlVmFsdWUgPyByZWdleFNhZmUoX3RoaXMuZXNjYXBlKHZhbCkpIDogcmVnZXhTYWZlKHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH1dO1xuICAgICAgdG9kb3MuZm9yRWFjaChmdW5jdGlvbiAodG9kbykge1xuICAgICAgICByZXBsYWNlcyA9IDA7XG4gICAgICAgIHdoaWxlIChtYXRjaCA9IHRvZG8ucmVnZXguZXhlYyhzdHIpKSB7XG4gICAgICAgICAgdmFyIG1hdGNoZWRWYXIgPSBtYXRjaFsxXS50cmltKCk7XG4gICAgICAgICAgdmFsdWUgPSBoYW5kbGVGb3JtYXQobWF0Y2hlZFZhcik7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHZhciB0ZW1wID0gbWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyKHN0ciwgbWF0Y2gsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB2YWx1ZSA9IHR5cGVvZiB0ZW1wID09PSAnc3RyaW5nJyA/IHRlbXAgOiAnJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucywgbWF0Y2hlZFZhcikpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2tpcE9uVmFyaWFibGVzKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gbWF0Y2hbMF07XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgX3RoaXMubG9nZ2VyLndhcm4oXCJtaXNzZWQgdG8gcGFzcyBpbiB2YXJpYWJsZSBcIi5jb25jYXQobWF0Y2hlZFZhciwgXCIgZm9yIGludGVycG9sYXRpbmcgXCIpLmNvbmNhdChzdHIpKTtcbiAgICAgICAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgJiYgIV90aGlzLnVzZVJhd1ZhbHVlVG9Fc2NhcGUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gbWFrZVN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBzYWZlVmFsdWUgPSB0b2RvLnNhZmVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UobWF0Y2hbMF0sIHNhZmVWYWx1ZSk7XG4gICAgICAgICAgaWYgKHNraXBPblZhcmlhYmxlcykge1xuICAgICAgICAgICAgdG9kby5yZWdleC5sYXN0SW5kZXggKz0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgdG9kby5yZWdleC5sYXN0SW5kZXggLT0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2RvLnJlZ2V4Lmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcGxhY2VzKys7XG4gICAgICAgICAgaWYgKHJlcGxhY2VzID49IF90aGlzLm1heFJlcGxhY2VzKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibmVzdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBuZXN0KHN0ciwgZmMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgdmFyIG1hdGNoO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgdmFyIGNsb25lZE9wdGlvbnM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGVIYXNPcHRpb25zKGtleSwgaW5oZXJpdGVkT3B0aW9ucykge1xuICAgICAgICB2YXIgc2VwID0gdGhpcy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvcjtcbiAgICAgICAgaWYgKGtleS5pbmRleE9mKHNlcCkgPCAwKSByZXR1cm4ga2V5O1xuICAgICAgICB2YXIgYyA9IGtleS5zcGxpdChuZXcgUmVnRXhwKFwiXCIuY29uY2F0KHNlcCwgXCJbIF0qe1wiKSkpO1xuICAgICAgICB2YXIgb3B0aW9uc1N0cmluZyA9IFwie1wiLmNvbmNhdChjWzFdKTtcbiAgICAgICAga2V5ID0gY1swXTtcbiAgICAgICAgb3B0aW9uc1N0cmluZyA9IHRoaXMuaW50ZXJwb2xhdGUob3B0aW9uc1N0cmluZywgY2xvbmVkT3B0aW9ucyk7XG4gICAgICAgIHZhciBtYXRjaGVkU2luZ2xlUXVvdGVzID0gb3B0aW9uc1N0cmluZy5tYXRjaCgvJy9nKTtcbiAgICAgICAgdmFyIG1hdGNoZWREb3VibGVRdW90ZXMgPSBvcHRpb25zU3RyaW5nLm1hdGNoKC9cIi9nKTtcbiAgICAgICAgaWYgKG1hdGNoZWRTaW5nbGVRdW90ZXMgJiYgbWF0Y2hlZFNpbmdsZVF1b3Rlcy5sZW5ndGggJSAyID09PSAwICYmICFtYXRjaGVkRG91YmxlUXVvdGVzIHx8IG1hdGNoZWREb3VibGVRdW90ZXMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgICAgIG9wdGlvbnNTdHJpbmcgPSBvcHRpb25zU3RyaW5nLnJlcGxhY2UoLycvZywgJ1wiJyk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbG9uZWRPcHRpb25zID0gSlNPTi5wYXJzZShvcHRpb25zU3RyaW5nKTtcbiAgICAgICAgICBpZiAoaW5oZXJpdGVkT3B0aW9ucykgY2xvbmVkT3B0aW9ucyA9IF9vYmplY3RTcHJlYWQkMyhfb2JqZWN0U3ByZWFkJDMoe30sIGluaGVyaXRlZE9wdGlvbnMpLCBjbG9uZWRPcHRpb25zKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJmYWlsZWQgcGFyc2luZyBvcHRpb25zIHN0cmluZyBpbiBuZXN0aW5nIGZvciBrZXkgXCIuY29uY2F0KGtleSksIGUpO1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChrZXkpLmNvbmNhdChzZXApLmNvbmNhdChvcHRpb25zU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgY2xvbmVkT3B0aW9ucy5kZWZhdWx0VmFsdWU7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICB9XG4gICAgICB3aGlsZSAobWF0Y2ggPSB0aGlzLm5lc3RpbmdSZWdleHAuZXhlYyhzdHIpKSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXJzID0gW107XG4gICAgICAgIGNsb25lZE9wdGlvbnMgPSBfb2JqZWN0U3ByZWFkJDMoe30sIG9wdGlvbnMpO1xuICAgICAgICBjbG9uZWRPcHRpb25zID0gY2xvbmVkT3B0aW9ucy5yZXBsYWNlICYmIHR5cGVvZiBjbG9uZWRPcHRpb25zLnJlcGxhY2UgIT09ICdzdHJpbmcnID8gY2xvbmVkT3B0aW9ucy5yZXBsYWNlIDogY2xvbmVkT3B0aW9ucztcbiAgICAgICAgY2xvbmVkT3B0aW9ucy5hcHBseVBvc3RQcm9jZXNzb3IgPSBmYWxzZTtcbiAgICAgICAgZGVsZXRlIGNsb25lZE9wdGlvbnMuZGVmYXVsdFZhbHVlO1xuICAgICAgICB2YXIgZG9SZWR1Y2UgPSBmYWxzZTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmluZGV4T2YodGhpcy5mb3JtYXRTZXBhcmF0b3IpICE9PSAtMSAmJiAhL3suKn0vLnRlc3QobWF0Y2hbMV0pKSB7XG4gICAgICAgICAgdmFyIHIgPSBtYXRjaFsxXS5zcGxpdCh0aGlzLmZvcm1hdFNlcGFyYXRvcikubWFwKGZ1bmN0aW9uIChlbGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbS50cmltKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbWF0Y2hbMV0gPSByLnNoaWZ0KCk7XG4gICAgICAgICAgZm9ybWF0dGVycyA9IHI7XG4gICAgICAgICAgZG9SZWR1Y2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlID0gZmMoaGFuZGxlSGFzT3B0aW9ucy5jYWxsKHRoaXMsIG1hdGNoWzFdLnRyaW0oKSwgY2xvbmVkT3B0aW9ucyksIGNsb25lZE9wdGlvbnMpO1xuICAgICAgICBpZiAodmFsdWUgJiYgbWF0Y2hbMF0gPT09IHN0ciAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB2YWx1ZSA9IG1ha2VTdHJpbmcodmFsdWUpO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcIm1pc3NlZCB0byByZXNvbHZlIFwiLmNvbmNhdChtYXRjaFsxXSwgXCIgZm9yIG5lc3RpbmcgXCIpLmNvbmNhdChzdHIpKTtcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkb1JlZHVjZSkge1xuICAgICAgICAgIHZhbHVlID0gZm9ybWF0dGVycy5yZWR1Y2UoZnVuY3Rpb24gKHYsIGYpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczIuZm9ybWF0KHYsIGYsIG9wdGlvbnMubG5nLCBfb2JqZWN0U3ByZWFkJDMoX29iamVjdFNwcmVhZCQzKHt9LCBvcHRpb25zKSwge30sIHtcbiAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbmtleTogbWF0Y2hbMV0udHJpbSgpXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSwgdmFsdWUudHJpbSgpKTtcbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShtYXRjaFswXSwgdmFsdWUpO1xuICAgICAgICB0aGlzLnJlZ2V4cC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH1dKTtcbiAgcmV0dXJuIEludGVycG9sYXRvcjtcbn0oKTtcblxuZnVuY3Rpb24gb3duS2V5cyQyKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCQyKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzJDIoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyQyKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cbmZ1bmN0aW9uIHBhcnNlRm9ybWF0U3RyKGZvcm1hdFN0cikge1xuICB2YXIgZm9ybWF0TmFtZSA9IGZvcm1hdFN0ci50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgdmFyIGZvcm1hdE9wdGlvbnMgPSB7fTtcbiAgaWYgKGZvcm1hdFN0ci5pbmRleE9mKCcoJykgPiAtMSkge1xuICAgIHZhciBwID0gZm9ybWF0U3RyLnNwbGl0KCcoJyk7XG4gICAgZm9ybWF0TmFtZSA9IHBbMF0udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgdmFyIG9wdFN0ciA9IHBbMV0uc3Vic3RyaW5nKDAsIHBbMV0ubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGZvcm1hdE5hbWUgPT09ICdjdXJyZW5jeScgJiYgb3B0U3RyLmluZGV4T2YoJzonKSA8IDApIHtcbiAgICAgIGlmICghZm9ybWF0T3B0aW9ucy5jdXJyZW5jeSkgZm9ybWF0T3B0aW9ucy5jdXJyZW5jeSA9IG9wdFN0ci50cmltKCk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXROYW1lID09PSAncmVsYXRpdmV0aW1lJyAmJiBvcHRTdHIuaW5kZXhPZignOicpIDwgMCkge1xuICAgICAgaWYgKCFmb3JtYXRPcHRpb25zLnJhbmdlKSBmb3JtYXRPcHRpb25zLnJhbmdlID0gb3B0U3RyLnRyaW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9wdHMgPSBvcHRTdHIuc3BsaXQoJzsnKTtcbiAgICAgIG9wdHMuZm9yRWFjaChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgIGlmICghb3B0KSByZXR1cm47XG4gICAgICAgIHZhciBfb3B0JHNwbGl0ID0gb3B0LnNwbGl0KCc6JyksXG4gICAgICAgICAgX29wdCRzcGxpdDIgPSBfdG9BcnJheShfb3B0JHNwbGl0KSxcbiAgICAgICAgICBrZXkgPSBfb3B0JHNwbGl0MlswXSxcbiAgICAgICAgICByZXN0ID0gX29wdCRzcGxpdDIuc2xpY2UoMSk7XG4gICAgICAgIHZhciB2YWwgPSByZXN0LmpvaW4oJzonKS50cmltKCkucmVwbGFjZSgvXicrfCcrJC9nLCAnJyk7XG4gICAgICAgIGlmICghZm9ybWF0T3B0aW9uc1trZXkudHJpbSgpXSkgZm9ybWF0T3B0aW9uc1trZXkudHJpbSgpXSA9IHZhbDtcbiAgICAgICAgaWYgKHZhbCA9PT0gJ2ZhbHNlJykgZm9ybWF0T3B0aW9uc1trZXkudHJpbSgpXSA9IGZhbHNlO1xuICAgICAgICBpZiAodmFsID09PSAndHJ1ZScpIGZvcm1hdE9wdGlvbnNba2V5LnRyaW0oKV0gPSB0cnVlO1xuICAgICAgICBpZiAoIWlzTmFOKHZhbCkpIGZvcm1hdE9wdGlvbnNba2V5LnRyaW0oKV0gPSBwYXJzZUludCh2YWwsIDEwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGZvcm1hdE5hbWU6IGZvcm1hdE5hbWUsXG4gICAgZm9ybWF0T3B0aW9uczogZm9ybWF0T3B0aW9uc1xuICB9O1xufVxuZnVuY3Rpb24gY3JlYXRlQ2FjaGVkRm9ybWF0dGVyKGZuKSB7XG4gIHZhciBjYWNoZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gaW52b2tlRm9ybWF0dGVyKHZhbCwgbG5nLCBvcHRpb25zKSB7XG4gICAgdmFyIGtleSA9IGxuZyArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpO1xuICAgIHZhciBmb3JtYXR0ZXIgPSBjYWNoZVtrZXldO1xuICAgIGlmICghZm9ybWF0dGVyKSB7XG4gICAgICBmb3JtYXR0ZXIgPSBmbihsbmcsIG9wdGlvbnMpO1xuICAgICAgY2FjaGVba2V5XSA9IGZvcm1hdHRlcjtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdHRlcih2YWwpO1xuICB9O1xufVxudmFyIEZvcm1hdHRlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRm9ybWF0dGVyKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRm9ybWF0dGVyKTtcbiAgICB0aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXIuY3JlYXRlKCdmb3JtYXR0ZXInKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuZm9ybWF0cyA9IHtcbiAgICAgIG51bWJlcjogY3JlYXRlQ2FjaGVkRm9ybWF0dGVyKGZ1bmN0aW9uIChsbmcsIG9wdCkge1xuICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxuZywgX29iamVjdFNwcmVhZCQyKHt9LCBvcHQpKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdCh2YWwpO1xuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICBjdXJyZW5jeTogY3JlYXRlQ2FjaGVkRm9ybWF0dGVyKGZ1bmN0aW9uIChsbmcsIG9wdCkge1xuICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxuZywgX29iamVjdFNwcmVhZCQyKF9vYmplY3RTcHJlYWQkMih7fSwgb3B0KSwge30sIHtcbiAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5J1xuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsKTtcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgZGF0ZXRpbWU6IGNyZWF0ZUNhY2hlZEZvcm1hdHRlcihmdW5jdGlvbiAobG5nLCBvcHQpIHtcbiAgICAgICAgdmFyIGZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxuZywgX29iamVjdFNwcmVhZCQyKHt9LCBvcHQpKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdCh2YWwpO1xuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICByZWxhdGl2ZXRpbWU6IGNyZWF0ZUNhY2hlZEZvcm1hdHRlcihmdW5jdGlvbiAobG5nLCBvcHQpIHtcbiAgICAgICAgdmFyIGZvcm1hdHRlciA9IG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChsbmcsIF9vYmplY3RTcHJlYWQkMih7fSwgb3B0KSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsLCBvcHQucmFuZ2UgfHwgJ2RheScpO1xuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICBsaXN0OiBjcmVhdGVDYWNoZWRGb3JtYXR0ZXIoZnVuY3Rpb24gKGxuZywgb3B0KSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgSW50bC5MaXN0Rm9ybWF0KGxuZywgX29iamVjdFNwcmVhZCQyKHt9LCBvcHQpKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdCh2YWwpO1xuICAgICAgICB9O1xuICAgICAgfSlcbiAgICB9O1xuICAgIHRoaXMuaW5pdChvcHRpb25zKTtcbiAgfVxuICBfY3JlYXRlQ2xhc3MoRm9ybWF0dGVyLCBbe1xuICAgIGtleTogXCJpbml0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQoc2VydmljZXMpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7XG4gICAgICAgIGludGVycG9sYXRpb246IHt9XG4gICAgICB9O1xuICAgICAgdmFyIGlPcHRzID0gb3B0aW9ucy5pbnRlcnBvbGF0aW9uO1xuICAgICAgdGhpcy5mb3JtYXRTZXBhcmF0b3IgPSBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgPyBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgOiBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgfHwgJywnO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhZGRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkKG5hbWUsIGZjKSB7XG4gICAgICB0aGlzLmZvcm1hdHNbbmFtZS50b0xvd2VyQ2FzZSgpLnRyaW0oKV0gPSBmYztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkQ2FjaGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZENhY2hlZChuYW1lLCBmYykge1xuICAgICAgdGhpcy5mb3JtYXRzW25hbWUudG9Mb3dlckNhc2UoKS50cmltKCldID0gY3JlYXRlQ2FjaGVkRm9ybWF0dGVyKGZjKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgX2Zvcm1hdCwgbG5nKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9O1xuICAgICAgdmFyIGZvcm1hdHMgPSBfZm9ybWF0LnNwbGl0KHRoaXMuZm9ybWF0U2VwYXJhdG9yKTtcbiAgICAgIHZhciByZXN1bHQgPSBmb3JtYXRzLnJlZHVjZShmdW5jdGlvbiAobWVtLCBmKSB7XG4gICAgICAgIHZhciBfcGFyc2VGb3JtYXRTdHIgPSBwYXJzZUZvcm1hdFN0cihmKSxcbiAgICAgICAgICBmb3JtYXROYW1lID0gX3BhcnNlRm9ybWF0U3RyLmZvcm1hdE5hbWUsXG4gICAgICAgICAgZm9ybWF0T3B0aW9ucyA9IF9wYXJzZUZvcm1hdFN0ci5mb3JtYXRPcHRpb25zO1xuICAgICAgICBpZiAoX3RoaXMuZm9ybWF0c1tmb3JtYXROYW1lXSkge1xuICAgICAgICAgIHZhciBmb3JtYXR0ZWQgPSBtZW07XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciB2YWxPcHRpb25zID0gb3B0aW9ucyAmJiBvcHRpb25zLmZvcm1hdFBhcmFtcyAmJiBvcHRpb25zLmZvcm1hdFBhcmFtc1tvcHRpb25zLmludGVycG9sYXRpb25rZXldIHx8IHt9O1xuICAgICAgICAgICAgdmFyIGwgPSB2YWxPcHRpb25zLmxvY2FsZSB8fCB2YWxPcHRpb25zLmxuZyB8fCBvcHRpb25zLmxvY2FsZSB8fCBvcHRpb25zLmxuZyB8fCBsbmc7XG4gICAgICAgICAgICBmb3JtYXR0ZWQgPSBfdGhpcy5mb3JtYXRzW2Zvcm1hdE5hbWVdKG1lbSwgbCwgX29iamVjdFNwcmVhZCQyKF9vYmplY3RTcHJlYWQkMihfb2JqZWN0U3ByZWFkJDIoe30sIGZvcm1hdE9wdGlvbnMpLCBvcHRpb25zKSwgdmFsT3B0aW9ucykpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBfdGhpcy5sb2dnZXIud2FybihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMubG9nZ2VyLndhcm4oXCJ0aGVyZSB3YXMgbm8gZm9ybWF0IGZ1bmN0aW9uIGZvciBcIi5jb25jYXQoZm9ybWF0TmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZW07XG4gICAgICB9LCB2YWx1ZSk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gRm9ybWF0dGVyO1xufSgpO1xuXG5mdW5jdGlvbiBvd25LZXlzJDEob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDEodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBudWxsICE9IGFyZ3VtZW50c1tpXSA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpICUgMiA/IG93bktleXMkMShPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzJDEoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyJDEoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMSgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0JDEoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuZnVuY3Rpb24gcmVtb3ZlUGVuZGluZyhxLCBuYW1lKSB7XG4gIGlmIChxLnBlbmRpbmdbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgIGRlbGV0ZSBxLnBlbmRpbmdbbmFtZV07XG4gICAgcS5wZW5kaW5nQ291bnQtLTtcbiAgfVxufVxudmFyIENvbm5lY3RvciA9IGZ1bmN0aW9uIChfRXZlbnRFbWl0dGVyKSB7XG4gIF9pbmhlcml0cyhDb25uZWN0b3IsIF9FdmVudEVtaXR0ZXIpO1xuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyJDEoQ29ubmVjdG9yKTtcbiAgZnVuY3Rpb24gQ29ubmVjdG9yKGJhY2tlbmQsIHN0b3JlLCBzZXJ2aWNlcykge1xuICAgIHZhciBfdGhpcztcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3Rvcik7XG4gICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKTtcbiAgICBpZiAoaXNJRTEwKSB7XG4gICAgICBFdmVudEVtaXR0ZXIuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgfVxuICAgIF90aGlzLmJhY2tlbmQgPSBiYWNrZW5kO1xuICAgIF90aGlzLnN0b3JlID0gc3RvcmU7XG4gICAgX3RoaXMuc2VydmljZXMgPSBzZXJ2aWNlcztcbiAgICBfdGhpcy5sYW5ndWFnZVV0aWxzID0gc2VydmljZXMubGFuZ3VhZ2VVdGlscztcbiAgICBfdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICBfdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyLmNyZWF0ZSgnYmFja2VuZENvbm5lY3RvcicpO1xuICAgIF90aGlzLndhaXRpbmdSZWFkcyA9IFtdO1xuICAgIF90aGlzLm1heFBhcmFsbGVsUmVhZHMgPSBvcHRpb25zLm1heFBhcmFsbGVsUmVhZHMgfHwgMTA7XG4gICAgX3RoaXMucmVhZGluZ0NhbGxzID0gMDtcbiAgICBfdGhpcy5tYXhSZXRyaWVzID0gb3B0aW9ucy5tYXhSZXRyaWVzID49IDAgPyBvcHRpb25zLm1heFJldHJpZXMgOiA1O1xuICAgIF90aGlzLnJldHJ5VGltZW91dCA9IG9wdGlvbnMucmV0cnlUaW1lb3V0ID49IDEgPyBvcHRpb25zLnJldHJ5VGltZW91dCA6IDM1MDtcbiAgICBfdGhpcy5zdGF0ZSA9IHt9O1xuICAgIF90aGlzLnF1ZXVlID0gW107XG4gICAgaWYgKF90aGlzLmJhY2tlbmQgJiYgX3RoaXMuYmFja2VuZC5pbml0KSB7XG4gICAgICBfdGhpcy5iYWNrZW5kLmluaXQoc2VydmljZXMsIG9wdGlvbnMuYmFja2VuZCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICBfY3JlYXRlQ2xhc3MoQ29ubmVjdG9yLCBbe1xuICAgIGtleTogXCJxdWV1ZUxvYWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcXVldWVMb2FkKGxhbmd1YWdlcywgbmFtZXNwYWNlcywgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIHRvTG9hZCA9IHt9O1xuICAgICAgdmFyIHBlbmRpbmcgPSB7fTtcbiAgICAgIHZhciB0b0xvYWRMYW5ndWFnZXMgPSB7fTtcbiAgICAgIHZhciB0b0xvYWROYW1lc3BhY2VzID0ge307XG4gICAgICBsYW5ndWFnZXMuZm9yRWFjaChmdW5jdGlvbiAobG5nKSB7XG4gICAgICAgIHZhciBoYXNBbGxOYW1lc3BhY2VzID0gdHJ1ZTtcbiAgICAgICAgbmFtZXNwYWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChucykge1xuICAgICAgICAgIHZhciBuYW1lID0gXCJcIi5jb25jYXQobG5nLCBcInxcIikuY29uY2F0KG5zKTtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMucmVsb2FkICYmIF90aGlzMi5zdG9yZS5oYXNSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlW25hbWVdID0gMjtcbiAgICAgICAgICB9IGVsc2UgaWYgKF90aGlzMi5zdGF0ZVtuYW1lXSA8IDApIDsgZWxzZSBpZiAoX3RoaXMyLnN0YXRlW25hbWVdID09PSAxKSB7XG4gICAgICAgICAgICBpZiAocGVuZGluZ1tuYW1lXSA9PT0gdW5kZWZpbmVkKSBwZW5kaW5nW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlW25hbWVdID0gMTtcbiAgICAgICAgICAgIGhhc0FsbE5hbWVzcGFjZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChwZW5kaW5nW25hbWVdID09PSB1bmRlZmluZWQpIHBlbmRpbmdbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRvTG9hZFtuYW1lXSA9PT0gdW5kZWZpbmVkKSB0b0xvYWRbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRvTG9hZE5hbWVzcGFjZXNbbnNdID09PSB1bmRlZmluZWQpIHRvTG9hZE5hbWVzcGFjZXNbbnNdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhhc0FsbE5hbWVzcGFjZXMpIHRvTG9hZExhbmd1YWdlc1tsbmddID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRvTG9hZCkubGVuZ3RoIHx8IE9iamVjdC5rZXlzKHBlbmRpbmcpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnF1ZXVlLnB1c2goe1xuICAgICAgICAgIHBlbmRpbmc6IHBlbmRpbmcsXG4gICAgICAgICAgcGVuZGluZ0NvdW50OiBPYmplY3Qua2V5cyhwZW5kaW5nKS5sZW5ndGgsXG4gICAgICAgICAgbG9hZGVkOiB7fSxcbiAgICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvTG9hZDogT2JqZWN0LmtleXModG9Mb2FkKSxcbiAgICAgICAgcGVuZGluZzogT2JqZWN0LmtleXMocGVuZGluZyksXG4gICAgICAgIHRvTG9hZExhbmd1YWdlczogT2JqZWN0LmtleXModG9Mb2FkTGFuZ3VhZ2VzKSxcbiAgICAgICAgdG9Mb2FkTmFtZXNwYWNlczogT2JqZWN0LmtleXModG9Mb2FkTmFtZXNwYWNlcylcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWRlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkZWQobmFtZSwgZXJyLCBkYXRhKSB7XG4gICAgICB2YXIgcyA9IG5hbWUuc3BsaXQoJ3wnKTtcbiAgICAgIHZhciBsbmcgPSBzWzBdO1xuICAgICAgdmFyIG5zID0gc1sxXTtcbiAgICAgIGlmIChlcnIpIHRoaXMuZW1pdCgnZmFpbGVkTG9hZGluZycsIGxuZywgbnMsIGVycik7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLnN0b3JlLmFkZFJlc291cmNlQnVuZGxlKGxuZywgbnMsIGRhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0ZVtuYW1lXSA9IGVyciA/IC0xIDogMjtcbiAgICAgIHZhciBsb2FkZWQgPSB7fTtcbiAgICAgIHRoaXMucXVldWUuZm9yRWFjaChmdW5jdGlvbiAocSkge1xuICAgICAgICBwdXNoUGF0aChxLmxvYWRlZCwgW2xuZ10sIG5zKTtcbiAgICAgICAgcmVtb3ZlUGVuZGluZyhxLCBuYW1lKTtcbiAgICAgICAgaWYgKGVycikgcS5lcnJvcnMucHVzaChlcnIpO1xuICAgICAgICBpZiAocS5wZW5kaW5nQ291bnQgPT09IDAgJiYgIXEuZG9uZSkge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHEubG9hZGVkKS5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgICBpZiAoIWxvYWRlZFtsXSkgbG9hZGVkW2xdID0ge307XG4gICAgICAgICAgICB2YXIgbG9hZGVkS2V5cyA9IHEubG9hZGVkW2xdO1xuICAgICAgICAgICAgaWYgKGxvYWRlZEtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGxvYWRlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAobikge1xuICAgICAgICAgICAgICAgIGlmIChsb2FkZWRbbF1bbl0gPT09IHVuZGVmaW5lZCkgbG9hZGVkW2xdW25dID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcS5kb25lID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocS5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBxLmNhbGxiYWNrKHEuZXJyb3JzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcS5jYWxsYmFjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmVtaXQoJ2xvYWRlZCcsIGxvYWRlZCk7XG4gICAgICB0aGlzLnF1ZXVlID0gdGhpcy5xdWV1ZS5maWx0ZXIoZnVuY3Rpb24gKHEpIHtcbiAgICAgICAgcmV0dXJuICFxLmRvbmU7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVhZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWFkKGxuZywgbnMsIGZjTmFtZSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICB2YXIgdHJpZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IDA7XG4gICAgICB2YXIgd2FpdCA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogdGhpcy5yZXRyeVRpbWVvdXQ7XG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gNSA/IGFyZ3VtZW50c1s1XSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmICghbG5nLmxlbmd0aCkgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHt9KTtcbiAgICAgIGlmICh0aGlzLnJlYWRpbmdDYWxscyA+PSB0aGlzLm1heFBhcmFsbGVsUmVhZHMpIHtcbiAgICAgICAgdGhpcy53YWl0aW5nUmVhZHMucHVzaCh7XG4gICAgICAgICAgbG5nOiBsbmcsXG4gICAgICAgICAgbnM6IG5zLFxuICAgICAgICAgIGZjTmFtZTogZmNOYW1lLFxuICAgICAgICAgIHRyaWVkOiB0cmllZCxcbiAgICAgICAgICB3YWl0OiB3YWl0LFxuICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWFkaW5nQ2FsbHMrKztcbiAgICAgIHZhciByZXNvbHZlciA9IGZ1bmN0aW9uIHJlc29sdmVyKGVyciwgZGF0YSkge1xuICAgICAgICBfdGhpczMucmVhZGluZ0NhbGxzLS07XG4gICAgICAgIGlmIChfdGhpczMud2FpdGluZ1JlYWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IF90aGlzMy53YWl0aW5nUmVhZHMuc2hpZnQoKTtcbiAgICAgICAgICBfdGhpczMucmVhZChuZXh0LmxuZywgbmV4dC5ucywgbmV4dC5mY05hbWUsIG5leHQudHJpZWQsIG5leHQud2FpdCwgbmV4dC5jYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyciAmJiBkYXRhICYmIHRyaWVkIDwgX3RoaXMzLm1heFJldHJpZXMpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzMy5yZWFkLmNhbGwoX3RoaXMzLCBsbmcsIG5zLCBmY05hbWUsIHRyaWVkICsgMSwgd2FpdCAqIDIsIGNhbGxiYWNrKTtcbiAgICAgICAgICB9LCB3YWl0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soZXJyLCBkYXRhKTtcbiAgICAgIH07XG4gICAgICB2YXIgZmMgPSB0aGlzLmJhY2tlbmRbZmNOYW1lXS5iaW5kKHRoaXMuYmFja2VuZCk7XG4gICAgICBpZiAoZmMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIHIgPSBmYyhsbmcsIG5zKTtcbiAgICAgICAgICBpZiAociAmJiB0eXBlb2Ygci50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVyKG51bGwsIGRhdGEpO1xuICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShyZXNvbHZlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmVyKG51bGwsIHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVzb2x2ZXIoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gZmMobG5nLCBucywgcmVzb2x2ZXIpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwcmVwYXJlTG9hZGluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwcmVwYXJlTG9hZGluZyhsYW5ndWFnZXMsIG5hbWVzcGFjZXMpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXRoaXMuYmFja2VuZCkge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdObyBiYWNrZW5kIHdhcyBhZGRlZCB2aWEgaTE4bmV4dC51c2UuIFdpbGwgbm90IGxvYWQgcmVzb3VyY2VzLicpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgbGFuZ3VhZ2VzID09PSAnc3RyaW5nJykgbGFuZ3VhZ2VzID0gdGhpcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShsYW5ndWFnZXMpO1xuICAgICAgaWYgKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJykgbmFtZXNwYWNlcyA9IFtuYW1lc3BhY2VzXTtcbiAgICAgIHZhciB0b0xvYWQgPSB0aGlzLnF1ZXVlTG9hZChsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgIGlmICghdG9Mb2FkLnRvTG9hZC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCF0b0xvYWQucGVuZGluZy5sZW5ndGgpIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdG9Mb2FkLnRvTG9hZC5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIF90aGlzNC5sb2FkT25lKG5hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZChsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLnByZXBhcmVMb2FkaW5nKGxhbmd1YWdlcywgbmFtZXNwYWNlcywge30sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVsb2FkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbG9hZChsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLnByZXBhcmVMb2FkaW5nKGxhbmd1YWdlcywgbmFtZXNwYWNlcywge1xuICAgICAgICByZWxvYWQ6IHRydWVcbiAgICAgIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibG9hZE9uZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkT25lKG5hbWUpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuICAgICAgdmFyIHByZWZpeCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7XG4gICAgICB2YXIgcyA9IG5hbWUuc3BsaXQoJ3wnKTtcbiAgICAgIHZhciBsbmcgPSBzWzBdO1xuICAgICAgdmFyIG5zID0gc1sxXTtcbiAgICAgIHRoaXMucmVhZChsbmcsIG5zLCAncmVhZCcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICAgIGlmIChlcnIpIF90aGlzNS5sb2dnZXIud2FybihcIlwiLmNvbmNhdChwcmVmaXgsIFwibG9hZGluZyBuYW1lc3BhY2UgXCIpLmNvbmNhdChucywgXCIgZm9yIGxhbmd1YWdlIFwiKS5jb25jYXQobG5nLCBcIiBmYWlsZWRcIiksIGVycik7XG4gICAgICAgIGlmICghZXJyICYmIGRhdGEpIF90aGlzNS5sb2dnZXIubG9nKFwiXCIuY29uY2F0KHByZWZpeCwgXCJsb2FkZWQgbmFtZXNwYWNlIFwiKS5jb25jYXQobnMsIFwiIGZvciBsYW5ndWFnZSBcIikuY29uY2F0KGxuZyksIGRhdGEpO1xuICAgICAgICBfdGhpczUubG9hZGVkKG5hbWUsIGVyciwgZGF0YSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2F2ZU1pc3NpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2F2ZU1pc3NpbmcobGFuZ3VhZ2VzLCBuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSwgaXNVcGRhdGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgYXJndW1lbnRzWzVdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNV0gOiB7fTtcbiAgICAgIHZhciBjbGIgPSBhcmd1bWVudHMubGVuZ3RoID4gNiAmJiBhcmd1bWVudHNbNl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s2XSA6IGZ1bmN0aW9uICgpIHt9O1xuICAgICAgaWYgKHRoaXMuc2VydmljZXMudXRpbHMgJiYgdGhpcy5zZXJ2aWNlcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UgJiYgIXRoaXMuc2VydmljZXMudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlKG5hbWVzcGFjZSkpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcImRpZCBub3Qgc2F2ZSBrZXkgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIiBhcyB0aGUgbmFtZXNwYWNlIFxcXCJcIikuY29uY2F0KG5hbWVzcGFjZSwgXCJcXFwiIHdhcyBub3QgeWV0IGxvYWRlZFwiKSwgJ1RoaXMgbWVhbnMgc29tZXRoaW5nIElTIFdST05HIGluIHlvdXIgc2V0dXAuIFlvdSBhY2Nlc3MgdGhlIHQgZnVuY3Rpb24gYmVmb3JlIGkxOG5leHQuaW5pdCAvIGkxOG5leHQubG9hZE5hbWVzcGFjZSAvIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2Ugd2FzIGRvbmUuIFdhaXQgZm9yIHRoZSBjYWxsYmFjayBvciBQcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGFjY2Vzc2luZyBpdCEhIScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsIHx8IGtleSA9PT0gJycpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLmJhY2tlbmQgJiYgdGhpcy5iYWNrZW5kLmNyZWF0ZSkge1xuICAgICAgICB2YXIgb3B0cyA9IF9vYmplY3RTcHJlYWQkMShfb2JqZWN0U3ByZWFkJDEoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICAgIGlzVXBkYXRlOiBpc1VwZGF0ZVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGZjID0gdGhpcy5iYWNrZW5kLmNyZWF0ZS5iaW5kKHRoaXMuYmFja2VuZCk7XG4gICAgICAgIGlmIChmYy5sZW5ndGggPCA2KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciByO1xuICAgICAgICAgICAgaWYgKGZjLmxlbmd0aCA9PT0gNSkge1xuICAgICAgICAgICAgICByID0gZmMobGFuZ3VhZ2VzLCBuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSwgb3B0cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByID0gZmMobGFuZ3VhZ2VzLCBuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAociAmJiB0eXBlb2Ygci50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHIudGhlbihmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbGIobnVsbCwgZGF0YSk7XG4gICAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oY2xiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNsYihudWxsLCByKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNsYihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmYyhsYW5ndWFnZXMsIG5hbWVzcGFjZSwga2V5LCBmYWxsYmFja1ZhbHVlLCBjbGIsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWxhbmd1YWdlcyB8fCAhbGFuZ3VhZ2VzWzBdKSByZXR1cm47XG4gICAgICB0aGlzLnN0b3JlLmFkZFJlc291cmNlKGxhbmd1YWdlc1swXSwgbmFtZXNwYWNlLCBrZXksIGZhbGxiYWNrVmFsdWUpO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQ29ubmVjdG9yO1xufShFdmVudEVtaXR0ZXIpO1xuXG5mdW5jdGlvbiBnZXQoKSB7XG4gIHJldHVybiB7XG4gICAgZGVidWc6IGZhbHNlLFxuICAgIGluaXRJbW1lZGlhdGU6IHRydWUsXG4gICAgbnM6IFsndHJhbnNsYXRpb24nXSxcbiAgICBkZWZhdWx0TlM6IFsndHJhbnNsYXRpb24nXSxcbiAgICBmYWxsYmFja0xuZzogWydkZXYnXSxcbiAgICBmYWxsYmFja05TOiBmYWxzZSxcbiAgICBzdXBwb3J0ZWRMbmdzOiBmYWxzZSxcbiAgICBub25FeHBsaWNpdFN1cHBvcnRlZExuZ3M6IGZhbHNlLFxuICAgIGxvYWQ6ICdhbGwnLFxuICAgIHByZWxvYWQ6IGZhbHNlLFxuICAgIHNpbXBsaWZ5UGx1cmFsU3VmZml4OiB0cnVlLFxuICAgIGtleVNlcGFyYXRvcjogJy4nLFxuICAgIG5zU2VwYXJhdG9yOiAnOicsXG4gICAgcGx1cmFsU2VwYXJhdG9yOiAnXycsXG4gICAgY29udGV4dFNlcGFyYXRvcjogJ18nLFxuICAgIHBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzOiBmYWxzZSxcbiAgICBzYXZlTWlzc2luZzogZmFsc2UsXG4gICAgdXBkYXRlTWlzc2luZzogZmFsc2UsXG4gICAgc2F2ZU1pc3NpbmdUbzogJ2ZhbGxiYWNrJyxcbiAgICBzYXZlTWlzc2luZ1BsdXJhbHM6IHRydWUsXG4gICAgbWlzc2luZ0tleUhhbmRsZXI6IGZhbHNlLFxuICAgIG1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlcjogZmFsc2UsXG4gICAgcG9zdFByb2Nlc3M6IGZhbHNlLFxuICAgIHBvc3RQcm9jZXNzUGFzc1Jlc29sdmVkOiBmYWxzZSxcbiAgICByZXR1cm5OdWxsOiB0cnVlLFxuICAgIHJldHVybkVtcHR5U3RyaW5nOiB0cnVlLFxuICAgIHJldHVybk9iamVjdHM6IGZhbHNlLFxuICAgIGpvaW5BcnJheXM6IGZhbHNlLFxuICAgIHJldHVybmVkT2JqZWN0SGFuZGxlcjogZmFsc2UsXG4gICAgcGFyc2VNaXNzaW5nS2V5SGFuZGxlcjogZmFsc2UsXG4gICAgYXBwZW5kTmFtZXNwYWNlVG9NaXNzaW5nS2V5OiBmYWxzZSxcbiAgICBhcHBlbmROYW1lc3BhY2VUb0NJTW9kZTogZmFsc2UsXG4gICAgb3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZShhcmdzKSB7XG4gICAgICB2YXIgcmV0ID0ge307XG4gICAgICBpZiAoX3R5cGVvZihhcmdzWzFdKSA9PT0gJ29iamVjdCcpIHJldCA9IGFyZ3NbMV07XG4gICAgICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdzdHJpbmcnKSByZXQuZGVmYXVsdFZhbHVlID0gYXJnc1sxXTtcbiAgICAgIGlmICh0eXBlb2YgYXJnc1syXSA9PT0gJ3N0cmluZycpIHJldC50RGVzY3JpcHRpb24gPSBhcmdzWzJdO1xuICAgICAgaWYgKF90eXBlb2YoYXJnc1syXSkgPT09ICdvYmplY3QnIHx8IF90eXBlb2YoYXJnc1szXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gYXJnc1szXSB8fCBhcmdzWzJdO1xuICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXRba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0sXG4gICAgaW50ZXJwb2xhdGlvbjoge1xuICAgICAgZXNjYXBlVmFsdWU6IHRydWUsXG4gICAgICBmb3JtYXQ6IGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgX2Zvcm1hdCwgbG5nLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBwcmVmaXg6ICd7eycsXG4gICAgICBzdWZmaXg6ICd9fScsXG4gICAgICBmb3JtYXRTZXBhcmF0b3I6ICcsJyxcbiAgICAgIHVuZXNjYXBlUHJlZml4OiAnLScsXG4gICAgICBuZXN0aW5nUHJlZml4OiAnJHQoJyxcbiAgICAgIG5lc3RpbmdTdWZmaXg6ICcpJyxcbiAgICAgIG5lc3RpbmdPcHRpb25zU2VwYXJhdG9yOiAnLCcsXG4gICAgICBtYXhSZXBsYWNlczogMTAwMCxcbiAgICAgIHNraXBPblZhcmlhYmxlczogdHJ1ZVxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIHRyYW5zZm9ybU9wdGlvbnMob3B0aW9ucykge1xuICBpZiAodHlwZW9mIG9wdGlvbnMubnMgPT09ICdzdHJpbmcnKSBvcHRpb25zLm5zID0gW29wdGlvbnMubnNdO1xuICBpZiAodHlwZW9mIG9wdGlvbnMuZmFsbGJhY2tMbmcgPT09ICdzdHJpbmcnKSBvcHRpb25zLmZhbGxiYWNrTG5nID0gW29wdGlvbnMuZmFsbGJhY2tMbmddO1xuICBpZiAodHlwZW9mIG9wdGlvbnMuZmFsbGJhY2tOUyA9PT0gJ3N0cmluZycpIG9wdGlvbnMuZmFsbGJhY2tOUyA9IFtvcHRpb25zLmZhbGxiYWNrTlNdO1xuICBpZiAob3B0aW9ucy5zdXBwb3J0ZWRMbmdzICYmIG9wdGlvbnMuc3VwcG9ydGVkTG5ncy5pbmRleE9mKCdjaW1vZGUnKSA8IDApIHtcbiAgICBvcHRpb25zLnN1cHBvcnRlZExuZ3MgPSBvcHRpb25zLnN1cHBvcnRlZExuZ3MuY29uY2F0KFsnY2ltb2RlJ10pO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5mdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkgeyBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7IGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gZmFsc2U7IGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7IHRyeSB7IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuZnVuY3Rpb24gYmluZE1lbWJlckZ1bmN0aW9ucyhpbnN0KSB7XG4gIHZhciBtZW1zID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoT2JqZWN0LmdldFByb3RvdHlwZU9mKGluc3QpKTtcbiAgbWVtcy5mb3JFYWNoKGZ1bmN0aW9uIChtZW0pIHtcbiAgICBpZiAodHlwZW9mIGluc3RbbWVtXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5zdFttZW1dID0gaW5zdFttZW1dLmJpbmQoaW5zdCk7XG4gICAgfVxuICB9KTtcbn1cbnZhciBJMThuID0gZnVuY3Rpb24gKF9FdmVudEVtaXR0ZXIpIHtcbiAgX2luaGVyaXRzKEkxOG4sIF9FdmVudEVtaXR0ZXIpO1xuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKEkxOG4pO1xuICBmdW5jdGlvbiBJMThuKCkge1xuICAgIHZhciBfdGhpcztcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEkxOG4pO1xuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG4gICAgaWYgKGlzSUUxMCkge1xuICAgICAgRXZlbnRFbWl0dGVyLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgIH1cbiAgICBfdGhpcy5vcHRpb25zID0gdHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zKTtcbiAgICBfdGhpcy5zZXJ2aWNlcyA9IHt9O1xuICAgIF90aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXI7XG4gICAgX3RoaXMubW9kdWxlcyA9IHtcbiAgICAgIGV4dGVybmFsOiBbXVxuICAgIH07XG4gICAgYmluZE1lbWJlckZ1bmN0aW9ucyhfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgaWYgKGNhbGxiYWNrICYmICFfdGhpcy5pc0luaXRpYWxpemVkICYmICFvcHRpb25zLmlzQ2xvbmUpIHtcbiAgICAgIGlmICghX3RoaXMub3B0aW9ucy5pbml0SW1tZWRpYXRlKSB7XG4gICAgICAgIF90aGlzLmluaXQob3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5pbml0KG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKEkxOG4sIFt7XG4gICAga2V5OiBcImluaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0ge307XG4gICAgICB9XG4gICAgICBpZiAoIW9wdGlvbnMuZGVmYXVsdE5TICYmIG9wdGlvbnMuZGVmYXVsdE5TICE9PSBmYWxzZSAmJiBvcHRpb25zLm5zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBvcHRpb25zLmRlZmF1bHROUyA9IG9wdGlvbnMubnM7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5ucy5pbmRleE9mKCd0cmFuc2xhdGlvbicpIDwgMCkge1xuICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdE5TID0gb3B0aW9ucy5uc1swXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGRlZk9wdHMgPSBnZXQoKTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBkZWZPcHRzKSwgdGhpcy5vcHRpb25zKSwgdHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkgIT09ICd2MScpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGRlZk9wdHMuaW50ZXJwb2xhdGlvbiksIHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLmtleVNlcGFyYXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy51c2VyRGVmaW5lZEtleVNlcGFyYXRvciA9IG9wdGlvbnMua2V5U2VwYXJhdG9yO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMubnNTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMudXNlckRlZmluZWROc1NlcGFyYXRvciA9IG9wdGlvbnMubnNTZXBhcmF0b3I7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjcmVhdGVDbGFzc09uRGVtYW5kKENsYXNzT3JPYmplY3QpIHtcbiAgICAgICAgaWYgKCFDbGFzc09yT2JqZWN0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKHR5cGVvZiBDbGFzc09yT2JqZWN0ID09PSAnZnVuY3Rpb24nKSByZXR1cm4gbmV3IENsYXNzT3JPYmplY3QoKTtcbiAgICAgICAgcmV0dXJuIENsYXNzT3JPYmplY3Q7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5pc0Nsb25lKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZHVsZXMubG9nZ2VyKSB7XG4gICAgICAgICAgYmFzZUxvZ2dlci5pbml0KGNyZWF0ZUNsYXNzT25EZW1hbmQodGhpcy5tb2R1bGVzLmxvZ2dlciksIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmFzZUxvZ2dlci5pbml0KG51bGwsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZvcm1hdHRlcjtcbiAgICAgICAgaWYgKHRoaXMubW9kdWxlcy5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICBmb3JtYXR0ZXIgPSB0aGlzLm1vZHVsZXMuZm9ybWF0dGVyO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBJbnRsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGZvcm1hdHRlciA9IEZvcm1hdHRlcjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbHUgPSBuZXcgTGFuZ3VhZ2VVdGlsKHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc3RvcmUgPSBuZXcgUmVzb3VyY2VTdG9yZSh0aGlzLm9wdGlvbnMucmVzb3VyY2VzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB2YXIgcyA9IHRoaXMuc2VydmljZXM7XG4gICAgICAgIHMubG9nZ2VyID0gYmFzZUxvZ2dlcjtcbiAgICAgICAgcy5yZXNvdXJjZVN0b3JlID0gdGhpcy5zdG9yZTtcbiAgICAgICAgcy5sYW5ndWFnZVV0aWxzID0gbHU7XG4gICAgICAgIHMucGx1cmFsUmVzb2x2ZXIgPSBuZXcgUGx1cmFsUmVzb2x2ZXIobHUsIHtcbiAgICAgICAgICBwcmVwZW5kOiB0aGlzLm9wdGlvbnMucGx1cmFsU2VwYXJhdG9yLFxuICAgICAgICAgIGNvbXBhdGliaWxpdHlKU09OOiB0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04sXG4gICAgICAgICAgc2ltcGxpZnlQbHVyYWxTdWZmaXg6IHRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGZvcm1hdHRlciAmJiAoIXRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCB8fCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQgPT09IGRlZk9wdHMuaW50ZXJwb2xhdGlvbi5mb3JtYXQpKSB7XG4gICAgICAgICAgcy5mb3JtYXR0ZXIgPSBjcmVhdGVDbGFzc09uRGVtYW5kKGZvcm1hdHRlcik7XG4gICAgICAgICAgcy5mb3JtYXR0ZXIuaW5pdChzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCA9IHMuZm9ybWF0dGVyLmZvcm1hdC5iaW5kKHMuZm9ybWF0dGVyKTtcbiAgICAgICAgfVxuICAgICAgICBzLmludGVycG9sYXRvciA9IG5ldyBJbnRlcnBvbGF0b3IodGhpcy5vcHRpb25zKTtcbiAgICAgICAgcy51dGlscyA9IHtcbiAgICAgICAgICBoYXNMb2FkZWROYW1lc3BhY2U6IHRoaXMuaGFzTG9hZGVkTmFtZXNwYWNlLmJpbmQodGhpcylcbiAgICAgICAgfTtcbiAgICAgICAgcy5iYWNrZW5kQ29ubmVjdG9yID0gbmV3IENvbm5lY3RvcihjcmVhdGVDbGFzc09uRGVtYW5kKHRoaXMubW9kdWxlcy5iYWNrZW5kKSwgcy5yZXNvdXJjZVN0b3JlLCBzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICBzLmJhY2tlbmRDb25uZWN0b3Iub24oJyonLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3RoaXMyLmVtaXQuYXBwbHkoX3RoaXMyLCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3IpIHtcbiAgICAgICAgICBzLmxhbmd1YWdlRGV0ZWN0b3IgPSBjcmVhdGVDbGFzc09uRGVtYW5kKHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yKTtcbiAgICAgICAgICBpZiAocy5sYW5ndWFnZURldGVjdG9yLmluaXQpIHMubGFuZ3VhZ2VEZXRlY3Rvci5pbml0KHMsIHRoaXMub3B0aW9ucy5kZXRlY3Rpb24sIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW9kdWxlcy5pMThuRm9ybWF0KSB7XG4gICAgICAgICAgcy5pMThuRm9ybWF0ID0gY3JlYXRlQ2xhc3NPbkRlbWFuZCh0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCk7XG4gICAgICAgICAgaWYgKHMuaTE4bkZvcm1hdC5pbml0KSBzLmkxOG5Gb3JtYXQuaW5pdCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyYW5zbGF0b3IgPSBuZXcgVHJhbnNsYXRvcih0aGlzLnNlcnZpY2VzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLnRyYW5zbGF0b3Iub24oJyonLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgX3RoaXMyLmVtaXQuYXBwbHkoX3RoaXMyLCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1vZHVsZXMuZXh0ZXJuYWwuZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgICAgICAgIGlmIChtLmluaXQpIG0uaW5pdChfdGhpczIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybWF0ID0gdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0O1xuICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBub29wO1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyAmJiAhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yICYmICF0aGlzLm9wdGlvbnMubG5nKSB7XG4gICAgICAgIHZhciBjb2RlcyA9IHRoaXMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyk7XG4gICAgICAgIGlmIChjb2Rlcy5sZW5ndGggPiAwICYmIGNvZGVzWzBdICE9PSAnZGV2JykgdGhpcy5vcHRpb25zLmxuZyA9IGNvZGVzWzBdO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IgJiYgIXRoaXMub3B0aW9ucy5sbmcpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignaW5pdDogbm8gbGFuZ3VhZ2VEZXRlY3RvciBpcyB1c2VkIGFuZCBubyBsbmcgaXMgZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgdmFyIHN0b3JlQXBpID0gWydnZXRSZXNvdXJjZScsICdoYXNSZXNvdXJjZUJ1bmRsZScsICdnZXRSZXNvdXJjZUJ1bmRsZScsICdnZXREYXRhQnlMYW5ndWFnZSddO1xuICAgICAgc3RvcmVBcGkuZm9yRWFjaChmdW5jdGlvbiAoZmNOYW1lKSB7XG4gICAgICAgIF90aGlzMltmY05hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBfdGhpczIkc3RvcmU7XG4gICAgICAgICAgcmV0dXJuIChfdGhpczIkc3RvcmUgPSBfdGhpczIuc3RvcmUpW2ZjTmFtZV0uYXBwbHkoX3RoaXMyJHN0b3JlLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICB2YXIgc3RvcmVBcGlDaGFpbmVkID0gWydhZGRSZXNvdXJjZScsICdhZGRSZXNvdXJjZXMnLCAnYWRkUmVzb3VyY2VCdW5kbGUnLCAncmVtb3ZlUmVzb3VyY2VCdW5kbGUnXTtcbiAgICAgIHN0b3JlQXBpQ2hhaW5lZC5mb3JFYWNoKGZ1bmN0aW9uIChmY05hbWUpIHtcbiAgICAgICAgX3RoaXMyW2ZjTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF90aGlzMiRzdG9yZTI7XG4gICAgICAgICAgKF90aGlzMiRzdG9yZTIgPSBfdGhpczIuc3RvcmUpW2ZjTmFtZV0uYXBwbHkoX3RoaXMyJHN0b3JlMiwgYXJndW1lbnRzKTtcbiAgICAgICAgICByZXR1cm4gX3RoaXMyO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICB2YXIgZGVmZXJyZWQgPSBkZWZlcigpO1xuICAgICAgdmFyIGxvYWQgPSBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgICB2YXIgZmluaXNoID0gZnVuY3Rpb24gZmluaXNoKGVyciwgdCkge1xuICAgICAgICAgIGlmIChfdGhpczIuaXNJbml0aWFsaXplZCAmJiAhX3RoaXMyLmluaXRpYWxpemVkU3RvcmVPbmNlKSBfdGhpczIubG9nZ2VyLndhcm4oJ2luaXQ6IGkxOG5leHQgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4gWW91IHNob3VsZCBjYWxsIGluaXQganVzdCBvbmNlIScpO1xuICAgICAgICAgIF90aGlzMi5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoIV90aGlzMi5vcHRpb25zLmlzQ2xvbmUpIF90aGlzMi5sb2dnZXIubG9nKCdpbml0aWFsaXplZCcsIF90aGlzMi5vcHRpb25zKTtcbiAgICAgICAgICBfdGhpczIuZW1pdCgnaW5pdGlhbGl6ZWQnLCBfdGhpczIub3B0aW9ucyk7XG4gICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSh0KTtcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIHQpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoX3RoaXMyLmxhbmd1YWdlcyAmJiBfdGhpczIub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJICE9PSAndjEnICYmICFfdGhpczIuaXNJbml0aWFsaXplZCkgcmV0dXJuIGZpbmlzaChudWxsLCBfdGhpczIudC5iaW5kKF90aGlzMikpO1xuICAgICAgICBfdGhpczIuY2hhbmdlTGFuZ3VhZ2UoX3RoaXMyLm9wdGlvbnMubG5nLCBmaW5pc2gpO1xuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVzb3VyY2VzIHx8ICF0aGlzLm9wdGlvbnMuaW5pdEltbWVkaWF0ZSkge1xuICAgICAgICBsb2FkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRUaW1lb3V0KGxvYWQsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkUmVzb3VyY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRSZXNvdXJjZXMobGFuZ3VhZ2UpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBub29wO1xuICAgICAgdmFyIHVzZWRDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgdmFyIHVzZWRMbmcgPSB0eXBlb2YgbGFuZ3VhZ2UgPT09ICdzdHJpbmcnID8gbGFuZ3VhZ2UgOiB0aGlzLmxhbmd1YWdlO1xuICAgICAgaWYgKHR5cGVvZiBsYW5ndWFnZSA9PT0gJ2Z1bmN0aW9uJykgdXNlZENhbGxiYWNrID0gbGFuZ3VhZ2U7XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZXNvdXJjZXMgfHwgdGhpcy5vcHRpb25zLnBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzKSB7XG4gICAgICAgIGlmICh1c2VkTG5nICYmIHVzZWRMbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2NpbW9kZScpIHJldHVybiB1c2VkQ2FsbGJhY2soKTtcbiAgICAgICAgdmFyIHRvTG9hZCA9IFtdO1xuICAgICAgICB2YXIgYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKGxuZykge1xuICAgICAgICAgIGlmICghbG5nKSByZXR1cm47XG4gICAgICAgICAgdmFyIGxuZ3MgPSBfdGhpczMuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkobG5nKTtcbiAgICAgICAgICBsbmdzLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICAgIGlmICh0b0xvYWQuaW5kZXhPZihsKSA8IDApIHRvTG9hZC5wdXNoKGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoIXVzZWRMbmcpIHtcbiAgICAgICAgICB2YXIgZmFsbGJhY2tzID0gdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nKTtcbiAgICAgICAgICBmYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgICAgICAgcmV0dXJuIGFwcGVuZChsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhcHBlbmQodXNlZExuZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5wcmVsb2FkKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zLnByZWxvYWQuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgICAgICAgcmV0dXJuIGFwcGVuZChsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IubG9hZCh0b0xvYWQsIHRoaXMub3B0aW9ucy5ucywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICBpZiAoIWUgJiYgIV90aGlzMy5yZXNvbHZlZExhbmd1YWdlICYmIF90aGlzMy5sYW5ndWFnZSkgX3RoaXMzLnNldFJlc29sdmVkTGFuZ3VhZ2UoX3RoaXMzLmxhbmd1YWdlKTtcbiAgICAgICAgICB1c2VkQ2FsbGJhY2soZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXNlZENhbGxiYWNrKG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZWxvYWRSZXNvdXJjZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVsb2FkUmVzb3VyY2VzKGxuZ3MsIG5zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIGRlZmVycmVkID0gZGVmZXIoKTtcbiAgICAgIGlmICghbG5ncykgbG5ncyA9IHRoaXMubGFuZ3VhZ2VzO1xuICAgICAgaWYgKCFucykgbnMgPSB0aGlzLm9wdGlvbnMubnM7XG4gICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IG5vb3A7XG4gICAgICB0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IucmVsb2FkKGxuZ3MsIG5zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGRlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1c2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXNlKG1vZHVsZSkge1xuICAgICAgaWYgKCFtb2R1bGUpIHRocm93IG5ldyBFcnJvcignWW91IGFyZSBwYXNzaW5nIGFuIHVuZGVmaW5lZCBtb2R1bGUhIFBsZWFzZSBjaGVjayB0aGUgb2JqZWN0IHlvdSBhcmUgcGFzc2luZyB0byBpMThuZXh0LnVzZSgpJyk7XG4gICAgICBpZiAoIW1vZHVsZS50eXBlKSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBhcmUgcGFzc2luZyBhIHdyb25nIG1vZHVsZSEgUGxlYXNlIGNoZWNrIHRoZSBvYmplY3QgeW91IGFyZSBwYXNzaW5nIHRvIGkxOG5leHQudXNlKCknKTtcbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ2JhY2tlbmQnKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5iYWNrZW5kID0gbW9kdWxlO1xuICAgICAgfVxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAnbG9nZ2VyJyB8fCBtb2R1bGUubG9nICYmIG1vZHVsZS53YXJuICYmIG1vZHVsZS5lcnJvcikge1xuICAgICAgICB0aGlzLm1vZHVsZXMubG9nZ2VyID0gbW9kdWxlO1xuICAgICAgfVxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAnbGFuZ3VhZ2VEZXRlY3RvcicpIHtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3IgPSBtb2R1bGU7XG4gICAgICB9XG4gICAgICBpZiAobW9kdWxlLnR5cGUgPT09ICdpMThuRm9ybWF0Jykge1xuICAgICAgICB0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCA9IG1vZHVsZTtcbiAgICAgIH1cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ3Bvc3RQcm9jZXNzb3InKSB7XG4gICAgICAgIHBvc3RQcm9jZXNzb3IuYWRkUG9zdFByb2Nlc3Nvcihtb2R1bGUpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAnZm9ybWF0dGVyJykge1xuICAgICAgICB0aGlzLm1vZHVsZXMuZm9ybWF0dGVyID0gbW9kdWxlO1xuICAgICAgfVxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAnM3JkUGFydHknKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5leHRlcm5hbC5wdXNoKG1vZHVsZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0UmVzb2x2ZWRMYW5ndWFnZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRSZXNvbHZlZExhbmd1YWdlKGwpIHtcbiAgICAgIGlmICghbCB8fCAhdGhpcy5sYW5ndWFnZXMpIHJldHVybjtcbiAgICAgIGlmIChbJ2NpbW9kZScsICdkZXYnXS5pbmRleE9mKGwpID4gLTEpIHJldHVybjtcbiAgICAgIGZvciAodmFyIGxpID0gMDsgbGkgPCB0aGlzLmxhbmd1YWdlcy5sZW5ndGg7IGxpKyspIHtcbiAgICAgICAgdmFyIGxuZ0luTG5ncyA9IHRoaXMubGFuZ3VhZ2VzW2xpXTtcbiAgICAgICAgaWYgKFsnY2ltb2RlJywgJ2RldiddLmluZGV4T2YobG5nSW5MbmdzKSA+IC0xKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHRoaXMuc3RvcmUuaGFzTGFuZ3VhZ2VTb21lVHJhbnNsYXRpb25zKGxuZ0luTG5ncykpIHtcbiAgICAgICAgICB0aGlzLnJlc29sdmVkTGFuZ3VhZ2UgPSBsbmdJbkxuZ3M7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiY2hhbmdlTGFuZ3VhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hhbmdlTGFuZ3VhZ2UobG5nLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG4gICAgICB0aGlzLmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvID0gbG5nO1xuICAgICAgdmFyIGRlZmVycmVkID0gZGVmZXIoKTtcbiAgICAgIHRoaXMuZW1pdCgnbGFuZ3VhZ2VDaGFuZ2luZycsIGxuZyk7XG4gICAgICB2YXIgc2V0TG5nUHJvcHMgPSBmdW5jdGlvbiBzZXRMbmdQcm9wcyhsKSB7XG4gICAgICAgIF90aGlzNC5sYW5ndWFnZSA9IGw7XG4gICAgICAgIF90aGlzNC5sYW5ndWFnZXMgPSBfdGhpczQuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkobCk7XG4gICAgICAgIF90aGlzNC5yZXNvbHZlZExhbmd1YWdlID0gdW5kZWZpbmVkO1xuICAgICAgICBfdGhpczQuc2V0UmVzb2x2ZWRMYW5ndWFnZShsKTtcbiAgICAgIH07XG4gICAgICB2YXIgZG9uZSA9IGZ1bmN0aW9uIGRvbmUoZXJyLCBsKSB7XG4gICAgICAgIGlmIChsKSB7XG4gICAgICAgICAgc2V0TG5nUHJvcHMobCk7XG4gICAgICAgICAgX3RoaXM0LnRyYW5zbGF0b3IuY2hhbmdlTGFuZ3VhZ2UobCk7XG4gICAgICAgICAgX3RoaXM0LmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvID0gdW5kZWZpbmVkO1xuICAgICAgICAgIF90aGlzNC5lbWl0KCdsYW5ndWFnZUNoYW5nZWQnLCBsKTtcbiAgICAgICAgICBfdGhpczQubG9nZ2VyLmxvZygnbGFuZ3VhZ2VDaGFuZ2VkJywgbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXM0LmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGRlZmVycmVkLnJlc29sdmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQudC5hcHBseShfdGhpczQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVyciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQudC5hcHBseShfdGhpczQsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHZhciBzZXRMbmcgPSBmdW5jdGlvbiBzZXRMbmcobG5ncykge1xuICAgICAgICBpZiAoIWxuZyAmJiAhbG5ncyAmJiBfdGhpczQuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvcikgbG5ncyA9IFtdO1xuICAgICAgICB2YXIgbCA9IHR5cGVvZiBsbmdzID09PSAnc3RyaW5nJyA/IGxuZ3MgOiBfdGhpczQuc2VydmljZXMubGFuZ3VhZ2VVdGlscy5nZXRCZXN0TWF0Y2hGcm9tQ29kZXMobG5ncyk7XG4gICAgICAgIGlmIChsKSB7XG4gICAgICAgICAgaWYgKCFfdGhpczQubGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgIHNldExuZ1Byb3BzKGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIV90aGlzNC50cmFuc2xhdG9yLmxhbmd1YWdlKSBfdGhpczQudHJhbnNsYXRvci5jaGFuZ2VMYW5ndWFnZShsKTtcbiAgICAgICAgICBpZiAoX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IgJiYgX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuY2FjaGVVc2VyTGFuZ3VhZ2UpIF90aGlzNC5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmNhY2hlVXNlckxhbmd1YWdlKGwpO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzNC5sb2FkUmVzb3VyY2VzKGwsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBkb25lKGVyciwgbCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGlmICghbG5nICYmIHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciAmJiAhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jKSB7XG4gICAgICAgIHNldExuZyh0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KCkpO1xuICAgICAgfSBlbHNlIGlmICghbG5nICYmIHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciAmJiB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuYXN5bmMpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3Rvci5kZXRlY3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdCgpLnRoZW4oc2V0TG5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KHNldExuZyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldExuZyhsbmcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRGaXhlZFRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Rml4ZWRUKGxuZywgbnMsIGtleVByZWZpeCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG4gICAgICB2YXIgZml4ZWRUID0gZnVuY3Rpb24gZml4ZWRUKGtleSwgb3B0cykge1xuICAgICAgICB2YXIgb3B0aW9ucztcbiAgICAgICAgaWYgKF90eXBlb2Yob3B0cykgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4zID4gMiA/IF9sZW4zIC0gMiA6IDApLCBfa2V5MyA9IDI7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgICAgIHJlc3RbX2tleTMgLSAyXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wdGlvbnMgPSBfdGhpczUub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcihba2V5LCBvcHRzXS5jb25jYXQocmVzdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMgPSBfb2JqZWN0U3ByZWFkKHt9LCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmxuZyA9IG9wdGlvbnMubG5nIHx8IGZpeGVkVC5sbmc7XG4gICAgICAgIG9wdGlvbnMubG5ncyA9IG9wdGlvbnMubG5ncyB8fCBmaXhlZFQubG5ncztcbiAgICAgICAgb3B0aW9ucy5ucyA9IG9wdGlvbnMubnMgfHwgZml4ZWRULm5zO1xuICAgICAgICBvcHRpb25zLmtleVByZWZpeCA9IG9wdGlvbnMua2V5UHJlZml4IHx8IGtleVByZWZpeCB8fCBmaXhlZFQua2V5UHJlZml4O1xuICAgICAgICB2YXIga2V5U2VwYXJhdG9yID0gX3RoaXM1Lm9wdGlvbnMua2V5U2VwYXJhdG9yIHx8ICcuJztcbiAgICAgICAgdmFyIHJlc3VsdEtleTtcbiAgICAgICAgaWYgKG9wdGlvbnMua2V5UHJlZml4ICYmIEFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgIHJlc3VsdEtleSA9IGtleS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChvcHRpb25zLmtleVByZWZpeCkuY29uY2F0KGtleVNlcGFyYXRvcikuY29uY2F0KGspO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdEtleSA9IG9wdGlvbnMua2V5UHJlZml4ID8gXCJcIi5jb25jYXQob3B0aW9ucy5rZXlQcmVmaXgpLmNvbmNhdChrZXlTZXBhcmF0b3IpLmNvbmNhdChrZXkpIDoga2V5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpczUudChyZXN1bHRLZXksIG9wdGlvbnMpO1xuICAgICAgfTtcbiAgICAgIGlmICh0eXBlb2YgbG5nID09PSAnc3RyaW5nJykge1xuICAgICAgICBmaXhlZFQubG5nID0gbG5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZml4ZWRULmxuZ3MgPSBsbmc7XG4gICAgICB9XG4gICAgICBmaXhlZFQubnMgPSBucztcbiAgICAgIGZpeGVkVC5rZXlQcmVmaXggPSBrZXlQcmVmaXg7XG4gICAgICByZXR1cm4gZml4ZWRUO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHQoKSB7XG4gICAgICB2YXIgX3RoaXMkdHJhbnNsYXRvcjtcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0b3IgJiYgKF90aGlzJHRyYW5zbGF0b3IgPSB0aGlzLnRyYW5zbGF0b3IpLnRyYW5zbGF0ZS5hcHBseShfdGhpcyR0cmFuc2xhdG9yLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJleGlzdHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXhpc3RzKCkge1xuICAgICAgdmFyIF90aGlzJHRyYW5zbGF0b3IyO1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRvciAmJiAoX3RoaXMkdHJhbnNsYXRvcjIgPSB0aGlzLnRyYW5zbGF0b3IpLmV4aXN0cy5hcHBseShfdGhpcyR0cmFuc2xhdG9yMiwgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2V0RGVmYXVsdE5hbWVzcGFjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzZXREZWZhdWx0TmFtZXNwYWNlKG5zKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuZGVmYXVsdE5TID0gbnM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhhc0xvYWRlZE5hbWVzcGFjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNMb2FkZWROYW1lc3BhY2UobnMpIHtcbiAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuZXh0IHdhcyBub3QgaW5pdGlhbGl6ZWQnLCB0aGlzLmxhbmd1YWdlcyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5sYW5ndWFnZXMgfHwgIXRoaXMubGFuZ3VhZ2VzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdoYXNMb2FkZWROYW1lc3BhY2U6IGkxOG4ubGFuZ3VhZ2VzIHdlcmUgdW5kZWZpbmVkIG9yIGVtcHR5JywgdGhpcy5sYW5ndWFnZXMpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB2YXIgbG5nID0gdGhpcy5yZXNvbHZlZExhbmd1YWdlIHx8IHRoaXMubGFuZ3VhZ2VzWzBdO1xuICAgICAgdmFyIGZhbGxiYWNrTG5nID0gdGhpcy5vcHRpb25zID8gdGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nIDogZmFsc2U7XG4gICAgICB2YXIgbGFzdExuZyA9IHRoaXMubGFuZ3VhZ2VzW3RoaXMubGFuZ3VhZ2VzLmxlbmd0aCAtIDFdO1xuICAgICAgaWYgKGxuZy50b0xvd2VyQ2FzZSgpID09PSAnY2ltb2RlJykgcmV0dXJuIHRydWU7XG4gICAgICB2YXIgbG9hZE5vdFBlbmRpbmcgPSBmdW5jdGlvbiBsb2FkTm90UGVuZGluZyhsLCBuKSB7XG4gICAgICAgIHZhciBsb2FkU3RhdGUgPSBfdGhpczYuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5zdGF0ZVtcIlwiLmNvbmNhdChsLCBcInxcIikuY29uY2F0KG4pXTtcbiAgICAgICAgcmV0dXJuIGxvYWRTdGF0ZSA9PT0gLTEgfHwgbG9hZFN0YXRlID09PSAyO1xuICAgICAgfTtcbiAgICAgIGlmIChvcHRpb25zLnByZWNoZWNrKSB7XG4gICAgICAgIHZhciBwcmVSZXN1bHQgPSBvcHRpb25zLnByZWNoZWNrKHRoaXMsIGxvYWROb3RQZW5kaW5nKTtcbiAgICAgICAgaWYgKHByZVJlc3VsdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcHJlUmVzdWx0O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaGFzUmVzb3VyY2VCdW5kbGUobG5nLCBucykpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKCF0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IuYmFja2VuZCB8fCB0aGlzLm9wdGlvbnMucmVzb3VyY2VzICYmICF0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKGxvYWROb3RQZW5kaW5nKGxuZywgbnMpICYmICghZmFsbGJhY2tMbmcgfHwgbG9hZE5vdFBlbmRpbmcobGFzdExuZywgbnMpKSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWROYW1lc3BhY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWROYW1lc3BhY2VzKG5zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG4gICAgICB2YXIgZGVmZXJyZWQgPSBkZWZlcigpO1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMubnMpIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG5zID09PSAnc3RyaW5nJykgbnMgPSBbbnNdO1xuICAgICAgbnMuZm9yRWFjaChmdW5jdGlvbiAobikge1xuICAgICAgICBpZiAoX3RoaXM3Lm9wdGlvbnMubnMuaW5kZXhPZihuKSA8IDApIF90aGlzNy5vcHRpb25zLm5zLnB1c2gobik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9hZFJlc291cmNlcyhmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGRlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhlcnIpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGVmZXJyZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWRMYW5ndWFnZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZExhbmd1YWdlcyhsbmdzLCBjYWxsYmFjaykge1xuICAgICAgdmFyIGRlZmVycmVkID0gZGVmZXIoKTtcbiAgICAgIGlmICh0eXBlb2YgbG5ncyA9PT0gJ3N0cmluZycpIGxuZ3MgPSBbbG5nc107XG4gICAgICB2YXIgcHJlbG9hZGVkID0gdGhpcy5vcHRpb25zLnByZWxvYWQgfHwgW107XG4gICAgICB2YXIgbmV3TG5ncyA9IGxuZ3MuZmlsdGVyKGZ1bmN0aW9uIChsbmcpIHtcbiAgICAgICAgcmV0dXJuIHByZWxvYWRlZC5pbmRleE9mKGxuZykgPCAwO1xuICAgICAgfSk7XG4gICAgICBpZiAoIW5ld0xuZ3MubGVuZ3RoKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRpb25zLnByZWxvYWQgPSBwcmVsb2FkZWQuY29uY2F0KG5ld0xuZ3MpO1xuICAgICAgdGhpcy5sb2FkUmVzb3VyY2VzKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKGVycik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZWZlcnJlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGlyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRpcihsbmcpIHtcbiAgICAgIGlmICghbG5nKSBsbmcgPSB0aGlzLnJlc29sdmVkTGFuZ3VhZ2UgfHwgKHRoaXMubGFuZ3VhZ2VzICYmIHRoaXMubGFuZ3VhZ2VzLmxlbmd0aCA+IDAgPyB0aGlzLmxhbmd1YWdlc1swXSA6IHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgaWYgKCFsbmcpIHJldHVybiAncnRsJztcbiAgICAgIHZhciBydGxMbmdzID0gWydhcicsICdzaHUnLCAnc3FyJywgJ3NzaCcsICd4YWEnLCAneWhkJywgJ3l1ZCcsICdhYW8nLCAnYWJoJywgJ2FidicsICdhY20nLCAnYWNxJywgJ2FjdycsICdhY3gnLCAnYWN5JywgJ2FkZicsICdhZHMnLCAnYWViJywgJ2FlYycsICdhZmInLCAnYWpwJywgJ2FwYycsICdhcGQnLCAnYXJiJywgJ2FycScsICdhcnMnLCAnYXJ5JywgJ2FyeicsICdhdXonLCAnYXZsJywgJ2F5aCcsICdheWwnLCAnYXluJywgJ2F5cCcsICdiYnonLCAncGdhJywgJ2hlJywgJ2l3JywgJ3BzJywgJ3BidCcsICdwYnUnLCAncHN0JywgJ3BycCcsICdwcmQnLCAndWcnLCAndXInLCAneWRkJywgJ3lkcycsICd5aWgnLCAnamknLCAneWknLCAnaGJvJywgJ21lbicsICd4bW4nLCAnZmEnLCAnanByJywgJ3BlbycsICdwZXMnLCAncHJzJywgJ2R2JywgJ3NhbScsICdja2InXTtcbiAgICAgIHZhciBsYW5ndWFnZVV0aWxzID0gdGhpcy5zZXJ2aWNlcyAmJiB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMgfHwgbmV3IExhbmd1YWdlVXRpbChnZXQoKSk7XG4gICAgICByZXR1cm4gcnRsTG5ncy5pbmRleE9mKGxhbmd1YWdlVXRpbHMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUobG5nKSkgPiAtMSB8fCBsbmcudG9Mb3dlckNhc2UoKS5pbmRleE9mKCctYXJhYicpID4gMSA/ICdydGwnIDogJ2x0cic7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsb25lSW5zdGFuY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmVJbnN0YW5jZSgpIHtcbiAgICAgIHZhciBfdGhpczggPSB0aGlzO1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBub29wO1xuICAgICAgdmFyIG1lcmdlZE9wdGlvbnMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGhpcy5vcHRpb25zKSwgb3B0aW9ucyksIHtcbiAgICAgICAgaXNDbG9uZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICB2YXIgY2xvbmUgPSBuZXcgSTE4bihtZXJnZWRPcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLmRlYnVnICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5wcmVmaXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbG9uZS5sb2dnZXIgPSBjbG9uZS5sb2dnZXIuY2xvbmUob3B0aW9ucyk7XG4gICAgICB9XG4gICAgICB2YXIgbWVtYmVyc1RvQ29weSA9IFsnc3RvcmUnLCAnc2VydmljZXMnLCAnbGFuZ3VhZ2UnXTtcbiAgICAgIG1lbWJlcnNUb0NvcHkuZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgICAgICBjbG9uZVttXSA9IF90aGlzOFttXTtcbiAgICAgIH0pO1xuICAgICAgY2xvbmUuc2VydmljZXMgPSBfb2JqZWN0U3ByZWFkKHt9LCB0aGlzLnNlcnZpY2VzKTtcbiAgICAgIGNsb25lLnNlcnZpY2VzLnV0aWxzID0ge1xuICAgICAgICBoYXNMb2FkZWROYW1lc3BhY2U6IGNsb25lLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKGNsb25lKVxuICAgICAgfTtcbiAgICAgIGNsb25lLnRyYW5zbGF0b3IgPSBuZXcgVHJhbnNsYXRvcihjbG9uZS5zZXJ2aWNlcywgY2xvbmUub3B0aW9ucyk7XG4gICAgICBjbG9uZS50cmFuc2xhdG9yLm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCA+IDEgPyBfbGVuNCAtIDEgOiAwKSwgX2tleTQgPSAxOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5NCAtIDFdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICAgICAgfVxuICAgICAgICBjbG9uZS5lbWl0LmFwcGx5KGNsb25lLCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XG4gICAgICB9KTtcbiAgICAgIGNsb25lLmluaXQobWVyZ2VkT3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgY2xvbmUudHJhbnNsYXRvci5vcHRpb25zID0gY2xvbmUub3B0aW9ucztcbiAgICAgIGNsb25lLnRyYW5zbGF0b3IuYmFja2VuZENvbm5lY3Rvci5zZXJ2aWNlcy51dGlscyA9IHtcbiAgICAgICAgaGFzTG9hZGVkTmFtZXNwYWNlOiBjbG9uZS5oYXNMb2FkZWROYW1lc3BhY2UuYmluZChjbG9uZSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gY2xvbmU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRvSlNPTlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvcHRpb25zOiB0aGlzLm9wdGlvbnMsXG4gICAgICAgIHN0b3JlOiB0aGlzLnN0b3JlLFxuICAgICAgICBsYW5ndWFnZTogdGhpcy5sYW5ndWFnZSxcbiAgICAgICAgbGFuZ3VhZ2VzOiB0aGlzLmxhbmd1YWdlcyxcbiAgICAgICAgcmVzb2x2ZWRMYW5ndWFnZTogdGhpcy5yZXNvbHZlZExhbmd1YWdlXG4gICAgICB9O1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gSTE4bjtcbn0oRXZlbnRFbWl0dGVyKTtcbl9kZWZpbmVQcm9wZXJ0eShJMThuLCBcImNyZWF0ZUluc3RhbmNlXCIsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG5ldyBJMThuKG9wdGlvbnMsIGNhbGxiYWNrKTtcbn0pO1xudmFyIGluc3RhbmNlID0gSTE4bi5jcmVhdGVJbnN0YW5jZSgpO1xuaW5zdGFuY2UuY3JlYXRlSW5zdGFuY2UgPSBJMThuLmNyZWF0ZUluc3RhbmNlO1xuXG52YXIgY3JlYXRlSW5zdGFuY2UgPSBpbnN0YW5jZS5jcmVhdGVJbnN0YW5jZTtcbnZhciBkaXIgPSBpbnN0YW5jZS5kaXI7XG52YXIgaW5pdCA9IGluc3RhbmNlLmluaXQ7XG52YXIgbG9hZFJlc291cmNlcyA9IGluc3RhbmNlLmxvYWRSZXNvdXJjZXM7XG52YXIgcmVsb2FkUmVzb3VyY2VzID0gaW5zdGFuY2UucmVsb2FkUmVzb3VyY2VzO1xudmFyIHVzZSA9IGluc3RhbmNlLnVzZTtcbnZhciBjaGFuZ2VMYW5ndWFnZSA9IGluc3RhbmNlLmNoYW5nZUxhbmd1YWdlO1xudmFyIGdldEZpeGVkVCA9IGluc3RhbmNlLmdldEZpeGVkVDtcbnZhciB0ID0gaW5zdGFuY2UudDtcbnZhciBleGlzdHMgPSBpbnN0YW5jZS5leGlzdHM7XG52YXIgc2V0RGVmYXVsdE5hbWVzcGFjZSA9IGluc3RhbmNlLnNldERlZmF1bHROYW1lc3BhY2U7XG52YXIgaGFzTG9hZGVkTmFtZXNwYWNlID0gaW5zdGFuY2UuaGFzTG9hZGVkTmFtZXNwYWNlO1xudmFyIGxvYWROYW1lc3BhY2VzID0gaW5zdGFuY2UubG9hZE5hbWVzcGFjZXM7XG52YXIgbG9hZExhbmd1YWdlcyA9IGluc3RhbmNlLmxvYWRMYW5ndWFnZXM7XG5cbmV4cG9ydCB7IGNoYW5nZUxhbmd1YWdlLCBjcmVhdGVJbnN0YW5jZSwgaW5zdGFuY2UgYXMgZGVmYXVsdCwgZGlyLCBleGlzdHMsIGdldEZpeGVkVCwgaGFzTG9hZGVkTmFtZXNwYWNlLCBpbml0LCBsb2FkTGFuZ3VhZ2VzLCBsb2FkTmFtZXNwYWNlcywgbG9hZFJlc291cmNlcywgcmVsb2FkUmVzb3VyY2VzLCBzZXREZWZhdWx0TmFtZXNwYWNlLCB0LCB1c2UgfTtcbiIsImltcG9ydCBfY2xhc3NDYWxsQ2hlY2sgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY2xhc3NDYWxsQ2hlY2snO1xuaW1wb3J0IF9jcmVhdGVDbGFzcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcyc7XG5cbnZhciBhcnIgPSBbXTtcbnZhciBlYWNoID0gYXJyLmZvckVhY2g7XG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5mdW5jdGlvbiBkZWZhdWx0cyhvYmopIHtcbiAgZWFjaC5jYWxsKHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSwgZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgIGlmIChzb3VyY2UpIHtcbiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChvYmpbcHJvcF0gPT09IHVuZGVmaW5lZCkgb2JqW3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvYmo7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG52YXIgZmllbGRDb250ZW50UmVnRXhwID0gL15bXFx1MDAwOVxcdTAwMjAtXFx1MDA3ZVxcdTAwODAtXFx1MDBmZl0rJC87XG52YXIgc2VyaWFsaXplQ29va2llID0gZnVuY3Rpb24gc2VyaWFsaXplQ29va2llKG5hbWUsIHZhbCwgb3B0aW9ucykge1xuICB2YXIgb3B0ID0gb3B0aW9ucyB8fCB7fTtcbiAgb3B0LnBhdGggPSBvcHQucGF0aCB8fCAnLyc7XG4gIHZhciB2YWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudCh2YWwpO1xuICB2YXIgc3RyID0gXCJcIi5jb25jYXQobmFtZSwgXCI9XCIpLmNvbmNhdCh2YWx1ZSk7XG4gIGlmIChvcHQubWF4QWdlID4gMCkge1xuICAgIHZhciBtYXhBZ2UgPSBvcHQubWF4QWdlIC0gMDtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKG1heEFnZSkpIHRocm93IG5ldyBFcnJvcignbWF4QWdlIHNob3VsZCBiZSBhIE51bWJlcicpO1xuICAgIHN0ciArPSBcIjsgTWF4LUFnZT1cIi5jb25jYXQoTWF0aC5mbG9vcihtYXhBZ2UpKTtcbiAgfVxuICBpZiAob3B0LmRvbWFpbikge1xuICAgIGlmICghZmllbGRDb250ZW50UmVnRXhwLnRlc3Qob3B0LmRvbWFpbikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBkb21haW4gaXMgaW52YWxpZCcpO1xuICAgIH1cbiAgICBzdHIgKz0gXCI7IERvbWFpbj1cIi5jb25jYXQob3B0LmRvbWFpbik7XG4gIH1cbiAgaWYgKG9wdC5wYXRoKSB7XG4gICAgaWYgKCFmaWVsZENvbnRlbnRSZWdFeHAudGVzdChvcHQucGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBwYXRoIGlzIGludmFsaWQnKTtcbiAgICB9XG4gICAgc3RyICs9IFwiOyBQYXRoPVwiLmNvbmNhdChvcHQucGF0aCk7XG4gIH1cbiAgaWYgKG9wdC5leHBpcmVzKSB7XG4gICAgaWYgKHR5cGVvZiBvcHQuZXhwaXJlcy50b1VUQ1N0cmluZyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIGV4cGlyZXMgaXMgaW52YWxpZCcpO1xuICAgIH1cbiAgICBzdHIgKz0gXCI7IEV4cGlyZXM9XCIuY29uY2F0KG9wdC5leHBpcmVzLnRvVVRDU3RyaW5nKCkpO1xuICB9XG4gIGlmIChvcHQuaHR0cE9ubHkpIHN0ciArPSAnOyBIdHRwT25seSc7XG4gIGlmIChvcHQuc2VjdXJlKSBzdHIgKz0gJzsgU2VjdXJlJztcbiAgaWYgKG9wdC5zYW1lU2l0ZSkge1xuICAgIHZhciBzYW1lU2l0ZSA9IHR5cGVvZiBvcHQuc2FtZVNpdGUgPT09ICdzdHJpbmcnID8gb3B0LnNhbWVTaXRlLnRvTG93ZXJDYXNlKCkgOiBvcHQuc2FtZVNpdGU7XG4gICAgc3dpdGNoIChzYW1lU2l0ZSkge1xuICAgICAgY2FzZSB0cnVlOlxuICAgICAgICBzdHIgKz0gJzsgU2FtZVNpdGU9U3RyaWN0JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsYXgnOlxuICAgICAgICBzdHIgKz0gJzsgU2FtZVNpdGU9TGF4JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdHJpY3QnOlxuICAgICAgICBzdHIgKz0gJzsgU2FtZVNpdGU9U3RyaWN0JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdub25lJzpcbiAgICAgICAgc3RyICs9ICc7IFNhbWVTaXRlPU5vbmUnO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBzYW1lU2l0ZSBpcyBpbnZhbGlkJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHI7XG59O1xudmFyIGNvb2tpZSA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUobmFtZSwgdmFsdWUsIG1pbnV0ZXMsIGRvbWFpbikge1xuICAgIHZhciBjb29raWVPcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiB7XG4gICAgICBwYXRoOiAnLycsXG4gICAgICBzYW1lU2l0ZTogJ3N0cmljdCdcbiAgICB9O1xuICAgIGlmIChtaW51dGVzKSB7XG4gICAgICBjb29raWVPcHRpb25zLmV4cGlyZXMgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29va2llT3B0aW9ucy5leHBpcmVzLnNldFRpbWUoY29va2llT3B0aW9ucy5leHBpcmVzLmdldFRpbWUoKSArIG1pbnV0ZXMgKiA2MCAqIDEwMDApO1xuICAgIH1cbiAgICBpZiAoZG9tYWluKSBjb29raWVPcHRpb25zLmRvbWFpbiA9IGRvbWFpbjtcbiAgICBkb2N1bWVudC5jb29raWUgPSBzZXJpYWxpemVDb29raWUobmFtZSwgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSwgY29va2llT3B0aW9ucyk7XG4gIH0sXG4gIHJlYWQ6IGZ1bmN0aW9uIHJlYWQobmFtZSkge1xuICAgIHZhciBuYW1lRVEgPSBcIlwiLmNvbmNhdChuYW1lLCBcIj1cIik7XG4gICAgdmFyIGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSBjYVtpXTtcbiAgICAgIHdoaWxlIChjLmNoYXJBdCgwKSA9PT0gJyAnKSB7XG4gICAgICAgIGMgPSBjLnN1YnN0cmluZygxLCBjLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBpZiAoYy5pbmRleE9mKG5hbWVFUSkgPT09IDApIHJldHVybiBjLnN1YnN0cmluZyhuYW1lRVEubGVuZ3RoLCBjLmxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgdGhpcy5jcmVhdGUobmFtZSwgJycsIC0xKTtcbiAgfVxufTtcbnZhciBjb29raWUkMSA9IHtcbiAgbmFtZTogJ2Nvb2tpZScsXG4gIGxvb2t1cDogZnVuY3Rpb24gbG9va3VwKG9wdGlvbnMpIHtcbiAgICB2YXIgZm91bmQ7XG4gICAgaWYgKG9wdGlvbnMubG9va3VwQ29va2llICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBjID0gY29va2llLnJlYWQob3B0aW9ucy5sb29rdXBDb29raWUpO1xuICAgICAgaWYgKGMpIGZvdW5kID0gYztcbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kO1xuICB9LFxuICBjYWNoZVVzZXJMYW5ndWFnZTogZnVuY3Rpb24gY2FjaGVVc2VyTGFuZ3VhZ2UobG5nLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMubG9va3VwQ29va2llICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvb2tpZS5jcmVhdGUob3B0aW9ucy5sb29rdXBDb29raWUsIGxuZywgb3B0aW9ucy5jb29raWVNaW51dGVzLCBvcHRpb25zLmNvb2tpZURvbWFpbiwgb3B0aW9ucy5jb29raWVPcHRpb25zKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBxdWVyeXN0cmluZyA9IHtcbiAgbmFtZTogJ3F1ZXJ5c3RyaW5nJyxcbiAgbG9va3VwOiBmdW5jdGlvbiBsb29rdXAob3B0aW9ucykge1xuICAgIHZhciBmb3VuZDtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBzZWFyY2ggPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoO1xuICAgICAgaWYgKCF3aW5kb3cubG9jYXRpb24uc2VhcmNoICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoLmluZGV4T2YoJz8nKSA+IC0xKSB7XG4gICAgICAgIHNlYXJjaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cmluZyh3aW5kb3cubG9jYXRpb24uaGFzaC5pbmRleE9mKCc/JykpO1xuICAgICAgfVxuICAgICAgdmFyIHF1ZXJ5ID0gc2VhcmNoLnN1YnN0cmluZygxKTtcbiAgICAgIHZhciBwYXJhbXMgPSBxdWVyeS5zcGxpdCgnJicpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBvcyA9IHBhcmFtc1tpXS5pbmRleE9mKCc9Jyk7XG4gICAgICAgIGlmIChwb3MgPiAwKSB7XG4gICAgICAgICAgdmFyIGtleSA9IHBhcmFtc1tpXS5zdWJzdHJpbmcoMCwgcG9zKTtcbiAgICAgICAgICBpZiAoa2V5ID09PSBvcHRpb25zLmxvb2t1cFF1ZXJ5c3RyaW5nKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHBhcmFtc1tpXS5zdWJzdHJpbmcocG9zICsgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmb3VuZDtcbiAgfVxufTtcblxudmFyIGhhc0xvY2FsU3RvcmFnZVN1cHBvcnQgPSBudWxsO1xudmFyIGxvY2FsU3RvcmFnZUF2YWlsYWJsZSA9IGZ1bmN0aW9uIGxvY2FsU3RvcmFnZUF2YWlsYWJsZSgpIHtcbiAgaWYgKGhhc0xvY2FsU3RvcmFnZVN1cHBvcnQgIT09IG51bGwpIHJldHVybiBoYXNMb2NhbFN0b3JhZ2VTdXBwb3J0O1xuICB0cnkge1xuICAgIGhhc0xvY2FsU3RvcmFnZVN1cHBvcnQgPSB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UgIT09IG51bGw7XG4gICAgdmFyIHRlc3RLZXkgPSAnaTE4bmV4dC50cmFuc2xhdGUuYm9vJztcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0odGVzdEtleSwgJ2ZvbycpO1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0ZXN0S2V5KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGhhc0xvY2FsU3RvcmFnZVN1cHBvcnQgPSBmYWxzZTtcbiAgfVxuICByZXR1cm4gaGFzTG9jYWxTdG9yYWdlU3VwcG9ydDtcbn07XG52YXIgbG9jYWxTdG9yYWdlID0ge1xuICBuYW1lOiAnbG9jYWxTdG9yYWdlJyxcbiAgbG9va3VwOiBmdW5jdGlvbiBsb29rdXAob3B0aW9ucykge1xuICAgIHZhciBmb3VuZDtcbiAgICBpZiAob3B0aW9ucy5sb29rdXBMb2NhbFN0b3JhZ2UgJiYgbG9jYWxTdG9yYWdlQXZhaWxhYmxlKCkpIHtcbiAgICAgIHZhciBsbmcgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0ob3B0aW9ucy5sb29rdXBMb2NhbFN0b3JhZ2UpO1xuICAgICAgaWYgKGxuZykgZm91bmQgPSBsbmc7XG4gICAgfVxuICAgIHJldHVybiBmb3VuZDtcbiAgfSxcbiAgY2FjaGVVc2VyTGFuZ3VhZ2U6IGZ1bmN0aW9uIGNhY2hlVXNlckxhbmd1YWdlKGxuZywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmxvb2t1cExvY2FsU3RvcmFnZSAmJiBsb2NhbFN0b3JhZ2VBdmFpbGFibGUoKSkge1xuICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKG9wdGlvbnMubG9va3VwTG9jYWxTdG9yYWdlLCBsbmcpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIGhhc1Nlc3Npb25TdG9yYWdlU3VwcG9ydCA9IG51bGw7XG52YXIgc2Vzc2lvblN0b3JhZ2VBdmFpbGFibGUgPSBmdW5jdGlvbiBzZXNzaW9uU3RvcmFnZUF2YWlsYWJsZSgpIHtcbiAgaWYgKGhhc1Nlc3Npb25TdG9yYWdlU3VwcG9ydCAhPT0gbnVsbCkgcmV0dXJuIGhhc1Nlc3Npb25TdG9yYWdlU3VwcG9ydDtcbiAgdHJ5IHtcbiAgICBoYXNTZXNzaW9uU3RvcmFnZVN1cHBvcnQgPSB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSAhPT0gbnVsbDtcbiAgICB2YXIgdGVzdEtleSA9ICdpMThuZXh0LnRyYW5zbGF0ZS5ib28nO1xuICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRlc3RLZXksICdmb28nKTtcbiAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0ZXN0S2V5KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGhhc1Nlc3Npb25TdG9yYWdlU3VwcG9ydCA9IGZhbHNlO1xuICB9XG4gIHJldHVybiBoYXNTZXNzaW9uU3RvcmFnZVN1cHBvcnQ7XG59O1xudmFyIHNlc3Npb25TdG9yYWdlID0ge1xuICBuYW1lOiAnc2Vzc2lvblN0b3JhZ2UnLFxuICBsb29rdXA6IGZ1bmN0aW9uIGxvb2t1cChvcHRpb25zKSB7XG4gICAgdmFyIGZvdW5kO1xuICAgIGlmIChvcHRpb25zLmxvb2t1cFNlc3Npb25TdG9yYWdlICYmIHNlc3Npb25TdG9yYWdlQXZhaWxhYmxlKCkpIHtcbiAgICAgIHZhciBsbmcgPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShvcHRpb25zLmxvb2t1cFNlc3Npb25TdG9yYWdlKTtcbiAgICAgIGlmIChsbmcpIGZvdW5kID0gbG5nO1xuICAgIH1cbiAgICByZXR1cm4gZm91bmQ7XG4gIH0sXG4gIGNhY2hlVXNlckxhbmd1YWdlOiBmdW5jdGlvbiBjYWNoZVVzZXJMYW5ndWFnZShsbmcsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5sb29rdXBTZXNzaW9uU3RvcmFnZSAmJiBzZXNzaW9uU3RvcmFnZUF2YWlsYWJsZSgpKSB7XG4gICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShvcHRpb25zLmxvb2t1cFNlc3Npb25TdG9yYWdlLCBsbmcpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIG5hdmlnYXRvciQxID0ge1xuICBuYW1lOiAnbmF2aWdhdG9yJyxcbiAgbG9va3VwOiBmdW5jdGlvbiBsb29rdXAob3B0aW9ucykge1xuICAgIHZhciBmb3VuZCA9IFtdO1xuICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKG5hdmlnYXRvci5sYW5ndWFnZXMpIHtcbiAgICAgICAgLy8gY2hyb21lIG9ubHk7IG5vdCBhbiBhcnJheSwgc28gY2FuJ3QgdXNlIC5wdXNoLmFwcGx5IGluc3RlYWQgb2YgaXRlcmF0aW5nXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZvdW5kLnB1c2gobmF2aWdhdG9yLmxhbmd1YWdlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuYXZpZ2F0b3IudXNlckxhbmd1YWdlKSB7XG4gICAgICAgIGZvdW5kLnB1c2gobmF2aWdhdG9yLnVzZXJMYW5ndWFnZSk7XG4gICAgICB9XG4gICAgICBpZiAobmF2aWdhdG9yLmxhbmd1YWdlKSB7XG4gICAgICAgIGZvdW5kLnB1c2gobmF2aWdhdG9yLmxhbmd1YWdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kLmxlbmd0aCA+IDAgPyBmb3VuZCA6IHVuZGVmaW5lZDtcbiAgfVxufTtcblxudmFyIGh0bWxUYWcgPSB7XG4gIG5hbWU6ICdodG1sVGFnJyxcbiAgbG9va3VwOiBmdW5jdGlvbiBsb29rdXAob3B0aW9ucykge1xuICAgIHZhciBmb3VuZDtcbiAgICB2YXIgaHRtbFRhZyA9IG9wdGlvbnMuaHRtbFRhZyB8fCAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IG51bGwpO1xuICAgIGlmIChodG1sVGFnICYmIHR5cGVvZiBodG1sVGFnLmdldEF0dHJpYnV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZm91bmQgPSBodG1sVGFnLmdldEF0dHJpYnV0ZSgnbGFuZycpO1xuICAgIH1cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cbn07XG5cbnZhciBwYXRoID0ge1xuICBuYW1lOiAncGF0aCcsXG4gIGxvb2t1cDogZnVuY3Rpb24gbG9va3VwKG9wdGlvbnMpIHtcbiAgICB2YXIgZm91bmQ7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgbGFuZ3VhZ2UgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL1xcLyhbYS16QS1aLV0qKS9nKTtcbiAgICAgIGlmIChsYW5ndWFnZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb29rdXBGcm9tUGF0aEluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgbGFuZ3VhZ2Vbb3B0aW9ucy5sb29rdXBGcm9tUGF0aEluZGV4XSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvdW5kID0gbGFuZ3VhZ2Vbb3B0aW9ucy5sb29rdXBGcm9tUGF0aEluZGV4XS5yZXBsYWNlKCcvJywgJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvdW5kID0gbGFuZ3VhZ2VbMF0ucmVwbGFjZSgnLycsICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm91bmQ7XG4gIH1cbn07XG5cbnZhciBzdWJkb21haW4gPSB7XG4gIG5hbWU6ICdzdWJkb21haW4nLFxuICBsb29rdXA6IGZ1bmN0aW9uIGxvb2t1cChvcHRpb25zKSB7XG4gICAgLy8gSWYgZ2l2ZW4gZ2V0IHRoZSBzdWJkb21haW4gaW5kZXggZWxzZSAxXG4gICAgdmFyIGxvb2t1cEZyb21TdWJkb21haW5JbmRleCA9IHR5cGVvZiBvcHRpb25zLmxvb2t1cEZyb21TdWJkb21haW5JbmRleCA9PT0gJ251bWJlcicgPyBvcHRpb25zLmxvb2t1cEZyb21TdWJkb21haW5JbmRleCArIDEgOiAxO1xuICAgIC8vIGdldCBhbGwgbWF0Y2hlcyBpZiB3aW5kb3cubG9jYXRpb24uIGlzIGV4aXN0aW5nXG4gICAgLy8gZmlyc3QgaXRlbSBvZiBtYXRjaCBpcyB0aGUgbWF0Y2ggaXRzZWxmIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBmaXJzdCBncm91cCBtYWNodCB3aGljaCBzb3VsZCBiZSB0aGUgZmlyc3Qgc3ViZG9tYWluIG1hdGNoXG4gICAgLy8gaXMgdGhlIGhvc3RuYW1lIG5vIHB1YmxpYyBkb21haW4gZ2V0IHRoZSBvciBvcHRpb24gb2YgbG9jYWxob3N0XG4gICAgdmFyIGxhbmd1YWdlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSAmJiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUubWF0Y2goL14oXFx3ezIsNX0pXFwuKChbYS16MC05LV17MSw2M31cXC5bYS16XXsyLDZ9KXxsb2NhbGhvc3QpL2kpO1xuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gbWF0Y2ggKG51bGwpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoIWxhbmd1YWdlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIC8vIHJldHVybiB0aGUgZ2l2ZW4gZ3JvdXAgbWF0Y2hcbiAgICByZXR1cm4gbGFuZ3VhZ2VbbG9va3VwRnJvbVN1YmRvbWFpbkluZGV4XTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdHMoKSB7XG4gIHJldHVybiB7XG4gICAgb3JkZXI6IFsncXVlcnlzdHJpbmcnLCAnY29va2llJywgJ2xvY2FsU3RvcmFnZScsICdzZXNzaW9uU3RvcmFnZScsICduYXZpZ2F0b3InLCAnaHRtbFRhZyddLFxuICAgIGxvb2t1cFF1ZXJ5c3RyaW5nOiAnbG5nJyxcbiAgICBsb29rdXBDb29raWU6ICdpMThuZXh0JyxcbiAgICBsb29rdXBMb2NhbFN0b3JhZ2U6ICdpMThuZXh0TG5nJyxcbiAgICBsb29rdXBTZXNzaW9uU3RvcmFnZTogJ2kxOG5leHRMbmcnLFxuICAgIC8vIGNhY2hlIHVzZXIgbGFuZ3VhZ2VcbiAgICBjYWNoZXM6IFsnbG9jYWxTdG9yYWdlJ10sXG4gICAgZXhjbHVkZUNhY2hlRm9yOiBbJ2NpbW9kZSddXG4gICAgLy8gY29va2llTWludXRlczogMTAsXG4gICAgLy8gY29va2llRG9tYWluOiAnbXlEb21haW4nXG4gIH07XG59XG52YXIgQnJvd3NlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEJyb3dzZXIoc2VydmljZXMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJyb3dzZXIpO1xuICAgIHRoaXMudHlwZSA9ICdsYW5ndWFnZURldGVjdG9yJztcbiAgICB0aGlzLmRldGVjdG9ycyA9IHt9O1xuICAgIHRoaXMuaW5pdChzZXJ2aWNlcywgb3B0aW9ucyk7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKEJyb3dzZXIsIFt7XG4gICAga2V5OiBcImluaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdChzZXJ2aWNlcykge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgICAgdmFyIGkxOG5PcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICAgIHRoaXMuc2VydmljZXMgPSBzZXJ2aWNlcztcbiAgICAgIHRoaXMub3B0aW9ucyA9IGRlZmF1bHRzKG9wdGlvbnMsIHRoaXMub3B0aW9ucyB8fCB7fSwgZ2V0RGVmYXVsdHMoKSk7XG5cbiAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmxvb2t1cEZyb21VcmxJbmRleCkgdGhpcy5vcHRpb25zLmxvb2t1cEZyb21QYXRoSW5kZXggPSB0aGlzLm9wdGlvbnMubG9va3VwRnJvbVVybEluZGV4O1xuICAgICAgdGhpcy5pMThuT3B0aW9ucyA9IGkxOG5PcHRpb25zO1xuICAgICAgdGhpcy5hZGREZXRlY3Rvcihjb29raWUkMSk7XG4gICAgICB0aGlzLmFkZERldGVjdG9yKHF1ZXJ5c3RyaW5nKTtcbiAgICAgIHRoaXMuYWRkRGV0ZWN0b3IobG9jYWxTdG9yYWdlKTtcbiAgICAgIHRoaXMuYWRkRGV0ZWN0b3Ioc2Vzc2lvblN0b3JhZ2UpO1xuICAgICAgdGhpcy5hZGREZXRlY3RvcihuYXZpZ2F0b3IkMSk7XG4gICAgICB0aGlzLmFkZERldGVjdG9yKGh0bWxUYWcpO1xuICAgICAgdGhpcy5hZGREZXRlY3RvcihwYXRoKTtcbiAgICAgIHRoaXMuYWRkRGV0ZWN0b3Ioc3ViZG9tYWluKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkRGV0ZWN0b3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkRGV0ZWN0b3IoZGV0ZWN0b3IpIHtcbiAgICAgIHRoaXMuZGV0ZWN0b3JzW2RldGVjdG9yLm5hbWVdID0gZGV0ZWN0b3I7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRldGVjdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBkZXRlY3QoZGV0ZWN0aW9uT3JkZXIpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICBpZiAoIWRldGVjdGlvbk9yZGVyKSBkZXRlY3Rpb25PcmRlciA9IHRoaXMub3B0aW9ucy5vcmRlcjtcbiAgICAgIHZhciBkZXRlY3RlZCA9IFtdO1xuICAgICAgZGV0ZWN0aW9uT3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoZGV0ZWN0b3JOYW1lKSB7XG4gICAgICAgIGlmIChfdGhpcy5kZXRlY3RvcnNbZGV0ZWN0b3JOYW1lXSkge1xuICAgICAgICAgIHZhciBsb29rdXAgPSBfdGhpcy5kZXRlY3RvcnNbZGV0ZWN0b3JOYW1lXS5sb29rdXAoX3RoaXMub3B0aW9ucyk7XG4gICAgICAgICAgaWYgKGxvb2t1cCAmJiB0eXBlb2YgbG9va3VwID09PSAnc3RyaW5nJykgbG9va3VwID0gW2xvb2t1cF07XG4gICAgICAgICAgaWYgKGxvb2t1cCkgZGV0ZWN0ZWQgPSBkZXRlY3RlZC5jb25jYXQobG9va3VwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEJlc3RNYXRjaEZyb21Db2RlcykgcmV0dXJuIGRldGVjdGVkOyAvLyBuZXcgaTE4bmV4dCB2MTkuNS4wXG4gICAgICByZXR1cm4gZGV0ZWN0ZWQubGVuZ3RoID4gMCA/IGRldGVjdGVkWzBdIDogbnVsbDsgLy8gYSBsaXR0bGUgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjYWNoZVVzZXJMYW5ndWFnZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjYWNoZVVzZXJMYW5ndWFnZShsbmcsIGNhY2hlcykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgICBpZiAoIWNhY2hlcykgY2FjaGVzID0gdGhpcy5vcHRpb25zLmNhY2hlcztcbiAgICAgIGlmICghY2FjaGVzKSByZXR1cm47XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmV4Y2x1ZGVDYWNoZUZvciAmJiB0aGlzLm9wdGlvbnMuZXhjbHVkZUNhY2hlRm9yLmluZGV4T2YobG5nKSA+IC0xKSByZXR1cm47XG4gICAgICBjYWNoZXMuZm9yRWFjaChmdW5jdGlvbiAoY2FjaGVOYW1lKSB7XG4gICAgICAgIGlmIChfdGhpczIuZGV0ZWN0b3JzW2NhY2hlTmFtZV0pIF90aGlzMi5kZXRlY3RvcnNbY2FjaGVOYW1lXS5jYWNoZVVzZXJMYW5ndWFnZShsbmcsIF90aGlzMi5vcHRpb25zKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gQnJvd3Nlcjtcbn0oKTtcbkJyb3dzZXIudHlwZSA9ICdsYW5ndWFnZURldGVjdG9yJztcblxuZXhwb3J0IHsgQnJvd3NlciBhcyBkZWZhdWx0IH07XG4iLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfSwgX3R5cGVvZihvYmopOyB9XG52YXIgYXJyID0gW107XG52YXIgZWFjaCA9IGFyci5mb3JFYWNoO1xudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRzKG9iaikge1xuICBlYWNoLmNhbGwoc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLCBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKG9ialtwcm9wXSA9PT0gdW5kZWZpbmVkKSBvYmpbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG9iajtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoYXNYTUxIdHRwUmVxdWVzdCgpIHtcbiAgcmV0dXJuIHR5cGVvZiBYTUxIdHRwUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJyB8fCAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoWE1MSHR0cFJlcXVlc3QpKSA9PT0gJ29iamVjdCc7XG59XG5mdW5jdGlvbiBpc1Byb21pc2UobWF5YmVQcm9taXNlKSB7XG4gIHJldHVybiAhIW1heWJlUHJvbWlzZSAmJiB0eXBlb2YgbWF5YmVQcm9taXNlLnRoZW4gPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnQgZnVuY3Rpb24gbWFrZVByb21pc2UobWF5YmVQcm9taXNlKSB7XG4gIGlmIChpc1Byb21pc2UobWF5YmVQcm9taXNlKSkge1xuICAgIHJldHVybiBtYXliZVByb21pc2U7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYXliZVByb21pc2UpO1xufSIsInZhciBnbG9iYWwgPSB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcztcbnZhciBfX3NlbGZfXyA9IChmdW5jdGlvbiAoKSB7XG5mdW5jdGlvbiBGKCkge1xudGhpcy5mZXRjaCA9IGZhbHNlO1xudGhpcy5ET01FeGNlcHRpb24gPSBnbG9iYWwuRE9NRXhjZXB0aW9uXG59XG5GLnByb3RvdHlwZSA9IGdsb2JhbDtcbnJldHVybiBuZXcgRigpO1xufSkoKTtcbihmdW5jdGlvbihzZWxmKSB7XG5cbnZhciBpcnJlbGV2YW50ID0gKGZ1bmN0aW9uIChleHBvcnRzKSB7XG5cbiAgdmFyIHN1cHBvcnQgPSB7XG4gICAgc2VhcmNoUGFyYW1zOiAnVVJMU2VhcmNoUGFyYW1zJyBpbiBzZWxmLFxuICAgIGl0ZXJhYmxlOiAnU3ltYm9sJyBpbiBzZWxmICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICAgIGJsb2I6XG4gICAgICAnRmlsZVJlYWRlcicgaW4gc2VsZiAmJlxuICAgICAgJ0Jsb2InIGluIHNlbGYgJiZcbiAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuZXcgQmxvYigpO1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSkoKSxcbiAgICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBzZWxmLFxuICAgIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIHNlbGZcbiAgfTtcblxuICBmdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxuICB9XG5cbiAgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIpIHtcbiAgICB2YXIgdmlld0NsYXNzZXMgPSBbXG4gICAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAgICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICAgJ1tvYmplY3QgRmxvYXQ2NEFycmF5XSdcbiAgICBdO1xuXG4gICAgdmFyIGlzQXJyYXlCdWZmZXJWaWV3ID1cbiAgICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgICAgZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7XG4gICAgfVxuICAgIGlmICgvW15hLXowLTlcXC0jJCUmJyorLl5fYHx+XS9pLnRlc3QobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVyIGluIGhlYWRlciBmaWVsZCBuYW1lJylcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG4gIGZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gICAgdmFyIGl0ZXJhdG9yID0ge1xuICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KCk7XG4gICAgICAgIHJldHVybiB7ZG9uZTogdmFsdWUgPT09IHVuZGVmaW5lZCwgdmFsdWU6IHZhbHVlfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZXJhdG9yXG4gIH1cblxuICBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICB0aGlzLm1hcCA9IHt9O1xuXG4gICAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBoZWFkZXJzLmZvckVhY2goZnVuY3Rpb24oaGVhZGVyKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKTtcbiAgICAgIH0sIHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pO1xuICAgICAgfSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcbiAgICB2YWx1ZSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXTtcbiAgICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldO1xuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcbiAgICByZXR1cm4gdGhpcy5oYXMobmFtZSkgPyB0aGlzLm1hcFtuYW1lXSA6IG51bGxcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG4gIH07XG5cbiAgSGVhZGVycy5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgfTtcblxuICBIZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIGl0ZW1zLnB1c2gobmFtZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaXRlbXMucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHtcbiAgICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICB9O1xuXG4gIGlmIChzdXBwb3J0Lml0ZXJhYmxlKSB7XG4gICAgSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXM7XG4gIH1cblxuICBmdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gICAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgICB9XG4gICAgYm9keS5ib2R5VXNlZCA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXNvbHZlKHJlYWRlci5yZXN1bHQpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpO1xuICAgICAgfTtcbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpO1xuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEJsb2JBc1RleHQoYmxvYikge1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcik7XG4gICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYik7XG4gICAgcmV0dXJuIHByb21pc2VcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmlldy5sZW5ndGg7IGkrKykge1xuICAgICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gY2hhcnMuam9pbignJylcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1ZmZlckNsb25lKGJ1Zikge1xuICAgIGlmIChidWYuc2xpY2UpIHtcbiAgICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYuYnl0ZUxlbmd0aCk7XG4gICAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKTtcbiAgICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIEJvZHkoKSB7XG4gICAgdGhpcy5ib2R5VXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5faW5pdEJvZHkgPSBmdW5jdGlvbihib2R5KSB7XG4gICAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHk7XG4gICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgdGhpcy5fYm9keVRleHQgPSAnJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUJsb2IgPSBib2R5O1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHk7XG4gICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuc2VhcmNoUGFyYW1zICYmIFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkudG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5hcnJheUJ1ZmZlciAmJiBzdXBwb3J0LmJsb2IgJiYgaXNEYXRhVmlldyhib2R5KSkge1xuICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5LmJ1ZmZlcik7XG4gICAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pO1xuICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9ib2R5VGV4dCA9IGJvZHkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYm9keSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QmxvYiAmJiB0aGlzLl9ib2R5QmxvYi50eXBlKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgdGhpcy5fYm9keUJsb2IudHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHN1cHBvcnQuYmxvYikge1xuICAgICAgdGhpcy5ibG9iID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpO1xuICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJldHVybiBjb25zdW1lZCh0aGlzKSB8fCBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpO1xuICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChzdXBwb3J0LmZvcm1EYXRhKSB7XG4gICAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQoKS50aGVuKGRlY29kZSlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5qc29uID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG4gIHZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddO1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZChtZXRob2QpIHtcbiAgICB2YXIgdXBjYXNlZCA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiBtZXRob2RzLmluZGV4T2YodXBjYXNlZCkgPiAtMSA/IHVwY2FzZWQgOiBtZXRob2RcbiAgfVxuXG4gIGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIgYm9keSA9IG9wdGlvbnMuYm9keTtcblxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgICAgfVxuICAgICAgdGhpcy51cmwgPSBpbnB1dC51cmw7XG4gICAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHM7XG4gICAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhpbnB1dC5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubWV0aG9kID0gaW5wdXQubWV0aG9kO1xuICAgICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZTtcbiAgICAgIHRoaXMuc2lnbmFsID0gaW5wdXQuc2lnbmFsO1xuICAgICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXQ7XG4gICAgICAgIGlucHV0LmJvZHlVc2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cmwgPSBTdHJpbmcoaW5wdXQpO1xuICAgIH1cblxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJztcbiAgICBpZiAob3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLmhlYWRlcnMpIHtcbiAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgfVxuICAgIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKTtcbiAgICB0aGlzLm1vZGUgPSBvcHRpb25zLm1vZGUgfHwgdGhpcy5tb2RlIHx8IG51bGw7XG4gICAgdGhpcy5zaWduYWwgPSBvcHRpb25zLnNpZ25hbCB8fCB0aGlzLnNpZ25hbDtcbiAgICB0aGlzLnJlZmVycmVyID0gbnVsbDtcblxuICAgIGlmICgodGhpcy5tZXRob2QgPT09ICdHRVQnIHx8IHRoaXMubWV0aG9kID09PSAnSEVBRCcpICYmIGJvZHkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgICB9XG4gICAgdGhpcy5faW5pdEJvZHkoYm9keSk7XG4gIH1cblxuICBSZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7Ym9keTogdGhpcy5fYm9keUluaXR9KVxuICB9O1xuXG4gIGZ1bmN0aW9uIGRlY29kZShib2R5KSB7XG4gICAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcbiAgICBib2R5XG4gICAgICAudHJpbSgpXG4gICAgICAuc3BsaXQoJyYnKVxuICAgICAgLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKTtcbiAgICAgICAgICB2YXIgbmFtZSA9IHNwbGl0LnNoaWZ0KCkucmVwbGFjZSgvXFwrL2csICcgJyk7XG4gICAgICAgICAgdmFyIHZhbHVlID0gc3BsaXQuam9pbignPScpLnJlcGxhY2UoL1xcKy9nLCAnICcpO1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHJldHVybiBmb3JtXG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICAgIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcbiAgICAvLyBSZXBsYWNlIGluc3RhbmNlcyBvZiBcXHJcXG4gYW5kIFxcbiBmb2xsb3dlZCBieSBhdCBsZWFzdCBvbmUgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIgd2l0aCBhIHNwYWNlXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjJcbiAgICB2YXIgcHJlUHJvY2Vzc2VkSGVhZGVycyA9IHJhd0hlYWRlcnMucmVwbGFjZSgvXFxyP1xcbltcXHQgXSsvZywgJyAnKTtcbiAgICBwcmVQcm9jZXNzZWRIZWFkZXJzLnNwbGl0KC9cXHI/XFxuLykuZm9yRWFjaChmdW5jdGlvbihsaW5lKSB7XG4gICAgICB2YXIgcGFydHMgPSBsaW5lLnNwbGl0KCc6Jyk7XG4gICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKCk7XG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHBhcnRzLmpvaW4oJzonKS50cmltKCk7XG4gICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cblxuICBCb2R5LmNhbGwoUmVxdWVzdC5wcm90b3R5cGUpO1xuXG4gIGZ1bmN0aW9uIFJlc3BvbnNlKGJvZHlJbml0LCBvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gJ2RlZmF1bHQnO1xuICAgIHRoaXMuc3RhdHVzID0gb3B0aW9ucy5zdGF0dXMgPT09IHVuZGVmaW5lZCA/IDIwMCA6IG9wdGlvbnMuc3RhdHVzO1xuICAgIHRoaXMub2sgPSB0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCAzMDA7XG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJ3N0YXR1c1RleHQnIGluIG9wdGlvbnMgPyBvcHRpb25zLnN0YXR1c1RleHQgOiAnT0snO1xuICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybCB8fCAnJztcbiAgICB0aGlzLl9pbml0Qm9keShib2R5SW5pdCk7XG4gIH1cblxuICBCb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKTtcblxuICBSZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHRoaXMuX2JvZHlJbml0LCB7XG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgc3RhdHVzVGV4dDogdGhpcy5zdGF0dXNUZXh0LFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModGhpcy5oZWFkZXJzKSxcbiAgICAgIHVybDogdGhpcy51cmxcbiAgICB9KVxuICB9O1xuXG4gIFJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSk7XG4gICAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcic7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH07XG5cbiAgdmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdO1xuXG4gIFJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24odXJsLCBzdGF0dXMpIHtcbiAgICBpZiAocmVkaXJlY3RTdGF0dXNlcy5pbmRleE9mKHN0YXR1cykgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7c3RhdHVzOiBzdGF0dXMsIGhlYWRlcnM6IHtsb2NhdGlvbjogdXJsfX0pXG4gIH07XG5cbiAgZXhwb3J0cy5ET01FeGNlcHRpb24gPSBzZWxmLkRPTUV4Y2VwdGlvbjtcbiAgdHJ5IHtcbiAgICBuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXhwb3J0cy5ET01FeGNlcHRpb24gPSBmdW5jdGlvbihtZXNzYWdlLCBuYW1lKSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgIHZhciBlcnJvciA9IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgdGhpcy5zdGFjayA9IGVycm9yLnN0YWNrO1xuICAgIH07XG4gICAgZXhwb3J0cy5ET01FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGV4cG9ydHMuRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGV4cG9ydHMuRE9NRXhjZXB0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KTtcblxuICAgICAgaWYgKHJlcXVlc3Quc2lnbmFsICYmIHJlcXVlc3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxuICAgICAgfVxuXG4gICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgICB4aHIuYWJvcnQoKTtcbiAgICAgIH1cblxuICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICBzdGF0dXM6IHhoci5zdGF0dXMsXG4gICAgICAgICAgc3RhdHVzVGV4dDogeGhyLnN0YXR1c1RleHQsXG4gICAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICAgICAgfTtcbiAgICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKTtcbiAgICAgICAgdmFyIGJvZHkgPSAncmVzcG9uc2UnIGluIHhociA/IHhoci5yZXNwb25zZSA6IHhoci5yZXNwb25zZVRleHQ7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgVHlwZUVycm9yKCdOZXR3b3JrIHJlcXVlc3QgZmFpbGVkJykpO1xuICAgICAgfTtcblxuICAgICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJlamVjdChuZXcgZXhwb3J0cy5ET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKTtcbiAgICAgIH07XG5cbiAgICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCByZXF1ZXN0LnVybCwgdHJ1ZSk7XG5cbiAgICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdvbWl0Jykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICgncmVzcG9uc2VUeXBlJyBpbiB4aHIgJiYgc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVxdWVzdC5zaWduYWwpIHtcbiAgICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocik7XG5cbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIC8vIERPTkUgKHN1Y2Nlc3Mgb3IgZmFpbHVyZSlcbiAgICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgeGhyLnNlbmQodHlwZW9mIHJlcXVlc3QuX2JvZHlJbml0ID09PSAndW5kZWZpbmVkJyA/IG51bGwgOiByZXF1ZXN0Ll9ib2R5SW5pdCk7XG4gICAgfSlcbiAgfVxuXG4gIGZldGNoLnBvbHlmaWxsID0gdHJ1ZTtcblxuICBpZiAoIXNlbGYuZmV0Y2gpIHtcbiAgICBzZWxmLmZldGNoID0gZmV0Y2g7XG4gICAgc2VsZi5IZWFkZXJzID0gSGVhZGVycztcbiAgICBzZWxmLlJlcXVlc3QgPSBSZXF1ZXN0O1xuICAgIHNlbGYuUmVzcG9uc2UgPSBSZXNwb25zZTtcbiAgfVxuXG4gIGV4cG9ydHMuSGVhZGVycyA9IEhlYWRlcnM7XG4gIGV4cG9ydHMuUmVxdWVzdCA9IFJlcXVlc3Q7XG4gIGV4cG9ydHMuUmVzcG9uc2UgPSBSZXNwb25zZTtcbiAgZXhwb3J0cy5mZXRjaCA9IGZldGNoO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0pKHt9KTtcbn0pKF9fc2VsZl9fKTtcbl9fc2VsZl9fLmZldGNoLnBvbnlmaWxsID0gdHJ1ZTtcbi8vIFJlbW92ZSBcInBvbHlmaWxsXCIgcHJvcGVydHkgYWRkZWQgYnkgd2hhdHdnLWZldGNoXG5kZWxldGUgX19zZWxmX18uZmV0Y2gucG9seWZpbGw7XG4vLyBDaG9vc2UgYmV0d2VlbiBuYXRpdmUgaW1wbGVtZW50YXRpb24gKGdsb2JhbCkgb3IgY3VzdG9tIGltcGxlbWVudGF0aW9uIChfX3NlbGZfXylcbi8vIHZhciBjdHggPSBnbG9iYWwuZmV0Y2ggPyBnbG9iYWwgOiBfX3NlbGZfXztcbnZhciBjdHggPSBfX3NlbGZfXzsgLy8gdGhpcyBsaW5lIGRpc2FibGUgc2VydmljZSB3b3JrZXIgc3VwcG9ydCB0ZW1wb3JhcmlseVxuZXhwb3J0cyA9IGN0eC5mZXRjaCAvLyBUbyBlbmFibGU6IGltcG9ydCBmZXRjaCBmcm9tICdjcm9zcy1mZXRjaCdcbmV4cG9ydHMuZGVmYXVsdCA9IGN0eC5mZXRjaCAvLyBGb3IgVHlwZVNjcmlwdCBjb25zdW1lcnMgd2l0aG91dCBlc01vZHVsZUludGVyb3AuXG5leHBvcnRzLmZldGNoID0gY3R4LmZldGNoIC8vIFRvIGVuYWJsZTogaW1wb3J0IHtmZXRjaH0gZnJvbSAnY3Jvc3MtZmV0Y2gnXG5leHBvcnRzLkhlYWRlcnMgPSBjdHguSGVhZGVyc1xuZXhwb3J0cy5SZXF1ZXN0ID0gY3R4LlJlcXVlc3RcbmV4cG9ydHMuUmVzcG9uc2UgPSBjdHguUmVzcG9uc2Vcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1xuIiwidmFyIGZldGNoQXBpXG5pZiAodHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwuZmV0Y2gpIHtcbiAgICBmZXRjaEFwaSA9IGdsb2JhbC5mZXRjaFxuICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5mZXRjaCkge1xuICAgIGZldGNoQXBpID0gd2luZG93LmZldGNoXG4gIH0gZWxzZSB7XG4gICAgZmV0Y2hBcGkgPSBmZXRjaFxuICB9XG59XG5cbmlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgJiYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSkge1xuICB2YXIgZiA9IGZldGNoQXBpIHx8IHJlcXVpcmUoJ2Nyb3NzLWZldGNoJylcbiAgaWYgKGYuZGVmYXVsdCkgZiA9IGYuZGVmYXVsdFxuICBleHBvcnRzLmRlZmF1bHQgPSBmXG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cy5kZWZhdWx0XG59XG4iLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfSwgX3R5cGVvZihvYmopOyB9XG5pbXBvcnQgeyBkZWZhdWx0cywgaGFzWE1MSHR0cFJlcXVlc3QgfSBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCAqIGFzIGZldGNoTm9kZSBmcm9tICcuL2dldEZldGNoLmNqcyc7XG52YXIgZmV0Y2hBcGk7XG5pZiAodHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwuZmV0Y2gpIHtcbiAgICBmZXRjaEFwaSA9IGdsb2JhbC5mZXRjaDtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZmV0Y2gpIHtcbiAgICBmZXRjaEFwaSA9IHdpbmRvdy5mZXRjaDtcbiAgfSBlbHNlIHtcbiAgICBmZXRjaEFwaSA9IGZldGNoO1xuICB9XG59XG52YXIgWG1sSHR0cFJlcXVlc3RBcGk7XG5pZiAoaGFzWE1MSHR0cFJlcXVlc3QoKSkge1xuICBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsLlhNTEh0dHBSZXF1ZXN0KSB7XG4gICAgWG1sSHR0cFJlcXVlc3RBcGkgPSBnbG9iYWwuWE1MSHR0cFJlcXVlc3Q7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7XG4gICAgWG1sSHR0cFJlcXVlc3RBcGkgPSB3aW5kb3cuWE1MSHR0cFJlcXVlc3Q7XG4gIH1cbn1cbnZhciBBY3RpdmVYT2JqZWN0QXBpO1xuaWYgKHR5cGVvZiBBY3RpdmVYT2JqZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwuQWN0aXZlWE9iamVjdCkge1xuICAgIEFjdGl2ZVhPYmplY3RBcGkgPSBnbG9iYWwuQWN0aXZlWE9iamVjdDtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuQWN0aXZlWE9iamVjdCkge1xuICAgIEFjdGl2ZVhPYmplY3RBcGkgPSB3aW5kb3cuQWN0aXZlWE9iamVjdDtcbiAgfVxufVxuaWYgKCFmZXRjaEFwaSAmJiBmZXRjaE5vZGUgJiYgIVhtbEh0dHBSZXF1ZXN0QXBpICYmICFBY3RpdmVYT2JqZWN0QXBpKSBmZXRjaEFwaSA9IGZldGNoTm9kZS5kZWZhdWx0IHx8IGZldGNoTm9kZTtcbmlmICh0eXBlb2YgZmV0Y2hBcGkgIT09ICdmdW5jdGlvbicpIGZldGNoQXBpID0gdW5kZWZpbmVkO1xudmFyIGFkZFF1ZXJ5U3RyaW5nID0gZnVuY3Rpb24gYWRkUXVlcnlTdHJpbmcodXJsLCBwYXJhbXMpIHtcbiAgaWYgKHBhcmFtcyAmJiBfdHlwZW9mKHBhcmFtcykgPT09ICdvYmplY3QnKSB7XG4gICAgdmFyIHF1ZXJ5U3RyaW5nID0gJyc7XG4gICAgZm9yICh2YXIgcGFyYW1OYW1lIGluIHBhcmFtcykge1xuICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtTmFtZSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQocGFyYW1zW3BhcmFtTmFtZV0pO1xuICAgIH1cbiAgICBpZiAoIXF1ZXJ5U3RyaW5nKSByZXR1cm4gdXJsO1xuICAgIHVybCA9IHVybCArICh1cmwuaW5kZXhPZignPycpICE9PSAtMSA/ICcmJyA6ICc/JykgKyBxdWVyeVN0cmluZy5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gdXJsO1xufTtcbnZhciBmZXRjaEl0ID0gZnVuY3Rpb24gZmV0Y2hJdCh1cmwsIGZldGNoT3B0aW9ucywgY2FsbGJhY2spIHtcbiAgZmV0Y2hBcGkodXJsLCBmZXRjaE9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgaWYgKCFyZXNwb25zZS5vaykgcmV0dXJuIGNhbGxiYWNrKHJlc3BvbnNlLnN0YXR1c1RleHQgfHwgJ0Vycm9yJywge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9KTtcbiAgICByZXNwb25zZS50ZXh0KCkudGhlbihmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgY2FsbGJhY2sobnVsbCwge1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgZGF0YTogZGF0YVxuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goY2FsbGJhY2spO1xuICB9KS5jYXRjaChjYWxsYmFjayk7XG59O1xudmFyIG9taXRGZXRjaE9wdGlvbnMgPSBmYWxzZTtcbnZhciByZXF1ZXN0V2l0aEZldGNoID0gZnVuY3Rpb24gcmVxdWVzdFdpdGhGZXRjaChvcHRpb25zLCB1cmwsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gIGlmIChvcHRpb25zLnF1ZXJ5U3RyaW5nUGFyYW1zKSB7XG4gICAgdXJsID0gYWRkUXVlcnlTdHJpbmcodXJsLCBvcHRpb25zLnF1ZXJ5U3RyaW5nUGFyYW1zKTtcbiAgfVxuICB2YXIgaGVhZGVycyA9IGRlZmF1bHRzKHt9LCB0eXBlb2Ygb3B0aW9ucy5jdXN0b21IZWFkZXJzID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5jdXN0b21IZWFkZXJzKCkgOiBvcHRpb25zLmN1c3RvbUhlYWRlcnMpO1xuICBpZiAocGF5bG9hZCkgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbic7XG4gIHZhciByZXFPcHRpb25zID0gdHlwZW9mIG9wdGlvbnMucmVxdWVzdE9wdGlvbnMgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLnJlcXVlc3RPcHRpb25zKHBheWxvYWQpIDogb3B0aW9ucy5yZXF1ZXN0T3B0aW9ucztcbiAgdmFyIGZldGNoT3B0aW9ucyA9IGRlZmF1bHRzKHtcbiAgICBtZXRob2Q6IHBheWxvYWQgPyAnUE9TVCcgOiAnR0VUJyxcbiAgICBib2R5OiBwYXlsb2FkID8gb3B0aW9ucy5zdHJpbmdpZnkocGF5bG9hZCkgOiB1bmRlZmluZWQsXG4gICAgaGVhZGVyczogaGVhZGVyc1xuICB9LCBvbWl0RmV0Y2hPcHRpb25zID8ge30gOiByZXFPcHRpb25zKTtcbiAgdHJ5IHtcbiAgICBmZXRjaEl0KHVybCwgZmV0Y2hPcHRpb25zLCBjYWxsYmFjayk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoIXJlcU9wdGlvbnMgfHwgT2JqZWN0LmtleXMocmVxT3B0aW9ucykubGVuZ3RoID09PSAwIHx8ICFlLm1lc3NhZ2UgfHwgZS5tZXNzYWdlLmluZGV4T2YoJ25vdCBpbXBsZW1lbnRlZCcpIDwgMCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGUpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmtleXMocmVxT3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgIGRlbGV0ZSBmZXRjaE9wdGlvbnNbb3B0XTtcbiAgICAgIH0pO1xuICAgICAgZmV0Y2hJdCh1cmwsIGZldGNoT3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgb21pdEZldGNoT3B0aW9ucyA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH1cbiAgfVxufTtcbnZhciByZXF1ZXN0V2l0aFhtbEh0dHBSZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdFdpdGhYbWxIdHRwUmVxdWVzdChvcHRpb25zLCB1cmwsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gIGlmIChwYXlsb2FkICYmIF90eXBlb2YocGF5bG9hZCkgPT09ICdvYmplY3QnKSB7XG4gICAgcGF5bG9hZCA9IGFkZFF1ZXJ5U3RyaW5nKCcnLCBwYXlsb2FkKS5zbGljZSgxKTtcbiAgfVxuICBpZiAob3B0aW9ucy5xdWVyeVN0cmluZ1BhcmFtcykge1xuICAgIHVybCA9IGFkZFF1ZXJ5U3RyaW5nKHVybCwgb3B0aW9ucy5xdWVyeVN0cmluZ1BhcmFtcyk7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgeDtcbiAgICBpZiAoWG1sSHR0cFJlcXVlc3RBcGkpIHtcbiAgICAgIHggPSBuZXcgWG1sSHR0cFJlcXVlc3RBcGkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IG5ldyBBY3RpdmVYT2JqZWN0QXBpKCdNU1hNTDIuWE1MSFRUUC4zLjAnKTtcbiAgICB9XG4gICAgeC5vcGVuKHBheWxvYWQgPyAnUE9TVCcgOiAnR0VUJywgdXJsLCAxKTtcbiAgICBpZiAoIW9wdGlvbnMuY3Jvc3NEb21haW4pIHtcbiAgICAgIHguc2V0UmVxdWVzdEhlYWRlcignWC1SZXF1ZXN0ZWQtV2l0aCcsICdYTUxIdHRwUmVxdWVzdCcpO1xuICAgIH1cbiAgICB4LndpdGhDcmVkZW50aWFscyA9ICEhb3B0aW9ucy53aXRoQ3JlZGVudGlhbHM7XG4gICAgaWYgKHBheWxvYWQpIHtcbiAgICAgIHguc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xuICAgIH1cbiAgICBpZiAoeC5vdmVycmlkZU1pbWVUeXBlKSB7XG4gICAgICB4Lm92ZXJyaWRlTWltZVR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICB9XG4gICAgdmFyIGggPSBvcHRpb25zLmN1c3RvbUhlYWRlcnM7XG4gICAgaCA9IHR5cGVvZiBoID09PSAnZnVuY3Rpb24nID8gaCgpIDogaDtcbiAgICBpZiAoaCkge1xuICAgICAgZm9yICh2YXIgaSBpbiBoKSB7XG4gICAgICAgIHguc2V0UmVxdWVzdEhlYWRlcihpLCBoW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgeC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB4LnJlYWR5U3RhdGUgPiAzICYmIGNhbGxiYWNrKHguc3RhdHVzID49IDQwMCA/IHguc3RhdHVzVGV4dCA6IG51bGwsIHtcbiAgICAgICAgc3RhdHVzOiB4LnN0YXR1cyxcbiAgICAgICAgZGF0YTogeC5yZXNwb25zZVRleHRcbiAgICAgIH0pO1xuICAgIH07XG4gICAgeC5zZW5kKHBheWxvYWQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZSAmJiBjb25zb2xlLmxvZyhlKTtcbiAgfVxufTtcbnZhciByZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChvcHRpb25zLCB1cmwsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gcGF5bG9hZDtcbiAgICBwYXlsb2FkID0gdW5kZWZpbmVkO1xuICB9XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24gKCkge307XG4gIGlmIChmZXRjaEFwaSAmJiB1cmwuaW5kZXhPZignZmlsZTonKSAhPT0gMCkge1xuICAgIHJldHVybiByZXF1ZXN0V2l0aEZldGNoKG9wdGlvbnMsIHVybCwgcGF5bG9hZCwgY2FsbGJhY2spO1xuICB9XG4gIGlmIChoYXNYTUxIdHRwUmVxdWVzdCgpIHx8IHR5cGVvZiBBY3RpdmVYT2JqZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoWG1sSHR0cFJlcXVlc3Qob3B0aW9ucywgdXJsLCBwYXlsb2FkLCBjYWxsYmFjayk7XG4gIH1cbiAgY2FsbGJhY2sobmV3IEVycm9yKCdObyBmZXRjaCBhbmQgbm8geGhyIGltcGxlbWVudGF0aW9uIGZvdW5kIScpKTtcbn07XG5leHBvcnQgZGVmYXVsdCByZXF1ZXN0OyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9LCBfdHlwZW9mKG9iaik7IH1cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIF90b1Byb3BlcnR5S2V5KGRlc2NyaXB0b3Iua2V5KSwgZGVzY3JpcHRvcik7IH0gfVxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6IGZhbHNlIH0pOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHsgdmFyIGtleSA9IF90b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpOyByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZShpbnB1dCwgaGludCkgeyBpZiAoX3R5cGVvZihpbnB1dCkgIT09IFwib2JqZWN0XCIgfHwgaW5wdXQgPT09IG51bGwpIHJldHVybiBpbnB1dDsgdmFyIHByaW0gPSBpbnB1dFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAocHJpbSAhPT0gdW5kZWZpbmVkKSB7IHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpOyBpZiAoX3R5cGVvZihyZXMpICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7IH1cbmltcG9ydCB7IGRlZmF1bHRzLCBtYWtlUHJvbWlzZSB9IGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0LmpzJztcbnZhciBnZXREZWZhdWx0cyA9IGZ1bmN0aW9uIGdldERlZmF1bHRzKCkge1xuICByZXR1cm4ge1xuICAgIGxvYWRQYXRoOiAnL2xvY2FsZXMve3tsbmd9fS97e25zfX0uanNvbicsXG4gICAgYWRkUGF0aDogJy9sb2NhbGVzL2FkZC97e2xuZ319L3t7bnN9fScsXG4gICAgYWxsb3dNdWx0aUxvYWRpbmc6IGZhbHNlLFxuICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShkYXRhKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICB9LFxuICAgIHN0cmluZ2lmeTogSlNPTi5zdHJpbmdpZnksXG4gICAgcGFyc2VQYXlsb2FkOiBmdW5jdGlvbiBwYXJzZVBheWxvYWQobmFtZXNwYWNlLCBrZXksIGZhbGxiYWNrVmFsdWUpIHtcbiAgICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIGtleSwgZmFsbGJhY2tWYWx1ZSB8fCAnJyk7XG4gICAgfSxcbiAgICBwYXJzZUxvYWRQYXlsb2FkOiBmdW5jdGlvbiBwYXJzZUxvYWRQYXlsb2FkKGxhbmd1YWdlcywgbmFtZXNwYWNlcykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIHJlcXVlc3Q6IHJlcXVlc3QsXG4gICAgcmVsb2FkSW50ZXJ2YWw6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gZmFsc2UgOiA2MCAqIDYwICogMTAwMCxcbiAgICBjdXN0b21IZWFkZXJzOiB7fSxcbiAgICBxdWVyeVN0cmluZ1BhcmFtczoge30sXG4gICAgY3Jvc3NEb21haW46IGZhbHNlLFxuICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgb3ZlcnJpZGVNaW1lVHlwZTogZmFsc2UsXG4gICAgcmVxdWVzdE9wdGlvbnM6IHtcbiAgICAgIG1vZGU6ICdjb3JzJyxcbiAgICAgIGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nLFxuICAgICAgY2FjaGU6ICdkZWZhdWx0J1xuICAgIH1cbiAgfTtcbn07XG52YXIgQmFja2VuZCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gQmFja2VuZChzZXJ2aWNlcykge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICB2YXIgYWxsT3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJhY2tlbmQpO1xuICAgIHRoaXMuc2VydmljZXMgPSBzZXJ2aWNlcztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuYWxsT3B0aW9ucyA9IGFsbE9wdGlvbnM7XG4gICAgdGhpcy50eXBlID0gJ2JhY2tlbmQnO1xuICAgIHRoaXMuaW5pdChzZXJ2aWNlcywgb3B0aW9ucywgYWxsT3B0aW9ucyk7XG4gIH1cbiAgX2NyZWF0ZUNsYXNzKEJhY2tlbmQsIFt7XG4gICAga2V5OiBcImluaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdChzZXJ2aWNlcykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHZhciBhbGxPcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICAgIHRoaXMuc2VydmljZXMgPSBzZXJ2aWNlcztcbiAgICAgIHRoaXMub3B0aW9ucyA9IGRlZmF1bHRzKG9wdGlvbnMsIHRoaXMub3B0aW9ucyB8fCB7fSwgZ2V0RGVmYXVsdHMoKSk7XG4gICAgICB0aGlzLmFsbE9wdGlvbnMgPSBhbGxPcHRpb25zO1xuICAgICAgaWYgKHRoaXMuc2VydmljZXMgJiYgdGhpcy5vcHRpb25zLnJlbG9hZEludGVydmFsKSB7XG4gICAgICAgIHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMucmVsb2FkKCk7XG4gICAgICAgIH0sIHRoaXMub3B0aW9ucy5yZWxvYWRJbnRlcnZhbCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlYWRNdWx0aVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWFkTXVsdGkobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBjYWxsYmFjaykge1xuICAgICAgdGhpcy5fcmVhZEFueShsYW5ndWFnZXMsIGxhbmd1YWdlcywgbmFtZXNwYWNlcywgbmFtZXNwYWNlcywgY2FsbGJhY2spO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZWFkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWQobGFuZ3VhZ2UsIG5hbWVzcGFjZSwgY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX3JlYWRBbnkoW2xhbmd1YWdlXSwgbGFuZ3VhZ2UsIFtuYW1lc3BhY2VdLCBuYW1lc3BhY2UsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX3JlYWRBbnlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3JlYWRBbnkobGFuZ3VhZ2VzLCBsb2FkVXJsTGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBsb2FkVXJsTmFtZXNwYWNlcywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgICAgdmFyIGxvYWRQYXRoID0gdGhpcy5vcHRpb25zLmxvYWRQYXRoO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMubG9hZFBhdGggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgbG9hZFBhdGggPSB0aGlzLm9wdGlvbnMubG9hZFBhdGgobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzKTtcbiAgICAgIH1cbiAgICAgIGxvYWRQYXRoID0gbWFrZVByb21pc2UobG9hZFBhdGgpO1xuICAgICAgbG9hZFBhdGgudGhlbihmdW5jdGlvbiAocmVzb2x2ZWRMb2FkUGF0aCkge1xuICAgICAgICBpZiAoIXJlc29sdmVkTG9hZFBhdGgpIHJldHVybiBjYWxsYmFjayhudWxsLCB7fSk7XG4gICAgICAgIHZhciB1cmwgPSBfdGhpczIuc2VydmljZXMuaW50ZXJwb2xhdG9yLmludGVycG9sYXRlKHJlc29sdmVkTG9hZFBhdGgsIHtcbiAgICAgICAgICBsbmc6IGxhbmd1YWdlcy5qb2luKCcrJyksXG4gICAgICAgICAgbnM6IG5hbWVzcGFjZXMuam9pbignKycpXG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpczIubG9hZFVybCh1cmwsIGNhbGxiYWNrLCBsb2FkVXJsTGFuZ3VhZ2VzLCBsb2FkVXJsTmFtZXNwYWNlcyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibG9hZFVybFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBsb2FkVXJsKHVybCwgY2FsbGJhY2ssIGxhbmd1YWdlcywgbmFtZXNwYWNlcykge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG4gICAgICB2YXIgbG5nID0gdHlwZW9mIGxhbmd1YWdlcyA9PT0gJ3N0cmluZycgPyBbbGFuZ3VhZ2VzXSA6IGxhbmd1YWdlcztcbiAgICAgIHZhciBucyA9IHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJyA/IFtuYW1lc3BhY2VzXSA6IG5hbWVzcGFjZXM7XG4gICAgICB2YXIgcGF5bG9hZCA9IHRoaXMub3B0aW9ucy5wYXJzZUxvYWRQYXlsb2FkKGxuZywgbnMpO1xuICAgICAgdGhpcy5vcHRpb25zLnJlcXVlc3QodGhpcy5vcHRpb25zLCB1cmwsIHBheWxvYWQsIGZ1bmN0aW9uIChlcnIsIHJlcykge1xuICAgICAgICBpZiAocmVzICYmIChyZXMuc3RhdHVzID49IDUwMCAmJiByZXMuc3RhdHVzIDwgNjAwIHx8ICFyZXMuc3RhdHVzKSkgcmV0dXJuIGNhbGxiYWNrKCdmYWlsZWQgbG9hZGluZyAnICsgdXJsICsgJzsgc3RhdHVzIGNvZGU6ICcgKyByZXMuc3RhdHVzLCB0cnVlKTtcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuc3RhdHVzID49IDQwMCAmJiByZXMuc3RhdHVzIDwgNTAwKSByZXR1cm4gY2FsbGJhY2soJ2ZhaWxlZCBsb2FkaW5nICcgKyB1cmwgKyAnOyBzdGF0dXMgY29kZTogJyArIHJlcy5zdGF0dXMsIGZhbHNlKTtcbiAgICAgICAgaWYgKCFyZXMgJiYgZXJyICYmIGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlLmluZGV4T2YoJ0ZhaWxlZCB0byBmZXRjaCcpID4gLTEpIHJldHVybiBjYWxsYmFjaygnZmFpbGVkIGxvYWRpbmcgJyArIHVybCArICc6ICcgKyBlcnIubWVzc2FnZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIsIGZhbHNlKTtcbiAgICAgICAgdmFyIHJldCwgcGFyc2VFcnI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXMuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldCA9IF90aGlzMy5vcHRpb25zLnBhcnNlKHJlcy5kYXRhLCBsYW5ndWFnZXMsIG5hbWVzcGFjZXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXQgPSByZXMuZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBwYXJzZUVyciA9ICdmYWlsZWQgcGFyc2luZyAnICsgdXJsICsgJyB0byBqc29uJztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VFcnIpIHJldHVybiBjYWxsYmFjayhwYXJzZUVyciwgZmFsc2UpO1xuICAgICAgICBjYWxsYmFjayhudWxsLCByZXQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNyZWF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGUobGFuZ3VhZ2VzLCBuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuYWRkUGF0aCkgcmV0dXJuO1xuICAgICAgaWYgKHR5cGVvZiBsYW5ndWFnZXMgPT09ICdzdHJpbmcnKSBsYW5ndWFnZXMgPSBbbGFuZ3VhZ2VzXTtcbiAgICAgIHZhciBwYXlsb2FkID0gdGhpcy5vcHRpb25zLnBhcnNlUGF5bG9hZChuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSk7XG4gICAgICB2YXIgZmluaXNoZWQgPSAwO1xuICAgICAgdmFyIGRhdGFBcnJheSA9IFtdO1xuICAgICAgdmFyIHJlc0FycmF5ID0gW107XG4gICAgICBsYW5ndWFnZXMuZm9yRWFjaChmdW5jdGlvbiAobG5nKSB7XG4gICAgICAgIHZhciBhZGRQYXRoID0gX3RoaXM0Lm9wdGlvbnMuYWRkUGF0aDtcbiAgICAgICAgaWYgKHR5cGVvZiBfdGhpczQub3B0aW9ucy5hZGRQYXRoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgYWRkUGF0aCA9IF90aGlzNC5vcHRpb25zLmFkZFBhdGgobG5nLCBuYW1lc3BhY2UpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1cmwgPSBfdGhpczQuc2VydmljZXMuaW50ZXJwb2xhdG9yLmludGVycG9sYXRlKGFkZFBhdGgsIHtcbiAgICAgICAgICBsbmc6IGxuZyxcbiAgICAgICAgICBuczogbmFtZXNwYWNlXG4gICAgICAgIH0pO1xuICAgICAgICBfdGhpczQub3B0aW9ucy5yZXF1ZXN0KF90aGlzNC5vcHRpb25zLCB1cmwsIHBheWxvYWQsIGZ1bmN0aW9uIChkYXRhLCByZXMpIHtcbiAgICAgICAgICBmaW5pc2hlZCArPSAxO1xuICAgICAgICAgIGRhdGFBcnJheS5wdXNoKGRhdGEpO1xuICAgICAgICAgIHJlc0FycmF5LnB1c2gocmVzKTtcbiAgICAgICAgICBpZiAoZmluaXNoZWQgPT09IGxhbmd1YWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIGNhbGxiYWNrKGRhdGFBcnJheSwgcmVzQXJyYXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVsb2FkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbG9hZCgpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuICAgICAgdmFyIF90aGlzJHNlcnZpY2VzID0gdGhpcy5zZXJ2aWNlcyxcbiAgICAgICAgYmFja2VuZENvbm5lY3RvciA9IF90aGlzJHNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IsXG4gICAgICAgIGxhbmd1YWdlVXRpbHMgPSBfdGhpcyRzZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLFxuICAgICAgICBsb2dnZXIgPSBfdGhpcyRzZXJ2aWNlcy5sb2dnZXI7XG4gICAgICB2YXIgY3VycmVudExhbmd1YWdlID0gYmFja2VuZENvbm5lY3Rvci5sYW5ndWFnZTtcbiAgICAgIGlmIChjdXJyZW50TGFuZ3VhZ2UgJiYgY3VycmVudExhbmd1YWdlLnRvTG93ZXJDYXNlKCkgPT09ICdjaW1vZGUnKSByZXR1cm47XG4gICAgICB2YXIgdG9Mb2FkID0gW107XG4gICAgICB2YXIgYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKGxuZykge1xuICAgICAgICB2YXIgbG5ncyA9IGxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGxuZyk7XG4gICAgICAgIGxuZ3MuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgICAgIGlmICh0b0xvYWQuaW5kZXhPZihsKSA8IDApIHRvTG9hZC5wdXNoKGwpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBhcHBlbmQoY3VycmVudExhbmd1YWdlKTtcbiAgICAgIGlmICh0aGlzLmFsbE9wdGlvbnMucHJlbG9hZCkgdGhpcy5hbGxPcHRpb25zLnByZWxvYWQuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgICByZXR1cm4gYXBwZW5kKGwpO1xuICAgICAgfSk7XG4gICAgICB0b0xvYWQuZm9yRWFjaChmdW5jdGlvbiAobG5nKSB7XG4gICAgICAgIF90aGlzNS5hbGxPcHRpb25zLm5zLmZvckVhY2goZnVuY3Rpb24gKG5zKSB7XG4gICAgICAgICAgYmFja2VuZENvbm5lY3Rvci5yZWFkKGxuZywgbnMsICdyZWFkJywgbnVsbCwgbnVsbCwgZnVuY3Rpb24gKGVyciwgZGF0YSkge1xuICAgICAgICAgICAgaWYgKGVycikgbG9nZ2VyLndhcm4oXCJsb2FkaW5nIG5hbWVzcGFjZSBcIi5jb25jYXQobnMsIFwiIGZvciBsYW5ndWFnZSBcIikuY29uY2F0KGxuZywgXCIgZmFpbGVkXCIpLCBlcnIpO1xuICAgICAgICAgICAgaWYgKCFlcnIgJiYgZGF0YSkgbG9nZ2VyLmxvZyhcImxvYWRlZCBuYW1lc3BhY2UgXCIuY29uY2F0KG5zLCBcIiBmb3IgbGFuZ3VhZ2UgXCIpLmNvbmNhdChsbmcpLCBkYXRhKTtcbiAgICAgICAgICAgIGJhY2tlbmRDb25uZWN0b3IubG9hZGVkKFwiXCIuY29uY2F0KGxuZywgXCJ8XCIpLmNvbmNhdChucyksIGVyciwgZGF0YSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBCYWNrZW5kO1xufSgpO1xuQmFja2VuZC50eXBlID0gJ2JhY2tlbmQnO1xuZXhwb3J0IGRlZmF1bHQgQmFja2VuZDsiLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmluZEluZGV4O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hTmAgd2l0aG91dCBzdXBwb3J0IGZvciBudW1iZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBgTmFOYCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYU47XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmRleE9mYCB3aGljaCBwZXJmb3JtcyBzdHJpY3QgZXF1YWxpdHlcbiAqIGNvbXBhcmlzb25zIG9mIHZhbHVlcywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCAtIDEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBpZiAoYXJyYXlbaW5kZXhdID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaWN0SW5kZXhPZjtcbiIsInZhciBiYXNlRmluZEluZGV4ID0gcmVxdWlyZSgnLi9fYmFzZUZpbmRJbmRleCcpLFxuICAgIGJhc2VJc05hTiA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hTicpLFxuICAgIHN0cmljdEluZGV4T2YgPSByZXF1aXJlKCcuL19zdHJpY3RJbmRleE9mJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW5kZXhPZmAgd2l0aG91dCBgZnJvbUluZGV4YCBib3VuZHMgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWVcbiAgICA/IHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpXG4gICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGZyb21JbmRleCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUluZGV4T2Y7XG4iLCJ2YXIgYmFzZUluZGV4T2YgPSByZXF1aXJlKCcuL19iYXNlSW5kZXhPZicpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmNsdWRlc2AgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBzcGVjaWZ5aW5nIGFuIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlcyhhcnJheSwgdmFsdWUpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCAwKSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5SW5jbHVkZXM7XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXJyYXlJbmNsdWRlc2AgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIGNvbXBhcmF0b3IuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmF0b3IgVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheUluY2x1ZGVzV2l0aChhcnJheSwgdmFsdWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChjb21wYXJhdG9yKHZhbHVlLCBhcnJheVtpbmRleF0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlcycpLFxuICAgIGFycmF5SW5jbHVkZXNXaXRoID0gcmVxdWlyZSgnLi9fYXJyYXlJbmNsdWRlc1dpdGgnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWluID0gTWF0aC5taW47XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgbWV0aG9kcyBsaWtlIGBfLmludGVyc2VjdGlvbmAsIHdpdGhvdXQgc3VwcG9ydFxuICogZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMsIHRoYXQgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgdG8gaW5zcGVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlzIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZV0gVGhlIGl0ZXJhdGVlIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIHNoYXJlZCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJbnRlcnNlY3Rpb24oYXJyYXlzLCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5jbHVkZXMgPSBjb21wYXJhdG9yID8gYXJyYXlJbmNsdWRlc1dpdGggOiBhcnJheUluY2x1ZGVzLFxuICAgICAgbGVuZ3RoID0gYXJyYXlzWzBdLmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IGFycmF5cy5sZW5ndGgsXG4gICAgICBvdGhJbmRleCA9IG90aExlbmd0aCxcbiAgICAgIGNhY2hlcyA9IEFycmF5KG90aExlbmd0aCksXG4gICAgICBtYXhMZW5ndGggPSBJbmZpbml0eSxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlIChvdGhJbmRleC0tKSB7XG4gICAgdmFyIGFycmF5ID0gYXJyYXlzW290aEluZGV4XTtcbiAgICBpZiAob3RoSW5kZXggJiYgaXRlcmF0ZWUpIHtcbiAgICAgIGFycmF5ID0gYXJyYXlNYXAoYXJyYXksIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICAgIH1cbiAgICBtYXhMZW5ndGggPSBuYXRpdmVNaW4oYXJyYXkubGVuZ3RoLCBtYXhMZW5ndGgpO1xuICAgIGNhY2hlc1tvdGhJbmRleF0gPSAhY29tcGFyYXRvciAmJiAoaXRlcmF0ZWUgfHwgKGxlbmd0aCA+PSAxMjAgJiYgYXJyYXkubGVuZ3RoID49IDEyMCkpXG4gICAgICA/IG5ldyBTZXRDYWNoZShvdGhJbmRleCAmJiBhcnJheSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG4gIGFycmF5ID0gYXJyYXlzWzBdO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgc2VlbiA9IGNhY2hlc1swXTtcblxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGggJiYgcmVzdWx0Lmxlbmd0aCA8IG1heExlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKCEoc2VlblxuICAgICAgICAgID8gY2FjaGVIYXMoc2VlbiwgY29tcHV0ZWQpXG4gICAgICAgICAgOiBpbmNsdWRlcyhyZXN1bHQsIGNvbXB1dGVkLCBjb21wYXJhdG9yKVxuICAgICAgICApKSB7XG4gICAgICBvdGhJbmRleCA9IG90aExlbmd0aDtcbiAgICAgIHdoaWxlICgtLW90aEluZGV4KSB7XG4gICAgICAgIHZhciBjYWNoZSA9IGNhY2hlc1tvdGhJbmRleF07XG4gICAgICAgIGlmICghKGNhY2hlXG4gICAgICAgICAgICAgID8gY2FjaGVIYXMoY2FjaGUsIGNvbXB1dGVkKVxuICAgICAgICAgICAgICA6IGluY2x1ZGVzKGFycmF5c1tvdGhJbmRleF0sIGNvbXB1dGVkLCBjb21wYXJhdG9yKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc2Vlbikge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbnRlcnNlY3Rpb247XG4iLCJ2YXIgaXNBcnJheUxpa2VPYmplY3QgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlT2JqZWN0Jyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhbiBlbXB0eSBhcnJheSBpZiBpdCdzIG5vdCBhbiBhcnJheSBsaWtlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgdGhlIGNhc3QgYXJyYXktbGlrZSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGNhc3RBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDogW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdEFycmF5TGlrZU9iamVjdDtcbiIsInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZUludGVyc2VjdGlvbiA9IHJlcXVpcmUoJy4vX2Jhc2VJbnRlcnNlY3Rpb24nKSxcbiAgICBiYXNlUmVzdCA9IHJlcXVpcmUoJy4vX2Jhc2VSZXN0JyksXG4gICAgY2FzdEFycmF5TGlrZU9iamVjdCA9IHJlcXVpcmUoJy4vX2Nhc3RBcnJheUxpa2VPYmplY3QnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gYWxsIGdpdmVuIGFycmF5c1xuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gVGhlIG9yZGVyIGFuZCByZWZlcmVuY2VzIG9mIHJlc3VsdCB2YWx1ZXMgYXJlXG4gKiBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7Li4uQXJyYXl9IFthcnJheXNdIFRoZSBhcnJheXMgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGludGVyc2VjdGluZyB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW50ZXJzZWN0aW9uKFsyLCAxXSwgWzIsIDNdKTtcbiAqIC8vID0+IFsyXVxuICovXG52YXIgaW50ZXJzZWN0aW9uID0gYmFzZVJlc3QoZnVuY3Rpb24oYXJyYXlzKSB7XG4gIHZhciBtYXBwZWQgPSBhcnJheU1hcChhcnJheXMsIGNhc3RBcnJheUxpa2VPYmplY3QpO1xuICByZXR1cm4gKG1hcHBlZC5sZW5ndGggJiYgbWFwcGVkWzBdID09PSBhcnJheXNbMF0pXG4gICAgPyBiYXNlSW50ZXJzZWN0aW9uKG1hcHBlZClcbiAgICA6IFtdO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gaW50ZXJzZWN0aW9uO1xuIiwiLyogZXNsaW50LWRpc2FibGUgZnVuY3Rpb24tcGFyZW4tbmV3bGluZSAqL1xuLyogZXNsaW50LWRpc2FibGUgaW1wbGljaXQtYXJyb3ctbGluZWJyZWFrICovXG5pbXBvcnQgaTE4biBmcm9tICdpMThuZXh0JztcbmltcG9ydCBMYW5ndWFnZURldGVjdG9yIGZyb20gJ2kxOG5leHQtYnJvd3Nlci1sYW5ndWFnZWRldGVjdG9yJztcbmltcG9ydCBCYWNrZW5kIGZyb20gJ2kxOG5leHQtaHR0cC1iYWNrZW5kJztcbmltcG9ydCBpbnRlcnNlY3Rpb24gZnJvbSAnbG9kYXNoL2ludGVyc2VjdGlvbi5qcyc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnbG9kYXNoL21lcmdlLmpzJztcbmltcG9ydCB7IGluaXRSZWFjdEkxOG5leHQgfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IGRlZmF1bHRDb25maWcsIERFRkFVTFRfTlMsIGxvY2FsZXMgfSBmcm9tICcuLi8uLi9sb2NhbGUvaW5kZXguanMnO1xuaW1wb3J0IHsgZmxhdCB9IGZyb20gJy4uLy4uL3V0aWxzL2ZsYXQvaW5kZXguanMnO1xuXG4vKipcbiAgSW5pdGlhbGl6ZXMgaTE4biB0cmFuc2xhdGlvbnMgYmFzZWQgb24gcHJvdmlkZWQgY29uZmlndXJhdGlvbi5cbiAgQGZ1bmN0aW9uXG4gIEBwYXJhbSB7TG9jYWxlfSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgZm9yIGluaXRpYWxpemluZyBpMThuXG4gIEByZXR1cm5zIHt7aTE4bjogaTE4bmV4dH19IC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYW4gaTE4biBpbnN0YW5jZS5cbiovXG5jb25zdCBpbml0VHJhbnNsYXRpb25zID0gY29uZmlnID0+IHtcbiAgY29uc3Qge1xuICAgIGxhbmd1YWdlID0gJ2VuJyxcbiAgICBhdmFpbGFibGVMYW5ndWFnZXMgPSBbXSxcbiAgICB0cmFuc2xhdGlvbnMsXG4gICAgbG9jYWxlRGV0ZWN0aW9uID0gZmFsc2UsXG4gICAgd2l0aEJhY2tlbmQgPSBmYWxzZSxcbiAgICAuLi5pMThuQ29uZmlnXG4gIH0gPSBjb25maWc7XG4gIGNvbnN0IGNvbWJpbmVkQ29uZmlnID0gbWVyZ2UoZGVmYXVsdENvbmZpZywgaTE4bkNvbmZpZywge1xuICAgIHN1cHBvcnRlZExuZ3M6IGF2YWlsYWJsZUxhbmd1YWdlcyxcbiAgICBmYWxsYmFja0xuZzogaTE4bkNvbmZpZy5mYWxsYmFja0xuZyB8fCBsYW5ndWFnZVxuICB9KTtcbiAgY29uc3QgaW5zdGFuY2UgPSBpMThuLmNyZWF0ZUluc3RhbmNlKGNvbWJpbmVkQ29uZmlnKTtcbiAgaWYgKCFpbnN0YW5jZS5pc0luaXRpYWxpemVkKSB7XG4gICAgaWYgKGxvY2FsZURldGVjdGlvbikge1xuICAgICAgaW5zdGFuY2UudXNlKExhbmd1YWdlRGV0ZWN0b3IpO1xuICAgIH1cbiAgICBpZiAod2l0aEJhY2tlbmQpIHtcbiAgICAgIGluc3RhbmNlLnVzZShCYWNrZW5kKTtcbiAgICB9XG4gICAgaW5zdGFuY2UudXNlKGluaXRSZWFjdEkxOG5leHQpLmluaXQoY29tYmluZWRDb25maWcpO1xuICB9XG4gIGNvbnN0IGJ1aWxkSW5UcmFuc2xhdGlvbnMgPSBpbnRlcnNlY3Rpb24oT2JqZWN0LmtleXMobG9jYWxlcyksIGF2YWlsYWJsZUxhbmd1YWdlcyk7XG4gIGlmIChidWlsZEluVHJhbnNsYXRpb25zLmxlbmd0aCkge1xuICAgIGJ1aWxkSW5UcmFuc2xhdGlvbnMuZm9yRWFjaChsYW5nID0+IGluc3RhbmNlLmFkZFJlc291cmNlQnVuZGxlKGxhbmcsIERFRkFVTFRfTlMsIGZsYXQuZmxhdHRlbihsb2NhbGVzW2xhbmddKSkpO1xuICB9XG4gIGlmICh0cmFuc2xhdGlvbnMpIHtcbiAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2gobGFuZyA9PiBpbnN0YW5jZS5hZGRSZXNvdXJjZUJ1bmRsZShsYW5nLCBERUZBVUxUX05TLCBmbGF0LmZsYXR0ZW4odHJhbnNsYXRpb25zW2xhbmddKSwgdHJ1ZSwgdHJ1ZSkpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaTE4bjogaW5zdGFuY2VcbiAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBpbml0VHJhbnNsYXRpb25zOyIsImltcG9ydCB7IFRoZW1lUHJvdmlkZXIgfSBmcm9tICdAYWRtaW5qcy9kZXNpZ24tc3lzdGVtL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBSZWFjdCwgeyBTdXNwZW5zZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEkxOG5leHRQcm92aWRlciB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBCcm93c2VyUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSc7XG5pbXBvcnQgVmlld0hlbHBlcnMgZnJvbSAnLi4vYmFja2VuZC91dGlscy92aWV3LWhlbHBlcnMvdmlldy1oZWxwZXJzLmpzJztcbmltcG9ydCB7IGZsYXQgfSBmcm9tICcuLi91dGlscy9mbGF0L2luZGV4LmpzJztcbmltcG9ydCAqIGFzIEFwcENvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzL2FwcC9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBBY3Rpb25Db21wb25lbnRzIGZyb20gJy4vY29tcG9uZW50cy9hY3Rpb25zL2luZGV4LmpzJztcbmltcG9ydCBBcHAsIHsgT3JpZ2luYWxBcHAgfSBmcm9tICcuL2NvbXBvbmVudHMvYXBwbGljYXRpb24uanMnO1xuaW1wb3J0IHsgQXBwTG9hZGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL2luZGV4LmpzJztcbmltcG9ydCBMb2dpbiBmcm9tICcuL2NvbXBvbmVudHMvbG9naW4vaW5kZXguanMnO1xuaW1wb3J0IEJhc2VQcm9wZXJ0eUNvbXBvbmVudCwgeyBDbGVhblByb3BlcnR5Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb3BlcnR5LXR5cGUvaW5kZXguanMnO1xuaW1wb3J0ICogYXMgUHJvcGVydHlDb21wb25lbnRVdGlscyBmcm9tICcuL2NvbXBvbmVudHMvcHJvcGVydHktdHlwZS91dGlscy9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyBBY3Rpb25VdGlscyBmcm9tICcuL2ludGVyZmFjZXMvYWN0aW9uL2luZGV4LmpzJztcbmltcG9ydCB3aXRoTm90aWNlIGZyb20gJy4vaG9jL3dpdGgtbm90aWNlLmpzJztcbmltcG9ydCAqIGFzIEhvb2tzIGZyb20gJy4vaG9va3MvaW5kZXguanMnO1xuaW1wb3J0IGNyZWF0ZVN0b3JlIGZyb20gJy4vc3RvcmUvc3RvcmUuanMnO1xuaW1wb3J0IGluaXRUcmFuc2xhdGlvbnMgZnJvbSAnLi91dGlscy9hZG1pbmpzLmkxOG4uanMnO1xuaW1wb3J0IEFwaUNsaWVudCBmcm9tICcuL3V0aWxzL2FwaS1jbGllbnQuanMnO1xuY29uc3QgZW52ID0ge1xuICBOT0RFX0VOVjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgfHwgJ2RldmVsb3BtZW50J1xufTtcbmNvbnN0IHN0b3JlID0gY3JlYXRlU3RvcmUod2luZG93LlJFRFVYX1NUQVRFKTtcbmNvbnN0IHRoZW1lID0gd2luZG93LlRIRU1FO1xuY29uc3Qge1xuICBsb2NhbGVcbn0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuY29uc3Qge1xuICBpMThuXG59ID0gaW5pdFRyYW5zbGF0aW9ucyhsb2NhbGUpO1xuY29uc3QgQXBwbGljYXRpb24gPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQcm92aWRlciwge1xuICBzdG9yZTogc3RvcmVcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRoZW1lUHJvdmlkZXIsIHtcbiAgdGhlbWU6IHRoZW1lXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJMThuZXh0UHJvdmlkZXIsIHtcbiAgaTE4bjogaTE4blxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQnJvd3NlclJvdXRlciwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3VzcGVuc2UsIHtcbiAgZmFsbGJhY2s6IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEFwcExvYWRlciwgbnVsbClcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEFwcCwgbnVsbCkpKSkpKTtcbmNvbnN0IGxvZ2luQXBwUHJvcHMgPSB3aW5kb3cuX19BUFBfU1RBVEVfXyA/PyB7fTtcbmNvbnN0IExvZ2luQXBwbGljYXRpb24gPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChQcm92aWRlciwge1xuICBzdG9yZTogc3RvcmVcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRoZW1lUHJvdmlkZXIsIHtcbiAgdGhlbWU6IHRoZW1lXG59LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChJMThuZXh0UHJvdmlkZXIsIHtcbiAgaTE4bjogaTE4blxufSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQnJvd3NlclJvdXRlciwgbnVsbCwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoU3VzcGVuc2UsIHtcbiAgZmFsbGJhY2s6IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEFwcExvYWRlciwgbnVsbClcbn0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KExvZ2luLCBsb2dpbkFwcFByb3BzKSkpKSkpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbndpbmRvdy5yZWdlbmVyYXRvclJ1bnRpbWUgPSByZWdlbmVyYXRvclJ1bnRpbWU7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHdpdGhOb3RpY2UsXG4gIEFwcGxpY2F0aW9uLFxuICBPcmlnaW5hbEFwcGxpY2F0aW9uOiBPcmlnaW5hbEFwcCxcbiAgTG9naW5BcHBsaWNhdGlvbixcbiAgVmlld0hlbHBlcnMsXG4gIFVzZXJDb21wb25lbnRzOiB7fSxcbiAgQXBpQ2xpZW50LFxuICBCYXNlUHJvcGVydHlDb21wb25lbnQsXG4gIENsZWFuUHJvcGVydHlDb21wb25lbnQsXG4gIGVudixcbiAgLi4uUHJvcGVydHlDb21wb25lbnRVdGlscyxcbiAgLi4uQXBwQ29tcG9uZW50cyxcbiAgLi4uQWN0aW9uQ29tcG9uZW50cyxcbiAgLi4uSG9va3MsXG4gIC4uLkFjdGlvblV0aWxzLFxuICBmbGF0XG59OyJdLCJuYW1lcyI6WyJfdHlwZW9mIiwiX3RvUHJpbWl0aXZlIiwiX3RvUHJvcGVydHlLZXkiLCJ0b1ByaW1pdGl2ZSIsIl9kZWZpbmVQcm9wZXJ0eSIsInRvUHJvcGVydHlLZXkiLCJvYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwicmVxdWlyZSQkMCIsImkiLCJ1bmVzY2FwZSIsIm93bktleXMiLCJfb2JqZWN0U3ByZWFkIiwiZ2V0RGVmYXVsdHMiLCJfZXhjbHVkZWQiLCJpc1ZhbGlkRWxlbWVudCIsImNsb25lRWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJUcmFucyIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX2NyZWF0ZUNsYXNzIiwiY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJUcmFuc1dpdGhvdXRDb250ZXh0IiwiYXJyYXlMaWtlVG9BcnJheSIsImFycmF5V2l0aEhvbGVzIiwiaXRlcmFibGVUb0FycmF5TGltaXQiLCJ1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIm5vbkl0ZXJhYmxlUmVzdCIsInVzZVByZXZpb3VzIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VTdGF0ZSIsInVzZU1lbW8iLCJnbG9iYWxBbnkiLCJmbGF0IiwiZmxhdHRlbiIsImlzQnVmZmVyIiwiaXNPYmplY3QiLCJnZXQiLCJtZXJnZSIsImhhc1N5bWJvbHMiLCJzbGljZSIsInRvU3RyIiwiaW1wbGVtZW50YXRpb24iLCJiaW5kIiwidW5kZWZpbmVkIiwiJFR5cGVFcnJvciIsInJlcXVpcmUkJDEiLCJoYXNPd24iLCJyZXF1aXJlJCQyIiwiJGNvbmNhdCIsIiRyZXBsYWNlIiwicmVQcm9wTmFtZSIsInJlRXNjYXBlQ2hhciIsInN0cmluZ1RvUGF0aCIsIkdldEludHJpbnNpYyIsImNhbGxCb3VuZCIsIm9iamVjdFRvU3RyaW5nIiwiaXNTeW1ib2wiLCJoYXMiLCJpc0FycmF5IiwiaXNSZWdFeHAiLCJpc0VsZW1lbnQiLCJpc051bWJlciIsImlzQm9vbGVhbiIsImlzU3RyaW5nIiwiaXNEYXRlIiwiZm9ybWF0cyIsImFycmF5VG9PYmplY3QiLCJhc3NpZ24iLCJlbmNvZGUiLCJjb21iaW5lIiwidXRpbHMiLCJkZWZhdWx0cyIsInN0cmluZ2lmeSIsInBhcnNlIiwibGliIiwiX2V4dGVuZHMiLCJSZWFjdCIsImgiLCJ0b1N0cmluZyIsImlzRnVuY3Rpb24iLCJpc1BsYWluT2JqZWN0IiwiaXNUeXBlZEFycmF5IiwiaGFzT3duUHJvcGVydHkiLCJub29wIiwicHJvdG90eXBlIiwiVVJMU2VhcmNoUGFyYW1zIiwiRm9ybURhdGEiLCJCbG9iIiwiQXhpb3NIZWFkZXJzIiwidmFsaWRhdG9ycyIsIkF4aW9zIiwiQ2FuY2VsVG9rZW4iLCJIdHRwU3RhdHVzQ29kZSIsImFwaSIsInVzZURpc3BhdGNoIiwidXNlTG9jYXRpb24iLCJ1c2VOYXZpZ2F0ZSIsImFycmF5UmVkdWNlIiwiYmFzZVByb3BlcnR5T2YiLCJkZWJ1cnJMZXR0ZXIiLCJmcmVlR2xvYmFsIiwiZ2xvYmFsIiwicm9vdCIsIlN5bWJvbCIsImFycmF5TWFwIiwib2JqZWN0UHJvdG8iLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsInN5bVRvU3RyaW5nVGFnIiwiZ2V0UmF3VGFnIiwiYmFzZUdldFRhZyIsImlzT2JqZWN0TGlrZSIsInN5bWJvbFRhZyIsInJlcXVpcmUkJDMiLCJJTkZJTklUWSIsInN5bWJvbFByb3RvIiwiYmFzZVRvU3RyaW5nIiwicnNDb21ib01hcmtzUmFuZ2UiLCJyZUNvbWJvSGFsZk1hcmtzUmFuZ2UiLCJyc0NvbWJvU3ltYm9sc1JhbmdlIiwicnNDb21ib1JhbmdlIiwicnNDb21ibyIsImRlYnVyciIsImFzY2lpV29yZHMiLCJoYXNVbmljb2RlV29yZCIsInJzQXN0cmFsUmFuZ2UiLCJyc1ZhclJhbmdlIiwicnNBcG9zIiwicnNGaXR6IiwicnNNb2RpZmllciIsInJzTm9uQXN0cmFsIiwicnNSZWdpb25hbCIsInJzU3VyclBhaXIiLCJyc1pXSiIsInJlT3B0TW9kIiwicnNPcHRWYXIiLCJyc09wdEpvaW4iLCJyc1NlcSIsInVuaWNvZGVXb3JkcyIsIndvcmRzIiwiY3JlYXRlQ29tcG91bmRlciIsImJhc2VTbGljZSIsImNhc3RTbGljZSIsImhhc1VuaWNvZGUiLCJhc2NpaVRvQXJyYXkiLCJyc0FzdHJhbCIsInJzU3ltYm9sIiwicmVVbmljb2RlIiwidW5pY29kZVRvQXJyYXkiLCJzdHJpbmdUb0FycmF5IiwiY3JlYXRlQ2FzZUZpcnN0IiwidXBwZXJGaXJzdCIsInN0YXJ0Q2FzZSIsIm9yaWdpbmFsVXNlVHJhbnNsYXRpb24iLCJ1c2VDYWxsYmFjayIsInVzZVNlbGVjdG9yIiwiaXNLZXkiLCJmdW5jVGFnIiwiY29yZUpzRGF0YSIsImlzTWFza2VkIiwiZnVuY1Byb3RvIiwiZnVuY1RvU3RyaW5nIiwidG9Tb3VyY2UiLCJiYXNlSXNOYXRpdmUiLCJnZXRWYWx1ZSIsImdldE5hdGl2ZSIsIm5hdGl2ZUNyZWF0ZSIsImhhc2hDbGVhciIsImhhc2hEZWxldGUiLCJIQVNIX1VOREVGSU5FRCIsImhhc2hHZXQiLCJoYXNoSGFzIiwiaGFzaFNldCIsInJlcXVpcmUkJDQiLCJIYXNoIiwibGlzdENhY2hlQ2xlYXIiLCJlcSIsImFzc29jSW5kZXhPZiIsImxpc3RDYWNoZURlbGV0ZSIsImxpc3RDYWNoZUdldCIsImxpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsIkxpc3RDYWNoZSIsIk1hcCIsIm1hcENhY2hlQ2xlYXIiLCJpc0tleWFibGUiLCJnZXRNYXBEYXRhIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsIm1lbW9pemUiLCJtZW1vaXplQ2FwcGVkIiwiY2FzdFBhdGgiLCJ0b0tleSIsImJhc2VHZXQiLCJkZWZpbmVQcm9wZXJ0eSIsImJhc2VBc3NpZ25WYWx1ZSIsImFzc2lnblZhbHVlIiwiTUFYX1NBRkVfSU5URUdFUiIsImlzSW5kZXgiLCJiYXNlU2V0IiwiYmFzZVBpY2tCeSIsImJhc2VIYXNJbiIsImFyZ3NUYWciLCJiYXNlSXNBcmd1bWVudHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImlzQXJndW1lbnRzIiwiaXNMZW5ndGgiLCJyZXF1aXJlJCQ1IiwiaGFzUGF0aCIsImhhc0luIiwiYmFzZVBpY2siLCJhcnJheVB1c2giLCJpc0ZsYXR0ZW5hYmxlIiwiYmFzZUZsYXR0ZW4iLCJhcHBseSIsIm92ZXJSZXN0IiwiY29uc3RhbnQiLCJpZGVudGl0eSIsImJhc2VTZXRUb1N0cmluZyIsInNob3J0T3V0Iiwic2V0VG9TdHJpbmciLCJmbGF0UmVzdCIsInVzZVNlYXJjaFBhcmFtcyIsInBpY2siLCJzdHlsZWQiLCJMaW5rIiwiVGV4dCIsIkJveCIsImNzc0NsYXNzIiwiU3R5bGVkTGluayIsIlJvdXRlckxpbmsiLCJCdXR0b25DU1MiLCJJY29uIiwiSDMiLCJIMiIsIkJyZWFkY3J1bWJzIiwiQnV0dG9uR3JvdXAiLCJTdHlsZWRCYWNrQnV0dG9uIiwiQmFkZ2UiLCJNb2RhbCIsIkxvYWRlciIsIk1lc3NhZ2VCb3giLCJhcmVJbnB1dHNFcXVhbCIsInVzZU1lbW9PbmUiLCJwcmVmaXgiLCJpbnZhcmlhbnQiLCJfaW50ZXJvcERlZmF1bHQiLCJub1NwYWNpbmciLCJnZXRXaW5kb3dTY3JvbGwiLCJpc0VxdWFsIiwibWVtb2l6ZU9uZSIsInJhZlNjaGQiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsInJlcXVpcmUkJDgiLCJyZWR1Y2VyIiwiY3JlYXRlU3RvcmUiLCJlc2NhcGUiLCJBcHAiLCJtYXBEaXNwYXRjaFRvUHJvcHMkMSIsIm1hcERpc3BhdGNoVG9Qcm9wcyIsIkJ1dHRvbiIsIlRvb2x0aXAiLCJMYWJlbCIsIlByb3BlcnR5RGVzY3JpcHRpb24iLCJjb252ZXJ0VG9TdWJQcm9wZXJ0eSIsIkRyYWdnYWJsZSIsIkRyYWdEcm9wQ29udGV4dCIsIkRyb3BwYWJsZSIsIlNlY3Rpb24iLCJFZGl0IiwiRm9ybUdyb3VwIiwiUHJvcGVydHlMYWJlbCIsIkZvcm1NZXNzYWdlIiwiT3ZlcnJpZGFibGVFZGl0IiwiTGlzdCIsIlNob3ciLCJWYWx1ZUdyb3VwIiwiSW5wdXQiLCJDaGVja0JveCIsIm1lbW8iLCJtYXBWYWx1ZSIsIkJvb2xlYW5Qcm9wZXJ0eVZhbHVlIiwiRmlsdGVyIiwiU2VsZWN0IiwiQ3VycmVuY3lJbnB1dCIsIkN1cnJlbmN5SW5wdXRXcmFwcGVyIiwiZm9ybWF0Q3VycmVuY3lQcm9wZXJ0eSIsIkRhdGVQaWNrZXIiLCJmb3JtYXREYXRlUHJvcGVydHkiLCJQQVJBTV9TRVBBUkFUT1IiLCJEZWZhdWx0UHJvcGVydHlWYWx1ZSIsIklucHV0R3JvdXAiLCJQaG9uZUlucHV0IiwiU2VsZWN0QXN5bmMiLCJSZWZlcmVuY2VWYWx1ZSIsIlRpbnlNQ0UiLCJSaWNoVGV4dEVkaXRvciIsImdldERlZmF1bHRXaGl0ZUxpc3QiLCJzYWZlQXR0clZhbHVlIiwidXRpbCIsIl8iLCJwYXJzZVN0eWxlIiwicGFyc2VyIiwiREVGQVVMVCIsImlzTnVsbCIsInNoYWxsb3dDb3B5T2JqZWN0IiwiRmlsdGVyQ1NTIiwiX2RlZmF1bHQiLCJwYXJzZVRhZyIsInBhcnNlQXR0ciIsInhzcyIsInJlZ2V4cFRhZyIsImJhc2VJc1JlZ0V4cCIsImJhc2VVbmFyeSIsIm5vZGVVdGlsIiwiYmFzZVByb3BlcnR5IiwiYXNjaWlTaXplIiwidW5pY29kZVNpemUiLCJzdHJpbmdTaXplIiwidHJpbW1lZEVuZEluZGV4IiwiYmFzZVRyaW0iLCJ0b051bWJlciIsInRvRmluaXRlIiwidG9JbnRlZ2VyIiwidHJ1bmNhdGUiLCJFcnJvckJvdW5kYXJ5IiwiRGVzaWduU3lzdGVtIiwiQmFzZVByb3BlcnR5Q29tcG9uZW50IiwiRHJhd2VyQ29udGVudCIsIkFjdGlvbkhlYWRlciIsIkRyYXdlckZvb3RlciIsIkluZm9Cb3giLCJBY3Rpb25CdXR0b24iLCJUYWJsZVJvdyIsIlRhYmxlQ2VsbCIsIlBsYWNlaG9sZGVyIiwiTmF2TGluayIsIlNvcnRMaW5rIiwiVGFibGVIZWFkIiwiUHJvcGVydHlIZWFkZXIiLCJUYWJsZUNhcHRpb24iLCJUaXRsZSIsIlRhYmxlIiwiU2VsZWN0ZWRSZWNvcmRzIiwiUmVjb3Jkc1RhYmxlSGVhZGVyIiwiVGFibGVCb2R5IiwiUmVjb3JkSW5MaXN0IiwiUmVjb3Jkc1RhYmxlIiwiUGFnaW5hdGlvbiIsImNvbm5lY3QiLCJhY3Rpb25zIiwiTmV3IiwiQnVsa0RlbGV0ZSIsIkRhc2hib2FyZCIsIklsbHVzdHJhdGlvbiIsIkg1IiwiVGhlbWVQcm92aWRlciIsIkRyYXdlciIsIkRFRkFVTFRfRFJBV0VSX1dJRFRIIiwiY3JlYXRlUG9ydGFsIiwic3RhY2tDbGVhciIsInN0YWNrRGVsZXRlIiwic3RhY2tHZXQiLCJzdGFja0hhcyIsInN0YWNrU2V0IiwiU3RhY2siLCJzZXRDYWNoZUFkZCIsInNldENhY2hlSGFzIiwiU2V0Q2FjaGUiLCJhcnJheVNvbWUiLCJjYWNoZUhhcyIsIkNPTVBBUkVfUEFSVElBTF9GTEFHIiwiQ09NUEFSRV9VTk9SREVSRURfRkxBRyIsImVxdWFsQXJyYXlzIiwiVWludDhBcnJheSIsIm1hcFRvQXJyYXkiLCJzZXRUb0FycmF5IiwiYm9vbFRhZyIsImRhdGVUYWciLCJlcnJvclRhZyIsIm1hcFRhZyIsIm51bWJlclRhZyIsInNldFRhZyIsInN0cmluZ1RhZyIsImFycmF5QnVmZmVyVGFnIiwiZGF0YVZpZXdUYWciLCJlcXVhbEJ5VGFnIiwiYmFzZUdldEFsbEtleXMiLCJhcnJheUZpbHRlciIsInN0dWJBcnJheSIsIm5hdGl2ZUdldFN5bWJvbHMiLCJnZXRTeW1ib2xzIiwiYmFzZVRpbWVzIiwiYXJyYXlUYWciLCJvYmplY3RUYWciLCJ3ZWFrTWFwVGFnIiwiYmFzZUlzVHlwZWRBcnJheSIsImFycmF5TGlrZUtleXMiLCJpc1Byb3RvdHlwZSIsIm92ZXJBcmciLCJuYXRpdmVLZXlzIiwiYmFzZUtleXMiLCJpc0FycmF5TGlrZSIsImtleXMiLCJnZXRBbGxLZXlzIiwiZXF1YWxPYmplY3RzIiwiRGF0YVZpZXciLCJQcm9taXNlIiwiU2V0IiwiV2Vha01hcCIsImdldFRhZyIsImJhc2VJc0VxdWFsRGVlcCIsImJhc2VJc0VxdWFsIiwiYmFzZUlzTWF0Y2giLCJpc1N0cmljdENvbXBhcmFibGUiLCJnZXRNYXRjaERhdGEiLCJtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSIsImJhc2VNYXRjaGVzIiwiYmFzZU1hdGNoZXNQcm9wZXJ0eSIsImJhc2VQcm9wZXJ0eURlZXAiLCJwcm9wZXJ0eSIsImJhc2VJdGVyYXRlZSIsImdldFByb3RvdHlwZSIsImdldFN5bWJvbHNJbiIsIm5hdGl2ZUtleXNJbiIsImJhc2VLZXlzSW4iLCJrZXlzSW4iLCJnZXRBbGxLZXlzSW4iLCJ1c2VQYXJhbXMiLCJwaWNrQnkiLCJpc05pbCIsIkN1cnJlbnRVc2VyTmF2IiwibWFwU3RhdGVUb1Byb3BzIiwiU3R5bGVkTG9nbyIsInRoZW1lR2V0IiwiTWFkZVdpdGhMb3ZlIiwiTmF2aWdhdGlvbiIsIlNpZGViYXJCcmFuZGluZyIsIlNpZGViYXJQYWdlcyIsIlNpZGViYXJGb290ZXIiLCJEcm9wRG93biIsIkRyb3BEb3duVHJpZ2dlciIsIkRyb3BEb3duTWVudSIsIkRyb3BEb3duSXRlbSIsIlZlcnNpb24iLCJMb2dnZWRJbiIsIkRlZmF1bHREYXNoYm9hcmQiLCJXcmFwcGVyIiwiX3JlZHV4IiwiZXh0ZW5zaW9uQ29tcG9zZVN0dWIiLCJjb21wb3NlV2l0aERldlRvb2xzIiwiZGV2VG9vbHNFbmhhbmNlciIsImFzc2lnbl8xIiwiY29tYmluZVJlZHVjZXJzIiwiY29tcG9zZVdpdGhEZXZUb29sc0RldmVsb3BtZW50T25seSIsImFzc2lnbk1lcmdlVmFsdWUiLCJjcmVhdGVCYXNlRm9yIiwiYmFzZUZvciIsImNsb25lQXJyYXlCdWZmZXIiLCJjbG9uZVR5cGVkQXJyYXkiLCJjb3B5QXJyYXkiLCJiYXNlQ3JlYXRlIiwiaW5pdENsb25lT2JqZWN0IiwiaXNBcnJheUxpa2VPYmplY3QiLCJzYWZlR2V0IiwiY29weU9iamVjdCIsInRvUGxhaW5PYmplY3QiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJyZXF1aXJlJCQxMSIsInJlcXVpcmUkJDEyIiwicmVxdWlyZSQkMTMiLCJyZXF1aXJlJCQxNCIsImJhc2VNZXJnZURlZXAiLCJiYXNlTWVyZ2UiLCJiYXNlUmVzdCIsImlzSXRlcmF0ZWVDYWxsIiwiY3JlYXRlQXNzaWduZXIiLCJSZXNvdXJjZUFjdGlvbiIsIkZpbHRlckRyYXdlciIsInVzZU1hdGNoIiwiQmFzZUFjdGlvbiIsIk92ZXJsYXkiLCJUb3BCYXIiLCJOb3RpY2UiLCJSb3V0ZXMiLCJSb3V0ZSIsIkZvb3RlciIsIkF1dGhlbnRpY2F0aW9uQmFja2dyb3VuZENvbXBvbmVudCIsInNldFByb3RvdHlwZU9mIiwiYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiaXRlcmFibGVUb0FycmF5IiwiYXJyIiwiZWFjaCIsInRoaXMiLCJyZXF1aXJlIiwiZmV0Y2hOb2RlLmRlZmF1bHQiLCJiYXNlRmluZEluZGV4IiwiYmFzZUlzTmFOIiwic3RyaWN0SW5kZXhPZiIsImJhc2VJbmRleE9mIiwiYXJyYXlJbmNsdWRlcyIsImFycmF5SW5jbHVkZXNXaXRoIiwiYmFzZUludGVyc2VjdGlvbiIsImNhc3RBcnJheUxpa2VPYmplY3QiLCJpbnN0YW5jZSIsImkxOG4iLCJMYW5ndWFnZURldGVjdG9yIiwiaW50ZXJzZWN0aW9uIiwiUHJvdmlkZXIiLCJCcm93c2VyUm91dGVyIiwiU3VzcGVuc2UiLCJMb2dpbiIsIk9yaWdpbmFsQXBwIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQUFlLFNBQVNBLFNBQU8sQ0FBQyxHQUFHLEVBQUU7RUFDckMsRUFBRSx5QkFBeUIsQ0FBQztBQUM1QjtFQUNBLEVBQUUsT0FBT0EsU0FBTyxHQUFHLFVBQVUsSUFBSSxPQUFPLE1BQU0sSUFBSSxRQUFRLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxFQUFFO0VBQ3RHLElBQUksT0FBTyxPQUFPLEdBQUcsQ0FBQztFQUN0QixHQUFHLEdBQUcsVUFBVSxHQUFHLEVBQUU7RUFDckIsSUFB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QUFDLENBQUMsT0FBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSUMsR0FBQyxDQUFDLGlEQUFpRCxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUEsa0JBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDQSxHQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqbEU7Ozs7RUNETyxTQUFTLElBQUksR0FBRztFQUN2QixFQUFFLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7RUFDL0IsSUFBSSxJQUFJLFFBQVEsQ0FBQztBQUNqQjtFQUNBLElBQUksS0FBSyxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksR0FB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QUFDLENBQUMsQ0FBQztFQUNwQyxZQUFZLFNBQVM7RUFDckIsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUU7RUFDdEIsWUFBWSxHQUFHLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNwQyxZQUFZLFNBQVM7RUFDckIsU0FBUztBQUNUO0VBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUU7RUFDdkIsWUFBWSxHQUFHLEdBQUcsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2xGLFlBQVksU0FBUztFQUNyQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFO0VBQ3ZDLFlBQVksR0FBRyxHQUFHLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3hILFlBQVksU0FBUztFQUNyQixTQUFTO0FBQ1Q7RUFDQSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDZixRQUFRLENBQUMsR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEtBQUssRUFBRSxLQUFLLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztFQUM3RTtFQUNBLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0VBQ3pDLGNBQWMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUM7RUFDakQsY0FBYyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztFQUNoRCxjQUFjLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDMUMsS0FBSztBQUNMO0VBQ0EsSUFBSSxPQUFPLEdBQUcsQ0FBQztFQUNmLENBQUMsQ0FBQztBQUNGO0VBQ0EsSUFBSSxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFO0VBQ3RDLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztFQUNuRCxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNsQjtFQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7RUFDM0MsUUFBUSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUIsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QztFQUNBLFFBQVEsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNwQyxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0VBQzlDLFlBQVksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzlCLFlBQVksSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxD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RztFQUMzQixFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUc7RUFDM0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRztFQUNyRCxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHO0VBQ3JELEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUc7RUFDckQsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRztFQUNyRCxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUc7RUFDM0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUc7RUFDL0UsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUc7RUFDL0UsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRztFQUNyRCxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHO0VBQ3JELEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHO0VBQ3hDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSTtFQUM1QixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUk7RUFDNUIsRUFBRSxNQUFNLEVBQUUsSUFBSTtFQUNkO0VBQ0EsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7RUFDOUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7RUFDOUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztFQUM3RCxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0VBQzdELEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7RUFDN0QsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0VBQzVFLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztFQUM1RSxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0VBQzdELEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7RUFDN0QsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztFQUM3RCxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7RUFDNUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0VBQzVFLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRztFQUMvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztFQUM5QyxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7RUFDNUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0VBQzVFLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7RUFDN0QsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztFQUM3RCxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztFQUM5QyxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztFQUM5QyxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztFQUM5QyxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRztFQUM5QyxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0VBQzdELEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7RUFDN0QsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7RUFDOUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7RUFDOUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7RUFDM0YsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUc7RUFDM0YsRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLFFBQVEsRUFBRSxHQUFHO0VBQy9CLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHO0VBQzlDLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxFQUFF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QyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxVQUFVLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsRUFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBT0EsVUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRTtFQU9uVixNQUFNLFVBQVUsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUM7RUFDM0QsTUFBTXFNLE1BQUksR0FBRyxLQUFLLElBQUk7RUFDdEIsRUFBRSxNQUFNO0VBQ1IsSUFBSSxRQUFRO0VBQ1osSUFBSSxRQUFRO0VBQ1osSUFBSSxNQUFNO0VBQ1YsR0FBRyxHQUFHLEtBQUssQ0FBQztFQUNaLEVBQUUsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUMxRSxFQUFFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDOUQsRUFBRSxNQUFNO0VBQ1IsSUFBSSxFQUFFO0VBQ04sR0FBRyxHQUFHLGNBQWMs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U0FBUyxDQUFDLEVBQUU7RUFDM0IsSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO0VBQzdDLE1BQU0sSUFBSSxLQUFLO0VBQ2YsVUFBVSxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQzdCO0VBQ0EsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtFQUM3QixRQUFRLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3RGLE9BQU87RUFDUCxNQUFNLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQzlCLE1BQU0sUUFBUSxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztFQUNsRCxRQUFRLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7RUFDakMsT0FBTztFQUNQLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sS0FBSyxTQUFTLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0VBQ3BFLEtBQUs7RUFDTCxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUU7RUFDbEUsSUFBSSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQzlDLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7RUFDcEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7RUFDdEMsS0FBSztFQUNMLEdBQUc7RUFDSCxFQUFFLE9BQU8sTUFBTSxHQUFHLFFBQVEsQ0FBQztFQUMzQixD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QU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7RUFDckQsUUFBUSxRQUFRLEVBQUUsUUFBUTtFQUMxQixPQUFPLENBQUMsQ0FBQztFQUNULE1BQU0sT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztFQUMvRCxLQUFLLENBQUM7RUFDTixHQUFHLENBQUM7RUFDSixDQUFDO0VBQ0QsU0FBUyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUU7RUFDckMsRUFBRSxPQUFPLFlBQVk7RUFDckIsSUFBSSxPQUFPLElBQUlvWixRQUFNLENBQUMsT0FBTyxFQUFFLElBQUlBLFFBQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztFQUNwRixHQUFHLENBQUM7RUFDSixDQUFDO0VBQ0QsU0FBU0UscUJBQW1CLEdBQUc7RUFDL0IsRUFBRSxLQUFLLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtFQUM1RixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDbEMsR0FBRztFQUNILEVBQUUsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLDRCQUE0QixFQUFFO0VBQzVFLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFPLFFBQVEsRUFBRSxDQUFDO0VBQzlDLElBQUksSUFBSSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUUsT0FBTyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMzRSxJQUFJLE9BQU8sbUJBQW1CLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0VBQzNDLEdBQUc7RUFDSCxFQUFFLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxTQUFTLENBQUM7RUFDM0MsRUFBRSxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRSxPQUFPRixRQUFNLENBQUMsT0FBTyxDQUFDO0VBQzFELEVBQUUsT0FBTyxJQUFJQSxRQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7RUFDdkMsQ0FBQztFQUNELE1BQU1HLGtCQUFnQixHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsNEJBQTRCLEdBQUcsUUFBUSxHQUFHLFlBQVk7RUFDdkgsRUFBRSxPQUFPLFVBQVUsSUFBSSxFQUFFO0VBQ3pCLElBQUksT0FBTyxJQUFJLENBQUM7RUFDaEIsR0FBRyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0VBQ0YsT0FBQSxDQUFBLGdCQUF3QixHQUFHQSxrQkFBZ0I7Ozs7RUMzRDNDLE1BQU0sQ0FBQyxjQUFjLENBQUMsbUJBQU8sRUFBRSxZQUFZLEVBQUU7RUFDN0MsRUFBRSxLQUFLLEVBQUUsSUFBSTtFQUNiLENBQUMsQ0FBQyxDQUFDO0VBQ0gsbUJBQUEsQ0FBQSxnQkFBd0IsR0FBRyxtQkFBQSxDQUFBLG1CQUEyQixHQUFHLEtBQUssRUFBRTtFQUNoRSxJQUFJLE1BQU0sR0FBR25jLDJCQUFnQixDQUFDO0VBQ2hCLHVCQUF1QixDQUFDMEMsT0FBb0IsRUFBRTtFQUM1RCxTQUFTLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksT0FBTyxPQUFPLEtBQUssVUFBVSxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLHdCQUF3QixHQUFHLFVBQVUsV0FBVyxFQUFFLEVBQUUsT0FBTyxXQUFXLEdBQUcsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7RUFDdlQsU0FBUyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxHQUFHLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQUksR0FBRyxxQkFBcUIsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLEVB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQ3JDdEIsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDO0VBQzVCLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQztFQU1qQyxNQUFNLGFBQWEsR0FBRztFQUM3QixFQUFFLEtBQUssRUFBRSxhQUFvQixLQUFLLGFBQWE7RUFDL0MsRUFBRSx1QkFBdUIsRUFBRSxJQUFJO0VBQy9CLEVBQUUsYUFBYSxFQUFFO0VBQ2pCLElBQUksV0FBVyxFQUFFLEtBQUs7RUFDdEIsR0FBRztFQUNILEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDO0VBQ2xCLEVBQUUsU0FBUyxFQUFFLFVBQVU7RUFDdkIsRUFBRSxVQUFVLEVBQUUsVUFBVTtFQUN4QixFQUFFLElBQUksRUFBRSxZQUFZO0VBQ3BCLEVBQUUsS0FBSyxFQUFFO0VBQ1QsSUFBSSxXQUFXLEVBQUUsS0FBSztFQUN0QixHQUFHO0VBQ0gsRUFBRSxTQUFTLEVBQUUsRUFBRTtFQUNmLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsWUFBWSxLQUFLLFlBQVksSUFBSTBHLFdBQVMsQ0FBQyxHQUFHLENBQUM7RUFDL0UsRUFBRSxJQUFJLGFBQWEsR0FBRztFQUN0QixJQUFJLE9BQU8sT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDO0VBQ3pDLEdBQUc7RUFDSCxDQUFDOztFQ2ZNLE1BQU0sT0FBTyxHQUFHO0VBQ3ZCLEVBQUUsRUFBRSxFQUFFLFFBQVE7RUFDZCxFQUFFLEVBQUUsRUFBRSxRQUFRO0VBQ2QsRUFBRSxFQUFFLEVBQUUsUUFBUTtFQUNkLEVBQUUsRUFBRSxFQUFFLFFBQVE7RUFDZCxFQUFFLEVBQUUsRUFBRSxRQUFRO0VBQ2QsRUFBRSxFQUFFLEVBQUUsUUFBUTtFQUNkLEVBQUUsT0FBTyxFQUFFLFVBQVU7RUFDckIsRUFBRSxFQUFFLEVBQUUsUUFBUTtFQUNkLEVBQUUsT0FBTyxFQUFFLFVBQVU7RUFDckIsQ0FBQzs7RUNORCxNQUFNMUQsS0FBRyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7RUFDNUIsTUFBTSxZQUFZLEdBQUcsTUFBTTtFQUMzQixFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEdBQUdoRSxnQkFBUSxFQUFFLENBQUM7RUFDekMsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxHQUFHQSxnQkFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQy9DLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBR0EsZ0JBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNyQyxFQUFFLE1BQU0sQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsR0FBR0EsZ0JBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUM1RCxFQUFFLE1BQU0sTUFBTSxHQUFHa1oscUJBQVMsRUFBRSxDQUFDO0VBQzdCLEVBQUUsTUFBTSxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUM7RUFDaEMsRUFBRSxNQUFNO0VBQ1IsSUFBSSxVQUFVO0VBQ2QsSUFBSSxRQUFRO0VBQ1osSUFBSSxVQUFVO0VBQ2QsR0FBRyxHQUFHLE1BQU0sQ0FBQztFQUNiLEVBQUUsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0VBQzNDLEVBQUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDO0VBQ2pGLEVBQUUsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQztFQUNoRixFQUFFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQztFQUNoQyxFQUFFLE1BQU0sVUFBVSxHQUFHLFFBQVEsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxDQUFDO0VBQ3BGLEVBQUUsTUFBTSxXQUFXLEdBQUcsTUFBTTtFQUM1QjtFQUNBLElBQUksSUFBSSxrQkFBa0IsSUFBSSwwQkFBMEIsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO0VBQzlFLE1BQU0sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3hCLE1BQU0sT0FBTztFQUNiLEtBQUs7RUFDTCxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNyQixJQUFJbFYsS0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJO0VBQzlDLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO0VBQ3pFLFFBQVEsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7RUFDeEMsT0FBTztFQUNQLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRTtFQUMzSyxRQUFRLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0VBQ3hDLE9BQU87RUFDUCxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJO0VBQ3RCLE1BQU0sU0FBUyxDQUFDO0VBQ2hCLFFBQVEsT0FBTyxFQUFFLHFCQUFxQjtFQUN0QyxRQUFRLElBQUksRUFBRSxPQUFPO0VBQ3JCLFFBQVEsVUFBVTtFQUNsQixPQUFPLENBQUMsQ0FBQztFQUNULE1BQU0sTUFBTSxLQUFLLENBQUM7RUFDbEIsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU07RUFDckIsTUFBTSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDeEIsS0FBSyxDQUFDLENBQUM7RUFDUCxHQUFHLENBQUM7RUFDSixFQUFFbEUsaUJBQVMsQ0FBQyxNQUFNO0VBQ2xCLElBQUksV0FBVyxFQUFFLENBQUM7RUFDbEIsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0VBQ3pDLEVBQUUsTUFBTSxxQkFBcUIsR0FBRzhILG1CQUFXLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxLQUFLO0VBQ3JFLElBQUksSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO0VBQ3pCLE1BQU0sU0FBUyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0VBQzFELEtBQUssTUFBTTtFQUNYLE1BQU0sV0FBVyxFQUFFLENBQUM7RUFDcEIsS0FBSztFQUNMLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7RUFDcEIsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO0VBQ2pCLElBQUksb0JBQW9CN0Usd0JBQUssQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFO0VBQzdELE1BQU0sVUFBVSxFQUFFLFVBQVU7RUFDNUIsS0FBSyxDQUFDLENBQUM7RUFDUCxHQUFHO0FBQ0g7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxFQUFFLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxRQUFRLENBQUM7RUFDdEYsRUFBRSxJQUFJLE9BQU8sSUFBSSxrQkFBa0IsRUFBRTtFQUNyQyxJQUFJLE9BQU8sa0JBQWtCLEVBQUUsWUFBWSxnQkFBZ0JBLHdCQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxJQUFJLGVBQWVBLHdCQUFLLENBQUMsYUFBYSxDQUFDc0ssbUJBQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxnQkFBZ0J0Syx3QkFBSyxDQUFDLGFBQWEsQ0FBQ3NLLG1CQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDcE0sR0FBRztFQUNILEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxrQkFBa0IsSUFBSSwwQkFBMEIsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO0VBQ3ZGLElBQUksb0JBQW9CdEssd0JBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFO0VBQzNELE1BQU0sVUFBVSxFQUFFLFVBQVU7RUFDNUIsTUFBTSxVQUFVLEVBQUUsVUFBVTtFQUM1QixLQUFLLENBQUMsQ0FBQztFQUNQLEdBQUc7RUFDSCxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7RUFDZixJQUFJLG9CQUFvQkEsd0JBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFO0VBQzNELE1BQU0sVUFBVSxFQUFFLFVBQVU7RUFDNUIsTUFBTSxRQUFRLEVBQUUsUUFBUTtFQUN4QixLQUFLLENBQUMsQ0FBQztFQUNQLEdBQUc7RUFDSCxFQUFFLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztFQUNuRyxFQUFFLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztFQUMxRixFQUFFLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtFQUMzQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7RUFDckIsTUFBTSxvQkFBb0JBLHdCQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRTtFQUM1RCxRQUFRLEtBQUssRUFBRSxNQUFNLENBQUMsY0FBYztFQUNwQyxRQUFRLFVBQVUsRUFBRSxjQUFjO0VBQ2xDLE9BQU8sZUFBZUEsd0JBQUssQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUU7RUFDL0QsUUFBUSxNQUFNLEVBQUUsTUFBTTtFQUN0QixRQUFRLFFBQVEsRUFBRSxRQUFRO0VBQzFCLFFBQVEsTUFBTSxFQUFFLE1BQU07RUFDdEIsT0FBTyxDQUFDLENBQUMsQ0FBQztFQUNWLEtBQUs7RUFDTCxJQUFJLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxVQUFVLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLFNBQVMsQ0FBQztFQUNwRyxJQUFJLG9CQUFvQkEsd0JBQUssQ0FBQyxhQUFhLENBQUNBLHdCQUFLLENBQUMsUUFBUSxFQUFFLElBQUksZUFBZUEsd0JBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFO0VBQ2pILE1BQU0sS0FBSyxFQUFFLE1BQU0sQ0FBQyxjQUFjO0VBQ2xDLE1BQU0sVUFBVSxFQUFFLGNBQWM7RUFDaEMsS0FBSyxlQUFlQSx3QkFBSyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRTtFQUM3RCxNQUFNLE1BQU0sRUFBRSxNQUFNO0VBQ3BCLE1BQU0sUUFBUSxFQUFFLFFBQVE7RUFDeEIsTUFBTSxNQUFNLEVBQUUsTUFBTTtFQUNwQixLQUFLLENBQUMsQ0FBQyxlQUFlQSx3QkFBSyxDQUFDLGFBQWEsQ0FBQ3NYLFNBQU8sRUFBRTtFQUNuRCxNQUFNLEtBQUssRUFBRSxVQUFVLENBQUMsY0FBYztFQUN0QyxNQUFNLFVBQVUsRUFBRSxlQUFlO0VBQ2pDLEtBQUssZUFBZXRYLHdCQUFLLENBQUMsYUFBYSxDQUFDZ1EsdUJBQVksRUFBRTtFQUN0RCxNQUFNLFFBQVEsRUFBRSxRQUFRO0VBQ3hCLE1BQU0sTUFBTSxFQUFFLFVBQVU7RUFDeEIsTUFBTSxHQUFHLEVBQUUsR0FBRztFQUNkLE1BQU0sWUFBWSxFQUFFLFlBQVk7RUFDaEMsS0FBSyxDQUFDLGVBQWVoUSx3QkFBSyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRTtFQUM5RCxNQUFNLE1BQU0sRUFBRSxVQUFVO0VBQ3hCLE1BQU0sUUFBUSxFQUFFLFFBQVE7RUFDeEIsTUFBTSxNQUFNLEVBQUUsTUFBTTtFQUNwQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVCxHQUFHO0VBQ0gsRUFBRSxvQkFBb0JBLHdCQUFLLENBQUMsYUFBYSxDQUFDc1gsU0FBTyxFQUFFO0VBQ25ELElBQUksS0FBSyxFQUFFLE1BQU0sQ0FBQyxjQUFjO0VBQ2hDLElBQUksVUFBVSxFQUFFLGVBQWU7RUFDL0IsR0FBRyxlQUFldFgsd0JBQUssQ0FBQyxhQUFhLENBQUNnUSx1QkFBWSxFQUFFO0VBQ3BELElBQUksUUFBUSxFQUFFLFFBQVE7RUFDdEIsSUFBSSxNQUFNLEVBQUUsTUFBTTtFQUNsQixJQUFJLE1BQU0sRUFBRSxNQUFNO0VBQ2xCLElBQUksZUFBZSxFQUFFLFFBQVEsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO0VBQ3hFLEdBQUcsQ0FBQyxlQUFlaFEsd0JBQUssQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUU7RUFDNUQsSUFBSSxNQUFNLEVBQUUsTUFBTTtFQUNsQixJQUFJLFFBQVEsRUFBRSxRQUFRO0VBQ3RCLElBQUksTUFBTSxFQUFFLE1BQU07RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNOLENBQUMsQ0FBQztBQUNGLDBCQUFlLGFBQWEsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUM7O0VDcEkvRCxNQUFNcVosZ0JBQWMsR0FBRyxLQUFLLElBQUk7RUFDaEMsRUFBRSxNQUFNLE1BQU0sR0FBR2xELHFCQUFTLEVBQUUsQ0FBQztFQUM3QixFQUFFLE1BQU07RUFDUixJQUFJLFNBQVM7RUFDYixHQUFHLEdBQUcsS0FBSyxDQUFDO0VBQ1osRUFBRSxNQUFNO0VBQ1IsSUFBSSxVQUFVO0VBQ2QsSUFBSSxVQUFVO0VBQ2QsR0FBRyxHQUFHLE1BQU0sQ0FBQztFQUNiLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBR2xaLGdCQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDckMsRUFBRSxNQUFNLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLEdBQUdBLGdCQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDNUQsRUFBRSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDO0VBQzVELEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtFQUNqQixJQUFJLG9CQUFvQitDLHdCQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRTtFQUM3RCxNQUFNLFVBQVUsRUFBRSxVQUFVO0VBQzVCLEtBQUssQ0FBQyxDQUFDO0VBQ1AsR0FBRztFQUNILEVBQUUsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7RUFDM0UsRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxFQUFFO0VBQ3JELElBQUksb0JBQW9CQSx3QkFBSyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUU7RUFDM0QsTUFBTSxVQUFVLEVBQUUsVUFBVTtFQUM1QixNQUFNLFVBQVUsRUFBRSxVQUFVO0VBQzVCLEtBQUssQ0FBQyxDQUFDO0VBQ1AsR0FBRztFQUNILEVBQUUsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDO0VBQ2hDLEVBQUUsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLENBQUM7RUFDbkYsRUFBRSxNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNyRSxFQUFFLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztFQUMxRixFQUFFLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtFQUMzQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7RUFDckIsTUFBTSxvQkFBb0JBLHdCQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRTtFQUM1RCxRQUFRLEtBQUssRUFBRSxNQUFNLENBQUMsY0FBYztFQUNwQyxRQUFRLFVBQVUsRUFBRSxjQUFjO0VBQ2xDLE9BQU8sZUFBZUEsd0JBQUssQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUU7RUFDL0QsUUFBUSxNQUFNLEVBQUUsTUFBTTtFQUN0QixRQUFRLFFBQVEsRUFBRSxRQUFRO0VBQzFCLE9BQU8sQ0FBQyxDQUFDLENBQUM7RUFDVixLQUFLO0VBQ0wsSUFBSSxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsVUFBVSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxTQUFTLENBQUM7RUFDcEcsSUFBSSxvQkFBb0JBLHdCQUFLLENBQUMsYUFBYSxDQUFDQSx3QkFBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLGVBQWVBLHdCQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRTtFQUNqSCxNQUFNLEtBQUssRUFBRSxNQUFNLENBQUMsY0FBYztFQUNsQyxNQUFNLFVBQVUsRUFBRSxjQUFjO0VBQ2hDLEtBQUssZUFBZUEsd0JBQUssQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUU7RUFDN0QsTUFBTSxNQUFNLEVBQUUsTUFBTTtFQUNwQixNQUFNLFFBQVEsRUFBRSxRQUFRO0VBQ3hCLE1BQU0sTUFBTSxFQUFFLE1BQU07RUFDcEIsS0FBSyxDQUFDLENBQUMsZUFBZUEsd0JBQUssQ0FBQyxhQUFhLENBQUNzWCxTQUFPLEVBQUU7RUFDbkQsTUFBTSxLQUFLLEVBQUUsVUFBVSxDQUFDLGNBQWM7RUFDdEMsTUFBTSxVQUFVLEVBQUUsVUFBVTtFQUM1QixLQUFLLGVBQWV0WCx3QkFBSyxDQUFDLGFBQWEsQ0FBQ2dRLHVCQUFZLEVBQUU7RUFDdEQsTUFBTSxRQUFRLEVBQUUsUUFBUTtFQUN4QixNQUFNLE1BQU0sRUFBRSxVQUFVO0VBQ3hCLE1BQU0sR0FBRyxFQUFFLEdBQUc7RUFDZCxNQUFNLFlBQVksRUFBRSxZQUFZO0VBQ2hDLEtBQUssQ0FBQyxlQUFlaFEsd0JBQUssQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUU7RUFDOUQsTUFBTSxNQUFNLEVBQUUsVUFBVTtFQUN4QixNQUFNLFFBQVEsRUFBRSxRQUFRO0VBQ3hCLE1BQU0sTUFBTSxFQUFFLE1BQU07RUFDcEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1QsR0FBRztFQUNILEVBQUUsb0JBQW9CQSx3QkFBSyxDQUFDLGFBQWEsQ0FBQ3NYLFNBQU8sRUFBRTtFQUNuRCxJQUFJLEtBQUssRUFBRSxNQUFNLENBQUMsY0FBYztFQUNoQyxJQUFJLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtFQUNqQyxJQUFJLFVBQVUsRUFBRSxVQUFVO0VBQzFCLEdBQUcsZUFBZXRYLHdCQUFLLENBQUMsYUFBYSxDQUFDeUosZ0JBQUcsRUFBRTtFQUMzQyxJQUFJLElBQUksRUFBRSxJQUFJO0VBQ2QsSUFBSSxhQUFhLEVBQUUsUUFBUTtFQUMzQixJQUFJLFFBQVEsRUFBRSxDQUFDO0VBQ2YsR0FBRyxlQUFlekosd0JBQUssQ0FBQyxhQUFhLENBQUNnUSx1QkFBWSxFQUFFO0VBQ3BELElBQUksUUFBUSxFQUFFLFFBQVE7RUFDdEIsSUFBSSxNQUFNLEVBQUUsTUFBTTtFQUNsQixJQUFJLFlBQVksRUFBRSxNQUFNLENBQUMsVUFBVTtFQUNuQyxJQUFJLEdBQUcsRUFBRSxHQUFHO0VBQ1osR0FBRyxDQUFDLGVBQWVoUSx3QkFBSyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRTtFQUM1RCxJQUFJLE1BQU0sRUFBRSxNQUFNO0VBQ2xCLElBQUksUUFBUSxFQUFFLFFBQVE7RUFDdEIsSUFBSSxNQUFNLEVBQUUsTUFBTTtFQUNsQixHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxVQUFVLGlCQUFpQkEsd0JBQUssQ0FBQyxhQUFhLENBQUNzWix1QkFBWSxFQUFFO0VBQzNFLElBQUksUUFBUSxFQUFFLFFBQVE7RUFDdEIsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNOLENBQUMsQ0FBQztFQUNGLE1BQU0vQyxpQkFBZSxHQUFHLEtBQUssS0FBSztFQUNsQyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztFQUM1QixDQUFDLENBQUMsQ0FBQztBQUNILDRCQUFlLGFBQWEsQ0FBQ25GLGtCQUFPLENBQUNtRixpQkFBZSxDQUFDLENBQUM4QyxnQkFBYyxDQUFDLEVBQUUscUJBQXFCLENBQUM7O0VDdkY3RixNQUFNLEdBQUcsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0VBQzVCLE1BQU0sVUFBVSxHQUFHLE1BQU07RUFDekIsRUFBRSxNQUFNLE1BQU0sR0FBR2xELHFCQUFTLEVBQUUsQ0FBQztFQUM3QixFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUdsWixnQkFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQzdDLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBR0EsZ0JBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUNoRCxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUdBLGdCQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDckMsRUFBRSxNQUFNLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLEdBQUdBLGdCQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDNUQsRUFBRSxNQUFNO0VBQ1IsSUFBSSxnQkFBZ0I7RUFDcEIsR0FBRyxHQUFHLGNBQWMsRUFBRSxDQUFDO0VBQ3ZCLEVBQUUsTUFBTSxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUM7RUFDaEMsRUFBRSxNQUFNLFFBQVEsR0FBR2tFLHVCQUFXLEVBQUUsQ0FBQztFQUNqQyxFQUFFLE1BQU07RUFDUixJQUFJLFVBQVU7RUFDZCxJQUFJLFVBQVU7RUFDZCxHQUFHLEdBQUcsTUFBTSxDQUFDO0VBQ2IsRUFBRSxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7RUFDM0MsRUFBRSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7RUFDaEMsRUFBRSxNQUFNLFVBQVUsR0FBRyxRQUFRLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsQ0FBQztFQUNwRixFQUFFLE1BQU0sWUFBWSxHQUFHLE1BQU07RUFDN0IsSUFBSSxNQUFNLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0VBQ2xGLElBQUksTUFBTSxTQUFTLEdBQUcsZUFBZSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3hFLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0VBQ3JCLElBQUksT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDO0VBQzFCLE1BQU0sVUFBVSxFQUFFLFVBQVU7RUFDNUIsTUFBTSxTQUFTO0VBQ2YsTUFBTSxVQUFVLEVBQUUsVUFBVTtFQUM1QixLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJO0VBQ3hCLE1BQU0sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3hCLE1BQU0sVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7RUFDeEMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSTtFQUN0QixNQUFNLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUN4QixNQUFNLFNBQVMsQ0FBQztFQUNoQixRQUFRLE9BQU8sRUFBRSxzQkFBc0I7RUFDdkMsUUFBUSxJQUFJLEVBQUUsT0FBTztFQUNyQixRQUFRLFVBQVU7RUFDbEIsT0FBTyxDQUFDLENBQUM7RUFDVCxNQUFNLE1BQU0sS0FBSyxDQUFDO0VBQ2xCLEtBQUssQ0FBQyxDQUFDO0VBQ1AsR0FBRyxDQUFDO0VBQ0osRUFBRXBFLGlCQUFTLENBQUMsTUFBTTtFQUNsQixJQUFJLFlBQVksRUFBRSxDQUFDO0VBQ25CLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztFQUM5RCxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7RUFDakIsSUFBSSxvQkFBb0JpRCx3QkFBSyxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUU7RUFDN0QsTUFBTSxVQUFVLEVBQUUsVUFBVTtFQUM1QixLQUFLLENBQUMsQ0FBQztFQUNQLEdBQUc7RUFDSCxFQUFFLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUU7RUFDNUIsSUFBSSxvQkFBb0JBLHdCQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRTtFQUM3RCxNQUFNLEtBQUssRUFBRSxZQUFZO0VBQ3pCLEtBQUssZUFBZUEsd0JBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdkcsR0FBRztFQUNILEVBQUUsTUFBTSxNQUFNLEdBQUcseUJBQXlCLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQztFQUMzRixFQUFFLElBQUksT0FBTyxFQUFFO0VBQ2YsSUFBSSxNQUFNLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDO0VBQ2pGLElBQUksT0FBTyxrQkFBa0IsRUFBRSxZQUFZLGdCQUFnQkEsd0JBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLElBQUksZUFBZUEsd0JBQUssQ0FBQyxhQUFhLENBQUNzSyxtQkFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLGdCQUFnQnRLLHdCQUFLLENBQUMsYUFBYSxDQUFDc0ssbUJBQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNwTSxHQUFHO0VBQ0gsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFO0VBQ2YsSUFBSSxvQkFBb0J0Syx3QkFBSyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUU7RUFDM0QsTUFBTSxVQUFVLEVBQUUsVUFBVTtFQUM1QixNQUFNLFVBQVUsRUFBRSxVQUFVO0VBQzVCLEtBQUssQ0FBQyxDQUFDO0VBQ1AsR0FBRztFQUNILEVBQUUsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0VBQ25HLEVBQUUsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0VBQzFGLEVBQUUsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO0VBQzNCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtFQUNyQixNQUFNLG9CQUFvQkEsd0JBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFO0VBQzVELFFBQVEsS0FBSyxFQUFFLE1BQU0sQ0FBQyxjQUFjO0VBQ3BDLFFBQVEsVUFBVSxFQUFFLGNBQWM7RUFDbEMsT0FBTyxlQUFlQSx3QkFBSyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRTtFQUMvRCxRQUFRLE1BQU0sRUFBRSxNQUFNO0VBQ3RCLFFBQVEsUUFBUSxFQUFFLFFBQVE7RUFDMUIsUUFBUSxPQUFPLEVBQUUsT0FBTztFQUN4QixPQUFPLENBQUMsQ0FBQyxDQUFDO0VBQ1YsS0FBSztFQUNMLElBQUksTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFVBQVUsR0FBRyxNQUFNLGdCQUFnQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsU0FBUyxDQUFDO0VBQ3BHLElBQUksb0JBQW9CQSx3QkFBSyxDQUFDLGFBQWEsQ0FBQ0Esd0JBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxlQUFlQSx3QkFBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUU7RUFDakgsTUFBTSxLQUFLLEVBQUUsTUFBTSxDQUFDLGNBQWM7RUFDbEMsTUFBTSxVQUFVLEVBQUUsY0FBYztFQUNoQyxLQUFLLGVBQWVBLHdCQUFLLENBQUMsYUFBYSxDQUFDLG1CQUFtQixFQUFFO0VBQzdELE1BQU0sTUFBTSxFQUFFLE1BQU07RUFDcEIsTUFBTSxRQUFRLEVBQUUsUUFBUTtFQUN4QixNQUFNLE9BQU8sRUFBRSxPQUFPO0VBQ3RCLE1BQU0sTUFBTSxFQUFFLE1BQU07RUFDcEIsS0FBSyxDQUFDLENBQUMsZUFBZUEsd0JBQUssQ0FBQyxhQUFhLENBQUNzWCxTQUFPLEVBQUU7RUFDbkQsTUFBTSxLQUFLLEVBQUUsVUFBVSxDQUFDLGNBQWM7RUFDdEMsTUFBTSxVQUFVLEVBQUUsZUFBZTtFQUNqQyxLQUFLLGVBQWV0WCx3QkFBSyxDQUFDLGFBQWEsQ0FBQ2dRLHVCQUFZLEVBQUU7RUFDdEQsTUFBTSxRQUFRLEVBQUUsUUFBUTtFQUN4QixNQUFNLE1BQU0sRUFBRSxVQUFVO0VBQ3hCLE1BQU0sR0FBRyxFQUFFLEdBQUc7RUFDZCxNQUFNLFlBQVksRUFBRSxZQUFZO0VBQ2hDLEtBQUssQ0FBQyxlQUFlaFEsd0JBQUssQ0FBQyxhQUFhLENBQUMsbUJBQW1CLEVBQUU7RUFDOUQsTUFBTSxNQUFNLEVBQUUsVUFBVTtFQUN4QixNQUFNLFFBQVEsRUFBRSxRQUFRO0VBQ3hCLE1BQU0sTUFBTSxFQUFFLE1BQU07RUFDcEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1QsR0FBRztFQUNILEVBQUUsb0JBQW9CQSx3QkFBSyxDQUFDLGFBQWEsQ0FBQ3NYLFNBQU8sRUFBRTtFQUNuRCxJQUFJLEtBQUssRUFBRSxNQUFNLENBQUMsY0FBYztFQUNoQyxJQUFJLFVBQVUsRUFBRSxlQUFlO0VBQy9CLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxZQUFZLGdCQUFnQnRYLHdCQUFLLENBQUMsYUFBYSxDQUFDZ1EsdUJBQVksRUFBRTtFQUM1RSxJQUFJLFFBQVEsRUFBRSxRQUFRO0VBQ3RCLElBQUksTUFBTSxFQUFFLE1BQU07RUFDbEIsSUFBSSxHQUFHLEVBQUUsR0FBRztFQUNaLEdBQUcsQ0FBQyxHQUFHLEVBQUUsZUFBZWhRLHdCQUFLLENBQUMsYUFBYSxDQUFDLG1CQUFtQixFQUFFO0VBQ2pFLElBQUksTUFBTSxFQUFFLE1BQU07RUFDbEIsSUFBSSxRQUFRLEVBQUUsUUFBUTtFQUN0QixJQUFJLE9BQU8sRUFBRSxPQUFPO0VBQ3BCLElBQUksTUFBTSxFQUFFLE1BQU07RUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNOLENBQUMsQ0FBQztBQUNGLHdCQUFlLGFBQWEsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUM7O0VDbkgzRCxNQUFNLElBQUksR0FBRyxNQUFNO0VBQ25CLEVBQUUsTUFBTSxLQUFLLEdBQUc4RSxzQkFBVyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDbEQsRUFBRSxNQUFNLE1BQU0sR0FBR3FSLHFCQUFTLEVBQUUsQ0FBQztFQUM3QixFQUFFLE1BQU07RUFDUixJQUFJLFFBQVE7RUFDWixHQUFHLEdBQUcsTUFBTSxDQUFDO0VBQ2IsRUFBRSxNQUFNO0VBQ1IsSUFBSSxFQUFFO0VBQ04sR0FBRyxHQUFHLGNBQWMsRUFBRSxDQUFDO0VBQ3ZCLEVBQUUsTUFBTSxXQUFXLEdBQUdqWixlQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDaEQsSUFBSSxJQUFJO0VBQ1IsR0FBRyxLQUFLLElBQUksS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0VBQy9DLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtFQUNwQixJQUFJLG9CQUFvQjhDLHdCQUFLLENBQUMsYUFBYSxDQUFDa1Esb0JBQU8sRUFBRTtFQUNyRCxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUM7RUFDckMsTUFBTSxZQUFZLEVBQUUsVUFBVTtFQUM5QixLQUFLLGVBQWVsUSx3QkFBSyxDQUFDLGFBQWEsQ0FBQ3dKLGlCQUFJLEVBQUU7RUFDOUMsTUFBTSxFQUFFLEVBQUUsS0FBSztFQUNmLEtBQUssZUFBZXhKLHdCQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtFQUMvQyxNQUFNLE9BQU8sRUFBRSxnQ0FBZ0M7RUFDL0MsTUFBTSxNQUFNLEVBQUU7RUFDZCxRQUFRLFFBQVE7RUFDaEIsT0FBTztFQUNQLE1BQU0sVUFBVSxFQUFFO0VBQ2xCLFFBQVEsTUFBTSxlQUFlQSx3QkFBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO0VBQ2hFLE9BQU87RUFDUCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDVCxHQUFHO0VBQ0gsRUFBRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztFQUNsRSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7RUFDbEIsSUFBSSxvQkFBb0JBLHdCQUFLLENBQUMsYUFBYSxDQUFDa1Esb0JBQU8sRUFBRTtFQUNyRCxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUMseUJBQXlCLENBQUM7RUFDMUMsTUFBTSxZQUFZLEVBQUUsUUFBUTtFQUM1QixLQUFLLGVBQWVsUSx3QkFBSyxDQUFDLGFBQWEsQ0FBQ3dKLGlCQUFJLEVBQUU7RUFDOUMsTUFBTSxFQUFFLEVBQUUsS0FBSztFQUNmLEtBQUssZUFBZXhKLHdCQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtFQUMvQyxNQUFNLE9BQU8sRUFBRSxxQ0FBcUM7RUFDcEQsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ1QsR0FBRztFQUNILEVBQUUsb0JBQW9CQSx3QkFBSyxDQUFDLGFBQWEsQ0FBQzRQLGVBQWEsRUFBRSxJQUFJLGVBQWU1UCx3QkFBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztFQUNsSCxDQUFDLENBQUM7QUFDRixrQkFBZSxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsQ0FBQzs7RUN2QzFELE1BQU0sU0FBUyxHQUFHLFFBQVEsSUFBSTtFQUM5QixFQUFFLE1BQU0sQ0FBQyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7RUFDOUIsRUFBRSxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUM7RUFDbkMsRUFBRSxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUM7RUFDbkMsRUFBRSxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUM7RUFDL0IsRUFBRSxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDO0VBQzVDLElBQUksVUFBVTtFQUNkLElBQUksUUFBUTtFQUNaLElBQUksVUFBVTtFQUNkLEdBQUcsQ0FBQyxDQUFDO0VBQ0wsRUFBRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztFQUNoRCxJQUFJLFVBQVU7RUFDZCxJQUFJLFVBQVU7RUFDZCxHQUFHLENBQUMsQ0FBQztFQUNMLEVBQUUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQztFQUN4QyxJQUFJLFVBQVU7RUFDZCxJQUFJLFVBQVU7RUFDZCxHQUFHLENBQUMsQ0FBQztFQUNMLEVBQUUsTUFBTSxtQkFBbUIsR0FBR3VaLG9CQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztFQUMxRCxFQUFFLE1BQU0saUJBQWlCLEdBQUdBLG9CQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7RUFDdEQsRUFBRSxNQUFNLGVBQWUsR0FBR0Esb0JBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztFQUNsRCxFQUFFLE1BQU0sTUFBTSxHQUFHLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxVQUFVLElBQUksaUJBQWlCLEVBQUUsTUFBTSxDQUFDLFVBQVUsSUFBSSxlQUFlLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQztFQUN0SSxFQUFFLE9BQU8sTUFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQztFQUM1RSxDQUFDLENBQUM7RUFDRixNQUFNLGNBQWMsR0FBRyxLQUFLLElBQUk7RUFDaEMsRUFBRSxNQUFNLE1BQU0sR0FBR3BELHFCQUFTLEVBQUUsQ0FBQztFQUM3QixFQUFFLE1BQU07RUFDUixJQUFJLFNBQVM7RUFDYixHQUFHLEdBQUcsS0FBSyxDQUFDO0VBQ1osRUFBRSxNQUFNO0VBQ1IsSUFBSSxVQUFVO0VBQ2QsR0FBRyxHQUFHLE1BQU0sQ0FBQztFQUNiLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBR2xaLGdCQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDckMsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO0VBQ25CLElBQUksT0FBTyxJQUFJLENBQUM7RUFDaEIsR0FBRztFQUNILEVBQUUsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQztFQUM1RCxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7RUFDakIsSUFBSSxvQkFBb0IrQyx3QkFBSyxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUU7RUFDN0QsTUFBTSxVQUFVLEVBQUUsVUFBVTtFQUM1QixLQUFLLENBQUMsQ0FBQztFQUNQLEdBQUc7RUFDSCxFQUFFLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUM1QyxFQUFFLElBQUksYUFBYSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRTtFQUNwRCxJQUFJLE9BQU8sSUFBSSxDQUFDO0VBQ2hCLEdBQUc7RUFDSCxFQUFFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQztFQUNoQyxFQUFFLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxDQUFDO0VBQ25GLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtFQUNuQixJQUFJLG9CQUFvQkEsd0JBQUssQ0FBQyxhQUFhLENBQUMsYUFBYSxFQUFFO0VBQzNELE1BQU0sVUFBVSxFQUFFLFVBQVU7RUFDNUIsTUFBTSxVQUFVLEVBQUUsY0FBYztFQUNoQyxLQUFLLENBQUMsQ0FBQztFQUNQLEdBQUc7RUFDSCxFQUFFLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7RUFDaEUsRUFBRSxvQkFBb0JBLHdCQUFLLENBQUMsYUFBYSxDQUFDeUosZ0JBQUcsRUFBRTtFQUMvQyxJQUFJLElBQUksRUFBRSxJQUFJO0VBQ2QsSUFBSSxPQUFPLEVBQUUsYUFBYTtFQUMxQixJQUFJLFVBQVUsRUFBRSxPQUFPO0VBQ3ZCLElBQUksS0FBSyxFQUFFLFVBQVUsQ0FBQyxjQUFjO0VBQ3BDLElBQUksRUFBRSxFQUFFLE1BQU07RUFDZCxJQUFJLEtBQUssRUFBRTtFQUNYLE1BQU0sR0FBRyxFQUFFLEVBQUU7RUFDYixLQUFLO0VBQ0wsSUFBSSxNQUFNLEVBQUUsTUFBTTtFQUNsQixJQUFJLFVBQVUsRUFBRSxVQUFVO0VBQzFCLEdBQUcsZUFBZXpKLHdCQUFLLENBQUMsYUFBYSxDQUFDeUosZ0JBQUcsRUFBRTtFQUMzQyxJQUFJLElBQUksRUFBRSxJQUFJO0VBQ2QsSUFBSSxhQUFhLEVBQUUsUUFBUTtFQUMzQixJQUFJLFFBQVEsRUFBRSxDQUFDO0VBQ2YsR0FBRyxlQUFlekosd0JBQUssQ0FBQyxhQUFhLENBQUNnUSx1QkFBWSxFQUFFO0VBQ3BELElBQUksUUFBUSxFQUFFLFFBQVE7RUFDdEIsSUFBSSxNQUFNLEVBQUUsVUFBVTtFQUN0QixJQUFJLEdBQUcsRUFBRSxHQUFHO0VBQ1osSUFBSSxZQUFZLEVBQUUsVUFBVSxDQUFDLFVBQVU7RUFDdkMsR0FBRyxDQUFDLGVBQWVoUSx3QkFBSyxDQUFDLGFBQWEsQ0FBQ3daLG1CQUFVLEVBQUU7RUFDbkQsSUFBSSxNQUFNLEVBQUUsVUFBVTtFQUN0QixJQUFJLFFBQVEsRUFBRSxRQUFRO0VBQ3RCLElBQUksTUFBTSxFQUFFLE1BQU07RUFDbEIsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsVUFBVSxpQkFBaUJ4Wix3QkFBSyxDQUFDLGFBQWEsQ0FBQ3NaLHVCQUFZLEVBQUU7RUFDL0UsSUFBSSxRQUFRLEVBQUUsUUFBUTtFQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ04sQ0FBQyxDQUFDO0VBQ0YsTUFBTSxlQUFlLEdBQUcsS0FBSyxLQUFLO0VBQ2xDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO0VBQzVCLENBQUMsQ0FBQyxDQUFDO0FBQ0gsc0JBQWUsYUFBYSxDQUFDbEksa0JBQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxlQUFlLENBQUM7O0VDakd2RjtFQWVBLE1BQU0sQ0FBQyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7RUFDNUIsTUFBTSxHQUFHLEdBQUcsTUFBTTtFQUNsQixFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDLEdBQUduVSxnQkFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzFELEVBQUUsTUFBTSxRQUFRLEdBQUdrRSx1QkFBVyxFQUFFLENBQUM7RUFDakMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0VBQ3JCLEVBQUVwRSxpQkFBUyxDQUFDLE1BQU07RUFDbEIsSUFBSSxJQUFJLGNBQWMsRUFBRTtFQUN4QixNQUFNLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztFQUMzQixLQUFLO0VBQ0wsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztFQUNqQixFQUFFLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQztFQUNuQyxFQUFFLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQztFQUNuQyxFQUFFLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQztFQUMvQixFQUFFLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQztBQUMvQjtFQUNBO0VBQ0E7RUFDQSxFQUFFLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztFQUN4QyxFQUFFLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUM7RUFDcEMsSUFBSSxVQUFVO0VBQ2QsR0FBRyxDQUFDLENBQUM7RUFDTCxFQUFFLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUM7RUFDNUMsSUFBSSxVQUFVO0VBQ2QsSUFBSSxRQUFRO0VBQ1osSUFBSSxVQUFVO0VBQ2QsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0MsRUFBRSxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztFQUNoRCxJQUFJLFVBQVU7RUFDZCxJQUFJLFVBQVU7RUFDZCxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUMzQyxFQUFFLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUM7RUFDeEMsSUFBSSxVQUFVO0VBQ2QsSUFBSSxVQUFVO0VBQ2QsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDM0MsRUFBRSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0VBQ3RDLEVBQUUsb0JBQW9CaUQsd0JBQUssQ0FBQyxhQUFhLENBQUN5SixnQkFBRyxFQUFFO0VBQy9DLElBQUksTUFBTSxFQUFFLE1BQU07RUFDbEIsSUFBSSxJQUFJLEVBQUUsSUFBSTtFQUNkLElBQUksVUFBVSxFQUFFLEtBQUs7RUFDckIsR0FBRyxFQUFFLGNBQWMsZ0JBQWdCekosd0JBQUssQ0FBQyxhQUFhLENBQUN5WixvQkFBTyxFQUFFO0VBQ2hFLElBQUksT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDLENBQUMsY0FBYyxDQUFDO0VBQ2pELElBQUksTUFBTSxFQUFFLGVBQWUsR0FBRyxDQUFDO0VBQy9CLEdBQUcsQ0FBQyxHQUFHLElBQUksZUFBZXpaLHdCQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRTtFQUN2RCxJQUFJLFNBQVMsRUFBRSxjQUFjO0VBQzdCLElBQUksVUFBVSxFQUFFLFNBQVM7RUFDekIsR0FBRyxDQUFDLGVBQWVBLHdCQUFLLENBQUMsYUFBYSxDQUFDeUosZ0JBQUcsRUFBRTtFQUM1QyxJQUFJLElBQUksRUFBRSxJQUFJO0VBQ2QsSUFBSSxRQUFRLEVBQUUsQ0FBQztFQUNmLElBQUksYUFBYSxFQUFFLFFBQVE7RUFDM0IsSUFBSSxTQUFTLEVBQUUsTUFBTTtFQUNyQixJQUFJLEVBQUUsRUFBRSxJQUFJO0VBQ1osSUFBSSxVQUFVLEVBQUUsYUFBYTtFQUM3QixHQUFHLGVBQWV6Six3QkFBSyxDQUFDLGFBQWEsQ0FBQzBaLGlCQUFNLEVBQUU7RUFDOUMsSUFBSSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUMsQ0FBQyxjQUFjLENBQUM7RUFDdkQsR0FBRyxDQUFDLGVBQWUxWix3QkFBSyxDQUFDLGFBQWEsQ0FBQ3lKLGdCQUFHLEVBQUU7RUFDNUMsSUFBSSxRQUFRLEVBQUUsVUFBVTtFQUN4QixJQUFJLEdBQUcsRUFBRSxDQUFDO0VBQ1YsSUFBSSxNQUFNLEVBQUUsSUFBSTtFQUNoQixJQUFJLFVBQVUsRUFBRSxRQUFRO0VBQ3hCLEdBQUcsZUFBZXpKLHdCQUFLLENBQUMsYUFBYSxDQUFDMlosNkJBQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxlQUFlM1osd0JBQUssQ0FBQyxhQUFhLENBQUM0WixxQkFBTSxFQUFFLElBQUksZUFBZTVaLHdCQUFLLENBQUMsYUFBYSxDQUFDNlosb0JBQUssRUFBRTtFQUM3SSxJQUFJLElBQUksRUFBRSxZQUFZO0VBQ3RCLEdBQUcsZUFBZTdaLHdCQUFLLENBQUMsYUFBYSxDQUFDNlosb0JBQUssRUFBRTtFQUM3QyxJQUFJLEtBQUssRUFBRSxJQUFJO0VBQ2YsSUFBSSxPQUFPLGVBQWU3Wix3QkFBSyxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDO0VBQ25FLEdBQUcsQ0FBQyxDQUFDLGVBQWVBLHdCQUFLLENBQUMsYUFBYSxDQUFDNlosb0JBQUssRUFBRTtFQUMvQyxJQUFJLElBQUksRUFBRSxXQUFXO0VBQ3JCLEdBQUcsZUFBZTdaLHdCQUFLLENBQUMsYUFBYSxDQUFDNlosb0JBQUssRUFBRTtFQUM3QyxJQUFJLEtBQUssRUFBRSxJQUFJO0VBQ2YsSUFBSSxPQUFPLGVBQWU3Wix3QkFBSyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDO0VBQ2xFLEdBQUcsQ0FBQyxlQUFlQSx3QkFBSyxDQUFDLGFBQWEsQ0FBQzZaLG9CQUFLLEVBQUU7RUFDOUMsSUFBSSxJQUFJLEVBQUUsYUFBYTtFQUN2QixJQUFJLE9BQU8sZUFBZTdaLHdCQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUM7RUFDcEUsR0FBRyxDQUFDLGVBQWVBLHdCQUFLLENBQUMsYUFBYSxDQUFDNlosb0JBQUssRUFBRTtFQUM5QyxJQUFJLElBQUksRUFBRSxpQkFBaUI7RUFDM0IsSUFBSSxPQUFPLGVBQWU3Wix3QkFBSyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUM7RUFDeEUsR0FBRyxDQUFDLGVBQWVBLHdCQUFLLENBQUMsYUFBYSxDQUFDNlosb0JBQUssRUFBRTtFQUM5QyxJQUFJLElBQUksRUFBRSxlQUFlO0VBQ3pCLElBQUksT0FBTyxlQUFlN1osd0JBQUssQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO0VBQ3RFLEdBQUcsQ0FBQyxDQUFDLGVBQWVBLHdCQUFLLENBQUMsYUFBYSxDQUFDNlosb0JBQUssRUFBRTtFQUMvQyxJQUFJLElBQUksRUFBRSxPQUFPO0VBQ2pCLEdBQUcsZUFBZTdaLHdCQUFLLENBQUMsYUFBYSxDQUFDNlosb0JBQUssRUFBRTtFQUM3QyxJQUFJLEtBQUssRUFBRSxJQUFJO0VBQ2YsSUFBSSxPQUFPLGVBQWU3Wix3QkFBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO0VBQzlELEdBQUcsQ0FBQyxDQUFDLGVBQWVBLHdCQUFLLENBQUMsYUFBYSxDQUFDNlosb0JBQUssRUFBRTtFQUMvQyxJQUFJLElBQUksRUFBRSxHQUFHO0VBQ2IsSUFBSSxPQUFPLGVBQWU3Wix3QkFBSyxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDO0VBQ25FLEdBQUcsQ0FBQyxDQUFDLGVBQWVBLHdCQUFLLENBQUMsYUFBYSxDQUFDOFosaUJBQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxlQUFlOVosd0JBQUssQ0FBQyxhQUFhLENBQUNxSyxVQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWVySyx3QkFBSyxDQUFDLGFBQWEsQ0FBQytaLDRDQUFpQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDbEwsQ0FBQyxDQUFDO0VBQ0YsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUM7O0VDdkd6QyxTQUFTLHNCQUFzQixDQUFDLElBQUksRUFBRTtFQUNyRCxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQ3ZCLElBQUksTUFBTSxJQUFJLGNBQWMsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0VBQzFGLEdBQUc7RUFDSCxFQUFFLE9BQU8sSUFBSSxDQUFDO0VBQ2Q7O0VDTGUsU0FBUyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUM5QyxFQUFFLGVBQWUsR0FBRyxNQUFNLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsU0FBUyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUMxRyxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0VBQ3BCLElBQUksT0FBTyxDQUFDLENBQUM7RUFDYixHQUFHLENBQUM7RUFDSixFQUFFLE9BQU8sZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztFQUMvQjs7RUNMZSxTQUFTLFNBQVMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFO0VBQ3hELEVBQUUsSUFBSSxPQUFPLFVBQVUsS0FBSyxVQUFVLElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtFQUMvRCxJQUFJLE1BQU0sSUFBSSxTQUFTLENBQUMsb0RBQW9ELENBQUMsQ0FBQztFQUM5RSxHQUFHO0VBQ0gsRUFBRSxRQUFRLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUU7RUFDekUsSUFBSSxXQUFXLEVBQUU7RUFDakIsTUFBTSxLQUFLLEVBQUUsUUFBUTtFQUNyQixNQUFNLFFBQVEsRUFBRSxJQUFJO0VBQ3BCLE1BQU0sWUFBWSxFQUFFLElBQUk7RUFDeEIsS0FBSztFQUNMLEdBQUcsQ0FBQyxDQUFDO0VBQ0wsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUU7RUFDL0MsSUFBSSxRQUFRLEVBQUUsS0FBSztFQUNuQixHQUFHLENBQUMsQ0FBQztFQUNMLEVBQUUsSUFBSSxVQUFVLEVBQUVDLGVBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7RUFDdkQ7O0VDZGUsU0FBUywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0VBQy9ELEVBQUUsSUFBSSxJQUFJLEtBQUtoZixTQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVUsQ0FBQyxFQUFFO0VBQzFFLElBQUksT0FBTyxJQUFJLENBQUM7RUFDaEIsR0FBRyxNQUFNLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0VBQzlCLElBQUksTUFBTSxJQUFJLFNBQVMsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO0VBQ3BGLEdBQUc7RUFDSCxFQUFFLE9BQU9pZixzQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNyQzs7RUNUZSxTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUU7RUFDM0MsRUFBRSxlQUFlLEdBQUcsTUFBTSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLFNBQVMsZUFBZSxDQUFDLENBQUMsRUFBRTtFQUN2RyxJQUFJLE9BQU8sQ0FBQyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ25ELEdBQUcsQ0FBQztFQUNKLEVBQUUsT0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDNUI7O0VDTGUsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7RUFDL0MsRUFBRSxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUM1SDs7RUNFZSxTQUFTLFFBQVEsQ0FBQyxHQUFHLEVBQUU7RUFDdEMsRUFBRSxPQUFPeGQsZUFBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJeWQsZ0JBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSXZkLDJCQUEwQixDQUFDLEdBQUcsQ0FBQyxJQUFJQyxnQkFBZSxFQUFFLENBQUM7RUFDN0c7O0VDSUEsU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxFQUFFLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQWMsS0FBSyxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsRUFBRSxFQUFFLE9BQU8sTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUU7RUFDdlYsU0FBUyxlQUFlLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLE1BQU0sR0FBRyxJQUFJLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLEVBQUUsRUFBRXhCLGlCQUFlLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMseUJBQXlCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxFQUFFLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxNQUFNLENBQUMsRUFBRTtFQUNoZ0IsSUFBSSxhQUFhLEdBQUc7RUFDcEIsRUFBRSxJQUFJLEVBQUUsUUFBUTtFQUNoQixFQUFFLEdBQUcsRUFBRSxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUU7RUFDMUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztFQUM3QixHQUFHO0VBQ0gsRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFO0VBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDOUIsR0FBRztFQUNILEVBQUUsS0FBSyxFQUFFLFNBQVMsS0FBSyxDQUFDLElBQUksRUFBRTtFQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQy9CLEdBQUc7RUFDSCxFQUFFLE1BQU0sRUFBRSxTQUFTLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO0VBQ3RDLElBQUksSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3JFLEdBQUc7RUFDSCxDQUFDLENBQUM7RUFDRixJQUFJLE1BQU0sR0FBRyxZQUFZO0VBQ3pCLEVBQUUsU0FBUyxNQUFNLENBQUMsY0FBYyxFQUFFO0VBQ2xDLElBQUksSUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQ3pGLElBQUljLGlCQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0VBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7RUFDdkMsR0FBRztFQUNILEVBQUVFLGNBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztFQUN4QixJQUFJLEdBQUcsRUFBRSxNQUFNO0VBQ2YsSUFBSSxLQUFLLEVBQUUsU0FBUyxJQUFJLENBQUMsY0FBYyxFQUFFO0VBQ3pDLE1BQU0sSUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0VBQzNGLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQztFQUNqRCxNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsY0FBYyxJQUFJLGFBQWEsQ0FBQztFQUNwRCxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0VBQzdCLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0VBQ2pDLEtBQUs7RUFDTCxHQUFHLEVBQUU7RUFDTCxJQUFJLEdBQUcsRUFBRSxVQUFVO0VBQ25CLElBQUksS0FBSyxFQUFFLFNBQVMsUUFBUSxDQUFDLElBQUksRUFBRTtFQUNuQyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0VBQ3hCLEtBQUs7RUFDTCxHQUFHLEVBQUU7RUFDTCxJQUFJLEdBQUcsRUFBRSxLQUFLO0VBQ2QsSUFBSSxLQUFLLEVBQUUsU0FBUyxHQUFHLEdBQUc7RUFDMUIsTUFBTSxLQUFLLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtFQUMvRixRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDckMsT0FBTztFQUNQLE1BQU0sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ2pELEtBQUs7RUFDTCxHQUFHLEVBQUU7RUFDTCxJQUFJLEdBQUcsRUFBRSxNQUFNO0VBQ2YsSUFBSSxLQUFLLEVBQUUsU0FBUyxJQUFJLEdBQUc7RUFDM0IsTUFBTSxLQUFLLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtFQUNyRyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7RUFDdkMsT0FBTztFQUNQLE1BQU0sT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ2xELEtBQUs7RUFDTCxHQUFHLEVBQUU7RUFDTCxJQUFJLEdBQUcsRUFBRSxPQUFPO0VBQ2hCLElBQUksS0FBSyxFQUFFLFNBQVMsS0FBSyxHQUFHO0VBQzVCLE1BQU0sS0FBSyxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7RUFDckcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3ZDLE9BQU87RUFDUCxNQUFNLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0VBQzdDLEtBQUs7RUFDTCxHQUFHLEVBQUU7RUFDTCxJQUFJLEdBQUcsRUFBRSxXQUFXO0VBQ3BCLElBQUksS0FBSyxFQUFFLFNBQVMsU0FBUyxHQUFHO0VBQ2hDLE1BQU0sS0FBSyxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7RUFDckcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQ3ZDLE9BQU87RUFDUCxNQUFNLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLHNCQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3RFLEtBQUs7RUFDTCxHQUFHLEVBQUU7RUFDTCxJQUFJLEdBQUcsRUFBRSxTQUFTO0VBQ2xCLElBQUksS0FBSyxFQUFFLFNBQVMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtFQUMxRCxNQUFNLElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksQ0FBQztFQUNoRCxNQUFNLElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUM1RyxNQUFNLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztFQUNwQyxLQUFLO0VBQ0wsR0FBRyxFQUFFO0VBQ0wsSUFBSSxHQUFHLEVBQUUsUUFBUTtFQUNqQixJQUFJLEtBQUssRUFBRSxTQUFTLE1BQU0sQ0FBQyxVQUFVLEVBQUU7RUFDdkMsTUFBTSxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUs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QUFNLElBQUksT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztFQUMzRixNQUFNLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLEtBQUssU0FBUyxHQUFHLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7RUFDL0csTUFBTSxJQUFJLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsS0FBSyxTQUFTLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUM7RUFDM0ksTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNsRSxNQUFNLElBQUksR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztFQUMzRyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtFQUNqQyxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQzlCLE9BQU87RUFDUCxNQUFNLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzVDLE1BQU0sSUFBSSxNQUFNLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVB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Q0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO0VBQ3ZDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUU7RUFDcEMsWUFBWSxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztFQUN0QyxXQUFXLENBQUMsQ0FBQztFQUNiLFNBQVMsTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0VBQ25DLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztFQUNwQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDcEMsVUFBVSxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztFQUNuRyxTQUFTLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtFQUNuQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDcEMsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7RUFDM0QsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMs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QztFQUNuQixLQUFLO0VBQ0wsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNOLEVBQUUsT0FBTyxZQUFZLENBQUM7RUFDdEIsQ0FBQyxFQUFFLENBQUM7QUFDSjtFQUNBLElBQUksSUFBSSxHQUFHLENBQUM7RUFDWixFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7RUFDeEksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1osRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUNQLENBQUMsRUFBRTtFQUNILEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7RUFDaFosRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1osRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUNQLENBQUMsRUFBRTtFQUNILEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO0VBQy9JLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQ1QsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUNQLENBQUMsRUFBRTtFQUNILEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztFQUN6RCxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUNQLENBQUMsRUFBRTtFQUNILEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2QsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztFQUMzQixFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ1AsQ0FBQyxFQUFFO0VBQ0gsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0VBQ3BCLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDZixFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ1AsQ0FBQyxFQUFFO0VBQ0gsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO0VBQ3JCLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDZixFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ1AsQ0FBQyxFQUFFO0VBQ0gsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDZCxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNsQixFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ1AsQ0FBQyxFQUFFO0VBQ0gsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDZCxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDWixFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ1AsQ0FBQyxFQUFFO0VBQ0gsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDZCxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDdEIsRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUNSLENBQUMsRUFBRTtFQUNILEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2QsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDbkIsRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUNSLENBQUMsRUFBRTtFQUNILEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2QsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1osRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUNSLENBQUMsRUFBRTtFQUNILEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2QsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1osRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUNSLENBQUMsRUFBRTtFQUNILEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2QsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDbEIsRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUNSLENBQUMsRUFBRTtFQUNILEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2QsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUNoQixFQUFFLEVBQUUsRUFBRSxFQUFFO0VBQ1IsQ0FBQyxFQUFFO0VBQ0gsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDZCxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2YsRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUNSLENBQUMsRUFBRTtFQUNILEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2QsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ1osRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUNSLENBQUMsRUFBRTtFQUNILEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDO0VBQ2YsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNmLEVBQUUsRUFBRSxFQUFFLEVBQUU7RUFDUixDQUFDLEVBQUU7RUFDSCxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQztFQUNkLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ3BCLEVBQUUsRUFBRSxFQUFFLEVBQUU7RUFDUixDQUFDLEVBQUU7RUFDSCxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQztFQUNkLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNaLEVBQUUsRUFBRSxFQUFFLENBQUM7RUFDUCxDQUFDLEVBQUU7RUFDSCxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQztFQUNkLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDaEIsRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUNSLENBQUMsRUFBRTtFQUNILEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2QsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDbEIsRUFBRSxFQUFFLEVBQUUsRUFBRTtFQUNSLENBQUMsRUFBRTtFQUNILEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztFQUNwQixFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztFQUNwQixFQUFFLEVBQUUsRUFBRSxFQUFFO0VBQ1IsQ0FBQyxDQUFDLENBQUM7RUFDSCxJQUFJLGtCQUFrQixHQUFHO0VBQ3pCLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtFQUNuQixJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUN6QixHQUFHO0VBQ0gsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO0VBQ25CLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEdBQUc7RUFDSCxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7RUFDbkIsSUFBSSxPQUFPLENBQUMsQ0FBQztFQUNiLEdBQUc7RUFDSCxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7RUFDbkIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDNUgsR0FBRztFQUNILEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtFQUNuQixJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDcEgsR0FBRztFQUNILEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtFQUNuQixJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDekQsR0FBRztFQUNILEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtFQUNuQixJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3RHLEdBQUc7RUFDSCxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7RUFDbkIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3ZFLEdBQUc7RUFDSCxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7RUFDbkIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDMUIsR0FBRztFQUNILEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtFQUNwQixJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3hFLEdBQUc7RUFDSCxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7RUFDcEIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMzRixHQUFHO0VBQ0gsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO0VBQ3BCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztFQUNoRCxHQUFHO0VBQ0gsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO0VBQ3BCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQzNCLEdBQUc7RUFDSCxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7RUFDcEIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUM1RCxHQUFHO0VBQ0gsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO0VBQ3BCLElBQUksT0FBTyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQzdHLEdBQUc7RUFDSCxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7RUFDcEIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJ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RyxFQUFFLElBQUksRUFBRTtFQUNsRCxRQUFRLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztFQUM5QixRQUFRLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0VBQzVDLFVBQVUsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztFQUNqRCxVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUM1RixTQUFTO0VBQ1QsUUFBUSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUU7RUFDdEQsVUFBVSxVQUFVLENBQUMsWUFBWTtFQUNqQyxZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7RUFDckYsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ25CLFVBQVUsT0FBTztFQUNqQixTQUFTO0VBQ1QsUUFBUSxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQzVCLE9BQU8sQ0FBQztFQUNSLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0VBQ3ZELE1BQU0sSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtFQUMzQixRQUFRLElBQUk7RUFDWixVQUFVLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7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QztFQUN0QixLQUFLO0VBQ0wsR0FBRyxFQUFFO0VBQ0wsSUFBSSxHQUFHLEVBQUUsS0FBSztFQUNkLElBQUksS0FBSyxFQUFFLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRTtFQUM3QixNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztFQUNqSSxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxLQUFLLENBQUM7RUFDN0IsTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElB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Q0FBbUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtFQUN6SixTQUFTLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFO0VBQzdVLFNBQVMsWUFBWSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxVQUFVLEVBQUUsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxFQUFFLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxXQUFXLENBQUMsRUFBRTtFQUM3UixTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUs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LENBQUNvYixtQkFBUSxFQUFFO0VBQ3BFLEVBQUUsS0FBSyxFQUFFLEtBQUs7RUFDZCxDQUFDLGVBQWVwYix3QkFBSyxDQUFDLGFBQWEsQ0FBQzJSLDhCQUFhLEVBQUU7RUFDbkQsRUFBRSxLQUFLLEVBQUUsS0FBSztFQUNkLENBQUMsZUFBZTNSLHdCQUFLLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRTtFQUNyRCxFQUFFLElBQUksRUFBRSxJQUFJO0VBQ1osQ0FBQyxlQUFlQSx3QkFBSyxDQUFDLGFBQWEsQ0FBQ3FiLDRCQUFhLEVBQUUsSUFBSSxlQUFlcmIsd0JBQUssQ0FBQyxhQUFhLENBQUNzYixnQkFBUSxFQUFFO0VBQ3BHLEVBQUUsUUFBUSxlQUFldGIsd0JBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQztFQUM3RCxDQUFDLGVBQWVBLHdCQUFLLENBQUMsYUFBYSxDQUFDdWIsT0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRDtFQUNBO0VBQ0EsTUFBTSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQy9DLG9CQUFlO0VBQ2YsRUFBRSxVQUFVO0VBQ1osRUFBRSxXQUFXO0VBQ2IsRUFBRSxtQkFBbUIsRUFBRUMsR0FBVztFQUNsQyxFQUFFLGdCQUFnQjtFQUNsQixFQUFFLFdBQVc7RUFDYixFQUFFLGNBQWMsRUFBRSxFQUFFO0VBQ3BCLEVBQUUsU0FBUztFQUNYLHlCQUFFMUwsNkJBQXFCO0VBQ3ZCLEVBQUUsc0JBQXNCO0VBQ3hCLEVBQUUsR0FBRztFQUNMLEVBQUUsR0FBRyxzQkFBc0I7RUFDM0IsRUFBRSxHQUFHLGFBQWE7RUFDbEIsRUFBRSxHQUFHLGdCQUFnQjtFQUNyQixFQUFFLEdBQUcsS0FBSztFQUNWLEVBQUUsR0FBRyxXQUFXO0VBQ2hCLEVBQUUsSUFBSTtFQUNOLENBQUM7Ozs7Ozs7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTI3LDEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDM2MSwzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDM4NCwzODUsMzg2LDM4NywzODgsMzg5LDM5MCwzOTEsMzkyLDM5MywzOTQsMzk1LDM5NiwzOTcsMzk4LDM5OSw0MDAsNDAxLDQwMiw0MDMsNDA0LDQwNSw0MDYsNDA3LDQwOCw0MDksNDEwLDQxMSw0MTIsNDEzLDQxNCw0MTUsNDE2LDQxNyw0MTgsNDE5LDQyMCw0MjEsNDIyLDQzOSw0NDAsNDQxLDQ0Miw0NDMsNDQ0LDQ2MSw0NjIsNDYzLDQ2NCw0NjUsNDY2LDQ2Nyw0NjgsNDY5LDQ3MCw0NzEsNDcyLDQ3Myw0NzQsNDc1LDQ3Niw0NzcsNDc4LDQ3OSw0ODAsNDg5LDQ5MCw0OTEsNDkyLDQ5Myw0OTQsNDk1LDQ5Niw0OTcsNDk4LDQ5OSw1MDAsNTAxLDUwMiw1MDMsNTA0LDUwNSw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMV19
Save
Close
Exit & Reset
Text mode: syntax highlighting auto-detects file type.
Directory Contents
Dirs: 0 × Files: 5
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
.htaccess
127 B
lr--r--r--
2026-03-14 01:49:11
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
app-bundle.development.js
4.39 MB
lrw-r--r--
2026-03-05 00:20:19
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
app-bundle.production.js
676.06 KB
lrw-r--r--
2026-03-05 00:20:22
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
global-bundle.development.js
9.25 MB
lrw-r--r--
2026-03-05 00:20:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
global-bundle.production.js
677.30 KB
lrw-r--r--
2026-03-05 00:20:25
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).