mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-20 19:15:35 +08:00
# Conflicts: # jsowell-ui/.env.development # jsowell-ui/.env.staging # jsowell-ui/bin/build-sit.bat # jsowell-ui/bin/build.bat # jsowell-ui/src/api/adapayMember/adapayMember.js # jsowell-ui/src/api/pile/merchant.js # jsowell-ui/src/router/index.js # jsowell-ui/src/views/financial/financeDetail.vue # jsowell-ui/src/views/financial/merchant.vue # jsowell-ui/src/views/homeIndex/homeIndex.vue # jsowell-ui/src/views/login.vue # jsowell-ui/src/views/pile/basic/detail.vue # jsowell-ui/src/views/pile/station/components/SiteInfo.vue # jsowell-ui/src/views/pile/station/detail.vue # jsowell-ui/src/views/pile/station/orderReport.vue
1 line
4.0 MiB
1 line
4.0 MiB
!function(t){function n(e){if(l[e])return l[e].exports;var I=l[e]={i:e,l:!1,exports:{}};return t[e].call(I.exports,I,I.exports,n),I.l=!0,I.exports}var l={};n.m=t,n.c=l,n.d=function(t,l,e){n.o(t,l)||Object.defineProperty(t,l,{configurable:!1,enumerable:!0,get:e})},n.n=function(t){var l=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(l,"a",l),l},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p="",n(n.s=26)}([function(module,exports,__webpack_require__){"use strict";eval("/* WEBPACK VAR INJECTION */(function(process) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || 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; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.format = format;\nexports.isEmptyValue = isEmptyValue;\nexports.isEmptyObject = isEmptyObject;\nexports.asyncMap = asyncMap;\nexports.complementError = complementError;\nexports.deepMerge = deepMerge;\nvar formatRegExp = /%[sdj%]/g;\n\nvar warning = exports.warning = function warning() {};\n\n// don't print warning message when in production env or node runtime\nif (process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') {\n exports.warning = warning = function warning(type, errors) {\n if (typeof console !== 'undefined' && console.warn) {\n if (errors.every(function (e) {\n return typeof e === 'string';\n })) {\n console.warn(type, errors);\n }\n }\n };\n}\n\nfunction format() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var i = 1;\n var f = args[0];\n var len = args.length;\n if (typeof f === 'function') {\n return f.apply(null, args.slice(1));\n }\n if (typeof f === 'string') {\n var str = String(f).replace(formatRegExp, function (x) {\n if (x === '%%') {\n return '%';\n }\n if (i >= len) {\n return x;\n }\n switch (x) {\n case '%s':\n return String(args[i++]);\n case '%d':\n return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n break;\n default:\n return x;\n }\n });\n for (var arg = args[i]; i < len; arg = args[++i]) {\n str += ' ' + arg;\n }\n return str;\n }\n return f;\n}\n\nfunction isNativeStringType(type) {\n return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'pattern';\n}\n\nfunction isEmptyValue(value, type) {\n if (value === undefined || value === null) {\n return true;\n }\n if (type === 'array' && Array.isArray(value) && !value.length) {\n return true;\n }\n if (isNativeStringType(type) && typeof value === 'string' && !value) {\n return true;\n }\n return false;\n}\n\nfunction isEmptyObject(obj) {\n return Object.keys(obj).length === 0;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n var results = [];\n var total = 0;\n var arrLength = arr.length;\n\n function count(errors) {\n results.push.apply(results, errors);\n total++;\n if (total === arrLength) {\n callback(results);\n }\n }\n\n arr.forEach(function (a) {\n func(a, count);\n });\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n var index = 0;\n var arrLength = arr.length;\n\n function next(errors) {\n if (errors && errors.length) {\n callback(errors);\n return;\n }\n var original = index;\n index = index + 1;\n if (original < arrLength) {\n func(arr[original], next);\n } else {\n callback([]);\n }\n }\n\n next([]);\n}\n\nfunction flattenObjArr(objArr) {\n var ret = [];\n Object.keys(objArr).forEach(function (k) {\n ret.push.apply(ret, objArr[k]);\n });\n return ret;\n}\n\nfunction asyncMap(objArr, option, func, callback) {\n if (option.first) {\n var flattenArr = flattenObjArr(objArr);\n return asyncSerialArray(flattenArr, func, callback);\n }\n var firstFields = option.firstFields || [];\n if (firstFields === true) {\n firstFields = Object.keys(objArr);\n }\n var objArrKeys = Object.keys(objArr);\n var objArrLength = objArrKeys.length;\n var total = 0;\n var results = [];\n var next = function next(errors) {\n results.push.apply(results, errors);\n total++;\n if (total === objArrLength) {\n callback(results);\n }\n };\n objArrKeys.forEach(function (key) {\n var arr = objArr[key];\n if (firstFields.indexOf(key) !== -1) {\n asyncSerialArray(arr, func, next);\n } else {\n asyncParallelArray(arr, func, next);\n }\n });\n}\n\nfunction complementError(rule) {\n return function (oe) {\n if (oe && oe.message) {\n oe.field = oe.field || rule.fullField;\n return oe;\n }\n return {\n message: oe,\n field: oe.field || rule.fullField\n };\n };\n}\n\nfunction deepMerge(target, source) {\n if (source) {\n for (var s in source) {\n if (source.hasOwnProperty(s)) {\n var value = source[s];\n if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && _typeof(target[s]) === 'object') {\n target[s] = _extends({}, target[s], value);\n } else {\n target[s] = value;\n }\n }\n }\n }\n return target;\n}\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi91dGlsLmpzPzA3ZGUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IitDQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1EQUFtRCxnQkFBZ0Isc0JBQXNCLE9BQU8sMkJBQTJCLDBCQUEwQix5REFBeUQsMkJBQTJCLEVBQUUsRUFBRSxFQUFFLGVBQWU7O0FBRTlQLG9HQUFvRyxtQkFBbUIsRUFBRSxtQkFBbUIsOEhBQThIOztBQUUxUTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlFQUFpRSxhQUFhO0FBQzlFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLDJCQUEyQixTQUFTO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDIiwiZmlsZSI6IjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZXhwb3J0cy5mb3JtYXQgPSBmb3JtYXQ7XG5leHBvcnRzLmlzRW1wdHlWYWx1ZSA9IGlzRW1wdHlWYWx1ZTtcbmV4cG9ydHMuaXNFbXB0eU9iamVjdCA9IGlzRW1wdHlPYmplY3Q7XG5leHBvcnRzLmFzeW5jTWFwID0gYXN5bmNNYXA7XG5leHBvcnRzLmNvbXBsZW1lbnRFcnJvciA9IGNvbXBsZW1lbnRFcnJvcjtcbmV4cG9ydHMuZGVlcE1lcmdlID0gZGVlcE1lcmdlO1xudmFyIGZvcm1hdFJlZ0V4cCA9IC8lW3NkaiVdL2c7XG5cbnZhciB3YXJuaW5nID0gZXhwb3J0cy53YXJuaW5nID0gZnVuY3Rpb24gd2FybmluZygpIHt9O1xuXG4vLyBkb24ndCBwcmludCB3YXJuaW5nIG1lc3NhZ2Ugd2hlbiBpbiBwcm9kdWN0aW9uIGVudiBvciBub2RlIHJ1bnRpbWVcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgZXhwb3J0cy53YXJuaW5nID0gd2FybmluZyA9IGZ1bmN0aW9uIHdhcm5pbmcodHlwZSwgZXJyb3JzKSB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgIGlmIChlcnJvcnMuZXZlcnkoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBlID09PSAnc3RyaW5nJztcbiAgICAgIH0pKSB7XG4gICAgICAgIGNvbnNvbGUud2Fybih0eXBlLCBlcnJvcnMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0KCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgaSA9IDE7XG4gIHZhciBmID0gYXJnc1swXTtcbiAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICBpZiAodHlwZW9mIGYgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzLnNsaWNlKDEpKTtcbiAgfVxuICBpZiAodHlwZW9mIGYgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIHN0ciA9IFN0cmluZyhmKS5yZXBsYWNlKGZvcm1hdFJlZ0V4cCwgZnVuY3Rpb24gKHgpIHtcbiAgICAgIGlmICh4ID09PSAnJSUnKSB7XG4gICAgICAgIHJldHVybiAnJSc7XG4gICAgICB9XG4gICAgICBpZiAoaSA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHgpIHtcbiAgICAgICAgY2FzZSAnJXMnOlxuICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJnc1tpKytdKTtcbiAgICAgICAgY2FzZSAnJWQnOlxuICAgICAgICAgIHJldHVybiBOdW1iZXIoYXJnc1tpKytdKTtcbiAgICAgICAgY2FzZSAnJWonOlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnc1tpKytdKTtcbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1tDaXJjdWxhcl0nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3IgKHZhciBhcmcgPSBhcmdzW2ldOyBpIDwgbGVuOyBhcmcgPSBhcmdzWysraV0pIHtcbiAgICAgIHN0ciArPSAnICcgKyBhcmc7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5cbmZ1bmN0aW9uIGlzTmF0aXZlU3RyaW5nVHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAndXJsJyB8fCB0eXBlID09PSAnaGV4JyB8fCB0eXBlID09PSAnZW1haWwnIHx8IHR5cGUgPT09ICdwYXR0ZXJuJztcbn1cblxuZnVuY3Rpb24gaXNFbXB0eVZhbHVlKHZhbHVlLCB0eXBlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGUgPT09ICdhcnJheScgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgIXZhbHVlLmxlbmd0aCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc05hdGl2ZVN0cmluZ1R5cGUodHlwZSkgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhdmFsdWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzRW1wdHlPYmplY3Qob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuZnVuY3Rpb24gYXN5bmNQYXJhbGxlbEFycmF5KGFyciwgZnVuYywgY2FsbGJhY2spIHtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIHRvdGFsID0gMDtcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gY291bnQoZXJyb3JzKSB7XG4gICAgcmVzdWx0cy5wdXNoLmFwcGx5KHJlc3VsdHMsIGVycm9ycyk7XG4gICAgdG90YWwrKztcbiAgICBpZiAodG90YWwgPT09IGFyckxlbmd0aCkge1xuICAgICAgY2FsbGJhY2socmVzdWx0cyk7XG4gICAgfVxuICB9XG5cbiAgYXJyLmZvckVhY2goZnVuY3Rpb24gKGEpIHtcbiAgICBmdW5jKGEsIGNvdW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFzeW5jU2VyaWFsQXJyYXkoYXJyLCBmdW5jLCBjYWxsYmFjaykge1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGVycm9ycykge1xuICAgIGlmIChlcnJvcnMgJiYgZXJyb3JzLmxlbmd0aCkge1xuICAgICAgY2FsbGJhY2soZXJyb3JzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG9yaWdpbmFsID0gaW5kZXg7XG4gICAgaW5kZXggPSBpbmRleCArIDE7XG4gICAgaWYgKG9yaWdpbmFsIDwgYXJyTGVuZ3RoKSB7XG4gICAgICBmdW5jKGFycltvcmlnaW5hbF0sIG5leHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhbXSk7XG4gICAgfVxuICB9XG5cbiAgbmV4dChbXSk7XG59XG5cbmZ1bmN0aW9uIGZsYXR0ZW5PYmpBcnIob2JqQXJyKSB7XG4gIHZhciByZXQgPSBbXTtcbiAgT2JqZWN0LmtleXMob2JqQXJyKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgcmV0LnB1c2guYXBwbHkocmV0LCBvYmpBcnJba10pO1xuICB9KTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gYXN5bmNNYXAob2JqQXJyLCBvcHRpb24sIGZ1bmMsIGNhbGxiYWNrKSB7XG4gIGlmIChvcHRpb24uZmlyc3QpIHtcbiAgICB2YXIgZmxhdHRlbkFyciA9IGZsYXR0ZW5PYmpBcnIob2JqQXJyKTtcbiAgICByZXR1cm4gYXN5bmNTZXJpYWxBcnJheShmbGF0dGVuQXJyLCBmdW5jLCBjYWxsYmFjayk7XG4gIH1cbiAgdmFyIGZpcnN0RmllbGRzID0gb3B0aW9uLmZpcnN0RmllbGRzIHx8IFtdO1xuICBpZiAoZmlyc3RGaWVsZHMgPT09IHRydWUpIHtcbiAgICBmaXJzdEZpZWxkcyA9IE9iamVjdC5rZXlzKG9iakFycik7XG4gIH1cbiAgdmFyIG9iakFycktleXMgPSBPYmplY3Qua2V5cyhvYmpBcnIpO1xuICB2YXIgb2JqQXJyTGVuZ3RoID0gb2JqQXJyS2V5cy5sZW5ndGg7XG4gIHZhciB0b3RhbCA9IDA7XG4gIHZhciByZXN1bHRzID0gW107XG4gIHZhciBuZXh0ID0gZnVuY3Rpb24gbmV4dChlcnJvcnMpIHtcbiAgICByZXN1bHRzLnB1c2guYXBwbHkocmVzdWx0cywgZXJyb3JzKTtcbiAgICB0b3RhbCsrO1xuICAgIGlmICh0b3RhbCA9PT0gb2JqQXJyTGVuZ3RoKSB7XG4gICAgICBjYWxsYmFjayhyZXN1bHRzKTtcbiAgICB9XG4gIH07XG4gIG9iakFycktleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGFyciA9IG9iakFycltrZXldO1xuICAgIGlmIChmaXJzdEZpZWxkcy5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICBhc3luY1NlcmlhbEFycmF5KGFyciwgZnVuYywgbmV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzeW5jUGFyYWxsZWxBcnJheShhcnIsIGZ1bmMsIG5leHQpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbXBsZW1lbnRFcnJvcihydWxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAob2UpIHtcbiAgICBpZiAob2UgJiYgb2UubWVzc2FnZSkge1xuICAgICAgb2UuZmllbGQgPSBvZS5maWVsZCB8fCBydWxlLmZ1bGxGaWVsZDtcbiAgICAgIHJldHVybiBvZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IG9lLFxuICAgICAgZmllbGQ6IG9lLmZpZWxkIHx8IHJ1bGUuZnVsbEZpZWxkXG4gICAgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVlcE1lcmdlKHRhcmdldCwgc291cmNlKSB7XG4gIGlmIChzb3VyY2UpIHtcbiAgICBmb3IgKHZhciBzIGluIHNvdXJjZSkge1xuICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShzKSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2Vbc107XG4gICAgICAgIGlmICgodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih2YWx1ZSkpID09PSAnb2JqZWN0JyAmJiBfdHlwZW9mKHRhcmdldFtzXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGFyZ2V0W3NdID0gX2V4dGVuZHMoe30sIHRhcmdldFtzXSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhcmdldFtzXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi91dGlsLmpzXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///0\n")},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports["default"] = {\n required: __webpack_require__(24),\n whitespace: __webpack_require__(47),\n type: __webpack_require__(48),\n range: __webpack_require__(49),\n "enum": __webpack_require__(50),\n pattern: __webpack_require__(51)\n};\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi9ydWxlL2luZGV4LmpzPzkzYTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0ge1xuICByZXF1aXJlZDogcmVxdWlyZSgnLi9yZXF1aXJlZCcpLFxuICB3aGl0ZXNwYWNlOiByZXF1aXJlKCcuL3doaXRlc3BhY2UnKSxcbiAgdHlwZTogcmVxdWlyZSgnLi90eXBlJyksXG4gIHJhbmdlOiByZXF1aXJlKCcuL3JhbmdlJyksXG4gIFwiZW51bVwiOiByZXF1aXJlKCcuL2VudW0nKSxcbiAgcGF0dGVybjogcmVxdWlyZSgnLi9wYXR0ZXJuJylcbn07XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvbGliL3J1bGUvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1\n')},function(module,__webpack_exports__,__webpack_require__){"use strict";eval("Object.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* WEBPACK VAR INJECTION */(function(process, global, setImmediate) {/*!\n * Vue.js v2.5.2\n * (c) 2014-2017 Evan You\n * Released under the MIT License.\n */\n/* */\n\n// these helpers produces better vm code in JS engines due to their\n// explicitness and function inlining\nfunction isUndef (v) {\n return v === undefined || v === null\n}\n\nfunction isDef (v) {\n return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n return v === true\n}\n\nfunction isFalse (v) {\n return v === false\n}\n\n/**\n * Check if value is primitive\n */\nfunction isPrimitive (value) {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value e.g. [object Object]\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : typeof val === 'object'\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert a input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n str,\n expectsLowerCase\n) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase\n ? function (val) { return map[val.toLowerCase()]; }\n : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if a attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array\n */\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\n/**\n * Check whether the object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n var cache = Object.create(null);\n return (function cachedFn (str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str))\n })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind, faster than native\n */\nfunction bind (fn, ctx) {\n function boundFn (a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx)\n }\n // record original fn length\n boundFn._length = fn.length;\n return boundFn\n}\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res\n}\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/)\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/**\n * Return same value\n */\nvar identity = function (_) { return _; };\n\n/**\n * Generate a static keys string from compiler modules.\n */\n\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n if (a === b) { return true }\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i])\n })\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key])\n })\n } else {\n /* istanbul ignore next */\n return false\n }\n } catch (e) {\n /* istanbul ignore next */\n return false\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\nfunction looseIndexOf (arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) { return i }\n }\n return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n 'component',\n 'directive',\n 'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured'\n];\n\n/* */\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/* */\n\nvar emptyObject = Object.freeze({});\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = /[^\\w.$]/;\nfunction parsePath (path) {\n if (bailRE.test(path)) {\n return\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) { return }\n obj = obj[segments[i]];\n }\n return obj\n }\n}\n\n/* */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = UA && UA.indexOf('android') > 0;\nvar isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\n /* istanbul ignore next */\n supportsPassive = true;\n }\n })); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n typeof Symbol !== 'undefined' && isNative(Symbol) &&\n typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = (function () {\n function Set () {\n this.set = Object.create(null);\n }\n Set.prototype.has = function has (key) {\n return this.set[key] === true\n };\n Set.prototype.add = function add (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function clear () {\n this.set = Object.create(null);\n };\n\n return Set;\n }());\n}\n\n/* */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (process.env.NODE_ENV !== 'production') {\n var hasConsole = typeof console !== 'undefined';\n var classifyRE = /(?:^|[-_])(\\w)/g;\n var classify = function (str) { return str\n .replace(classifyRE, function (c) { return c.toUpperCase(); })\n .replace(/[-_]/g, ''); };\n\n warn = function (msg, vm) {\n var trace = vm ? generateComponentTrace(vm) : '';\n\n if (config.warnHandler) {\n config.warnHandler.call(null, msg, vm, trace);\n } else if (hasConsole && (!config.silent)) {\n console.error((\"[Vue warn]: \" + msg + trace));\n }\n };\n\n tip = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.warn(\"[Vue tip]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n formatComponentName = function (vm, includeFile) {\n if (vm.$root === vm) {\n return '<Root>'\n }\n var options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm || {};\n var name = options.name || options._componentTag;\n var file = options.__file;\n if (!name && file) {\n var match = file.match(/([^/\\\\]+)\\.vue$/);\n name = match && match[1];\n }\n\n return (\n (name ? (\"<\" + (classify(name)) + \">\") : \"<Anonymous>\") +\n (file && includeFile !== false ? (\" at \" + file) : '')\n )\n };\n\n var repeat = function (str, n) {\n var res = '';\n while (n) {\n if (n % 2 === 1) { res += str; }\n if (n > 1) { str += str; }\n n >>= 1;\n }\n return res\n };\n\n generateComponentTrace = function (vm) {\n if (vm._isVue && vm.$parent) {\n var tree = [];\n var currentRecursiveSequence = 0;\n while (vm) {\n if (tree.length > 0) {\n var last = tree[tree.length - 1];\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++;\n vm = vm.$parent;\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence];\n currentRecursiveSequence = 0;\n }\n }\n tree.push(vm);\n vm = vm.$parent;\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map(function (vm, i) { return (\"\" + (i === 0 ? '---\x3e ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n : formatComponentName(vm))); })\n .join('\\n')\n } else {\n return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n }\n };\n}\n\n/* */\n\n\nvar uid$1 = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n this.id = uid$1++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n if (Dep.target) {\n Dep.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify () {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n};\n\n// the current target watcher being evaluated.\n// this is globally unique because there could be only one\n// watcher being evaluated at any time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (_target) {\n if (Dep.target) { targetStack.push(Dep.target); }\n Dep.target = _target;\n}\n\nfunction popTarget () {\n Dep.target = targetStack.pop();\n}\n\n/* */\n\nvar VNode = function VNode (\n tag,\n data,\n children,\n text,\n elm,\n context,\n componentOptions,\n asyncFactory\n) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.functionalContext = undefined;\n this.functionalOptions = undefined;\n this.functionalScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n if ( text === void 0 ) text = '';\n\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node\n};\n\nfunction createTextVNode (val) {\n return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode, deep) {\n var cloned = new VNode(\n vnode.tag,\n vnode.data,\n vnode.children,\n vnode.text,\n vnode.elm,\n vnode.context,\n vnode.componentOptions,\n vnode.asyncFactory\n );\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.isCloned = true;\n if (deep && vnode.children) {\n cloned.children = cloneVNodes(vnode.children);\n }\n return cloned\n}\n\nfunction cloneVNodes (vnodes, deep) {\n var len = vnodes.length;\n var res = new Array(len);\n for (var i = 0; i < len; i++) {\n res[i] = cloneVNode(vnodes[i], deep);\n }\n return res\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);[\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n]\n.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break\n case 'splice':\n inserted = args.slice(2);\n break\n }\n if (inserted) { ob.observeArray(inserted); }\n // notify change\n ob.dep.notify();\n return result\n });\n});\n\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * By default, when a reactive property is set, the new value is\n * also converted to become reactive. However when passing down props,\n * we don't want to force conversion because the value may be a nested value\n * under a frozen data structure. Converting it would defeat the optimization.\n */\nvar observerState = {\n shouldConvert: true\n};\n\n/**\n * Observer class that are attached to each observed\n * object. Once attached, the observer converts target\n * object's property keys into getter/setters that\n * collect dependencies and dispatches updates.\n */\nvar Observer = function Observer (value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (Array.isArray(value)) {\n var augment = hasProto\n ? protoAugment\n : copyAugment;\n augment(value, arrayMethods, arrayKeys);\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through each property and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n defineReactive(obj, keys[i], obj[keys[i]]);\n }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n};\n\n// helpers\n\n/**\n * Augment an target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src, keys) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment an target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n if (!isObject(value) || value instanceof VNode) {\n return\n }\n var ob;\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (\n observerState.shouldConvert &&\n !isServerRendering() &&\n (Array.isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value._isVue\n ) {\n ob = new Observer(value);\n }\n if (asRootData && ob) {\n ob.vmCount++;\n }\n return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive (\n obj,\n key,\n val,\n customSetter,\n shallow\n) {\n var dep = new Dep();\n\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return\n }\n\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n\n var childOb = !shallow && observe(val);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter () {\n var value = getter ? getter.call(obj) : val;\n if (Dep.target) {\n dep.depend();\n if (childOb) {\n childOb.dep.depend();\n if (Array.isArray(value)) {\n dependArray(value);\n }\n }\n }\n return value\n },\n set: function reactiveSetter (newVal) {\n var value = getter ? getter.call(obj) : val;\n /* eslint-disable no-self-compare */\n if (newVal === value || (newVal !== newVal && value !== value)) {\n return\n }\n /* eslint-enable no-self-compare */\n if (process.env.NODE_ENV !== 'production' && customSetter) {\n customSetter();\n }\n if (setter) {\n setter.call(obj, newVal);\n } else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal);\n dep.notify();\n }\n });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val\n }\n if (hasOwn(target, key)) {\n target[key] = val;\n return val\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.'\n );\n return val\n }\n if (!ob) {\n target[key] = val;\n return val\n }\n defineReactive(ob.value, key, val);\n ob.dep.notify();\n return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.'\n );\n return\n }\n if (!hasOwn(target, key)) {\n return\n }\n delete target[key];\n if (!ob) {\n return\n }\n ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n if (Array.isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/* */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (process.env.NODE_ENV !== 'production') {\n strats.el = strats.propsData = function (parent, child, vm, key) {\n if (!vm) {\n warn(\n \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n 'creation with the `new` keyword.'\n );\n }\n return defaultStrat(parent, child)\n };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n if (!from) { return to }\n var key, toVal, fromVal;\n var keys = Object.keys(from);\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n toVal = to[key];\n fromVal = from[key];\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (isPlainObject(toVal) && isPlainObject(fromVal)) {\n mergeData(toVal, fromVal);\n }\n }\n return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal\n }\n if (!parentVal) {\n return childVal\n }\n // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n return function mergedDataFn () {\n return mergeData(\n typeof childVal === 'function' ? childVal.call(this) : childVal,\n typeof parentVal === 'function' ? parentVal.call(this) : parentVal\n )\n }\n } else if (parentVal || childVal) {\n return function mergedInstanceDataFn () {\n // instance merge\n var instanceData = typeof childVal === 'function'\n ? childVal.call(vm)\n : childVal;\n var defaultData = typeof parentVal === 'function'\n ? parentVal.call(vm)\n : parentVal;\n if (instanceData) {\n return mergeData(instanceData, defaultData)\n } else {\n return defaultData\n }\n }\n }\n}\n\nstrats.data = function (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n process.env.NODE_ENV !== 'production' && warn(\n 'The \"data\" option should be a function ' +\n 'that returns a per-instance value in component ' +\n 'definitions.',\n vm\n );\n\n return parentVal\n }\n return mergeDataOrFn.call(this, parentVal, childVal)\n }\n\n return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n parentVal,\n childVal\n) {\n return childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : Array.isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n parentVal,\n childVal,\n vm,\n key\n) {\n var res = Object.create(parentVal || null);\n if (childVal) {\n process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);\n return extend(res, childVal)\n } else {\n return res\n }\n}\n\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n // work around Firefox's Object.prototype.watch...\n if (parentVal === nativeWatch) { parentVal = undefined; }\n if (childVal === nativeWatch) { childVal = undefined; }\n /* istanbul ignore if */\n if (!childVal) { return Object.create(parentVal || null) }\n if (process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = {};\n extend(ret, parentVal);\n for (var key$1 in childVal) {\n var parent = ret[key$1];\n var child = childVal[key$1];\n if (parent && !Array.isArray(parent)) {\n parent = [parent];\n }\n ret[key$1] = parent\n ? parent.concat(child)\n : Array.isArray(child) ? child : [child];\n }\n return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n if (childVal && process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = Object.create(null);\n extend(ret, parentVal);\n if (childVal) { extend(ret, childVal); }\n return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n return childVal === undefined\n ? parentVal\n : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n for (var key in options.components) {\n var lower = key.toLowerCase();\n if (isBuiltInTag(lower) || config.isReservedTag(lower)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + key\n );\n }\n }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n var props = options.props;\n if (!props) { return }\n var res = {};\n var i, val, name;\n if (Array.isArray(props)) {\n i = props.length;\n while (i--) {\n val = props[i];\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = { type: null };\n } else if (process.env.NODE_ENV !== 'production') {\n warn('props must be strings when using array syntax.');\n }\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val)\n ? val\n : { type: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(props)) + \".\",\n vm\n );\n }\n options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n var inject = options.inject;\n var normalized = options.inject = {};\n if (Array.isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = { from: inject[i] };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val)\n ? extend({ from: key }, val)\n : { from: val };\n }\n } else if (process.env.NODE_ENV !== 'production' && inject) {\n warn(\n \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(inject)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n var dirs = options.directives;\n if (dirs) {\n for (var key in dirs) {\n var def = dirs[key];\n if (typeof def === 'function') {\n dirs[key] = { bind: def, update: def };\n }\n }\n }\n}\n\nfunction assertObjectType (name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\n \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n \"but got \" + (toRawType(value)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n parent,\n child,\n vm\n) {\n if (process.env.NODE_ENV !== 'production') {\n checkComponents(child);\n }\n\n if (typeof child === 'function') {\n child = child.options;\n }\n\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives(child);\n var extendsFrom = child.extends;\n if (extendsFrom) {\n parent = mergeOptions(parent, extendsFrom, vm);\n }\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n var options = {};\n var key;\n for (key in parent) {\n mergeField(key);\n }\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n function mergeField (key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n options,\n type,\n id,\n warnMissing\n) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return\n }\n var assets = options[type];\n // check local registration variations first\n if (hasOwn(assets, id)) { return assets[id] }\n var camelizedId = camelize(id);\n if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n var PascalCaseId = capitalize(camelizedId);\n if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n // fallback to prototype chain\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {\n warn(\n 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n options\n );\n }\n return res\n}\n\n/* */\n\nfunction validateProp (\n key,\n propOptions,\n propsData,\n vm\n) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key];\n // handle boolean props\n if (isType(Boolean, prop.type)) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (!isType(String, prop.type) && (value === '' || value === hyphenate(key))) {\n value = true;\n }\n }\n // check default value\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key);\n // since the default value is a fresh copy,\n // make sure to observe it.\n var prevShouldConvert = observerState.shouldConvert;\n observerState.shouldConvert = true;\n observe(value);\n observerState.shouldConvert = prevShouldConvert;\n }\n if (process.env.NODE_ENV !== 'production') {\n assertProp(prop, key, value, vm, absent);\n }\n return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined\n }\n var def = prop.default;\n // warn against non-factory defaults for Object & Array\n if (process.env.NODE_ENV !== 'production' && isObject(def)) {\n warn(\n 'Invalid default value for prop \"' + key + '\": ' +\n 'Props with type Object/Array must use a factory function ' +\n 'to return the default value.',\n vm\n );\n }\n // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n if (vm && vm.$options.propsData &&\n vm.$options.propsData[key] === undefined &&\n vm._props[key] !== undefined\n ) {\n return vm._props[key]\n }\n // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n return typeof def === 'function' && getType(prop.type) !== 'Function'\n ? def.call(vm)\n : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n prop,\n name,\n value,\n vm,\n absent\n) {\n if (prop.required && absent) {\n warn(\n 'Missing required prop: \"' + name + '\"',\n vm\n );\n return\n }\n if (value == null && !prop.required) {\n return\n }\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n if (type) {\n if (!Array.isArray(type)) {\n type = [type];\n }\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i]);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n if (!valid) {\n warn(\n \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n \" Expected \" + (expectedTypes.map(capitalize).join(', ')) +\n \", got \" + (toRawType(value)) + \".\",\n vm\n );\n return\n }\n var validator = prop.validator;\n if (validator) {\n if (!validator(value)) {\n warn(\n 'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n vm\n );\n }\n }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n var valid;\n var expectedType = getType(type);\n if (simpleCheckRE.test(expectedType)) {\n var t = typeof value;\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = Array.isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid: valid,\n expectedType: expectedType\n }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ''\n}\n\nfunction isType (type, fn) {\n if (!Array.isArray(fn)) {\n return getType(fn) === getType(type)\n }\n for (var i = 0, len = fn.length; i < len; i++) {\n if (getType(fn[i]) === getType(type)) {\n return true\n }\n }\n /* istanbul ignore next */\n return false\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n if (vm) {\n var cur = vm;\n while ((cur = cur.$parent)) {\n var hooks = cur.$options.errorCaptured;\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n if (capture) { return }\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n globalHandleError(err, vm, info);\n}\n\nfunction globalHandleError (err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info)\n } catch (e) {\n logError(e, null, 'config.errorHandler');\n }\n }\n logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n if (process.env.NODE_ENV !== 'production') {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if (inBrowser && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n}\n\n/* */\n/* globals MessageChannel */\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n}\n\n// Here we have async deferring wrappers using both micro and macro tasks.\n// In < 2.4 we used micro tasks everywhere, but there are some scenarios where\n// micro tasks have too high a priority and fires in between supposedly\n// sequential events (e.g. #4521, #6690) or even between bubbling of the same\n// event (#6566). However, using macro tasks everywhere also has subtle problems\n// when state is changed right before repaint (e.g. #6813, out-in transitions).\n// Here we use micro task by default, but expose a way to force macro task when\n// needed (e.g. in event handlers attached by v-on).\nvar microTimerFunc;\nvar macroTimerFunc;\nvar useMacroTask = false;\n\n// Determine (macro) Task defer implementation.\n// Technically setImmediate should be the ideal choice, but it's only available\n// in IE. The only polyfill that consistently queues the callback after all DOM\n// events triggered in the same loop is by using MessageChannel.\n/* istanbul ignore if */\nif (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n macroTimerFunc = function () {\n setImmediate(flushCallbacks);\n };\n} else if (typeof MessageChannel !== 'undefined' && (\n isNative(MessageChannel) ||\n // PhantomJS\n MessageChannel.toString() === '[object MessageChannelConstructor]'\n)) {\n var channel = new MessageChannel();\n var port = channel.port2;\n channel.port1.onmessage = flushCallbacks;\n macroTimerFunc = function () {\n port.postMessage(1);\n };\n} else {\n /* istanbul ignore next */\n macroTimerFunc = function () {\n setTimeout(flushCallbacks, 0);\n };\n}\n\n// Determine MicroTask defer implementation.\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n microTimerFunc = function () {\n p.then(flushCallbacks);\n // in problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) { setTimeout(noop); }\n };\n} else {\n // fallback to macro\n microTimerFunc = macroTimerFunc;\n}\n\n/**\n * Wrap a function so that if any code inside triggers state change,\n * the changes are queued using a Task instead of a MicroTask.\n */\nfunction withMacroTask (fn) {\n return fn._withTask || (fn._withTask = function () {\n useMacroTask = true;\n var res = fn.apply(null, arguments);\n useMacroTask = false;\n return res\n })\n}\n\nfunction nextTick (cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n if (useMacroTask) {\n macroTimerFunc();\n } else {\n microTimerFunc();\n }\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n })\n }\n}\n\n/* */\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (process.env.NODE_ENV !== 'production') {\n var allowedGlobals = makeMap(\n 'Infinity,undefined,NaN,isFinite,isNaN,' +\n 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n 'require' // for Webpack/Browserify\n );\n\n var warnNonPresent = function (target, key) {\n warn(\n \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n 'referenced during render. Make sure that this property is reactive, ' +\n 'either in the data option, or for class-based components, by ' +\n 'initializing the property. ' +\n 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n target\n );\n };\n\n var hasProxy =\n typeof Proxy !== 'undefined' &&\n Proxy.toString().match(/native code/);\n\n if (hasProxy) {\n var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n config.keyCodes = new Proxy(config.keyCodes, {\n set: function set (target, key, value) {\n if (isBuiltInModifier(key)) {\n warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n return false\n } else {\n target[key] = value;\n return true\n }\n }\n });\n }\n\n var hasHandler = {\n has: function has (target, key) {\n var has = key in target;\n var isAllowed = allowedGlobals(key) || key.charAt(0) === '_';\n if (!has && !isAllowed) {\n warnNonPresent(target, key);\n }\n return has || !isAllowed\n }\n };\n\n var getHandler = {\n get: function get (target, key) {\n if (typeof key === 'string' && !(key in target)) {\n warnNonPresent(target, key);\n }\n return target[key]\n }\n };\n\n initProxy = function initProxy (vm) {\n if (hasProxy) {\n // determine which proxy handler to use\n var options = vm.$options;\n var handlers = options.render && options.render._withStripped\n ? getHandler\n : hasHandler;\n vm._renderProxy = new Proxy(vm, handlers);\n } else {\n vm._renderProxy = vm;\n }\n };\n}\n\nvar mark;\nvar measure;\n\nif (process.env.NODE_ENV !== 'production') {\n var perf = inBrowser && window.performance;\n /* istanbul ignore if */\n if (\n perf &&\n perf.mark &&\n perf.measure &&\n perf.clearMarks &&\n perf.clearMeasures\n ) {\n mark = function (tag) { return perf.mark(tag); };\n measure = function (name, startTag, endTag) {\n perf.measure(name, startTag, endTag);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n perf.clearMeasures(name);\n };\n }\n}\n\n/* */\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once$$1 ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once$$1,\n capture: capture,\n passive: passive\n }\n});\n\nfunction createFnInvoker (fns) {\n function invoker () {\n var arguments$1 = arguments;\n\n var fns = invoker.fns;\n if (Array.isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n cloned[i].apply(null, arguments$1);\n }\n } else {\n // return handler return value for single handlers\n return fns.apply(null, arguments)\n }\n }\n invoker.fns = fns;\n return invoker\n}\n\nfunction updateListeners (\n on,\n oldOn,\n add,\n remove$$1,\n vm\n) {\n var name, cur, old, event;\n for (name in on) {\n cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n vm\n );\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur);\n }\n add(event.name, cur, event.once, event.capture, event.passive);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove$$1(event.name, oldOn[name], event.capture);\n }\n }\n}\n\n/* */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n var invoker;\n var oldHook = def[hookKey];\n\n function wrappedHook () {\n hook.apply(this, arguments);\n // important: remove merged hook to ensure it's called only once\n // and prevent memory leak\n remove(invoker.fns, wrappedHook);\n }\n\n if (isUndef(oldHook)) {\n // no existing hook\n invoker = createFnInvoker([wrappedHook]);\n } else {\n /* istanbul ignore if */\n if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n // already a merged invoker\n invoker = oldHook;\n invoker.fns.push(wrappedHook);\n } else {\n // existing plain hook\n invoker = createFnInvoker([oldHook, wrappedHook]);\n }\n }\n\n invoker.merged = true;\n def[hookKey] = invoker;\n}\n\n/* */\n\nfunction extractPropsFromVNodeData (\n data,\n Ctor,\n tag\n) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n return\n }\n var res = {};\n var attrs = data.attrs;\n var props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (process.env.NODE_ENV !== 'production') {\n var keyInLowerCase = key.toLowerCase();\n if (\n key !== keyInLowerCase &&\n attrs && hasOwn(attrs, keyInLowerCase)\n ) {\n tip(\n \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n \" \\\"\" + key + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n );\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n return res\n}\n\nfunction checkProp (\n res,\n hash,\n key,\n altKey,\n preserve\n) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true\n }\n }\n return false\n}\n\n/* */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n for (var i = 0; i < children.length; i++) {\n if (Array.isArray(children[i])) {\n return Array.prototype.concat.apply([], children)\n }\n }\n return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n return isPrimitive(children)\n ? [createTextVNode(children)]\n : Array.isArray(children)\n ? normalizeArrayChildren(children)\n : undefined\n}\n\nfunction isTextNode (node) {\n return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n var res = [];\n var i, c, lastIndex, last;\n for (i = 0; i < children.length; i++) {\n c = children[i];\n if (isUndef(c) || typeof c === 'boolean') { continue }\n lastIndex = res.length - 1;\n last = res[lastIndex];\n // nested\n if (Array.isArray(c)) {\n if (c.length > 0) {\n c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n // merge adjacent text nodes\n if (isTextNode(c[0]) && isTextNode(last)) {\n res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n c.shift();\n }\n res.push.apply(res, c);\n }\n } else if (isPrimitive(c)) {\n if (isTextNode(last)) {\n // merge adjacent text nodes\n // this is necessary for SSR hydration because text nodes are\n // essentially merged when rendered to HTML strings\n res[lastIndex] = createTextVNode(last.text + c);\n } else if (c !== '') {\n // convert primitive to vnode\n res.push(createTextVNode(c));\n }\n } else {\n if (isTextNode(c) && isTextNode(last)) {\n // merge adjacent text nodes\n res[lastIndex] = createTextVNode(last.text + c.text);\n } else {\n // default key for nested array children (likely generated by v-for)\n if (isTrue(children._isVList) &&\n isDef(c.tag) &&\n isUndef(c.key) &&\n isDef(nestedIndex)) {\n c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n }\n res.push(c);\n }\n }\n }\n return res\n}\n\n/* */\n\nfunction ensureCtor (comp, base) {\n if (\n comp.__esModule ||\n (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n ) {\n comp = comp.default;\n }\n return isObject(comp)\n ? base.extend(comp)\n : comp\n}\n\nfunction createAsyncPlaceholder (\n factory,\n data,\n context,\n children,\n tag\n) {\n var node = createEmptyVNode();\n node.asyncFactory = factory;\n node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n return node\n}\n\nfunction resolveAsyncComponent (\n factory,\n baseCtor,\n context\n) {\n if (isTrue(factory.error) && isDef(factory.errorComp)) {\n return factory.errorComp\n }\n\n if (isDef(factory.resolved)) {\n return factory.resolved\n }\n\n if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n return factory.loadingComp\n }\n\n if (isDef(factory.contexts)) {\n // already pending\n factory.contexts.push(context);\n } else {\n var contexts = factory.contexts = [context];\n var sync = true;\n\n var forceRender = function () {\n for (var i = 0, l = contexts.length; i < l; i++) {\n contexts[i].$forceUpdate();\n }\n };\n\n var resolve = once(function (res) {\n // cache resolved\n factory.resolved = ensureCtor(res, baseCtor);\n // invoke callbacks only if this is not a synchronous resolve\n // (async resolves are shimmed as synchronous during SSR)\n if (!sync) {\n forceRender();\n }\n });\n\n var reject = once(function (reason) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Failed to resolve async component: \" + (String(factory)) +\n (reason ? (\"\\nReason: \" + reason) : '')\n );\n if (isDef(factory.errorComp)) {\n factory.error = true;\n forceRender();\n }\n });\n\n var res = factory(resolve, reject);\n\n if (isObject(res)) {\n if (typeof res.then === 'function') {\n // () => Promise\n if (isUndef(factory.resolved)) {\n res.then(resolve, reject);\n }\n } else if (isDef(res.component) && typeof res.component.then === 'function') {\n res.component.then(resolve, reject);\n\n if (isDef(res.error)) {\n factory.errorComp = ensureCtor(res.error, baseCtor);\n }\n\n if (isDef(res.loading)) {\n factory.loadingComp = ensureCtor(res.loading, baseCtor);\n if (res.delay === 0) {\n factory.loading = true;\n } else {\n setTimeout(function () {\n if (isUndef(factory.resolved) && isUndef(factory.error)) {\n factory.loading = true;\n forceRender();\n }\n }, res.delay || 200);\n }\n }\n\n if (isDef(res.timeout)) {\n setTimeout(function () {\n if (isUndef(factory.resolved)) {\n reject(\n process.env.NODE_ENV !== 'production'\n ? (\"timeout (\" + (res.timeout) + \"ms)\")\n : null\n );\n }\n }, res.timeout);\n }\n }\n }\n\n sync = false;\n // return in case resolved synchronously\n return factory.loading\n ? factory.loadingComp\n : factory.resolved\n }\n}\n\n/* */\n\nfunction isAsyncPlaceholder (node) {\n return node.isComment && node.asyncFactory\n}\n\n/* */\n\nfunction getFirstComponentChild (children) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n var c = children[i];\n if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n return c\n }\n }\n }\n}\n\n/* */\n\n/* */\n\nfunction initEvents (vm) {\n vm._events = Object.create(null);\n vm._hasHookEvent = false;\n // init parent attached events\n var listeners = vm.$options._parentListeners;\n if (listeners) {\n updateComponentListeners(vm, listeners);\n }\n}\n\nvar target;\n\nfunction add (event, fn, once) {\n if (once) {\n target.$once(event, fn);\n } else {\n target.$on(event, fn);\n }\n}\n\nfunction remove$1 (event, fn) {\n target.$off(event, fn);\n}\n\nfunction updateComponentListeners (\n vm,\n listeners,\n oldListeners\n) {\n target = vm;\n updateListeners(listeners, oldListeners || {}, add, remove$1, vm);\n}\n\nfunction eventsMixin (Vue) {\n var hookRE = /^hook:/;\n Vue.prototype.$on = function (event, fn) {\n var this$1 = this;\n\n var vm = this;\n if (Array.isArray(event)) {\n for (var i = 0, l = event.length; i < l; i++) {\n this$1.$on(event[i], fn);\n }\n } else {\n (vm._events[event] || (vm._events[event] = [])).push(fn);\n // optimize hook:event cost by using a boolean flag marked at registration\n // instead of a hash lookup\n if (hookRE.test(event)) {\n vm._hasHookEvent = true;\n }\n }\n return vm\n };\n\n Vue.prototype.$once = function (event, fn) {\n var vm = this;\n function on () {\n vm.$off(event, on);\n fn.apply(vm, arguments);\n }\n on.fn = fn;\n vm.$on(event, on);\n return vm\n };\n\n Vue.prototype.$off = function (event, fn) {\n var this$1 = this;\n\n var vm = this;\n // all\n if (!arguments.length) {\n vm._events = Object.create(null);\n return vm\n }\n // array of events\n if (Array.isArray(event)) {\n for (var i = 0, l = event.length; i < l; i++) {\n this$1.$off(event[i], fn);\n }\n return vm\n }\n // specific event\n var cbs = vm._events[event];\n if (!cbs) {\n return vm\n }\n if (arguments.length === 1) {\n vm._events[event] = null;\n return vm\n }\n if (fn) {\n // specific handler\n var cb;\n var i$1 = cbs.length;\n while (i$1--) {\n cb = cbs[i$1];\n if (cb === fn || cb.fn === fn) {\n cbs.splice(i$1, 1);\n break\n }\n }\n }\n return vm\n };\n\n Vue.prototype.$emit = function (event) {\n var vm = this;\n if (process.env.NODE_ENV !== 'production') {\n var lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n tip(\n \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and you cannot use \" +\n \"v-on to listen to camelCase events when using in-DOM templates. \" +\n \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n );\n }\n }\n var cbs = vm._events[event];\n if (cbs) {\n cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n var args = toArray(arguments, 1);\n for (var i = 0, l = cbs.length; i < l; i++) {\n try {\n cbs[i].apply(vm, args);\n } catch (e) {\n handleError(e, vm, (\"event handler for \\\"\" + event + \"\\\"\"));\n }\n }\n }\n return vm\n };\n}\n\n/* */\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n children,\n context\n) {\n var slots = {};\n if (!children) {\n return slots\n }\n var defaultSlot = [];\n for (var i = 0, l = children.length; i < l; i++) {\n var child = children[i];\n var data = child.data;\n // remove slot attribute if the node is resolved as a Vue slot node\n if (data && data.attrs && data.attrs.slot) {\n delete data.attrs.slot;\n }\n // named slots should only be respected if the vnode was rendered in the\n // same context.\n if ((child.context === context || child.functionalContext === context) &&\n data && data.slot != null\n ) {\n var name = child.data.slot;\n var slot = (slots[name] || (slots[name] = []));\n if (child.tag === 'template') {\n slot.push.apply(slot, child.children);\n } else {\n slot.push(child);\n }\n } else {\n defaultSlot.push(child);\n }\n }\n // ignore whitespace\n if (!defaultSlot.every(isWhitespace)) {\n slots.default = defaultSlot;\n }\n return slots\n}\n\nfunction isWhitespace (node) {\n return node.isComment || node.text === ' '\n}\n\nfunction resolveScopedSlots (\n fns, // see flow/vnode\n res\n) {\n res = res || {};\n for (var i = 0; i < fns.length; i++) {\n if (Array.isArray(fns[i])) {\n resolveScopedSlots(fns[i], res);\n } else {\n res[fns[i].key] = fns[i].fn;\n }\n }\n return res\n}\n\n/* */\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\n\nfunction initLifecycle (vm) {\n var options = vm.$options;\n\n // locate first non-abstract parent\n var parent = options.parent;\n if (parent && !options.abstract) {\n while (parent.$options.abstract && parent.$parent) {\n parent = parent.$parent;\n }\n parent.$children.push(vm);\n }\n\n vm.$parent = parent;\n vm.$root = parent ? parent.$root : vm;\n\n vm.$children = [];\n vm.$refs = {};\n\n vm._watcher = null;\n vm._inactive = null;\n vm._directInactive = false;\n vm._isMounted = false;\n vm._isDestroyed = false;\n vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n Vue.prototype._update = function (vnode, hydrating) {\n var vm = this;\n if (vm._isMounted) {\n callHook(vm, 'beforeUpdate');\n }\n var prevEl = vm.$el;\n var prevVnode = vm._vnode;\n var prevActiveInstance = activeInstance;\n activeInstance = vm;\n vm._vnode = vnode;\n // Vue.prototype.__patch__ is injected in entry points\n // based on the rendering backend used.\n if (!prevVnode) {\n // initial render\n vm.$el = vm.__patch__(\n vm.$el, vnode, hydrating, false /* removeOnly */,\n vm.$options._parentElm,\n vm.$options._refElm\n );\n // no need for the ref nodes after initial patch\n // this prevents keeping a detached DOM tree in memory (#5851)\n vm.$options._parentElm = vm.$options._refElm = null;\n } else {\n // updates\n vm.$el = vm.__patch__(prevVnode, vnode);\n }\n activeInstance = prevActiveInstance;\n // update __vue__ reference\n if (prevEl) {\n prevEl.__vue__ = null;\n }\n if (vm.$el) {\n vm.$el.__vue__ = vm;\n }\n // if parent is an HOC, update its $el as well\n if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n vm.$parent.$el = vm.$el;\n }\n // updated hook is called by the scheduler to ensure that children are\n // updated in a parent's updated hook.\n };\n\n Vue.prototype.$forceUpdate = function () {\n var vm = this;\n if (vm._watcher) {\n vm._watcher.update();\n }\n };\n\n Vue.prototype.$destroy = function () {\n var vm = this;\n if (vm._isBeingDestroyed) {\n return\n }\n callHook(vm, 'beforeDestroy');\n vm._isBeingDestroyed = true;\n // remove self from parent\n var parent = vm.$parent;\n if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n remove(parent.$children, vm);\n }\n // teardown watchers\n if (vm._watcher) {\n vm._watcher.teardown();\n }\n var i = vm._watchers.length;\n while (i--) {\n vm._watchers[i].teardown();\n }\n // remove reference from data ob\n // frozen object may not have observer.\n if (vm._data.__ob__) {\n vm._data.__ob__.vmCount--;\n }\n // call the last hook...\n vm._isDestroyed = true;\n // invoke destroy hooks on current rendered tree\n vm.__patch__(vm._vnode, null);\n // fire destroyed hook\n callHook(vm, 'destroyed');\n // turn off all instance listeners.\n vm.$off();\n // remove __vue__ reference\n if (vm.$el) {\n vm.$el.__vue__ = null;\n }\n // release circular reference (#6759)\n if (vm.$vnode) {\n vm.$vnode.parent = null;\n }\n };\n}\n\nfunction mountComponent (\n vm,\n el,\n hydrating\n) {\n vm.$el = el;\n if (!vm.$options.render) {\n vm.$options.render = createEmptyVNode;\n if (process.env.NODE_ENV !== 'production') {\n /* istanbul ignore if */\n if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n vm.$options.el || el) {\n warn(\n 'You are using the runtime-only build of Vue where the template ' +\n 'compiler is not available. Either pre-compile the templates into ' +\n 'render functions, or use the compiler-included build.',\n vm\n );\n } else {\n warn(\n 'Failed to mount component: template or render function not defined.',\n vm\n );\n }\n }\n }\n callHook(vm, 'beforeMount');\n\n var updateComponent;\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n updateComponent = function () {\n var name = vm._name;\n var id = vm._uid;\n var startTag = \"vue-perf-start:\" + id;\n var endTag = \"vue-perf-end:\" + id;\n\n mark(startTag);\n var vnode = vm._render();\n mark(endTag);\n measure((\"vue \" + name + \" render\"), startTag, endTag);\n\n mark(startTag);\n vm._update(vnode, hydrating);\n mark(endTag);\n measure((\"vue \" + name + \" patch\"), startTag, endTag);\n };\n } else {\n updateComponent = function () {\n vm._update(vm._render(), hydrating);\n };\n }\n\n vm._watcher = new Watcher(vm, updateComponent, noop);\n hydrating = false;\n\n // manually mounted instance, call mounted on self\n // mounted is called for render-created child components in its inserted hook\n if (vm.$vnode == null) {\n vm._isMounted = true;\n callHook(vm, 'mounted');\n }\n return vm\n}\n\nfunction updateChildComponent (\n vm,\n propsData,\n listeners,\n parentVnode,\n renderChildren\n) {\n if (process.env.NODE_ENV !== 'production') {\n isUpdatingChildComponent = true;\n }\n\n // determine whether component has slot children\n // we need to do this before overwriting $options._renderChildren\n var hasChildren = !!(\n renderChildren || // has new static slots\n vm.$options._renderChildren || // has old static slots\n parentVnode.data.scopedSlots || // has new scoped slots\n vm.$scopedSlots !== emptyObject // has old scoped slots\n );\n\n vm.$options._parentVnode = parentVnode;\n vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n\n if (vm._vnode) { // update child tree's parent\n vm._vnode.parent = parentVnode;\n }\n vm.$options._renderChildren = renderChildren;\n\n // update $attrs and $listeners hash\n // these are also reactive so they may trigger child update if the child\n // used them during render\n vm.$attrs = (parentVnode.data && parentVnode.data.attrs) || emptyObject;\n vm.$listeners = listeners || emptyObject;\n\n // update props\n if (propsData && vm.$options.props) {\n observerState.shouldConvert = false;\n var props = vm._props;\n var propKeys = vm.$options._propKeys || [];\n for (var i = 0; i < propKeys.length; i++) {\n var key = propKeys[i];\n props[key] = validateProp(key, vm.$options.props, propsData, vm);\n }\n observerState.shouldConvert = true;\n // keep a copy of raw propsData\n vm.$options.propsData = propsData;\n }\n\n // update listeners\n if (listeners) {\n var oldListeners = vm.$options._parentListeners;\n vm.$options._parentListeners = listeners;\n updateComponentListeners(vm, listeners, oldListeners);\n }\n // resolve slots + force update if has children\n if (hasChildren) {\n vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n vm.$forceUpdate();\n }\n\n if (process.env.NODE_ENV !== 'production') {\n isUpdatingChildComponent = false;\n }\n}\n\nfunction isInInactiveTree (vm) {\n while (vm && (vm = vm.$parent)) {\n if (vm._inactive) { return true }\n }\n return false\n}\n\nfunction activateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = false;\n if (isInInactiveTree(vm)) {\n return\n }\n } else if (vm._directInactive) {\n return\n }\n if (vm._inactive || vm._inactive === null) {\n vm._inactive = false;\n for (var i = 0; i < vm.$children.length; i++) {\n activateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'activated');\n }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n if (direct) {\n vm._directInactive = true;\n if (isInInactiveTree(vm)) {\n return\n }\n }\n if (!vm._inactive) {\n vm._inactive = true;\n for (var i = 0; i < vm.$children.length; i++) {\n deactivateChildComponent(vm.$children[i]);\n }\n callHook(vm, 'deactivated');\n }\n}\n\nfunction callHook (vm, hook) {\n var handlers = vm.$options[hook];\n if (handlers) {\n for (var i = 0, j = handlers.length; i < j; i++) {\n try {\n handlers[i].call(vm);\n } catch (e) {\n handleError(e, vm, (hook + \" hook\"));\n }\n }\n }\n if (vm._hasHookEvent) {\n vm.$emit('hook:' + hook);\n }\n}\n\n/* */\n\n\nvar MAX_UPDATE_COUNT = 100;\n\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n index = queue.length = activatedChildren.length = 0;\n has = {};\n if (process.env.NODE_ENV !== 'production') {\n circular = {};\n }\n waiting = flushing = false;\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n flushing = true;\n var watcher, id;\n\n // Sort queue before flush.\n // This ensures that:\n // 1. Components are updated from parent to child. (because parent is always\n // created before the child)\n // 2. A component's user watchers are run before its render watcher (because\n // user watchers are created before the render watcher)\n // 3. If a component is destroyed during a parent component's watcher run,\n // its watchers can be skipped.\n queue.sort(function (a, b) { return a.id - b.id; });\n\n // do not cache length because more watchers might be pushed\n // as we run existing watchers\n for (index = 0; index < queue.length; index++) {\n watcher = queue[index];\n id = watcher.id;\n has[id] = null;\n watcher.run();\n // in dev build, check and stop circular updates.\n if (process.env.NODE_ENV !== 'production' && has[id] != null) {\n circular[id] = (circular[id] || 0) + 1;\n if (circular[id] > MAX_UPDATE_COUNT) {\n warn(\n 'You may have an infinite update loop ' + (\n watcher.user\n ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n : \"in a component render function.\"\n ),\n watcher.vm\n );\n break\n }\n }\n }\n\n // keep copies of post queues before resetting state\n var activatedQueue = activatedChildren.slice();\n var updatedQueue = queue.slice();\n\n resetSchedulerState();\n\n // call component updated and activated hooks\n callActivatedHooks(activatedQueue);\n callUpdatedHooks(updatedQueue);\n\n // devtool hook\n /* istanbul ignore if */\n if (devtools && config.devtools) {\n devtools.emit('flush');\n }\n}\n\nfunction callUpdatedHooks (queue) {\n var i = queue.length;\n while (i--) {\n var watcher = queue[i];\n var vm = watcher.vm;\n if (vm._watcher === watcher && vm._isMounted) {\n callHook(vm, 'updated');\n }\n }\n}\n\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent (vm) {\n // setting _inactive to false here so that a render function can\n // rely on checking whether it's in an inactive tree (e.g. router-view)\n vm._inactive = false;\n activatedChildren.push(vm);\n}\n\nfunction callActivatedHooks (queue) {\n for (var i = 0; i < queue.length; i++) {\n queue[i]._inactive = true;\n activateChildComponent(queue[i], true /* true */);\n }\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n var id = watcher.id;\n if (has[id] == null) {\n has[id] = true;\n if (!flushing) {\n queue.push(watcher);\n } else {\n // if already flushing, splice the watcher based on its id\n // if already past its id, it will be run next immediately.\n var i = queue.length - 1;\n while (i > index && queue[i].id > watcher.id) {\n i--;\n }\n queue.splice(i + 1, 0, watcher);\n }\n // queue the flush\n if (!waiting) {\n waiting = true;\n nextTick(flushSchedulerQueue);\n }\n }\n}\n\n/* */\n\nvar uid$2 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n vm,\n expOrFn,\n cb,\n options\n) {\n this.vm = vm;\n vm._watchers.push(this);\n // options\n if (options) {\n this.deep = !!options.deep;\n this.user = !!options.user;\n this.lazy = !!options.lazy;\n this.sync = !!options.sync;\n } else {\n this.deep = this.user = this.lazy = this.sync = false;\n }\n this.cb = cb;\n this.id = ++uid$2; // uid for batching\n this.active = true;\n this.dirty = this.lazy; // for lazy watchers\n this.deps = [];\n this.newDeps = [];\n this.depIds = new _Set();\n this.newDepIds = new _Set();\n this.expression = process.env.NODE_ENV !== 'production'\n ? expOrFn.toString()\n : '';\n // parse expression for getter\n if (typeof expOrFn === 'function') {\n this.getter = expOrFn;\n } else {\n this.getter = parsePath(expOrFn);\n if (!this.getter) {\n this.getter = function () {};\n process.env.NODE_ENV !== 'production' && warn(\n \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n 'Watcher only accepts simple dot-delimited paths. ' +\n 'For full control, use a function instead.',\n vm\n );\n }\n }\n this.value = this.lazy\n ? undefined\n : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n pushTarget(this);\n var value;\n var vm = this.vm;\n try {\n value = this.getter.call(vm, vm);\n } catch (e) {\n if (this.user) {\n handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n } else {\n throw e\n }\n } finally {\n // \"touch\" every property so they are all tracked as\n // dependencies for deep watching\n if (this.deep) {\n traverse(value);\n }\n popTarget();\n this.cleanupDeps();\n }\n return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n var id = dep.id;\n if (!this.newDepIds.has(id)) {\n this.newDepIds.add(id);\n this.newDeps.push(dep);\n if (!this.depIds.has(id)) {\n dep.addSub(this);\n }\n }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n var this$1 = this;\n\n var i = this.deps.length;\n while (i--) {\n var dep = this$1.deps[i];\n if (!this$1.newDepIds.has(dep.id)) {\n dep.removeSub(this$1);\n }\n }\n var tmp = this.depIds;\n this.depIds = this.newDepIds;\n this.newDepIds = tmp;\n this.newDepIds.clear();\n tmp = this.deps;\n this.deps = this.newDeps;\n this.newDeps = tmp;\n this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n /* istanbul ignore else */\n if (this.lazy) {\n this.dirty = true;\n } else if (this.sync) {\n this.run();\n } else {\n queueWatcher(this);\n }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n if (this.active) {\n var value = this.get();\n if (\n value !== this.value ||\n // Deep watchers and watchers on Object/Arrays should fire even\n // when the value is the same, because the value may\n // have mutated.\n isObject(value) ||\n this.deep\n ) {\n // set new value\n var oldValue = this.value;\n this.value = value;\n if (this.user) {\n try {\n this.cb.call(this.vm, value, oldValue);\n } catch (e) {\n handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n }\n } else {\n this.cb.call(this.vm, value, oldValue);\n }\n }\n }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n this.value = this.get();\n this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n var this$1 = this;\n\n var i = this.deps.length;\n while (i--) {\n this$1.deps[i].depend();\n }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n var this$1 = this;\n\n if (this.active) {\n // remove self from vm's watcher list\n // this is a somewhat expensive operation so we skip it\n // if the vm is being destroyed.\n if (!this.vm._isBeingDestroyed) {\n remove(this.vm._watchers, this);\n }\n var i = this.deps.length;\n while (i--) {\n this$1.deps[i].removeSub(this$1);\n }\n this.active = false;\n }\n};\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nvar seenObjects = new _Set();\nfunction traverse (val) {\n seenObjects.clear();\n _traverse(val, seenObjects);\n}\n\nfunction _traverse (val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n if ((!isA && !isObject(val)) || !Object.isExtensible(val)) {\n return\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) { _traverse(val[i], seen); }\n } else {\n keys = Object.keys(val);\n i = keys.length;\n while (i--) { _traverse(val[keys[i]], seen); }\n }\n}\n\n/* */\n\nvar sharedPropertyDefinition = {\n enumerable: true,\n configurable: true,\n get: noop,\n set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n sharedPropertyDefinition.get = function proxyGetter () {\n return this[sourceKey][key]\n };\n sharedPropertyDefinition.set = function proxySetter (val) {\n this[sourceKey][key] = val;\n };\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n vm._watchers = [];\n var opts = vm.$options;\n if (opts.props) { initProps(vm, opts.props); }\n if (opts.methods) { initMethods(vm, opts.methods); }\n if (opts.data) {\n initData(vm);\n } else {\n observe(vm._data = {}, true /* asRootData */);\n }\n if (opts.computed) { initComputed(vm, opts.computed); }\n if (opts.watch && opts.watch !== nativeWatch) {\n initWatch(vm, opts.watch);\n }\n}\n\nfunction initProps (vm, propsOptions) {\n var propsData = vm.$options.propsData || {};\n var props = vm._props = {};\n // cache prop keys so that future props updates can iterate using Array\n // instead of dynamic object key enumeration.\n var keys = vm.$options._propKeys = [];\n var isRoot = !vm.$parent;\n // root instance props should be converted\n observerState.shouldConvert = isRoot;\n var loop = function ( key ) {\n keys.push(key);\n var value = validateProp(key, propsOptions, propsData, vm);\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n var hyphenatedKey = hyphenate(key);\n if (isReservedAttribute(hyphenatedKey) ||\n config.isReservedAttr(hyphenatedKey)) {\n warn(\n (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n vm\n );\n }\n defineReactive(props, key, value, function () {\n if (vm.$parent && !isUpdatingChildComponent) {\n warn(\n \"Avoid mutating a prop directly since the value will be \" +\n \"overwritten whenever the parent component re-renders. \" +\n \"Instead, use a data or computed property based on the prop's \" +\n \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n }\n });\n } else {\n defineReactive(props, key, value);\n }\n // static props are already proxied on the component's prototype\n // during Vue.extend(). We only need to proxy props defined at\n // instantiation here.\n if (!(key in vm)) {\n proxy(vm, \"_props\", key);\n }\n };\n\n for (var key in propsOptions) loop( key );\n observerState.shouldConvert = true;\n}\n\nfunction initData (vm) {\n var data = vm.$options.data;\n data = vm._data = typeof data === 'function'\n ? getData(data, vm)\n : data || {};\n if (!isPlainObject(data)) {\n data = {};\n process.env.NODE_ENV !== 'production' && warn(\n 'data functions should return an object:\\n' +\n 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n vm\n );\n }\n // proxy data on instance\n var keys = Object.keys(data);\n var props = vm.$options.props;\n var methods = vm.$options.methods;\n var i = keys.length;\n while (i--) {\n var key = keys[i];\n if (process.env.NODE_ENV !== 'production') {\n if (methods && hasOwn(methods, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n vm\n );\n }\n }\n if (props && hasOwn(props, key)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n \"Use prop default value instead.\",\n vm\n );\n } else if (!isReserved(key)) {\n proxy(vm, \"_data\", key);\n }\n }\n // observe data\n observe(data, true /* asRootData */);\n}\n\nfunction getData (data, vm) {\n try {\n return data.call(vm, vm)\n } catch (e) {\n handleError(e, vm, \"data()\");\n return {}\n }\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n var watchers = vm._computedWatchers = Object.create(null);\n // computed properties are just getters during SSR\n var isSSR = isServerRendering();\n\n for (var key in computed) {\n var userDef = computed[key];\n var getter = typeof userDef === 'function' ? userDef : userDef.get;\n if (process.env.NODE_ENV !== 'production' && getter == null) {\n warn(\n (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n vm\n );\n }\n\n if (!isSSR) {\n // create internal watcher for the computed property.\n watchers[key] = new Watcher(\n vm,\n getter || noop,\n noop,\n computedWatcherOptions\n );\n }\n\n // component-defined computed properties are already defined on the\n // component prototype. We only need to define computed properties defined\n // at instantiation here.\n if (!(key in vm)) {\n defineComputed(vm, key, userDef);\n } else if (process.env.NODE_ENV !== 'production') {\n if (key in vm.$data) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n } else if (vm.$options.props && key in vm.$options.props) {\n warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n }\n }\n }\n}\n\nfunction defineComputed (\n target,\n key,\n userDef\n) {\n var shouldCache = !isServerRendering();\n if (typeof userDef === 'function') {\n sharedPropertyDefinition.get = shouldCache\n ? createComputedGetter(key)\n : userDef;\n sharedPropertyDefinition.set = noop;\n } else {\n sharedPropertyDefinition.get = userDef.get\n ? shouldCache && userDef.cache !== false\n ? createComputedGetter(key)\n : userDef.get\n : noop;\n sharedPropertyDefinition.set = userDef.set\n ? userDef.set\n : noop;\n }\n if (process.env.NODE_ENV !== 'production' &&\n sharedPropertyDefinition.set === noop) {\n sharedPropertyDefinition.set = function () {\n warn(\n (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n this\n );\n };\n }\n Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n return function computedGetter () {\n var watcher = this._computedWatchers && this._computedWatchers[key];\n if (watcher) {\n if (watcher.dirty) {\n watcher.evaluate();\n }\n if (Dep.target) {\n watcher.depend();\n }\n return watcher.value\n }\n }\n}\n\nfunction initMethods (vm, methods) {\n var props = vm.$options.props;\n for (var key in methods) {\n if (process.env.NODE_ENV !== 'production') {\n if (methods[key] == null) {\n warn(\n \"Method \\\"\" + key + \"\\\" has an undefined value in the component definition. \" +\n \"Did you reference the function correctly?\",\n vm\n );\n }\n if (props && hasOwn(props, key)) {\n warn(\n (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n vm\n );\n }\n if ((key in vm) && isReserved(key)) {\n warn(\n \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n \"Avoid defining component methods that start with _ or $.\"\n );\n }\n }\n vm[key] = methods[key] == null ? noop : bind(methods[key], vm);\n }\n}\n\nfunction initWatch (vm, watch) {\n for (var key in watch) {\n var handler = watch[key];\n if (Array.isArray(handler)) {\n for (var i = 0; i < handler.length; i++) {\n createWatcher(vm, key, handler[i]);\n }\n } else {\n createWatcher(vm, key, handler);\n }\n }\n}\n\nfunction createWatcher (\n vm,\n keyOrFn,\n handler,\n options\n) {\n if (isPlainObject(handler)) {\n options = handler;\n handler = handler.handler;\n }\n if (typeof handler === 'string') {\n handler = vm[handler];\n }\n return vm.$watch(keyOrFn, handler, options)\n}\n\nfunction stateMixin (Vue) {\n // flow somehow has problems with directly declared definition object\n // when using Object.defineProperty, so we have to procedurally build up\n // the object here.\n var dataDef = {};\n dataDef.get = function () { return this._data };\n var propsDef = {};\n propsDef.get = function () { return this._props };\n if (process.env.NODE_ENV !== 'production') {\n dataDef.set = function (newData) {\n warn(\n 'Avoid replacing instance root $data. ' +\n 'Use nested data properties instead.',\n this\n );\n };\n propsDef.set = function () {\n warn(\"$props is readonly.\", this);\n };\n }\n Object.defineProperty(Vue.prototype, '$data', dataDef);\n Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n Vue.prototype.$set = set;\n Vue.prototype.$delete = del;\n\n Vue.prototype.$watch = function (\n expOrFn,\n cb,\n options\n ) {\n var vm = this;\n if (isPlainObject(cb)) {\n return createWatcher(vm, expOrFn, cb, options)\n }\n options = options || {};\n options.user = true;\n var watcher = new Watcher(vm, expOrFn, cb, options);\n if (options.immediate) {\n cb.call(vm, watcher.value);\n }\n return function unwatchFn () {\n watcher.teardown();\n }\n };\n}\n\n/* */\n\nfunction initProvide (vm) {\n var provide = vm.$options.provide;\n if (provide) {\n vm._provided = typeof provide === 'function'\n ? provide.call(vm)\n : provide;\n }\n}\n\nfunction initInjections (vm) {\n var result = resolveInject(vm.$options.inject, vm);\n if (result) {\n observerState.shouldConvert = false;\n Object.keys(result).forEach(function (key) {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n defineReactive(vm, key, result[key], function () {\n warn(\n \"Avoid mutating an injected value directly since the changes will be \" +\n \"overwritten whenever the provided component re-renders. \" +\n \"injection being mutated: \\\"\" + key + \"\\\"\",\n vm\n );\n });\n } else {\n defineReactive(vm, key, result[key]);\n }\n });\n observerState.shouldConvert = true;\n }\n}\n\nfunction resolveInject (inject, vm) {\n if (inject) {\n // inject is :any because flow is not smart enough to figure out cached\n var result = Object.create(null);\n var keys = hasSymbol\n ? Reflect.ownKeys(inject).filter(function (key) {\n /* istanbul ignore next */\n return Object.getOwnPropertyDescriptor(inject, key).enumerable\n })\n : Object.keys(inject);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var provideKey = inject[key].from;\n var source = vm;\n while (source) {\n if (source._provided && provideKey in source._provided) {\n result[key] = source._provided[provideKey];\n break\n }\n source = source.$parent;\n }\n if (!source) {\n if ('default' in inject[key]) {\n var provideDefault = inject[key].default;\n result[key] = typeof provideDefault === 'function'\n ? provideDefault.call(vm)\n : provideDefault;\n } else if (process.env.NODE_ENV !== 'production') {\n warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n }\n }\n }\n return result\n }\n}\n\n/* */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n val,\n render\n) {\n var ret, i, l, keys, key;\n if (Array.isArray(val) || typeof val === 'string') {\n ret = new Array(val.length);\n for (i = 0, l = val.length; i < l; i++) {\n ret[i] = render(val[i], i);\n }\n } else if (typeof val === 'number') {\n ret = new Array(val);\n for (i = 0; i < val; i++) {\n ret[i] = render(i + 1, i);\n }\n } else if (isObject(val)) {\n keys = Object.keys(val);\n ret = new Array(keys.length);\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n ret[i] = render(val[key], key, i);\n }\n }\n if (isDef(ret)) {\n (ret)._isVList = true;\n }\n return ret\n}\n\n/* */\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot (\n name,\n fallback,\n props,\n bindObject\n) {\n var scopedSlotFn = this.$scopedSlots[name];\n if (scopedSlotFn) { // scoped slot\n props = props || {};\n if (bindObject) {\n if (process.env.NODE_ENV !== 'production' && !isObject(bindObject)) {\n warn(\n 'slot v-bind without argument expects an Object',\n this\n );\n }\n props = extend(extend({}, bindObject), props);\n }\n return scopedSlotFn(props) || fallback\n } else {\n var slotNodes = this.$slots[name];\n // warn duplicate slot usage\n if (slotNodes && process.env.NODE_ENV !== 'production') {\n slotNodes._rendered && warn(\n \"Duplicate presence of slot \\\"\" + name + \"\\\" found in the same render tree \" +\n \"- this will likely cause render errors.\",\n this\n );\n slotNodes._rendered = true;\n }\n return slotNodes || fallback\n }\n}\n\n/* */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/* */\n\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes (\n eventKeyCode,\n key,\n builtInAlias,\n eventKeyName\n) {\n var keyCodes = config.keyCodes[key] || builtInAlias;\n if (keyCodes) {\n if (Array.isArray(keyCodes)) {\n return keyCodes.indexOf(eventKeyCode) === -1\n } else {\n return keyCodes !== eventKeyCode\n }\n } else if (eventKeyName) {\n return hyphenate(eventKeyName) !== key\n }\n}\n\n/* */\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps (\n data,\n tag,\n value,\n asProp,\n isSync\n) {\n if (value) {\n if (!isObject(value)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'v-bind without argument expects an Object or Array value',\n this\n );\n } else {\n if (Array.isArray(value)) {\n value = toObject(value);\n }\n var hash;\n var loop = function ( key ) {\n if (\n key === 'class' ||\n key === 'style' ||\n isReservedAttribute(key)\n ) {\n hash = data;\n } else {\n var type = data.attrs && data.attrs.type;\n hash = asProp || config.mustUseProp(tag, type, key)\n ? data.domProps || (data.domProps = {})\n : data.attrs || (data.attrs = {});\n }\n if (!(key in hash)) {\n hash[key] = value[key];\n\n if (isSync) {\n var on = data.on || (data.on = {});\n on[(\"update:\" + key)] = function ($event) {\n value[key] = $event;\n };\n }\n }\n };\n\n for (var key in value) loop( key );\n }\n }\n return data\n}\n\n/* */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n index,\n isInFor\n) {\n // static trees can be rendered once and cached on the contructor options\n // so every instance shares the same cached trees\n var renderFns = this.$options.staticRenderFns;\n var cached = renderFns.cached || (renderFns.cached = []);\n var tree = cached[index];\n // if has already-rendered static tree and not inside v-for,\n // we can reuse the same tree by doing a shallow clone.\n if (tree && !isInFor) {\n return Array.isArray(tree)\n ? cloneVNodes(tree)\n : cloneVNode(tree)\n }\n // otherwise, render a fresh tree.\n tree = cached[index] = renderFns[index].call(this._renderProxy, null, this);\n markStatic(tree, (\"__static__\" + index), false);\n return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n tree,\n index,\n key\n) {\n markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n return tree\n}\n\nfunction markStatic (\n tree,\n key,\n isOnce\n) {\n if (Array.isArray(tree)) {\n for (var i = 0; i < tree.length; i++) {\n if (tree[i] && typeof tree[i] !== 'string') {\n markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n }\n }\n } else {\n markStaticNode(tree, key, isOnce);\n }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n node.isStatic = true;\n node.key = key;\n node.isOnce = isOnce;\n}\n\n/* */\n\nfunction bindObjectListeners (data, value) {\n if (value) {\n if (!isPlainObject(value)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'v-on without argument expects an Object value',\n this\n );\n } else {\n var on = data.on = data.on ? extend({}, data.on) : {};\n for (var key in value) {\n var existing = on[key];\n var ours = value[key];\n on[key] = existing ? [].concat(existing, ours) : ours;\n }\n }\n }\n return data\n}\n\n/* */\n\nfunction installRenderHelpers (target) {\n target._o = markOnce;\n target._n = toNumber;\n target._s = toString;\n target._l = renderList;\n target._t = renderSlot;\n target._q = looseEqual;\n target._i = looseIndexOf;\n target._m = renderStatic;\n target._f = resolveFilter;\n target._k = checkKeyCodes;\n target._b = bindObjectProps;\n target._v = createTextVNode;\n target._e = createEmptyVNode;\n target._u = resolveScopedSlots;\n target._g = bindObjectListeners;\n}\n\n/* */\n\nfunction FunctionalRenderContext (\n data,\n props,\n children,\n parent,\n Ctor\n) {\n var options = Ctor.options;\n this.data = data;\n this.props = props;\n this.children = children;\n this.parent = parent;\n this.listeners = data.on || emptyObject;\n this.injections = resolveInject(options.inject, parent);\n this.slots = function () { return resolveSlots(children, parent); };\n\n // ensure the createElement function in functional components\n // gets a unique context - this is necessary for correct named slot check\n var contextVm = Object.create(parent);\n var isCompiled = isTrue(options._compiled);\n var needNormalization = !isCompiled;\n\n // support for compiled functional template\n if (isCompiled) {\n // exposing $options for renderStatic()\n this.$options = options;\n // pre-resolve slots for renderSlot()\n this.$slots = this.slots();\n this.$scopedSlots = data.scopedSlots || emptyObject;\n }\n\n if (options._scopeId) {\n this._c = function (a, b, c, d) {\n var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n if (vnode) {\n vnode.functionalScopeId = options._scopeId;\n vnode.functionalContext = parent;\n }\n return vnode\n };\n } else {\n this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n }\n}\n\ninstallRenderHelpers(FunctionalRenderContext.prototype);\n\nfunction createFunctionalComponent (\n Ctor,\n propsData,\n data,\n contextVm,\n children\n) {\n var options = Ctor.options;\n var props = {};\n var propOptions = options.props;\n if (isDef(propOptions)) {\n for (var key in propOptions) {\n props[key] = validateProp(key, propOptions, propsData || emptyObject);\n }\n } else {\n if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n if (isDef(data.props)) { mergeProps(props, data.props); }\n }\n\n var renderContext = new FunctionalRenderContext(\n data,\n props,\n children,\n contextVm,\n Ctor\n );\n\n var vnode = options.render.call(null, renderContext._c, renderContext);\n\n if (vnode instanceof VNode) {\n vnode.functionalContext = contextVm;\n vnode.functionalOptions = options;\n if (data.slot) {\n (vnode.data || (vnode.data = {})).slot = data.slot;\n }\n }\n\n return vnode\n}\n\nfunction mergeProps (to, from) {\n for (var key in from) {\n to[camelize(key)] = from[key];\n }\n}\n\n/* */\n\n// hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n init: function init (\n vnode,\n hydrating,\n parentElm,\n refElm\n ) {\n if (!vnode.componentInstance || vnode.componentInstance._isDestroyed) {\n var child = vnode.componentInstance = createComponentInstanceForVnode(\n vnode,\n activeInstance,\n parentElm,\n refElm\n );\n child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n } else if (vnode.data.keepAlive) {\n // kept-alive components, treat as a patch\n var mountedNode = vnode; // work around flow\n componentVNodeHooks.prepatch(mountedNode, mountedNode);\n }\n },\n\n prepatch: function prepatch (oldVnode, vnode) {\n var options = vnode.componentOptions;\n var child = vnode.componentInstance = oldVnode.componentInstance;\n updateChildComponent(\n child,\n options.propsData, // updated props\n options.listeners, // updated listeners\n vnode, // new parent vnode\n options.children // new children\n );\n },\n\n insert: function insert (vnode) {\n var context = vnode.context;\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isMounted) {\n componentInstance._isMounted = true;\n callHook(componentInstance, 'mounted');\n }\n if (vnode.data.keepAlive) {\n if (context._isMounted) {\n // vue-router#1212\n // During updates, a kept-alive component's child components may\n // change, so directly walking the tree here may call activated hooks\n // on incorrect children. Instead we push them into a queue which will\n // be processed after the whole patch process ended.\n queueActivatedComponent(componentInstance);\n } else {\n activateChildComponent(componentInstance, true /* direct */);\n }\n }\n },\n\n destroy: function destroy (vnode) {\n var componentInstance = vnode.componentInstance;\n if (!componentInstance._isDestroyed) {\n if (!vnode.data.keepAlive) {\n componentInstance.$destroy();\n } else {\n deactivateChildComponent(componentInstance, true /* direct */);\n }\n }\n }\n};\n\nvar hooksToMerge = Object.keys(componentVNodeHooks);\n\nfunction createComponent (\n Ctor,\n data,\n context,\n children,\n tag\n) {\n if (isUndef(Ctor)) {\n return\n }\n\n var baseCtor = context.$options._base;\n\n // plain options object: turn it into a constructor\n if (isObject(Ctor)) {\n Ctor = baseCtor.extend(Ctor);\n }\n\n // if at this stage it's not a constructor or an async component factory,\n // reject.\n if (typeof Ctor !== 'function') {\n if (process.env.NODE_ENV !== 'production') {\n warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n }\n return\n }\n\n // async component\n var asyncFactory;\n if (isUndef(Ctor.cid)) {\n asyncFactory = Ctor;\n Ctor = resolveAsyncComponent(asyncFactory, baseCtor, context);\n if (Ctor === undefined) {\n // return a placeholder node for async component, which is rendered\n // as a comment node but preserves all the raw information for the node.\n // the information will be used for async server-rendering and hydration.\n return createAsyncPlaceholder(\n asyncFactory,\n data,\n context,\n children,\n tag\n )\n }\n }\n\n data = data || {};\n\n // resolve constructor options in case global mixins are applied after\n // component constructor creation\n resolveConstructorOptions(Ctor);\n\n // transform component v-model data into props & events\n if (isDef(data.model)) {\n transformModel(Ctor.options, data);\n }\n\n // extract props\n var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n\n // functional component\n if (isTrue(Ctor.options.functional)) {\n return createFunctionalComponent(Ctor, propsData, data, context, children)\n }\n\n // extract listeners, since these needs to be treated as\n // child component listeners instead of DOM listeners\n var listeners = data.on;\n // replace with listeners with .native modifier\n // so it gets processed during parent component patch.\n data.on = data.nativeOn;\n\n if (isTrue(Ctor.options.abstract)) {\n // abstract components do not keep anything\n // other than props & listeners & slot\n\n // work around flow\n var slot = data.slot;\n data = {};\n if (slot) {\n data.slot = slot;\n }\n }\n\n // merge component management hooks onto the placeholder node\n mergeHooks(data);\n\n // return a placeholder vnode\n var name = Ctor.options.name || tag;\n var vnode = new VNode(\n (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n data, undefined, undefined, undefined, context,\n { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n asyncFactory\n );\n return vnode\n}\n\nfunction createComponentInstanceForVnode (\n vnode, // we know it's MountedComponentVNode but flow doesn't\n parent, // activeInstance in lifecycle state\n parentElm,\n refElm\n) {\n var vnodeComponentOptions = vnode.componentOptions;\n var options = {\n _isComponent: true,\n parent: parent,\n propsData: vnodeComponentOptions.propsData,\n _componentTag: vnodeComponentOptions.tag,\n _parentVnode: vnode,\n _parentListeners: vnodeComponentOptions.listeners,\n _renderChildren: vnodeComponentOptions.children,\n _parentElm: parentElm || null,\n _refElm: refElm || null\n };\n // check inline-template render functions\n var inlineTemplate = vnode.data.inlineTemplate;\n if (isDef(inlineTemplate)) {\n options.render = inlineTemplate.render;\n options.staticRenderFns = inlineTemplate.staticRenderFns;\n }\n return new vnodeComponentOptions.Ctor(options)\n}\n\nfunction mergeHooks (data) {\n if (!data.hook) {\n data.hook = {};\n }\n for (var i = 0; i < hooksToMerge.length; i++) {\n var key = hooksToMerge[i];\n var fromParent = data.hook[key];\n var ours = componentVNodeHooks[key];\n data.hook[key] = fromParent ? mergeHook$1(ours, fromParent) : ours;\n }\n}\n\nfunction mergeHook$1 (one, two) {\n return function (a, b, c, d) {\n one(a, b, c, d);\n two(a, b, c, d);\n }\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n var prop = (options.model && options.model.prop) || 'value';\n var event = (options.model && options.model.event) || 'input';(data.props || (data.props = {}))[prop] = data.model.value;\n var on = data.on || (data.on = {});\n if (isDef(on[event])) {\n on[event] = [data.model.callback].concat(on[event]);\n } else {\n on[event] = data.model.callback;\n }\n}\n\n/* */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n context,\n tag,\n data,\n children,\n normalizationType,\n alwaysNormalize\n) {\n if (Array.isArray(data) || isPrimitive(data)) {\n normalizationType = children;\n children = data;\n data = undefined;\n }\n if (isTrue(alwaysNormalize)) {\n normalizationType = ALWAYS_NORMALIZE;\n }\n return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n context,\n tag,\n data,\n children,\n normalizationType\n) {\n if (isDef(data) && isDef((data).__ob__)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n 'Always create fresh vnode data objects in each render!',\n context\n );\n return createEmptyVNode()\n }\n // object syntax in v-bind\n if (isDef(data) && isDef(data.is)) {\n tag = data.is;\n }\n if (!tag) {\n // in case of component :is set to falsy value\n return createEmptyVNode()\n }\n // warn against non-primitive key\n if (process.env.NODE_ENV !== 'production' &&\n isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n ) {\n warn(\n 'Avoid using non-primitive value as key, ' +\n 'use string/number value instead.',\n context\n );\n }\n // support single function children as default scoped slot\n if (Array.isArray(children) &&\n typeof children[0] === 'function'\n ) {\n data = data || {};\n data.scopedSlots = { default: children[0] };\n children.length = 0;\n }\n if (normalizationType === ALWAYS_NORMALIZE) {\n children = normalizeChildren(children);\n } else if (normalizationType === SIMPLE_NORMALIZE) {\n children = simpleNormalizeChildren(children);\n }\n var vnode, ns;\n if (typeof tag === 'string') {\n var Ctor;\n ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n if (config.isReservedTag(tag)) {\n // platform built-in elements\n vnode = new VNode(\n config.parsePlatformTagName(tag), data, children,\n undefined, undefined, context\n );\n } else if (isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n // component\n vnode = createComponent(Ctor, data, context, children, tag);\n } else {\n // unknown or unlisted namespaced elements\n // check at runtime because it may get assigned a namespace when its\n // parent normalizes children\n vnode = new VNode(\n tag, data, children,\n undefined, undefined, context\n );\n }\n } else {\n // direct component options / constructor\n vnode = createComponent(tag, data, context, children);\n }\n if (isDef(vnode)) {\n if (ns) { applyNS(vnode, ns); }\n return vnode\n } else {\n return createEmptyVNode()\n }\n}\n\nfunction applyNS (vnode, ns, force) {\n vnode.ns = ns;\n if (vnode.tag === 'foreignObject') {\n // use default namespace inside foreignObject\n ns = undefined;\n force = true;\n }\n if (isDef(vnode.children)) {\n for (var i = 0, l = vnode.children.length; i < l; i++) {\n var child = vnode.children[i];\n if (isDef(child.tag) && (isUndef(child.ns) || isTrue(force))) {\n applyNS(child, ns, force);\n }\n }\n }\n}\n\n/* */\n\nfunction initRender (vm) {\n vm._vnode = null; // the root of the child tree\n var options = vm.$options;\n var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n var renderContext = parentVnode && parentVnode.context;\n vm.$slots = resolveSlots(options._renderChildren, renderContext);\n vm.$scopedSlots = emptyObject;\n // bind the createElement fn to this instance\n // so that we get proper render context inside it.\n // args order: tag, data, children, normalizationType, alwaysNormalize\n // internal version is used by render functions compiled from templates\n vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n // normalization is always applied for the public version, used in\n // user-written render functions.\n vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n\n // $attrs & $listeners are exposed for easier HOC creation.\n // they need to be reactive so that HOCs using them are always updated\n var parentData = parentVnode && parentVnode.data;\n\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n defineReactive(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n }, true);\n defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {\n !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n }, true);\n } else {\n defineReactive(vm, '$attrs', parentData && parentData.attrs || emptyObject, null, true);\n defineReactive(vm, '$listeners', options._parentListeners || emptyObject, null, true);\n }\n}\n\nfunction renderMixin (Vue) {\n // install runtime convenience helpers\n installRenderHelpers(Vue.prototype);\n\n Vue.prototype.$nextTick = function (fn) {\n return nextTick(fn, this)\n };\n\n Vue.prototype._render = function () {\n var vm = this;\n var ref = vm.$options;\n var render = ref.render;\n var _parentVnode = ref._parentVnode;\n\n if (vm._isMounted) {\n // if the parent didn't update, the slot nodes will be the ones from\n // last render. They need to be cloned to ensure \"freshness\" for this render.\n for (var key in vm.$slots) {\n var slot = vm.$slots[key];\n if (slot._rendered) {\n vm.$slots[key] = cloneVNodes(slot, true /* deep */);\n }\n }\n }\n\n vm.$scopedSlots = (_parentVnode && _parentVnode.data.scopedSlots) || emptyObject;\n\n // set parent vnode. this allows render functions to have access\n // to the data on the placeholder node.\n vm.$vnode = _parentVnode;\n // render self\n var vnode;\n try {\n vnode = render.call(vm._renderProxy, vm.$createElement);\n } catch (e) {\n handleError(e, vm, \"render\");\n // return error render result,\n // or previous vnode to prevent render error causing blank component\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n if (vm.$options.renderError) {\n try {\n vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n } catch (e) {\n handleError(e, vm, \"renderError\");\n vnode = vm._vnode;\n }\n } else {\n vnode = vm._vnode;\n }\n } else {\n vnode = vm._vnode;\n }\n }\n // return empty vnode in case the render function errored out\n if (!(vnode instanceof VNode)) {\n if (process.env.NODE_ENV !== 'production' && Array.isArray(vnode)) {\n warn(\n 'Multiple root nodes returned from render function. Render function ' +\n 'should return a single root node.',\n vm\n );\n }\n vnode = createEmptyVNode();\n }\n // set parent\n vnode.parent = _parentVnode;\n return vnode\n };\n}\n\n/* */\n\nvar uid = 0;\n\nfunction initMixin (Vue) {\n Vue.prototype._init = function (options) {\n var vm = this;\n // a uid\n vm._uid = uid++;\n\n var startTag, endTag;\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n startTag = \"vue-perf-start:\" + (vm._uid);\n endTag = \"vue-perf-end:\" + (vm._uid);\n mark(startTag);\n }\n\n // a flag to avoid this being observed\n vm._isVue = true;\n // merge options\n if (options && options._isComponent) {\n // optimize internal component instantiation\n // since dynamic options merging is pretty slow, and none of the\n // internal component options needs special treatment.\n initInternalComponent(vm, options);\n } else {\n vm.$options = mergeOptions(\n resolveConstructorOptions(vm.constructor),\n options || {},\n vm\n );\n }\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n initProxy(vm);\n } else {\n vm._renderProxy = vm;\n }\n // expose real self\n vm._self = vm;\n initLifecycle(vm);\n initEvents(vm);\n initRender(vm);\n callHook(vm, 'beforeCreate');\n initInjections(vm); // resolve injections before data/props\n initState(vm);\n initProvide(vm); // resolve provide after data/props\n callHook(vm, 'created');\n\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n vm._name = formatComponentName(vm, false);\n mark(endTag);\n measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n }\n\n if (vm.$options.el) {\n vm.$mount(vm.$options.el);\n }\n };\n}\n\nfunction initInternalComponent (vm, options) {\n var opts = vm.$options = Object.create(vm.constructor.options);\n // doing this because it's faster than dynamic enumeration.\n opts.parent = options.parent;\n opts.propsData = options.propsData;\n opts._parentVnode = options._parentVnode;\n opts._parentListeners = options._parentListeners;\n opts._renderChildren = options._renderChildren;\n opts._componentTag = options._componentTag;\n opts._parentElm = options._parentElm;\n opts._refElm = options._refElm;\n if (options.render) {\n opts.render = options.render;\n opts.staticRenderFns = options.staticRenderFns;\n }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n var options = Ctor.options;\n if (Ctor.super) {\n var superOptions = resolveConstructorOptions(Ctor.super);\n var cachedSuperOptions = Ctor.superOptions;\n if (superOptions !== cachedSuperOptions) {\n // super option changed,\n // need to resolve new options.\n Ctor.superOptions = superOptions;\n // check if there are any late-modified/attached options (#4976)\n var modifiedOptions = resolveModifiedOptions(Ctor);\n // update base extend options\n if (modifiedOptions) {\n extend(Ctor.extendOptions, modifiedOptions);\n }\n options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n if (options.name) {\n options.components[options.name] = Ctor;\n }\n }\n }\n return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n var modified;\n var latest = Ctor.options;\n var extended = Ctor.extendOptions;\n var sealed = Ctor.sealedOptions;\n for (var key in latest) {\n if (latest[key] !== sealed[key]) {\n if (!modified) { modified = {}; }\n modified[key] = dedupe(latest[key], extended[key], sealed[key]);\n }\n }\n return modified\n}\n\nfunction dedupe (latest, extended, sealed) {\n // compare latest and sealed to ensure lifecycle hooks won't be duplicated\n // between merges\n if (Array.isArray(latest)) {\n var res = [];\n sealed = Array.isArray(sealed) ? sealed : [sealed];\n extended = Array.isArray(extended) ? extended : [extended];\n for (var i = 0; i < latest.length; i++) {\n // push original options and not sealed options to exclude duplicated options\n if (extended.indexOf(latest[i]) >= 0 || sealed.indexOf(latest[i]) < 0) {\n res.push(latest[i]);\n }\n }\n return res\n } else {\n return latest\n }\n}\n\nfunction Vue$3 (options) {\n if (process.env.NODE_ENV !== 'production' &&\n !(this instanceof Vue$3)\n ) {\n warn('Vue is a constructor and should be called with the `new` keyword');\n }\n this._init(options);\n}\n\ninitMixin(Vue$3);\nstateMixin(Vue$3);\neventsMixin(Vue$3);\nlifecycleMixin(Vue$3);\nrenderMixin(Vue$3);\n\n/* */\n\nfunction initUse (Vue) {\n Vue.use = function (plugin) {\n var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n if (installedPlugins.indexOf(plugin) > -1) {\n return this\n }\n\n // additional parameters\n var args = toArray(arguments, 1);\n args.unshift(this);\n if (typeof plugin.install === 'function') {\n plugin.install.apply(plugin, args);\n } else if (typeof plugin === 'function') {\n plugin.apply(null, args);\n }\n installedPlugins.push(plugin);\n return this\n };\n}\n\n/* */\n\nfunction initMixin$1 (Vue) {\n Vue.mixin = function (mixin) {\n this.options = mergeOptions(this.options, mixin);\n return this\n };\n}\n\n/* */\n\nfunction initExtend (Vue) {\n /**\n * Each instance constructor, including Vue, has a unique\n * cid. This enables us to create wrapped \"child\n * constructors\" for prototypal inheritance and cache them.\n */\n Vue.cid = 0;\n var cid = 1;\n\n /**\n * Class inheritance\n */\n Vue.extend = function (extendOptions) {\n extendOptions = extendOptions || {};\n var Super = this;\n var SuperId = Super.cid;\n var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n if (cachedCtors[SuperId]) {\n return cachedCtors[SuperId]\n }\n\n var name = extendOptions.name || Super.options.name;\n if (process.env.NODE_ENV !== 'production') {\n if (!/^[a-zA-Z][\\w-]*$/.test(name)) {\n warn(\n 'Invalid component name: \"' + name + '\". Component names ' +\n 'can only contain alphanumeric characters and the hyphen, ' +\n 'and must start with a letter.'\n );\n }\n }\n\n var Sub = function VueComponent (options) {\n this._init(options);\n };\n Sub.prototype = Object.create(Super.prototype);\n Sub.prototype.constructor = Sub;\n Sub.cid = cid++;\n Sub.options = mergeOptions(\n Super.options,\n extendOptions\n );\n Sub['super'] = Super;\n\n // For props and computed properties, we define the proxy getters on\n // the Vue instances at extension time, on the extended prototype. This\n // avoids Object.defineProperty calls for each instance created.\n if (Sub.options.props) {\n initProps$1(Sub);\n }\n if (Sub.options.computed) {\n initComputed$1(Sub);\n }\n\n // allow further extension/mixin/plugin usage\n Sub.extend = Super.extend;\n Sub.mixin = Super.mixin;\n Sub.use = Super.use;\n\n // create asset registers, so extended classes\n // can have their private assets too.\n ASSET_TYPES.forEach(function (type) {\n Sub[type] = Super[type];\n });\n // enable recursive self-lookup\n if (name) {\n Sub.options.components[name] = Sub;\n }\n\n // keep a reference to the super options at extension time.\n // later at instantiation we can check if Super's options have\n // been updated.\n Sub.superOptions = Super.options;\n Sub.extendOptions = extendOptions;\n Sub.sealedOptions = extend({}, Sub.options);\n\n // cache constructor\n cachedCtors[SuperId] = Sub;\n return Sub\n };\n}\n\nfunction initProps$1 (Comp) {\n var props = Comp.options.props;\n for (var key in props) {\n proxy(Comp.prototype, \"_props\", key);\n }\n}\n\nfunction initComputed$1 (Comp) {\n var computed = Comp.options.computed;\n for (var key in computed) {\n defineComputed(Comp.prototype, key, computed[key]);\n }\n}\n\n/* */\n\nfunction initAssetRegisters (Vue) {\n /**\n * Create asset registration methods.\n */\n ASSET_TYPES.forEach(function (type) {\n Vue[type] = function (\n id,\n definition\n ) {\n if (!definition) {\n return this.options[type + 's'][id]\n } else {\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production') {\n if (type === 'component' && config.isReservedTag(id)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + id\n );\n }\n }\n if (type === 'component' && isPlainObject(definition)) {\n definition.name = definition.name || id;\n definition = this.options._base.extend(definition);\n }\n if (type === 'directive' && typeof definition === 'function') {\n definition = { bind: definition, update: definition };\n }\n this.options[type + 's'][id] = definition;\n return definition\n }\n };\n });\n}\n\n/* */\n\nfunction getComponentName (opts) {\n return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n if (Array.isArray(pattern)) {\n return pattern.indexOf(name) > -1\n } else if (typeof pattern === 'string') {\n return pattern.split(',').indexOf(name) > -1\n } else if (isRegExp(pattern)) {\n return pattern.test(name)\n }\n /* istanbul ignore next */\n return false\n}\n\nfunction pruneCache (keepAliveInstance, filter) {\n var cache = keepAliveInstance.cache;\n var keys = keepAliveInstance.keys;\n var _vnode = keepAliveInstance._vnode;\n for (var key in cache) {\n var cachedNode = cache[key];\n if (cachedNode) {\n var name = getComponentName(cachedNode.componentOptions);\n if (name && !filter(name)) {\n pruneCacheEntry(cache, key, keys, _vnode);\n }\n }\n }\n}\n\nfunction pruneCacheEntry (\n cache,\n key,\n keys,\n current\n) {\n var cached$$1 = cache[key];\n if (cached$$1 && cached$$1 !== current) {\n cached$$1.componentInstance.$destroy();\n }\n cache[key] = null;\n remove(keys, key);\n}\n\nvar patternTypes = [String, RegExp, Array];\n\nvar KeepAlive = {\n name: 'keep-alive',\n abstract: true,\n\n props: {\n include: patternTypes,\n exclude: patternTypes,\n max: [String, Number]\n },\n\n created: function created () {\n this.cache = Object.create(null);\n this.keys = [];\n },\n\n destroyed: function destroyed () {\n var this$1 = this;\n\n for (var key in this$1.cache) {\n pruneCacheEntry(this$1.cache, key, this$1.keys);\n }\n },\n\n watch: {\n include: function include (val) {\n pruneCache(this, function (name) { return matches(val, name); });\n },\n exclude: function exclude (val) {\n pruneCache(this, function (name) { return !matches(val, name); });\n }\n },\n\n render: function render () {\n var vnode = getFirstComponentChild(this.$slots.default);\n var componentOptions = vnode && vnode.componentOptions;\n if (componentOptions) {\n // check pattern\n var name = getComponentName(componentOptions);\n if (name && (\n (this.include && !matches(this.include, name)) ||\n (this.exclude && matches(this.exclude, name))\n )) {\n return vnode\n }\n\n var ref = this;\n var cache = ref.cache;\n var keys = ref.keys;\n var key = vnode.key == null\n // same constructor may get registered as different local components\n // so cid alone is not enough (#3269)\n ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n : vnode.key;\n if (cache[key]) {\n vnode.componentInstance = cache[key].componentInstance;\n // make current key freshest\n remove(keys, key);\n keys.push(key);\n } else {\n cache[key] = vnode;\n keys.push(key);\n // prune oldest entry\n if (this.max && keys.length > parseInt(this.max)) {\n pruneCacheEntry(cache, keys[0], keys, this._vnode);\n }\n }\n\n vnode.data.keepAlive = true;\n }\n return vnode\n }\n};\n\nvar builtInComponents = {\n KeepAlive: KeepAlive\n};\n\n/* */\n\nfunction initGlobalAPI (Vue) {\n // config\n var configDef = {};\n configDef.get = function () { return config; };\n if (process.env.NODE_ENV !== 'production') {\n configDef.set = function () {\n warn(\n 'Do not replace the Vue.config object, set individual fields instead.'\n );\n };\n }\n Object.defineProperty(Vue, 'config', configDef);\n\n // exposed util methods.\n // NOTE: these are not considered part of the public API - avoid relying on\n // them unless you are aware of the risk.\n Vue.util = {\n warn: warn,\n extend: extend,\n mergeOptions: mergeOptions,\n defineReactive: defineReactive\n };\n\n Vue.set = set;\n Vue.delete = del;\n Vue.nextTick = nextTick;\n\n Vue.options = Object.create(null);\n ASSET_TYPES.forEach(function (type) {\n Vue.options[type + 's'] = Object.create(null);\n });\n\n // this is used to identify the \"base\" constructor to extend all plain-object\n // components with in Weex's multi-instance scenarios.\n Vue.options._base = Vue;\n\n extend(Vue.options.components, builtInComponents);\n\n initUse(Vue);\n initMixin$1(Vue);\n initExtend(Vue);\n initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue$3);\n\nObject.defineProperty(Vue$3.prototype, '$isServer', {\n get: isServerRendering\n});\n\nObject.defineProperty(Vue$3.prototype, '$ssrContext', {\n get: function get () {\n /* istanbul ignore next */\n return this.$vnode && this.$vnode.ssrContext\n }\n});\n\nVue$3.version = '2.5.2';\n\n/* */\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function (tag, type, attr) {\n return (\n (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n (attr === 'selected' && tag === 'option') ||\n (attr === 'checked' && tag === 'input') ||\n (attr === 'muted' && tag === 'video')\n )\n};\n\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n\nvar isBooleanAttr = makeMap(\n 'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n 'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n 'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n 'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n 'required,reversed,scoped,seamless,selected,sortable,translate,' +\n 'truespeed,typemustmatch,visible'\n);\n\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\n\nvar isXlink = function (name) {\n return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n};\n\nvar getXlinkProp = function (name) {\n return isXlink(name) ? name.slice(6, name.length) : ''\n};\n\nvar isFalsyAttrValue = function (val) {\n return val == null || val === false\n};\n\n/* */\n\nfunction genClassForVnode (vnode) {\n var data = vnode.data;\n var parentNode = vnode;\n var childNode = vnode;\n while (isDef(childNode.componentInstance)) {\n childNode = childNode.componentInstance._vnode;\n if (childNode.data) {\n data = mergeClassData(childNode.data, data);\n }\n }\n while (isDef(parentNode = parentNode.parent)) {\n if (parentNode.data) {\n data = mergeClassData(data, parentNode.data);\n }\n }\n return renderClass(data.staticClass, data.class)\n}\n\nfunction mergeClassData (child, parent) {\n return {\n staticClass: concat(child.staticClass, parent.staticClass),\n class: isDef(child.class)\n ? [child.class, parent.class]\n : parent.class\n }\n}\n\nfunction renderClass (\n staticClass,\n dynamicClass\n) {\n if (isDef(staticClass) || isDef(dynamicClass)) {\n return concat(staticClass, stringifyClass(dynamicClass))\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction concat (a, b) {\n return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n if (Array.isArray(value)) {\n return stringifyArray(value)\n }\n if (isObject(value)) {\n return stringifyObject(value)\n }\n if (typeof value === 'string') {\n return value\n }\n /* istanbul ignore next */\n return ''\n}\n\nfunction stringifyArray (value) {\n var res = '';\n var stringified;\n for (var i = 0, l = value.length; i < l; i++) {\n if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n if (res) { res += ' '; }\n res += stringified;\n }\n }\n return res\n}\n\nfunction stringifyObject (value) {\n var res = '';\n for (var key in value) {\n if (value[key]) {\n if (res) { res += ' '; }\n res += key;\n }\n }\n return res\n}\n\n/* */\n\nvar namespaceMap = {\n svg: 'http://www.w3.org/2000/svg',\n math: 'http://www.w3.org/1998/Math/MathML'\n};\n\nvar isHTMLTag = makeMap(\n 'html,body,base,head,link,meta,style,title,' +\n 'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n 'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n 'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n 's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n 'embed,object,param,source,canvas,script,noscript,del,ins,' +\n 'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n 'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n 'output,progress,select,textarea,' +\n 'details,dialog,menu,menuitem,summary,' +\n 'content,element,shadow,template,blockquote,iframe,tfoot'\n);\n\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap(\n 'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n 'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n 'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n true\n);\n\n\n\nvar isReservedTag = function (tag) {\n return isHTMLTag(tag) || isSVG(tag)\n};\n\nfunction getTagNamespace (tag) {\n if (isSVG(tag)) {\n return 'svg'\n }\n // basic support for MathML\n // note it doesn't support other MathML elements being component roots\n if (tag === 'math') {\n return 'math'\n }\n}\n\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement (tag) {\n /* istanbul ignore if */\n if (!inBrowser) {\n return true\n }\n if (isReservedTag(tag)) {\n return false\n }\n tag = tag.toLowerCase();\n /* istanbul ignore if */\n if (unknownElementCache[tag] != null) {\n return unknownElementCache[tag]\n }\n var el = document.createElement(tag);\n if (tag.indexOf('-') > -1) {\n // http://stackoverflow.com/a/28210364/1070244\n return (unknownElementCache[tag] = (\n el.constructor === window.HTMLUnknownElement ||\n el.constructor === window.HTMLElement\n ))\n } else {\n return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))\n }\n}\n\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/* */\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query (el) {\n if (typeof el === 'string') {\n var selected = document.querySelector(el);\n if (!selected) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Cannot find element: ' + el\n );\n return document.createElement('div')\n }\n return selected\n } else {\n return el\n }\n}\n\n/* */\n\nfunction createElement$1 (tagName, vnode) {\n var elm = document.createElement(tagName);\n if (tagName !== 'select') {\n return elm\n }\n // false or null will remove the attribute but undefined will not\n if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n elm.setAttribute('multiple', 'multiple');\n }\n return elm\n}\n\nfunction createElementNS (namespace, tagName) {\n return document.createElementNS(namespaceMap[namespace], tagName)\n}\n\nfunction createTextNode (text) {\n return document.createTextNode(text)\n}\n\nfunction createComment (text) {\n return document.createComment(text)\n}\n\nfunction insertBefore (parentNode, newNode, referenceNode) {\n parentNode.insertBefore(newNode, referenceNode);\n}\n\nfunction removeChild (node, child) {\n node.removeChild(child);\n}\n\nfunction appendChild (node, child) {\n node.appendChild(child);\n}\n\nfunction parentNode (node) {\n return node.parentNode\n}\n\nfunction nextSibling (node) {\n return node.nextSibling\n}\n\nfunction tagName (node) {\n return node.tagName\n}\n\nfunction setTextContent (node, text) {\n node.textContent = text;\n}\n\nfunction setAttribute (node, key, val) {\n node.setAttribute(key, val);\n}\n\n\nvar nodeOps = Object.freeze({\n\tcreateElement: createElement$1,\n\tcreateElementNS: createElementNS,\n\tcreateTextNode: createTextNode,\n\tcreateComment: createComment,\n\tinsertBefore: insertBefore,\n\tremoveChild: removeChild,\n\tappendChild: appendChild,\n\tparentNode: parentNode,\n\tnextSibling: nextSibling,\n\ttagName: tagName,\n\tsetTextContent: setTextContent,\n\tsetAttribute: setAttribute\n});\n\n/* */\n\nvar ref = {\n create: function create (_, vnode) {\n registerRef(vnode);\n },\n update: function update (oldVnode, vnode) {\n if (oldVnode.data.ref !== vnode.data.ref) {\n registerRef(oldVnode, true);\n registerRef(vnode);\n }\n },\n destroy: function destroy (vnode) {\n registerRef(vnode, true);\n }\n};\n\nfunction registerRef (vnode, isRemoval) {\n var key = vnode.data.ref;\n if (!key) { return }\n\n var vm = vnode.context;\n var ref = vnode.componentInstance || vnode.elm;\n var refs = vm.$refs;\n if (isRemoval) {\n if (Array.isArray(refs[key])) {\n remove(refs[key], ref);\n } else if (refs[key] === ref) {\n refs[key] = undefined;\n }\n } else {\n if (vnode.data.refInFor) {\n if (!Array.isArray(refs[key])) {\n refs[key] = [ref];\n } else if (refs[key].indexOf(ref) < 0) {\n // $flow-disable-line\n refs[key].push(ref);\n }\n } else {\n refs[key] = ref;\n }\n }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\n\nvar emptyNode = new VNode('', {}, []);\n\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n\nfunction sameVnode (a, b) {\n return (\n a.key === b.key && (\n (\n a.tag === b.tag &&\n a.isComment === b.isComment &&\n isDef(a.data) === isDef(b.data) &&\n sameInputType(a, b)\n ) || (\n isTrue(a.isAsyncPlaceholder) &&\n a.asyncFactory === b.asyncFactory &&\n isUndef(b.asyncFactory.error)\n )\n )\n )\n}\n\nfunction sameInputType (a, b) {\n if (a.tag !== 'input') { return true }\n var i;\n var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n}\n\nfunction createKeyToOldIdx (children, beginIdx, endIdx) {\n var i, key;\n var map = {};\n for (i = beginIdx; i <= endIdx; ++i) {\n key = children[i].key;\n if (isDef(key)) { map[key] = i; }\n }\n return map\n}\n\nfunction createPatchFunction (backend) {\n var i, j;\n var cbs = {};\n\n var modules = backend.modules;\n var nodeOps = backend.nodeOps;\n\n for (i = 0; i < hooks.length; ++i) {\n cbs[hooks[i]] = [];\n for (j = 0; j < modules.length; ++j) {\n if (isDef(modules[j][hooks[i]])) {\n cbs[hooks[i]].push(modules[j][hooks[i]]);\n }\n }\n }\n\n function emptyNodeAt (elm) {\n return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n }\n\n function createRmCb (childElm, listeners) {\n function remove () {\n if (--remove.listeners === 0) {\n removeNode(childElm);\n }\n }\n remove.listeners = listeners;\n return remove\n }\n\n function removeNode (el) {\n var parent = nodeOps.parentNode(el);\n // element may have already been removed due to v-html / v-text\n if (isDef(parent)) {\n nodeOps.removeChild(parent, el);\n }\n }\n\n var inPre = 0;\n function createElm (vnode, insertedVnodeQueue, parentElm, refElm, nested) {\n vnode.isRootInsert = !nested; // for transition enter check\n if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n return\n }\n\n var data = vnode.data;\n var children = vnode.children;\n var tag = vnode.tag;\n if (isDef(tag)) {\n if (process.env.NODE_ENV !== 'production') {\n if (data && data.pre) {\n inPre++;\n }\n if (\n !inPre &&\n !vnode.ns &&\n !(\n config.ignoredElements.length &&\n config.ignoredElements.some(function (ignore) {\n return isRegExp(ignore)\n ? ignore.test(tag)\n : ignore === tag\n })\n ) &&\n config.isUnknownElement(tag)\n ) {\n warn(\n 'Unknown custom element: <' + tag + '> - did you ' +\n 'register the component correctly? For recursive components, ' +\n 'make sure to provide the \"name\" option.',\n vnode.context\n );\n }\n }\n vnode.elm = vnode.ns\n ? nodeOps.createElementNS(vnode.ns, tag)\n : nodeOps.createElement(tag, vnode);\n setScope(vnode);\n\n /* istanbul ignore if */\n {\n createChildren(vnode, children, insertedVnodeQueue);\n if (isDef(data)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n }\n insert(parentElm, vnode.elm, refElm);\n }\n\n if (process.env.NODE_ENV !== 'production' && data && data.pre) {\n inPre--;\n }\n } else if (isTrue(vnode.isComment)) {\n vnode.elm = nodeOps.createComment(vnode.text);\n insert(parentElm, vnode.elm, refElm);\n } else {\n vnode.elm = nodeOps.createTextNode(vnode.text);\n insert(parentElm, vnode.elm, refElm);\n }\n }\n\n function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n var i = vnode.data;\n if (isDef(i)) {\n var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n if (isDef(i = i.hook) && isDef(i = i.init)) {\n i(vnode, false /* hydrating */, parentElm, refElm);\n }\n // after calling the init hook, if the vnode is a child component\n // it should've created a child instance and mounted it. the child\n // component also has set the placeholder vnode's elm.\n // in that case we can just return the element and be done.\n if (isDef(vnode.componentInstance)) {\n initComponent(vnode, insertedVnodeQueue);\n if (isTrue(isReactivated)) {\n reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n }\n return true\n }\n }\n }\n\n function initComponent (vnode, insertedVnodeQueue) {\n if (isDef(vnode.data.pendingInsert)) {\n insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n vnode.data.pendingInsert = null;\n }\n vnode.elm = vnode.componentInstance.$el;\n if (isPatchable(vnode)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n setScope(vnode);\n } else {\n // empty component root.\n // skip all element-related modules except for ref (#3455)\n registerRef(vnode);\n // make sure to invoke the insert hook\n insertedVnodeQueue.push(vnode);\n }\n }\n\n function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n var i;\n // hack for #4339: a reactivated component with inner transition\n // does not trigger because the inner node's created hooks are not called\n // again. It's not ideal to involve module-specific logic in here but\n // there doesn't seem to be a better way to do it.\n var innerNode = vnode;\n while (innerNode.componentInstance) {\n innerNode = innerNode.componentInstance._vnode;\n if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n for (i = 0; i < cbs.activate.length; ++i) {\n cbs.activate[i](emptyNode, innerNode);\n }\n insertedVnodeQueue.push(innerNode);\n break\n }\n }\n // unlike a newly created component,\n // a reactivated keep-alive component doesn't insert itself\n insert(parentElm, vnode.elm, refElm);\n }\n\n function insert (parent, elm, ref$$1) {\n if (isDef(parent)) {\n if (isDef(ref$$1)) {\n if (ref$$1.parentNode === parent) {\n nodeOps.insertBefore(parent, elm, ref$$1);\n }\n } else {\n nodeOps.appendChild(parent, elm);\n }\n }\n }\n\n function createChildren (vnode, children, insertedVnodeQueue) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; ++i) {\n createElm(children[i], insertedVnodeQueue, vnode.elm, null, true);\n }\n } else if (isPrimitive(vnode.text)) {\n nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(vnode.text));\n }\n }\n\n function isPatchable (vnode) {\n while (vnode.componentInstance) {\n vnode = vnode.componentInstance._vnode;\n }\n return isDef(vnode.tag)\n }\n\n function invokeCreateHooks (vnode, insertedVnodeQueue) {\n for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n cbs.create[i$1](emptyNode, vnode);\n }\n i = vnode.data.hook; // Reuse variable\n if (isDef(i)) {\n if (isDef(i.create)) { i.create(emptyNode, vnode); }\n if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n }\n }\n\n // set scope id attribute for scoped CSS.\n // this is implemented as a special case to avoid the overhead\n // of going through the normal attribute patching process.\n function setScope (vnode) {\n var i;\n if (isDef(i = vnode.functionalScopeId)) {\n nodeOps.setAttribute(vnode.elm, i, '');\n } else {\n var ancestor = vnode;\n while (ancestor) {\n if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n nodeOps.setAttribute(vnode.elm, i, '');\n }\n ancestor = ancestor.parent;\n }\n }\n // for slot content they should also get the scopeId from the host instance.\n if (isDef(i = activeInstance) &&\n i !== vnode.context &&\n i !== vnode.functionalContext &&\n isDef(i = i.$options._scopeId)\n ) {\n nodeOps.setAttribute(vnode.elm, i, '');\n }\n }\n\n function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n for (; startIdx <= endIdx; ++startIdx) {\n createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm);\n }\n }\n\n function invokeDestroyHook (vnode) {\n var i, j;\n var data = vnode.data;\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n }\n if (isDef(i = vnode.children)) {\n for (j = 0; j < vnode.children.length; ++j) {\n invokeDestroyHook(vnode.children[j]);\n }\n }\n }\n\n function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n if (isDef(ch)) {\n if (isDef(ch.tag)) {\n removeAndInvokeRemoveHook(ch);\n invokeDestroyHook(ch);\n } else { // Text node\n removeNode(ch.elm);\n }\n }\n }\n }\n\n function removeAndInvokeRemoveHook (vnode, rm) {\n if (isDef(rm) || isDef(vnode.data)) {\n var i;\n var listeners = cbs.remove.length + 1;\n if (isDef(rm)) {\n // we have a recursively passed down rm callback\n // increase the listeners count\n rm.listeners += listeners;\n } else {\n // directly removing\n rm = createRmCb(vnode.elm, listeners);\n }\n // recursively invoke hooks on child component root node\n if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n removeAndInvokeRemoveHook(i, rm);\n }\n for (i = 0; i < cbs.remove.length; ++i) {\n cbs.remove[i](vnode, rm);\n }\n if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n i(vnode, rm);\n } else {\n rm();\n }\n } else {\n removeNode(vnode.elm);\n }\n }\n\n function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n var oldStartIdx = 0;\n var newStartIdx = 0;\n var oldEndIdx = oldCh.length - 1;\n var oldStartVnode = oldCh[0];\n var oldEndVnode = oldCh[oldEndIdx];\n var newEndIdx = newCh.length - 1;\n var newStartVnode = newCh[0];\n var newEndVnode = newCh[newEndIdx];\n var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n\n // removeOnly is a special flag used only by <transition-group>\n // to ensure removed elements stay in correct relative positions\n // during leaving transitions\n var canMove = !removeOnly;\n\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (isUndef(oldStartVnode)) {\n oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n } else if (isUndef(oldEndVnode)) {\n oldEndVnode = oldCh[--oldEndIdx];\n } else if (sameVnode(oldStartVnode, newStartVnode)) {\n patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue);\n oldStartVnode = oldCh[++oldStartIdx];\n newStartVnode = newCh[++newStartIdx];\n } else if (sameVnode(oldEndVnode, newEndVnode)) {\n patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue);\n oldEndVnode = oldCh[--oldEndIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right\n patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue);\n canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n oldStartVnode = oldCh[++oldStartIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left\n patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue);\n canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n oldEndVnode = oldCh[--oldEndIdx];\n newStartVnode = newCh[++newStartIdx];\n } else {\n if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n idxInOld = isDef(newStartVnode.key)\n ? oldKeyToIdx[newStartVnode.key]\n : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n if (isUndef(idxInOld)) { // New element\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm);\n } else {\n vnodeToMove = oldCh[idxInOld];\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' && !vnodeToMove) {\n warn(\n 'It seems there are duplicate keys that is causing an update error. ' +\n 'Make sure each v-for item has a unique key.'\n );\n }\n if (sameVnode(vnodeToMove, newStartVnode)) {\n patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue);\n oldCh[idxInOld] = undefined;\n canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n } else {\n // same key but different element. treat as new element\n createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm);\n }\n }\n newStartVnode = newCh[++newStartIdx];\n }\n }\n if (oldStartIdx > oldEndIdx) {\n refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n } else if (newStartIdx > newEndIdx) {\n removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n }\n }\n\n function findIdxInOld (node, oldCh, start, end) {\n for (var i = start; i < end; i++) {\n var c = oldCh[i];\n if (isDef(c) && sameVnode(node, c)) { return i }\n }\n }\n\n function patchVnode (oldVnode, vnode, insertedVnodeQueue, removeOnly) {\n if (oldVnode === vnode) {\n return\n }\n\n var elm = vnode.elm = oldVnode.elm;\n\n if (isTrue(oldVnode.isAsyncPlaceholder)) {\n if (isDef(vnode.asyncFactory.resolved)) {\n hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n } else {\n vnode.isAsyncPlaceholder = true;\n }\n return\n }\n\n // reuse element for static trees.\n // note we only do this if the vnode is cloned -\n // if the new node is not cloned it means the render functions have been\n // reset by the hot-reload-api and we need to do a proper re-render.\n if (isTrue(vnode.isStatic) &&\n isTrue(oldVnode.isStatic) &&\n vnode.key === oldVnode.key &&\n (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n ) {\n vnode.componentInstance = oldVnode.componentInstance;\n return\n }\n\n var i;\n var data = vnode.data;\n if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n i(oldVnode, vnode);\n }\n\n var oldCh = oldVnode.children;\n var ch = vnode.children;\n if (isDef(data) && isPatchable(vnode)) {\n for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n }\n if (isUndef(vnode.text)) {\n if (isDef(oldCh) && isDef(ch)) {\n if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n } else if (isDef(ch)) {\n if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n } else if (isDef(oldCh)) {\n removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n } else if (isDef(oldVnode.text)) {\n nodeOps.setTextContent(elm, '');\n }\n } else if (oldVnode.text !== vnode.text) {\n nodeOps.setTextContent(elm, vnode.text);\n }\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n }\n }\n\n function invokeInsertHook (vnode, queue, initial) {\n // delay insert hooks for component root nodes, invoke them after the\n // element is really inserted\n if (isTrue(initial) && isDef(vnode.parent)) {\n vnode.parent.data.pendingInsert = queue;\n } else {\n for (var i = 0; i < queue.length; ++i) {\n queue[i].data.hook.insert(queue[i]);\n }\n }\n }\n\n var bailed = false;\n // list of modules that can skip create hook during hydration because they\n // are already rendered on the client or has no need for initialization\n var isRenderedModule = makeMap('attrs,style,class,staticClass,staticStyle,key');\n\n // Note: this is a browser-only function so we can assume elms are DOM nodes.\n function hydrate (elm, vnode, insertedVnodeQueue) {\n if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n vnode.elm = elm;\n vnode.isAsyncPlaceholder = true;\n return true\n }\n if (process.env.NODE_ENV !== 'production') {\n if (!assertNodeMatch(elm, vnode)) {\n return false\n }\n }\n vnode.elm = elm;\n var tag = vnode.tag;\n var data = vnode.data;\n var children = vnode.children;\n if (isDef(data)) {\n if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }\n if (isDef(i = vnode.componentInstance)) {\n // child component. it should have hydrated its own tree.\n initComponent(vnode, insertedVnodeQueue);\n return true\n }\n }\n if (isDef(tag)) {\n if (isDef(children)) {\n // empty element, allow client to pick up and populate children\n if (!elm.hasChildNodes()) {\n createChildren(vnode, children, insertedVnodeQueue);\n } else {\n // v-html and domProps: innerHTML\n if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n if (i !== elm.innerHTML) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' &&\n typeof console !== 'undefined' &&\n !bailed\n ) {\n bailed = true;\n console.warn('Parent: ', elm);\n console.warn('server innerHTML: ', i);\n console.warn('client innerHTML: ', elm.innerHTML);\n }\n return false\n }\n } else {\n // iterate and compare children lists\n var childrenMatch = true;\n var childNode = elm.firstChild;\n for (var i$1 = 0; i$1 < children.length; i$1++) {\n if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue)) {\n childrenMatch = false;\n break\n }\n childNode = childNode.nextSibling;\n }\n // if childNode is not null, it means the actual childNodes list is\n // longer than the virtual children list.\n if (!childrenMatch || childNode) {\n /* istanbul ignore if */\n if (process.env.NODE_ENV !== 'production' &&\n typeof console !== 'undefined' &&\n !bailed\n ) {\n bailed = true;\n console.warn('Parent: ', elm);\n console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n }\n return false\n }\n }\n }\n }\n if (isDef(data)) {\n for (var key in data) {\n if (!isRenderedModule(key)) {\n invokeCreateHooks(vnode, insertedVnodeQueue);\n break\n }\n }\n }\n } else if (elm.data !== vnode.text) {\n elm.data = vnode.text;\n }\n return true\n }\n\n function assertNodeMatch (node, vnode) {\n if (isDef(vnode.tag)) {\n return (\n vnode.tag.indexOf('vue-component') === 0 ||\n vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n )\n } else {\n return node.nodeType === (vnode.isComment ? 8 : 3)\n }\n }\n\n return function patch (oldVnode, vnode, hydrating, removeOnly, parentElm, refElm) {\n if (isUndef(vnode)) {\n if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n return\n }\n\n var isInitialPatch = false;\n var insertedVnodeQueue = [];\n\n if (isUndef(oldVnode)) {\n // empty mount (likely as component), create new root element\n isInitialPatch = true;\n createElm(vnode, insertedVnodeQueue, parentElm, refElm);\n } else {\n var isRealElement = isDef(oldVnode.nodeType);\n if (!isRealElement && sameVnode(oldVnode, vnode)) {\n // patch existing root node\n patchVnode(oldVnode, vnode, insertedVnodeQueue, removeOnly);\n } else {\n if (isRealElement) {\n // mounting to a real element\n // check if this is server-rendered content and if we can perform\n // a successful hydration.\n if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n oldVnode.removeAttribute(SSR_ATTR);\n hydrating = true;\n }\n if (isTrue(hydrating)) {\n if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n invokeInsertHook(vnode, insertedVnodeQueue, true);\n return oldVnode\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n 'The client-side rendered virtual DOM tree is not matching ' +\n 'server-rendered content. This is likely caused by incorrect ' +\n 'HTML markup, for example nesting block-level elements inside ' +\n '<p>, or missing <tbody>. Bailing hydration and performing ' +\n 'full client-side render.'\n );\n }\n }\n // either not server-rendered, or hydration failed.\n // create an empty node and replace it\n oldVnode = emptyNodeAt(oldVnode);\n }\n // replacing existing element\n var oldElm = oldVnode.elm;\n var parentElm$1 = nodeOps.parentNode(oldElm);\n createElm(\n vnode,\n insertedVnodeQueue,\n // extremely rare edge case: do not insert if old element is in a\n // leaving transition. Only happens when combining transition +\n // keep-alive + HOCs. (#4590)\n oldElm._leaveCb ? null : parentElm$1,\n nodeOps.nextSibling(oldElm)\n );\n\n if (isDef(vnode.parent)) {\n // component root element replaced.\n // update parent placeholder node element, recursively\n var ancestor = vnode.parent;\n var patchable = isPatchable(vnode);\n while (ancestor) {\n for (var i = 0; i < cbs.destroy.length; ++i) {\n cbs.destroy[i](ancestor);\n }\n ancestor.elm = vnode.elm;\n if (patchable) {\n for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n cbs.create[i$1](emptyNode, ancestor);\n }\n // #6513\n // invoke insert hooks that may have been merged by create hooks.\n // e.g. for directives that uses the \"inserted\" hook.\n var insert = ancestor.data.hook.insert;\n if (insert.merged) {\n // start at index 1 to avoid re-invoking component mounted hook\n for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {\n insert.fns[i$2]();\n }\n }\n } else {\n registerRef(ancestor);\n }\n ancestor = ancestor.parent;\n }\n }\n\n if (isDef(parentElm$1)) {\n removeVnodes(parentElm$1, [oldVnode], 0, 0);\n } else if (isDef(oldVnode.tag)) {\n invokeDestroyHook(oldVnode);\n }\n }\n }\n\n invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n return vnode.elm\n }\n}\n\n/* */\n\nvar directives = {\n create: updateDirectives,\n update: updateDirectives,\n destroy: function unbindDirectives (vnode) {\n updateDirectives(vnode, emptyNode);\n }\n};\n\nfunction updateDirectives (oldVnode, vnode) {\n if (oldVnode.data.directives || vnode.data.directives) {\n _update(oldVnode, vnode);\n }\n}\n\nfunction _update (oldVnode, vnode) {\n var isCreate = oldVnode === emptyNode;\n var isDestroy = vnode === emptyNode;\n var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n var dirsWithInsert = [];\n var dirsWithPostpatch = [];\n\n var key, oldDir, dir;\n for (key in newDirs) {\n oldDir = oldDirs[key];\n dir = newDirs[key];\n if (!oldDir) {\n // new directive, bind\n callHook$1(dir, 'bind', vnode, oldVnode);\n if (dir.def && dir.def.inserted) {\n dirsWithInsert.push(dir);\n }\n } else {\n // existing directive, update\n dir.oldValue = oldDir.value;\n callHook$1(dir, 'update', vnode, oldVnode);\n if (dir.def && dir.def.componentUpdated) {\n dirsWithPostpatch.push(dir);\n }\n }\n }\n\n if (dirsWithInsert.length) {\n var callInsert = function () {\n for (var i = 0; i < dirsWithInsert.length; i++) {\n callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n }\n };\n if (isCreate) {\n mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'insert', callInsert);\n } else {\n callInsert();\n }\n }\n\n if (dirsWithPostpatch.length) {\n mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'postpatch', function () {\n for (var i = 0; i < dirsWithPostpatch.length; i++) {\n callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n }\n });\n }\n\n if (!isCreate) {\n for (key in oldDirs) {\n if (!newDirs[key]) {\n // no longer present, unbind\n callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n }\n }\n }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n dirs,\n vm\n) {\n var res = Object.create(null);\n if (!dirs) {\n return res\n }\n var i, dir;\n for (i = 0; i < dirs.length; i++) {\n dir = dirs[i];\n if (!dir.modifiers) {\n dir.modifiers = emptyModifiers;\n }\n res[getRawDirName(dir)] = dir;\n dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n }\n return res\n}\n\nfunction getRawDirName (dir) {\n return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n var fn = dir.def && dir.def[hook];\n if (fn) {\n try {\n fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n } catch (e) {\n handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n }\n }\n}\n\nvar baseModules = [\n ref,\n directives\n];\n\n/* */\n\nfunction updateAttrs (oldVnode, vnode) {\n var opts = vnode.componentOptions;\n if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n return\n }\n if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n return\n }\n var key, cur, old;\n var elm = vnode.elm;\n var oldAttrs = oldVnode.data.attrs || {};\n var attrs = vnode.data.attrs || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(attrs.__ob__)) {\n attrs = vnode.data.attrs = extend({}, attrs);\n }\n\n for (key in attrs) {\n cur = attrs[key];\n old = oldAttrs[key];\n if (old !== cur) {\n setAttr(elm, key, cur);\n }\n }\n // #4391: in IE9, setting type can reset value for input[type=radio]\n // #6666: IE/Edge forces progress value down to 1 before setting a max\n /* istanbul ignore if */\n if ((isIE9 || isEdge) && attrs.value !== oldAttrs.value) {\n setAttr(elm, 'value', attrs.value);\n }\n for (key in oldAttrs) {\n if (isUndef(attrs[key])) {\n if (isXlink(key)) {\n elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else if (!isEnumeratedAttr(key)) {\n elm.removeAttribute(key);\n }\n }\n }\n}\n\nfunction setAttr (el, key, value) {\n if (isBooleanAttr(key)) {\n // set attribute for blank value\n // e.g. <option disabled>Select one</option>\n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n // technically allowfullscreen is a boolean attribute for <iframe>,\n // but Flash expects a value of \"true\" when used on <embed> tag\n value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n ? 'true'\n : key;\n el.setAttribute(key, value);\n }\n } else if (isEnumeratedAttr(key)) {\n el.setAttribute(key, isFalsyAttrValue(value) || value === 'false' ? 'false' : 'true');\n } else if (isXlink(key)) {\n if (isFalsyAttrValue(value)) {\n el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n } else {\n el.setAttributeNS(xlinkNS, key, value);\n }\n } else {\n if (isFalsyAttrValue(value)) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, value);\n }\n }\n}\n\nvar attrs = {\n create: updateAttrs,\n update: updateAttrs\n};\n\n/* */\n\nfunction updateClass (oldVnode, vnode) {\n var el = vnode.elm;\n var data = vnode.data;\n var oldData = oldVnode.data;\n if (\n isUndef(data.staticClass) &&\n isUndef(data.class) && (\n isUndef(oldData) || (\n isUndef(oldData.staticClass) &&\n isUndef(oldData.class)\n )\n )\n ) {\n return\n }\n\n var cls = genClassForVnode(vnode);\n\n // handle transition classes\n var transitionClass = el._transitionClasses;\n if (isDef(transitionClass)) {\n cls = concat(cls, stringifyClass(transitionClass));\n }\n\n // set the class\n if (cls !== el._prevClass) {\n el.setAttribute('class', cls);\n el._prevClass = cls;\n }\n}\n\nvar klass = {\n create: updateClass,\n update: updateClass\n};\n\n/* */\n\n/* */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// note: this only removes the attr from the Array (attrsList) so that it\n// doesn't get processed by processAttrs.\n// By default it does NOT remove it from the map (attrsMap) because the map is\n// needed during codegen.\n\n/* */\n\n/**\n * Cross-platform code generation for component v-model\n */\n\n\n/**\n * Cross-platform codegen helper for generating v-model value assignment code.\n */\n\n/* */\n\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\n\n/* */\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents (on) {\n /* istanbul ignore if */\n if (isDef(on[RANGE_TOKEN])) {\n // IE input[type=range] only supports `change` event\n var event = isIE ? 'change' : 'input';\n on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n delete on[RANGE_TOKEN];\n }\n // This was originally intended to fix #4521 but no longer necessary\n // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n /* istanbul ignore if */\n if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n delete on[CHECKBOX_RADIO_TOKEN];\n }\n}\n\nvar target$1;\n\nfunction createOnceHandler (handler, event, capture) {\n var _target = target$1; // save current target element in closure\n return function onceHandler () {\n var res = handler.apply(null, arguments);\n if (res !== null) {\n remove$2(event, onceHandler, capture, _target);\n }\n }\n}\n\nfunction add$1 (\n event,\n handler,\n once$$1,\n capture,\n passive\n) {\n handler = withMacroTask(handler);\n if (once$$1) { handler = createOnceHandler(handler, event, capture); }\n target$1.addEventListener(\n event,\n handler,\n supportsPassive\n ? { capture: capture, passive: passive }\n : capture\n );\n}\n\nfunction remove$2 (\n event,\n handler,\n capture,\n _target\n) {\n (_target || target$1).removeEventListener(\n event,\n handler._withTask || handler,\n capture\n );\n}\n\nfunction updateDOMListeners (oldVnode, vnode) {\n if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n return\n }\n var on = vnode.data.on || {};\n var oldOn = oldVnode.data.on || {};\n target$1 = vnode.elm;\n normalizeEvents(on);\n updateListeners(on, oldOn, add$1, remove$2, vnode.context);\n}\n\nvar events = {\n create: updateDOMListeners,\n update: updateDOMListeners\n};\n\n/* */\n\nfunction updateDOMProps (oldVnode, vnode) {\n if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n return\n }\n var key, cur;\n var elm = vnode.elm;\n var oldProps = oldVnode.data.domProps || {};\n var props = vnode.data.domProps || {};\n // clone observed objects, as the user probably wants to mutate it\n if (isDef(props.__ob__)) {\n props = vnode.data.domProps = extend({}, props);\n }\n\n for (key in oldProps) {\n if (isUndef(props[key])) {\n elm[key] = '';\n }\n }\n for (key in props) {\n cur = props[key];\n // ignore children if the node has textContent or innerHTML,\n // as these will throw away existing DOM nodes and cause removal errors\n // on subsequent patches (#3360)\n if (key === 'textContent' || key === 'innerHTML') {\n if (vnode.children) { vnode.children.length = 0; }\n if (cur === oldProps[key]) { continue }\n // #6601 work around Chrome version <= 55 bug where single textNode\n // replaced by innerHTML/textContent retains its parentNode property\n if (elm.childNodes.length === 1) {\n elm.removeChild(elm.childNodes[0]);\n }\n }\n\n if (key === 'value') {\n // store value as _value as well since\n // non-string values will be stringified\n elm._value = cur;\n // avoid resetting cursor position when value is the same\n var strCur = isUndef(cur) ? '' : String(cur);\n if (shouldUpdateValue(elm, strCur)) {\n elm.value = strCur;\n }\n } else {\n elm[key] = cur;\n }\n }\n}\n\n// check platforms/web/util/attrs.js acceptValue\n\n\nfunction shouldUpdateValue (elm, checkVal) {\n return (!elm.composing && (\n elm.tagName === 'OPTION' ||\n isDirty(elm, checkVal) ||\n isInputChanged(elm, checkVal)\n ))\n}\n\nfunction isDirty (elm, checkVal) {\n // return true when textbox (.number and .trim) loses focus and its value is\n // not equal to the updated value\n var notInFocus = true;\n // #6157\n // work around IE bug when accessing document.activeElement in an iframe\n try { notInFocus = document.activeElement !== elm; } catch (e) {}\n return notInFocus && elm.value !== checkVal\n}\n\nfunction isInputChanged (elm, newVal) {\n var value = elm.value;\n var modifiers = elm._vModifiers; // injected by v-model runtime\n if (isDef(modifiers) && modifiers.number) {\n return toNumber(value) !== toNumber(newVal)\n }\n if (isDef(modifiers) && modifiers.trim) {\n return value.trim() !== newVal.trim()\n }\n return value !== newVal\n}\n\nvar domProps = {\n create: updateDOMProps,\n update: updateDOMProps\n};\n\n/* */\n\nvar parseStyleText = cached(function (cssText) {\n var res = {};\n var listDelimiter = /;(?![^(]*\\))/g;\n var propertyDelimiter = /:(.+)/;\n cssText.split(listDelimiter).forEach(function (item) {\n if (item) {\n var tmp = item.split(propertyDelimiter);\n tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return res\n});\n\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData (data) {\n var style = normalizeStyleBinding(data.style);\n // static style is pre-processed into an object during compilation\n // and is always a fresh object, so it's safe to merge into it\n return data.staticStyle\n ? extend(data.staticStyle, style)\n : style\n}\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n if (Array.isArray(bindingStyle)) {\n return toObject(bindingStyle)\n }\n if (typeof bindingStyle === 'string') {\n return parseStyleText(bindingStyle)\n }\n return bindingStyle\n}\n\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle (vnode, checkChild) {\n var res = {};\n var styleData;\n\n if (checkChild) {\n var childNode = vnode;\n while (childNode.componentInstance) {\n childNode = childNode.componentInstance._vnode;\n if (childNode.data && (styleData = normalizeStyleData(childNode.data))) {\n extend(res, styleData);\n }\n }\n }\n\n if ((styleData = normalizeStyleData(vnode.data))) {\n extend(res, styleData);\n }\n\n var parentNode = vnode;\n while ((parentNode = parentNode.parent)) {\n if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n extend(res, styleData);\n }\n }\n return res\n}\n\n/* */\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n /* istanbul ignore if */\n if (cssVarRE.test(name)) {\n el.style.setProperty(name, val);\n } else if (importantRE.test(val)) {\n el.style.setProperty(name, val.replace(importantRE, ''), 'important');\n } else {\n var normalizedName = normalize(name);\n if (Array.isArray(val)) {\n // Support values array created by autoprefixer, e.g.\n // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n // Set them one by one, and the browser will only set those it can recognize\n for (var i = 0, len = val.length; i < len; i++) {\n el.style[normalizedName] = val[i];\n }\n } else {\n el.style[normalizedName] = val;\n }\n }\n};\n\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\n\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n emptyStyle = emptyStyle || document.createElement('div').style;\n prop = camelize(prop);\n if (prop !== 'filter' && (prop in emptyStyle)) {\n return prop\n }\n var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n for (var i = 0; i < vendorNames.length; i++) {\n var name = vendorNames[i] + capName;\n if (name in emptyStyle) {\n return name\n }\n }\n});\n\nfunction updateStyle (oldVnode, vnode) {\n var data = vnode.data;\n var oldData = oldVnode.data;\n\n if (isUndef(data.staticStyle) && isUndef(data.style) &&\n isUndef(oldData.staticStyle) && isUndef(oldData.style)\n ) {\n return\n }\n\n var cur, name;\n var el = vnode.elm;\n var oldStaticStyle = oldData.staticStyle;\n var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n\n // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n var oldStyle = oldStaticStyle || oldStyleBinding;\n\n var style = normalizeStyleBinding(vnode.data.style) || {};\n\n // store normalized style under a different key for next diff\n // make sure to clone it if it's reactive, since the user likely wants\n // to mutate it.\n vnode.data.normalizedStyle = isDef(style.__ob__)\n ? extend({}, style)\n : style;\n\n var newStyle = getStyle(vnode, true);\n\n for (name in oldStyle) {\n if (isUndef(newStyle[name])) {\n setProp(el, name, '');\n }\n }\n for (name in newStyle) {\n cur = newStyle[name];\n if (cur !== oldStyle[name]) {\n // ie9 setting to null has no effect, must use empty string\n setProp(el, name, cur == null ? '' : cur);\n }\n }\n}\n\nvar style = {\n create: updateStyle,\n update: updateStyle\n};\n\n/* */\n\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass (el, cls) {\n /* istanbul ignore if */\n if (!cls || !(cls = cls.trim())) {\n return\n }\n\n /* istanbul ignore else */\n if (el.classList) {\n if (cls.indexOf(' ') > -1) {\n cls.split(/\\s+/).forEach(function (c) { return el.classList.add(c); });\n } else {\n el.classList.add(cls);\n }\n } else {\n var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n if (cur.indexOf(' ' + cls + ' ') < 0) {\n el.setAttribute('class', (cur + cls).trim());\n }\n }\n}\n\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass (el, cls) {\n /* istanbul ignore if */\n if (!cls || !(cls = cls.trim())) {\n return\n }\n\n /* istanbul ignore else */\n if (el.classList) {\n if (cls.indexOf(' ') > -1) {\n cls.split(/\\s+/).forEach(function (c) { return el.classList.remove(c); });\n } else {\n el.classList.remove(cls);\n }\n if (!el.classList.length) {\n el.removeAttribute('class');\n }\n } else {\n var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n var tar = ' ' + cls + ' ';\n while (cur.indexOf(tar) >= 0) {\n cur = cur.replace(tar, ' ');\n }\n cur = cur.trim();\n if (cur) {\n el.setAttribute('class', cur);\n } else {\n el.removeAttribute('class');\n }\n }\n}\n\n/* */\n\nfunction resolveTransition (def) {\n if (!def) {\n return\n }\n /* istanbul ignore else */\n if (typeof def === 'object') {\n var res = {};\n if (def.css !== false) {\n extend(res, autoCssTransition(def.name || 'v'));\n }\n extend(res, def);\n return res\n } else if (typeof def === 'string') {\n return autoCssTransition(def)\n }\n}\n\nvar autoCssTransition = cached(function (name) {\n return {\n enterClass: (name + \"-enter\"),\n enterToClass: (name + \"-enter-to\"),\n enterActiveClass: (name + \"-enter-active\"),\n leaveClass: (name + \"-leave\"),\n leaveToClass: (name + \"-leave-to\"),\n leaveActiveClass: (name + \"-leave-active\")\n }\n});\n\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n /* istanbul ignore if */\n if (window.ontransitionend === undefined &&\n window.onwebkittransitionend !== undefined\n ) {\n transitionProp = 'WebkitTransition';\n transitionEndEvent = 'webkitTransitionEnd';\n }\n if (window.onanimationend === undefined &&\n window.onwebkitanimationend !== undefined\n ) {\n animationProp = 'WebkitAnimation';\n animationEndEvent = 'webkitAnimationEnd';\n }\n}\n\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser\n ? window.requestAnimationFrame\n ? window.requestAnimationFrame.bind(window)\n : setTimeout\n : /* istanbul ignore next */ function (fn) { return fn(); };\n\nfunction nextFrame (fn) {\n raf(function () {\n raf(fn);\n });\n}\n\nfunction addTransitionClass (el, cls) {\n var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n if (transitionClasses.indexOf(cls) < 0) {\n transitionClasses.push(cls);\n addClass(el, cls);\n }\n}\n\nfunction removeTransitionClass (el, cls) {\n if (el._transitionClasses) {\n remove(el._transitionClasses, cls);\n }\n removeClass(el, cls);\n}\n\nfunction whenTransitionEnds (\n el,\n expectedType,\n cb\n) {\n var ref = getTransitionInfo(el, expectedType);\n var type = ref.type;\n var timeout = ref.timeout;\n var propCount = ref.propCount;\n if (!type) { return cb() }\n var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n var ended = 0;\n var end = function () {\n el.removeEventListener(event, onEnd);\n cb();\n };\n var onEnd = function (e) {\n if (e.target === el) {\n if (++ended >= propCount) {\n end();\n }\n }\n };\n setTimeout(function () {\n if (ended < propCount) {\n end();\n }\n }, timeout + 1);\n el.addEventListener(event, onEnd);\n}\n\nvar transformRE = /\\b(transform|all)(,|$)/;\n\nfunction getTransitionInfo (el, expectedType) {\n var styles = window.getComputedStyle(el);\n var transitionDelays = styles[transitionProp + 'Delay'].split(', ');\n var transitionDurations = styles[transitionProp + 'Duration'].split(', ');\n var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n var animationDelays = styles[animationProp + 'Delay'].split(', ');\n var animationDurations = styles[animationProp + 'Duration'].split(', ');\n var animationTimeout = getTimeout(animationDelays, animationDurations);\n\n var type;\n var timeout = 0;\n var propCount = 0;\n /* istanbul ignore if */\n if (expectedType === TRANSITION) {\n if (transitionTimeout > 0) {\n type = TRANSITION;\n timeout = transitionTimeout;\n propCount = transitionDurations.length;\n }\n } else if (expectedType === ANIMATION) {\n if (animationTimeout > 0) {\n type = ANIMATION;\n timeout = animationTimeout;\n propCount = animationDurations.length;\n }\n } else {\n timeout = Math.max(transitionTimeout, animationTimeout);\n type = timeout > 0\n ? transitionTimeout > animationTimeout\n ? TRANSITION\n : ANIMATION\n : null;\n propCount = type\n ? type === TRANSITION\n ? transitionDurations.length\n : animationDurations.length\n : 0;\n }\n var hasTransform =\n type === TRANSITION &&\n transformRE.test(styles[transitionProp + 'Property']);\n return {\n type: type,\n timeout: timeout,\n propCount: propCount,\n hasTransform: hasTransform\n }\n}\n\nfunction getTimeout (delays, durations) {\n /* istanbul ignore next */\n while (delays.length < durations.length) {\n delays = delays.concat(delays);\n }\n\n return Math.max.apply(null, durations.map(function (d, i) {\n return toMs(d) + toMs(delays[i])\n }))\n}\n\nfunction toMs (s) {\n return Number(s.slice(0, -1)) * 1000\n}\n\n/* */\n\nfunction enter (vnode, toggleDisplay) {\n var el = vnode.elm;\n\n // call leave callback now\n if (isDef(el._leaveCb)) {\n el._leaveCb.cancelled = true;\n el._leaveCb();\n }\n\n var data = resolveTransition(vnode.data.transition);\n if (isUndef(data)) {\n return\n }\n\n /* istanbul ignore if */\n if (isDef(el._enterCb) || el.nodeType !== 1) {\n return\n }\n\n var css = data.css;\n var type = data.type;\n var enterClass = data.enterClass;\n var enterToClass = data.enterToClass;\n var enterActiveClass = data.enterActiveClass;\n var appearClass = data.appearClass;\n var appearToClass = data.appearToClass;\n var appearActiveClass = data.appearActiveClass;\n var beforeEnter = data.beforeEnter;\n var enter = data.enter;\n var afterEnter = data.afterEnter;\n var enterCancelled = data.enterCancelled;\n var beforeAppear = data.beforeAppear;\n var appear = data.appear;\n var afterAppear = data.afterAppear;\n var appearCancelled = data.appearCancelled;\n var duration = data.duration;\n\n // activeInstance will always be the <transition> component managing this\n // transition. One edge case to check is when the <transition> is placed\n // as the root node of a child component. In that case we need to check\n // <transition>'s parent for appear check.\n var context = activeInstance;\n var transitionNode = activeInstance.$vnode;\n while (transitionNode && transitionNode.parent) {\n transitionNode = transitionNode.parent;\n context = transitionNode.context;\n }\n\n var isAppear = !context._isMounted || !vnode.isRootInsert;\n\n if (isAppear && !appear && appear !== '') {\n return\n }\n\n var startClass = isAppear && appearClass\n ? appearClass\n : enterClass;\n var activeClass = isAppear && appearActiveClass\n ? appearActiveClass\n : enterActiveClass;\n var toClass = isAppear && appearToClass\n ? appearToClass\n : enterToClass;\n\n var beforeEnterHook = isAppear\n ? (beforeAppear || beforeEnter)\n : beforeEnter;\n var enterHook = isAppear\n ? (typeof appear === 'function' ? appear : enter)\n : enter;\n var afterEnterHook = isAppear\n ? (afterAppear || afterEnter)\n : afterEnter;\n var enterCancelledHook = isAppear\n ? (appearCancelled || enterCancelled)\n : enterCancelled;\n\n var explicitEnterDuration = toNumber(\n isObject(duration)\n ? duration.enter\n : duration\n );\n\n if (process.env.NODE_ENV !== 'production' && explicitEnterDuration != null) {\n checkDuration(explicitEnterDuration, 'enter', vnode);\n }\n\n var expectsCSS = css !== false && !isIE9;\n var userWantsControl = getHookArgumentsLength(enterHook);\n\n var cb = el._enterCb = once(function () {\n if (expectsCSS) {\n removeTransitionClass(el, toClass);\n removeTransitionClass(el, activeClass);\n }\n if (cb.cancelled) {\n if (expectsCSS) {\n removeTransitionClass(el, startClass);\n }\n enterCancelledHook && enterCancelledHook(el);\n } else {\n afterEnterHook && afterEnterHook(el);\n }\n el._enterCb = null;\n });\n\n if (!vnode.data.show) {\n // remove pending leave element on enter by injecting an insert hook\n mergeVNodeHook(vnode.data.hook || (vnode.data.hook = {}), 'insert', function () {\n var parent = el.parentNode;\n var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n if (pendingNode &&\n pendingNode.tag === vnode.tag &&\n pendingNode.elm._leaveCb\n ) {\n pendingNode.elm._leaveCb();\n }\n enterHook && enterHook(el, cb);\n });\n }\n\n // start enter transition\n beforeEnterHook && beforeEnterHook(el);\n if (expectsCSS) {\n addTransitionClass(el, startClass);\n addTransitionClass(el, activeClass);\n nextFrame(function () {\n addTransitionClass(el, toClass);\n removeTransitionClass(el, startClass);\n if (!cb.cancelled && !userWantsControl) {\n if (isValidDuration(explicitEnterDuration)) {\n setTimeout(cb, explicitEnterDuration);\n } else {\n whenTransitionEnds(el, type, cb);\n }\n }\n });\n }\n\n if (vnode.data.show) {\n toggleDisplay && toggleDisplay();\n enterHook && enterHook(el, cb);\n }\n\n if (!expectsCSS && !userWantsControl) {\n cb();\n }\n}\n\nfunction leave (vnode, rm) {\n var el = vnode.elm;\n\n // call enter callback now\n if (isDef(el._enterCb)) {\n el._enterCb.cancelled = true;\n el._enterCb();\n }\n\n var data = resolveTransition(vnode.data.transition);\n if (isUndef(data)) {\n return rm()\n }\n\n /* istanbul ignore if */\n if (isDef(el._leaveCb) || el.nodeType !== 1) {\n return\n }\n\n var css = data.css;\n var type = data.type;\n var leaveClass = data.leaveClass;\n var leaveToClass = data.leaveToClass;\n var leaveActiveClass = data.leaveActiveClass;\n var beforeLeave = data.beforeLeave;\n var leave = data.leave;\n var afterLeave = data.afterLeave;\n var leaveCancelled = data.leaveCancelled;\n var delayLeave = data.delayLeave;\n var duration = data.duration;\n\n var expectsCSS = css !== false && !isIE9;\n var userWantsControl = getHookArgumentsLength(leave);\n\n var explicitLeaveDuration = toNumber(\n isObject(duration)\n ? duration.leave\n : duration\n );\n\n if (process.env.NODE_ENV !== 'production' && isDef(explicitLeaveDuration)) {\n checkDuration(explicitLeaveDuration, 'leave', vnode);\n }\n\n var cb = el._leaveCb = once(function () {\n if (el.parentNode && el.parentNode._pending) {\n el.parentNode._pending[vnode.key] = null;\n }\n if (expectsCSS) {\n removeTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveActiveClass);\n }\n if (cb.cancelled) {\n if (expectsCSS) {\n removeTransitionClass(el, leaveClass);\n }\n leaveCancelled && leaveCancelled(el);\n } else {\n rm();\n afterLeave && afterLeave(el);\n }\n el._leaveCb = null;\n });\n\n if (delayLeave) {\n delayLeave(performLeave);\n } else {\n performLeave();\n }\n\n function performLeave () {\n // the delayed leave may have already been cancelled\n if (cb.cancelled) {\n return\n }\n // record leaving element\n if (!vnode.data.show) {\n (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n }\n beforeLeave && beforeLeave(el);\n if (expectsCSS) {\n addTransitionClass(el, leaveClass);\n addTransitionClass(el, leaveActiveClass);\n nextFrame(function () {\n addTransitionClass(el, leaveToClass);\n removeTransitionClass(el, leaveClass);\n if (!cb.cancelled && !userWantsControl) {\n if (isValidDuration(explicitLeaveDuration)) {\n setTimeout(cb, explicitLeaveDuration);\n } else {\n whenTransitionEnds(el, type, cb);\n }\n }\n });\n }\n leave && leave(el, cb);\n if (!expectsCSS && !userWantsControl) {\n cb();\n }\n }\n}\n\n// only used in dev mode\nfunction checkDuration (val, name, vnode) {\n if (typeof val !== 'number') {\n warn(\n \"<transition> explicit \" + name + \" duration is not a valid number - \" +\n \"got \" + (JSON.stringify(val)) + \".\",\n vnode.context\n );\n } else if (isNaN(val)) {\n warn(\n \"<transition> explicit \" + name + \" duration is NaN - \" +\n 'the duration expression might be incorrect.',\n vnode.context\n );\n }\n}\n\nfunction isValidDuration (val) {\n return typeof val === 'number' && !isNaN(val)\n}\n\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength (fn) {\n if (isUndef(fn)) {\n return false\n }\n var invokerFns = fn.fns;\n if (isDef(invokerFns)) {\n // invoker\n return getHookArgumentsLength(\n Array.isArray(invokerFns)\n ? invokerFns[0]\n : invokerFns\n )\n } else {\n return (fn._length || fn.length) > 1\n }\n}\n\nfunction _enter (_, vnode) {\n if (vnode.data.show !== true) {\n enter(vnode);\n }\n}\n\nvar transition = inBrowser ? {\n create: _enter,\n activate: _enter,\n remove: function remove$$1 (vnode, rm) {\n /* istanbul ignore else */\n if (vnode.data.show !== true) {\n leave(vnode, rm);\n } else {\n rm();\n }\n }\n} : {};\n\nvar platformModules = [\n attrs,\n klass,\n events,\n domProps,\n style,\n transition\n];\n\n/* */\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules);\n\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n\n/* istanbul ignore if */\nif (isIE9) {\n // http://www.matts411.com/post/internet-explorer-9-oninput/\n document.addEventListener('selectionchange', function () {\n var el = document.activeElement;\n if (el && el.vmodel) {\n trigger(el, 'input');\n }\n });\n}\n\nvar model$1 = {\n inserted: function inserted (el, binding, vnode) {\n if (vnode.tag === 'select') {\n setSelected(el, binding, vnode.context);\n el._vOptions = [].map.call(el.options, getValue);\n } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n el._vModifiers = binding.modifiers;\n if (!binding.modifiers.lazy) {\n // Safari < 10.2 & UIWebView doesn't fire compositionend when\n // switching focus before confirming composition choice\n // this also fixes the issue where some browsers e.g. iOS Chrome\n // fires \"change\" instead of \"input\" on autocomplete.\n el.addEventListener('change', onCompositionEnd);\n if (!isAndroid) {\n el.addEventListener('compositionstart', onCompositionStart);\n el.addEventListener('compositionend', onCompositionEnd);\n }\n /* istanbul ignore if */\n if (isIE9) {\n el.vmodel = true;\n }\n }\n }\n },\n componentUpdated: function componentUpdated (el, binding, vnode) {\n if (vnode.tag === 'select') {\n setSelected(el, binding, vnode.context);\n // in case the options rendered by v-for have changed,\n // it's possible that the value is out-of-sync with the rendered options.\n // detect such cases and filter out values that no longer has a matching\n // option in the DOM.\n var prevOptions = el._vOptions;\n var curOptions = el._vOptions = [].map.call(el.options, getValue);\n if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n // trigger change event if\n // no matching option found for at least one value\n var needReset = el.multiple\n ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n if (needReset) {\n trigger(el, 'change');\n }\n }\n }\n }\n};\n\nfunction setSelected (el, binding, vm) {\n actuallySetSelected(el, binding, vm);\n /* istanbul ignore if */\n if (isIE || isEdge) {\n setTimeout(function () {\n actuallySetSelected(el, binding, vm);\n }, 0);\n }\n}\n\nfunction actuallySetSelected (el, binding, vm) {\n var value = binding.value;\n var isMultiple = el.multiple;\n if (isMultiple && !Array.isArray(value)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"<select multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n vm\n );\n return\n }\n var selected, option;\n for (var i = 0, l = el.options.length; i < l; i++) {\n option = el.options[i];\n if (isMultiple) {\n selected = looseIndexOf(value, getValue(option)) > -1;\n if (option.selected !== selected) {\n option.selected = selected;\n }\n } else {\n if (looseEqual(getValue(option), value)) {\n if (el.selectedIndex !== i) {\n el.selectedIndex = i;\n }\n return\n }\n }\n }\n if (!isMultiple) {\n el.selectedIndex = -1;\n }\n}\n\nfunction hasNoMatchingOption (value, options) {\n return options.every(function (o) { return !looseEqual(o, value); })\n}\n\nfunction getValue (option) {\n return '_value' in option\n ? option._value\n : option.value\n}\n\nfunction onCompositionStart (e) {\n e.target.composing = true;\n}\n\nfunction onCompositionEnd (e) {\n // prevent triggering an input event for no reason\n if (!e.target.composing) { return }\n e.target.composing = false;\n trigger(e.target, 'input');\n}\n\nfunction trigger (el, type) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent(type, true, true);\n el.dispatchEvent(e);\n}\n\n/* */\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode (vnode) {\n return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n ? locateNode(vnode.componentInstance._vnode)\n : vnode\n}\n\nvar show = {\n bind: function bind (el, ref, vnode) {\n var value = ref.value;\n\n vnode = locateNode(vnode);\n var transition$$1 = vnode.data && vnode.data.transition;\n var originalDisplay = el.__vOriginalDisplay =\n el.style.display === 'none' ? '' : el.style.display;\n if (value && transition$$1) {\n vnode.data.show = true;\n enter(vnode, function () {\n el.style.display = originalDisplay;\n });\n } else {\n el.style.display = value ? originalDisplay : 'none';\n }\n },\n\n update: function update (el, ref, vnode) {\n var value = ref.value;\n var oldValue = ref.oldValue;\n\n /* istanbul ignore if */\n if (value === oldValue) { return }\n vnode = locateNode(vnode);\n var transition$$1 = vnode.data && vnode.data.transition;\n if (transition$$1) {\n vnode.data.show = true;\n if (value) {\n enter(vnode, function () {\n el.style.display = el.__vOriginalDisplay;\n });\n } else {\n leave(vnode, function () {\n el.style.display = 'none';\n });\n }\n } else {\n el.style.display = value ? el.__vOriginalDisplay : 'none';\n }\n },\n\n unbind: function unbind (\n el,\n binding,\n vnode,\n oldVnode,\n isDestroy\n ) {\n if (!isDestroy) {\n el.style.display = el.__vOriginalDisplay;\n }\n }\n};\n\nvar platformDirectives = {\n model: model$1,\n show: show\n};\n\n/* */\n\n// Provides transition support for a single element/component.\n// supports transition mode (out-in / in-out)\n\nvar transitionProps = {\n name: String,\n appear: Boolean,\n css: Boolean,\n mode: String,\n type: String,\n enterClass: String,\n leaveClass: String,\n enterToClass: String,\n leaveToClass: String,\n enterActiveClass: String,\n leaveActiveClass: String,\n appearClass: String,\n appearActiveClass: String,\n appearToClass: String,\n duration: [Number, String, Object]\n};\n\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild (vnode) {\n var compOptions = vnode && vnode.componentOptions;\n if (compOptions && compOptions.Ctor.options.abstract) {\n return getRealChild(getFirstComponentChild(compOptions.children))\n } else {\n return vnode\n }\n}\n\nfunction extractTransitionData (comp) {\n var data = {};\n var options = comp.$options;\n // props\n for (var key in options.propsData) {\n data[key] = comp[key];\n }\n // events.\n // extract listeners and pass them directly to the transition methods\n var listeners = options._parentListeners;\n for (var key$1 in listeners) {\n data[camelize(key$1)] = listeners[key$1];\n }\n return data\n}\n\nfunction placeholder (h, rawChild) {\n if (/\\d-keep-alive$/.test(rawChild.tag)) {\n return h('keep-alive', {\n props: rawChild.componentOptions.propsData\n })\n }\n}\n\nfunction hasParentTransition (vnode) {\n while ((vnode = vnode.parent)) {\n if (vnode.data.transition) {\n return true\n }\n }\n}\n\nfunction isSameChild (child, oldChild) {\n return oldChild.key === child.key && oldChild.tag === child.tag\n}\n\nvar Transition = {\n name: 'transition',\n props: transitionProps,\n abstract: true,\n\n render: function render (h) {\n var this$1 = this;\n\n var children = this.$options._renderChildren;\n if (!children) {\n return\n }\n\n // filter out text nodes (possible whitespaces)\n children = children.filter(function (c) { return c.tag || isAsyncPlaceholder(c); });\n /* istanbul ignore if */\n if (!children.length) {\n return\n }\n\n // warn multiple elements\n if (process.env.NODE_ENV !== 'production' && children.length > 1) {\n warn(\n '<transition> can only be used on a single element. Use ' +\n '<transition-group> for lists.',\n this.$parent\n );\n }\n\n var mode = this.mode;\n\n // warn invalid mode\n if (process.env.NODE_ENV !== 'production' &&\n mode && mode !== 'in-out' && mode !== 'out-in'\n ) {\n warn(\n 'invalid <transition> mode: ' + mode,\n this.$parent\n );\n }\n\n var rawChild = children[0];\n\n // if this is a component root node and the component's\n // parent container node also has transition, skip.\n if (hasParentTransition(this.$vnode)) {\n return rawChild\n }\n\n // apply transition data to child\n // use getRealChild() to ignore abstract components e.g. keep-alive\n var child = getRealChild(rawChild);\n /* istanbul ignore if */\n if (!child) {\n return rawChild\n }\n\n if (this._leaving) {\n return placeholder(h, rawChild)\n }\n\n // ensure a key that is unique to the vnode type and to this transition\n // component instance. This key will be used to remove pending leaving nodes\n // during entering.\n var id = \"__transition-\" + (this._uid) + \"-\";\n child.key = child.key == null\n ? child.isComment\n ? id + 'comment'\n : id + child.tag\n : isPrimitive(child.key)\n ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n : child.key;\n\n var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n var oldRawChild = this._vnode;\n var oldChild = getRealChild(oldRawChild);\n\n // mark v-show\n // so that the transition module can hand over the control to the directive\n if (child.data.directives && child.data.directives.some(function (d) { return d.name === 'show'; })) {\n child.data.show = true;\n }\n\n if (\n oldChild &&\n oldChild.data &&\n !isSameChild(child, oldChild) &&\n !isAsyncPlaceholder(oldChild)\n ) {\n // replace old child transition data with fresh one\n // important for dynamic transitions!\n var oldData = oldChild.data.transition = extend({}, data);\n // handle transition mode\n if (mode === 'out-in') {\n // return placeholder node and queue update when leave finishes\n this._leaving = true;\n mergeVNodeHook(oldData, 'afterLeave', function () {\n this$1._leaving = false;\n this$1.$forceUpdate();\n });\n return placeholder(h, rawChild)\n } else if (mode === 'in-out') {\n if (isAsyncPlaceholder(child)) {\n return oldRawChild\n }\n var delayedLeave;\n var performLeave = function () { delayedLeave(); };\n mergeVNodeHook(data, 'afterEnter', performLeave);\n mergeVNodeHook(data, 'enterCancelled', performLeave);\n mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n }\n }\n\n return rawChild\n }\n};\n\n/* */\n\n// Provides transition support for list items.\n// supports move transitions using the FLIP technique.\n\n// Because the vdom's children update algorithm is \"unstable\" - i.e.\n// it doesn't guarantee the relative positioning of removed elements,\n// we force transition-group to update its children into two passes:\n// in the first pass, we remove all nodes that need to be removed,\n// triggering their leaving transition; in the second pass, we insert/move\n// into the final desired state. This way in the second pass removed\n// nodes will remain where they should be.\n\nvar props = extend({\n tag: String,\n moveClass: String\n}, transitionProps);\n\ndelete props.mode;\n\nvar TransitionGroup = {\n props: props,\n\n render: function render (h) {\n var tag = this.tag || this.$vnode.data.tag || 'span';\n var map = Object.create(null);\n var prevChildren = this.prevChildren = this.children;\n var rawChildren = this.$slots.default || [];\n var children = this.children = [];\n var transitionData = extractTransitionData(this);\n\n for (var i = 0; i < rawChildren.length; i++) {\n var c = rawChildren[i];\n if (c.tag) {\n if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n children.push(c);\n map[c.key] = c\n ;(c.data || (c.data = {})).transition = transitionData;\n } else if (process.env.NODE_ENV !== 'production') {\n var opts = c.componentOptions;\n var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n warn((\"<transition-group> children must be keyed: <\" + name + \">\"));\n }\n }\n }\n\n if (prevChildren) {\n var kept = [];\n var removed = [];\n for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {\n var c$1 = prevChildren[i$1];\n c$1.data.transition = transitionData;\n c$1.data.pos = c$1.elm.getBoundingClientRect();\n if (map[c$1.key]) {\n kept.push(c$1);\n } else {\n removed.push(c$1);\n }\n }\n this.kept = h(tag, null, kept);\n this.removed = removed;\n }\n\n return h(tag, null, children)\n },\n\n beforeUpdate: function beforeUpdate () {\n // force removing pass\n this.__patch__(\n this._vnode,\n this.kept,\n false, // hydrating\n true // removeOnly (!important, avoids unnecessary moves)\n );\n this._vnode = this.kept;\n },\n\n updated: function updated () {\n var children = this.prevChildren;\n var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n return\n }\n\n // we divide the work into three loops to avoid mixing DOM reads and writes\n // in each iteration - which helps prevent layout thrashing.\n children.forEach(callPendingCbs);\n children.forEach(recordPosition);\n children.forEach(applyTranslation);\n\n // force reflow to put everything in position\n // assign to this to avoid being removed in tree-shaking\n // $flow-disable-line\n this._reflow = document.body.offsetHeight;\n\n children.forEach(function (c) {\n if (c.data.moved) {\n var el = c.elm;\n var s = el.style;\n addTransitionClass(el, moveClass);\n s.transform = s.WebkitTransform = s.transitionDuration = '';\n el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n if (!e || /transform$/.test(e.propertyName)) {\n el.removeEventListener(transitionEndEvent, cb);\n el._moveCb = null;\n removeTransitionClass(el, moveClass);\n }\n });\n }\n });\n },\n\n methods: {\n hasMove: function hasMove (el, moveClass) {\n /* istanbul ignore if */\n if (!hasTransition) {\n return false\n }\n /* istanbul ignore if */\n if (this._hasMove) {\n return this._hasMove\n }\n // Detect whether an element with the move class applied has\n // CSS transitions. Since the element may be inside an entering\n // transition at this very moment, we make a clone of it and remove\n // all other transition classes applied to ensure only the move class\n // is applied.\n var clone = el.cloneNode();\n if (el._transitionClasses) {\n el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n }\n addClass(clone, moveClass);\n clone.style.display = 'none';\n this.$el.appendChild(clone);\n var info = getTransitionInfo(clone);\n this.$el.removeChild(clone);\n return (this._hasMove = info.hasTransform)\n }\n }\n};\n\nfunction callPendingCbs (c) {\n /* istanbul ignore if */\n if (c.elm._moveCb) {\n c.elm._moveCb();\n }\n /* istanbul ignore if */\n if (c.elm._enterCb) {\n c.elm._enterCb();\n }\n}\n\nfunction recordPosition (c) {\n c.data.newPos = c.elm.getBoundingClientRect();\n}\n\nfunction applyTranslation (c) {\n var oldPos = c.data.pos;\n var newPos = c.data.newPos;\n var dx = oldPos.left - newPos.left;\n var dy = oldPos.top - newPos.top;\n if (dx || dy) {\n c.data.moved = true;\n var s = c.elm.style;\n s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n s.transitionDuration = '0s';\n }\n}\n\nvar platformComponents = {\n Transition: Transition,\n TransitionGroup: TransitionGroup\n};\n\n/* */\n\n// install platform specific utils\nVue$3.config.mustUseProp = mustUseProp;\nVue$3.config.isReservedTag = isReservedTag;\nVue$3.config.isReservedAttr = isReservedAttr;\nVue$3.config.getTagNamespace = getTagNamespace;\nVue$3.config.isUnknownElement = isUnknownElement;\n\n// install platform runtime directives & components\nextend(Vue$3.options.directives, platformDirectives);\nextend(Vue$3.options.components, platformComponents);\n\n// install platform patch function\nVue$3.prototype.__patch__ = inBrowser ? patch : noop;\n\n// public mount method\nVue$3.prototype.$mount = function (\n el,\n hydrating\n) {\n el = el && inBrowser ? query(el) : undefined;\n return mountComponent(this, el, hydrating)\n};\n\n// devtools global hook\n/* istanbul ignore next */\nVue$3.nextTick(function () {\n if (config.devtools) {\n if (devtools) {\n devtools.emit('init', Vue$3);\n } else if (process.env.NODE_ENV !== 'production' && isChrome) {\n console[console.info ? 'info' : 'log'](\n 'Download the Vue Devtools extension for a better development experience:\\n' +\n 'https://github.com/vuejs/vue-devtools'\n );\n }\n }\n if (process.env.NODE_ENV !== 'production' &&\n config.productionTip !== false &&\n inBrowser && typeof console !== 'undefined'\n ) {\n console[console.info ? 'info' : 'log'](\n \"You are running Vue in development mode.\\n\" +\n \"Make sure to turn on production mode when deploying for production.\\n\" +\n \"See more tips at https://vuejs.org/guide/deployment.html\"\n );\n }\n}, 0);\n\n/* */\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Vue$3);\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(6), __webpack_require__(15), __webpack_require__(27).setImmediate))\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLnJ1bnRpbWUuZXNtLmpzP2ZmOWIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsK0JBQStCO0FBQ3JELHNCQUFzQixpQkFBaUI7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsaUNBQWlDLEVBQUU7QUFDckYsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsY0FBYzs7QUFFM0M7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLFVBQVU7O0FBRXZDO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakMsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFCQUFxQjtBQUN4QyxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHO0FBQ1I7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7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QUFDQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsT0FBTztBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsdUJBQXVCO0FBQ3pELGlDQUFpQyxzQkFBc0I7QUFDdkQ7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQSxpQkFBaUIsdUJBQXVCO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsbUJBQW1CO0FBQ3RDLCtCQUErQjtBQUMvQjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsWUFBWTtBQUM5QixXQUFXO0FBQ1g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsT0FBTztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxTQUFTO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixrQkFBa0I7QUFDekM7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQixXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsbUJBQW1CO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLHVCQUF1QjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsbUJBQW1CO0FBQ3hDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7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QXFDLE9BQU87QUFDNUM7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsT0FBTztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQix5QkFBeUI7QUFDMUMsR0FBRztBQUNIO0FBQ0E7QUFDQSxpQkFBaUIsK0JBQStCO0FBQ2hEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsMkJBQTJCO0FBQzlDLHFCQUFxQiwrQkFBK0I7QUFDcEQ7QUFDQTtBQUNBLEdBQUc7QUFDSCx5QkFBeUI7QUFDekI7QUFDQSxzQkFBc0IsaUNBQWlDO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG9CQUFvQjtBQUN6QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLE9BQU87QUFDdEM7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxnQ0FBZ0MsT0FBTztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xELDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHVDQUF1Qzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxxQ0FBcUMsZ0VBQWdFO0FBQ3JHO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCw0QkFBNEIsK0JBQStCO0FBQzNELDRCQUE0QiwrQkFBK0I7QUFDM0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLG9CQUFvQjtBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLGVBQWU7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFO0FBQ3RFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0Esd0NBQXdDLDJCQUEyQixFQUFFO0FBQ3JFLEtBQUs7QUFDTDtBQUNBLHdDQUF3Qyw0QkFBNEIsRUFBRTtBQUN0RTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixlQUFlO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLE9BQU87QUFDMUM7QUFDQSxnQkFBZ0IsWUFBWTtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxnQ0FBZ0M7O0FBRWhDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGFBQWE7QUFDakM7QUFDQSxxQkFBcUIsY0FBYztBQUNuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsYUFBYSxrQkFBa0I7QUFDL0I7QUFDQSxlQUFlLG9CQUFvQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkRBQTJEO0FBQzNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFD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QUFvQjtBQUMvRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wscUJBQXFCLGtCQUFrQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELGdDQUFnQztBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsdUJBQXVCO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRCQUE0Qiw2QkFBNkI7QUFDekQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsd0JBQXdCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLHlCQUF5QjtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLHlCQUF5QjtBQUMxRDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQiwyQkFBMkI7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7QUFDN0QsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJEQUEyRDtBQUMzRCxxQkFBcUIsOEJBQThCO0FBQ25EO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRFQUE0RTtBQUM1RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHNEQUFzRDtBQUN0RTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsMkJBQTJCO0FBQ3RELGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLDZDQUE2QyxFQUFFO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSx1Q0FBdUMsU0FBUztBQUNoRDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsd0JBQXdCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2Qyw0QkFBNEIsRUFBRTtBQUMzRSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QywrQkFBK0IsRUFBRTtBQUM5RSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGFBQWE7O0FBRTNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxxQ0FBcUM7O0FBRXRFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyx1Q0FBdUMsRUFBRTtBQUNwRjtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsMkNBQTJDLEVBQUU7QUFDMUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUNBQXFDLDhCQUE4QixFQUFFO0FBQ3JFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDLHVDQUF1QyxFQUFFO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOENBQThDO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBFQUEwRSwwQkFBMEIsRUFBRTtBQUN0RztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsZ0JBQWdCO0FBQ3hEO0FBQ0E7QUFDQSxnRUFBZ0Usc0JBQXNCLEVBQUU7QUFDeEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QiwyQkFBMkI7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCx5QkFBeUIsRUFBRTtBQUNqRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUEiLCJmaWxlIjoiMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogVnVlLmpzIHYyLjUuMlxuICogKGMpIDIwMTQtMjAxNyBFdmFuIFlvdVxuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG4vKiAgKi9cblxuLy8gdGhlc2UgaGVscGVycyBwcm9kdWNlcyBiZXR0ZXIgdm0gY29kZSBpbiBKUyBlbmdpbmVzIGR1ZSB0byB0aGVpclxuLy8gZXhwbGljaXRuZXNzIGFuZCBmdW5jdGlvbiBpbmxpbmluZ1xuZnVuY3Rpb24gaXNVbmRlZiAodikge1xuICByZXR1cm4gdiA9PT0gdW5kZWZpbmVkIHx8IHYgPT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNEZWYgKHYpIHtcbiAgcmV0dXJuIHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsXG59XG5cbmZ1bmN0aW9uIGlzVHJ1ZSAodikge1xuICByZXR1cm4gdiA9PT0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBpc0ZhbHNlICh2KSB7XG4gIHJldHVybiB2ID09PSBmYWxzZVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIHByaW1pdGl2ZVxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSAodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nXG4gIClcbn1cblxuLyoqXG4gKiBRdWljayBvYmplY3QgY2hlY2sgLSB0aGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIHRlbGxcbiAqIE9iamVjdHMgZnJvbSBwcmltaXRpdmUgdmFsdWVzIHdoZW4gd2Uga25vdyB0aGUgdmFsdWVcbiAqIGlzIGEgSlNPTi1jb21wbGlhbnQgdHlwZS5cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QgKG9iaikge1xuICByZXR1cm4gb2JqICE9PSBudWxsICYmIHR5cGVvZiBvYmogPT09ICdvYmplY3QnXG59XG5cbi8qKlxuICogR2V0IHRoZSByYXcgdHlwZSBzdHJpbmcgb2YgYSB2YWx1ZSBlLmcuIFtvYmplY3QgT2JqZWN0XVxuICovXG52YXIgX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZnVuY3Rpb24gdG9SYXdUeXBlICh2YWx1ZSkge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKVxufVxuXG4vKipcbiAqIFN0cmljdCBvYmplY3QgdHlwZSBjaGVjay4gT25seSByZXR1cm5zIHRydWVcbiAqIGZvciBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QgKG9iaikge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbn1cblxuZnVuY3Rpb24gaXNSZWdFeHAgKHYpIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHYpID09PSAnW29iamVjdCBSZWdFeHBdJ1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHZhbCBpcyBhIHZhbGlkIGFycmF5IGluZGV4LlxuICovXG5mdW5jdGlvbiBpc1ZhbGlkQXJyYXlJbmRleCAodmFsKSB7XG4gIHZhciBuID0gcGFyc2VGbG9hdChTdHJpbmcodmFsKSk7XG4gIHJldHVybiBuID49IDAgJiYgTWF0aC5mbG9vcihuKSA9PT0gbiAmJiBpc0Zpbml0ZSh2YWwpXG59XG5cbi8qKlxuICogQ29udmVydCBhIHZhbHVlIHRvIGEgc3RyaW5nIHRoYXQgaXMgYWN0dWFsbHkgcmVuZGVyZWQuXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nICh2YWwpIHtcbiAgcmV0dXJuIHZhbCA9PSBudWxsXG4gICAgPyAnJ1xuICAgIDogdHlwZW9mIHZhbCA9PT0gJ29iamVjdCdcbiAgICAgID8gSlNPTi5zdHJpbmdpZnkodmFsLCBudWxsLCAyKVxuICAgICAgOiBTdHJpbmcodmFsKVxufVxuXG4vKipcbiAqIENvbnZlcnQgYSBpbnB1dCB2YWx1ZSB0byBhIG51bWJlciBmb3IgcGVyc2lzdGVuY2UuXG4gKiBJZiB0aGUgY29udmVyc2lvbiBmYWlscywgcmV0dXJuIG9yaWdpbmFsIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIgKHZhbCkge1xuICB2YXIgbiA9IHBhcnNlRmxvYXQodmFsKTtcbiAgcmV0dXJuIGlzTmFOKG4pID8gdmFsIDogblxufVxuXG4vKipcbiAqIE1ha2UgYSBtYXAgYW5kIHJldHVybiBhIGZ1bmN0aW9uIGZvciBjaGVja2luZyBpZiBhIGtleVxuICogaXMgaW4gdGhhdCBtYXAuXG4gKi9cbmZ1bmN0aW9uIG1ha2VNYXAgKFxuICBzdHIsXG4gIGV4cGVjdHNMb3dlckNhc2Vcbikge1xuICB2YXIgbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIGxpc3QgPSBzdHIuc3BsaXQoJywnKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgbWFwW2xpc3RbaV1dID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZXhwZWN0c0xvd2VyQ2FzZVxuICAgID8gZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbC50b0xvd2VyQ2FzZSgpXTsgfVxuICAgIDogZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gbWFwW3ZhbF07IH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHRhZyBpcyBhIGJ1aWx0LWluIHRhZy5cbiAqL1xudmFyIGlzQnVpbHRJblRhZyA9IG1ha2VNYXAoJ3Nsb3QsY29tcG9uZW50JywgdHJ1ZSk7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBhdHRyaWJ1dGUgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4gKi9cbnZhciBpc1Jlc2VydmVkQXR0cmlidXRlID0gbWFrZU1hcCgna2V5LHJlZixzbG90LHNsb3Qtc2NvcGUsaXMnKTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaXRlbSBmcm9tIGFuIGFycmF5XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZSAoYXJyLCBpdGVtKSB7XG4gIGlmIChhcnIubGVuZ3RoKSB7XG4gICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBhcnIuc3BsaWNlKGluZGV4LCAxKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgdGhlIHByb3BlcnR5LlxuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gaGFzT3duIChvYmosIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSlcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBjYWNoZWQgdmVyc2lvbiBvZiBhIHB1cmUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNhY2hlZCAoZm4pIHtcbiAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIChmdW5jdGlvbiBjYWNoZWRGbiAoc3RyKSB7XG4gICAgdmFyIGhpdCA9IGNhY2hlW3N0cl07XG4gICAgcmV0dXJuIGhpdCB8fCAoY2FjaGVbc3RyXSA9IGZuKHN0cikpXG4gIH0pXG59XG5cbi8qKlxuICogQ2FtZWxpemUgYSBoeXBoZW4tZGVsaW1pdGVkIHN0cmluZy5cbiAqL1xudmFyIGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XG52YXIgY2FtZWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoY2FtZWxpemVSRSwgZnVuY3Rpb24gKF8sIGMpIHsgcmV0dXJuIGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJzsgfSlcbn0pO1xuXG4vKipcbiAqIENhcGl0YWxpemUgYSBzdHJpbmcuXG4gKi9cbnZhciBjYXBpdGFsaXplID0gY2FjaGVkKGZ1bmN0aW9uIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKVxufSk7XG5cbi8qKlxuICogSHlwaGVuYXRlIGEgY2FtZWxDYXNlIHN0cmluZy5cbiAqL1xudmFyIGh5cGhlbmF0ZVJFID0gL1xcQihbQS1aXSkvZztcbnZhciBoeXBoZW5hdGUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoaHlwaGVuYXRlUkUsICctJDEnKS50b0xvd2VyQ2FzZSgpXG59KTtcblxuLyoqXG4gKiBTaW1wbGUgYmluZCwgZmFzdGVyIHRoYW4gbmF0aXZlXG4gKi9cbmZ1bmN0aW9uIGJpbmQgKGZuLCBjdHgpIHtcbiAgZnVuY3Rpb24gYm91bmRGbiAoYSkge1xuICAgIHZhciBsID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gbFxuICAgICAgPyBsID4gMVxuICAgICAgICA/IGZuLmFwcGx5KGN0eCwgYXJndW1lbnRzKVxuICAgICAgICA6IGZuLmNhbGwoY3R4LCBhKVxuICAgICAgOiBmbi5jYWxsKGN0eClcbiAgfVxuICAvLyByZWNvcmQgb3JpZ2luYWwgZm4gbGVuZ3RoXG4gIGJvdW5kRm4uX2xlbmd0aCA9IGZuLmxlbmd0aDtcbiAgcmV0dXJuIGJvdW5kRm5cbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFycmF5LWxpa2Ugb2JqZWN0IHRvIGEgcmVhbCBBcnJheS5cbiAqL1xuZnVuY3Rpb24gdG9BcnJheSAobGlzdCwgc3RhcnQpIHtcbiAgc3RhcnQgPSBzdGFydCB8fCAwO1xuICB2YXIgaSA9IGxpc3QubGVuZ3RoIC0gc3RhcnQ7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0pIHtcbiAgICByZXRbaV0gPSBsaXN0W2kgKyBzdGFydF07XG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG4vKipcbiAqIE1peCBwcm9wZXJ0aWVzIGludG8gdGFyZ2V0IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0ZW5kICh0bywgX2Zyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIF9mcm9tKSB7XG4gICAgdG9ba2V5XSA9IF9mcm9tW2tleV07XG4gIH1cbiAgcmV0dXJuIHRvXG59XG5cbi8qKlxuICogTWVyZ2UgYW4gQXJyYXkgb2YgT2JqZWN0cyBpbnRvIGEgc2luZ2xlIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gdG9PYmplY3QgKGFycikge1xuICB2YXIgcmVzID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycltpXSkge1xuICAgICAgZXh0ZW5kKHJlcywgYXJyW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKipcbiAqIFBlcmZvcm0gbm8gb3BlcmF0aW9uLlxuICogU3R1YmJpbmcgYXJncyB0byBtYWtlIEZsb3cgaGFwcHkgd2l0aG91dCBsZWF2aW5nIHVzZWxlc3MgdHJhbnNwaWxlZCBjb2RlXG4gKiB3aXRoIC4uLnJlc3QgKGh0dHBzOi8vZmxvdy5vcmcvYmxvZy8yMDE3LzA1LzA3L1N0cmljdC1GdW5jdGlvbi1DYWxsLUFyaXR5LylcbiAqL1xuZnVuY3Rpb24gbm9vcCAoYSwgYiwgYykge31cblxuLyoqXG4gKiBBbHdheXMgcmV0dXJuIGZhbHNlLlxuICovXG52YXIgbm8gPSBmdW5jdGlvbiAoYSwgYiwgYykgeyByZXR1cm4gZmFsc2U7IH07XG5cbi8qKlxuICogUmV0dXJuIHNhbWUgdmFsdWVcbiAqL1xudmFyIGlkZW50aXR5ID0gZnVuY3Rpb24gKF8pIHsgcmV0dXJuIF87IH07XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzdGF0aWMga2V5cyBzdHJpbmcgZnJvbSBjb21waWxlciBtb2R1bGVzLlxuICovXG5cblxuLyoqXG4gKiBDaGVjayBpZiB0d28gdmFsdWVzIGFyZSBsb29zZWx5IGVxdWFsIC0gdGhhdCBpcyxcbiAqIGlmIHRoZXkgYXJlIHBsYWluIG9iamVjdHMsIGRvIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaGFwZT9cbiAqL1xuZnVuY3Rpb24gbG9vc2VFcXVhbCAoYSwgYikge1xuICBpZiAoYSA9PT0gYikgeyByZXR1cm4gdHJ1ZSB9XG4gIHZhciBpc09iamVjdEEgPSBpc09iamVjdChhKTtcbiAgdmFyIGlzT2JqZWN0QiA9IGlzT2JqZWN0KGIpO1xuICBpZiAoaXNPYmplY3RBICYmIGlzT2JqZWN0Qikge1xuICAgIHRyeSB7XG4gICAgICB2YXIgaXNBcnJheUEgPSBBcnJheS5pc0FycmF5KGEpO1xuICAgICAgdmFyIGlzQXJyYXlCID0gQXJyYXkuaXNBcnJheShiKTtcbiAgICAgIGlmIChpc0FycmF5QSAmJiBpc0FycmF5Qikge1xuICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoZnVuY3Rpb24gKGUsIGkpIHtcbiAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChlLCBiW2ldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmICghaXNBcnJheUEgJiYgIWlzQXJyYXlCKSB7XG4gICAgICAgIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKGEpO1xuICAgICAgICB2YXIga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcbiAgICAgICAgcmV0dXJuIGtleXNBLmxlbmd0aCA9PT0ga2V5c0IubGVuZ3RoICYmIGtleXNBLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChhW2tleV0sIGJba2V5XSlcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0gZWxzZSBpZiAoIWlzT2JqZWN0QSAmJiAhaXNPYmplY3RCKSB7XG4gICAgcmV0dXJuIFN0cmluZyhhKSA9PT0gU3RyaW5nKGIpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24gbG9vc2VJbmRleE9mIChhcnIsIHZhbCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChsb29zZUVxdWFsKGFycltpXSwgdmFsKSkgeyByZXR1cm4gaSB9XG4gIH1cbiAgcmV0dXJuIC0xXG59XG5cbi8qKlxuICogRW5zdXJlIGEgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZS5cbiAqL1xuZnVuY3Rpb24gb25jZSAoZm4pIHtcbiAgdmFyIGNhbGxlZCA9IGZhbHNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFNTUl9BVFRSID0gJ2RhdGEtc2VydmVyLXJlbmRlcmVkJztcblxudmFyIEFTU0VUX1RZUEVTID0gW1xuICAnY29tcG9uZW50JyxcbiAgJ2RpcmVjdGl2ZScsXG4gICdmaWx0ZXInXG5dO1xuXG52YXIgTElGRUNZQ0xFX0hPT0tTID0gW1xuICAnYmVmb3JlQ3JlYXRlJyxcbiAgJ2NyZWF0ZWQnLFxuICAnYmVmb3JlTW91bnQnLFxuICAnbW91bnRlZCcsXG4gICdiZWZvcmVVcGRhdGUnLFxuICAndXBkYXRlZCcsXG4gICdiZWZvcmVEZXN0cm95JyxcbiAgJ2Rlc3Ryb3llZCcsXG4gICdhY3RpdmF0ZWQnLFxuICAnZGVhY3RpdmF0ZWQnLFxuICAnZXJyb3JDYXB0dXJlZCdcbl07XG5cbi8qICAqL1xuXG52YXIgY29uZmlnID0gKHtcbiAgLyoqXG4gICAqIE9wdGlvbiBtZXJnZSBzdHJhdGVnaWVzICh1c2VkIGluIGNvcmUvdXRpbC9vcHRpb25zKVxuICAgKi9cbiAgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN1cHByZXNzIHdhcm5pbmdzLlxuICAgKi9cbiAgc2lsZW50OiBmYWxzZSxcblxuICAvKipcbiAgICogU2hvdyBwcm9kdWN0aW9uIG1vZGUgdGlwIG1lc3NhZ2Ugb24gYm9vdD9cbiAgICovXG4gIHByb2R1Y3Rpb25UaXA6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGRldnRvb2xzXG4gICAqL1xuICBkZXZ0b29sczogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcblxuICAvKipcbiAgICogV2hldGhlciB0byByZWNvcmQgcGVyZlxuICAgKi9cbiAgcGVyZm9ybWFuY2U6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBFcnJvciBoYW5kbGVyIGZvciB3YXRjaGVyIGVycm9yc1xuICAgKi9cbiAgZXJyb3JIYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBXYXJuIGhhbmRsZXIgZm9yIHdhdGNoZXIgd2FybnNcbiAgICovXG4gIHdhcm5IYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBJZ25vcmUgY2VydGFpbiBjdXN0b20gZWxlbWVudHNcbiAgICovXG4gIGlnbm9yZWRFbGVtZW50czogW10sXG5cbiAgLyoqXG4gICAqIEN1c3RvbSB1c2VyIGtleSBhbGlhc2VzIGZvciB2LW9uXG4gICAqL1xuICBrZXlDb2RlczogT2JqZWN0LmNyZWF0ZShudWxsKSxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YWcgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgcmVnaXN0ZXJlZCBhcyBhXG4gICAqIGNvbXBvbmVudC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIGlzUmVzZXJ2ZWRUYWc6IG5vLFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQgc28gdGhhdCBpdCBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbXBvbmVudFxuICAgKiBwcm9wLiBUaGlzIGlzIHBsYXRmb3JtLWRlcGVuZGVudCBhbmQgbWF5IGJlIG92ZXJ3cml0dGVuLlxuICAgKi9cbiAgaXNSZXNlcnZlZEF0dHI6IG5vLFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIHRhZyBpcyBhbiB1bmtub3duIGVsZW1lbnQuXG4gICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICovXG4gIGlzVW5rbm93bkVsZW1lbnQ6IG5vLFxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG5hbWVzcGFjZSBvZiBhbiBlbGVtZW50XG4gICAqL1xuICBnZXRUYWdOYW1lc3BhY2U6IG5vb3AsXG5cbiAgLyoqXG4gICAqIFBhcnNlIHRoZSByZWFsIHRhZyBuYW1lIGZvciB0aGUgc3BlY2lmaWMgcGxhdGZvcm0uXG4gICAqL1xuICBwYXJzZVBsYXRmb3JtVGFnTmFtZTogaWRlbnRpdHksXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBtdXN0IGJlIGJvdW5kIHVzaW5nIHByb3BlcnR5LCBlLmcuIHZhbHVlXG4gICAqIFBsYXRmb3JtLWRlcGVuZGVudC5cbiAgICovXG4gIG11c3RVc2VQcm9wOiBubyxcblxuICAvKipcbiAgICogRXhwb3NlZCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgICovXG4gIF9saWZlY3ljbGVIb29rczogTElGRUNZQ0xFX0hPT0tTXG59KTtcblxuLyogICovXG5cbnZhciBlbXB0eU9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgc3RyaW5nIHN0YXJ0cyB3aXRoICQgb3IgX1xuICovXG5mdW5jdGlvbiBpc1Jlc2VydmVkIChzdHIpIHtcbiAgdmFyIGMgPSAoc3RyICsgJycpLmNoYXJDb2RlQXQoMCk7XG4gIHJldHVybiBjID09PSAweDI0IHx8IGMgPT09IDB4NUZcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZGVmIChvYmosIGtleSwgdmFsLCBlbnVtZXJhYmxlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgIHZhbHVlOiB2YWwsXG4gICAgZW51bWVyYWJsZTogISFlbnVtZXJhYmxlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBQYXJzZSBzaW1wbGUgcGF0aC5cbiAqL1xudmFyIGJhaWxSRSA9IC9bXlxcdy4kXS87XG5mdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgpIHtcbiAgaWYgKGJhaWxSRS50ZXN0KHBhdGgpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghb2JqKSB7IHJldHVybiB9XG4gICAgICBvYmogPSBvYmpbc2VnbWVudHNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gb2JqXG4gIH1cbn1cblxuLyogICovXG5cbi8vIGNhbiB3ZSB1c2UgX19wcm90b19fP1xudmFyIGhhc1Byb3RvID0gJ19fcHJvdG9fXycgaW4ge307XG5cbi8vIEJyb3dzZXIgZW52aXJvbm1lbnQgc25pZmZpbmdcbnZhciBpbkJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbnZhciBVQSA9IGluQnJvd3NlciAmJiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xudmFyIGlzSUUgPSBVQSAmJiAvbXNpZXx0cmlkZW50Ly50ZXN0KFVBKTtcbnZhciBpc0lFOSA9IFVBICYmIFVBLmluZGV4T2YoJ21zaWUgOS4wJykgPiAwO1xudmFyIGlzRWRnZSA9IFVBICYmIFVBLmluZGV4T2YoJ2VkZ2UvJykgPiAwO1xudmFyIGlzQW5kcm9pZCA9IFVBICYmIFVBLmluZGV4T2YoJ2FuZHJvaWQnKSA+IDA7XG52YXIgaXNJT1MgPSBVQSAmJiAvaXBob25lfGlwYWR8aXBvZHxpb3MvLnRlc3QoVUEpO1xudmFyIGlzQ2hyb21lID0gVUEgJiYgL2Nocm9tZVxcL1xcZCsvLnRlc3QoVUEpICYmICFpc0VkZ2U7XG5cbi8vIEZpcmVmb3ggaGFzIGEgXCJ3YXRjaFwiIGZ1bmN0aW9uIG9uIE9iamVjdC5wcm90b3R5cGUuLi5cbnZhciBuYXRpdmVXYXRjaCA9ICh7fSkud2F0Y2g7XG5cbnZhciBzdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcbmlmIChpbkJyb3dzZXIpIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0cyA9IHt9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRzLCAncGFzc2l2ZScsICh7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHN1cHBvcnRzUGFzc2l2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSkpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMjg1XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QtcGFzc2l2ZScsIG51bGwsIG9wdHMpO1xuICB9IGNhdGNoIChlKSB7fVxufVxuXG4vLyB0aGlzIG5lZWRzIHRvIGJlIGxhenktZXZhbGVkIGJlY2F1c2UgdnVlIG1heSBiZSByZXF1aXJlZCBiZWZvcmVcbi8vIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgY2FuIHNldCBWVUVfRU5WXG52YXIgX2lzU2VydmVyO1xudmFyIGlzU2VydmVyUmVuZGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICBpZiAoX2lzU2VydmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoIWluQnJvd3NlciAmJiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gZGV0ZWN0IHByZXNlbmNlIG9mIHZ1ZS1zZXJ2ZXItcmVuZGVyZXIgYW5kIGF2b2lkXG4gICAgICAvLyBXZWJwYWNrIHNoaW1taW5nIHRoZSBwcm9jZXNzXG4gICAgICBfaXNTZXJ2ZXIgPSBnbG9iYWxbJ3Byb2Nlc3MnXS5lbnYuVlVFX0VOViA9PT0gJ3NlcnZlcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9pc1NlcnZlciA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gX2lzU2VydmVyXG59O1xuXG4vLyBkZXRlY3QgZGV2dG9vbHNcbnZhciBkZXZ0b29scyA9IGluQnJvd3NlciAmJiB3aW5kb3cuX19WVUVfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGlzTmF0aXZlIChDdG9yKSB7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gJ2Z1bmN0aW9uJyAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoQ3Rvci50b1N0cmluZygpKVxufVxuXG52YXIgaGFzU3ltYm9sID1cbiAgdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU3ltYm9sKSAmJlxuICB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUmVmbGVjdC5vd25LZXlzKTtcblxudmFyIF9TZXQ7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi8gLy8gJGZsb3ctZGlzYWJsZS1saW5lXG5pZiAodHlwZW9mIFNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoU2V0KSkge1xuICAvLyB1c2UgbmF0aXZlIFNldCB3aGVuIGF2YWlsYWJsZS5cbiAgX1NldCA9IFNldDtcbn0gZWxzZSB7XG4gIC8vIGEgbm9uLXN0YW5kYXJkIFNldCBwb2x5ZmlsbCB0aGF0IG9ubHkgd29ya3Mgd2l0aCBwcmltaXRpdmUga2V5cy5cbiAgX1NldCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2V0ICgpIHtcbiAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG4gICAgU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBoYXMgKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0W2tleV0gPT09IHRydWVcbiAgICB9O1xuICAgIFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gYWRkIChrZXkpIHtcbiAgICAgIHRoaXMuc2V0W2tleV0gPSB0cnVlO1xuICAgIH07XG4gICAgU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICAgIHRoaXMuc2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFNldDtcbiAgfSgpKTtcbn1cblxuLyogICovXG5cbnZhciB3YXJuID0gbm9vcDtcbnZhciB0aXAgPSBub29wO1xudmFyIGdlbmVyYXRlQ29tcG9uZW50VHJhY2UgPSAobm9vcCk7IC8vIHdvcmsgYXJvdW5kIGZsb3cgY2hlY2tcbnZhciBmb3JtYXRDb21wb25lbnROYW1lID0gKG5vb3ApO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgaGFzQ29uc29sZSA9IHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJztcbiAgdmFyIGNsYXNzaWZ5UkUgPSAvKD86XnxbLV9dKShcXHcpL2c7XG4gIHZhciBjbGFzc2lmeSA9IGZ1bmN0aW9uIChzdHIpIHsgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlKGNsYXNzaWZ5UkUsIGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnRvVXBwZXJDYXNlKCk7IH0pXG4gICAgLnJlcGxhY2UoL1stX10vZywgJycpOyB9O1xuXG4gIHdhcm4gPSBmdW5jdGlvbiAobXNnLCB2bSkge1xuICAgIHZhciB0cmFjZSA9IHZtID8gZ2VuZXJhdGVDb21wb25lbnRUcmFjZSh2bSkgOiAnJztcblxuICAgIGlmIChjb25maWcud2FybkhhbmRsZXIpIHtcbiAgICAgIGNvbmZpZy53YXJuSGFuZGxlci5jYWxsKG51bGwsIG1zZywgdm0sIHRyYWNlKTtcbiAgICB9IGVsc2UgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbVnVlIHdhcm5dOiBcIiArIG1zZyArIHRyYWNlKSk7XG4gICAgfVxuICB9O1xuXG4gIHRpcCA9IGZ1bmN0aW9uIChtc2csIHZtKSB7XG4gICAgaWYgKGhhc0NvbnNvbGUgJiYgKCFjb25maWcuc2lsZW50KSkge1xuICAgICAgY29uc29sZS53YXJuKFwiW1Z1ZSB0aXBdOiBcIiArIG1zZyArIChcbiAgICAgICAgdm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnXG4gICAgICApKTtcbiAgICB9XG4gIH07XG5cbiAgZm9ybWF0Q29tcG9uZW50TmFtZSA9IGZ1bmN0aW9uICh2bSwgaW5jbHVkZUZpbGUpIHtcbiAgICBpZiAodm0uJHJvb3QgPT09IHZtKSB7XG4gICAgICByZXR1cm4gJzxSb290PidcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygdm0gPT09ICdmdW5jdGlvbicgJiYgdm0uY2lkICE9IG51bGxcbiAgICAgID8gdm0ub3B0aW9uc1xuICAgICAgOiB2bS5faXNWdWVcbiAgICAgICAgPyB2bS4kb3B0aW9ucyB8fCB2bS5jb25zdHJ1Y3Rvci5vcHRpb25zXG4gICAgICAgIDogdm0gfHwge307XG4gICAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgfHwgb3B0aW9ucy5fY29tcG9uZW50VGFnO1xuICAgIHZhciBmaWxlID0gb3B0aW9ucy5fX2ZpbGU7XG4gICAgaWYgKCFuYW1lICYmIGZpbGUpIHtcbiAgICAgIHZhciBtYXRjaCA9IGZpbGUubWF0Y2goLyhbXi9cXFxcXSspXFwudnVlJC8pO1xuICAgICAgbmFtZSA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAobmFtZSA/IChcIjxcIiArIChjbGFzc2lmeShuYW1lKSkgKyBcIj5cIikgOiBcIjxBbm9ueW1vdXM+XCIpICtcbiAgICAgIChmaWxlICYmIGluY2x1ZGVGaWxlICE9PSBmYWxzZSA/IChcIiBhdCBcIiArIGZpbGUpIDogJycpXG4gICAgKVxuICB9O1xuXG4gIHZhciByZXBlYXQgPSBmdW5jdGlvbiAoc3RyLCBuKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIHdoaWxlIChuKSB7XG4gICAgICBpZiAobiAlIDIgPT09IDEpIHsgcmVzICs9IHN0cjsgfVxuICAgICAgaWYgKG4gPiAxKSB7IHN0ciArPSBzdHI7IH1cbiAgICAgIG4gPj49IDE7XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfTtcblxuICBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gZnVuY3Rpb24gKHZtKSB7XG4gICAgaWYgKHZtLl9pc1Z1ZSAmJiB2bS4kcGFyZW50KSB7XG4gICAgICB2YXIgdHJlZSA9IFtdO1xuICAgICAgdmFyIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICB3aGlsZSAodm0pIHtcbiAgICAgICAgaWYgKHRyZWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciBsYXN0ID0gdHJlZVt0cmVlLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0LmNvbnN0cnVjdG9yID09PSB2bS5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlKys7XG4gICAgICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlID4gMCkge1xuICAgICAgICAgICAgdHJlZVt0cmVlLmxlbmd0aCAtIDFdID0gW2xhc3QsIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZV07XG4gICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cmVlLnB1c2godm0pO1xuICAgICAgICB2bSA9IHZtLiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcblxcbmZvdW5kIGluXFxuXFxuJyArIHRyZWVcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodm0sIGkpIHsgcmV0dXJuIChcIlwiICsgKGkgPT09IDAgPyAnLS0tPiAnIDogcmVwZWF0KCcgJywgNSArIGkgKiAyKSkgKyAoQXJyYXkuaXNBcnJheSh2bSlcbiAgICAgICAgICAgID8gKChmb3JtYXRDb21wb25lbnROYW1lKHZtWzBdKSkgKyBcIi4uLiAoXCIgKyAodm1bMV0pICsgXCIgcmVjdXJzaXZlIGNhbGxzKVwiKVxuICAgICAgICAgICAgOiBmb3JtYXRDb21wb25lbnROYW1lKHZtKSkpOyB9KVxuICAgICAgICAuam9pbignXFxuJylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIChcIlxcblxcbihmb3VuZCBpbiBcIiArIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIilcIilcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG5cbnZhciB1aWQkMSA9IDA7XG5cbi8qKlxuICogQSBkZXAgaXMgYW4gb2JzZXJ2YWJsZSB0aGF0IGNhbiBoYXZlIG11bHRpcGxlXG4gKiBkaXJlY3RpdmVzIHN1YnNjcmliaW5nIHRvIGl0LlxuICovXG52YXIgRGVwID0gZnVuY3Rpb24gRGVwICgpIHtcbiAgdGhpcy5pZCA9IHVpZCQxKys7XG4gIHRoaXMuc3VicyA9IFtdO1xufTtcblxuRGVwLnByb3RvdHlwZS5hZGRTdWIgPSBmdW5jdGlvbiBhZGRTdWIgKHN1Yikge1xuICB0aGlzLnN1YnMucHVzaChzdWIpO1xufTtcblxuRGVwLnByb3RvdHlwZS5yZW1vdmVTdWIgPSBmdW5jdGlvbiByZW1vdmVTdWIgKHN1Yikge1xuICByZW1vdmUodGhpcy5zdWJzLCBzdWIpO1xufTtcblxuRGVwLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICBpZiAoRGVwLnRhcmdldCkge1xuICAgIERlcC50YXJnZXQuYWRkRGVwKHRoaXMpO1xuICB9XG59O1xuXG5EZXAucHJvdG90eXBlLm5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSAoKSB7XG4gIC8vIHN0YWJpbGl6ZSB0aGUgc3Vic2NyaWJlciBsaXN0IGZpcnN0XG4gIHZhciBzdWJzID0gdGhpcy5zdWJzLnNsaWNlKCk7XG4gIGZvciAodmFyIGkgPSAwLCBsID0gc3Vicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBzdWJzW2ldLnVwZGF0ZSgpO1xuICB9XG59O1xuXG4vLyB0aGUgY3VycmVudCB0YXJnZXQgd2F0Y2hlciBiZWluZyBldmFsdWF0ZWQuXG4vLyB0aGlzIGlzIGdsb2JhbGx5IHVuaXF1ZSBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG9ubHkgb25lXG4vLyB3YXRjaGVyIGJlaW5nIGV2YWx1YXRlZCBhdCBhbnkgdGltZS5cbkRlcC50YXJnZXQgPSBudWxsO1xudmFyIHRhcmdldFN0YWNrID0gW107XG5cbmZ1bmN0aW9uIHB1c2hUYXJnZXQgKF90YXJnZXQpIHtcbiAgaWYgKERlcC50YXJnZXQpIHsgdGFyZ2V0U3RhY2sucHVzaChEZXAudGFyZ2V0KTsgfVxuICBEZXAudGFyZ2V0ID0gX3RhcmdldDtcbn1cblxuZnVuY3Rpb24gcG9wVGFyZ2V0ICgpIHtcbiAgRGVwLnRhcmdldCA9IHRhcmdldFN0YWNrLnBvcCgpO1xufVxuXG4vKiAgKi9cblxudmFyIFZOb2RlID0gZnVuY3Rpb24gVk5vZGUgKFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICB0ZXh0LFxuICBlbG0sXG4gIGNvbnRleHQsXG4gIGNvbXBvbmVudE9wdGlvbnMsXG4gIGFzeW5jRmFjdG9yeVxuKSB7XG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIHRoaXMudGV4dCA9IHRleHQ7XG4gIHRoaXMuZWxtID0gZWxtO1xuICB0aGlzLm5zID0gdW5kZWZpbmVkO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLmZ1bmN0aW9uYWxDb250ZXh0ID0gdW5kZWZpbmVkO1xuICB0aGlzLmZ1bmN0aW9uYWxPcHRpb25zID0gdW5kZWZpbmVkO1xuICB0aGlzLmZ1bmN0aW9uYWxTY29wZUlkID0gdW5kZWZpbmVkO1xuICB0aGlzLmtleSA9IGRhdGEgJiYgZGF0YS5rZXk7XG4gIHRoaXMuY29tcG9uZW50T3B0aW9ucyA9IGNvbXBvbmVudE9wdGlvbnM7XG4gIHRoaXMuY29tcG9uZW50SW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkO1xuICB0aGlzLnJhdyA9IGZhbHNlO1xuICB0aGlzLmlzU3RhdGljID0gZmFsc2U7XG4gIHRoaXMuaXNSb290SW5zZXJ0ID0gdHJ1ZTtcbiAgdGhpcy5pc0NvbW1lbnQgPSBmYWxzZTtcbiAgdGhpcy5pc0Nsb25lZCA9IGZhbHNlO1xuICB0aGlzLmlzT25jZSA9IGZhbHNlO1xuICB0aGlzLmFzeW5jRmFjdG9yeSA9IGFzeW5jRmFjdG9yeTtcbiAgdGhpcy5hc3luY01ldGEgPSB1bmRlZmluZWQ7XG4gIHRoaXMuaXNBc3luY1BsYWNlaG9sZGVyID0gZmFsc2U7XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBjaGlsZDogeyBjb25maWd1cmFibGU6IHRydWUgfSB9O1xuXG4vLyBERVBSRUNBVEVEOiBhbGlhcyBmb3IgY29tcG9uZW50SW5zdGFuY2UgZm9yIGJhY2t3YXJkcyBjb21wYXQuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xucHJvdG90eXBlQWNjZXNzb3JzLmNoaWxkLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2Vcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKCBWTm9kZS5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG52YXIgY3JlYXRlRW1wdHlWTm9kZSA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gIGlmICggdGV4dCA9PT0gdm9pZCAwICkgdGV4dCA9ICcnO1xuXG4gIHZhciBub2RlID0gbmV3IFZOb2RlKCk7XG4gIG5vZGUudGV4dCA9IHRleHQ7XG4gIG5vZGUuaXNDb21tZW50ID0gdHJ1ZTtcbiAgcmV0dXJuIG5vZGVcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVRleHRWTm9kZSAodmFsKSB7XG4gIHJldHVybiBuZXcgVk5vZGUodW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgU3RyaW5nKHZhbCkpXG59XG5cbi8vIG9wdGltaXplZCBzaGFsbG93IGNsb25lXG4vLyB1c2VkIGZvciBzdGF0aWMgbm9kZXMgYW5kIHNsb3Qgbm9kZXMgYmVjYXVzZSB0aGV5IG1heSBiZSByZXVzZWQgYWNyb3NzXG4vLyBtdWx0aXBsZSByZW5kZXJzLCBjbG9uaW5nIHRoZW0gYXZvaWRzIGVycm9ycyB3aGVuIERPTSBtYW5pcHVsYXRpb25zIHJlbHlcbi8vIG9uIHRoZWlyIGVsbSByZWZlcmVuY2UuXG5mdW5jdGlvbiBjbG9uZVZOb2RlICh2bm9kZSwgZGVlcCkge1xuICB2YXIgY2xvbmVkID0gbmV3IFZOb2RlKFxuICAgIHZub2RlLnRhZyxcbiAgICB2bm9kZS5kYXRhLFxuICAgIHZub2RlLmNoaWxkcmVuLFxuICAgIHZub2RlLnRleHQsXG4gICAgdm5vZGUuZWxtLFxuICAgIHZub2RlLmNvbnRleHQsXG4gICAgdm5vZGUuY29tcG9uZW50T3B0aW9ucyxcbiAgICB2bm9kZS5hc3luY0ZhY3RvcnlcbiAgKTtcbiAgY2xvbmVkLm5zID0gdm5vZGUubnM7XG4gIGNsb25lZC5pc1N0YXRpYyA9IHZub2RlLmlzU3RhdGljO1xuICBjbG9uZWQua2V5ID0gdm5vZGUua2V5O1xuICBjbG9uZWQuaXNDb21tZW50ID0gdm5vZGUuaXNDb21tZW50O1xuICBjbG9uZWQuaXNDbG9uZWQgPSB0cnVlO1xuICBpZiAoZGVlcCAmJiB2bm9kZS5jaGlsZHJlbikge1xuICAgIGNsb25lZC5jaGlsZHJlbiA9IGNsb25lVk5vZGVzKHZub2RlLmNoaWxkcmVuKTtcbiAgfVxuICByZXR1cm4gY2xvbmVkXG59XG5cbmZ1bmN0aW9uIGNsb25lVk5vZGVzICh2bm9kZXMsIGRlZXApIHtcbiAgdmFyIGxlbiA9IHZub2Rlcy5sZW5ndGg7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobGVuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHJlc1tpXSA9IGNsb25lVk5vZGUodm5vZGVzW2ldLCBkZWVwKTtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qXG4gKiBub3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGhcbiAqIGR5bmFtaWNhbGx5IGFjY2Vzc2luZyBtZXRob2RzIG9uIEFycmF5IHByb3RvdHlwZVxuICovXG5cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xudmFyIGFycmF5TWV0aG9kcyA9IE9iamVjdC5jcmVhdGUoYXJyYXlQcm90byk7W1xuICAncHVzaCcsXG4gICdwb3AnLFxuICAnc2hpZnQnLFxuICAndW5zaGlmdCcsXG4gICdzcGxpY2UnLFxuICAnc29ydCcsXG4gICdyZXZlcnNlJ1xuXVxuLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICAvLyBjYWNoZSBvcmlnaW5hbCBtZXRob2RcbiAgdmFyIG9yaWdpbmFsID0gYXJyYXlQcm90b1ttZXRob2RdO1xuICBkZWYoYXJyYXlNZXRob2RzLCBtZXRob2QsIGZ1bmN0aW9uIG11dGF0b3IgKCkge1xuICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIHZhciByZXN1bHQgPSBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB2YXIgb2IgPSB0aGlzLl9fb2JfXztcbiAgICB2YXIgaW5zZXJ0ZWQ7XG4gICAgc3dpdGNoIChtZXRob2QpIHtcbiAgICAgIGNhc2UgJ3B1c2gnOlxuICAgICAgY2FzZSAndW5zaGlmdCc6XG4gICAgICAgIGluc2VydGVkID0gYXJncztcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3NwbGljZSc6XG4gICAgICAgIGluc2VydGVkID0gYXJncy5zbGljZSgyKTtcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gICAgaWYgKGluc2VydGVkKSB7IG9iLm9ic2VydmVBcnJheShpbnNlcnRlZCk7IH1cbiAgICAvLyBub3RpZnkgY2hhbmdlXG4gICAgb2IuZGVwLm5vdGlmeSgpO1xuICAgIHJldHVybiByZXN1bHRcbiAgfSk7XG59KTtcblxuLyogICovXG5cbnZhciBhcnJheUtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhcnJheU1ldGhvZHMpO1xuXG4vKipcbiAqIEJ5IGRlZmF1bHQsIHdoZW4gYSByZWFjdGl2ZSBwcm9wZXJ0eSBpcyBzZXQsIHRoZSBuZXcgdmFsdWUgaXNcbiAqIGFsc28gY29udmVydGVkIHRvIGJlY29tZSByZWFjdGl2ZS4gSG93ZXZlciB3aGVuIHBhc3NpbmcgZG93biBwcm9wcyxcbiAqIHdlIGRvbid0IHdhbnQgdG8gZm9yY2UgY29udmVyc2lvbiBiZWNhdXNlIHRoZSB2YWx1ZSBtYXkgYmUgYSBuZXN0ZWQgdmFsdWVcbiAqIHVuZGVyIGEgZnJvemVuIGRhdGEgc3RydWN0dXJlLiBDb252ZXJ0aW5nIGl0IHdvdWxkIGRlZmVhdCB0aGUgb3B0aW1pemF0aW9uLlxuICovXG52YXIgb2JzZXJ2ZXJTdGF0ZSA9IHtcbiAgc2hvdWxkQ29udmVydDogdHJ1ZVxufTtcblxuLyoqXG4gKiBPYnNlcnZlciBjbGFzcyB0aGF0IGFyZSBhdHRhY2hlZCB0byBlYWNoIG9ic2VydmVkXG4gKiBvYmplY3QuIE9uY2UgYXR0YWNoZWQsIHRoZSBvYnNlcnZlciBjb252ZXJ0cyB0YXJnZXRcbiAqIG9iamVjdCdzIHByb3BlcnR5IGtleXMgaW50byBnZXR0ZXIvc2V0dGVycyB0aGF0XG4gKiBjb2xsZWN0IGRlcGVuZGVuY2llcyBhbmQgZGlzcGF0Y2hlcyB1cGRhdGVzLlxuICovXG52YXIgT2JzZXJ2ZXIgPSBmdW5jdGlvbiBPYnNlcnZlciAodmFsdWUpIHtcbiAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB0aGlzLmRlcCA9IG5ldyBEZXAoKTtcbiAgdGhpcy52bUNvdW50ID0gMDtcbiAgZGVmKHZhbHVlLCAnX19vYl9fJywgdGhpcyk7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHZhciBhdWdtZW50ID0gaGFzUHJvdG9cbiAgICAgID8gcHJvdG9BdWdtZW50XG4gICAgICA6IGNvcHlBdWdtZW50O1xuICAgIGF1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcywgYXJyYXlLZXlzKTtcbiAgICB0aGlzLm9ic2VydmVBcnJheSh2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy53YWxrKHZhbHVlKTtcbiAgfVxufTtcblxuLyoqXG4gKiBXYWxrIHRocm91Z2ggZWFjaCBwcm9wZXJ0eSBhbmQgY29udmVydCB0aGVtIGludG9cbiAqIGdldHRlci9zZXR0ZXJzLiBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlblxuICogdmFsdWUgdHlwZSBpcyBPYmplY3QuXG4gKi9cbk9ic2VydmVyLnByb3RvdHlwZS53YWxrID0gZnVuY3Rpb24gd2FsayAob2JqKSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgZGVmaW5lUmVhY3RpdmUob2JqLCBrZXlzW2ldLCBvYmpba2V5c1tpXV0pO1xuICB9XG59O1xuXG4vKipcbiAqIE9ic2VydmUgYSBsaXN0IG9mIEFycmF5IGl0ZW1zLlxuICovXG5PYnNlcnZlci5wcm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gZnVuY3Rpb24gb2JzZXJ2ZUFycmF5IChpdGVtcykge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9ic2VydmUoaXRlbXNbaV0pO1xuICB9XG59O1xuXG4vLyBoZWxwZXJzXG5cbi8qKlxuICogQXVnbWVudCBhbiB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGludGVyY2VwdGluZ1xuICogdGhlIHByb3RvdHlwZSBjaGFpbiB1c2luZyBfX3Byb3RvX19cbiAqL1xuZnVuY3Rpb24gcHJvdG9BdWdtZW50ICh0YXJnZXQsIHNyYywga2V5cykge1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuICB0YXJnZXQuX19wcm90b19fID0gc3JjO1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXByb3RvICovXG59XG5cbi8qKlxuICogQXVnbWVudCBhbiB0YXJnZXQgT2JqZWN0IG9yIEFycmF5IGJ5IGRlZmluaW5nXG4gKiBoaWRkZW4gcHJvcGVydGllcy5cbiAqL1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIGNvcHlBdWdtZW50ICh0YXJnZXQsIHNyYywga2V5cykge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgZGVmKHRhcmdldCwga2V5LCBzcmNba2V5XSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRlbXB0IHRvIGNyZWF0ZSBhbiBvYnNlcnZlciBpbnN0YW5jZSBmb3IgYSB2YWx1ZSxcbiAqIHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBpZiBzdWNjZXNzZnVsbHkgb2JzZXJ2ZWQsXG4gKiBvciB0aGUgZXhpc3Rpbmcgb2JzZXJ2ZXIgaWYgdGhlIHZhbHVlIGFscmVhZHkgaGFzIG9uZS5cbiAqL1xuZnVuY3Rpb24gb2JzZXJ2ZSAodmFsdWUsIGFzUm9vdERhdGEpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgdmFsdWUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBvYjtcbiAgaWYgKGhhc093bih2YWx1ZSwgJ19fb2JfXycpICYmIHZhbHVlLl9fb2JfXyBpbnN0YW5jZW9mIE9ic2VydmVyKSB7XG4gICAgb2IgPSB2YWx1ZS5fX29iX187XG4gIH0gZWxzZSBpZiAoXG4gICAgb2JzZXJ2ZXJTdGF0ZS5zaG91bGRDb252ZXJ0ICYmXG4gICAgIWlzU2VydmVyUmVuZGVyaW5nKCkgJiZcbiAgICAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgaXNQbGFpbk9iamVjdCh2YWx1ZSkpICYmXG4gICAgT2JqZWN0LmlzRXh0ZW5zaWJsZSh2YWx1ZSkgJiZcbiAgICAhdmFsdWUuX2lzVnVlXG4gICkge1xuICAgIG9iID0gbmV3IE9ic2VydmVyKHZhbHVlKTtcbiAgfVxuICBpZiAoYXNSb290RGF0YSAmJiBvYikge1xuICAgIG9iLnZtQ291bnQrKztcbiAgfVxuICByZXR1cm4gb2Jcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSByZWFjdGl2ZSBwcm9wZXJ0eSBvbiBhbiBPYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGRlZmluZVJlYWN0aXZlIChcbiAgb2JqLFxuICBrZXksXG4gIHZhbCxcbiAgY3VzdG9tU2V0dGVyLFxuICBzaGFsbG93XG4pIHtcbiAgdmFyIGRlcCA9IG5ldyBEZXAoKTtcblxuICB2YXIgcHJvcGVydHkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KTtcbiAgaWYgKHByb3BlcnR5ICYmIHByb3BlcnR5LmNvbmZpZ3VyYWJsZSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIGNhdGVyIGZvciBwcmUtZGVmaW5lZCBnZXR0ZXIvc2V0dGVyc1xuICB2YXIgZ2V0dGVyID0gcHJvcGVydHkgJiYgcHJvcGVydHkuZ2V0O1xuICB2YXIgc2V0dGVyID0gcHJvcGVydHkgJiYgcHJvcGVydHkuc2V0O1xuXG4gIHZhciBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZSh2YWwpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlR2V0dGVyICgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICBkZXAuZGVwZW5kKCk7XG4gICAgICAgIGlmIChjaGlsZE9iKSB7XG4gICAgICAgICAgY2hpbGRPYi5kZXAuZGVwZW5kKCk7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBkZXBlbmRBcnJheSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gcmVhY3RpdmVTZXR0ZXIgKG5ld1ZhbCkge1xuICAgICAgdmFyIHZhbHVlID0gZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IHZhbDtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgaWYgKG5ld1ZhbCA9PT0gdmFsdWUgfHwgKG5ld1ZhbCAhPT0gbmV3VmFsICYmIHZhbHVlICE9PSB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY3VzdG9tU2V0dGVyKSB7XG4gICAgICAgIGN1c3RvbVNldHRlcigpO1xuICAgICAgfVxuICAgICAgaWYgKHNldHRlcikge1xuICAgICAgICBzZXR0ZXIuY2FsbChvYmosIG5ld1ZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBuZXdWYWw7XG4gICAgICB9XG4gICAgICBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZShuZXdWYWwpO1xuICAgICAgZGVwLm5vdGlmeSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgb24gYW4gb2JqZWN0LiBBZGRzIHRoZSBuZXcgcHJvcGVydHkgYW5kXG4gKiB0cmlnZ2VycyBjaGFuZ2Ugbm90aWZpY2F0aW9uIGlmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0XG4gKiBhbHJlYWR5IGV4aXN0LlxuICovXG5mdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWwpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgdGFyZ2V0Lmxlbmd0aCA9IE1hdGgubWF4KHRhcmdldC5sZW5ndGgsIGtleSk7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEsIHZhbCk7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGlmIChoYXNPd24odGFyZ2V0LCBrZXkpKSB7XG4gICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIHZhciBvYiA9ICh0YXJnZXQpLl9fb2JfXztcbiAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgJ0F2b2lkIGFkZGluZyByZWFjdGl2ZSBwcm9wZXJ0aWVzIHRvIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgJ2F0IHJ1bnRpbWUgLSBkZWNsYXJlIGl0IHVwZnJvbnQgaW4gdGhlIGRhdGEgb3B0aW9uLidcbiAgICApO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBpZiAoIW9iKSB7XG4gICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGRlZmluZVJlYWN0aXZlKG9iLnZhbHVlLCBrZXksIHZhbCk7XG4gIG9iLmRlcC5ub3RpZnkoKTtcbiAgcmV0dXJuIHZhbFxufVxuXG4vKipcbiAqIERlbGV0ZSBhIHByb3BlcnR5IGFuZCB0cmlnZ2VyIGNoYW5nZSBpZiBuZWNlc3NhcnkuXG4gKi9cbmZ1bmN0aW9uIGRlbCAodGFyZ2V0LCBrZXkpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEpO1xuICAgIHJldHVyblxuICB9XG4gIHZhciBvYiA9ICh0YXJnZXQpLl9fb2JfXztcbiAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgJ0F2b2lkIGRlbGV0aW5nIHByb3BlcnRpZXMgb24gYSBWdWUgaW5zdGFuY2Ugb3IgaXRzIHJvb3QgJGRhdGEgJyArXG4gICAgICAnLSBqdXN0IHNldCBpdCB0byBudWxsLidcbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIGlmICghaGFzT3duKHRhcmdldCwga2V5KSkge1xuICAgIHJldHVyblxuICB9XG4gIGRlbGV0ZSB0YXJnZXRba2V5XTtcbiAgaWYgKCFvYikge1xuICAgIHJldHVyblxuICB9XG4gIG9iLmRlcC5ub3RpZnkoKTtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGRlcGVuZGVuY2llcyBvbiBhcnJheSBlbGVtZW50cyB3aGVuIHRoZSBhcnJheSBpcyB0b3VjaGVkLCBzaW5jZVxuICogd2UgY2Fubm90IGludGVyY2VwdCBhcnJheSBlbGVtZW50IGFjY2VzcyBsaWtlIHByb3BlcnR5IGdldHRlcnMuXG4gKi9cbmZ1bmN0aW9uIGRlcGVuZEFycmF5ICh2YWx1ZSkge1xuICBmb3IgKHZhciBlID0gKHZvaWQgMCksIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZSA9IHZhbHVlW2ldO1xuICAgIGUgJiYgZS5fX29iX18gJiYgZS5fX29iX18uZGVwLmRlcGVuZCgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICBkZXBlbmRBcnJheShlKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogT3B0aW9uIG92ZXJ3cml0aW5nIHN0cmF0ZWdpZXMgYXJlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZVxuICogaG93IHRvIG1lcmdlIGEgcGFyZW50IG9wdGlvbiB2YWx1ZSBhbmQgYSBjaGlsZCBvcHRpb25cbiAqIHZhbHVlIGludG8gdGhlIGZpbmFsIHZhbHVlLlxuICovXG52YXIgc3RyYXRzID0gY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcblxuLyoqXG4gKiBPcHRpb25zIHdpdGggcmVzdHJpY3Rpb25zXG4gKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHN0cmF0cy5lbCA9IHN0cmF0cy5wcm9wc0RhdGEgPSBmdW5jdGlvbiAocGFyZW50LCBjaGlsZCwgdm0sIGtleSkge1xuICAgIGlmICghdm0pIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwib3B0aW9uIFxcXCJcIiArIGtleSArIFwiXFxcIiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnN0YW5jZSBcIiArXG4gICAgICAgICdjcmVhdGlvbiB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0U3RyYXQocGFyZW50LCBjaGlsZClcbiAgfTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgdGhhdCByZWN1cnNpdmVseSBtZXJnZXMgdHdvIGRhdGEgb2JqZWN0cyB0b2dldGhlci5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhICh0bywgZnJvbSkge1xuICBpZiAoIWZyb20pIHsgcmV0dXJuIHRvIH1cbiAgdmFyIGtleSwgdG9WYWwsIGZyb21WYWw7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZnJvbSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgdG9WYWwgPSB0b1trZXldO1xuICAgIGZyb21WYWwgPSBmcm9tW2tleV07XG4gICAgaWYgKCFoYXNPd24odG8sIGtleSkpIHtcbiAgICAgIHNldCh0bywga2V5LCBmcm9tVmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodG9WYWwpICYmIGlzUGxhaW5PYmplY3QoZnJvbVZhbCkpIHtcbiAgICAgIG1lcmdlRGF0YSh0b1ZhbCwgZnJvbVZhbCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG4vKipcbiAqIERhdGFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhT3JGbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIC8vIGluIGEgVnVlLmV4dGVuZCBtZXJnZSwgYm90aCBzaG91bGQgYmUgZnVuY3Rpb25zXG4gICAgaWYgKCFjaGlsZFZhbCkge1xuICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgIH1cbiAgICBpZiAoIXBhcmVudFZhbCkge1xuICAgICAgcmV0dXJuIGNoaWxkVmFsXG4gICAgfVxuICAgIC8vIHdoZW4gcGFyZW50VmFsICYgY2hpbGRWYWwgYXJlIGJvdGggcHJlc2VudCxcbiAgICAvLyB3ZSBuZWVkIHRvIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgICAvLyBtZXJnZWQgcmVzdWx0IG9mIGJvdGggZnVuY3Rpb25zLi4uIG5vIG5lZWQgdG9cbiAgICAvLyBjaGVjayBpZiBwYXJlbnRWYWwgaXMgYSBmdW5jdGlvbiBoZXJlIGJlY2F1c2VcbiAgICAvLyBpdCBoYXMgdG8gYmUgYSBmdW5jdGlvbiB0byBwYXNzIHByZXZpb3VzIG1lcmdlcy5cbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkRGF0YUZuICgpIHtcbiAgICAgIHJldHVybiBtZXJnZURhdGEoXG4gICAgICAgIHR5cGVvZiBjaGlsZFZhbCA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkVmFsLmNhbGwodGhpcykgOiBjaGlsZFZhbCxcbiAgICAgICAgdHlwZW9mIHBhcmVudFZhbCA9PT0gJ2Z1bmN0aW9uJyA/IHBhcmVudFZhbC5jYWxsKHRoaXMpIDogcGFyZW50VmFsXG4gICAgICApXG4gICAgfVxuICB9IGVsc2UgaWYgKHBhcmVudFZhbCB8fCBjaGlsZFZhbCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZWRJbnN0YW5jZURhdGFGbiAoKSB7XG4gICAgICAvLyBpbnN0YW5jZSBtZXJnZVxuICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IHR5cGVvZiBjaGlsZFZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IGNoaWxkVmFsLmNhbGwodm0pXG4gICAgICAgIDogY2hpbGRWYWw7XG4gICAgICB2YXIgZGVmYXVsdERhdGEgPSB0eXBlb2YgcGFyZW50VmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gcGFyZW50VmFsLmNhbGwodm0pXG4gICAgICAgIDogcGFyZW50VmFsO1xuICAgICAgaWYgKGluc3RhbmNlRGF0YSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VEYXRhKGluc3RhbmNlRGF0YSwgZGVmYXVsdERhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdERhdGFcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuc3RyYXRzLmRhdGEgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIGlmIChjaGlsZFZhbCAmJiB0eXBlb2YgY2hpbGRWYWwgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ1RoZSBcImRhdGFcIiBvcHRpb24gc2hvdWxkIGJlIGEgZnVuY3Rpb24gJyArXG4gICAgICAgICd0aGF0IHJldHVybnMgYSBwZXItaW5zdGFuY2UgdmFsdWUgaW4gY29tcG9uZW50ICcgK1xuICAgICAgICAnZGVmaW5pdGlvbnMuJyxcbiAgICAgICAgdm1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBwYXJlbnRWYWxcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlRGF0YU9yRm4uY2FsbCh0aGlzLCBwYXJlbnRWYWwsIGNoaWxkVmFsKVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0pXG59O1xuXG4vKipcbiAqIEhvb2tzIGFuZCBwcm9wcyBhcmUgbWVyZ2VkIGFzIGFycmF5cy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VIb29rIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbFxuKSB7XG4gIHJldHVybiBjaGlsZFZhbFxuICAgID8gcGFyZW50VmFsXG4gICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRWYWwpXG4gICAgICAgID8gY2hpbGRWYWxcbiAgICAgICAgOiBbY2hpbGRWYWxdXG4gICAgOiBwYXJlbnRWYWxcbn1cblxuTElGRUNZQ0xFX0hPT0tTLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgc3RyYXRzW2hvb2tdID0gbWVyZ2VIb29rO1xufSk7XG5cbi8qKlxuICogQXNzZXRzXG4gKlxuICogV2hlbiBhIHZtIGlzIHByZXNlbnQgKGluc3RhbmNlIGNyZWF0aW9uKSwgd2UgbmVlZCB0byBkb1xuICogYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiBjb25zdHJ1Y3RvciBvcHRpb25zLCBpbnN0YW5jZVxuICogb3B0aW9ucyBhbmQgcGFyZW50IG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQXNzZXRzIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm0sXG4gIGtleVxuKSB7XG4gIHZhciByZXMgPSBPYmplY3QuY3JlYXRlKHBhcmVudFZhbCB8fCBudWxsKTtcbiAgaWYgKGNoaWxkVmFsKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgICByZXR1cm4gZXh0ZW5kKHJlcywgY2hpbGRWYWwpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbkFTU0VUX1RZUEVTLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgc3RyYXRzW3R5cGUgKyAncyddID0gbWVyZ2VBc3NldHM7XG59KTtcblxuLyoqXG4gKiBXYXRjaGVycy5cbiAqXG4gKiBXYXRjaGVycyBoYXNoZXMgc2hvdWxkIG5vdCBvdmVyd3JpdGUgb25lXG4gKiBhbm90aGVyLCBzbyB3ZSBtZXJnZSB0aGVtIGFzIGFycmF5cy5cbiAqL1xuc3RyYXRzLndhdGNoID0gZnVuY3Rpb24gKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgLy8gd29yayBhcm91bmQgRmlyZWZveCdzIE9iamVjdC5wcm90b3R5cGUud2F0Y2guLi5cbiAgaWYgKHBhcmVudFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgcGFyZW50VmFsID0gdW5kZWZpbmVkOyB9XG4gIGlmIChjaGlsZFZhbCA9PT0gbmF0aXZlV2F0Y2gpIHsgY2hpbGRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2hpbGRWYWwpIHsgcmV0dXJuIE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBhc3NlcnRPYmplY3RUeXBlKGtleSwgY2hpbGRWYWwsIHZtKTtcbiAgfVxuICBpZiAoIXBhcmVudFZhbCkgeyByZXR1cm4gY2hpbGRWYWwgfVxuICB2YXIgcmV0ID0ge307XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGZvciAodmFyIGtleSQxIGluIGNoaWxkVmFsKSB7XG4gICAgdmFyIHBhcmVudCA9IHJldFtrZXkkMV07XG4gICAgdmFyIGNoaWxkID0gY2hpbGRWYWxba2V5JDFdO1xuICAgIGlmIChwYXJlbnQgJiYgIUFycmF5LmlzQXJyYXkocGFyZW50KSkge1xuICAgICAgcGFyZW50ID0gW3BhcmVudF07XG4gICAgfVxuICAgIHJldFtrZXkkMV0gPSBwYXJlbnRcbiAgICAgID8gcGFyZW50LmNvbmNhdChjaGlsZClcbiAgICAgIDogQXJyYXkuaXNBcnJheShjaGlsZCkgPyBjaGlsZCA6IFtjaGlsZF07XG4gIH1cbiAgcmV0dXJuIHJldFxufTtcblxuLyoqXG4gKiBPdGhlciBvYmplY3QgaGFzaGVzLlxuICovXG5zdHJhdHMucHJvcHMgPVxuc3RyYXRzLm1ldGhvZHMgPVxuc3RyYXRzLmluamVjdCA9XG5zdHJhdHMuY29tcHV0ZWQgPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICBpZiAoY2hpbGRWYWwgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICB9XG4gIGlmICghcGFyZW50VmFsKSB7IHJldHVybiBjaGlsZFZhbCB9XG4gIHZhciByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBleHRlbmQocmV0LCBwYXJlbnRWYWwpO1xuICBpZiAoY2hpbGRWYWwpIHsgZXh0ZW5kKHJldCwgY2hpbGRWYWwpOyB9XG4gIHJldHVybiByZXRcbn07XG5zdHJhdHMucHJvdmlkZSA9IG1lcmdlRGF0YU9yRm47XG5cbi8qKlxuICogRGVmYXVsdCBzdHJhdGVneS5cbiAqL1xudmFyIGRlZmF1bHRTdHJhdCA9IGZ1bmN0aW9uIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XG4gIHJldHVybiBjaGlsZFZhbCA9PT0gdW5kZWZpbmVkXG4gICAgPyBwYXJlbnRWYWxcbiAgICA6IGNoaWxkVmFsXG59O1xuXG4vKipcbiAqIFZhbGlkYXRlIGNvbXBvbmVudCBuYW1lc1xuICovXG5mdW5jdGlvbiBjaGVja0NvbXBvbmVudHMgKG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIG9wdGlvbnMuY29tcG9uZW50cykge1xuICAgIHZhciBsb3dlciA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChpc0J1aWx0SW5UYWcobG93ZXIpIHx8IGNvbmZpZy5pc1Jlc2VydmVkVGFnKGxvd2VyKSkge1xuICAgICAgd2FybihcbiAgICAgICAgJ0RvIG5vdCB1c2UgYnVpbHQtaW4gb3IgcmVzZXJ2ZWQgSFRNTCBlbGVtZW50cyBhcyBjb21wb25lbnQgJyArXG4gICAgICAgICdpZDogJyArIGtleVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBzeW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcbiAqIE9iamVjdC1iYXNlZCBmb3JtYXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzIChvcHRpb25zLCB2bSkge1xuICB2YXIgcHJvcHMgPSBvcHRpb25zLnByb3BzO1xuICBpZiAoIXByb3BzKSB7IHJldHVybiB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGksIHZhbCwgbmFtZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2YWwgPSBwcm9wc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICBuYW1lID0gY2FtZWxpemUodmFsKTtcbiAgICAgICAgcmVzW25hbWVdID0geyB0eXBlOiBudWxsIH07XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybigncHJvcHMgbXVzdCBiZSBzdHJpbmdzIHdoZW4gdXNpbmcgYXJyYXkgc3ludGF4LicpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHByb3BzKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFsID0gcHJvcHNba2V5XTtcbiAgICAgIG5hbWUgPSBjYW1lbGl6ZShrZXkpO1xuICAgICAgcmVzW25hbWVdID0gaXNQbGFpbk9iamVjdCh2YWwpXG4gICAgICAgID8gdmFsXG4gICAgICAgIDogeyB0eXBlOiB2YWwgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwicHJvcHNcXFwiOiBleHBlY3RlZCBhbiBBcnJheSBvciBhbiBPYmplY3QsIFwiICtcbiAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUocHJvcHMpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG4gIG9wdGlvbnMucHJvcHMgPSByZXM7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFsbCBpbmplY3Rpb25zIGludG8gT2JqZWN0LWJhc2VkIGZvcm1hdFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVJbmplY3QgKG9wdGlvbnMsIHZtKSB7XG4gIHZhciBpbmplY3QgPSBvcHRpb25zLmluamVjdDtcbiAgdmFyIG5vcm1hbGl6ZWQgPSBvcHRpb25zLmluamVjdCA9IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShpbmplY3QpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vcm1hbGl6ZWRbaW5qZWN0W2ldXSA9IHsgZnJvbTogaW5qZWN0W2ldIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGtleSBpbiBpbmplY3QpIHtcbiAgICAgIHZhciB2YWwgPSBpbmplY3Rba2V5XTtcbiAgICAgIG5vcm1hbGl6ZWRba2V5XSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAgICAgICA/IGV4dGVuZCh7IGZyb206IGtleSB9LCB2YWwpXG4gICAgICAgIDogeyBmcm9tOiB2YWwgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpbmplY3QpIHtcbiAgICB3YXJuKFxuICAgICAgXCJJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gXFxcImluamVjdFxcXCI6IGV4cGVjdGVkIGFuIEFycmF5IG9yIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZShpbmplY3QpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHJhdyBmdW5jdGlvbiBkaXJlY3RpdmVzIGludG8gb2JqZWN0IGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyAob3B0aW9ucykge1xuICB2YXIgZGlycyA9IG9wdGlvbnMuZGlyZWN0aXZlcztcbiAgaWYgKGRpcnMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gZGlycykge1xuICAgICAgdmFyIGRlZiA9IGRpcnNba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRpcnNba2V5XSA9IHsgYmluZDogZGVmLCB1cGRhdGU6IGRlZiB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRPYmplY3RUeXBlIChuYW1lLCB2YWx1ZSwgdm0pIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiXCIgKyBuYW1lICsgXCJcXFwiOiBleHBlY3RlZCBhbiBPYmplY3QsIFwiICtcbiAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUodmFsdWUpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTWVyZ2UgdHdvIG9wdGlvbiBvYmplY3RzIGludG8gYSBuZXcgb25lLlxuICogQ29yZSB1dGlsaXR5IHVzZWQgaW4gYm90aCBpbnN0YW50aWF0aW9uIGFuZCBpbmhlcml0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VPcHRpb25zIChcbiAgcGFyZW50LFxuICBjaGlsZCxcbiAgdm1cbikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNoZWNrQ29tcG9uZW50cyhjaGlsZCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGNoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2hpbGQgPSBjaGlsZC5vcHRpb25zO1xuICB9XG5cbiAgbm9ybWFsaXplUHJvcHMoY2hpbGQsIHZtKTtcbiAgbm9ybWFsaXplSW5qZWN0KGNoaWxkLCB2bSk7XG4gIG5vcm1hbGl6ZURpcmVjdGl2ZXMoY2hpbGQpO1xuICB2YXIgZXh0ZW5kc0Zyb20gPSBjaGlsZC5leHRlbmRzO1xuICBpZiAoZXh0ZW5kc0Zyb20pIHtcbiAgICBwYXJlbnQgPSBtZXJnZU9wdGlvbnMocGFyZW50LCBleHRlbmRzRnJvbSwgdm0pO1xuICB9XG4gIGlmIChjaGlsZC5taXhpbnMpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNoaWxkLm1peGlucy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLm1peGluc1tpXSwgdm0pO1xuICAgIH1cbiAgfVxuICB2YXIgb3B0aW9ucyA9IHt9O1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBwYXJlbnQpIHtcbiAgICBtZXJnZUZpZWxkKGtleSk7XG4gIH1cbiAgZm9yIChrZXkgaW4gY2hpbGQpIHtcbiAgICBpZiAoIWhhc093bihwYXJlbnQsIGtleSkpIHtcbiAgICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbWVyZ2VGaWVsZCAoa2V5KSB7XG4gICAgdmFyIHN0cmF0ID0gc3RyYXRzW2tleV0gfHwgZGVmYXVsdFN0cmF0O1xuICAgIG9wdGlvbnNba2V5XSA9IHN0cmF0KHBhcmVudFtrZXldLCBjaGlsZFtrZXldLCB2bSwga2V5KTtcbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG4vKipcbiAqIFJlc29sdmUgYW4gYXNzZXQuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYmVjYXVzZSBjaGlsZCBpbnN0YW5jZXMgbmVlZCBhY2Nlc3NcbiAqIHRvIGFzc2V0cyBkZWZpbmVkIGluIGl0cyBhbmNlc3RvciBjaGFpbi5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFzc2V0IChcbiAgb3B0aW9ucyxcbiAgdHlwZSxcbiAgaWQsXG4gIHdhcm5NaXNzaW5nXG4pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGFzc2V0cyA9IG9wdGlvbnNbdHlwZV07XG4gIC8vIGNoZWNrIGxvY2FsIHJlZ2lzdHJhdGlvbiB2YXJpYXRpb25zIGZpcnN0XG4gIGlmIChoYXNPd24oYXNzZXRzLCBpZCkpIHsgcmV0dXJuIGFzc2V0c1tpZF0gfVxuICB2YXIgY2FtZWxpemVkSWQgPSBjYW1lbGl6ZShpZCk7XG4gIGlmIChoYXNPd24oYXNzZXRzLCBjYW1lbGl6ZWRJZCkpIHsgcmV0dXJuIGFzc2V0c1tjYW1lbGl6ZWRJZF0gfVxuICB2YXIgUGFzY2FsQ2FzZUlkID0gY2FwaXRhbGl6ZShjYW1lbGl6ZWRJZCk7XG4gIGlmIChoYXNPd24oYXNzZXRzLCBQYXNjYWxDYXNlSWQpKSB7IHJldHVybiBhc3NldHNbUGFzY2FsQ2FzZUlkXSB9XG4gIC8vIGZhbGxiYWNrIHRvIHByb3RvdHlwZSBjaGFpblxuICB2YXIgcmVzID0gYXNzZXRzW2lkXSB8fCBhc3NldHNbY2FtZWxpemVkSWRdIHx8IGFzc2V0c1tQYXNjYWxDYXNlSWRdO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuTWlzc2luZyAmJiAhcmVzKSB7XG4gICAgd2FybihcbiAgICAgICdGYWlsZWQgdG8gcmVzb2x2ZSAnICsgdHlwZS5zbGljZSgwLCAtMSkgKyAnOiAnICsgaWQsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3AgKFxuICBrZXksXG4gIHByb3BPcHRpb25zLFxuICBwcm9wc0RhdGEsXG4gIHZtXG4pIHtcbiAgdmFyIHByb3AgPSBwcm9wT3B0aW9uc1trZXldO1xuICB2YXIgYWJzZW50ID0gIWhhc093bihwcm9wc0RhdGEsIGtleSk7XG4gIHZhciB2YWx1ZSA9IHByb3BzRGF0YVtrZXldO1xuICAvLyBoYW5kbGUgYm9vbGVhbiBwcm9wc1xuICBpZiAoaXNUeXBlKEJvb2xlYW4sIHByb3AudHlwZSkpIHtcbiAgICBpZiAoYWJzZW50ICYmICFoYXNPd24ocHJvcCwgJ2RlZmF1bHQnKSkge1xuICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKCFpc1R5cGUoU3RyaW5nLCBwcm9wLnR5cGUpICYmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IGh5cGhlbmF0ZShrZXkpKSkge1xuICAgICAgdmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuICAvLyBjaGVjayBkZWZhdWx0IHZhbHVlXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsdWUgPSBnZXRQcm9wRGVmYXVsdFZhbHVlKHZtLCBwcm9wLCBrZXkpO1xuICAgIC8vIHNpbmNlIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGEgZnJlc2ggY29weSxcbiAgICAvLyBtYWtlIHN1cmUgdG8gb2JzZXJ2ZSBpdC5cbiAgICB2YXIgcHJldlNob3VsZENvbnZlcnQgPSBvYnNlcnZlclN0YXRlLnNob3VsZENvbnZlcnQ7XG4gICAgb2JzZXJ2ZXJTdGF0ZS5zaG91bGRDb252ZXJ0ID0gdHJ1ZTtcbiAgICBvYnNlcnZlKHZhbHVlKTtcbiAgICBvYnNlcnZlclN0YXRlLnNob3VsZENvbnZlcnQgPSBwcmV2U2hvdWxkQ29udmVydDtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydFByb3AocHJvcCwga2V5LCB2YWx1ZSwgdm0sIGFic2VudCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgcHJvcC5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcERlZmF1bHRWYWx1ZSAodm0sIHByb3AsIGtleSkge1xuICAvLyBubyBkZWZhdWx0LCByZXR1cm4gdW5kZWZpbmVkXG4gIGlmICghaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgdmFyIGRlZiA9IHByb3AuZGVmYXVsdDtcbiAgLy8gd2FybiBhZ2FpbnN0IG5vbi1mYWN0b3J5IGRlZmF1bHRzIGZvciBPYmplY3QgJiBBcnJheVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc09iamVjdChkZWYpKSB7XG4gICAgd2FybihcbiAgICAgICdJbnZhbGlkIGRlZmF1bHQgdmFsdWUgZm9yIHByb3AgXCInICsga2V5ICsgJ1wiOiAnICtcbiAgICAgICdQcm9wcyB3aXRoIHR5cGUgT2JqZWN0L0FycmF5IG11c3QgdXNlIGEgZmFjdG9yeSBmdW5jdGlvbiAnICtcbiAgICAgICd0byByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUuJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICAvLyB0aGUgcmF3IHByb3AgdmFsdWUgd2FzIGFsc28gdW5kZWZpbmVkIGZyb20gcHJldmlvdXMgcmVuZGVyLFxuICAvLyByZXR1cm4gcHJldmlvdXMgZGVmYXVsdCB2YWx1ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3YXRjaGVyIHRyaWdnZXJcbiAgaWYgKHZtICYmIHZtLiRvcHRpb25zLnByb3BzRGF0YSAmJlxuICAgIHZtLiRvcHRpb25zLnByb3BzRGF0YVtrZXldID09PSB1bmRlZmluZWQgJiZcbiAgICB2bS5fcHJvcHNba2V5XSAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiB2bS5fcHJvcHNba2V5XVxuICB9XG4gIC8vIGNhbGwgZmFjdG9yeSBmdW5jdGlvbiBmb3Igbm9uLUZ1bmN0aW9uIHR5cGVzXG4gIC8vIGEgdmFsdWUgaXMgRnVuY3Rpb24gaWYgaXRzIHByb3RvdHlwZSBpcyBmdW5jdGlvbiBldmVuIGFjcm9zcyBkaWZmZXJlbnQgZXhlY3V0aW9uIGNvbnRleHRcbiAgcmV0dXJuIHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicgJiYgZ2V0VHlwZShwcm9wLnR5cGUpICE9PSAnRnVuY3Rpb24nXG4gICAgPyBkZWYuY2FsbCh2bSlcbiAgICA6IGRlZlxufVxuXG4vKipcbiAqIEFzc2VydCB3aGV0aGVyIGEgcHJvcCBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UHJvcCAoXG4gIHByb3AsXG4gIG5hbWUsXG4gIHZhbHVlLFxuICB2bSxcbiAgYWJzZW50XG4pIHtcbiAgaWYgKHByb3AucmVxdWlyZWQgJiYgYWJzZW50KSB7XG4gICAgd2FybihcbiAgICAgICdNaXNzaW5nIHJlcXVpcmVkIHByb3A6IFwiJyArIG5hbWUgKyAnXCInLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsICYmICFwcm9wLnJlcXVpcmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHR5cGUgPSBwcm9wLnR5cGU7XG4gIHZhciB2YWxpZCA9ICF0eXBlIHx8IHR5cGUgPT09IHRydWU7XG4gIHZhciBleHBlY3RlZFR5cGVzID0gW107XG4gIGlmICh0eXBlKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlID0gW3R5cGVdO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGUubGVuZ3RoICYmICF2YWxpZDsgaSsrKSB7XG4gICAgICB2YXIgYXNzZXJ0ZWRUeXBlID0gYXNzZXJ0VHlwZSh2YWx1ZSwgdHlwZVtpXSk7XG4gICAgICBleHBlY3RlZFR5cGVzLnB1c2goYXNzZXJ0ZWRUeXBlLmV4cGVjdGVkVHlwZSB8fCAnJyk7XG4gICAgICB2YWxpZCA9IGFzc2VydGVkVHlwZS52YWxpZDtcbiAgICB9XG4gIH1cbiAgaWYgKCF2YWxpZCkge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgcHJvcDogdHlwZSBjaGVjayBmYWlsZWQgZm9yIHByb3AgXFxcIlwiICsgbmFtZSArIFwiXFxcIi5cIiArXG4gICAgICBcIiBFeHBlY3RlZCBcIiArIChleHBlY3RlZFR5cGVzLm1hcChjYXBpdGFsaXplKS5qb2luKCcsICcpKSArXG4gICAgICBcIiwgZ290IFwiICsgKHRvUmF3VHlwZSh2YWx1ZSkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHZhbGlkYXRvciA9IHByb3AudmFsaWRhdG9yO1xuICBpZiAodmFsaWRhdG9yKSB7XG4gICAgaWYgKCF2YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnSW52YWxpZCBwcm9wOiBjdXN0b20gdmFsaWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIicgKyBuYW1lICsgJ1wiLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgc2ltcGxlQ2hlY2tSRSA9IC9eKFN0cmluZ3xOdW1iZXJ8Qm9vbGVhbnxGdW5jdGlvbnxTeW1ib2wpJC87XG5cbmZ1bmN0aW9uIGFzc2VydFR5cGUgKHZhbHVlLCB0eXBlKSB7XG4gIHZhciB2YWxpZDtcbiAgdmFyIGV4cGVjdGVkVHlwZSA9IGdldFR5cGUodHlwZSk7XG4gIGlmIChzaW1wbGVDaGVja1JFLnRlc3QoZXhwZWN0ZWRUeXBlKSkge1xuICAgIHZhciB0ID0gdHlwZW9mIHZhbHVlO1xuICAgIHZhbGlkID0gdCA9PT0gZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgLy8gZm9yIHByaW1pdGl2ZSB3cmFwcGVyIG9iamVjdHNcbiAgICBpZiAoIXZhbGlkICYmIHQgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnT2JqZWN0Jykge1xuICAgIHZhbGlkID0gaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnQXJyYXknKSB7XG4gICAgdmFsaWQgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHZhbGlkOiB2YWxpZCxcbiAgICBleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZVxuICB9XG59XG5cbi8qKlxuICogVXNlIGZ1bmN0aW9uIHN0cmluZyBuYW1lIHRvIGNoZWNrIGJ1aWx0LWluIHR5cGVzLFxuICogYmVjYXVzZSBhIHNpbXBsZSBlcXVhbGl0eSBjaGVjayB3aWxsIGZhaWwgd2hlbiBydW5uaW5nXG4gKiBhY3Jvc3MgZGlmZmVyZW50IHZtcyAvIGlmcmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFR5cGUgKGZuKSB7XG4gIHZhciBtYXRjaCA9IGZuICYmIGZuLnRvU3RyaW5nKCkubWF0Y2goL15cXHMqZnVuY3Rpb24gKFxcdyspLyk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJydcbn1cblxuZnVuY3Rpb24gaXNUeXBlICh0eXBlLCBmbikge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZm4pKSB7XG4gICAgcmV0dXJuIGdldFR5cGUoZm4pID09PSBnZXRUeXBlKHR5cGUpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGZuLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGdldFR5cGUoZm5baV0pID09PSBnZXRUeXBlKHR5cGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gZmFsc2Vcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9yIChlcnIsIHZtLCBpbmZvKSB7XG4gIGlmICh2bSkge1xuICAgIHZhciBjdXIgPSB2bTtcbiAgICB3aGlsZSAoKGN1ciA9IGN1ci4kcGFyZW50KSkge1xuICAgICAgdmFyIGhvb2tzID0gY3VyLiRvcHRpb25zLmVycm9yQ2FwdHVyZWQ7XG4gICAgICBpZiAoaG9va3MpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgY2FwdHVyZSA9IGhvb2tzW2ldLmNhbGwoY3VyLCBlcnIsIHZtLCBpbmZvKSA9PT0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoY2FwdHVyZSkgeyByZXR1cm4gfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGdsb2JhbEhhbmRsZUVycm9yKGUsIGN1ciwgJ2Vycm9yQ2FwdHVyZWQgaG9vaycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBnbG9iYWxIYW5kbGVFcnJvcihlcnIsIHZtLCBpbmZvKTtcbn1cblxuZnVuY3Rpb24gZ2xvYmFsSGFuZGxlRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgaWYgKGNvbmZpZy5lcnJvckhhbmRsZXIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5lcnJvckhhbmRsZXIuY2FsbChudWxsLCBlcnIsIHZtLCBpbmZvKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ0Vycm9yKGUsIG51bGwsICdjb25maWcuZXJyb3JIYW5kbGVyJyk7XG4gICAgfVxuICB9XG4gIGxvZ0Vycm9yKGVyciwgdm0sIGluZm8pO1xufVxuXG5mdW5jdGlvbiBsb2dFcnJvciAoZXJyLCB2bSwgaW5mbykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oKFwiRXJyb3IgaW4gXCIgKyBpbmZvICsgXCI6IFxcXCJcIiArIChlcnIudG9TdHJpbmcoKSkgKyBcIlxcXCJcIiksIHZtKTtcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaW5Ccm93c2VyICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG4vKiAgKi9cbi8qIGdsb2JhbHMgTWVzc2FnZUNoYW5uZWwgKi9cblxudmFyIGNhbGxiYWNrcyA9IFtdO1xudmFyIHBlbmRpbmcgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmx1c2hDYWxsYmFja3MgKCkge1xuICBwZW5kaW5nID0gZmFsc2U7XG4gIHZhciBjb3BpZXMgPSBjYWxsYmFja3Muc2xpY2UoMCk7XG4gIGNhbGxiYWNrcy5sZW5ndGggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNvcGllcy5sZW5ndGg7IGkrKykge1xuICAgIGNvcGllc1tpXSgpO1xuICB9XG59XG5cbi8vIEhlcmUgd2UgaGF2ZSBhc3luYyBkZWZlcnJpbmcgd3JhcHBlcnMgdXNpbmcgYm90aCBtaWNybyBhbmQgbWFjcm8gdGFza3MuXG4vLyBJbiA8IDIuNCB3ZSB1c2VkIG1pY3JvIHRhc2tzIGV2ZXJ5d2hlcmUsIGJ1dCB0aGVyZSBhcmUgc29tZSBzY2VuYXJpb3Mgd2hlcmVcbi8vIG1pY3JvIHRhc2tzIGhhdmUgdG9vIGhpZ2ggYSBwcmlvcml0eSBhbmQgZmlyZXMgaW4gYmV0d2VlbiBzdXBwb3NlZGx5XG4vLyBzZXF1ZW50aWFsIGV2ZW50cyAoZS5nLiAjNDUyMSwgIzY2OTApIG9yIGV2ZW4gYmV0d2VlbiBidWJibGluZyBvZiB0aGUgc2FtZVxuLy8gZXZlbnQgKCM2NTY2KS4gSG93ZXZlciwgdXNpbmcgbWFjcm8gdGFza3MgZXZlcnl3aGVyZSBhbHNvIGhhcyBzdWJ0bGUgcHJvYmxlbXNcbi8vIHdoZW4gc3RhdGUgaXMgY2hhbmdlZCByaWdodCBiZWZvcmUgcmVwYWludCAoZS5nLiAjNjgxMywgb3V0LWluIHRyYW5zaXRpb25zKS5cbi8vIEhlcmUgd2UgdXNlIG1pY3JvIHRhc2sgYnkgZGVmYXVsdCwgYnV0IGV4cG9zZSBhIHdheSB0byBmb3JjZSBtYWNybyB0YXNrIHdoZW5cbi8vIG5lZWRlZCAoZS5nLiBpbiBldmVudCBoYW5kbGVycyBhdHRhY2hlZCBieSB2LW9uKS5cbnZhciBtaWNyb1RpbWVyRnVuYztcbnZhciBtYWNyb1RpbWVyRnVuYztcbnZhciB1c2VNYWNyb1Rhc2sgPSBmYWxzZTtcblxuLy8gRGV0ZXJtaW5lIChtYWNybykgVGFzayBkZWZlciBpbXBsZW1lbnRhdGlvbi5cbi8vIFRlY2huaWNhbGx5IHNldEltbWVkaWF0ZSBzaG91bGQgYmUgdGhlIGlkZWFsIGNob2ljZSwgYnV0IGl0J3Mgb25seSBhdmFpbGFibGVcbi8vIGluIElFLiBUaGUgb25seSBwb2x5ZmlsbCB0aGF0IGNvbnNpc3RlbnRseSBxdWV1ZXMgdGhlIGNhbGxiYWNrIGFmdGVyIGFsbCBET01cbi8vIGV2ZW50cyB0cmlnZ2VyZWQgaW4gdGhlIHNhbWUgbG9vcCBpcyBieSB1c2luZyBNZXNzYWdlQ2hhbm5lbC5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKHNldEltbWVkaWF0ZSkpIHtcbiAgbWFjcm9UaW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2V0SW1tZWRpYXRlKGZsdXNoQ2FsbGJhY2tzKTtcbiAgfTtcbn0gZWxzZSBpZiAodHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJyAmJiAoXG4gIGlzTmF0aXZlKE1lc3NhZ2VDaGFubmVsKSB8fFxuICAvLyBQaGFudG9tSlNcbiAgTWVzc2FnZUNoYW5uZWwudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvcl0nXG4pKSB7XG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIHZhciBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBmbHVzaENhbGxiYWNrcztcbiAgbWFjcm9UaW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcG9ydC5wb3N0TWVzc2FnZSgxKTtcbiAgfTtcbn0gZWxzZSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIG1hY3JvVGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHNldFRpbWVvdXQoZmx1c2hDYWxsYmFja3MsIDApO1xuICB9O1xufVxuXG4vLyBEZXRlcm1pbmUgTWljcm9UYXNrIGRlZmVyIGltcGxlbWVudGF0aW9uLlxuLyogaXN0YW5idWwgaWdub3JlIG5leHQsICRmbG93LWRpc2FibGUtbGluZSAqL1xuaWYgKHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShQcm9taXNlKSkge1xuICB2YXIgcCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICBtaWNyb1RpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwLnRoZW4oZmx1c2hDYWxsYmFja3MpO1xuICAgIC8vIGluIHByb2JsZW1hdGljIFVJV2ViVmlld3MsIFByb21pc2UudGhlbiBkb2Vzbid0IGNvbXBsZXRlbHkgYnJlYWssIGJ1dFxuICAgIC8vIGl0IGNhbiBnZXQgc3R1Y2sgaW4gYSB3ZWlyZCBzdGF0ZSB3aGVyZSBjYWxsYmFja3MgYXJlIHB1c2hlZCBpbnRvIHRoZVxuICAgIC8vIG1pY3JvdGFzayBxdWV1ZSBidXQgdGhlIHF1ZXVlIGlzbid0IGJlaW5nIGZsdXNoZWQsIHVudGlsIHRoZSBicm93c2VyXG4gICAgLy8gbmVlZHMgdG8gZG8gc29tZSBvdGhlciB3b3JrLCBlLmcuIGhhbmRsZSBhIHRpbWVyLiBUaGVyZWZvcmUgd2UgY2FuXG4gICAgLy8gXCJmb3JjZVwiIHRoZSBtaWNyb3Rhc2sgcXVldWUgdG8gYmUgZmx1c2hlZCBieSBhZGRpbmcgYW4gZW1wdHkgdGltZXIuXG4gICAgaWYgKGlzSU9TKSB7IHNldFRpbWVvdXQobm9vcCk7IH1cbiAgfTtcbn0gZWxzZSB7XG4gIC8vIGZhbGxiYWNrIHRvIG1hY3JvXG4gIG1pY3JvVGltZXJGdW5jID0gbWFjcm9UaW1lckZ1bmM7XG59XG5cbi8qKlxuICogV3JhcCBhIGZ1bmN0aW9uIHNvIHRoYXQgaWYgYW55IGNvZGUgaW5zaWRlIHRyaWdnZXJzIHN0YXRlIGNoYW5nZSxcbiAqIHRoZSBjaGFuZ2VzIGFyZSBxdWV1ZWQgdXNpbmcgYSBUYXNrIGluc3RlYWQgb2YgYSBNaWNyb1Rhc2suXG4gKi9cbmZ1bmN0aW9uIHdpdGhNYWNyb1Rhc2sgKGZuKSB7XG4gIHJldHVybiBmbi5fd2l0aFRhc2sgfHwgKGZuLl93aXRoVGFzayA9IGZ1bmN0aW9uICgpIHtcbiAgICB1c2VNYWNyb1Rhc2sgPSB0cnVlO1xuICAgIHZhciByZXMgPSBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIHVzZU1hY3JvVGFzayA9IGZhbHNlO1xuICAgIHJldHVybiByZXNcbiAgfSlcbn1cblxuZnVuY3Rpb24gbmV4dFRpY2sgKGNiLCBjdHgpIHtcbiAgdmFyIF9yZXNvbHZlO1xuICBjYWxsYmFja3MucHVzaChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjYi5jYWxsKGN0eCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGUsIGN0eCwgJ25leHRUaWNrJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfcmVzb2x2ZSkge1xuICAgICAgX3Jlc29sdmUoY3R4KTtcbiAgICB9XG4gIH0pO1xuICBpZiAoIXBlbmRpbmcpIHtcbiAgICBwZW5kaW5nID0gdHJ1ZTtcbiAgICBpZiAodXNlTWFjcm9UYXNrKSB7XG4gICAgICBtYWNyb1RpbWVyRnVuYygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaWNyb1RpbWVyRnVuYygpO1xuICAgIH1cbiAgfVxuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgaWYgKCFjYiAmJiB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KVxuICB9XG59XG5cbi8qICAqL1xuXG4vKiBub3QgdHlwZSBjaGVja2luZyB0aGlzIGZpbGUgYmVjYXVzZSBmbG93IGRvZXNuJ3QgcGxheSB3ZWxsIHdpdGggUHJveHkgKi9cblxudmFyIGluaXRQcm94eTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGFsbG93ZWRHbG9iYWxzID0gbWFrZU1hcChcbiAgICAnSW5maW5pdHksdW5kZWZpbmVkLE5hTixpc0Zpbml0ZSxpc05hTiwnICtcbiAgICAncGFyc2VGbG9hdCxwYXJzZUludCxkZWNvZGVVUkksZGVjb2RlVVJJQ29tcG9uZW50LGVuY29kZVVSSSxlbmNvZGVVUklDb21wb25lbnQsJyArXG4gICAgJ01hdGgsTnVtYmVyLERhdGUsQXJyYXksT2JqZWN0LEJvb2xlYW4sU3RyaW5nLFJlZ0V4cCxNYXAsU2V0LEpTT04sSW50bCwnICtcbiAgICAncmVxdWlyZScgLy8gZm9yIFdlYnBhY2svQnJvd3NlcmlmeVxuICApO1xuXG4gIHZhciB3YXJuTm9uUHJlc2VudCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHdhcm4oXG4gICAgICBcIlByb3BlcnR5IG9yIG1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgbm90IGRlZmluZWQgb24gdGhlIGluc3RhbmNlIGJ1dCBcIiArXG4gICAgICAncmVmZXJlbmNlZCBkdXJpbmcgcmVuZGVyLiBNYWtlIHN1cmUgdGhhdCB0aGlzIHByb3BlcnR5IGlzIHJlYWN0aXZlLCAnICtcbiAgICAgICdlaXRoZXIgaW4gdGhlIGRhdGEgb3B0aW9uLCBvciBmb3IgY2xhc3MtYmFzZWQgY29tcG9uZW50cywgYnkgJyArXG4gICAgICAnaW5pdGlhbGl6aW5nIHRoZSBwcm9wZXJ0eS4gJyArXG4gICAgICAnU2VlOiBodHRwczovL3Z1ZWpzLm9yZy92Mi9ndWlkZS9yZWFjdGl2aXR5Lmh0bWwjRGVjbGFyaW5nLVJlYWN0aXZlLVByb3BlcnRpZXMuJyxcbiAgICAgIHRhcmdldFxuICAgICk7XG4gIH07XG5cbiAgdmFyIGhhc1Byb3h5ID1cbiAgICB0eXBlb2YgUHJveHkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgUHJveHkudG9TdHJpbmcoKS5tYXRjaCgvbmF0aXZlIGNvZGUvKTtcblxuICBpZiAoaGFzUHJveHkpIHtcbiAgICB2YXIgaXNCdWlsdEluTW9kaWZpZXIgPSBtYWtlTWFwKCdzdG9wLHByZXZlbnQsc2VsZixjdHJsLHNoaWZ0LGFsdCxtZXRhLGV4YWN0Jyk7XG4gICAgY29uZmlnLmtleUNvZGVzID0gbmV3IFByb3h5KGNvbmZpZy5rZXlDb2Rlcywge1xuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoaXNCdWlsdEluTW9kaWZpZXIoa2V5KSkge1xuICAgICAgICAgIHdhcm4oKFwiQXZvaWQgb3ZlcndyaXRpbmcgYnVpbHQtaW4gbW9kaWZpZXIgaW4gY29uZmlnLmtleUNvZGVzOiAuXCIgKyBrZXkpKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHZhciBoYXNIYW5kbGVyID0ge1xuICAgIGhhczogZnVuY3Rpb24gaGFzICh0YXJnZXQsIGtleSkge1xuICAgICAgdmFyIGhhcyA9IGtleSBpbiB0YXJnZXQ7XG4gICAgICB2YXIgaXNBbGxvd2VkID0gYWxsb3dlZEdsb2JhbHMoa2V5KSB8fCBrZXkuY2hhckF0KDApID09PSAnXyc7XG4gICAgICBpZiAoIWhhcyAmJiAhaXNBbGxvd2VkKSB7XG4gICAgICAgIHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXMgfHwgIWlzQWxsb3dlZFxuICAgIH1cbiAgfTtcblxuICB2YXIgZ2V0SGFuZGxlciA9IHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCAodGFyZ2V0LCBrZXkpIHtcbiAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiAhKGtleSBpbiB0YXJnZXQpKSB7XG4gICAgICAgIHdhcm5Ob25QcmVzZW50KHRhcmdldCwga2V5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXRba2V5XVxuICAgIH1cbiAgfTtcblxuICBpbml0UHJveHkgPSBmdW5jdGlvbiBpbml0UHJveHkgKHZtKSB7XG4gICAgaWYgKGhhc1Byb3h5KSB7XG4gICAgICAvLyBkZXRlcm1pbmUgd2hpY2ggcHJveHkgaGFuZGxlciB0byB1c2VcbiAgICAgIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gICAgICB2YXIgaGFuZGxlcnMgPSBvcHRpb25zLnJlbmRlciAmJiBvcHRpb25zLnJlbmRlci5fd2l0aFN0cmlwcGVkXG4gICAgICAgID8gZ2V0SGFuZGxlclxuICAgICAgICA6IGhhc0hhbmRsZXI7XG4gICAgICB2bS5fcmVuZGVyUHJveHkgPSBuZXcgUHJveHkodm0sIGhhbmRsZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgfVxuICB9O1xufVxuXG52YXIgbWFyaztcbnZhciBtZWFzdXJlO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcGVyZiA9IGluQnJvd3NlciAmJiB3aW5kb3cucGVyZm9ybWFuY2U7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoXG4gICAgcGVyZiAmJlxuICAgIHBlcmYubWFyayAmJlxuICAgIHBlcmYubWVhc3VyZSAmJlxuICAgIHBlcmYuY2xlYXJNYXJrcyAmJlxuICAgIHBlcmYuY2xlYXJNZWFzdXJlc1xuICApIHtcbiAgICBtYXJrID0gZnVuY3Rpb24gKHRhZykgeyByZXR1cm4gcGVyZi5tYXJrKHRhZyk7IH07XG4gICAgbWVhc3VyZSA9IGZ1bmN0aW9uIChuYW1lLCBzdGFydFRhZywgZW5kVGFnKSB7XG4gICAgICBwZXJmLm1lYXN1cmUobmFtZSwgc3RhcnRUYWcsIGVuZFRhZyk7XG4gICAgICBwZXJmLmNsZWFyTWFya3Moc3RhcnRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1hcmtzKGVuZFRhZyk7XG4gICAgICBwZXJmLmNsZWFyTWVhc3VyZXMobmFtZSk7XG4gICAgfTtcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIG5vcm1hbGl6ZUV2ZW50ID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBwYXNzaXZlID0gbmFtZS5jaGFyQXQoMCkgPT09ICcmJztcbiAgbmFtZSA9IHBhc3NpdmUgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgdmFyIG9uY2UkJDEgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJ34nOyAvLyBQcmVmaXhlZCBsYXN0LCBjaGVja2VkIGZpcnN0XG4gIG5hbWUgPSBvbmNlJCQxID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4gIHZhciBjYXB0dXJlID0gbmFtZS5jaGFyQXQoMCkgPT09ICchJztcbiAgbmFtZSA9IGNhcHR1cmUgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIG9uY2U6IG9uY2UkJDEsXG4gICAgY2FwdHVyZTogY2FwdHVyZSxcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBjcmVhdGVGbkludm9rZXIgKGZucykge1xuICBmdW5jdGlvbiBpbnZva2VyICgpIHtcbiAgICB2YXIgYXJndW1lbnRzJDEgPSBhcmd1bWVudHM7XG5cbiAgICB2YXIgZm5zID0gaW52b2tlci5mbnM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm5zKSkge1xuICAgICAgdmFyIGNsb25lZCA9IGZucy5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbG9uZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2xvbmVkW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyQxKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGhhbmRsZXIgcmV0dXJuIHZhbHVlIGZvciBzaW5nbGUgaGFuZGxlcnNcbiAgICAgIHJldHVybiBmbnMuYXBwbHkobnVsbCwgYXJndW1lbnRzKVxuICAgIH1cbiAgfVxuICBpbnZva2VyLmZucyA9IGZucztcbiAgcmV0dXJuIGludm9rZXJcbn1cblxuZnVuY3Rpb24gdXBkYXRlTGlzdGVuZXJzIChcbiAgb24sXG4gIG9sZE9uLFxuICBhZGQsXG4gIHJlbW92ZSQkMSxcbiAgdm1cbikge1xuICB2YXIgbmFtZSwgY3VyLCBvbGQsIGV2ZW50O1xuICBmb3IgKG5hbWUgaW4gb24pIHtcbiAgICBjdXIgPSBvbltuYW1lXTtcbiAgICBvbGQgPSBvbGRPbltuYW1lXTtcbiAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgIGlmIChpc1VuZGVmKGN1cikpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJJbnZhbGlkIGhhbmRsZXIgZm9yIGV2ZW50IFxcXCJcIiArIChldmVudC5uYW1lKSArIFwiXFxcIjogZ290IFwiICsgU3RyaW5nKGN1ciksXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaXNVbmRlZihvbGQpKSB7XG4gICAgICBpZiAoaXNVbmRlZihjdXIuZm5zKSkge1xuICAgICAgICBjdXIgPSBvbltuYW1lXSA9IGNyZWF0ZUZuSW52b2tlcihjdXIpO1xuICAgICAgfVxuICAgICAgYWRkKGV2ZW50Lm5hbWUsIGN1ciwgZXZlbnQub25jZSwgZXZlbnQuY2FwdHVyZSwgZXZlbnQucGFzc2l2ZSk7XG4gICAgfSBlbHNlIGlmIChjdXIgIT09IG9sZCkge1xuICAgICAgb2xkLmZucyA9IGN1cjtcbiAgICAgIG9uW25hbWVdID0gb2xkO1xuICAgIH1cbiAgfVxuICBmb3IgKG5hbWUgaW4gb2xkT24pIHtcbiAgICBpZiAoaXNVbmRlZihvbltuYW1lXSkpIHtcbiAgICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgICByZW1vdmUkJDEoZXZlbnQubmFtZSwgb2xkT25bbmFtZV0sIGV2ZW50LmNhcHR1cmUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gbWVyZ2VWTm9kZUhvb2sgKGRlZiwgaG9va0tleSwgaG9vaykge1xuICB2YXIgaW52b2tlcjtcbiAgdmFyIG9sZEhvb2sgPSBkZWZbaG9va0tleV07XG5cbiAgZnVuY3Rpb24gd3JhcHBlZEhvb2sgKCkge1xuICAgIGhvb2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAvLyBpbXBvcnRhbnQ6IHJlbW92ZSBtZXJnZWQgaG9vayB0byBlbnN1cmUgaXQncyBjYWxsZWQgb25seSBvbmNlXG4gICAgLy8gYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtcbiAgICByZW1vdmUoaW52b2tlci5mbnMsIHdyYXBwZWRIb29rKTtcbiAgfVxuXG4gIGlmIChpc1VuZGVmKG9sZEhvb2spKSB7XG4gICAgLy8gbm8gZXhpc3RpbmcgaG9va1xuICAgIGludm9rZXIgPSBjcmVhdGVGbkludm9rZXIoW3dyYXBwZWRIb29rXSk7XG4gIH0gZWxzZSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGlzRGVmKG9sZEhvb2suZm5zKSAmJiBpc1RydWUob2xkSG9vay5tZXJnZWQpKSB7XG4gICAgICAvLyBhbHJlYWR5IGEgbWVyZ2VkIGludm9rZXJcbiAgICAgIGludm9rZXIgPSBvbGRIb29rO1xuICAgICAgaW52b2tlci5mbnMucHVzaCh3cmFwcGVkSG9vayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGV4aXN0aW5nIHBsYWluIGhvb2tcbiAgICAgIGludm9rZXIgPSBjcmVhdGVGbkludm9rZXIoW29sZEhvb2ssIHdyYXBwZWRIb29rXSk7XG4gICAgfVxuICB9XG5cbiAgaW52b2tlci5tZXJnZWQgPSB0cnVlO1xuICBkZWZbaG9va0tleV0gPSBpbnZva2VyO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YSAoXG4gIGRhdGEsXG4gIEN0b3IsXG4gIHRhZ1xuKSB7XG4gIC8vIHdlIGFyZSBvbmx5IGV4dHJhY3RpbmcgcmF3IHZhbHVlcyBoZXJlLlxuICAvLyB2YWxpZGF0aW9uIGFuZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFuZGxlZCBpbiB0aGUgY2hpbGRcbiAgLy8gY29tcG9uZW50IGl0c2VsZi5cbiAgdmFyIHByb3BPcHRpb25zID0gQ3Rvci5vcHRpb25zLnByb3BzO1xuICBpZiAoaXNVbmRlZihwcm9wT3B0aW9ucykpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgcmVzID0ge307XG4gIHZhciBhdHRycyA9IGRhdGEuYXR0cnM7XG4gIHZhciBwcm9wcyA9IGRhdGEucHJvcHM7XG4gIGlmIChpc0RlZihhdHRycykgfHwgaXNEZWYocHJvcHMpKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BPcHRpb25zKSB7XG4gICAgICB2YXIgYWx0S2V5ID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YXIga2V5SW5Mb3dlckNhc2UgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSAhPT0ga2V5SW5Mb3dlckNhc2UgJiZcbiAgICAgICAgICBhdHRycyAmJiBoYXNPd24oYXR0cnMsIGtleUluTG93ZXJDYXNlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aXAoXG4gICAgICAgICAgICBcIlByb3AgXFxcIlwiICsga2V5SW5Mb3dlckNhc2UgKyBcIlxcXCIgaXMgcGFzc2VkIHRvIGNvbXBvbmVudCBcIiArXG4gICAgICAgICAgICAoZm9ybWF0Q29tcG9uZW50TmFtZSh0YWcgfHwgQ3RvcikpICsgXCIsIGJ1dCB0aGUgZGVjbGFyZWQgcHJvcCBuYW1lIGlzXCIgK1xuICAgICAgICAgICAgXCIgXFxcIlwiICsga2V5ICsgXCJcXFwiLiBcIiArXG4gICAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIGNhbWVsQ2FzZWQgXCIgK1xuICAgICAgICAgICAgXCJwcm9wcyBuZWVkIHRvIHVzZSB0aGVpciBrZWJhYi1jYXNlIGVxdWl2YWxlbnRzIHdoZW4gdXNpbmcgaW4tRE9NIFwiICtcbiAgICAgICAgICAgIFwidGVtcGxhdGVzLiBZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIgKyBhbHRLZXkgKyBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjaGVja1Byb3AocmVzLCBwcm9wcywga2V5LCBhbHRLZXksIHRydWUpIHx8XG4gICAgICBjaGVja1Byb3AocmVzLCBhdHRycywga2V5LCBhbHRLZXksIGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBjaGVja1Byb3AgKFxuICByZXMsXG4gIGhhc2gsXG4gIGtleSxcbiAgYWx0S2V5LFxuICBwcmVzZXJ2ZVxuKSB7XG4gIGlmIChpc0RlZihoYXNoKSkge1xuICAgIGlmIChoYXNPd24oaGFzaCwga2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBoYXNoW2tleV07XG4gICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgIGRlbGV0ZSBoYXNoW2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoaGFzT3duKGhhc2gsIGFsdEtleSkpIHtcbiAgICAgIHJlc1trZXldID0gaGFzaFthbHRLZXldO1xuICAgICAgaWYgKCFwcmVzZXJ2ZSkge1xuICAgICAgICBkZWxldGUgaGFzaFthbHRLZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qICAqL1xuXG4vLyBUaGUgdGVtcGxhdGUgY29tcGlsZXIgYXR0ZW1wdHMgdG8gbWluaW1pemUgdGhlIG5lZWQgZm9yIG5vcm1hbGl6YXRpb24gYnlcbi8vIHN0YXRpY2FsbHkgYW5hbHl6aW5nIHRoZSB0ZW1wbGF0ZSBhdCBjb21waWxlIHRpbWUuXG4vL1xuLy8gRm9yIHBsYWluIEhUTUwgbWFya3VwLCBub3JtYWxpemF0aW9uIGNhbiBiZSBjb21wbGV0ZWx5IHNraXBwZWQgYmVjYXVzZSB0aGVcbi8vIGdlbmVyYXRlZCByZW5kZXIgZnVuY3Rpb24gaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gQXJyYXk8Vk5vZGU+LiBUaGVyZSBhcmVcbi8vIHR3byBjYXNlcyB3aGVyZSBleHRyYSBub3JtYWxpemF0aW9uIGlzIG5lZWRlZDpcblxuLy8gMS4gV2hlbiB0aGUgY2hpbGRyZW4gY29udGFpbnMgY29tcG9uZW50cyAtIGJlY2F1c2UgYSBmdW5jdGlvbmFsIGNvbXBvbmVudFxuLy8gbWF5IHJldHVybiBhbiBBcnJheSBpbnN0ZWFkIG9mIGEgc2luZ2xlIHJvb3QuIEluIHRoaXMgY2FzZSwganVzdCBhIHNpbXBsZVxuLy8gbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQgLSBpZiBhbnkgY2hpbGQgaXMgYW4gQXJyYXksIHdlIGZsYXR0ZW4gdGhlIHdob2xlXG4vLyB0aGluZyB3aXRoIEFycmF5LnByb3RvdHlwZS5jb25jYXQuIEl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgb25seSAxLWxldmVsIGRlZXBcbi8vIGJlY2F1c2UgZnVuY3Rpb25hbCBjb21wb25lbnRzIGFscmVhZHkgbm9ybWFsaXplIHRoZWlyIG93biBjaGlsZHJlbi5cbmZ1bmN0aW9uIHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuIChjaGlsZHJlbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW5baV0pKSB7XG4gICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgY2hpbGRyZW4pXG4gICAgfVxuICB9XG4gIHJldHVybiBjaGlsZHJlblxufVxuXG4vLyAyLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb25zdHJ1Y3RzIHRoYXQgYWx3YXlzIGdlbmVyYXRlZCBuZXN0ZWQgQXJyYXlzLFxuLy8gZS5nLiA8dGVtcGxhdGU+LCA8c2xvdD4sIHYtZm9yLCBvciB3aGVuIHRoZSBjaGlsZHJlbiBpcyBwcm92aWRlZCBieSB1c2VyXG4vLyB3aXRoIGhhbmQtd3JpdHRlbiByZW5kZXIgZnVuY3Rpb25zIC8gSlNYLiBJbiBzdWNoIGNhc2VzIGEgZnVsbCBub3JtYWxpemF0aW9uXG4vLyBpcyBuZWVkZWQgdG8gY2F0ZXIgdG8gYWxsIHBvc3NpYmxlIHR5cGVzIG9mIGNoaWxkcmVuIHZhbHVlcy5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNoaWxkcmVuIChjaGlsZHJlbikge1xuICByZXR1cm4gaXNQcmltaXRpdmUoY2hpbGRyZW4pXG4gICAgPyBbY3JlYXRlVGV4dFZOb2RlKGNoaWxkcmVuKV1cbiAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pXG4gICAgICA/IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oY2hpbGRyZW4pXG4gICAgICA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBpc1RleHROb2RlIChub2RlKSB7XG4gIHJldHVybiBpc0RlZihub2RlKSAmJiBpc0RlZihub2RlLnRleHQpICYmIGlzRmFsc2Uobm9kZS5pc0NvbW1lbnQpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4gKGNoaWxkcmVuLCBuZXN0ZWRJbmRleCkge1xuICB2YXIgcmVzID0gW107XG4gIHZhciBpLCBjLCBsYXN0SW5kZXgsIGxhc3Q7XG4gIGZvciAoaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIGMgPSBjaGlsZHJlbltpXTtcbiAgICBpZiAoaXNVbmRlZihjKSB8fCB0eXBlb2YgYyA9PT0gJ2Jvb2xlYW4nKSB7IGNvbnRpbnVlIH1cbiAgICBsYXN0SW5kZXggPSByZXMubGVuZ3RoIC0gMTtcbiAgICBsYXN0ID0gcmVzW2xhc3RJbmRleF07XG4gICAgLy8gIG5lc3RlZFxuICAgIGlmIChBcnJheS5pc0FycmF5KGMpKSB7XG4gICAgICBpZiAoYy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGMgPSBub3JtYWxpemVBcnJheUNoaWxkcmVuKGMsICgobmVzdGVkSW5kZXggfHwgJycpICsgXCJfXCIgKyBpKSk7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgaWYgKGlzVGV4dE5vZGUoY1swXSkgJiYgaXNUZXh0Tm9kZShsYXN0KSkge1xuICAgICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIChjWzBdKS50ZXh0KTtcbiAgICAgICAgICBjLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzLnB1c2guYXBwbHkocmVzLCBjKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzUHJpbWl0aXZlKGMpKSB7XG4gICAgICBpZiAoaXNUZXh0Tm9kZShsYXN0KSkge1xuICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgIC8vIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBTU1IgaHlkcmF0aW9uIGJlY2F1c2UgdGV4dCBub2RlcyBhcmVcbiAgICAgICAgLy8gZXNzZW50aWFsbHkgbWVyZ2VkIHdoZW4gcmVuZGVyZWQgdG8gSFRNTCBzdHJpbmdzXG4gICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIGMpO1xuICAgICAgfSBlbHNlIGlmIChjICE9PSAnJykge1xuICAgICAgICAvLyBjb252ZXJ0IHByaW1pdGl2ZSB0byB2bm9kZVxuICAgICAgICByZXMucHVzaChjcmVhdGVUZXh0Vk5vZGUoYykpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNUZXh0Tm9kZShjKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYy50ZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlZmF1bHQga2V5IGZvciBuZXN0ZWQgYXJyYXkgY2hpbGRyZW4gKGxpa2VseSBnZW5lcmF0ZWQgYnkgdi1mb3IpXG4gICAgICAgIGlmIChpc1RydWUoY2hpbGRyZW4uX2lzVkxpc3QpICYmXG4gICAgICAgICAgaXNEZWYoYy50YWcpICYmXG4gICAgICAgICAgaXNVbmRlZihjLmtleSkgJiZcbiAgICAgICAgICBpc0RlZihuZXN0ZWRJbmRleCkpIHtcbiAgICAgICAgICBjLmtleSA9IFwiX192bGlzdFwiICsgbmVzdGVkSW5kZXggKyBcIl9cIiArIGkgKyBcIl9fXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmVzLnB1c2goYyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGVuc3VyZUN0b3IgKGNvbXAsIGJhc2UpIHtcbiAgaWYgKFxuICAgIGNvbXAuX19lc01vZHVsZSB8fFxuICAgIChoYXNTeW1ib2wgJiYgY29tcFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnTW9kdWxlJylcbiAgKSB7XG4gICAgY29tcCA9IGNvbXAuZGVmYXVsdDtcbiAgfVxuICByZXR1cm4gaXNPYmplY3QoY29tcClcbiAgICA/IGJhc2UuZXh0ZW5kKGNvbXApXG4gICAgOiBjb21wXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFzeW5jUGxhY2Vob2xkZXIgKFxuICBmYWN0b3J5LFxuICBkYXRhLFxuICBjb250ZXh0LFxuICBjaGlsZHJlbixcbiAgdGFnXG4pIHtcbiAgdmFyIG5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gIG5vZGUuYXN5bmNGYWN0b3J5ID0gZmFjdG9yeTtcbiAgbm9kZS5hc3luY01ldGEgPSB7IGRhdGE6IGRhdGEsIGNvbnRleHQ6IGNvbnRleHQsIGNoaWxkcmVuOiBjaGlsZHJlbiwgdGFnOiB0YWcgfTtcbiAgcmV0dXJuIG5vZGVcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFzeW5jQ29tcG9uZW50IChcbiAgZmFjdG9yeSxcbiAgYmFzZUN0b3IsXG4gIGNvbnRleHRcbikge1xuICBpZiAoaXNUcnVlKGZhY3RvcnkuZXJyb3IpICYmIGlzRGVmKGZhY3RvcnkuZXJyb3JDb21wKSkge1xuICAgIHJldHVybiBmYWN0b3J5LmVycm9yQ29tcFxuICB9XG5cbiAgaWYgKGlzRGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgcmV0dXJuIGZhY3RvcnkucmVzb2x2ZWRcbiAgfVxuXG4gIGlmIChpc1RydWUoZmFjdG9yeS5sb2FkaW5nKSAmJiBpc0RlZihmYWN0b3J5LmxvYWRpbmdDb21wKSkge1xuICAgIHJldHVybiBmYWN0b3J5LmxvYWRpbmdDb21wXG4gIH1cblxuICBpZiAoaXNEZWYoZmFjdG9yeS5jb250ZXh0cykpIHtcbiAgICAvLyBhbHJlYWR5IHBlbmRpbmdcbiAgICBmYWN0b3J5LmNvbnRleHRzLnB1c2goY29udGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNvbnRleHRzID0gZmFjdG9yeS5jb250ZXh0cyA9IFtjb250ZXh0XTtcbiAgICB2YXIgc3luYyA9IHRydWU7XG5cbiAgICB2YXIgZm9yY2VSZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGNvbnRleHRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb250ZXh0c1tpXS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIHJlc29sdmUgPSBvbmNlKGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgIC8vIGNhY2hlIHJlc29sdmVkXG4gICAgICBmYWN0b3J5LnJlc29sdmVkID0gZW5zdXJlQ3RvcihyZXMsIGJhc2VDdG9yKTtcbiAgICAgIC8vIGludm9rZSBjYWxsYmFja3Mgb25seSBpZiB0aGlzIGlzIG5vdCBhIHN5bmNocm9ub3VzIHJlc29sdmVcbiAgICAgIC8vIChhc3luYyByZXNvbHZlcyBhcmUgc2hpbW1lZCBhcyBzeW5jaHJvbm91cyBkdXJpbmcgU1NSKVxuICAgICAgaWYgKCFzeW5jKSB7XG4gICAgICAgIGZvcmNlUmVuZGVyKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgcmVqZWN0ID0gb25jZShmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiRmFpbGVkIHRvIHJlc29sdmUgYXN5bmMgY29tcG9uZW50OiBcIiArIChTdHJpbmcoZmFjdG9yeSkpICtcbiAgICAgICAgKHJlYXNvbiA/IChcIlxcblJlYXNvbjogXCIgKyByZWFzb24pIDogJycpXG4gICAgICApO1xuICAgICAgaWYgKGlzRGVmKGZhY3RvcnkuZXJyb3JDb21wKSkge1xuICAgICAgICBmYWN0b3J5LmVycm9yID0gdHJ1ZTtcbiAgICAgICAgZm9yY2VSZW5kZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciByZXMgPSBmYWN0b3J5KHJlc29sdmUsIHJlamVjdCk7XG5cbiAgICBpZiAoaXNPYmplY3QocmVzKSkge1xuICAgICAgaWYgKHR5cGVvZiByZXMudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyAoKSA9PiBQcm9taXNlXG4gICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgcmVzLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0RlZihyZXMuY29tcG9uZW50KSAmJiB0eXBlb2YgcmVzLmNvbXBvbmVudC50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlcy5jb21wb25lbnQudGhlbihyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgIGlmIChpc0RlZihyZXMuZXJyb3IpKSB7XG4gICAgICAgICAgZmFjdG9yeS5lcnJvckNvbXAgPSBlbnN1cmVDdG9yKHJlcy5lcnJvciwgYmFzZUN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy5sb2FkaW5nKSkge1xuICAgICAgICAgIGZhY3RvcnkubG9hZGluZ0NvbXAgPSBlbnN1cmVDdG9yKHJlcy5sb2FkaW5nLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgaWYgKHJlcy5kZWxheSA9PT0gMCkge1xuICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpICYmIGlzVW5kZWYoZmFjdG9yeS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHJlcy5kZWxheSB8fCAyMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0RlZihyZXMudGltZW91dCkpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgICAgICAgICAgICA/IChcInRpbWVvdXQgKFwiICsgKHJlcy50aW1lb3V0KSArIFwibXMpXCIpXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCByZXMudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzeW5jID0gZmFsc2U7XG4gICAgLy8gcmV0dXJuIGluIGNhc2UgcmVzb2x2ZWQgc3luY2hyb25vdXNseVxuICAgIHJldHVybiBmYWN0b3J5LmxvYWRpbmdcbiAgICAgID8gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICAgICAgOiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzQXN5bmNQbGFjZWhvbGRlciAobm9kZSkge1xuICByZXR1cm4gbm9kZS5pc0NvbW1lbnQgJiYgbm9kZS5hc3luY0ZhY3Rvcnlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGdldEZpcnN0Q29tcG9uZW50Q2hpbGQgKGNoaWxkcmVuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoaXNEZWYoYykgJiYgKGlzRGVmKGMuY29tcG9uZW50T3B0aW9ucykgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpKSkge1xuICAgICAgICByZXR1cm4gY1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRFdmVudHMgKHZtKSB7XG4gIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2bS5faGFzSG9va0V2ZW50ID0gZmFsc2U7XG4gIC8vIGluaXQgcGFyZW50IGF0dGFjaGVkIGV2ZW50c1xuICB2YXIgbGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgaWYgKGxpc3RlbmVycykge1xuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzKTtcbiAgfVxufVxuXG52YXIgdGFyZ2V0O1xuXG5mdW5jdGlvbiBhZGQgKGV2ZW50LCBmbiwgb25jZSkge1xuICBpZiAob25jZSkge1xuICAgIHRhcmdldC4kb25jZShldmVudCwgZm4pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldC4kb24oZXZlbnQsIGZuKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmUkMSAoZXZlbnQsIGZuKSB7XG4gIHRhcmdldC4kb2ZmKGV2ZW50LCBmbik7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyAoXG4gIHZtLFxuICBsaXN0ZW5lcnMsXG4gIG9sZExpc3RlbmVyc1xuKSB7XG4gIHRhcmdldCA9IHZtO1xuICB1cGRhdGVMaXN0ZW5lcnMobGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMgfHwge30sIGFkZCwgcmVtb3ZlJDEsIHZtKTtcbn1cblxuZnVuY3Rpb24gZXZlbnRzTWl4aW4gKFZ1ZSkge1xuICB2YXIgaG9va1JFID0gL15ob29rOi87XG4gIFZ1ZS5wcm90b3R5cGUuJG9uID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHRoaXMkMS4kb24oZXZlbnRbaV0sIGZuKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgKHZtLl9ldmVudHNbZXZlbnRdIHx8ICh2bS5fZXZlbnRzW2V2ZW50XSA9IFtdKSkucHVzaChmbik7XG4gICAgICAvLyBvcHRpbWl6ZSBob29rOmV2ZW50IGNvc3QgYnkgdXNpbmcgYSBib29sZWFuIGZsYWcgbWFya2VkIGF0IHJlZ2lzdHJhdGlvblxuICAgICAgLy8gaW5zdGVhZCBvZiBhIGhhc2ggbG9va3VwXG4gICAgICBpZiAoaG9va1JFLnRlc3QoZXZlbnQpKSB7XG4gICAgICAgIHZtLl9oYXNIb29rRXZlbnQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRvbmNlID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgZnVuY3Rpb24gb24gKCkge1xuICAgICAgdm0uJG9mZihldmVudCwgb24pO1xuICAgICAgZm4uYXBwbHkodm0sIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIG9uLmZuID0gZm47XG4gICAgdm0uJG9uKGV2ZW50LCBvbik7XG4gICAgcmV0dXJuIHZtXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kb2ZmID0gZnVuY3Rpb24gKGV2ZW50LCBmbikge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhbGxcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIC8vIGFycmF5IG9mIGV2ZW50c1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBldmVudC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdGhpcyQxLiRvZmYoZXZlbnRbaV0sIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICAvLyBzcGVjaWZpYyBldmVudFxuICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICBpZiAoIWNicykge1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB2bS5fZXZlbnRzW2V2ZW50XSA9IG51bGw7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgaWYgKGZuKSB7XG4gICAgICAvLyBzcGVjaWZpYyBoYW5kbGVyXG4gICAgICB2YXIgY2I7XG4gICAgICB2YXIgaSQxID0gY2JzLmxlbmd0aDtcbiAgICAgIHdoaWxlIChpJDEtLSkge1xuICAgICAgICBjYiA9IGNic1tpJDFdO1xuICAgICAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgICAgIGNicy5zcGxpY2UoaSQxLCAxKTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGVtaXQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbG93ZXJDYXNlRXZlbnQgPSBldmVudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGxvd2VyQ2FzZUV2ZW50ICE9PSBldmVudCAmJiB2bS5fZXZlbnRzW2xvd2VyQ2FzZUV2ZW50XSkge1xuICAgICAgICB0aXAoXG4gICAgICAgICAgXCJFdmVudCBcXFwiXCIgKyBsb3dlckNhc2VFdmVudCArIFwiXFxcIiBpcyBlbWl0dGVkIGluIGNvbXBvbmVudCBcIiArXG4gICAgICAgICAgKGZvcm1hdENvbXBvbmVudE5hbWUodm0pKSArIFwiIGJ1dCB0aGUgaGFuZGxlciBpcyByZWdpc3RlcmVkIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIi4gXCIgK1xuICAgICAgICAgIFwiTm90ZSB0aGF0IEhUTUwgYXR0cmlidXRlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgeW91IGNhbm5vdCB1c2UgXCIgK1xuICAgICAgICAgIFwidi1vbiB0byBsaXN0ZW4gdG8gY2FtZWxDYXNlIGV2ZW50cyB3aGVuIHVzaW5nIGluLURPTSB0ZW1wbGF0ZXMuIFwiICtcbiAgICAgICAgICBcIllvdSBzaG91bGQgcHJvYmFibHkgdXNlIFxcXCJcIiArIChoeXBoZW5hdGUoZXZlbnQpKSArIFwiXFxcIiBpbnN0ZWFkIG9mIFxcXCJcIiArIGV2ZW50ICsgXCJcXFwiLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBjYnMgPSB2bS5fZXZlbnRzW2V2ZW50XTtcbiAgICBpZiAoY2JzKSB7XG4gICAgICBjYnMgPSBjYnMubGVuZ3RoID4gMSA/IHRvQXJyYXkoY2JzKSA6IGNicztcbiAgICAgIHZhciBhcmdzID0gdG9BcnJheShhcmd1bWVudHMsIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2JzW2ldLmFwcGx5KHZtLCBhcmdzKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCAoXCJldmVudCBoYW5kbGVyIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZXNvbHZpbmcgcmF3IGNoaWxkcmVuIFZOb2RlcyBpbnRvIGEgc2xvdCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTbG90cyAoXG4gIGNoaWxkcmVuLFxuICBjb250ZXh0XG4pIHtcbiAgdmFyIHNsb3RzID0ge307XG4gIGlmICghY2hpbGRyZW4pIHtcbiAgICByZXR1cm4gc2xvdHNcbiAgfVxuICB2YXIgZGVmYXVsdFNsb3QgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICB2YXIgZGF0YSA9IGNoaWxkLmRhdGE7XG4gICAgLy8gcmVtb3ZlIHNsb3QgYXR0cmlidXRlIGlmIHRoZSBub2RlIGlzIHJlc29sdmVkIGFzIGEgVnVlIHNsb3Qgbm9kZVxuICAgIGlmIChkYXRhICYmIGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy5zbG90KSB7XG4gICAgICBkZWxldGUgZGF0YS5hdHRycy5zbG90O1xuICAgIH1cbiAgICAvLyBuYW1lZCBzbG90cyBzaG91bGQgb25seSBiZSByZXNwZWN0ZWQgaWYgdGhlIHZub2RlIHdhcyByZW5kZXJlZCBpbiB0aGVcbiAgICAvLyBzYW1lIGNvbnRleHQuXG4gICAgaWYgKChjaGlsZC5jb250ZXh0ID09PSBjb250ZXh0IHx8IGNoaWxkLmZ1bmN0aW9uYWxDb250ZXh0ID09PSBjb250ZXh0KSAmJlxuICAgICAgZGF0YSAmJiBkYXRhLnNsb3QgIT0gbnVsbFxuICAgICkge1xuICAgICAgdmFyIG5hbWUgPSBjaGlsZC5kYXRhLnNsb3Q7XG4gICAgICB2YXIgc2xvdCA9IChzbG90c1tuYW1lXSB8fCAoc2xvdHNbbmFtZV0gPSBbXSkpO1xuICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICBzbG90LnB1c2guYXBwbHkoc2xvdCwgY2hpbGQuY2hpbGRyZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xvdC5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVmYXVsdFNsb3QucHVzaChjaGlsZCk7XG4gICAgfVxuICB9XG4gIC8vIGlnbm9yZSB3aGl0ZXNwYWNlXG4gIGlmICghZGVmYXVsdFNsb3QuZXZlcnkoaXNXaGl0ZXNwYWNlKSkge1xuICAgIHNsb3RzLmRlZmF1bHQgPSBkZWZhdWx0U2xvdDtcbiAgfVxuICByZXR1cm4gc2xvdHNcbn1cblxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlIChub2RlKSB7XG4gIHJldHVybiBub2RlLmlzQ29tbWVudCB8fCBub2RlLnRleHQgPT09ICcgJ1xufVxuXG5mdW5jdGlvbiByZXNvbHZlU2NvcGVkU2xvdHMgKFxuICBmbnMsIC8vIHNlZSBmbG93L3Zub2RlXG4gIHJlc1xuKSB7XG4gIHJlcyA9IHJlcyB8fCB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmbnNbaV0pKSB7XG4gICAgICByZXNvbHZlU2NvcGVkU2xvdHMoZm5zW2ldLCByZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNbZm5zW2ldLmtleV0gPSBmbnNbaV0uZm47XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbnZhciBhY3RpdmVJbnN0YW5jZSA9IG51bGw7XG52YXIgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGluaXRMaWZlY3ljbGUgKHZtKSB7XG4gIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG5cbiAgLy8gbG9jYXRlIGZpcnN0IG5vbi1hYnN0cmFjdCBwYXJlbnRcbiAgdmFyIHBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICBpZiAocGFyZW50ICYmICFvcHRpb25zLmFic3RyYWN0KSB7XG4gICAgd2hpbGUgKHBhcmVudC4kb3B0aW9ucy5hYnN0cmFjdCAmJiBwYXJlbnQuJHBhcmVudCkge1xuICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgfVxuICAgIHBhcmVudC4kY2hpbGRyZW4ucHVzaCh2bSk7XG4gIH1cblxuICB2bS4kcGFyZW50ID0gcGFyZW50O1xuICB2bS4kcm9vdCA9IHBhcmVudCA/IHBhcmVudC4kcm9vdCA6IHZtO1xuXG4gIHZtLiRjaGlsZHJlbiA9IFtdO1xuICB2bS4kcmVmcyA9IHt9O1xuXG4gIHZtLl93YXRjaGVyID0gbnVsbDtcbiAgdm0uX2luYWN0aXZlID0gbnVsbDtcbiAgdm0uX2RpcmVjdEluYWN0aXZlID0gZmFsc2U7XG4gIHZtLl9pc01vdW50ZWQgPSBmYWxzZTtcbiAgdm0uX2lzRGVzdHJveWVkID0gZmFsc2U7XG4gIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxpZmVjeWNsZU1peGluIChWdWUpIHtcbiAgVnVlLnByb3RvdHlwZS5fdXBkYXRlID0gZnVuY3Rpb24gKHZub2RlLCBoeWRyYXRpbmcpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5faXNNb3VudGVkKSB7XG4gICAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZVVwZGF0ZScpO1xuICAgIH1cbiAgICB2YXIgcHJldkVsID0gdm0uJGVsO1xuICAgIHZhciBwcmV2Vm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgdmFyIHByZXZBY3RpdmVJbnN0YW5jZSA9IGFjdGl2ZUluc3RhbmNlO1xuICAgIGFjdGl2ZUluc3RhbmNlID0gdm07XG4gICAgdm0uX3Zub2RlID0gdm5vZGU7XG4gICAgLy8gVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gaXMgaW5qZWN0ZWQgaW4gZW50cnkgcG9pbnRzXG4gICAgLy8gYmFzZWQgb24gdGhlIHJlbmRlcmluZyBiYWNrZW5kIHVzZWQuXG4gICAgaWYgKCFwcmV2Vm5vZGUpIHtcbiAgICAgIC8vIGluaXRpYWwgcmVuZGVyXG4gICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18oXG4gICAgICAgIHZtLiRlbCwgdm5vZGUsIGh5ZHJhdGluZywgZmFsc2UgLyogcmVtb3ZlT25seSAqLyxcbiAgICAgICAgdm0uJG9wdGlvbnMuX3BhcmVudEVsbSxcbiAgICAgICAgdm0uJG9wdGlvbnMuX3JlZkVsbVxuICAgICAgKTtcbiAgICAgIC8vIG5vIG5lZWQgZm9yIHRoZSByZWYgbm9kZXMgYWZ0ZXIgaW5pdGlhbCBwYXRjaFxuICAgICAgLy8gdGhpcyBwcmV2ZW50cyBrZWVwaW5nIGEgZGV0YWNoZWQgRE9NIHRyZWUgaW4gbWVtb3J5ICgjNTg1MSlcbiAgICAgIHZtLiRvcHRpb25zLl9wYXJlbnRFbG0gPSB2bS4kb3B0aW9ucy5fcmVmRWxtID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlc1xuICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHByZXZWbm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICBhY3RpdmVJbnN0YW5jZSA9IHByZXZBY3RpdmVJbnN0YW5jZTtcbiAgICAvLyB1cGRhdGUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAocHJldkVsKSB7XG4gICAgICBwcmV2RWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIGlmICh2bS4kZWwpIHtcbiAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgfVxuICAgIC8vIGlmIHBhcmVudCBpcyBhbiBIT0MsIHVwZGF0ZSBpdHMgJGVsIGFzIHdlbGxcbiAgICBpZiAodm0uJHZub2RlICYmIHZtLiRwYXJlbnQgJiYgdm0uJHZub2RlID09PSB2bS4kcGFyZW50Ll92bm9kZSkge1xuICAgICAgdm0uJHBhcmVudC4kZWwgPSB2bS4kZWw7XG4gICAgfVxuICAgIC8vIHVwZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGlsZHJlbiBhcmVcbiAgICAvLyB1cGRhdGVkIGluIGEgcGFyZW50J3MgdXBkYXRlZCBob29rLlxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci51cGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlRGVzdHJveScpO1xuICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHBhcmVudFxuICAgIHZhciBwYXJlbnQgPSB2bS4kcGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC5faXNCZWluZ0Rlc3Ryb3llZCAmJiAhdm0uJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgIHJlbW92ZShwYXJlbnQuJGNoaWxkcmVuLCB2bSk7XG4gICAgfVxuICAgIC8vIHRlYXJkb3duIHdhdGNoZXJzXG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci50ZWFyZG93bigpO1xuICAgIH1cbiAgICB2YXIgaSA9IHZtLl93YXRjaGVycy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdm0uX3dhdGNoZXJzW2ldLnRlYXJkb3duKCk7XG4gICAgfVxuICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgZnJvbSBkYXRhIG9iXG4gICAgLy8gZnJvemVuIG9iamVjdCBtYXkgbm90IGhhdmUgb2JzZXJ2ZXIuXG4gICAgaWYgKHZtLl9kYXRhLl9fb2JfXykge1xuICAgICAgdm0uX2RhdGEuX19vYl9fLnZtQ291bnQtLTtcbiAgICB9XG4gICAgLy8gY2FsbCB0aGUgbGFzdCBob29rLi4uXG4gICAgdm0uX2lzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyBpbnZva2UgZGVzdHJveSBob29rcyBvbiBjdXJyZW50IHJlbmRlcmVkIHRyZWVcbiAgICB2bS5fX3BhdGNoX18odm0uX3Zub2RlLCBudWxsKTtcbiAgICAvLyBmaXJlIGRlc3Ryb3llZCBob29rXG4gICAgY2FsbEhvb2sodm0sICdkZXN0cm95ZWQnKTtcbiAgICAvLyB0dXJuIG9mZiBhbGwgaW5zdGFuY2UgbGlzdGVuZXJzLlxuICAgIHZtLiRvZmYoKTtcbiAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAodm0uJGVsKSB7XG4gICAgICB2bS4kZWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIC8vIHJlbGVhc2UgY2lyY3VsYXIgcmVmZXJlbmNlICgjNjc1OSlcbiAgICBpZiAodm0uJHZub2RlKSB7XG4gICAgICB2bS4kdm5vZGUucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50IChcbiAgdm0sXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICB2bS4kZWwgPSBlbDtcbiAgaWYgKCF2bS4kb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2bS4kb3B0aW9ucy5yZW5kZXIgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICgodm0uJG9wdGlvbnMudGVtcGxhdGUgJiYgdm0uJG9wdGlvbnMudGVtcGxhdGUuY2hhckF0KDApICE9PSAnIycpIHx8XG4gICAgICAgIHZtLiRvcHRpb25zLmVsIHx8IGVsKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ1lvdSBhcmUgdXNpbmcgdGhlIHJ1bnRpbWUtb25seSBidWlsZCBvZiBWdWUgd2hlcmUgdGhlIHRlbXBsYXRlICcgK1xuICAgICAgICAgICdjb21waWxlciBpcyBub3QgYXZhaWxhYmxlLiBFaXRoZXIgcHJlLWNvbXBpbGUgdGhlIHRlbXBsYXRlcyBpbnRvICcgK1xuICAgICAgICAgICdyZW5kZXIgZnVuY3Rpb25zLCBvciB1c2UgdGhlIGNvbXBpbGVyLWluY2x1ZGVkIGJ1aWxkLicsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ0ZhaWxlZCB0byBtb3VudCBjb21wb25lbnQ6IHRlbXBsYXRlIG9yIHJlbmRlciBmdW5jdGlvbiBub3QgZGVmaW5lZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbGxIb29rKHZtLCAnYmVmb3JlTW91bnQnKTtcblxuICB2YXIgdXBkYXRlQ29tcG9uZW50O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbmFtZSA9IHZtLl9uYW1lO1xuICAgICAgdmFyIGlkID0gdm0uX3VpZDtcbiAgICAgIHZhciBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIgKyBpZDtcbiAgICAgIHZhciBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIiArIGlkO1xuXG4gICAgICBtYXJrKHN0YXJ0VGFnKTtcbiAgICAgIHZhciB2bm9kZSA9IHZtLl9yZW5kZXIoKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHJlbmRlclwiKSwgc3RhcnRUYWcsIGVuZFRhZyk7XG5cbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgICAgdm0uX3VwZGF0ZSh2bm9kZSwgaHlkcmF0aW5nKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgbmFtZSArIFwiIHBhdGNoXCIpLCBzdGFydFRhZywgZW5kVGFnKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZUNvbXBvbmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZtLl91cGRhdGUodm0uX3JlbmRlcigpLCBoeWRyYXRpbmcpO1xuICAgIH07XG4gIH1cblxuICB2bS5fd2F0Y2hlciA9IG5ldyBXYXRjaGVyKHZtLCB1cGRhdGVDb21wb25lbnQsIG5vb3ApO1xuICBoeWRyYXRpbmcgPSBmYWxzZTtcblxuICAvLyBtYW51YWxseSBtb3VudGVkIGluc3RhbmNlLCBjYWxsIG1vdW50ZWQgb24gc2VsZlxuICAvLyBtb3VudGVkIGlzIGNhbGxlZCBmb3IgcmVuZGVyLWNyZWF0ZWQgY2hpbGQgY29tcG9uZW50cyBpbiBpdHMgaW5zZXJ0ZWQgaG9va1xuICBpZiAodm0uJHZub2RlID09IG51bGwpIHtcbiAgICB2bS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICBjYWxsSG9vayh2bSwgJ21vdW50ZWQnKTtcbiAgfVxuICByZXR1cm4gdm1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2hpbGRDb21wb25lbnQgKFxuICB2bSxcbiAgcHJvcHNEYXRhLFxuICBsaXN0ZW5lcnMsXG4gIHBhcmVudFZub2RlLFxuICByZW5kZXJDaGlsZHJlblxuKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaXNVcGRhdGluZ0NoaWxkQ29tcG9uZW50ID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIGRldGVybWluZSB3aGV0aGVyIGNvbXBvbmVudCBoYXMgc2xvdCBjaGlsZHJlblxuICAvLyB3ZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIG92ZXJ3cml0aW5nICRvcHRpb25zLl9yZW5kZXJDaGlsZHJlblxuICB2YXIgaGFzQ2hpbGRyZW4gPSAhIShcbiAgICByZW5kZXJDaGlsZHJlbiB8fCAgICAgICAgICAgICAgIC8vIGhhcyBuZXcgc3RhdGljIHNsb3RzXG4gICAgdm0uJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuIHx8ICAvLyBoYXMgb2xkIHN0YXRpYyBzbG90c1xuICAgIHBhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHMgfHwgLy8gaGFzIG5ldyBzY29wZWQgc2xvdHNcbiAgICB2bS4kc2NvcGVkU2xvdHMgIT09IGVtcHR5T2JqZWN0IC8vIGhhcyBvbGQgc2NvcGVkIHNsb3RzXG4gICk7XG5cbiAgdm0uJG9wdGlvbnMuX3BhcmVudFZub2RlID0gcGFyZW50Vm5vZGU7XG4gIHZtLiR2bm9kZSA9IHBhcmVudFZub2RlOyAvLyB1cGRhdGUgdm0ncyBwbGFjZWhvbGRlciBub2RlIHdpdGhvdXQgcmUtcmVuZGVyXG5cbiAgaWYgKHZtLl92bm9kZSkgeyAvLyB1cGRhdGUgY2hpbGQgdHJlZSdzIHBhcmVudFxuICAgIHZtLl92bm9kZS5wYXJlbnQgPSBwYXJlbnRWbm9kZTtcbiAgfVxuICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gPSByZW5kZXJDaGlsZHJlbjtcblxuICAvLyB1cGRhdGUgJGF0dHJzIGFuZCAkbGlzdGVuZXJzIGhhc2hcbiAgLy8gdGhlc2UgYXJlIGFsc28gcmVhY3RpdmUgc28gdGhleSBtYXkgdHJpZ2dlciBjaGlsZCB1cGRhdGUgaWYgdGhlIGNoaWxkXG4gIC8vIHVzZWQgdGhlbSBkdXJpbmcgcmVuZGVyXG4gIHZtLiRhdHRycyA9IChwYXJlbnRWbm9kZS5kYXRhICYmIHBhcmVudFZub2RlLmRhdGEuYXR0cnMpIHx8IGVtcHR5T2JqZWN0O1xuICB2bS4kbGlzdGVuZXJzID0gbGlzdGVuZXJzIHx8IGVtcHR5T2JqZWN0O1xuXG4gIC8vIHVwZGF0ZSBwcm9wc1xuICBpZiAocHJvcHNEYXRhICYmIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgb2JzZXJ2ZXJTdGF0ZS5zaG91bGRDb252ZXJ0ID0gZmFsc2U7XG4gICAgdmFyIHByb3BzID0gdm0uX3Byb3BzO1xuICAgIHZhciBwcm9wS2V5cyA9IHZtLiRvcHRpb25zLl9wcm9wS2V5cyB8fCBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcEtleXNbaV07XG4gICAgICBwcm9wc1trZXldID0gdmFsaWRhdGVQcm9wKGtleSwgdm0uJG9wdGlvbnMucHJvcHMsIHByb3BzRGF0YSwgdm0pO1xuICAgIH1cbiAgICBvYnNlcnZlclN0YXRlLnNob3VsZENvbnZlcnQgPSB0cnVlO1xuICAgIC8vIGtlZXAgYSBjb3B5IG9mIHJhdyBwcm9wc0RhdGFcbiAgICB2bS4kb3B0aW9ucy5wcm9wc0RhdGEgPSBwcm9wc0RhdGE7XG4gIH1cblxuICAvLyB1cGRhdGUgbGlzdGVuZXJzXG4gIGlmIChsaXN0ZW5lcnMpIHtcbiAgICB2YXIgb2xkTGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgICB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzLCBvbGRMaXN0ZW5lcnMpO1xuICB9XG4gIC8vIHJlc29sdmUgc2xvdHMgKyBmb3JjZSB1cGRhdGUgaWYgaGFzIGNoaWxkcmVuXG4gIGlmIChoYXNDaGlsZHJlbikge1xuICAgIHZtLiRzbG90cyA9IHJlc29sdmVTbG90cyhyZW5kZXJDaGlsZHJlbiwgcGFyZW50Vm5vZGUuY29udGV4dCk7XG4gICAgdm0uJGZvcmNlVXBkYXRlKCk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSW5JbmFjdGl2ZVRyZWUgKHZtKSB7XG4gIHdoaWxlICh2bSAmJiAodm0gPSB2bS4kcGFyZW50KSkge1xuICAgIGlmICh2bS5faW5hY3RpdmUpIHsgcmV0dXJuIHRydWUgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50ICh2bSwgZGlyZWN0KSB7XG4gIGlmIChkaXJlY3QpIHtcbiAgICB2bS5fZGlyZWN0SW5hY3RpdmUgPSBmYWxzZTtcbiAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSBlbHNlIGlmICh2bS5fZGlyZWN0SW5hY3RpdmUpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodm0uX2luYWN0aXZlIHx8IHZtLl9pbmFjdGl2ZSA9PT0gbnVsbCkge1xuICAgIHZtLl9pbmFjdGl2ZSA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLiRjaGlsZHJlbltpXSk7XG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnYWN0aXZhdGVkJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50ICh2bSwgZGlyZWN0KSB7XG4gIGlmIChkaXJlY3QpIHtcbiAgICB2bS5fZGlyZWN0SW5hY3RpdmUgPSB0cnVlO1xuICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG4gIGlmICghdm0uX2luYWN0aXZlKSB7XG4gICAgdm0uX2luYWN0aXZlID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZtLiRjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLiRjaGlsZHJlbltpXSk7XG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnZGVhY3RpdmF0ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsSG9vayAodm0sIGhvb2spIHtcbiAgdmFyIGhhbmRsZXJzID0gdm0uJG9wdGlvbnNbaG9va107XG4gIGlmIChoYW5kbGVycykge1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gaGFuZGxlcnMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBoYW5kbGVyc1tpXS5jYWxsKHZtKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZSwgdm0sIChob29rICsgXCIgaG9va1wiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICh2bS5faGFzSG9va0V2ZW50KSB7XG4gICAgdm0uJGVtaXQoJ2hvb2s6JyArIGhvb2spO1xuICB9XG59XG5cbi8qICAqL1xuXG5cbnZhciBNQVhfVVBEQVRFX0NPVU5UID0gMTAwO1xuXG52YXIgcXVldWUgPSBbXTtcbnZhciBhY3RpdmF0ZWRDaGlsZHJlbiA9IFtdO1xudmFyIGhhcyA9IHt9O1xudmFyIGNpcmN1bGFyID0ge307XG52YXIgd2FpdGluZyA9IGZhbHNlO1xudmFyIGZsdXNoaW5nID0gZmFsc2U7XG52YXIgaW5kZXggPSAwO1xuXG4vKipcbiAqIFJlc2V0IHRoZSBzY2hlZHVsZXIncyBzdGF0ZS5cbiAqL1xuZnVuY3Rpb24gcmVzZXRTY2hlZHVsZXJTdGF0ZSAoKSB7XG4gIGluZGV4ID0gcXVldWUubGVuZ3RoID0gYWN0aXZhdGVkQ2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgaGFzID0ge307XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2lyY3VsYXIgPSB7fTtcbiAgfVxuICB3YWl0aW5nID0gZmx1c2hpbmcgPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBGbHVzaCBib3RoIHF1ZXVlcyBhbmQgcnVuIHRoZSB3YXRjaGVycy5cbiAqL1xuZnVuY3Rpb24gZmx1c2hTY2hlZHVsZXJRdWV1ZSAoKSB7XG4gIGZsdXNoaW5nID0gdHJ1ZTtcbiAgdmFyIHdhdGNoZXIsIGlkO1xuXG4gIC8vIFNvcnQgcXVldWUgYmVmb3JlIGZsdXNoLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdDpcbiAgLy8gMS4gQ29tcG9uZW50cyBhcmUgdXBkYXRlZCBmcm9tIHBhcmVudCB0byBjaGlsZC4gKGJlY2F1c2UgcGFyZW50IGlzIGFsd2F5c1xuICAvLyAgICBjcmVhdGVkIGJlZm9yZSB0aGUgY2hpbGQpXG4gIC8vIDIuIEEgY29tcG9uZW50J3MgdXNlciB3YXRjaGVycyBhcmUgcnVuIGJlZm9yZSBpdHMgcmVuZGVyIHdhdGNoZXIgKGJlY2F1c2VcbiAgLy8gICAgdXNlciB3YXRjaGVycyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIHJlbmRlciB3YXRjaGVyKVxuICAvLyAzLiBJZiBhIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgZHVyaW5nIGEgcGFyZW50IGNvbXBvbmVudCdzIHdhdGNoZXIgcnVuLFxuICAvLyAgICBpdHMgd2F0Y2hlcnMgY2FuIGJlIHNraXBwZWQuXG4gIHF1ZXVlLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcblxuICAvLyBkbyBub3QgY2FjaGUgbGVuZ3RoIGJlY2F1c2UgbW9yZSB3YXRjaGVycyBtaWdodCBiZSBwdXNoZWRcbiAgLy8gYXMgd2UgcnVuIGV4aXN0aW5nIHdhdGNoZXJzXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHF1ZXVlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIHdhdGNoZXIgPSBxdWV1ZVtpbmRleF07XG4gICAgaWQgPSB3YXRjaGVyLmlkO1xuICAgIGhhc1tpZF0gPSBudWxsO1xuICAgIHdhdGNoZXIucnVuKCk7XG4gICAgLy8gaW4gZGV2IGJ1aWxkLCBjaGVjayBhbmQgc3RvcCBjaXJjdWxhciB1cGRhdGVzLlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGhhc1tpZF0gIT0gbnVsbCkge1xuICAgICAgY2lyY3VsYXJbaWRdID0gKGNpcmN1bGFyW2lkXSB8fCAwKSArIDE7XG4gICAgICBpZiAoY2lyY3VsYXJbaWRdID4gTUFYX1VQREFURV9DT1VOVCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdZb3UgbWF5IGhhdmUgYW4gaW5maW5pdGUgdXBkYXRlIGxvb3AgJyArIChcbiAgICAgICAgICAgIHdhdGNoZXIudXNlclxuICAgICAgICAgICAgICA/IChcImluIHdhdGNoZXIgd2l0aCBleHByZXNzaW9uIFxcXCJcIiArICh3YXRjaGVyLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpXG4gICAgICAgICAgICAgIDogXCJpbiBhIGNvbXBvbmVudCByZW5kZXIgZnVuY3Rpb24uXCJcbiAgICAgICAgICApLFxuICAgICAgICAgIHdhdGNoZXIudm1cbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBrZWVwIGNvcGllcyBvZiBwb3N0IHF1ZXVlcyBiZWZvcmUgcmVzZXR0aW5nIHN0YXRlXG4gIHZhciBhY3RpdmF0ZWRRdWV1ZSA9IGFjdGl2YXRlZENoaWxkcmVuLnNsaWNlKCk7XG4gIHZhciB1cGRhdGVkUXVldWUgPSBxdWV1ZS5zbGljZSgpO1xuXG4gIHJlc2V0U2NoZWR1bGVyU3RhdGUoKTtcblxuICAvLyBjYWxsIGNvbXBvbmVudCB1cGRhdGVkIGFuZCBhY3RpdmF0ZWQgaG9va3NcbiAgY2FsbEFjdGl2YXRlZEhvb2tzKGFjdGl2YXRlZFF1ZXVlKTtcbiAgY2FsbFVwZGF0ZWRIb29rcyh1cGRhdGVkUXVldWUpO1xuXG4gIC8vIGRldnRvb2wgaG9va1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGRldnRvb2xzICYmIGNvbmZpZy5kZXZ0b29scykge1xuICAgIGRldnRvb2xzLmVtaXQoJ2ZsdXNoJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbFVwZGF0ZWRIb29rcyAocXVldWUpIHtcbiAgdmFyIGkgPSBxdWV1ZS5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIgd2F0Y2hlciA9IHF1ZXVlW2ldO1xuICAgIHZhciB2bSA9IHdhdGNoZXIudm07XG4gICAgaWYgKHZtLl93YXRjaGVyID09PSB3YXRjaGVyICYmIHZtLl9pc01vdW50ZWQpIHtcbiAgICAgIGNhbGxIb29rKHZtLCAndXBkYXRlZCcpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFF1ZXVlIGEga2VwdC1hbGl2ZSBjb21wb25lbnQgdGhhdCB3YXMgYWN0aXZhdGVkIGR1cmluZyBwYXRjaC5cbiAqIFRoZSBxdWV1ZSB3aWxsIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgZW50aXJlIHRyZWUgaGFzIGJlZW4gcGF0Y2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVBY3RpdmF0ZWRDb21wb25lbnQgKHZtKSB7XG4gIC8vIHNldHRpbmcgX2luYWN0aXZlIHRvIGZhbHNlIGhlcmUgc28gdGhhdCBhIHJlbmRlciBmdW5jdGlvbiBjYW5cbiAgLy8gcmVseSBvbiBjaGVja2luZyB3aGV0aGVyIGl0J3MgaW4gYW4gaW5hY3RpdmUgdHJlZSAoZS5nLiByb3V0ZXItdmlldylcbiAgdm0uX2luYWN0aXZlID0gZmFsc2U7XG4gIGFjdGl2YXRlZENoaWxkcmVuLnB1c2godm0pO1xufVxuXG5mdW5jdGlvbiBjYWxsQWN0aXZhdGVkSG9va3MgKHF1ZXVlKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICBxdWV1ZVtpXS5faW5hY3RpdmUgPSB0cnVlO1xuICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQocXVldWVbaV0sIHRydWUgLyogdHJ1ZSAqLyk7XG4gIH1cbn1cblxuLyoqXG4gKiBQdXNoIGEgd2F0Y2hlciBpbnRvIHRoZSB3YXRjaGVyIHF1ZXVlLlxuICogSm9icyB3aXRoIGR1cGxpY2F0ZSBJRHMgd2lsbCBiZSBza2lwcGVkIHVubGVzcyBpdCdzXG4gKiBwdXNoZWQgd2hlbiB0aGUgcXVldWUgaXMgYmVpbmcgZmx1c2hlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVXYXRjaGVyICh3YXRjaGVyKSB7XG4gIHZhciBpZCA9IHdhdGNoZXIuaWQ7XG4gIGlmIChoYXNbaWRdID09IG51bGwpIHtcbiAgICBoYXNbaWRdID0gdHJ1ZTtcbiAgICBpZiAoIWZsdXNoaW5nKSB7XG4gICAgICBxdWV1ZS5wdXNoKHdhdGNoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiBhbHJlYWR5IGZsdXNoaW5nLCBzcGxpY2UgdGhlIHdhdGNoZXIgYmFzZWQgb24gaXRzIGlkXG4gICAgICAvLyBpZiBhbHJlYWR5IHBhc3QgaXRzIGlkLCBpdCB3aWxsIGJlIHJ1biBuZXh0IGltbWVkaWF0ZWx5LlxuICAgICAgdmFyIGkgPSBxdWV1ZS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkgPiBpbmRleCAmJiBxdWV1ZVtpXS5pZCA+IHdhdGNoZXIuaWQpIHtcbiAgICAgICAgaS0tO1xuICAgICAgfVxuICAgICAgcXVldWUuc3BsaWNlKGkgKyAxLCAwLCB3YXRjaGVyKTtcbiAgICB9XG4gICAgLy8gcXVldWUgdGhlIGZsdXNoXG4gICAgaWYgKCF3YWl0aW5nKSB7XG4gICAgICB3YWl0aW5nID0gdHJ1ZTtcbiAgICAgIG5leHRUaWNrKGZsdXNoU2NoZWR1bGVyUXVldWUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIHVpZCQyID0gMDtcblxuLyoqXG4gKiBBIHdhdGNoZXIgcGFyc2VzIGFuIGV4cHJlc3Npb24sIGNvbGxlY3RzIGRlcGVuZGVuY2llcyxcbiAqIGFuZCBmaXJlcyBjYWxsYmFjayB3aGVuIHRoZSBleHByZXNzaW9uIHZhbHVlIGNoYW5nZXMuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggdGhlICR3YXRjaCgpIGFwaSBhbmQgZGlyZWN0aXZlcy5cbiAqL1xudmFyIFdhdGNoZXIgPSBmdW5jdGlvbiBXYXRjaGVyIChcbiAgdm0sXG4gIGV4cE9yRm4sXG4gIGNiLFxuICBvcHRpb25zXG4pIHtcbiAgdGhpcy52bSA9IHZtO1xuICB2bS5fd2F0Y2hlcnMucHVzaCh0aGlzKTtcbiAgLy8gb3B0aW9uc1xuICBpZiAob3B0aW9ucykge1xuICAgIHRoaXMuZGVlcCA9ICEhb3B0aW9ucy5kZWVwO1xuICAgIHRoaXMudXNlciA9ICEhb3B0aW9ucy51c2VyO1xuICAgIHRoaXMubGF6eSA9ICEhb3B0aW9ucy5sYXp5O1xuICAgIHRoaXMuc3luYyA9ICEhb3B0aW9ucy5zeW5jO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZGVlcCA9IHRoaXMudXNlciA9IHRoaXMubGF6eSA9IHRoaXMuc3luYyA9IGZhbHNlO1xuICB9XG4gIHRoaXMuY2IgPSBjYjtcbiAgdGhpcy5pZCA9ICsrdWlkJDI7IC8vIHVpZCBmb3IgYmF0Y2hpbmdcbiAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICB0aGlzLmRpcnR5ID0gdGhpcy5sYXp5OyAvLyBmb3IgbGF6eSB3YXRjaGVyc1xuICB0aGlzLmRlcHMgPSBbXTtcbiAgdGhpcy5uZXdEZXBzID0gW107XG4gIHRoaXMuZGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgdGhpcy5uZXdEZXBJZHMgPSBuZXcgX1NldCgpO1xuICB0aGlzLmV4cHJlc3Npb24gPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgPyBleHBPckZuLnRvU3RyaW5nKClcbiAgICA6ICcnO1xuICAvLyBwYXJzZSBleHByZXNzaW9uIGZvciBnZXR0ZXJcbiAgaWYgKHR5cGVvZiBleHBPckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5nZXR0ZXIgPSBleHBPckZuO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuZ2V0dGVyID0gcGFyc2VQYXRoKGV4cE9yRm4pO1xuICAgIGlmICghdGhpcy5nZXR0ZXIpIHtcbiAgICAgIHRoaXMuZ2V0dGVyID0gZnVuY3Rpb24gKCkge307XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiRmFpbGVkIHdhdGNoaW5nIHBhdGg6IFxcXCJcIiArIGV4cE9yRm4gKyBcIlxcXCIgXCIgK1xuICAgICAgICAnV2F0Y2hlciBvbmx5IGFjY2VwdHMgc2ltcGxlIGRvdC1kZWxpbWl0ZWQgcGF0aHMuICcgK1xuICAgICAgICAnRm9yIGZ1bGwgY29udHJvbCwgdXNlIGEgZnVuY3Rpb24gaW5zdGVhZC4nLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgdGhpcy52YWx1ZSA9IHRoaXMubGF6eVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiB0aGlzLmdldCgpO1xufTtcblxuLyoqXG4gKiBFdmFsdWF0ZSB0aGUgZ2V0dGVyLCBhbmQgcmUtY29sbGVjdCBkZXBlbmRlbmNpZXMuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAoKSB7XG4gIHB1c2hUYXJnZXQodGhpcyk7XG4gIHZhciB2YWx1ZTtcbiAgdmFyIHZtID0gdGhpcy52bTtcbiAgdHJ5IHtcbiAgICB2YWx1ZSA9IHRoaXMuZ2V0dGVyLmNhbGwodm0sIHZtKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCAoXCJnZXR0ZXIgZm9yIHdhdGNoZXIgXFxcIlwiICsgKHRoaXMuZXhwcmVzc2lvbikgKyBcIlxcXCJcIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlXG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIC8vIFwidG91Y2hcIiBldmVyeSBwcm9wZXJ0eSBzbyB0aGV5IGFyZSBhbGwgdHJhY2tlZCBhc1xuICAgIC8vIGRlcGVuZGVuY2llcyBmb3IgZGVlcCB3YXRjaGluZ1xuICAgIGlmICh0aGlzLmRlZXApIHtcbiAgICAgIHRyYXZlcnNlKHZhbHVlKTtcbiAgICB9XG4gICAgcG9wVGFyZ2V0KCk7XG4gICAgdGhpcy5jbGVhbnVwRGVwcygpO1xuICB9XG4gIHJldHVybiB2YWx1ZVxufTtcblxuLyoqXG4gKiBBZGQgYSBkZXBlbmRlbmN5IHRvIHRoaXMgZGlyZWN0aXZlLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5hZGREZXAgPSBmdW5jdGlvbiBhZGREZXAgKGRlcCkge1xuICB2YXIgaWQgPSBkZXAuaWQ7XG4gIGlmICghdGhpcy5uZXdEZXBJZHMuaGFzKGlkKSkge1xuICAgIHRoaXMubmV3RGVwSWRzLmFkZChpZCk7XG4gICAgdGhpcy5uZXdEZXBzLnB1c2goZGVwKTtcbiAgICBpZiAoIXRoaXMuZGVwSWRzLmhhcyhpZCkpIHtcbiAgICAgIGRlcC5hZGRTdWIodGhpcyk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIENsZWFuIHVwIGZvciBkZXBlbmRlbmN5IGNvbGxlY3Rpb24uXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmNsZWFudXBEZXBzID0gZnVuY3Rpb24gY2xlYW51cERlcHMgKCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciBkZXAgPSB0aGlzJDEuZGVwc1tpXTtcbiAgICBpZiAoIXRoaXMkMS5uZXdEZXBJZHMuaGFzKGRlcC5pZCkpIHtcbiAgICAgIGRlcC5yZW1vdmVTdWIodGhpcyQxKTtcbiAgICB9XG4gIH1cbiAgdmFyIHRtcCA9IHRoaXMuZGVwSWRzO1xuICB0aGlzLmRlcElkcyA9IHRoaXMubmV3RGVwSWRzO1xuICB0aGlzLm5ld0RlcElkcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBJZHMuY2xlYXIoKTtcbiAgdG1wID0gdGhpcy5kZXBzO1xuICB0aGlzLmRlcHMgPSB0aGlzLm5ld0RlcHM7XG4gIHRoaXMubmV3RGVwcyA9IHRtcDtcbiAgdGhpcy5uZXdEZXBzLmxlbmd0aCA9IDA7XG59O1xuXG4vKipcbiAqIFN1YnNjcmliZXIgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlcGVuZGVuY3kgY2hhbmdlcy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlICgpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRoaXMubGF6eSkge1xuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICB9IGVsc2UgaWYgKHRoaXMuc3luYykge1xuICAgIHRoaXMucnVuKCk7XG4gIH0gZWxzZSB7XG4gICAgcXVldWVXYXRjaGVyKHRoaXMpO1xuICB9XG59O1xuXG4vKipcbiAqIFNjaGVkdWxlciBqb2IgaW50ZXJmYWNlLlxuICogV2lsbCBiZSBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlci5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gcnVuICgpIHtcbiAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXQoKTtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSAhPT0gdGhpcy52YWx1ZSB8fFxuICAgICAgLy8gRGVlcCB3YXRjaGVycyBhbmQgd2F0Y2hlcnMgb24gT2JqZWN0L0FycmF5cyBzaG91bGQgZmlyZSBldmVuXG4gICAgICAvLyB3aGVuIHRoZSB2YWx1ZSBpcyB0aGUgc2FtZSwgYmVjYXVzZSB0aGUgdmFsdWUgbWF5XG4gICAgICAvLyBoYXZlIG11dGF0ZWQuXG4gICAgICBpc09iamVjdCh2YWx1ZSkgfHxcbiAgICAgIHRoaXMuZGVlcFxuICAgICkge1xuICAgICAgLy8gc2V0IG5ldyB2YWx1ZVxuICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmNiLmNhbGwodGhpcy52bSwgdmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHRoaXMudm0sIChcImNhbGxiYWNrIGZvciB3YXRjaGVyIFxcXCJcIiArICh0aGlzLmV4cHJlc3Npb24pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIHRoZSB2YWx1ZSBvZiB0aGUgd2F0Y2hlci5cbiAqIFRoaXMgb25seSBnZXRzIGNhbGxlZCBmb3IgbGF6eSB3YXRjaGVycy5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiBldmFsdWF0ZSAoKSB7XG4gIHRoaXMudmFsdWUgPSB0aGlzLmdldCgpO1xuICB0aGlzLmRpcnR5ID0gZmFsc2U7XG59O1xuXG4vKipcbiAqIERlcGVuZCBvbiBhbGwgZGVwcyBjb2xsZWN0ZWQgYnkgdGhpcyB3YXRjaGVyLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5kZXBlbmQgPSBmdW5jdGlvbiBkZXBlbmQgKCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBpID0gdGhpcy5kZXBzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHRoaXMkMS5kZXBzW2ldLmRlcGVuZCgpO1xuICB9XG59O1xuXG4vKipcbiAqIFJlbW92ZSBzZWxmIGZyb20gYWxsIGRlcGVuZGVuY2llcycgc3Vic2NyaWJlciBsaXN0LlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS50ZWFyZG93biA9IGZ1bmN0aW9uIHRlYXJkb3duICgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHZtJ3Mgd2F0Y2hlciBsaXN0XG4gICAgLy8gdGhpcyBpcyBhIHNvbWV3aGF0IGV4cGVuc2l2ZSBvcGVyYXRpb24gc28gd2Ugc2tpcCBpdFxuICAgIC8vIGlmIHRoZSB2bSBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgaWYgKCF0aGlzLnZtLl9pc0JlaW5nRGVzdHJveWVkKSB7XG4gICAgICByZW1vdmUodGhpcy52bS5fd2F0Y2hlcnMsIHRoaXMpO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcyQxLmRlcHNbaV0ucmVtb3ZlU3ViKHRoaXMkMSk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgdHJhdmVyc2UgYW4gb2JqZWN0IHRvIGV2b2tlIGFsbCBjb252ZXJ0ZWRcbiAqIGdldHRlcnMsIHNvIHRoYXQgZXZlcnkgbmVzdGVkIHByb3BlcnR5IGluc2lkZSB0aGUgb2JqZWN0XG4gKiBpcyBjb2xsZWN0ZWQgYXMgYSBcImRlZXBcIiBkZXBlbmRlbmN5LlxuICovXG52YXIgc2Vlbk9iamVjdHMgPSBuZXcgX1NldCgpO1xuZnVuY3Rpb24gdHJhdmVyc2UgKHZhbCkge1xuICBzZWVuT2JqZWN0cy5jbGVhcigpO1xuICBfdHJhdmVyc2UodmFsLCBzZWVuT2JqZWN0cyk7XG59XG5cbmZ1bmN0aW9uIF90cmF2ZXJzZSAodmFsLCBzZWVuKSB7XG4gIHZhciBpLCBrZXlzO1xuICB2YXIgaXNBID0gQXJyYXkuaXNBcnJheSh2YWwpO1xuICBpZiAoKCFpc0EgJiYgIWlzT2JqZWN0KHZhbCkpIHx8ICFPYmplY3QuaXNFeHRlbnNpYmxlKHZhbCkpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodmFsLl9fb2JfXykge1xuICAgIHZhciBkZXBJZCA9IHZhbC5fX29iX18uZGVwLmlkO1xuICAgIGlmIChzZWVuLmhhcyhkZXBJZCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZWVuLmFkZChkZXBJZCk7XG4gIH1cbiAgaWYgKGlzQSkge1xuICAgIGkgPSB2YWwubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHsgX3RyYXZlcnNlKHZhbFtpXSwgc2Vlbik7IH1cbiAgfSBlbHNlIHtcbiAgICBrZXlzID0gT2JqZWN0LmtleXModmFsKTtcbiAgICBpID0ga2V5cy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkgeyBfdHJhdmVyc2UodmFsW2tleXNbaV1dLCBzZWVuKTsgfVxuICB9XG59XG5cbi8qICAqL1xuXG52YXIgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogbm9vcCxcbiAgc2V0OiBub29wXG59O1xuXG5mdW5jdGlvbiBwcm94eSAodGFyZ2V0LCBzb3VyY2VLZXksIGtleSkge1xuICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gZnVuY3Rpb24gcHJveHlHZXR0ZXIgKCkge1xuICAgIHJldHVybiB0aGlzW3NvdXJjZUtleV1ba2V5XVxuICB9O1xuICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gcHJveHlTZXR0ZXIgKHZhbCkge1xuICAgIHRoaXNbc291cmNlS2V5XVtrZXldID0gdmFsO1xuICB9O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbik7XG59XG5cbmZ1bmN0aW9uIGluaXRTdGF0ZSAodm0pIHtcbiAgdm0uX3dhdGNoZXJzID0gW107XG4gIHZhciBvcHRzID0gdm0uJG9wdGlvbnM7XG4gIGlmIChvcHRzLnByb3BzKSB7IGluaXRQcm9wcyh2bSwgb3B0cy5wcm9wcyk7IH1cbiAgaWYgKG9wdHMubWV0aG9kcykgeyBpbml0TWV0aG9kcyh2bSwgb3B0cy5tZXRob2RzKTsgfVxuICBpZiAob3B0cy5kYXRhKSB7XG4gICAgaW5pdERhdGEodm0pO1xuICB9IGVsc2Uge1xuICAgIG9ic2VydmUodm0uX2RhdGEgPSB7fSwgdHJ1ZSAvKiBhc1Jvb3REYXRhICovKTtcbiAgfVxuICBpZiAob3B0cy5jb21wdXRlZCkgeyBpbml0Q29tcHV0ZWQodm0sIG9wdHMuY29tcHV0ZWQpOyB9XG4gIGlmIChvcHRzLndhdGNoICYmIG9wdHMud2F0Y2ggIT09IG5hdGl2ZVdhdGNoKSB7XG4gICAgaW5pdFdhdGNoKHZtLCBvcHRzLndhdGNoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0UHJvcHMgKHZtLCBwcm9wc09wdGlvbnMpIHtcbiAgdmFyIHByb3BzRGF0YSA9IHZtLiRvcHRpb25zLnByb3BzRGF0YSB8fCB7fTtcbiAgdmFyIHByb3BzID0gdm0uX3Byb3BzID0ge307XG4gIC8vIGNhY2hlIHByb3Aga2V5cyBzbyB0aGF0IGZ1dHVyZSBwcm9wcyB1cGRhdGVzIGNhbiBpdGVyYXRlIHVzaW5nIEFycmF5XG4gIC8vIGluc3RlYWQgb2YgZHluYW1pYyBvYmplY3Qga2V5IGVudW1lcmF0aW9uLlxuICB2YXIga2V5cyA9IHZtLiRvcHRpb25zLl9wcm9wS2V5cyA9IFtdO1xuICB2YXIgaXNSb290ID0gIXZtLiRwYXJlbnQ7XG4gIC8vIHJvb3QgaW5zdGFuY2UgcHJvcHMgc2hvdWxkIGJlIGNvbnZlcnRlZFxuICBvYnNlcnZlclN0YXRlLnNob3VsZENvbnZlcnQgPSBpc1Jvb3Q7XG4gIHZhciBsb29wID0gZnVuY3Rpb24gKCBrZXkgKSB7XG4gICAga2V5cy5wdXNoKGtleSk7XG4gICAgdmFyIHZhbHVlID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcHNPcHRpb25zLCBwcm9wc0RhdGEsIHZtKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgaHlwaGVuYXRlZEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgaWYgKGlzUmVzZXJ2ZWRBdHRyaWJ1dGUoaHlwaGVuYXRlZEtleSkgfHxcbiAgICAgICAgICBjb25maWcuaXNSZXNlcnZlZEF0dHIoaHlwaGVuYXRlZEtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJcXFwiXCIgKyBoeXBoZW5hdGVkS2V5ICsgXCJcXFwiIGlzIGEgcmVzZXJ2ZWQgYXR0cmlidXRlIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBjb21wb25lbnQgcHJvcC5cIiksXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRlZmluZVJlYWN0aXZlKHByb3BzLCBrZXksIHZhbHVlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh2bS4kcGFyZW50ICYmICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQpIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgXCJBdm9pZCBtdXRhdGluZyBhIHByb3AgZGlyZWN0bHkgc2luY2UgdGhlIHZhbHVlIHdpbGwgYmUgXCIgK1xuICAgICAgICAgICAgXCJvdmVyd3JpdHRlbiB3aGVuZXZlciB0aGUgcGFyZW50IGNvbXBvbmVudCByZS1yZW5kZXJzLiBcIiArXG4gICAgICAgICAgICBcIkluc3RlYWQsIHVzZSBhIGRhdGEgb3IgY29tcHV0ZWQgcHJvcGVydHkgYmFzZWQgb24gdGhlIHByb3AncyBcIiArXG4gICAgICAgICAgICBcInZhbHVlLiBQcm9wIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIiArIGtleSArIFwiXFxcIlwiLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmaW5lUmVhY3RpdmUocHJvcHMsIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICAvLyBzdGF0aWMgcHJvcHMgYXJlIGFscmVhZHkgcHJveGllZCBvbiB0aGUgY29tcG9uZW50J3MgcHJvdG90eXBlXG4gICAgLy8gZHVyaW5nIFZ1ZS5leHRlbmQoKS4gV2Ugb25seSBuZWVkIHRvIHByb3h5IHByb3BzIGRlZmluZWQgYXRcbiAgICAvLyBpbnN0YW50aWF0aW9uIGhlcmUuXG4gICAgaWYgKCEoa2V5IGluIHZtKSkge1xuICAgICAgcHJveHkodm0sIFwiX3Byb3BzXCIsIGtleSk7XG4gICAgfVxuICB9O1xuXG4gIGZvciAodmFyIGtleSBpbiBwcm9wc09wdGlvbnMpIGxvb3AoIGtleSApO1xuICBvYnNlcnZlclN0YXRlLnNob3VsZENvbnZlcnQgPSB0cnVlO1xufVxuXG5mdW5jdGlvbiBpbml0RGF0YSAodm0pIHtcbiAgdmFyIGRhdGEgPSB2bS4kb3B0aW9ucy5kYXRhO1xuICBkYXRhID0gdm0uX2RhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZ2V0RGF0YShkYXRhLCB2bSlcbiAgICA6IGRhdGEgfHwge307XG4gIGlmICghaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgIGRhdGEgPSB7fTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAnZGF0YSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBhbiBvYmplY3Q6XFxuJyArXG4gICAgICAnaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvY29tcG9uZW50cy5odG1sI2RhdGEtTXVzdC1CZS1hLUZ1bmN0aW9uJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIGRhdGEgcHJvcGVydHkuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJUaGUgZGF0YSBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWNsYXJlZCBhcyBhIHByb3AuIFwiICtcbiAgICAgICAgXCJVc2UgcHJvcCBkZWZhdWx0IHZhbHVlIGluc3RlYWQuXCIsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgcHJveHkodm0sIFwiX2RhdGFcIiwga2V5KTtcbiAgICB9XG4gIH1cbiAgLy8gb2JzZXJ2ZSBkYXRhXG4gIG9ic2VydmUoZGF0YSwgdHJ1ZSAvKiBhc1Jvb3REYXRhICovKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YSAoZGF0YSwgdm0pIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGF0YS5jYWxsKHZtLCB2bSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcImRhdGEoKVwiKTtcbiAgICByZXR1cm4ge31cbiAgfVxufVxuXG52YXIgY29tcHV0ZWRXYXRjaGVyT3B0aW9ucyA9IHsgbGF6eTogdHJ1ZSB9O1xuXG5mdW5jdGlvbiBpbml0Q29tcHV0ZWQgKHZtLCBjb21wdXRlZCkge1xuICB2YXIgd2F0Y2hlcnMgPSB2bS5fY29tcHV0ZWRXYXRjaGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGp1c3QgZ2V0dGVycyBkdXJpbmcgU1NSXG4gIHZhciBpc1NTUiA9IGlzU2VydmVyUmVuZGVyaW5nKCk7XG5cbiAgZm9yICh2YXIga2V5IGluIGNvbXB1dGVkKSB7XG4gICAgdmFyIHVzZXJEZWYgPSBjb21wdXRlZFtrZXldO1xuICAgIHZhciBnZXR0ZXIgPSB0eXBlb2YgdXNlckRlZiA9PT0gJ2Z1bmN0aW9uJyA/IHVzZXJEZWYgOiB1c2VyRGVmLmdldDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBnZXR0ZXIgPT0gbnVsbCkge1xuICAgICAgd2FybihcbiAgICAgICAgKFwiR2V0dGVyIGlzIG1pc3NpbmcgZm9yIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIi5cIiksXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghaXNTU1IpIHtcbiAgICAgIC8vIGNyZWF0ZSBpbnRlcm5hbCB3YXRjaGVyIGZvciB0aGUgY29tcHV0ZWQgcHJvcGVydHkuXG4gICAgICB3YXRjaGVyc1trZXldID0gbmV3IFdhdGNoZXIoXG4gICAgICAgIHZtLFxuICAgICAgICBnZXR0ZXIgfHwgbm9vcCxcbiAgICAgICAgbm9vcCxcbiAgICAgICAgY29tcHV0ZWRXYXRjaGVyT3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBjb21wb25lbnQtZGVmaW5lZCBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBhbHJlYWR5IGRlZmluZWQgb24gdGhlXG4gICAgLy8gY29tcG9uZW50IHByb3RvdHlwZS4gV2Ugb25seSBuZWVkIHRvIGRlZmluZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGRlZmluZWRcbiAgICAvLyBhdCBpbnN0YW50aWF0aW9uIGhlcmUuXG4gICAgaWYgKCEoa2V5IGluIHZtKSkge1xuICAgICAgZGVmaW5lQ29tcHV0ZWQodm0sIGtleSwgdXNlckRlZik7XG4gICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoa2V5IGluIHZtLiRkYXRhKSB7XG4gICAgICAgIHdhcm4oKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgaW4gZGF0YS5cIiksIHZtKTtcbiAgICAgIH0gZWxzZSBpZiAodm0uJG9wdGlvbnMucHJvcHMgJiYga2V5IGluIHZtLiRvcHRpb25zLnByb3BzKSB7XG4gICAgICAgIHdhcm4oKFwiVGhlIGNvbXB1dGVkIHByb3BlcnR5IFxcXCJcIiArIGtleSArIFwiXFxcIiBpcyBhbHJlYWR5IGRlZmluZWQgYXMgYSBwcm9wLlwiKSwgdm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkZWZpbmVDb21wdXRlZCAoXG4gIHRhcmdldCxcbiAga2V5LFxuICB1c2VyRGVmXG4pIHtcbiAgdmFyIHNob3VsZENhY2hlID0gIWlzU2VydmVyUmVuZGVyaW5nKCk7XG4gIGlmICh0eXBlb2YgdXNlckRlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5nZXQgPSBzaG91bGRDYWNoZVxuICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICA6IHVzZXJEZWY7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IG5vb3A7XG4gIH0gZWxzZSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHVzZXJEZWYuZ2V0XG4gICAgICA/IHNob3VsZENhY2hlICYmIHVzZXJEZWYuY2FjaGUgIT09IGZhbHNlXG4gICAgICAgID8gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIoa2V5KVxuICAgICAgICA6IHVzZXJEZWYuZ2V0XG4gICAgICA6IG5vb3A7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9IHVzZXJEZWYuc2V0XG4gICAgICA/IHVzZXJEZWYuc2V0XG4gICAgICA6IG5vb3A7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPT09IG5vb3ApIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcbiAgICAgICAgKFwiQ29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIHdhcyBhc3NpZ25lZCB0byBidXQgaXQgaGFzIG5vIHNldHRlci5cIiksXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbik7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXB1dGVkR2V0dGVyIChrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbXB1dGVkR2V0dGVyICgpIHtcbiAgICB2YXIgd2F0Y2hlciA9IHRoaXMuX2NvbXB1dGVkV2F0Y2hlcnMgJiYgdGhpcy5fY29tcHV0ZWRXYXRjaGVyc1trZXldO1xuICAgIGlmICh3YXRjaGVyKSB7XG4gICAgICBpZiAod2F0Y2hlci5kaXJ0eSkge1xuICAgICAgICB3YXRjaGVyLmV2YWx1YXRlKCk7XG4gICAgICB9XG4gICAgICBpZiAoRGVwLnRhcmdldCkge1xuICAgICAgICB3YXRjaGVyLmRlcGVuZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdhdGNoZXIudmFsdWVcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdE1ldGhvZHMgKHZtLCBtZXRob2RzKSB7XG4gIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kcykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAobWV0aG9kc1trZXldID09IG51bGwpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICBcIk1ldGhvZCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaGFzIGFuIHVuZGVmaW5lZCB2YWx1ZSBpbiB0aGUgY29tcG9uZW50IGRlZmluaXRpb24uIFwiICtcbiAgICAgICAgICBcIkRpZCB5b3UgcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHk/XCIsXG4gICAgICAgICAgdm1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIHByb3AuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoKGtleSBpbiB2bSkgJiYgaXNSZXNlcnZlZChrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGNvbmZsaWN0cyB3aXRoIGFuIGV4aXN0aW5nIFZ1ZSBpbnN0YW5jZSBtZXRob2QuIFwiICtcbiAgICAgICAgICBcIkF2b2lkIGRlZmluaW5nIGNvbXBvbmVudCBtZXRob2RzIHRoYXQgc3RhcnQgd2l0aCBfIG9yICQuXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdm1ba2V5XSA9IG1ldGhvZHNba2V5XSA9PSBudWxsID8gbm9vcCA6IGJpbmQobWV0aG9kc1trZXldLCB2bSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdFdhdGNoICh2bSwgd2F0Y2gpIHtcbiAgZm9yICh2YXIga2V5IGluIHdhdGNoKSB7XG4gICAgdmFyIGhhbmRsZXIgPSB3YXRjaFtrZXldO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXIpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbmRsZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY3JlYXRlV2F0Y2hlcih2bSwga2V5LCBoYW5kbGVyW2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY3JlYXRlV2F0Y2hlcih2bSwga2V5LCBoYW5kbGVyKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlV2F0Y2hlciAoXG4gIHZtLFxuICBrZXlPckZuLFxuICBoYW5kbGVyLFxuICBvcHRpb25zXG4pIHtcbiAgaWYgKGlzUGxhaW5PYmplY3QoaGFuZGxlcikpIHtcbiAgICBvcHRpb25zID0gaGFuZGxlcjtcbiAgICBoYW5kbGVyID0gaGFuZGxlci5oYW5kbGVyO1xuICB9XG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZycpIHtcbiAgICBoYW5kbGVyID0gdm1baGFuZGxlcl07XG4gIH1cbiAgcmV0dXJuIHZtLiR3YXRjaChrZXlPckZuLCBoYW5kbGVyLCBvcHRpb25zKVxufVxuXG5mdW5jdGlvbiBzdGF0ZU1peGluIChWdWUpIHtcbiAgLy8gZmxvdyBzb21laG93IGhhcyBwcm9ibGVtcyB3aXRoIGRpcmVjdGx5IGRlY2xhcmVkIGRlZmluaXRpb24gb2JqZWN0XG4gIC8vIHdoZW4gdXNpbmcgT2JqZWN0LmRlZmluZVByb3BlcnR5LCBzbyB3ZSBoYXZlIHRvIHByb2NlZHVyYWxseSBidWlsZCB1cFxuICAvLyB0aGUgb2JqZWN0IGhlcmUuXG4gIHZhciBkYXRhRGVmID0ge307XG4gIGRhdGFEZWYuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fZGF0YSB9O1xuICB2YXIgcHJvcHNEZWYgPSB7fTtcbiAgcHJvcHNEZWYuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fcHJvcHMgfTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBkYXRhRGVmLnNldCA9IGZ1bmN0aW9uIChuZXdEYXRhKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgcmVwbGFjaW5nIGluc3RhbmNlIHJvb3QgJGRhdGEuICcgK1xuICAgICAgICAnVXNlIG5lc3RlZCBkYXRhIHByb3BlcnRpZXMgaW5zdGVhZC4nLFxuICAgICAgICB0aGlzXG4gICAgICApO1xuICAgIH07XG4gICAgcHJvcHNEZWYuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgd2FybihcIiRwcm9wcyBpcyByZWFkb25seS5cIiwgdGhpcyk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRkYXRhJywgZGF0YURlZik7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHByb3BzJywgcHJvcHNEZWYpO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJHNldCA9IHNldDtcbiAgVnVlLnByb3RvdHlwZS4kZGVsZXRlID0gZGVsO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJHdhdGNoID0gZnVuY3Rpb24gKFxuICAgIGV4cE9yRm4sXG4gICAgY2IsXG4gICAgb3B0aW9uc1xuICApIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGNiKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKVxuICAgIH1cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLnVzZXIgPSB0cnVlO1xuICAgIHZhciB3YXRjaGVyID0gbmV3IFdhdGNoZXIodm0sIGV4cE9yRm4sIGNiLCBvcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucy5pbW1lZGlhdGUpIHtcbiAgICAgIGNiLmNhbGwodm0sIHdhdGNoZXIudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gdW53YXRjaEZuICgpIHtcbiAgICAgIHdhdGNoZXIudGVhcmRvd24oKTtcbiAgICB9XG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0UHJvdmlkZSAodm0pIHtcbiAgdmFyIHByb3ZpZGUgPSB2bS4kb3B0aW9ucy5wcm92aWRlO1xuICBpZiAocHJvdmlkZSkge1xuICAgIHZtLl9wcm92aWRlZCA9IHR5cGVvZiBwcm92aWRlID09PSAnZnVuY3Rpb24nXG4gICAgICA/IHByb3ZpZGUuY2FsbCh2bSlcbiAgICAgIDogcHJvdmlkZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0SW5qZWN0aW9ucyAodm0pIHtcbiAgdmFyIHJlc3VsdCA9IHJlc29sdmVJbmplY3Qodm0uJG9wdGlvbnMuaW5qZWN0LCB2bSk7XG4gIGlmIChyZXN1bHQpIHtcbiAgICBvYnNlcnZlclN0YXRlLnNob3VsZENvbnZlcnQgPSBmYWxzZTtcbiAgICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlKHZtLCBrZXksIHJlc3VsdFtrZXldLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYW4gaW5qZWN0ZWQgdmFsdWUgZGlyZWN0bHkgc2luY2UgdGhlIGNoYW5nZXMgd2lsbCBiZSBcIiArXG4gICAgICAgICAgICBcIm92ZXJ3cml0dGVuIHdoZW5ldmVyIHRoZSBwcm92aWRlZCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJpbmplY3Rpb24gYmVpbmcgbXV0YXRlZDogXFxcIlwiICsga2V5ICsgXCJcXFwiXCIsXG4gICAgICAgICAgICB2bVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5lUmVhY3RpdmUodm0sIGtleSwgcmVzdWx0W2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG9ic2VydmVyU3RhdGUuc2hvdWxkQ29udmVydCA9IHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUluamVjdCAoaW5qZWN0LCB2bSkge1xuICBpZiAoaW5qZWN0KSB7XG4gICAgLy8gaW5qZWN0IGlzIDphbnkgYmVjYXVzZSBmbG93IGlzIG5vdCBzbWFydCBlbm91Z2ggdG8gZmlndXJlIG91dCBjYWNoZWRcbiAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB2YXIga2V5cyA9IGhhc1N5bWJvbFxuICAgICAgICA/IFJlZmxlY3Qub3duS2V5cyhpbmplY3QpLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbmplY3QsIGtleSkuZW51bWVyYWJsZVxuICAgICAgICB9KVxuICAgICAgICA6IE9iamVjdC5rZXlzKGluamVjdCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHByb3ZpZGVLZXkgPSBpbmplY3Rba2V5XS5mcm9tO1xuICAgICAgdmFyIHNvdXJjZSA9IHZtO1xuICAgICAgd2hpbGUgKHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLl9wcm92aWRlZCAmJiBwcm92aWRlS2V5IGluIHNvdXJjZS5fcHJvdmlkZWQpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHNvdXJjZS5fcHJvdmlkZWRbcHJvdmlkZUtleV07XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2UgPSBzb3VyY2UuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIGlmICgnZGVmYXVsdCcgaW4gaW5qZWN0W2tleV0pIHtcbiAgICAgICAgICB2YXIgcHJvdmlkZURlZmF1bHQgPSBpbmplY3Rba2V5XS5kZWZhdWx0O1xuICAgICAgICAgIHJlc3VsdFtrZXldID0gdHlwZW9mIHByb3ZpZGVEZWZhdWx0ID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IHByb3ZpZGVEZWZhdWx0LmNhbGwodm0pXG4gICAgICAgICAgICA6IHByb3ZpZGVEZWZhdWx0O1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuKChcIkluamVjdGlvbiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbm90IGZvdW5kXCIpLCB2bSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckxpc3QgKFxuICB2YWwsXG4gIHJlbmRlclxuKSB7XG4gIHZhciByZXQsIGksIGwsIGtleXMsIGtleTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHJldCA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtpXSwgaSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgcmV0ID0gbmV3IEFycmF5KHZhbCk7XG4gICAgZm9yIChpID0gMDsgaSA8IHZhbDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSByZW5kZXIoaSArIDEsIGkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgcmV0ID0gbmV3IEFycmF5KGtleXMubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICByZXRbaV0gPSByZW5kZXIodmFsW2tleV0sIGtleSwgaSk7XG4gICAgfVxuICB9XG4gIGlmIChpc0RlZihyZXQpKSB7XG4gICAgKHJldCkuX2lzVkxpc3QgPSB0cnVlO1xuICB9XG4gIHJldHVybiByZXRcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyA8c2xvdD5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyU2xvdCAoXG4gIG5hbWUsXG4gIGZhbGxiYWNrLFxuICBwcm9wcyxcbiAgYmluZE9iamVjdFxuKSB7XG4gIHZhciBzY29wZWRTbG90Rm4gPSB0aGlzLiRzY29wZWRTbG90c1tuYW1lXTtcbiAgaWYgKHNjb3BlZFNsb3RGbikgeyAvLyBzY29wZWQgc2xvdFxuICAgIHByb3BzID0gcHJvcHMgfHwge307XG4gICAgaWYgKGJpbmRPYmplY3QpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFpc09iamVjdChiaW5kT2JqZWN0KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdzbG90IHYtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0JyxcbiAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBwcm9wcyA9IGV4dGVuZChleHRlbmQoe30sIGJpbmRPYmplY3QpLCBwcm9wcyk7XG4gICAgfVxuICAgIHJldHVybiBzY29wZWRTbG90Rm4ocHJvcHMpIHx8IGZhbGxiYWNrXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsb3ROb2RlcyA9IHRoaXMuJHNsb3RzW25hbWVdO1xuICAgIC8vIHdhcm4gZHVwbGljYXRlIHNsb3QgdXNhZ2VcbiAgICBpZiAoc2xvdE5vZGVzICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHNsb3ROb2Rlcy5fcmVuZGVyZWQgJiYgd2FybihcbiAgICAgICAgXCJEdXBsaWNhdGUgcHJlc2VuY2Ugb2Ygc2xvdCBcXFwiXCIgKyBuYW1lICsgXCJcXFwiIGZvdW5kIGluIHRoZSBzYW1lIHJlbmRlciB0cmVlIFwiICtcbiAgICAgICAgXCItIHRoaXMgd2lsbCBsaWtlbHkgY2F1c2UgcmVuZGVyIGVycm9ycy5cIixcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICAgIHNsb3ROb2Rlcy5fcmVuZGVyZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc2xvdE5vZGVzIHx8IGZhbGxiYWNrXG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmluZyBmaWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGaWx0ZXIgKGlkKSB7XG4gIHJldHVybiByZXNvbHZlQXNzZXQodGhpcy4kb3B0aW9ucywgJ2ZpbHRlcnMnLCBpZCwgdHJ1ZSkgfHwgaWRlbnRpdHlcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIGNoZWNraW5nIGtleUNvZGVzIGZyb20gY29uZmlnLlxuICogZXhwb3NlZCBhcyBWdWUucHJvdG90eXBlLl9rXG4gKiBwYXNzaW5nIGluIGV2ZW50S2V5TmFtZSBhcyBsYXN0IGFyZ3VtZW50IHNlcGFyYXRlbHkgZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAqL1xuZnVuY3Rpb24gY2hlY2tLZXlDb2RlcyAoXG4gIGV2ZW50S2V5Q29kZSxcbiAga2V5LFxuICBidWlsdEluQWxpYXMsXG4gIGV2ZW50S2V5TmFtZVxuKSB7XG4gIHZhciBrZXlDb2RlcyA9IGNvbmZpZy5rZXlDb2Rlc1trZXldIHx8IGJ1aWx0SW5BbGlhcztcbiAgaWYgKGtleUNvZGVzKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5Q29kZXMpKSB7XG4gICAgICByZXR1cm4ga2V5Q29kZXMuaW5kZXhPZihldmVudEtleUNvZGUpID09PSAtMVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ga2V5Q29kZXMgIT09IGV2ZW50S2V5Q29kZVxuICAgIH1cbiAgfSBlbHNlIGlmIChldmVudEtleU5hbWUpIHtcbiAgICByZXR1cm4gaHlwaGVuYXRlKGV2ZW50S2V5TmFtZSkgIT09IGtleVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIHYtYmluZD1cIm9iamVjdFwiIGludG8gYSBWTm9kZSdzIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGJpbmRPYmplY3RQcm9wcyAoXG4gIGRhdGEsXG4gIHRhZyxcbiAgdmFsdWUsXG4gIGFzUHJvcCxcbiAgaXNTeW5jXG4pIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ3YtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IG9yIEFycmF5IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdG9PYmplY3QodmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFyIGhhc2g7XG4gICAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ID09PSAnY2xhc3MnIHx8XG4gICAgICAgICAga2V5ID09PSAnc3R5bGUnIHx8XG4gICAgICAgICAgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIGhhc2ggPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB0eXBlID0gZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnR5cGU7XG4gICAgICAgICAgaGFzaCA9IGFzUHJvcCB8fCBjb25maWcubXVzdFVzZVByb3AodGFnLCB0eXBlLCBrZXkpXG4gICAgICAgICAgICA/IGRhdGEuZG9tUHJvcHMgfHwgKGRhdGEuZG9tUHJvcHMgPSB7fSlcbiAgICAgICAgICAgIDogZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShrZXkgaW4gaGFzaCkpIHtcbiAgICAgICAgICBoYXNoW2tleV0gPSB2YWx1ZVtrZXldO1xuXG4gICAgICAgICAgaWYgKGlzU3luYykge1xuICAgICAgICAgICAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgICAgICAgICAgIG9uWyhcInVwZGF0ZTpcIiArIGtleSldID0gZnVuY3Rpb24gKCRldmVudCkge1xuICAgICAgICAgICAgICB2YWx1ZVtrZXldID0gJGV2ZW50O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiB2YWx1ZSkgbG9vcCgga2V5ICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgc3RhdGljIHRyZWVzLlxuICovXG5mdW5jdGlvbiByZW5kZXJTdGF0aWMgKFxuICBpbmRleCxcbiAgaXNJbkZvclxuKSB7XG4gIC8vIHN0YXRpYyB0cmVlcyBjYW4gYmUgcmVuZGVyZWQgb25jZSBhbmQgY2FjaGVkIG9uIHRoZSBjb250cnVjdG9yIG9wdGlvbnNcbiAgLy8gc28gZXZlcnkgaW5zdGFuY2Ugc2hhcmVzIHRoZSBzYW1lIGNhY2hlZCB0cmVlc1xuICB2YXIgcmVuZGVyRm5zID0gdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnM7XG4gIHZhciBjYWNoZWQgPSByZW5kZXJGbnMuY2FjaGVkIHx8IChyZW5kZXJGbnMuY2FjaGVkID0gW10pO1xuICB2YXIgdHJlZSA9IGNhY2hlZFtpbmRleF07XG4gIC8vIGlmIGhhcyBhbHJlYWR5LXJlbmRlcmVkIHN0YXRpYyB0cmVlIGFuZCBub3QgaW5zaWRlIHYtZm9yLFxuICAvLyB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgdHJlZSBieSBkb2luZyBhIHNoYWxsb3cgY2xvbmUuXG4gIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodHJlZSlcbiAgICAgID8gY2xvbmVWTm9kZXModHJlZSlcbiAgICAgIDogY2xvbmVWTm9kZSh0cmVlKVxuICB9XG4gIC8vIG90aGVyd2lzZSwgcmVuZGVyIGEgZnJlc2ggdHJlZS5cbiAgdHJlZSA9IGNhY2hlZFtpbmRleF0gPSByZW5kZXJGbnNbaW5kZXhdLmNhbGwodGhpcy5fcmVuZGVyUHJveHksIG51bGwsIHRoaXMpO1xuICBtYXJrU3RhdGljKHRyZWUsIChcIl9fc3RhdGljX19cIiArIGluZGV4KSwgZmFsc2UpO1xuICByZXR1cm4gdHJlZVxufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciB2LW9uY2UuXG4gKiBFZmZlY3RpdmVseSBpdCBtZWFucyBtYXJraW5nIHRoZSBub2RlIGFzIHN0YXRpYyB3aXRoIGEgdW5pcXVlIGtleS5cbiAqL1xuZnVuY3Rpb24gbWFya09uY2UgKFxuICB0cmVlLFxuICBpbmRleCxcbiAga2V5XG4pIHtcbiAgbWFya1N0YXRpYyh0cmVlLCAoXCJfX29uY2VfX1wiICsgaW5kZXggKyAoa2V5ID8gKFwiX1wiICsga2V5KSA6IFwiXCIpKSwgdHJ1ZSk7XG4gIHJldHVybiB0cmVlXG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWMgKFxuICB0cmVlLFxuICBrZXksXG4gIGlzT25jZVxuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHRyZWUpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodHJlZVtpXSAmJiB0eXBlb2YgdHJlZVtpXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgbWFya1N0YXRpY05vZGUodHJlZVtpXSwgKGtleSArIFwiX1wiICsgaSksIGlzT25jZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG1hcmtTdGF0aWNOb2RlKHRyZWUsIGtleSwgaXNPbmNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrU3RhdGljTm9kZSAobm9kZSwga2V5LCBpc09uY2UpIHtcbiAgbm9kZS5pc1N0YXRpYyA9IHRydWU7XG4gIG5vZGUua2V5ID0ga2V5O1xuICBub2RlLmlzT25jZSA9IGlzT25jZTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGJpbmRPYmplY3RMaXN0ZW5lcnMgKGRhdGEsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ3Ytb24gd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCB2YWx1ZScsXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBvbiA9IGRhdGEub24gPSBkYXRhLm9uID8gZXh0ZW5kKHt9LCBkYXRhLm9uKSA6IHt9O1xuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgICAgIHZhciBleGlzdGluZyA9IG9uW2tleV07XG4gICAgICAgIHZhciBvdXJzID0gdmFsdWVba2V5XTtcbiAgICAgICAgb25ba2V5XSA9IGV4aXN0aW5nID8gW10uY29uY2F0KGV4aXN0aW5nLCBvdXJzKSA6IG91cnM7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbnN0YWxsUmVuZGVySGVscGVycyAodGFyZ2V0KSB7XG4gIHRhcmdldC5fbyA9IG1hcmtPbmNlO1xuICB0YXJnZXQuX24gPSB0b051bWJlcjtcbiAgdGFyZ2V0Ll9zID0gdG9TdHJpbmc7XG4gIHRhcmdldC5fbCA9IHJlbmRlckxpc3Q7XG4gIHRhcmdldC5fdCA9IHJlbmRlclNsb3Q7XG4gIHRhcmdldC5fcSA9IGxvb3NlRXF1YWw7XG4gIHRhcmdldC5faSA9IGxvb3NlSW5kZXhPZjtcbiAgdGFyZ2V0Ll9tID0gcmVuZGVyU3RhdGljO1xuICB0YXJnZXQuX2YgPSByZXNvbHZlRmlsdGVyO1xuICB0YXJnZXQuX2sgPSBjaGVja0tleUNvZGVzO1xuICB0YXJnZXQuX2IgPSBiaW5kT2JqZWN0UHJvcHM7XG4gIHRhcmdldC5fdiA9IGNyZWF0ZVRleHRWTm9kZTtcbiAgdGFyZ2V0Ll9lID0gY3JlYXRlRW1wdHlWTm9kZTtcbiAgdGFyZ2V0Ll91ID0gcmVzb2x2ZVNjb3BlZFNsb3RzO1xuICB0YXJnZXQuX2cgPSBiaW5kT2JqZWN0TGlzdGVuZXJzO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgKFxuICBkYXRhLFxuICBwcm9wcyxcbiAgY2hpbGRyZW4sXG4gIHBhcmVudCxcbiAgQ3RvclxuKSB7XG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMubGlzdGVuZXJzID0gZGF0YS5vbiB8fCBlbXB0eU9iamVjdDtcbiAgdGhpcy5pbmplY3Rpb25zID0gcmVzb2x2ZUluamVjdChvcHRpb25zLmluamVjdCwgcGFyZW50KTtcbiAgdGhpcy5zbG90cyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmVTbG90cyhjaGlsZHJlbiwgcGFyZW50KTsgfTtcblxuICAvLyBlbnN1cmUgdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gaW4gZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gIC8vIGdldHMgYSB1bmlxdWUgY29udGV4dCAtIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBjb3JyZWN0IG5hbWVkIHNsb3QgY2hlY2tcbiAgdmFyIGNvbnRleHRWbSA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgdmFyIGlzQ29tcGlsZWQgPSBpc1RydWUob3B0aW9ucy5fY29tcGlsZWQpO1xuICB2YXIgbmVlZE5vcm1hbGl6YXRpb24gPSAhaXNDb21waWxlZDtcblxuICAvLyBzdXBwb3J0IGZvciBjb21waWxlZCBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChpc0NvbXBpbGVkKSB7XG4gICAgLy8gZXhwb3NpbmcgJG9wdGlvbnMgZm9yIHJlbmRlclN0YXRpYygpXG4gICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgLy8gcHJlLXJlc29sdmUgc2xvdHMgZm9yIHJlbmRlclNsb3QoKVxuICAgIHRoaXMuJHNsb3RzID0gdGhpcy5zbG90cygpO1xuICAgIHRoaXMuJHNjb3BlZFNsb3RzID0gZGF0YS5zY29wZWRTbG90cyB8fCBlbXB0eU9iamVjdDtcbiAgfVxuXG4gIGlmIChvcHRpb25zLl9zY29wZUlkKSB7XG4gICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgICB2YXIgdm5vZGUgPSBjcmVhdGVFbGVtZW50KGNvbnRleHRWbSwgYSwgYiwgYywgZCwgbmVlZE5vcm1hbGl6YXRpb24pO1xuICAgICAgaWYgKHZub2RlKSB7XG4gICAgICAgIHZub2RlLmZ1bmN0aW9uYWxTY29wZUlkID0gb3B0aW9ucy5fc2NvcGVJZDtcbiAgICAgICAgdm5vZGUuZnVuY3Rpb25hbENvbnRleHQgPSBwYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm5vZGVcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudChjb250ZXh0Vm0sIGEsIGIsIGMsIGQsIG5lZWROb3JtYWxpemF0aW9uKTsgfTtcbiAgfVxufVxuXG5pbnN0YWxsUmVuZGVySGVscGVycyhGdW5jdGlvbmFsUmVuZGVyQ29udGV4dC5wcm90b3R5cGUpO1xuXG5mdW5jdGlvbiBjcmVhdGVGdW5jdGlvbmFsQ29tcG9uZW50IChcbiAgQ3RvcixcbiAgcHJvcHNEYXRhLFxuICBkYXRhLFxuICBjb250ZXh0Vm0sXG4gIGNoaWxkcmVuXG4pIHtcbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIHZhciBwcm9wcyA9IHt9O1xuICB2YXIgcHJvcE9wdGlvbnMgPSBvcHRpb25zLnByb3BzO1xuICBpZiAoaXNEZWYocHJvcE9wdGlvbnMpKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BPcHRpb25zKSB7XG4gICAgICBwcm9wc1trZXldID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcE9wdGlvbnMsIHByb3BzRGF0YSB8fCBlbXB0eU9iamVjdCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChpc0RlZihkYXRhLmF0dHJzKSkgeyBtZXJnZVByb3BzKHByb3BzLCBkYXRhLmF0dHJzKTsgfVxuICAgIGlmIChpc0RlZihkYXRhLnByb3BzKSkgeyBtZXJnZVByb3BzKHByb3BzLCBkYXRhLnByb3BzKTsgfVxuICB9XG5cbiAgdmFyIHJlbmRlckNvbnRleHQgPSBuZXcgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQoXG4gICAgZGF0YSxcbiAgICBwcm9wcyxcbiAgICBjaGlsZHJlbixcbiAgICBjb250ZXh0Vm0sXG4gICAgQ3RvclxuICApO1xuXG4gIHZhciB2bm9kZSA9IG9wdGlvbnMucmVuZGVyLmNhbGwobnVsbCwgcmVuZGVyQ29udGV4dC5fYywgcmVuZGVyQ29udGV4dCk7XG5cbiAgaWYgKHZub2RlIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICB2bm9kZS5mdW5jdGlvbmFsQ29udGV4dCA9IGNvbnRleHRWbTtcbiAgICB2bm9kZS5mdW5jdGlvbmFsT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgaWYgKGRhdGEuc2xvdCkge1xuICAgICAgKHZub2RlLmRhdGEgfHwgKHZub2RlLmRhdGEgPSB7fSkpLnNsb3QgPSBkYXRhLnNsb3Q7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZub2RlXG59XG5cbmZ1bmN0aW9uIG1lcmdlUHJvcHMgKHRvLCBmcm9tKSB7XG4gIGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG4gICAgdG9bY2FtZWxpemUoa2V5KV0gPSBmcm9tW2tleV07XG4gIH1cbn1cblxuLyogICovXG5cbi8vIGhvb2tzIHRvIGJlIGludm9rZWQgb24gY29tcG9uZW50IFZOb2RlcyBkdXJpbmcgcGF0Y2hcbnZhciBjb21wb25lbnRWTm9kZUhvb2tzID0ge1xuICBpbml0OiBmdW5jdGlvbiBpbml0IChcbiAgICB2bm9kZSxcbiAgICBoeWRyYXRpbmcsXG4gICAgcGFyZW50RWxtLFxuICAgIHJlZkVsbVxuICApIHtcbiAgICBpZiAoIXZub2RlLmNvbXBvbmVudEluc3RhbmNlIHx8IHZub2RlLmNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgdmFyIGNoaWxkID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlKFxuICAgICAgICB2bm9kZSxcbiAgICAgICAgYWN0aXZlSW5zdGFuY2UsXG4gICAgICAgIHBhcmVudEVsbSxcbiAgICAgICAgcmVmRWxtXG4gICAgICApO1xuICAgICAgY2hpbGQuJG1vdW50KGh5ZHJhdGluZyA/IHZub2RlLmVsbSA6IHVuZGVmaW5lZCwgaHlkcmF0aW5nKTtcbiAgICB9IGVsc2UgaWYgKHZub2RlLmRhdGEua2VlcEFsaXZlKSB7XG4gICAgICAvLyBrZXB0LWFsaXZlIGNvbXBvbmVudHMsIHRyZWF0IGFzIGEgcGF0Y2hcbiAgICAgIHZhciBtb3VudGVkTm9kZSA9IHZub2RlOyAvLyB3b3JrIGFyb3VuZCBmbG93XG4gICAgICBjb21wb25lbnRWTm9kZUhvb2tzLnByZXBhdGNoKG1vdW50ZWROb2RlLCBtb3VudGVkTm9kZSk7XG4gICAgfVxuICB9LFxuXG4gIHByZXBhdGNoOiBmdW5jdGlvbiBwcmVwYXRjaCAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgIHZhciBjaGlsZCA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgdXBkYXRlQ2hpbGRDb21wb25lbnQoXG4gICAgICBjaGlsZCxcbiAgICAgIG9wdGlvbnMucHJvcHNEYXRhLCAvLyB1cGRhdGVkIHByb3BzXG4gICAgICBvcHRpb25zLmxpc3RlbmVycywgLy8gdXBkYXRlZCBsaXN0ZW5lcnNcbiAgICAgIHZub2RlLCAvLyBuZXcgcGFyZW50IHZub2RlXG4gICAgICBvcHRpb25zLmNoaWxkcmVuIC8vIG5ldyBjaGlsZHJlblxuICAgICk7XG4gIH0sXG5cbiAgaW5zZXJ0OiBmdW5jdGlvbiBpbnNlcnQgKHZub2RlKSB7XG4gICAgdmFyIGNvbnRleHQgPSB2bm9kZS5jb250ZXh0O1xuICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIGlmICghY29tcG9uZW50SW5zdGFuY2UuX2lzTW91bnRlZCkge1xuICAgICAgY29tcG9uZW50SW5zdGFuY2UuX2lzTW91bnRlZCA9IHRydWU7XG4gICAgICBjYWxsSG9vayhjb21wb25lbnRJbnN0YW5jZSwgJ21vdW50ZWQnKTtcbiAgICB9XG4gICAgaWYgKHZub2RlLmRhdGEua2VlcEFsaXZlKSB7XG4gICAgICBpZiAoY29udGV4dC5faXNNb3VudGVkKSB7XG4gICAgICAgIC8vIHZ1ZS1yb3V0ZXIjMTIxMlxuICAgICAgICAvLyBEdXJpbmcgdXBkYXRlcywgYSBrZXB0LWFsaXZlIGNvbXBvbmVudCdzIGNoaWxkIGNvbXBvbmVudHMgbWF5XG4gICAgICAgIC8vIGNoYW5nZSwgc28gZGlyZWN0bHkgd2Fsa2luZyB0aGUgdHJlZSBoZXJlIG1heSBjYWxsIGFjdGl2YXRlZCBob29rc1xuICAgICAgICAvLyBvbiBpbmNvcnJlY3QgY2hpbGRyZW4uIEluc3RlYWQgd2UgcHVzaCB0aGVtIGludG8gYSBxdWV1ZSB3aGljaCB3aWxsXG4gICAgICAgIC8vIGJlIHByb2Nlc3NlZCBhZnRlciB0aGUgd2hvbGUgcGF0Y2ggcHJvY2VzcyBlbmRlZC5cbiAgICAgICAgcXVldWVBY3RpdmF0ZWRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aXZhdGVDaGlsZENvbXBvbmVudChjb21wb25lbnRJbnN0YW5jZSwgdHJ1ZSAvKiBkaXJlY3QgKi8pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95ICh2bm9kZSkge1xuICAgIHZhciBjb21wb25lbnRJbnN0YW5jZSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlO1xuICAgIGlmICghY29tcG9uZW50SW5zdGFuY2UuX2lzRGVzdHJveWVkKSB7XG4gICAgICBpZiAoIXZub2RlLmRhdGEua2VlcEFsaXZlKSB7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWFjdGl2YXRlQ2hpbGRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UsIHRydWUgLyogZGlyZWN0ICovKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbnZhciBob29rc1RvTWVyZ2UgPSBPYmplY3Qua2V5cyhjb21wb25lbnRWTm9kZUhvb2tzKTtcblxuZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50IChcbiAgQ3RvcixcbiAgZGF0YSxcbiAgY29udGV4dCxcbiAgY2hpbGRyZW4sXG4gIHRhZ1xuKSB7XG4gIGlmIChpc1VuZGVmKEN0b3IpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgYmFzZUN0b3IgPSBjb250ZXh0LiRvcHRpb25zLl9iYXNlO1xuXG4gIC8vIHBsYWluIG9wdGlvbnMgb2JqZWN0OiB0dXJuIGl0IGludG8gYSBjb25zdHJ1Y3RvclxuICBpZiAoaXNPYmplY3QoQ3RvcikpIHtcbiAgICBDdG9yID0gYmFzZUN0b3IuZXh0ZW5kKEN0b3IpO1xuICB9XG5cbiAgLy8gaWYgYXQgdGhpcyBzdGFnZSBpdCdzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIGFuIGFzeW5jIGNvbXBvbmVudCBmYWN0b3J5LFxuICAvLyByZWplY3QuXG4gIGlmICh0eXBlb2YgQ3RvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB3YXJuKChcIkludmFsaWQgQ29tcG9uZW50IGRlZmluaXRpb246IFwiICsgKFN0cmluZyhDdG9yKSkpLCBjb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBhc3luYyBjb21wb25lbnRcbiAgdmFyIGFzeW5jRmFjdG9yeTtcbiAgaWYgKGlzVW5kZWYoQ3Rvci5jaWQpKSB7XG4gICAgYXN5bmNGYWN0b3J5ID0gQ3RvcjtcbiAgICBDdG9yID0gcmVzb2x2ZUFzeW5jQ29tcG9uZW50KGFzeW5jRmFjdG9yeSwgYmFzZUN0b3IsIGNvbnRleHQpO1xuICAgIGlmIChDdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHJldHVybiBhIHBsYWNlaG9sZGVyIG5vZGUgZm9yIGFzeW5jIGNvbXBvbmVudCwgd2hpY2ggaXMgcmVuZGVyZWRcbiAgICAgIC8vIGFzIGEgY29tbWVudCBub2RlIGJ1dCBwcmVzZXJ2ZXMgYWxsIHRoZSByYXcgaW5mb3JtYXRpb24gZm9yIHRoZSBub2RlLlxuICAgICAgLy8gdGhlIGluZm9ybWF0aW9uIHdpbGwgYmUgdXNlZCBmb3IgYXN5bmMgc2VydmVyLXJlbmRlcmluZyBhbmQgaHlkcmF0aW9uLlxuICAgICAgcmV0dXJuIGNyZWF0ZUFzeW5jUGxhY2Vob2xkZXIoXG4gICAgICAgIGFzeW5jRmFjdG9yeSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIHRhZ1xuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGRhdGEgPSBkYXRhIHx8IHt9O1xuXG4gIC8vIHJlc29sdmUgY29uc3RydWN0b3Igb3B0aW9ucyBpbiBjYXNlIGdsb2JhbCBtaXhpbnMgYXJlIGFwcGxpZWQgYWZ0ZXJcbiAgLy8gY29tcG9uZW50IGNvbnN0cnVjdG9yIGNyZWF0aW9uXG4gIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMoQ3Rvcik7XG5cbiAgLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGRhdGEgaW50byBwcm9wcyAmIGV2ZW50c1xuICBpZiAoaXNEZWYoZGF0YS5tb2RlbCkpIHtcbiAgICB0cmFuc2Zvcm1Nb2RlbChDdG9yLm9wdGlvbnMsIGRhdGEpO1xuICB9XG5cbiAgLy8gZXh0cmFjdCBwcm9wc1xuICB2YXIgcHJvcHNEYXRhID0gZXh0cmFjdFByb3BzRnJvbVZOb2RlRGF0YShkYXRhLCBDdG9yLCB0YWcpO1xuXG4gIC8vIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4gIGlmIChpc1RydWUoQ3Rvci5vcHRpb25zLmZ1bmN0aW9uYWwpKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQoQ3RvciwgcHJvcHNEYXRhLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbilcbiAgfVxuXG4gIC8vIGV4dHJhY3QgbGlzdGVuZXJzLCBzaW5jZSB0aGVzZSBuZWVkcyB0byBiZSB0cmVhdGVkIGFzXG4gIC8vIGNoaWxkIGNvbXBvbmVudCBsaXN0ZW5lcnMgaW5zdGVhZCBvZiBET00gbGlzdGVuZXJzXG4gIHZhciBsaXN0ZW5lcnMgPSBkYXRhLm9uO1xuICAvLyByZXBsYWNlIHdpdGggbGlzdGVuZXJzIHdpdGggLm5hdGl2ZSBtb2RpZmllclxuICAvLyBzbyBpdCBnZXRzIHByb2Nlc3NlZCBkdXJpbmcgcGFyZW50IGNvbXBvbmVudCBwYXRjaC5cbiAgZGF0YS5vbiA9IGRhdGEubmF0aXZlT247XG5cbiAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuYWJzdHJhY3QpKSB7XG4gICAgLy8gYWJzdHJhY3QgY29tcG9uZW50cyBkbyBub3Qga2VlcCBhbnl0aGluZ1xuICAgIC8vIG90aGVyIHRoYW4gcHJvcHMgJiBsaXN0ZW5lcnMgJiBzbG90XG5cbiAgICAvLyB3b3JrIGFyb3VuZCBmbG93XG4gICAgdmFyIHNsb3QgPSBkYXRhLnNsb3Q7XG4gICAgZGF0YSA9IHt9O1xuICAgIGlmIChzbG90KSB7XG4gICAgICBkYXRhLnNsb3QgPSBzbG90O1xuICAgIH1cbiAgfVxuXG4gIC8vIG1lcmdlIGNvbXBvbmVudCBtYW5hZ2VtZW50IGhvb2tzIG9udG8gdGhlIHBsYWNlaG9sZGVyIG5vZGVcbiAgbWVyZ2VIb29rcyhkYXRhKTtcblxuICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciB2bm9kZVxuICB2YXIgbmFtZSA9IEN0b3Iub3B0aW9ucy5uYW1lIHx8IHRhZztcbiAgdmFyIHZub2RlID0gbmV3IFZOb2RlKFxuICAgIChcInZ1ZS1jb21wb25lbnQtXCIgKyAoQ3Rvci5jaWQpICsgKG5hbWUgPyAoXCItXCIgKyBuYW1lKSA6ICcnKSksXG4gICAgZGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCxcbiAgICB7IEN0b3I6IEN0b3IsIHByb3BzRGF0YTogcHJvcHNEYXRhLCBsaXN0ZW5lcnM6IGxpc3RlbmVycywgdGFnOiB0YWcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9LFxuICAgIGFzeW5jRmFjdG9yeVxuICApO1xuICByZXR1cm4gdm5vZGVcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZSAoXG4gIHZub2RlLCAvLyB3ZSBrbm93IGl0J3MgTW91bnRlZENvbXBvbmVudFZOb2RlIGJ1dCBmbG93IGRvZXNuJ3RcbiAgcGFyZW50LCAvLyBhY3RpdmVJbnN0YW5jZSBpbiBsaWZlY3ljbGUgc3RhdGVcbiAgcGFyZW50RWxtLFxuICByZWZFbG1cbikge1xuICB2YXIgdm5vZGVDb21wb25lbnRPcHRpb25zID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgX2lzQ29tcG9uZW50OiB0cnVlLFxuICAgIHBhcmVudDogcGFyZW50LFxuICAgIHByb3BzRGF0YTogdm5vZGVDb21wb25lbnRPcHRpb25zLnByb3BzRGF0YSxcbiAgICBfY29tcG9uZW50VGFnOiB2bm9kZUNvbXBvbmVudE9wdGlvbnMudGFnLFxuICAgIF9wYXJlbnRWbm9kZTogdm5vZGUsXG4gICAgX3BhcmVudExpc3RlbmVyczogdm5vZGVDb21wb25lbnRPcHRpb25zLmxpc3RlbmVycyxcbiAgICBfcmVuZGVyQ2hpbGRyZW46IHZub2RlQ29tcG9uZW50T3B0aW9ucy5jaGlsZHJlbixcbiAgICBfcGFyZW50RWxtOiBwYXJlbnRFbG0gfHwgbnVsbCxcbiAgICBfcmVmRWxtOiByZWZFbG0gfHwgbnVsbFxuICB9O1xuICAvLyBjaGVjayBpbmxpbmUtdGVtcGxhdGUgcmVuZGVyIGZ1bmN0aW9uc1xuICB2YXIgaW5saW5lVGVtcGxhdGUgPSB2bm9kZS5kYXRhLmlubGluZVRlbXBsYXRlO1xuICBpZiAoaXNEZWYoaW5saW5lVGVtcGxhdGUpKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSBpbmxpbmVUZW1wbGF0ZS5yZW5kZXI7XG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBpbmxpbmVUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnM7XG4gIH1cbiAgcmV0dXJuIG5ldyB2bm9kZUNvbXBvbmVudE9wdGlvbnMuQ3RvcihvcHRpb25zKVxufVxuXG5mdW5jdGlvbiBtZXJnZUhvb2tzIChkYXRhKSB7XG4gIGlmICghZGF0YS5ob29rKSB7XG4gICAgZGF0YS5ob29rID0ge307XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rc1RvTWVyZ2UubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgIHZhciBmcm9tUGFyZW50ID0gZGF0YS5ob29rW2tleV07XG4gICAgdmFyIG91cnMgPSBjb21wb25lbnRWTm9kZUhvb2tzW2tleV07XG4gICAgZGF0YS5ob29rW2tleV0gPSBmcm9tUGFyZW50ID8gbWVyZ2VIb29rJDEob3VycywgZnJvbVBhcmVudCkgOiBvdXJzO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlSG9vayQxIChvbmUsIHR3bykge1xuICByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICBvbmUoYSwgYiwgYywgZCk7XG4gICAgdHdvKGEsIGIsIGMsIGQpO1xuICB9XG59XG5cbi8vIHRyYW5zZm9ybSBjb21wb25lbnQgdi1tb2RlbCBpbmZvICh2YWx1ZSBhbmQgY2FsbGJhY2spIGludG9cbi8vIHByb3AgYW5kIGV2ZW50IGhhbmRsZXIgcmVzcGVjdGl2ZWx5LlxuZnVuY3Rpb24gdHJhbnNmb3JtTW9kZWwgKG9wdGlvbnMsIGRhdGEpIHtcbiAgdmFyIHByb3AgPSAob3B0aW9ucy5tb2RlbCAmJiBvcHRpb25zLm1vZGVsLnByb3ApIHx8ICd2YWx1ZSc7XG4gIHZhciBldmVudCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwuZXZlbnQpIHx8ICdpbnB1dCc7KGRhdGEucHJvcHMgfHwgKGRhdGEucHJvcHMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcbiAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgaWYgKGlzRGVmKG9uW2V2ZW50XSkpIHtcbiAgICBvbltldmVudF0gPSBbZGF0YS5tb2RlbC5jYWxsYmFja10uY29uY2F0KG9uW2V2ZW50XSk7XG4gIH0gZWxzZSB7XG4gICAgb25bZXZlbnRdID0gZGF0YS5tb2RlbC5jYWxsYmFjaztcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIFNJTVBMRV9OT1JNQUxJWkUgPSAxO1xudmFyIEFMV0FZU19OT1JNQUxJWkUgPSAyO1xuXG4vLyB3cmFwcGVyIGZ1bmN0aW9uIGZvciBwcm92aWRpbmcgYSBtb3JlIGZsZXhpYmxlIGludGVyZmFjZVxuLy8gd2l0aG91dCBnZXR0aW5nIHllbGxlZCBhdCBieSBmbG93XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50IChcbiAgY29udGV4dCxcbiAgdGFnLFxuICBkYXRhLFxuICBjaGlsZHJlbixcbiAgbm9ybWFsaXphdGlvblR5cGUsXG4gIGFsd2F5c05vcm1hbGl6ZVxuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGEpIHx8IGlzUHJpbWl0aXZlKGRhdGEpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBjaGlsZHJlbjtcbiAgICBjaGlsZHJlbiA9IGRhdGE7XG4gICAgZGF0YSA9IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoaXNUcnVlKGFsd2F5c05vcm1hbGl6ZSkpIHtcbiAgICBub3JtYWxpemF0aW9uVHlwZSA9IEFMV0FZU19OT1JNQUxJWkU7XG4gIH1cbiAgcmV0dXJuIF9jcmVhdGVFbGVtZW50KGNvbnRleHQsIHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlKVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlXG4pIHtcbiAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKChkYXRhKS5fX29iX18pKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgXCJBdm9pZCB1c2luZyBvYnNlcnZlZCBkYXRhIG9iamVjdCBhcyB2bm9kZSBkYXRhOiBcIiArIChKU09OLnN0cmluZ2lmeShkYXRhKSkgKyBcIlxcblwiICtcbiAgICAgICdBbHdheXMgY3JlYXRlIGZyZXNoIHZub2RlIGRhdGEgb2JqZWN0cyBpbiBlYWNoIHJlbmRlciEnLFxuICAgICAgY29udGV4dFxuICAgICk7XG4gICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICB9XG4gIC8vIG9iamVjdCBzeW50YXggaW4gdi1iaW5kXG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmlzKSkge1xuICAgIHRhZyA9IGRhdGEuaXM7XG4gIH1cbiAgaWYgKCF0YWcpIHtcbiAgICAvLyBpbiBjYXNlIG9mIGNvbXBvbmVudCA6aXMgc2V0IHRvIGZhbHN5IHZhbHVlXG4gICAgcmV0dXJuIGNyZWF0ZUVtcHR5Vk5vZGUoKVxuICB9XG4gIC8vIHdhcm4gYWdhaW5zdCBub24tcHJpbWl0aXZlIGtleVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgIGlzRGVmKGRhdGEpICYmIGlzRGVmKGRhdGEua2V5KSAmJiAhaXNQcmltaXRpdmUoZGF0YS5rZXkpXG4gICkge1xuICAgIHdhcm4oXG4gICAgICAnQXZvaWQgdXNpbmcgbm9uLXByaW1pdGl2ZSB2YWx1ZSBhcyBrZXksICcgK1xuICAgICAgJ3VzZSBzdHJpbmcvbnVtYmVyIHZhbHVlIGluc3RlYWQuJyxcbiAgICAgIGNvbnRleHRcbiAgICApO1xuICB9XG4gIC8vIHN1cHBvcnQgc2luZ2xlIGZ1bmN0aW9uIGNoaWxkcmVuIGFzIGRlZmF1bHQgc2NvcGVkIHNsb3RcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgdHlwZW9mIGNoaWxkcmVuWzBdID09PSAnZnVuY3Rpb24nXG4gICkge1xuICAgIGRhdGEgPSBkYXRhIHx8IHt9O1xuICAgIGRhdGEuc2NvcGVkU2xvdHMgPSB7IGRlZmF1bHQ6IGNoaWxkcmVuWzBdIH07XG4gICAgY2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgfVxuICBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IEFMV0FZU19OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IG5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfSBlbHNlIGlmIChub3JtYWxpemF0aW9uVHlwZSA9PT0gU0lNUExFX05PUk1BTElaRSkge1xuICAgIGNoaWxkcmVuID0gc2ltcGxlTm9ybWFsaXplQ2hpbGRyZW4oY2hpbGRyZW4pO1xuICB9XG4gIHZhciB2bm9kZSwgbnM7XG4gIGlmICh0eXBlb2YgdGFnID09PSAnc3RyaW5nJykge1xuICAgIHZhciBDdG9yO1xuICAgIG5zID0gKGNvbnRleHQuJHZub2RlICYmIGNvbnRleHQuJHZub2RlLm5zKSB8fCBjb25maWcuZ2V0VGFnTmFtZXNwYWNlKHRhZyk7XG4gICAgaWYgKGNvbmZpZy5pc1Jlc2VydmVkVGFnKHRhZykpIHtcbiAgICAgIC8vIHBsYXRmb3JtIGJ1aWx0LWluIGVsZW1lbnRzXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgY29uZmlnLnBhcnNlUGxhdGZvcm1UYWdOYW1lKHRhZyksIGRhdGEsIGNoaWxkcmVuLFxuICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGlzRGVmKEN0b3IgPSByZXNvbHZlQXNzZXQoY29udGV4dC4kb3B0aW9ucywgJ2NvbXBvbmVudHMnLCB0YWcpKSkge1xuICAgICAgLy8gY29tcG9uZW50XG4gICAgICB2bm9kZSA9IGNyZWF0ZUNvbXBvbmVudChDdG9yLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbiwgdGFnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5rbm93biBvciB1bmxpc3RlZCBuYW1lc3BhY2VkIGVsZW1lbnRzXG4gICAgICAvLyBjaGVjayBhdCBydW50aW1lIGJlY2F1c2UgaXQgbWF5IGdldCBhc3NpZ25lZCBhIG5hbWVzcGFjZSB3aGVuIGl0c1xuICAgICAgLy8gcGFyZW50IG5vcm1hbGl6ZXMgY2hpbGRyZW5cbiAgICAgIHZub2RlID0gbmV3IFZOb2RlKFxuICAgICAgICB0YWcsIGRhdGEsIGNoaWxkcmVuLFxuICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gZGlyZWN0IGNvbXBvbmVudCBvcHRpb25zIC8gY29uc3RydWN0b3JcbiAgICB2bm9kZSA9IGNyZWF0ZUNvbXBvbmVudCh0YWcsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKTtcbiAgfVxuICBpZiAoaXNEZWYodm5vZGUpKSB7XG4gICAgaWYgKG5zKSB7IGFwcGx5TlModm5vZGUsIG5zKTsgfVxuICAgIHJldHVybiB2bm9kZVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseU5TICh2bm9kZSwgbnMsIGZvcmNlKSB7XG4gIHZub2RlLm5zID0gbnM7XG4gIGlmICh2bm9kZS50YWcgPT09ICdmb3JlaWduT2JqZWN0Jykge1xuICAgIC8vIHVzZSBkZWZhdWx0IG5hbWVzcGFjZSBpbnNpZGUgZm9yZWlnbk9iamVjdFxuICAgIG5zID0gdW5kZWZpbmVkO1xuICAgIGZvcmNlID0gdHJ1ZTtcbiAgfVxuICBpZiAoaXNEZWYodm5vZGUuY2hpbGRyZW4pKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGlzRGVmKGNoaWxkLnRhZykgJiYgKGlzVW5kZWYoY2hpbGQubnMpIHx8IGlzVHJ1ZShmb3JjZSkpKSB7XG4gICAgICAgIGFwcGx5TlMoY2hpbGQsIG5zLCBmb3JjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0UmVuZGVyICh2bSkge1xuICB2bS5fdm5vZGUgPSBudWxsOyAvLyB0aGUgcm9vdCBvZiB0aGUgY2hpbGQgdHJlZVxuICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICB2YXIgcGFyZW50Vm5vZGUgPSB2bS4kdm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTsgLy8gdGhlIHBsYWNlaG9sZGVyIG5vZGUgaW4gcGFyZW50IHRyZWVcbiAgdmFyIHJlbmRlckNvbnRleHQgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5jb250ZXh0O1xuICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMob3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sIHJlbmRlckNvbnRleHQpO1xuICB2bS4kc2NvcGVkU2xvdHMgPSBlbXB0eU9iamVjdDtcbiAgLy8gYmluZCB0aGUgY3JlYXRlRWxlbWVudCBmbiB0byB0aGlzIGluc3RhbmNlXG4gIC8vIHNvIHRoYXQgd2UgZ2V0IHByb3BlciByZW5kZXIgY29udGV4dCBpbnNpZGUgaXQuXG4gIC8vIGFyZ3Mgb3JkZXI6IHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlLCBhbHdheXNOb3JtYWxpemVcbiAgLy8gaW50ZXJuYWwgdmVyc2lvbiBpcyB1c2VkIGJ5IHJlbmRlciBmdW5jdGlvbnMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZXNcbiAgdm0uX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgZmFsc2UpOyB9O1xuICAvLyBub3JtYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGZvciB0aGUgcHVibGljIHZlcnNpb24sIHVzZWQgaW5cbiAgLy8gdXNlci13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMuXG4gIHZtLiRjcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodm0sIGEsIGIsIGMsIGQsIHRydWUpOyB9O1xuXG4gIC8vICRhdHRycyAmICRsaXN0ZW5lcnMgYXJlIGV4cG9zZWQgZm9yIGVhc2llciBIT0MgY3JlYXRpb24uXG4gIC8vIHRoZXkgbmVlZCB0byBiZSByZWFjdGl2ZSBzbyB0aGF0IEhPQ3MgdXNpbmcgdGhlbSBhcmUgYWx3YXlzIHVwZGF0ZWRcbiAgdmFyIHBhcmVudERhdGEgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5kYXRhO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZGVmaW5lUmVhY3RpdmUodm0sICckYXR0cnMnLCBwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybihcIiRhdHRycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICAgIGRlZmluZVJlYWN0aXZlKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIGRlZmluZVJlYWN0aXZlKHZtLCAnJGF0dHJzJywgcGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0LCBudWxsLCB0cnVlKTtcbiAgICBkZWZpbmVSZWFjdGl2ZSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlck1peGluIChWdWUpIHtcbiAgLy8gaW5zdGFsbCBydW50aW1lIGNvbnZlbmllbmNlIGhlbHBlcnNcbiAgaW5zdGFsbFJlbmRlckhlbHBlcnMoVnVlLnByb3RvdHlwZSk7XG5cbiAgVnVlLnByb3RvdHlwZS4kbmV4dFRpY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICByZXR1cm4gbmV4dFRpY2soZm4sIHRoaXMpXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS5fcmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgdmFyIHJlZiA9IHZtLiRvcHRpb25zO1xuICAgIHZhciByZW5kZXIgPSByZWYucmVuZGVyO1xuICAgIHZhciBfcGFyZW50Vm5vZGUgPSByZWYuX3BhcmVudFZub2RlO1xuXG4gICAgaWYgKHZtLl9pc01vdW50ZWQpIHtcbiAgICAgIC8vIGlmIHRoZSBwYXJlbnQgZGlkbid0IHVwZGF0ZSwgdGhlIHNsb3Qgbm9kZXMgd2lsbCBiZSB0aGUgb25lcyBmcm9tXG4gICAgICAvLyBsYXN0IHJlbmRlci4gVGhleSBuZWVkIHRvIGJlIGNsb25lZCB0byBlbnN1cmUgXCJmcmVzaG5lc3NcIiBmb3IgdGhpcyByZW5kZXIuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gdm0uJHNsb3RzKSB7XG4gICAgICAgIHZhciBzbG90ID0gdm0uJHNsb3RzW2tleV07XG4gICAgICAgIGlmIChzbG90Ll9yZW5kZXJlZCkge1xuICAgICAgICAgIHZtLiRzbG90c1trZXldID0gY2xvbmVWTm9kZXMoc2xvdCwgdHJ1ZSAvKiBkZWVwICovKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZtLiRzY29wZWRTbG90cyA9IChfcGFyZW50Vm5vZGUgJiYgX3BhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHMpIHx8IGVtcHR5T2JqZWN0O1xuXG4gICAgLy8gc2V0IHBhcmVudCB2bm9kZS4gdGhpcyBhbGxvd3MgcmVuZGVyIGZ1bmN0aW9ucyB0byBoYXZlIGFjY2Vzc1xuICAgIC8vIHRvIHRoZSBkYXRhIG9uIHRoZSBwbGFjZWhvbGRlciBub2RlLlxuICAgIHZtLiR2bm9kZSA9IF9wYXJlbnRWbm9kZTtcbiAgICAvLyByZW5kZXIgc2VsZlxuICAgIHZhciB2bm9kZTtcbiAgICB0cnkge1xuICAgICAgdm5vZGUgPSByZW5kZXIuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJyZW5kZXJcIik7XG4gICAgICAvLyByZXR1cm4gZXJyb3IgcmVuZGVyIHJlc3VsdCxcbiAgICAgIC8vIG9yIHByZXZpb3VzIHZub2RlIHRvIHByZXZlbnQgcmVuZGVyIGVycm9yIGNhdXNpbmcgYmxhbmsgY29tcG9uZW50XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKHZtLiRvcHRpb25zLnJlbmRlckVycm9yKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZub2RlID0gdm0uJG9wdGlvbnMucmVuZGVyRXJyb3IuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50LCBlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJyZW5kZXJFcnJvclwiKTtcbiAgICAgICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdm5vZGUgPSB2bS5fdm5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybiBlbXB0eSB2bm9kZSBpbiBjYXNlIHRoZSByZW5kZXIgZnVuY3Rpb24gZXJyb3JlZCBvdXRcbiAgICBpZiAoISh2bm9kZSBpbnN0YW5jZW9mIFZOb2RlKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgQXJyYXkuaXNBcnJheSh2bm9kZSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnTXVsdGlwbGUgcm9vdCBub2RlcyByZXR1cm5lZCBmcm9tIHJlbmRlciBmdW5jdGlvbi4gUmVuZGVyIGZ1bmN0aW9uICcgK1xuICAgICAgICAgICdzaG91bGQgcmV0dXJuIGEgc2luZ2xlIHJvb3Qgbm9kZS4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2bm9kZSA9IGNyZWF0ZUVtcHR5Vk5vZGUoKTtcbiAgICB9XG4gICAgLy8gc2V0IHBhcmVudFxuICAgIHZub2RlLnBhcmVudCA9IF9wYXJlbnRWbm9kZTtcbiAgICByZXR1cm4gdm5vZGVcbiAgfTtcbn1cblxuLyogICovXG5cbnZhciB1aWQgPSAwO1xuXG5mdW5jdGlvbiBpbml0TWl4aW4gKFZ1ZSkge1xuICBWdWUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIC8vIGEgdWlkXG4gICAgdm0uX3VpZCA9IHVpZCsrO1xuXG4gICAgdmFyIHN0YXJ0VGFnLCBlbmRUYWc7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgY29uZmlnLnBlcmZvcm1hbmNlICYmIG1hcmspIHtcbiAgICAgIHN0YXJ0VGFnID0gXCJ2dWUtcGVyZi1zdGFydDpcIiArICh2bS5fdWlkKTtcbiAgICAgIGVuZFRhZyA9IFwidnVlLXBlcmYtZW5kOlwiICsgKHZtLl91aWQpO1xuICAgICAgbWFyayhzdGFydFRhZyk7XG4gICAgfVxuXG4gICAgLy8gYSBmbGFnIHRvIGF2b2lkIHRoaXMgYmVpbmcgb2JzZXJ2ZWRcbiAgICB2bS5faXNWdWUgPSB0cnVlO1xuICAgIC8vIG1lcmdlIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLl9pc0NvbXBvbmVudCkge1xuICAgICAgLy8gb3B0aW1pemUgaW50ZXJuYWwgY29tcG9uZW50IGluc3RhbnRpYXRpb25cbiAgICAgIC8vIHNpbmNlIGR5bmFtaWMgb3B0aW9ucyBtZXJnaW5nIGlzIHByZXR0eSBzbG93LCBhbmQgbm9uZSBvZiB0aGVcbiAgICAgIC8vIGludGVybmFsIGNvbXBvbmVudCBvcHRpb25zIG5lZWRzIHNwZWNpYWwgdHJlYXRtZW50LlxuICAgICAgaW5pdEludGVybmFsQ29tcG9uZW50KHZtLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uJG9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnModm0uY29uc3RydWN0b3IpLFxuICAgICAgICBvcHRpb25zIHx8IHt9LFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaW5pdFByb3h5KHZtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgfVxuICAgIC8vIGV4cG9zZSByZWFsIHNlbGZcbiAgICB2bS5fc2VsZiA9IHZtO1xuICAgIGluaXRMaWZlY3ljbGUodm0pO1xuICAgIGluaXRFdmVudHModm0pO1xuICAgIGluaXRSZW5kZXIodm0pO1xuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlQ3JlYXRlJyk7XG4gICAgaW5pdEluamVjdGlvbnModm0pOyAvLyByZXNvbHZlIGluamVjdGlvbnMgYmVmb3JlIGRhdGEvcHJvcHNcbiAgICBpbml0U3RhdGUodm0pO1xuICAgIGluaXRQcm92aWRlKHZtKTsgLy8gcmVzb2x2ZSBwcm92aWRlIGFmdGVyIGRhdGEvcHJvcHNcbiAgICBjYWxsSG9vayh2bSwgJ2NyZWF0ZWQnKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICB2bS5fbmFtZSA9IGZvcm1hdENvbXBvbmVudE5hbWUodm0sIGZhbHNlKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgKHZtLl9uYW1lKSArIFwiIGluaXRcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgIH1cblxuICAgIGlmICh2bS4kb3B0aW9ucy5lbCkge1xuICAgICAgdm0uJG1vdW50KHZtLiRvcHRpb25zLmVsKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRJbnRlcm5hbENvbXBvbmVudCAodm0sIG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodm0uY29uc3RydWN0b3Iub3B0aW9ucyk7XG4gIC8vIGRvaW5nIHRoaXMgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuIGR5bmFtaWMgZW51bWVyYXRpb24uXG4gIG9wdHMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gIG9wdHMucHJvcHNEYXRhID0gb3B0aW9ucy5wcm9wc0RhdGE7XG4gIG9wdHMuX3BhcmVudFZub2RlID0gb3B0aW9ucy5fcGFyZW50Vm5vZGU7XG4gIG9wdHMuX3BhcmVudExpc3RlbmVycyA9IG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgb3B0cy5fcmVuZGVyQ2hpbGRyZW4gPSBvcHRpb25zLl9yZW5kZXJDaGlsZHJlbjtcbiAgb3B0cy5fY29tcG9uZW50VGFnID0gb3B0aW9ucy5fY29tcG9uZW50VGFnO1xuICBvcHRzLl9wYXJlbnRFbG0gPSBvcHRpb25zLl9wYXJlbnRFbG07XG4gIG9wdHMuX3JlZkVsbSA9IG9wdGlvbnMuX3JlZkVsbTtcbiAgaWYgKG9wdGlvbnMucmVuZGVyKSB7XG4gICAgb3B0cy5yZW5kZXIgPSBvcHRpb25zLnJlbmRlcjtcbiAgICBvcHRzLnN0YXRpY1JlbmRlckZucyA9IG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnM7XG4gIGlmIChDdG9yLnN1cGVyKSB7XG4gICAgdmFyIHN1cGVyT3B0aW9ucyA9IHJlc29sdmVDb25zdHJ1Y3Rvck9wdGlvbnMoQ3Rvci5zdXBlcik7XG4gICAgdmFyIGNhY2hlZFN1cGVyT3B0aW9ucyA9IEN0b3Iuc3VwZXJPcHRpb25zO1xuICAgIGlmIChzdXBlck9wdGlvbnMgIT09IGNhY2hlZFN1cGVyT3B0aW9ucykge1xuICAgICAgLy8gc3VwZXIgb3B0aW9uIGNoYW5nZWQsXG4gICAgICAvLyBuZWVkIHRvIHJlc29sdmUgbmV3IG9wdGlvbnMuXG4gICAgICBDdG9yLnN1cGVyT3B0aW9ucyA9IHN1cGVyT3B0aW9ucztcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgbGF0ZS1tb2RpZmllZC9hdHRhY2hlZCBvcHRpb25zICgjNDk3NilcbiAgICAgIHZhciBtb2RpZmllZE9wdGlvbnMgPSByZXNvbHZlTW9kaWZpZWRPcHRpb25zKEN0b3IpO1xuICAgICAgLy8gdXBkYXRlIGJhc2UgZXh0ZW5kIG9wdGlvbnNcbiAgICAgIGlmIChtb2RpZmllZE9wdGlvbnMpIHtcbiAgICAgICAgZXh0ZW5kKEN0b3IuZXh0ZW5kT3B0aW9ucywgbW9kaWZpZWRPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSBDdG9yLm9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoc3VwZXJPcHRpb25zLCBDdG9yLmV4dGVuZE9wdGlvbnMpO1xuICAgICAgaWYgKG9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLmNvbXBvbmVudHNbb3B0aW9ucy5uYW1lXSA9IEN0b3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVNb2RpZmllZE9wdGlvbnMgKEN0b3IpIHtcbiAgdmFyIG1vZGlmaWVkO1xuICB2YXIgbGF0ZXN0ID0gQ3Rvci5vcHRpb25zO1xuICB2YXIgZXh0ZW5kZWQgPSBDdG9yLmV4dGVuZE9wdGlvbnM7XG4gIHZhciBzZWFsZWQgPSBDdG9yLnNlYWxlZE9wdGlvbnM7XG4gIGZvciAodmFyIGtleSBpbiBsYXRlc3QpIHtcbiAgICBpZiAobGF0ZXN0W2tleV0gIT09IHNlYWxlZFtrZXldKSB7XG4gICAgICBpZiAoIW1vZGlmaWVkKSB7IG1vZGlmaWVkID0ge307IH1cbiAgICAgIG1vZGlmaWVkW2tleV0gPSBkZWR1cGUobGF0ZXN0W2tleV0sIGV4dGVuZGVkW2tleV0sIHNlYWxlZFtrZXldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1vZGlmaWVkXG59XG5cbmZ1bmN0aW9uIGRlZHVwZSAobGF0ZXN0LCBleHRlbmRlZCwgc2VhbGVkKSB7XG4gIC8vIGNvbXBhcmUgbGF0ZXN0IGFuZCBzZWFsZWQgdG8gZW5zdXJlIGxpZmVjeWNsZSBob29rcyB3b24ndCBiZSBkdXBsaWNhdGVkXG4gIC8vIGJldHdlZW4gbWVyZ2VzXG4gIGlmIChBcnJheS5pc0FycmF5KGxhdGVzdCkpIHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgc2VhbGVkID0gQXJyYXkuaXNBcnJheShzZWFsZWQpID8gc2VhbGVkIDogW3NlYWxlZF07XG4gICAgZXh0ZW5kZWQgPSBBcnJheS5pc0FycmF5KGV4dGVuZGVkKSA/IGV4dGVuZGVkIDogW2V4dGVuZGVkXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhdGVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gcHVzaCBvcmlnaW5hbCBvcHRpb25zIGFuZCBub3Qgc2VhbGVkIG9wdGlvbnMgdG8gZXhjbHVkZSBkdXBsaWNhdGVkIG9wdGlvbnNcbiAgICAgIGlmIChleHRlbmRlZC5pbmRleE9mKGxhdGVzdFtpXSkgPj0gMCB8fCBzZWFsZWQuaW5kZXhPZihsYXRlc3RbaV0pIDwgMCkge1xuICAgICAgICByZXMucHVzaChsYXRlc3RbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxhdGVzdFxuICB9XG59XG5cbmZ1bmN0aW9uIFZ1ZSQzIChvcHRpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgISh0aGlzIGluc3RhbmNlb2YgVnVlJDMpXG4gICkge1xuICAgIHdhcm4oJ1Z1ZSBpcyBhIGNvbnN0cnVjdG9yIGFuZCBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGBuZXdgIGtleXdvcmQnKTtcbiAgfVxuICB0aGlzLl9pbml0KG9wdGlvbnMpO1xufVxuXG5pbml0TWl4aW4oVnVlJDMpO1xuc3RhdGVNaXhpbihWdWUkMyk7XG5ldmVudHNNaXhpbihWdWUkMyk7XG5saWZlY3ljbGVNaXhpbihWdWUkMyk7XG5yZW5kZXJNaXhpbihWdWUkMyk7XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0VXNlIChWdWUpIHtcbiAgVnVlLnVzZSA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICB2YXIgaW5zdGFsbGVkUGx1Z2lucyA9ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zIHx8ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zID0gW10pKTtcbiAgICBpZiAoaW5zdGFsbGVkUGx1Z2lucy5pbmRleE9mKHBsdWdpbikgPiAtMSkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICAvLyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaW5zdGFsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGx1Z2luLmluc3RhbGwuYXBwbHkocGx1Z2luLCBhcmdzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBsdWdpbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG4gICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgcmV0dXJuIHRoaXNcbiAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRNaXhpbiQxIChWdWUpIHtcbiAgVnVlLm1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gICAgdGhpcy5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucywgbWl4aW4pO1xuICAgIHJldHVybiB0aGlzXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0RXh0ZW5kIChWdWUpIHtcbiAgLyoqXG4gICAqIEVhY2ggaW5zdGFuY2UgY29uc3RydWN0b3IsIGluY2x1ZGluZyBWdWUsIGhhcyBhIHVuaXF1ZVxuICAgKiBjaWQuIFRoaXMgZW5hYmxlcyB1cyB0byBjcmVhdGUgd3JhcHBlZCBcImNoaWxkXG4gICAqIGNvbnN0cnVjdG9yc1wiIGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlIGFuZCBjYWNoZSB0aGVtLlxuICAgKi9cbiAgVnVlLmNpZCA9IDA7XG4gIHZhciBjaWQgPSAxO1xuXG4gIC8qKlxuICAgKiBDbGFzcyBpbmhlcml0YW5jZVxuICAgKi9cbiAgVnVlLmV4dGVuZCA9IGZ1bmN0aW9uIChleHRlbmRPcHRpb25zKSB7XG4gICAgZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnMgfHwge307XG4gICAgdmFyIFN1cGVyID0gdGhpcztcbiAgICB2YXIgU3VwZXJJZCA9IFN1cGVyLmNpZDtcbiAgICB2YXIgY2FjaGVkQ3RvcnMgPSBleHRlbmRPcHRpb25zLl9DdG9yIHx8IChleHRlbmRPcHRpb25zLl9DdG9yID0ge30pO1xuICAgIGlmIChjYWNoZWRDdG9yc1tTdXBlcklkXSkge1xuICAgICAgcmV0dXJuIGNhY2hlZEN0b3JzW1N1cGVySWRdXG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBleHRlbmRPcHRpb25zLm5hbWUgfHwgU3VwZXIub3B0aW9ucy5uYW1lO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIS9eW2EtekEtWl1bXFx3LV0qJC8udGVzdChuYW1lKSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdJbnZhbGlkIGNvbXBvbmVudCBuYW1lOiBcIicgKyBuYW1lICsgJ1wiLiBDb21wb25lbnQgbmFtZXMgJyArXG4gICAgICAgICAgJ2NhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIHRoZSBoeXBoZW4sICcgK1xuICAgICAgICAgICdhbmQgbXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgU3ViID0gZnVuY3Rpb24gVnVlQ29tcG9uZW50IChvcHRpb25zKSB7XG4gICAgICB0aGlzLl9pbml0KG9wdGlvbnMpO1xuICAgIH07XG4gICAgU3ViLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBlKTtcbiAgICBTdWIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViO1xuICAgIFN1Yi5jaWQgPSBjaWQrKztcbiAgICBTdWIub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhcbiAgICAgIFN1cGVyLm9wdGlvbnMsXG4gICAgICBleHRlbmRPcHRpb25zXG4gICAgKTtcbiAgICBTdWJbJ3N1cGVyJ10gPSBTdXBlcjtcblxuICAgIC8vIEZvciBwcm9wcyBhbmQgY29tcHV0ZWQgcHJvcGVydGllcywgd2UgZGVmaW5lIHRoZSBwcm94eSBnZXR0ZXJzIG9uXG4gICAgLy8gdGhlIFZ1ZSBpbnN0YW5jZXMgYXQgZXh0ZW5zaW9uIHRpbWUsIG9uIHRoZSBleHRlbmRlZCBwcm90b3R5cGUuIFRoaXNcbiAgICAvLyBhdm9pZHMgT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxzIGZvciBlYWNoIGluc3RhbmNlIGNyZWF0ZWQuXG4gICAgaWYgKFN1Yi5vcHRpb25zLnByb3BzKSB7XG4gICAgICBpbml0UHJvcHMkMShTdWIpO1xuICAgIH1cbiAgICBpZiAoU3ViLm9wdGlvbnMuY29tcHV0ZWQpIHtcbiAgICAgIGluaXRDb21wdXRlZCQxKFN1Yik7XG4gICAgfVxuXG4gICAgLy8gYWxsb3cgZnVydGhlciBleHRlbnNpb24vbWl4aW4vcGx1Z2luIHVzYWdlXG4gICAgU3ViLmV4dGVuZCA9IFN1cGVyLmV4dGVuZDtcbiAgICBTdWIubWl4aW4gPSBTdXBlci5taXhpbjtcbiAgICBTdWIudXNlID0gU3VwZXIudXNlO1xuXG4gICAgLy8gY3JlYXRlIGFzc2V0IHJlZ2lzdGVycywgc28gZXh0ZW5kZWQgY2xhc3Nlc1xuICAgIC8vIGNhbiBoYXZlIHRoZWlyIHByaXZhdGUgYXNzZXRzIHRvby5cbiAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICBTdWJbdHlwZV0gPSBTdXBlclt0eXBlXTtcbiAgICB9KTtcbiAgICAvLyBlbmFibGUgcmVjdXJzaXZlIHNlbGYtbG9va3VwXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIFN1Yi5vcHRpb25zLmNvbXBvbmVudHNbbmFtZV0gPSBTdWI7XG4gICAgfVxuXG4gICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgc3VwZXIgb3B0aW9ucyBhdCBleHRlbnNpb24gdGltZS5cbiAgICAvLyBsYXRlciBhdCBpbnN0YW50aWF0aW9uIHdlIGNhbiBjaGVjayBpZiBTdXBlcidzIG9wdGlvbnMgaGF2ZVxuICAgIC8vIGJlZW4gdXBkYXRlZC5cbiAgICBTdWIuc3VwZXJPcHRpb25zID0gU3VwZXIub3B0aW9ucztcbiAgICBTdWIuZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnM7XG4gICAgU3ViLnNlYWxlZE9wdGlvbnMgPSBleHRlbmQoe30sIFN1Yi5vcHRpb25zKTtcblxuICAgIC8vIGNhY2hlIGNvbnN0cnVjdG9yXG4gICAgY2FjaGVkQ3RvcnNbU3VwZXJJZF0gPSBTdWI7XG4gICAgcmV0dXJuIFN1YlxuICB9O1xufVxuXG5mdW5jdGlvbiBpbml0UHJvcHMkMSAoQ29tcCkge1xuICB2YXIgcHJvcHMgPSBDb21wLm9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIHByb3h5KENvbXAucHJvdG90eXBlLCBcIl9wcm9wc1wiLCBrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRDb21wdXRlZCQxIChDb21wKSB7XG4gIHZhciBjb21wdXRlZCA9IENvbXAub3B0aW9ucy5jb21wdXRlZDtcbiAgZm9yICh2YXIga2V5IGluIGNvbXB1dGVkKSB7XG4gICAgZGVmaW5lQ29tcHV0ZWQoQ29tcC5wcm90b3R5cGUsIGtleSwgY29tcHV0ZWRba2V5XSk7XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRBc3NldFJlZ2lzdGVycyAoVnVlKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYXNzZXQgcmVnaXN0cmF0aW9uIG1ldGhvZHMuXG4gICAqL1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlW3R5cGVdID0gZnVuY3Rpb24gKFxuICAgICAgaWQsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKSB7XG4gICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtpZF1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGlmICh0eXBlID09PSAnY29tcG9uZW50JyAmJiBjb25maWcuaXNSZXNlcnZlZFRhZyhpZCkpIHtcbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICdEbyBub3QgdXNlIGJ1aWx0LWluIG9yIHJlc2VydmVkIEhUTUwgZWxlbWVudHMgYXMgY29tcG9uZW50ICcgK1xuICAgICAgICAgICAgICAnaWQ6ICcgKyBpZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25lbnQnICYmIGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBkZWZpbml0aW9uLm5hbWUgfHwgaWQ7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdkaXJlY3RpdmUnICYmIHR5cGVvZiBkZWZpbml0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlvbiwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXSA9IGRlZmluaXRpb247XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uXG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lIChvcHRzKSB7XG4gIHJldHVybiBvcHRzICYmIChvcHRzLkN0b3Iub3B0aW9ucy5uYW1lIHx8IG9wdHMudGFnKVxufVxuXG5mdW5jdGlvbiBtYXRjaGVzIChwYXR0ZXJuLCBuYW1lKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHBhdHRlcm4pKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAodHlwZW9mIHBhdHRlcm4gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4uc3BsaXQoJywnKS5pbmRleE9mKG5hbWUpID4gLTFcbiAgfSBlbHNlIGlmIChpc1JlZ0V4cChwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLnRlc3QobmFtZSlcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gcHJ1bmVDYWNoZSAoa2VlcEFsaXZlSW5zdGFuY2UsIGZpbHRlcikge1xuICB2YXIgY2FjaGUgPSBrZWVwQWxpdmVJbnN0YW5jZS5jYWNoZTtcbiAgdmFyIGtleXMgPSBrZWVwQWxpdmVJbnN0YW5jZS5rZXlzO1xuICB2YXIgX3Zub2RlID0ga2VlcEFsaXZlSW5zdGFuY2UuX3Zub2RlO1xuICBmb3IgKHZhciBrZXkgaW4gY2FjaGUpIHtcbiAgICB2YXIgY2FjaGVkTm9kZSA9IGNhY2hlW2tleV07XG4gICAgaWYgKGNhY2hlZE5vZGUpIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjYWNoZWROb2RlLmNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgaWYgKG5hbWUgJiYgIWZpbHRlcihuYW1lKSkge1xuICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleSwga2V5cywgX3Zub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJ1bmVDYWNoZUVudHJ5IChcbiAgY2FjaGUsXG4gIGtleSxcbiAga2V5cyxcbiAgY3VycmVudFxuKSB7XG4gIHZhciBjYWNoZWQkJDEgPSBjYWNoZVtrZXldO1xuICBpZiAoY2FjaGVkJCQxICYmIGNhY2hlZCQkMSAhPT0gY3VycmVudCkge1xuICAgIGNhY2hlZCQkMS5jb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpO1xuICB9XG4gIGNhY2hlW2tleV0gPSBudWxsO1xuICByZW1vdmUoa2V5cywga2V5KTtcbn1cblxudmFyIHBhdHRlcm5UeXBlcyA9IFtTdHJpbmcsIFJlZ0V4cCwgQXJyYXldO1xuXG52YXIgS2VlcEFsaXZlID0ge1xuICBuYW1lOiAna2VlcC1hbGl2ZScsXG4gIGFic3RyYWN0OiB0cnVlLFxuXG4gIHByb3BzOiB7XG4gICAgaW5jbHVkZTogcGF0dGVyblR5cGVzLFxuICAgIGV4Y2x1ZGU6IHBhdHRlcm5UeXBlcyxcbiAgICBtYXg6IFtTdHJpbmcsIE51bWJlcl1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkICgpIHtcbiAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLmtleXMgPSBbXTtcbiAgfSxcblxuICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcyQxLmNhY2hlKSB7XG4gICAgICBwcnVuZUNhY2hlRW50cnkodGhpcyQxLmNhY2hlLCBrZXksIHRoaXMkMS5rZXlzKTtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBpbmNsdWRlOiBmdW5jdGlvbiBpbmNsdWRlICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcywgZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIG1hdGNoZXModmFsLCBuYW1lKTsgfSk7XG4gICAgfSxcbiAgICBleGNsdWRlOiBmdW5jdGlvbiBleGNsdWRlICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcywgZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuICFtYXRjaGVzKHZhbCwgbmFtZSk7IH0pO1xuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlciAoKSB7XG4gICAgdmFyIHZub2RlID0gZ2V0Rmlyc3RDb21wb25lbnRDaGlsZCh0aGlzLiRzbG90cy5kZWZhdWx0KTtcbiAgICB2YXIgY29tcG9uZW50T3B0aW9ucyA9IHZub2RlICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgaWYgKGNvbXBvbmVudE9wdGlvbnMpIHtcbiAgICAgIC8vIGNoZWNrIHBhdHRlcm5cbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjb21wb25lbnRPcHRpb25zKTtcbiAgICAgIGlmIChuYW1lICYmIChcbiAgICAgICAgKHRoaXMuaW5jbHVkZSAmJiAhbWF0Y2hlcyh0aGlzLmluY2x1ZGUsIG5hbWUpKSB8fFxuICAgICAgICAodGhpcy5leGNsdWRlICYmIG1hdGNoZXModGhpcy5leGNsdWRlLCBuYW1lKSlcbiAgICAgICkpIHtcbiAgICAgICAgcmV0dXJuIHZub2RlXG4gICAgICB9XG5cbiAgICAgIHZhciByZWYgPSB0aGlzO1xuICAgICAgdmFyIGNhY2hlID0gcmVmLmNhY2hlO1xuICAgICAgdmFyIGtleXMgPSByZWYua2V5cztcbiAgICAgIHZhciBrZXkgPSB2bm9kZS5rZXkgPT0gbnVsbFxuICAgICAgICAvLyBzYW1lIGNvbnN0cnVjdG9yIG1heSBnZXQgcmVnaXN0ZXJlZCBhcyBkaWZmZXJlbnQgbG9jYWwgY29tcG9uZW50c1xuICAgICAgICAvLyBzbyBjaWQgYWxvbmUgaXMgbm90IGVub3VnaCAoIzMyNjkpXG4gICAgICAgID8gY29tcG9uZW50T3B0aW9ucy5DdG9yLmNpZCArIChjb21wb25lbnRPcHRpb25zLnRhZyA/IChcIjo6XCIgKyAoY29tcG9uZW50T3B0aW9ucy50YWcpKSA6ICcnKVxuICAgICAgICA6IHZub2RlLmtleTtcbiAgICAgIGlmIChjYWNoZVtrZXldKSB7XG4gICAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY2FjaGVba2V5XS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgLy8gbWFrZSBjdXJyZW50IGtleSBmcmVzaGVzdFxuICAgICAgICByZW1vdmUoa2V5cywga2V5KTtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZVtrZXldID0gdm5vZGU7XG4gICAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgICAvLyBwcnVuZSBvbGRlc3QgZW50cnlcbiAgICAgICAgaWYgKHRoaXMubWF4ICYmIGtleXMubGVuZ3RoID4gcGFyc2VJbnQodGhpcy5tYXgpKSB7XG4gICAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXlzWzBdLCBrZXlzLCB0aGlzLl92bm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdm5vZGUuZGF0YS5rZWVwQWxpdmUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdm5vZGVcbiAgfVxufTtcblxudmFyIGJ1aWx0SW5Db21wb25lbnRzID0ge1xuICBLZWVwQWxpdmU6IEtlZXBBbGl2ZVxufTtcblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRHbG9iYWxBUEkgKFZ1ZSkge1xuICAvLyBjb25maWdcbiAgdmFyIGNvbmZpZ0RlZiA9IHt9O1xuICBjb25maWdEZWYuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZmlnOyB9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbmZpZ0RlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnRG8gbm90IHJlcGxhY2UgdGhlIFZ1ZS5jb25maWcgb2JqZWN0LCBzZXQgaW5kaXZpZHVhbCBmaWVsZHMgaW5zdGVhZC4nXG4gICAgICApO1xuICAgIH07XG4gIH1cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZSwgJ2NvbmZpZycsIGNvbmZpZ0RlZik7XG5cbiAgLy8gZXhwb3NlZCB1dGlsIG1ldGhvZHMuXG4gIC8vIE5PVEU6IHRoZXNlIGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJIC0gYXZvaWQgcmVseWluZyBvblxuICAvLyB0aGVtIHVubGVzcyB5b3UgYXJlIGF3YXJlIG9mIHRoZSByaXNrLlxuICBWdWUudXRpbCA9IHtcbiAgICB3YXJuOiB3YXJuLFxuICAgIGV4dGVuZDogZXh0ZW5kLFxuICAgIG1lcmdlT3B0aW9uczogbWVyZ2VPcHRpb25zLFxuICAgIGRlZmluZVJlYWN0aXZlOiBkZWZpbmVSZWFjdGl2ZVxuICB9O1xuXG4gIFZ1ZS5zZXQgPSBzZXQ7XG4gIFZ1ZS5kZWxldGUgPSBkZWw7XG4gIFZ1ZS5uZXh0VGljayA9IG5leHRUaWNrO1xuXG4gIFZ1ZS5vcHRpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgIFZ1ZS5vcHRpb25zW3R5cGUgKyAncyddID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfSk7XG5cbiAgLy8gdGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBcImJhc2VcIiBjb25zdHJ1Y3RvciB0byBleHRlbmQgYWxsIHBsYWluLW9iamVjdFxuICAvLyBjb21wb25lbnRzIHdpdGggaW4gV2VleCdzIG11bHRpLWluc3RhbmNlIHNjZW5hcmlvcy5cbiAgVnVlLm9wdGlvbnMuX2Jhc2UgPSBWdWU7XG5cbiAgZXh0ZW5kKFZ1ZS5vcHRpb25zLmNvbXBvbmVudHMsIGJ1aWx0SW5Db21wb25lbnRzKTtcblxuICBpbml0VXNlKFZ1ZSk7XG4gIGluaXRNaXhpbiQxKFZ1ZSk7XG4gIGluaXRFeHRlbmQoVnVlKTtcbiAgaW5pdEFzc2V0UmVnaXN0ZXJzKFZ1ZSk7XG59XG5cbmluaXRHbG9iYWxBUEkoVnVlJDMpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlJDMucHJvdG90eXBlLCAnJGlzU2VydmVyJywge1xuICBnZXQ6IGlzU2VydmVyUmVuZGVyaW5nXG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZSQzLnByb3RvdHlwZSwgJyRzc3JDb250ZXh0Jywge1xuICBnZXQ6IGZ1bmN0aW9uIGdldCAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gdGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dFxuICB9XG59KTtcblxuVnVlJDMudmVyc2lvbiA9ICcyLjUuMic7XG5cbi8qICAqL1xuXG4vLyB0aGVzZSBhcmUgcmVzZXJ2ZWQgZm9yIHdlYiBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IGNvbXBpbGVkIGF3YXlcbi8vIGR1cmluZyB0ZW1wbGF0ZSBjb21waWxhdGlvblxudmFyIGlzUmVzZXJ2ZWRBdHRyID0gbWFrZU1hcCgnc3R5bGUsY2xhc3MnKTtcblxuLy8gYXR0cmlidXRlcyB0aGF0IHNob3VsZCBiZSB1c2luZyBwcm9wcyBmb3IgYmluZGluZ1xudmFyIGFjY2VwdFZhbHVlID0gbWFrZU1hcCgnaW5wdXQsdGV4dGFyZWEsb3B0aW9uLHNlbGVjdCxwcm9ncmVzcycpO1xudmFyIG11c3RVc2VQcm9wID0gZnVuY3Rpb24gKHRhZywgdHlwZSwgYXR0cikge1xuICByZXR1cm4gKFxuICAgIChhdHRyID09PSAndmFsdWUnICYmIGFjY2VwdFZhbHVlKHRhZykpICYmIHR5cGUgIT09ICdidXR0b24nIHx8XG4gICAgKGF0dHIgPT09ICdzZWxlY3RlZCcgJiYgdGFnID09PSAnb3B0aW9uJykgfHxcbiAgICAoYXR0ciA9PT0gJ2NoZWNrZWQnICYmIHRhZyA9PT0gJ2lucHV0JykgfHxcbiAgICAoYXR0ciA9PT0gJ211dGVkJyAmJiB0YWcgPT09ICd2aWRlbycpXG4gIClcbn07XG5cbnZhciBpc0VudW1lcmF0ZWRBdHRyID0gbWFrZU1hcCgnY29udGVudGVkaXRhYmxlLGRyYWdnYWJsZSxzcGVsbGNoZWNrJyk7XG5cbnZhciBpc0Jvb2xlYW5BdHRyID0gbWFrZU1hcChcbiAgJ2FsbG93ZnVsbHNjcmVlbixhc3luYyxhdXRvZm9jdXMsYXV0b3BsYXksY2hlY2tlZCxjb21wYWN0LGNvbnRyb2xzLGRlY2xhcmUsJyArXG4gICdkZWZhdWx0LGRlZmF1bHRjaGVja2VkLGRlZmF1bHRtdXRlZCxkZWZhdWx0c2VsZWN0ZWQsZGVmZXIsZGlzYWJsZWQsJyArXG4gICdlbmFibGVkLGZvcm1ub3ZhbGlkYXRlLGhpZGRlbixpbmRldGVybWluYXRlLGluZXJ0LGlzbWFwLGl0ZW1zY29wZSxsb29wLG11bHRpcGxlLCcgK1xuICAnbXV0ZWQsbm9ocmVmLG5vcmVzaXplLG5vc2hhZGUsbm92YWxpZGF0ZSxub3dyYXAsb3BlbixwYXVzZW9uZXhpdCxyZWFkb25seSwnICtcbiAgJ3JlcXVpcmVkLHJldmVyc2VkLHNjb3BlZCxzZWFtbGVzcyxzZWxlY3RlZCxzb3J0YWJsZSx0cmFuc2xhdGUsJyArXG4gICd0cnVlc3BlZWQsdHlwZW11c3RtYXRjaCx2aXNpYmxlJ1xuKTtcblxudmFyIHhsaW5rTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG5cbnZhciBpc1hsaW5rID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuY2hhckF0KDUpID09PSAnOicgJiYgbmFtZS5zbGljZSgwLCA1KSA9PT0gJ3hsaW5rJ1xufTtcblxudmFyIGdldFhsaW5rUHJvcCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBpc1hsaW5rKG5hbWUpID8gbmFtZS5zbGljZSg2LCBuYW1lLmxlbmd0aCkgOiAnJ1xufTtcblxudmFyIGlzRmFsc3lBdHRyVmFsdWUgPSBmdW5jdGlvbiAodmFsKSB7XG4gIHJldHVybiB2YWwgPT0gbnVsbCB8fCB2YWwgPT09IGZhbHNlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gZ2VuQ2xhc3NGb3JWbm9kZSAodm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgcGFyZW50Tm9kZSA9IHZub2RlO1xuICB2YXIgY2hpbGROb2RlID0gdm5vZGU7XG4gIHdoaWxlIChpc0RlZihjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpKSB7XG4gICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmNvbXBvbmVudEluc3RhbmNlLl92bm9kZTtcbiAgICBpZiAoY2hpbGROb2RlLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBtZXJnZUNsYXNzRGF0YShjaGlsZE5vZGUuZGF0YSwgZGF0YSk7XG4gICAgfVxuICB9XG4gIHdoaWxlIChpc0RlZihwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnQpKSB7XG4gICAgaWYgKHBhcmVudE5vZGUuZGF0YSkge1xuICAgICAgZGF0YSA9IG1lcmdlQ2xhc3NEYXRhKGRhdGEsIHBhcmVudE5vZGUuZGF0YSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZW5kZXJDbGFzcyhkYXRhLnN0YXRpY0NsYXNzLCBkYXRhLmNsYXNzKVxufVxuXG5mdW5jdGlvbiBtZXJnZUNsYXNzRGF0YSAoY2hpbGQsIHBhcmVudCkge1xuICByZXR1cm4ge1xuICAgIHN0YXRpY0NsYXNzOiBjb25jYXQoY2hpbGQuc3RhdGljQ2xhc3MsIHBhcmVudC5zdGF0aWNDbGFzcyksXG4gICAgY2xhc3M6IGlzRGVmKGNoaWxkLmNsYXNzKVxuICAgICAgPyBbY2hpbGQuY2xhc3MsIHBhcmVudC5jbGFzc11cbiAgICAgIDogcGFyZW50LmNsYXNzXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQ2xhc3MgKFxuICBzdGF0aWNDbGFzcyxcbiAgZHluYW1pY0NsYXNzXG4pIHtcbiAgaWYgKGlzRGVmKHN0YXRpY0NsYXNzKSB8fCBpc0RlZihkeW5hbWljQ2xhc3MpKSB7XG4gICAgcmV0dXJuIGNvbmNhdChzdGF0aWNDbGFzcywgc3RyaW5naWZ5Q2xhc3MoZHluYW1pY0NsYXNzKSlcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gY29uY2F0IChhLCBiKSB7XG4gIHJldHVybiBhID8gYiA/IChhICsgJyAnICsgYikgOiBhIDogKGIgfHwgJycpXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUNsYXNzICh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5QXJyYXkodmFsdWUpXG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBzdHJpbmdpZnlPYmplY3QodmFsdWUpXG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gJydcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5QXJyYXkgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIHN0cmluZ2lmaWVkO1xuICBmb3IgKHZhciBpID0gMCwgbCA9IHZhbHVlLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChpc0RlZihzdHJpbmdpZmllZCA9IHN0cmluZ2lmeUNsYXNzKHZhbHVlW2ldKSkgJiYgc3RyaW5naWZpZWQgIT09ICcnKSB7XG4gICAgICBpZiAocmVzKSB7IHJlcyArPSAnICc7IH1cbiAgICAgIHJlcyArPSBzdHJpbmdpZmllZDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlPYmplY3QgKHZhbHVlKSB7XG4gIHZhciByZXMgPSAnJztcbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlW2tleV0pIHtcbiAgICAgIGlmIChyZXMpIHsgcmVzICs9ICcgJzsgfVxuICAgICAgcmVzICs9IGtleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIG5hbWVzcGFjZU1hcCA9IHtcbiAgc3ZnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICBtYXRoOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCdcbn07XG5cbnZhciBpc0hUTUxUYWcgPSBtYWtlTWFwKFxuICAnaHRtbCxib2R5LGJhc2UsaGVhZCxsaW5rLG1ldGEsc3R5bGUsdGl0bGUsJyArXG4gICdhZGRyZXNzLGFydGljbGUsYXNpZGUsZm9vdGVyLGhlYWRlcixoMSxoMixoMyxoNCxoNSxoNixoZ3JvdXAsbmF2LHNlY3Rpb24sJyArXG4gICdkaXYsZGQsZGwsZHQsZmlnY2FwdGlvbixmaWd1cmUscGljdHVyZSxocixpbWcsbGksbWFpbixvbCxwLHByZSx1bCwnICtcbiAgJ2EsYixhYmJyLGJkaSxiZG8sYnIsY2l0ZSxjb2RlLGRhdGEsZGZuLGVtLGksa2JkLG1hcmsscSxycCxydCxydGMscnVieSwnICtcbiAgJ3Msc2FtcCxzbWFsbCxzcGFuLHN0cm9uZyxzdWIsc3VwLHRpbWUsdSx2YXIsd2JyLGFyZWEsYXVkaW8sbWFwLHRyYWNrLHZpZGVvLCcgK1xuICAnZW1iZWQsb2JqZWN0LHBhcmFtLHNvdXJjZSxjYW52YXMsc2NyaXB0LG5vc2NyaXB0LGRlbCxpbnMsJyArXG4gICdjYXB0aW9uLGNvbCxjb2xncm91cCx0YWJsZSx0aGVhZCx0Ym9keSx0ZCx0aCx0ciwnICtcbiAgJ2J1dHRvbixkYXRhbGlzdCxmaWVsZHNldCxmb3JtLGlucHV0LGxhYmVsLGxlZ2VuZCxtZXRlcixvcHRncm91cCxvcHRpb24sJyArXG4gICdvdXRwdXQscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhLCcgK1xuICAnZGV0YWlscyxkaWFsb2csbWVudSxtZW51aXRlbSxzdW1tYXJ5LCcgK1xuICAnY29udGVudCxlbGVtZW50LHNoYWRvdyx0ZW1wbGF0ZSxibG9ja3F1b3RlLGlmcmFtZSx0Zm9vdCdcbik7XG5cbi8vIHRoaXMgbWFwIGlzIGludGVudGlvbmFsbHkgc2VsZWN0aXZlLCBvbmx5IGNvdmVyaW5nIFNWRyBlbGVtZW50cyB0aGF0IG1heVxuLy8gY29udGFpbiBjaGlsZCBlbGVtZW50cy5cbnZhciBpc1NWRyA9IG1ha2VNYXAoXG4gICdzdmcsYW5pbWF0ZSxjaXJjbGUsY2xpcHBhdGgsY3Vyc29yLGRlZnMsZGVzYyxlbGxpcHNlLGZpbHRlcixmb250LWZhY2UsJyArXG4gICdmb3JlaWduT2JqZWN0LGcsZ2x5cGgsaW1hZ2UsbGluZSxtYXJrZXIsbWFzayxtaXNzaW5nLWdseXBoLHBhdGgscGF0dGVybiwnICtcbiAgJ3BvbHlnb24scG9seWxpbmUscmVjdCxzd2l0Y2gsc3ltYm9sLHRleHQsdGV4dHBhdGgsdHNwYW4sdXNlLHZpZXcnLFxuICB0cnVlXG4pO1xuXG5cblxudmFyIGlzUmVzZXJ2ZWRUYWcgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHJldHVybiBpc0hUTUxUYWcodGFnKSB8fCBpc1NWRyh0YWcpXG59O1xuXG5mdW5jdGlvbiBnZXRUYWdOYW1lc3BhY2UgKHRhZykge1xuICBpZiAoaXNTVkcodGFnKSkge1xuICAgIHJldHVybiAnc3ZnJ1xuICB9XG4gIC8vIGJhc2ljIHN1cHBvcnQgZm9yIE1hdGhNTFxuICAvLyBub3RlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBvdGhlciBNYXRoTUwgZWxlbWVudHMgYmVpbmcgY29tcG9uZW50IHJvb3RzXG4gIGlmICh0YWcgPT09ICdtYXRoJykge1xuICAgIHJldHVybiAnbWF0aCdcbiAgfVxufVxuXG52YXIgdW5rbm93bkVsZW1lbnRDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5mdW5jdGlvbiBpc1Vua25vd25FbGVtZW50ICh0YWcpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghaW5Ccm93c2VyKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAoaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgdGFnID0gdGFnLnRvTG93ZXJDYXNlKCk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAodW5rbm93bkVsZW1lbnRDYWNoZVt0YWddICE9IG51bGwpIHtcbiAgICByZXR1cm4gdW5rbm93bkVsZW1lbnRDYWNoZVt0YWddXG4gIH1cbiAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICBpZiAodGFnLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjgyMTAzNjQvMTA3MDI0NFxuICAgIHJldHVybiAodW5rbm93bkVsZW1lbnRDYWNoZVt0YWddID0gKFxuICAgICAgZWwuY29uc3RydWN0b3IgPT09IHdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnQgfHxcbiAgICAgIGVsLmNvbnN0cnVjdG9yID09PSB3aW5kb3cuSFRNTEVsZW1lbnRcbiAgICApKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAodW5rbm93bkVsZW1lbnRDYWNoZVt0YWddID0gL0hUTUxVbmtub3duRWxlbWVudC8udGVzdChlbC50b1N0cmluZygpKSlcbiAgfVxufVxuXG52YXIgaXNUZXh0SW5wdXRUeXBlID0gbWFrZU1hcCgndGV4dCxudW1iZXIscGFzc3dvcmQsc2VhcmNoLGVtYWlsLHRlbCx1cmwnKTtcblxuLyogICovXG5cbi8qKlxuICogUXVlcnkgYW4gZWxlbWVudCBzZWxlY3RvciBpZiBpdCdzIG5vdCBhbiBlbGVtZW50IGFscmVhZHkuXG4gKi9cbmZ1bmN0aW9uIHF1ZXJ5IChlbCkge1xuICBpZiAodHlwZW9mIGVsID09PSAnc3RyaW5nJykge1xuICAgIHZhciBzZWxlY3RlZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpO1xuICAgIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ0Nhbm5vdCBmaW5kIGVsZW1lbnQ6ICcgKyBlbFxuICAgICAgKTtcbiAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWRcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZWxcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCQxICh0YWdOYW1lLCB2bm9kZSkge1xuICB2YXIgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRhZ05hbWUgIT09ICdzZWxlY3QnKSB7XG4gICAgcmV0dXJuIGVsbVxuICB9XG4gIC8vIGZhbHNlIG9yIG51bGwgd2lsbCByZW1vdmUgdGhlIGF0dHJpYnV0ZSBidXQgdW5kZWZpbmVkIHdpbGwgbm90XG4gIGlmICh2bm9kZS5kYXRhICYmIHZub2RlLmRhdGEuYXR0cnMgJiYgdm5vZGUuZGF0YS5hdHRycy5tdWx0aXBsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZWxtLnNldEF0dHJpYnV0ZSgnbXVsdGlwbGUnLCAnbXVsdGlwbGUnKTtcbiAgfVxuICByZXR1cm4gZWxtXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyAobmFtZXNwYWNlLCB0YWdOYW1lKSB7XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlTWFwW25hbWVzcGFjZV0sIHRhZ05hbWUpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlICh0ZXh0KSB7XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21tZW50ICh0ZXh0KSB7XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVDb21tZW50KHRleHQpXG59XG5cbmZ1bmN0aW9uIGluc2VydEJlZm9yZSAocGFyZW50Tm9kZSwgbmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSkge1xuICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShuZXdOb2RlLCByZWZlcmVuY2VOb2RlKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGQgKG5vZGUsIGNoaWxkKSB7XG4gIG5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpO1xufVxuXG5mdW5jdGlvbiBhcHBlbmRDaGlsZCAobm9kZSwgY2hpbGQpIHtcbiAgbm9kZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5cbmZ1bmN0aW9uIHBhcmVudE5vZGUgKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZVxufVxuXG5mdW5jdGlvbiBuZXh0U2libGluZyAobm9kZSkge1xuICByZXR1cm4gbm9kZS5uZXh0U2libGluZ1xufVxuXG5mdW5jdGlvbiB0YWdOYW1lIChub2RlKSB7XG4gIHJldHVybiBub2RlLnRhZ05hbWVcbn1cblxuZnVuY3Rpb24gc2V0VGV4dENvbnRlbnQgKG5vZGUsIHRleHQpIHtcbiAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZSAobm9kZSwga2V5LCB2YWwpIHtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoa2V5LCB2YWwpO1xufVxuXG5cbnZhciBub2RlT3BzID0gT2JqZWN0LmZyZWV6ZSh7XG5cdGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQkMSxcblx0Y3JlYXRlRWxlbWVudE5TOiBjcmVhdGVFbGVtZW50TlMsXG5cdGNyZWF0ZVRleHROb2RlOiBjcmVhdGVUZXh0Tm9kZSxcblx0Y3JlYXRlQ29tbWVudDogY3JlYXRlQ29tbWVudCxcblx0aW5zZXJ0QmVmb3JlOiBpbnNlcnRCZWZvcmUsXG5cdHJlbW92ZUNoaWxkOiByZW1vdmVDaGlsZCxcblx0YXBwZW5kQ2hpbGQ6IGFwcGVuZENoaWxkLFxuXHRwYXJlbnROb2RlOiBwYXJlbnROb2RlLFxuXHRuZXh0U2libGluZzogbmV4dFNpYmxpbmcsXG5cdHRhZ05hbWU6IHRhZ05hbWUsXG5cdHNldFRleHRDb250ZW50OiBzZXRUZXh0Q29udGVudCxcblx0c2V0QXR0cmlidXRlOiBzZXRBdHRyaWJ1dGVcbn0pO1xuXG4vKiAgKi9cblxudmFyIHJlZiA9IHtcbiAgY3JlYXRlOiBmdW5jdGlvbiBjcmVhdGUgKF8sIHZub2RlKSB7XG4gICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gICAgaWYgKG9sZFZub2RlLmRhdGEucmVmICE9PSB2bm9kZS5kYXRhLnJlZikge1xuICAgICAgcmVnaXN0ZXJSZWYob2xkVm5vZGUsIHRydWUpO1xuICAgICAgcmVnaXN0ZXJSZWYodm5vZGUpO1xuICAgIH1cbiAgfSxcbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICByZWdpc3RlclJlZih2bm9kZSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyUmVmICh2bm9kZSwgaXNSZW1vdmFsKSB7XG4gIHZhciBrZXkgPSB2bm9kZS5kYXRhLnJlZjtcbiAgaWYgKCFrZXkpIHsgcmV0dXJuIH1cblxuICB2YXIgdm0gPSB2bm9kZS5jb250ZXh0O1xuICB2YXIgcmVmID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgfHwgdm5vZGUuZWxtO1xuICB2YXIgcmVmcyA9IHZtLiRyZWZzO1xuICBpZiAoaXNSZW1vdmFsKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVmc1trZXldKSkge1xuICAgICAgcmVtb3ZlKHJlZnNba2V5XSwgcmVmKTtcbiAgICB9IGVsc2UgaWYgKHJlZnNba2V5XSA9PT0gcmVmKSB7XG4gICAgICByZWZzW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh2bm9kZS5kYXRhLnJlZkluRm9yKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVmc1trZXldKSkge1xuICAgICAgICByZWZzW2tleV0gPSBbcmVmXTtcbiAgICAgIH0gZWxzZSBpZiAocmVmc1trZXldLmluZGV4T2YocmVmKSA8IDApIHtcbiAgICAgICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgICAgIHJlZnNba2V5XS5wdXNoKHJlZik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZnNba2V5XSA9IHJlZjtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWaXJ0dWFsIERPTSBwYXRjaGluZyBhbGdvcml0aG0gYmFzZWQgb24gU25hYmJkb20gYnlcbiAqIFNpbW9uIEZyaWlzIFZpbmR1bSAoQHBhbGRlcGluZClcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICogaHR0cHM6Ly9naXRodWIuY29tL3BhbGRlcGluZC9zbmFiYmRvbS9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKlxuICogbW9kaWZpZWQgYnkgRXZhbiBZb3UgKEB5eXg5OTA4MDMpXG4gKlxuICogTm90IHR5cGUtY2hlY2tpbmcgdGhpcyBiZWNhdXNlIHRoaXMgZmlsZSBpcyBwZXJmLWNyaXRpY2FsIGFuZCB0aGUgY29zdFxuICogb2YgbWFraW5nIGZsb3cgdW5kZXJzdGFuZCBpdCBpcyBub3Qgd29ydGggaXQuXG4gKi9cblxudmFyIGVtcHR5Tm9kZSA9IG5ldyBWTm9kZSgnJywge30sIFtdKTtcblxudmFyIGhvb2tzID0gWydjcmVhdGUnLCAnYWN0aXZhdGUnLCAndXBkYXRlJywgJ3JlbW92ZScsICdkZXN0cm95J107XG5cbmZ1bmN0aW9uIHNhbWVWbm9kZSAoYSwgYikge1xuICByZXR1cm4gKFxuICAgIGEua2V5ID09PSBiLmtleSAmJiAoXG4gICAgICAoXG4gICAgICAgIGEudGFnID09PSBiLnRhZyAmJlxuICAgICAgICBhLmlzQ29tbWVudCA9PT0gYi5pc0NvbW1lbnQgJiZcbiAgICAgICAgaXNEZWYoYS5kYXRhKSA9PT0gaXNEZWYoYi5kYXRhKSAmJlxuICAgICAgICBzYW1lSW5wdXRUeXBlKGEsIGIpXG4gICAgICApIHx8IChcbiAgICAgICAgaXNUcnVlKGEuaXNBc3luY1BsYWNlaG9sZGVyKSAmJlxuICAgICAgICBhLmFzeW5jRmFjdG9yeSA9PT0gYi5hc3luY0ZhY3RvcnkgJiZcbiAgICAgICAgaXNVbmRlZihiLmFzeW5jRmFjdG9yeS5lcnJvcilcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gc2FtZUlucHV0VHlwZSAoYSwgYikge1xuICBpZiAoYS50YWcgIT09ICdpbnB1dCcpIHsgcmV0dXJuIHRydWUgfVxuICB2YXIgaTtcbiAgdmFyIHR5cGVBID0gaXNEZWYoaSA9IGEuZGF0YSkgJiYgaXNEZWYoaSA9IGkuYXR0cnMpICYmIGkudHlwZTtcbiAgdmFyIHR5cGVCID0gaXNEZWYoaSA9IGIuZGF0YSkgJiYgaXNEZWYoaSA9IGkuYXR0cnMpICYmIGkudHlwZTtcbiAgcmV0dXJuIHR5cGVBID09PSB0eXBlQiB8fCBpc1RleHRJbnB1dFR5cGUodHlwZUEpICYmIGlzVGV4dElucHV0VHlwZSh0eXBlQilcbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5VG9PbGRJZHggKGNoaWxkcmVuLCBiZWdpbklkeCwgZW5kSWR4KSB7XG4gIHZhciBpLCBrZXk7XG4gIHZhciBtYXAgPSB7fTtcbiAgZm9yIChpID0gYmVnaW5JZHg7IGkgPD0gZW5kSWR4OyArK2kpIHtcbiAgICBrZXkgPSBjaGlsZHJlbltpXS5rZXk7XG4gICAgaWYgKGlzRGVmKGtleSkpIHsgbWFwW2tleV0gPSBpOyB9XG4gIH1cbiAgcmV0dXJuIG1hcFxufVxuXG5mdW5jdGlvbiBjcmVhdGVQYXRjaEZ1bmN0aW9uIChiYWNrZW5kKSB7XG4gIHZhciBpLCBqO1xuICB2YXIgY2JzID0ge307XG5cbiAgdmFyIG1vZHVsZXMgPSBiYWNrZW5kLm1vZHVsZXM7XG4gIHZhciBub2RlT3BzID0gYmFja2VuZC5ub2RlT3BzO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7ICsraSkge1xuICAgIGNic1tob29rc1tpXV0gPSBbXTtcbiAgICBmb3IgKGogPSAwOyBqIDwgbW9kdWxlcy5sZW5ndGg7ICsraikge1xuICAgICAgaWYgKGlzRGVmKG1vZHVsZXNbal1baG9va3NbaV1dKSkge1xuICAgICAgICBjYnNbaG9va3NbaV1dLnB1c2gobW9kdWxlc1tqXVtob29rc1tpXV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVtcHR5Tm9kZUF0IChlbG0pIHtcbiAgICByZXR1cm4gbmV3IFZOb2RlKG5vZGVPcHMudGFnTmFtZShlbG0pLnRvTG93ZXJDYXNlKCksIHt9LCBbXSwgdW5kZWZpbmVkLCBlbG0pXG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVSbUNiIChjaGlsZEVsbSwgbGlzdGVuZXJzKSB7XG4gICAgZnVuY3Rpb24gcmVtb3ZlICgpIHtcbiAgICAgIGlmICgtLXJlbW92ZS5saXN0ZW5lcnMgPT09IDApIHtcbiAgICAgICAgcmVtb3ZlTm9kZShjaGlsZEVsbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlbW92ZS5saXN0ZW5lcnMgPSBsaXN0ZW5lcnM7XG4gICAgcmV0dXJuIHJlbW92ZVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlTm9kZSAoZWwpIHtcbiAgICB2YXIgcGFyZW50ID0gbm9kZU9wcy5wYXJlbnROb2RlKGVsKTtcbiAgICAvLyBlbGVtZW50IG1heSBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGR1ZSB0byB2LWh0bWwgLyB2LXRleHRcbiAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgbm9kZU9wcy5yZW1vdmVDaGlsZChwYXJlbnQsIGVsKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaW5QcmUgPSAwO1xuICBmdW5jdGlvbiBjcmVhdGVFbG0gKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtLCBuZXN0ZWQpIHtcbiAgICB2bm9kZS5pc1Jvb3RJbnNlcnQgPSAhbmVzdGVkOyAvLyBmb3IgdHJhbnNpdGlvbiBlbnRlciBjaGVja1xuICAgIGlmIChjcmVhdGVDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgcGFyZW50RWxtLCByZWZFbG0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgdmFyIGNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW47XG4gICAgdmFyIHRhZyA9IHZub2RlLnRhZztcbiAgICBpZiAoaXNEZWYodGFnKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5wcmUpIHtcbiAgICAgICAgICBpblByZSsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaW5QcmUgJiZcbiAgICAgICAgICAhdm5vZGUubnMgJiZcbiAgICAgICAgICAhKFxuICAgICAgICAgICAgY29uZmlnLmlnbm9yZWRFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgICAgICAgIGNvbmZpZy5pZ25vcmVkRWxlbWVudHMuc29tZShmdW5jdGlvbiAoaWdub3JlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBpc1JlZ0V4cChpZ25vcmUpXG4gICAgICAgICAgICAgICAgPyBpZ25vcmUudGVzdCh0YWcpXG4gICAgICAgICAgICAgICAgOiBpZ25vcmUgPT09IHRhZ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApICYmXG4gICAgICAgICAgY29uZmlnLmlzVW5rbm93bkVsZW1lbnQodGFnKVxuICAgICAgICApIHtcbiAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgJ1Vua25vd24gY3VzdG9tIGVsZW1lbnQ6IDwnICsgdGFnICsgJz4gLSBkaWQgeW91ICcgK1xuICAgICAgICAgICAgJ3JlZ2lzdGVyIHRoZSBjb21wb25lbnQgY29ycmVjdGx5PyBGb3IgcmVjdXJzaXZlIGNvbXBvbmVudHMsICcgK1xuICAgICAgICAgICAgJ21ha2Ugc3VyZSB0byBwcm92aWRlIHRoZSBcIm5hbWVcIiBvcHRpb24uJyxcbiAgICAgICAgICAgIHZub2RlLmNvbnRleHRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2bm9kZS5lbG0gPSB2bm9kZS5uc1xuICAgICAgICA/IG5vZGVPcHMuY3JlYXRlRWxlbWVudE5TKHZub2RlLm5zLCB0YWcpXG4gICAgICAgIDogbm9kZU9wcy5jcmVhdGVFbGVtZW50KHRhZywgdm5vZGUpO1xuICAgICAgc2V0U2NvcGUodm5vZGUpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIHtcbiAgICAgICAgY3JlYXRlQ2hpbGRyZW4odm5vZGUsIGNoaWxkcmVuLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGRhdGEgJiYgZGF0YS5wcmUpIHtcbiAgICAgICAgaW5QcmUtLTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVHJ1ZSh2bm9kZS5pc0NvbW1lbnQpKSB7XG4gICAgICB2bm9kZS5lbG0gPSBub2RlT3BzLmNyZWF0ZUNvbW1lbnQodm5vZGUudGV4dCk7XG4gICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZub2RlLmVsbSA9IG5vZGVPcHMuY3JlYXRlVGV4dE5vZGUodm5vZGUudGV4dCk7XG4gICAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50ICh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgIHZhciBpID0gdm5vZGUuZGF0YTtcbiAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgIHZhciBpc1JlYWN0aXZhdGVkID0gaXNEZWYodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpICYmIGkua2VlcEFsaXZlO1xuICAgICAgaWYgKGlzRGVmKGkgPSBpLmhvb2spICYmIGlzRGVmKGkgPSBpLmluaXQpKSB7XG4gICAgICAgIGkodm5vZGUsIGZhbHNlIC8qIGh5ZHJhdGluZyAqLywgcGFyZW50RWxtLCByZWZFbG0pO1xuICAgICAgfVxuICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGUgaW5pdCBob29rLCBpZiB0aGUgdm5vZGUgaXMgYSBjaGlsZCBjb21wb25lbnRcbiAgICAgIC8vIGl0IHNob3VsZCd2ZSBjcmVhdGVkIGEgY2hpbGQgaW5zdGFuY2UgYW5kIG1vdW50ZWQgaXQuIHRoZSBjaGlsZFxuICAgICAgLy8gY29tcG9uZW50IGFsc28gaGFzIHNldCB0aGUgcGxhY2Vob2xkZXIgdm5vZGUncyBlbG0uXG4gICAgICAvLyBpbiB0aGF0IGNhc2Ugd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBlbGVtZW50IGFuZCBiZSBkb25lLlxuICAgICAgaWYgKGlzRGVmKHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSkge1xuICAgICAgICBpbml0Q29tcG9uZW50KHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpO1xuICAgICAgICBpZiAoaXNUcnVlKGlzUmVhY3RpdmF0ZWQpKSB7XG4gICAgICAgICAgcmVhY3RpdmF0ZUNvbXBvbmVudCh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0Q29tcG9uZW50ICh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgaWYgKGlzRGVmKHZub2RlLmRhdGEucGVuZGluZ0luc2VydCkpIHtcbiAgICAgIGluc2VydGVkVm5vZGVRdWV1ZS5wdXNoLmFwcGx5KGluc2VydGVkVm5vZGVRdWV1ZSwgdm5vZGUuZGF0YS5wZW5kaW5nSW5zZXJ0KTtcbiAgICAgIHZub2RlLmRhdGEucGVuZGluZ0luc2VydCA9IG51bGw7XG4gICAgfVxuICAgIHZub2RlLmVsbSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlLiRlbDtcbiAgICBpZiAoaXNQYXRjaGFibGUodm5vZGUpKSB7XG4gICAgICBpbnZva2VDcmVhdGVIb29rcyh2bm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgIHNldFNjb3BlKHZub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZW1wdHkgY29tcG9uZW50IHJvb3QuXG4gICAgICAvLyBza2lwIGFsbCBlbGVtZW50LXJlbGF0ZWQgbW9kdWxlcyBleGNlcHQgZm9yIHJlZiAoIzM0NTUpXG4gICAgICByZWdpc3RlclJlZih2bm9kZSk7XG4gICAgICAvLyBtYWtlIHN1cmUgdG8gaW52b2tlIHRoZSBpbnNlcnQgaG9va1xuICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2godm5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWN0aXZhdGVDb21wb25lbnQgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKSB7XG4gICAgdmFyIGk7XG4gICAgLy8gaGFjayBmb3IgIzQzMzk6IGEgcmVhY3RpdmF0ZWQgY29tcG9uZW50IHdpdGggaW5uZXIgdHJhbnNpdGlvblxuICAgIC8vIGRvZXMgbm90IHRyaWdnZXIgYmVjYXVzZSB0aGUgaW5uZXIgbm9kZSdzIGNyZWF0ZWQgaG9va3MgYXJlIG5vdCBjYWxsZWRcbiAgICAvLyBhZ2Fpbi4gSXQncyBub3QgaWRlYWwgdG8gaW52b2x2ZSBtb2R1bGUtc3BlY2lmaWMgbG9naWMgaW4gaGVyZSBidXRcbiAgICAvLyB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIGl0LlxuICAgIHZhciBpbm5lck5vZGUgPSB2bm9kZTtcbiAgICB3aGlsZSAoaW5uZXJOb2RlLmNvbXBvbmVudEluc3RhbmNlKSB7XG4gICAgICBpbm5lck5vZGUgPSBpbm5lck5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgICAgaWYgKGlzRGVmKGkgPSBpbm5lck5vZGUuZGF0YSkgJiYgaXNEZWYoaSA9IGkudHJhbnNpdGlvbikpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNicy5hY3RpdmF0ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGNicy5hY3RpdmF0ZVtpXShlbXB0eU5vZGUsIGlubmVyTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2goaW5uZXJOb2RlKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdW5saWtlIGEgbmV3bHkgY3JlYXRlZCBjb21wb25lbnQsXG4gICAgLy8gYSByZWFjdGl2YXRlZCBrZWVwLWFsaXZlIGNvbXBvbmVudCBkb2Vzbid0IGluc2VydCBpdHNlbGZcbiAgICBpbnNlcnQocGFyZW50RWxtLCB2bm9kZS5lbG0sIHJlZkVsbSk7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNlcnQgKHBhcmVudCwgZWxtLCByZWYkJDEpIHtcbiAgICBpZiAoaXNEZWYocGFyZW50KSkge1xuICAgICAgaWYgKGlzRGVmKHJlZiQkMSkpIHtcbiAgICAgICAgaWYgKHJlZiQkMS5wYXJlbnROb2RlID09PSBwYXJlbnQpIHtcbiAgICAgICAgICBub2RlT3BzLmluc2VydEJlZm9yZShwYXJlbnQsIGVsbSwgcmVmJCQxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZU9wcy5hcHBlbmRDaGlsZChwYXJlbnQsIGVsbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hpbGRyZW4gKHZub2RlLCBjaGlsZHJlbiwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNyZWF0ZUVsbShjaGlsZHJlbltpXSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCB2bm9kZS5lbG0sIG51bGwsIHRydWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNQcmltaXRpdmUodm5vZGUudGV4dCkpIHtcbiAgICAgIG5vZGVPcHMuYXBwZW5kQ2hpbGQodm5vZGUuZWxtLCBub2RlT3BzLmNyZWF0ZVRleHROb2RlKHZub2RlLnRleHQpKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1BhdGNoYWJsZSAodm5vZGUpIHtcbiAgICB3aGlsZSAodm5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIHZub2RlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UuX3Zub2RlO1xuICAgIH1cbiAgICByZXR1cm4gaXNEZWYodm5vZGUudGFnKVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlQ3JlYXRlSG9va3MgKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBjYnMuY3JlYXRlLmxlbmd0aDsgKytpJDEpIHtcbiAgICAgIGNicy5jcmVhdGVbaSQxXShlbXB0eU5vZGUsIHZub2RlKTtcbiAgICB9XG4gICAgaSA9IHZub2RlLmRhdGEuaG9vazsgLy8gUmV1c2UgdmFyaWFibGVcbiAgICBpZiAoaXNEZWYoaSkpIHtcbiAgICAgIGlmIChpc0RlZihpLmNyZWF0ZSkpIHsgaS5jcmVhdGUoZW1wdHlOb2RlLCB2bm9kZSk7IH1cbiAgICAgIGlmIChpc0RlZihpLmluc2VydCkpIHsgaW5zZXJ0ZWRWbm9kZVF1ZXVlLnB1c2godm5vZGUpOyB9XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IHNjb3BlIGlkIGF0dHJpYnV0ZSBmb3Igc2NvcGVkIENTUy5cbiAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIHNwZWNpYWwgY2FzZSB0byBhdm9pZCB0aGUgb3ZlcmhlYWRcbiAgLy8gb2YgZ29pbmcgdGhyb3VnaCB0aGUgbm9ybWFsIGF0dHJpYnV0ZSBwYXRjaGluZyBwcm9jZXNzLlxuICBmdW5jdGlvbiBzZXRTY29wZSAodm5vZGUpIHtcbiAgICB2YXIgaTtcbiAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmZ1bmN0aW9uYWxTY29wZUlkKSkge1xuICAgICAgbm9kZU9wcy5zZXRBdHRyaWJ1dGUodm5vZGUuZWxtLCBpLCAnJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhbmNlc3RvciA9IHZub2RlO1xuICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgIGlmIChpc0RlZihpID0gYW5jZXN0b3IuY29udGV4dCkgJiYgaXNEZWYoaSA9IGkuJG9wdGlvbnMuX3Njb3BlSWQpKSB7XG4gICAgICAgICAgbm9kZU9wcy5zZXRBdHRyaWJ1dGUodm5vZGUuZWxtLCBpLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGZvciBzbG90IGNvbnRlbnQgdGhleSBzaG91bGQgYWxzbyBnZXQgdGhlIHNjb3BlSWQgZnJvbSB0aGUgaG9zdCBpbnN0YW5jZS5cbiAgICBpZiAoaXNEZWYoaSA9IGFjdGl2ZUluc3RhbmNlKSAmJlxuICAgICAgaSAhPT0gdm5vZGUuY29udGV4dCAmJlxuICAgICAgaSAhPT0gdm5vZGUuZnVuY3Rpb25hbENvbnRleHQgJiZcbiAgICAgIGlzRGVmKGkgPSBpLiRvcHRpb25zLl9zY29wZUlkKVxuICAgICkge1xuICAgICAgbm9kZU9wcy5zZXRBdHRyaWJ1dGUodm5vZGUuZWxtLCBpLCAnJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYWRkVm5vZGVzIChwYXJlbnRFbG0sIHJlZkVsbSwgdm5vZGVzLCBzdGFydElkeCwgZW5kSWR4LCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBmb3IgKDsgc3RhcnRJZHggPD0gZW5kSWR4OyArK3N0YXJ0SWR4KSB7XG4gICAgICBjcmVhdGVFbG0odm5vZGVzW3N0YXJ0SWR4XSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIHJlZkVsbSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRGVzdHJveUhvb2sgKHZub2RlKSB7XG4gICAgdmFyIGksIGo7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLmRlc3Ryb3kpKSB7IGkodm5vZGUpOyB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLmRlc3Ryb3kubGVuZ3RoOyArK2kpIHsgY2JzLmRlc3Ryb3lbaV0odm5vZGUpOyB9XG4gICAgfVxuICAgIGlmIChpc0RlZihpID0gdm5vZGUuY2hpbGRyZW4pKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyArK2opIHtcbiAgICAgICAgaW52b2tlRGVzdHJveUhvb2sodm5vZGUuY2hpbGRyZW5bal0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZVZub2RlcyAocGFyZW50RWxtLCB2bm9kZXMsIHN0YXJ0SWR4LCBlbmRJZHgpIHtcbiAgICBmb3IgKDsgc3RhcnRJZHggPD0gZW5kSWR4OyArK3N0YXJ0SWR4KSB7XG4gICAgICB2YXIgY2ggPSB2bm9kZXNbc3RhcnRJZHhdO1xuICAgICAgaWYgKGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAoaXNEZWYoY2gudGFnKSkge1xuICAgICAgICAgIHJlbW92ZUFuZEludm9rZVJlbW92ZUhvb2soY2gpO1xuICAgICAgICAgIGludm9rZURlc3Ryb3lIb29rKGNoKTtcbiAgICAgICAgfSBlbHNlIHsgLy8gVGV4dCBub2RlXG4gICAgICAgICAgcmVtb3ZlTm9kZShjaC5lbG0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayAodm5vZGUsIHJtKSB7XG4gICAgaWYgKGlzRGVmKHJtKSB8fCBpc0RlZih2bm9kZS5kYXRhKSkge1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgbGlzdGVuZXJzID0gY2JzLnJlbW92ZS5sZW5ndGggKyAxO1xuICAgICAgaWYgKGlzRGVmKHJtKSkge1xuICAgICAgICAvLyB3ZSBoYXZlIGEgcmVjdXJzaXZlbHkgcGFzc2VkIGRvd24gcm0gY2FsbGJhY2tcbiAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxpc3RlbmVycyBjb3VudFxuICAgICAgICBybS5saXN0ZW5lcnMgKz0gbGlzdGVuZXJzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGlyZWN0bHkgcmVtb3ZpbmdcbiAgICAgICAgcm0gPSBjcmVhdGVSbUNiKHZub2RlLmVsbSwgbGlzdGVuZXJzKTtcbiAgICAgIH1cbiAgICAgIC8vIHJlY3Vyc2l2ZWx5IGludm9rZSBob29rcyBvbiBjaGlsZCBjb21wb25lbnQgcm9vdCBub2RlXG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlKSAmJiBpc0RlZihpID0gaS5fdm5vZGUpICYmIGlzRGVmKGkuZGF0YSkpIHtcbiAgICAgICAgcmVtb3ZlQW5kSW52b2tlUmVtb3ZlSG9vayhpLCBybSk7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY2JzLnJlbW92ZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBjYnMucmVtb3ZlW2ldKHZub2RlLCBybSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYoaSA9IHZub2RlLmRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkucmVtb3ZlKSkge1xuICAgICAgICBpKHZub2RlLCBybSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBybSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmVOb2RlKHZub2RlLmVsbSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlQ2hpbGRyZW4gKHBhcmVudEVsbSwgb2xkQ2gsIG5ld0NoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpIHtcbiAgICB2YXIgb2xkU3RhcnRJZHggPSAwO1xuICAgIHZhciBuZXdTdGFydElkeCA9IDA7XG4gICAgdmFyIG9sZEVuZElkeCA9IG9sZENoLmxlbmd0aCAtIDE7XG4gICAgdmFyIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFswXTtcbiAgICB2YXIgb2xkRW5kVm5vZGUgPSBvbGRDaFtvbGRFbmRJZHhdO1xuICAgIHZhciBuZXdFbmRJZHggPSBuZXdDaC5sZW5ndGggLSAxO1xuICAgIHZhciBuZXdTdGFydFZub2RlID0gbmV3Q2hbMF07XG4gICAgdmFyIG5ld0VuZFZub2RlID0gbmV3Q2hbbmV3RW5kSWR4XTtcbiAgICB2YXIgb2xkS2V5VG9JZHgsIGlkeEluT2xkLCB2bm9kZVRvTW92ZSwgcmVmRWxtO1xuXG4gICAgLy8gcmVtb3ZlT25seSBpcyBhIHNwZWNpYWwgZmxhZyB1c2VkIG9ubHkgYnkgPHRyYW5zaXRpb24tZ3JvdXA+XG4gICAgLy8gdG8gZW5zdXJlIHJlbW92ZWQgZWxlbWVudHMgc3RheSBpbiBjb3JyZWN0IHJlbGF0aXZlIHBvc2l0aW9uc1xuICAgIC8vIGR1cmluZyBsZWF2aW5nIHRyYW5zaXRpb25zXG4gICAgdmFyIGNhbk1vdmUgPSAhcmVtb3ZlT25seTtcblxuICAgIHdoaWxlIChvbGRTdGFydElkeCA8PSBvbGRFbmRJZHggJiYgbmV3U3RhcnRJZHggPD0gbmV3RW5kSWR4KSB7XG4gICAgICBpZiAoaXNVbmRlZihvbGRTdGFydFZub2RlKSkge1xuICAgICAgICBvbGRTdGFydFZub2RlID0gb2xkQ2hbKytvbGRTdGFydElkeF07IC8vIFZub2RlIGhhcyBiZWVuIG1vdmVkIGxlZnRcbiAgICAgIH0gZWxzZSBpZiAoaXNVbmRlZihvbGRFbmRWbm9kZSkpIHtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICB9IGVsc2UgaWYgKHNhbWVWbm9kZShvbGRTdGFydFZub2RlLCBuZXdTdGFydFZub2RlKSkge1xuICAgICAgICBwYXRjaFZub2RlKG9sZFN0YXJ0Vm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIG9sZFN0YXJ0Vm5vZGUgPSBvbGRDaFsrK29sZFN0YXJ0SWR4XTtcbiAgICAgICAgbmV3U3RhcnRWbm9kZSA9IG5ld0NoWysrbmV3U3RhcnRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkRW5kVm5vZGUsIG5ld0VuZFZub2RlKSkge1xuICAgICAgICBwYXRjaFZub2RlKG9sZEVuZFZub2RlLCBuZXdFbmRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgIG5ld0VuZFZub2RlID0gbmV3Q2hbLS1uZXdFbmRJZHhdO1xuICAgICAgfSBlbHNlIGlmIChzYW1lVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUpKSB7IC8vIFZub2RlIG1vdmVkIHJpZ2h0XG4gICAgICAgIHBhdGNoVm5vZGUob2xkU3RhcnRWbm9kZSwgbmV3RW5kVm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCBvbGRTdGFydFZub2RlLmVsbSwgbm9kZU9wcy5uZXh0U2libGluZyhvbGRFbmRWbm9kZS5lbG0pKTtcbiAgICAgICAgb2xkU3RhcnRWbm9kZSA9IG9sZENoWysrb2xkU3RhcnRJZHhdO1xuICAgICAgICBuZXdFbmRWbm9kZSA9IG5ld0NoWy0tbmV3RW5kSWR4XTtcbiAgICAgIH0gZWxzZSBpZiAoc2FtZVZub2RlKG9sZEVuZFZub2RlLCBuZXdTdGFydFZub2RlKSkgeyAvLyBWbm9kZSBtb3ZlZCBsZWZ0XG4gICAgICAgIHBhdGNoVm5vZGUob2xkRW5kVm5vZGUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIGNhbk1vdmUgJiYgbm9kZU9wcy5pbnNlcnRCZWZvcmUocGFyZW50RWxtLCBvbGRFbmRWbm9kZS5lbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgb2xkRW5kVm5vZGUgPSBvbGRDaFstLW9sZEVuZElkeF07XG4gICAgICAgIG5ld1N0YXJ0Vm5vZGUgPSBuZXdDaFsrK25ld1N0YXJ0SWR4XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1VuZGVmKG9sZEtleVRvSWR4KSkgeyBvbGRLZXlUb0lkeCA9IGNyZWF0ZUtleVRvT2xkSWR4KG9sZENoLCBvbGRTdGFydElkeCwgb2xkRW5kSWR4KTsgfVxuICAgICAgICBpZHhJbk9sZCA9IGlzRGVmKG5ld1N0YXJ0Vm5vZGUua2V5KVxuICAgICAgICAgID8gb2xkS2V5VG9JZHhbbmV3U3RhcnRWbm9kZS5rZXldXG4gICAgICAgICAgOiBmaW5kSWR4SW5PbGQobmV3U3RhcnRWbm9kZSwgb2xkQ2gsIG9sZFN0YXJ0SWR4LCBvbGRFbmRJZHgpO1xuICAgICAgICBpZiAoaXNVbmRlZihpZHhJbk9sZCkpIHsgLy8gTmV3IGVsZW1lbnRcbiAgICAgICAgICBjcmVhdGVFbG0obmV3U3RhcnRWbm9kZSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlLCBwYXJlbnRFbG0sIG9sZFN0YXJ0Vm5vZGUuZWxtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2bm9kZVRvTW92ZSA9IG9sZENoW2lkeEluT2xkXTtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhdm5vZGVUb01vdmUpIHtcbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICdJdCBzZWVtcyB0aGVyZSBhcmUgZHVwbGljYXRlIGtleXMgdGhhdCBpcyBjYXVzaW5nIGFuIHVwZGF0ZSBlcnJvci4gJyArXG4gICAgICAgICAgICAgICdNYWtlIHN1cmUgZWFjaCB2LWZvciBpdGVtIGhhcyBhIHVuaXF1ZSBrZXkuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNhbWVWbm9kZSh2bm9kZVRvTW92ZSwgbmV3U3RhcnRWbm9kZSkpIHtcbiAgICAgICAgICAgIHBhdGNoVm5vZGUodm5vZGVUb01vdmUsIG5ld1N0YXJ0Vm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBvbGRDaFtpZHhJbk9sZF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjYW5Nb3ZlICYmIG5vZGVPcHMuaW5zZXJ0QmVmb3JlKHBhcmVudEVsbSwgdm5vZGVUb01vdmUuZWxtLCBvbGRTdGFydFZub2RlLmVsbSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNhbWUga2V5IGJ1dCBkaWZmZXJlbnQgZWxlbWVudC4gdHJlYXQgYXMgbmV3IGVsZW1lbnRcbiAgICAgICAgICAgIGNyZWF0ZUVsbShuZXdTdGFydFZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgb2xkU3RhcnRWbm9kZS5lbG0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXdTdGFydFZub2RlID0gbmV3Q2hbKytuZXdTdGFydElkeF07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbGRTdGFydElkeCA+IG9sZEVuZElkeCkge1xuICAgICAgcmVmRWxtID0gaXNVbmRlZihuZXdDaFtuZXdFbmRJZHggKyAxXSkgPyBudWxsIDogbmV3Q2hbbmV3RW5kSWR4ICsgMV0uZWxtO1xuICAgICAgYWRkVm5vZGVzKHBhcmVudEVsbSwgcmVmRWxtLCBuZXdDaCwgbmV3U3RhcnRJZHgsIG5ld0VuZElkeCwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICB9IGVsc2UgaWYgKG5ld1N0YXJ0SWR4ID4gbmV3RW5kSWR4KSB7XG4gICAgICByZW1vdmVWbm9kZXMocGFyZW50RWxtLCBvbGRDaCwgb2xkU3RhcnRJZHgsIG9sZEVuZElkeCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZmluZElkeEluT2xkIChub2RlLCBvbGRDaCwgc3RhcnQsIGVuZCkge1xuICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICB2YXIgYyA9IG9sZENoW2ldO1xuICAgICAgaWYgKGlzRGVmKGMpICYmIHNhbWVWbm9kZShub2RlLCBjKSkgeyByZXR1cm4gaSB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGF0Y2hWbm9kZSAob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpIHtcbiAgICBpZiAob2xkVm5vZGUgPT09IHZub2RlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgZWxtID0gdm5vZGUuZWxtID0gb2xkVm5vZGUuZWxtO1xuXG4gICAgaWYgKGlzVHJ1ZShvbGRWbm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIpKSB7XG4gICAgICBpZiAoaXNEZWYodm5vZGUuYXN5bmNGYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICBoeWRyYXRlKG9sZFZub2RlLmVsbSwgdm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZS5pc0FzeW5jUGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gcmV1c2UgZWxlbWVudCBmb3Igc3RhdGljIHRyZWVzLlxuICAgIC8vIG5vdGUgd2Ugb25seSBkbyB0aGlzIGlmIHRoZSB2bm9kZSBpcyBjbG9uZWQgLVxuICAgIC8vIGlmIHRoZSBuZXcgbm9kZSBpcyBub3QgY2xvbmVkIGl0IG1lYW5zIHRoZSByZW5kZXIgZnVuY3Rpb25zIGhhdmUgYmVlblxuICAgIC8vIHJlc2V0IGJ5IHRoZSBob3QtcmVsb2FkLWFwaSBhbmQgd2UgbmVlZCB0byBkbyBhIHByb3BlciByZS1yZW5kZXIuXG4gICAgaWYgKGlzVHJ1ZSh2bm9kZS5pc1N0YXRpYykgJiZcbiAgICAgIGlzVHJ1ZShvbGRWbm9kZS5pc1N0YXRpYykgJiZcbiAgICAgIHZub2RlLmtleSA9PT0gb2xkVm5vZGUua2V5ICYmXG4gICAgICAoaXNUcnVlKHZub2RlLmlzQ2xvbmVkKSB8fCBpc1RydWUodm5vZGUuaXNPbmNlKSlcbiAgICApIHtcbiAgICAgIHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gb2xkVm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB2YXIgaTtcbiAgICB2YXIgZGF0YSA9IHZub2RlLmRhdGE7XG4gICAgaWYgKGlzRGVmKGRhdGEpICYmIGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnByZXBhdGNoKSkge1xuICAgICAgaShvbGRWbm9kZSwgdm5vZGUpO1xuICAgIH1cblxuICAgIHZhciBvbGRDaCA9IG9sZFZub2RlLmNoaWxkcmVuO1xuICAgIHZhciBjaCA9IHZub2RlLmNoaWxkcmVuO1xuICAgIGlmIChpc0RlZihkYXRhKSAmJiBpc1BhdGNoYWJsZSh2bm9kZSkpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjYnMudXBkYXRlLmxlbmd0aDsgKytpKSB7IGNicy51cGRhdGVbaV0ob2xkVm5vZGUsIHZub2RlKTsgfVxuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLnVwZGF0ZSkpIHsgaShvbGRWbm9kZSwgdm5vZGUpOyB9XG4gICAgfVxuICAgIGlmIChpc1VuZGVmKHZub2RlLnRleHQpKSB7XG4gICAgICBpZiAoaXNEZWYob2xkQ2gpICYmIGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAob2xkQ2ggIT09IGNoKSB7IHVwZGF0ZUNoaWxkcmVuKGVsbSwgb2xkQ2gsIGNoLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpOyB9XG4gICAgICB9IGVsc2UgaWYgKGlzRGVmKGNoKSkge1xuICAgICAgICBpZiAoaXNEZWYob2xkVm5vZGUudGV4dCkpIHsgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sICcnKTsgfVxuICAgICAgICBhZGRWbm9kZXMoZWxtLCBudWxsLCBjaCwgMCwgY2gubGVuZ3RoIC0gMSwgaW5zZXJ0ZWRWbm9kZVF1ZXVlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNEZWYob2xkQ2gpKSB7XG4gICAgICAgIHJlbW92ZVZub2RlcyhlbG0sIG9sZENoLCAwLCBvbGRDaC5sZW5ndGggLSAxKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNEZWYob2xkVm5vZGUudGV4dCkpIHtcbiAgICAgICAgbm9kZU9wcy5zZXRUZXh0Q29udGVudChlbG0sICcnKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9sZFZub2RlLnRleHQgIT09IHZub2RlLnRleHQpIHtcbiAgICAgIG5vZGVPcHMuc2V0VGV4dENvbnRlbnQoZWxtLCB2bm9kZS50ZXh0KTtcbiAgICB9XG4gICAgaWYgKGlzRGVmKGRhdGEpKSB7XG4gICAgICBpZiAoaXNEZWYoaSA9IGRhdGEuaG9vaykgJiYgaXNEZWYoaSA9IGkucG9zdHBhdGNoKSkgeyBpKG9sZFZub2RlLCB2bm9kZSk7IH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbnZva2VJbnNlcnRIb29rICh2bm9kZSwgcXVldWUsIGluaXRpYWwpIHtcbiAgICAvLyBkZWxheSBpbnNlcnQgaG9va3MgZm9yIGNvbXBvbmVudCByb290IG5vZGVzLCBpbnZva2UgdGhlbSBhZnRlciB0aGVcbiAgICAvLyBlbGVtZW50IGlzIHJlYWxseSBpbnNlcnRlZFxuICAgIGlmIChpc1RydWUoaW5pdGlhbCkgJiYgaXNEZWYodm5vZGUucGFyZW50KSkge1xuICAgICAgdm5vZGUucGFyZW50LmRhdGEucGVuZGluZ0luc2VydCA9IHF1ZXVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHF1ZXVlW2ldLmRhdGEuaG9vay5pbnNlcnQocXVldWVbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBiYWlsZWQgPSBmYWxzZTtcbiAgLy8gbGlzdCBvZiBtb2R1bGVzIHRoYXQgY2FuIHNraXAgY3JlYXRlIGhvb2sgZHVyaW5nIGh5ZHJhdGlvbiBiZWNhdXNlIHRoZXlcbiAgLy8gYXJlIGFscmVhZHkgcmVuZGVyZWQgb24gdGhlIGNsaWVudCBvciBoYXMgbm8gbmVlZCBmb3IgaW5pdGlhbGl6YXRpb25cbiAgdmFyIGlzUmVuZGVyZWRNb2R1bGUgPSBtYWtlTWFwKCdhdHRycyxzdHlsZSxjbGFzcyxzdGF0aWNDbGFzcyxzdGF0aWNTdHlsZSxrZXknKTtcblxuICAvLyBOb3RlOiB0aGlzIGlzIGEgYnJvd3Nlci1vbmx5IGZ1bmN0aW9uIHNvIHdlIGNhbiBhc3N1bWUgZWxtcyBhcmUgRE9NIG5vZGVzLlxuICBmdW5jdGlvbiBoeWRyYXRlIChlbG0sIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpIHtcbiAgICBpZiAoaXNUcnVlKHZub2RlLmlzQ29tbWVudCkgJiYgaXNEZWYodm5vZGUuYXN5bmNGYWN0b3J5KSkge1xuICAgICAgdm5vZGUuZWxtID0gZWxtO1xuICAgICAgdm5vZGUuaXNBc3luY1BsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIWFzc2VydE5vZGVNYXRjaChlbG0sIHZub2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgdm5vZGUuZWxtID0gZWxtO1xuICAgIHZhciB0YWcgPSB2bm9kZS50YWc7XG4gICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICAgIHZhciBjaGlsZHJlbiA9IHZub2RlLmNoaWxkcmVuO1xuICAgIGlmIChpc0RlZihkYXRhKSkge1xuICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhLmhvb2spICYmIGlzRGVmKGkgPSBpLmluaXQpKSB7IGkodm5vZGUsIHRydWUgLyogaHlkcmF0aW5nICovKTsgfVxuICAgICAgaWYgKGlzRGVmKGkgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZSkpIHtcbiAgICAgICAgLy8gY2hpbGQgY29tcG9uZW50LiBpdCBzaG91bGQgaGF2ZSBoeWRyYXRlZCBpdHMgb3duIHRyZWUuXG4gICAgICAgIGluaXRDb21wb25lbnQodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc0RlZih0YWcpKSB7XG4gICAgICBpZiAoaXNEZWYoY2hpbGRyZW4pKSB7XG4gICAgICAgIC8vIGVtcHR5IGVsZW1lbnQsIGFsbG93IGNsaWVudCB0byBwaWNrIHVwIGFuZCBwb3B1bGF0ZSBjaGlsZHJlblxuICAgICAgICBpZiAoIWVsbS5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICBjcmVhdGVDaGlsZHJlbih2bm9kZSwgY2hpbGRyZW4sIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdi1odG1sIGFuZCBkb21Qcm9wczogaW5uZXJIVE1MXG4gICAgICAgICAgaWYgKGlzRGVmKGkgPSBkYXRhKSAmJiBpc0RlZihpID0gaS5kb21Qcm9wcykgJiYgaXNEZWYoaSA9IGkuaW5uZXJIVE1MKSkge1xuICAgICAgICAgICAgaWYgKGkgIT09IGVsbS5pbm5lckhUTUwpIHtcbiAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgIWJhaWxlZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBiYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUGFyZW50OiAnLCBlbG0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybignc2VydmVyIGlubmVySFRNTDogJywgaSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdjbGllbnQgaW5uZXJIVE1MOiAnLCBlbG0uaW5uZXJIVE1MKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaXRlcmF0ZSBhbmQgY29tcGFyZSBjaGlsZHJlbiBsaXN0c1xuICAgICAgICAgICAgdmFyIGNoaWxkcmVuTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgdmFyIGNoaWxkTm9kZSA9IGVsbS5maXJzdENoaWxkO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgY2hpbGRyZW4ubGVuZ3RoOyBpJDErKykge1xuICAgICAgICAgICAgICBpZiAoIWNoaWxkTm9kZSB8fCAhaHlkcmF0ZShjaGlsZE5vZGUsIGNoaWxkcmVuW2kkMV0sIGluc2VydGVkVm5vZGVRdWV1ZSkpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbk1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBjaGlsZE5vZGUubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpZiBjaGlsZE5vZGUgaXMgbm90IG51bGwsIGl0IG1lYW5zIHRoZSBhY3R1YWwgY2hpbGROb2RlcyBsaXN0IGlzXG4gICAgICAgICAgICAvLyBsb25nZXIgdGhhbiB0aGUgdmlydHVhbCBjaGlsZHJlbiBsaXN0LlxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbk1hdGNoIHx8IGNoaWxkTm9kZSkge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICAhYmFpbGVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGJhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQYXJlbnQ6ICcsIGVsbSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdNaXNtYXRjaGluZyBjaGlsZE5vZGVzIHZzLiBWTm9kZXM6ICcsIGVsbS5jaGlsZE5vZGVzLCBjaGlsZHJlbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNEZWYoZGF0YSkpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIGRhdGEpIHtcbiAgICAgICAgICBpZiAoIWlzUmVuZGVyZWRNb2R1bGUoa2V5KSkge1xuICAgICAgICAgICAgaW52b2tlQ3JlYXRlSG9va3Modm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSk7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZWxtLmRhdGEgIT09IHZub2RlLnRleHQpIHtcbiAgICAgIGVsbS5kYXRhID0gdm5vZGUudGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGZ1bmN0aW9uIGFzc2VydE5vZGVNYXRjaCAobm9kZSwgdm5vZGUpIHtcbiAgICBpZiAoaXNEZWYodm5vZGUudGFnKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdm5vZGUudGFnLmluZGV4T2YoJ3Z1ZS1jb21wb25lbnQnKSA9PT0gMCB8fFxuICAgICAgICB2bm9kZS50YWcudG9Mb3dlckNhc2UoKSA9PT0gKG5vZGUudGFnTmFtZSAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09ICh2bm9kZS5pc0NvbW1lbnQgPyA4IDogMylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gcGF0Y2ggKG9sZFZub2RlLCB2bm9kZSwgaHlkcmF0aW5nLCByZW1vdmVPbmx5LCBwYXJlbnRFbG0sIHJlZkVsbSkge1xuICAgIGlmIChpc1VuZGVmKHZub2RlKSkge1xuICAgICAgaWYgKGlzRGVmKG9sZFZub2RlKSkgeyBpbnZva2VEZXN0cm95SG9vayhvbGRWbm9kZSk7IH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHZhciBpc0luaXRpYWxQYXRjaCA9IGZhbHNlO1xuICAgIHZhciBpbnNlcnRlZFZub2RlUXVldWUgPSBbXTtcblxuICAgIGlmIChpc1VuZGVmKG9sZFZub2RlKSkge1xuICAgICAgLy8gZW1wdHkgbW91bnQgKGxpa2VseSBhcyBjb21wb25lbnQpLCBjcmVhdGUgbmV3IHJvb3QgZWxlbWVudFxuICAgICAgaXNJbml0aWFsUGF0Y2ggPSB0cnVlO1xuICAgICAgY3JlYXRlRWxtKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHBhcmVudEVsbSwgcmVmRWxtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGlzUmVhbEVsZW1lbnQgPSBpc0RlZihvbGRWbm9kZS5ub2RlVHlwZSk7XG4gICAgICBpZiAoIWlzUmVhbEVsZW1lbnQgJiYgc2FtZVZub2RlKG9sZFZub2RlLCB2bm9kZSkpIHtcbiAgICAgICAgLy8gcGF0Y2ggZXhpc3Rpbmcgcm9vdCBub2RlXG4gICAgICAgIHBhdGNoVm5vZGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIHJlbW92ZU9ubHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUmVhbEVsZW1lbnQpIHtcbiAgICAgICAgICAvLyBtb3VudGluZyB0byBhIHJlYWwgZWxlbWVudFxuICAgICAgICAgIC8vIGNoZWNrIGlmIHRoaXMgaXMgc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQgYW5kIGlmIHdlIGNhbiBwZXJmb3JtXG4gICAgICAgICAgLy8gYSBzdWNjZXNzZnVsIGh5ZHJhdGlvbi5cbiAgICAgICAgICBpZiAob2xkVm5vZGUubm9kZVR5cGUgPT09IDEgJiYgb2xkVm5vZGUuaGFzQXR0cmlidXRlKFNTUl9BVFRSKSkge1xuICAgICAgICAgICAgb2xkVm5vZGUucmVtb3ZlQXR0cmlidXRlKFNTUl9BVFRSKTtcbiAgICAgICAgICAgIGh5ZHJhdGluZyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc1RydWUoaHlkcmF0aW5nKSkge1xuICAgICAgICAgICAgaWYgKGh5ZHJhdGUob2xkVm5vZGUsIHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUpKSB7XG4gICAgICAgICAgICAgIGludm9rZUluc2VydEhvb2sodm5vZGUsIGluc2VydGVkVm5vZGVRdWV1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgIHJldHVybiBvbGRWbm9kZVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgJ1RoZSBjbGllbnQtc2lkZSByZW5kZXJlZCB2aXJ0dWFsIERPTSB0cmVlIGlzIG5vdCBtYXRjaGluZyAnICtcbiAgICAgICAgICAgICAgICAnc2VydmVyLXJlbmRlcmVkIGNvbnRlbnQuIFRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSBpbmNvcnJlY3QgJyArXG4gICAgICAgICAgICAgICAgJ0hUTUwgbWFya3VwLCBmb3IgZXhhbXBsZSBuZXN0aW5nIGJsb2NrLWxldmVsIGVsZW1lbnRzIGluc2lkZSAnICtcbiAgICAgICAgICAgICAgICAnPHA+LCBvciBtaXNzaW5nIDx0Ym9keT4uIEJhaWxpbmcgaHlkcmF0aW9uIGFuZCBwZXJmb3JtaW5nICcgK1xuICAgICAgICAgICAgICAgICdmdWxsIGNsaWVudC1zaWRlIHJlbmRlci4nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVpdGhlciBub3Qgc2VydmVyLXJlbmRlcmVkLCBvciBoeWRyYXRpb24gZmFpbGVkLlxuICAgICAgICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBub2RlIGFuZCByZXBsYWNlIGl0XG4gICAgICAgICAgb2xkVm5vZGUgPSBlbXB0eU5vZGVBdChvbGRWbm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVwbGFjaW5nIGV4aXN0aW5nIGVsZW1lbnRcbiAgICAgICAgdmFyIG9sZEVsbSA9IG9sZFZub2RlLmVsbTtcbiAgICAgICAgdmFyIHBhcmVudEVsbSQxID0gbm9kZU9wcy5wYXJlbnROb2RlKG9sZEVsbSk7XG4gICAgICAgIGNyZWF0ZUVsbShcbiAgICAgICAgICB2bm9kZSxcbiAgICAgICAgICBpbnNlcnRlZFZub2RlUXVldWUsXG4gICAgICAgICAgLy8gZXh0cmVtZWx5IHJhcmUgZWRnZSBjYXNlOiBkbyBub3QgaW5zZXJ0IGlmIG9sZCBlbGVtZW50IGlzIGluIGFcbiAgICAgICAgICAvLyBsZWF2aW5nIHRyYW5zaXRpb24uIE9ubHkgaGFwcGVucyB3aGVuIGNvbWJpbmluZyB0cmFuc2l0aW9uICtcbiAgICAgICAgICAvLyBrZWVwLWFsaXZlICsgSE9Dcy4gKCM0NTkwKVxuICAgICAgICAgIG9sZEVsbS5fbGVhdmVDYiA/IG51bGwgOiBwYXJlbnRFbG0kMSxcbiAgICAgICAgICBub2RlT3BzLm5leHRTaWJsaW5nKG9sZEVsbSlcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoaXNEZWYodm5vZGUucGFyZW50KSkge1xuICAgICAgICAgIC8vIGNvbXBvbmVudCByb290IGVsZW1lbnQgcmVwbGFjZWQuXG4gICAgICAgICAgLy8gdXBkYXRlIHBhcmVudCBwbGFjZWhvbGRlciBub2RlIGVsZW1lbnQsIHJlY3Vyc2l2ZWx5XG4gICAgICAgICAgdmFyIGFuY2VzdG9yID0gdm5vZGUucGFyZW50O1xuICAgICAgICAgIHZhciBwYXRjaGFibGUgPSBpc1BhdGNoYWJsZSh2bm9kZSk7XG4gICAgICAgICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNicy5kZXN0cm95Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgIGNicy5kZXN0cm95W2ldKGFuY2VzdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yLmVsbSA9IHZub2RlLmVsbTtcbiAgICAgICAgICAgIGlmIChwYXRjaGFibGUpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgaSQxID0gMDsgaSQxIDwgY2JzLmNyZWF0ZS5sZW5ndGg7ICsraSQxKSB7XG4gICAgICAgICAgICAgICAgY2JzLmNyZWF0ZVtpJDFdKGVtcHR5Tm9kZSwgYW5jZXN0b3IpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vICM2NTEzXG4gICAgICAgICAgICAgIC8vIGludm9rZSBpbnNlcnQgaG9va3MgdGhhdCBtYXkgaGF2ZSBiZWVuIG1lcmdlZCBieSBjcmVhdGUgaG9va3MuXG4gICAgICAgICAgICAgIC8vIGUuZy4gZm9yIGRpcmVjdGl2ZXMgdGhhdCB1c2VzIHRoZSBcImluc2VydGVkXCIgaG9vay5cbiAgICAgICAgICAgICAgdmFyIGluc2VydCA9IGFuY2VzdG9yLmRhdGEuaG9vay5pbnNlcnQ7XG4gICAgICAgICAgICAgIGlmIChpbnNlcnQubWVyZ2VkKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RhcnQgYXQgaW5kZXggMSB0byBhdm9pZCByZS1pbnZva2luZyBjb21wb25lbnQgbW91bnRlZCBob29rXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSQyID0gMTsgaSQyIDwgaW5zZXJ0LmZucy5sZW5ndGg7IGkkMisrKSB7XG4gICAgICAgICAgICAgICAgICBpbnNlcnQuZm5zW2kkMl0oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlZ2lzdGVyUmVmKGFuY2VzdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0RlZihwYXJlbnRFbG0kMSkpIHtcbiAgICAgICAgICByZW1vdmVWbm9kZXMocGFyZW50RWxtJDEsIFtvbGRWbm9kZV0sIDAsIDApO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGVmKG9sZFZub2RlLnRhZykpIHtcbiAgICAgICAgICBpbnZva2VEZXN0cm95SG9vayhvbGRWbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnZva2VJbnNlcnRIb29rKHZub2RlLCBpbnNlcnRlZFZub2RlUXVldWUsIGlzSW5pdGlhbFBhdGNoKTtcbiAgICByZXR1cm4gdm5vZGUuZWxtXG4gIH1cbn1cblxuLyogICovXG5cbnZhciBkaXJlY3RpdmVzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURpcmVjdGl2ZXMsXG4gIHVwZGF0ZTogdXBkYXRlRGlyZWN0aXZlcyxcbiAgZGVzdHJveTogZnVuY3Rpb24gdW5iaW5kRGlyZWN0aXZlcyAodm5vZGUpIHtcbiAgICB1cGRhdGVEaXJlY3RpdmVzKHZub2RlLCBlbXB0eU5vZGUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiB1cGRhdGVEaXJlY3RpdmVzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgaWYgKG9sZFZub2RlLmRhdGEuZGlyZWN0aXZlcyB8fCB2bm9kZS5kYXRhLmRpcmVjdGl2ZXMpIHtcbiAgICBfdXBkYXRlKG9sZFZub2RlLCB2bm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX3VwZGF0ZSAob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBpc0NyZWF0ZSA9IG9sZFZub2RlID09PSBlbXB0eU5vZGU7XG4gIHZhciBpc0Rlc3Ryb3kgPSB2bm9kZSA9PT0gZW1wdHlOb2RlO1xuICB2YXIgb2xkRGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2ZXMkMShvbGRWbm9kZS5kYXRhLmRpcmVjdGl2ZXMsIG9sZFZub2RlLmNvbnRleHQpO1xuICB2YXIgbmV3RGlycyA9IG5vcm1hbGl6ZURpcmVjdGl2ZXMkMSh2bm9kZS5kYXRhLmRpcmVjdGl2ZXMsIHZub2RlLmNvbnRleHQpO1xuXG4gIHZhciBkaXJzV2l0aEluc2VydCA9IFtdO1xuICB2YXIgZGlyc1dpdGhQb3N0cGF0Y2ggPSBbXTtcblxuICB2YXIga2V5LCBvbGREaXIsIGRpcjtcbiAgZm9yIChrZXkgaW4gbmV3RGlycykge1xuICAgIG9sZERpciA9IG9sZERpcnNba2V5XTtcbiAgICBkaXIgPSBuZXdEaXJzW2tleV07XG4gICAgaWYgKCFvbGREaXIpIHtcbiAgICAgIC8vIG5ldyBkaXJlY3RpdmUsIGJpbmRcbiAgICAgIGNhbGxIb29rJDEoZGlyLCAnYmluZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICBpZiAoZGlyLmRlZiAmJiBkaXIuZGVmLmluc2VydGVkKSB7XG4gICAgICAgIGRpcnNXaXRoSW5zZXJ0LnB1c2goZGlyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhpc3RpbmcgZGlyZWN0aXZlLCB1cGRhdGVcbiAgICAgIGRpci5vbGRWYWx1ZSA9IG9sZERpci52YWx1ZTtcbiAgICAgIGNhbGxIb29rJDEoZGlyLCAndXBkYXRlJywgdm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIGlmIChkaXIuZGVmICYmIGRpci5kZWYuY29tcG9uZW50VXBkYXRlZCkge1xuICAgICAgICBkaXJzV2l0aFBvc3RwYXRjaC5wdXNoKGRpcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpcnNXaXRoSW5zZXJ0Lmxlbmd0aCkge1xuICAgIHZhciBjYWxsSW5zZXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJzV2l0aEluc2VydC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoSW5zZXJ0W2ldLCAnaW5zZXJ0ZWQnLCB2bm9kZSwgb2xkVm5vZGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKGlzQ3JlYXRlKSB7XG4gICAgICBtZXJnZVZOb2RlSG9vayh2bm9kZS5kYXRhLmhvb2sgfHwgKHZub2RlLmRhdGEuaG9vayA9IHt9KSwgJ2luc2VydCcsIGNhbGxJbnNlcnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsSW5zZXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpcnNXaXRoUG9zdHBhdGNoLmxlbmd0aCkge1xuICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLmRhdGEuaG9vayB8fCAodm5vZGUuZGF0YS5ob29rID0ge30pLCAncG9zdHBhdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXJzV2l0aFBvc3RwYXRjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsSG9vayQxKGRpcnNXaXRoUG9zdHBhdGNoW2ldLCAnY29tcG9uZW50VXBkYXRlZCcsIHZub2RlLCBvbGRWbm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIWlzQ3JlYXRlKSB7XG4gICAgZm9yIChrZXkgaW4gb2xkRGlycykge1xuICAgICAgaWYgKCFuZXdEaXJzW2tleV0pIHtcbiAgICAgICAgLy8gbm8gbG9uZ2VyIHByZXNlbnQsIHVuYmluZFxuICAgICAgICBjYWxsSG9vayQxKG9sZERpcnNba2V5XSwgJ3VuYmluZCcsIG9sZFZub2RlLCBvbGRWbm9kZSwgaXNEZXN0cm95KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGVtcHR5TW9kaWZpZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplRGlyZWN0aXZlcyQxIChcbiAgZGlycyxcbiAgdm1cbikge1xuICB2YXIgcmVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKCFkaXJzKSB7XG4gICAgcmV0dXJuIHJlc1xuICB9XG4gIHZhciBpLCBkaXI7XG4gIGZvciAoaSA9IDA7IGkgPCBkaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgZGlyID0gZGlyc1tpXTtcbiAgICBpZiAoIWRpci5tb2RpZmllcnMpIHtcbiAgICAgIGRpci5tb2RpZmllcnMgPSBlbXB0eU1vZGlmaWVycztcbiAgICB9XG4gICAgcmVzW2dldFJhd0Rpck5hbWUoZGlyKV0gPSBkaXI7XG4gICAgZGlyLmRlZiA9IHJlc29sdmVBc3NldCh2bS4kb3B0aW9ucywgJ2RpcmVjdGl2ZXMnLCBkaXIubmFtZSwgdHJ1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBnZXRSYXdEaXJOYW1lIChkaXIpIHtcbiAgcmV0dXJuIGRpci5yYXdOYW1lIHx8ICgoZGlyLm5hbWUpICsgXCIuXCIgKyAoT2JqZWN0LmtleXMoZGlyLm1vZGlmaWVycyB8fCB7fSkuam9pbignLicpKSlcbn1cblxuZnVuY3Rpb24gY2FsbEhvb2skMSAoZGlyLCBob29rLCB2bm9kZSwgb2xkVm5vZGUsIGlzRGVzdHJveSkge1xuICB2YXIgZm4gPSBkaXIuZGVmICYmIGRpci5kZWZbaG9va107XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBmbih2bm9kZS5lbG0sIGRpciwgdm5vZGUsIG9sZFZub2RlLCBpc0Rlc3Ryb3kpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZub2RlLmNvbnRleHQsIChcImRpcmVjdGl2ZSBcIiArIChkaXIubmFtZSkgKyBcIiBcIiArIGhvb2sgKyBcIiBob29rXCIpKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGJhc2VNb2R1bGVzID0gW1xuICByZWYsXG4gIGRpcmVjdGl2ZXNcbl07XG5cbi8qICAqL1xuXG5mdW5jdGlvbiB1cGRhdGVBdHRycyAob2xkVm5vZGUsIHZub2RlKSB7XG4gIHZhciBvcHRzID0gdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgaWYgKGlzRGVmKG9wdHMpICYmIG9wdHMuQ3Rvci5vcHRpb25zLmluaGVyaXRBdHRycyA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLmF0dHJzKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEuYXR0cnMpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIGtleSwgY3VyLCBvbGQ7XG4gIHZhciBlbG0gPSB2bm9kZS5lbG07XG4gIHZhciBvbGRBdHRycyA9IG9sZFZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gIHZhciBhdHRycyA9IHZub2RlLmRhdGEuYXR0cnMgfHwge307XG4gIC8vIGNsb25lIG9ic2VydmVkIG9iamVjdHMsIGFzIHRoZSB1c2VyIHByb2JhYmx5IHdhbnRzIHRvIG11dGF0ZSBpdFxuICBpZiAoaXNEZWYoYXR0cnMuX19vYl9fKSkge1xuICAgIGF0dHJzID0gdm5vZGUuZGF0YS5hdHRycyA9IGV4dGVuZCh7fSwgYXR0cnMpO1xuICB9XG5cbiAgZm9yIChrZXkgaW4gYXR0cnMpIHtcbiAgICBjdXIgPSBhdHRyc1trZXldO1xuICAgIG9sZCA9IG9sZEF0dHJzW2tleV07XG4gICAgaWYgKG9sZCAhPT0gY3VyKSB7XG4gICAgICBzZXRBdHRyKGVsbSwga2V5LCBjdXIpO1xuICAgIH1cbiAgfVxuICAvLyAjNDM5MTogaW4gSUU5LCBzZXR0aW5nIHR5cGUgY2FuIHJlc2V0IHZhbHVlIGZvciBpbnB1dFt0eXBlPXJhZGlvXVxuICAvLyAjNjY2NjogSUUvRWRnZSBmb3JjZXMgcHJvZ3Jlc3MgdmFsdWUgZG93biB0byAxIGJlZm9yZSBzZXR0aW5nIGEgbWF4XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoKGlzSUU5IHx8IGlzRWRnZSkgJiYgYXR0cnMudmFsdWUgIT09IG9sZEF0dHJzLnZhbHVlKSB7XG4gICAgc2V0QXR0cihlbG0sICd2YWx1ZScsIGF0dHJzLnZhbHVlKTtcbiAgfVxuICBmb3IgKGtleSBpbiBvbGRBdHRycykge1xuICAgIGlmIChpc1VuZGVmKGF0dHJzW2tleV0pKSB7XG4gICAgICBpZiAoaXNYbGluayhrZXkpKSB7XG4gICAgICAgIGVsbS5yZW1vdmVBdHRyaWJ1dGVOUyh4bGlua05TLCBnZXRYbGlua1Byb3Aoa2V5KSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc0VudW1lcmF0ZWRBdHRyKGtleSkpIHtcbiAgICAgICAgZWxtLnJlbW92ZUF0dHJpYnV0ZShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRBdHRyIChlbCwga2V5LCB2YWx1ZSkge1xuICBpZiAoaXNCb29sZWFuQXR0cihrZXkpKSB7XG4gICAgLy8gc2V0IGF0dHJpYnV0ZSBmb3IgYmxhbmsgdmFsdWVcbiAgICAvLyBlLmcuIDxvcHRpb24gZGlzYWJsZWQ+U2VsZWN0IG9uZTwvb3B0aW9uPlxuICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRlY2huaWNhbGx5IGFsbG93ZnVsbHNjcmVlbiBpcyBhIGJvb2xlYW4gYXR0cmlidXRlIGZvciA8aWZyYW1lPixcbiAgICAgIC8vIGJ1dCBGbGFzaCBleHBlY3RzIGEgdmFsdWUgb2YgXCJ0cnVlXCIgd2hlbiB1c2VkIG9uIDxlbWJlZD4gdGFnXG4gICAgICB2YWx1ZSA9IGtleSA9PT0gJ2FsbG93ZnVsbHNjcmVlbicgJiYgZWwudGFnTmFtZSA9PT0gJ0VNQkVEJ1xuICAgICAgICA/ICd0cnVlJ1xuICAgICAgICA6IGtleTtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNFbnVtZXJhdGVkQXR0cihrZXkpKSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKGtleSwgaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkgfHwgdmFsdWUgPT09ICdmYWxzZScgPyAnZmFsc2UnIDogJ3RydWUnKTtcbiAgfSBlbHNlIGlmIChpc1hsaW5rKGtleSkpIHtcbiAgICBpZiAoaXNGYWxzeUF0dHJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZU5TKHhsaW5rTlMsIGdldFhsaW5rUHJvcChrZXkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc2V0QXR0cmlidXRlTlMoeGxpbmtOUywga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChpc0ZhbHN5QXR0clZhbHVlKHZhbHVlKSkge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGF0dHJzID0ge1xuICBjcmVhdGU6IHVwZGF0ZUF0dHJzLFxuICB1cGRhdGU6IHVwZGF0ZUF0dHJzXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3MgKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgZWwgPSB2bm9kZS5lbG07XG4gIHZhciBkYXRhID0gdm5vZGUuZGF0YTtcbiAgdmFyIG9sZERhdGEgPSBvbGRWbm9kZS5kYXRhO1xuICBpZiAoXG4gICAgaXNVbmRlZihkYXRhLnN0YXRpY0NsYXNzKSAmJlxuICAgIGlzVW5kZWYoZGF0YS5jbGFzcykgJiYgKFxuICAgICAgaXNVbmRlZihvbGREYXRhKSB8fCAoXG4gICAgICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNDbGFzcykgJiZcbiAgICAgICAgaXNVbmRlZihvbGREYXRhLmNsYXNzKVxuICAgICAgKVxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY2xzID0gZ2VuQ2xhc3NGb3JWbm9kZSh2bm9kZSk7XG5cbiAgLy8gaGFuZGxlIHRyYW5zaXRpb24gY2xhc3Nlc1xuICB2YXIgdHJhbnNpdGlvbkNsYXNzID0gZWwuX3RyYW5zaXRpb25DbGFzc2VzO1xuICBpZiAoaXNEZWYodHJhbnNpdGlvbkNsYXNzKSkge1xuICAgIGNscyA9IGNvbmNhdChjbHMsIHN0cmluZ2lmeUNsYXNzKHRyYW5zaXRpb25DbGFzcykpO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBjbGFzc1xuICBpZiAoY2xzICE9PSBlbC5fcHJldkNsYXNzKSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIGNscyk7XG4gICAgZWwuX3ByZXZDbGFzcyA9IGNscztcbiAgfVxufVxuXG52YXIga2xhc3MgPSB7XG4gIGNyZWF0ZTogdXBkYXRlQ2xhc3MsXG4gIHVwZGF0ZTogdXBkYXRlQ2xhc3Ncbn07XG5cbi8qICAqL1xuXG4vKiAgKi9cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vIG5vdGU6IHRoaXMgb25seSByZW1vdmVzIHRoZSBhdHRyIGZyb20gdGhlIEFycmF5IChhdHRyc0xpc3QpIHNvIHRoYXQgaXRcbi8vIGRvZXNuJ3QgZ2V0IHByb2Nlc3NlZCBieSBwcm9jZXNzQXR0cnMuXG4vLyBCeSBkZWZhdWx0IGl0IGRvZXMgTk9UIHJlbW92ZSBpdCBmcm9tIHRoZSBtYXAgKGF0dHJzTWFwKSBiZWNhdXNlIHRoZSBtYXAgaXNcbi8vIG5lZWRlZCBkdXJpbmcgY29kZWdlbi5cblxuLyogICovXG5cbi8qKlxuICogQ3Jvc3MtcGxhdGZvcm0gY29kZSBnZW5lcmF0aW9uIGZvciBjb21wb25lbnQgdi1tb2RlbFxuICovXG5cblxuLyoqXG4gKiBDcm9zcy1wbGF0Zm9ybSBjb2RlZ2VuIGhlbHBlciBmb3IgZ2VuZXJhdGluZyB2LW1vZGVsIHZhbHVlIGFzc2lnbm1lbnQgY29kZS5cbiAqL1xuXG4vKiAgKi9cblxuLy8gaW4gc29tZSBjYXNlcywgdGhlIGV2ZW50IHVzZWQgaGFzIHRvIGJlIGRldGVybWluZWQgYXQgcnVudGltZVxuLy8gc28gd2UgdXNlZCBzb21lIHJlc2VydmVkIHRva2VucyBkdXJpbmcgY29tcGlsZS5cbnZhciBSQU5HRV9UT0tFTiA9ICdfX3InO1xudmFyIENIRUNLQk9YX1JBRElPX1RPS0VOID0gJ19fYyc7XG5cbi8qICAqL1xuXG4vLyBub3JtYWxpemUgdi1tb2RlbCBldmVudCB0b2tlbnMgdGhhdCBjYW4gb25seSBiZSBkZXRlcm1pbmVkIGF0IHJ1bnRpbWUuXG4vLyBpdCdzIGltcG9ydGFudCB0byBwbGFjZSB0aGUgZXZlbnQgYXMgdGhlIGZpcnN0IGluIHRoZSBhcnJheSBiZWNhdXNlXG4vLyB0aGUgd2hvbGUgcG9pbnQgaXMgZW5zdXJpbmcgdGhlIHYtbW9kZWwgY2FsbGJhY2sgZ2V0cyBjYWxsZWQgYmVmb3JlXG4vLyB1c2VyLWF0dGFjaGVkIGhhbmRsZXJzLlxuZnVuY3Rpb24gbm9ybWFsaXplRXZlbnRzIChvbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKG9uW1JBTkdFX1RPS0VOXSkpIHtcbiAgICAvLyBJRSBpbnB1dFt0eXBlPXJhbmdlXSBvbmx5IHN1cHBvcnRzIGBjaGFuZ2VgIGV2ZW50XG4gICAgdmFyIGV2ZW50ID0gaXNJRSA/ICdjaGFuZ2UnIDogJ2lucHV0JztcbiAgICBvbltldmVudF0gPSBbXS5jb25jYXQob25bUkFOR0VfVE9LRU5dLCBvbltldmVudF0gfHwgW10pO1xuICAgIGRlbGV0ZSBvbltSQU5HRV9UT0tFTl07XG4gIH1cbiAgLy8gVGhpcyB3YXMgb3JpZ2luYWxseSBpbnRlbmRlZCB0byBmaXggIzQ1MjEgYnV0IG5vIGxvbmdlciBuZWNlc3NhcnlcbiAgLy8gYWZ0ZXIgMi41LiBLZWVwaW5nIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0IHdpdGggZ2VuZXJhdGVkIGNvZGUgZnJvbSA8IDIuNFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzRGVmKG9uW0NIRUNLQk9YX1JBRElPX1RPS0VOXSkpIHtcbiAgICBvbi5jaGFuZ2UgPSBbXS5jb25jYXQob25bQ0hFQ0tCT1hfUkFESU9fVE9LRU5dLCBvbi5jaGFuZ2UgfHwgW10pO1xuICAgIGRlbGV0ZSBvbltDSEVDS0JPWF9SQURJT19UT0tFTl07XG4gIH1cbn1cblxudmFyIHRhcmdldCQxO1xuXG5mdW5jdGlvbiBjcmVhdGVPbmNlSGFuZGxlciAoaGFuZGxlciwgZXZlbnQsIGNhcHR1cmUpIHtcbiAgdmFyIF90YXJnZXQgPSB0YXJnZXQkMTsgLy8gc2F2ZSBjdXJyZW50IHRhcmdldCBlbGVtZW50IGluIGNsb3N1cmVcbiAgcmV0dXJuIGZ1bmN0aW9uIG9uY2VIYW5kbGVyICgpIHtcbiAgICB2YXIgcmVzID0gaGFuZGxlci5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgIHJlbW92ZSQyKGV2ZW50LCBvbmNlSGFuZGxlciwgY2FwdHVyZSwgX3RhcmdldCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZCQxIChcbiAgZXZlbnQsXG4gIGhhbmRsZXIsXG4gIG9uY2UkJDEsXG4gIGNhcHR1cmUsXG4gIHBhc3NpdmVcbikge1xuICBoYW5kbGVyID0gd2l0aE1hY3JvVGFzayhoYW5kbGVyKTtcbiAgaWYgKG9uY2UkJDEpIHsgaGFuZGxlciA9IGNyZWF0ZU9uY2VIYW5kbGVyKGhhbmRsZXIsIGV2ZW50LCBjYXB0dXJlKTsgfVxuICB0YXJnZXQkMS5hZGRFdmVudExpc3RlbmVyKFxuICAgIGV2ZW50LFxuICAgIGhhbmRsZXIsXG4gICAgc3VwcG9ydHNQYXNzaXZlXG4gICAgICA/IHsgY2FwdHVyZTogY2FwdHVyZSwgcGFzc2l2ZTogcGFzc2l2ZSB9XG4gICAgICA6IGNhcHR1cmVcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlJDIgKFxuICBldmVudCxcbiAgaGFuZGxlcixcbiAgY2FwdHVyZSxcbiAgX3RhcmdldFxuKSB7XG4gIChfdGFyZ2V0IHx8IHRhcmdldCQxKS5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgIGV2ZW50LFxuICAgIGhhbmRsZXIuX3dpdGhUYXNrIHx8IGhhbmRsZXIsXG4gICAgY2FwdHVyZVxuICApO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVET01MaXN0ZW5lcnMgKG9sZFZub2RlLCB2bm9kZSkge1xuICBpZiAoaXNVbmRlZihvbGRWbm9kZS5kYXRhLm9uKSAmJiBpc1VuZGVmKHZub2RlLmRhdGEub24pKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIG9uID0gdm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgdmFyIG9sZE9uID0gb2xkVm5vZGUuZGF0YS5vbiB8fCB7fTtcbiAgdGFyZ2V0JDEgPSB2bm9kZS5lbG07XG4gIG5vcm1hbGl6ZUV2ZW50cyhvbik7XG4gIHVwZGF0ZUxpc3RlbmVycyhvbiwgb2xkT24sIGFkZCQxLCByZW1vdmUkMiwgdm5vZGUuY29udGV4dCk7XG59XG5cbnZhciBldmVudHMgPSB7XG4gIGNyZWF0ZTogdXBkYXRlRE9NTGlzdGVuZXJzLFxuICB1cGRhdGU6IHVwZGF0ZURPTUxpc3RlbmVyc1xufTtcblxuLyogICovXG5cbmZ1bmN0aW9uIHVwZGF0ZURPTVByb3BzIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgaWYgKGlzVW5kZWYob2xkVm5vZGUuZGF0YS5kb21Qcm9wcykgJiYgaXNVbmRlZih2bm9kZS5kYXRhLmRvbVByb3BzKSkge1xuICAgIHJldHVyblxuICB9XG4gIHZhciBrZXksIGN1cjtcbiAgdmFyIGVsbSA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZFByb3BzID0gb2xkVm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgdmFyIHByb3BzID0gdm5vZGUuZGF0YS5kb21Qcm9wcyB8fCB7fTtcbiAgLy8gY2xvbmUgb2JzZXJ2ZWQgb2JqZWN0cywgYXMgdGhlIHVzZXIgcHJvYmFibHkgd2FudHMgdG8gbXV0YXRlIGl0XG4gIGlmIChpc0RlZihwcm9wcy5fX29iX18pKSB7XG4gICAgcHJvcHMgPSB2bm9kZS5kYXRhLmRvbVByb3BzID0gZXh0ZW5kKHt9LCBwcm9wcyk7XG4gIH1cblxuICBmb3IgKGtleSBpbiBvbGRQcm9wcykge1xuICAgIGlmIChpc1VuZGVmKHByb3BzW2tleV0pKSB7XG4gICAgICBlbG1ba2V5XSA9ICcnO1xuICAgIH1cbiAgfVxuICBmb3IgKGtleSBpbiBwcm9wcykge1xuICAgIGN1ciA9IHByb3BzW2tleV07XG4gICAgLy8gaWdub3JlIGNoaWxkcmVuIGlmIHRoZSBub2RlIGhhcyB0ZXh0Q29udGVudCBvciBpbm5lckhUTUwsXG4gICAgLy8gYXMgdGhlc2Ugd2lsbCB0aHJvdyBhd2F5IGV4aXN0aW5nIERPTSBub2RlcyBhbmQgY2F1c2UgcmVtb3ZhbCBlcnJvcnNcbiAgICAvLyBvbiBzdWJzZXF1ZW50IHBhdGNoZXMgKCMzMzYwKVxuICAgIGlmIChrZXkgPT09ICd0ZXh0Q29udGVudCcgfHwga2V5ID09PSAnaW5uZXJIVE1MJykge1xuICAgICAgaWYgKHZub2RlLmNoaWxkcmVuKSB7IHZub2RlLmNoaWxkcmVuLmxlbmd0aCA9IDA7IH1cbiAgICAgIGlmIChjdXIgPT09IG9sZFByb3BzW2tleV0pIHsgY29udGludWUgfVxuICAgICAgLy8gIzY2MDEgd29yayBhcm91bmQgQ2hyb21lIHZlcnNpb24gPD0gNTUgYnVnIHdoZXJlIHNpbmdsZSB0ZXh0Tm9kZVxuICAgICAgLy8gcmVwbGFjZWQgYnkgaW5uZXJIVE1ML3RleHRDb250ZW50IHJldGFpbnMgaXRzIHBhcmVudE5vZGUgcHJvcGVydHlcbiAgICAgIGlmIChlbG0uY2hpbGROb2Rlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZWxtLnJlbW92ZUNoaWxkKGVsbS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAndmFsdWUnKSB7XG4gICAgICAvLyBzdG9yZSB2YWx1ZSBhcyBfdmFsdWUgYXMgd2VsbCBzaW5jZVxuICAgICAgLy8gbm9uLXN0cmluZyB2YWx1ZXMgd2lsbCBiZSBzdHJpbmdpZmllZFxuICAgICAgZWxtLl92YWx1ZSA9IGN1cjtcbiAgICAgIC8vIGF2b2lkIHJlc2V0dGluZyBjdXJzb3IgcG9zaXRpb24gd2hlbiB2YWx1ZSBpcyB0aGUgc2FtZVxuICAgICAgdmFyIHN0ckN1ciA9IGlzVW5kZWYoY3VyKSA/ICcnIDogU3RyaW5nKGN1cik7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlVmFsdWUoZWxtLCBzdHJDdXIpKSB7XG4gICAgICAgIGVsbS52YWx1ZSA9IHN0ckN1cjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWxtW2tleV0gPSBjdXI7XG4gICAgfVxuICB9XG59XG5cbi8vIGNoZWNrIHBsYXRmb3Jtcy93ZWIvdXRpbC9hdHRycy5qcyBhY2NlcHRWYWx1ZVxuXG5cbmZ1bmN0aW9uIHNob3VsZFVwZGF0ZVZhbHVlIChlbG0sIGNoZWNrVmFsKSB7XG4gIHJldHVybiAoIWVsbS5jb21wb3NpbmcgJiYgKFxuICAgIGVsbS50YWdOYW1lID09PSAnT1BUSU9OJyB8fFxuICAgIGlzRGlydHkoZWxtLCBjaGVja1ZhbCkgfHxcbiAgICBpc0lucHV0Q2hhbmdlZChlbG0sIGNoZWNrVmFsKVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0RpcnR5IChlbG0sIGNoZWNrVmFsKSB7XG4gIC8vIHJldHVybiB0cnVlIHdoZW4gdGV4dGJveCAoLm51bWJlciBhbmQgLnRyaW0pIGxvc2VzIGZvY3VzIGFuZCBpdHMgdmFsdWUgaXNcbiAgLy8gbm90IGVxdWFsIHRvIHRoZSB1cGRhdGVkIHZhbHVlXG4gIHZhciBub3RJbkZvY3VzID0gdHJ1ZTtcbiAgLy8gIzYxNTdcbiAgLy8gd29yayBhcm91bmQgSUUgYnVnIHdoZW4gYWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW4gYW4gaWZyYW1lXG4gIHRyeSB7IG5vdEluRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBlbG07IH0gY2F0Y2ggKGUpIHt9XG4gIHJldHVybiBub3RJbkZvY3VzICYmIGVsbS52YWx1ZSAhPT0gY2hlY2tWYWxcbn1cblxuZnVuY3Rpb24gaXNJbnB1dENoYW5nZWQgKGVsbSwgbmV3VmFsKSB7XG4gIHZhciB2YWx1ZSA9IGVsbS52YWx1ZTtcbiAgdmFyIG1vZGlmaWVycyA9IGVsbS5fdk1vZGlmaWVyczsgLy8gaW5qZWN0ZWQgYnkgdi1tb2RlbCBydW50aW1lXG4gIGlmIChpc0RlZihtb2RpZmllcnMpICYmIG1vZGlmaWVycy5udW1iZXIpIHtcbiAgICByZXR1cm4gdG9OdW1iZXIodmFsdWUpICE9PSB0b051bWJlcihuZXdWYWwpXG4gIH1cbiAgaWYgKGlzRGVmKG1vZGlmaWVycykgJiYgbW9kaWZpZXJzLnRyaW0pIHtcbiAgICByZXR1cm4gdmFsdWUudHJpbSgpICE9PSBuZXdWYWwudHJpbSgpXG4gIH1cbiAgcmV0dXJuIHZhbHVlICE9PSBuZXdWYWxcbn1cblxudmFyIGRvbVByb3BzID0ge1xuICBjcmVhdGU6IHVwZGF0ZURPTVByb3BzLFxuICB1cGRhdGU6IHVwZGF0ZURPTVByb3BzXG59O1xuXG4vKiAgKi9cblxudmFyIHBhcnNlU3R5bGVUZXh0ID0gY2FjaGVkKGZ1bmN0aW9uIChjc3NUZXh0KSB7XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGxpc3REZWxpbWl0ZXIgPSAvOyg/IVteKF0qXFwpKS9nO1xuICB2YXIgcHJvcGVydHlEZWxpbWl0ZXIgPSAvOiguKykvO1xuICBjc3NUZXh0LnNwbGl0KGxpc3REZWxpbWl0ZXIpLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICBpZiAoaXRlbSkge1xuICAgICAgdmFyIHRtcCA9IGl0ZW0uc3BsaXQocHJvcGVydHlEZWxpbWl0ZXIpO1xuICAgICAgdG1wLmxlbmd0aCA+IDEgJiYgKHJlc1t0bXBbMF0udHJpbSgpXSA9IHRtcFsxXS50cmltKCkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vLyBtZXJnZSBzdGF0aWMgYW5kIGR5bmFtaWMgc3R5bGUgZGF0YSBvbiB0aGUgc2FtZSB2bm9kZVxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVEYXRhIChkYXRhKSB7XG4gIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyhkYXRhLnN0eWxlKTtcbiAgLy8gc3RhdGljIHN0eWxlIGlzIHByZS1wcm9jZXNzZWQgaW50byBhbiBvYmplY3QgZHVyaW5nIGNvbXBpbGF0aW9uXG4gIC8vIGFuZCBpcyBhbHdheXMgYSBmcmVzaCBvYmplY3QsIHNvIGl0J3Mgc2FmZSB0byBtZXJnZSBpbnRvIGl0XG4gIHJldHVybiBkYXRhLnN0YXRpY1N0eWxlXG4gICAgPyBleHRlbmQoZGF0YS5zdGF0aWNTdHlsZSwgc3R5bGUpXG4gICAgOiBzdHlsZVxufVxuXG4vLyBub3JtYWxpemUgcG9zc2libGUgYXJyYXkgLyBzdHJpbmcgdmFsdWVzIGludG8gT2JqZWN0XG5mdW5jdGlvbiBub3JtYWxpemVTdHlsZUJpbmRpbmcgKGJpbmRpbmdTdHlsZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShiaW5kaW5nU3R5bGUpKSB7XG4gICAgcmV0dXJuIHRvT2JqZWN0KGJpbmRpbmdTdHlsZSlcbiAgfVxuICBpZiAodHlwZW9mIGJpbmRpbmdTdHlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGFyc2VTdHlsZVRleHQoYmluZGluZ1N0eWxlKVxuICB9XG4gIHJldHVybiBiaW5kaW5nU3R5bGVcbn1cblxuLyoqXG4gKiBwYXJlbnQgY29tcG9uZW50IHN0eWxlIHNob3VsZCBiZSBhZnRlciBjaGlsZCdzXG4gKiBzbyB0aGF0IHBhcmVudCBjb21wb25lbnQncyBzdHlsZSBjb3VsZCBvdmVycmlkZSBpdFxuICovXG5mdW5jdGlvbiBnZXRTdHlsZSAodm5vZGUsIGNoZWNrQ2hpbGQpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgc3R5bGVEYXRhO1xuXG4gIGlmIChjaGVja0NoaWxkKSB7XG4gICAgdmFyIGNoaWxkTm9kZSA9IHZub2RlO1xuICAgIHdoaWxlIChjaGlsZE5vZGUuY29tcG9uZW50SW5zdGFuY2UpIHtcbiAgICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGU7XG4gICAgICBpZiAoY2hpbGROb2RlLmRhdGEgJiYgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShjaGlsZE5vZGUuZGF0YSkpKSB7XG4gICAgICAgIGV4dGVuZChyZXMsIHN0eWxlRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKChzdHlsZURhdGEgPSBub3JtYWxpemVTdHlsZURhdGEodm5vZGUuZGF0YSkpKSB7XG4gICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgfVxuXG4gIHZhciBwYXJlbnROb2RlID0gdm5vZGU7XG4gIHdoaWxlICgocGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50KSkge1xuICAgIGlmIChwYXJlbnROb2RlLmRhdGEgJiYgKHN0eWxlRGF0YSA9IG5vcm1hbGl6ZVN0eWxlRGF0YShwYXJlbnROb2RlLmRhdGEpKSkge1xuICAgICAgZXh0ZW5kKHJlcywgc3R5bGVEYXRhKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiAgKi9cblxudmFyIGNzc1ZhclJFID0gL14tLS87XG52YXIgaW1wb3J0YW50UkUgPSAvXFxzKiFpbXBvcnRhbnQkLztcbnZhciBzZXRQcm9wID0gZnVuY3Rpb24gKGVsLCBuYW1lLCB2YWwpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChjc3NWYXJSRS50ZXN0KG5hbWUpKSB7XG4gICAgZWwuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsKTtcbiAgfSBlbHNlIGlmIChpbXBvcnRhbnRSRS50ZXN0KHZhbCkpIHtcbiAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWwucmVwbGFjZShpbXBvcnRhbnRSRSwgJycpLCAnaW1wb3J0YW50Jyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5vcm1hbGl6ZWROYW1lID0gbm9ybWFsaXplKG5hbWUpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIC8vIFN1cHBvcnQgdmFsdWVzIGFycmF5IGNyZWF0ZWQgYnkgYXV0b3ByZWZpeGVyLCBlLmcuXG4gICAgICAvLyB7ZGlzcGxheTogW1wiLXdlYmtpdC1ib3hcIiwgXCItbXMtZmxleGJveFwiLCBcImZsZXhcIl19XG4gICAgICAvLyBTZXQgdGhlbSBvbmUgYnkgb25lLCBhbmQgdGhlIGJyb3dzZXIgd2lsbCBvbmx5IHNldCB0aG9zZSBpdCBjYW4gcmVjb2duaXplXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGVsLnN0eWxlW25vcm1hbGl6ZWROYW1lXSA9IHZhbFtpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGVbbm9ybWFsaXplZE5hbWVdID0gdmFsO1xuICAgIH1cbiAgfVxufTtcblxudmFyIHZlbmRvck5hbWVzID0gWydXZWJraXQnLCAnTW96JywgJ21zJ107XG5cbnZhciBlbXB0eVN0eWxlO1xudmFyIG5vcm1hbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAocHJvcCkge1xuICBlbXB0eVN0eWxlID0gZW1wdHlTdHlsZSB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTtcbiAgcHJvcCA9IGNhbWVsaXplKHByb3ApO1xuICBpZiAocHJvcCAhPT0gJ2ZpbHRlcicgJiYgKHByb3AgaW4gZW1wdHlTdHlsZSkpIHtcbiAgICByZXR1cm4gcHJvcFxuICB9XG4gIHZhciBjYXBOYW1lID0gcHJvcC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3Auc2xpY2UoMSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmVuZG9yTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbmFtZSA9IHZlbmRvck5hbWVzW2ldICsgY2FwTmFtZTtcbiAgICBpZiAobmFtZSBpbiBlbXB0eVN0eWxlKSB7XG4gICAgICByZXR1cm4gbmFtZVxuICAgIH1cbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhO1xuICB2YXIgb2xkRGF0YSA9IG9sZFZub2RlLmRhdGE7XG5cbiAgaWYgKGlzVW5kZWYoZGF0YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihkYXRhLnN0eWxlKSAmJlxuICAgIGlzVW5kZWYob2xkRGF0YS5zdGF0aWNTdHlsZSkgJiYgaXNVbmRlZihvbGREYXRhLnN0eWxlKVxuICApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjdXIsIG5hbWU7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcbiAgdmFyIG9sZFN0YXRpY1N0eWxlID0gb2xkRGF0YS5zdGF0aWNTdHlsZTtcbiAgdmFyIG9sZFN0eWxlQmluZGluZyA9IG9sZERhdGEubm9ybWFsaXplZFN0eWxlIHx8IG9sZERhdGEuc3R5bGUgfHwge307XG5cbiAgLy8gaWYgc3RhdGljIHN0eWxlIGV4aXN0cywgc3R5bGViaW5kaW5nIGFscmVhZHkgbWVyZ2VkIGludG8gaXQgd2hlbiBkb2luZyBub3JtYWxpemVTdHlsZURhdGFcbiAgdmFyIG9sZFN0eWxlID0gb2xkU3RhdGljU3R5bGUgfHwgb2xkU3R5bGVCaW5kaW5nO1xuXG4gIHZhciBzdHlsZSA9IG5vcm1hbGl6ZVN0eWxlQmluZGluZyh2bm9kZS5kYXRhLnN0eWxlKSB8fCB7fTtcblxuICAvLyBzdG9yZSBub3JtYWxpemVkIHN0eWxlIHVuZGVyIGEgZGlmZmVyZW50IGtleSBmb3IgbmV4dCBkaWZmXG4gIC8vIG1ha2Ugc3VyZSB0byBjbG9uZSBpdCBpZiBpdCdzIHJlYWN0aXZlLCBzaW5jZSB0aGUgdXNlciBsaWtlbHkgd2FudHNcbiAgLy8gdG8gbXV0YXRlIGl0LlxuICB2bm9kZS5kYXRhLm5vcm1hbGl6ZWRTdHlsZSA9IGlzRGVmKHN0eWxlLl9fb2JfXylcbiAgICA/IGV4dGVuZCh7fSwgc3R5bGUpXG4gICAgOiBzdHlsZTtcblxuICB2YXIgbmV3U3R5bGUgPSBnZXRTdHlsZSh2bm9kZSwgdHJ1ZSk7XG5cbiAgZm9yIChuYW1lIGluIG9sZFN0eWxlKSB7XG4gICAgaWYgKGlzVW5kZWYobmV3U3R5bGVbbmFtZV0pKSB7XG4gICAgICBzZXRQcm9wKGVsLCBuYW1lLCAnJyk7XG4gICAgfVxuICB9XG4gIGZvciAobmFtZSBpbiBuZXdTdHlsZSkge1xuICAgIGN1ciA9IG5ld1N0eWxlW25hbWVdO1xuICAgIGlmIChjdXIgIT09IG9sZFN0eWxlW25hbWVdKSB7XG4gICAgICAvLyBpZTkgc2V0dGluZyB0byBudWxsIGhhcyBubyBlZmZlY3QsIG11c3QgdXNlIGVtcHR5IHN0cmluZ1xuICAgICAgc2V0UHJvcChlbCwgbmFtZSwgY3VyID09IG51bGwgPyAnJyA6IGN1cik7XG4gICAgfVxuICB9XG59XG5cbnZhciBzdHlsZSA9IHtcbiAgY3JlYXRlOiB1cGRhdGVTdHlsZSxcbiAgdXBkYXRlOiB1cGRhdGVTdHlsZVxufTtcblxuLyogICovXG5cbi8qKlxuICogQWRkIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gYWRkQ2xhc3MgKGVsLCBjbHMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICBjbHMuc3BsaXQoL1xccysvKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QuYWRkKGMpOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgY3VyID0gXCIgXCIgKyAoZWwuZ2V0QXR0cmlidXRlKCdjbGFzcycpIHx8ICcnKSArIFwiIFwiO1xuICAgIGlmIChjdXIuaW5kZXhPZignICcgKyBjbHMgKyAnICcpIDwgMCkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIChjdXIgKyBjbHMpLnRyaW0oKSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlIGNsYXNzIHdpdGggY29tcGF0aWJpbGl0eSBmb3IgU1ZHIHNpbmNlIGNsYXNzTGlzdCBpcyBub3Qgc3VwcG9ydGVkIG9uXG4gKiBTVkcgZWxlbWVudHMgaW4gSUVcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MgKGVsLCBjbHMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICghY2xzIHx8ICEoY2xzID0gY2xzLnRyaW0oKSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICBpZiAoY2xzLmluZGV4T2YoJyAnKSA+IC0xKSB7XG4gICAgICBjbHMuc3BsaXQoL1xccysvKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IHJldHVybiBlbC5jbGFzc0xpc3QucmVtb3ZlKGMpOyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHMpO1xuICAgIH1cbiAgICBpZiAoIWVsLmNsYXNzTGlzdC5sZW5ndGgpIHtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1ciA9IFwiIFwiICsgKGVsLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyBcIiBcIjtcbiAgICB2YXIgdGFyID0gJyAnICsgY2xzICsgJyAnO1xuICAgIHdoaWxlIChjdXIuaW5kZXhPZih0YXIpID49IDApIHtcbiAgICAgIGN1ciA9IGN1ci5yZXBsYWNlKHRhciwgJyAnKTtcbiAgICB9XG4gICAgY3VyID0gY3VyLnRyaW0oKTtcbiAgICBpZiAoY3VyKSB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgY3VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gcmVzb2x2ZVRyYW5zaXRpb24gKGRlZikge1xuICBpZiAoIWRlZikge1xuICAgIHJldHVyblxuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0eXBlb2YgZGVmID09PSAnb2JqZWN0Jykge1xuICAgIHZhciByZXMgPSB7fTtcbiAgICBpZiAoZGVmLmNzcyAhPT0gZmFsc2UpIHtcbiAgICAgIGV4dGVuZChyZXMsIGF1dG9Dc3NUcmFuc2l0aW9uKGRlZi5uYW1lIHx8ICd2JykpO1xuICAgIH1cbiAgICBleHRlbmQocmVzLCBkZWYpO1xuICAgIHJldHVybiByZXNcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBhdXRvQ3NzVHJhbnNpdGlvbihkZWYpXG4gIH1cbn1cblxudmFyIGF1dG9Dc3NUcmFuc2l0aW9uID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiB7XG4gICAgZW50ZXJDbGFzczogKG5hbWUgKyBcIi1lbnRlclwiKSxcbiAgICBlbnRlclRvQ2xhc3M6IChuYW1lICsgXCItZW50ZXItdG9cIiksXG4gICAgZW50ZXJBY3RpdmVDbGFzczogKG5hbWUgKyBcIi1lbnRlci1hY3RpdmVcIiksXG4gICAgbGVhdmVDbGFzczogKG5hbWUgKyBcIi1sZWF2ZVwiKSxcbiAgICBsZWF2ZVRvQ2xhc3M6IChuYW1lICsgXCItbGVhdmUtdG9cIiksXG4gICAgbGVhdmVBY3RpdmVDbGFzczogKG5hbWUgKyBcIi1sZWF2ZS1hY3RpdmVcIilcbiAgfVxufSk7XG5cbnZhciBoYXNUcmFuc2l0aW9uID0gaW5Ccm93c2VyICYmICFpc0lFOTtcbnZhciBUUkFOU0lUSU9OID0gJ3RyYW5zaXRpb24nO1xudmFyIEFOSU1BVElPTiA9ICdhbmltYXRpb24nO1xuXG4vLyBUcmFuc2l0aW9uIHByb3BlcnR5L2V2ZW50IHNuaWZmaW5nXG52YXIgdHJhbnNpdGlvblByb3AgPSAndHJhbnNpdGlvbic7XG52YXIgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3RyYW5zaXRpb25lbmQnO1xudmFyIGFuaW1hdGlvblByb3AgPSAnYW5pbWF0aW9uJztcbnZhciBhbmltYXRpb25FbmRFdmVudCA9ICdhbmltYXRpb25lbmQnO1xuaWYgKGhhc1RyYW5zaXRpb24pIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh3aW5kb3cub250cmFuc2l0aW9uZW5kID09PSB1bmRlZmluZWQgJiZcbiAgICB3aW5kb3cub253ZWJraXR0cmFuc2l0aW9uZW5kICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgdHJhbnNpdGlvblByb3AgPSAnV2Via2l0VHJhbnNpdGlvbic7XG4gICAgdHJhbnNpdGlvbkVuZEV2ZW50ID0gJ3dlYmtpdFRyYW5zaXRpb25FbmQnO1xuICB9XG4gIGlmICh3aW5kb3cub25hbmltYXRpb25lbmQgPT09IHVuZGVmaW5lZCAmJlxuICAgIHdpbmRvdy5vbndlYmtpdGFuaW1hdGlvbmVuZCAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIGFuaW1hdGlvblByb3AgPSAnV2Via2l0QW5pbWF0aW9uJztcbiAgICBhbmltYXRpb25FbmRFdmVudCA9ICd3ZWJraXRBbmltYXRpb25FbmQnO1xuICB9XG59XG5cbi8vIGJpbmRpbmcgdG8gd2luZG93IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGhvdCByZWxvYWQgd29yayBpbiBJRSBpbiBzdHJpY3QgbW9kZVxudmFyIHJhZiA9IGluQnJvd3NlclxuICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbiAgICA/IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpXG4gICAgOiBzZXRUaW1lb3V0XG4gIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZnVuY3Rpb24gKGZuKSB7IHJldHVybiBmbigpOyB9O1xuXG5mdW5jdGlvbiBuZXh0RnJhbWUgKGZuKSB7XG4gIHJhZihmdW5jdGlvbiAoKSB7XG4gICAgcmFmKGZuKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZFRyYW5zaXRpb25DbGFzcyAoZWwsIGNscykge1xuICB2YXIgdHJhbnNpdGlvbkNsYXNzZXMgPSBlbC5fdHJhbnNpdGlvbkNsYXNzZXMgfHwgKGVsLl90cmFuc2l0aW9uQ2xhc3NlcyA9IFtdKTtcbiAgaWYgKHRyYW5zaXRpb25DbGFzc2VzLmluZGV4T2YoY2xzKSA8IDApIHtcbiAgICB0cmFuc2l0aW9uQ2xhc3Nlcy5wdXNoKGNscyk7XG4gICAgYWRkQ2xhc3MoZWwsIGNscyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlVHJhbnNpdGlvbkNsYXNzIChlbCwgY2xzKSB7XG4gIGlmIChlbC5fdHJhbnNpdGlvbkNsYXNzZXMpIHtcbiAgICByZW1vdmUoZWwuX3RyYW5zaXRpb25DbGFzc2VzLCBjbHMpO1xuICB9XG4gIHJlbW92ZUNsYXNzKGVsLCBjbHMpO1xufVxuXG5mdW5jdGlvbiB3aGVuVHJhbnNpdGlvbkVuZHMgKFxuICBlbCxcbiAgZXhwZWN0ZWRUeXBlLFxuICBjYlxuKSB7XG4gIHZhciByZWYgPSBnZXRUcmFuc2l0aW9uSW5mbyhlbCwgZXhwZWN0ZWRUeXBlKTtcbiAgdmFyIHR5cGUgPSByZWYudHlwZTtcbiAgdmFyIHRpbWVvdXQgPSByZWYudGltZW91dDtcbiAgdmFyIHByb3BDb3VudCA9IHJlZi5wcm9wQ291bnQ7XG4gIGlmICghdHlwZSkgeyByZXR1cm4gY2IoKSB9XG4gIHZhciBldmVudCA9IHR5cGUgPT09IFRSQU5TSVRJT04gPyB0cmFuc2l0aW9uRW5kRXZlbnQgOiBhbmltYXRpb25FbmRFdmVudDtcbiAgdmFyIGVuZGVkID0gMDtcbiAgdmFyIGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XG4gICAgY2IoKTtcbiAgfTtcbiAgdmFyIG9uRW5kID0gZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZS50YXJnZXQgPT09IGVsKSB7XG4gICAgICBpZiAoKytlbmRlZCA+PSBwcm9wQ291bnQpIHtcbiAgICAgICAgZW5kKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZW5kZWQgPCBwcm9wQ291bnQpIHtcbiAgICAgIGVuZCgpO1xuICAgIH1cbiAgfSwgdGltZW91dCArIDEpO1xuICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBvbkVuZCk7XG59XG5cbnZhciB0cmFuc2Zvcm1SRSA9IC9cXGIodHJhbnNmb3JtfGFsbCkoLHwkKS87XG5cbmZ1bmN0aW9uIGdldFRyYW5zaXRpb25JbmZvIChlbCwgZXhwZWN0ZWRUeXBlKSB7XG4gIHZhciBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG4gIHZhciB0cmFuc2l0aW9uRGVsYXlzID0gc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0RlbGF5J10uc3BsaXQoJywgJyk7XG4gIHZhciB0cmFuc2l0aW9uRHVyYXRpb25zID0gc3R5bGVzW3RyYW5zaXRpb25Qcm9wICsgJ0R1cmF0aW9uJ10uc3BsaXQoJywgJyk7XG4gIHZhciB0cmFuc2l0aW9uVGltZW91dCA9IGdldFRpbWVvdXQodHJhbnNpdGlvbkRlbGF5cywgdHJhbnNpdGlvbkR1cmF0aW9ucyk7XG4gIHZhciBhbmltYXRpb25EZWxheXMgPSBzdHlsZXNbYW5pbWF0aW9uUHJvcCArICdEZWxheSddLnNwbGl0KCcsICcpO1xuICB2YXIgYW5pbWF0aW9uRHVyYXRpb25zID0gc3R5bGVzW2FuaW1hdGlvblByb3AgKyAnRHVyYXRpb24nXS5zcGxpdCgnLCAnKTtcbiAgdmFyIGFuaW1hdGlvblRpbWVvdXQgPSBnZXRUaW1lb3V0KGFuaW1hdGlvbkRlbGF5cywgYW5pbWF0aW9uRHVyYXRpb25zKTtcblxuICB2YXIgdHlwZTtcbiAgdmFyIHRpbWVvdXQgPSAwO1xuICB2YXIgcHJvcENvdW50ID0gMDtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChleHBlY3RlZFR5cGUgPT09IFRSQU5TSVRJT04pIHtcbiAgICBpZiAodHJhbnNpdGlvblRpbWVvdXQgPiAwKSB7XG4gICAgICB0eXBlID0gVFJBTlNJVElPTjtcbiAgICAgIHRpbWVvdXQgPSB0cmFuc2l0aW9uVGltZW91dDtcbiAgICAgIHByb3BDb3VudCA9IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIGlmIChleHBlY3RlZFR5cGUgPT09IEFOSU1BVElPTikge1xuICAgIGlmIChhbmltYXRpb25UaW1lb3V0ID4gMCkge1xuICAgICAgdHlwZSA9IEFOSU1BVElPTjtcbiAgICAgIHRpbWVvdXQgPSBhbmltYXRpb25UaW1lb3V0O1xuICAgICAgcHJvcENvdW50ID0gYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGltZW91dCA9IE1hdGgubWF4KHRyYW5zaXRpb25UaW1lb3V0LCBhbmltYXRpb25UaW1lb3V0KTtcbiAgICB0eXBlID0gdGltZW91dCA+IDBcbiAgICAgID8gdHJhbnNpdGlvblRpbWVvdXQgPiBhbmltYXRpb25UaW1lb3V0XG4gICAgICAgID8gVFJBTlNJVElPTlxuICAgICAgICA6IEFOSU1BVElPTlxuICAgICAgOiBudWxsO1xuICAgIHByb3BDb3VudCA9IHR5cGVcbiAgICAgID8gdHlwZSA9PT0gVFJBTlNJVElPTlxuICAgICAgICA/IHRyYW5zaXRpb25EdXJhdGlvbnMubGVuZ3RoXG4gICAgICAgIDogYW5pbWF0aW9uRHVyYXRpb25zLmxlbmd0aFxuICAgICAgOiAwO1xuICB9XG4gIHZhciBoYXNUcmFuc2Zvcm0gPVxuICAgIHR5cGUgPT09IFRSQU5TSVRJT04gJiZcbiAgICB0cmFuc2Zvcm1SRS50ZXN0KHN0eWxlc1t0cmFuc2l0aW9uUHJvcCArICdQcm9wZXJ0eSddKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiB0eXBlLFxuICAgIHRpbWVvdXQ6IHRpbWVvdXQsXG4gICAgcHJvcENvdW50OiBwcm9wQ291bnQsXG4gICAgaGFzVHJhbnNmb3JtOiBoYXNUcmFuc2Zvcm1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUaW1lb3V0IChkZWxheXMsIGR1cmF0aW9ucykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB3aGlsZSAoZGVsYXlzLmxlbmd0aCA8IGR1cmF0aW9ucy5sZW5ndGgpIHtcbiAgICBkZWxheXMgPSBkZWxheXMuY29uY2F0KGRlbGF5cyk7XG4gIH1cblxuICByZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwgZHVyYXRpb25zLm1hcChmdW5jdGlvbiAoZCwgaSkge1xuICAgIHJldHVybiB0b01zKGQpICsgdG9NcyhkZWxheXNbaV0pXG4gIH0pKVxufVxuXG5mdW5jdGlvbiB0b01zIChzKSB7XG4gIHJldHVybiBOdW1iZXIocy5zbGljZSgwLCAtMSkpICogMTAwMFxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gZW50ZXIgKHZub2RlLCB0b2dnbGVEaXNwbGF5KSB7XG4gIHZhciBlbCA9IHZub2RlLmVsbTtcblxuICAvLyBjYWxsIGxlYXZlIGNhbGxiYWNrIG5vd1xuICBpZiAoaXNEZWYoZWwuX2xlYXZlQ2IpKSB7XG4gICAgZWwuX2xlYXZlQ2IuY2FuY2VsbGVkID0gdHJ1ZTtcbiAgICBlbC5fbGVhdmVDYigpO1xuICB9XG5cbiAgdmFyIGRhdGEgPSByZXNvbHZlVHJhbnNpdGlvbih2bm9kZS5kYXRhLnRyYW5zaXRpb24pO1xuICBpZiAoaXNVbmRlZihkYXRhKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChpc0RlZihlbC5fZW50ZXJDYikgfHwgZWwubm9kZVR5cGUgIT09IDEpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBjc3MgPSBkYXRhLmNzcztcbiAgdmFyIHR5cGUgPSBkYXRhLnR5cGU7XG4gIHZhciBlbnRlckNsYXNzID0gZGF0YS5lbnRlckNsYXNzO1xuICB2YXIgZW50ZXJUb0NsYXNzID0gZGF0YS5lbnRlclRvQ2xhc3M7XG4gIHZhciBlbnRlckFjdGl2ZUNsYXNzID0gZGF0YS5lbnRlckFjdGl2ZUNsYXNzO1xuICB2YXIgYXBwZWFyQ2xhc3MgPSBkYXRhLmFwcGVhckNsYXNzO1xuICB2YXIgYXBwZWFyVG9DbGFzcyA9IGRhdGEuYXBwZWFyVG9DbGFzcztcbiAgdmFyIGFwcGVhckFjdGl2ZUNsYXNzID0gZGF0YS5hcHBlYXJBY3RpdmVDbGFzcztcbiAgdmFyIGJlZm9yZUVudGVyID0gZGF0YS5iZWZvcmVFbnRlcjtcbiAgdmFyIGVudGVyID0gZGF0YS5lbnRlcjtcbiAgdmFyIGFmdGVyRW50ZXIgPSBkYXRhLmFmdGVyRW50ZXI7XG4gIHZhciBlbnRlckNhbmNlbGxlZCA9IGRhdGEuZW50ZXJDYW5jZWxsZWQ7XG4gIHZhciBiZWZvcmVBcHBlYXIgPSBkYXRhLmJlZm9yZUFwcGVhcjtcbiAgdmFyIGFwcGVhciA9IGRhdGEuYXBwZWFyO1xuICB2YXIgYWZ0ZXJBcHBlYXIgPSBkYXRhLmFmdGVyQXBwZWFyO1xuICB2YXIgYXBwZWFyQ2FuY2VsbGVkID0gZGF0YS5hcHBlYXJDYW5jZWxsZWQ7XG4gIHZhciBkdXJhdGlvbiA9IGRhdGEuZHVyYXRpb247XG5cbiAgLy8gYWN0aXZlSW5zdGFuY2Ugd2lsbCBhbHdheXMgYmUgdGhlIDx0cmFuc2l0aW9uPiBjb21wb25lbnQgbWFuYWdpbmcgdGhpc1xuICAvLyB0cmFuc2l0aW9uLiBPbmUgZWRnZSBjYXNlIHRvIGNoZWNrIGlzIHdoZW4gdGhlIDx0cmFuc2l0aW9uPiBpcyBwbGFjZWRcbiAgLy8gYXMgdGhlIHJvb3Qgbm9kZSBvZiBhIGNoaWxkIGNvbXBvbmVudC4gSW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gY2hlY2tcbiAgLy8gPHRyYW5zaXRpb24+J3MgcGFyZW50IGZvciBhcHBlYXIgY2hlY2suXG4gIHZhciBjb250ZXh0ID0gYWN0aXZlSW5zdGFuY2U7XG4gIHZhciB0cmFuc2l0aW9uTm9kZSA9IGFjdGl2ZUluc3RhbmNlLiR2bm9kZTtcbiAgd2hpbGUgKHRyYW5zaXRpb25Ob2RlICYmIHRyYW5zaXRpb25Ob2RlLnBhcmVudCkge1xuICAgIHRyYW5zaXRpb25Ob2RlID0gdHJhbnNpdGlvbk5vZGUucGFyZW50O1xuICAgIGNvbnRleHQgPSB0cmFuc2l0aW9uTm9kZS5jb250ZXh0O1xuICB9XG5cbiAgdmFyIGlzQXBwZWFyID0gIWNvbnRleHQuX2lzTW91bnRlZCB8fCAhdm5vZGUuaXNSb290SW5zZXJ0O1xuXG4gIGlmIChpc0FwcGVhciAmJiAhYXBwZWFyICYmIGFwcGVhciAhPT0gJycpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIHZhciBzdGFydENsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyQ2xhc3NcbiAgICA/IGFwcGVhckNsYXNzXG4gICAgOiBlbnRlckNsYXNzO1xuICB2YXIgYWN0aXZlQ2xhc3MgPSBpc0FwcGVhciAmJiBhcHBlYXJBY3RpdmVDbGFzc1xuICAgID8gYXBwZWFyQWN0aXZlQ2xhc3NcbiAgICA6IGVudGVyQWN0aXZlQ2xhc3M7XG4gIHZhciB0b0NsYXNzID0gaXNBcHBlYXIgJiYgYXBwZWFyVG9DbGFzc1xuICAgID8gYXBwZWFyVG9DbGFzc1xuICAgIDogZW50ZXJUb0NsYXNzO1xuXG4gIHZhciBiZWZvcmVFbnRlckhvb2sgPSBpc0FwcGVhclxuICAgID8gKGJlZm9yZUFwcGVhciB8fCBiZWZvcmVFbnRlcilcbiAgICA6IGJlZm9yZUVudGVyO1xuICB2YXIgZW50ZXJIb29rID0gaXNBcHBlYXJcbiAgICA/ICh0eXBlb2YgYXBwZWFyID09PSAnZnVuY3Rpb24nID8gYXBwZWFyIDogZW50ZXIpXG4gICAgOiBlbnRlcjtcbiAgdmFyIGFmdGVyRW50ZXJIb29rID0gaXNBcHBlYXJcbiAgICA/IChhZnRlckFwcGVhciB8fCBhZnRlckVudGVyKVxuICAgIDogYWZ0ZXJFbnRlcjtcbiAgdmFyIGVudGVyQ2FuY2VsbGVkSG9vayA9IGlzQXBwZWFyXG4gICAgPyAoYXBwZWFyQ2FuY2VsbGVkIHx8IGVudGVyQ2FuY2VsbGVkKVxuICAgIDogZW50ZXJDYW5jZWxsZWQ7XG5cbiAgdmFyIGV4cGxpY2l0RW50ZXJEdXJhdGlvbiA9IHRvTnVtYmVyKFxuICAgIGlzT2JqZWN0KGR1cmF0aW9uKVxuICAgICAgPyBkdXJhdGlvbi5lbnRlclxuICAgICAgOiBkdXJhdGlvblxuICApO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGV4cGxpY2l0RW50ZXJEdXJhdGlvbiAhPSBudWxsKSB7XG4gICAgY2hlY2tEdXJhdGlvbihleHBsaWNpdEVudGVyRHVyYXRpb24sICdlbnRlcicsIHZub2RlKTtcbiAgfVxuXG4gIHZhciBleHBlY3RzQ1NTID0gY3NzICE9PSBmYWxzZSAmJiAhaXNJRTk7XG4gIHZhciB1c2VyV2FudHNDb250cm9sID0gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChlbnRlckhvb2spO1xuXG4gIHZhciBjYiA9IGVsLl9lbnRlckNiID0gb25jZShmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgdG9DbGFzcyk7XG4gICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIGFjdGl2ZUNsYXNzKTtcbiAgICB9XG4gICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICAgIH1cbiAgICAgIGVudGVyQ2FuY2VsbGVkSG9vayAmJiBlbnRlckNhbmNlbGxlZEhvb2soZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZnRlckVudGVySG9vayAmJiBhZnRlckVudGVySG9vayhlbCk7XG4gICAgfVxuICAgIGVsLl9lbnRlckNiID0gbnVsbDtcbiAgfSk7XG5cbiAgaWYgKCF2bm9kZS5kYXRhLnNob3cpIHtcbiAgICAvLyByZW1vdmUgcGVuZGluZyBsZWF2ZSBlbGVtZW50IG9uIGVudGVyIGJ5IGluamVjdGluZyBhbiBpbnNlcnQgaG9va1xuICAgIG1lcmdlVk5vZGVIb29rKHZub2RlLmRhdGEuaG9vayB8fCAodm5vZGUuZGF0YS5ob29rID0ge30pLCAnaW5zZXJ0JywgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHBhcmVudCA9IGVsLnBhcmVudE5vZGU7XG4gICAgICB2YXIgcGVuZGluZ05vZGUgPSBwYXJlbnQgJiYgcGFyZW50Ll9wZW5kaW5nICYmIHBhcmVudC5fcGVuZGluZ1t2bm9kZS5rZXldO1xuICAgICAgaWYgKHBlbmRpbmdOb2RlICYmXG4gICAgICAgIHBlbmRpbmdOb2RlLnRhZyA9PT0gdm5vZGUudGFnICYmXG4gICAgICAgIHBlbmRpbmdOb2RlLmVsbS5fbGVhdmVDYlxuICAgICAgKSB7XG4gICAgICAgIHBlbmRpbmdOb2RlLmVsbS5fbGVhdmVDYigpO1xuICAgICAgfVxuICAgICAgZW50ZXJIb29rICYmIGVudGVySG9vayhlbCwgY2IpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gc3RhcnQgZW50ZXIgdHJhbnNpdGlvblxuICBiZWZvcmVFbnRlckhvb2sgJiYgYmVmb3JlRW50ZXJIb29rKGVsKTtcbiAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIHN0YXJ0Q2xhc3MpO1xuICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgYWN0aXZlQ2xhc3MpO1xuICAgIG5leHRGcmFtZShmdW5jdGlvbiAoKSB7XG4gICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIHRvQ2xhc3MpO1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBzdGFydENsYXNzKTtcbiAgICAgIGlmICghY2IuY2FuY2VsbGVkICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgIGlmIChpc1ZhbGlkRHVyYXRpb24oZXhwbGljaXRFbnRlckR1cmF0aW9uKSkge1xuICAgICAgICAgIHNldFRpbWVvdXQoY2IsIGV4cGxpY2l0RW50ZXJEdXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2hlblRyYW5zaXRpb25FbmRzKGVsLCB0eXBlLCBjYik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmICh2bm9kZS5kYXRhLnNob3cpIHtcbiAgICB0b2dnbGVEaXNwbGF5ICYmIHRvZ2dsZURpc3BsYXkoKTtcbiAgICBlbnRlckhvb2sgJiYgZW50ZXJIb29rKGVsLCBjYik7XG4gIH1cblxuICBpZiAoIWV4cGVjdHNDU1MgJiYgIXVzZXJXYW50c0NvbnRyb2wpIHtcbiAgICBjYigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxlYXZlICh2bm9kZSwgcm0pIHtcbiAgdmFyIGVsID0gdm5vZGUuZWxtO1xuXG4gIC8vIGNhbGwgZW50ZXIgY2FsbGJhY2sgbm93XG4gIGlmIChpc0RlZihlbC5fZW50ZXJDYikpIHtcbiAgICBlbC5fZW50ZXJDYi5jYW5jZWxsZWQgPSB0cnVlO1xuICAgIGVsLl9lbnRlckNiKCk7XG4gIH1cblxuICB2YXIgZGF0YSA9IHJlc29sdmVUcmFuc2l0aW9uKHZub2RlLmRhdGEudHJhbnNpdGlvbik7XG4gIGlmIChpc1VuZGVmKGRhdGEpKSB7XG4gICAgcmV0dXJuIHJtKClcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaXNEZWYoZWwuX2xlYXZlQ2IpIHx8IGVsLm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICB2YXIgY3NzID0gZGF0YS5jc3M7XG4gIHZhciB0eXBlID0gZGF0YS50eXBlO1xuICB2YXIgbGVhdmVDbGFzcyA9IGRhdGEubGVhdmVDbGFzcztcbiAgdmFyIGxlYXZlVG9DbGFzcyA9IGRhdGEubGVhdmVUb0NsYXNzO1xuICB2YXIgbGVhdmVBY3RpdmVDbGFzcyA9IGRhdGEubGVhdmVBY3RpdmVDbGFzcztcbiAgdmFyIGJlZm9yZUxlYXZlID0gZGF0YS5iZWZvcmVMZWF2ZTtcbiAgdmFyIGxlYXZlID0gZGF0YS5sZWF2ZTtcbiAgdmFyIGFmdGVyTGVhdmUgPSBkYXRhLmFmdGVyTGVhdmU7XG4gIHZhciBsZWF2ZUNhbmNlbGxlZCA9IGRhdGEubGVhdmVDYW5jZWxsZWQ7XG4gIHZhciBkZWxheUxlYXZlID0gZGF0YS5kZWxheUxlYXZlO1xuICB2YXIgZHVyYXRpb24gPSBkYXRhLmR1cmF0aW9uO1xuXG4gIHZhciBleHBlY3RzQ1NTID0gY3NzICE9PSBmYWxzZSAmJiAhaXNJRTk7XG4gIHZhciB1c2VyV2FudHNDb250cm9sID0gZ2V0SG9va0FyZ3VtZW50c0xlbmd0aChsZWF2ZSk7XG5cbiAgdmFyIGV4cGxpY2l0TGVhdmVEdXJhdGlvbiA9IHRvTnVtYmVyKFxuICAgIGlzT2JqZWN0KGR1cmF0aW9uKVxuICAgICAgPyBkdXJhdGlvbi5sZWF2ZVxuICAgICAgOiBkdXJhdGlvblxuICApO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGlzRGVmKGV4cGxpY2l0TGVhdmVEdXJhdGlvbikpIHtcbiAgICBjaGVja0R1cmF0aW9uKGV4cGxpY2l0TGVhdmVEdXJhdGlvbiwgJ2xlYXZlJywgdm5vZGUpO1xuICB9XG5cbiAgdmFyIGNiID0gZWwuX2xlYXZlQ2IgPSBvbmNlKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZWwucGFyZW50Tm9kZSAmJiBlbC5wYXJlbnROb2RlLl9wZW5kaW5nKSB7XG4gICAgICBlbC5wYXJlbnROb2RlLl9wZW5kaW5nW3Zub2RlLmtleV0gPSBudWxsO1xuICAgIH1cbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZVRvQ2xhc3MpO1xuICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUFjdGl2ZUNsYXNzKTtcbiAgICB9XG4gICAgaWYgKGNiLmNhbmNlbGxlZCkge1xuICAgICAgaWYgKGV4cGVjdHNDU1MpIHtcbiAgICAgICAgcmVtb3ZlVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgIH1cbiAgICAgIGxlYXZlQ2FuY2VsbGVkICYmIGxlYXZlQ2FuY2VsbGVkKGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm0oKTtcbiAgICAgIGFmdGVyTGVhdmUgJiYgYWZ0ZXJMZWF2ZShlbCk7XG4gICAgfVxuICAgIGVsLl9sZWF2ZUNiID0gbnVsbDtcbiAgfSk7XG5cbiAgaWYgKGRlbGF5TGVhdmUpIHtcbiAgICBkZWxheUxlYXZlKHBlcmZvcm1MZWF2ZSk7XG4gIH0gZWxzZSB7XG4gICAgcGVyZm9ybUxlYXZlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBwZXJmb3JtTGVhdmUgKCkge1xuICAgIC8vIHRoZSBkZWxheWVkIGxlYXZlIG1heSBoYXZlIGFscmVhZHkgYmVlbiBjYW5jZWxsZWRcbiAgICBpZiAoY2IuY2FuY2VsbGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgLy8gcmVjb3JkIGxlYXZpbmcgZWxlbWVudFxuICAgIGlmICghdm5vZGUuZGF0YS5zaG93KSB7XG4gICAgICAoZWwucGFyZW50Tm9kZS5fcGVuZGluZyB8fCAoZWwucGFyZW50Tm9kZS5fcGVuZGluZyA9IHt9KSlbKHZub2RlLmtleSldID0gdm5vZGU7XG4gICAgfVxuICAgIGJlZm9yZUxlYXZlICYmIGJlZm9yZUxlYXZlKGVsKTtcbiAgICBpZiAoZXhwZWN0c0NTUykge1xuICAgICAgYWRkVHJhbnNpdGlvbkNsYXNzKGVsLCBsZWF2ZUNsYXNzKTtcbiAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVBY3RpdmVDbGFzcyk7XG4gICAgICBuZXh0RnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICBhZGRUcmFuc2l0aW9uQ2xhc3MoZWwsIGxlYXZlVG9DbGFzcyk7XG4gICAgICAgIHJlbW92ZVRyYW5zaXRpb25DbGFzcyhlbCwgbGVhdmVDbGFzcyk7XG4gICAgICAgIGlmICghY2IuY2FuY2VsbGVkICYmICF1c2VyV2FudHNDb250cm9sKSB7XG4gICAgICAgICAgaWYgKGlzVmFsaWREdXJhdGlvbihleHBsaWNpdExlYXZlRHVyYXRpb24pKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGNiLCBleHBsaWNpdExlYXZlRHVyYXRpb24pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aGVuVHJhbnNpdGlvbkVuZHMoZWwsIHR5cGUsIGNiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBsZWF2ZSAmJiBsZWF2ZShlbCwgY2IpO1xuICAgIGlmICghZXhwZWN0c0NTUyAmJiAhdXNlcldhbnRzQ29udHJvbCkge1xuICAgICAgY2IoKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gb25seSB1c2VkIGluIGRldiBtb2RlXG5mdW5jdGlvbiBjaGVja0R1cmF0aW9uICh2YWwsIG5hbWUsIHZub2RlKSB7XG4gIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJykge1xuICAgIHdhcm4oXG4gICAgICBcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIiArIG5hbWUgKyBcIiBkdXJhdGlvbiBpcyBub3QgYSB2YWxpZCBudW1iZXIgLSBcIiArXG4gICAgICBcImdvdCBcIiArIChKU09OLnN0cmluZ2lmeSh2YWwpKSArIFwiLlwiLFxuICAgICAgdm5vZGUuY29udGV4dFxuICAgICk7XG4gIH0gZWxzZSBpZiAoaXNOYU4odmFsKSkge1xuICAgIHdhcm4oXG4gICAgICBcIjx0cmFuc2l0aW9uPiBleHBsaWNpdCBcIiArIG5hbWUgKyBcIiBkdXJhdGlvbiBpcyBOYU4gLSBcIiArXG4gICAgICAndGhlIGR1cmF0aW9uIGV4cHJlc3Npb24gbWlnaHQgYmUgaW5jb3JyZWN0LicsXG4gICAgICB2bm9kZS5jb250ZXh0XG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbGlkRHVyYXRpb24gKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbClcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgYSB0cmFuc2l0aW9uIGhvb2sncyBhcmd1bWVudCBsZW5ndGguIFRoZSBob29rIG1heSBiZTpcbiAqIC0gYSBtZXJnZWQgaG9vayAoaW52b2tlcikgd2l0aCB0aGUgb3JpZ2luYWwgaW4gLmZuc1xuICogLSBhIHdyYXBwZWQgY29tcG9uZW50IG1ldGhvZCAoY2hlY2sgLl9sZW5ndGgpXG4gKiAtIGEgcGxhaW4gZnVuY3Rpb24gKC5sZW5ndGgpXG4gKi9cbmZ1bmN0aW9uIGdldEhvb2tBcmd1bWVudHNMZW5ndGggKGZuKSB7XG4gIGlmIChpc1VuZGVmKGZuKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHZhciBpbnZva2VyRm5zID0gZm4uZm5zO1xuICBpZiAoaXNEZWYoaW52b2tlckZucykpIHtcbiAgICAvLyBpbnZva2VyXG4gICAgcmV0dXJuIGdldEhvb2tBcmd1bWVudHNMZW5ndGgoXG4gICAgICBBcnJheS5pc0FycmF5KGludm9rZXJGbnMpXG4gICAgICAgID8gaW52b2tlckZuc1swXVxuICAgICAgICA6IGludm9rZXJGbnNcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIChmbi5fbGVuZ3RoIHx8IGZuLmxlbmd0aCkgPiAxXG4gIH1cbn1cblxuZnVuY3Rpb24gX2VudGVyIChfLCB2bm9kZSkge1xuICBpZiAodm5vZGUuZGF0YS5zaG93ICE9PSB0cnVlKSB7XG4gICAgZW50ZXIodm5vZGUpO1xuICB9XG59XG5cbnZhciB0cmFuc2l0aW9uID0gaW5Ccm93c2VyID8ge1xuICBjcmVhdGU6IF9lbnRlcixcbiAgYWN0aXZhdGU6IF9lbnRlcixcbiAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUkJDEgKHZub2RlLCBybSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHZub2RlLmRhdGEuc2hvdyAhPT0gdHJ1ZSkge1xuICAgICAgbGVhdmUodm5vZGUsIHJtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm0oKTtcbiAgICB9XG4gIH1cbn0gOiB7fTtcblxudmFyIHBsYXRmb3JtTW9kdWxlcyA9IFtcbiAgYXR0cnMsXG4gIGtsYXNzLFxuICBldmVudHMsXG4gIGRvbVByb3BzLFxuICBzdHlsZSxcbiAgdHJhbnNpdGlvblxuXTtcblxuLyogICovXG5cbi8vIHRoZSBkaXJlY3RpdmUgbW9kdWxlIHNob3VsZCBiZSBhcHBsaWVkIGxhc3QsIGFmdGVyIGFsbFxuLy8gYnVpbHQtaW4gbW9kdWxlcyBoYXZlIGJlZW4gYXBwbGllZC5cbnZhciBtb2R1bGVzID0gcGxhdGZvcm1Nb2R1bGVzLmNvbmNhdChiYXNlTW9kdWxlcyk7XG5cbnZhciBwYXRjaCA9IGNyZWF0ZVBhdGNoRnVuY3Rpb24oeyBub2RlT3BzOiBub2RlT3BzLCBtb2R1bGVzOiBtb2R1bGVzIH0pO1xuXG4vKipcbiAqIE5vdCB0eXBlIGNoZWNraW5nIHRoaXMgZmlsZSBiZWNhdXNlIGZsb3cgZG9lc24ndCBsaWtlIGF0dGFjaGluZ1xuICogcHJvcGVydGllcyB0byBFbGVtZW50cy5cbiAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChpc0lFOSkge1xuICAvLyBodHRwOi8vd3d3Lm1hdHRzNDExLmNvbS9wb3N0L2ludGVybmV0LWV4cGxvcmVyLTktb25pbnB1dC9cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGVsICYmIGVsLnZtb2RlbCkge1xuICAgICAgdHJpZ2dlcihlbCwgJ2lucHV0Jyk7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIG1vZGVsJDEgPSB7XG4gIGluc2VydGVkOiBmdW5jdGlvbiBpbnNlcnRlZCAoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgaWYgKHZub2RlLnRhZyA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIHNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bm9kZS5jb250ZXh0KTtcbiAgICAgIGVsLl92T3B0aW9ucyA9IFtdLm1hcC5jYWxsKGVsLm9wdGlvbnMsIGdldFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gJ3RleHRhcmVhJyB8fCBpc1RleHRJbnB1dFR5cGUoZWwudHlwZSkpIHtcbiAgICAgIGVsLl92TW9kaWZpZXJzID0gYmluZGluZy5tb2RpZmllcnM7XG4gICAgICBpZiAoIWJpbmRpbmcubW9kaWZpZXJzLmxhenkpIHtcbiAgICAgICAgLy8gU2FmYXJpIDwgMTAuMiAmIFVJV2ViVmlldyBkb2Vzbid0IGZpcmUgY29tcG9zaXRpb25lbmQgd2hlblxuICAgICAgICAvLyBzd2l0Y2hpbmcgZm9jdXMgYmVmb3JlIGNvbmZpcm1pbmcgY29tcG9zaXRpb24gY2hvaWNlXG4gICAgICAgIC8vIHRoaXMgYWxzbyBmaXhlcyB0aGUgaXNzdWUgd2hlcmUgc29tZSBicm93c2VycyBlLmcuIGlPUyBDaHJvbWVcbiAgICAgICAgLy8gZmlyZXMgXCJjaGFuZ2VcIiBpbnN0ZWFkIG9mIFwiaW5wdXRcIiBvbiBhdXRvY29tcGxldGUuXG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG9uQ29tcG9zaXRpb25FbmQpO1xuICAgICAgICBpZiAoIWlzQW5kcm9pZCkge1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCBvbkNvbXBvc2l0aW9uU3RhcnQpO1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgb25Db21wb3NpdGlvbkVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpc0lFOSkge1xuICAgICAgICAgIGVsLnZtb2RlbCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGNvbXBvbmVudFVwZGF0ZWQ6IGZ1bmN0aW9uIGNvbXBvbmVudFVwZGF0ZWQgKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIGlmICh2bm9kZS50YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICBzZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm5vZGUuY29udGV4dCk7XG4gICAgICAvLyBpbiBjYXNlIHRoZSBvcHRpb25zIHJlbmRlcmVkIGJ5IHYtZm9yIGhhdmUgY2hhbmdlZCxcbiAgICAgIC8vIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgdmFsdWUgaXMgb3V0LW9mLXN5bmMgd2l0aCB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAgICAgIC8vIGRldGVjdCBzdWNoIGNhc2VzIGFuZCBmaWx0ZXIgb3V0IHZhbHVlcyB0aGF0IG5vIGxvbmdlciBoYXMgYSBtYXRjaGluZ1xuICAgICAgLy8gb3B0aW9uIGluIHRoZSBET00uXG4gICAgICB2YXIgcHJldk9wdGlvbnMgPSBlbC5fdk9wdGlvbnM7XG4gICAgICB2YXIgY3VyT3B0aW9ucyA9IGVsLl92T3B0aW9ucyA9IFtdLm1hcC5jYWxsKGVsLm9wdGlvbnMsIGdldFZhbHVlKTtcbiAgICAgIGlmIChjdXJPcHRpb25zLnNvbWUoZnVuY3Rpb24gKG8sIGkpIHsgcmV0dXJuICFsb29zZUVxdWFsKG8sIHByZXZPcHRpb25zW2ldKTsgfSkpIHtcbiAgICAgICAgLy8gdHJpZ2dlciBjaGFuZ2UgZXZlbnQgaWZcbiAgICAgICAgLy8gbm8gbWF0Y2hpbmcgb3B0aW9uIGZvdW5kIGZvciBhdCBsZWFzdCBvbmUgdmFsdWVcbiAgICAgICAgdmFyIG5lZWRSZXNldCA9IGVsLm11bHRpcGxlXG4gICAgICAgICAgPyBiaW5kaW5nLnZhbHVlLnNvbWUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIGhhc05vTWF0Y2hpbmdPcHRpb24odiwgY3VyT3B0aW9ucyk7IH0pXG4gICAgICAgICAgOiBiaW5kaW5nLnZhbHVlICE9PSBiaW5kaW5nLm9sZFZhbHVlICYmIGhhc05vTWF0Y2hpbmdPcHRpb24oYmluZGluZy52YWx1ZSwgY3VyT3B0aW9ucyk7XG4gICAgICAgIGlmIChuZWVkUmVzZXQpIHtcbiAgICAgICAgICB0cmlnZ2VyKGVsLCAnY2hhbmdlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNldFNlbGVjdGVkIChlbCwgYmluZGluZywgdm0pIHtcbiAgYWN0dWFsbHlTZXRTZWxlY3RlZChlbCwgYmluZGluZywgdm0pO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGlzSUUgfHwgaXNFZGdlKSB7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBhY3R1YWxseVNldFNlbGVjdGVkKGVsLCBiaW5kaW5nLCB2bSk7XG4gICAgfSwgMCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWN0dWFsbHlTZXRTZWxlY3RlZCAoZWwsIGJpbmRpbmcsIHZtKSB7XG4gIHZhciB2YWx1ZSA9IGJpbmRpbmcudmFsdWU7XG4gIHZhciBpc011bHRpcGxlID0gZWwubXVsdGlwbGU7XG4gIGlmIChpc011bHRpcGxlICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiPHNlbGVjdCBtdWx0aXBsZSB2LW1vZGVsPVxcXCJcIiArIChiaW5kaW5nLmV4cHJlc3Npb24pICsgXCJcXFwiPiBcIiArXG4gICAgICBcImV4cGVjdHMgYW4gQXJyYXkgdmFsdWUgZm9yIGl0cyBiaW5kaW5nLCBidXQgZ290IFwiICsgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkuc2xpY2UoOCwgLTEpKSxcbiAgICAgIHZtXG4gICAgKTtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgc2VsZWN0ZWQsIG9wdGlvbjtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBlbC5vcHRpb25zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9wdGlvbiA9IGVsLm9wdGlvbnNbaV07XG4gICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgIHNlbGVjdGVkID0gbG9vc2VJbmRleE9mKHZhbHVlLCBnZXRWYWx1ZShvcHRpb24pKSA+IC0xO1xuICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChsb29zZUVxdWFsKGdldFZhbHVlKG9wdGlvbiksIHZhbHVlKSkge1xuICAgICAgICBpZiAoZWwuc2VsZWN0ZWRJbmRleCAhPT0gaSkge1xuICAgICAgICAgIGVsLnNlbGVjdGVkSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICBlbC5zZWxlY3RlZEluZGV4ID0gLTE7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzTm9NYXRjaGluZ09wdGlvbiAodmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuZXZlcnkoZnVuY3Rpb24gKG8pIHsgcmV0dXJuICFsb29zZUVxdWFsKG8sIHZhbHVlKTsgfSlcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWUgKG9wdGlvbikge1xuICByZXR1cm4gJ192YWx1ZScgaW4gb3B0aW9uXG4gICAgPyBvcHRpb24uX3ZhbHVlXG4gICAgOiBvcHRpb24udmFsdWVcbn1cblxuZnVuY3Rpb24gb25Db21wb3NpdGlvblN0YXJ0IChlKSB7XG4gIGUudGFyZ2V0LmNvbXBvc2luZyA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIG9uQ29tcG9zaXRpb25FbmQgKGUpIHtcbiAgLy8gcHJldmVudCB0cmlnZ2VyaW5nIGFuIGlucHV0IGV2ZW50IGZvciBubyByZWFzb25cbiAgaWYgKCFlLnRhcmdldC5jb21wb3NpbmcpIHsgcmV0dXJuIH1cbiAgZS50YXJnZXQuY29tcG9zaW5nID0gZmFsc2U7XG4gIHRyaWdnZXIoZS50YXJnZXQsICdpbnB1dCcpO1xufVxuXG5mdW5jdGlvbiB0cmlnZ2VyIChlbCwgdHlwZSkge1xuICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdIVE1MRXZlbnRzJyk7XG4gIGUuaW5pdEV2ZW50KHR5cGUsIHRydWUsIHRydWUpO1xuICBlbC5kaXNwYXRjaEV2ZW50KGUpO1xufVxuXG4vKiAgKi9cblxuLy8gcmVjdXJzaXZlbHkgc2VhcmNoIGZvciBwb3NzaWJsZSB0cmFuc2l0aW9uIGRlZmluZWQgaW5zaWRlIHRoZSBjb21wb25lbnQgcm9vdFxuZnVuY3Rpb24gbG9jYXRlTm9kZSAodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlLmNvbXBvbmVudEluc3RhbmNlICYmICghdm5vZGUuZGF0YSB8fCAhdm5vZGUuZGF0YS50cmFuc2l0aW9uKVxuICAgID8gbG9jYXRlTm9kZSh2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5fdm5vZGUpXG4gICAgOiB2bm9kZVxufVxuXG52YXIgc2hvdyA9IHtcbiAgYmluZDogZnVuY3Rpb24gYmluZCAoZWwsIHJlZiwgdm5vZGUpIHtcbiAgICB2YXIgdmFsdWUgPSByZWYudmFsdWU7XG5cbiAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgIHZhciB0cmFuc2l0aW9uJCQxID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgdmFyIG9yaWdpbmFsRGlzcGxheSA9IGVsLl9fdk9yaWdpbmFsRGlzcGxheSA9XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnJyA6IGVsLnN0eWxlLmRpc3BsYXk7XG4gICAgaWYgKHZhbHVlICYmIHRyYW5zaXRpb24kJDEpIHtcbiAgICAgIHZub2RlLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgICBlbnRlcih2bm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gb3JpZ2luYWxEaXNwbGF5O1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA/IG9yaWdpbmFsRGlzcGxheSA6ICdub25lJztcbiAgICB9XG4gIH0sXG5cbiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUgKGVsLCByZWYsIHZub2RlKSB7XG4gICAgdmFyIHZhbHVlID0gcmVmLnZhbHVlO1xuICAgIHZhciBvbGRWYWx1ZSA9IHJlZi5vbGRWYWx1ZTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh2YWx1ZSA9PT0gb2xkVmFsdWUpIHsgcmV0dXJuIH1cbiAgICB2bm9kZSA9IGxvY2F0ZU5vZGUodm5vZGUpO1xuICAgIHZhciB0cmFuc2l0aW9uJCQxID0gdm5vZGUuZGF0YSAmJiB2bm9kZS5kYXRhLnRyYW5zaXRpb247XG4gICAgaWYgKHRyYW5zaXRpb24kJDEpIHtcbiAgICAgIHZub2RlLmRhdGEuc2hvdyA9IHRydWU7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZW50ZXIodm5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gZWwuX192T3JpZ2luYWxEaXNwbGF5O1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlYXZlKHZub2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZSA/IGVsLl9fdk9yaWdpbmFsRGlzcGxheSA6ICdub25lJztcbiAgICB9XG4gIH0sXG5cbiAgdW5iaW5kOiBmdW5jdGlvbiB1bmJpbmQgKFxuICAgIGVsLFxuICAgIGJpbmRpbmcsXG4gICAgdm5vZGUsXG4gICAgb2xkVm5vZGUsXG4gICAgaXNEZXN0cm95XG4gICkge1xuICAgIGlmICghaXNEZXN0cm95KSB7XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gZWwuX192T3JpZ2luYWxEaXNwbGF5O1xuICAgIH1cbiAgfVxufTtcblxudmFyIHBsYXRmb3JtRGlyZWN0aXZlcyA9IHtcbiAgbW9kZWw6IG1vZGVsJDEsXG4gIHNob3c6IHNob3dcbn07XG5cbi8qICAqL1xuXG4vLyBQcm92aWRlcyB0cmFuc2l0aW9uIHN1cHBvcnQgZm9yIGEgc2luZ2xlIGVsZW1lbnQvY29tcG9uZW50LlxuLy8gc3VwcG9ydHMgdHJhbnNpdGlvbiBtb2RlIChvdXQtaW4gLyBpbi1vdXQpXG5cbnZhciB0cmFuc2l0aW9uUHJvcHMgPSB7XG4gIG5hbWU6IFN0cmluZyxcbiAgYXBwZWFyOiBCb29sZWFuLFxuICBjc3M6IEJvb2xlYW4sXG4gIG1vZGU6IFN0cmluZyxcbiAgdHlwZTogU3RyaW5nLFxuICBlbnRlckNsYXNzOiBTdHJpbmcsXG4gIGxlYXZlQ2xhc3M6IFN0cmluZyxcbiAgZW50ZXJUb0NsYXNzOiBTdHJpbmcsXG4gIGxlYXZlVG9DbGFzczogU3RyaW5nLFxuICBlbnRlckFjdGl2ZUNsYXNzOiBTdHJpbmcsXG4gIGxlYXZlQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgYXBwZWFyQ2xhc3M6IFN0cmluZyxcbiAgYXBwZWFyQWN0aXZlQ2xhc3M6IFN0cmluZyxcbiAgYXBwZWFyVG9DbGFzczogU3RyaW5nLFxuICBkdXJhdGlvbjogW051bWJlciwgU3RyaW5nLCBPYmplY3RdXG59O1xuXG4vLyBpbiBjYXNlIHRoZSBjaGlsZCBpcyBhbHNvIGFuIGFic3RyYWN0IGNvbXBvbmVudCwgZS5nLiA8a2VlcC1hbGl2ZT5cbi8vIHdlIHdhbnQgdG8gcmVjdXJzaXZlbHkgcmV0cmlldmUgdGhlIHJlYWwgY29tcG9uZW50IHRvIGJlIHJlbmRlcmVkXG5mdW5jdGlvbiBnZXRSZWFsQ2hpbGQgKHZub2RlKSB7XG4gIHZhciBjb21wT3B0aW9ucyA9IHZub2RlICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gIGlmIChjb21wT3B0aW9ucyAmJiBjb21wT3B0aW9ucy5DdG9yLm9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICByZXR1cm4gZ2V0UmVhbENoaWxkKGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoY29tcE9wdGlvbnMuY2hpbGRyZW4pKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB2bm9kZVxuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RUcmFuc2l0aW9uRGF0YSAoY29tcCkge1xuICB2YXIgZGF0YSA9IHt9O1xuICB2YXIgb3B0aW9ucyA9IGNvbXAuJG9wdGlvbnM7XG4gIC8vIHByb3BzXG4gIGZvciAodmFyIGtleSBpbiBvcHRpb25zLnByb3BzRGF0YSkge1xuICAgIGRhdGFba2V5XSA9IGNvbXBba2V5XTtcbiAgfVxuICAvLyBldmVudHMuXG4gIC8vIGV4dHJhY3QgbGlzdGVuZXJzIGFuZCBwYXNzIHRoZW0gZGlyZWN0bHkgdG8gdGhlIHRyYW5zaXRpb24gbWV0aG9kc1xuICB2YXIgbGlzdGVuZXJzID0gb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICBmb3IgKHZhciBrZXkkMSBpbiBsaXN0ZW5lcnMpIHtcbiAgICBkYXRhW2NhbWVsaXplKGtleSQxKV0gPSBsaXN0ZW5lcnNba2V5JDFdO1xuICB9XG4gIHJldHVybiBkYXRhXG59XG5cbmZ1bmN0aW9uIHBsYWNlaG9sZGVyIChoLCByYXdDaGlsZCkge1xuICBpZiAoL1xcZC1rZWVwLWFsaXZlJC8udGVzdChyYXdDaGlsZC50YWcpKSB7XG4gICAgcmV0dXJuIGgoJ2tlZXAtYWxpdmUnLCB7XG4gICAgICBwcm9wczogcmF3Q2hpbGQuY29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGFcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGhhc1BhcmVudFRyYW5zaXRpb24gKHZub2RlKSB7XG4gIHdoaWxlICgodm5vZGUgPSB2bm9kZS5wYXJlbnQpKSB7XG4gICAgaWYgKHZub2RlLmRhdGEudHJhbnNpdGlvbikge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTYW1lQ2hpbGQgKGNoaWxkLCBvbGRDaGlsZCkge1xuICByZXR1cm4gb2xkQ2hpbGQua2V5ID09PSBjaGlsZC5rZXkgJiYgb2xkQ2hpbGQudGFnID09PSBjaGlsZC50YWdcbn1cblxudmFyIFRyYW5zaXRpb24gPSB7XG4gIG5hbWU6ICd0cmFuc2l0aW9uJyxcbiAgcHJvcHM6IHRyYW5zaXRpb25Qcm9wcyxcbiAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuJG9wdGlvbnMuX3JlbmRlckNoaWxkcmVuO1xuICAgIGlmICghY2hpbGRyZW4pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGZpbHRlciBvdXQgdGV4dCBub2RlcyAocG9zc2libGUgd2hpdGVzcGFjZXMpXG4gICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMudGFnIHx8IGlzQXN5bmNQbGFjZWhvbGRlcihjKTsgfSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHdhcm4gbXVsdGlwbGUgZWxlbWVudHNcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjaGlsZHJlbi5sZW5ndGggPiAxKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnPHRyYW5zaXRpb24+IGNhbiBvbmx5IGJlIHVzZWQgb24gYSBzaW5nbGUgZWxlbWVudC4gVXNlICcgK1xuICAgICAgICAnPHRyYW5zaXRpb24tZ3JvdXA+IGZvciBsaXN0cy4nLFxuICAgICAgICB0aGlzLiRwYXJlbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIG1vZGUgPSB0aGlzLm1vZGU7XG5cbiAgICAvLyB3YXJuIGludmFsaWQgbW9kZVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgICBtb2RlICYmIG1vZGUgIT09ICdpbi1vdXQnICYmIG1vZGUgIT09ICdvdXQtaW4nXG4gICAgKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnaW52YWxpZCA8dHJhbnNpdGlvbj4gbW9kZTogJyArIG1vZGUsXG4gICAgICAgIHRoaXMuJHBhcmVudFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgcmF3Q2hpbGQgPSBjaGlsZHJlblswXTtcblxuICAgIC8vIGlmIHRoaXMgaXMgYSBjb21wb25lbnQgcm9vdCBub2RlIGFuZCB0aGUgY29tcG9uZW50J3NcbiAgICAvLyBwYXJlbnQgY29udGFpbmVyIG5vZGUgYWxzbyBoYXMgdHJhbnNpdGlvbiwgc2tpcC5cbiAgICBpZiAoaGFzUGFyZW50VHJhbnNpdGlvbih0aGlzLiR2bm9kZSkpIHtcbiAgICAgIHJldHVybiByYXdDaGlsZFxuICAgIH1cblxuICAgIC8vIGFwcGx5IHRyYW5zaXRpb24gZGF0YSB0byBjaGlsZFxuICAgIC8vIHVzZSBnZXRSZWFsQ2hpbGQoKSB0byBpZ25vcmUgYWJzdHJhY3QgY29tcG9uZW50cyBlLmcuIGtlZXAtYWxpdmVcbiAgICB2YXIgY2hpbGQgPSBnZXRSZWFsQ2hpbGQocmF3Q2hpbGQpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghY2hpbGQpIHtcbiAgICAgIHJldHVybiByYXdDaGlsZFxuICAgIH1cblxuICAgIGlmICh0aGlzLl9sZWF2aW5nKSB7XG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXIoaCwgcmF3Q2hpbGQpXG4gICAgfVxuXG4gICAgLy8gZW5zdXJlIGEga2V5IHRoYXQgaXMgdW5pcXVlIHRvIHRoZSB2bm9kZSB0eXBlIGFuZCB0byB0aGlzIHRyYW5zaXRpb25cbiAgICAvLyBjb21wb25lbnQgaW5zdGFuY2UuIFRoaXMga2V5IHdpbGwgYmUgdXNlZCB0byByZW1vdmUgcGVuZGluZyBsZWF2aW5nIG5vZGVzXG4gICAgLy8gZHVyaW5nIGVudGVyaW5nLlxuICAgIHZhciBpZCA9IFwiX190cmFuc2l0aW9uLVwiICsgKHRoaXMuX3VpZCkgKyBcIi1cIjtcbiAgICBjaGlsZC5rZXkgPSBjaGlsZC5rZXkgPT0gbnVsbFxuICAgICAgPyBjaGlsZC5pc0NvbW1lbnRcbiAgICAgICAgPyBpZCArICdjb21tZW50J1xuICAgICAgICA6IGlkICsgY2hpbGQudGFnXG4gICAgICA6IGlzUHJpbWl0aXZlKGNoaWxkLmtleSlcbiAgICAgICAgPyAoU3RyaW5nKGNoaWxkLmtleSkuaW5kZXhPZihpZCkgPT09IDAgPyBjaGlsZC5rZXkgOiBpZCArIGNoaWxkLmtleSlcbiAgICAgICAgOiBjaGlsZC5rZXk7XG5cbiAgICB2YXIgZGF0YSA9IChjaGlsZC5kYXRhIHx8IChjaGlsZC5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuICAgIHZhciBvbGRSYXdDaGlsZCA9IHRoaXMuX3Zub2RlO1xuICAgIHZhciBvbGRDaGlsZCA9IGdldFJlYWxDaGlsZChvbGRSYXdDaGlsZCk7XG5cbiAgICAvLyBtYXJrIHYtc2hvd1xuICAgIC8vIHNvIHRoYXQgdGhlIHRyYW5zaXRpb24gbW9kdWxlIGNhbiBoYW5kIG92ZXIgdGhlIGNvbnRyb2wgdG8gdGhlIGRpcmVjdGl2ZVxuICAgIGlmIChjaGlsZC5kYXRhLmRpcmVjdGl2ZXMgJiYgY2hpbGQuZGF0YS5kaXJlY3RpdmVzLnNvbWUoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQubmFtZSA9PT0gJ3Nob3cnOyB9KSkge1xuICAgICAgY2hpbGQuZGF0YS5zaG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBvbGRDaGlsZCAmJlxuICAgICAgb2xkQ2hpbGQuZGF0YSAmJlxuICAgICAgIWlzU2FtZUNoaWxkKGNoaWxkLCBvbGRDaGlsZCkgJiZcbiAgICAgICFpc0FzeW5jUGxhY2Vob2xkZXIob2xkQ2hpbGQpXG4gICAgKSB7XG4gICAgICAvLyByZXBsYWNlIG9sZCBjaGlsZCB0cmFuc2l0aW9uIGRhdGEgd2l0aCBmcmVzaCBvbmVcbiAgICAgIC8vIGltcG9ydGFudCBmb3IgZHluYW1pYyB0cmFuc2l0aW9ucyFcbiAgICAgIHZhciBvbGREYXRhID0gb2xkQ2hpbGQuZGF0YS50cmFuc2l0aW9uID0gZXh0ZW5kKHt9LCBkYXRhKTtcbiAgICAgIC8vIGhhbmRsZSB0cmFuc2l0aW9uIG1vZGVcbiAgICAgIGlmIChtb2RlID09PSAnb3V0LWluJykge1xuICAgICAgICAvLyByZXR1cm4gcGxhY2Vob2xkZXIgbm9kZSBhbmQgcXVldWUgdXBkYXRlIHdoZW4gbGVhdmUgZmluaXNoZXNcbiAgICAgICAgdGhpcy5fbGVhdmluZyA9IHRydWU7XG4gICAgICAgIG1lcmdlVk5vZGVIb29rKG9sZERhdGEsICdhZnRlckxlYXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMkMS5fbGVhdmluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMkMS4kZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwbGFjZWhvbGRlcihoLCByYXdDaGlsZClcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ2luLW91dCcpIHtcbiAgICAgICAgaWYgKGlzQXN5bmNQbGFjZWhvbGRlcihjaGlsZCkpIHtcbiAgICAgICAgICByZXR1cm4gb2xkUmF3Q2hpbGRcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsYXllZExlYXZlO1xuICAgICAgICB2YXIgcGVyZm9ybUxlYXZlID0gZnVuY3Rpb24gKCkgeyBkZWxheWVkTGVhdmUoKTsgfTtcbiAgICAgICAgbWVyZ2VWTm9kZUhvb2soZGF0YSwgJ2FmdGVyRW50ZXInLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhkYXRhLCAnZW50ZXJDYW5jZWxsZWQnLCBwZXJmb3JtTGVhdmUpO1xuICAgICAgICBtZXJnZVZOb2RlSG9vayhvbGREYXRhLCAnZGVsYXlMZWF2ZScsIGZ1bmN0aW9uIChsZWF2ZSkgeyBkZWxheWVkTGVhdmUgPSBsZWF2ZTsgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhd0NoaWxkXG4gIH1cbn07XG5cbi8qICAqL1xuXG4vLyBQcm92aWRlcyB0cmFuc2l0aW9uIHN1cHBvcnQgZm9yIGxpc3QgaXRlbXMuXG4vLyBzdXBwb3J0cyBtb3ZlIHRyYW5zaXRpb25zIHVzaW5nIHRoZSBGTElQIHRlY2huaXF1ZS5cblxuLy8gQmVjYXVzZSB0aGUgdmRvbSdzIGNoaWxkcmVuIHVwZGF0ZSBhbGdvcml0aG0gaXMgXCJ1bnN0YWJsZVwiIC0gaS5lLlxuLy8gaXQgZG9lc24ndCBndWFyYW50ZWUgdGhlIHJlbGF0aXZlIHBvc2l0aW9uaW5nIG9mIHJlbW92ZWQgZWxlbWVudHMsXG4vLyB3ZSBmb3JjZSB0cmFuc2l0aW9uLWdyb3VwIHRvIHVwZGF0ZSBpdHMgY2hpbGRyZW4gaW50byB0d28gcGFzc2VzOlxuLy8gaW4gdGhlIGZpcnN0IHBhc3MsIHdlIHJlbW92ZSBhbGwgbm9kZXMgdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQsXG4vLyB0cmlnZ2VyaW5nIHRoZWlyIGxlYXZpbmcgdHJhbnNpdGlvbjsgaW4gdGhlIHNlY29uZCBwYXNzLCB3ZSBpbnNlcnQvbW92ZVxuLy8gaW50byB0aGUgZmluYWwgZGVzaXJlZCBzdGF0ZS4gVGhpcyB3YXkgaW4gdGhlIHNlY29uZCBwYXNzIHJlbW92ZWRcbi8vIG5vZGVzIHdpbGwgcmVtYWluIHdoZXJlIHRoZXkgc2hvdWxkIGJlLlxuXG52YXIgcHJvcHMgPSBleHRlbmQoe1xuICB0YWc6IFN0cmluZyxcbiAgbW92ZUNsYXNzOiBTdHJpbmdcbn0sIHRyYW5zaXRpb25Qcm9wcyk7XG5cbmRlbGV0ZSBwcm9wcy5tb2RlO1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0ge1xuICBwcm9wczogcHJvcHMsXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKGgpIHtcbiAgICB2YXIgdGFnID0gdGhpcy50YWcgfHwgdGhpcy4kdm5vZGUuZGF0YS50YWcgfHwgJ3NwYW4nO1xuICAgIHZhciBtYXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHZhciBwcmV2Q2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgdmFyIHJhd0NoaWxkcmVuID0gdGhpcy4kc2xvdHMuZGVmYXVsdCB8fCBbXTtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdmFyIHRyYW5zaXRpb25EYXRhID0gZXh0cmFjdFRyYW5zaXRpb25EYXRhKHRoaXMpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGMgPSByYXdDaGlsZHJlbltpXTtcbiAgICAgIGlmIChjLnRhZykge1xuICAgICAgICBpZiAoYy5rZXkgIT0gbnVsbCAmJiBTdHJpbmcoYy5rZXkpLmluZGV4T2YoJ19fdmxpc3QnKSAhPT0gMCkge1xuICAgICAgICAgIGNoaWxkcmVuLnB1c2goYyk7XG4gICAgICAgICAgbWFwW2Mua2V5XSA9IGNcbiAgICAgICAgICA7KGMuZGF0YSB8fCAoYy5kYXRhID0ge30pKS50cmFuc2l0aW9uID0gdHJhbnNpdGlvbkRhdGE7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHZhciBvcHRzID0gYy5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICAgIHZhciBuYW1lID0gb3B0cyA/IChvcHRzLkN0b3Iub3B0aW9ucy5uYW1lIHx8IG9wdHMudGFnIHx8ICcnKSA6IGMudGFnO1xuICAgICAgICAgIHdhcm4oKFwiPHRyYW5zaXRpb24tZ3JvdXA+IGNoaWxkcmVuIG11c3QgYmUga2V5ZWQ6IDxcIiArIG5hbWUgKyBcIj5cIikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByZXZDaGlsZHJlbikge1xuICAgICAgdmFyIGtlcHQgPSBbXTtcbiAgICAgIHZhciByZW1vdmVkID0gW107XG4gICAgICBmb3IgKHZhciBpJDEgPSAwOyBpJDEgPCBwcmV2Q2hpbGRyZW4ubGVuZ3RoOyBpJDErKykge1xuICAgICAgICB2YXIgYyQxID0gcHJldkNoaWxkcmVuW2kkMV07XG4gICAgICAgIGMkMS5kYXRhLnRyYW5zaXRpb24gPSB0cmFuc2l0aW9uRGF0YTtcbiAgICAgICAgYyQxLmRhdGEucG9zID0gYyQxLmVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgaWYgKG1hcFtjJDEua2V5XSkge1xuICAgICAgICAgIGtlcHQucHVzaChjJDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbW92ZWQucHVzaChjJDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmtlcHQgPSBoKHRhZywgbnVsbCwga2VwdCk7XG4gICAgICB0aGlzLnJlbW92ZWQgPSByZW1vdmVkO1xuICAgIH1cblxuICAgIHJldHVybiBoKHRhZywgbnVsbCwgY2hpbGRyZW4pXG4gIH0sXG5cbiAgYmVmb3JlVXBkYXRlOiBmdW5jdGlvbiBiZWZvcmVVcGRhdGUgKCkge1xuICAgIC8vIGZvcmNlIHJlbW92aW5nIHBhc3NcbiAgICB0aGlzLl9fcGF0Y2hfXyhcbiAgICAgIHRoaXMuX3Zub2RlLFxuICAgICAgdGhpcy5rZXB0LFxuICAgICAgZmFsc2UsIC8vIGh5ZHJhdGluZ1xuICAgICAgdHJ1ZSAvLyByZW1vdmVPbmx5ICghaW1wb3J0YW50LCBhdm9pZHMgdW5uZWNlc3NhcnkgbW92ZXMpXG4gICAgKTtcbiAgICB0aGlzLl92bm9kZSA9IHRoaXMua2VwdDtcbiAgfSxcblxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkICgpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByZXZDaGlsZHJlbjtcbiAgICB2YXIgbW92ZUNsYXNzID0gdGhpcy5tb3ZlQ2xhc3MgfHwgKCh0aGlzLm5hbWUgfHwgJ3YnKSArICctbW92ZScpO1xuICAgIGlmICghY2hpbGRyZW4ubGVuZ3RoIHx8ICF0aGlzLmhhc01vdmUoY2hpbGRyZW5bMF0uZWxtLCBtb3ZlQ2xhc3MpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB3ZSBkaXZpZGUgdGhlIHdvcmsgaW50byB0aHJlZSBsb29wcyB0byBhdm9pZCBtaXhpbmcgRE9NIHJlYWRzIGFuZCB3cml0ZXNcbiAgICAvLyBpbiBlYWNoIGl0ZXJhdGlvbiAtIHdoaWNoIGhlbHBzIHByZXZlbnQgbGF5b3V0IHRocmFzaGluZy5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKGNhbGxQZW5kaW5nQ2JzKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKHJlY29yZFBvc2l0aW9uKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGFwcGx5VHJhbnNsYXRpb24pO1xuXG4gICAgLy8gZm9yY2UgcmVmbG93IHRvIHB1dCBldmVyeXRoaW5nIGluIHBvc2l0aW9uXG4gICAgLy8gYXNzaWduIHRvIHRoaXMgdG8gYXZvaWQgYmVpbmcgcmVtb3ZlZCBpbiB0cmVlLXNoYWtpbmdcbiAgICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgICB0aGlzLl9yZWZsb3cgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodDtcblxuICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgIGlmIChjLmRhdGEubW92ZWQpIHtcbiAgICAgICAgdmFyIGVsID0gYy5lbG07XG4gICAgICAgIHZhciBzID0gZWwuc3R5bGU7XG4gICAgICAgIGFkZFRyYW5zaXRpb25DbGFzcyhlbCwgbW92ZUNsYXNzKTtcbiAgICAgICAgcy50cmFuc2Zvcm0gPSBzLldlYmtpdFRyYW5zZm9ybSA9IHMudHJhbnNpdGlvbkR1cmF0aW9uID0gJyc7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIodHJhbnNpdGlvbkVuZEV2ZW50LCBlbC5fbW92ZUNiID0gZnVuY3Rpb24gY2IgKGUpIHtcbiAgICAgICAgICBpZiAoIWUgfHwgL3RyYW5zZm9ybSQvLnRlc3QoZS5wcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHRyYW5zaXRpb25FbmRFdmVudCwgY2IpO1xuICAgICAgICAgICAgZWwuX21vdmVDYiA9IG51bGw7XG4gICAgICAgICAgICByZW1vdmVUcmFuc2l0aW9uQ2xhc3MoZWwsIG1vdmVDbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzTW92ZTogZnVuY3Rpb24gaGFzTW92ZSAoZWwsIG1vdmVDbGFzcykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIWhhc1RyYW5zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh0aGlzLl9oYXNNb3ZlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNNb3ZlXG4gICAgICB9XG4gICAgICAvLyBEZXRlY3Qgd2hldGhlciBhbiBlbGVtZW50IHdpdGggdGhlIG1vdmUgY2xhc3MgYXBwbGllZCBoYXNcbiAgICAgIC8vIENTUyB0cmFuc2l0aW9ucy4gU2luY2UgdGhlIGVsZW1lbnQgbWF5IGJlIGluc2lkZSBhbiBlbnRlcmluZ1xuICAgICAgLy8gdHJhbnNpdGlvbiBhdCB0aGlzIHZlcnkgbW9tZW50LCB3ZSBtYWtlIGEgY2xvbmUgb2YgaXQgYW5kIHJlbW92ZVxuICAgICAgLy8gYWxsIG90aGVyIHRyYW5zaXRpb24gY2xhc3NlcyBhcHBsaWVkIHRvIGVuc3VyZSBvbmx5IHRoZSBtb3ZlIGNsYXNzXG4gICAgICAvLyBpcyBhcHBsaWVkLlxuICAgICAgdmFyIGNsb25lID0gZWwuY2xvbmVOb2RlKCk7XG4gICAgICBpZiAoZWwuX3RyYW5zaXRpb25DbGFzc2VzKSB7XG4gICAgICAgIGVsLl90cmFuc2l0aW9uQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uIChjbHMpIHsgcmVtb3ZlQ2xhc3MoY2xvbmUsIGNscyk7IH0pO1xuICAgICAgfVxuICAgICAgYWRkQ2xhc3MoY2xvbmUsIG1vdmVDbGFzcyk7XG4gICAgICBjbG9uZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgdGhpcy4kZWwuYXBwZW5kQ2hpbGQoY2xvbmUpO1xuICAgICAgdmFyIGluZm8gPSBnZXRUcmFuc2l0aW9uSW5mbyhjbG9uZSk7XG4gICAgICB0aGlzLiRlbC5yZW1vdmVDaGlsZChjbG9uZSk7XG4gICAgICByZXR1cm4gKHRoaXMuX2hhc01vdmUgPSBpbmZvLmhhc1RyYW5zZm9ybSlcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNhbGxQZW5kaW5nQ2JzIChjKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoYy5lbG0uX21vdmVDYikge1xuICAgIGMuZWxtLl9tb3ZlQ2IoKTtcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKGMuZWxtLl9lbnRlckNiKSB7XG4gICAgYy5lbG0uX2VudGVyQ2IoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvcmRQb3NpdGlvbiAoYykge1xuICBjLmRhdGEubmV3UG9zID0gYy5lbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5VHJhbnNsYXRpb24gKGMpIHtcbiAgdmFyIG9sZFBvcyA9IGMuZGF0YS5wb3M7XG4gIHZhciBuZXdQb3MgPSBjLmRhdGEubmV3UG9zO1xuICB2YXIgZHggPSBvbGRQb3MubGVmdCAtIG5ld1Bvcy5sZWZ0O1xuICB2YXIgZHkgPSBvbGRQb3MudG9wIC0gbmV3UG9zLnRvcDtcbiAgaWYgKGR4IHx8IGR5KSB7XG4gICAgYy5kYXRhLm1vdmVkID0gdHJ1ZTtcbiAgICB2YXIgcyA9IGMuZWxtLnN0eWxlO1xuICAgIHMudHJhbnNmb3JtID0gcy5XZWJraXRUcmFuc2Zvcm0gPSBcInRyYW5zbGF0ZShcIiArIGR4ICsgXCJweCxcIiArIGR5ICsgXCJweClcIjtcbiAgICBzLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwcyc7XG4gIH1cbn1cblxudmFyIHBsYXRmb3JtQ29tcG9uZW50cyA9IHtcbiAgVHJhbnNpdGlvbjogVHJhbnNpdGlvbixcbiAgVHJhbnNpdGlvbkdyb3VwOiBUcmFuc2l0aW9uR3JvdXBcbn07XG5cbi8qICAqL1xuXG4vLyBpbnN0YWxsIHBsYXRmb3JtIHNwZWNpZmljIHV0aWxzXG5WdWUkMy5jb25maWcubXVzdFVzZVByb3AgPSBtdXN0VXNlUHJvcDtcblZ1ZSQzLmNvbmZpZy5pc1Jlc2VydmVkVGFnID0gaXNSZXNlcnZlZFRhZztcblZ1ZSQzLmNvbmZpZy5pc1Jlc2VydmVkQXR0ciA9IGlzUmVzZXJ2ZWRBdHRyO1xuVnVlJDMuY29uZmlnLmdldFRhZ05hbWVzcGFjZSA9IGdldFRhZ05hbWVzcGFjZTtcblZ1ZSQzLmNvbmZpZy5pc1Vua25vd25FbGVtZW50ID0gaXNVbmtub3duRWxlbWVudDtcblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBydW50aW1lIGRpcmVjdGl2ZXMgJiBjb21wb25lbnRzXG5leHRlbmQoVnVlJDMub3B0aW9ucy5kaXJlY3RpdmVzLCBwbGF0Zm9ybURpcmVjdGl2ZXMpO1xuZXh0ZW5kKFZ1ZSQzLm9wdGlvbnMuY29tcG9uZW50cywgcGxhdGZvcm1Db21wb25lbnRzKTtcblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBwYXRjaCBmdW5jdGlvblxuVnVlJDMucHJvdG90eXBlLl9fcGF0Y2hfXyA9IGluQnJvd3NlciA/IHBhdGNoIDogbm9vcDtcblxuLy8gcHVibGljIG1vdW50IG1ldGhvZFxuVnVlJDMucHJvdG90eXBlLiRtb3VudCA9IGZ1bmN0aW9uIChcbiAgZWwsXG4gIGh5ZHJhdGluZ1xuKSB7XG4gIGVsID0gZWwgJiYgaW5Ccm93c2VyID8gcXVlcnkoZWwpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gbW91bnRDb21wb25lbnQodGhpcywgZWwsIGh5ZHJhdGluZylcbn07XG5cbi8vIGRldnRvb2xzIGdsb2JhbCBob29rXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuVnVlJDMubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICBpZiAoY29uZmlnLmRldnRvb2xzKSB7XG4gICAgaWYgKGRldnRvb2xzKSB7XG4gICAgICBkZXZ0b29scy5lbWl0KCdpbml0JywgVnVlJDMpO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc0Nocm9tZSkge1xuICAgICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICAgICdEb3dubG9hZCB0aGUgVnVlIERldnRvb2xzIGV4dGVuc2lvbiBmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTpcXG4nICtcbiAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtZGV2dG9vbHMnXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgIGNvbmZpZy5wcm9kdWN0aW9uVGlwICE9PSBmYWxzZSAmJlxuICAgIGluQnJvd3NlciAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCdcbiAgKSB7XG4gICAgY29uc29sZVtjb25zb2xlLmluZm8gPyAnaW5mbycgOiAnbG9nJ10oXG4gICAgICBcIllvdSBhcmUgcnVubmluZyBWdWUgaW4gZGV2ZWxvcG1lbnQgbW9kZS5cXG5cIiArXG4gICAgICBcIk1ha2Ugc3VyZSB0byB0dXJuIG9uIHByb2R1Y3Rpb24gbW9kZSB3aGVuIGRlcGxveWluZyBmb3IgcHJvZHVjdGlvbi5cXG5cIiArXG4gICAgICBcIlNlZSBtb3JlIHRpcHMgYXQgaHR0cHM6Ly92dWVqcy5vcmcvZ3VpZGUvZGVwbG95bWVudC5odG1sXCJcbiAgICApO1xuICB9XG59LCAwKTtcblxuLyogICovXG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZSQzO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvdnVlL2Rpc3QvdnVlLnJ1bnRpbWUuZXNtLmpzXG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///2\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\nexports.getStyle = exports.once = exports.off = exports.on = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; /* istanbul ignore next */\n\nexports.hasClass = hasClass;\nexports.addClass = addClass;\nexports.removeClass = removeClass;\nexports.setStyle = setStyle;\n\nvar _vue = __webpack_require__(2);\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar isServer = _vue2.default.prototype.$isServer;\nvar SPECIAL_CHARS_REGEXP = /([\\:\\-\\_]+(.))/g;\nvar MOZ_HACK_REGEXP = /^moz([A-Z])/;\nvar ieVersion = isServer ? 0 : Number(document.documentMode);\n\n/* istanbul ignore next */\nvar trim = function trim(string) {\n return (string || '').replace(/^[\\s\\uFEFF]+|[\\s\\uFEFF]+$/g, '');\n};\n/* istanbul ignore next */\nvar camelCase = function camelCase(name) {\n return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) {\n return offset ? letter.toUpperCase() : letter;\n }).replace(MOZ_HACK_REGEXP, 'Moz$1');\n};\n\n/* istanbul ignore next */\nvar on = exports.on = function () {\n if (!isServer && document.addEventListener) {\n return function (element, event, handler) {\n if (element && event && handler) {\n element.addEventListener(event, handler, false);\n }\n };\n } else {\n return function (element, event, handler) {\n if (element && event && handler) {\n element.attachEvent('on' + event, handler);\n }\n };\n }\n}();\n\n/* istanbul ignore next */\nvar off = exports.off = function () {\n if (!isServer && document.removeEventListener) {\n return function (element, event, handler) {\n if (element && event) {\n element.removeEventListener(event, handler, false);\n }\n };\n } else {\n return function (element, event, handler) {\n if (element && event) {\n element.detachEvent('on' + event, handler);\n }\n };\n }\n}();\n\n/* istanbul ignore next */\nvar once = exports.once = function once(el, event, fn) {\n var listener = function listener() {\n if (fn) {\n fn.apply(this, arguments);\n }\n off(el, event, listener);\n };\n on(el, event, listener);\n};\n\n/* istanbul ignore next */\nfunction hasClass(el, cls) {\n if (!el || !cls) return false;\n if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');\n if (el.classList) {\n return el.classList.contains(cls);\n } else {\n return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;\n }\n};\n\n/* istanbul ignore next */\nfunction addClass(el, cls) {\n if (!el) return;\n var curClass = el.className;\n var classes = (cls || '').split(' ');\n\n for (var i = 0, j = classes.length; i < j; i++) {\n var clsName = classes[i];\n if (!clsName) continue;\n\n if (el.classList) {\n el.classList.add(clsName);\n } else {\n if (!hasClass(el, clsName)) {\n curClass += ' ' + clsName;\n }\n }\n }\n if (!el.classList) {\n el.className = curClass;\n }\n};\n\n/* istanbul ignore next */\nfunction removeClass(el, cls) {\n if (!el || !cls) return;\n var classes = cls.split(' ');\n var curClass = ' ' + el.className + ' ';\n\n for (var i = 0, j = classes.length; i < j; i++) {\n var clsName = classes[i];\n if (!clsName) continue;\n\n if (el.classList) {\n el.classList.remove(clsName);\n } else {\n if (hasClass(el, clsName)) {\n curClass = curClass.replace(' ' + clsName + ' ', ' ');\n }\n }\n }\n if (!el.classList) {\n el.className = trim(curClass);\n }\n};\n\n/* istanbul ignore next */\nvar getStyle = exports.getStyle = ieVersion < 9 ? function (element, styleName) {\n if (isServer) return;\n if (!element || !styleName) return null;\n styleName = camelCase(styleName);\n if (styleName === 'float') {\n styleName = 'styleFloat';\n }\n try {\n switch (styleName) {\n case 'opacity':\n try {\n return element.filters.item('alpha').opacity / 100;\n } catch (e) {\n return 1.0;\n }\n default:\n return element.style[styleName] || element.currentStyle ? element.currentStyle[styleName] : null;\n }\n } catch (e) {\n return element.style[styleName];\n }\n} : function (element, styleName) {\n if (isServer) return;\n if (!element || !styleName) return null;\n styleName = camelCase(styleName);\n if (styleName === 'float') {\n styleName = 'cssFloat';\n }\n try {\n var computed = document.defaultView.getComputedStyle(element, '');\n return element.style[styleName] || computed ? computed[styleName] : null;\n } catch (e) {\n return element.style[styleName];\n }\n};\n\n/* istanbul ignore next */\nfunction setStyle(element, styleName, value) {\n if (!element || !styleName) return;\n\n if ((typeof styleName === 'undefined' ? 'undefined' : _typeof(styleName)) === 'object') {\n for (var prop in styleName) {\n if (styleName.hasOwnProperty(prop)) {\n setStyle(element, prop, styleName[prop]);\n }\n }\n } else {\n styleName = camelCase(styleName);\n if (styleName === 'opacity' && ieVersion < 9) {\n element.style.filter = isNaN(value) ? '' : 'alpha(opacity=' + value * 100 + ')';\n } else {\n element.style[styleName] = value;\n }\n }\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvZG9tLmpzP2RhNGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTs7QUFFQSxvR0FBb0csbUJBQW1CLEVBQUUsbUJBQW1CLDhIQUE4SCxHQUFHOztBQUU3UTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDLE9BQU87QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5nZXRTdHlsZSA9IGV4cG9ydHMub25jZSA9IGV4cG9ydHMub2ZmID0gZXhwb3J0cy5vbiA9IHVuZGVmaW5lZDtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5leHBvcnRzLmhhc0NsYXNzID0gaGFzQ2xhc3M7XG5leHBvcnRzLmFkZENsYXNzID0gYWRkQ2xhc3M7XG5leHBvcnRzLnJlbW92ZUNsYXNzID0gcmVtb3ZlQ2xhc3M7XG5leHBvcnRzLnNldFN0eWxlID0gc2V0U3R5bGU7XG5cbnZhciBfdnVlID0gcmVxdWlyZSgndnVlJyk7XG5cbnZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBpc1NlcnZlciA9IF92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlcjtcbnZhciBTUEVDSUFMX0NIQVJTX1JFR0VYUCA9IC8oW1xcOlxcLVxcX10rKC4pKS9nO1xudmFyIE1PWl9IQUNLX1JFR0VYUCA9IC9ebW96KFtBLVpdKS87XG52YXIgaWVWZXJzaW9uID0gaXNTZXJ2ZXIgPyAwIDogTnVtYmVyKGRvY3VtZW50LmRvY3VtZW50TW9kZSk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG52YXIgdHJpbSA9IGZ1bmN0aW9uIHRyaW0oc3RyaW5nKSB7XG4gIHJldHVybiAoc3RyaW5nIHx8ICcnKS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZdK3xbXFxzXFx1RkVGRl0rJC9nLCAnJyk7XG59O1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciBjYW1lbENhc2UgPSBmdW5jdGlvbiBjYW1lbENhc2UobmFtZSkge1xuICByZXR1cm4gbmFtZS5yZXBsYWNlKFNQRUNJQUxfQ0hBUlNfUkVHRVhQLCBmdW5jdGlvbiAoXywgc2VwYXJhdG9yLCBsZXR0ZXIsIG9mZnNldCkge1xuICAgIHJldHVybiBvZmZzZXQgPyBsZXR0ZXIudG9VcHBlckNhc2UoKSA6IGxldHRlcjtcbiAgfSkucmVwbGFjZShNT1pfSEFDS19SRUdFWFAsICdNb3okMScpO1xufTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciBvbiA9IGV4cG9ydHMub24gPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghaXNTZXJ2ZXIgJiYgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgIGlmIChlbGVtZW50ICYmIGV2ZW50ICYmIGhhbmRsZXIpIHtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICBpZiAoZWxlbWVudCAmJiBldmVudCAmJiBoYW5kbGVyKSB7XG4gICAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoJ29uJyArIGV2ZW50LCBoYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59KCk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG52YXIgb2ZmID0gZXhwb3J0cy5vZmYgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghaXNTZXJ2ZXIgJiYgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgIGlmIChlbGVtZW50ICYmIGV2ZW50KSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBldmVudCwgaGFuZGxlcikge1xuICAgICAgaWYgKGVsZW1lbnQgJiYgZXZlbnQpIHtcbiAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgnb24nICsgZXZlbnQsIGhhbmRsZXIpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn0oKTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciBvbmNlID0gZXhwb3J0cy5vbmNlID0gZnVuY3Rpb24gb25jZShlbCwgZXZlbnQsIGZuKSB7XG4gIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKCkge1xuICAgIGlmIChmbikge1xuICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgb2ZmKGVsLCBldmVudCwgbGlzdGVuZXIpO1xuICB9O1xuICBvbihlbCwgZXZlbnQsIGxpc3RlbmVyKTtcbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBoYXNDbGFzcyhlbCwgY2xzKSB7XG4gIGlmICghZWwgfHwgIWNscykgcmV0dXJuIGZhbHNlO1xuICBpZiAoY2xzLmluZGV4T2YoJyAnKSAhPT0gLTEpIHRocm93IG5ldyBFcnJvcignY2xhc3NOYW1lIHNob3VsZCBub3QgY29udGFpbiBzcGFjZS4nKTtcbiAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgIHJldHVybiBlbC5jbGFzc0xpc3QuY29udGFpbnMoY2xzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKCcgJyArIGVsLmNsYXNzTmFtZSArICcgJykuaW5kZXhPZignICcgKyBjbHMgKyAnICcpID4gLTE7XG4gIH1cbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBhZGRDbGFzcyhlbCwgY2xzKSB7XG4gIGlmICghZWwpIHJldHVybjtcbiAgdmFyIGN1ckNsYXNzID0gZWwuY2xhc3NOYW1lO1xuICB2YXIgY2xhc3NlcyA9IChjbHMgfHwgJycpLnNwbGl0KCcgJyk7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGogPSBjbGFzc2VzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgIHZhciBjbHNOYW1lID0gY2xhc3Nlc1tpXTtcbiAgICBpZiAoIWNsc05hbWUpIGNvbnRpbnVlO1xuXG4gICAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChjbHNOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFoYXNDbGFzcyhlbCwgY2xzTmFtZSkpIHtcbiAgICAgICAgY3VyQ2xhc3MgKz0gJyAnICsgY2xzTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCFlbC5jbGFzc0xpc3QpIHtcbiAgICBlbC5jbGFzc05hbWUgPSBjdXJDbGFzcztcbiAgfVxufTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsLCBjbHMpIHtcbiAgaWYgKCFlbCB8fCAhY2xzKSByZXR1cm47XG4gIHZhciBjbGFzc2VzID0gY2xzLnNwbGl0KCcgJyk7XG4gIHZhciBjdXJDbGFzcyA9ICcgJyArIGVsLmNsYXNzTmFtZSArICcgJztcblxuICBmb3IgKHZhciBpID0gMCwgaiA9IGNsYXNzZXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgdmFyIGNsc05hbWUgPSBjbGFzc2VzW2ldO1xuICAgIGlmICghY2xzTmFtZSkgY29udGludWU7XG5cbiAgICBpZiAoZWwuY2xhc3NMaXN0KSB7XG4gICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNsc05hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzQ2xhc3MoZWwsIGNsc05hbWUpKSB7XG4gICAgICAgIGN1ckNsYXNzID0gY3VyQ2xhc3MucmVwbGFjZSgnICcgKyBjbHNOYW1lICsgJyAnLCAnICcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWVsLmNsYXNzTGlzdCkge1xuICAgIGVsLmNsYXNzTmFtZSA9IHRyaW0oY3VyQ2xhc3MpO1xuICB9XG59O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudmFyIGdldFN0eWxlID0gZXhwb3J0cy5nZXRTdHlsZSA9IGllVmVyc2lvbiA8IDkgPyBmdW5jdGlvbiAoZWxlbWVudCwgc3R5bGVOYW1lKSB7XG4gIGlmIChpc1NlcnZlcikgcmV0dXJuO1xuICBpZiAoIWVsZW1lbnQgfHwgIXN0eWxlTmFtZSkgcmV0dXJuIG51bGw7XG4gIHN0eWxlTmFtZSA9IGNhbWVsQ2FzZShzdHlsZU5hbWUpO1xuICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnKSB7XG4gICAgc3R5bGVOYW1lID0gJ3N0eWxlRmxvYXQnO1xuICB9XG4gIHRyeSB7XG4gICAgc3dpdGNoIChzdHlsZU5hbWUpIHtcbiAgICAgIGNhc2UgJ29wYWNpdHknOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBlbGVtZW50LmZpbHRlcnMuaXRlbSgnYWxwaGEnKS5vcGFjaXR5IC8gMTAwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmV0dXJuIDEuMDtcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuc3R5bGVbc3R5bGVOYW1lXSB8fCBlbGVtZW50LmN1cnJlbnRTdHlsZSA/IGVsZW1lbnQuY3VycmVudFN0eWxlW3N0eWxlTmFtZV0gOiBudWxsO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlbGVtZW50LnN0eWxlW3N0eWxlTmFtZV07XG4gIH1cbn0gOiBmdW5jdGlvbiAoZWxlbWVudCwgc3R5bGVOYW1lKSB7XG4gIGlmIChpc1NlcnZlcikgcmV0dXJuO1xuICBpZiAoIWVsZW1lbnQgfHwgIXN0eWxlTmFtZSkgcmV0dXJuIG51bGw7XG4gIHN0eWxlTmFtZSA9IGNhbWVsQ2FzZShzdHlsZU5hbWUpO1xuICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnKSB7XG4gICAgc3R5bGVOYW1lID0gJ2Nzc0Zsb2F0JztcbiAgfVxuICB0cnkge1xuICAgIHZhciBjb21wdXRlZCA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgJycpO1xuICAgIHJldHVybiBlbGVtZW50LnN0eWxlW3N0eWxlTmFtZV0gfHwgY29tcHV0ZWQgPyBjb21wdXRlZFtzdHlsZU5hbWVdIDogbnVsbDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlbGVtZW50LnN0eWxlW3N0eWxlTmFtZV07XG4gIH1cbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBzZXRTdHlsZShlbGVtZW50LCBzdHlsZU5hbWUsIHZhbHVlKSB7XG4gIGlmICghZWxlbWVudCB8fCAhc3R5bGVOYW1lKSByZXR1cm47XG5cbiAgaWYgKCh0eXBlb2Ygc3R5bGVOYW1lID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihzdHlsZU5hbWUpKSA9PT0gJ29iamVjdCcpIHtcbiAgICBmb3IgKHZhciBwcm9wIGluIHN0eWxlTmFtZSkge1xuICAgICAgaWYgKHN0eWxlTmFtZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICBzZXRTdHlsZShlbGVtZW50LCBwcm9wLCBzdHlsZU5hbWVbcHJvcF0pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzdHlsZU5hbWUgPSBjYW1lbENhc2Uoc3R5bGVOYW1lKTtcbiAgICBpZiAoc3R5bGVOYW1lID09PSAnb3BhY2l0eScgJiYgaWVWZXJzaW9uIDwgOSkge1xuICAgICAgZWxlbWVudC5zdHlsZS5maWx0ZXIgPSBpc05hTih2YWx1ZSkgPyAnJyA6ICdhbHBoYShvcGFjaXR5PScgKyB2YWx1ZSAqIDEwMCArICcpJztcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudC5zdHlsZVtzdHlsZU5hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL2RvbS5qc1xuLy8gbW9kdWxlIGlkID0gM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///3\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\nfunction _broadcast(componentName, eventName, params) {\n this.$children.forEach(function (child) {\n var name = child.$options.componentName;\n\n if (name === componentName) {\n child.$emit.apply(child, [eventName].concat(params));\n } else {\n _broadcast.apply(child, [componentName, eventName].concat([params]));\n }\n });\n}\nexports.default = {\n methods: {\n dispatch: function dispatch(componentName, eventName, params) {\n var parent = this.$parent || this.$root;\n var name = parent.$options.componentName;\n\n while (parent && (!name || name !== componentName)) {\n parent = parent.$parent;\n\n if (parent) {\n name = parent.$options.componentName;\n }\n }\n if (parent) {\n parent.$emit.apply(parent, [eventName].concat(params));\n }\n },\n broadcast: function broadcast(componentName, eventName, params) {\n _broadcast.call(this, componentName, eventName, params);\n }\n }\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXIuanM/N2NmOSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5mdW5jdGlvbiBfYnJvYWRjYXN0KGNvbXBvbmVudE5hbWUsIGV2ZW50TmFtZSwgcGFyYW1zKSB7XG4gIHRoaXMuJGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgdmFyIG5hbWUgPSBjaGlsZC4kb3B0aW9ucy5jb21wb25lbnROYW1lO1xuXG4gICAgaWYgKG5hbWUgPT09IGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIGNoaWxkLiRlbWl0LmFwcGx5KGNoaWxkLCBbZXZlbnROYW1lXS5jb25jYXQocGFyYW1zKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9icm9hZGNhc3QuYXBwbHkoY2hpbGQsIFtjb21wb25lbnROYW1lLCBldmVudE5hbWVdLmNvbmNhdChbcGFyYW1zXSkpO1xuICAgIH1cbiAgfSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gIG1ldGhvZHM6IHtcbiAgICBkaXNwYXRjaDogZnVuY3Rpb24gZGlzcGF0Y2goY29tcG9uZW50TmFtZSwgZXZlbnROYW1lLCBwYXJhbXMpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQgfHwgdGhpcy4kcm9vdDtcbiAgICAgIHZhciBuYW1lID0gcGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWU7XG5cbiAgICAgIHdoaWxlIChwYXJlbnQgJiYgKCFuYW1lIHx8IG5hbWUgIT09IGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuXG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICBuYW1lID0gcGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgcGFyZW50LiRlbWl0LmFwcGx5KHBhcmVudCwgW2V2ZW50TmFtZV0uY29uY2F0KHBhcmFtcykpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYnJvYWRjYXN0OiBmdW5jdGlvbiBicm9hZGNhc3QoY29tcG9uZW50TmFtZSwgZXZlbnROYW1lLCBwYXJhbXMpIHtcbiAgICAgIF9icm9hZGNhc3QuY2FsbCh0aGlzLCBjb21wb25lbnROYW1lLCBldmVudE5hbWUsIHBhcmFtcyk7XG4gICAgfVxuICB9XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL21peGlucy9lbWl0dGVyLmpzXG4vLyBtb2R1bGUgaWQgPSA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\nexports.hasOwn = hasOwn;\nexports.toObject = toObject;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn(obj, key) {\n return hasOwnProperty.call(obj, key);\n};\n\nfunction extend(to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to;\n};\n\nfunction toObject(arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res;\n};\n\nvar getValueByPath = exports.getValueByPath = function getValueByPath(object, prop) {\n prop = prop || '';\n var paths = prop.split('.');\n var current = object;\n var result = null;\n for (var i = 0, j = paths.length; i < j; i++) {\n var path = paths[i];\n if (!current) break;\n\n if (i === j - 1) {\n result = current[path];\n break;\n }\n current = current[path];\n }\n return result;\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbC5qcz9jYTUwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLGdCQUFnQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5oYXNPd24gPSBoYXNPd247XG5leHBvcnRzLnRvT2JqZWN0ID0gdG9PYmplY3Q7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuZnVuY3Rpb24gaGFzT3duKG9iaiwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KTtcbn07XG5cbmZ1bmN0aW9uIGV4dGVuZCh0bywgX2Zyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIF9mcm9tKSB7XG4gICAgdG9ba2V5XSA9IF9mcm9tW2tleV07XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcblxuZnVuY3Rpb24gdG9PYmplY3QoYXJyKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyW2ldKSB7XG4gICAgICBleHRlbmQocmVzLCBhcnJbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufTtcblxudmFyIGdldFZhbHVlQnlQYXRoID0gZXhwb3J0cy5nZXRWYWx1ZUJ5UGF0aCA9IGZ1bmN0aW9uIGdldFZhbHVlQnlQYXRoKG9iamVjdCwgcHJvcCkge1xuICBwcm9wID0gcHJvcCB8fCAnJztcbiAgdmFyIHBhdGhzID0gcHJvcC5zcGxpdCgnLicpO1xuICB2YXIgY3VycmVudCA9IG9iamVjdDtcbiAgdmFyIHJlc3VsdCA9IG51bGw7XG4gIGZvciAodmFyIGkgPSAwLCBqID0gcGF0aHMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgdmFyIHBhdGggPSBwYXRoc1tpXTtcbiAgICBpZiAoIWN1cnJlbnQpIGJyZWFrO1xuXG4gICAgaWYgKGkgPT09IGogLSAxKSB7XG4gICAgICByZXN1bHQgPSBjdXJyZW50W3BhdGhdO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhdGhdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWwuanNcbi8vIG1vZHVsZSBpZCA9IDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///5\n")},function(module,exports){eval("// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzPzViNjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBOztBQUVBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsVUFBVSIsImZpbGUiOiI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qc1xuLy8gbW9kdWxlIGlkID0gNlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///6\n")},function(module,exports,__webpack_require__){eval("/* eslint-disable no-undefined */\n\nvar throttle = __webpack_require__(21);\n\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param {Number} delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {Boolean} atBegin Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n * after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n * (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param {Function} callback A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the debounced-function is executed.\n *\n * @return {Function} A new, debounced function.\n */\nmodule.exports = function ( delay, atBegin, callback ) {\n\treturn callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);\n};\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGhyb3R0bGUtZGVib3VuY2UvZGVib3VuY2UuanM/MzhkZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxPQUFPO0FBQ25CLFlBQVksUUFBUTtBQUNwQjtBQUNBO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCO0FBQ0E7QUFDQSxZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmaW5lZCAqL1xuXG52YXIgdGhyb3R0bGUgPSByZXF1aXJlKCcuL3Rocm90dGxlJyk7XG5cbi8qKlxuICogRGVib3VuY2UgZXhlY3V0aW9uIG9mIGEgZnVuY3Rpb24uIERlYm91bmNpbmcsIHVubGlrZSB0aHJvdHRsaW5nLFxuICogZ3VhcmFudGVlcyB0aGF0IGEgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBhIHNpbmdsZSB0aW1lLCBlaXRoZXIgYXQgdGhlXG4gKiB2ZXJ5IGJlZ2lubmluZyBvZiBhIHNlcmllcyBvZiBjYWxscywgb3IgYXQgdGhlIHZlcnkgZW5kLlxuICpcbiAqIEBwYXJhbSAge051bWJlcn0gICBkZWxheSAgICAgICAgIEEgemVyby1vci1ncmVhdGVyIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4gRm9yIGV2ZW50IGNhbGxiYWNrcywgdmFsdWVzIGFyb3VuZCAxMDAgb3IgMjUwIChvciBldmVuIGhpZ2hlcikgYXJlIG1vc3QgdXNlZnVsLlxuICogQHBhcmFtICB7Qm9vbGVhbn0gIGF0QmVnaW4gICAgICAgT3B0aW9uYWwsIGRlZmF1bHRzIHRvIGZhbHNlLiBJZiBhdEJlZ2luIGlzIGZhbHNlIG9yIHVuc3BlY2lmaWVkLCBjYWxsYmFjayB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgYGRlbGF5YCBtaWxsaXNlY29uZHNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyIHRoZSBsYXN0IGRlYm91bmNlZC1mdW5jdGlvbiBjYWxsLiBJZiBhdEJlZ2luIGlzIHRydWUsIGNhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQgb25seSBhdCB0aGUgZmlyc3QgZGVib3VuY2VkLWZ1bmN0aW9uIGNhbGwuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQWZ0ZXIgdGhlIHRocm90dGxlZC1mdW5jdGlvbiBoYXMgbm90IGJlZW4gY2FsbGVkIGZvciBgZGVsYXlgIG1pbGxpc2Vjb25kcywgdGhlIGludGVybmFsIGNvdW50ZXIgaXMgcmVzZXQpLlxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciBkZWxheSBtaWxsaXNlY29uZHMuIFRoZSBgdGhpc2AgY29udGV4dCBhbmQgYWxsIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRocm91Z2gsIGFzLWlzLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYGNhbGxiYWNrYCB3aGVuIHRoZSBkZWJvdW5jZWQtZnVuY3Rpb24gaXMgZXhlY3V0ZWQuXG4gKlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgbmV3LCBkZWJvdW5jZWQgZnVuY3Rpb24uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCBkZWxheSwgYXRCZWdpbiwgY2FsbGJhY2sgKSB7XG5cdHJldHVybiBjYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gdGhyb3R0bGUoZGVsYXksIGF0QmVnaW4sIGZhbHNlKSA6IHRocm90dGxlKGRlbGF5LCBjYWxsYmFjaywgYXRCZWdpbiAhPT0gZmFsc2UpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3Rocm90dGxlLWRlYm91bmNlL2RlYm91bmNlLmpzXG4vLyBtb2R1bGUgaWQgPSA3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///7\n")},function(module,exports,__webpack_require__){eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(166);\n\n\n/***/ },\n\n/***/ 3:\n/***/ function(module, exports) {\n\n\t/* globals __VUE_SSR_CONTEXT__ */\n\n\t// this module is a runtime utility for cleaner component module output and will\n\t// be included in the final webpack user bundle\n\n\tmodule.exports = function normalizeComponent (\n\t rawScriptExports,\n\t compiledTemplate,\n\t injectStyles,\n\t scopeId,\n\t moduleIdentifier /* server only */\n\t) {\n\t var esModule\n\t var scriptExports = rawScriptExports = rawScriptExports || {}\n\n\t // ES6 modules interop\n\t var type = typeof rawScriptExports.default\n\t if (type === 'object' || type === 'function') {\n\t esModule = rawScriptExports\n\t scriptExports = rawScriptExports.default\n\t }\n\n\t // Vue.extend constructor export interop\n\t var options = typeof scriptExports === 'function'\n\t ? scriptExports.options\n\t : scriptExports\n\n\t // render functions\n\t if (compiledTemplate) {\n\t options.render = compiledTemplate.render\n\t options.staticRenderFns = compiledTemplate.staticRenderFns\n\t }\n\n\t // scopedId\n\t if (scopeId) {\n\t options._scopeId = scopeId\n\t }\n\n\t var hook\n\t if (moduleIdentifier) { // server build\n\t hook = function (context) {\n\t // 2.3 injection\n\t context = context || (this.$vnode && this.$vnode.ssrContext)\n\t // 2.2 with runInNewContext: true\n\t if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n\t context = __VUE_SSR_CONTEXT__\n\t }\n\t // inject component styles\n\t if (injectStyles) {\n\t injectStyles.call(this, context)\n\t }\n\t // register component module identifier for async chunk inferrence\n\t if (context && context._registeredComponents) {\n\t context._registeredComponents.add(moduleIdentifier)\n\t }\n\t }\n\t // used by ssr in case component is cached and beforeCreate\n\t // never gets called\n\t options._ssrRegister = hook\n\t } else if (injectStyles) {\n\t hook = injectStyles\n\t }\n\n\t if (hook) {\n\t // inject component registration as beforeCreate hook\n\t var existing = options.beforeCreate\n\t options.beforeCreate = existing\n\t ? [].concat(existing, hook)\n\t : [hook]\n\t }\n\n\t return {\n\t esModule: esModule,\n\t exports: scriptExports,\n\t options: options\n\t }\n\t}\n\n\n/***/ },\n\n/***/ 14:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(4);\n\n/***/ },\n\n/***/ 166:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _input = __webpack_require__(167);\n\n\tvar _input2 = _interopRequireDefault(_input);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_input2.default.install = function (Vue) {\n\t Vue.component(_input2.default.name, _input2.default);\n\t};\n\n\texports.default = _input2.default;\n\n/***/ },\n\n/***/ 167:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(3)(\n\t /* script */\n\t __webpack_require__(168),\n\t /* template */\n\t __webpack_require__(171),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 168:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _emitter = __webpack_require__(14);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tvar _calcTextareaHeight = __webpack_require__(169);\n\n\tvar _calcTextareaHeight2 = _interopRequireDefault(_calcTextareaHeight);\n\n\tvar _merge = __webpack_require__(170);\n\n\tvar _merge2 = _interopRequireDefault(_merge);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElInput',\n\n\t componentName: 'ElInput',\n\n\t mixins: [_emitter2.default],\n\n\t data: function data() {\n\t return {\n\t currentValue: this.value,\n\t textareaCalcStyle: {}\n\t };\n\t },\n\n\n\t props: {\n\t value: [String, Number],\n\t placeholder: String,\n\t size: String,\n\t resize: String,\n\t readonly: Boolean,\n\t autofocus: Boolean,\n\t icon: String,\n\t disabled: Boolean,\n\t type: {\n\t type: String,\n\t default: 'text'\n\t },\n\t name: String,\n\t autosize: {\n\t type: [Boolean, Object],\n\t default: false\n\t },\n\t rows: {\n\t type: Number,\n\t default: 2\n\t },\n\t autoComplete: {\n\t type: String,\n\t default: 'off'\n\t },\n\t form: String,\n\t maxlength: Number,\n\t minlength: Number,\n\t max: {},\n\t min: {},\n\t step: {},\n\t validateEvent: {\n\t type: Boolean,\n\t default: true\n\t },\n\t onIconClick: Function\n\t },\n\n\t computed: {\n\t validating: function validating() {\n\t return this.$parent.validateState === 'validating';\n\t },\n\t textareaStyle: function textareaStyle() {\n\t return (0, _merge2.default)({}, this.textareaCalcStyle, { resize: this.resize });\n\t }\n\t },\n\n\t watch: {\n\t 'value': function value(val, oldValue) {\n\t this.setCurrentValue(val);\n\t }\n\t },\n\n\t methods: {\n\t handleBlur: function handleBlur(event) {\n\t this.$emit('blur', event);\n\t if (this.validateEvent) {\n\t this.dispatch('ElFormItem', 'el.form.blur', [this.currentValue]);\n\t }\n\t },\n\t inputSelect: function inputSelect() {\n\t this.$refs.input.select();\n\t },\n\t resizeTextarea: function resizeTextarea() {\n\t if (this.$isServer) return;\n\t var autosize = this.autosize,\n\t type = this.type;\n\n\t if (!autosize || type !== 'textarea') return;\n\t var minRows = autosize.minRows;\n\t var maxRows = autosize.maxRows;\n\n\t this.textareaCalcStyle = (0, _calcTextareaHeight2.default)(this.$refs.textarea, minRows, maxRows);\n\t },\n\t handleFocus: function handleFocus(event) {\n\t this.$emit('focus', event);\n\t },\n\t handleInput: function handleInput(event) {\n\t var value = event.target.value;\n\t this.$emit('input', value);\n\t this.setCurrentValue(value);\n\t this.$emit('change', value);\n\t },\n\t handleIconClick: function handleIconClick(event) {\n\t if (this.onIconClick) {\n\t this.onIconClick(event);\n\t }\n\t this.$emit('click', event);\n\t },\n\t setCurrentValue: function setCurrentValue(value) {\n\t var _this = this;\n\n\t if (value === this.currentValue) return;\n\t this.$nextTick(function (_) {\n\t _this.resizeTextarea();\n\t });\n\t this.currentValue = value;\n\t if (this.validateEvent) {\n\t this.dispatch('ElFormItem', 'el.form.change', [value]);\n\t }\n\t }\n\t },\n\n\t created: function created() {\n\t this.$on('inputSelect', this.inputSelect);\n\t },\n\t mounted: function mounted() {\n\t this.resizeTextarea();\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n\n/***/ 169:\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\texports.default = calcTextareaHeight;\n\tvar hiddenTextarea = void 0;\n\n\tvar HIDDEN_STYLE = '\\n height:0 !important;\\n visibility:hidden !important;\\n overflow:hidden !important;\\n position:absolute !important;\\n z-index:-1000 !important;\\n top:0 !important;\\n right:0 !important\\n';\n\n\tvar CONTEXT_STYLE = ['letter-spacing', 'line-height', 'padding-top', 'padding-bottom', 'font-family', 'font-weight', 'font-size', 'text-rendering', 'text-transform', 'width', 'text-indent', 'padding-left', 'padding-right', 'border-width', 'box-sizing'];\n\n\tfunction calculateNodeStyling(targetElement) {\n\t var style = window.getComputedStyle(targetElement);\n\n\t var boxSizing = style.getPropertyValue('box-sizing');\n\n\t var paddingSize = parseFloat(style.getPropertyValue('padding-bottom')) + parseFloat(style.getPropertyValue('padding-top'));\n\n\t var borderSize = parseFloat(style.getPropertyValue('border-bottom-width')) + parseFloat(style.getPropertyValue('border-top-width'));\n\n\t var contextStyle = CONTEXT_STYLE.map(function (name) {\n\t return name + ':' + style.getPropertyValue(name);\n\t }).join(';');\n\n\t return { contextStyle: contextStyle, paddingSize: paddingSize, borderSize: borderSize, boxSizing: boxSizing };\n\t}\n\n\tfunction calcTextareaHeight(targetElement) {\n\t var minRows = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t var maxRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t if (!hiddenTextarea) {\n\t hiddenTextarea = document.createElement('textarea');\n\t document.body.appendChild(hiddenTextarea);\n\t }\n\n\t var _calculateNodeStyling = calculateNodeStyling(targetElement),\n\t paddingSize = _calculateNodeStyling.paddingSize,\n\t borderSize = _calculateNodeStyling.borderSize,\n\t boxSizing = _calculateNodeStyling.boxSizing,\n\t contextStyle = _calculateNodeStyling.contextStyle;\n\n\t hiddenTextarea.setAttribute('style', contextStyle + ';' + HIDDEN_STYLE);\n\t hiddenTextarea.value = targetElement.value || targetElement.placeholder || '';\n\n\t var height = hiddenTextarea.scrollHeight;\n\n\t if (boxSizing === 'border-box') {\n\t height = height + borderSize;\n\t } else if (boxSizing === 'content-box') {\n\t height = height - paddingSize;\n\t }\n\n\t hiddenTextarea.value = '';\n\t var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n\n\t if (minRows !== null) {\n\t var minHeight = singleRowHeight * minRows;\n\t if (boxSizing === 'border-box') {\n\t minHeight = minHeight + paddingSize + borderSize;\n\t }\n\t height = Math.max(minHeight, height);\n\t }\n\t if (maxRows !== null) {\n\t var maxHeight = singleRowHeight * maxRows;\n\t if (boxSizing === 'border-box') {\n\t maxHeight = maxHeight + paddingSize + borderSize;\n\t }\n\t height = Math.min(maxHeight, height);\n\t }\n\n\t return { height: height + 'px' };\n\t};\n\n/***/ },\n\n/***/ 170:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(9);\n\n/***/ },\n\n/***/ 171:\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t class: [\n\t _vm.type === 'textarea' ? 'el-textarea' : 'el-input',\n\t _vm.size ? 'el-input--' + _vm.size : '', {\n\t 'is-disabled': _vm.disabled,\n\t 'el-input-group': _vm.$slots.prepend || _vm.$slots.append,\n\t 'el-input-group--append': _vm.$slots.append,\n\t 'el-input-group--prepend': _vm.$slots.prepend\n\t }\n\t ]\n\t }, [(_vm.type !== 'textarea') ? [(_vm.$slots.prepend) ? _c('div', {\n\t staticClass: \"el-input-group__prepend\"\n\t }, [_vm._t(\"prepend\")], 2) : _vm._e(), _vm._t(\"icon\", [(_vm.icon) ? _c('i', {\n\t staticClass: \"el-input__icon\",\n\t class: [\n\t 'el-icon-' + _vm.icon,\n\t _vm.onIconClick ? 'is-clickable' : ''\n\t ],\n\t on: {\n\t \"click\": _vm.handleIconClick\n\t }\n\t }) : _vm._e()]), (_vm.type !== 'textarea') ? _c('input', _vm._b({\n\t ref: \"input\",\n\t staticClass: \"el-input__inner\",\n\t attrs: {\n\t \"autocomplete\": _vm.autoComplete\n\t },\n\t domProps: {\n\t \"value\": _vm.currentValue\n\t },\n\t on: {\n\t \"input\": _vm.handleInput,\n\t \"focus\": _vm.handleFocus,\n\t \"blur\": _vm.handleBlur\n\t }\n\t }, 'input', _vm.$props)) : _vm._e(), (_vm.validating) ? _c('i', {\n\t staticClass: \"el-input__icon el-icon-loading\"\n\t }) : _vm._e(), (_vm.$slots.append) ? _c('div', {\n\t staticClass: \"el-input-group__append\"\n\t }, [_vm._t(\"append\")], 2) : _vm._e()] : _c('textarea', _vm._b({\n\t ref: \"textarea\",\n\t staticClass: \"el-textarea__inner\",\n\t style: (_vm.textareaStyle),\n\t domProps: {\n\t \"value\": _vm.currentValue\n\t },\n\t on: {\n\t \"input\": _vm.handleInput,\n\t \"focus\": _vm.handleFocus,\n\t \"blur\": _vm.handleBlur\n\t }\n\t }, 'textarea', _vm.$props))], 2)\n\t},staticRenderFns: []}\n\n/***/ }\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvaW5wdXQuanM/MWM5MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjs7QUFFQSxVQUFVIiwiZmlsZSI6IjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuXG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG5cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Nik7XG5cblxuLyoqKi8gfSxcblxuLyoqKi8gMzpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG5cdC8vIHRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG5cdC8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuXHQgIHJhd1NjcmlwdEV4cG9ydHMsXG5cdCAgY29tcGlsZWRUZW1wbGF0ZSxcblx0ICBpbmplY3RTdHlsZXMsXG5cdCAgc2NvcGVJZCxcblx0ICBtb2R1bGVJZGVudGlmaWVyIC8qIHNlcnZlciBvbmx5ICovXG5cdCkge1xuXHQgIHZhciBlc01vZHVsZVxuXHQgIHZhciBzY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMgfHwge31cblxuXHQgIC8vIEVTNiBtb2R1bGVzIGludGVyb3Bcblx0ICB2YXIgdHlwZSA9IHR5cGVvZiByYXdTY3JpcHRFeHBvcnRzLmRlZmF1bHRcblx0ICBpZiAodHlwZSA9PT0gJ29iamVjdCcgfHwgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgZXNNb2R1bGUgPSByYXdTY3JpcHRFeHBvcnRzXG5cdCAgICBzY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cy5kZWZhdWx0XG5cdCAgfVxuXG5cdCAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuXHQgIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcblx0ICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG5cdCAgICA6IHNjcmlwdEV4cG9ydHNcblxuXHQgIC8vIHJlbmRlciBmdW5jdGlvbnNcblx0ICBpZiAoY29tcGlsZWRUZW1wbGF0ZSkge1xuXHQgICAgb3B0aW9ucy5yZW5kZXIgPSBjb21waWxlZFRlbXBsYXRlLnJlbmRlclxuXHQgICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBjb21waWxlZFRlbXBsYXRlLnN0YXRpY1JlbmRlckZuc1xuXHQgIH1cblxuXHQgIC8vIHNjb3BlZElkXG5cdCAgaWYgKHNjb3BlSWQpIHtcblx0ICAgIG9wdGlvbnMuX3Njb3BlSWQgPSBzY29wZUlkXG5cdCAgfVxuXG5cdCAgdmFyIGhvb2tcblx0ICBpZiAobW9kdWxlSWRlbnRpZmllcikgeyAvLyBzZXJ2ZXIgYnVpbGRcblx0ICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAvLyAyLjMgaW5qZWN0aW9uXG5cdCAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8ICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KVxuXHQgICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcblx0ICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuXHQgICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG5cdCAgICAgIH1cblx0ICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcblx0ICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuXHQgICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG5cdCAgICAgIH1cblx0ICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG5cdCAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG5cdCAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG5cdCAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuXHQgICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG5cdCAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcblx0ICAgIGhvb2sgPSBpbmplY3RTdHlsZXNcblx0ICB9XG5cblx0ICBpZiAoaG9vaykge1xuXHQgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcblx0ICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG5cdCAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nXG5cdCAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKVxuXHQgICAgICA6IFtob29rXVxuXHQgIH1cblxuXHQgIHJldHVybiB7XG5cdCAgICBlc01vZHVsZTogZXNNb2R1bGUsXG5cdCAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuXHQgICAgb3B0aW9uczogb3B0aW9uc1xuXHQgIH1cblx0fVxuXG5cbi8qKiovIH0sXG5cbi8qKiovIDE0OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXJcIik7XG5cbi8qKiovIH0sXG5cbi8qKiovIDE2Njpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfaW5wdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Nyk7XG5cblx0dmFyIF9pbnB1dDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbnB1dCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfaW5wdXQyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9pbnB1dDIuZGVmYXVsdC5uYW1lLCBfaW5wdXQyLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9pbnB1dDIuZGVmYXVsdDtcblxuLyoqKi8gfSxcblxuLyoqKi8gMTY3OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMykoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxNjgpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxNzEpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG5cbi8qKiovIDE2ODpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfZW1pdHRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xuXG5cdHZhciBfZW1pdHRlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbWl0dGVyKTtcblxuXHR2YXIgX2NhbGNUZXh0YXJlYUhlaWdodCA9IF9fd2VicGFja19yZXF1aXJlX18oMTY5KTtcblxuXHR2YXIgX2NhbGNUZXh0YXJlYUhlaWdodDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jYWxjVGV4dGFyZWFIZWlnaHQpO1xuXG5cdHZhciBfbWVyZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MCk7XG5cblx0dmFyIF9tZXJnZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tZXJnZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsSW5wdXQnLFxuXG5cdCAgY29tcG9uZW50TmFtZTogJ0VsSW5wdXQnLFxuXG5cdCAgbWl4aW5zOiBbX2VtaXR0ZXIyLmRlZmF1bHRdLFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcblx0ICAgICAgdGV4dGFyZWFDYWxjU3R5bGU6IHt9XG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIHByb3BzOiB7XG5cdCAgICB2YWx1ZTogW1N0cmluZywgTnVtYmVyXSxcblx0ICAgIHBsYWNlaG9sZGVyOiBTdHJpbmcsXG5cdCAgICBzaXplOiBTdHJpbmcsXG5cdCAgICByZXNpemU6IFN0cmluZyxcblx0ICAgIHJlYWRvbmx5OiBCb29sZWFuLFxuXHQgICAgYXV0b2ZvY3VzOiBCb29sZWFuLFxuXHQgICAgaWNvbjogU3RyaW5nLFxuXHQgICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG5cdCAgICB0eXBlOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ3RleHQnXG5cdCAgICB9LFxuXHQgICAgbmFtZTogU3RyaW5nLFxuXHQgICAgYXV0b3NpemU6IHtcblx0ICAgICAgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sXG5cdCAgICAgIGRlZmF1bHQ6IGZhbHNlXG5cdCAgICB9LFxuXHQgICAgcm93czoge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDJcblx0ICAgIH0sXG5cdCAgICBhdXRvQ29tcGxldGU6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnb2ZmJ1xuXHQgICAgfSxcblx0ICAgIGZvcm06IFN0cmluZyxcblx0ICAgIG1heGxlbmd0aDogTnVtYmVyLFxuXHQgICAgbWlubGVuZ3RoOiBOdW1iZXIsXG5cdCAgICBtYXg6IHt9LFxuXHQgICAgbWluOiB7fSxcblx0ICAgIHN0ZXA6IHt9LFxuXHQgICAgdmFsaWRhdGVFdmVudDoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXHQgICAgb25JY29uQ2xpY2s6IEZ1bmN0aW9uXG5cdCAgfSxcblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICB2YWxpZGF0aW5nOiBmdW5jdGlvbiB2YWxpZGF0aW5nKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcGFyZW50LnZhbGlkYXRlU3RhdGUgPT09ICd2YWxpZGF0aW5nJztcblx0ICAgIH0sXG5cdCAgICB0ZXh0YXJlYVN0eWxlOiBmdW5jdGlvbiB0ZXh0YXJlYVN0eWxlKCkge1xuXHQgICAgICByZXR1cm4gKDAsIF9tZXJnZTIuZGVmYXVsdCkoe30sIHRoaXMudGV4dGFyZWFDYWxjU3R5bGUsIHsgcmVzaXplOiB0aGlzLnJlc2l6ZSB9KTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgICd2YWx1ZSc6IGZ1bmN0aW9uIHZhbHVlKHZhbCwgb2xkVmFsdWUpIHtcblx0ICAgICAgdGhpcy5zZXRDdXJyZW50VmFsdWUodmFsKTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xuXHQgICAgICB0aGlzLiRlbWl0KCdibHVyJywgZXZlbnQpO1xuXHQgICAgICBpZiAodGhpcy52YWxpZGF0ZUV2ZW50KSB7XG5cdCAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmJsdXInLCBbdGhpcy5jdXJyZW50VmFsdWVdKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGlucHV0U2VsZWN0OiBmdW5jdGlvbiBpbnB1dFNlbGVjdCgpIHtcblx0ICAgICAgdGhpcy4kcmVmcy5pbnB1dC5zZWxlY3QoKTtcblx0ICAgIH0sXG5cdCAgICByZXNpemVUZXh0YXJlYTogZnVuY3Rpb24gcmVzaXplVGV4dGFyZWEoKSB7XG5cdCAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuXHQgICAgICB2YXIgYXV0b3NpemUgPSB0aGlzLmF1dG9zaXplLFxuXHQgICAgICAgICAgdHlwZSA9IHRoaXMudHlwZTtcblxuXHQgICAgICBpZiAoIWF1dG9zaXplIHx8IHR5cGUgIT09ICd0ZXh0YXJlYScpIHJldHVybjtcblx0ICAgICAgdmFyIG1pblJvd3MgPSBhdXRvc2l6ZS5taW5Sb3dzO1xuXHQgICAgICB2YXIgbWF4Um93cyA9IGF1dG9zaXplLm1heFJvd3M7XG5cblx0ICAgICAgdGhpcy50ZXh0YXJlYUNhbGNTdHlsZSA9ICgwLCBfY2FsY1RleHRhcmVhSGVpZ2h0Mi5kZWZhdWx0KSh0aGlzLiRyZWZzLnRleHRhcmVhLCBtaW5Sb3dzLCBtYXhSb3dzKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVGb2N1czogZnVuY3Rpb24gaGFuZGxlRm9jdXMoZXZlbnQpIHtcblx0ICAgICAgdGhpcy4kZW1pdCgnZm9jdXMnLCBldmVudCk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlSW5wdXQ6IGZ1bmN0aW9uIGhhbmRsZUlucHV0KGV2ZW50KSB7XG5cdCAgICAgIHZhciB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblx0ICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG5cdCAgICAgIHRoaXMuc2V0Q3VycmVudFZhbHVlKHZhbHVlKTtcblx0ICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUljb25DbGljazogZnVuY3Rpb24gaGFuZGxlSWNvbkNsaWNrKGV2ZW50KSB7XG5cdCAgICAgIGlmICh0aGlzLm9uSWNvbkNsaWNrKSB7XG5cdCAgICAgICAgdGhpcy5vbkljb25DbGljayhldmVudCk7XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy4kZW1pdCgnY2xpY2snLCBldmVudCk7XG5cdCAgICB9LFxuXHQgICAgc2V0Q3VycmVudFZhbHVlOiBmdW5jdGlvbiBzZXRDdXJyZW50VmFsdWUodmFsdWUpIHtcblx0ICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgICBpZiAodmFsdWUgPT09IHRoaXMuY3VycmVudFZhbHVlKSByZXR1cm47XG5cdCAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7XG5cdCAgICAgICAgX3RoaXMucmVzaXplVGV4dGFyZWEoKTtcblx0ICAgICAgfSk7XG5cdCAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdmFsdWU7XG5cdCAgICAgIGlmICh0aGlzLnZhbGlkYXRlRXZlbnQpIHtcblx0ICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgW3ZhbHVlXSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcblx0ICAgIHRoaXMuJG9uKCdpbnB1dFNlbGVjdCcsIHRoaXMuaW5wdXRTZWxlY3QpO1xuXHQgIH0sXG5cdCAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcblx0ICAgIHRoaXMucmVzaXplVGV4dGFyZWEoKTtcblx0ICB9XG5cdH07IC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cbi8qKiovIH0sXG5cbi8qKiovIDE2OTpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLmRlZmF1bHQgPSBjYWxjVGV4dGFyZWFIZWlnaHQ7XG5cdHZhciBoaWRkZW5UZXh0YXJlYSA9IHZvaWQgMDtcblxuXHR2YXIgSElEREVOX1NUWUxFID0gJ1xcbiAgaGVpZ2h0OjAgIWltcG9ydGFudDtcXG4gIHZpc2liaWxpdHk6aGlkZGVuICFpbXBvcnRhbnQ7XFxuICBvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudDtcXG4gIHBvc2l0aW9uOmFic29sdXRlICFpbXBvcnRhbnQ7XFxuICB6LWluZGV4Oi0xMDAwICFpbXBvcnRhbnQ7XFxuICB0b3A6MCAhaW1wb3J0YW50O1xcbiAgcmlnaHQ6MCAhaW1wb3J0YW50XFxuJztcblxuXHR2YXIgQ09OVEVYVF9TVFlMRSA9IFsnbGV0dGVyLXNwYWNpbmcnLCAnbGluZS1oZWlnaHQnLCAncGFkZGluZy10b3AnLCAncGFkZGluZy1ib3R0b20nLCAnZm9udC1mYW1pbHknLCAnZm9udC13ZWlnaHQnLCAnZm9udC1zaXplJywgJ3RleHQtcmVuZGVyaW5nJywgJ3RleHQtdHJhbnNmb3JtJywgJ3dpZHRoJywgJ3RleHQtaW5kZW50JywgJ3BhZGRpbmctbGVmdCcsICdwYWRkaW5nLXJpZ2h0JywgJ2JvcmRlci13aWR0aCcsICdib3gtc2l6aW5nJ107XG5cblx0ZnVuY3Rpb24gY2FsY3VsYXRlTm9kZVN0eWxpbmcodGFyZ2V0RWxlbWVudCkge1xuXHQgIHZhciBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhcmdldEVsZW1lbnQpO1xuXG5cdCAgdmFyIGJveFNpemluZyA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcblxuXHQgIHZhciBwYWRkaW5nU2l6ZSA9IHBhcnNlRmxvYXQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKSkgKyBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctdG9wJykpO1xuXG5cdCAgdmFyIGJvcmRlclNpemUgPSBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1ib3R0b20td2lkdGgnKSkgKyBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci10b3Atd2lkdGgnKSk7XG5cblx0ICB2YXIgY29udGV4dFN0eWxlID0gQ09OVEVYVF9TVFlMRS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgIHJldHVybiBuYW1lICsgJzonICsgc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcblx0ICB9KS5qb2luKCc7Jyk7XG5cblx0ICByZXR1cm4geyBjb250ZXh0U3R5bGU6IGNvbnRleHRTdHlsZSwgcGFkZGluZ1NpemU6IHBhZGRpbmdTaXplLCBib3JkZXJTaXplOiBib3JkZXJTaXplLCBib3hTaXppbmc6IGJveFNpemluZyB9O1xuXHR9XG5cblx0ZnVuY3Rpb24gY2FsY1RleHRhcmVhSGVpZ2h0KHRhcmdldEVsZW1lbnQpIHtcblx0ICB2YXIgbWluUm93cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDtcblx0ICB2YXIgbWF4Um93cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcblxuXHQgIGlmICghaGlkZGVuVGV4dGFyZWEpIHtcblx0ICAgIGhpZGRlblRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcblx0ICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlkZGVuVGV4dGFyZWEpO1xuXHQgIH1cblxuXHQgIHZhciBfY2FsY3VsYXRlTm9kZVN0eWxpbmcgPSBjYWxjdWxhdGVOb2RlU3R5bGluZyh0YXJnZXRFbGVtZW50KSxcblx0ICAgICAgcGFkZGluZ1NpemUgPSBfY2FsY3VsYXRlTm9kZVN0eWxpbmcucGFkZGluZ1NpemUsXG5cdCAgICAgIGJvcmRlclNpemUgPSBfY2FsY3VsYXRlTm9kZVN0eWxpbmcuYm9yZGVyU2l6ZSxcblx0ICAgICAgYm94U2l6aW5nID0gX2NhbGN1bGF0ZU5vZGVTdHlsaW5nLmJveFNpemluZyxcblx0ICAgICAgY29udGV4dFN0eWxlID0gX2NhbGN1bGF0ZU5vZGVTdHlsaW5nLmNvbnRleHRTdHlsZTtcblxuXHQgIGhpZGRlblRleHRhcmVhLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBjb250ZXh0U3R5bGUgKyAnOycgKyBISURERU5fU1RZTEUpO1xuXHQgIGhpZGRlblRleHRhcmVhLnZhbHVlID0gdGFyZ2V0RWxlbWVudC52YWx1ZSB8fCB0YXJnZXRFbGVtZW50LnBsYWNlaG9sZGVyIHx8ICcnO1xuXG5cdCAgdmFyIGhlaWdodCA9IGhpZGRlblRleHRhcmVhLnNjcm9sbEhlaWdodDtcblxuXHQgIGlmIChib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuXHQgICAgaGVpZ2h0ID0gaGVpZ2h0ICsgYm9yZGVyU2l6ZTtcblx0ICB9IGVsc2UgaWYgKGJveFNpemluZyA9PT0gJ2NvbnRlbnQtYm94Jykge1xuXHQgICAgaGVpZ2h0ID0gaGVpZ2h0IC0gcGFkZGluZ1NpemU7XG5cdCAgfVxuXG5cdCAgaGlkZGVuVGV4dGFyZWEudmFsdWUgPSAnJztcblx0ICB2YXIgc2luZ2xlUm93SGVpZ2h0ID0gaGlkZGVuVGV4dGFyZWEuc2Nyb2xsSGVpZ2h0IC0gcGFkZGluZ1NpemU7XG5cblx0ICBpZiAobWluUm93cyAhPT0gbnVsbCkge1xuXHQgICAgdmFyIG1pbkhlaWdodCA9IHNpbmdsZVJvd0hlaWdodCAqIG1pblJvd3M7XG5cdCAgICBpZiAoYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcblx0ICAgICAgbWluSGVpZ2h0ID0gbWluSGVpZ2h0ICsgcGFkZGluZ1NpemUgKyBib3JkZXJTaXplO1xuXHQgICAgfVxuXHQgICAgaGVpZ2h0ID0gTWF0aC5tYXgobWluSGVpZ2h0LCBoZWlnaHQpO1xuXHQgIH1cblx0ICBpZiAobWF4Um93cyAhPT0gbnVsbCkge1xuXHQgICAgdmFyIG1heEhlaWdodCA9IHNpbmdsZVJvd0hlaWdodCAqIG1heFJvd3M7XG5cdCAgICBpZiAoYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcblx0ICAgICAgbWF4SGVpZ2h0ID0gbWF4SGVpZ2h0ICsgcGFkZGluZ1NpemUgKyBib3JkZXJTaXplO1xuXHQgICAgfVxuXHQgICAgaGVpZ2h0ID0gTWF0aC5taW4obWF4SGVpZ2h0LCBoZWlnaHQpO1xuXHQgIH1cblxuXHQgIHJldHVybiB7IGhlaWdodDogaGVpZ2h0ICsgJ3B4JyB9O1xuXHR9O1xuXG4vKioqLyB9LFxuXG4vKioqLyAxNzA6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9tZXJnZVwiKTtcblxuLyoqKi8gfSxcblxuLyoqKi8gMTcxOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIGNsYXNzOiBbXG5cdCAgICAgIF92bS50eXBlID09PSAndGV4dGFyZWEnID8gJ2VsLXRleHRhcmVhJyA6ICdlbC1pbnB1dCcsXG5cdCAgICAgIF92bS5zaXplID8gJ2VsLWlucHV0LS0nICsgX3ZtLnNpemUgOiAnJywge1xuXHQgICAgICAgICdpcy1kaXNhYmxlZCc6IF92bS5kaXNhYmxlZCxcblx0ICAgICAgICAnZWwtaW5wdXQtZ3JvdXAnOiBfdm0uJHNsb3RzLnByZXBlbmQgfHwgX3ZtLiRzbG90cy5hcHBlbmQsXG5cdCAgICAgICAgJ2VsLWlucHV0LWdyb3VwLS1hcHBlbmQnOiBfdm0uJHNsb3RzLmFwcGVuZCxcblx0ICAgICAgICAnZWwtaW5wdXQtZ3JvdXAtLXByZXBlbmQnOiBfdm0uJHNsb3RzLnByZXBlbmRcblx0ICAgICAgfVxuXHQgICAgXVxuXHQgIH0sIFsoX3ZtLnR5cGUgIT09ICd0ZXh0YXJlYScpID8gWyhfdm0uJHNsb3RzLnByZXBlbmQpID8gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0LWdyb3VwX19wcmVwZW5kXCJcblx0ICB9LCBbX3ZtLl90KFwicHJlcGVuZFwiKV0sIDIpIDogX3ZtLl9lKCksIF92bS5fdChcImljb25cIiwgWyhfdm0uaWNvbikgPyBfYygnaScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19pY29uXCIsXG5cdCAgICBjbGFzczogW1xuXHQgICAgICAnZWwtaWNvbi0nICsgX3ZtLmljb24sXG5cdCAgICAgIF92bS5vbkljb25DbGljayA/ICdpcy1jbGlja2FibGUnIDogJydcblx0ICAgIF0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5oYW5kbGVJY29uQ2xpY2tcblx0ICAgIH1cblx0ICB9KSA6IF92bS5fZSgpXSksIChfdm0udHlwZSAhPT0gJ3RleHRhcmVhJykgPyBfYygnaW5wdXQnLCBfdm0uX2Ioe1xuXHQgICAgcmVmOiBcImlucHV0XCIsXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9faW5uZXJcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwiYXV0b2NvbXBsZXRlXCI6IF92bS5hdXRvQ29tcGxldGVcblx0ICAgIH0sXG5cdCAgICBkb21Qcm9wczoge1xuXHQgICAgICBcInZhbHVlXCI6IF92bS5jdXJyZW50VmFsdWVcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImlucHV0XCI6IF92bS5oYW5kbGVJbnB1dCxcblx0ICAgICAgXCJmb2N1c1wiOiBfdm0uaGFuZGxlRm9jdXMsXG5cdCAgICAgIFwiYmx1clwiOiBfdm0uaGFuZGxlQmx1clxuXHQgICAgfVxuXHQgIH0sICdpbnB1dCcsIF92bS4kcHJvcHMpKSA6IF92bS5fZSgpLCAoX3ZtLnZhbGlkYXRpbmcpID8gX2MoJ2knLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9faWNvbiBlbC1pY29uLWxvYWRpbmdcIlxuXHQgIH0pIDogX3ZtLl9lKCksIChfdm0uJHNsb3RzLmFwcGVuZCkgPyBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZFwiXG5cdCAgfSwgW192bS5fdChcImFwcGVuZFwiKV0sIDIpIDogX3ZtLl9lKCldIDogX2MoJ3RleHRhcmVhJywgX3ZtLl9iKHtcblx0ICAgIHJlZjogXCJ0ZXh0YXJlYVwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGV4dGFyZWFfX2lubmVyXCIsXG5cdCAgICBzdHlsZTogKF92bS50ZXh0YXJlYVN0eWxlKSxcblx0ICAgIGRvbVByb3BzOiB7XG5cdCAgICAgIFwidmFsdWVcIjogX3ZtLmN1cnJlbnRWYWx1ZVxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiaW5wdXRcIjogX3ZtLmhhbmRsZUlucHV0LFxuXHQgICAgICBcImZvY3VzXCI6IF92bS5oYW5kbGVGb2N1cyxcblx0ICAgICAgXCJibHVyXCI6IF92bS5oYW5kbGVCbHVyXG5cdCAgICB9XG5cdCAgfSwgJ3RleHRhcmVhJywgX3ZtLiRwcm9wcykpXSwgMilcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9XG5cbi8qKioqKiovIH0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL2lucHV0LmpzXG4vLyBtb2R1bGUgaWQgPSA4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\n\nexports.default = function (target) {\n for (var i = 1, j = arguments.length; i < j; i++) {\n var source = arguments[i] || {};\n for (var prop in source) {\n if (source.hasOwnProperty(prop)) {\n var value = source[prop];\n if (value !== undefined) {\n target[prop] = value;\n }\n }\n }\n }\n\n return target;\n};\n\n;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvbWVyZ2UuanM/OGU2NiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTs7QUFFQTtBQUNBLHVDQUF1QyxPQUFPO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxLCBqID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gfHwge307XG4gICAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpIHtcbiAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc291cmNlW3Byb3BdO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy9tZXJnZS5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///9\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\n\nvar _vue = __webpack_require__(2);\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _popup = __webpack_require__(17);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PopperJS = _vue2.default.prototype.$isServer ? function () {} : __webpack_require__(32);\nvar stop = function stop(e) {\n return e.stopPropagation();\n};\n\n/**\n * @param {HTMLElement} [reference=$refs.reference] - The reference element used to position the popper.\n * @param {HTMLElement} [popper=$refs.popper] - The HTML element used as popper, or a configuration used to generate the popper.\n * @param {String} [placement=button] - Placement of the popper accepted values: top(-start, -end), right(-start, -end), bottom(-start, -end), left(-start, -end)\n * @param {Number} [offset=0] - Amount of pixels the popper will be shifted (can be negative).\n * @param {Boolean} [visible=false] Visibility of the popup element.\n * @param {Boolean} [visible-arrow=false] Visibility of the arrow, no style.\n */\nexports.default = {\n props: {\n placement: {\n type: String,\n default: 'bottom'\n },\n boundariesPadding: {\n type: Number,\n default: 5\n },\n reference: {},\n popper: {},\n offset: {\n default: 0\n },\n value: Boolean,\n visibleArrow: Boolean,\n transition: String,\n appendToBody: {\n type: Boolean,\n default: true\n },\n popperOptions: {\n type: Object,\n default: function _default() {\n return {\n gpuAcceleration: false\n };\n }\n }\n },\n\n data: function data() {\n return {\n showPopper: false,\n currentPlacement: ''\n };\n },\n\n\n watch: {\n value: {\n immediate: true,\n handler: function handler(val) {\n this.showPopper = val;\n this.$emit('input', val);\n }\n },\n\n showPopper: function showPopper(val) {\n val ? this.updatePopper() : this.destroyPopper();\n this.$emit('input', val);\n }\n },\n\n methods: {\n createPopper: function createPopper() {\n var _this = this;\n\n if (this.$isServer) return;\n this.currentPlacement = this.currentPlacement || this.placement;\n if (!/^(top|bottom|left|right)(-start|-end)?$/g.test(this.currentPlacement)) {\n return;\n }\n\n var options = this.popperOptions;\n var popper = this.popperElm = this.popperElm || this.popper || this.$refs.popper;\n var reference = this.referenceElm = this.referenceElm || this.reference || this.$refs.reference;\n\n if (!reference && this.$slots.reference && this.$slots.reference[0]) {\n reference = this.referenceElm = this.$slots.reference[0].elm;\n }\n\n if (!popper || !reference) return;\n if (this.visibleArrow) this.appendArrow(popper);\n if (this.appendToBody) document.body.appendChild(this.popperElm);\n if (this.popperJS && this.popperJS.destroy) {\n this.popperJS.destroy();\n }\n\n options.placement = this.currentPlacement;\n options.offset = this.offset;\n this.popperJS = new PopperJS(reference, popper, options);\n this.popperJS.onCreate(function (_) {\n _this.$emit('created', _this);\n _this.resetTransformOrigin();\n _this.$nextTick(_this.updatePopper);\n });\n if (typeof options.onUpdate === 'function') {\n this.popperJS.onUpdate(options.onUpdate);\n }\n this.popperJS._popper.style.zIndex = _popup.PopupManager.nextZIndex();\n this.popperElm.addEventListener('click', stop);\n },\n updatePopper: function updatePopper() {\n this.popperJS ? this.popperJS.update() : this.createPopper();\n },\n doDestroy: function doDestroy() {\n /* istanbul ignore if */\n if (this.showPopper || !this.popperJS) return;\n this.popperJS.destroy();\n this.popperJS = null;\n },\n destroyPopper: function destroyPopper() {\n if (this.popperJS) {\n this.resetTransformOrigin();\n }\n },\n resetTransformOrigin: function resetTransformOrigin() {\n var placementMap = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left'\n };\n var placement = this.popperJS._popper.getAttribute('x-placement').split('-')[0];\n var origin = placementMap[placement];\n this.popperJS._popper.style.transformOrigin = ['top', 'bottom'].indexOf(placement) > -1 ? 'center ' + origin : origin + ' center';\n },\n appendArrow: function appendArrow(element) {\n var hash = void 0;\n if (this.appended) {\n return;\n }\n\n this.appended = true;\n\n for (var item in element.attributes) {\n if (/^_v-/.test(element.attributes[item].name)) {\n hash = element.attributes[item].name;\n break;\n }\n }\n\n var arrow = document.createElement('div');\n\n if (hash) {\n arrow.setAttribute(hash, '');\n }\n arrow.setAttribute('x-arrow', '');\n arrow.className = 'popper__arrow';\n element.appendChild(arrow);\n }\n },\n\n beforeDestroy: function beforeDestroy() {\n this.doDestroy();\n if (this.popperElm && this.popperElm.parentNode === document.body) {\n this.popperElm.removeEventListener('click', stop);\n document.body.removeChild(this.popperElm);\n }\n },\n\n\n // call destroy in keep-alive mode\n deactivated: function deactivated() {\n this.$options.beforeDestroy[0].call(this);\n }\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdnVlLXBvcHBlci5qcz83Y2FjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RixpRUFBaUU7QUFDakU7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxZQUFZO0FBQ3ZCLFdBQVcsWUFBWTtBQUN2QixXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxpQkFBaUI7QUFDakIsY0FBYztBQUNkO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjEwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3Z1ZSA9IHJlcXVpcmUoJ3Z1ZScpO1xuXG52YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG52YXIgX3BvcHVwID0gcmVxdWlyZSgnZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXAnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIFBvcHBlckpTID0gX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyID8gZnVuY3Rpb24gKCkge30gOiByZXF1aXJlKCcuL3BvcHBlcicpO1xudmFyIHN0b3AgPSBmdW5jdGlvbiBzdG9wKGUpIHtcbiAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFtyZWZlcmVuY2U9JHJlZnMucmVmZXJlbmNlXSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXIuXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbcG9wcGVyPSRyZWZzLnBvcHBlcl0gLSBUaGUgSFRNTCBlbGVtZW50IHVzZWQgYXMgcG9wcGVyLCBvciBhIGNvbmZpZ3VyYXRpb24gdXNlZCB0byBnZW5lcmF0ZSB0aGUgcG9wcGVyLlxuICogQHBhcmFtIHtTdHJpbmd9IFtwbGFjZW1lbnQ9YnV0dG9uXSAtIFBsYWNlbWVudCBvZiB0aGUgcG9wcGVyIGFjY2VwdGVkIHZhbHVlczogdG9wKC1zdGFydCwgLWVuZCksIHJpZ2h0KC1zdGFydCwgLWVuZCksIGJvdHRvbSgtc3RhcnQsIC1lbmQpLCBsZWZ0KC1zdGFydCwgLWVuZClcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb2Zmc2V0PTBdIC0gQW1vdW50IG9mIHBpeGVscyB0aGUgcG9wcGVyIHdpbGwgYmUgc2hpZnRlZCAoY2FuIGJlIG5lZ2F0aXZlKS5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3Zpc2libGU9ZmFsc2VdIFZpc2liaWxpdHkgb2YgdGhlIHBvcHVwIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFt2aXNpYmxlLWFycm93PWZhbHNlXSBWaXNpYmlsaXR5IG9mIHRoZSBhcnJvdywgbm8gc3R5bGUuXG4gKi9cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgcHJvcHM6IHtcbiAgICBwbGFjZW1lbnQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdib3R0b20nXG4gICAgfSxcbiAgICBib3VuZGFyaWVzUGFkZGluZzoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogNVxuICAgIH0sXG4gICAgcmVmZXJlbmNlOiB7fSxcbiAgICBwb3BwZXI6IHt9LFxuICAgIG9mZnNldDoge1xuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG4gICAgdmFsdWU6IEJvb2xlYW4sXG4gICAgdmlzaWJsZUFycm93OiBCb29sZWFuLFxuICAgIHRyYW5zaXRpb246IFN0cmluZyxcbiAgICBhcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBwb3BwZXJPcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBncHVBY2NlbGVyYXRpb246IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3BwZXI6IGZhbHNlLFxuICAgICAgY3VycmVudFBsYWNlbWVudDogJydcbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZToge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWwpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wcGVyID0gdmFsO1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3dQb3BwZXI6IGZ1bmN0aW9uIHNob3dQb3BwZXIodmFsKSB7XG4gICAgICB2YWwgPyB0aGlzLnVwZGF0ZVBvcHBlcigpIDogdGhpcy5kZXN0cm95UG9wcGVyKCk7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbCk7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBjcmVhdGVQb3BwZXI6IGZ1bmN0aW9uIGNyZWF0ZVBvcHBlcigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuICAgICAgdGhpcy5jdXJyZW50UGxhY2VtZW50ID0gdGhpcy5jdXJyZW50UGxhY2VtZW50IHx8IHRoaXMucGxhY2VtZW50O1xuICAgICAgaWYgKCEvXih0b3B8Ym90dG9tfGxlZnR8cmlnaHQpKC1zdGFydHwtZW5kKT8kL2cudGVzdCh0aGlzLmN1cnJlbnRQbGFjZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLnBvcHBlck9wdGlvbnM7XG4gICAgICB2YXIgcG9wcGVyID0gdGhpcy5wb3BwZXJFbG0gPSB0aGlzLnBvcHBlckVsbSB8fCB0aGlzLnBvcHBlciB8fCB0aGlzLiRyZWZzLnBvcHBlcjtcbiAgICAgIHZhciByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMucmVmZXJlbmNlRWxtIHx8IHRoaXMucmVmZXJlbmNlIHx8IHRoaXMuJHJlZnMucmVmZXJlbmNlO1xuXG4gICAgICBpZiAoIXJlZmVyZW5jZSAmJiB0aGlzLiRzbG90cy5yZWZlcmVuY2UgJiYgdGhpcy4kc2xvdHMucmVmZXJlbmNlWzBdKSB7XG4gICAgICAgIHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy4kc2xvdHMucmVmZXJlbmNlWzBdLmVsbTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwb3BwZXIgfHwgIXJlZmVyZW5jZSkgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMudmlzaWJsZUFycm93KSB0aGlzLmFwcGVuZEFycm93KHBvcHBlcik7XG4gICAgICBpZiAodGhpcy5hcHBlbmRUb0JvZHkpIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5wb3BwZXJFbG0pO1xuICAgICAgaWYgKHRoaXMucG9wcGVySlMgJiYgdGhpcy5wb3BwZXJKUy5kZXN0cm95KSB7XG4gICAgICAgIHRoaXMucG9wcGVySlMuZGVzdHJveSgpO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zLnBsYWNlbWVudCA9IHRoaXMuY3VycmVudFBsYWNlbWVudDtcbiAgICAgIG9wdGlvbnMub2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICB0aGlzLnBvcHBlckpTID0gbmV3IFBvcHBlckpTKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zKTtcbiAgICAgIHRoaXMucG9wcGVySlMub25DcmVhdGUoZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgX3RoaXMuJGVtaXQoJ2NyZWF0ZWQnLCBfdGhpcyk7XG4gICAgICAgIF90aGlzLnJlc2V0VHJhbnNmb3JtT3JpZ2luKCk7XG4gICAgICAgIF90aGlzLiRuZXh0VGljayhfdGhpcy51cGRhdGVQb3BwZXIpO1xuICAgICAgfSk7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMub25VcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5wb3BwZXJKUy5vblVwZGF0ZShvcHRpb25zLm9uVXBkYXRlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucG9wcGVySlMuX3BvcHBlci5zdHlsZS56SW5kZXggPSBfcG9wdXAuUG9wdXBNYW5hZ2VyLm5leHRaSW5kZXgoKTtcbiAgICAgIHRoaXMucG9wcGVyRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3RvcCk7XG4gICAgfSxcbiAgICB1cGRhdGVQb3BwZXI6IGZ1bmN0aW9uIHVwZGF0ZVBvcHBlcigpIHtcbiAgICAgIHRoaXMucG9wcGVySlMgPyB0aGlzLnBvcHBlckpTLnVwZGF0ZSgpIDogdGhpcy5jcmVhdGVQb3BwZXIoKTtcbiAgICB9LFxuICAgIGRvRGVzdHJveTogZnVuY3Rpb24gZG9EZXN0cm95KCkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAodGhpcy5zaG93UG9wcGVyIHx8ICF0aGlzLnBvcHBlckpTKSByZXR1cm47XG4gICAgICB0aGlzLnBvcHBlckpTLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMucG9wcGVySlMgPSBudWxsO1xuICAgIH0sXG4gICAgZGVzdHJveVBvcHBlcjogZnVuY3Rpb24gZGVzdHJveVBvcHBlcigpIHtcbiAgICAgIGlmICh0aGlzLnBvcHBlckpTKSB7XG4gICAgICAgIHRoaXMucmVzZXRUcmFuc2Zvcm1PcmlnaW4oKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlc2V0VHJhbnNmb3JtT3JpZ2luOiBmdW5jdGlvbiByZXNldFRyYW5zZm9ybU9yaWdpbigpIHtcbiAgICAgIHZhciBwbGFjZW1lbnRNYXAgPSB7XG4gICAgICAgIHRvcDogJ2JvdHRvbScsXG4gICAgICAgIGJvdHRvbTogJ3RvcCcsXG4gICAgICAgIGxlZnQ6ICdyaWdodCcsXG4gICAgICAgIHJpZ2h0OiAnbGVmdCdcbiAgICAgIH07XG4gICAgICB2YXIgcGxhY2VtZW50ID0gdGhpcy5wb3BwZXJKUy5fcG9wcGVyLmdldEF0dHJpYnV0ZSgneC1wbGFjZW1lbnQnKS5zcGxpdCgnLScpWzBdO1xuICAgICAgdmFyIG9yaWdpbiA9IHBsYWNlbWVudE1hcFtwbGFjZW1lbnRdO1xuICAgICAgdGhpcy5wb3BwZXJKUy5fcG9wcGVyLnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSA+IC0xID8gJ2NlbnRlciAnICsgb3JpZ2luIDogb3JpZ2luICsgJyBjZW50ZXInO1xuICAgIH0sXG4gICAgYXBwZW5kQXJyb3c6IGZ1bmN0aW9uIGFwcGVuZEFycm93KGVsZW1lbnQpIHtcbiAgICAgIHZhciBoYXNoID0gdm9pZCAwO1xuICAgICAgaWYgKHRoaXMuYXBwZW5kZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFwcGVuZGVkID0gdHJ1ZTtcblxuICAgICAgZm9yICh2YXIgaXRlbSBpbiBlbGVtZW50LmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgaWYgKC9eX3YtLy50ZXN0KGVsZW1lbnQuYXR0cmlidXRlc1tpdGVtXS5uYW1lKSkge1xuICAgICAgICAgIGhhc2ggPSBlbGVtZW50LmF0dHJpYnV0ZXNbaXRlbV0ubmFtZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgYXJyb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgaWYgKGhhc2gpIHtcbiAgICAgICAgYXJyb3cuc2V0QXR0cmlidXRlKGhhc2gsICcnKTtcbiAgICAgIH1cbiAgICAgIGFycm93LnNldEF0dHJpYnV0ZSgneC1hcnJvdycsICcnKTtcbiAgICAgIGFycm93LmNsYXNzTmFtZSA9ICdwb3BwZXJfX2Fycm93JztcbiAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoYXJyb3cpO1xuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZG9EZXN0cm95KCk7XG4gICAgaWYgKHRoaXMucG9wcGVyRWxtICYmIHRoaXMucG9wcGVyRWxtLnBhcmVudE5vZGUgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIHRoaXMucG9wcGVyRWxtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc3RvcCk7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMucG9wcGVyRWxtKTtcbiAgICB9XG4gIH0sXG5cblxuICAvLyBjYWxsIGRlc3Ryb3kgaW4ga2VlcC1hbGl2ZSBtb2RlXG4gIGRlYWN0aXZhdGVkOiBmdW5jdGlvbiBkZWFjdGl2YXRlZCgpIHtcbiAgICB0aGlzLiRvcHRpb25zLmJlZm9yZURlc3Ryb3lbMF0uY2FsbCh0aGlzKTtcbiAgfVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy92dWUtcG9wcGVyLmpzXG4vLyBtb2R1bGUgaWQgPSAxMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///10\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\n\nexports.default = function () {\n if (_vue2.default.prototype.$isServer) return 0;\n if (scrollBarWidth !== undefined) return scrollBarWidth;\n\n var outer = document.createElement('div');\n outer.className = 'el-scrollbar__wrap';\n outer.style.visibility = 'hidden';\n outer.style.width = '100px';\n outer.style.position = 'absolute';\n outer.style.top = '-9999px';\n document.body.appendChild(outer);\n\n var widthNoScroll = outer.offsetWidth;\n outer.style.overflow = 'scroll';\n\n var inner = document.createElement('div');\n inner.style.width = '100%';\n outer.appendChild(inner);\n\n var widthWithScroll = inner.offsetWidth;\n outer.parentNode.removeChild(outer);\n scrollBarWidth = widthNoScroll - widthWithScroll;\n\n return scrollBarWidth;\n};\n\nvar _vue = __webpack_require__(2);\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar scrollBarWidth = void 0;\n\n;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsYmFyLXdpZHRoLmpzP2U5M2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3Rjs7QUFFQSIsImZpbGUiOiIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAoX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm4gMDtcbiAgaWYgKHNjcm9sbEJhcldpZHRoICE9PSB1bmRlZmluZWQpIHJldHVybiBzY3JvbGxCYXJXaWR0aDtcblxuICB2YXIgb3V0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgb3V0ZXIuY2xhc3NOYW1lID0gJ2VsLXNjcm9sbGJhcl9fd3JhcCc7XG4gIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgb3V0ZXIuc3R5bGUud2lkdGggPSAnMTAwcHgnO1xuICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gIG91dGVyLnN0eWxlLnRvcCA9ICctOTk5OXB4JztcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlcik7XG5cbiAgdmFyIHdpZHRoTm9TY3JvbGwgPSBvdXRlci5vZmZzZXRXaWR0aDtcbiAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcblxuICB2YXIgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgaW5uZXIuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gIG91dGVyLmFwcGVuZENoaWxkKGlubmVyKTtcblxuICB2YXIgd2lkdGhXaXRoU2Nyb2xsID0gaW5uZXIub2Zmc2V0V2lkdGg7XG4gIG91dGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob3V0ZXIpO1xuICBzY3JvbGxCYXJXaWR0aCA9IHdpZHRoTm9TY3JvbGwgLSB3aWR0aFdpdGhTY3JvbGw7XG5cbiAgcmV0dXJuIHNjcm9sbEJhcldpZHRoO1xufTtcblxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIHNjcm9sbEJhcldpZHRoID0gdm9pZCAwO1xuXG47XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsYmFyLXdpZHRoLmpzXG4vLyBtb2R1bGUgaWQgPSAxMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///11\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\n/* Modified from https://github.com/sdecima/javascript-detect-element-resize\n * version: 0.5.3\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2013 Sebastián Décima\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n */\nvar isServer = typeof window === 'undefined';\n\n/* istanbul ignore next */\nvar requestFrame = function () {\n if (isServer) return;\n var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (fn) {\n return window.setTimeout(fn, 20);\n };\n return function (fn) {\n return raf(fn);\n };\n}();\n\n/* istanbul ignore next */\nvar cancelFrame = function () {\n if (isServer) return;\n var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout;\n return function (id) {\n return cancel(id);\n };\n}();\n\n/* istanbul ignore next */\nvar resetTrigger = function resetTrigger(element) {\n var trigger = element.__resizeTrigger__;\n var expand = trigger.firstElementChild;\n var contract = trigger.lastElementChild;\n var expandChild = expand.firstElementChild;\n\n contract.scrollLeft = contract.scrollWidth;\n contract.scrollTop = contract.scrollHeight;\n expandChild.style.width = expand.offsetWidth + 1 + 'px';\n expandChild.style.height = expand.offsetHeight + 1 + 'px';\n expand.scrollLeft = expand.scrollWidth;\n expand.scrollTop = expand.scrollHeight;\n};\n\n/* istanbul ignore next */\nvar checkTriggers = function checkTriggers(element) {\n return element.offsetWidth !== element.__resizeLast__.width || element.offsetHeight !== element.__resizeLast__.height;\n};\n\n/* istanbul ignore next */\nvar scrollListener = function scrollListener(event) {\n var _this = this;\n\n resetTrigger(this);\n if (this.__resizeRAF__) cancelFrame(this.__resizeRAF__);\n this.__resizeRAF__ = requestFrame(function () {\n if (checkTriggers(_this)) {\n _this.__resizeLast__.width = _this.offsetWidth;\n _this.__resizeLast__.height = _this.offsetHeight;\n _this.__resizeListeners__.forEach(function (fn) {\n fn.call(_this, event);\n });\n }\n });\n};\n\n/* Detect CSS Animations support to detect element display/re-attach */\nvar attachEvent = isServer ? {} : document.attachEvent;\nvar DOM_PREFIXES = 'Webkit Moz O ms'.split(' ');\nvar START_EVENTS = 'webkitAnimationStart animationstart oAnimationStart MSAnimationStart'.split(' ');\nvar RESIZE_ANIMATION_NAME = 'resizeanim';\nvar animation = false;\nvar keyFramePrefix = '';\nvar animationStartEvent = 'animationstart';\n\n/* istanbul ignore next */\nif (!attachEvent && !isServer) {\n var testElement = document.createElement('fakeelement');\n if (testElement.style.animationName !== undefined) {\n animation = true;\n }\n\n if (animation === false) {\n var prefix = '';\n for (var i = 0; i < DOM_PREFIXES.length; i++) {\n if (testElement.style[DOM_PREFIXES[i] + 'AnimationName'] !== undefined) {\n prefix = DOM_PREFIXES[i];\n keyFramePrefix = '-' + prefix.toLowerCase() + '-';\n animationStartEvent = START_EVENTS[i];\n animation = true;\n break;\n }\n }\n }\n}\n\nvar stylesCreated = false;\n/* istanbul ignore next */\nvar createStyles = function createStyles() {\n if (!stylesCreated && !isServer) {\n var animationKeyframes = '@' + keyFramePrefix + 'keyframes ' + RESIZE_ANIMATION_NAME + ' { from { opacity: 0; } to { opacity: 0; } } ';\n var animationStyle = keyFramePrefix + 'animation: 1ms ' + RESIZE_ANIMATION_NAME + ';';\n\n // opacity: 0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\n var css = animationKeyframes + '\\n .resize-triggers { ' + animationStyle + ' visibility: hidden; opacity: 0; }\\n .resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \" \"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; z-index: -1 }\\n .resize-triggers > div { background: #eee; overflow: auto; }\\n .contract-trigger:before { width: 200%; height: 200%; }';\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n\n style.type = 'text/css';\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n\n head.appendChild(style);\n stylesCreated = true;\n }\n};\n\n/* istanbul ignore next */\nvar addResizeListener = exports.addResizeListener = function addResizeListener(element, fn) {\n if (isServer) return;\n if (attachEvent) {\n element.attachEvent('onresize', fn);\n } else {\n if (!element.__resizeTrigger__) {\n if (getComputedStyle(element).position === 'static') {\n element.style.position = 'relative';\n }\n createStyles();\n element.__resizeLast__ = {};\n element.__resizeListeners__ = [];\n\n var resizeTrigger = element.__resizeTrigger__ = document.createElement('div');\n resizeTrigger.className = 'resize-triggers';\n resizeTrigger.innerHTML = '<div class=\"expand-trigger\"><div></div></div><div class=\"contract-trigger\"></div>';\n element.appendChild(resizeTrigger);\n\n resetTrigger(element);\n element.addEventListener('scroll', scrollListener, true);\n\n /* Listen for a css animation to detect element display/re-attach */\n if (animationStartEvent) {\n resizeTrigger.addEventListener(animationStartEvent, function (event) {\n if (event.animationName === RESIZE_ANIMATION_NAME) {\n resetTrigger(element);\n }\n });\n }\n }\n element.__resizeListeners__.push(fn);\n }\n};\n\n/* istanbul ignore next */\nvar removeResizeListener = exports.removeResizeListener = function removeResizeListener(element, fn) {\n if (attachEvent) {\n element.detachEvent('onresize', fn);\n } else {\n element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\n if (!element.__resizeListeners__.length) {\n element.removeEventListener('scroll', scrollListener);\n element.__resizeTrigger__ = !element.removeChild(element.__resizeTrigger__);\n }\n }\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcmVzaXplLWV2ZW50LmpzP2QzNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIseUJBQXlCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEZBQThGLE9BQU8sWUFBWSxFQUFFLEtBQUssWUFBWSxFQUFFLEVBQUU7QUFDeEksd0ZBQXdGOztBQUV4RjtBQUNBLDhEQUE4RCwyQ0FBMkMsWUFBWSxFQUFFLDRFQUE0RSxjQUFjLGdCQUFnQixvQkFBb0IsUUFBUSxTQUFTLGNBQWMsYUFBYSxrQkFBa0IsY0FBYyxnQ0FBZ0Msa0JBQWtCLGdCQUFnQixFQUFFLGtDQUFrQyxhQUFhLGNBQWMsRUFBRTs7QUFFcGM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMTIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4vKiBNb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zZGVjaW1hL2phdmFzY3JpcHQtZGV0ZWN0LWVsZW1lbnQtcmVzaXplXG4gKiB2ZXJzaW9uOiAwLjUuM1xuICpcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMyBTZWJhc3Rpw6FuIETDqWNpbWFcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mXG4gKiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluXG4gKiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvXG4gKiB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZlxuICogdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTXG4gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1JcbiAqIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUlxuICogSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU5cbiAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gKlxuICovXG52YXIgaXNTZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciByZXF1ZXN0RnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChpc1NlcnZlcikgcmV0dXJuO1xuICB2YXIgcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCB3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgZnVuY3Rpb24gKGZuKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGZuLCAyMCk7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICByZXR1cm4gcmFmKGZuKTtcbiAgfTtcbn0oKTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciBjYW5jZWxGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKGlzU2VydmVyKSByZXR1cm47XG4gIHZhciBjYW5jZWwgPSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgfHwgd2luZG93Lm1vekNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8IHdpbmRvdy53ZWJraXRDYW5jZWxBbmltYXRpb25GcmFtZSB8fCB3aW5kb3cuY2xlYXJUaW1lb3V0O1xuICByZXR1cm4gZnVuY3Rpb24gKGlkKSB7XG4gICAgcmV0dXJuIGNhbmNlbChpZCk7XG4gIH07XG59KCk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG52YXIgcmVzZXRUcmlnZ2VyID0gZnVuY3Rpb24gcmVzZXRUcmlnZ2VyKGVsZW1lbnQpIHtcbiAgdmFyIHRyaWdnZXIgPSBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcl9fO1xuICB2YXIgZXhwYW5kID0gdHJpZ2dlci5maXJzdEVsZW1lbnRDaGlsZDtcbiAgdmFyIGNvbnRyYWN0ID0gdHJpZ2dlci5sYXN0RWxlbWVudENoaWxkO1xuICB2YXIgZXhwYW5kQ2hpbGQgPSBleHBhbmQuZmlyc3RFbGVtZW50Q2hpbGQ7XG5cbiAgY29udHJhY3Quc2Nyb2xsTGVmdCA9IGNvbnRyYWN0LnNjcm9sbFdpZHRoO1xuICBjb250cmFjdC5zY3JvbGxUb3AgPSBjb250cmFjdC5zY3JvbGxIZWlnaHQ7XG4gIGV4cGFuZENoaWxkLnN0eWxlLndpZHRoID0gZXhwYW5kLm9mZnNldFdpZHRoICsgMSArICdweCc7XG4gIGV4cGFuZENoaWxkLnN0eWxlLmhlaWdodCA9IGV4cGFuZC5vZmZzZXRIZWlnaHQgKyAxICsgJ3B4JztcbiAgZXhwYW5kLnNjcm9sbExlZnQgPSBleHBhbmQuc2Nyb2xsV2lkdGg7XG4gIGV4cGFuZC5zY3JvbGxUb3AgPSBleHBhbmQuc2Nyb2xsSGVpZ2h0O1xufTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciBjaGVja1RyaWdnZXJzID0gZnVuY3Rpb24gY2hlY2tUcmlnZ2VycyhlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50Lm9mZnNldFdpZHRoICE9PSBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLndpZHRoIHx8IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICE9PSBlbGVtZW50Ll9fcmVzaXplTGFzdF9fLmhlaWdodDtcbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG52YXIgc2Nyb2xsTGlzdGVuZXIgPSBmdW5jdGlvbiBzY3JvbGxMaXN0ZW5lcihldmVudCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHJlc2V0VHJpZ2dlcih0aGlzKTtcbiAgaWYgKHRoaXMuX19yZXNpemVSQUZfXykgY2FuY2VsRnJhbWUodGhpcy5fX3Jlc2l6ZVJBRl9fKTtcbiAgdGhpcy5fX3Jlc2l6ZVJBRl9fID0gcmVxdWVzdEZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoY2hlY2tUcmlnZ2VycyhfdGhpcykpIHtcbiAgICAgIF90aGlzLl9fcmVzaXplTGFzdF9fLndpZHRoID0gX3RoaXMub2Zmc2V0V2lkdGg7XG4gICAgICBfdGhpcy5fX3Jlc2l6ZUxhc3RfXy5oZWlnaHQgPSBfdGhpcy5vZmZzZXRIZWlnaHQ7XG4gICAgICBfdGhpcy5fX3Jlc2l6ZUxpc3RlbmVyc19fLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIGZuLmNhbGwoX3RoaXMsIGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKiBEZXRlY3QgQ1NTIEFuaW1hdGlvbnMgc3VwcG9ydCB0byBkZXRlY3QgZWxlbWVudCBkaXNwbGF5L3JlLWF0dGFjaCAqL1xudmFyIGF0dGFjaEV2ZW50ID0gaXNTZXJ2ZXIgPyB7fSA6IGRvY3VtZW50LmF0dGFjaEV2ZW50O1xudmFyIERPTV9QUkVGSVhFUyA9ICdXZWJraXQgTW96IE8gbXMnLnNwbGl0KCcgJyk7XG52YXIgU1RBUlRfRVZFTlRTID0gJ3dlYmtpdEFuaW1hdGlvblN0YXJ0IGFuaW1hdGlvbnN0YXJ0IG9BbmltYXRpb25TdGFydCBNU0FuaW1hdGlvblN0YXJ0Jy5zcGxpdCgnICcpO1xudmFyIFJFU0laRV9BTklNQVRJT05fTkFNRSA9ICdyZXNpemVhbmltJztcbnZhciBhbmltYXRpb24gPSBmYWxzZTtcbnZhciBrZXlGcmFtZVByZWZpeCA9ICcnO1xudmFyIGFuaW1hdGlvblN0YXJ0RXZlbnQgPSAnYW5pbWF0aW9uc3RhcnQnO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKCFhdHRhY2hFdmVudCAmJiAhaXNTZXJ2ZXIpIHtcbiAgdmFyIHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZmFrZWVsZW1lbnQnKTtcbiAgaWYgKHRlc3RFbGVtZW50LnN0eWxlLmFuaW1hdGlvbk5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGFuaW1hdGlvbiA9IHRydWU7XG4gIH1cblxuICBpZiAoYW5pbWF0aW9uID09PSBmYWxzZSkge1xuICAgIHZhciBwcmVmaXggPSAnJztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IERPTV9QUkVGSVhFUy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRlc3RFbGVtZW50LnN0eWxlW0RPTV9QUkVGSVhFU1tpXSArICdBbmltYXRpb25OYW1lJ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcmVmaXggPSBET01fUFJFRklYRVNbaV07XG4gICAgICAgIGtleUZyYW1lUHJlZml4ID0gJy0nICsgcHJlZml4LnRvTG93ZXJDYXNlKCkgKyAnLSc7XG4gICAgICAgIGFuaW1hdGlvblN0YXJ0RXZlbnQgPSBTVEFSVF9FVkVOVFNbaV07XG4gICAgICAgIGFuaW1hdGlvbiA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgc3R5bGVzQ3JlYXRlZCA9IGZhbHNlO1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciBjcmVhdGVTdHlsZXMgPSBmdW5jdGlvbiBjcmVhdGVTdHlsZXMoKSB7XG4gIGlmICghc3R5bGVzQ3JlYXRlZCAmJiAhaXNTZXJ2ZXIpIHtcbiAgICB2YXIgYW5pbWF0aW9uS2V5ZnJhbWVzID0gJ0AnICsga2V5RnJhbWVQcmVmaXggKyAna2V5ZnJhbWVzICcgKyBSRVNJWkVfQU5JTUFUSU9OX05BTUUgKyAnIHsgZnJvbSB7IG9wYWNpdHk6IDA7IH0gdG8geyBvcGFjaXR5OiAwOyB9IH0gJztcbiAgICB2YXIgYW5pbWF0aW9uU3R5bGUgPSBrZXlGcmFtZVByZWZpeCArICdhbmltYXRpb246IDFtcyAnICsgUkVTSVpFX0FOSU1BVElPTl9OQU1FICsgJzsnO1xuXG4gICAgLy8gb3BhY2l0eTogMCB3b3JrcyBhcm91bmQgYSBjaHJvbWUgYnVnIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0yODYzNjBcbiAgICB2YXIgY3NzID0gYW5pbWF0aW9uS2V5ZnJhbWVzICsgJ1xcbiAgICAgIC5yZXNpemUtdHJpZ2dlcnMgeyAnICsgYW5pbWF0aW9uU3R5bGUgKyAnIHZpc2liaWxpdHk6IGhpZGRlbjsgb3BhY2l0eTogMDsgfVxcbiAgICAgIC5yZXNpemUtdHJpZ2dlcnMsIC5yZXNpemUtdHJpZ2dlcnMgPiBkaXYsIC5jb250cmFjdC10cmlnZ2VyOmJlZm9yZSB7IGNvbnRlbnQ6IFwiIFwiOyBkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IHotaW5kZXg6IC0xIH1cXG4gICAgICAucmVzaXplLXRyaWdnZXJzID4gZGl2IHsgYmFja2dyb3VuZDogI2VlZTsgb3ZlcmZsb3c6IGF1dG87IH1cXG4gICAgICAuY29udHJhY3QtdHJpZ2dlcjpiZWZvcmUgeyB3aWR0aDogMjAwJTsgaGVpZ2h0OiAyMDAlOyB9JztcblxuICAgIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICAgIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG5cbiAgICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcbiAgICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICB9XG5cbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICBzdHlsZXNDcmVhdGVkID0gdHJ1ZTtcbiAgfVxufTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciBhZGRSZXNpemVMaXN0ZW5lciA9IGV4cG9ydHMuYWRkUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRSZXNpemVMaXN0ZW5lcihlbGVtZW50LCBmbikge1xuICBpZiAoaXNTZXJ2ZXIpIHJldHVybjtcbiAgaWYgKGF0dGFjaEV2ZW50KSB7XG4gICAgZWxlbWVudC5hdHRhY2hFdmVudCgnb25yZXNpemUnLCBmbik7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcl9fKSB7XG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgICB9XG4gICAgICBjcmVhdGVTdHlsZXMoKTtcbiAgICAgIGVsZW1lbnQuX19yZXNpemVMYXN0X18gPSB7fTtcbiAgICAgIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXyA9IFtdO1xuXG4gICAgICB2YXIgcmVzaXplVHJpZ2dlciA9IGVsZW1lbnQuX19yZXNpemVUcmlnZ2VyX18gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHJlc2l6ZVRyaWdnZXIuY2xhc3NOYW1lID0gJ3Jlc2l6ZS10cmlnZ2Vycyc7XG4gICAgICByZXNpemVUcmlnZ2VyLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiZXhwYW5kLXRyaWdnZXJcIj48ZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9XCJjb250cmFjdC10cmlnZ2VyXCI+PC9kaXY+JztcbiAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQocmVzaXplVHJpZ2dlcik7XG5cbiAgICAgIHJlc2V0VHJpZ2dlcihlbGVtZW50KTtcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2Nyb2xsTGlzdGVuZXIsIHRydWUpO1xuXG4gICAgICAvKiBMaXN0ZW4gZm9yIGEgY3NzIGFuaW1hdGlvbiB0byBkZXRlY3QgZWxlbWVudCBkaXNwbGF5L3JlLWF0dGFjaCAqL1xuICAgICAgaWYgKGFuaW1hdGlvblN0YXJ0RXZlbnQpIHtcbiAgICAgICAgcmVzaXplVHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKGFuaW1hdGlvblN0YXJ0RXZlbnQsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSBSRVNJWkVfQU5JTUFUSU9OX05BTUUpIHtcbiAgICAgICAgICAgIHJlc2V0VHJpZ2dlcihlbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18ucHVzaChmbik7XG4gIH1cbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG52YXIgcmVtb3ZlUmVzaXplTGlzdGVuZXIgPSBleHBvcnRzLnJlbW92ZVJlc2l6ZUxpc3RlbmVyID0gZnVuY3Rpb24gcmVtb3ZlUmVzaXplTGlzdGVuZXIoZWxlbWVudCwgZm4pIHtcbiAgaWYgKGF0dGFjaEV2ZW50KSB7XG4gICAgZWxlbWVudC5kZXRhY2hFdmVudCgnb25yZXNpemUnLCBmbik7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLnNwbGljZShlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18uaW5kZXhPZihmbiksIDEpO1xuICAgIGlmICghZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmxlbmd0aCkge1xuICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzY3JvbGxMaXN0ZW5lcik7XG4gICAgICBlbGVtZW50Ll9fcmVzaXplVHJpZ2dlcl9fID0gIWVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudC5fX3Jlc2l6ZVRyaWdnZXJfXyk7XG4gICAgfVxuICB9XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL3Jlc2l6ZS1ldmVudC5qc1xuLy8gbW9kdWxlIGlkID0gMTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///12\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\nexports.i18n = exports.use = exports.t = undefined;\n\nvar _zhCN = __webpack_require__(33);\n\nvar _zhCN2 = _interopRequireDefault(_zhCN);\n\nvar _vue = __webpack_require__(2);\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _deepmerge = __webpack_require__(34);\n\nvar _deepmerge2 = _interopRequireDefault(_deepmerge);\n\nvar _format = __webpack_require__(35);\n\nvar _format2 = _interopRequireDefault(_format);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar format = (0, _format2.default)(_vue2.default);\nvar lang = _zhCN2.default;\nvar merged = false;\nvar i18nHandler = function i18nHandler() {\n var vuei18n = Object.getPrototypeOf(this || _vue2.default).$t;\n if (typeof vuei18n === 'function' && !!_vue2.default.locale) {\n if (!merged) {\n merged = true;\n _vue2.default.locale(_vue2.default.config.lang, (0, _deepmerge2.default)(lang, _vue2.default.locale(_vue2.default.config.lang) || {}, { clone: true }));\n }\n return vuei18n.apply(this, arguments);\n }\n};\n\nvar t = exports.t = function t(path, options) {\n var value = i18nHandler.apply(this, arguments);\n if (value !== null && value !== undefined) return value;\n\n var array = path.split('.');\n var current = lang;\n\n for (var i = 0, j = array.length; i < j; i++) {\n var property = array[i];\n value = current[property];\n if (i === j - 1) return format(value, options);\n if (!value) return '';\n current = value;\n }\n return '';\n};\n\nvar use = exports.use = function use(l) {\n lang = l || lang;\n};\n\nvar i18n = exports.i18n = function i18n(fn) {\n i18nHandler = fn || i18nHandler;\n};\n\nexports.default = { use: use, t: t, i18n: i18n };\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbG9jYWxlL2luZGV4LmpzP2JhYjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGdCQUFnQjs7QUFFN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBJQUEwSSxHQUFHLGNBQWM7QUFDM0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsbUNBQW1DLE9BQU87QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLG1CQUFtQiIsImZpbGUiOiIxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuaTE4biA9IGV4cG9ydHMudXNlID0gZXhwb3J0cy50ID0gdW5kZWZpbmVkO1xuXG52YXIgX3poQ04gPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi9sb2NhbGUvbGFuZy96aC1DTicpO1xuXG52YXIgX3poQ04yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfemhDTik7XG5cbnZhciBfdnVlID0gcmVxdWlyZSgndnVlJyk7XG5cbnZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZSk7XG5cbnZhciBfZGVlcG1lcmdlID0gcmVxdWlyZSgnZGVlcG1lcmdlJyk7XG5cbnZhciBfZGVlcG1lcmdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlZXBtZXJnZSk7XG5cbnZhciBfZm9ybWF0ID0gcmVxdWlyZSgnLi9mb3JtYXQnKTtcblxudmFyIF9mb3JtYXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZm9ybWF0KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIGZvcm1hdCA9ICgwLCBfZm9ybWF0Mi5kZWZhdWx0KShfdnVlMi5kZWZhdWx0KTtcbnZhciBsYW5nID0gX3poQ04yLmRlZmF1bHQ7XG52YXIgbWVyZ2VkID0gZmFsc2U7XG52YXIgaTE4bkhhbmRsZXIgPSBmdW5jdGlvbiBpMThuSGFuZGxlcigpIHtcbiAgdmFyIHZ1ZWkxOG4gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyB8fCBfdnVlMi5kZWZhdWx0KS4kdDtcbiAgaWYgKHR5cGVvZiB2dWVpMThuID09PSAnZnVuY3Rpb24nICYmICEhX3Z1ZTIuZGVmYXVsdC5sb2NhbGUpIHtcbiAgICBpZiAoIW1lcmdlZCkge1xuICAgICAgbWVyZ2VkID0gdHJ1ZTtcbiAgICAgIF92dWUyLmRlZmF1bHQubG9jYWxlKF92dWUyLmRlZmF1bHQuY29uZmlnLmxhbmcsICgwLCBfZGVlcG1lcmdlMi5kZWZhdWx0KShsYW5nLCBfdnVlMi5kZWZhdWx0LmxvY2FsZShfdnVlMi5kZWZhdWx0LmNvbmZpZy5sYW5nKSB8fCB7fSwgeyBjbG9uZTogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIHJldHVybiB2dWVpMThuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbn07XG5cbnZhciB0ID0gZXhwb3J0cy50ID0gZnVuY3Rpb24gdChwYXRoLCBvcHRpb25zKSB7XG4gIHZhciB2YWx1ZSA9IGkxOG5IYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdmFsdWU7XG5cbiAgdmFyIGFycmF5ID0gcGF0aC5zcGxpdCgnLicpO1xuICB2YXIgY3VycmVudCA9IGxhbmc7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGogPSBhcnJheS5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICB2YXIgcHJvcGVydHkgPSBhcnJheVtpXTtcbiAgICB2YWx1ZSA9IGN1cnJlbnRbcHJvcGVydHldO1xuICAgIGlmIChpID09PSBqIC0gMSkgcmV0dXJuIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICAgIGN1cnJlbnQgPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gJyc7XG59O1xuXG52YXIgdXNlID0gZXhwb3J0cy51c2UgPSBmdW5jdGlvbiB1c2UobCkge1xuICBsYW5nID0gbCB8fCBsYW5nO1xufTtcblxudmFyIGkxOG4gPSBleHBvcnRzLmkxOG4gPSBmdW5jdGlvbiBpMThuKGZuKSB7XG4gIGkxOG5IYW5kbGVyID0gZm4gfHwgaTE4bkhhbmRsZXI7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSB7IHVzZTogdXNlLCB0OiB0LCBpMThuOiBpMThuIH07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbG9jYWxlL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAxM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///13\n")},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _rule = __webpack_require__(1);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _util = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\nfunction type(rule, value, callback, source, options) {\n var ruleType = rule.type;\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n if (validate) {\n if ((0, _util.isEmptyValue)(value, ruleType) && !rule.required) {\n return callback();\n }\n _rule2["default"].required(rule, value, source, errors, options, ruleType);\n if (!(0, _util.isEmptyValue)(value, ruleType)) {\n _rule2["default"].type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexports["default"] = type;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvdHlwZS5qcz8xMTM2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIxNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9ydWxlID0gcmVxdWlyZSgnLi4vcnVsZS8nKTtcblxudmFyIF9ydWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3J1bGUpO1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiB0eXBlKHJ1bGUsIHZhbHVlLCBjYWxsYmFjaywgc291cmNlLCBvcHRpb25zKSB7XG4gIHZhciBydWxlVHlwZSA9IHJ1bGUudHlwZTtcbiAgdmFyIGVycm9ycyA9IFtdO1xuICB2YXIgdmFsaWRhdGUgPSBydWxlLnJlcXVpcmVkIHx8ICFydWxlLnJlcXVpcmVkICYmIHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShydWxlLmZpZWxkKTtcbiAgaWYgKHZhbGlkYXRlKSB7XG4gICAgaWYgKCgwLCBfdXRpbC5pc0VtcHR5VmFsdWUpKHZhbHVlLCBydWxlVHlwZSkgJiYgIXJ1bGUucmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBfcnVsZTJbXCJkZWZhdWx0XCJdLnJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucywgcnVsZVR5cGUpO1xuICAgIGlmICghKDAsIF91dGlsLmlzRW1wdHlWYWx1ZSkodmFsdWUsIHJ1bGVUeXBlKSkge1xuICAgICAgX3J1bGUyW1wiZGVmYXVsdFwiXS50eXBlKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIGNhbGxiYWNrKGVycm9ycyk7XG59XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdHlwZTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2FzeW5jLXZhbGlkYXRvci9saWIvdmFsaWRhdG9yL3R5cGUuanNcbi8vIG1vZHVsZSBpZCA9IDE0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///14\n')},function(module,exports){eval('var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function("return this")() || (1,eval)("this");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === "object")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it\'s\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzPzM2OTgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUMiLCJmaWxlIjoiMTUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZztcclxuXHJcbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXHJcbmcgPSAoZnVuY3Rpb24oKSB7XHJcblx0cmV0dXJuIHRoaXM7XHJcbn0pKCk7XHJcblxyXG50cnkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxyXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSxldmFsKShcInRoaXNcIik7XHJcbn0gY2F0Y2goZSkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXHJcblx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIilcclxuXHRcdGcgPSB3aW5kb3c7XHJcbn1cclxuXHJcbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cclxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcclxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBnO1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanNcbi8vIG1vZHVsZSBpZCA9IDE1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///15\n')},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\n\nvar _vue = __webpack_require__(2);\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _dom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar nodeList = [];\nvar ctx = '@@clickoutsideContext';\n\nvar startClick = void 0;\nvar seed = 0;\n\n!_vue2.default.prototype.$isServer && (0, _dom.on)(document, 'mousedown', function (e) {\n return startClick = e;\n});\n\n!_vue2.default.prototype.$isServer && (0, _dom.on)(document, 'mouseup', function (e) {\n nodeList.forEach(function (node) {\n return node[ctx].documentHandler(e, startClick);\n });\n});\n/**\n * v-clickoutside\n * @desc 点击元素外面才会触发的事件\n * @example\n * ```vue\n * <div v-element-clickoutside=\"handleClose\">\n * ```\n */\nexports.default = {\n bind: function bind(el, binding, vnode) {\n nodeList.push(el);\n var id = seed++;\n var documentHandler = function documentHandler() {\n var mouseup = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var mousedown = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!vnode.context || !mouseup.target || !mousedown.target || el.contains(mouseup.target) || el.contains(mousedown.target) || el === mouseup.target || vnode.context.popperElm && (vnode.context.popperElm.contains(mouseup.target) || vnode.context.popperElm.contains(mousedown.target))) return;\n\n if (binding.expression && el[ctx].methodName && vnode.context[el[ctx].methodName]) {\n vnode.context[el[ctx].methodName]();\n } else {\n el[ctx].bindingFn && el[ctx].bindingFn();\n }\n };\n el[ctx] = {\n id: id,\n documentHandler: documentHandler,\n methodName: binding.expression,\n bindingFn: binding.value\n };\n },\n update: function update(el, binding) {\n el[ctx].methodName = binding.expression;\n el[ctx].bindingFn = binding.value;\n },\n unbind: function unbind(el) {\n var len = nodeList.length;\n\n for (var i = 0; i < len; i++) {\n if (nodeList[i][ctx].id === el[ctx].id) {\n nodeList.splice(i, 1);\n break;\n }\n }\n }\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvY2xpY2tvdXRzaWRlLmpzPzIxMjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSxtQkFBbUIsU0FBUztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxudmFyIF9kb20gPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi91dGlscy9kb20nKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIG5vZGVMaXN0ID0gW107XG52YXIgY3R4ID0gJ0BAY2xpY2tvdXRzaWRlQ29udGV4dCc7XG5cbnZhciBzdGFydENsaWNrID0gdm9pZCAwO1xudmFyIHNlZWQgPSAwO1xuXG4hX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyICYmICgwLCBfZG9tLm9uKShkb2N1bWVudCwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gIHJldHVybiBzdGFydENsaWNrID0gZTtcbn0pO1xuXG4hX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyICYmICgwLCBfZG9tLm9uKShkb2N1bWVudCwgJ21vdXNldXAnLCBmdW5jdGlvbiAoZSkge1xuICBub2RlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGVbY3R4XS5kb2N1bWVudEhhbmRsZXIoZSwgc3RhcnRDbGljayk7XG4gIH0pO1xufSk7XG4vKipcbiAqIHYtY2xpY2tvdXRzaWRlXG4gKiBAZGVzYyDngrnlh7vlhYPntKDlpJbpnaLmiY3kvJrop6blj5HnmoTkuovku7ZcbiAqIEBleGFtcGxlXG4gKiBgYGB2dWVcbiAqIDxkaXYgdi1lbGVtZW50LWNsaWNrb3V0c2lkZT1cImhhbmRsZUNsb3NlXCI+XG4gKiBgYGBcbiAqL1xuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIG5vZGVMaXN0LnB1c2goZWwpO1xuICAgIHZhciBpZCA9IHNlZWQrKztcbiAgICB2YXIgZG9jdW1lbnRIYW5kbGVyID0gZnVuY3Rpb24gZG9jdW1lbnRIYW5kbGVyKCkge1xuICAgICAgdmFyIG1vdXNldXAgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgdmFyIG1vdXNlZG93biA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICAgIGlmICghdm5vZGUuY29udGV4dCB8fCAhbW91c2V1cC50YXJnZXQgfHwgIW1vdXNlZG93bi50YXJnZXQgfHwgZWwuY29udGFpbnMobW91c2V1cC50YXJnZXQpIHx8IGVsLmNvbnRhaW5zKG1vdXNlZG93bi50YXJnZXQpIHx8IGVsID09PSBtb3VzZXVwLnRhcmdldCB8fCB2bm9kZS5jb250ZXh0LnBvcHBlckVsbSAmJiAodm5vZGUuY29udGV4dC5wb3BwZXJFbG0uY29udGFpbnMobW91c2V1cC50YXJnZXQpIHx8IHZub2RlLmNvbnRleHQucG9wcGVyRWxtLmNvbnRhaW5zKG1vdXNlZG93bi50YXJnZXQpKSkgcmV0dXJuO1xuXG4gICAgICBpZiAoYmluZGluZy5leHByZXNzaW9uICYmIGVsW2N0eF0ubWV0aG9kTmFtZSAmJiB2bm9kZS5jb250ZXh0W2VsW2N0eF0ubWV0aG9kTmFtZV0pIHtcbiAgICAgICAgdm5vZGUuY29udGV4dFtlbFtjdHhdLm1ldGhvZE5hbWVdKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbFtjdHhdLmJpbmRpbmdGbiAmJiBlbFtjdHhdLmJpbmRpbmdGbigpO1xuICAgICAgfVxuICAgIH07XG4gICAgZWxbY3R4XSA9IHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIGRvY3VtZW50SGFuZGxlcjogZG9jdW1lbnRIYW5kbGVyLFxuICAgICAgbWV0aG9kTmFtZTogYmluZGluZy5leHByZXNzaW9uLFxuICAgICAgYmluZGluZ0ZuOiBiaW5kaW5nLnZhbHVlXG4gICAgfTtcbiAgfSxcbiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoZWwsIGJpbmRpbmcpIHtcbiAgICBlbFtjdHhdLm1ldGhvZE5hbWUgPSBiaW5kaW5nLmV4cHJlc3Npb247XG4gICAgZWxbY3R4XS5iaW5kaW5nRm4gPSBiaW5kaW5nLnZhbHVlO1xuICB9LFxuICB1bmJpbmQ6IGZ1bmN0aW9uIHVuYmluZChlbCkge1xuICAgIHZhciBsZW4gPSBub2RlTGlzdC5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAobm9kZUxpc3RbaV1bY3R4XS5pZCA9PT0gZWxbY3R4XS5pZCkge1xuICAgICAgICBub2RlTGlzdC5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy9jbGlja291dHNpZGUuanNcbi8vIG1vZHVsZSBpZCA9IDE2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///16\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\nexports.PopupManager = undefined;\n\nvar _vue = __webpack_require__(2);\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _merge = __webpack_require__(9);\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _popupManager = __webpack_require__(31);\n\nvar _popupManager2 = _interopRequireDefault(_popupManager);\n\nvar _scrollbarWidth = __webpack_require__(11);\n\nvar _scrollbarWidth2 = _interopRequireDefault(_scrollbarWidth);\n\nvar _dom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar idSeed = 1;\nvar transitions = [];\n\nvar hookTransition = function hookTransition(transition) {\n if (transitions.indexOf(transition) !== -1) return;\n\n var getVueInstance = function getVueInstance(element) {\n var instance = element.__vue__;\n if (!instance) {\n var textNode = element.previousSibling;\n if (textNode.__vue__) {\n instance = textNode.__vue__;\n }\n }\n return instance;\n };\n\n _vue2.default.transition(transition, {\n afterEnter: function afterEnter(el) {\n var instance = getVueInstance(el);\n\n if (instance) {\n instance.doAfterOpen && instance.doAfterOpen();\n }\n },\n afterLeave: function afterLeave(el) {\n var instance = getVueInstance(el);\n\n if (instance) {\n instance.doAfterClose && instance.doAfterClose();\n }\n }\n });\n};\n\nvar scrollBarWidth = void 0;\n\nvar getDOM = function getDOM(dom) {\n if (dom.nodeType === 3) {\n dom = dom.nextElementSibling || dom.nextSibling;\n getDOM(dom);\n }\n return dom;\n};\n\nexports.default = {\n model: {\n prop: 'visible',\n event: 'visible-change'\n },\n props: {\n visible: {\n type: Boolean,\n default: false\n },\n transition: {\n type: String,\n default: ''\n },\n openDelay: {},\n closeDelay: {},\n zIndex: {},\n modal: {\n type: Boolean,\n default: false\n },\n modalFade: {\n type: Boolean,\n default: true\n },\n modalClass: {},\n modalAppendToBody: {\n type: Boolean,\n default: false\n },\n lockScroll: {\n type: Boolean,\n default: true\n },\n closeOnPressEscape: {\n type: Boolean,\n default: false\n },\n closeOnClickModal: {\n type: Boolean,\n default: false\n }\n },\n\n created: function created() {\n if (this.transition) {\n hookTransition(this.transition);\n }\n },\n beforeMount: function beforeMount() {\n this._popupId = 'popup-' + idSeed++;\n _popupManager2.default.register(this._popupId, this);\n },\n beforeDestroy: function beforeDestroy() {\n _popupManager2.default.deregister(this._popupId);\n _popupManager2.default.closeModal(this._popupId);\n if (this.modal && this.bodyOverflow !== null && this.bodyOverflow !== 'hidden') {\n document.body.style.overflow = this.bodyOverflow;\n document.body.style.paddingRight = this.bodyPaddingRight;\n }\n this.bodyOverflow = null;\n this.bodyPaddingRight = null;\n },\n data: function data() {\n return {\n opened: false,\n bodyOverflow: null,\n bodyPaddingRight: null,\n rendered: false\n };\n },\n\n\n watch: {\n visible: function visible(val) {\n var _this = this;\n\n if (val) {\n if (this._opening) return;\n if (!this.rendered) {\n this.rendered = true;\n _vue2.default.nextTick(function () {\n _this.open();\n });\n } else {\n this.open();\n }\n } else {\n this.close();\n }\n }\n },\n\n methods: {\n open: function open(options) {\n var _this2 = this;\n\n if (!this.rendered) {\n this.rendered = true;\n this.$emit('visible-change', true);\n }\n\n var props = (0, _merge2.default)({}, this.$props || this, options);\n\n if (this._closeTimer) {\n clearTimeout(this._closeTimer);\n this._closeTimer = null;\n }\n clearTimeout(this._openTimer);\n\n var openDelay = Number(props.openDelay);\n if (openDelay > 0) {\n this._openTimer = setTimeout(function () {\n _this2._openTimer = null;\n _this2.doOpen(props);\n }, openDelay);\n } else {\n this.doOpen(props);\n }\n },\n doOpen: function doOpen(props) {\n if (this.$isServer) return;\n if (this.willOpen && !this.willOpen()) return;\n if (this.opened) return;\n\n this._opening = true;\n\n this.$emit('visible-change', true);\n\n var dom = getDOM(this.$el);\n\n var modal = props.modal;\n\n var zIndex = props.zIndex;\n if (zIndex) {\n _popupManager2.default.zIndex = zIndex;\n }\n\n if (modal) {\n if (this._closing) {\n _popupManager2.default.closeModal(this._popupId);\n this._closing = false;\n }\n _popupManager2.default.openModal(this._popupId, _popupManager2.default.nextZIndex(), this.modalAppendToBody ? undefined : dom, props.modalClass, props.modalFade);\n if (props.lockScroll) {\n if (!this.bodyOverflow) {\n this.bodyPaddingRight = document.body.style.paddingRight;\n this.bodyOverflow = document.body.style.overflow;\n }\n scrollBarWidth = (0, _scrollbarWidth2.default)();\n var bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight;\n var bodyOverflowY = (0, _dom.getStyle)(document.body, 'overflowY');\n if (scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === 'scroll')) {\n document.body.style.paddingRight = scrollBarWidth + 'px';\n }\n document.body.style.overflow = 'hidden';\n }\n }\n\n if (getComputedStyle(dom).position === 'static') {\n dom.style.position = 'absolute';\n }\n\n dom.style.zIndex = _popupManager2.default.nextZIndex();\n this.opened = true;\n\n this.onOpen && this.onOpen();\n\n if (!this.transition) {\n this.doAfterOpen();\n }\n },\n doAfterOpen: function doAfterOpen() {\n this._opening = false;\n },\n close: function close() {\n var _this3 = this;\n\n if (this.willClose && !this.willClose()) return;\n\n if (this._openTimer !== null) {\n clearTimeout(this._openTimer);\n this._openTimer = null;\n }\n clearTimeout(this._closeTimer);\n\n var closeDelay = Number(this.closeDelay);\n\n if (closeDelay > 0) {\n this._closeTimer = setTimeout(function () {\n _this3._closeTimer = null;\n _this3.doClose();\n }, closeDelay);\n } else {\n this.doClose();\n }\n },\n doClose: function doClose() {\n var _this4 = this;\n\n this.$emit('visible-change', false);\n this._closing = true;\n\n this.onClose && this.onClose();\n\n if (this.lockScroll) {\n setTimeout(function () {\n if (_this4.modal && _this4.bodyOverflow !== 'hidden') {\n document.body.style.overflow = _this4.bodyOverflow;\n document.body.style.paddingRight = _this4.bodyPaddingRight;\n }\n _this4.bodyOverflow = null;\n _this4.bodyPaddingRight = null;\n }, 200);\n }\n\n this.opened = false;\n\n if (!this.transition) {\n this.doAfterClose();\n }\n },\n doAfterClose: function doAfterClose() {\n _popupManager2.default.closeModal(this._popupId);\n this._closing = false;\n }\n }\n};\nexports.PopupManager = _popupManager2.default;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXAvaW5kZXguanM/ZWM5ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3RjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxpQkFBaUI7QUFDakIsa0JBQWtCO0FBQ2xCLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IjE3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5Qb3B1cE1hbmFnZXIgPSB1bmRlZmluZWQ7XG5cbnZhciBfdnVlID0gcmVxdWlyZSgndnVlJyk7XG5cbnZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZSk7XG5cbnZhciBfbWVyZ2UgPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi91dGlscy9tZXJnZScpO1xuXG52YXIgX21lcmdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21lcmdlKTtcblxudmFyIF9wb3B1cE1hbmFnZXIgPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi91dGlscy9wb3B1cC9wb3B1cC1tYW5hZ2VyJyk7XG5cbnZhciBfcG9wdXBNYW5hZ2VyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BvcHVwTWFuYWdlcik7XG5cbnZhciBfc2Nyb2xsYmFyV2lkdGggPSByZXF1aXJlKCcuLi9zY3JvbGxiYXItd2lkdGgnKTtcblxudmFyIF9zY3JvbGxiYXJXaWR0aDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zY3JvbGxiYXJXaWR0aCk7XG5cbnZhciBfZG9tID0gcmVxdWlyZSgnLi4vZG9tJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBpZFNlZWQgPSAxO1xudmFyIHRyYW5zaXRpb25zID0gW107XG5cbnZhciBob29rVHJhbnNpdGlvbiA9IGZ1bmN0aW9uIGhvb2tUcmFuc2l0aW9uKHRyYW5zaXRpb24pIHtcbiAgaWYgKHRyYW5zaXRpb25zLmluZGV4T2YodHJhbnNpdGlvbikgIT09IC0xKSByZXR1cm47XG5cbiAgdmFyIGdldFZ1ZUluc3RhbmNlID0gZnVuY3Rpb24gZ2V0VnVlSW5zdGFuY2UoZWxlbWVudCkge1xuICAgIHZhciBpbnN0YW5jZSA9IGVsZW1lbnQuX192dWVfXztcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICB2YXIgdGV4dE5vZGUgPSBlbGVtZW50LnByZXZpb3VzU2libGluZztcbiAgICAgIGlmICh0ZXh0Tm9kZS5fX3Z1ZV9fKSB7XG4gICAgICAgIGluc3RhbmNlID0gdGV4dE5vZGUuX192dWVfXztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIF92dWUyLmRlZmF1bHQudHJhbnNpdGlvbih0cmFuc2l0aW9uLCB7XG4gICAgYWZ0ZXJFbnRlcjogZnVuY3Rpb24gYWZ0ZXJFbnRlcihlbCkge1xuICAgICAgdmFyIGluc3RhbmNlID0gZ2V0VnVlSW5zdGFuY2UoZWwpO1xuXG4gICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgaW5zdGFuY2UuZG9BZnRlck9wZW4gJiYgaW5zdGFuY2UuZG9BZnRlck9wZW4oKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFmdGVyTGVhdmU6IGZ1bmN0aW9uIGFmdGVyTGVhdmUoZWwpIHtcbiAgICAgIHZhciBpbnN0YW5jZSA9IGdldFZ1ZUluc3RhbmNlKGVsKTtcblxuICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgIGluc3RhbmNlLmRvQWZ0ZXJDbG9zZSAmJiBpbnN0YW5jZS5kb0FmdGVyQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufTtcblxudmFyIHNjcm9sbEJhcldpZHRoID0gdm9pZCAwO1xuXG52YXIgZ2V0RE9NID0gZnVuY3Rpb24gZ2V0RE9NKGRvbSkge1xuICBpZiAoZG9tLm5vZGVUeXBlID09PSAzKSB7XG4gICAgZG9tID0gZG9tLm5leHRFbGVtZW50U2libGluZyB8fCBkb20ubmV4dFNpYmxpbmc7XG4gICAgZ2V0RE9NKGRvbSk7XG4gIH1cbiAgcmV0dXJuIGRvbTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgbW9kZWw6IHtcbiAgICBwcm9wOiAndmlzaWJsZScsXG4gICAgZXZlbnQ6ICd2aXNpYmxlLWNoYW5nZSdcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICB2aXNpYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHRyYW5zaXRpb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBvcGVuRGVsYXk6IHt9LFxuICAgIGNsb3NlRGVsYXk6IHt9LFxuICAgIHpJbmRleDoge30sXG4gICAgbW9kYWw6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgbW9kYWxGYWRlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgbW9kYWxDbGFzczoge30sXG4gICAgbW9kYWxBcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgbG9ja1Njcm9sbDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNsb3NlT25QcmVzc0VzY2FwZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBjbG9zZU9uQ2xpY2tNb2RhbDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbikge1xuICAgICAgaG9va1RyYW5zaXRpb24odGhpcy50cmFuc2l0aW9uKTtcbiAgICB9XG4gIH0sXG4gIGJlZm9yZU1vdW50OiBmdW5jdGlvbiBiZWZvcmVNb3VudCgpIHtcbiAgICB0aGlzLl9wb3B1cElkID0gJ3BvcHVwLScgKyBpZFNlZWQrKztcbiAgICBfcG9wdXBNYW5hZ2VyMi5kZWZhdWx0LnJlZ2lzdGVyKHRoaXMuX3BvcHVwSWQsIHRoaXMpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIF9wb3B1cE1hbmFnZXIyLmRlZmF1bHQuZGVyZWdpc3Rlcih0aGlzLl9wb3B1cElkKTtcbiAgICBfcG9wdXBNYW5hZ2VyMi5kZWZhdWx0LmNsb3NlTW9kYWwodGhpcy5fcG9wdXBJZCk7XG4gICAgaWYgKHRoaXMubW9kYWwgJiYgdGhpcy5ib2R5T3ZlcmZsb3cgIT09IG51bGwgJiYgdGhpcy5ib2R5T3ZlcmZsb3cgIT09ICdoaWRkZW4nKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gdGhpcy5ib2R5T3ZlcmZsb3c7XG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCA9IHRoaXMuYm9keVBhZGRpbmdSaWdodDtcbiAgICB9XG4gICAgdGhpcy5ib2R5T3ZlcmZsb3cgPSBudWxsO1xuICAgIHRoaXMuYm9keVBhZGRpbmdSaWdodCA9IG51bGw7XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICBib2R5T3ZlcmZsb3c6IG51bGwsXG4gICAgICBib2R5UGFkZGluZ1JpZ2h0OiBudWxsLFxuICAgICAgcmVuZGVyZWQ6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuXG4gIHdhdGNoOiB7XG4gICAgdmlzaWJsZTogZnVuY3Rpb24gdmlzaWJsZSh2YWwpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuX29wZW5pbmcpIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmVkKSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlZCA9IHRydWU7XG4gICAgICAgICAgX3Z1ZTIuZGVmYXVsdC5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5vcGVuKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9wZW46IGZ1bmN0aW9uIG9wZW4ob3B0aW9ucykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5yZW5kZXJlZCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy4kZW1pdCgndmlzaWJsZS1jaGFuZ2UnLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3BzID0gKDAsIF9tZXJnZTIuZGVmYXVsdCkoe30sIHRoaXMuJHByb3BzIHx8IHRoaXMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAodGhpcy5fY2xvc2VUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VUaW1lcik7XG4gICAgICAgIHRoaXMuX2Nsb3NlVGltZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX29wZW5UaW1lcik7XG5cbiAgICAgIHZhciBvcGVuRGVsYXkgPSBOdW1iZXIocHJvcHMub3BlbkRlbGF5KTtcbiAgICAgIGlmIChvcGVuRGVsYXkgPiAwKSB7XG4gICAgICAgIHRoaXMuX29wZW5UaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5fb3BlblRpbWVyID0gbnVsbDtcbiAgICAgICAgICBfdGhpczIuZG9PcGVuKHByb3BzKTtcbiAgICAgICAgfSwgb3BlbkRlbGF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZG9PcGVuKHByb3BzKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRvT3BlbjogZnVuY3Rpb24gZG9PcGVuKHByb3BzKSB7XG4gICAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLndpbGxPcGVuICYmICF0aGlzLndpbGxPcGVuKCkpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLm9wZW5lZCkgcmV0dXJuO1xuXG4gICAgICB0aGlzLl9vcGVuaW5nID0gdHJ1ZTtcblxuICAgICAgdGhpcy4kZW1pdCgndmlzaWJsZS1jaGFuZ2UnLCB0cnVlKTtcblxuICAgICAgdmFyIGRvbSA9IGdldERPTSh0aGlzLiRlbCk7XG5cbiAgICAgIHZhciBtb2RhbCA9IHByb3BzLm1vZGFsO1xuXG4gICAgICB2YXIgekluZGV4ID0gcHJvcHMuekluZGV4O1xuICAgICAgaWYgKHpJbmRleCkge1xuICAgICAgICBfcG9wdXBNYW5hZ2VyMi5kZWZhdWx0LnpJbmRleCA9IHpJbmRleDtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZGFsKSB7XG4gICAgICAgIGlmICh0aGlzLl9jbG9zaW5nKSB7XG4gICAgICAgICAgX3BvcHVwTWFuYWdlcjIuZGVmYXVsdC5jbG9zZU1vZGFsKHRoaXMuX3BvcHVwSWQpO1xuICAgICAgICAgIHRoaXMuX2Nsb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBfcG9wdXBNYW5hZ2VyMi5kZWZhdWx0Lm9wZW5Nb2RhbCh0aGlzLl9wb3B1cElkLCBfcG9wdXBNYW5hZ2VyMi5kZWZhdWx0Lm5leHRaSW5kZXgoKSwgdGhpcy5tb2RhbEFwcGVuZFRvQm9keSA/IHVuZGVmaW5lZCA6IGRvbSwgcHJvcHMubW9kYWxDbGFzcywgcHJvcHMubW9kYWxGYWRlKTtcbiAgICAgICAgaWYgKHByb3BzLmxvY2tTY3JvbGwpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuYm9keU92ZXJmbG93KSB7XG4gICAgICAgICAgICB0aGlzLmJvZHlQYWRkaW5nUmlnaHQgPSBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodDtcbiAgICAgICAgICAgIHRoaXMuYm9keU92ZXJmbG93ID0gZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdztcbiAgICAgICAgICB9XG4gICAgICAgICAgc2Nyb2xsQmFyV2lkdGggPSAoMCwgX3Njcm9sbGJhcldpZHRoMi5kZWZhdWx0KSgpO1xuICAgICAgICAgIHZhciBib2R5SGFzT3ZlcmZsb3cgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IDwgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgdmFyIGJvZHlPdmVyZmxvd1kgPSAoMCwgX2RvbS5nZXRTdHlsZSkoZG9jdW1lbnQuYm9keSwgJ292ZXJmbG93WScpO1xuICAgICAgICAgIGlmIChzY3JvbGxCYXJXaWR0aCA+IDAgJiYgKGJvZHlIYXNPdmVyZmxvdyB8fCBib2R5T3ZlcmZsb3dZID09PSAnc2Nyb2xsJykpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0ID0gc2Nyb2xsQmFyV2lkdGggKyAncHgnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGdldENvbXB1dGVkU3R5bGUoZG9tKS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICAgICAgZG9tLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgIH1cblxuICAgICAgZG9tLnN0eWxlLnpJbmRleCA9IF9wb3B1cE1hbmFnZXIyLmRlZmF1bHQubmV4dFpJbmRleCgpO1xuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlO1xuXG4gICAgICB0aGlzLm9uT3BlbiAmJiB0aGlzLm9uT3BlbigpO1xuXG4gICAgICBpZiAoIXRoaXMudHJhbnNpdGlvbikge1xuICAgICAgICB0aGlzLmRvQWZ0ZXJPcGVuKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkb0FmdGVyT3BlbjogZnVuY3Rpb24gZG9BZnRlck9wZW4oKSB7XG4gICAgICB0aGlzLl9vcGVuaW5nID0gZmFsc2U7XG4gICAgfSxcbiAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMud2lsbENsb3NlICYmICF0aGlzLndpbGxDbG9zZSgpKSByZXR1cm47XG5cbiAgICAgIGlmICh0aGlzLl9vcGVuVGltZXIgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX29wZW5UaW1lcik7XG4gICAgICAgIHRoaXMuX29wZW5UaW1lciA9IG51bGw7XG4gICAgICB9XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VUaW1lcik7XG5cbiAgICAgIHZhciBjbG9zZURlbGF5ID0gTnVtYmVyKHRoaXMuY2xvc2VEZWxheSk7XG5cbiAgICAgIGlmIChjbG9zZURlbGF5ID4gMCkge1xuICAgICAgICB0aGlzLl9jbG9zZVRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLl9jbG9zZVRpbWVyID0gbnVsbDtcbiAgICAgICAgICBfdGhpczMuZG9DbG9zZSgpO1xuICAgICAgICB9LCBjbG9zZURlbGF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZG9DbG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZG9DbG9zZTogZnVuY3Rpb24gZG9DbG9zZSgpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB0aGlzLiRlbWl0KCd2aXNpYmxlLWNoYW5nZScsIGZhbHNlKTtcbiAgICAgIHRoaXMuX2Nsb3NpbmcgPSB0cnVlO1xuXG4gICAgICB0aGlzLm9uQ2xvc2UgJiYgdGhpcy5vbkNsb3NlKCk7XG5cbiAgICAgIGlmICh0aGlzLmxvY2tTY3JvbGwpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKF90aGlzNC5tb2RhbCAmJiBfdGhpczQuYm9keU92ZXJmbG93ICE9PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IF90aGlzNC5ib2R5T3ZlcmZsb3c7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCA9IF90aGlzNC5ib2R5UGFkZGluZ1JpZ2h0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpczQuYm9keU92ZXJmbG93ID0gbnVsbDtcbiAgICAgICAgICBfdGhpczQuYm9keVBhZGRpbmdSaWdodCA9IG51bGw7XG4gICAgICAgIH0sIDIwMCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG5cbiAgICAgIGlmICghdGhpcy50cmFuc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuZG9BZnRlckNsb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkb0FmdGVyQ2xvc2U6IGZ1bmN0aW9uIGRvQWZ0ZXJDbG9zZSgpIHtcbiAgICAgIF9wb3B1cE1hbmFnZXIyLmRlZmF1bHQuY2xvc2VNb2RhbCh0aGlzLl9wb3B1cElkKTtcbiAgICAgIHRoaXMuX2Nsb3NpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn07XG5leHBvcnRzLlBvcHVwTWFuYWdlciA9IF9wb3B1cE1hbmFnZXIyLmRlZmF1bHQ7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXAvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDE3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///17\n")},function(module,exports,__webpack_require__){eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(259);\n\n\n/***/ },\n\n/***/ 46:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(12);\n\n/***/ },\n\n/***/ 123:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(3);\n\n/***/ },\n\n/***/ 219:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(5);\n\n/***/ },\n\n/***/ 259:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(260);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_main2.default.install = function (Vue) {\n\t Vue.component(_main2.default.name, _main2.default);\n\t};\n\n\texports.default = _main2.default;\n\n/***/ },\n\n/***/ 260:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _resizeEvent = __webpack_require__(46);\n\n\tvar _scrollbarWidth = __webpack_require__(261);\n\n\tvar _scrollbarWidth2 = _interopRequireDefault(_scrollbarWidth);\n\n\tvar _util = __webpack_require__(219);\n\n\tvar _bar = __webpack_require__(262);\n\n\tvar _bar2 = _interopRequireDefault(_bar);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t// reference https://github.com/noeldelgado/gemini-scrollbar/blob/master/index.js\n\n\texports.default = {\n\t name: 'ElScrollbar',\n\n\t components: { Bar: _bar2.default },\n\n\t props: {\n\t native: Boolean,\n\t wrapStyle: {},\n\t wrapClass: {},\n\t viewClass: {},\n\t viewStyle: {},\n\t noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能\n\t tag: {\n\t type: String,\n\t default: 'div'\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t sizeWidth: '0',\n\t sizeHeight: '0',\n\t moveX: 0,\n\t moveY: 0\n\t };\n\t },\n\n\n\t computed: {\n\t wrap: function wrap() {\n\t return this.$refs.wrap;\n\t }\n\t },\n\n\t render: function render(h) {\n\t var gutter = (0, _scrollbarWidth2.default)();\n\t var style = this.wrapStyle;\n\n\t if (gutter) {\n\t var gutterWith = '-' + gutter + 'px';\n\t var gutterStyle = 'margin-bottom: ' + gutterWith + '; margin-right: ' + gutterWith + ';';\n\n\t if (Array.isArray(this.wrapStyle)) {\n\t style = (0, _util.toObject)(this.wrapStyle);\n\t style.marginRight = style.marginBottom = gutterWith;\n\t } else if (typeof this.wrapStyle === 'string') {\n\t style += gutterStyle;\n\t } else {\n\t style = gutterStyle;\n\t }\n\t }\n\t var view = h(this.tag, {\n\t class: ['el-scrollbar__view', this.viewClass],\n\t style: this.viewStyle,\n\t ref: 'resize'\n\t }, this.$slots.default);\n\t var wrap = h(\n\t 'div',\n\t {\n\t ref: 'wrap',\n\t style: style,\n\t on: {\n\t 'scroll': this.handleScroll\n\t },\n\n\t 'class': [this.wrapClass, 'el-scrollbar__wrap', gutter ? '' : 'el-scrollbar__wrap--hidden-default'] },\n\t [[view]]\n\t );\n\t var nodes = void 0;\n\n\t if (!this.native) {\n\t nodes = [wrap, h(\n\t _bar2.default,\n\t {\n\t attrs: {\n\t move: this.moveX,\n\t size: this.sizeWidth }\n\t },\n\t []\n\t ), h(\n\t _bar2.default,\n\t {\n\t attrs: {\n\t vertical: true,\n\t move: this.moveY,\n\t size: this.sizeHeight }\n\t },\n\t []\n\t )];\n\t } else {\n\t nodes = [h(\n\t 'div',\n\t {\n\t ref: 'wrap',\n\t 'class': [this.wrapClass, 'el-scrollbar__wrap'],\n\t style: style },\n\t [[view]]\n\t )];\n\t }\n\t return h('div', { class: 'el-scrollbar' }, nodes);\n\t },\n\n\n\t methods: {\n\t handleScroll: function handleScroll() {\n\t var wrap = this.wrap;\n\n\t this.moveY = wrap.scrollTop * 100 / wrap.clientHeight;\n\t this.moveX = wrap.scrollLeft * 100 / wrap.clientWidth;\n\t },\n\t update: function update() {\n\t var heightPercentage = void 0,\n\t widthPercentage = void 0;\n\t var wrap = this.wrap;\n\t if (!wrap) return;\n\n\t heightPercentage = wrap.clientHeight * 100 / wrap.scrollHeight;\n\t widthPercentage = wrap.clientWidth * 100 / wrap.scrollWidth;\n\n\t this.sizeHeight = heightPercentage < 100 ? heightPercentage + '%' : '';\n\t this.sizeWidth = widthPercentage < 100 ? widthPercentage + '%' : '';\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t if (this.native) return;\n\t this.$nextTick(this.update);\n\t !this.noresize && (0, _resizeEvent.addResizeListener)(this.$refs.resize, this.update);\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t if (this.native) return;\n\t !this.noresize && (0, _resizeEvent.removeResizeListener)(this.$refs.resize, this.update);\n\t }\n\t};\n\n/***/ },\n\n/***/ 261:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(11);\n\n/***/ },\n\n/***/ 262:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _dom = __webpack_require__(123);\n\n\tvar _util = __webpack_require__(263);\n\n\t/* istanbul ignore next */\n\texports.default = {\n\t name: 'Bar',\n\n\t props: {\n\t vertical: Boolean,\n\t size: String,\n\t move: Number\n\t },\n\n\t computed: {\n\t bar: function bar() {\n\t return _util.BAR_MAP[this.vertical ? 'vertical' : 'horizontal'];\n\t },\n\t wrap: function wrap() {\n\t return this.$parent.wrap;\n\t }\n\t },\n\n\t render: function render(h) {\n\t var size = this.size,\n\t move = this.move,\n\t bar = this.bar;\n\n\n\t return h(\n\t 'div',\n\t {\n\t 'class': ['el-scrollbar__bar', 'is-' + bar.key],\n\t on: {\n\t 'mousedown': this.clickTrackHandler\n\t }\n\t },\n\t [h(\n\t 'div',\n\t {\n\t ref: 'thumb',\n\t 'class': 'el-scrollbar__thumb',\n\t on: {\n\t 'mousedown': this.clickThumbHandler\n\t },\n\n\t style: (0, _util.renderThumbStyle)({ size: size, move: move, bar: bar }) },\n\t []\n\t )]\n\t );\n\t },\n\n\n\t methods: {\n\t clickThumbHandler: function clickThumbHandler(e) {\n\t this.startDrag(e);\n\t this[this.bar.axis] = e.currentTarget[this.bar.offset] - (e[this.bar.client] - e.currentTarget.getBoundingClientRect()[this.bar.direction]);\n\t },\n\t clickTrackHandler: function clickTrackHandler(e) {\n\t var offset = Math.abs(e.target.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]);\n\t var thumbHalf = this.$refs.thumb[this.bar.offset] / 2;\n\t var thumbPositionPercentage = (offset - thumbHalf) * 100 / this.$el[this.bar.offset];\n\n\t this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;\n\t },\n\t startDrag: function startDrag(e) {\n\t e.stopImmediatePropagation();\n\t this.cursorDown = true;\n\n\t (0, _dom.on)(document, 'mousemove', this.mouseMoveDocumentHandler);\n\t (0, _dom.on)(document, 'mouseup', this.mouseUpDocumentHandler);\n\t document.onselectstart = function () {\n\t return false;\n\t };\n\t },\n\t mouseMoveDocumentHandler: function mouseMoveDocumentHandler(e) {\n\t if (this.cursorDown === false) return;\n\t var prevPage = this[this.bar.axis];\n\n\t if (!prevPage) return;\n\n\t var offset = (this.$el.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]) * -1;\n\t var thumbClickPosition = this.$refs.thumb[this.bar.offset] - prevPage;\n\t var thumbPositionPercentage = (offset - thumbClickPosition) * 100 / this.$el[this.bar.offset];\n\n\t this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;\n\t },\n\t mouseUpDocumentHandler: function mouseUpDocumentHandler(e) {\n\t this.cursorDown = false;\n\t this[this.bar.axis] = 0;\n\t (0, _dom.off)(document, 'mousemove', this.mouseMoveDocumentHandler);\n\t document.onselectstart = null;\n\t }\n\t },\n\n\t destroyed: function destroyed() {\n\t (0, _dom.off)(document, 'mouseup', this.mouseUpDocumentHandler);\n\t }\n\t};\n\n/***/ },\n\n/***/ 263:\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\texports.renderThumbStyle = renderThumbStyle;\n\tvar BAR_MAP = exports.BAR_MAP = {\n\t vertical: {\n\t offset: 'offsetHeight',\n\t scroll: 'scrollTop',\n\t scrollSize: 'scrollHeight',\n\t size: 'height',\n\t key: 'vertical',\n\t axis: 'Y',\n\t client: 'clientY',\n\t direction: 'top'\n\t },\n\t horizontal: {\n\t offset: 'offsetWidth',\n\t scroll: 'scrollLeft',\n\t scrollSize: 'scrollWidth',\n\t size: 'width',\n\t key: 'horizontal',\n\t axis: 'X',\n\t client: 'clientX',\n\t direction: 'left'\n\t }\n\t};\n\n\tfunction renderThumbStyle(_ref) {\n\t var move = _ref.move,\n\t size = _ref.size,\n\t bar = _ref.bar;\n\n\t var style = {};\n\t var translate = 'translate' + bar.axis + '(' + move + '%)';\n\n\t style[bar.size] = size;\n\t style.transform = translate;\n\t style.msTransform = translate;\n\t style.webkitTransform = translate;\n\n\t return style;\n\t};\n\n/***/ }\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvc2Nyb2xsYmFyLmpzPzdjNDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCOztBQUU5RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxnQkFBZ0IscUJBQXFCOztBQUVyQztBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCLGtCQUFrQjtBQUNsQixrQkFBa0I7QUFDbEIsa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNERBQTRELGtDQUFrQzs7QUFFOUY7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTs7QUFFViw4R0FBOEc7QUFDOUc7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQix3QkFBd0I7QUFDOUMsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFFWiwrQ0FBK0MsbUNBQW1DLEdBQUc7QUFDckY7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsVUFBVSIsImZpbGUiOiIxOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9LFxuLyoqKioqKi8gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bG9hZGVkOiBmYWxzZVxuLyoqKioqKi8gXHRcdH07XG5cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG5cblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcblxuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMjU5KTtcblxuXG4vKioqLyB9LFxuXG4vKioqLyA0Njpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Jlc2l6ZS1ldmVudFwiKTtcblxuLyoqKi8gfSxcblxuLyoqKi8gMTIzOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvZG9tXCIpO1xuXG4vKioqLyB9LFxuXG4vKioqLyAyMTk6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy91dGlsXCIpO1xuXG4vKioqLyB9LFxuXG4vKioqLyAyNTk6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX21haW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2MCk7XG5cblx0dmFyIF9tYWluMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21haW4pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X21haW4yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9tYWluMi5kZWZhdWx0Lm5hbWUsIF9tYWluMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfbWFpbjIuZGVmYXVsdDtcblxuLyoqKi8gfSxcblxuLyoqKi8gMjYwOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9yZXNpemVFdmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xuXG5cdHZhciBfc2Nyb2xsYmFyV2lkdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2MSk7XG5cblx0dmFyIF9zY3JvbGxiYXJXaWR0aDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zY3JvbGxiYXJXaWR0aCk7XG5cblx0dmFyIF91dGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTkpO1xuXG5cdHZhciBfYmFyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjIpO1xuXG5cdHZhciBfYmFyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhcik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHQvLyByZWZlcmVuY2UgaHR0cHM6Ly9naXRodWIuY29tL25vZWxkZWxnYWRvL2dlbWluaS1zY3JvbGxiYXIvYmxvYi9tYXN0ZXIvaW5kZXguanNcblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsU2Nyb2xsYmFyJyxcblxuXHQgIGNvbXBvbmVudHM6IHsgQmFyOiBfYmFyMi5kZWZhdWx0IH0sXG5cblx0ICBwcm9wczoge1xuXHQgICAgbmF0aXZlOiBCb29sZWFuLFxuXHQgICAgd3JhcFN0eWxlOiB7fSxcblx0ICAgIHdyYXBDbGFzczoge30sXG5cdCAgICB2aWV3Q2xhc3M6IHt9LFxuXHQgICAgdmlld1N0eWxlOiB7fSxcblx0ICAgIG5vcmVzaXplOiBCb29sZWFuLCAvLyDlpoLmnpwgY29udGFpbmVyIOWwuuWvuOS4jeS8muWPkeeUn+WPmOWMlu+8jOacgOWlveiuvue9ruWug+WPr+S7peS8mOWMluaAp+iDvVxuXHQgICAgdGFnOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2Rpdidcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHNpemVXaWR0aDogJzAnLFxuXHQgICAgICBzaXplSGVpZ2h0OiAnMCcsXG5cdCAgICAgIG1vdmVYOiAwLFxuXHQgICAgICBtb3ZlWTogMFxuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgd3JhcDogZnVuY3Rpb24gd3JhcCgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuJHJlZnMud3JhcDtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuXHQgICAgdmFyIGd1dHRlciA9ICgwLCBfc2Nyb2xsYmFyV2lkdGgyLmRlZmF1bHQpKCk7XG5cdCAgICB2YXIgc3R5bGUgPSB0aGlzLndyYXBTdHlsZTtcblxuXHQgICAgaWYgKGd1dHRlcikge1xuXHQgICAgICB2YXIgZ3V0dGVyV2l0aCA9ICctJyArIGd1dHRlciArICdweCc7XG5cdCAgICAgIHZhciBndXR0ZXJTdHlsZSA9ICdtYXJnaW4tYm90dG9tOiAnICsgZ3V0dGVyV2l0aCArICc7IG1hcmdpbi1yaWdodDogJyArIGd1dHRlcldpdGggKyAnOyc7XG5cblx0ICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy53cmFwU3R5bGUpKSB7XG5cdCAgICAgICAgc3R5bGUgPSAoMCwgX3V0aWwudG9PYmplY3QpKHRoaXMud3JhcFN0eWxlKTtcblx0ICAgICAgICBzdHlsZS5tYXJnaW5SaWdodCA9IHN0eWxlLm1hcmdpbkJvdHRvbSA9IGd1dHRlcldpdGg7XG5cdCAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMud3JhcFN0eWxlID09PSAnc3RyaW5nJykge1xuXHQgICAgICAgIHN0eWxlICs9IGd1dHRlclN0eWxlO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHN0eWxlID0gZ3V0dGVyU3R5bGU7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHZhciB2aWV3ID0gaCh0aGlzLnRhZywge1xuXHQgICAgICBjbGFzczogWydlbC1zY3JvbGxiYXJfX3ZpZXcnLCB0aGlzLnZpZXdDbGFzc10sXG5cdCAgICAgIHN0eWxlOiB0aGlzLnZpZXdTdHlsZSxcblx0ICAgICAgcmVmOiAncmVzaXplJ1xuXHQgICAgfSwgdGhpcy4kc2xvdHMuZGVmYXVsdCk7XG5cdCAgICB2YXIgd3JhcCA9IGgoXG5cdCAgICAgICdkaXYnLFxuXHQgICAgICB7XG5cdCAgICAgICAgcmVmOiAnd3JhcCcsXG5cdCAgICAgICAgc3R5bGU6IHN0eWxlLFxuXHQgICAgICAgIG9uOiB7XG5cdCAgICAgICAgICAnc2Nyb2xsJzogdGhpcy5oYW5kbGVTY3JvbGxcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgJ2NsYXNzJzogW3RoaXMud3JhcENsYXNzLCAnZWwtc2Nyb2xsYmFyX193cmFwJywgZ3V0dGVyID8gJycgOiAnZWwtc2Nyb2xsYmFyX193cmFwLS1oaWRkZW4tZGVmYXVsdCddIH0sXG5cdCAgICAgIFtbdmlld11dXG5cdCAgICApO1xuXHQgICAgdmFyIG5vZGVzID0gdm9pZCAwO1xuXG5cdCAgICBpZiAoIXRoaXMubmF0aXZlKSB7XG5cdCAgICAgIG5vZGVzID0gW3dyYXAsIGgoXG5cdCAgICAgICAgX2JhcjIuZGVmYXVsdCxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICBhdHRyczoge1xuXHQgICAgICAgICAgICBtb3ZlOiB0aGlzLm1vdmVYLFxuXHQgICAgICAgICAgICBzaXplOiB0aGlzLnNpemVXaWR0aCB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBbXVxuXHQgICAgICApLCBoKFxuXHQgICAgICAgIF9iYXIyLmRlZmF1bHQsXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgYXR0cnM6IHtcblx0ICAgICAgICAgICAgdmVydGljYWw6IHRydWUsXG5cdCAgICAgICAgICAgIG1vdmU6IHRoaXMubW92ZVksXG5cdCAgICAgICAgICAgIHNpemU6IHRoaXMuc2l6ZUhlaWdodCB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBbXVxuXHQgICAgICApXTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIG5vZGVzID0gW2goXG5cdCAgICAgICAgJ2RpdicsXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgcmVmOiAnd3JhcCcsXG5cdCAgICAgICAgICAnY2xhc3MnOiBbdGhpcy53cmFwQ2xhc3MsICdlbC1zY3JvbGxiYXJfX3dyYXAnXSxcblx0ICAgICAgICAgIHN0eWxlOiBzdHlsZSB9LFxuXHQgICAgICAgIFtbdmlld11dXG5cdCAgICAgICldO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIGgoJ2RpdicsIHsgY2xhc3M6ICdlbC1zY3JvbGxiYXInIH0sIG5vZGVzKTtcblx0ICB9LFxuXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBoYW5kbGVTY3JvbGw6IGZ1bmN0aW9uIGhhbmRsZVNjcm9sbCgpIHtcblx0ICAgICAgdmFyIHdyYXAgPSB0aGlzLndyYXA7XG5cblx0ICAgICAgdGhpcy5tb3ZlWSA9IHdyYXAuc2Nyb2xsVG9wICogMTAwIC8gd3JhcC5jbGllbnRIZWlnaHQ7XG5cdCAgICAgIHRoaXMubW92ZVggPSB3cmFwLnNjcm9sbExlZnQgKiAxMDAgLyB3cmFwLmNsaWVudFdpZHRoO1xuXHQgICAgfSxcblx0ICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge1xuXHQgICAgICB2YXIgaGVpZ2h0UGVyY2VudGFnZSA9IHZvaWQgMCxcblx0ICAgICAgICAgIHdpZHRoUGVyY2VudGFnZSA9IHZvaWQgMDtcblx0ICAgICAgdmFyIHdyYXAgPSB0aGlzLndyYXA7XG5cdCAgICAgIGlmICghd3JhcCkgcmV0dXJuO1xuXG5cdCAgICAgIGhlaWdodFBlcmNlbnRhZ2UgPSB3cmFwLmNsaWVudEhlaWdodCAqIDEwMCAvIHdyYXAuc2Nyb2xsSGVpZ2h0O1xuXHQgICAgICB3aWR0aFBlcmNlbnRhZ2UgPSB3cmFwLmNsaWVudFdpZHRoICogMTAwIC8gd3JhcC5zY3JvbGxXaWR0aDtcblxuXHQgICAgICB0aGlzLnNpemVIZWlnaHQgPSBoZWlnaHRQZXJjZW50YWdlIDwgMTAwID8gaGVpZ2h0UGVyY2VudGFnZSArICclJyA6ICcnO1xuXHQgICAgICB0aGlzLnNpemVXaWR0aCA9IHdpZHRoUGVyY2VudGFnZSA8IDEwMCA/IHdpZHRoUGVyY2VudGFnZSArICclJyA6ICcnO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgaWYgKHRoaXMubmF0aXZlKSByZXR1cm47XG5cdCAgICB0aGlzLiRuZXh0VGljayh0aGlzLnVwZGF0ZSk7XG5cdCAgICAhdGhpcy5ub3Jlc2l6ZSAmJiAoMCwgX3Jlc2l6ZUV2ZW50LmFkZFJlc2l6ZUxpc3RlbmVyKSh0aGlzLiRyZWZzLnJlc2l6ZSwgdGhpcy51cGRhdGUpO1xuXHQgIH0sXG5cdCAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcblx0ICAgIGlmICh0aGlzLm5hdGl2ZSkgcmV0dXJuO1xuXHQgICAgIXRoaXMubm9yZXNpemUgJiYgKDAsIF9yZXNpemVFdmVudC5yZW1vdmVSZXNpemVMaXN0ZW5lcikodGhpcy4kcmVmcy5yZXNpemUsIHRoaXMudXBkYXRlKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG5cbi8qKiovIDI2MTpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Njcm9sbGJhci13aWR0aFwiKTtcblxuLyoqKi8gfSxcblxuLyoqKi8gMjYyOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMyk7XG5cblx0dmFyIF91dGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjMpO1xuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnQmFyJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICB2ZXJ0aWNhbDogQm9vbGVhbixcblx0ICAgIHNpemU6IFN0cmluZyxcblx0ICAgIG1vdmU6IE51bWJlclxuXHQgIH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgYmFyOiBmdW5jdGlvbiBiYXIoKSB7XG5cdCAgICAgIHJldHVybiBfdXRpbC5CQVJfTUFQW3RoaXMudmVydGljYWwgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnXTtcblx0ICAgIH0sXG5cdCAgICB3cmFwOiBmdW5jdGlvbiB3cmFwKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcGFyZW50LndyYXA7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcblx0ICAgIHZhciBzaXplID0gdGhpcy5zaXplLFxuXHQgICAgICAgIG1vdmUgPSB0aGlzLm1vdmUsXG5cdCAgICAgICAgYmFyID0gdGhpcy5iYXI7XG5cblxuXHQgICAgcmV0dXJuIGgoXG5cdCAgICAgICdkaXYnLFxuXHQgICAgICB7XG5cdCAgICAgICAgJ2NsYXNzJzogWydlbC1zY3JvbGxiYXJfX2JhcicsICdpcy0nICsgYmFyLmtleV0sXG5cdCAgICAgICAgb246IHtcblx0ICAgICAgICAgICdtb3VzZWRvd24nOiB0aGlzLmNsaWNrVHJhY2tIYW5kbGVyXG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICBbaChcblx0ICAgICAgICAnZGl2Jyxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICByZWY6ICd0aHVtYicsXG5cdCAgICAgICAgICAnY2xhc3MnOiAnZWwtc2Nyb2xsYmFyX190aHVtYicsXG5cdCAgICAgICAgICBvbjoge1xuXHQgICAgICAgICAgICAnbW91c2Vkb3duJzogdGhpcy5jbGlja1RodW1iSGFuZGxlclxuXHQgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgc3R5bGU6ICgwLCBfdXRpbC5yZW5kZXJUaHVtYlN0eWxlKSh7IHNpemU6IHNpemUsIG1vdmU6IG1vdmUsIGJhcjogYmFyIH0pIH0sXG5cdCAgICAgICAgW11cblx0ICAgICAgKV1cblx0ICAgICk7XG5cdCAgfSxcblxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgY2xpY2tUaHVtYkhhbmRsZXI6IGZ1bmN0aW9uIGNsaWNrVGh1bWJIYW5kbGVyKGUpIHtcblx0ICAgICAgdGhpcy5zdGFydERyYWcoZSk7XG5cdCAgICAgIHRoaXNbdGhpcy5iYXIuYXhpc10gPSBlLmN1cnJlbnRUYXJnZXRbdGhpcy5iYXIub2Zmc2V0XSAtIChlW3RoaXMuYmFyLmNsaWVudF0gLSBlLmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbdGhpcy5iYXIuZGlyZWN0aW9uXSk7XG5cdCAgICB9LFxuXHQgICAgY2xpY2tUcmFja0hhbmRsZXI6IGZ1bmN0aW9uIGNsaWNrVHJhY2tIYW5kbGVyKGUpIHtcblx0ICAgICAgdmFyIG9mZnNldCA9IE1hdGguYWJzKGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuYmFyLmRpcmVjdGlvbl0gLSBlW3RoaXMuYmFyLmNsaWVudF0pO1xuXHQgICAgICB2YXIgdGh1bWJIYWxmID0gdGhpcy4kcmVmcy50aHVtYlt0aGlzLmJhci5vZmZzZXRdIC8gMjtcblx0ICAgICAgdmFyIHRodW1iUG9zaXRpb25QZXJjZW50YWdlID0gKG9mZnNldCAtIHRodW1iSGFsZikgKiAxMDAgLyB0aGlzLiRlbFt0aGlzLmJhci5vZmZzZXRdO1xuXG5cdCAgICAgIHRoaXMud3JhcFt0aGlzLmJhci5zY3JvbGxdID0gdGh1bWJQb3NpdGlvblBlcmNlbnRhZ2UgKiB0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsU2l6ZV0gLyAxMDA7XG5cdCAgICB9LFxuXHQgICAgc3RhcnREcmFnOiBmdW5jdGlvbiBzdGFydERyYWcoZSkge1xuXHQgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHQgICAgICB0aGlzLmN1cnNvckRvd24gPSB0cnVlO1xuXG5cdCAgICAgICgwLCBfZG9tLm9uKShkb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMubW91c2VNb3ZlRG9jdW1lbnRIYW5kbGVyKTtcblx0ICAgICAgKDAsIF9kb20ub24pKGRvY3VtZW50LCAnbW91c2V1cCcsIHRoaXMubW91c2VVcERvY3VtZW50SGFuZGxlcik7XG5cdCAgICAgIGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICB9O1xuXHQgICAgfSxcblx0ICAgIG1vdXNlTW92ZURvY3VtZW50SGFuZGxlcjogZnVuY3Rpb24gbW91c2VNb3ZlRG9jdW1lbnRIYW5kbGVyKGUpIHtcblx0ICAgICAgaWYgKHRoaXMuY3Vyc29yRG93biA9PT0gZmFsc2UpIHJldHVybjtcblx0ICAgICAgdmFyIHByZXZQYWdlID0gdGhpc1t0aGlzLmJhci5heGlzXTtcblxuXHQgICAgICBpZiAoIXByZXZQYWdlKSByZXR1cm47XG5cblx0ICAgICAgdmFyIG9mZnNldCA9ICh0aGlzLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmJhci5kaXJlY3Rpb25dIC0gZVt0aGlzLmJhci5jbGllbnRdKSAqIC0xO1xuXHQgICAgICB2YXIgdGh1bWJDbGlja1Bvc2l0aW9uID0gdGhpcy4kcmVmcy50aHVtYlt0aGlzLmJhci5vZmZzZXRdIC0gcHJldlBhZ2U7XG5cdCAgICAgIHZhciB0aHVtYlBvc2l0aW9uUGVyY2VudGFnZSA9IChvZmZzZXQgLSB0aHVtYkNsaWNrUG9zaXRpb24pICogMTAwIC8gdGhpcy4kZWxbdGhpcy5iYXIub2Zmc2V0XTtcblxuXHQgICAgICB0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsXSA9IHRodW1iUG9zaXRpb25QZXJjZW50YWdlICogdGhpcy53cmFwW3RoaXMuYmFyLnNjcm9sbFNpemVdIC8gMTAwO1xuXHQgICAgfSxcblx0ICAgIG1vdXNlVXBEb2N1bWVudEhhbmRsZXI6IGZ1bmN0aW9uIG1vdXNlVXBEb2N1bWVudEhhbmRsZXIoZSkge1xuXHQgICAgICB0aGlzLmN1cnNvckRvd24gPSBmYWxzZTtcblx0ICAgICAgdGhpc1t0aGlzLmJhci5heGlzXSA9IDA7XG5cdCAgICAgICgwLCBfZG9tLm9mZikoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlTW92ZURvY3VtZW50SGFuZGxlcik7XG5cdCAgICAgIGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQgPSBudWxsO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcblx0ICAgICgwLCBfZG9tLm9mZikoZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5tb3VzZVVwRG9jdW1lbnRIYW5kbGVyKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG5cbi8qKiovIDI2Mzpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLnJlbmRlclRodW1iU3R5bGUgPSByZW5kZXJUaHVtYlN0eWxlO1xuXHR2YXIgQkFSX01BUCA9IGV4cG9ydHMuQkFSX01BUCA9IHtcblx0ICB2ZXJ0aWNhbDoge1xuXHQgICAgb2Zmc2V0OiAnb2Zmc2V0SGVpZ2h0Jyxcblx0ICAgIHNjcm9sbDogJ3Njcm9sbFRvcCcsXG5cdCAgICBzY3JvbGxTaXplOiAnc2Nyb2xsSGVpZ2h0Jyxcblx0ICAgIHNpemU6ICdoZWlnaHQnLFxuXHQgICAga2V5OiAndmVydGljYWwnLFxuXHQgICAgYXhpczogJ1knLFxuXHQgICAgY2xpZW50OiAnY2xpZW50WScsXG5cdCAgICBkaXJlY3Rpb246ICd0b3AnXG5cdCAgfSxcblx0ICBob3Jpem9udGFsOiB7XG5cdCAgICBvZmZzZXQ6ICdvZmZzZXRXaWR0aCcsXG5cdCAgICBzY3JvbGw6ICdzY3JvbGxMZWZ0Jyxcblx0ICAgIHNjcm9sbFNpemU6ICdzY3JvbGxXaWR0aCcsXG5cdCAgICBzaXplOiAnd2lkdGgnLFxuXHQgICAga2V5OiAnaG9yaXpvbnRhbCcsXG5cdCAgICBheGlzOiAnWCcsXG5cdCAgICBjbGllbnQ6ICdjbGllbnRYJyxcblx0ICAgIGRpcmVjdGlvbjogJ2xlZnQnXG5cdCAgfVxuXHR9O1xuXG5cdGZ1bmN0aW9uIHJlbmRlclRodW1iU3R5bGUoX3JlZikge1xuXHQgIHZhciBtb3ZlID0gX3JlZi5tb3ZlLFxuXHQgICAgICBzaXplID0gX3JlZi5zaXplLFxuXHQgICAgICBiYXIgPSBfcmVmLmJhcjtcblxuXHQgIHZhciBzdHlsZSA9IHt9O1xuXHQgIHZhciB0cmFuc2xhdGUgPSAndHJhbnNsYXRlJyArIGJhci5heGlzICsgJygnICsgbW92ZSArICclKSc7XG5cblx0ICBzdHlsZVtiYXIuc2l6ZV0gPSBzaXplO1xuXHQgIHN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zbGF0ZTtcblx0ICBzdHlsZS5tc1RyYW5zZm9ybSA9IHRyYW5zbGF0ZTtcblx0ICBzdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB0cmFuc2xhdGU7XG5cblx0ICByZXR1cm4gc3R5bGU7XG5cdH07XG5cbi8qKiovIH1cblxuLyoqKioqKi8gfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvc2Nyb2xsYmFyLmpzXG4vLyBtb2R1bGUgaWQgPSAxOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///18\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\nexports.default = scrollIntoView;\n\nvar _vue = __webpack_require__(2);\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction scrollIntoView(container, selected) {\n if (_vue2.default.prototype.$isServer) return;\n\n if (!selected) {\n container.scrollTop = 0;\n return;\n }\n\n var top = selected.offsetTop;\n var bottom = selected.offsetTop + selected.offsetHeight;\n var viewRectTop = container.scrollTop;\n var viewRectBottom = viewRectTop + container.clientHeight;\n\n if (top < viewRectTop) {\n container.scrollTop = top;\n } else if (bottom > viewRectBottom) {\n container.scrollTop = bottom - container.clientHeight;\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsLWludG8tdmlldy5qcz9jZDMwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxnQkFBZ0I7O0FBRTdGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EiLCJmaWxlIjoiMTkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSBzY3JvbGxJbnRvVmlldztcblxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXcoY29udGFpbmVyLCBzZWxlY3RlZCkge1xuICBpZiAoX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm47XG5cbiAgaWYgKCFzZWxlY3RlZCkge1xuICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSAwO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0b3AgPSBzZWxlY3RlZC5vZmZzZXRUb3A7XG4gIHZhciBib3R0b20gPSBzZWxlY3RlZC5vZmZzZXRUb3AgKyBzZWxlY3RlZC5vZmZzZXRIZWlnaHQ7XG4gIHZhciB2aWV3UmVjdFRvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XG4gIHZhciB2aWV3UmVjdEJvdHRvbSA9IHZpZXdSZWN0VG9wICsgY29udGFpbmVyLmNsaWVudEhlaWdodDtcblxuICBpZiAodG9wIDwgdmlld1JlY3RUb3ApIHtcbiAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gdG9wO1xuICB9IGVsc2UgaWYgKGJvdHRvbSA+IHZpZXdSZWN0Qm90dG9tKSB7XG4gICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IGJvdHRvbSAtIGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gIH1cbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy9zY3JvbGwtaW50by12aWV3LmpzXG4vLyBtb2R1bGUgaWQgPSAxOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///19\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\n\nvar _locale = __webpack_require__(13);\n\nexports.default = {\n methods: {\n t: function t() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _locale.t.apply(this, args);\n }\n }\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbWl4aW5zL2xvY2FsZS5qcz9jYmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFFQUFxRSxhQUFhO0FBQ2xGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfbG9jYWxlID0gcmVxdWlyZSgnZWxlbWVudC11aS9saWIvbG9jYWxlJyk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgbWV0aG9kczoge1xuICAgIHQ6IGZ1bmN0aW9uIHQoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2xvY2FsZS50LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9taXhpbnMvbG9jYWxlLmpzXG4vLyBtb2R1bGUgaWQgPSAyMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///20\n")},function(module,exports){eval("/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param {Number} delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {Boolean} noTrailing Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n * throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n * after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n * the internal counter is reset)\n * @param {Function} callback A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the throttled-function is executed.\n * @param {Boolean} debounceMode If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n * schedule `callback` to execute after `delay` ms.\n *\n * @return {Function} A new, throttled, function.\n */\nmodule.exports = function ( delay, noTrailing, callback, debounceMode ) {\n\n\t// After wrapper has stopped being called, this timeout ensures that\n\t// `callback` is executed at the proper times in `throttle` and `end`\n\t// debounce modes.\n\tvar timeoutID;\n\n\t// Keep track of the last time `callback` was executed.\n\tvar lastExec = 0;\n\n\t// `noTrailing` defaults to falsy.\n\tif ( typeof noTrailing !== 'boolean' ) {\n\t\tdebounceMode = callback;\n\t\tcallback = noTrailing;\n\t\tnoTrailing = undefined;\n\t}\n\n\t// The `wrapper` function encapsulates all of the throttling / debouncing\n\t// functionality and when executed will limit the rate at which `callback`\n\t// is executed.\n\tfunction wrapper () {\n\n\t\tvar self = this;\n\t\tvar elapsed = Number(new Date()) - lastExec;\n\t\tvar args = arguments;\n\n\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\tfunction exec () {\n\t\t\tlastExec = Number(new Date());\n\t\t\tcallback.apply(self, args);\n\t\t}\n\n\t\t// If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t// to allow future `callback` executions.\n\t\tfunction clear () {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif ( debounceMode && !timeoutID ) {\n\t\t\t// Since `wrapper` is being called for the first time and\n\t\t\t// `debounceMode` is true (at begin), execute `callback`.\n\t\t\texec();\n\t\t}\n\n\t\t// Clear any existing timeout.\n\t\tif ( timeoutID ) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\n\t\tif ( debounceMode === undefined && elapsed > delay ) {\n\t\t\t// In throttle mode, if `delay` time has been exceeded, execute\n\t\t\t// `callback`.\n\t\t\texec();\n\n\t\t} else if ( noTrailing !== true ) {\n\t\t\t// In trailing throttle mode, since `delay` time has not been\n\t\t\t// exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t// recent execution.\n\t\t\t//\n\t\t\t// If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t// after `delay` ms.\n\t\t\t//\n\t\t\t// If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t// execute after `delay` ms.\n\t\t\ttimeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);\n\t\t}\n\n\t}\n\n\t// Return the wrapper function.\n\treturn wrapper;\n\n};\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGhyb3R0bGUtZGVib3VuY2UvdGhyb3R0bGUuanM/Yjk4ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksT0FBTztBQUNuQixZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQSxZQUFZLFNBQVM7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSIsImZpbGUiOiIyMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmaW5lZCxuby1wYXJhbS1yZWFzc2lnbixuby1zaGFkb3cgKi9cblxuLyoqXG4gKiBUaHJvdHRsZSBleGVjdXRpb24gb2YgYSBmdW5jdGlvbi4gRXNwZWNpYWxseSB1c2VmdWwgZm9yIHJhdGUgbGltaXRpbmdcbiAqIGV4ZWN1dGlvbiBvZiBoYW5kbGVycyBvbiBldmVudHMgbGlrZSByZXNpemUgYW5kIHNjcm9sbC5cbiAqXG4gKiBAcGFyYW0gIHtOdW1iZXJ9ICAgIGRlbGF5ICAgICAgICAgIEEgemVyby1vci1ncmVhdGVyIGRlbGF5IGluIG1pbGxpc2Vjb25kcy4gRm9yIGV2ZW50IGNhbGxiYWNrcywgdmFsdWVzIGFyb3VuZCAxMDAgb3IgMjUwIChvciBldmVuIGhpZ2hlcikgYXJlIG1vc3QgdXNlZnVsLlxuICogQHBhcmFtICB7Qm9vbGVhbn0gICBub1RyYWlsaW5nICAgICBPcHRpb25hbCwgZGVmYXVsdHMgdG8gZmFsc2UuIElmIG5vVHJhaWxpbmcgaXMgdHJ1ZSwgY2FsbGJhY2sgd2lsbCBvbmx5IGV4ZWN1dGUgZXZlcnkgYGRlbGF5YCBtaWxsaXNlY29uZHMgd2hpbGUgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm90dGxlZC1mdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIElmIG5vVHJhaWxpbmcgaXMgZmFsc2Ugb3IgdW5zcGVjaWZpZWQsIGNhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQgb25lIGZpbmFsIHRpbWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgdGhlIGxhc3QgdGhyb3R0bGVkLWZ1bmN0aW9uIGNhbGwuIChBZnRlciB0aGUgdGhyb3R0bGVkLWZ1bmN0aW9uIGhhcyBub3QgYmVlbiBjYWxsZWQgZm9yIGBkZWxheWAgbWlsbGlzZWNvbmRzLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW50ZXJuYWwgY291bnRlciBpcyByZXNldClcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSAgY2FsbGJhY2sgICAgICAgQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciBkZWxheSBtaWxsaXNlY29uZHMuIFRoZSBgdGhpc2AgY29udGV4dCBhbmQgYWxsIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRocm91Z2gsIGFzLWlzLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBgY2FsbGJhY2tgIHdoZW4gdGhlIHRocm90dGxlZC1mdW5jdGlvbiBpcyBleGVjdXRlZC5cbiAqIEBwYXJhbSAge0Jvb2xlYW59ICAgZGVib3VuY2VNb2RlICAgSWYgYGRlYm91bmNlTW9kZWAgaXMgdHJ1ZSAoYXQgYmVnaW4pLCBzY2hlZHVsZSBgY2xlYXJgIHRvIGV4ZWN1dGUgYWZ0ZXIgYGRlbGF5YCBtcy4gSWYgYGRlYm91bmNlTW9kZWAgaXMgZmFsc2UgKGF0IGVuZCksXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlIGBjYWxsYmFja2AgdG8gZXhlY3V0ZSBhZnRlciBgZGVsYXlgIG1zLlxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSAgQSBuZXcsIHRocm90dGxlZCwgZnVuY3Rpb24uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCBkZWxheSwgbm9UcmFpbGluZywgY2FsbGJhY2ssIGRlYm91bmNlTW9kZSApIHtcblxuXHQvLyBBZnRlciB3cmFwcGVyIGhhcyBzdG9wcGVkIGJlaW5nIGNhbGxlZCwgdGhpcyB0aW1lb3V0IGVuc3VyZXMgdGhhdFxuXHQvLyBgY2FsbGJhY2tgIGlzIGV4ZWN1dGVkIGF0IHRoZSBwcm9wZXIgdGltZXMgaW4gYHRocm90dGxlYCBhbmQgYGVuZGBcblx0Ly8gZGVib3VuY2UgbW9kZXMuXG5cdHZhciB0aW1lb3V0SUQ7XG5cblx0Ly8gS2VlcCB0cmFjayBvZiB0aGUgbGFzdCB0aW1lIGBjYWxsYmFja2Agd2FzIGV4ZWN1dGVkLlxuXHR2YXIgbGFzdEV4ZWMgPSAwO1xuXG5cdC8vIGBub1RyYWlsaW5nYCBkZWZhdWx0cyB0byBmYWxzeS5cblx0aWYgKCB0eXBlb2Ygbm9UcmFpbGluZyAhPT0gJ2Jvb2xlYW4nICkge1xuXHRcdGRlYm91bmNlTW9kZSA9IGNhbGxiYWNrO1xuXHRcdGNhbGxiYWNrID0gbm9UcmFpbGluZztcblx0XHRub1RyYWlsaW5nID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gVGhlIGB3cmFwcGVyYCBmdW5jdGlvbiBlbmNhcHN1bGF0ZXMgYWxsIG9mIHRoZSB0aHJvdHRsaW5nIC8gZGVib3VuY2luZ1xuXHQvLyBmdW5jdGlvbmFsaXR5IGFuZCB3aGVuIGV4ZWN1dGVkIHdpbGwgbGltaXQgdGhlIHJhdGUgYXQgd2hpY2ggYGNhbGxiYWNrYFxuXHQvLyBpcyBleGVjdXRlZC5cblx0ZnVuY3Rpb24gd3JhcHBlciAoKSB7XG5cblx0XHR2YXIgc2VsZiA9IHRoaXM7XG5cdFx0dmFyIGVsYXBzZWQgPSBOdW1iZXIobmV3IERhdGUoKSkgLSBsYXN0RXhlYztcblx0XHR2YXIgYXJncyA9IGFyZ3VtZW50cztcblxuXHRcdC8vIEV4ZWN1dGUgYGNhbGxiYWNrYCBhbmQgdXBkYXRlIHRoZSBgbGFzdEV4ZWNgIHRpbWVzdGFtcC5cblx0XHRmdW5jdGlvbiBleGVjICgpIHtcblx0XHRcdGxhc3RFeGVjID0gTnVtYmVyKG5ldyBEYXRlKCkpO1xuXHRcdFx0Y2FsbGJhY2suYXBwbHkoc2VsZiwgYXJncyk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgYGRlYm91bmNlTW9kZWAgaXMgdHJ1ZSAoYXQgYmVnaW4pIHRoaXMgaXMgdXNlZCB0byBjbGVhciB0aGUgZmxhZ1xuXHRcdC8vIHRvIGFsbG93IGZ1dHVyZSBgY2FsbGJhY2tgIGV4ZWN1dGlvbnMuXG5cdFx0ZnVuY3Rpb24gY2xlYXIgKCkge1xuXHRcdFx0dGltZW91dElEID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmICggZGVib3VuY2VNb2RlICYmICF0aW1lb3V0SUQgKSB7XG5cdFx0XHQvLyBTaW5jZSBgd3JhcHBlcmAgaXMgYmVpbmcgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSBhbmRcblx0XHRcdC8vIGBkZWJvdW5jZU1vZGVgIGlzIHRydWUgKGF0IGJlZ2luKSwgZXhlY3V0ZSBgY2FsbGJhY2tgLlxuXHRcdFx0ZXhlYygpO1xuXHRcdH1cblxuXHRcdC8vIENsZWFyIGFueSBleGlzdGluZyB0aW1lb3V0LlxuXHRcdGlmICggdGltZW91dElEICkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7XG5cdFx0fVxuXG5cdFx0aWYgKCBkZWJvdW5jZU1vZGUgPT09IHVuZGVmaW5lZCAmJiBlbGFwc2VkID4gZGVsYXkgKSB7XG5cdFx0XHQvLyBJbiB0aHJvdHRsZSBtb2RlLCBpZiBgZGVsYXlgIHRpbWUgaGFzIGJlZW4gZXhjZWVkZWQsIGV4ZWN1dGVcblx0XHRcdC8vIGBjYWxsYmFja2AuXG5cdFx0XHRleGVjKCk7XG5cblx0XHR9IGVsc2UgaWYgKCBub1RyYWlsaW5nICE9PSB0cnVlICkge1xuXHRcdFx0Ly8gSW4gdHJhaWxpbmcgdGhyb3R0bGUgbW9kZSwgc2luY2UgYGRlbGF5YCB0aW1lIGhhcyBub3QgYmVlblxuXHRcdFx0Ly8gZXhjZWVkZWQsIHNjaGVkdWxlIGBjYWxsYmFja2AgdG8gZXhlY3V0ZSBgZGVsYXlgIG1zIGFmdGVyIG1vc3Rcblx0XHRcdC8vIHJlY2VudCBleGVjdXRpb24uXG5cdFx0XHQvL1xuXHRcdFx0Ly8gSWYgYGRlYm91bmNlTW9kZWAgaXMgdHJ1ZSAoYXQgYmVnaW4pLCBzY2hlZHVsZSBgY2xlYXJgIHRvIGV4ZWN1dGVcblx0XHRcdC8vIGFmdGVyIGBkZWxheWAgbXMuXG5cdFx0XHQvL1xuXHRcdFx0Ly8gSWYgYGRlYm91bmNlTW9kZWAgaXMgZmFsc2UgKGF0IGVuZCksIHNjaGVkdWxlIGBjYWxsYmFja2AgdG9cblx0XHRcdC8vIGV4ZWN1dGUgYWZ0ZXIgYGRlbGF5YCBtcy5cblx0XHRcdHRpbWVvdXRJRCA9IHNldFRpbWVvdXQoZGVib3VuY2VNb2RlID8gY2xlYXIgOiBleGVjLCBkZWJvdW5jZU1vZGUgPT09IHVuZGVmaW5lZCA/IGRlbGF5IC0gZWxhcHNlZCA6IGRlbGF5KTtcblx0XHR9XG5cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgd3JhcHBlciBmdW5jdGlvbi5cblx0cmV0dXJuIHdyYXBwZXI7XG5cbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy90aHJvdHRsZS1kZWJvdW5jZS90aHJvdHRsZS5qc1xuLy8gbW9kdWxlIGlkID0gMjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21\n")},function(module,exports){eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(331);\n\n\n/***/ },\n\n/***/ 3:\n/***/ function(module, exports) {\n\n\t/* globals __VUE_SSR_CONTEXT__ */\n\n\t// this module is a runtime utility for cleaner component module output and will\n\t// be included in the final webpack user bundle\n\n\tmodule.exports = function normalizeComponent (\n\t rawScriptExports,\n\t compiledTemplate,\n\t injectStyles,\n\t scopeId,\n\t moduleIdentifier /* server only */\n\t) {\n\t var esModule\n\t var scriptExports = rawScriptExports = rawScriptExports || {}\n\n\t // ES6 modules interop\n\t var type = typeof rawScriptExports.default\n\t if (type === 'object' || type === 'function') {\n\t esModule = rawScriptExports\n\t scriptExports = rawScriptExports.default\n\t }\n\n\t // Vue.extend constructor export interop\n\t var options = typeof scriptExports === 'function'\n\t ? scriptExports.options\n\t : scriptExports\n\n\t // render functions\n\t if (compiledTemplate) {\n\t options.render = compiledTemplate.render\n\t options.staticRenderFns = compiledTemplate.staticRenderFns\n\t }\n\n\t // scopedId\n\t if (scopeId) {\n\t options._scopeId = scopeId\n\t }\n\n\t var hook\n\t if (moduleIdentifier) { // server build\n\t hook = function (context) {\n\t // 2.3 injection\n\t context = context || (this.$vnode && this.$vnode.ssrContext)\n\t // 2.2 with runInNewContext: true\n\t if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n\t context = __VUE_SSR_CONTEXT__\n\t }\n\t // inject component styles\n\t if (injectStyles) {\n\t injectStyles.call(this, context)\n\t }\n\t // register component module identifier for async chunk inferrence\n\t if (context && context._registeredComponents) {\n\t context._registeredComponents.add(moduleIdentifier)\n\t }\n\t }\n\t // used by ssr in case component is cached and beforeCreate\n\t // never gets called\n\t options._ssrRegister = hook\n\t } else if (injectStyles) {\n\t hook = injectStyles\n\t }\n\n\t if (hook) {\n\t // inject component registration as beforeCreate hook\n\t var existing = options.beforeCreate\n\t options.beforeCreate = existing\n\t ? [].concat(existing, hook)\n\t : [hook]\n\t }\n\n\t return {\n\t esModule: esModule,\n\t exports: scriptExports,\n\t options: options\n\t }\n\t}\n\n\n/***/ },\n\n/***/ 331:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _tag = __webpack_require__(332);\n\n\tvar _tag2 = _interopRequireDefault(_tag);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_tag2.default.install = function (Vue) {\n\t Vue.component(_tag2.default.name, _tag2.default);\n\t};\n\n\texports.default = _tag2.default;\n\n/***/ },\n\n/***/ 332:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(3)(\n\t /* script */\n\t __webpack_require__(333),\n\t /* template */\n\t __webpack_require__(334),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 333:\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElTag',\n\t props: {\n\t text: String,\n\t closable: Boolean,\n\t type: String,\n\t hit: Boolean,\n\t closeTransition: Boolean,\n\t color: String\n\t },\n\t methods: {\n\t handleClose: function handleClose(event) {\n\t this.$emit('close', event);\n\t }\n\t }\n\t};\n\n/***/ },\n\n/***/ 334:\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": _vm.closeTransition ? '' : 'el-zoom-in-center'\n\t }\n\t }, [_c('span', {\n\t staticClass: \"el-tag\",\n\t class: [_vm.type ? 'el-tag--' + _vm.type : '', {\n\t 'is-hit': _vm.hit\n\t }],\n\t style: ({\n\t backgroundColor: _vm.color\n\t })\n\t }, [_vm._t(\"default\"), (_vm.closable) ? _c('i', {\n\t staticClass: \"el-tag__close el-icon-close\",\n\t on: {\n\t \"click\": _vm.handleClose\n\t }\n\t }) : _vm._e()], 2)])\n\t},staticRenderFns: []}\n\n/***/ }\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGFnLmpzP2EyYjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ04sSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUY7O0FBRUEsVUFBVSIsImZpbGUiOiIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9LFxuLyoqKioqKi8gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bG9hZGVkOiBmYWxzZVxuLyoqKioqKi8gXHRcdH07XG5cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG5cblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcblxuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMzMxKTtcblxuXG4vKioqLyB9LFxuXG4vKioqLyAzOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0LyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cblx0Ly8gdGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcblx0Ly8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGVcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG5cdCAgcmF3U2NyaXB0RXhwb3J0cyxcblx0ICBjb21waWxlZFRlbXBsYXRlLFxuXHQgIGluamVjdFN0eWxlcyxcblx0ICBzY29wZUlkLFxuXHQgIG1vZHVsZUlkZW50aWZpZXIgLyogc2VydmVyIG9ubHkgKi9cblx0KSB7XG5cdCAgdmFyIGVzTW9kdWxlXG5cdCAgdmFyIHNjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cyB8fCB7fVxuXG5cdCAgLy8gRVM2IG1vZHVsZXMgaW50ZXJvcFxuXHQgIHZhciB0eXBlID0gdHlwZW9mIHJhd1NjcmlwdEV4cG9ydHMuZGVmYXVsdFxuXHQgIGlmICh0eXBlID09PSAnb2JqZWN0JyB8fCB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICBlc01vZHVsZSA9IHJhd1NjcmlwdEV4cG9ydHNcblx0ICAgIHNjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzLmRlZmF1bHRcblx0ICB9XG5cblx0ICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG5cdCAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuXHQgICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcblx0ICAgIDogc2NyaXB0RXhwb3J0c1xuXG5cdCAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuXHQgIGlmIChjb21waWxlZFRlbXBsYXRlKSB7XG5cdCAgICBvcHRpb25zLnJlbmRlciA9IGNvbXBpbGVkVGVtcGxhdGUucmVuZGVyXG5cdCAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IGNvbXBpbGVkVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zXG5cdCAgfVxuXG5cdCAgLy8gc2NvcGVkSWRcblx0ICBpZiAoc2NvcGVJZCkge1xuXHQgICAgb3B0aW9ucy5fc2NvcGVJZCA9IHNjb3BlSWRcblx0ICB9XG5cblx0ICB2YXIgaG9va1xuXHQgIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuXHQgICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgIC8vIDIuMyBpbmplY3Rpb25cblx0ICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpXG5cdCAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuXHQgICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG5cdCAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cblx0ICAgICAgfVxuXHQgICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuXHQgICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG5cdCAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcblx0ICAgICAgfVxuXHQgICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2Vcblx0ICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcblx0ICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcblx0ICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG5cdCAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcblx0ICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuXHQgICAgaG9vayA9IGluamVjdFN0eWxlc1xuXHQgIH1cblxuXHQgIGlmIChob29rKSB7XG5cdCAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuXHQgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcblx0ICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3Rpbmdcblx0ICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG5cdCAgICAgIDogW2hvb2tdXG5cdCAgfVxuXG5cdCAgcmV0dXJuIHtcblx0ICAgIGVzTW9kdWxlOiBlc01vZHVsZSxcblx0ICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG5cdCAgICBvcHRpb25zOiBvcHRpb25zXG5cdCAgfVxuXHR9XG5cblxuLyoqKi8gfSxcblxuLyoqKi8gMzMxOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF90YWcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzMik7XG5cblx0dmFyIF90YWcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdGFnKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF90YWcyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF90YWcyLmRlZmF1bHQubmFtZSwgX3RhZzIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX3RhZzIuZGVmYXVsdDtcblxuLyoqKi8gfSxcblxuLyoqKi8gMzMyOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMykoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzMzMpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzMzQpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG5cbi8qKiovIDMzMzpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxUYWcnLFxuXHQgIHByb3BzOiB7XG5cdCAgICB0ZXh0OiBTdHJpbmcsXG5cdCAgICBjbG9zYWJsZTogQm9vbGVhbixcblx0ICAgIHR5cGU6IFN0cmluZyxcblx0ICAgIGhpdDogQm9vbGVhbixcblx0ICAgIGNsb3NlVHJhbnNpdGlvbjogQm9vbGVhbixcblx0ICAgIGNvbG9yOiBTdHJpbmdcblx0ICB9LFxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGhhbmRsZUNsb3NlOiBmdW5jdGlvbiBoYW5kbGVDbG9zZShldmVudCkge1xuXHQgICAgICB0aGlzLiRlbWl0KCdjbG9zZScsIGV2ZW50KTtcblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG5cbi8qKiovIDMzNDpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCd0cmFuc2l0aW9uJywge1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJuYW1lXCI6IF92bS5jbG9zZVRyYW5zaXRpb24gPyAnJyA6ICdlbC16b29tLWluLWNlbnRlcidcblx0ICAgIH1cblx0ICB9LCBbX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10YWdcIixcblx0ICAgIGNsYXNzOiBbX3ZtLnR5cGUgPyAnZWwtdGFnLS0nICsgX3ZtLnR5cGUgOiAnJywge1xuXHQgICAgICAnaXMtaGl0JzogX3ZtLmhpdFxuXHQgICAgfV0sXG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgYmFja2dyb3VuZENvbG9yOiBfdm0uY29sb3Jcblx0ICAgIH0pXG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIiksIChfdm0uY2xvc2FibGUpID8gX2MoJ2knLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10YWdfX2Nsb3NlIGVsLWljb24tY2xvc2VcIixcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLmhhbmRsZUNsb3NlXG5cdCAgICB9XG5cdCAgfSkgOiBfdm0uX2UoKV0sIDIpXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9XG5cbi8qKioqKiovIH0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3RhZy5qc1xuLy8gbW9kdWxlIGlkID0gMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///22\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.isVNode = isVNode;\nexports.getFirstComponentChild = getFirstComponentChild;\n\nvar _util = __webpack_require__(5);\n\nfunction isVNode(node) {\n return (typeof node === 'undefined' ? 'undefined' : _typeof(node)) === 'object' && (0, _util.hasOwn)(node, 'componentOptions');\n};\n\nfunction getFirstComponentChild(children) {\n return children && children.filter(function (c) {\n return c && c.tag;\n })[0];\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdmRvbS5qcz83ZDRhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBOztBQUVBLG9HQUFvRyxtQkFBbUIsRUFBRSxtQkFBbUIsOEhBQThIOztBQUUxUTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZXhwb3J0cy5pc1ZOb2RlID0gaXNWTm9kZTtcbmV4cG9ydHMuZ2V0Rmlyc3RDb21wb25lbnRDaGlsZCA9IGdldEZpcnN0Q29tcG9uZW50Q2hpbGQ7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJ2VsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWwnKTtcblxuZnVuY3Rpb24gaXNWTm9kZShub2RlKSB7XG4gIHJldHVybiAodHlwZW9mIG5vZGUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG5vZGUpKSA9PT0gJ29iamVjdCcgJiYgKDAsIF91dGlsLmhhc093bikobm9kZSwgJ2NvbXBvbmVudE9wdGlvbnMnKTtcbn07XG5cbmZ1bmN0aW9uIGdldEZpcnN0Q29tcG9uZW50Q2hpbGQoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIGNoaWxkcmVuICYmIGNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjICYmIGMudGFnO1xuICB9KVswXTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdmRvbS5qc1xuLy8gbW9kdWxlIGlkID0gMjNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///23\n")},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _util = __webpack_require__(0);\n\nvar util = _interopRequireWildcard(_util);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj["default"] = obj; return newObj; } }\n\n/**\n * Rule for validating required fields.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction required(rule, value, source, errors, options, type) {\n if (rule.required && (!source.hasOwnProperty(rule.field) || util.isEmptyValue(value, type || rule.type))) {\n errors.push(util.format(options.messages.required, rule.fullField));\n }\n}\n\nexports["default"] = required;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi9ydWxlL3JlcXVpcmVkLmpzP2Q0ZmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUEsdUNBQXVDLDZCQUE2QixZQUFZLEVBQUUsT0FBTyxpQkFBaUIsbUJBQW1CLHVCQUF1Qiw0RUFBNEUsRUFBRSxFQUFFLHlCQUF5QixlQUFlLEVBQUU7O0FBRTlRO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxudmFyIHV0aWwgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfdXRpbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gZWxzZSB7IHZhciBuZXdPYmogPSB7fTsgaWYgKG9iaiAhPSBudWxsKSB7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqOyByZXR1cm4gbmV3T2JqOyB9IH1cblxuLyoqXG4gKiAgUnVsZSBmb3IgdmFsaWRhdGluZyByZXF1aXJlZCBmaWVsZHMuXG4gKlxuICogIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUuXG4gKiAgQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgb24gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiAgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCBiZWluZyB2YWxpZGF0ZWQuXG4gKiAgQHBhcmFtIGVycm9ycyBBbiBhcnJheSBvZiBlcnJvcnMgdGhhdCB0aGlzIHJ1bGUgbWF5IGFkZFxuICogIHZhbGlkYXRpb24gZXJyb3JzIHRvLlxuICogIEBwYXJhbSBvcHRpb25zIFRoZSB2YWxpZGF0aW9uIG9wdGlvbnMuXG4gKiAgQHBhcmFtIG9wdGlvbnMubWVzc2FnZXMgVGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucywgdHlwZSkge1xuICBpZiAocnVsZS5yZXF1aXJlZCAmJiAoIXNvdXJjZS5oYXNPd25Qcm9wZXJ0eShydWxlLmZpZWxkKSB8fCB1dGlsLmlzRW1wdHlWYWx1ZSh2YWx1ZSwgdHlwZSB8fCBydWxlLnR5cGUpKSkge1xuICAgIGVycm9ycy5wdXNoKHV0aWwuZm9ybWF0KG9wdGlvbnMubWVzc2FnZXMucmVxdWlyZWQsIHJ1bGUuZnVsbEZpZWxkKSk7XG4gIH1cbn1cblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSByZXF1aXJlZDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2FzeW5jLXZhbGlkYXRvci9saWIvcnVsZS9yZXF1aXJlZC5qc1xuLy8gbW9kdWxlIGlkID0gMjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///24\n')},function(module,exports){eval('/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn "@media " + item[2] + "{" + content + "}";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join("");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === "string")\n\t\t\tmodules = [[null, modules, ""]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === "number")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = "(" + item[2] + ") and (" + mediaQuery + ")";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || \'\';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === \'function\') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn \'/*# sourceURL=\' + cssMapping.sourceRoot + source + \' */\'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join(\'\\n\');\n\t}\n\n\treturn [content].join(\'\\n\');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = \'sourceMappingURL=data:application/json;charset=utf-8;base64,\' + base64;\n\n\treturn \'/*# \' + data + \' */\';\n}\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanM/MTU5ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGdCQUFnQjtBQUNuRCxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxjQUFjOztBQUVsRTtBQUNBIiwiZmlsZSI6IjI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXG5cdC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblx0bGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0dmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCk7XG5cdFx0XHRpZihpdGVtWzJdKSB7XG5cdFx0XHRcdHJldHVybiBcIkBtZWRpYSBcIiArIGl0ZW1bMl0gKyBcIntcIiArIGNvbnRlbnQgKyBcIn1cIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb250ZW50O1xuXHRcdFx0fVxuXHRcdH0pLmpvaW4oXCJcIik7XG5cdH07XG5cblx0Ly8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3Rcblx0bGlzdC5pID0gZnVuY3Rpb24obW9kdWxlcywgbWVkaWFRdWVyeSkge1xuXHRcdGlmKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKVxuXHRcdFx0bW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgXCJcIl1dO1xuXHRcdHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpZCA9IHRoaXNbaV1bMF07XG5cdFx0XHRpZih0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcblx0XHR9XG5cdFx0Zm9yKGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBtb2R1bGVzW2ldO1xuXHRcdFx0Ly8gc2tpcCBhbHJlYWR5IGltcG9ydGVkIG1vZHVsZVxuXHRcdFx0Ly8gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgMTAwJSBwZXJmZWN0IGZvciB3ZWlyZCBtZWRpYSBxdWVyeSBjb21iaW5hdGlvbnNcblx0XHRcdC8vICB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXG5cdFx0XHQvLyAgSSBob3BlIHRoaXMgd2lsbCBuZXZlciBvY2N1ciAoSGV5IHRoaXMgd2F5IHdlIGhhdmUgc21hbGxlciBidW5kbGVzKVxuXHRcdFx0aWYodHlwZW9mIGl0ZW1bMF0gIT09IFwibnVtYmVyXCIgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcblx0XHRcdFx0aWYobWVkaWFRdWVyeSAmJiAhaXRlbVsyXSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuXHRcdFx0XHR9IGVsc2UgaWYobWVkaWFRdWVyeSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBcIihcIiArIGl0ZW1bMl0gKyBcIikgYW5kIChcIiArIG1lZGlhUXVlcnkgKyBcIilcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaXN0LnB1c2goaXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG5cdHZhciBjb250ZW50ID0gaXRlbVsxXSB8fCAnJztcblx0dmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXHRpZiAoIWNzc01hcHBpbmcpIHtcblx0XHRyZXR1cm4gY29udGVudDtcblx0fVxuXG5cdGlmICh1c2VTb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgc291cmNlTWFwcGluZyA9IHRvQ29tbWVudChjc3NNYXBwaW5nKTtcblx0XHR2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuXHRcdFx0cmV0dXJuICcvKiMgc291cmNlVVJMPScgKyBjc3NNYXBwaW5nLnNvdXJjZVJvb3QgKyBzb3VyY2UgKyAnICovJ1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbignXFxuJyk7XG5cdH1cblxuXHRyZXR1cm4gW2NvbnRlbnRdLmpvaW4oJ1xcbicpO1xufVxuXG4vLyBBZGFwdGVkIGZyb20gY29udmVydC1zb3VyY2UtbWFwIChNSVQpXG5mdW5jdGlvbiB0b0NvbW1lbnQoc291cmNlTWFwKSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuXHR2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKTtcblx0dmFyIGRhdGEgPSAnc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsJyArIGJhc2U2NDtcblxuXHRyZXR1cm4gJy8qIyAnICsgZGF0YSArICcgKi8nO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcbi8vIG1vZHVsZSBpZCA9IDI1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///25\n')},function(module,__webpack_exports__,__webpack_require__){"use strict";eval('Object.defineProperty(__webpack_exports__, "__esModule", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_vue__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_element_ui__ = __webpack_require__(29);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_element_ui___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_element_ui__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_element_ui_lib_theme_default_index_css__ = __webpack_require__(70);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_element_ui_lib_theme_default_index_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_element_ui_lib_theme_default_index_css__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__App_vue__ = __webpack_require__(76);\n\n\n\n\n\n__WEBPACK_IMPORTED_MODULE_0_vue__["default"].use(__WEBPACK_IMPORTED_MODULE_1_element_ui___default.a);\n\nnew __WEBPACK_IMPORTED_MODULE_0_vue__["default"]({\n el: \'#app\',\n render: function render(h) {\n return h(__WEBPACK_IMPORTED_MODULE_3__App_vue__["a" /* default */]);\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvbWFpbi5qcz8zNDc5Il0sIm5hbWVzIjpbIlZ1ZSIsInVzZSIsImVsIiwicmVuZGVyIiwiaCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRDQUFBQSxDQUFJQyxHQUFKLENBQVEsa0RBQVI7O0FBRUEsSUFBSSw0Q0FBSixDQUFRO0FBQ05DLE1BQUksTUFERTtBQUVOQyxVQUFRO0FBQUEsV0FBS0MsRUFBRSx5REFBRixDQUFMO0FBQUE7QUFGRixDQUFSIiwiZmlsZSI6IjI2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgRWxlbWVudFVJIGZyb20gJ2VsZW1lbnQtdWknXG5pbXBvcnQgJ2VsZW1lbnQtdWkvbGliL3RoZW1lLWRlZmF1bHQvaW5kZXguY3NzJ1xuaW1wb3J0IEFwcCBmcm9tICcuL0FwcC52dWUnXG5cblZ1ZS51c2UoRWxlbWVudFVJKVxuXG5uZXcgVnVlKHtcbiAgZWw6ICcjYXBwJyxcbiAgcmVuZGVyOiBoID0+IGgoQXBwKVxufSlcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9tYWluLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///26\n')},function(module,exports,__webpack_require__){eval("var apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\n__webpack_require__(28);\nexports.setImmediate = setImmediate;\nexports.clearImmediate = clearImmediate;\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcz9kN2FkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiMjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgYXBwbHkgPSBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHk7XG5cbi8vIERPTSBBUElzLCBmb3IgY29tcGxldGVuZXNzXG5cbmV4cG9ydHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRUaW1lb3V0LCB3aW5kb3csIGFyZ3VtZW50cyksIGNsZWFyVGltZW91dCk7XG59O1xuZXhwb3J0cy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRJbnRlcnZhbCwgd2luZG93LCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgdGltZW91dC5jbG9zZSgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHdpbmRvdywgdGhpcy5faWQpO1xufTtcblxuLy8gRG9lcyBub3Qgc3RhcnQgdGhlIHRpbWUsIGp1c3Qgc2V0cyB1cCB0aGUgbWVtYmVycyBuZWVkZWQuXG5leHBvcnRzLmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0sIG1zZWNzKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSBtc2Vjcztcbn07XG5cbmV4cG9ydHMudW5lbnJvbGwgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcbiAgaXRlbS5faWRsZVRpbWVvdXQgPSAtMTtcbn07XG5cbmV4cG9ydHMuX3VucmVmQWN0aXZlID0gZXhwb3J0cy5hY3RpdmUgPSBmdW5jdGlvbihpdGVtKSB7XG4gIGNsZWFyVGltZW91dChpdGVtLl9pZGxlVGltZW91dElkKTtcblxuICB2YXIgbXNlY3MgPSBpdGVtLl9pZGxlVGltZW91dDtcbiAgaWYgKG1zZWNzID49IDApIHtcbiAgICBpdGVtLl9pZGxlVGltZW91dElkID0gc2V0VGltZW91dChmdW5jdGlvbiBvblRpbWVvdXQoKSB7XG4gICAgICBpZiAoaXRlbS5fb25UaW1lb3V0KVxuICAgICAgICBpdGVtLl9vblRpbWVvdXQoKTtcbiAgICB9LCBtc2Vjcyk7XG4gIH1cbn07XG5cbi8vIHNldGltbWVkaWF0ZSBhdHRhY2hlcyBpdHNlbGYgdG8gdGhlIGdsb2JhbCBvYmplY3RcbnJlcXVpcmUoXCJzZXRpbW1lZGlhdGVcIik7XG5leHBvcnRzLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbmV4cG9ydHMuY2xlYXJJbW1lZGlhdGUgPSBjbGVhckltbWVkaWF0ZTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3RpbWVycy1icm93c2VyaWZ5L21haW4uanNcbi8vIG1vZHVsZSBpZCA9IDI3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///27\n")},function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {\n "use strict";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== "function") {\n callback = new Function("" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: "Wait until any invocations of this algorithm started before this one have completed."\n // So if we\'re currently running a task, we\'ll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // "too much recursion" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can\'t be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage("", "*");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = "setImmediate$" + Math.random() + "$";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === "string" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener("message", onGlobalMessage, false);\n } else {\n global.attachEvent("onmessage", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, "*");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it\'s been called.\n var script = doc.createElement("script");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don\'t get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === "[object process]") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && "onreadystatechange" in doc.createElement("script")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self));\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(15), __webpack_require__(6)))\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2V0aW1tZWRpYXRlL3NldEltbWVkaWF0ZS5qcz85YjJhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixpQkFBaUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDBDQUEwQyxzQkFBc0IsRUFBRTtBQUNsRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIyOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiAoZ2xvYmFsLCB1bmRlZmluZWQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIGlmIChnbG9iYWwuc2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmV4dEhhbmRsZSA9IDE7IC8vIFNwZWMgc2F5cyBncmVhdGVyIHRoYW4gemVyb1xuICAgIHZhciB0YXNrc0J5SGFuZGxlID0ge307XG4gICAgdmFyIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgIHZhciBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gICAgdmFyIHJlZ2lzdGVySW1tZWRpYXRlO1xuXG4gICAgZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGNhbGxiYWNrKSB7XG4gICAgICAvLyBDYWxsYmFjayBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjYWxsYmFjayA9IG5ldyBGdW5jdGlvbihcIlwiICsgY2FsbGJhY2spO1xuICAgICAgfVxuICAgICAgLy8gQ29weSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDFdO1xuICAgICAgfVxuICAgICAgLy8gU3RvcmUgYW5kIHJlZ2lzdGVyIHRoZSB0YXNrXG4gICAgICB2YXIgdGFzayA9IHsgY2FsbGJhY2s6IGNhbGxiYWNrLCBhcmdzOiBhcmdzIH07XG4gICAgICB0YXNrc0J5SGFuZGxlW25leHRIYW5kbGVdID0gdGFzaztcbiAgICAgIHJlZ2lzdGVySW1tZWRpYXRlKG5leHRIYW5kbGUpO1xuICAgICAgcmV0dXJuIG5leHRIYW5kbGUrKztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShoYW5kbGUpIHtcbiAgICAgICAgZGVsZXRlIHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW4odGFzaykge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB0YXNrLmNhbGxiYWNrO1xuICAgICAgICB2YXIgYXJncyA9IHRhc2suYXJncztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5JZlByZXNlbnQoaGFuZGxlKSB7XG4gICAgICAgIC8vIEZyb20gdGhlIHNwZWM6IFwiV2FpdCB1bnRpbCBhbnkgaW52b2NhdGlvbnMgb2YgdGhpcyBhbGdvcml0aG0gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBjb21wbGV0ZWQuXCJcbiAgICAgICAgLy8gU28gaWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgYSB0YXNrLCB3ZSdsbCBuZWVkIHRvIGRlbGF5IHRoaXMgaW52b2NhdGlvbi5cbiAgICAgICAgaWYgKGN1cnJlbnRseVJ1bm5pbmdBVGFzaykge1xuICAgICAgICAgICAgLy8gRGVsYXkgYnkgZG9pbmcgYSBzZXRUaW1lb3V0LiBzZXRJbW1lZGlhdGUgd2FzIHRyaWVkIGluc3RlYWQsIGJ1dCBpbiBGaXJlZm94IDcgaXQgZ2VuZXJhdGVkIGFcbiAgICAgICAgICAgIC8vIFwidG9vIG11Y2ggcmVjdXJzaW9uXCIgZXJyb3IuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bih0YXNrKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckltbWVkaWF0ZShoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkgeyBydW5JZlByZXNlbnQoaGFuZGxlKTsgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuVXNlUG9zdE1lc3NhZ2UoKSB7XG4gICAgICAgIC8vIFRoZSB0ZXN0IGFnYWluc3QgYGltcG9ydFNjcmlwdHNgIHByZXZlbnRzIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSBiZWluZyBpbnN0YWxsZWQgaW5zaWRlIGEgd2ViIHdvcmtlcixcbiAgICAgICAgLy8gd2hlcmUgYGdsb2JhbC5wb3N0TWVzc2FnZWAgbWVhbnMgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFuZCBjYW4ndCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuXG4gICAgICAgIGlmIChnbG9iYWwucG9zdE1lc3NhZ2UgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICB2YXIgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgb2xkT25NZXNzYWdlID0gZ2xvYmFsLm9ubWVzc2FnZTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gZmFsc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKFwiXCIsIFwiKlwiKTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBvbGRPbk1lc3NhZ2U7XG4gICAgICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICAvLyBJbnN0YWxscyBhbiBldmVudCBoYW5kbGVyIG9uIGBnbG9iYWxgIGZvciB0aGUgYG1lc3NhZ2VgIGV2ZW50OiBzZWVcbiAgICAgICAgLy8gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vd2luZG93LnBvc3RNZXNzYWdlXG4gICAgICAgIC8vICogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvY29tbXMuaHRtbCNjcm9zc0RvY3VtZW50TWVzc2FnZXNcblxuICAgICAgICB2YXIgbWVzc2FnZVByZWZpeCA9IFwic2V0SW1tZWRpYXRlJFwiICsgTWF0aC5yYW5kb20oKSArIFwiJFwiO1xuICAgICAgICB2YXIgb25HbG9iYWxNZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBldmVudC5kYXRhID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5pbmRleE9mKG1lc3NhZ2VQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KCtldmVudC5kYXRhLnNsaWNlKG1lc3NhZ2VQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbG9iYWwuYXR0YWNoRXZlbnQoXCJvbm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UobWVzc2FnZVByZWZpeCArIGhhbmRsZSwgXCIqXCIpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgPHNjcmlwdD4gZWxlbWVudDsgaXRzIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnQgd2lsbCBiZSBmaXJlZCBhc3luY2hyb25vdXNseSBvbmNlIGl0IGlzIGluc2VydGVkXG4gICAgICAgICAgICAvLyBpbnRvIHRoZSBkb2N1bWVudC4gRG8gc28sIHRodXMgcXVldWluZyB1cCB0aGUgdGFzay4gUmVtZW1iZXIgdG8gY2xlYW4gdXAgb25jZSBpdCdzIGJlZW4gY2FsbGVkLlxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIElmIHN1cHBvcnRlZCwgd2Ugc2hvdWxkIGF0dGFjaCB0byB0aGUgcHJvdG90eXBlIG9mIGdsb2JhbCwgc2luY2UgdGhhdCBpcyB3aGVyZSBzZXRUaW1lb3V0IGV0IGFsLiBsaXZlLlxuICAgIHZhciBhdHRhY2hUbyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsKTtcbiAgICBhdHRhY2hUbyA9IGF0dGFjaFRvICYmIGF0dGFjaFRvLnNldFRpbWVvdXQgPyBhdHRhY2hUbyA6IGdsb2JhbDtcblxuICAgIC8vIERvbid0IGdldCBmb29sZWQgYnkgZS5nLiBicm93c2VyaWZ5IGVudmlyb25tZW50cy5cbiAgICBpZiAoe30udG9TdHJpbmcuY2FsbChnbG9iYWwucHJvY2VzcykgPT09IFwiW29iamVjdCBwcm9jZXNzXVwiKSB7XG4gICAgICAgIC8vIEZvciBOb2RlLmpzIGJlZm9yZSAwLjlcbiAgICAgICAgaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoY2FuVXNlUG9zdE1lc3NhZ2UoKSkge1xuICAgICAgICAvLyBGb3Igbm9uLUlFMTAgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAvLyBGb3Igd2ViIHdvcmtlcnMsIHdoZXJlIHN1cHBvcnRlZFxuICAgICAgICBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChkb2MgJiYgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBpbiBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSkge1xuICAgICAgICAvLyBGb3IgSUUgNuKAkzhcbiAgICAgICAgaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG9sZGVyIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKTtcbiAgICB9XG5cbiAgICBhdHRhY2hUby5zZXRJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGU7XG4gICAgYXR0YWNoVG8uY2xlYXJJbW1lZGlhdGUgPSBjbGVhckltbWVkaWF0ZTtcbn0odHlwZW9mIHNlbGYgPT09IFwidW5kZWZpbmVkXCIgPyB0eXBlb2YgZ2xvYmFsID09PSBcInVuZGVmaW5lZFwiID8gdGhpcyA6IGdsb2JhbCA6IHNlbGYpKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanNcbi8vIG1vZHVsZSBpZCA9IDI4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///28\n')},function(module,exports,__webpack_require__){eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(1);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _index = __webpack_require__(2);\n\n\tvar _index2 = _interopRequireDefault(_index);\n\n\tvar _index3 = __webpack_require__(11);\n\n\tvar _index4 = _interopRequireDefault(_index3);\n\n\tvar _index5 = __webpack_require__(17);\n\n\tvar _index6 = _interopRequireDefault(_index5);\n\n\tvar _index7 = __webpack_require__(28);\n\n\tvar _index8 = _interopRequireDefault(_index7);\n\n\tvar _index9 = __webpack_require__(33);\n\n\tvar _index10 = _interopRequireDefault(_index9);\n\n\tvar _index11 = __webpack_require__(37);\n\n\tvar _index12 = _interopRequireDefault(_index11);\n\n\tvar _index13 = __webpack_require__(41);\n\n\tvar _index14 = _interopRequireDefault(_index13);\n\n\tvar _index15 = __webpack_require__(46);\n\n\tvar _index16 = _interopRequireDefault(_index15);\n\n\tvar _index17 = __webpack_require__(52);\n\n\tvar _index18 = _interopRequireDefault(_index17);\n\n\tvar _index19 = __webpack_require__(56);\n\n\tvar _index20 = _interopRequireDefault(_index19);\n\n\tvar _index21 = __webpack_require__(60);\n\n\tvar _index22 = _interopRequireDefault(_index21);\n\n\tvar _index23 = __webpack_require__(66);\n\n\tvar _index24 = _interopRequireDefault(_index23);\n\n\tvar _index25 = __webpack_require__(71);\n\n\tvar _index26 = _interopRequireDefault(_index25);\n\n\tvar _index27 = __webpack_require__(75);\n\n\tvar _index28 = _interopRequireDefault(_index27);\n\n\tvar _index29 = __webpack_require__(79);\n\n\tvar _index30 = _interopRequireDefault(_index29);\n\n\tvar _index31 = __webpack_require__(83);\n\n\tvar _index32 = _interopRequireDefault(_index31);\n\n\tvar _index33 = __webpack_require__(87);\n\n\tvar _index34 = _interopRequireDefault(_index33);\n\n\tvar _index35 = __webpack_require__(91);\n\n\tvar _index36 = _interopRequireDefault(_index35);\n\n\tvar _index37 = __webpack_require__(95);\n\n\tvar _index38 = _interopRequireDefault(_index37);\n\n\tvar _index39 = __webpack_require__(99);\n\n\tvar _index40 = _interopRequireDefault(_index39);\n\n\tvar _index41 = __webpack_require__(114);\n\n\tvar _index42 = _interopRequireDefault(_index41);\n\n\tvar _index43 = __webpack_require__(115);\n\n\tvar _index44 = _interopRequireDefault(_index43);\n\n\tvar _index45 = __webpack_require__(119);\n\n\tvar _index46 = _interopRequireDefault(_index45);\n\n\tvar _index47 = __webpack_require__(123);\n\n\tvar _index48 = _interopRequireDefault(_index47);\n\n\tvar _index49 = __webpack_require__(127);\n\n\tvar _index50 = _interopRequireDefault(_index49);\n\n\tvar _index51 = __webpack_require__(147);\n\n\tvar _index52 = _interopRequireDefault(_index51);\n\n\tvar _index53 = __webpack_require__(149);\n\n\tvar _index54 = _interopRequireDefault(_index53);\n\n\tvar _index55 = __webpack_require__(177);\n\n\tvar _index56 = _interopRequireDefault(_index55);\n\n\tvar _index57 = __webpack_require__(182);\n\n\tvar _index58 = _interopRequireDefault(_index57);\n\n\tvar _index59 = __webpack_require__(187);\n\n\tvar _index60 = _interopRequireDefault(_index59);\n\n\tvar _index61 = __webpack_require__(192);\n\n\tvar _index62 = _interopRequireDefault(_index61);\n\n\tvar _index63 = __webpack_require__(195);\n\n\tvar _index64 = _interopRequireDefault(_index63);\n\n\tvar _index65 = __webpack_require__(200);\n\n\tvar _index66 = _interopRequireDefault(_index65);\n\n\tvar _index67 = __webpack_require__(204);\n\n\tvar _index68 = _interopRequireDefault(_index67);\n\n\tvar _index69 = __webpack_require__(208);\n\n\tvar _index70 = _interopRequireDefault(_index69);\n\n\tvar _index71 = __webpack_require__(212);\n\n\tvar _index72 = _interopRequireDefault(_index71);\n\n\tvar _index73 = __webpack_require__(217);\n\n\tvar _index74 = _interopRequireDefault(_index73);\n\n\tvar _index75 = __webpack_require__(225);\n\n\tvar _index76 = _interopRequireDefault(_index75);\n\n\tvar _index77 = __webpack_require__(229);\n\n\tvar _index78 = _interopRequireDefault(_index77);\n\n\tvar _index79 = __webpack_require__(233);\n\n\tvar _index80 = _interopRequireDefault(_index79);\n\n\tvar _index81 = __webpack_require__(243);\n\n\tvar _index82 = _interopRequireDefault(_index81);\n\n\tvar _index83 = __webpack_require__(247);\n\n\tvar _index84 = _interopRequireDefault(_index83);\n\n\tvar _index85 = __webpack_require__(252);\n\n\tvar _index86 = _interopRequireDefault(_index85);\n\n\tvar _index87 = __webpack_require__(260);\n\n\tvar _index88 = _interopRequireDefault(_index87);\n\n\tvar _index89 = __webpack_require__(266);\n\n\tvar _index90 = _interopRequireDefault(_index89);\n\n\tvar _index91 = __webpack_require__(270);\n\n\tvar _index92 = _interopRequireDefault(_index91);\n\n\tvar _index93 = __webpack_require__(272);\n\n\tvar _index94 = _interopRequireDefault(_index93);\n\n\tvar _index95 = __webpack_require__(274);\n\n\tvar _index96 = _interopRequireDefault(_index95);\n\n\tvar _index97 = __webpack_require__(290);\n\n\tvar _index98 = _interopRequireDefault(_index97);\n\n\tvar _index99 = __webpack_require__(294);\n\n\tvar _index100 = _interopRequireDefault(_index99);\n\n\tvar _index101 = __webpack_require__(298);\n\n\tvar _index102 = _interopRequireDefault(_index101);\n\n\tvar _index103 = __webpack_require__(308);\n\n\tvar _index104 = _interopRequireDefault(_index103);\n\n\tvar _index105 = __webpack_require__(312);\n\n\tvar _index106 = _interopRequireDefault(_index105);\n\n\tvar _index107 = __webpack_require__(316);\n\n\tvar _index108 = _interopRequireDefault(_index107);\n\n\tvar _index109 = __webpack_require__(320);\n\n\tvar _index110 = _interopRequireDefault(_index109);\n\n\tvar _index111 = __webpack_require__(324);\n\n\tvar _index112 = _interopRequireDefault(_index111);\n\n\tvar _index113 = __webpack_require__(328);\n\n\tvar _index114 = _interopRequireDefault(_index113);\n\n\tvar _index115 = __webpack_require__(332);\n\n\tvar _index116 = _interopRequireDefault(_index115);\n\n\tvar _index117 = __webpack_require__(336);\n\n\tvar _index118 = _interopRequireDefault(_index117);\n\n\tvar _index119 = __webpack_require__(340);\n\n\tvar _index120 = _interopRequireDefault(_index119);\n\n\tvar _index121 = __webpack_require__(344);\n\n\tvar _index122 = _interopRequireDefault(_index121);\n\n\tvar _index123 = __webpack_require__(348);\n\n\tvar _index124 = _interopRequireDefault(_index123);\n\n\tvar _index125 = __webpack_require__(356);\n\n\tvar _index126 = _interopRequireDefault(_index125);\n\n\tvar _index127 = __webpack_require__(374);\n\n\tvar _index128 = _interopRequireDefault(_index127);\n\n\tvar _locale = __webpack_require__(111);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tvar _collapseTransition = __webpack_require__(49);\n\n\tvar _collapseTransition2 = _interopRequireDefault(_collapseTransition);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* Automatic generated by './build/bin/build-entry.js' */\n\n\tvar components = [_index2.default, _index4.default, _index6.default, _index8.default, _index10.default, _index12.default, _index14.default, _index16.default, _index18.default, _index20.default, _index22.default, _index24.default, _index26.default, _index28.default, _index30.default, _index32.default, _index34.default, _index36.default, _index38.default, _index40.default, _index42.default, _index44.default, _index46.default, _index48.default, _index50.default, _index52.default, _index54.default, _index56.default, _index58.default, _index60.default, _index62.default, _index66.default, _index68.default, _index70.default, _index72.default, _index74.default, _index76.default, _index78.default, _index80.default, _index82.default, _index86.default, _index90.default, _index92.default, _index94.default, _index96.default, _index98.default, _index100.default, _index104.default, _index106.default, _index108.default, _index110.default, _index112.default, _index114.default, _index116.default, _index118.default, _index120.default, _index122.default, _index124.default, _index126.default, _index128.default, _collapseTransition2.default];\n\n\tvar install = function install(Vue) {\n\t var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t /* istanbul ignore if */\n\t if (install.installed) return;\n\t _locale2.default.use(opts.locale);\n\t _locale2.default.i18n(opts.i18n);\n\n\t components.map(function (component) {\n\t Vue.component(component.name, component);\n\t });\n\n\t Vue.use(_index88.default.directive);\n\n\t Vue.prototype.$loading = _index88.default.service;\n\t Vue.prototype.$msgbox = _index64.default;\n\t Vue.prototype.$alert = _index64.default.alert;\n\t Vue.prototype.$confirm = _index64.default.confirm;\n\t Vue.prototype.$prompt = _index64.default.prompt;\n\t Vue.prototype.$notify = _index84.default;\n\t Vue.prototype.$message = _index102.default;\n\t};\n\n\t/* istanbul ignore if */\n\tif (typeof window !== 'undefined' && window.Vue) {\n\t install(window.Vue);\n\t};\n\n\tmodule.exports = {\n\t version: '1.4.6',\n\t locale: _locale2.default.use,\n\t i18n: _locale2.default.i18n,\n\t install: install,\n\t CollapseTransition: _collapseTransition2.default,\n\t Loading: _index88.default,\n\t Pagination: _index2.default,\n\t Dialog: _index4.default,\n\t Autocomplete: _index6.default,\n\t Dropdown: _index8.default,\n\t DropdownMenu: _index10.default,\n\t DropdownItem: _index12.default,\n\t Menu: _index14.default,\n\t Submenu: _index16.default,\n\t MenuItem: _index18.default,\n\t MenuItemGroup: _index20.default,\n\t Input: _index22.default,\n\t InputNumber: _index24.default,\n\t Radio: _index26.default,\n\t RadioGroup: _index28.default,\n\t RadioButton: _index30.default,\n\t Checkbox: _index32.default,\n\t CheckboxButton: _index34.default,\n\t CheckboxGroup: _index36.default,\n\t Switch: _index38.default,\n\t Select: _index40.default,\n\t Option: _index42.default,\n\t OptionGroup: _index44.default,\n\t Button: _index46.default,\n\t ButtonGroup: _index48.default,\n\t Table: _index50.default,\n\t TableColumn: _index52.default,\n\t DatePicker: _index54.default,\n\t TimeSelect: _index56.default,\n\t TimePicker: _index58.default,\n\t Popover: _index60.default,\n\t Tooltip: _index62.default,\n\t MessageBox: _index64.default,\n\t Breadcrumb: _index66.default,\n\t BreadcrumbItem: _index68.default,\n\t Form: _index70.default,\n\t FormItem: _index72.default,\n\t Tabs: _index74.default,\n\t TabPane: _index76.default,\n\t Tag: _index78.default,\n\t Tree: _index80.default,\n\t Alert: _index82.default,\n\t Notification: _index84.default,\n\t Slider: _index86.default,\n\t Icon: _index90.default,\n\t Row: _index92.default,\n\t Col: _index94.default,\n\t Upload: _index96.default,\n\t Progress: _index98.default,\n\t Spinner: _index100.default,\n\t Message: _index102.default,\n\t Badge: _index104.default,\n\t Card: _index106.default,\n\t Rate: _index108.default,\n\t Steps: _index110.default,\n\t Step: _index112.default,\n\t Carousel: _index114.default,\n\t Scrollbar: _index116.default,\n\t CarouselItem: _index118.default,\n\t Collapse: _index120.default,\n\t CollapseItem: _index122.default,\n\t Cascader: _index124.default,\n\t ColorPicker: _index126.default,\n\t Transfer: _index128.default\n\t};\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _pagination = __webpack_require__(3);\n\n\tvar _pagination2 = _interopRequireDefault(_pagination);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_pagination2.default.install = function (Vue) {\n\t Vue.component(_pagination2.default.name, _pagination2.default);\n\t};\n\n\texports.default = _pagination2.default;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _pager = __webpack_require__(4);\n\n\tvar _pager2 = _interopRequireDefault(_pager);\n\n\tvar _select = __webpack_require__(8);\n\n\tvar _select2 = _interopRequireDefault(_select);\n\n\tvar _option = __webpack_require__(9);\n\n\tvar _option2 = _interopRequireDefault(_option);\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElPagination',\n\n\t props: {\n\t pageSize: {\n\t type: Number,\n\t default: 10\n\t },\n\n\t small: Boolean,\n\n\t total: Number,\n\n\t pageCount: Number,\n\n\t currentPage: {\n\t type: Number,\n\t default: 1\n\t },\n\n\t layout: {\n\t default: 'prev, pager, next, jumper, ->, total'\n\t },\n\n\t pageSizes: {\n\t type: Array,\n\t default: function _default() {\n\t return [10, 20, 30, 40, 50, 100];\n\t }\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t internalCurrentPage: 1,\n\t internalPageSize: 0\n\t };\n\t },\n\t render: function render(h) {\n\t var template = h(\n\t 'div',\n\t { 'class': 'el-pagination' },\n\t []\n\t );\n\t var layout = this.layout || '';\n\t if (!layout) return;\n\t var TEMPLATE_MAP = {\n\t prev: h(\n\t 'prev',\n\t null,\n\t []\n\t ),\n\t jumper: h(\n\t 'jumper',\n\t null,\n\t []\n\t ),\n\t pager: h(\n\t 'pager',\n\t {\n\t attrs: { currentPage: this.internalCurrentPage, pageCount: this.internalPageCount },\n\t on: {\n\t 'change': this.handleCurrentChange\n\t }\n\t },\n\t []\n\t ),\n\t next: h(\n\t 'next',\n\t null,\n\t []\n\t ),\n\t sizes: h(\n\t 'sizes',\n\t {\n\t attrs: { pageSizes: this.pageSizes }\n\t },\n\t []\n\t ),\n\t slot: h(\n\t 'my-slot',\n\t null,\n\t []\n\t ),\n\t total: h(\n\t 'total',\n\t null,\n\t []\n\t )\n\t };\n\t var components = layout.split(',').map(function (item) {\n\t return item.trim();\n\t });\n\t var rightWrapper = h(\n\t 'div',\n\t { 'class': 'el-pagination__rightwrapper' },\n\t []\n\t );\n\t var haveRightWrapper = false;\n\n\t if (this.small) {\n\t template.data.class += ' el-pagination--small';\n\t }\n\n\t components.forEach(function (compo) {\n\t if (compo === '->') {\n\t haveRightWrapper = true;\n\t return;\n\t }\n\n\t if (!haveRightWrapper) {\n\t template.children.push(TEMPLATE_MAP[compo]);\n\t } else {\n\t rightWrapper.children.push(TEMPLATE_MAP[compo]);\n\t }\n\t });\n\n\t if (haveRightWrapper) {\n\t template.children.unshift(rightWrapper);\n\t }\n\n\t return template;\n\t },\n\n\n\t components: {\n\t MySlot: {\n\t render: function render(h) {\n\t return this.$parent.$slots.default ? this.$parent.$slots.default[0] : '';\n\t }\n\t },\n\t Prev: {\n\t render: function render(h) {\n\t return h(\n\t 'button',\n\t {\n\t attrs: {\n\t type: 'button'\n\t },\n\t 'class': ['btn-prev', { disabled: this.$parent.internalCurrentPage <= 1 }],\n\t on: {\n\t 'click': this.$parent.prev\n\t }\n\t },\n\t [h(\n\t 'i',\n\t { 'class': 'el-icon el-icon-arrow-left' },\n\t []\n\t )]\n\t );\n\t }\n\t },\n\n\t Next: {\n\t render: function render(h) {\n\t return h(\n\t 'button',\n\t {\n\t attrs: {\n\t type: 'button'\n\t },\n\t 'class': ['btn-next', { disabled: this.$parent.internalCurrentPage === this.$parent.internalPageCount || this.$parent.internalPageCount === 0 }],\n\t on: {\n\t 'click': this.$parent.next\n\t }\n\t },\n\t [h(\n\t 'i',\n\t { 'class': 'el-icon el-icon-arrow-right' },\n\t []\n\t )]\n\t );\n\t }\n\t },\n\n\t Sizes: {\n\t mixins: [_locale2.default],\n\n\t props: {\n\t pageSizes: Array\n\t },\n\n\t watch: {\n\t pageSizes: {\n\t immediate: true,\n\t handler: function handler(value) {\n\t if (Array.isArray(value)) {\n\t this.$parent.internalPageSize = value.indexOf(this.$parent.pageSize) > -1 ? this.$parent.pageSize : this.pageSizes[0];\n\t }\n\t }\n\t }\n\t },\n\n\t render: function render(h) {\n\t var _this = this;\n\n\t return h(\n\t 'span',\n\t { 'class': 'el-pagination__sizes' },\n\t [h(\n\t 'el-select',\n\t {\n\t attrs: {\n\t value: this.$parent.internalPageSize\n\t },\n\t on: {\n\t 'input': this.handleChange\n\t }\n\t },\n\t [this.pageSizes.map(function (item) {\n\t return h(\n\t 'el-option',\n\t {\n\t attrs: {\n\t value: item,\n\t label: item + ' ' + _this.t('el.pagination.pagesize') }\n\t },\n\t []\n\t );\n\t })]\n\t )]\n\t );\n\t },\n\n\n\t components: {\n\t ElSelect: _select2.default,\n\t ElOption: _option2.default\n\t },\n\n\t methods: {\n\t handleChange: function handleChange(val) {\n\t if (val !== this.$parent.internalPageSize) {\n\t this.$parent.internalPageSize = val = parseInt(val, 10);\n\t this.$parent.$emit('size-change', val);\n\t }\n\t }\n\t }\n\t },\n\n\t Jumper: {\n\t mixins: [_locale2.default],\n\n\t data: function data() {\n\t return {\n\t oldValue: null\n\t };\n\t },\n\n\n\t methods: {\n\t handleFocus: function handleFocus(event) {\n\t this.oldValue = event.target.value;\n\t },\n\t handleBlur: function handleBlur(_ref) {\n\t var target = _ref.target;\n\n\t this.reassignMaxValue(target);\n\t },\n\t handleKeyUp: function handleKeyUp(event) {\n\t var key = event.key || '';\n\t var keyCode = event.keyCode || '';\n\t if (key && key === 'Enter' || keyCode && keyCode === 13) {\n\t this.reassignMaxValue(event.target);\n\t this.handleChange({ target: event.target });\n\t }\n\t },\n\t handleChange: function handleChange(_ref2) {\n\t var target = _ref2.target;\n\n\t this.$parent.internalCurrentPage = this.$parent.getValidCurrentPage(target.value);\n\t this.oldValue = null;\n\t },\n\t reassignMaxValue: function reassignMaxValue(target) {\n\t if (+target.value > this.$parent.internalPageCount) {\n\t target.value = this.$parent.internalPageCount;\n\t }\n\t }\n\t },\n\n\t render: function render(h) {\n\t return h(\n\t 'span',\n\t { 'class': 'el-pagination__jump' },\n\t [this.t('el.pagination.goto'), h(\n\t 'input',\n\t {\n\t 'class': 'el-pagination__editor',\n\t attrs: { type: 'number',\n\t min: 1,\n\t max: this.$parent.internalPageCount,\n\t value: this.$parent.internalCurrentPage,\n\n\t number: true },\n\t domProps: {\n\t 'value': this.$parent.internalCurrentPage\n\t },\n\t on: {\n\t 'change': this.handleChange,\n\t 'focus': this.handleFocus,\n\t 'blur': this.handleBlur,\n\t 'keyup': this.handleKeyUp\n\t }\n\t },\n\t []\n\t ), this.t('el.pagination.pageClassifier')]\n\t );\n\t }\n\t },\n\n\t Total: {\n\t mixins: [_locale2.default],\n\n\t render: function render(h) {\n\t return typeof this.$parent.total === 'number' ? h(\n\t 'span',\n\t { 'class': 'el-pagination__total' },\n\t [this.t('el.pagination.total', { total: this.$parent.total })]\n\t ) : '';\n\t }\n\t },\n\n\t Pager: _pager2.default\n\t },\n\n\t methods: {\n\t handleCurrentChange: function handleCurrentChange(val) {\n\t this.internalCurrentPage = this.getValidCurrentPage(val);\n\t },\n\t prev: function prev() {\n\t var newVal = this.internalCurrentPage - 1;\n\t this.internalCurrentPage = this.getValidCurrentPage(newVal);\n\t },\n\t next: function next() {\n\t var newVal = this.internalCurrentPage + 1;\n\t this.internalCurrentPage = this.getValidCurrentPage(newVal);\n\t },\n\t getValidCurrentPage: function getValidCurrentPage(value) {\n\t value = parseInt(value, 10);\n\n\t var havePageCount = typeof this.internalPageCount === 'number';\n\n\t var resetValue = void 0;\n\t if (!havePageCount) {\n\t if (isNaN(value) || value < 1) resetValue = 1;\n\t } else {\n\t if (value < 1) {\n\t resetValue = 1;\n\t } else if (value > this.internalPageCount) {\n\t resetValue = this.internalPageCount;\n\t }\n\t }\n\n\t if (resetValue === undefined && isNaN(value)) {\n\t resetValue = 1;\n\t } else if (resetValue === 0) {\n\t resetValue = 1;\n\t }\n\n\t return resetValue === undefined ? value : resetValue;\n\t }\n\t },\n\n\t computed: {\n\t internalPageCount: function internalPageCount() {\n\t if (typeof this.total === 'number') {\n\t return Math.ceil(this.total / this.internalPageSize);\n\t } else if (typeof this.pageCount === 'number') {\n\t return this.pageCount;\n\t }\n\t return null;\n\t }\n\t },\n\n\t watch: {\n\t currentPage: {\n\t immediate: true,\n\t handler: function handler(val) {\n\t this.internalCurrentPage = val;\n\t }\n\t },\n\n\t pageSize: {\n\t immediate: true,\n\t handler: function handler(val) {\n\t this.internalPageSize = val;\n\t }\n\t },\n\n\t internalCurrentPage: function internalCurrentPage(newVal, oldVal) {\n\t var _this2 = this;\n\n\t newVal = parseInt(newVal, 10);\n\n\t /* istanbul ignore if */\n\t if (isNaN(newVal)) {\n\t newVal = oldVal || 1;\n\t } else {\n\t newVal = this.getValidCurrentPage(newVal);\n\t }\n\n\t if (newVal !== undefined) {\n\t this.$nextTick(function () {\n\t _this2.internalCurrentPage = newVal;\n\t if (oldVal !== newVal) {\n\t _this2.$emit('update:currentPage', newVal);\n\t _this2.$emit('current-change', _this2.internalCurrentPage);\n\t }\n\t });\n\t } else {\n\t this.$emit('update:currentPage', newVal);\n\t this.$emit('current-change', this.internalCurrentPage);\n\t }\n\t },\n\t internalPageCount: function internalPageCount(newVal) {\n\t /* istanbul ignore if */\n\t var oldPage = this.internalCurrentPage;\n\t if (newVal > 0 && oldPage === 0) {\n\t this.internalCurrentPage = 1;\n\t } else if (oldPage > newVal) {\n\t this.internalCurrentPage = newVal === 0 ? 1 : newVal;\n\t }\n\t }\n\t }\n\t};\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(6),\n\t /* template */\n\t __webpack_require__(7),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t/* globals __VUE_SSR_CONTEXT__ */\n\n\t// this module is a runtime utility for cleaner component module output and will\n\t// be included in the final webpack user bundle\n\n\tmodule.exports = function normalizeComponent (\n\t rawScriptExports,\n\t compiledTemplate,\n\t injectStyles,\n\t scopeId,\n\t moduleIdentifier /* server only */\n\t) {\n\t var esModule\n\t var scriptExports = rawScriptExports = rawScriptExports || {}\n\n\t // ES6 modules interop\n\t var type = typeof rawScriptExports.default\n\t if (type === 'object' || type === 'function') {\n\t esModule = rawScriptExports\n\t scriptExports = rawScriptExports.default\n\t }\n\n\t // Vue.extend constructor export interop\n\t var options = typeof scriptExports === 'function'\n\t ? scriptExports.options\n\t : scriptExports\n\n\t // render functions\n\t if (compiledTemplate) {\n\t options.render = compiledTemplate.render\n\t options.staticRenderFns = compiledTemplate.staticRenderFns\n\t }\n\n\t // scopedId\n\t if (scopeId) {\n\t options._scopeId = scopeId\n\t }\n\n\t var hook\n\t if (moduleIdentifier) { // server build\n\t hook = function (context) {\n\t // 2.3 injection\n\t context = context || (this.$vnode && this.$vnode.ssrContext)\n\t // 2.2 with runInNewContext: true\n\t if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n\t context = __VUE_SSR_CONTEXT__\n\t }\n\t // inject component styles\n\t if (injectStyles) {\n\t injectStyles.call(this, context)\n\t }\n\t // register component module identifier for async chunk inferrence\n\t if (context && context._registeredComponents) {\n\t context._registeredComponents.add(moduleIdentifier)\n\t }\n\t }\n\t // used by ssr in case component is cached and beforeCreate\n\t // never gets called\n\t options._ssrRegister = hook\n\t } else if (injectStyles) {\n\t hook = injectStyles\n\t }\n\n\t if (hook) {\n\t // inject component registration as beforeCreate hook\n\t var existing = options.beforeCreate\n\t options.beforeCreate = existing\n\t ? [].concat(existing, hook)\n\t : [hook]\n\t }\n\n\t return {\n\t esModule: esModule,\n\t exports: scriptExports,\n\t options: options\n\t }\n\t}\n\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElPager',\n\n\t props: {\n\t currentPage: Number,\n\n\t pageCount: Number\n\t },\n\n\t watch: {\n\t showPrevMore: function showPrevMore(val) {\n\t if (!val) this.quickprevIconClass = 'el-icon-more';\n\t },\n\t showNextMore: function showNextMore(val) {\n\t if (!val) this.quicknextIconClass = 'el-icon-more';\n\t }\n\t },\n\n\t methods: {\n\t onPagerClick: function onPagerClick(event) {\n\t var target = event.target;\n\t if (target.tagName === 'UL') {\n\t return;\n\t }\n\n\t var newPage = Number(event.target.textContent);\n\t var pageCount = this.pageCount;\n\t var currentPage = this.currentPage;\n\n\t if (target.className.indexOf('more') !== -1) {\n\t if (target.className.indexOf('quickprev') !== -1) {\n\t newPage = currentPage - 5;\n\t } else if (target.className.indexOf('quicknext') !== -1) {\n\t newPage = currentPage + 5;\n\t }\n\t }\n\n\t /* istanbul ignore if */\n\t if (!isNaN(newPage)) {\n\t if (newPage < 1) {\n\t newPage = 1;\n\t }\n\n\t if (newPage > pageCount) {\n\t newPage = pageCount;\n\t }\n\t }\n\n\t if (newPage !== currentPage) {\n\t this.$emit('change', newPage);\n\t }\n\t }\n\t },\n\n\t computed: {\n\t pagers: function pagers() {\n\t var pagerCount = 7;\n\n\t var currentPage = Number(this.currentPage);\n\t var pageCount = Number(this.pageCount);\n\n\t var showPrevMore = false;\n\t var showNextMore = false;\n\n\t if (pageCount > pagerCount) {\n\t if (currentPage > pagerCount - 3) {\n\t showPrevMore = true;\n\t }\n\n\t if (currentPage < pageCount - 3) {\n\t showNextMore = true;\n\t }\n\t }\n\n\t var array = [];\n\n\t if (showPrevMore && !showNextMore) {\n\t var startPage = pageCount - (pagerCount - 2);\n\t for (var i = startPage; i < pageCount; i++) {\n\t array.push(i);\n\t }\n\t } else if (!showPrevMore && showNextMore) {\n\t for (var _i = 2; _i < pagerCount; _i++) {\n\t array.push(_i);\n\t }\n\t } else if (showPrevMore && showNextMore) {\n\t var offset = Math.floor(pagerCount / 2) - 1;\n\t for (var _i2 = currentPage - offset; _i2 <= currentPage + offset; _i2++) {\n\t array.push(_i2);\n\t }\n\t } else {\n\t for (var _i3 = 2; _i3 < pageCount; _i3++) {\n\t array.push(_i3);\n\t }\n\t }\n\n\t this.showPrevMore = showPrevMore;\n\t this.showNextMore = showNextMore;\n\n\t return array;\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t current: null,\n\t showPrevMore: false,\n\t showNextMore: false,\n\t quicknextIconClass: 'el-icon-more',\n\t quickprevIconClass: 'el-icon-more'\n\t };\n\t }\n\t};\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('ul', {\n\t staticClass: \"el-pager\",\n\t on: {\n\t \"click\": _vm.onPagerClick\n\t }\n\t }, [(_vm.pageCount > 0) ? _c('li', {\n\t staticClass: \"number\",\n\t class: {\n\t active: _vm.currentPage === 1\n\t }\n\t }, [_vm._v(\"1\")]) : _vm._e(), (_vm.showPrevMore) ? _c('li', {\n\t staticClass: \"el-icon more btn-quickprev\",\n\t class: [_vm.quickprevIconClass],\n\t on: {\n\t \"mouseenter\": function($event) {\n\t _vm.quickprevIconClass = 'el-icon-d-arrow-left'\n\t },\n\t \"mouseleave\": function($event) {\n\t _vm.quickprevIconClass = 'el-icon-more'\n\t }\n\t }\n\t }) : _vm._e(), _vm._l((_vm.pagers), function(pager) {\n\t return _c('li', {\n\t staticClass: \"number\",\n\t class: {\n\t active: _vm.currentPage === pager\n\t }\n\t }, [_vm._v(_vm._s(pager))])\n\t }), (_vm.showNextMore) ? _c('li', {\n\t staticClass: \"el-icon more btn-quicknext\",\n\t class: [_vm.quicknextIconClass],\n\t on: {\n\t \"mouseenter\": function($event) {\n\t _vm.quicknextIconClass = 'el-icon-d-arrow-right'\n\t },\n\t \"mouseleave\": function($event) {\n\t _vm.quicknextIconClass = 'el-icon-more'\n\t }\n\t }\n\t }) : _vm._e(), (_vm.pageCount > 1) ? _c('li', {\n\t staticClass: \"number\",\n\t class: {\n\t active: _vm.currentPage === _vm.pageCount\n\t }\n\t }, [_vm._v(_vm._s(_vm.pageCount))]) : _vm._e()], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(30);\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(36);\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(20);\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _component = __webpack_require__(12);\n\n\tvar _component2 = _interopRequireDefault(_component);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_component2.default.install = function (Vue) {\n\t Vue.component(_component2.default.name, _component2.default);\n\t};\n\n\texports.default = _component2.default;\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(13),\n\t /* template */\n\t __webpack_require__(16),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _popup = __webpack_require__(14);\n\n\tvar _popup2 = _interopRequireDefault(_popup);\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElDialog',\n\n\t mixins: [_popup2.default, _emitter2.default],\n\n\t props: {\n\t title: {\n\t type: String,\n\t default: ''\n\t },\n\n\t modal: {\n\t type: Boolean,\n\t default: true\n\t },\n\n\t modalAppendToBody: {\n\t type: Boolean,\n\t default: true\n\t },\n\n\t lockScroll: {\n\t type: Boolean,\n\t default: true\n\t },\n\n\t closeOnClickModal: {\n\t type: Boolean,\n\t default: true\n\t },\n\n\t closeOnPressEscape: {\n\t type: Boolean,\n\t default: true\n\t },\n\n\t showClose: {\n\t type: Boolean,\n\t default: true\n\t },\n\n\t size: {\n\t type: String,\n\t default: 'small'\n\t },\n\n\t customClass: {\n\t type: String,\n\t default: ''\n\t },\n\n\t top: {\n\t type: String,\n\t default: '15%'\n\t },\n\t beforeClose: Function\n\t },\n\n\t watch: {\n\t visible: function visible(val) {\n\t var _this = this;\n\n\t this.$emit('update:visible', val);\n\t if (val) {\n\t this.$emit('open');\n\t this.$el.addEventListener('scroll', this.updatePopper);\n\t this.$nextTick(function () {\n\t _this.$refs.dialog.scrollTop = 0;\n\t });\n\t } else {\n\t this.$el.removeEventListener('scroll', this.updatePopper);\n\t this.$emit('close');\n\t }\n\t }\n\t },\n\n\t computed: {\n\t sizeClass: function sizeClass() {\n\t return 'el-dialog--' + this.size;\n\t },\n\t style: function style() {\n\t return this.size === 'full' ? {} : { 'top': this.top };\n\t }\n\t },\n\n\t methods: {\n\t handleWrapperClick: function handleWrapperClick() {\n\t if (!this.closeOnClickModal) return;\n\t this.handleClose();\n\t },\n\t handleClose: function handleClose() {\n\t if (typeof this.beforeClose === 'function') {\n\t this.beforeClose(this.hide);\n\t } else {\n\t this.hide();\n\t }\n\t },\n\t hide: function hide(cancel) {\n\t if (cancel !== false) {\n\t this.$emit('update:visible', false);\n\t this.$emit('visible-change', false);\n\t }\n\t },\n\t updatePopper: function updatePopper() {\n\t this.broadcast('ElSelectDropdown', 'updatePopper');\n\t this.broadcast('ElDropdownMenu', 'updatePopper');\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t if (this.visible) {\n\t this.rendered = true;\n\t this.open();\n\t }\n\t }\n\t};\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(17);\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(4);\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"dialog-fade\"\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible),\n\t expression: \"visible\"\n\t }],\n\t staticClass: \"el-dialog__wrapper\",\n\t on: {\n\t \"click\": function($event) {\n\t if ($event.target !== $event.currentTarget) { return null; }\n\t _vm.handleWrapperClick($event)\n\t }\n\t }\n\t }, [_c('div', {\n\t ref: \"dialog\",\n\t staticClass: \"el-dialog\",\n\t class: [_vm.sizeClass, _vm.customClass],\n\t style: (_vm.style)\n\t }, [_c('div', {\n\t staticClass: \"el-dialog__header\"\n\t }, [_vm._t(\"title\", [_c('span', {\n\t staticClass: \"el-dialog__title\"\n\t }, [_vm._v(_vm._s(_vm.title))])]), (_vm.showClose) ? _c('button', {\n\t staticClass: \"el-dialog__headerbtn\",\n\t attrs: {\n\t \"type\": \"button\",\n\t \"aria-label\": \"Close\"\n\t },\n\t on: {\n\t \"click\": _vm.handleClose\n\t }\n\t }, [_c('i', {\n\t staticClass: \"el-dialog__close el-icon el-icon-close\"\n\t })]) : _vm._e()], 2), (_vm.rendered) ? _c('div', {\n\t staticClass: \"el-dialog__body\"\n\t }, [_vm._t(\"default\")], 2) : _vm._e(), (_vm.$slots.footer) ? _c('div', {\n\t staticClass: \"el-dialog__footer\"\n\t }, [_vm._t(\"footer\")], 2) : _vm._e()])])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _autocomplete = __webpack_require__(18);\n\n\tvar _autocomplete2 = _interopRequireDefault(_autocomplete);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_autocomplete2.default.install = function (Vue) {\n\t Vue.component(_autocomplete2.default.name, _autocomplete2.default);\n\t};\n\n\texports.default = _autocomplete2.default;\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(19),\n\t /* template */\n\t __webpack_require__(27),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _input = __webpack_require__(20);\n\n\tvar _input2 = _interopRequireDefault(_input);\n\n\tvar _clickoutside = __webpack_require__(21);\n\n\tvar _clickoutside2 = _interopRequireDefault(_clickoutside);\n\n\tvar _autocompleteSuggestions = __webpack_require__(22);\n\n\tvar _autocompleteSuggestions2 = _interopRequireDefault(_autocompleteSuggestions);\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElAutocomplete',\n\n\t mixins: [_emitter2.default],\n\n\t componentName: 'ElAutocomplete',\n\n\t components: {\n\t ElInput: _input2.default,\n\t ElAutocompleteSuggestions: _autocompleteSuggestions2.default\n\t },\n\n\t directives: { Clickoutside: _clickoutside2.default },\n\n\t props: {\n\t props: {\n\t type: Object,\n\t default: function _default() {\n\t return {\n\t label: 'value',\n\t value: 'value'\n\t };\n\t }\n\t },\n\t popperClass: String,\n\t placeholder: String,\n\t disabled: Boolean,\n\t name: String,\n\t size: String,\n\t value: String,\n\t autofocus: Boolean,\n\t fetchSuggestions: Function,\n\t triggerOnFocus: {\n\t type: Boolean,\n\t default: true\n\t },\n\t customItem: String,\n\t icon: String,\n\t onIconClick: Function,\n\t selectWhenUnmatched: {\n\t type: Boolean,\n\t default: false\n\t }\n\t },\n\t data: function data() {\n\t return {\n\t activated: false,\n\t isOnComposition: false,\n\t suggestions: [],\n\t loading: false,\n\t highlightedIndex: -1\n\t };\n\t },\n\n\t computed: {\n\t suggestionVisible: function suggestionVisible() {\n\t var suggestions = this.suggestions;\n\t var isValidData = Array.isArray(suggestions) && suggestions.length > 0;\n\t return (isValidData || this.loading) && this.activated;\n\t }\n\t },\n\t watch: {\n\t suggestionVisible: function suggestionVisible(val) {\n\t this.broadcast('ElAutocompleteSuggestions', 'visible', [val, this.$refs.input.$refs.input.offsetWidth]);\n\t }\n\t },\n\t methods: {\n\t getData: function getData(queryString) {\n\t var _this = this;\n\n\t this.loading = true;\n\t this.fetchSuggestions(queryString, function (suggestions) {\n\t _this.loading = false;\n\t if (Array.isArray(suggestions)) {\n\t _this.suggestions = suggestions;\n\t } else {\n\t console.error('autocomplete suggestions must be an array');\n\t }\n\t });\n\t },\n\t handleComposition: function handleComposition(event) {\n\t if (event.type === 'compositionend') {\n\t this.isOnComposition = false;\n\t this.handleChange(this.value);\n\t } else {\n\t this.isOnComposition = true;\n\t }\n\t },\n\t handleChange: function handleChange(value) {\n\t this.$emit('input', value);\n\t if (this.isOnComposition || !this.triggerOnFocus && !value) {\n\t this.suggestions = [];\n\t return;\n\t }\n\t this.getData(value);\n\t },\n\t handleFocus: function handleFocus() {\n\t this.activated = true;\n\t if (this.triggerOnFocus) {\n\t this.getData(this.value);\n\t }\n\t },\n\t close: function close(e) {\n\t this.activated = false;\n\t },\n\t handleKeyEnter: function handleKeyEnter(e) {\n\t var _this2 = this;\n\n\t if (this.suggestionVisible && this.highlightedIndex >= 0 && this.highlightedIndex < this.suggestions.length) {\n\t e.preventDefault();\n\t this.select(this.suggestions[this.highlightedIndex]);\n\t } else if (this.selectWhenUnmatched) {\n\t this.$emit('select', { value: this.value });\n\t this.$nextTick(function (_) {\n\t _this2.suggestions = [];\n\t _this2.highlightedIndex = -1;\n\t });\n\t }\n\t },\n\t select: function select(item) {\n\t var _this3 = this;\n\n\t this.$emit('input', item[this.props.value]);\n\t this.$emit('select', item);\n\t this.$nextTick(function (_) {\n\t _this3.suggestions = [];\n\t _this3.highlightedIndex = -1;\n\t });\n\t },\n\t highlight: function highlight(index) {\n\t if (!this.suggestionVisible || this.loading) {\n\t return;\n\t }\n\t if (index < 0) {\n\t this.highlightedIndex = -1;\n\t return;\n\t }\n\t if (index >= this.suggestions.length) {\n\t index = this.suggestions.length - 1;\n\t }\n\t var suggestion = this.$refs.suggestions.$el.querySelector('.el-autocomplete-suggestion__wrap');\n\t var suggestionList = suggestion.querySelectorAll('.el-autocomplete-suggestion__list li');\n\n\t var highlightItem = suggestionList[index];\n\t var scrollTop = suggestion.scrollTop;\n\t var offsetTop = highlightItem.offsetTop;\n\n\t if (offsetTop + highlightItem.scrollHeight > scrollTop + suggestion.clientHeight) {\n\t suggestion.scrollTop += highlightItem.scrollHeight;\n\t }\n\t if (offsetTop < scrollTop) {\n\t suggestion.scrollTop -= highlightItem.scrollHeight;\n\t }\n\n\t this.highlightedIndex = index;\n\t }\n\t },\n\t mounted: function mounted() {\n\t var _this4 = this;\n\n\t this.$on('item-click', function (item) {\n\t _this4.select(item);\n\t });\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t this.$refs.suggestions.$destroy();\n\t }\n\t};\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(8);\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(16);\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(23),\n\t /* template */\n\t __webpack_require__(26),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vuePopper = __webpack_require__(24);\n\n\tvar _vuePopper2 = _interopRequireDefault(_vuePopper);\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tvar _scrollbar = __webpack_require__(25);\n\n\tvar _scrollbar2 = _interopRequireDefault(_scrollbar);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t components: { ElScrollbar: _scrollbar2.default },\n\t mixins: [_vuePopper2.default, _emitter2.default],\n\n\t componentName: 'ElAutocompleteSuggestions',\n\n\t data: function data() {\n\t return {\n\t parent: this.$parent,\n\t dropdownWidth: ''\n\t };\n\t },\n\n\n\t props: {\n\t props: Object,\n\t suggestions: Array,\n\t options: {\n\t default: function _default() {\n\t return {\n\t gpuAcceleration: false\n\t };\n\t }\n\t }\n\t },\n\n\t methods: {\n\t select: function select(item) {\n\t this.dispatch('ElAutocomplete', 'item-click', item);\n\t }\n\t },\n\n\t updated: function updated() {\n\t var _this = this;\n\n\t this.$nextTick(function (_) {\n\t _this.updatePopper();\n\t });\n\t },\n\t mounted: function mounted() {\n\t this.$parent.popperElm = this.popperElm = this.$el;\n\t this.referenceElm = this.$parent.$refs.input.$refs.input;\n\t },\n\t created: function created() {\n\t var _this2 = this;\n\n\t this.$on('visible', function (val, inputWidth) {\n\t _this2.dropdownWidth = inputWidth + 'px';\n\t _this2.showPopper = val;\n\t });\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 24 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(10);\n\n/***/ },\n/* 25 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(18);\n\n/***/ },\n/* 26 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"el-zoom-in-top\"\n\t },\n\t on: {\n\t \"after-leave\": _vm.doDestroy\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.showPopper),\n\t expression: \"showPopper\"\n\t }],\n\t staticClass: \"el-autocomplete-suggestion\",\n\t class: {\n\t 'is-loading': _vm.parent.loading\n\t },\n\t style: ({\n\t width: _vm.dropdownWidth\n\t })\n\t }, [_c('el-scrollbar', {\n\t attrs: {\n\t \"tag\": \"ul\",\n\t \"wrap-class\": \"el-autocomplete-suggestion__wrap\",\n\t \"view-class\": \"el-autocomplete-suggestion__list\"\n\t }\n\t }, [(_vm.parent.loading) ? _c('li', [_c('i', {\n\t staticClass: \"el-icon-loading\"\n\t })]) : _vm._l((_vm.suggestions), function(item, index) {\n\t return [(!_vm.parent.customItem) ? _c('li', {\n\t class: {\n\t 'highlighted': _vm.parent.highlightedIndex === index\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.select(item)\n\t }\n\t }\n\t }, [_vm._v(\"\\n \" + _vm._s(item[_vm.props.label]) + \"\\n \")]) : _c(_vm.parent.customItem, {\n\t tag: \"component\",\n\t class: {\n\t 'highlighted': _vm.parent.highlightedIndex === index\n\t },\n\t attrs: {\n\t \"item\": item,\n\t \"index\": index\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.select(item)\n\t }\n\t }\n\t })]\n\t })], 2)], 1)])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t directives: [{\n\t name: \"clickoutside\",\n\t rawName: \"v-clickoutside\",\n\t value: (_vm.close),\n\t expression: \"close\"\n\t }],\n\t staticClass: \"el-autocomplete\"\n\t }, [_c('el-input', _vm._b({\n\t ref: \"input\",\n\t on: {\n\t \"change\": _vm.handleChange,\n\t \"focus\": _vm.handleFocus\n\t },\n\t nativeOn: {\n\t \"compositionstart\": function($event) {\n\t _vm.handleComposition($event)\n\t },\n\t \"compositionupdate\": function($event) {\n\t _vm.handleComposition($event)\n\t },\n\t \"compositionend\": function($event) {\n\t _vm.handleComposition($event)\n\t },\n\t \"keydown\": [function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"up\", 38)) { return null; }\n\t $event.preventDefault();\n\t _vm.highlight(_vm.highlightedIndex - 1)\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"down\", 40)) { return null; }\n\t $event.preventDefault();\n\t _vm.highlight(_vm.highlightedIndex + 1)\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"enter\", 13)) { return null; }\n\t _vm.handleKeyEnter($event)\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"tab\", 9)) { return null; }\n\t _vm.close($event)\n\t }]\n\t }\n\t }, 'el-input', _vm.$props), [(_vm.$slots.prepend) ? _c('template', {\n\t slot: \"prepend\"\n\t }, [_vm._t(\"prepend\")], 2) : _vm._e(), (_vm.$slots.append) ? _c('template', {\n\t slot: \"append\"\n\t }, [_vm._t(\"append\")], 2) : _vm._e()], 2), _c('el-autocomplete-suggestions', {\n\t ref: \"suggestions\",\n\t class: [_vm.popperClass ? _vm.popperClass : ''],\n\t attrs: {\n\t \"props\": _vm.props,\n\t \"suggestions\": _vm.suggestions\n\t }\n\t })], 1)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _dropdown = __webpack_require__(29);\n\n\tvar _dropdown2 = _interopRequireDefault(_dropdown);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_dropdown2.default.install = function (Vue) {\n\t Vue.component(_dropdown2.default.name, _dropdown2.default);\n\t};\n\n\texports.default = _dropdown2.default;\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(30),\n\t /* template */\n\t null,\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 30 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _clickoutside = __webpack_require__(21);\n\n\tvar _clickoutside2 = _interopRequireDefault(_clickoutside);\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tvar _button = __webpack_require__(31);\n\n\tvar _button2 = _interopRequireDefault(_button);\n\n\tvar _buttonGroup = __webpack_require__(32);\n\n\tvar _buttonGroup2 = _interopRequireDefault(_buttonGroup);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElDropdown',\n\n\t componentName: 'ElDropdown',\n\n\t mixins: [_emitter2.default],\n\n\t directives: { Clickoutside: _clickoutside2.default },\n\n\t components: {\n\t ElButton: _button2.default,\n\t ElButtonGroup: _buttonGroup2.default\n\t },\n\n\t props: {\n\t trigger: {\n\t type: String,\n\t default: 'hover'\n\t },\n\t menuAlign: {\n\t type: String,\n\t default: 'end'\n\t },\n\t type: String,\n\t size: String,\n\t splitButton: Boolean,\n\t hideOnClick: {\n\t type: Boolean,\n\t default: true\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t timeout: null,\n\t visible: false,\n\t triggerElm: null\n\t };\n\t },\n\t mounted: function mounted() {\n\t this.$on('menu-item-click', this.handleMenuItemClick);\n\t this.initEvent();\n\t },\n\n\n\t watch: {\n\t visible: function visible(val) {\n\t this.broadcast('ElDropdownMenu', 'visible', val);\n\t this.$emit('visible-change', val);\n\t }\n\t },\n\n\t methods: {\n\t show: function show() {\n\t var _this = this;\n\n\t if (this.triggerElm.disabled) return;\n\t clearTimeout(this.timeout);\n\t this.timeout = setTimeout(function () {\n\t _this.visible = true;\n\t }, 250);\n\t },\n\t hide: function hide() {\n\t var _this2 = this;\n\n\t if (this.triggerElm.disabled) return;\n\t clearTimeout(this.timeout);\n\t this.timeout = setTimeout(function () {\n\t _this2.visible = false;\n\t }, 150);\n\t },\n\t handleClick: function handleClick() {\n\t if (this.triggerElm.disabled) return;\n\t this.visible = !this.visible;\n\t },\n\t initEvent: function initEvent() {\n\t var trigger = this.trigger,\n\t show = this.show,\n\t hide = this.hide,\n\t handleClick = this.handleClick,\n\t splitButton = this.splitButton;\n\n\t this.triggerElm = splitButton ? this.$refs.trigger.$el : this.$slots.default[0].elm;\n\n\t if (trigger === 'hover') {\n\t this.triggerElm.addEventListener('mouseenter', show);\n\t this.triggerElm.addEventListener('mouseleave', hide);\n\n\t var dropdownElm = this.$slots.dropdown[0].elm;\n\n\t dropdownElm.addEventListener('mouseenter', show);\n\t dropdownElm.addEventListener('mouseleave', hide);\n\t } else if (trigger === 'click') {\n\t this.triggerElm.addEventListener('click', handleClick);\n\t }\n\t },\n\t handleMenuItemClick: function handleMenuItemClick(command, instance) {\n\t if (this.hideOnClick) {\n\t this.visible = false;\n\t }\n\t this.$emit('command', command, instance);\n\t }\n\t },\n\n\t render: function render(h) {\n\t var _this3 = this;\n\n\t var hide = this.hide,\n\t splitButton = this.splitButton,\n\t type = this.type,\n\t size = this.size;\n\n\n\t var handleClick = function handleClick(_) {\n\t _this3.$emit('click');\n\t };\n\n\t var triggerElm = !splitButton ? this.$slots.default : h(\n\t 'el-button-group',\n\t null,\n\t [h(\n\t 'el-button',\n\t {\n\t attrs: { type: type, size: size },\n\t nativeOn: {\n\t 'click': handleClick\n\t }\n\t },\n\t [this.$slots.default]\n\t ), h(\n\t 'el-button',\n\t { ref: 'trigger', attrs: { type: type, size: size },\n\t 'class': 'el-dropdown__caret-button' },\n\t [h(\n\t 'i',\n\t { 'class': 'el-dropdown__icon el-icon-caret-bottom' },\n\t []\n\t )]\n\t )]\n\t );\n\n\t return h(\n\t 'div',\n\t { 'class': 'el-dropdown', directives: [{\n\t name: 'clickoutside',\n\t value: hide\n\t }]\n\t },\n\t [triggerElm, this.$slots.dropdown]\n\t );\n\t }\n\t};\n\n/***/ },\n/* 31 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(37);\n\n/***/ },\n/* 32 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(38);\n\n/***/ },\n/* 33 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _dropdownMenu = __webpack_require__(34);\n\n\tvar _dropdownMenu2 = _interopRequireDefault(_dropdownMenu);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_dropdownMenu2.default.install = function (Vue) {\n\t Vue.component(_dropdownMenu2.default.name, _dropdownMenu2.default);\n\t};\n\n\texports.default = _dropdownMenu2.default;\n\n/***/ },\n/* 34 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(35),\n\t /* template */\n\t __webpack_require__(36),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vuePopper = __webpack_require__(24);\n\n\tvar _vuePopper2 = _interopRequireDefault(_vuePopper);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElDropdownMenu',\n\n\t componentName: 'ElDropdownMenu',\n\n\t mixins: [_vuePopper2.default],\n\n\t created: function created() {\n\t var _this = this;\n\n\t this.$on('updatePopper', function () {\n\t if (_this.showPopper) _this.updatePopper();\n\t });\n\t this.$on('visible', function (val) {\n\t _this.showPopper = val;\n\t });\n\t },\n\t mounted: function mounted() {\n\t this.$parent.popperElm = this.popperElm = this.$el;\n\t this.referenceElm = this.$parent.$el;\n\t },\n\n\n\t watch: {\n\t '$parent.menuAlign': {\n\t immediate: true,\n\t handler: function handler(val) {\n\t this.currentPlacement = 'bottom-' + val;\n\t }\n\t }\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 36 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"el-zoom-in-top\"\n\t },\n\t on: {\n\t \"after-leave\": _vm.doDestroy\n\t }\n\t }, [_c('ul', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.showPopper),\n\t expression: \"showPopper\"\n\t }],\n\t staticClass: \"el-dropdown-menu\"\n\t }, [_vm._t(\"default\")], 2)])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 37 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _dropdownItem = __webpack_require__(38);\n\n\tvar _dropdownItem2 = _interopRequireDefault(_dropdownItem);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_dropdownItem2.default.install = function (Vue) {\n\t Vue.component(_dropdownItem2.default.name, _dropdownItem2.default);\n\t};\n\n\texports.default = _dropdownItem2.default;\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(39),\n\t /* template */\n\t __webpack_require__(40),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 39 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElDropdownItem',\n\n\t mixins: [_emitter2.default],\n\n\t props: {\n\t command: {},\n\t disabled: Boolean,\n\t divided: Boolean\n\t },\n\n\t methods: {\n\t handleClick: function handleClick(e) {\n\t this.dispatch('ElDropdown', 'menu-item-click', [this.command, this]);\n\t }\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 40 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('li', {\n\t staticClass: \"el-dropdown-menu__item\",\n\t class: {\n\t 'is-disabled': _vm.disabled,\n\t 'el-dropdown-menu__item--divided': _vm.divided\n\t },\n\t on: {\n\t \"click\": _vm.handleClick\n\t }\n\t }, [_vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _menu = __webpack_require__(42);\n\n\tvar _menu2 = _interopRequireDefault(_menu);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_menu2.default.install = function (Vue) {\n\t Vue.component(_menu2.default.name, _menu2.default);\n\t};\n\n\texports.default = _menu2.default;\n\n/***/ },\n/* 42 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(43),\n\t /* template */\n\t __webpack_require__(45),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 43 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tvar _dom = __webpack_require__(44);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElMenu',\n\n\t componentName: 'ElMenu',\n\n\t mixins: [_emitter2.default],\n\n\t provide: function provide() {\n\t return {\n\t rootMenu: this\n\t };\n\t },\n\n\n\t components: {\n\t 'el-menu-collapse-transition': {\n\t functional: true,\n\t render: function render(createElement, context) {\n\t var data = {\n\t props: {\n\t mode: 'out-in'\n\t },\n\t on: {\n\t beforeEnter: function beforeEnter(el) {\n\t el.style.opacity = 0.2;\n\t },\n\t enter: function enter(el) {\n\t (0, _dom.addClass)(el, 'el-opacity-transition');\n\t el.style.opacity = 1;\n\t },\n\t afterEnter: function afterEnter(el) {\n\t (0, _dom.removeClass)(el, 'el-opacity-transition');\n\t el.style.opacity = '';\n\t },\n\t beforeLeave: function beforeLeave(el) {\n\t if (!el.dataset) el.dataset = {};\n\n\t if ((0, _dom.hasClass)(el, 'el-menu--collapse')) {\n\t (0, _dom.removeClass)(el, 'el-menu--collapse');\n\t el.dataset.oldOverflow = el.style.overflow;\n\t el.dataset.scrollWidth = el.scrollWidth;\n\t (0, _dom.addClass)(el, 'el-menu--collapse');\n\t }\n\n\t el.style.width = el.scrollWidth + 'px';\n\t el.style.overflow = 'hidden';\n\t },\n\t leave: function leave(el) {\n\t if (!(0, _dom.hasClass)(el, 'el-menu--collapse')) {\n\t (0, _dom.addClass)(el, 'horizontal-collapse-transition');\n\t el.style.width = '64px';\n\t } else {\n\t (0, _dom.addClass)(el, 'horizontal-collapse-transition');\n\t el.style.width = el.dataset.scrollWidth + 'px';\n\t }\n\t },\n\t afterLeave: function afterLeave(el) {\n\t (0, _dom.removeClass)(el, 'horizontal-collapse-transition');\n\t if ((0, _dom.hasClass)(el, 'el-menu--collapse')) {\n\t el.style.width = el.dataset.scrollWidth + 'px';\n\t } else {\n\t el.style.width = '64px';\n\t }\n\t el.style.overflow = el.dataset.oldOverflow;\n\t }\n\t }\n\t };\n\t return createElement('transition', data, context.children);\n\t }\n\t }\n\t },\n\n\t props: {\n\t mode: {\n\t type: String,\n\t default: 'vertical'\n\t },\n\t defaultActive: {\n\t type: String,\n\t default: ''\n\t },\n\t defaultOpeneds: Array,\n\t theme: {\n\t type: String,\n\t default: 'light'\n\t },\n\t uniqueOpened: Boolean,\n\t router: Boolean,\n\t menuTrigger: {\n\t type: String,\n\t default: 'hover'\n\t },\n\t collapse: Boolean\n\t },\n\t data: function data() {\n\t return {\n\t activeIndex: this.defaultActive,\n\t openedMenus: this.defaultOpeneds ? this.defaultOpeneds.slice(0) : [],\n\t items: {},\n\t submenus: {}\n\t };\n\t },\n\n\t watch: {\n\t defaultActive: function defaultActive(value) {\n\t var item = this.items[value];\n\t if (item) {\n\t this.activeIndex = item.index;\n\t this.initOpenedMenu();\n\t } else {\n\t this.activeIndex = '';\n\t }\n\t },\n\t defaultOpeneds: function defaultOpeneds(value) {\n\t this.openedMenus = value;\n\t },\n\t collapse: function collapse(value) {\n\t if (value) this.openedMenus = [];\n\t }\n\t },\n\t methods: {\n\t addItem: function addItem(item) {\n\t this.$set(this.items, item.index, item);\n\t },\n\t removeItem: function removeItem(item) {\n\t delete this.items[item.index];\n\t },\n\t addSubmenu: function addSubmenu(item) {\n\t this.$set(this.submenus, item.index, item);\n\t },\n\t removeSubmenu: function removeSubmenu(item) {\n\t delete this.submenus[item.index];\n\t },\n\t openMenu: function openMenu(index, indexPath) {\n\t var openedMenus = this.openedMenus;\n\t if (openedMenus.indexOf(index) !== -1) return;\n\t // 将不在该菜单路径下的其余菜单收起\n\t if (this.uniqueOpened) {\n\t this.openedMenus = openedMenus.filter(function (index) {\n\t return indexPath.indexOf(index) !== -1;\n\t });\n\t }\n\t this.openedMenus.push(index);\n\t },\n\t closeMenu: function closeMenu(index) {\n\t this.openedMenus.splice(this.openedMenus.indexOf(index), 1);\n\t },\n\t handleSubmenuClick: function handleSubmenuClick(submenu) {\n\t var index = submenu.index,\n\t indexPath = submenu.indexPath;\n\n\t var isOpened = this.openedMenus.indexOf(index) !== -1;\n\n\t if (isOpened) {\n\t this.closeMenu(index);\n\t this.$emit('close', index, indexPath);\n\t } else {\n\t this.openMenu(index, indexPath);\n\t this.$emit('open', index, indexPath);\n\t }\n\t },\n\t handleItemClick: function handleItemClick(item) {\n\t var index = item.index,\n\t indexPath = item.indexPath;\n\n\t this.activeIndex = item.index;\n\t this.$emit('select', index, indexPath, item);\n\n\t if (this.mode === 'horizontal' || this.collapse) {\n\t this.openedMenus = [];\n\t }\n\n\t if (this.router) {\n\t this.routeToItem(item);\n\t }\n\t },\n\n\t // 初始化展开菜单\n\t initOpenedMenu: function initOpenedMenu() {\n\t var _this = this;\n\n\t var index = this.activeIndex;\n\t var activeItem = this.items[index];\n\t if (!activeItem || this.mode === 'horizontal' || this.collapse) return;\n\n\t var indexPath = activeItem.indexPath;\n\n\t // 展开该菜单项的路径上所有子菜单\n\t indexPath.forEach(function (index) {\n\t var submenu = _this.submenus[index];\n\t submenu && _this.openMenu(index, submenu.indexPath);\n\t });\n\t },\n\t routeToItem: function routeToItem(item) {\n\t var route = item.route || item.index;\n\t try {\n\t this.$router.push(route);\n\t } catch (e) {\n\t console.error(e);\n\t }\n\t }\n\t },\n\t mounted: function mounted() {\n\t this.initOpenedMenu();\n\t this.$on('item-click', this.handleItemClick);\n\t this.$on('submenu-click', this.handleSubmenuClick);\n\t }\n\t};\n\n/***/ },\n/* 44 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(3);\n\n/***/ },\n/* 45 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('el-menu-collapse-transition', [_c('ul', {\n\t key: +_vm.collapse,\n\t staticClass: \"el-menu\",\n\t class: {\n\t 'el-menu--horizontal': _vm.mode === 'horizontal',\n\t 'el-menu--dark': _vm.theme === 'dark',\n\t 'el-menu--collapse': _vm.collapse\n\t }\n\t }, [_vm._t(\"default\")], 2)])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 46 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _submenu = __webpack_require__(47);\n\n\tvar _submenu2 = _interopRequireDefault(_submenu);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_submenu2.default.install = function (Vue) {\n\t Vue.component(_submenu2.default.name, _submenu2.default);\n\t};\n\n\texports.default = _submenu2.default;\n\n/***/ },\n/* 47 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(48),\n\t /* template */\n\t __webpack_require__(51),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _collapseTransition = __webpack_require__(49);\n\n\tvar _collapseTransition2 = _interopRequireDefault(_collapseTransition);\n\n\tvar _menuMixin = __webpack_require__(50);\n\n\tvar _menuMixin2 = _interopRequireDefault(_menuMixin);\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElSubmenu',\n\n\t componentName: 'ElSubmenu',\n\n\t mixins: [_menuMixin2.default, _emitter2.default],\n\n\t components: { ElCollapseTransition: _collapseTransition2.default },\n\n\t props: {\n\t index: {\n\t type: String,\n\t required: true\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t timeout: null,\n\t items: {},\n\t submenus: {}\n\t };\n\t },\n\n\t computed: {\n\t menuTransitionName: function menuTransitionName() {\n\t return this.rootMenu.collapse ? 'el-zoom-in-left' : 'el-zoom-in-top';\n\t },\n\t opened: function opened() {\n\t return this.rootMenu.openedMenus.indexOf(this.index) > -1;\n\t },\n\n\t active: {\n\t cache: false,\n\t get: function get() {\n\t var isActive = false;\n\t var submenus = this.submenus;\n\t var items = this.items;\n\n\t Object.keys(items).forEach(function (index) {\n\t if (items[index].active) {\n\t isActive = true;\n\t }\n\t });\n\n\t Object.keys(submenus).forEach(function (index) {\n\t if (submenus[index].active) {\n\t isActive = true;\n\t }\n\t });\n\n\t return isActive;\n\t }\n\t }\n\t },\n\t methods: {\n\t addItem: function addItem(item) {\n\t this.$set(this.items, item.index, item);\n\t },\n\t removeItem: function removeItem(item) {\n\t delete this.items[item.index];\n\t },\n\t addSubmenu: function addSubmenu(item) {\n\t this.$set(this.submenus, item.index, item);\n\t },\n\t removeSubmenu: function removeSubmenu(item) {\n\t delete this.submenus[item.index];\n\t },\n\t handleClick: function handleClick() {\n\t var rootMenu = this.rootMenu;\n\n\t if (rootMenu.menuTrigger === 'hover' && rootMenu.mode === 'horizontal' || rootMenu.collapse && rootMenu.mode === 'vertical') {\n\t return;\n\t }\n\t this.dispatch('ElMenu', 'submenu-click', this);\n\t },\n\t handleMouseenter: function handleMouseenter() {\n\t var _this = this;\n\n\t var rootMenu = this.rootMenu;\n\n\t if (rootMenu.menuTrigger === 'click' && rootMenu.mode === 'horizontal' || !rootMenu.collapse && rootMenu.mode === 'vertical') {\n\t return;\n\t }\n\t clearTimeout(this.timeout);\n\t this.timeout = setTimeout(function () {\n\t _this.rootMenu.openMenu(_this.index, _this.indexPath);\n\t }, 300);\n\t },\n\t handleMouseleave: function handleMouseleave() {\n\t var _this2 = this;\n\n\t var rootMenu = this.rootMenu;\n\n\t if (rootMenu.menuTrigger === 'click' && rootMenu.mode === 'horizontal' || !rootMenu.collapse && rootMenu.mode === 'vertical') {\n\t return;\n\t }\n\t clearTimeout(this.timeout);\n\t this.timeout = setTimeout(function () {\n\t _this2.rootMenu.closeMenu(_this2.index);\n\t }, 300);\n\t }\n\t },\n\t created: function created() {\n\t this.parentMenu.addSubmenu(this);\n\t this.rootMenu.addSubmenu(this);\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t this.parentMenu.removeSubmenu(this);\n\t this.rootMenu.removeSubmenu(this);\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 49 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(39);\n\n/***/ },\n/* 50 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\texports.default = {\n\t computed: {\n\t indexPath: function indexPath() {\n\t var path = [this.index];\n\t var parent = this.$parent;\n\t while (parent.$options.componentName !== 'ElMenu') {\n\t if (parent.index) {\n\t path.unshift(parent.index);\n\t }\n\t parent = parent.$parent;\n\t }\n\t return path;\n\t },\n\t rootMenu: function rootMenu() {\n\t var parent = this.$parent;\n\t while (parent && parent.$options.componentName !== 'ElMenu') {\n\t parent = parent.$parent;\n\t }\n\t return parent;\n\t },\n\t parentMenu: function parentMenu() {\n\t var parent = this.$parent;\n\t while (parent && ['ElMenu', 'ElSubmenu'].indexOf(parent.$options.componentName) === -1) {\n\t parent = parent.$parent;\n\t }\n\t return parent;\n\t },\n\t paddingStyle: function paddingStyle() {\n\t if (this.rootMenu.mode !== 'vertical') return {};\n\n\t var padding = 20;\n\t var parent = this.$parent;\n\n\t if (this.rootMenu.collapse) {\n\t padding = 20;\n\t } else {\n\t while (parent && parent.$options.componentName !== 'ElMenu') {\n\t if (parent.$options.componentName === 'ElSubmenu') {\n\t padding += 20;\n\t }\n\t parent = parent.$parent;\n\t }\n\t }\n\t return { paddingLeft: padding + 'px' };\n\t }\n\t }\n\t};\n\n/***/ },\n/* 51 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('li', {\n\t class: {\n\t 'el-submenu': true,\n\t 'is-active': _vm.active,\n\t 'is-opened': _vm.opened\n\t },\n\t on: {\n\t \"mouseenter\": _vm.handleMouseenter,\n\t \"mouseleave\": _vm.handleMouseleave\n\t }\n\t }, [_c('div', {\n\t ref: \"submenu-title\",\n\t staticClass: \"el-submenu__title\",\n\t style: (_vm.paddingStyle),\n\t on: {\n\t \"click\": _vm.handleClick\n\t }\n\t }, [_vm._t(\"title\"), _c('i', {\n\t class: {\n\t 'el-submenu__icon-arrow': true,\n\t 'el-icon-caret-bottom': _vm.rootMenu.mode === 'horizontal',\n\t 'el-icon-arrow-down': _vm.rootMenu.mode === 'vertical' && !_vm.rootMenu.collapse,\n\t 'el-icon-caret-right': _vm.rootMenu.mode === 'vertical' && _vm.rootMenu.collapse\n\t }\n\t })], 2), (_vm.rootMenu.mode === 'horizontal' || (_vm.rootMenu.mode === 'vertical' && _vm.rootMenu.collapse)) ? [_c('transition', {\n\t attrs: {\n\t \"name\": _vm.menuTransitionName\n\t }\n\t }, [_c('ul', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.opened),\n\t expression: \"opened\"\n\t }],\n\t staticClass: \"el-menu\"\n\t }, [_vm._t(\"default\")], 2)])] : _c('el-collapse-transition', [_c('ul', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.opened),\n\t expression: \"opened\"\n\t }],\n\t staticClass: \"el-menu\"\n\t }, [_vm._t(\"default\")], 2)])], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _menuItem = __webpack_require__(53);\n\n\tvar _menuItem2 = _interopRequireDefault(_menuItem);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_menuItem2.default.install = function (Vue) {\n\t Vue.component(_menuItem2.default.name, _menuItem2.default);\n\t};\n\n\texports.default = _menuItem2.default;\n\n/***/ },\n/* 53 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(54),\n\t /* template */\n\t __webpack_require__(55),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 54 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _menuMixin = __webpack_require__(50);\n\n\tvar _menuMixin2 = _interopRequireDefault(_menuMixin);\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElMenuItem',\n\n\t componentName: 'ElMenuItem',\n\n\t mixins: [_menuMixin2.default, _emitter2.default],\n\n\t props: {\n\t index: {\n\t type: String,\n\t required: true\n\t },\n\t route: {\n\t type: Object,\n\t required: false\n\t },\n\t disabled: {\n\t type: Boolean,\n\t required: false\n\t }\n\t },\n\t computed: {\n\t active: function active() {\n\t return this.index === this.rootMenu.activeIndex;\n\t }\n\t },\n\t methods: {\n\t handleClick: function handleClick() {\n\t this.dispatch('ElMenu', 'item-click', this);\n\t this.$emit('click', this);\n\t }\n\t },\n\t created: function created() {\n\t this.parentMenu.addItem(this);\n\t this.rootMenu.addItem(this);\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t this.parentMenu.removeItem(this);\n\t this.rootMenu.removeItem(this);\n\t }\n\t};\n\n/***/ },\n/* 55 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('li', {\n\t staticClass: \"el-menu-item\",\n\t class: {\n\t 'is-active': _vm.active,\n\t 'is-disabled': _vm.disabled\n\t },\n\t style: (_vm.paddingStyle),\n\t on: {\n\t \"click\": _vm.handleClick\n\t }\n\t }, [(_vm.$parent === _vm.rootMenu && _vm.rootMenu.collapse) ? _c('el-tooltip', {\n\t attrs: {\n\t \"effect\": \"dark\",\n\t \"placement\": \"right\"\n\t }\n\t }, [_c('div', {\n\t slot: \"content\"\n\t }, [_vm._t(\"title\")], 2), _c('div', {\n\t staticStyle: {\n\t \"position\": \"absolute\",\n\t \"left\": \"0\",\n\t \"top\": \"0\",\n\t \"height\": \"100%\",\n\t \"width\": \"100%\",\n\t \"display\": \"inline-block\",\n\t \"box-sizing\": \"border-box\",\n\t \"padding\": \"0 20px\"\n\t }\n\t }, [_vm._t(\"default\")], 2)]) : [_vm._t(\"default\"), _vm._t(\"title\")]], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 56 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _menuItemGroup = __webpack_require__(57);\n\n\tvar _menuItemGroup2 = _interopRequireDefault(_menuItemGroup);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_menuItemGroup2.default.install = function (Vue) {\n\t Vue.component(_menuItemGroup2.default.name, _menuItemGroup2.default);\n\t};\n\n\texports.default = _menuItemGroup2.default;\n\n/***/ },\n/* 57 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(58),\n\t /* template */\n\t __webpack_require__(59),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 58 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElMenuItemGroup',\n\n\t componentName: 'ElMenuItemGroup',\n\n\t inject: ['rootMenu'],\n\t props: {\n\t title: {\n\t type: String\n\t }\n\t },\n\t data: function data() {\n\t return {\n\t paddingLeft: 20\n\t };\n\t },\n\n\t computed: {\n\t levelPadding: function levelPadding() {\n\t var padding = 10;\n\t var parent = this.$parent;\n\t if (this.rootMenu.collapse) return 20;\n\t while (parent && parent.$options.componentName !== 'ElMenu') {\n\t if (parent.$options.componentName === 'ElSubmenu') {\n\t padding += 20;\n\t }\n\t parent = parent.$parent;\n\t }\n\t padding === 10 && (padding = 20);\n\t return padding;\n\t }\n\t }\n\t};\n\n/***/ },\n/* 59 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('li', {\n\t staticClass: \"el-menu-item-group\"\n\t }, [_c('div', {\n\t staticClass: \"el-menu-item-group__title\",\n\t style: ({\n\t paddingLeft: _vm.levelPadding + 'px'\n\t })\n\t }, [(!_vm.$slots.title) ? [_vm._v(_vm._s(_vm.title))] : _vm._t(\"title\")], 2), _c('ul', [_vm._t(\"default\")], 2)])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 60 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _input = __webpack_require__(61);\n\n\tvar _input2 = _interopRequireDefault(_input);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_input2.default.install = function (Vue) {\n\t Vue.component(_input2.default.name, _input2.default);\n\t};\n\n\texports.default = _input2.default;\n\n/***/ },\n/* 61 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(62),\n\t /* template */\n\t __webpack_require__(65),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 62 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tvar _calcTextareaHeight = __webpack_require__(63);\n\n\tvar _calcTextareaHeight2 = _interopRequireDefault(_calcTextareaHeight);\n\n\tvar _merge = __webpack_require__(64);\n\n\tvar _merge2 = _interopRequireDefault(_merge);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElInput',\n\n\t componentName: 'ElInput',\n\n\t mixins: [_emitter2.default],\n\n\t data: function data() {\n\t return {\n\t currentValue: this.value,\n\t textareaCalcStyle: {}\n\t };\n\t },\n\n\n\t props: {\n\t value: [String, Number],\n\t placeholder: String,\n\t size: String,\n\t resize: String,\n\t readonly: Boolean,\n\t autofocus: Boolean,\n\t icon: String,\n\t disabled: Boolean,\n\t type: {\n\t type: String,\n\t default: 'text'\n\t },\n\t name: String,\n\t autosize: {\n\t type: [Boolean, Object],\n\t default: false\n\t },\n\t rows: {\n\t type: Number,\n\t default: 2\n\t },\n\t autoComplete: {\n\t type: String,\n\t default: 'off'\n\t },\n\t form: String,\n\t maxlength: Number,\n\t minlength: Number,\n\t max: {},\n\t min: {},\n\t step: {},\n\t validateEvent: {\n\t type: Boolean,\n\t default: true\n\t },\n\t onIconClick: Function\n\t },\n\n\t computed: {\n\t validating: function validating() {\n\t return this.$parent.validateState === 'validating';\n\t },\n\t textareaStyle: function textareaStyle() {\n\t return (0, _merge2.default)({}, this.textareaCalcStyle, { resize: this.resize });\n\t }\n\t },\n\n\t watch: {\n\t 'value': function value(val, oldValue) {\n\t this.setCurrentValue(val);\n\t }\n\t },\n\n\t methods: {\n\t handleBlur: function handleBlur(event) {\n\t this.$emit('blur', event);\n\t if (this.validateEvent) {\n\t this.dispatch('ElFormItem', 'el.form.blur', [this.currentValue]);\n\t }\n\t },\n\t inputSelect: function inputSelect() {\n\t this.$refs.input.select();\n\t },\n\t resizeTextarea: function resizeTextarea() {\n\t if (this.$isServer) return;\n\t var autosize = this.autosize,\n\t type = this.type;\n\n\t if (!autosize || type !== 'textarea') return;\n\t var minRows = autosize.minRows;\n\t var maxRows = autosize.maxRows;\n\n\t this.textareaCalcStyle = (0, _calcTextareaHeight2.default)(this.$refs.textarea, minRows, maxRows);\n\t },\n\t handleFocus: function handleFocus(event) {\n\t this.$emit('focus', event);\n\t },\n\t handleInput: function handleInput(event) {\n\t var value = event.target.value;\n\t this.$emit('input', value);\n\t this.setCurrentValue(value);\n\t this.$emit('change', value);\n\t },\n\t handleIconClick: function handleIconClick(event) {\n\t if (this.onIconClick) {\n\t this.onIconClick(event);\n\t }\n\t this.$emit('click', event);\n\t },\n\t setCurrentValue: function setCurrentValue(value) {\n\t var _this = this;\n\n\t if (value === this.currentValue) return;\n\t this.$nextTick(function (_) {\n\t _this.resizeTextarea();\n\t });\n\t this.currentValue = value;\n\t if (this.validateEvent) {\n\t this.dispatch('ElFormItem', 'el.form.change', [value]);\n\t }\n\t }\n\t },\n\n\t created: function created() {\n\t this.$on('inputSelect', this.inputSelect);\n\t },\n\t mounted: function mounted() {\n\t this.resizeTextarea();\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 63 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\texports.default = calcTextareaHeight;\n\tvar hiddenTextarea = void 0;\n\n\tvar HIDDEN_STYLE = '\\n height:0 !important;\\n visibility:hidden !important;\\n overflow:hidden !important;\\n position:absolute !important;\\n z-index:-1000 !important;\\n top:0 !important;\\n right:0 !important\\n';\n\n\tvar CONTEXT_STYLE = ['letter-spacing', 'line-height', 'padding-top', 'padding-bottom', 'font-family', 'font-weight', 'font-size', 'text-rendering', 'text-transform', 'width', 'text-indent', 'padding-left', 'padding-right', 'border-width', 'box-sizing'];\n\n\tfunction calculateNodeStyling(targetElement) {\n\t var style = window.getComputedStyle(targetElement);\n\n\t var boxSizing = style.getPropertyValue('box-sizing');\n\n\t var paddingSize = parseFloat(style.getPropertyValue('padding-bottom')) + parseFloat(style.getPropertyValue('padding-top'));\n\n\t var borderSize = parseFloat(style.getPropertyValue('border-bottom-width')) + parseFloat(style.getPropertyValue('border-top-width'));\n\n\t var contextStyle = CONTEXT_STYLE.map(function (name) {\n\t return name + ':' + style.getPropertyValue(name);\n\t }).join(';');\n\n\t return { contextStyle: contextStyle, paddingSize: paddingSize, borderSize: borderSize, boxSizing: boxSizing };\n\t}\n\n\tfunction calcTextareaHeight(targetElement) {\n\t var minRows = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t var maxRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n\t if (!hiddenTextarea) {\n\t hiddenTextarea = document.createElement('textarea');\n\t document.body.appendChild(hiddenTextarea);\n\t }\n\n\t var _calculateNodeStyling = calculateNodeStyling(targetElement),\n\t paddingSize = _calculateNodeStyling.paddingSize,\n\t borderSize = _calculateNodeStyling.borderSize,\n\t boxSizing = _calculateNodeStyling.boxSizing,\n\t contextStyle = _calculateNodeStyling.contextStyle;\n\n\t hiddenTextarea.setAttribute('style', contextStyle + ';' + HIDDEN_STYLE);\n\t hiddenTextarea.value = targetElement.value || targetElement.placeholder || '';\n\n\t var height = hiddenTextarea.scrollHeight;\n\n\t if (boxSizing === 'border-box') {\n\t height = height + borderSize;\n\t } else if (boxSizing === 'content-box') {\n\t height = height - paddingSize;\n\t }\n\n\t hiddenTextarea.value = '';\n\t var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n\n\t if (minRows !== null) {\n\t var minHeight = singleRowHeight * minRows;\n\t if (boxSizing === 'border-box') {\n\t minHeight = minHeight + paddingSize + borderSize;\n\t }\n\t height = Math.max(minHeight, height);\n\t }\n\t if (maxRows !== null) {\n\t var maxHeight = singleRowHeight * maxRows;\n\t if (boxSizing === 'border-box') {\n\t maxHeight = maxHeight + paddingSize + borderSize;\n\t }\n\t height = Math.min(maxHeight, height);\n\t }\n\n\t return { height: height + 'px' };\n\t};\n\n/***/ },\n/* 64 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(9);\n\n/***/ },\n/* 65 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t class: [\n\t _vm.type === 'textarea' ? 'el-textarea' : 'el-input',\n\t _vm.size ? 'el-input--' + _vm.size : '', {\n\t 'is-disabled': _vm.disabled,\n\t 'el-input-group': _vm.$slots.prepend || _vm.$slots.append,\n\t 'el-input-group--append': _vm.$slots.append,\n\t 'el-input-group--prepend': _vm.$slots.prepend\n\t }\n\t ]\n\t }, [(_vm.type !== 'textarea') ? [(_vm.$slots.prepend) ? _c('div', {\n\t staticClass: \"el-input-group__prepend\"\n\t }, [_vm._t(\"prepend\")], 2) : _vm._e(), _vm._t(\"icon\", [(_vm.icon) ? _c('i', {\n\t staticClass: \"el-input__icon\",\n\t class: [\n\t 'el-icon-' + _vm.icon,\n\t _vm.onIconClick ? 'is-clickable' : ''\n\t ],\n\t on: {\n\t \"click\": _vm.handleIconClick\n\t }\n\t }) : _vm._e()]), (_vm.type !== 'textarea') ? _c('input', _vm._b({\n\t ref: \"input\",\n\t staticClass: \"el-input__inner\",\n\t attrs: {\n\t \"autocomplete\": _vm.autoComplete\n\t },\n\t domProps: {\n\t \"value\": _vm.currentValue\n\t },\n\t on: {\n\t \"input\": _vm.handleInput,\n\t \"focus\": _vm.handleFocus,\n\t \"blur\": _vm.handleBlur\n\t }\n\t }, 'input', _vm.$props)) : _vm._e(), (_vm.validating) ? _c('i', {\n\t staticClass: \"el-input__icon el-icon-loading\"\n\t }) : _vm._e(), (_vm.$slots.append) ? _c('div', {\n\t staticClass: \"el-input-group__append\"\n\t }, [_vm._t(\"append\")], 2) : _vm._e()] : _c('textarea', _vm._b({\n\t ref: \"textarea\",\n\t staticClass: \"el-textarea__inner\",\n\t style: (_vm.textareaStyle),\n\t domProps: {\n\t \"value\": _vm.currentValue\n\t },\n\t on: {\n\t \"input\": _vm.handleInput,\n\t \"focus\": _vm.handleFocus,\n\t \"blur\": _vm.handleBlur\n\t }\n\t }, 'textarea', _vm.$props))], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 66 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _inputNumber = __webpack_require__(67);\n\n\tvar _inputNumber2 = _interopRequireDefault(_inputNumber);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_inputNumber2.default.install = function (Vue) {\n\t Vue.component(_inputNumber2.default.name, _inputNumber2.default);\n\t};\n\n\texports.default = _inputNumber2.default;\n\n/***/ },\n/* 67 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(68),\n\t /* template */\n\t __webpack_require__(70),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 68 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _input = __webpack_require__(20);\n\n\tvar _input2 = _interopRequireDefault(_input);\n\n\tvar _dom = __webpack_require__(44);\n\n\tvar _debounce = __webpack_require__(69);\n\n\tvar _debounce2 = _interopRequireDefault(_debounce);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElInputNumber',\n\t directives: {\n\t repeatClick: {\n\t bind: function bind(el, binding, vnode) {\n\t var interval = null;\n\t var startTime = void 0;\n\t var handler = function handler() {\n\t return vnode.context[binding.expression].apply();\n\t };\n\t var clear = function clear() {\n\t if (new Date() - startTime < 100) {\n\t handler();\n\t }\n\t clearInterval(interval);\n\t interval = null;\n\t };\n\n\t (0, _dom.on)(el, 'mousedown', function () {\n\t startTime = new Date();\n\t (0, _dom.once)(document, 'mouseup', clear);\n\t clearInterval(interval);\n\t interval = setInterval(handler, 100);\n\t });\n\t }\n\t }\n\t },\n\t components: {\n\t ElInput: _input2.default\n\t },\n\t props: {\n\t step: {\n\t type: Number,\n\t default: 1\n\t },\n\t max: {\n\t type: Number,\n\t default: Infinity\n\t },\n\t min: {\n\t type: Number,\n\t default: -Infinity\n\t },\n\t value: {\n\t default: 0\n\t },\n\t disabled: Boolean,\n\t size: String,\n\t controls: {\n\t type: Boolean,\n\t default: true\n\t },\n\t debounce: {\n\t type: Number,\n\t default: 300\n\t }\n\t },\n\t data: function data() {\n\t return {\n\t currentValue: 0\n\t };\n\t },\n\n\t watch: {\n\t value: {\n\t immediate: true,\n\t handler: function handler(value) {\n\t var newVal = Number(value);\n\t if (isNaN(newVal)) return;\n\t if (newVal >= this.max) newVal = this.max;\n\t if (newVal <= this.min) newVal = this.min;\n\t this.currentValue = newVal;\n\t this.$emit('input', newVal);\n\t }\n\t }\n\t },\n\t computed: {\n\t minDisabled: function minDisabled() {\n\t return this._decrease(this.value, this.step) < this.min;\n\t },\n\t maxDisabled: function maxDisabled() {\n\t return this._increase(this.value, this.step) > this.max;\n\t },\n\t precision: function precision() {\n\t var value = this.value,\n\t step = this.step,\n\t getPrecision = this.getPrecision;\n\n\t return Math.max(getPrecision(value), getPrecision(step));\n\t }\n\t },\n\t methods: {\n\t toPrecision: function toPrecision(num, precision) {\n\t if (precision === undefined) precision = this.precision;\n\t return parseFloat(parseFloat(Number(num).toFixed(precision)));\n\t },\n\t getPrecision: function getPrecision(value) {\n\t var valueString = value.toString();\n\t var dotPosition = valueString.indexOf('.');\n\t var precision = 0;\n\t if (dotPosition !== -1) {\n\t precision = valueString.length - dotPosition - 1;\n\t }\n\t return precision;\n\t },\n\t _increase: function _increase(val, step) {\n\t if (typeof val !== 'number') return this.currentValue;\n\n\t var precisionFactor = Math.pow(10, this.precision);\n\n\t return this.toPrecision((precisionFactor * val + precisionFactor * step) / precisionFactor);\n\t },\n\t _decrease: function _decrease(val, step) {\n\t if (typeof val !== 'number') return this.currentValue;\n\n\t var precisionFactor = Math.pow(10, this.precision);\n\n\t return this.toPrecision((precisionFactor * val - precisionFactor * step) / precisionFactor);\n\t },\n\t increase: function increase() {\n\t if (this.disabled || this.maxDisabled) return;\n\t var value = this.value || 0;\n\t var newVal = this._increase(value, this.step);\n\t if (newVal > this.max) return;\n\t this.setCurrentValue(newVal);\n\t },\n\t decrease: function decrease() {\n\t if (this.disabled || this.minDisabled) return;\n\t var value = this.value || 0;\n\t var newVal = this._decrease(value, this.step);\n\t if (newVal < this.min) return;\n\t this.setCurrentValue(newVal);\n\t },\n\t handleBlur: function handleBlur() {\n\t this.$refs.input.setCurrentValue(this.currentValue);\n\t },\n\t setCurrentValue: function setCurrentValue(newVal) {\n\t var oldVal = this.currentValue;\n\t if (newVal >= this.max) newVal = this.max;\n\t if (newVal <= this.min) newVal = this.min;\n\t if (oldVal === newVal) {\n\t this.$refs.input.setCurrentValue(this.currentValue);\n\t return;\n\t }\n\t this.$emit('change', newVal, oldVal);\n\t this.$emit('input', newVal);\n\t this.currentValue = newVal;\n\t },\n\t handleInput: function handleInput(value) {\n\t if (value === '') {\n\t return;\n\t }\n\t var newVal = Number(value);\n\t if (!isNaN(newVal)) {\n\t this.setCurrentValue(newVal);\n\t } else {\n\t this.$refs.input.setCurrentValue(this.currentValue);\n\t }\n\t }\n\t },\n\t created: function created() {\n\t var _this = this;\n\n\t this.debounceHandleInput = (0, _debounce2.default)(this.debounce, function (value) {\n\t _this.handleInput(value);\n\t });\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 69 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(7);\n\n/***/ },\n/* 70 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-input-number\",\n\t class: [\n\t _vm.size ? 'el-input-number--' + _vm.size : '', {\n\t 'is-disabled': _vm.disabled\n\t }, {\n\t 'is-without-controls': !_vm.controls\n\t }\n\t ]\n\t }, [(_vm.controls) ? _c('span', {\n\t directives: [{\n\t name: \"repeat-click\",\n\t rawName: \"v-repeat-click\",\n\t value: (_vm.decrease),\n\t expression: \"decrease\"\n\t }],\n\t staticClass: \"el-input-number__decrease\",\n\t class: {\n\t 'is-disabled': _vm.minDisabled\n\t }\n\t }, [_c('i', {\n\t staticClass: \"el-icon-minus\"\n\t })]) : _vm._e(), (_vm.controls) ? _c('span', {\n\t directives: [{\n\t name: \"repeat-click\",\n\t rawName: \"v-repeat-click\",\n\t value: (_vm.increase),\n\t expression: \"increase\"\n\t }],\n\t staticClass: \"el-input-number__increase\",\n\t class: {\n\t 'is-disabled': _vm.maxDisabled\n\t }\n\t }, [_c('i', {\n\t staticClass: \"el-icon-plus\"\n\t })]) : _vm._e(), _c('el-input', {\n\t ref: \"input\",\n\t attrs: {\n\t \"value\": _vm.currentValue,\n\t \"disabled\": _vm.disabled,\n\t \"size\": _vm.size,\n\t \"max\": _vm.max,\n\t \"min\": _vm.min\n\t },\n\t on: {\n\t \"blur\": _vm.handleBlur,\n\t \"input\": _vm.debounceHandleInput\n\t },\n\t nativeOn: {\n\t \"keydown\": [function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"up\", 38)) { return null; }\n\t $event.preventDefault();\n\t _vm.increase($event)\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"down\", 40)) { return null; }\n\t $event.preventDefault();\n\t _vm.decrease($event)\n\t }]\n\t }\n\t }, [(_vm.$slots.prepend) ? _c('template', {\n\t slot: \"prepend\"\n\t }, [_vm._t(\"prepend\")], 2) : _vm._e(), (_vm.$slots.append) ? _c('template', {\n\t slot: \"append\"\n\t }, [_vm._t(\"append\")], 2) : _vm._e()], 2)], 1)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 71 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _radio = __webpack_require__(72);\n\n\tvar _radio2 = _interopRequireDefault(_radio);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_radio2.default.install = function (Vue) {\n\t Vue.component('el-radio', _radio2.default);\n\t};\n\n\texports.default = _radio2.default;\n\n/***/ },\n/* 72 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(73),\n\t /* template */\n\t __webpack_require__(74),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 73 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElRadio',\n\n\t mixins: [_emitter2.default],\n\n\t componentName: 'ElRadio',\n\n\t props: {\n\t value: {},\n\t label: {},\n\t disabled: Boolean,\n\t name: String\n\t },\n\n\t data: function data() {\n\t return {\n\t focus: false\n\t };\n\t },\n\n\n\t computed: {\n\t isGroup: function isGroup() {\n\t var parent = this.$parent;\n\t while (parent) {\n\t if (parent.$options.componentName !== 'ElRadioGroup') {\n\t parent = parent.$parent;\n\t } else {\n\t this._radioGroup = parent;\n\t return true;\n\t }\n\t }\n\t return false;\n\t },\n\n\n\t model: {\n\t get: function get() {\n\t return this.isGroup ? this._radioGroup.value : this.value;\n\t },\n\t set: function set(val) {\n\t if (this.isGroup) {\n\t this.dispatch('ElRadioGroup', 'input', [val]);\n\t } else {\n\t this.$emit('input', val);\n\t }\n\t }\n\t },\n\n\t isDisabled: function isDisabled() {\n\t return this.isGroup ? this._radioGroup.disabled || this.disabled : this.disabled;\n\t }\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 74 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('label', {\n\t staticClass: \"el-radio\"\n\t }, [_c('span', {\n\t staticClass: \"el-radio__input\",\n\t class: {\n\t 'is-disabled': _vm.isDisabled,\n\t 'is-checked': _vm.model === _vm.label,\n\t 'is-focus': _vm.focus\n\t }\n\t }, [_c('span', {\n\t staticClass: \"el-radio__inner\"\n\t }), _c('input', {\n\t directives: [{\n\t name: \"model\",\n\t rawName: \"v-model\",\n\t value: (_vm.model),\n\t expression: \"model\"\n\t }],\n\t staticClass: \"el-radio__original\",\n\t attrs: {\n\t \"type\": \"radio\",\n\t \"name\": _vm.name,\n\t \"disabled\": _vm.isDisabled\n\t },\n\t domProps: {\n\t \"value\": _vm.label,\n\t \"checked\": _vm._q(_vm.model, _vm.label)\n\t },\n\t on: {\n\t \"focus\": function($event) {\n\t _vm.focus = true\n\t },\n\t \"blur\": function($event) {\n\t _vm.focus = false\n\t },\n\t \"__c\": function($event) {\n\t _vm.model = _vm.label\n\t }\n\t }\n\t })]), _c('span', {\n\t staticClass: \"el-radio__label\"\n\t }, [_vm._t(\"default\"), (!_vm.$slots.default) ? [_vm._v(_vm._s(_vm.label))] : _vm._e()], 2)])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 75 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _radioGroup = __webpack_require__(76);\n\n\tvar _radioGroup2 = _interopRequireDefault(_radioGroup);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_radioGroup2.default.install = function (Vue) {\n\t Vue.component(_radioGroup2.default.name, _radioGroup2.default);\n\t};\n\n\texports.default = _radioGroup2.default;\n\n/***/ },\n/* 76 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(77),\n\t /* template */\n\t __webpack_require__(78),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 77 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElRadioGroup',\n\n\t componentName: 'ElRadioGroup',\n\n\t mixins: [_emitter2.default],\n\n\t props: {\n\t value: {},\n\t size: String,\n\t fill: String,\n\t textColor: String,\n\t disabled: Boolean\n\t },\n\t watch: {\n\t value: function value(_value) {\n\t this.$emit('change', _value);\n\t this.dispatch('ElFormItem', 'el.form.change', [this.value]);\n\t }\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 78 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-radio-group\"\n\t }, [_vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 79 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _radioButton = __webpack_require__(80);\n\n\tvar _radioButton2 = _interopRequireDefault(_radioButton);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_radioButton2.default.install = function (Vue) {\n\t Vue.component(_radioButton2.default.name, _radioButton2.default);\n\t};\n\n\texports.default = _radioButton2.default;\n\n/***/ },\n/* 80 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(81),\n\t /* template */\n\t __webpack_require__(82),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 81 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElRadioButton',\n\n\t props: {\n\t label: {},\n\t disabled: Boolean,\n\t name: String\n\t },\n\t computed: {\n\t value: {\n\t get: function get() {\n\t return this._radioGroup.value;\n\t },\n\t set: function set(value) {\n\t this._radioGroup.$emit('input', value);\n\t }\n\t },\n\t _radioGroup: function _radioGroup() {\n\t var parent = this.$parent;\n\t while (parent) {\n\t if (parent.$options.componentName !== 'ElRadioGroup') {\n\t parent = parent.$parent;\n\t } else {\n\t return parent;\n\t }\n\t }\n\t return false;\n\t },\n\t activeStyle: function activeStyle() {\n\t return {\n\t backgroundColor: this._radioGroup.fill || '',\n\t borderColor: this._radioGroup.fill || '',\n\t boxShadow: this._radioGroup.fill ? '-1px 0 0 0 ' + this._radioGroup.fill : '',\n\t color: this._radioGroup.textColor || ''\n\t };\n\t },\n\t size: function size() {\n\t return this._radioGroup.size;\n\t },\n\t isDisabled: function isDisabled() {\n\t return this.disabled || this._radioGroup.disabled;\n\t }\n\t }\n\t};\n\n/***/ },\n/* 82 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('label', {\n\t staticClass: \"el-radio-button\",\n\t class: [\n\t _vm.size ? 'el-radio-button--' + _vm.size : '', {\n\t 'is-active': _vm.value === _vm.label\n\t }, {\n\t 'is-disabled': _vm.isDisabled\n\t }\n\t ]\n\t }, [_c('input', {\n\t directives: [{\n\t name: \"model\",\n\t rawName: \"v-model\",\n\t value: (_vm.value),\n\t expression: \"value\"\n\t }],\n\t staticClass: \"el-radio-button__orig-radio\",\n\t attrs: {\n\t \"type\": \"radio\",\n\t \"name\": _vm.name,\n\t \"disabled\": _vm.isDisabled\n\t },\n\t domProps: {\n\t \"value\": _vm.label,\n\t \"checked\": _vm._q(_vm.value, _vm.label)\n\t },\n\t on: {\n\t \"__c\": function($event) {\n\t _vm.value = _vm.label\n\t }\n\t }\n\t }), _c('span', {\n\t staticClass: \"el-radio-button__inner\",\n\t style: (_vm.value === _vm.label ? _vm.activeStyle : null)\n\t }, [_vm._t(\"default\"), (!_vm.$slots.default) ? [_vm._v(_vm._s(_vm.label))] : _vm._e()], 2)])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 83 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _checkbox = __webpack_require__(84);\n\n\tvar _checkbox2 = _interopRequireDefault(_checkbox);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_checkbox2.default.install = function (Vue) {\n\t Vue.component(_checkbox2.default.name, _checkbox2.default);\n\t};\n\n\texports.default = _checkbox2.default;\n\n/***/ },\n/* 84 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(85),\n\t /* template */\n\t __webpack_require__(86),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 85 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElCheckbox',\n\n\t mixins: [_emitter2.default],\n\n\t componentName: 'ElCheckbox',\n\n\t data: function data() {\n\t return {\n\t selfModel: false,\n\t focus: false\n\t };\n\t },\n\n\n\t computed: {\n\t model: {\n\t get: function get() {\n\t return this.isGroup ? this.store : this.value !== undefined ? this.value : this.selfModel;\n\t },\n\t set: function set(val) {\n\t if (this.isGroup) {\n\t var isLimitExceeded = false;\n\t this._checkboxGroup.min !== undefined && val.length < this._checkboxGroup.min && (isLimitExceeded = true);\n\n\t this._checkboxGroup.max !== undefined && val.length > this._checkboxGroup.max && (isLimitExceeded = true);\n\n\t isLimitExceeded === false && this.dispatch('ElCheckboxGroup', 'input', [val]);\n\t } else {\n\t this.$emit('input', val);\n\t this.selfModel = val;\n\t }\n\t }\n\t },\n\n\t isChecked: function isChecked() {\n\t if ({}.toString.call(this.model) === '[object Boolean]') {\n\t return this.model;\n\t } else if (Array.isArray(this.model)) {\n\t return this.model.indexOf(this.label) > -1;\n\t } else if (this.model !== null && this.model !== undefined) {\n\t return this.model === this.trueLabel;\n\t }\n\t },\n\t isGroup: function isGroup() {\n\t var parent = this.$parent;\n\t while (parent) {\n\t if (parent.$options.componentName !== 'ElCheckboxGroup') {\n\t parent = parent.$parent;\n\t } else {\n\t this._checkboxGroup = parent;\n\t return true;\n\t }\n\t }\n\t return false;\n\t },\n\t store: function store() {\n\t return this._checkboxGroup ? this._checkboxGroup.value : this.value;\n\t }\n\t },\n\n\t props: {\n\t value: {},\n\t label: {},\n\t indeterminate: Boolean,\n\t disabled: Boolean,\n\t checked: Boolean,\n\t name: String,\n\t trueLabel: [String, Number],\n\t falseLabel: [String, Number]\n\t },\n\n\t methods: {\n\t addToStore: function addToStore() {\n\t if (Array.isArray(this.model) && this.model.indexOf(this.label) === -1) {\n\t this.model.push(this.label);\n\t } else {\n\t this.model = this.trueLabel || true;\n\t }\n\t },\n\t handleChange: function handleChange(ev) {\n\t var _this = this;\n\n\t this.$emit('change', ev);\n\t if (this.isGroup) {\n\t this.$nextTick(function (_) {\n\t _this.dispatch('ElCheckboxGroup', 'change', [_this._checkboxGroup.value]);\n\t });\n\t }\n\t }\n\t },\n\n\t created: function created() {\n\t this.checked && this.addToStore();\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 86 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('label', {\n\t staticClass: \"el-checkbox\"\n\t }, [_c('span', {\n\t staticClass: \"el-checkbox__input\",\n\t class: {\n\t 'is-disabled': _vm.disabled,\n\t 'is-checked': _vm.isChecked,\n\t 'is-indeterminate': _vm.indeterminate,\n\t 'is-focus': _vm.focus\n\t }\n\t }, [_c('span', {\n\t staticClass: \"el-checkbox__inner\"\n\t }), (_vm.trueLabel || _vm.falseLabel) ? _c('input', {\n\t directives: [{\n\t name: \"model\",\n\t rawName: \"v-model\",\n\t value: (_vm.model),\n\t expression: \"model\"\n\t }],\n\t staticClass: \"el-checkbox__original\",\n\t attrs: {\n\t \"type\": \"checkbox\",\n\t \"name\": _vm.name,\n\t \"disabled\": _vm.disabled,\n\t \"true-value\": _vm.trueLabel,\n\t \"false-value\": _vm.falseLabel\n\t },\n\t domProps: {\n\t \"checked\": Array.isArray(_vm.model) ? _vm._i(_vm.model, null) > -1 : _vm._q(_vm.model, _vm.trueLabel)\n\t },\n\t on: {\n\t \"change\": _vm.handleChange,\n\t \"focus\": function($event) {\n\t _vm.focus = true\n\t },\n\t \"blur\": function($event) {\n\t _vm.focus = false\n\t },\n\t \"__c\": function($event) {\n\t var $$a = _vm.model,\n\t $$el = $event.target,\n\t $$c = $$el.checked ? (_vm.trueLabel) : (_vm.falseLabel);\n\t if (Array.isArray($$a)) {\n\t var $$v = null,\n\t $$i = _vm._i($$a, $$v);\n\t if ($$c) {\n\t $$i < 0 && (_vm.model = $$a.concat($$v))\n\t } else {\n\t $$i > -1 && (_vm.model = $$a.slice(0, $$i).concat($$a.slice($$i + 1)))\n\t }\n\t } else {\n\t _vm.model = $$c\n\t }\n\t }\n\t }\n\t }) : _c('input', {\n\t directives: [{\n\t name: \"model\",\n\t rawName: \"v-model\",\n\t value: (_vm.model),\n\t expression: \"model\"\n\t }],\n\t staticClass: \"el-checkbox__original\",\n\t attrs: {\n\t \"type\": \"checkbox\",\n\t \"disabled\": _vm.disabled,\n\t \"name\": _vm.name\n\t },\n\t domProps: {\n\t \"value\": _vm.label,\n\t \"checked\": Array.isArray(_vm.model) ? _vm._i(_vm.model, _vm.label) > -1 : (_vm.model)\n\t },\n\t on: {\n\t \"change\": _vm.handleChange,\n\t \"focus\": function($event) {\n\t _vm.focus = true\n\t },\n\t \"blur\": function($event) {\n\t _vm.focus = false\n\t },\n\t \"__c\": function($event) {\n\t var $$a = _vm.model,\n\t $$el = $event.target,\n\t $$c = $$el.checked ? (true) : (false);\n\t if (Array.isArray($$a)) {\n\t var $$v = _vm.label,\n\t $$i = _vm._i($$a, $$v);\n\t if ($$c) {\n\t $$i < 0 && (_vm.model = $$a.concat($$v))\n\t } else {\n\t $$i > -1 && (_vm.model = $$a.slice(0, $$i).concat($$a.slice($$i + 1)))\n\t }\n\t } else {\n\t _vm.model = $$c\n\t }\n\t }\n\t }\n\t })]), (_vm.$slots.default || _vm.label) ? _c('span', {\n\t staticClass: \"el-checkbox__label\"\n\t }, [_vm._t(\"default\"), (!_vm.$slots.default) ? [_vm._v(_vm._s(_vm.label))] : _vm._e()], 2) : _vm._e()])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 87 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _checkboxButton = __webpack_require__(88);\n\n\tvar _checkboxButton2 = _interopRequireDefault(_checkboxButton);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_checkboxButton2.default.install = function (Vue) {\n\t Vue.component(_checkboxButton2.default.name, _checkboxButton2.default);\n\t};\n\n\texports.default = _checkboxButton2.default;\n\n/***/ },\n/* 88 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(89),\n\t /* template */\n\t __webpack_require__(90),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 89 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElCheckboxButton',\n\n\t mixins: [_emitter2.default],\n\n\t data: function data() {\n\t return {\n\t selfModel: false,\n\t focus: false\n\t };\n\t },\n\n\n\t props: {\n\t value: {},\n\t label: {},\n\t disabled: Boolean,\n\t checked: Boolean,\n\t name: String,\n\t trueLabel: [String, Number],\n\t falseLabel: [String, Number]\n\t },\n\t computed: {\n\t model: {\n\t get: function get() {\n\t return this._checkboxGroup ? this.store : this.value !== undefined ? this.value : this.selfModel;\n\t },\n\t set: function set(val) {\n\t if (this._checkboxGroup) {\n\t var isLimitExceeded = false;\n\t this._checkboxGroup.min !== undefined && val.length < this._checkboxGroup.min && (isLimitExceeded = true);\n\n\t this._checkboxGroup.max !== undefined && val.length > this._checkboxGroup.max && (isLimitExceeded = true);\n\n\t isLimitExceeded === false && this.dispatch('ElCheckboxGroup', 'input', [val]);\n\t } else if (this.value !== undefined) {\n\t this.$emit('input', val);\n\t } else {\n\t this.selfModel = val;\n\t }\n\t }\n\t },\n\n\t isChecked: function isChecked() {\n\t if ({}.toString.call(this.model) === '[object Boolean]') {\n\t return this.model;\n\t } else if (Array.isArray(this.model)) {\n\t return this.model.indexOf(this.label) > -1;\n\t } else if (this.model !== null && this.model !== undefined) {\n\t return this.model === this.trueLabel;\n\t }\n\t },\n\t _checkboxGroup: function _checkboxGroup() {\n\t var parent = this.$parent;\n\t while (parent) {\n\t if (parent.$options.componentName !== 'ElCheckboxGroup') {\n\t parent = parent.$parent;\n\t } else {\n\t return parent;\n\t }\n\t }\n\t return false;\n\t },\n\t store: function store() {\n\t return this._checkboxGroup ? this._checkboxGroup.value : this.value;\n\t },\n\t activeStyle: function activeStyle() {\n\t return {\n\t backgroundColor: this._checkboxGroup.fill || '',\n\t borderColor: this._checkboxGroup.fill || '',\n\t color: this._checkboxGroup.textColor || '',\n\t 'box-shadow': '-1px 0 0 0 ' + this._checkboxGroup.fill\n\n\t };\n\t },\n\t size: function size() {\n\t return this._checkboxGroup.size;\n\t }\n\t },\n\t methods: {\n\t addToStore: function addToStore() {\n\t if (Array.isArray(this.model) && this.model.indexOf(this.label) === -1) {\n\t this.model.push(this.label);\n\t } else {\n\t this.model = this.trueLabel || true;\n\t }\n\t },\n\t handleChange: function handleChange(ev) {\n\t var _this = this;\n\n\t this.$emit('change', ev);\n\t if (this._checkboxGroup) {\n\t this.$nextTick(function (_) {\n\t _this.dispatch('ElCheckboxGroup', 'change', [_this._checkboxGroup.value]);\n\t });\n\t }\n\t }\n\t },\n\n\t created: function created() {\n\t this.checked && this.addToStore();\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 90 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('label', {\n\t staticClass: \"el-checkbox-button\",\n\t class: [\n\t _vm.size ? 'el-checkbox-button--' + _vm.size : '', {\n\t 'is-disabled': _vm.disabled\n\t }, {\n\t 'is-checked': _vm.isChecked\n\t }, {\n\t 'is-focus': _vm.focus\n\t } ]\n\t }, [(_vm.trueLabel || _vm.falseLabel) ? _c('input', {\n\t directives: [{\n\t name: \"model\",\n\t rawName: \"v-model\",\n\t value: (_vm.model),\n\t expression: \"model\"\n\t }],\n\t staticClass: \"el-checkbox-button__original\",\n\t attrs: {\n\t \"type\": \"checkbox\",\n\t \"name\": _vm.name,\n\t \"disabled\": _vm.disabled,\n\t \"true-value\": _vm.trueLabel,\n\t \"false-value\": _vm.falseLabel\n\t },\n\t domProps: {\n\t \"checked\": Array.isArray(_vm.model) ? _vm._i(_vm.model, null) > -1 : _vm._q(_vm.model, _vm.trueLabel)\n\t },\n\t on: {\n\t \"change\": _vm.handleChange,\n\t \"focus\": function($event) {\n\t _vm.focus = true\n\t },\n\t \"blur\": function($event) {\n\t _vm.focus = false\n\t },\n\t \"__c\": function($event) {\n\t var $$a = _vm.model,\n\t $$el = $event.target,\n\t $$c = $$el.checked ? (_vm.trueLabel) : (_vm.falseLabel);\n\t if (Array.isArray($$a)) {\n\t var $$v = null,\n\t $$i = _vm._i($$a, $$v);\n\t if ($$c) {\n\t $$i < 0 && (_vm.model = $$a.concat($$v))\n\t } else {\n\t $$i > -1 && (_vm.model = $$a.slice(0, $$i).concat($$a.slice($$i + 1)))\n\t }\n\t } else {\n\t _vm.model = $$c\n\t }\n\t }\n\t }\n\t }) : _c('input', {\n\t directives: [{\n\t name: \"model\",\n\t rawName: \"v-model\",\n\t value: (_vm.model),\n\t expression: \"model\"\n\t }],\n\t staticClass: \"el-checkbox-button__original\",\n\t attrs: {\n\t \"type\": \"checkbox\",\n\t \"name\": _vm.name,\n\t \"disabled\": _vm.disabled\n\t },\n\t domProps: {\n\t \"value\": _vm.label,\n\t \"checked\": Array.isArray(_vm.model) ? _vm._i(_vm.model, _vm.label) > -1 : (_vm.model)\n\t },\n\t on: {\n\t \"change\": _vm.handleChange,\n\t \"focus\": function($event) {\n\t _vm.focus = true\n\t },\n\t \"blur\": function($event) {\n\t _vm.focus = false\n\t },\n\t \"__c\": function($event) {\n\t var $$a = _vm.model,\n\t $$el = $event.target,\n\t $$c = $$el.checked ? (true) : (false);\n\t if (Array.isArray($$a)) {\n\t var $$v = _vm.label,\n\t $$i = _vm._i($$a, $$v);\n\t if ($$c) {\n\t $$i < 0 && (_vm.model = $$a.concat($$v))\n\t } else {\n\t $$i > -1 && (_vm.model = $$a.slice(0, $$i).concat($$a.slice($$i + 1)))\n\t }\n\t } else {\n\t _vm.model = $$c\n\t }\n\t }\n\t }\n\t }), (_vm.$slots.default || _vm.label) ? _c('span', {\n\t staticClass: \"el-checkbox-button__inner\",\n\t style: (_vm.isChecked ? _vm.activeStyle : null)\n\t }, [_vm._t(\"default\", [_vm._v(_vm._s(_vm.label))])], 2) : _vm._e()])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 91 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _checkboxGroup = __webpack_require__(92);\n\n\tvar _checkboxGroup2 = _interopRequireDefault(_checkboxGroup);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_checkboxGroup2.default.install = function (Vue) {\n\t Vue.component(_checkboxGroup2.default.name, _checkboxGroup2.default);\n\t};\n\n\texports.default = _checkboxGroup2.default;\n\n/***/ },\n/* 92 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(93),\n\t /* template */\n\t __webpack_require__(94),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 93 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElCheckboxGroup',\n\n\t componentName: 'ElCheckboxGroup',\n\n\t mixins: [_emitter2.default],\n\n\t props: {\n\t value: {},\n\t min: Number,\n\t max: Number,\n\t size: String,\n\t fill: String,\n\t textColor: String\n\t },\n\n\t watch: {\n\t value: function value(_value) {\n\t this.dispatch('ElFormItem', 'el.form.change', [_value]);\n\t }\n\t }\n\t};\n\n/***/ },\n/* 94 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-checkbox-group\"\n\t }, [_vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 95 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _component = __webpack_require__(96);\n\n\tvar _component2 = _interopRequireDefault(_component);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_component2.default.install = function (Vue) {\n\t Vue.component(_component2.default.name, _component2.default);\n\t};\n\n\texports.default = _component2.default;\n\n/***/ },\n/* 96 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(97),\n\t /* template */\n\t __webpack_require__(98),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 97 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElSwitch',\n\t props: {\n\t value: {\n\t type: [Boolean, String, Number],\n\t default: false\n\t },\n\t disabled: {\n\t type: Boolean,\n\t default: false\n\t },\n\t width: {\n\t type: Number,\n\t default: 0\n\t },\n\t onIconClass: {\n\t type: String,\n\t default: ''\n\t },\n\t offIconClass: {\n\t type: String,\n\t default: ''\n\t },\n\t onText: {\n\t type: String,\n\t default: 'ON'\n\t },\n\t offText: {\n\t type: String,\n\t default: 'OFF'\n\t },\n\t onColor: {\n\t type: String,\n\t default: ''\n\t },\n\t offColor: {\n\t type: String,\n\t default: ''\n\t },\n\t onValue: {\n\t type: [Boolean, String, Number],\n\t default: true\n\t },\n\t offValue: {\n\t type: [Boolean, String, Number],\n\t default: false\n\t },\n\t name: {\n\t type: String,\n\t default: ''\n\t }\n\t },\n\t data: function data() {\n\t return {\n\t coreWidth: this.width\n\t };\n\t },\n\t created: function created() {\n\t if (!~[this.onValue, this.offValue].indexOf(this.value)) {\n\t this.$emit('input', this.offValue);\n\t }\n\t },\n\n\t computed: {\n\t checked: function checked() {\n\t return this.value === this.onValue;\n\t },\n\t hasText: function hasText() {\n\t /* istanbul ignore next */\n\t return this.onText || this.offText;\n\t },\n\t transform: function transform() {\n\t return this.checked ? 'translate(' + (this.coreWidth - 20) + 'px, 2px)' : 'translate(2px, 2px)';\n\t }\n\t },\n\t watch: {\n\t checked: function checked() {\n\t this.$refs.input.checked = this.checked;\n\t if (this.onColor || this.offColor) {\n\t this.setBackgroundColor();\n\t }\n\t }\n\t },\n\t methods: {\n\t handleChange: function handleChange(event) {\n\t var _this = this;\n\n\t this.$emit('input', !this.checked ? this.onValue : this.offValue);\n\t this.$emit('change', !this.checked ? this.onValue : this.offValue);\n\t this.$nextTick(function () {\n\t // set input's checked property\n\t // in case parent refuses to change component's value\n\t _this.$refs.input.checked = _this.checked;\n\t });\n\t },\n\t setBackgroundColor: function setBackgroundColor() {\n\t var newColor = this.checked ? this.onColor : this.offColor;\n\t this.$refs.core.style.borderColor = newColor;\n\t this.$refs.core.style.backgroundColor = newColor;\n\t }\n\t },\n\t mounted: function mounted() {\n\t /* istanbul ignore if */\n\t if (this.width === 0) {\n\t this.coreWidth = this.hasText ? 58 : 46;\n\t }\n\t if (this.onColor || this.offColor) {\n\t this.setBackgroundColor();\n\t }\n\t this.$refs.input.checked = this.checked;\n\t }\n\t};\n\n/***/ },\n/* 98 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('label', {\n\t staticClass: \"el-switch\",\n\t class: {\n\t 'is-disabled': _vm.disabled, 'el-switch--wide': _vm.hasText, 'is-checked': _vm.checked\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.disabled),\n\t expression: \"disabled\"\n\t }],\n\t staticClass: \"el-switch__mask\"\n\t }), _c('input', {\n\t ref: \"input\",\n\t staticClass: \"el-switch__input\",\n\t attrs: {\n\t \"type\": \"checkbox\",\n\t \"name\": _vm.name,\n\t \"true-value\": _vm.onValue,\n\t \"false-value\": _vm.offValue,\n\t \"disabled\": _vm.disabled\n\t },\n\t on: {\n\t \"change\": _vm.handleChange\n\t }\n\t }), _c('span', {\n\t ref: \"core\",\n\t staticClass: \"el-switch__core\",\n\t style: ({\n\t 'width': _vm.coreWidth + 'px'\n\t })\n\t }, [_c('span', {\n\t staticClass: \"el-switch__button\",\n\t style: ({\n\t transform: _vm.transform\n\t })\n\t })]), _c('transition', {\n\t attrs: {\n\t \"name\": \"label-fade\"\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.checked),\n\t expression: \"checked\"\n\t }],\n\t staticClass: \"el-switch__label el-switch__label--left\",\n\t style: ({\n\t 'width': _vm.coreWidth + 'px'\n\t })\n\t }, [(_vm.onIconClass) ? _c('i', {\n\t class: [_vm.onIconClass]\n\t }) : _vm._e(), (!_vm.onIconClass && _vm.onText) ? _c('span', [_vm._v(_vm._s(_vm.onText))]) : _vm._e()])]), _c('transition', {\n\t attrs: {\n\t \"name\": \"label-fade\"\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (!_vm.checked),\n\t expression: \"!checked\"\n\t }],\n\t staticClass: \"el-switch__label el-switch__label--right\",\n\t style: ({\n\t 'width': _vm.coreWidth + 'px'\n\t })\n\t }, [(_vm.offIconClass) ? _c('i', {\n\t class: [_vm.offIconClass]\n\t }) : _vm._e(), (!_vm.offIconClass && _vm.offText) ? _c('span', [_vm._v(_vm._s(_vm.offText))]) : _vm._e()])])], 1)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 99 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _select = __webpack_require__(100);\n\n\tvar _select2 = _interopRequireDefault(_select);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_select2.default.install = function (Vue) {\n\t Vue.component(_select2.default.name, _select2.default);\n\t};\n\n\texports.default = _select2.default;\n\n/***/ },\n/* 100 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(101),\n\t /* template */\n\t __webpack_require__(113),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 101 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tvar _input = __webpack_require__(20);\n\n\tvar _input2 = _interopRequireDefault(_input);\n\n\tvar _selectDropdown = __webpack_require__(102);\n\n\tvar _selectDropdown2 = _interopRequireDefault(_selectDropdown);\n\n\tvar _option = __webpack_require__(105);\n\n\tvar _option2 = _interopRequireDefault(_option);\n\n\tvar _tag = __webpack_require__(109);\n\n\tvar _tag2 = _interopRequireDefault(_tag);\n\n\tvar _scrollbar = __webpack_require__(25);\n\n\tvar _scrollbar2 = _interopRequireDefault(_scrollbar);\n\n\tvar _debounce = __webpack_require__(69);\n\n\tvar _debounce2 = _interopRequireDefault(_debounce);\n\n\tvar _clickoutside = __webpack_require__(21);\n\n\tvar _clickoutside2 = _interopRequireDefault(_clickoutside);\n\n\tvar _dom = __webpack_require__(44);\n\n\tvar _resizeEvent = __webpack_require__(110);\n\n\tvar _locale3 = __webpack_require__(111);\n\n\tvar _scrollIntoView = __webpack_require__(112);\n\n\tvar _scrollIntoView2 = _interopRequireDefault(_scrollIntoView);\n\n\tvar _util = __webpack_require__(107);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar sizeMap = {\n\t 'large': 42,\n\t 'small': 30,\n\t 'mini': 22\n\t};\n\n\texports.default = {\n\t mixins: [_emitter2.default, _locale2.default],\n\n\t name: 'ElSelect',\n\n\t componentName: 'ElSelect',\n\n\t computed: {\n\t iconClass: function iconClass() {\n\t var criteria = this.clearable && !this.disabled && this.inputHovering && !this.multiple && this.value !== undefined && this.value !== '';\n\t return criteria ? 'circle-close is-show-close' : this.remote && this.filterable ? '' : 'caret-top';\n\t },\n\t debounce: function debounce() {\n\t return this.remote ? 300 : 0;\n\t },\n\t emptyText: function emptyText() {\n\t if (this.loading) {\n\t return this.loadingText || this.t('el.select.loading');\n\t } else {\n\t if (this.remote && this.query === '' && this.options.length === 0) return false;\n\t if (this.filterable && this.options.length > 0 && this.filteredOptionsCount === 0) {\n\t return this.noMatchText || this.t('el.select.noMatch');\n\t }\n\t if (this.options.length === 0) {\n\t return this.noDataText || this.t('el.select.noData');\n\t }\n\t }\n\t return null;\n\t },\n\t showNewOption: function showNewOption() {\n\t var _this = this;\n\n\t var hasExistingOption = this.options.filter(function (option) {\n\t return !option.created;\n\t }).some(function (option) {\n\t return option.currentLabel === _this.query;\n\t });\n\t return this.filterable && this.allowCreate && this.query !== '' && !hasExistingOption;\n\t }\n\t },\n\n\t components: {\n\t ElInput: _input2.default,\n\t ElSelectMenu: _selectDropdown2.default,\n\t ElOption: _option2.default,\n\t ElTag: _tag2.default,\n\t ElScrollbar: _scrollbar2.default\n\t },\n\n\t directives: { Clickoutside: _clickoutside2.default },\n\n\t props: {\n\t name: String,\n\t value: {\n\t required: true\n\t },\n\t size: String,\n\t disabled: Boolean,\n\t clearable: Boolean,\n\t filterable: Boolean,\n\t allowCreate: Boolean,\n\t loading: Boolean,\n\t popperClass: String,\n\t remote: Boolean,\n\t loadingText: String,\n\t noMatchText: String,\n\t noDataText: String,\n\t remoteMethod: Function,\n\t filterMethod: Function,\n\t multiple: Boolean,\n\t multipleLimit: {\n\t type: Number,\n\t default: 0\n\t },\n\t placeholder: {\n\t type: String,\n\t default: function _default() {\n\t return (0, _locale3.t)('el.select.placeholder');\n\t }\n\t },\n\t defaultFirstOption: Boolean,\n\t valueKey: {\n\t type: String,\n\t default: 'value'\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t options: [],\n\t cachedOptions: [],\n\t createdLabel: null,\n\t createdSelected: false,\n\t selected: this.multiple ? [] : {},\n\t isSelect: true,\n\t inputLength: 20,\n\t inputWidth: 0,\n\t cachedPlaceHolder: '',\n\t optionsCount: 0,\n\t filteredOptionsCount: 0,\n\t visible: false,\n\t selectedLabel: '',\n\t hoverIndex: -1,\n\t query: '',\n\t optionsAllDisabled: false,\n\t inputHovering: false,\n\t currentPlaceholder: ''\n\t };\n\t },\n\n\n\t watch: {\n\t placeholder: function placeholder(val) {\n\t this.cachedPlaceHolder = this.currentPlaceholder = val;\n\t },\n\t value: function value(val) {\n\t if (this.multiple) {\n\t this.resetInputHeight();\n\t if (val.length > 0 || this.$refs.input && this.query !== '') {\n\t this.currentPlaceholder = '';\n\t } else {\n\t this.currentPlaceholder = this.cachedPlaceHolder;\n\t }\n\t }\n\t this.setSelected();\n\t if (this.filterable && !this.multiple) {\n\t this.inputLength = 20;\n\t }\n\t this.$emit('change', val);\n\t this.dispatch('ElFormItem', 'el.form.change', val);\n\t },\n\t query: function query(val) {\n\t var _this2 = this;\n\n\t if (val === null || val === undefined) return;\n\t this.$nextTick(function () {\n\t if (_this2.visible) _this2.broadcast('ElSelectDropdown', 'updatePopper');\n\t });\n\t this.hoverIndex = -1;\n\t if (this.multiple && this.filterable) {\n\t this.inputLength = this.$refs.input.value.length * 15 + 20;\n\t this.managePlaceholder();\n\t this.resetInputHeight();\n\t }\n\t if (this.remote && typeof this.remoteMethod === 'function') {\n\t this.hoverIndex = -1;\n\t this.remoteMethod(val);\n\t this.broadcast('ElOption', 'resetIndex');\n\t } else if (typeof this.filterMethod === 'function') {\n\t this.filterMethod(val);\n\t this.broadcast('ElOptionGroup', 'queryChange');\n\t } else {\n\t this.filteredOptionsCount = this.optionsCount;\n\t this.broadcast('ElOption', 'queryChange', val);\n\t this.broadcast('ElOptionGroup', 'queryChange');\n\t }\n\t if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {\n\t this.checkDefaultFirstOption();\n\t }\n\t },\n\t visible: function visible(val) {\n\t var _this3 = this;\n\n\t if (!val) {\n\t this.$refs.reference.$el.querySelector('input').blur();\n\t this.handleIconHide();\n\t this.broadcast('ElSelectDropdown', 'destroyPopper');\n\t if (this.$refs.input) {\n\t this.$refs.input.blur();\n\t }\n\t this.query = '';\n\t this.selectedLabel = '';\n\t this.inputLength = 20;\n\t this.resetHoverIndex();\n\t this.$nextTick(function () {\n\t if (_this3.$refs.input && _this3.$refs.input.value === '' && _this3.selected.length === 0) {\n\t _this3.currentPlaceholder = _this3.cachedPlaceHolder;\n\t }\n\t });\n\t if (!this.multiple) {\n\t if (this.selected) {\n\t if (this.filterable && this.allowCreate && this.createdSelected && this.createdOption) {\n\t this.selectedLabel = this.createdLabel;\n\t } else {\n\t this.selectedLabel = this.selected.currentLabel;\n\t }\n\t if (this.filterable) this.query = this.selectedLabel;\n\t }\n\t }\n\t } else {\n\t this.handleIconShow();\n\t this.broadcast('ElSelectDropdown', 'updatePopper');\n\t if (this.filterable) {\n\t this.query = this.selectedLabel;\n\t if (this.multiple) {\n\t this.$refs.input.focus();\n\t } else {\n\t if (!this.remote) {\n\t this.broadcast('ElOption', 'queryChange', '');\n\t this.broadcast('ElOptionGroup', 'queryChange');\n\t }\n\t this.broadcast('ElInput', 'inputSelect');\n\t }\n\t }\n\t }\n\t this.$emit('visible-change', val);\n\t },\n\t options: function options(val) {\n\t if (this.$isServer) return;\n\t this.optionsAllDisabled = val.length === val.filter(function (item) {\n\t return item.disabled === true;\n\t }).length;\n\t if (this.multiple) {\n\t this.resetInputHeight();\n\t }\n\t var inputs = this.$el.querySelectorAll('input');\n\t if ([].indexOf.call(inputs, document.activeElement) === -1) {\n\t this.setSelected();\n\t }\n\t if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {\n\t this.checkDefaultFirstOption();\n\t }\n\t }\n\t },\n\n\t methods: {\n\t handleIconHide: function handleIconHide() {\n\t var icon = this.$el.querySelector('.el-input__icon');\n\t if (icon) {\n\t (0, _dom.removeClass)(icon, 'is-reverse');\n\t }\n\t },\n\t handleIconShow: function handleIconShow() {\n\t var icon = this.$el.querySelector('.el-input__icon');\n\t if (icon && !(0, _dom.hasClass)(icon, 'el-icon-circle-close')) {\n\t (0, _dom.addClass)(icon, 'is-reverse');\n\t }\n\t },\n\t scrollToOption: function scrollToOption(option) {\n\t var target = Array.isArray(option) && option[0] ? option[0].$el : option.$el;\n\t if (this.$refs.popper && target) {\n\t var menu = this.$refs.popper.$el.querySelector('.el-select-dropdown__wrap');\n\t (0, _scrollIntoView2.default)(menu, target);\n\t }\n\t },\n\t handleMenuEnter: function handleMenuEnter() {\n\t var _this4 = this;\n\n\t this.$nextTick(function () {\n\t return _this4.scrollToOption(_this4.selected);\n\t });\n\t },\n\t getOption: function getOption(value) {\n\t var option = void 0;\n\t var isObject = Object.prototype.toString.call(value).toLowerCase() === '[object object]';\n\t for (var i = this.cachedOptions.length - 1; i >= 0; i--) {\n\t var cachedOption = this.cachedOptions[i];\n\t var isEqual = isObject ? (0, _util.getValueByPath)(cachedOption.value, this.valueKey) === (0, _util.getValueByPath)(value, this.valueKey) : cachedOption.value === value;\n\t if (isEqual) {\n\t option = cachedOption;\n\t break;\n\t }\n\t }\n\t if (option) return option;\n\t var label = !isObject ? value : '';\n\t var newOption = {\n\t value: value,\n\t currentLabel: label\n\t };\n\t if (this.multiple) {\n\t newOption.hitState = false;\n\t }\n\t return newOption;\n\t },\n\t setSelected: function setSelected() {\n\t var _this5 = this;\n\n\t if (!this.multiple) {\n\t var option = this.getOption(this.value);\n\t if (option.created) {\n\t this.createdLabel = option.currentLabel;\n\t this.createdSelected = true;\n\t } else {\n\t this.createdSelected = false;\n\t }\n\t this.selectedLabel = option.currentLabel;\n\t this.selected = option;\n\t if (this.filterable) this.query = this.selectedLabel;\n\t return;\n\t }\n\t var result = [];\n\t if (Array.isArray(this.value)) {\n\t this.value.forEach(function (value) {\n\t result.push(_this5.getOption(value));\n\t });\n\t }\n\t this.selected = result;\n\t this.$nextTick(function () {\n\t _this5.resetInputHeight();\n\t });\n\t },\n\t handleFocus: function handleFocus() {\n\t this.visible = true;\n\t },\n\t handleIconClick: function handleIconClick(event) {\n\t if (this.iconClass.indexOf('circle-close') > -1) {\n\t this.deleteSelected(event);\n\t } else {\n\t this.toggleMenu();\n\t }\n\t },\n\t handleMouseDown: function handleMouseDown(event) {\n\t if (event.target.tagName !== 'INPUT') return;\n\t if (this.visible) {\n\t this.handleClose();\n\t event.preventDefault();\n\t }\n\t },\n\t doDestroy: function doDestroy() {\n\t this.$refs.popper && this.$refs.popper.doDestroy();\n\t this.dropdownUl = null;\n\t },\n\t handleClose: function handleClose() {\n\t this.visible = false;\n\t },\n\t toggleLastOptionHitState: function toggleLastOptionHitState(hit) {\n\t if (!Array.isArray(this.selected)) return;\n\t var option = this.selected[this.selected.length - 1];\n\t if (!option) return;\n\n\t if (hit === true || hit === false) {\n\t option.hitState = hit;\n\t return hit;\n\t }\n\n\t option.hitState = !option.hitState;\n\t return option.hitState;\n\t },\n\t deletePrevTag: function deletePrevTag(e) {\n\t if (e.target.value.length <= 0 && !this.toggleLastOptionHitState()) {\n\t var value = this.value.slice();\n\t value.pop();\n\t this.$emit('input', value);\n\t }\n\t },\n\t managePlaceholder: function managePlaceholder() {\n\t if (this.currentPlaceholder !== '') {\n\t this.currentPlaceholder = this.$refs.input.value ? '' : this.cachedPlaceHolder;\n\t }\n\t },\n\t resetInputState: function resetInputState(e) {\n\t if (e.keyCode !== 8) this.toggleLastOptionHitState(false);\n\t this.inputLength = this.$refs.input.value.length * 15 + 20;\n\t this.resetInputHeight();\n\t },\n\t resetInputHeight: function resetInputHeight() {\n\t var _this6 = this;\n\n\t this.$nextTick(function () {\n\t if (!_this6.$refs.reference) return;\n\t var inputChildNodes = _this6.$refs.reference.$el.childNodes;\n\t var input = [].filter.call(inputChildNodes, function (item) {\n\t return item.tagName === 'INPUT';\n\t })[0];\n\t input.style.height = Math.max(_this6.$refs.tags.clientHeight + 6, sizeMap[_this6.size] || 36) + 'px';\n\t if (_this6.visible && _this6.emptyText !== false) {\n\t _this6.broadcast('ElSelectDropdown', 'updatePopper');\n\t }\n\t });\n\t },\n\t resetHoverIndex: function resetHoverIndex() {\n\t var _this7 = this;\n\n\t setTimeout(function () {\n\t if (!_this7.multiple) {\n\t _this7.hoverIndex = _this7.options.indexOf(_this7.selected);\n\t } else {\n\t if (_this7.selected.length > 0) {\n\t _this7.hoverIndex = Math.min.apply(null, _this7.selected.map(function (item) {\n\t return _this7.options.indexOf(item);\n\t }));\n\t } else {\n\t _this7.hoverIndex = -1;\n\t }\n\t }\n\t }, 300);\n\t },\n\t handleOptionSelect: function handleOptionSelect(option) {\n\t var _this8 = this;\n\n\t if (this.multiple) {\n\t var value = this.value.slice();\n\t var optionIndex = this.getValueIndex(value, option.value);\n\t if (optionIndex > -1) {\n\t value.splice(optionIndex, 1);\n\t } else if (this.multipleLimit <= 0 || value.length < this.multipleLimit) {\n\t value.push(option.value);\n\t }\n\t this.$emit('input', value);\n\t if (option.created) {\n\t this.query = '';\n\t this.inputLength = 20;\n\t }\n\t if (this.filterable) this.$refs.input.focus();\n\t } else {\n\t this.$emit('input', option.value);\n\t this.visible = false;\n\t }\n\t this.$nextTick(function () {\n\t return _this8.scrollToOption(option);\n\t });\n\t },\n\t getValueIndex: function getValueIndex() {\n\t var _this9 = this;\n\n\t var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\t var value = arguments[1];\n\n\t var isObject = Object.prototype.toString.call(value).toLowerCase() === '[object object]';\n\t if (!isObject) {\n\t return arr.indexOf(value);\n\t } else {\n\t var _ret = function () {\n\t var valueKey = _this9.valueKey;\n\t var index = -1;\n\t arr.some(function (item, i) {\n\t if ((0, _util.getValueByPath)(item, valueKey) === (0, _util.getValueByPath)(value, valueKey)) {\n\t index = i;\n\t return true;\n\t }\n\t return false;\n\t });\n\t return {\n\t v: index\n\t };\n\t }();\n\n\t if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === \"object\") return _ret.v;\n\t }\n\t },\n\t toggleMenu: function toggleMenu() {\n\t if (this.filterable && this.query === '' && this.visible) {\n\t return;\n\t }\n\t if (!this.disabled) {\n\t this.visible = !this.visible;\n\t }\n\t },\n\t navigateOptions: function navigateOptions(direction) {\n\t var _this10 = this;\n\n\t if (!this.visible) {\n\t this.visible = true;\n\t return;\n\t }\n\t if (this.options.length === 0 || this.filteredOptionsCount === 0) return;\n\t this.optionsAllDisabled = this.options.length === this.options.filter(function (item) {\n\t return item.disabled === true;\n\t }).length;\n\t if (!this.optionsAllDisabled) {\n\t if (direction === 'next') {\n\t this.hoverIndex++;\n\t if (this.hoverIndex === this.options.length) {\n\t this.hoverIndex = 0;\n\t }\n\t if (this.options[this.hoverIndex].disabled === true || this.options[this.hoverIndex].groupDisabled === true || !this.options[this.hoverIndex].visible) {\n\t this.navigateOptions('next');\n\t }\n\t }\n\t if (direction === 'prev') {\n\t this.hoverIndex--;\n\t if (this.hoverIndex < 0) {\n\t this.hoverIndex = this.options.length - 1;\n\t }\n\t if (this.options[this.hoverIndex].disabled === true || this.options[this.hoverIndex].groupDisabled === true || !this.options[this.hoverIndex].visible) {\n\t this.navigateOptions('prev');\n\t }\n\t }\n\t }\n\t this.$nextTick(function () {\n\t return _this10.scrollToOption(_this10.options[_this10.hoverIndex]);\n\t });\n\t },\n\t selectOption: function selectOption() {\n\t if (this.options[this.hoverIndex]) {\n\t this.handleOptionSelect(this.options[this.hoverIndex]);\n\t }\n\t },\n\t deleteSelected: function deleteSelected(event) {\n\t event.stopPropagation();\n\t this.$emit('input', '');\n\t this.visible = false;\n\t this.$emit('clear');\n\t },\n\t deleteTag: function deleteTag(event, tag) {\n\t var index = this.selected.indexOf(tag);\n\t if (index > -1 && !this.disabled) {\n\t var value = this.value.slice();\n\t value.splice(index, 1);\n\t this.$emit('input', value);\n\t this.$emit('remove-tag', tag);\n\t }\n\t event.stopPropagation();\n\t },\n\t onInputChange: function onInputChange() {\n\t if (this.filterable) {\n\t this.query = this.selectedLabel;\n\t }\n\t },\n\t onOptionDestroy: function onOptionDestroy(option) {\n\t this.optionsCount--;\n\t this.filteredOptionsCount--;\n\t var index = this.options.indexOf(option);\n\t if (index > -1) {\n\t this.options.splice(index, 1);\n\t }\n\t this.broadcast('ElOption', 'resetIndex');\n\t },\n\t resetInputWidth: function resetInputWidth() {\n\t this.inputWidth = this.$refs.reference.$el.getBoundingClientRect().width;\n\t },\n\t handleResize: function handleResize() {\n\t this.resetInputWidth();\n\t if (this.multiple) this.resetInputHeight();\n\t },\n\t checkDefaultFirstOption: function checkDefaultFirstOption() {\n\t this.hoverIndex = -1;\n\t for (var i = 0; i !== this.options.length; ++i) {\n\t var option = this.options[i];\n\t if (this.query) {\n\t // pick first options that passes the filter\n\t if (!option.disabled && !option.groupDisabled && option.visible) {\n\t this.hoverIndex = i;\n\t break;\n\t }\n\t } else {\n\t // pick currently selected option\n\t if (option.itemSelected) {\n\t this.hoverIndex = i;\n\t break;\n\t }\n\t }\n\t }\n\t },\n\t getValueKey: function getValueKey(item) {\n\t if (Object.prototype.toString.call(item.value).toLowerCase() !== '[object object]') {\n\t return item.value;\n\t } else {\n\t return (0, _util.getValueByPath)(item.value, this.valueKey);\n\t }\n\t }\n\t },\n\n\t created: function created() {\n\t var _this11 = this;\n\n\t this.cachedPlaceHolder = this.currentPlaceholder = this.placeholder;\n\t if (this.multiple && !Array.isArray(this.value)) {\n\t this.$emit('input', []);\n\t }\n\t if (!this.multiple && Array.isArray(this.value)) {\n\t this.$emit('input', '');\n\t }\n\n\t this.debouncedOnInputChange = (0, _debounce2.default)(this.debounce, function () {\n\t _this11.onInputChange();\n\t });\n\n\t this.$on('handleOptionClick', this.handleOptionSelect);\n\t this.$on('onOptionDestroy', this.onOptionDestroy);\n\t this.$on('setSelected', this.setSelected);\n\t },\n\t mounted: function mounted() {\n\t var _this12 = this;\n\n\t if (this.multiple && Array.isArray(this.value) && this.value.length > 0) {\n\t this.currentPlaceholder = '';\n\t }\n\t (0, _resizeEvent.addResizeListener)(this.$el, this.handleResize);\n\t if (this.remote && this.multiple) {\n\t this.resetInputHeight();\n\t }\n\t this.$nextTick(function () {\n\t if (_this12.$refs.reference && _this12.$refs.reference.$el) {\n\t _this12.inputWidth = _this12.$refs.reference.$el.getBoundingClientRect().width;\n\t }\n\t });\n\t this.setSelected();\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t if (this.$el && this.handleResize) (0, _resizeEvent.removeResizeListener)(this.$el, this.handleResize);\n\t }\n\t};\n\n/***/ },\n/* 102 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(103),\n\t /* template */\n\t __webpack_require__(104),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 103 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vuePopper = __webpack_require__(24);\n\n\tvar _vuePopper2 = _interopRequireDefault(_vuePopper);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElSelectDropdown',\n\n\t componentName: 'ElSelectDropdown',\n\n\t mixins: [_vuePopper2.default],\n\n\t props: {\n\t placement: {\n\t default: 'bottom-start'\n\t },\n\n\t boundariesPadding: {\n\t default: 0\n\t },\n\n\t popperOptions: {\n\t default: function _default() {\n\t return {\n\t gpuAcceleration: false\n\t };\n\t }\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t minWidth: ''\n\t };\n\t },\n\n\n\t computed: {\n\t popperClass: function popperClass() {\n\t return this.$parent.popperClass;\n\t }\n\t },\n\n\t watch: {\n\t '$parent.inputWidth': function $parentInputWidth() {\n\t this.minWidth = this.$parent.$el.getBoundingClientRect().width + 'px';\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t var _this = this;\n\n\t this.referenceElm = this.$parent.$refs.reference.$el;\n\t this.$parent.popperElm = this.popperElm = this.$el;\n\t this.$on('updatePopper', function () {\n\t if (_this.$parent.visible) _this.updatePopper();\n\t });\n\t this.$on('destroyPopper', this.destroyPopper);\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 104 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-select-dropdown\",\n\t class: [{\n\t 'is-multiple': _vm.$parent.multiple\n\t }, _vm.popperClass],\n\t style: ({\n\t minWidth: _vm.minWidth\n\t })\n\t }, [_vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 105 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(106),\n\t /* template */\n\t __webpack_require__(108),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 106 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tvar _util = __webpack_require__(107);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t mixins: [_emitter2.default],\n\n\t name: 'ElOption',\n\n\t componentName: 'ElOption',\n\n\t props: {\n\t value: {\n\t required: true\n\t },\n\t label: [String, Number],\n\t created: Boolean,\n\t disabled: {\n\t type: Boolean,\n\t default: false\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t index: -1,\n\t groupDisabled: false,\n\t visible: true,\n\t hitState: false\n\t };\n\t },\n\n\n\t computed: {\n\t isObject: function isObject() {\n\t return Object.prototype.toString.call(this.value).toLowerCase() === '[object object]';\n\t },\n\t currentLabel: function currentLabel() {\n\t return this.label || (this.isObject ? '' : this.value);\n\t },\n\t currentValue: function currentValue() {\n\t return this.value || this.label || '';\n\t },\n\t parent: function parent() {\n\t var result = this.$parent;\n\t while (!result.isSelect) {\n\t result = result.$parent;\n\t }\n\t return result;\n\t },\n\t itemSelected: function itemSelected() {\n\t if (!this.parent.multiple) {\n\t return this.isEqual(this.value, this.parent.value);\n\t } else {\n\t return this.contains(this.parent.value, this.value);\n\t }\n\t },\n\t limitReached: function limitReached() {\n\t if (this.parent.multiple) {\n\t return !this.itemSelected && this.parent.value.length >= this.parent.multipleLimit && this.parent.multipleLimit > 0;\n\t } else {\n\t return false;\n\t }\n\t }\n\t },\n\n\t watch: {\n\t currentLabel: function currentLabel() {\n\t if (!this.created && !this.parent.remote) this.dispatch('ElSelect', 'setSelected');\n\t },\n\t value: function value() {\n\t if (!this.created && !this.parent.remote) this.dispatch('ElSelect', 'setSelected');\n\t }\n\t },\n\n\t methods: {\n\t isEqual: function isEqual(a, b) {\n\t if (!this.isObject) {\n\t return a === b;\n\t } else {\n\t var valueKey = this.parent.valueKey;\n\t return (0, _util.getValueByPath)(a, valueKey) === (0, _util.getValueByPath)(b, valueKey);\n\t }\n\t },\n\t contains: function contains() {\n\t var _this = this;\n\n\t var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\t var target = arguments[1];\n\n\t if (!this.isObject) {\n\t return arr.indexOf(target) > -1;\n\t } else {\n\t var _ret = function () {\n\t var valueKey = _this.parent.valueKey;\n\t return {\n\t v: arr.some(function (item) {\n\t return (0, _util.getValueByPath)(item, valueKey) === (0, _util.getValueByPath)(target, valueKey);\n\t })\n\t };\n\t }();\n\n\t if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === \"object\") return _ret.v;\n\t }\n\t },\n\t handleGroupDisabled: function handleGroupDisabled(val) {\n\t this.groupDisabled = val;\n\t },\n\t hoverItem: function hoverItem() {\n\t if (!this.disabled && !this.groupDisabled) {\n\t this.parent.hoverIndex = this.parent.options.indexOf(this);\n\t }\n\t },\n\t selectOptionClick: function selectOptionClick() {\n\t if (this.disabled !== true && this.groupDisabled !== true) {\n\t this.dispatch('ElSelect', 'handleOptionClick', this);\n\t }\n\t },\n\t queryChange: function queryChange(query) {\n\t // query 里如果有正则中的特殊字符,需要先将这些字符转义\n\t var parsedQuery = String(query).replace(/(\\^|\\(|\\)|\\[|\\]|\\$|\\*|\\+|\\.|\\?|\\\\|\\{|\\}|\\|)/g, '\\\\$1');\n\t this.visible = new RegExp(parsedQuery, 'i').test(this.currentLabel) || this.created;\n\t if (!this.visible) {\n\t this.parent.filteredOptionsCount--;\n\t }\n\t },\n\t resetIndex: function resetIndex() {\n\t var _this2 = this;\n\n\t this.$nextTick(function () {\n\t _this2.index = _this2.parent.options.indexOf(_this2);\n\t });\n\t }\n\t },\n\n\t created: function created() {\n\t this.parent.options.push(this);\n\t this.parent.cachedOptions.push(this);\n\t this.parent.optionsCount++;\n\t this.parent.filteredOptionsCount++;\n\t this.index = this.parent.options.indexOf(this);\n\n\t this.$on('queryChange', this.queryChange);\n\t this.$on('handleGroupDisabled', this.handleGroupDisabled);\n\t this.$on('resetIndex', this.resetIndex);\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t this.dispatch('ElSelect', 'onOptionDestroy', this);\n\t }\n\t};\n\n/***/ },\n/* 107 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(5);\n\n/***/ },\n/* 108 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('li', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible),\n\t expression: \"visible\"\n\t }],\n\t staticClass: \"el-select-dropdown__item\",\n\t class: {\n\t 'selected': _vm.itemSelected,\n\t 'is-disabled': _vm.disabled || _vm.groupDisabled || _vm.limitReached,\n\t 'hover': _vm.parent.hoverIndex === _vm.index\n\t },\n\t on: {\n\t \"mouseenter\": _vm.hoverItem,\n\t \"click\": function($event) {\n\t $event.stopPropagation();\n\t _vm.selectOptionClick($event)\n\t }\n\t }\n\t }, [_vm._t(\"default\", [_c('span', [_vm._v(_vm._s(_vm.currentLabel))])])], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 109 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(22);\n\n/***/ },\n/* 110 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(12);\n\n/***/ },\n/* 111 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(13);\n\n/***/ },\n/* 112 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(19);\n\n/***/ },\n/* 113 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t directives: [{\n\t name: \"clickoutside\",\n\t rawName: \"v-clickoutside\",\n\t value: (_vm.handleClose),\n\t expression: \"handleClose\"\n\t }],\n\t staticClass: \"el-select\"\n\t }, [(_vm.multiple) ? _c('div', {\n\t ref: \"tags\",\n\t staticClass: \"el-select__tags\",\n\t style: ({\n\t 'max-width': _vm.inputWidth - 32 + 'px'\n\t }),\n\t on: {\n\t \"click\": function($event) {\n\t $event.stopPropagation();\n\t _vm.toggleMenu($event)\n\t }\n\t }\n\t }, [_c('transition-group', {\n\t on: {\n\t \"after-leave\": _vm.resetInputHeight\n\t }\n\t }, _vm._l((_vm.selected), function(item) {\n\t return _c('el-tag', {\n\t key: _vm.getValueKey(item),\n\t attrs: {\n\t \"closable\": !_vm.disabled,\n\t \"hit\": item.hitState,\n\t \"type\": \"primary\",\n\t \"close-transition\": \"\"\n\t },\n\t on: {\n\t \"close\": function($event) {\n\t _vm.deleteTag($event, item)\n\t }\n\t }\n\t }, [_c('span', {\n\t staticClass: \"el-select__tags-text\"\n\t }, [_vm._v(_vm._s(item.currentLabel))])])\n\t })), (_vm.filterable) ? _c('input', {\n\t directives: [{\n\t name: \"model\",\n\t rawName: \"v-model\",\n\t value: (_vm.query),\n\t expression: \"query\"\n\t }],\n\t ref: \"input\",\n\t staticClass: \"el-select__input\",\n\t class: (\"is-\" + _vm.size),\n\t style: ({\n\t width: _vm.inputLength + 'px',\n\t 'max-width': _vm.inputWidth - 42 + 'px'\n\t }),\n\t attrs: {\n\t \"type\": \"text\",\n\t \"disabled\": _vm.disabled,\n\t \"debounce\": _vm.remote ? 300 : 0\n\t },\n\t domProps: {\n\t \"value\": (_vm.query)\n\t },\n\t on: {\n\t \"focus\": function($event) {\n\t _vm.visible = true\n\t },\n\t \"keyup\": _vm.managePlaceholder,\n\t \"keydown\": [_vm.resetInputState, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"down\", 40)) { return null; }\n\t $event.preventDefault();\n\t _vm.navigateOptions('next')\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"up\", 38)) { return null; }\n\t $event.preventDefault();\n\t _vm.navigateOptions('prev')\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"enter\", 13)) { return null; }\n\t $event.preventDefault();\n\t _vm.selectOption($event)\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"esc\", 27)) { return null; }\n\t $event.stopPropagation();\n\t $event.preventDefault();\n\t _vm.visible = false\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"delete\", [8, 46])) { return null; }\n\t _vm.deletePrevTag($event)\n\t }],\n\t \"input\": function($event) {\n\t if ($event.target.composing) { return; }\n\t _vm.query = $event.target.value\n\t }\n\t }\n\t }) : _vm._e()], 1) : _vm._e(), _c('el-input', {\n\t ref: \"reference\",\n\t attrs: {\n\t \"type\": \"text\",\n\t \"placeholder\": _vm.currentPlaceholder,\n\t \"name\": _vm.name,\n\t \"size\": _vm.size,\n\t \"disabled\": _vm.disabled,\n\t \"readonly\": !_vm.filterable || _vm.multiple,\n\t \"validate-event\": false,\n\t \"icon\": _vm.iconClass\n\t },\n\t on: {\n\t \"focus\": _vm.handleFocus,\n\t \"click\": _vm.handleIconClick\n\t },\n\t nativeOn: {\n\t \"mousedown\": function($event) {\n\t _vm.handleMouseDown($event)\n\t },\n\t \"keyup\": function($event) {\n\t _vm.debouncedOnInputChange($event)\n\t },\n\t \"keydown\": [function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"down\", 40)) { return null; }\n\t $event.preventDefault();\n\t _vm.navigateOptions('next')\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"up\", 38)) { return null; }\n\t $event.preventDefault();\n\t _vm.navigateOptions('prev')\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"enter\", 13)) { return null; }\n\t $event.preventDefault();\n\t _vm.selectOption($event)\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"esc\", 27)) { return null; }\n\t $event.stopPropagation();\n\t $event.preventDefault();\n\t _vm.visible = false\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"tab\", 9)) { return null; }\n\t _vm.visible = false\n\t }],\n\t \"paste\": function($event) {\n\t _vm.debouncedOnInputChange($event)\n\t },\n\t \"mouseenter\": function($event) {\n\t _vm.inputHovering = true\n\t },\n\t \"mouseleave\": function($event) {\n\t _vm.inputHovering = false\n\t }\n\t },\n\t model: {\n\t value: (_vm.selectedLabel),\n\t callback: function($$v) {\n\t _vm.selectedLabel = $$v\n\t },\n\t expression: \"selectedLabel\"\n\t }\n\t }), _c('transition', {\n\t attrs: {\n\t \"name\": \"el-zoom-in-top\"\n\t },\n\t on: {\n\t \"before-enter\": _vm.handleMenuEnter,\n\t \"after-leave\": _vm.doDestroy\n\t }\n\t }, [_c('el-select-menu', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible && _vm.emptyText !== false),\n\t expression: \"visible && emptyText !== false\"\n\t }],\n\t ref: \"popper\"\n\t }, [_c('el-scrollbar', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.options.length > 0 && !_vm.loading),\n\t expression: \"options.length > 0 && !loading\"\n\t }],\n\t class: {\n\t 'is-empty': !_vm.allowCreate && _vm.filteredOptionsCount === 0\n\t },\n\t attrs: {\n\t \"tag\": \"ul\",\n\t \"wrap-class\": \"el-select-dropdown__wrap\",\n\t \"view-class\": \"el-select-dropdown__list\"\n\t }\n\t }, [(_vm.showNewOption) ? _c('el-option', {\n\t attrs: {\n\t \"value\": _vm.query,\n\t \"created\": \"\"\n\t }\n\t }) : _vm._e(), _vm._t(\"default\")], 2), (_vm.emptyText && (_vm.allowCreate && _vm.options.length === 0 || !_vm.allowCreate)) ? _c('p', {\n\t staticClass: \"el-select-dropdown__empty\"\n\t }, [_vm._v(_vm._s(_vm.emptyText))]) : _vm._e()], 1)], 1)], 1)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 114 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _option = __webpack_require__(105);\n\n\tvar _option2 = _interopRequireDefault(_option);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_option2.default.install = function (Vue) {\n\t Vue.component(_option2.default.name, _option2.default);\n\t};\n\n\texports.default = _option2.default;\n\n/***/ },\n/* 115 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _optionGroup = __webpack_require__(116);\n\n\tvar _optionGroup2 = _interopRequireDefault(_optionGroup);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_optionGroup2.default.install = function (Vue) {\n\t Vue.component(_optionGroup2.default.name, _optionGroup2.default);\n\t};\n\n\texports.default = _optionGroup2.default;\n\n/***/ },\n/* 116 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(117),\n\t /* template */\n\t __webpack_require__(118),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 117 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t mixins: [_emitter2.default],\n\n\t name: 'ElOptionGroup',\n\n\t componentName: 'ElOptionGroup',\n\n\t props: {\n\t label: String,\n\t disabled: {\n\t type: Boolean,\n\t default: false\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t visible: true\n\t };\n\t },\n\n\n\t watch: {\n\t disabled: function disabled(val) {\n\t this.broadcast('ElOption', 'handleGroupDisabled', val);\n\t }\n\t },\n\n\t methods: {\n\t queryChange: function queryChange() {\n\t this.visible = this.$children && Array.isArray(this.$children) && this.$children.some(function (option) {\n\t return option.visible === true;\n\t });\n\t }\n\t },\n\n\t created: function created() {\n\t this.$on('queryChange', this.queryChange);\n\t },\n\t mounted: function mounted() {\n\t if (this.disabled) {\n\t this.broadcast('ElOption', 'handleGroupDisabled', this.disabled);\n\t }\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 118 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('ul', {\n\t staticClass: \"el-select-group__wrap\"\n\t }, [_c('li', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible),\n\t expression: \"visible\"\n\t }],\n\t staticClass: \"el-select-group__title\"\n\t }, [_vm._v(_vm._s(_vm.label))]), _c('li', [_c('ul', {\n\t staticClass: \"el-select-group\"\n\t }, [_vm._t(\"default\")], 2)])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 119 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _button = __webpack_require__(120);\n\n\tvar _button2 = _interopRequireDefault(_button);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_button2.default.install = function (Vue) {\n\t Vue.component(_button2.default.name, _button2.default);\n\t};\n\n\texports.default = _button2.default;\n\n/***/ },\n/* 120 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(121),\n\t /* template */\n\t __webpack_require__(122),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 121 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElButton',\n\n\t props: {\n\t type: {\n\t type: String,\n\t default: 'default'\n\t },\n\t size: String,\n\t icon: {\n\t type: String,\n\t default: ''\n\t },\n\t nativeType: {\n\t type: String,\n\t default: 'button'\n\t },\n\t loading: Boolean,\n\t disabled: Boolean,\n\t plain: Boolean,\n\t autofocus: Boolean\n\t },\n\n\t methods: {\n\t handleClick: function handleClick(evt) {\n\t this.$emit('click', evt);\n\t },\n\t handleInnerClick: function handleInnerClick(evt) {\n\t if (this.disabled) {\n\t evt.stopPropagation();\n\t }\n\t }\n\t }\n\t};\n\n/***/ },\n/* 122 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('button', {\n\t staticClass: \"el-button\",\n\t class: [\n\t _vm.type ? 'el-button--' + _vm.type : '',\n\t _vm.size ? 'el-button--' + _vm.size : '', {\n\t 'is-disabled': _vm.disabled,\n\t 'is-loading': _vm.loading,\n\t 'is-plain': _vm.plain\n\t }\n\t ],\n\t attrs: {\n\t \"disabled\": _vm.disabled,\n\t \"autofocus\": _vm.autofocus,\n\t \"type\": _vm.nativeType\n\t },\n\t on: {\n\t \"click\": _vm.handleClick\n\t }\n\t }, [(_vm.loading) ? _c('i', {\n\t staticClass: \"el-icon-loading\",\n\t on: {\n\t \"click\": _vm.handleInnerClick\n\t }\n\t }) : _vm._e(), (_vm.icon && !_vm.loading) ? _c('i', {\n\t class: 'el-icon-' + _vm.icon,\n\t on: {\n\t \"click\": _vm.handleInnerClick\n\t }\n\t }) : _vm._e(), (_vm.$slots.default) ? _c('span', {\n\t on: {\n\t \"click\": _vm.handleInnerClick\n\t }\n\t }, [_vm._t(\"default\")], 2) : _vm._e()])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 123 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _buttonGroup = __webpack_require__(124);\n\n\tvar _buttonGroup2 = _interopRequireDefault(_buttonGroup);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_buttonGroup2.default.install = function (Vue) {\n\t Vue.component(_buttonGroup2.default.name, _buttonGroup2.default);\n\t};\n\n\texports.default = _buttonGroup2.default;\n\n/***/ },\n/* 124 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(125),\n\t /* template */\n\t __webpack_require__(126),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 125 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\t/**\n\t * button\n\t * @module components/basic/menu\n\t * @desc 用于按钮组\n\t * @param {string} label - 名称\n\t */\n\texports.default = {\n\t name: 'ElButtonGroup'\n\t};\n\n/***/ },\n/* 126 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-button-group\"\n\t }, [_vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 127 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _table = __webpack_require__(128);\n\n\tvar _table2 = _interopRequireDefault(_table);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_table2.default.install = function (Vue) {\n\t Vue.component(_table2.default.name, _table2.default);\n\t};\n\n\texports.default = _table2.default;\n\n/***/ },\n/* 128 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(129),\n\t /* template */\n\t __webpack_require__(146),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 129 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _checkbox = __webpack_require__(130);\n\n\tvar _checkbox2 = _interopRequireDefault(_checkbox);\n\n\tvar _throttle = __webpack_require__(131);\n\n\tvar _throttle2 = _interopRequireDefault(_throttle);\n\n\tvar _debounce = __webpack_require__(69);\n\n\tvar _debounce2 = _interopRequireDefault(_debounce);\n\n\tvar _resizeEvent = __webpack_require__(110);\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tvar _tableStore = __webpack_require__(132);\n\n\tvar _tableStore2 = _interopRequireDefault(_tableStore);\n\n\tvar _tableLayout = __webpack_require__(135);\n\n\tvar _tableLayout2 = _interopRequireDefault(_tableLayout);\n\n\tvar _tableBody = __webpack_require__(137);\n\n\tvar _tableBody2 = _interopRequireDefault(_tableBody);\n\n\tvar _tableHeader = __webpack_require__(139);\n\n\tvar _tableHeader2 = _interopRequireDefault(_tableHeader);\n\n\tvar _tableFooter = __webpack_require__(145);\n\n\tvar _tableFooter2 = _interopRequireDefault(_tableFooter);\n\n\tvar _util = __webpack_require__(134);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar tableIdSeed = 1; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElTable',\n\n\t mixins: [_locale2.default],\n\n\t props: {\n\t data: {\n\t type: Array,\n\t default: function _default() {\n\t return [];\n\t }\n\t },\n\n\t width: [String, Number],\n\n\t height: [String, Number],\n\n\t maxHeight: [String, Number],\n\n\t fit: {\n\t type: Boolean,\n\t default: true\n\t },\n\n\t stripe: Boolean,\n\n\t border: Boolean,\n\n\t rowKey: [String, Function],\n\n\t context: {},\n\n\t showHeader: {\n\t type: Boolean,\n\t default: true\n\t },\n\n\t showSummary: Boolean,\n\n\t sumText: String,\n\n\t summaryMethod: Function,\n\n\t rowClassName: [String, Function],\n\n\t rowStyle: [Object, Function],\n\n\t highlightCurrentRow: Boolean,\n\n\t currentRowKey: [String, Number],\n\n\t emptyText: String,\n\n\t expandRowKeys: Array,\n\n\t defaultExpandAll: Boolean,\n\n\t defaultSort: Object,\n\n\t tooltipEffect: String\n\t },\n\n\t components: {\n\t TableHeader: _tableHeader2.default,\n\t TableFooter: _tableFooter2.default,\n\t TableBody: _tableBody2.default,\n\t ElCheckbox: _checkbox2.default\n\t },\n\n\t methods: {\n\t setCurrentRow: function setCurrentRow(row) {\n\t this.store.commit('setCurrentRow', row);\n\t },\n\t toggleRowSelection: function toggleRowSelection(row, selected) {\n\t this.store.toggleRowSelection(row, selected);\n\t this.store.updateAllSelected();\n\t },\n\t clearSelection: function clearSelection() {\n\t this.store.clearSelection();\n\t },\n\t handleMouseLeave: function handleMouseLeave() {\n\t this.store.commit('setHoverRow', null);\n\t if (this.hoverState) this.hoverState = null;\n\t },\n\t updateScrollY: function updateScrollY() {\n\t this.layout.updateScrollY();\n\t },\n\t bindEvents: function bindEvents() {\n\t var _this = this;\n\n\t var _$refs = this.$refs,\n\t headerWrapper = _$refs.headerWrapper,\n\t footerWrapper = _$refs.footerWrapper;\n\n\t var refs = this.$refs;\n\t this.bodyWrapper.addEventListener('scroll', function () {\n\t if (headerWrapper) headerWrapper.scrollLeft = this.scrollLeft;\n\t if (footerWrapper) footerWrapper.scrollLeft = this.scrollLeft;\n\t if (refs.fixedBodyWrapper) refs.fixedBodyWrapper.scrollTop = this.scrollTop;\n\t if (refs.rightFixedBodyWrapper) refs.rightFixedBodyWrapper.scrollTop = this.scrollTop;\n\t });\n\n\t var scrollBodyWrapper = function scrollBodyWrapper(event) {\n\t var deltaX = event.deltaX,\n\t deltaY = event.deltaY;\n\n\n\t if (Math.abs(deltaX) < Math.abs(deltaY)) return;\n\n\t if (deltaX > 0) {\n\t _this.bodyWrapper.scrollLeft += 10;\n\t } else if (deltaX < 0) {\n\t _this.bodyWrapper.scrollLeft -= 10;\n\t }\n\t };\n\t if (headerWrapper) {\n\t (0, _util.mousewheel)(headerWrapper, (0, _throttle2.default)(16, scrollBodyWrapper));\n\t }\n\t if (footerWrapper) {\n\t (0, _util.mousewheel)(footerWrapper, (0, _throttle2.default)(16, scrollBodyWrapper));\n\t }\n\n\t if (this.fit) {\n\t this.windowResizeListener = (0, _throttle2.default)(50, function () {\n\t if (_this.$ready) _this.doLayout();\n\t });\n\t (0, _resizeEvent.addResizeListener)(this.$el, this.windowResizeListener);\n\t }\n\t },\n\t doLayout: function doLayout() {\n\t var _this2 = this;\n\n\t this.store.updateColumns();\n\t this.layout.update();\n\t this.updateScrollY();\n\t this.$nextTick(function () {\n\t if (_this2.height) {\n\t _this2.layout.setHeight(_this2.height);\n\t } else if (_this2.maxHeight) {\n\t _this2.layout.setMaxHeight(_this2.maxHeight);\n\t } else if (_this2.shouldUpdateHeight) {\n\t _this2.layout.updateHeight();\n\t }\n\t if (_this2.$el) {\n\t _this2.isHidden = _this2.$el.clientWidth === 0;\n\t }\n\t });\n\t }\n\t },\n\n\t created: function created() {\n\t var _this3 = this;\n\n\t this.tableId = 'el-table_' + tableIdSeed + '_';\n\t this.debouncedLayout = (0, _debounce2.default)(50, function () {\n\t return _this3.doLayout();\n\t });\n\t },\n\n\n\t computed: {\n\t bodyWrapper: function bodyWrapper() {\n\t return this.$refs.bodyWrapper;\n\t },\n\t shouldUpdateHeight: function shouldUpdateHeight() {\n\t return typeof this.height === 'number' || this.fixedColumns.length > 0 || this.rightFixedColumns.length > 0;\n\t },\n\t selection: function selection() {\n\t return this.store.states.selection;\n\t },\n\t columns: function columns() {\n\t return this.store.states.columns;\n\t },\n\t tableData: function tableData() {\n\t return this.store.states.data;\n\t },\n\t fixedColumns: function fixedColumns() {\n\t return this.store.states.fixedColumns;\n\t },\n\t rightFixedColumns: function rightFixedColumns() {\n\t return this.store.states.rightFixedColumns;\n\t },\n\t bodyHeight: function bodyHeight() {\n\t var style = {};\n\n\t if (this.height) {\n\t style = {\n\t height: this.layout.bodyHeight ? this.layout.bodyHeight + 'px' : ''\n\t };\n\t } else if (this.maxHeight) {\n\t style = {\n\t 'max-height': (this.showHeader ? this.maxHeight - this.layout.headerHeight - this.layout.footerHeight : this.maxHeight - this.layout.footerHeight) + 'px'\n\t };\n\t }\n\n\t return style;\n\t },\n\t bodyWidth: function bodyWidth() {\n\t var _layout = this.layout,\n\t bodyWidth = _layout.bodyWidth,\n\t scrollY = _layout.scrollY,\n\t gutterWidth = _layout.gutterWidth;\n\n\t return bodyWidth ? bodyWidth - (scrollY ? gutterWidth : 0) + 'px' : '';\n\t },\n\t fixedBodyHeight: function fixedBodyHeight() {\n\t var style = {};\n\n\t if (this.height) {\n\t style = {\n\t height: this.layout.fixedBodyHeight ? this.layout.fixedBodyHeight + 'px' : ''\n\t };\n\t } else if (this.maxHeight) {\n\t var maxHeight = this.layout.scrollX ? this.maxHeight - this.layout.gutterWidth : this.maxHeight;\n\n\t if (this.showHeader) {\n\t maxHeight -= this.layout.headerHeight;\n\t }\n\n\t style = {\n\t 'max-height': maxHeight + 'px'\n\t };\n\t }\n\n\t return style;\n\t },\n\t fixedHeight: function fixedHeight() {\n\t var style = {};\n\n\t if (this.maxHeight) {\n\t style = {\n\t bottom: this.layout.scrollX && this.data.length ? this.layout.gutterWidth + 'px' : ''\n\t };\n\t } else {\n\t style = {\n\t height: this.layout.viewportHeight ? this.layout.viewportHeight + 'px' : ''\n\t };\n\t }\n\n\t return style;\n\t }\n\t },\n\n\t watch: {\n\t height: function height(value) {\n\t this.layout.setHeight(value);\n\t },\n\t currentRowKey: function currentRowKey(newVal) {\n\t this.store.setCurrentRowKey(newVal);\n\t },\n\n\n\t data: {\n\t immediate: true,\n\t handler: function handler(val) {\n\t this.store.commit('setData', val);\n\t if (this.$ready) this.doLayout();\n\t }\n\t },\n\n\t expandRowKeys: function expandRowKeys(newVal) {\n\t this.store.setExpandRowKeys(newVal);\n\t }\n\t },\n\n\t destroyed: function destroyed() {\n\t if (this.windowResizeListener) (0, _resizeEvent.removeResizeListener)(this.$el, this.windowResizeListener);\n\t },\n\t mounted: function mounted() {\n\t var _this4 = this;\n\n\t this.bindEvents();\n\t this.doLayout();\n\n\t // init filters\n\t this.store.states.columns.forEach(function (column) {\n\t if (column.filteredValue && column.filteredValue.length) {\n\t _this4.store.commit('filterChange', {\n\t column: column,\n\t values: column.filteredValue,\n\t silent: true\n\t });\n\t }\n\t });\n\n\t this.$ready = true;\n\t },\n\t data: function data() {\n\t var store = new _tableStore2.default(this, {\n\t rowKey: this.rowKey,\n\t defaultExpandAll: this.defaultExpandAll\n\t });\n\t var layout = new _tableLayout2.default({\n\t store: store,\n\t table: this,\n\t fit: this.fit,\n\t showHeader: this.showHeader\n\t });\n\t return {\n\t store: store,\n\t layout: layout,\n\t isHidden: false,\n\t renderExpanded: null,\n\t resizeProxyVisible: false\n\t };\n\t }\n\t};\n\n/***/ },\n/* 130 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(40);\n\n/***/ },\n/* 131 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(21);\n\n/***/ },\n/* 132 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vue = __webpack_require__(133);\n\n\tvar _vue2 = _interopRequireDefault(_vue);\n\n\tvar _debounce = __webpack_require__(69);\n\n\tvar _debounce2 = _interopRequireDefault(_debounce);\n\n\tvar _util = __webpack_require__(134);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar sortData = function sortData(data, states) {\n\t var sortingColumn = states.sortingColumn;\n\t if (!sortingColumn || typeof sortingColumn.sortable === 'string') {\n\t return data;\n\t }\n\t return (0, _util.orderBy)(data, states.sortProp, states.sortOrder, sortingColumn.sortMethod);\n\t};\n\n\tvar getKeysMap = function getKeysMap(array, rowKey) {\n\t var arrayMap = {};\n\t (array || []).forEach(function (row, index) {\n\t arrayMap[(0, _util.getRowIdentity)(row, rowKey)] = { row: row, index: index };\n\t });\n\t return arrayMap;\n\t};\n\n\tvar toggleRowSelection = function toggleRowSelection(states, row, selected) {\n\t var changed = false;\n\t var selection = states.selection;\n\t var index = selection.indexOf(row);\n\t if (typeof selected === 'undefined') {\n\t if (index === -1) {\n\t selection.push(row);\n\t changed = true;\n\t } else {\n\t selection.splice(index, 1);\n\t changed = true;\n\t }\n\t } else {\n\t if (selected && index === -1) {\n\t selection.push(row);\n\t changed = true;\n\t } else if (!selected && index > -1) {\n\t selection.splice(index, 1);\n\t changed = true;\n\t }\n\t }\n\n\t return changed;\n\t};\n\n\tvar TableStore = function TableStore(table) {\n\t var initialState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t if (!table) {\n\t throw new Error('Table is required.');\n\t }\n\t this.table = table;\n\n\t this.states = {\n\t rowKey: null,\n\t _columns: [],\n\t originColumns: [],\n\t columns: [],\n\t fixedColumns: [],\n\t rightFixedColumns: [],\n\t isComplex: false,\n\t _data: null,\n\t filteredData: null,\n\t data: null,\n\t sortingColumn: null,\n\t sortProp: null,\n\t sortOrder: null,\n\t isAllSelected: false,\n\t selection: [],\n\t reserveSelection: false,\n\t selectable: null,\n\t currentRow: null,\n\t hoverRow: null,\n\t filters: {},\n\t expandRows: [],\n\t defaultExpandAll: false\n\t };\n\n\t for (var prop in initialState) {\n\t if (initialState.hasOwnProperty(prop) && this.states.hasOwnProperty(prop)) {\n\t this.states[prop] = initialState[prop];\n\t }\n\t }\n\t};\n\n\tTableStore.prototype.mutations = {\n\t setData: function setData(states, data) {\n\t var _this = this;\n\n\t var dataInstanceChanged = states._data !== data;\n\t states._data = data;\n\t states.data = sortData(data || [], states);\n\n\t // states.data.forEach((item) => {\n\t // if (!item.$extra) {\n\t // Object.defineProperty(item, '$extra', {\n\t // value: {},\n\t // enumerable: false\n\t // });\n\t // }\n\t // });\n\n\t this.updateCurrentRow();\n\n\t if (!states.reserveSelection) {\n\t if (dataInstanceChanged) {\n\t this.clearSelection();\n\t } else {\n\t this.cleanSelection();\n\t }\n\t this.updateAllSelected();\n\t } else {\n\t (function () {\n\t var rowKey = states.rowKey;\n\t if (rowKey) {\n\t (function () {\n\t var selection = states.selection;\n\t var selectedMap = getKeysMap(selection, rowKey);\n\n\t states.data.forEach(function (row) {\n\t var rowId = (0, _util.getRowIdentity)(row, rowKey);\n\t var rowInfo = selectedMap[rowId];\n\t if (rowInfo) {\n\t selection[rowInfo.index] = row;\n\t }\n\t });\n\n\t _this.updateAllSelected();\n\t })();\n\t } else {\n\t console.warn('WARN: rowKey is required when reserve-selection is enabled.');\n\t }\n\t })();\n\t }\n\n\t var defaultExpandAll = states.defaultExpandAll;\n\t if (defaultExpandAll) {\n\t this.states.expandRows = (states.data || []).slice(0);\n\t }\n\n\t _vue2.default.nextTick(function () {\n\t return _this.table.updateScrollY();\n\t });\n\t },\n\t changeSortCondition: function changeSortCondition(states) {\n\t var _this2 = this;\n\n\t states.data = sortData(states.filteredData || states._data || [], states);\n\n\t this.table.$emit('sort-change', {\n\t column: this.states.sortingColumn,\n\t prop: this.states.sortProp,\n\t order: this.states.sortOrder\n\t });\n\n\t _vue2.default.nextTick(function () {\n\t return _this2.table.updateScrollY();\n\t });\n\t },\n\t filterChange: function filterChange(states, options) {\n\t var _this3 = this;\n\n\t var column = options.column,\n\t values = options.values,\n\t silent = options.silent;\n\n\t if (values && !Array.isArray(values)) {\n\t values = [values];\n\t }\n\n\t var prop = column.property;\n\t var filters = {};\n\n\t if (prop) {\n\t states.filters[column.id] = values;\n\t filters[column.columnKey || column.id] = values;\n\t }\n\n\t var data = states._data;\n\n\t Object.keys(states.filters).forEach(function (columnId) {\n\t var values = states.filters[columnId];\n\t if (!values || values.length === 0) return;\n\t var column = (0, _util.getColumnById)(_this3.states, columnId);\n\t if (column && column.filterMethod) {\n\t data = data.filter(function (row) {\n\t return values.some(function (value) {\n\t return column.filterMethod.call(null, value, row);\n\t });\n\t });\n\t }\n\t });\n\n\t states.filteredData = data;\n\t states.data = sortData(data, states);\n\n\t if (!silent) {\n\t this.table.$emit('filter-change', filters);\n\t }\n\n\t _vue2.default.nextTick(function () {\n\t return _this3.table.updateScrollY();\n\t });\n\t },\n\t insertColumn: function insertColumn(states, column, index, parent) {\n\t var array = states._columns;\n\t if (parent) {\n\t array = parent.children;\n\t if (!array) array = parent.children = [];\n\t }\n\n\t if (typeof index !== 'undefined') {\n\t array.splice(index, 0, column);\n\t } else {\n\t array.push(column);\n\t }\n\n\t if (column.type === 'selection') {\n\t states.selectable = column.selectable;\n\t states.reserveSelection = column.reserveSelection;\n\t }\n\n\t this.updateColumns(); // hack for dynamics insert column\n\t this.scheduleLayout();\n\t },\n\t removeColumn: function removeColumn(states, column) {\n\t var _columns = states._columns;\n\t if (_columns) {\n\t _columns.splice(_columns.indexOf(column), 1);\n\t }\n\n\t this.updateColumns(); // hack for dynamics remove column\n\t this.scheduleLayout();\n\t },\n\t setHoverRow: function setHoverRow(states, row) {\n\t states.hoverRow = row;\n\t },\n\t setCurrentRow: function setCurrentRow(states, row) {\n\t var oldCurrentRow = states.currentRow;\n\t states.currentRow = row;\n\n\t if (oldCurrentRow !== row) {\n\t this.table.$emit('current-change', row, oldCurrentRow);\n\t }\n\t },\n\t rowSelectedChanged: function rowSelectedChanged(states, row) {\n\t var changed = toggleRowSelection(states, row);\n\t var selection = states.selection;\n\n\t if (changed) {\n\t var table = this.table;\n\t table.$emit('selection-change', selection);\n\t table.$emit('select', selection, row);\n\t }\n\n\t this.updateAllSelected();\n\t },\n\n\n\t toggleRowExpanded: function toggleRowExpanded(states, row, expanded) {\n\t var expandRows = states.expandRows;\n\t if (typeof expanded !== 'undefined') {\n\t var index = expandRows.indexOf(row);\n\t if (expanded) {\n\t if (index === -1) expandRows.push(row);\n\t } else {\n\t if (index !== -1) expandRows.splice(index, 1);\n\t }\n\t } else {\n\t var _index = expandRows.indexOf(row);\n\t if (_index === -1) {\n\t expandRows.push(row);\n\t } else {\n\t expandRows.splice(_index, 1);\n\t }\n\t }\n\t this.table.$emit('expand', row, expandRows.indexOf(row) !== -1);\n\t },\n\n\t toggleAllSelection: (0, _debounce2.default)(10, function (states) {\n\t var data = states.data || [];\n\t var value = !states.isAllSelected;\n\t var selection = this.states.selection;\n\t var selectionChanged = false;\n\n\t data.forEach(function (item, index) {\n\t if (states.selectable) {\n\t if (states.selectable.call(null, item, index) && toggleRowSelection(states, item, value)) {\n\t selectionChanged = true;\n\t }\n\t } else {\n\t if (toggleRowSelection(states, item, value)) {\n\t selectionChanged = true;\n\t }\n\t }\n\t });\n\n\t var table = this.table;\n\t if (selectionChanged) {\n\t table.$emit('selection-change', selection);\n\t }\n\t table.$emit('select-all', selection);\n\t states.isAllSelected = value;\n\t })\n\t};\n\n\tvar doFlattenColumns = function doFlattenColumns(columns) {\n\t var result = [];\n\t columns.forEach(function (column) {\n\t if (column.children) {\n\t result.push.apply(result, doFlattenColumns(column.children));\n\t } else {\n\t result.push(column);\n\t }\n\t });\n\t return result;\n\t};\n\n\tTableStore.prototype.updateColumns = function () {\n\t var states = this.states;\n\t var _columns = states._columns || [];\n\t states.fixedColumns = _columns.filter(function (column) {\n\t return column.fixed === true || column.fixed === 'left';\n\t });\n\t states.rightFixedColumns = _columns.filter(function (column) {\n\t return column.fixed === 'right';\n\t });\n\n\t if (states.fixedColumns.length > 0 && _columns[0] && _columns[0].type === 'selection' && !_columns[0].fixed) {\n\t _columns[0].fixed = true;\n\t states.fixedColumns.unshift(_columns[0]);\n\t }\n\t states.originColumns = [].concat(states.fixedColumns).concat(_columns.filter(function (column) {\n\t return !column.fixed;\n\t })).concat(states.rightFixedColumns);\n\t states.columns = doFlattenColumns(states.originColumns);\n\t states.isComplex = states.fixedColumns.length > 0 || states.rightFixedColumns.length > 0;\n\t};\n\n\tTableStore.prototype.isSelected = function (row) {\n\t return (this.states.selection || []).indexOf(row) > -1;\n\t};\n\n\tTableStore.prototype.clearSelection = function () {\n\t var states = this.states;\n\t states.isAllSelected = false;\n\t var oldSelection = states.selection;\n\t states.selection = [];\n\t if (oldSelection.length > 0) {\n\t this.table.$emit('selection-change', states.selection);\n\t }\n\t};\n\n\tTableStore.prototype.setExpandRowKeys = function (rowKeys) {\n\t var expandRows = [];\n\t var data = this.states.data;\n\t var rowKey = this.states.rowKey;\n\t if (!rowKey) throw new Error('[Table] prop row-key should not be empty.');\n\t var keysMap = getKeysMap(data, rowKey);\n\t rowKeys.forEach(function (key) {\n\t var info = keysMap[key];\n\t if (info) {\n\t expandRows.push(info.row);\n\t }\n\t });\n\n\t this.states.expandRows = expandRows;\n\t};\n\n\tTableStore.prototype.toggleRowSelection = function (row, selected) {\n\t var changed = toggleRowSelection(this.states, row, selected);\n\t if (changed) {\n\t this.table.$emit('selection-change', this.states.selection);\n\t }\n\t};\n\n\tTableStore.prototype.cleanSelection = function () {\n\t var selection = this.states.selection || [];\n\t var data = this.states.data;\n\t var rowKey = this.states.rowKey;\n\t var deleted = void 0;\n\t if (rowKey) {\n\t deleted = [];\n\t var selectedMap = getKeysMap(selection, rowKey);\n\t var dataMap = getKeysMap(data, rowKey);\n\t for (var key in selectedMap) {\n\t if (selectedMap.hasOwnProperty(key) && !dataMap[key]) {\n\t deleted.push(selectedMap[key].row);\n\t }\n\t }\n\t } else {\n\t deleted = selection.filter(function (item) {\n\t return data.indexOf(item) === -1;\n\t });\n\t }\n\n\t deleted.forEach(function (deletedItem) {\n\t selection.splice(selection.indexOf(deletedItem), 1);\n\t });\n\n\t if (deleted.length) {\n\t this.table.$emit('selection-change', selection);\n\t }\n\t};\n\n\tTableStore.prototype.updateAllSelected = function () {\n\t var states = this.states;\n\t var selection = states.selection,\n\t rowKey = states.rowKey,\n\t selectable = states.selectable,\n\t data = states.data;\n\n\t if (!data || data.length === 0) {\n\t states.isAllSelected = false;\n\t return;\n\t }\n\n\t var selectedMap = void 0;\n\t if (rowKey) {\n\t selectedMap = getKeysMap(states.selection, rowKey);\n\t }\n\n\t var isSelected = function isSelected(row) {\n\t if (selectedMap) {\n\t return !!selectedMap[(0, _util.getRowIdentity)(row, rowKey)];\n\t } else {\n\t return selection.indexOf(row) !== -1;\n\t }\n\t };\n\n\t var isAllSelected = true;\n\t var selectedCount = 0;\n\t for (var i = 0, j = data.length; i < j; i++) {\n\t var item = data[i];\n\t if (selectable) {\n\t var isRowSelectable = selectable.call(null, item, i);\n\t if (isRowSelectable) {\n\t if (!isSelected(item)) {\n\t isAllSelected = false;\n\t break;\n\t } else {\n\t selectedCount++;\n\t }\n\t }\n\t } else {\n\t if (!isSelected(item)) {\n\t isAllSelected = false;\n\t break;\n\t } else {\n\t selectedCount++;\n\t }\n\t }\n\t }\n\n\t if (selectedCount === 0) isAllSelected = false;\n\n\t states.isAllSelected = isAllSelected;\n\t};\n\n\tTableStore.prototype.scheduleLayout = function () {\n\t this.table.debouncedLayout();\n\t};\n\n\tTableStore.prototype.setCurrentRowKey = function (key) {\n\t var states = this.states;\n\t var rowKey = states.rowKey;\n\t if (!rowKey) throw new Error('[Table] row-key should not be empty.');\n\t var data = states.data || [];\n\t var keysMap = getKeysMap(data, rowKey);\n\t var info = keysMap[key];\n\t if (info) {\n\t states.currentRow = info.row;\n\t }\n\t};\n\n\tTableStore.prototype.updateCurrentRow = function () {\n\t var states = this.states;\n\t var table = this.table;\n\t var data = states.data || [];\n\t var oldCurrentRow = states.currentRow;\n\n\t if (data.indexOf(oldCurrentRow) === -1) {\n\t states.currentRow = null;\n\n\t if (states.currentRow !== oldCurrentRow) {\n\t table.$emit('current-change', null, oldCurrentRow);\n\t }\n\t }\n\t};\n\n\tTableStore.prototype.commit = function (name) {\n\t var mutations = this.mutations;\n\t if (mutations[name]) {\n\t for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n\t args[_key - 1] = arguments[_key];\n\t }\n\n\t mutations[name].apply(this, [this.states].concat(args));\n\t } else {\n\t throw new Error('Action not found: ' + name);\n\t }\n\t};\n\n\texports.default = TableStore;\n\n/***/ },\n/* 133 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(2);\n\n/***/ },\n/* 134 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\texports.getRowIdentity = exports.mousewheel = exports.getColumnByCell = exports.getColumnById = exports.orderBy = exports.getCell = undefined;\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\tvar _util = __webpack_require__(107);\n\n\tvar getCell = exports.getCell = function getCell(event) {\n\t var cell = event.target;\n\n\t while (cell && cell.tagName.toUpperCase() !== 'HTML') {\n\t if (cell.tagName.toUpperCase() === 'TD') {\n\t return cell;\n\t }\n\t cell = cell.parentNode;\n\t }\n\n\t return null;\n\t};\n\n\tvar isObject = function isObject(obj) {\n\t return obj !== null && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object';\n\t};\n\n\tvar orderBy = exports.orderBy = function orderBy(array, sortKey, reverse, sortMethod) {\n\t if (typeof reverse === 'string') {\n\t reverse = reverse === 'descending' ? -1 : 1;\n\t }\n\t if (!sortKey && !sortMethod) {\n\t return array;\n\t }\n\t var order = reverse && reverse < 0 ? -1 : 1;\n\n\t // sort on a copy to avoid mutating original array\n\t return array.slice().sort(sortMethod ? function (a, b) {\n\t return sortMethod(a, b) ? order : -order;\n\t } : function (a, b) {\n\t if (sortKey !== '$key') {\n\t if (isObject(a) && '$value' in a) a = a.$value;\n\t if (isObject(b) && '$value' in b) b = b.$value;\n\t }\n\t a = isObject(a) ? (0, _util.getValueByPath)(a, sortKey) : a;\n\t b = isObject(b) ? (0, _util.getValueByPath)(b, sortKey) : b;\n\t return a === b ? 0 : a > b ? order : -order;\n\t });\n\t};\n\n\tvar getColumnById = exports.getColumnById = function getColumnById(table, columnId) {\n\t var column = null;\n\t table.columns.forEach(function (item) {\n\t if (item.id === columnId) {\n\t column = item;\n\t }\n\t });\n\t return column;\n\t};\n\n\tvar getColumnByCell = exports.getColumnByCell = function getColumnByCell(table, cell) {\n\t var matches = (cell.className || '').match(/el-table_[^\\s]+/gm);\n\t if (matches) {\n\t return getColumnById(table, matches[0]);\n\t }\n\t return null;\n\t};\n\n\tvar isFirefox = typeof navigator !== 'undefined' && navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\n\tvar mousewheel = exports.mousewheel = function mousewheel(element, callback) {\n\t if (element && element.addEventListener) {\n\t element.addEventListener(isFirefox ? 'DOMMouseScroll' : 'mousewheel', callback);\n\t }\n\t};\n\n\tvar getRowIdentity = exports.getRowIdentity = function getRowIdentity(row, rowKey) {\n\t if (!row) throw new Error('row is required when get row identity');\n\t if (typeof rowKey === 'string') {\n\t if (rowKey.indexOf('.') < 0) {\n\t return row[rowKey];\n\t }\n\t var key = rowKey.split('.');\n\t var current = row;\n\t for (var i = 0; i < key.length; i++) {\n\t current = current[key[i]];\n\t }\n\t return current;\n\t } else if (typeof rowKey === 'function') {\n\t return rowKey.call(null, row);\n\t }\n\t};\n\n/***/ },\n/* 135 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _scrollbarWidth = __webpack_require__(136);\n\n\tvar _scrollbarWidth2 = _interopRequireDefault(_scrollbarWidth);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\tvar TableLayout = function () {\n\t function TableLayout(options) {\n\t _classCallCheck(this, TableLayout);\n\n\t this.table = null;\n\t this.store = null;\n\t this.columns = null;\n\t this.fit = true;\n\t this.showHeader = true;\n\n\t this.height = null;\n\t this.scrollX = false;\n\t this.scrollY = false;\n\t this.bodyWidth = null;\n\t this.fixedWidth = null;\n\t this.rightFixedWidth = null;\n\t this.tableHeight = null;\n\t this.headerHeight = 44; // Table Header Height\n\t this.footerHeight = 44; // Table Footer Height\n\t this.viewportHeight = null; // Table Height - Scroll Bar Height\n\t this.bodyHeight = null; // Table Height - Table Header Height\n\t this.fixedBodyHeight = null; // Table Height - Table Header Height - Scroll Bar Height\n\t this.gutterWidth = (0, _scrollbarWidth2.default)();\n\n\t for (var name in options) {\n\t if (options.hasOwnProperty(name)) {\n\t this[name] = options[name];\n\t }\n\t }\n\n\t if (!this.table) {\n\t throw new Error('table is required for Table Layout');\n\t }\n\t if (!this.store) {\n\t throw new Error('store is required for Table Layout');\n\t }\n\t }\n\n\t TableLayout.prototype.updateScrollY = function updateScrollY() {\n\t var height = this.height;\n\t if (typeof height !== 'string' && typeof height !== 'number') return;\n\t var bodyWrapper = this.table.bodyWrapper;\n\t if (this.table.$el && bodyWrapper) {\n\t var body = bodyWrapper.querySelector('.el-table__body');\n\t this.scrollY = body.offsetHeight > bodyWrapper.offsetHeight;\n\t }\n\t };\n\n\t TableLayout.prototype.setHeight = function setHeight(value) {\n\t var prop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'height';\n\n\t var el = this.table.$el;\n\t if (typeof value === 'string' && /^\\d+$/.test(value)) {\n\t value = Number(value);\n\t }\n\n\t this.height = value;\n\n\t if (!el) return;\n\t if (typeof value === 'number') {\n\t el.style[prop] = value + 'px';\n\n\t this.updateHeight();\n\t } else if (typeof value === 'string') {\n\t if (value === '') {\n\t el.style[prop] = '';\n\t }\n\t this.updateHeight();\n\t }\n\t };\n\n\t TableLayout.prototype.setMaxHeight = function setMaxHeight(value) {\n\t return this.setHeight(value, 'max-height');\n\t };\n\n\t TableLayout.prototype.updateHeight = function updateHeight() {\n\t var height = this.tableHeight = this.table.$el.clientHeight;\n\t var noData = !this.table.data || this.table.data.length === 0;\n\t var _table$$refs = this.table.$refs,\n\t headerWrapper = _table$$refs.headerWrapper,\n\t footerWrapper = _table$$refs.footerWrapper;\n\n\t var footerHeight = this.footerHeight = footerWrapper ? footerWrapper.offsetHeight : 0;\n\t if (this.showHeader && !headerWrapper) return;\n\t if (!this.showHeader) {\n\t this.headerHeight = 0;\n\t if (this.height !== null && (!isNaN(this.height) || typeof this.height === 'string')) {\n\t this.bodyHeight = height - footerHeight + (footerWrapper ? 1 : 0);\n\t }\n\t this.fixedBodyHeight = this.scrollX ? height - this.gutterWidth : height;\n\t } else {\n\t var headerHeight = this.headerHeight = headerWrapper.offsetHeight;\n\t var bodyHeight = height - headerHeight - footerHeight + (footerWrapper ? 1 : 0);\n\t if (this.height !== null && (!isNaN(this.height) || typeof this.height === 'string')) {\n\t this.bodyHeight = bodyHeight;\n\t }\n\t this.fixedBodyHeight = this.scrollX ? bodyHeight - this.gutterWidth : bodyHeight;\n\t }\n\t this.viewportHeight = this.scrollX ? height - (noData ? 0 : this.gutterWidth) : height;\n\t };\n\n\t TableLayout.prototype.update = function update() {\n\t var fit = this.fit;\n\t var columns = this.table.columns;\n\t var bodyWidth = this.table.$el.clientWidth;\n\t var bodyMinWidth = 0;\n\n\t var flattenColumns = [];\n\t columns.forEach(function (column) {\n\t if (column.isColumnGroup) {\n\t flattenColumns.push.apply(flattenColumns, column.columns);\n\t } else {\n\t flattenColumns.push(column);\n\t }\n\t });\n\n\t var flexColumns = flattenColumns.filter(function (column) {\n\t return typeof column.width !== 'number';\n\t });\n\n\t if (flexColumns.length > 0 && fit) {\n\t flattenColumns.forEach(function (column) {\n\t bodyMinWidth += column.width || column.minWidth || 80;\n\t });\n\n\t if (bodyMinWidth < bodyWidth - this.gutterWidth) {\n\t // DON'T HAVE SCROLL BAR\n\t this.scrollX = false;\n\n\t var totalFlexWidth = bodyWidth - this.gutterWidth - bodyMinWidth;\n\n\t if (flexColumns.length === 1) {\n\t flexColumns[0].realWidth = (flexColumns[0].minWidth || 80) + totalFlexWidth;\n\t } else {\n\t (function () {\n\t var allColumnsWidth = flexColumns.reduce(function (prev, column) {\n\t return prev + (column.minWidth || 80);\n\t }, 0);\n\t var flexWidthPerPixel = totalFlexWidth / allColumnsWidth;\n\t var noneFirstWidth = 0;\n\n\t flexColumns.forEach(function (column, index) {\n\t if (index === 0) return;\n\t var flexWidth = Math.floor((column.minWidth || 80) * flexWidthPerPixel);\n\t noneFirstWidth += flexWidth;\n\t column.realWidth = (column.minWidth || 80) + flexWidth;\n\t });\n\n\t flexColumns[0].realWidth = (flexColumns[0].minWidth || 80) + totalFlexWidth - noneFirstWidth;\n\t })();\n\t }\n\t } else {\n\t // HAVE HORIZONTAL SCROLL BAR\n\t this.scrollX = true;\n\t flexColumns.forEach(function (column) {\n\t column.realWidth = column.minWidth;\n\t });\n\t }\n\n\t this.bodyWidth = Math.max(bodyMinWidth, bodyWidth);\n\t } else {\n\t flattenColumns.forEach(function (column) {\n\t if (!column.width && !column.minWidth) {\n\t column.realWidth = 80;\n\t } else {\n\t column.realWidth = column.width || column.minWidth;\n\t }\n\n\t bodyMinWidth += column.realWidth;\n\t });\n\t this.scrollX = bodyMinWidth > bodyWidth;\n\n\t this.bodyWidth = bodyMinWidth;\n\t }\n\n\t var fixedColumns = this.store.states.fixedColumns;\n\n\t if (fixedColumns.length > 0) {\n\t var fixedWidth = 0;\n\t fixedColumns.forEach(function (column) {\n\t fixedWidth += column.realWidth;\n\t });\n\n\t this.fixedWidth = fixedWidth;\n\t }\n\n\t var rightFixedColumns = this.store.states.rightFixedColumns;\n\t if (rightFixedColumns.length > 0) {\n\t var rightFixedWidth = 0;\n\t rightFixedColumns.forEach(function (column) {\n\t rightFixedWidth += column.realWidth;\n\t });\n\n\t this.rightFixedWidth = rightFixedWidth;\n\t }\n\t };\n\n\t return TableLayout;\n\t}();\n\n\texports.default = TableLayout;\n\n/***/ },\n/* 136 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(11);\n\n/***/ },\n/* 137 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _util = __webpack_require__(134);\n\n\tvar _dom = __webpack_require__(44);\n\n\tvar _checkbox = __webpack_require__(130);\n\n\tvar _checkbox2 = _interopRequireDefault(_checkbox);\n\n\tvar _tooltip = __webpack_require__(138);\n\n\tvar _tooltip2 = _interopRequireDefault(_tooltip);\n\n\tvar _debounce = __webpack_require__(69);\n\n\tvar _debounce2 = _interopRequireDefault(_debounce);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t components: {\n\t ElCheckbox: _checkbox2.default,\n\t ElTooltip: _tooltip2.default\n\t },\n\n\t props: {\n\t store: {\n\t required: true\n\t },\n\t stripe: Boolean,\n\t context: {},\n\t layout: {\n\t required: true\n\t },\n\t rowClassName: [String, Function],\n\t rowStyle: [Object, Function],\n\t fixed: String,\n\t highlight: Boolean\n\t },\n\n\t render: function render(h) {\n\t var _this = this;\n\n\t var columnsHidden = this.columns.map(function (column, index) {\n\t return _this.isColumnHidden(index);\n\t });\n\t return h(\n\t 'table',\n\t {\n\t 'class': 'el-table__body',\n\t attrs: { cellspacing: '0',\n\t cellpadding: '0',\n\t border: '0' }\n\t },\n\t [h(\n\t 'colgroup',\n\t null,\n\t [this._l(this.columns, function (column) {\n\t return h(\n\t 'col',\n\t {\n\t attrs: {\n\t name: column.id,\n\t width: column.realWidth || column.width\n\t }\n\t },\n\t []\n\t );\n\t })]\n\t ), h(\n\t 'tbody',\n\t null,\n\t [this._l(this.data, function (row, $index) {\n\t return [h(\n\t 'tr',\n\t {\n\t style: _this.rowStyle ? _this.getRowStyle(row, $index) : null,\n\t key: _this.table.rowKey ? _this.getKeyOfRow(row, $index) : $index,\n\t on: {\n\t 'dblclick': function dblclick($event) {\n\t return _this.handleDoubleClick($event, row);\n\t },\n\t 'click': function click($event) {\n\t return _this.handleClick($event, row);\n\t },\n\t 'contextmenu': function contextmenu($event) {\n\t return _this.handleContextMenu($event, row);\n\t },\n\t 'mouseenter': function mouseenter(_) {\n\t return _this.handleMouseEnter($index);\n\t },\n\t 'mouseleave': function mouseleave(_) {\n\t return _this.handleMouseLeave();\n\t }\n\t },\n\n\t 'class': [_this.getRowClass(row, $index)] },\n\t [_this._l(_this.columns, function (column, cellIndex) {\n\t return h(\n\t 'td',\n\t {\n\t 'class': [column.id, column.align, column.className || '', columnsHidden[cellIndex] ? 'is-hidden' : ''],\n\t on: {\n\t 'mouseenter': function mouseenter($event) {\n\t return _this.handleCellMouseEnter($event, row);\n\t },\n\t 'mouseleave': _this.handleCellMouseLeave\n\t }\n\t },\n\t [column.renderCell.call(_this._renderProxy, h, { row: row, column: column, $index: $index, store: _this.store, _self: _this.context || _this.table.$vnode.context }, columnsHidden[cellIndex])]\n\t );\n\t }), !_this.fixed && _this.layout.scrollY && _this.layout.gutterWidth ? h(\n\t 'td',\n\t { 'class': 'gutter' },\n\t []\n\t ) : '']\n\t ), _this.store.states.expandRows.indexOf(row) > -1 ? h(\n\t 'tr',\n\t null,\n\t [h(\n\t 'td',\n\t {\n\t attrs: { colspan: _this.columns.length },\n\t 'class': 'el-table__expanded-cell' },\n\t [_this.table.renderExpanded ? _this.table.renderExpanded(h, { row: row, $index: $index, store: _this.store }) : '']\n\t )]\n\t ) : ''];\n\t }).concat(this._self.$parent.$slots.append).concat(h(\n\t 'el-tooltip',\n\t {\n\t attrs: { effect: this.table.tooltipEffect, placement: 'top', content: this.tooltipContent },\n\t ref: 'tooltip' },\n\t []\n\t ))]\n\t )]\n\t );\n\t },\n\n\n\t watch: {\n\t 'store.states.hoverRow': function storeStatesHoverRow(newVal, oldVal) {\n\t if (!this.store.states.isComplex) return;\n\t var el = this.$el;\n\t if (!el) return;\n\t var rows = el.querySelectorAll('tbody > tr.el-table__row');\n\t var oldRow = rows[oldVal];\n\t var newRow = rows[newVal];\n\t if (oldRow) {\n\t (0, _dom.removeClass)(oldRow, 'hover-row');\n\t }\n\t if (newRow) {\n\t (0, _dom.addClass)(newRow, 'hover-row');\n\t }\n\t },\n\t 'store.states.currentRow': function storeStatesCurrentRow(newVal, oldVal) {\n\t if (!this.highlight) return;\n\t var el = this.$el;\n\t if (!el) return;\n\t var data = this.store.states.data;\n\t var rows = el.querySelectorAll('tbody > tr.el-table__row');\n\t var oldRow = rows[data.indexOf(oldVal)];\n\t var newRow = rows[data.indexOf(newVal)];\n\t if (oldRow) {\n\t (0, _dom.removeClass)(oldRow, 'current-row');\n\t } else if (rows) {\n\t [].forEach.call(rows, function (row) {\n\t return (0, _dom.removeClass)(row, 'current-row');\n\t });\n\t }\n\t if (newRow) {\n\t (0, _dom.addClass)(newRow, 'current-row');\n\t }\n\t }\n\t },\n\n\t computed: {\n\t table: function table() {\n\t return this.$parent;\n\t },\n\t data: function data() {\n\t return this.store.states.data;\n\t },\n\t columnsCount: function columnsCount() {\n\t return this.store.states.columns.length;\n\t },\n\t leftFixedCount: function leftFixedCount() {\n\t return this.store.states.fixedColumns.length;\n\t },\n\t rightFixedCount: function rightFixedCount() {\n\t return this.store.states.rightFixedColumns.length;\n\t },\n\t columns: function columns() {\n\t return this.store.states.columns;\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t tooltipContent: ''\n\t };\n\t },\n\t created: function created() {\n\t this.activateTooltip = (0, _debounce2.default)(50, function (tooltip) {\n\t return tooltip.handleShowPopper();\n\t });\n\t },\n\n\n\t methods: {\n\t getKeyOfRow: function getKeyOfRow(row, index) {\n\t var rowKey = this.table.rowKey;\n\t if (rowKey) {\n\t return (0, _util.getRowIdentity)(row, rowKey);\n\t }\n\t return index;\n\t },\n\t isColumnHidden: function isColumnHidden(index) {\n\t if (this.fixed === true || this.fixed === 'left') {\n\t return index >= this.leftFixedCount;\n\t } else if (this.fixed === 'right') {\n\t return index < this.columnsCount - this.rightFixedCount;\n\t } else {\n\t return index < this.leftFixedCount || index >= this.columnsCount - this.rightFixedCount;\n\t }\n\t },\n\t getRowStyle: function getRowStyle(row, index) {\n\t var rowStyle = this.rowStyle;\n\t if (typeof rowStyle === 'function') {\n\t return rowStyle.call(null, row, index);\n\t }\n\t return rowStyle;\n\t },\n\t getRowClass: function getRowClass(row, index) {\n\t var classes = ['el-table__row'];\n\n\t if (this.stripe && index % 2 === 1) {\n\t classes.push('el-table__row--striped');\n\t }\n\t var rowClassName = this.rowClassName;\n\t if (typeof rowClassName === 'string') {\n\t classes.push(rowClassName);\n\t } else if (typeof rowClassName === 'function') {\n\t classes.push(rowClassName.call(null, row, index) || '');\n\t }\n\n\t return classes.join(' ');\n\t },\n\t handleCellMouseEnter: function handleCellMouseEnter(event, row) {\n\t var table = this.table;\n\t var cell = (0, _util.getCell)(event);\n\n\t if (cell) {\n\t var column = (0, _util.getColumnByCell)(table, cell);\n\t var hoverState = table.hoverState = { cell: cell, column: column, row: row };\n\t table.$emit('cell-mouse-enter', hoverState.row, hoverState.column, hoverState.cell, event);\n\t }\n\n\t // 判断是否text-overflow, 如果是就显示tooltip\n\t var cellChild = event.target.querySelector('.cell');\n\n\t if ((0, _dom.hasClass)(cellChild, 'el-tooltip') && cellChild.scrollWidth > cellChild.offsetWidth) {\n\t var tooltip = this.$refs.tooltip;\n\n\t this.tooltipContent = cell.innerText;\n\t tooltip.referenceElm = cell;\n\t tooltip.$refs.popper && (tooltip.$refs.popper.style.display = 'none');\n\t tooltip.doDestroy();\n\t tooltip.setExpectedState(true);\n\t this.activateTooltip(tooltip);\n\t }\n\t },\n\t handleCellMouseLeave: function handleCellMouseLeave(event) {\n\t var tooltip = this.$refs.tooltip;\n\t if (tooltip) {\n\t tooltip.setExpectedState(false);\n\t tooltip.handleClosePopper();\n\t }\n\t var cell = (0, _util.getCell)(event);\n\t if (!cell) return;\n\n\t var oldHoverState = this.table.hoverState;\n\t this.table.$emit('cell-mouse-leave', oldHoverState.row, oldHoverState.column, oldHoverState.cell, event);\n\t },\n\t handleMouseEnter: function handleMouseEnter(index) {\n\t this.store.commit('setHoverRow', index);\n\t },\n\t handleMouseLeave: function handleMouseLeave() {\n\t this.store.commit('setHoverRow', null);\n\t },\n\t handleContextMenu: function handleContextMenu(event, row) {\n\t this.handleEvent(event, row, 'contextmenu');\n\t },\n\t handleDoubleClick: function handleDoubleClick(event, row) {\n\t this.handleEvent(event, row, 'dblclick');\n\t },\n\t handleClick: function handleClick(event, row) {\n\t this.store.commit('setCurrentRow', row);\n\t this.handleEvent(event, row, 'click');\n\t },\n\t handleEvent: function handleEvent(event, row, name) {\n\t var table = this.table;\n\t var cell = (0, _util.getCell)(event);\n\t var column = void 0;\n\t if (cell) {\n\t column = (0, _util.getColumnByCell)(table, cell);\n\t if (column) {\n\t table.$emit('cell-' + name, row, column, cell, event);\n\t }\n\t }\n\t table.$emit('row-' + name, row, event, column);\n\t },\n\t handleExpandClick: function handleExpandClick(row) {\n\t this.store.commit('toggleRowExpanded', row);\n\t }\n\t }\n\t};\n\n/***/ },\n/* 138 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(41);\n\n/***/ },\n/* 139 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _dom = __webpack_require__(44);\n\n\tvar _checkbox = __webpack_require__(130);\n\n\tvar _checkbox2 = _interopRequireDefault(_checkbox);\n\n\tvar _tag = __webpack_require__(109);\n\n\tvar _tag2 = _interopRequireDefault(_tag);\n\n\tvar _vue = __webpack_require__(133);\n\n\tvar _vue2 = _interopRequireDefault(_vue);\n\n\tvar _filterPanel = __webpack_require__(140);\n\n\tvar _filterPanel2 = _interopRequireDefault(_filterPanel);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar getAllColumns = function getAllColumns(columns) {\n\t var result = [];\n\t columns.forEach(function (column) {\n\t if (column.children) {\n\t result.push(column);\n\t result.push.apply(result, getAllColumns(column.children));\n\t } else {\n\t result.push(column);\n\t }\n\t });\n\t return result;\n\t};\n\n\tvar convertToRows = function convertToRows(originColumns) {\n\t var maxLevel = 1;\n\t var traverse = function traverse(column, parent) {\n\t if (parent) {\n\t column.level = parent.level + 1;\n\t if (maxLevel < column.level) {\n\t maxLevel = column.level;\n\t }\n\t }\n\t if (column.children) {\n\t var colSpan = 0;\n\t column.children.forEach(function (subColumn) {\n\t traverse(subColumn, column);\n\t colSpan += subColumn.colSpan;\n\t });\n\t column.colSpan = colSpan;\n\t } else {\n\t column.colSpan = 1;\n\t }\n\t };\n\n\t originColumns.forEach(function (column) {\n\t column.level = 1;\n\t traverse(column);\n\t });\n\n\t var rows = [];\n\t for (var i = 0; i < maxLevel; i++) {\n\t rows.push([]);\n\t }\n\n\t var allColumns = getAllColumns(originColumns);\n\n\t allColumns.forEach(function (column) {\n\t if (!column.children) {\n\t column.rowSpan = maxLevel - column.level + 1;\n\t } else {\n\t column.rowSpan = 1;\n\t }\n\t rows[column.level - 1].push(column);\n\t });\n\n\t return rows;\n\t};\n\n\texports.default = {\n\t name: 'ElTableHeader',\n\n\t render: function render(h) {\n\t var _this = this;\n\n\t var originColumns = this.store.states.originColumns;\n\t var columnRows = convertToRows(originColumns, this.columns);\n\n\t return h(\n\t 'table',\n\t {\n\t 'class': 'el-table__header',\n\t attrs: { cellspacing: '0',\n\t cellpadding: '0',\n\t border: '0' }\n\t },\n\t [h(\n\t 'colgroup',\n\t null,\n\t [this._l(this.columns, function (column) {\n\t return h(\n\t 'col',\n\t {\n\t attrs: {\n\t name: column.id,\n\t width: column.realWidth || column.width\n\t }\n\t },\n\t []\n\t );\n\t }), !this.fixed && this.layout.gutterWidth ? h(\n\t 'col',\n\t {\n\t attrs: { name: 'gutter', width: this.layout.scrollY ? this.layout.gutterWidth : '' }\n\t },\n\t []\n\t ) : '']\n\t ), h(\n\t 'thead',\n\t null,\n\t [this._l(columnRows, function (columns, rowIndex) {\n\t return h(\n\t 'tr',\n\t null,\n\t [_this._l(columns, function (column, cellIndex) {\n\t return h(\n\t 'th',\n\t {\n\t attrs: {\n\t colspan: column.colSpan,\n\t rowspan: column.rowSpan\n\t },\n\t on: {\n\t 'mousemove': function mousemove($event) {\n\t return _this.handleMouseMove($event, column);\n\t },\n\t 'mouseout': _this.handleMouseOut,\n\t 'mousedown': function mousedown($event) {\n\t return _this.handleMouseDown($event, column);\n\t },\n\t 'click': function click($event) {\n\t return _this.handleHeaderClick($event, column);\n\t }\n\t },\n\n\t 'class': [column.id, column.order, column.headerAlign, column.className || '', rowIndex === 0 && _this.isCellHidden(cellIndex, columns) ? 'is-hidden' : '', !column.children ? 'is-leaf' : '', column.labelClassName, column.sortable ? 'is-sortable' : ''] },\n\t [h(\n\t 'div',\n\t { 'class': ['cell', column.filteredValue && column.filteredValue.length > 0 ? 'highlight' : '', column.labelClassName] },\n\t [column.renderHeader ? column.renderHeader.call(_this._renderProxy, h, { column: column, $index: cellIndex, store: _this.store, _self: _this.$parent.$vnode.context }) : column.label, column.sortable ? h(\n\t 'span',\n\t { 'class': 'caret-wrapper', on: {\n\t 'click': function click($event) {\n\t return _this.handleSortClick($event, column);\n\t }\n\t }\n\t },\n\t [h(\n\t 'i',\n\t { 'class': 'sort-caret ascending', on: {\n\t 'click': function click($event) {\n\t return _this.handleSortClick($event, column, 'ascending');\n\t }\n\t }\n\t },\n\t []\n\t ), h(\n\t 'i',\n\t { 'class': 'sort-caret descending', on: {\n\t 'click': function click($event) {\n\t return _this.handleSortClick($event, column, 'descending');\n\t }\n\t }\n\t },\n\t []\n\t )]\n\t ) : '', column.filterable ? h(\n\t 'span',\n\t { 'class': 'el-table__column-filter-trigger', on: {\n\t 'click': function click($event) {\n\t return _this.handleFilterClick($event, column);\n\t }\n\t }\n\t },\n\t [h(\n\t 'i',\n\t { 'class': ['el-icon-arrow-down', column.filterOpened ? 'el-icon-arrow-up' : ''] },\n\t []\n\t )]\n\t ) : '']\n\t )]\n\t );\n\t }), !_this.fixed && _this.layout.gutterWidth ? h(\n\t 'th',\n\t { 'class': 'gutter', style: { width: _this.layout.scrollY ? _this.layout.gutterWidth + 'px' : '0' } },\n\t []\n\t ) : '']\n\t );\n\t })]\n\t )]\n\t );\n\t },\n\n\n\t props: {\n\t fixed: String,\n\t store: {\n\t required: true\n\t },\n\t layout: {\n\t required: true\n\t },\n\t border: Boolean,\n\t defaultSort: {\n\t type: Object,\n\t default: function _default() {\n\t return {\n\t prop: '',\n\t order: ''\n\t };\n\t }\n\t }\n\t },\n\n\t components: {\n\t ElCheckbox: _checkbox2.default,\n\t ElTag: _tag2.default\n\t },\n\n\t computed: {\n\t isAllSelected: function isAllSelected() {\n\t return this.store.states.isAllSelected;\n\t },\n\t columnsCount: function columnsCount() {\n\t return this.store.states.columns.length;\n\t },\n\t leftFixedCount: function leftFixedCount() {\n\t return this.store.states.fixedColumns.length;\n\t },\n\t rightFixedCount: function rightFixedCount() {\n\t return this.store.states.rightFixedColumns.length;\n\t },\n\t columns: function columns() {\n\t return this.store.states.columns;\n\t }\n\t },\n\n\t created: function created() {\n\t this.filterPanels = {};\n\t },\n\t mounted: function mounted() {\n\t var _this2 = this;\n\n\t if (this.defaultSort.prop) {\n\t (function () {\n\t var states = _this2.store.states;\n\t states.sortProp = _this2.defaultSort.prop;\n\t states.sortOrder = _this2.defaultSort.order || 'ascending';\n\t _this2.$nextTick(function (_) {\n\t for (var i = 0, length = _this2.columns.length; i < length; i++) {\n\t var column = _this2.columns[i];\n\t if (column.property === states.sortProp) {\n\t column.order = states.sortOrder;\n\t states.sortingColumn = column;\n\t break;\n\t }\n\t }\n\n\t if (states.sortingColumn) {\n\t _this2.store.commit('changeSortCondition');\n\t }\n\t });\n\t })();\n\t }\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t var panels = this.filterPanels;\n\t for (var prop in panels) {\n\t if (panels.hasOwnProperty(prop) && panels[prop]) {\n\t panels[prop].$destroy(true);\n\t }\n\t }\n\t },\n\n\n\t methods: {\n\t isCellHidden: function isCellHidden(index, columns) {\n\t if (this.fixed === true || this.fixed === 'left') {\n\t return index >= this.leftFixedCount;\n\t } else if (this.fixed === 'right') {\n\t var before = 0;\n\t for (var i = 0; i < index; i++) {\n\t before += columns[i].colSpan;\n\t }\n\t return before < this.columnsCount - this.rightFixedCount;\n\t } else {\n\t return index < this.leftFixedCount || index >= this.columnsCount - this.rightFixedCount;\n\t }\n\t },\n\t toggleAllSelection: function toggleAllSelection() {\n\t this.store.commit('toggleAllSelection');\n\t },\n\t handleFilterClick: function handleFilterClick(event, column) {\n\t event.stopPropagation();\n\t var target = event.target;\n\t var cell = target.parentNode;\n\t var table = this.$parent;\n\n\t var filterPanel = this.filterPanels[column.id];\n\n\t if (filterPanel && column.filterOpened) {\n\t filterPanel.showPopper = false;\n\t return;\n\t }\n\n\t if (!filterPanel) {\n\t filterPanel = new _vue2.default(_filterPanel2.default);\n\t this.filterPanels[column.id] = filterPanel;\n\t if (column.filterPlacement) {\n\t filterPanel.placement = column.filterPlacement;\n\t }\n\t filterPanel.table = table;\n\t filterPanel.cell = cell;\n\t filterPanel.column = column;\n\t !this.$isServer && filterPanel.$mount(document.createElement('div'));\n\t }\n\n\t setTimeout(function () {\n\t filterPanel.showPopper = true;\n\t }, 16);\n\t },\n\t handleHeaderClick: function handleHeaderClick(event, column) {\n\t if (!column.filters && column.sortable) {\n\t this.handleSortClick(event, column);\n\t } else if (column.filters && !column.sortable) {\n\t this.handleFilterClick(event, column);\n\t }\n\n\t this.$parent.$emit('header-click', column, event);\n\t },\n\t handleMouseDown: function handleMouseDown(event, column) {\n\t var _this3 = this;\n\n\t if (this.$isServer) return;\n\t if (column.children && column.children.length > 0) return;\n\t /* istanbul ignore if */\n\t if (this.draggingColumn && this.border) {\n\t (function () {\n\t _this3.dragging = true;\n\n\t _this3.$parent.resizeProxyVisible = true;\n\n\t var table = _this3.$parent;\n\t var tableEl = table.$el;\n\t var tableLeft = tableEl.getBoundingClientRect().left;\n\t var columnEl = _this3.$el.querySelector('th.' + column.id);\n\t var columnRect = columnEl.getBoundingClientRect();\n\t var minLeft = columnRect.left - tableLeft + 30;\n\n\t (0, _dom.addClass)(columnEl, 'noclick');\n\n\t _this3.dragState = {\n\t startMouseLeft: event.clientX,\n\t startLeft: columnRect.right - tableLeft,\n\t startColumnLeft: columnRect.left - tableLeft,\n\t tableLeft: tableLeft\n\t };\n\n\t var resizeProxy = table.$refs.resizeProxy;\n\t resizeProxy.style.left = _this3.dragState.startLeft + 'px';\n\n\t document.onselectstart = function () {\n\t return false;\n\t };\n\t document.ondragstart = function () {\n\t return false;\n\t };\n\n\t var handleMouseMove = function handleMouseMove(event) {\n\t var deltaLeft = event.clientX - _this3.dragState.startMouseLeft;\n\t var proxyLeft = _this3.dragState.startLeft + deltaLeft;\n\n\t resizeProxy.style.left = Math.max(minLeft, proxyLeft) + 'px';\n\t };\n\n\t var handleMouseUp = function handleMouseUp() {\n\t if (_this3.dragging) {\n\t var _dragState = _this3.dragState,\n\t startColumnLeft = _dragState.startColumnLeft,\n\t startLeft = _dragState.startLeft;\n\n\t var finalLeft = parseInt(resizeProxy.style.left, 10);\n\t var columnWidth = finalLeft - startColumnLeft;\n\t column.width = column.realWidth = columnWidth;\n\t table.$emit('header-dragend', column.width, startLeft - startColumnLeft, column, event);\n\n\t _this3.store.scheduleLayout();\n\n\t document.body.style.cursor = '';\n\t _this3.dragging = false;\n\t _this3.draggingColumn = null;\n\t _this3.dragState = {};\n\n\t table.resizeProxyVisible = false;\n\t }\n\n\t document.removeEventListener('mousemove', handleMouseMove);\n\t document.removeEventListener('mouseup', handleMouseUp);\n\t document.onselectstart = null;\n\t document.ondragstart = null;\n\n\t setTimeout(function () {\n\t (0, _dom.removeClass)(columnEl, 'noclick');\n\t }, 0);\n\t };\n\n\t document.addEventListener('mousemove', handleMouseMove);\n\t document.addEventListener('mouseup', handleMouseUp);\n\t })();\n\t }\n\t },\n\t handleMouseMove: function handleMouseMove(event, column) {\n\t if (column.children && column.children.length > 0) return;\n\t var target = event.target;\n\t while (target && target.tagName !== 'TH') {\n\t target = target.parentNode;\n\t }\n\n\t if (!column || !column.resizable) return;\n\n\t if (!this.dragging && this.border) {\n\t var rect = target.getBoundingClientRect();\n\n\t var bodyStyle = document.body.style;\n\t if (rect.width > 12 && rect.right - event.pageX < 8) {\n\t bodyStyle.cursor = 'col-resize';\n\t this.draggingColumn = column;\n\t } else if (!this.dragging) {\n\t bodyStyle.cursor = '';\n\t this.draggingColumn = null;\n\t }\n\t }\n\t },\n\t handleMouseOut: function handleMouseOut() {\n\t if (this.$isServer) return;\n\t document.body.style.cursor = '';\n\t },\n\t toggleOrder: function toggleOrder(order) {\n\t return !order ? 'ascending' : order === 'ascending' ? 'descending' : null;\n\t },\n\t handleSortClick: function handleSortClick(event, column, givenOrder) {\n\t event.stopPropagation();\n\t var order = givenOrder || this.toggleOrder(column.order);\n\n\t var target = event.target;\n\t while (target && target.tagName !== 'TH') {\n\t target = target.parentNode;\n\t }\n\n\t if (target && target.tagName === 'TH') {\n\t if ((0, _dom.hasClass)(target, 'noclick')) {\n\t (0, _dom.removeClass)(target, 'noclick');\n\t return;\n\t }\n\t }\n\n\t if (!column.sortable) return;\n\n\t var states = this.store.states;\n\t var sortProp = states.sortProp;\n\t var sortOrder = void 0;\n\t var sortingColumn = states.sortingColumn;\n\n\t if (sortingColumn !== column) {\n\t if (sortingColumn) {\n\t sortingColumn.order = null;\n\t }\n\t states.sortingColumn = column;\n\t sortProp = column.property;\n\t }\n\n\t if (!order) {\n\t sortOrder = column.order = null;\n\t states.sortingColumn = null;\n\t sortProp = null;\n\t } else {\n\t sortOrder = column.order = order;\n\t }\n\n\t states.sortProp = sortProp;\n\t states.sortOrder = sortOrder;\n\n\t this.store.commit('changeSortCondition');\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t draggingColumn: null,\n\t dragging: false,\n\t dragState: {}\n\t };\n\t }\n\t};\n\n/***/ },\n/* 140 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(141),\n\t /* template */\n\t __webpack_require__(144),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 141 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vuePopper = __webpack_require__(24);\n\n\tvar _vuePopper2 = _interopRequireDefault(_vuePopper);\n\n\tvar _popup = __webpack_require__(14);\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tvar _clickoutside = __webpack_require__(21);\n\n\tvar _clickoutside2 = _interopRequireDefault(_clickoutside);\n\n\tvar _dropdown = __webpack_require__(142);\n\n\tvar _dropdown2 = _interopRequireDefault(_dropdown);\n\n\tvar _checkbox = __webpack_require__(130);\n\n\tvar _checkbox2 = _interopRequireDefault(_checkbox);\n\n\tvar _checkboxGroup = __webpack_require__(143);\n\n\tvar _checkboxGroup2 = _interopRequireDefault(_checkboxGroup);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElTableFilterPanel',\n\n\t mixins: [_vuePopper2.default, _locale2.default],\n\n\t directives: {\n\t Clickoutside: _clickoutside2.default\n\t },\n\n\t components: {\n\t ElCheckbox: _checkbox2.default,\n\t ElCheckboxGroup: _checkboxGroup2.default\n\t },\n\n\t props: {\n\t placement: {\n\t type: String,\n\t default: 'bottom-end'\n\t }\n\t },\n\n\t customRender: function customRender(h) {\n\t return h(\n\t 'div',\n\t { 'class': 'el-table-filter' },\n\t [h(\n\t 'div',\n\t { 'class': 'el-table-filter__content' },\n\t []\n\t ), h(\n\t 'div',\n\t { 'class': 'el-table-filter__bottom' },\n\t [h(\n\t 'button',\n\t {\n\t on: {\n\t 'click': this.handleConfirm\n\t }\n\t },\n\t [this.t('el.table.confirmFilter')]\n\t ), h(\n\t 'button',\n\t {\n\t on: {\n\t 'click': this.handleReset\n\t }\n\t },\n\t [this.t('el.table.resetFilter')]\n\t )]\n\t )]\n\t );\n\t },\n\n\n\t methods: {\n\t isActive: function isActive(filter) {\n\t return filter.value === this.filterValue;\n\t },\n\t handleOutsideClick: function handleOutsideClick() {\n\t this.showPopper = false;\n\t },\n\t handleConfirm: function handleConfirm() {\n\t this.confirmFilter(this.filteredValue);\n\t this.handleOutsideClick();\n\t },\n\t handleReset: function handleReset() {\n\t this.filteredValue = [];\n\t this.confirmFilter(this.filteredValue);\n\t this.handleOutsideClick();\n\t },\n\t handleSelect: function handleSelect(filterValue) {\n\t this.filterValue = filterValue;\n\n\t if (typeof filterValue !== 'undefined' && filterValue !== null) {\n\t this.confirmFilter(this.filteredValue);\n\t } else {\n\t this.confirmFilter([]);\n\t }\n\n\t this.handleOutsideClick();\n\t },\n\t confirmFilter: function confirmFilter(filteredValue) {\n\t this.table.store.commit('filterChange', {\n\t column: this.column,\n\t values: filteredValue\n\t });\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t table: null,\n\t cell: null,\n\t column: null\n\t };\n\t },\n\n\n\t computed: {\n\t filters: function filters() {\n\t return this.column && this.column.filters;\n\t },\n\n\n\t filterValue: {\n\t get: function get() {\n\t return (this.column.filteredValue || [])[0];\n\t },\n\t set: function set(value) {\n\t if (this.filteredValue) {\n\t if (typeof value !== 'undefined' && value !== null) {\n\t this.filteredValue.splice(0, 1, value);\n\t } else {\n\t this.filteredValue.splice(0, 1);\n\t }\n\t }\n\t }\n\t },\n\n\t filteredValue: {\n\t get: function get() {\n\t if (this.column) {\n\t return this.column.filteredValue || [];\n\t }\n\t return [];\n\t },\n\t set: function set(value) {\n\t if (this.column) {\n\t this.column.filteredValue = value;\n\t }\n\t }\n\t },\n\n\t multiple: function multiple() {\n\t if (this.column) {\n\t return this.column.filterMultiple;\n\t }\n\t return true;\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t var _this = this;\n\n\t this.popperElm = this.$el;\n\t this.referenceElm = this.cell;\n\t this.table.bodyWrapper.addEventListener('scroll', function () {\n\t _this.updatePopper();\n\t });\n\n\t this.$watch('showPopper', function (value) {\n\t if (_this.column) _this.column.filterOpened = value;\n\t if (value) {\n\t _dropdown2.default.open(_this);\n\t } else {\n\t _dropdown2.default.close(_this);\n\t }\n\t });\n\t },\n\n\t watch: {\n\t showPopper: function showPopper(val) {\n\t if (val === true && parseInt(this.popperJS._popper.style.zIndex, 10) < _popup.PopupManager.zIndex) {\n\t this.popperJS._popper.style.zIndex = _popup.PopupManager.nextZIndex();\n\t }\n\t }\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 142 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vue = __webpack_require__(133);\n\n\tvar _vue2 = _interopRequireDefault(_vue);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar dropdowns = [];\n\n\t!_vue2.default.prototype.$isServer && document.addEventListener('click', function (event) {\n\t dropdowns.forEach(function (dropdown) {\n\t var target = event.target;\n\t if (!dropdown || !dropdown.$el) return;\n\t if (target === dropdown.$el || dropdown.$el.contains(target)) {\n\t return;\n\t }\n\t dropdown.handleOutsideClick && dropdown.handleOutsideClick(event);\n\t });\n\t});\n\n\texports.default = {\n\t open: function open(instance) {\n\t if (instance) {\n\t dropdowns.push(instance);\n\t }\n\t },\n\t close: function close(instance) {\n\t var index = dropdowns.indexOf(instance);\n\t if (index !== -1) {\n\t dropdowns.splice(instance, 1);\n\t }\n\t }\n\t};\n\n/***/ },\n/* 143 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(42);\n\n/***/ },\n/* 144 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"el-zoom-in-top\"\n\t }\n\t }, [(_vm.multiple) ? _c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.showPopper),\n\t expression: \"showPopper\"\n\t }],\n\t staticClass: \"el-table-filter\"\n\t }, [_c('div', {\n\t staticClass: \"el-table-filter__content\"\n\t }, [_c('el-checkbox-group', {\n\t staticClass: \"el-table-filter__checkbox-group\",\n\t model: {\n\t value: (_vm.filteredValue),\n\t callback: function($$v) {\n\t _vm.filteredValue = $$v\n\t },\n\t expression: \"filteredValue\"\n\t }\n\t }, _vm._l((_vm.filters), function(filter) {\n\t return _c('el-checkbox', {\n\t key: filter.value,\n\t attrs: {\n\t \"label\": filter.value\n\t }\n\t }, [_vm._v(_vm._s(filter.text))])\n\t }))], 1), _c('div', {\n\t staticClass: \"el-table-filter__bottom\"\n\t }, [_c('button', {\n\t class: {\n\t 'is-disabled': _vm.filteredValue.length === 0\n\t },\n\t attrs: {\n\t \"disabled\": _vm.filteredValue.length === 0\n\t },\n\t on: {\n\t \"click\": _vm.handleConfirm\n\t }\n\t }, [_vm._v(_vm._s(_vm.t('el.table.confirmFilter')))]), _c('button', {\n\t on: {\n\t \"click\": _vm.handleReset\n\t }\n\t }, [_vm._v(_vm._s(_vm.t('el.table.resetFilter')))])])]) : _c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.showPopper),\n\t expression: \"showPopper\"\n\t }],\n\t staticClass: \"el-table-filter\"\n\t }, [_c('ul', {\n\t staticClass: \"el-table-filter__list\"\n\t }, [_c('li', {\n\t staticClass: \"el-table-filter__list-item\",\n\t class: {\n\t 'is-active': _vm.filterValue === undefined || _vm.filterValue === null\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handleSelect(null)\n\t }\n\t }\n\t }, [_vm._v(_vm._s(_vm.t('el.table.clearFilter')))]), _vm._l((_vm.filters), function(filter) {\n\t return _c('li', {\n\t key: filter.value,\n\t staticClass: \"el-table-filter__list-item\",\n\t class: {\n\t 'is-active': _vm.isActive(filter)\n\t },\n\t attrs: {\n\t \"label\": filter.value\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handleSelect(filter.value)\n\t }\n\t }\n\t }, [_vm._v(_vm._s(filter.text))])\n\t })], 2)])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 145 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\texports.default = {\n\t name: 'ElTableFooter',\n\n\t render: function render(h) {\n\t var _this = this;\n\n\t var sums = [];\n\t this.columns.forEach(function (column, index) {\n\t if (index === 0) {\n\t sums[index] = _this.sumText;\n\t return;\n\t }\n\t var values = _this.store.states.data.map(function (item) {\n\t return Number(item[column.property]);\n\t });\n\t var precisions = [];\n\t var notNumber = true;\n\t values.forEach(function (value) {\n\t if (!isNaN(value)) {\n\t notNumber = false;\n\t var decimal = ('' + value).split('.')[1];\n\t precisions.push(decimal ? decimal.length : 0);\n\t }\n\t });\n\t var precision = Math.max.apply(null, precisions);\n\t if (!notNumber) {\n\t sums[index] = values.reduce(function (prev, curr) {\n\t var value = Number(curr);\n\t if (!isNaN(value)) {\n\t return parseFloat((prev + curr).toFixed(Math.min(precision, 20)));\n\t } else {\n\t return prev;\n\t }\n\t }, 0);\n\t } else {\n\t sums[index] = '';\n\t }\n\t });\n\n\t return h(\n\t 'table',\n\t {\n\t 'class': 'el-table__footer',\n\t attrs: { cellspacing: '0',\n\t cellpadding: '0',\n\t border: '0' }\n\t },\n\t [h(\n\t 'colgroup',\n\t null,\n\t [this._l(this.columns, function (column) {\n\t return h(\n\t 'col',\n\t {\n\t attrs: {\n\t name: column.id,\n\t width: column.realWidth || column.width\n\t }\n\t },\n\t []\n\t );\n\t }), !this.fixed && this.layout.gutterWidth ? h(\n\t 'col',\n\t {\n\t attrs: { name: 'gutter', width: this.layout.scrollY ? this.layout.gutterWidth : '' }\n\t },\n\t []\n\t ) : '']\n\t ), h(\n\t 'tbody',\n\t null,\n\t [h(\n\t 'tr',\n\t null,\n\t [this._l(this.columns, function (column, cellIndex) {\n\t return h(\n\t 'td',\n\t {\n\t attrs: {\n\t colspan: column.colSpan,\n\t rowspan: column.rowSpan\n\t },\n\t 'class': [column.id, column.headerAlign, column.className || '', _this.isCellHidden(cellIndex, _this.columns) ? 'is-hidden' : '', !column.children ? 'is-leaf' : '', column.labelClassName] },\n\t [h(\n\t 'div',\n\t { 'class': ['cell', column.labelClassName] },\n\t [_this.summaryMethod ? _this.summaryMethod({ columns: _this.columns, data: _this.store.states.data })[cellIndex] : sums[cellIndex]]\n\t )]\n\t );\n\t }), !this.fixed && this.layout.gutterWidth ? h(\n\t 'td',\n\t { 'class': 'gutter', style: { width: this.layout.scrollY ? this.layout.gutterWidth + 'px' : '0' } },\n\t []\n\t ) : '']\n\t )]\n\t )]\n\t );\n\t },\n\n\n\t props: {\n\t fixed: String,\n\t store: {\n\t required: true\n\t },\n\t layout: {\n\t required: true\n\t },\n\t summaryMethod: Function,\n\t sumText: String,\n\t border: Boolean,\n\t defaultSort: {\n\t type: Object,\n\t default: function _default() {\n\t return {\n\t prop: '',\n\t order: ''\n\t };\n\t }\n\t }\n\t },\n\n\t computed: {\n\t isAllSelected: function isAllSelected() {\n\t return this.store.states.isAllSelected;\n\t },\n\t columnsCount: function columnsCount() {\n\t return this.store.states.columns.length;\n\t },\n\t leftFixedCount: function leftFixedCount() {\n\t return this.store.states.fixedColumns.length;\n\t },\n\t rightFixedCount: function rightFixedCount() {\n\t return this.store.states.rightFixedColumns.length;\n\t },\n\t columns: function columns() {\n\t return this.store.states.columns;\n\t }\n\t },\n\n\t methods: {\n\t isCellHidden: function isCellHidden(index, columns) {\n\t if (this.fixed === true || this.fixed === 'left') {\n\t return index >= this.leftFixedCount;\n\t } else if (this.fixed === 'right') {\n\t var before = 0;\n\t for (var i = 0; i < index; i++) {\n\t before += columns[i].colSpan;\n\t }\n\t return before < this.columnsCount - this.rightFixedCount;\n\t } else {\n\t return index < this.leftFixedCount || index >= this.columnsCount - this.rightFixedCount;\n\t }\n\t }\n\t }\n\t};\n\n/***/ },\n/* 146 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-table\",\n\t class: {\n\t 'el-table--fit': _vm.fit,\n\t 'el-table--striped': _vm.stripe,\n\t 'el-table--border': _vm.border,\n\t 'el-table--hidden': _vm.isHidden,\n\t 'el-table--fluid-height': _vm.maxHeight,\n\t 'el-table--enable-row-hover': !_vm.store.states.isComplex,\n\t 'el-table--enable-row-transition': (_vm.store.states.data || []).length !== 0 && (_vm.store.states.data || []).length < 100\n\t },\n\t on: {\n\t \"mouseleave\": function($event) {\n\t _vm.handleMouseLeave($event)\n\t }\n\t }\n\t }, [_c('div', {\n\t ref: \"hiddenColumns\",\n\t staticClass: \"hidden-columns\"\n\t }, [_vm._t(\"default\")], 2), (_vm.showHeader) ? _c('div', {\n\t ref: \"headerWrapper\",\n\t staticClass: \"el-table__header-wrapper\"\n\t }, [_c('table-header', {\n\t style: ({\n\t width: _vm.layout.bodyWidth ? _vm.layout.bodyWidth + 'px' : ''\n\t }),\n\t attrs: {\n\t \"store\": _vm.store,\n\t \"layout\": _vm.layout,\n\t \"border\": _vm.border,\n\t \"default-sort\": _vm.defaultSort\n\t }\n\t })], 1) : _vm._e(), _c('div', {\n\t ref: \"bodyWrapper\",\n\t staticClass: \"el-table__body-wrapper\",\n\t style: ([_vm.bodyHeight])\n\t }, [_c('table-body', {\n\t style: ({\n\t width: _vm.bodyWidth\n\t }),\n\t attrs: {\n\t \"context\": _vm.context,\n\t \"store\": _vm.store,\n\t \"stripe\": _vm.stripe,\n\t \"layout\": _vm.layout,\n\t \"row-class-name\": _vm.rowClassName,\n\t \"row-style\": _vm.rowStyle,\n\t \"highlight\": _vm.highlightCurrentRow\n\t }\n\t }), (!_vm.data || _vm.data.length === 0) ? _c('div', {\n\t staticClass: \"el-table__empty-block\",\n\t style: ({\n\t width: _vm.bodyWidth\n\t })\n\t }, [_c('span', {\n\t staticClass: \"el-table__empty-text\"\n\t }, [_vm._t(\"empty\", [_vm._v(_vm._s(_vm.emptyText || _vm.t('el.table.emptyText')))])], 2)]) : _vm._e()], 1), (_vm.showSummary) ? _c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.data && _vm.data.length > 0),\n\t expression: \"data && data.length > 0\"\n\t }],\n\t ref: \"footerWrapper\",\n\t staticClass: \"el-table__footer-wrapper\"\n\t }, [_c('table-footer', {\n\t style: ({\n\t width: _vm.layout.bodyWidth ? _vm.layout.bodyWidth + 'px' : ''\n\t }),\n\t attrs: {\n\t \"store\": _vm.store,\n\t \"layout\": _vm.layout,\n\t \"border\": _vm.border,\n\t \"sum-text\": _vm.sumText || _vm.t('el.table.sumText'),\n\t \"summary-method\": _vm.summaryMethod,\n\t \"default-sort\": _vm.defaultSort\n\t }\n\t })], 1) : _vm._e(), (_vm.fixedColumns.length > 0) ? _c('div', {\n\t ref: \"fixedWrapper\",\n\t staticClass: \"el-table__fixed\",\n\t style: ([{\n\t width: _vm.layout.fixedWidth ? _vm.layout.fixedWidth + 'px' : ''\n\t },\n\t _vm.fixedHeight\n\t ])\n\t }, [(_vm.showHeader) ? _c('div', {\n\t ref: \"fixedHeaderWrapper\",\n\t staticClass: \"el-table__fixed-header-wrapper\"\n\t }, [_c('table-header', {\n\t style: ({\n\t width: _vm.layout.fixedWidth ? _vm.layout.fixedWidth + 'px' : ''\n\t }),\n\t attrs: {\n\t \"fixed\": \"left\",\n\t \"border\": _vm.border,\n\t \"store\": _vm.store,\n\t \"layout\": _vm.layout\n\t }\n\t })], 1) : _vm._e(), _c('div', {\n\t ref: \"fixedBodyWrapper\",\n\t staticClass: \"el-table__fixed-body-wrapper\",\n\t style: ([{\n\t top: _vm.layout.headerHeight + 'px'\n\t },\n\t _vm.fixedBodyHeight\n\t ])\n\t }, [_c('table-body', {\n\t style: ({\n\t width: _vm.layout.fixedWidth ? _vm.layout.fixedWidth + 'px' : ''\n\t }),\n\t attrs: {\n\t \"fixed\": \"left\",\n\t \"store\": _vm.store,\n\t \"stripe\": _vm.stripe,\n\t \"layout\": _vm.layout,\n\t \"highlight\": _vm.highlightCurrentRow,\n\t \"row-class-name\": _vm.rowClassName,\n\t \"row-style\": _vm.rowStyle\n\t }\n\t })], 1), (_vm.showSummary) ? _c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.data && _vm.data.length > 0),\n\t expression: \"data && data.length > 0\"\n\t }],\n\t ref: \"fixedFooterWrapper\",\n\t staticClass: \"el-table__fixed-footer-wrapper\"\n\t }, [_c('table-footer', {\n\t style: ({\n\t width: _vm.layout.fixedWidth ? _vm.layout.fixedWidth + 'px' : ''\n\t }),\n\t attrs: {\n\t \"fixed\": \"left\",\n\t \"border\": _vm.border,\n\t \"sum-text\": _vm.sumText || _vm.t('el.table.sumText'),\n\t \"summary-method\": _vm.summaryMethod,\n\t \"store\": _vm.store,\n\t \"layout\": _vm.layout\n\t }\n\t })], 1) : _vm._e()]) : _vm._e(), (_vm.rightFixedColumns.length > 0) ? _c('div', {\n\t ref: \"rightFixedWrapper\",\n\t staticClass: \"el-table__fixed-right\",\n\t style: ([{\n\t width: _vm.layout.rightFixedWidth ? _vm.layout.rightFixedWidth + 'px' : ''\n\t }, {\n\t right: _vm.layout.scrollY ? (_vm.border ? _vm.layout.gutterWidth : (_vm.layout.gutterWidth || 1)) + 'px' : ''\n\t },\n\t _vm.fixedHeight\n\t ])\n\t }, [(_vm.showHeader) ? _c('div', {\n\t ref: \"rightFixedHeaderWrapper\",\n\t staticClass: \"el-table__fixed-header-wrapper\"\n\t }, [_c('table-header', {\n\t style: ({\n\t width: _vm.layout.rightFixedWidth ? _vm.layout.rightFixedWidth + 'px' : ''\n\t }),\n\t attrs: {\n\t \"fixed\": \"right\",\n\t \"border\": _vm.border,\n\t \"store\": _vm.store,\n\t \"layout\": _vm.layout\n\t }\n\t })], 1) : _vm._e(), _c('div', {\n\t ref: \"rightFixedBodyWrapper\",\n\t staticClass: \"el-table__fixed-body-wrapper\",\n\t style: ([{\n\t top: _vm.layout.headerHeight + 'px'\n\t },\n\t _vm.fixedBodyHeight\n\t ])\n\t }, [_c('table-body', {\n\t style: ({\n\t width: _vm.layout.rightFixedWidth ? _vm.layout.rightFixedWidth + 'px' : ''\n\t }),\n\t attrs: {\n\t \"fixed\": \"right\",\n\t \"store\": _vm.store,\n\t \"stripe\": _vm.stripe,\n\t \"layout\": _vm.layout,\n\t \"row-class-name\": _vm.rowClassName,\n\t \"row-style\": _vm.rowStyle,\n\t \"highlight\": _vm.highlightCurrentRow\n\t }\n\t })], 1), (_vm.showSummary) ? _c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.data && _vm.data.length > 0),\n\t expression: \"data && data.length > 0\"\n\t }],\n\t ref: \"rightFixedFooterWrapper\",\n\t staticClass: \"el-table__fixed-footer-wrapper\"\n\t }, [_c('table-footer', {\n\t style: ({\n\t width: _vm.layout.rightFixedWidth ? _vm.layout.rightFixedWidth + 'px' : ''\n\t }),\n\t attrs: {\n\t \"fixed\": \"right\",\n\t \"border\": _vm.border,\n\t \"sum-text\": _vm.sumText || _vm.t('el.table.sumText'),\n\t \"summary-method\": _vm.summaryMethod,\n\t \"store\": _vm.store,\n\t \"layout\": _vm.layout\n\t }\n\t })], 1) : _vm._e()]) : _vm._e(), (_vm.rightFixedColumns.length > 0) ? _c('div', {\n\t staticClass: \"el-table__fixed-right-patch\",\n\t style: ({\n\t width: _vm.layout.scrollY ? _vm.layout.gutterWidth + 'px' : '0',\n\t height: _vm.layout.headerHeight + 'px'\n\t })\n\t }) : _vm._e(), _c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.resizeProxyVisible),\n\t expression: \"resizeProxyVisible\"\n\t }],\n\t ref: \"resizeProxy\",\n\t staticClass: \"el-table__column-resize-proxy\"\n\t })])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 147 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _tableColumn = __webpack_require__(148);\n\n\tvar _tableColumn2 = _interopRequireDefault(_tableColumn);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_tableColumn2.default.install = function (Vue) {\n\t Vue.component(_tableColumn2.default.name, _tableColumn2.default);\n\t};\n\n\texports.default = _tableColumn2.default;\n\n/***/ },\n/* 148 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _checkbox = __webpack_require__(130);\n\n\tvar _checkbox2 = _interopRequireDefault(_checkbox);\n\n\tvar _tag = __webpack_require__(109);\n\n\tvar _tag2 = _interopRequireDefault(_tag);\n\n\tvar _merge = __webpack_require__(64);\n\n\tvar _merge2 = _interopRequireDefault(_merge);\n\n\tvar _util = __webpack_require__(107);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tfunction _objectDestructuringEmpty(obj) { if (obj == null) throw new TypeError(\"Cannot destructure undefined\"); }\n\n\tvar columnIdSeed = 1;\n\n\tvar defaults = {\n\t default: {\n\t order: ''\n\t },\n\t selection: {\n\t width: 48,\n\t minWidth: 48,\n\t realWidth: 48,\n\t order: '',\n\t className: 'el-table-column--selection'\n\t },\n\t expand: {\n\t width: 48,\n\t minWidth: 48,\n\t realWidth: 48,\n\t order: ''\n\t },\n\t index: {\n\t width: 48,\n\t minWidth: 48,\n\t realWidth: 48,\n\t order: ''\n\t }\n\t};\n\n\tvar forced = {\n\t selection: {\n\t renderHeader: function renderHeader(h) {\n\t return h(\n\t 'el-checkbox',\n\t {\n\t nativeOn: {\n\t 'click': this.toggleAllSelection\n\t },\n\t attrs: {\n\t value: this.isAllSelected }\n\t },\n\t []\n\t );\n\t },\n\t renderCell: function renderCell(h, _ref) {\n\t var row = _ref.row,\n\t column = _ref.column,\n\t store = _ref.store,\n\t $index = _ref.$index;\n\n\t return h(\n\t 'el-checkbox',\n\t {\n\t attrs: {\n\t value: store.isSelected(row),\n\t disabled: column.selectable ? !column.selectable.call(null, row, $index) : false\n\t },\n\t on: {\n\t 'input': function input() {\n\t store.commit('rowSelectedChanged', row);\n\t }\n\t }\n\t },\n\t []\n\t );\n\t },\n\t sortable: false,\n\t resizable: false\n\t },\n\t index: {\n\t renderHeader: function renderHeader(h, _ref2) {\n\t var column = _ref2.column;\n\n\t return column.label || '#';\n\t },\n\t renderCell: function renderCell(h, _ref3) {\n\t var $index = _ref3.$index;\n\n\t return h(\n\t 'div',\n\t null,\n\t [$index + 1]\n\t );\n\t },\n\t sortable: false\n\t },\n\t expand: {\n\t renderHeader: function renderHeader(h, _ref4) {\n\t _objectDestructuringEmpty(_ref4);\n\n\t return '';\n\t },\n\t renderCell: function renderCell(h, _ref5, proxy) {\n\t var row = _ref5.row,\n\t store = _ref5.store;\n\n\t var expanded = store.states.expandRows.indexOf(row) > -1;\n\t return h(\n\t 'div',\n\t { 'class': 'el-table__expand-icon ' + (expanded ? 'el-table__expand-icon--expanded' : ''),\n\t on: {\n\t 'click': function click() {\n\t return proxy.handleExpandClick(row);\n\t }\n\t }\n\t },\n\t [h(\n\t 'i',\n\t { 'class': 'el-icon el-icon-arrow-right' },\n\t []\n\t )]\n\t );\n\t },\n\t sortable: false,\n\t resizable: false,\n\t className: 'el-table__expand-column'\n\t }\n\t};\n\n\tvar getDefaultColumn = function getDefaultColumn(type, options) {\n\t var column = {};\n\n\t (0, _merge2.default)(column, defaults[type || 'default']);\n\n\t for (var name in options) {\n\t if (options.hasOwnProperty(name)) {\n\t var value = options[name];\n\t if (typeof value !== 'undefined') {\n\t column[name] = value;\n\t }\n\t }\n\t }\n\n\t if (!column.minWidth) {\n\t column.minWidth = 80;\n\t }\n\n\t column.realWidth = column.width || column.minWidth;\n\n\t return column;\n\t};\n\n\tvar DEFAULT_RENDER_CELL = function DEFAULT_RENDER_CELL(h, _ref6) {\n\t var row = _ref6.row,\n\t column = _ref6.column;\n\n\t var property = column.property;\n\t var value = property && property.indexOf('.') === -1 ? row[property] : (0, _util.getValueByPath)(row, property);\n\t if (column && column.formatter) {\n\t return column.formatter(row, column, value);\n\t }\n\t return value;\n\t};\n\n\texports.default = {\n\t name: 'ElTableColumn',\n\n\t props: {\n\t type: {\n\t type: String,\n\t default: 'default'\n\t },\n\t label: String,\n\t className: String,\n\t labelClassName: String,\n\t property: String,\n\t prop: String,\n\t width: {},\n\t minWidth: {},\n\t renderHeader: Function,\n\t sortable: {\n\t type: [String, Boolean],\n\t default: false\n\t },\n\t sortMethod: Function,\n\t resizable: {\n\t type: Boolean,\n\t default: true\n\t },\n\t context: {},\n\t columnKey: String,\n\t align: String,\n\t headerAlign: String,\n\t showTooltipWhenOverflow: Boolean,\n\t showOverflowTooltip: Boolean,\n\t fixed: [Boolean, String],\n\t formatter: Function,\n\t selectable: Function,\n\t reserveSelection: Boolean,\n\t filterMethod: Function,\n\t filteredValue: Array,\n\t filters: Array,\n\t filterPlacement: String,\n\t filterMultiple: {\n\t type: Boolean,\n\t default: true\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t isSubColumn: false,\n\t columns: []\n\t };\n\t },\n\t beforeCreate: function beforeCreate() {\n\t this.row = {};\n\t this.column = {};\n\t this.$index = 0;\n\t },\n\n\n\t components: {\n\t ElCheckbox: _checkbox2.default,\n\t ElTag: _tag2.default\n\t },\n\n\t computed: {\n\t owner: function owner() {\n\t var parent = this.$parent;\n\t while (parent && !parent.tableId) {\n\t parent = parent.$parent;\n\t }\n\t return parent;\n\t }\n\t },\n\n\t created: function created() {\n\t var _this = this;\n\n\t this.customRender = this.$options.render;\n\t this.$options.render = function (h) {\n\t return h('div', _this.$slots.default);\n\t };\n\t this.columnId = (this.$parent.tableId || this.$parent.columnId + '_') + 'column_' + columnIdSeed++;\n\n\t var parent = this.$parent;\n\t var owner = this.owner;\n\t this.isSubColumn = owner !== parent;\n\n\t var type = this.type;\n\n\t var width = this.width;\n\t if (width !== undefined) {\n\t width = parseInt(width, 10);\n\t if (isNaN(width)) {\n\t width = null;\n\t }\n\t }\n\n\t var minWidth = this.minWidth;\n\t if (minWidth !== undefined) {\n\t minWidth = parseInt(minWidth, 10);\n\t if (isNaN(minWidth)) {\n\t minWidth = 80;\n\t }\n\t }\n\n\t var isColumnGroup = false;\n\n\t var column = getDefaultColumn(type, {\n\t id: this.columnId,\n\t columnKey: this.columnKey,\n\t label: this.label,\n\t className: this.className,\n\t labelClassName: this.labelClassName,\n\t property: this.prop || this.property,\n\t type: type,\n\t renderCell: null,\n\t renderHeader: this.renderHeader,\n\t minWidth: minWidth,\n\t width: width,\n\t isColumnGroup: isColumnGroup,\n\t context: this.context,\n\t align: this.align ? 'is-' + this.align : null,\n\t headerAlign: this.headerAlign ? 'is-' + this.headerAlign : this.align ? 'is-' + this.align : null,\n\t sortable: this.sortable === '' ? true : this.sortable,\n\t sortMethod: this.sortMethod,\n\t resizable: this.resizable,\n\t showOverflowTooltip: this.showOverflowTooltip || this.showTooltipWhenOverflow,\n\t formatter: this.formatter,\n\t selectable: this.selectable,\n\t reserveSelection: this.reserveSelection,\n\t fixed: this.fixed === '' ? true : this.fixed,\n\t filterMethod: this.filterMethod,\n\t filters: this.filters,\n\t filterable: this.filters || this.filterMethod,\n\t filterMultiple: this.filterMultiple,\n\t filterOpened: false,\n\t filteredValue: this.filteredValue || [],\n\t filterPlacement: this.filterPlacement || ''\n\t });\n\n\t (0, _merge2.default)(column, forced[type] || {});\n\n\t this.columnConfig = column;\n\n\t var renderCell = column.renderCell;\n\t var _self = this;\n\n\t if (type === 'expand') {\n\t owner.renderExpanded = function (h, data) {\n\t return _self.$scopedSlots.default ? _self.$scopedSlots.default(data) : _self.$slots.default;\n\t };\n\n\t column.renderCell = function (h, data) {\n\t return h(\n\t 'div',\n\t { 'class': 'cell' },\n\t [renderCell(h, data, this._renderProxy)]\n\t );\n\t };\n\n\t return;\n\t }\n\n\t column.renderCell = function (h, data) {\n\t // 未来版本移除\n\t if (_self.$vnode.data.inlineTemplate) {\n\t renderCell = function renderCell() {\n\t data._self = _self.context || data._self;\n\t if (Object.prototype.toString.call(data._self) === '[object Object]') {\n\t for (var prop in data._self) {\n\t if (!data.hasOwnProperty(prop)) {\n\t data[prop] = data._self[prop];\n\t }\n\t }\n\t }\n\t // 静态内容会缓存到 _staticTrees 内,不改的话获取的静态数据就不是内部 context\n\t data._staticTrees = _self._staticTrees;\n\t data.$options.staticRenderFns = _self.$options.staticRenderFns;\n\t return _self.customRender.call(data);\n\t };\n\t } else if (_self.$scopedSlots.default) {\n\t renderCell = function renderCell() {\n\t return _self.$scopedSlots.default(data);\n\t };\n\t }\n\n\t if (!renderCell) {\n\t renderCell = DEFAULT_RENDER_CELL;\n\t }\n\n\t return _self.showOverflowTooltip || _self.showTooltipWhenOverflow ? h(\n\t 'div',\n\t { 'class': 'cell el-tooltip', style: 'width:' + (data.column.realWidth || data.column.width) + 'px' },\n\t [renderCell(h, data)]\n\t ) : h(\n\t 'div',\n\t { 'class': 'cell' },\n\t [renderCell(h, data)]\n\t );\n\t };\n\t },\n\t destroyed: function destroyed() {\n\t if (!this.$parent) return;\n\t this.owner.store.commit('removeColumn', this.columnConfig);\n\t },\n\n\n\t watch: {\n\t label: function label(newVal) {\n\t if (this.columnConfig) {\n\t this.columnConfig.label = newVal;\n\t }\n\t },\n\t prop: function prop(newVal) {\n\t if (this.columnConfig) {\n\t this.columnConfig.property = newVal;\n\t }\n\t },\n\t property: function property(newVal) {\n\t if (this.columnConfig) {\n\t this.columnConfig.property = newVal;\n\t }\n\t },\n\t filters: function filters(newVal) {\n\t if (this.columnConfig) {\n\t this.columnConfig.filters = newVal;\n\t }\n\t },\n\t filterMultiple: function filterMultiple(newVal) {\n\t if (this.columnConfig) {\n\t this.columnConfig.filterMultiple = newVal;\n\t }\n\t },\n\t align: function align(newVal) {\n\t if (this.columnConfig) {\n\t this.columnConfig.align = newVal ? 'is-' + newVal : null;\n\n\t if (!this.headerAlign) {\n\t this.columnConfig.headerAlign = newVal ? 'is-' + newVal : null;\n\t }\n\t }\n\t },\n\t headerAlign: function headerAlign(newVal) {\n\t if (this.columnConfig) {\n\t this.columnConfig.headerAlign = 'is-' + (newVal ? newVal : this.align);\n\t }\n\t },\n\t width: function width(newVal) {\n\t if (this.columnConfig) {\n\t this.columnConfig.width = newVal;\n\t this.owner.store.scheduleLayout();\n\t }\n\t },\n\t minWidth: function minWidth(newVal) {\n\t if (this.columnConfig) {\n\t this.columnConfig.minWidth = newVal;\n\t this.owner.store.scheduleLayout();\n\t }\n\t },\n\t fixed: function fixed(newVal) {\n\t if (this.columnConfig) {\n\t this.columnConfig.fixed = newVal;\n\t this.owner.store.scheduleLayout();\n\t }\n\t },\n\t sortable: function sortable(newVal) {\n\t if (this.columnConfig) {\n\t this.columnConfig.sortable = newVal;\n\t }\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t var owner = this.owner;\n\t var parent = this.$parent;\n\t var columnIndex = void 0;\n\n\t if (!this.isSubColumn) {\n\t columnIndex = [].indexOf.call(parent.$refs.hiddenColumns.children, this.$el);\n\t } else {\n\t columnIndex = [].indexOf.call(parent.$el.children, this.$el);\n\t }\n\n\t owner.store.commit('insertColumn', this.columnConfig, columnIndex, this.isSubColumn ? parent.columnConfig : null);\n\t }\n\t};\n\n/***/ },\n/* 149 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _datePicker = __webpack_require__(150);\n\n\tvar _datePicker2 = _interopRequireDefault(_datePicker);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_datePicker2.default.install = function install(Vue) {\n\t Vue.component(_datePicker2.default.name, _datePicker2.default);\n\t};\n\n\texports.default = _datePicker2.default;\n\n/***/ },\n/* 150 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _picker = __webpack_require__(151);\n\n\tvar _picker2 = _interopRequireDefault(_picker);\n\n\tvar _date = __webpack_require__(156);\n\n\tvar _date2 = _interopRequireDefault(_date);\n\n\tvar _dateRange = __webpack_require__(174);\n\n\tvar _dateRange2 = _interopRequireDefault(_dateRange);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar getPanel = function getPanel(type) {\n\t if (type === 'daterange' || type === 'datetimerange') {\n\t return _dateRange2.default;\n\t }\n\t return _date2.default;\n\t};\n\n\texports.default = {\n\t mixins: [_picker2.default],\n\n\t name: 'ElDatePicker',\n\n\t props: {\n\t type: {\n\t type: String,\n\t default: 'date'\n\t }\n\t },\n\n\t watch: {\n\t type: function type(_type) {\n\t if (this.picker) {\n\t this.unmountPicker();\n\t this.panel = getPanel(_type);\n\t this.mountPicker();\n\t } else {\n\t this.panel = getPanel(_type);\n\t }\n\t }\n\t },\n\n\t created: function created() {\n\t this.panel = getPanel(this.type);\n\t }\n\t};\n\n/***/ },\n/* 151 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(152),\n\t /* template */\n\t __webpack_require__(155),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 152 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vue = __webpack_require__(133);\n\n\tvar _vue2 = _interopRequireDefault(_vue);\n\n\tvar _clickoutside = __webpack_require__(21);\n\n\tvar _clickoutside2 = _interopRequireDefault(_clickoutside);\n\n\tvar _util = __webpack_require__(153);\n\n\tvar _vuePopper = __webpack_require__(24);\n\n\tvar _vuePopper2 = _interopRequireDefault(_vuePopper);\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tvar _input = __webpack_require__(20);\n\n\tvar _input2 = _interopRequireDefault(_input);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\tvar NewPopper = {\n\t props: {\n\t appendToBody: _vuePopper2.default.props.appendToBody,\n\t offset: _vuePopper2.default.props.offset,\n\t boundariesPadding: _vuePopper2.default.props.boundariesPadding\n\t },\n\t methods: _vuePopper2.default.methods,\n\t data: _vuePopper2.default.data,\n\t beforeDestroy: _vuePopper2.default.beforeDestroy\n\t};\n\n\tvar DEFAULT_FORMATS = {\n\t date: 'yyyy-MM-dd',\n\t month: 'yyyy-MM',\n\t datetime: 'yyyy-MM-dd HH:mm:ss',\n\t time: 'HH:mm:ss',\n\t week: 'yyyywWW',\n\t timerange: 'HH:mm:ss',\n\t daterange: 'yyyy-MM-dd',\n\t datetimerange: 'yyyy-MM-dd HH:mm:ss',\n\t year: 'yyyy'\n\t};\n\tvar HAVE_TRIGGER_TYPES = ['date', 'datetime', 'time', 'time-select', 'week', 'month', 'year', 'daterange', 'timerange', 'datetimerange'];\n\tvar DATE_FORMATTER = function DATE_FORMATTER(value, format) {\n\t return (0, _util.formatDate)(value, format);\n\t};\n\tvar DATE_PARSER = function DATE_PARSER(text, format) {\n\t return (0, _util.parseDate)(text, format);\n\t};\n\tvar RANGE_FORMATTER = function RANGE_FORMATTER(value, format, separator) {\n\t if (Array.isArray(value) && value.length === 2) {\n\t var start = value[0];\n\t var end = value[1];\n\n\t if (start && end) {\n\t return (0, _util.formatDate)(start, format) + separator + (0, _util.formatDate)(end, format);\n\t }\n\t }\n\t return '';\n\t};\n\tvar RANGE_PARSER = function RANGE_PARSER(text, format, separator) {\n\t var array = text.split(separator);\n\t if (array.length === 2) {\n\t var range1 = array[0];\n\t var range2 = array[1];\n\n\t return [(0, _util.parseDate)(range1, format), (0, _util.parseDate)(range2, format)];\n\t }\n\t return [];\n\t};\n\tvar TYPE_VALUE_RESOLVER_MAP = {\n\t default: {\n\t formatter: function formatter(value) {\n\t if (!value) return '';\n\t return '' + value;\n\t },\n\t parser: function parser(text) {\n\t if (text === undefined || text === '') return null;\n\t return text;\n\t }\n\t },\n\t week: {\n\t formatter: function formatter(value, format) {\n\t var date = (0, _util.formatDate)(value, format);\n\t var week = (0, _util.getWeekNumber)(value);\n\n\t date = /WW/.test(date) ? date.replace(/WW/, week < 10 ? '0' + week : week) : date.replace(/W/, week);\n\t return date;\n\t },\n\t parser: function parser(text) {\n\t var array = (text || '').split('w');\n\t if (array.length === 2) {\n\t var year = Number(array[0]);\n\t var month = Number(array[1]);\n\n\t if (!isNaN(year) && !isNaN(month) && month < 54) {\n\t return text;\n\t }\n\t }\n\t return null;\n\t }\n\t },\n\t date: {\n\t formatter: DATE_FORMATTER,\n\t parser: DATE_PARSER\n\t },\n\t datetime: {\n\t formatter: DATE_FORMATTER,\n\t parser: DATE_PARSER\n\t },\n\t daterange: {\n\t formatter: RANGE_FORMATTER,\n\t parser: RANGE_PARSER\n\t },\n\t datetimerange: {\n\t formatter: RANGE_FORMATTER,\n\t parser: RANGE_PARSER\n\t },\n\t timerange: {\n\t formatter: RANGE_FORMATTER,\n\t parser: RANGE_PARSER\n\t },\n\t time: {\n\t formatter: DATE_FORMATTER,\n\t parser: DATE_PARSER\n\t },\n\t month: {\n\t formatter: DATE_FORMATTER,\n\t parser: DATE_PARSER\n\t },\n\t year: {\n\t formatter: DATE_FORMATTER,\n\t parser: DATE_PARSER\n\t },\n\t number: {\n\t formatter: function formatter(value) {\n\t if (!value) return '';\n\t return '' + value;\n\t },\n\t parser: function parser(text) {\n\t var result = Number(text);\n\n\t if (!isNaN(text)) {\n\t return result;\n\t } else {\n\t return null;\n\t }\n\t }\n\t }\n\t};\n\tvar PLACEMENT_MAP = {\n\t left: 'bottom-start',\n\t center: 'bottom',\n\t right: 'bottom-end'\n\t};\n\n\t// only considers date-picker's value: Date or [Date, Date]\n\tvar valueEquals = function valueEquals(a, b) {\n\t var aIsArray = a instanceof Array;\n\t var bIsArray = b instanceof Array;\n\t if (aIsArray && bIsArray) {\n\t return new Date(a[0]).getTime() === new Date(b[0]).getTime() && new Date(a[1]).getTime() === new Date(b[1]).getTime();\n\t }\n\t if (!aIsArray && !bIsArray) {\n\t return new Date(a).getTime() === new Date(b).getTime();\n\t }\n\t return false;\n\t};\n\n\texports.default = {\n\t mixins: [_emitter2.default, NewPopper],\n\n\t props: {\n\t size: String,\n\t format: String,\n\t readonly: Boolean,\n\t placeholder: String,\n\t disabled: Boolean,\n\t clearable: {\n\t type: Boolean,\n\t default: true\n\t },\n\t popperClass: String,\n\t editable: {\n\t type: Boolean,\n\t default: true\n\t },\n\t align: {\n\t type: String,\n\t default: 'left'\n\t },\n\t value: {},\n\t defaultValue: {},\n\t rangeSeparator: {\n\t default: ' - '\n\t },\n\t pickerOptions: {}\n\t },\n\n\t components: { ElInput: _input2.default },\n\n\t directives: { Clickoutside: _clickoutside2.default },\n\n\t data: function data() {\n\t return {\n\t pickerVisible: false,\n\t showClose: false,\n\t currentValue: '',\n\t unwatchPickerOptions: null\n\t };\n\t },\n\n\n\t watch: {\n\t pickerVisible: function pickerVisible(val) {\n\t if (!val) this.dispatch('ElFormItem', 'el.form.blur');\n\t if (this.readonly || this.disabled) return;\n\t val ? this.showPicker() : this.hidePicker();\n\t },\n\t currentValue: function currentValue(val) {\n\t if (val) return;\n\t if (this.picker && typeof this.picker.handleClear === 'function') {\n\t this.picker.handleClear();\n\t } else {\n\t this.$emit('input');\n\t }\n\t },\n\n\t value: {\n\t immediate: true,\n\t handler: function handler(val) {\n\t this.currentValue = (0, _util.isDate)(val) ? new Date(val) : val;\n\t }\n\t },\n\t displayValue: function displayValue(val) {\n\t this.$emit('change', val);\n\t this.dispatch('ElFormItem', 'el.form.change');\n\t }\n\t },\n\n\t computed: {\n\t reference: function reference() {\n\t return this.$refs.reference.$el;\n\t },\n\t refInput: function refInput() {\n\t if (this.reference) return this.reference.querySelector('input');\n\t return {};\n\t },\n\t valueIsEmpty: function valueIsEmpty() {\n\t var val = this.currentValue;\n\t if (Array.isArray(val)) {\n\t for (var i = 0, len = val.length; i < len; i++) {\n\t if (val[i]) {\n\t return false;\n\t }\n\t }\n\t } else {\n\t if (val) {\n\t return false;\n\t }\n\t }\n\t return true;\n\t },\n\t triggerClass: function triggerClass() {\n\t return this.type.indexOf('time') !== -1 ? 'el-icon-time' : 'el-icon-date';\n\t },\n\t selectionMode: function selectionMode() {\n\t if (this.type === 'week') {\n\t return 'week';\n\t } else if (this.type === 'month') {\n\t return 'month';\n\t } else if (this.type === 'year') {\n\t return 'year';\n\t }\n\n\t return 'day';\n\t },\n\t haveTrigger: function haveTrigger() {\n\t if (typeof this.showTrigger !== 'undefined') {\n\t return this.showTrigger;\n\t }\n\t return HAVE_TRIGGER_TYPES.indexOf(this.type) !== -1;\n\t },\n\n\n\t displayValue: {\n\t get: function get() {\n\t var value = this.currentValue;\n\t if (!value) return;\n\t var formatter = (TYPE_VALUE_RESOLVER_MAP[this.type] || TYPE_VALUE_RESOLVER_MAP['default']).formatter;\n\t var format = DEFAULT_FORMATS[this.type];\n\n\t return formatter(value, this.format || format, this.rangeSeparator);\n\t },\n\t set: function set(value) {\n\t if (value) {\n\t var type = this.type;\n\t var parser = (TYPE_VALUE_RESOLVER_MAP[type] || TYPE_VALUE_RESOLVER_MAP['default']).parser;\n\t var parsedValue = parser(value, this.format || DEFAULT_FORMATS[type], this.rangeSeparator);\n\n\t if (parsedValue && this.picker) {\n\t this.picker.value = parsedValue;\n\t }\n\t } else {\n\t this.$emit('input', value);\n\t this.picker.value = value;\n\t }\n\t this.$forceUpdate();\n\t }\n\t }\n\t },\n\n\t created: function created() {\n\t // vue-popper\n\t this.popperOptions = {\n\t boundariesPadding: 0,\n\t gpuAcceleration: false\n\t };\n\t this.placement = PLACEMENT_MAP[this.align] || PLACEMENT_MAP.left;\n\t },\n\n\n\t methods: {\n\t handleMouseEnterIcon: function handleMouseEnterIcon() {\n\t if (this.readonly || this.disabled) return;\n\t if (!this.valueIsEmpty && this.clearable) {\n\t this.showClose = true;\n\t }\n\t },\n\t handleClickIcon: function handleClickIcon() {\n\t if (this.readonly || this.disabled) return;\n\t if (this.showClose) {\n\t this.currentValue = this.$options.defaultValue || '';\n\t this.showClose = false;\n\t } else {\n\t this.pickerVisible = !this.pickerVisible;\n\t }\n\t },\n\t dateChanged: function dateChanged(dateA, dateB) {\n\t if (Array.isArray(dateA)) {\n\t var len = dateA.length;\n\t if (!dateB) return true;\n\t while (len--) {\n\t if (!(0, _util.equalDate)(dateA[len], dateB[len])) return true;\n\t }\n\t } else {\n\t if (!(0, _util.equalDate)(dateA, dateB)) return true;\n\t }\n\n\t return false;\n\t },\n\t handleClose: function handleClose() {\n\t this.pickerVisible = false;\n\t },\n\t handleFocus: function handleFocus() {\n\t var type = this.type;\n\n\t if (HAVE_TRIGGER_TYPES.indexOf(type) !== -1 && !this.pickerVisible) {\n\t this.pickerVisible = true;\n\t }\n\t this.$emit('focus', this);\n\t },\n\t handleBlur: function handleBlur() {\n\t this.$emit('blur', this);\n\t },\n\t handleKeydown: function handleKeydown(event) {\n\t var keyCode = event.keyCode;\n\n\t // TAB or ESC\n\t if (keyCode === 9 || keyCode === 27) {\n\t this.pickerVisible = false;\n\t event.stopPropagation();\n\t }\n\t },\n\t hidePicker: function hidePicker() {\n\t if (this.picker) {\n\t this.picker.resetView && this.picker.resetView();\n\t this.pickerVisible = this.picker.visible = false;\n\t this.destroyPopper();\n\t }\n\t },\n\t showPicker: function showPicker() {\n\t var _this = this;\n\n\t if (this.$isServer) return;\n\t if (!this.picker) {\n\t this.mountPicker();\n\t }\n\t this.pickerVisible = this.picker.visible = true;\n\n\t this.updatePopper();\n\n\t if (this.currentValue instanceof Date) {\n\t this.picker.date = new Date(this.currentValue.getTime());\n\t } else {\n\t this.picker.value = this.currentValue;\n\t }\n\t this.picker.resetView && this.picker.resetView();\n\n\t this.$nextTick(function () {\n\t _this.picker.ajustScrollTop && _this.picker.ajustScrollTop();\n\t });\n\t },\n\t mountPicker: function mountPicker() {\n\t var _this2 = this;\n\n\t this.panel.defaultValue = this.defaultValue || this.currentValue;\n\t this.picker = new _vue2.default(this.panel).$mount();\n\t this.picker.popperClass = this.popperClass;\n\t this.popperElm = this.picker.$el;\n\t this.picker.width = this.reference.getBoundingClientRect().width;\n\t this.picker.showTime = this.type === 'datetime' || this.type === 'datetimerange';\n\t this.picker.selectionMode = this.selectionMode;\n\t if (this.format) {\n\t this.picker.format = this.format;\n\t }\n\n\t var updateOptions = function updateOptions() {\n\t var options = _this2.pickerOptions;\n\n\t if (options && options.selectableRange) {\n\t (function () {\n\t var ranges = options.selectableRange;\n\t var parser = TYPE_VALUE_RESOLVER_MAP.datetimerange.parser;\n\t var format = DEFAULT_FORMATS.timerange;\n\n\t ranges = Array.isArray(ranges) ? ranges : [ranges];\n\t _this2.picker.selectableRange = ranges.map(function (range) {\n\t return parser(range, format, _this2.rangeSeparator);\n\t });\n\t })();\n\t }\n\n\t for (var option in options) {\n\t if (options.hasOwnProperty(option) &&\n\t // 忽略 time-picker 的该配置项\n\t option !== 'selectableRange') {\n\t _this2.picker[option] = options[option];\n\t }\n\t }\n\t };\n\t updateOptions();\n\t this.unwatchPickerOptions = this.$watch('pickerOptions', function () {\n\t return updateOptions();\n\t }, { deep: true });\n\n\t this.$el.appendChild(this.picker.$el);\n\t this.picker.resetView && this.picker.resetView();\n\n\t this.picker.$on('dodestroy', this.doDestroy);\n\t this.picker.$on('pick', function () {\n\t var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\t var visible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t // do not emit if values are same\n\t if (!valueEquals(_this2.value, date)) {\n\t _this2.$emit('input', date);\n\t }\n\t _this2.pickerVisible = _this2.picker.visible = visible;\n\t _this2.picker.resetView && _this2.picker.resetView();\n\t });\n\n\t this.picker.$on('select-range', function (start, end) {\n\t _this2.refInput.setSelectionRange(start, end);\n\t _this2.refInput.focus();\n\t });\n\t },\n\t unmountPicker: function unmountPicker() {\n\t if (this.picker) {\n\t this.picker.$destroy();\n\t this.picker.$off();\n\t if (typeof this.unwatchPickerOptions === 'function') {\n\t this.unwatchPickerOptions();\n\t }\n\t this.picker.$el.parentNode.removeChild(this.picker.$el);\n\t }\n\t }\n\t }\n\t};\n\n/***/ },\n/* 153 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\texports.limitRange = exports.getRangeHours = exports.nextMonth = exports.prevMonth = exports.getWeekNumber = exports.getStartDateOfMonth = exports.DAY_DURATION = exports.getFirstDayOfMonth = exports.getDayCountOfMonth = exports.parseDate = exports.formatDate = exports.isDate = exports.toDate = exports.equalDate = undefined;\n\n\tvar _date = __webpack_require__(154);\n\n\tvar _date2 = _interopRequireDefault(_date);\n\n\tvar _locale = __webpack_require__(111);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar weeks = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\n\tvar months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];\n\tvar getI18nSettings = function getI18nSettings() {\n\t return {\n\t dayNamesShort: weeks.map(function (week) {\n\t return (0, _locale.t)('el.datepicker.weeks.' + week);\n\t }),\n\t dayNames: weeks.map(function (week) {\n\t return (0, _locale.t)('el.datepicker.weeks.' + week);\n\t }),\n\t monthNamesShort: months.map(function (month) {\n\t return (0, _locale.t)('el.datepicker.months.' + month);\n\t }),\n\t monthNames: months.map(function (month, index) {\n\t return (0, _locale.t)('el.datepicker.month' + (index + 1));\n\t }),\n\t amPm: ['am', 'pm']\n\t };\n\t};\n\n\tvar newArray = function newArray(start, end) {\n\t var result = [];\n\t for (var i = start; i <= end; i++) {\n\t result.push(i);\n\t }\n\t return result;\n\t};\n\n\tvar equalDate = exports.equalDate = function equalDate(dateA, dateB) {\n\t return dateA === dateB || new Date(dateA).getTime() === new Date(dateB).getTime();\n\t};\n\n\tvar toDate = exports.toDate = function toDate(date) {\n\t return isDate(date) ? new Date(date) : null;\n\t};\n\n\tvar isDate = exports.isDate = function isDate(date) {\n\t if (date === null || date === undefined) return false;\n\t if (isNaN(new Date(date).getTime())) return false;\n\t return true;\n\t};\n\n\tvar formatDate = exports.formatDate = function formatDate(date, format) {\n\t date = toDate(date);\n\t if (!date) return '';\n\t return _date2.default.format(date, format || 'yyyy-MM-dd', getI18nSettings());\n\t};\n\n\tvar parseDate = exports.parseDate = function parseDate(string, format) {\n\t return _date2.default.parse(string, format || 'yyyy-MM-dd', getI18nSettings());\n\t};\n\n\tvar getDayCountOfMonth = exports.getDayCountOfMonth = function getDayCountOfMonth(year, month) {\n\t if (month === 3 || month === 5 || month === 8 || month === 10) {\n\t return 30;\n\t }\n\n\t if (month === 1) {\n\t if (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0) {\n\t return 29;\n\t } else {\n\t return 28;\n\t }\n\t }\n\n\t return 31;\n\t};\n\n\tvar getFirstDayOfMonth = exports.getFirstDayOfMonth = function getFirstDayOfMonth(date) {\n\t var temp = new Date(date.getTime());\n\t temp.setDate(1);\n\t return temp.getDay();\n\t};\n\n\tvar DAY_DURATION = exports.DAY_DURATION = 86400000;\n\n\tvar getStartDateOfMonth = exports.getStartDateOfMonth = function getStartDateOfMonth(year, month) {\n\t var result = new Date(year, month, 1);\n\t var day = result.getDay();\n\n\t if (day === 0) {\n\t result.setTime(result.getTime() - DAY_DURATION * 7);\n\t } else {\n\t result.setTime(result.getTime() - DAY_DURATION * day);\n\t }\n\n\t return result;\n\t};\n\n\tvar getWeekNumber = exports.getWeekNumber = function getWeekNumber(src) {\n\t var date = new Date(src.getTime());\n\t date.setHours(0, 0, 0, 0);\n\t // Thursday in current week decides the year.\n\t date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);\n\t // January 4 is always in week 1.\n\t var week1 = new Date(date.getFullYear(), 0, 4);\n\t // Adjust to Thursday in week 1 and count number of weeks from date to week 1.\n\t return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);\n\t};\n\n\tvar prevMonth = exports.prevMonth = function prevMonth(src) {\n\t var year = src.getFullYear();\n\t var month = src.getMonth();\n\t var date = src.getDate();\n\n\t var newYear = month === 0 ? year - 1 : year;\n\t var newMonth = month === 0 ? 11 : month - 1;\n\n\t var newMonthDayCount = getDayCountOfMonth(newYear, newMonth);\n\t if (newMonthDayCount < date) {\n\t src.setDate(newMonthDayCount);\n\t }\n\n\t src.setMonth(newMonth);\n\t src.setFullYear(newYear);\n\n\t return new Date(src.getTime());\n\t};\n\n\tvar nextMonth = exports.nextMonth = function nextMonth(src) {\n\t var year = src.getFullYear();\n\t var month = src.getMonth();\n\t var date = src.getDate();\n\n\t var newYear = month === 11 ? year + 1 : year;\n\t var newMonth = month === 11 ? 0 : month + 1;\n\n\t var newMonthDayCount = getDayCountOfMonth(newYear, newMonth);\n\t if (newMonthDayCount < date) {\n\t src.setDate(newMonthDayCount);\n\t }\n\n\t src.setMonth(newMonth);\n\t src.setFullYear(newYear);\n\n\t return new Date(src.getTime());\n\t};\n\n\tvar getRangeHours = exports.getRangeHours = function getRangeHours(ranges) {\n\t var hours = [];\n\t var disabledHours = [];\n\n\t (ranges || []).forEach(function (range) {\n\t var value = range.map(function (date) {\n\t return date.getHours();\n\t });\n\n\t disabledHours = disabledHours.concat(newArray(value[0], value[1]));\n\t });\n\n\t if (disabledHours.length) {\n\t for (var i = 0; i < 24; i++) {\n\t hours[i] = disabledHours.indexOf(i) === -1;\n\t }\n\t } else {\n\t for (var _i = 0; _i < 24; _i++) {\n\t hours[_i] = false;\n\t }\n\t }\n\n\t return hours;\n\t};\n\n\tvar limitRange = exports.limitRange = function limitRange(date, ranges) {\n\t var format = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'yyyy-MM-dd HH:mm:ss';\n\n\t if (!ranges || !ranges.length) return date;\n\n\t var len = ranges.length;\n\n\t date = _date2.default.parse(_date2.default.format(date, format), format);\n\t for (var i = 0; i < len; i++) {\n\t var range = ranges[i];\n\t if (date >= range[0] && date <= range[1]) {\n\t return date;\n\t }\n\t }\n\n\t var maxDate = ranges[0][0];\n\t var minDate = ranges[0][0];\n\n\t ranges.forEach(function (range) {\n\t minDate = new Date(Math.min(range[0], minDate));\n\t maxDate = new Date(Math.max(range[1], maxDate));\n\t });\n\n\t return date < minDate ? minDate : maxDate;\n\t};\n\n/***/ },\n/* 154 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(43);\n\n/***/ },\n/* 155 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('el-input', {\n\t directives: [{\n\t name: \"clickoutside\",\n\t rawName: \"v-clickoutside\",\n\t value: (_vm.handleClose),\n\t expression: \"handleClose\"\n\t }],\n\t ref: \"reference\",\n\t staticClass: \"el-date-editor\",\n\t class: 'el-date-editor--' + _vm.type,\n\t attrs: {\n\t \"readonly\": !_vm.editable || _vm.readonly,\n\t \"disabled\": _vm.disabled,\n\t \"size\": _vm.size,\n\t \"placeholder\": _vm.placeholder,\n\t \"value\": _vm.displayValue,\n\t \"validateEvent\": false\n\t },\n\t on: {\n\t \"focus\": _vm.handleFocus,\n\t \"blur\": _vm.handleBlur\n\t },\n\t nativeOn: {\n\t \"keydown\": function($event) {\n\t _vm.handleKeydown($event)\n\t },\n\t \"change\": function($event) {\n\t _vm.displayValue = $event.target.value\n\t }\n\t }\n\t }, [(_vm.haveTrigger) ? _c('i', {\n\t staticClass: \"el-input__icon\",\n\t class: [_vm.showClose ? 'el-icon-close' : _vm.triggerClass],\n\t on: {\n\t \"click\": _vm.handleClickIcon,\n\t \"mouseenter\": _vm.handleMouseEnterIcon,\n\t \"mouseleave\": function($event) {\n\t _vm.showClose = false\n\t }\n\t },\n\t slot: \"icon\"\n\t }) : _vm._e()])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 156 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(157),\n\t /* template */\n\t __webpack_require__(173),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 157 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _util = __webpack_require__(153);\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tvar _input = __webpack_require__(20);\n\n\tvar _input2 = _interopRequireDefault(_input);\n\n\tvar _time = __webpack_require__(158);\n\n\tvar _time2 = _interopRequireDefault(_time);\n\n\tvar _yearTable = __webpack_require__(164);\n\n\tvar _yearTable2 = _interopRequireDefault(_yearTable);\n\n\tvar _monthTable = __webpack_require__(167);\n\n\tvar _monthTable2 = _interopRequireDefault(_monthTable);\n\n\tvar _dateTable = __webpack_require__(170);\n\n\tvar _dateTable2 = _interopRequireDefault(_dateTable);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t mixins: [_locale2.default],\n\n\t watch: {\n\t showTime: function showTime(val) {\n\t var _this = this;\n\n\t /* istanbul ignore if */\n\t if (!val) return;\n\t this.$nextTick(function (_) {\n\t var inputElm = _this.$refs.input.$el;\n\t if (inputElm) {\n\t _this.pickerWidth = inputElm.getBoundingClientRect().width + 10;\n\t }\n\t });\n\t },\n\t value: function value(newVal) {\n\t if (!newVal) return;\n\t newVal = new Date(newVal);\n\t if (!isNaN(newVal)) {\n\t if (typeof this.disabledDate === 'function' && this.disabledDate(new Date(newVal))) {\n\t return;\n\t }\n\t this.date = newVal;\n\t this.year = newVal.getFullYear();\n\t this.month = newVal.getMonth();\n\t this.$emit('pick', newVal, false);\n\t }\n\t },\n\t timePickerVisible: function timePickerVisible(val) {\n\t var _this2 = this;\n\n\t if (val) this.$nextTick(function () {\n\t return _this2.$refs.timepicker.ajustScrollTop();\n\t });\n\t },\n\t selectionMode: function selectionMode(newVal) {\n\t if (newVal === 'month') {\n\t /* istanbul ignore next */\n\t if (this.currentView !== 'year' || this.currentView !== 'month') {\n\t this.currentView = 'month';\n\t }\n\t } else if (newVal === 'week') {\n\t this.week = (0, _util.getWeekNumber)(this.date);\n\t }\n\t },\n\t date: function date(newVal) {\n\t this.year = newVal.getFullYear();\n\t this.month = newVal.getMonth();\n\t if (this.selectionMode === 'week') this.week = (0, _util.getWeekNumber)(newVal);\n\t }\n\t },\n\n\t methods: {\n\t handleClear: function handleClear() {\n\t this.date = this.$options.defaultValue ? new Date(this.$options.defaultValue) : new Date();\n\t this.$emit('pick');\n\t },\n\t resetDate: function resetDate() {\n\t this.date = new Date(this.date);\n\t },\n\t showMonthPicker: function showMonthPicker() {\n\t this.currentView = 'month';\n\t },\n\t showYearPicker: function showYearPicker() {\n\t this.currentView = 'year';\n\t },\n\n\n\t // XXX: 没用到\n\t // handleLabelClick() {\n\t // if (this.currentView === 'date') {\n\t // this.showMonthPicker();\n\t // } else if (this.currentView === 'month') {\n\t // this.showYearPicker();\n\t // }\n\t // },\n\n\t prevMonth: function prevMonth() {\n\t this.month--;\n\t if (this.month < 0) {\n\t this.month = 11;\n\t this.year--;\n\t }\n\t },\n\t nextMonth: function nextMonth() {\n\t this.month++;\n\t if (this.month > 11) {\n\t this.month = 0;\n\t this.year++;\n\t }\n\t },\n\t nextYear: function nextYear() {\n\t if (this.currentView === 'year') {\n\t this.$refs.yearTable.nextTenYear();\n\t } else {\n\t this.year++;\n\t this.date.setFullYear(this.year);\n\t this.resetDate();\n\t }\n\t },\n\t prevYear: function prevYear() {\n\t if (this.currentView === 'year') {\n\t this.$refs.yearTable.prevTenYear();\n\t } else {\n\t this.year--;\n\t this.date.setFullYear(this.year);\n\t this.resetDate();\n\t }\n\t },\n\t handleShortcutClick: function handleShortcutClick(shortcut) {\n\t if (shortcut.onClick) {\n\t shortcut.onClick(this);\n\t }\n\t },\n\t handleTimePick: function handleTimePick(picker, visible, first) {\n\t if (picker) {\n\t var oldDate = new Date(this.date.getTime());\n\t var hour = picker.getHours();\n\t var minute = picker.getMinutes();\n\t var second = picker.getSeconds();\n\t oldDate.setHours(hour);\n\t oldDate.setMinutes(minute);\n\t oldDate.setSeconds(second);\n\t this.date = new Date(oldDate.getTime());\n\t }\n\n\t if (!first) {\n\t this.timePickerVisible = visible;\n\t }\n\t },\n\t handleMonthPick: function handleMonthPick(month) {\n\t this.month = month;\n\t var selectionMode = this.selectionMode;\n\t if (selectionMode !== 'month') {\n\t this.date.setMonth(month);\n\t this.currentView = 'date';\n\t this.resetDate();\n\t } else {\n\t this.date.setMonth(month);\n\t this.year && this.date.setFullYear(this.year);\n\t this.resetDate();\n\t var value = new Date(this.date.getFullYear(), month, 1);\n\t this.$emit('pick', value);\n\t }\n\t },\n\t handleDatePick: function handleDatePick(value) {\n\t if (this.selectionMode === 'day') {\n\t if (!this.showTime) {\n\t this.$emit('pick', new Date(value.getTime()));\n\t }\n\t this.date.setFullYear(value.getFullYear());\n\t this.date.setMonth(value.getMonth(), value.getDate());\n\t } else if (this.selectionMode === 'week') {\n\t this.week = value.week;\n\t this.$emit('pick', value.date);\n\t }\n\n\t this.resetDate();\n\t },\n\t handleYearPick: function handleYearPick(year) {\n\t var close = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t this.year = year;\n\t if (!close) return;\n\n\t this.date.setFullYear(year);\n\t if (this.selectionMode === 'year') {\n\t this.$emit('pick', new Date(year, 0, 1));\n\t } else {\n\t this.currentView = 'month';\n\t }\n\n\t this.resetDate();\n\t },\n\t changeToNow: function changeToNow() {\n\t this.date.setTime(+new Date());\n\t this.$emit('pick', new Date(this.date.getTime()));\n\t this.resetDate();\n\t },\n\t confirm: function confirm() {\n\t this.date.setMilliseconds(0);\n\t this.$emit('pick', this.date);\n\t },\n\t resetView: function resetView() {\n\t if (this.selectionMode === 'month') {\n\t this.currentView = 'month';\n\t } else if (this.selectionMode === 'year') {\n\t this.currentView = 'year';\n\t } else {\n\t this.currentView = 'date';\n\t }\n\n\t if (this.selectionMode !== 'week') {\n\t this.year = this.date.getFullYear();\n\t this.month = this.date.getMonth();\n\t }\n\t }\n\t },\n\n\t components: {\n\t TimePicker: _time2.default, YearTable: _yearTable2.default, MonthTable: _monthTable2.default, DateTable: _dateTable2.default, ElInput: _input2.default\n\t },\n\n\t mounted: function mounted() {\n\t if (this.date && !this.year) {\n\t this.year = this.date.getFullYear();\n\t this.month = this.date.getMonth();\n\t }\n\t },\n\t data: function data() {\n\t return {\n\t popperClass: '',\n\t pickerWidth: 0,\n\t date: this.$options.defaultValue ? new Date(this.$options.defaultValue) : new Date(),\n\t value: '',\n\t showTime: false,\n\t selectionMode: 'day',\n\t shortcuts: '',\n\t visible: false,\n\t currentView: 'date',\n\t disabledDate: '',\n\t firstDayOfWeek: 7,\n\t year: null,\n\t month: null,\n\t week: null,\n\t showWeekNumber: false,\n\t timePickerVisible: false,\n\t width: 0,\n\t format: ''\n\t };\n\t },\n\n\n\t computed: {\n\t footerVisible: function footerVisible() {\n\t return this.showTime;\n\t },\n\n\n\t visibleTime: {\n\t get: function get() {\n\t return (0, _util.formatDate)(this.date, this.timeFormat);\n\t },\n\t set: function set(val) {\n\t if (val) {\n\t var date = (0, _util.parseDate)(val, this.timeFormat);\n\t if (date) {\n\t date.setFullYear(this.date.getFullYear());\n\t date.setMonth(this.date.getMonth());\n\t date.setDate(this.date.getDate());\n\t this.date = date;\n\t this.$refs.timepicker.value = date;\n\t this.timePickerVisible = false;\n\t }\n\t }\n\t }\n\t },\n\n\t visibleDate: {\n\t get: function get() {\n\t return (0, _util.formatDate)(this.date, this.dateFormat);\n\t },\n\t set: function set(val) {\n\t var date = (0, _util.parseDate)(val, this.dateFormat);\n\t if (!date) {\n\t return;\n\t }\n\t if (typeof this.disabledDate === 'function' && this.disabledDate(date)) {\n\t return;\n\t }\n\t date.setHours(this.date.getHours());\n\t date.setMinutes(this.date.getMinutes());\n\t date.setSeconds(this.date.getSeconds());\n\t this.date = date;\n\t this.resetView();\n\t }\n\t },\n\n\t yearLabel: function yearLabel() {\n\t var year = this.year;\n\t if (!year) return '';\n\t var yearTranslation = this.t('el.datepicker.year');\n\t if (this.currentView === 'year') {\n\t var startYear = Math.floor(year / 10) * 10;\n\t if (yearTranslation) {\n\t return startYear + ' ' + yearTranslation + ' - ' + (startYear + 9) + ' ' + yearTranslation;\n\t }\n\t return startYear + ' - ' + (startYear + 9);\n\t }\n\t return this.year + ' ' + yearTranslation;\n\t },\n\t timeFormat: function timeFormat() {\n\t if (this.format && this.format.indexOf('ss') === -1) {\n\t return 'HH:mm';\n\t } else {\n\t return 'HH:mm:ss';\n\t }\n\t },\n\t dateFormat: function dateFormat() {\n\t if (this.format) {\n\t return this.format.replace('HH', '').replace(':mm', '').replace(':ss', '').trim();\n\t } else {\n\t return 'yyyy-MM-dd';\n\t }\n\t }\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 158 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(159),\n\t /* template */\n\t __webpack_require__(163),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 159 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _util = __webpack_require__(153);\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t mixins: [_locale2.default],\n\n\t components: {\n\t TimeSpinner: __webpack_require__(160)\n\t },\n\n\t props: {\n\t pickerWidth: {},\n\t date: {\n\t default: function _default() {\n\t return new Date();\n\t }\n\t },\n\t visible: Boolean\n\t },\n\n\t watch: {\n\t visible: function visible(val) {\n\t this.currentVisible = val;\n\t if (val) {\n\t this.oldHours = this.hours;\n\t this.oldMinutes = this.minutes;\n\t this.oldSeconds = this.seconds;\n\t }\n\t },\n\t pickerWidth: function pickerWidth(val) {\n\t this.width = val;\n\t },\n\t value: function value(newVal) {\n\t var _this = this;\n\n\t var date = void 0;\n\t if (newVal instanceof Date) {\n\t date = (0, _util.limitRange)(newVal, this.selectableRange);\n\t } else if (!newVal) {\n\t date = new Date();\n\t }\n\n\t this.handleChange({\n\t hours: date.getHours(),\n\t minutes: date.getMinutes(),\n\t seconds: date.getSeconds()\n\t });\n\t this.$nextTick(function (_) {\n\t return _this.ajustScrollTop();\n\t });\n\t },\n\t selectableRange: function selectableRange(val) {\n\t this.$refs.spinner.selectableRange = val;\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t popperClass: '',\n\t format: 'HH:mm:ss',\n\t value: '',\n\t hours: 0,\n\t minutes: 0,\n\t seconds: 0,\n\t oldHours: 0,\n\t oldMinutes: 0,\n\t oldSeconds: 0,\n\t selectableRange: [],\n\t currentDate: this.$options.defaultValue || this.date || new Date(),\n\t currentVisible: this.visible || false,\n\t width: this.pickerWidth || 0\n\t };\n\t },\n\n\n\t computed: {\n\t showSeconds: function showSeconds() {\n\t return (this.format || '').indexOf('ss') !== -1;\n\t }\n\t },\n\n\t methods: {\n\t handleClear: function handleClear() {\n\t this.$emit('pick');\n\t },\n\t handleCancel: function handleCancel() {\n\t this.currentDate.setHours(this.oldHours);\n\t this.currentDate.setMinutes(this.oldMinutes);\n\t this.currentDate.setSeconds(this.oldSeconds);\n\t this.hours = this.currentDate.getHours();\n\t this.minutes = this.currentDate.getMinutes();\n\t this.seconds = this.currentDate.getSeconds();\n\t var date = new Date((0, _util.limitRange)(this.currentDate, this.selectableRange, 'HH:mm:ss'));\n\t this.$emit('pick', date);\n\t },\n\t handleChange: function handleChange(date) {\n\t if (date.hours !== undefined) {\n\t this.currentDate.setHours(date.hours);\n\t this.hours = this.currentDate.getHours();\n\t }\n\t if (date.minutes !== undefined) {\n\t this.currentDate.setMinutes(date.minutes);\n\t this.minutes = this.currentDate.getMinutes();\n\t }\n\t if (date.seconds !== undefined) {\n\t this.currentDate.setSeconds(date.seconds);\n\t this.seconds = this.currentDate.getSeconds();\n\t }\n\n\t this.handleConfirm(true);\n\t },\n\t setSelectionRange: function setSelectionRange(start, end) {\n\t this.$emit('select-range', start, end);\n\t },\n\t handleConfirm: function handleConfirm() {\n\t var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\t var first = arguments[1];\n\n\t if (first) return;\n\t var date = new Date((0, _util.limitRange)(this.currentDate, this.selectableRange, 'HH:mm:ss'));\n\t this.$emit('pick', date, visible, first);\n\t },\n\t ajustScrollTop: function ajustScrollTop() {\n\t return this.$refs.spinner.ajustScrollTop();\n\t }\n\t },\n\n\t created: function created() {\n\t this.hours = this.currentDate.getHours();\n\t this.minutes = this.currentDate.getMinutes();\n\t this.seconds = this.currentDate.getSeconds();\n\t },\n\t mounted: function mounted() {\n\t var _this2 = this;\n\n\t this.$nextTick(function () {\n\t return _this2.handleConfirm(true, true);\n\t });\n\t this.$emit('mounted');\n\t }\n\t};\n\n/***/ },\n/* 160 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(161),\n\t /* template */\n\t __webpack_require__(162),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 161 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _util = __webpack_require__(153);\n\n\tvar _scrollbar = __webpack_require__(25);\n\n\tvar _scrollbar2 = _interopRequireDefault(_scrollbar);\n\n\tvar _debounce = __webpack_require__(69);\n\n\tvar _debounce2 = _interopRequireDefault(_debounce);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t components: { ElScrollbar: _scrollbar2.default },\n\n\t props: {\n\t hours: {\n\t type: Number,\n\t default: 0\n\t },\n\n\t minutes: {\n\t type: Number,\n\t default: 0\n\t },\n\n\t seconds: {\n\t type: Number,\n\t default: 0\n\t },\n\n\t showSeconds: {\n\t type: Boolean,\n\t default: true\n\t }\n\t },\n\n\t watch: {\n\t hoursPrivate: function hoursPrivate(newVal, oldVal) {\n\t if (!(newVal >= 0 && newVal <= 23)) {\n\t this.hoursPrivate = oldVal;\n\t }\n\t this.ajustElTop('hour', newVal);\n\t this.$emit('change', { hours: newVal });\n\t },\n\t minutesPrivate: function minutesPrivate(newVal, oldVal) {\n\t if (!(newVal >= 0 && newVal <= 59)) {\n\t this.minutesPrivate = oldVal;\n\t }\n\t this.ajustElTop('minute', newVal);\n\t this.$emit('change', { minutes: newVal });\n\t },\n\t secondsPrivate: function secondsPrivate(newVal, oldVal) {\n\t if (!(newVal >= 0 && newVal <= 59)) {\n\t this.secondsPrivate = oldVal;\n\t }\n\t this.ajustElTop('second', newVal);\n\t this.$emit('change', { seconds: newVal });\n\t }\n\t },\n\n\t computed: {\n\t hoursList: function hoursList() {\n\t return (0, _util.getRangeHours)(this.selectableRange);\n\t },\n\t hourEl: function hourEl() {\n\t return this.$refs.hour.wrap;\n\t },\n\t minuteEl: function minuteEl() {\n\t return this.$refs.minute.wrap;\n\t },\n\t secondEl: function secondEl() {\n\t return this.$refs.second.wrap;\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t hoursPrivate: 0,\n\t minutesPrivate: 0,\n\t secondsPrivate: 0,\n\t selectableRange: []\n\t };\n\t },\n\t created: function created() {\n\t var _this = this;\n\n\t this.debounceAjustElTop = (0, _debounce2.default)(100, function (type) {\n\t return _this.ajustElTop(type, _this[type + 's']);\n\t });\n\t },\n\t mounted: function mounted() {\n\t var _this2 = this;\n\n\t this.$nextTick(function () {\n\t _this2.bindScrollEvent();\n\t });\n\t },\n\n\n\t methods: {\n\t handleClick: function handleClick(type, value, disabled) {\n\t if (value.disabled) {\n\t return;\n\t }\n\n\t this[type + 'Private'] = value.value >= 0 ? value.value : value;\n\n\t this.emitSelectRange(type);\n\t },\n\t emitSelectRange: function emitSelectRange(type) {\n\t if (type === 'hours') {\n\t this.$emit('select-range', 0, 2);\n\t } else if (type === 'minutes') {\n\t this.$emit('select-range', 3, 5);\n\t } else if (type === 'seconds') {\n\t this.$emit('select-range', 6, 8);\n\t }\n\t },\n\t bindScrollEvent: function bindScrollEvent() {\n\t var _this3 = this;\n\n\t var bindFuntion = function bindFuntion(type) {\n\t _this3[type + 'El'].onscroll = function (e) {\n\t return _this3.handleScroll(type, e);\n\t };\n\t };\n\t bindFuntion('hour');\n\t bindFuntion('minute');\n\t bindFuntion('second');\n\t },\n\t handleScroll: function handleScroll(type) {\n\t var ajust = {};\n\t ajust[type + 's'] = Math.min(Math.floor((this[type + 'El'].scrollTop - 80) / 32 + 3), '' + type === 'hour' ? 23 : 59);\n\t this.debounceAjustElTop(type);\n\t this.$emit('change', ajust);\n\t },\n\t ajustScrollTop: function ajustScrollTop() {\n\t this.ajustElTop('hour', this.hours);\n\t this.ajustElTop('minute', this.minutes);\n\t this.ajustElTop('second', this.seconds);\n\t },\n\t ajustElTop: function ajustElTop(type, value) {\n\t this[type + 'El'].scrollTop = Math.max(0, (value - 2.5) * 32 + 80);\n\t }\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 162 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-time-spinner\",\n\t class: {\n\t 'has-seconds': _vm.showSeconds\n\t }\n\t }, [_c('el-scrollbar', {\n\t ref: \"hour\",\n\t staticClass: \"el-time-spinner__wrapper\",\n\t attrs: {\n\t \"wrap-style\": \"max-height: inherit;\",\n\t \"view-class\": \"el-time-spinner__list\",\n\t \"noresize\": \"\",\n\t \"tag\": \"ul\"\n\t },\n\t nativeOn: {\n\t \"mouseenter\": function($event) {\n\t _vm.emitSelectRange('hours')\n\t }\n\t }\n\t }, _vm._l((_vm.hoursList), function(disabled, hour) {\n\t return _c('li', {\n\t staticClass: \"el-time-spinner__item\",\n\t class: {\n\t 'active': hour === _vm.hours, 'disabled': disabled\n\t },\n\t attrs: {\n\t \"track-by\": \"hour\"\n\t },\n\t domProps: {\n\t \"textContent\": _vm._s(hour)\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handleClick('hours', {\n\t value: hour,\n\t disabled: disabled\n\t }, true)\n\t }\n\t }\n\t })\n\t })), _c('el-scrollbar', {\n\t ref: \"minute\",\n\t staticClass: \"el-time-spinner__wrapper\",\n\t attrs: {\n\t \"wrap-style\": \"max-height: inherit;\",\n\t \"view-class\": \"el-time-spinner__list\",\n\t \"noresize\": \"\",\n\t \"tag\": \"ul\"\n\t },\n\t nativeOn: {\n\t \"mouseenter\": function($event) {\n\t _vm.emitSelectRange('minutes')\n\t }\n\t }\n\t }, _vm._l((60), function(minute, key) {\n\t return _c('li', {\n\t staticClass: \"el-time-spinner__item\",\n\t class: {\n\t 'active': key === _vm.minutes\n\t },\n\t domProps: {\n\t \"textContent\": _vm._s(key)\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handleClick('minutes', key, true)\n\t }\n\t }\n\t })\n\t })), _c('el-scrollbar', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.showSeconds),\n\t expression: \"showSeconds\"\n\t }],\n\t ref: \"second\",\n\t staticClass: \"el-time-spinner__wrapper\",\n\t attrs: {\n\t \"wrap-style\": \"max-height: inherit;\",\n\t \"view-class\": \"el-time-spinner__list\",\n\t \"noresize\": \"\",\n\t \"tag\": \"ul\"\n\t },\n\t nativeOn: {\n\t \"mouseenter\": function($event) {\n\t _vm.emitSelectRange('seconds')\n\t }\n\t }\n\t }, _vm._l((60), function(second, key) {\n\t return _c('li', {\n\t staticClass: \"el-time-spinner__item\",\n\t class: {\n\t 'active': key === _vm.seconds\n\t },\n\t domProps: {\n\t \"textContent\": _vm._s(key)\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handleClick('seconds', key, true)\n\t }\n\t }\n\t })\n\t }))], 1)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 163 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"el-zoom-in-top\"\n\t },\n\t on: {\n\t \"after-leave\": function($event) {\n\t _vm.$emit('dodestroy')\n\t }\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.currentVisible),\n\t expression: \"currentVisible\"\n\t }],\n\t staticClass: \"el-time-panel\",\n\t class: _vm.popperClass,\n\t style: ({\n\t width: _vm.width + 'px'\n\t })\n\t }, [_c('div', {\n\t staticClass: \"el-time-panel__content\",\n\t class: {\n\t 'has-seconds': _vm.showSeconds\n\t }\n\t }, [_c('time-spinner', {\n\t ref: \"spinner\",\n\t attrs: {\n\t \"show-seconds\": _vm.showSeconds,\n\t \"hours\": _vm.hours,\n\t \"minutes\": _vm.minutes,\n\t \"seconds\": _vm.seconds\n\t },\n\t on: {\n\t \"change\": _vm.handleChange,\n\t \"select-range\": _vm.setSelectionRange\n\t }\n\t })], 1), _c('div', {\n\t staticClass: \"el-time-panel__footer\"\n\t }, [_c('button', {\n\t staticClass: \"el-time-panel__btn cancel\",\n\t attrs: {\n\t \"type\": \"button\"\n\t },\n\t on: {\n\t \"click\": _vm.handleCancel\n\t }\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.cancel')))]), _c('button', {\n\t staticClass: \"el-time-panel__btn confirm\",\n\t attrs: {\n\t \"type\": \"button\"\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handleConfirm()\n\t }\n\t }\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.confirm')))])])])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 164 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(165),\n\t /* template */\n\t __webpack_require__(166),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 165 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _dom = __webpack_require__(44);\n\n\texports.default = {\n\t props: {\n\t disabledDate: {},\n\t date: {},\n\t year: {}\n\t },\n\n\t computed: {\n\t startYear: function startYear() {\n\t return Math.floor(this.year / 10) * 10;\n\t }\n\t },\n\n\t methods: {\n\t getCellStyle: function getCellStyle(year) {\n\t var style = {};\n\n\t var date = new Date(year, 0, 1, 0);\n\t var nextYear = new Date(date);\n\t nextYear.setFullYear(year + 1);\n\n\t var flag = false;\n\t if (typeof this.disabledDate === 'function') {\n\n\t while (date < nextYear) {\n\t if (this.disabledDate(date)) {\n\t date = new Date(date.getTime() + 8.64e7);\n\t } else {\n\t break;\n\t }\n\t }\n\t if (date - nextYear === 0) flag = true;\n\t }\n\n\t style.disabled = flag;\n\t style.current = Number(this.year) === year;\n\n\t return style;\n\t },\n\t nextTenYear: function nextTenYear() {\n\t this.$emit('pick', Number(this.year) + 10, false);\n\t },\n\t prevTenYear: function prevTenYear() {\n\t this.$emit('pick', Number(this.year) - 10, false);\n\t },\n\t handleYearTableClick: function handleYearTableClick(event) {\n\t var target = event.target;\n\t if (target.tagName === 'A') {\n\t if ((0, _dom.hasClass)(target.parentNode, 'disabled')) return;\n\t var year = target.textContent || target.innerText;\n\t this.$emit('pick', Number(year));\n\t }\n\t }\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 166 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('table', {\n\t staticClass: \"el-year-table\",\n\t on: {\n\t \"click\": _vm.handleYearTableClick\n\t }\n\t }, [_c('tbody', [_c('tr', [_c('td', {\n\t staticClass: \"available\",\n\t class: _vm.getCellStyle(_vm.startYear + 0)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.startYear))])]), _c('td', {\n\t staticClass: \"available\",\n\t class: _vm.getCellStyle(_vm.startYear + 1)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.startYear + 1))])]), _c('td', {\n\t staticClass: \"available\",\n\t class: _vm.getCellStyle(_vm.startYear + 2)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.startYear + 2))])]), _c('td', {\n\t staticClass: \"available\",\n\t class: _vm.getCellStyle(_vm.startYear + 3)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.startYear + 3))])])]), _c('tr', [_c('td', {\n\t staticClass: \"available\",\n\t class: _vm.getCellStyle(_vm.startYear + 4)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.startYear + 4))])]), _c('td', {\n\t staticClass: \"available\",\n\t class: _vm.getCellStyle(_vm.startYear + 5)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.startYear + 5))])]), _c('td', {\n\t staticClass: \"available\",\n\t class: _vm.getCellStyle(_vm.startYear + 6)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.startYear + 6))])]), _c('td', {\n\t staticClass: \"available\",\n\t class: _vm.getCellStyle(_vm.startYear + 7)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.startYear + 7))])])]), _c('tr', [_c('td', {\n\t staticClass: \"available\",\n\t class: _vm.getCellStyle(_vm.startYear + 8)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.startYear + 8))])]), _c('td', {\n\t staticClass: \"available\",\n\t class: _vm.getCellStyle(_vm.startYear + 9)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.startYear + 9))])]), _c('td'), _c('td')])])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 167 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(168),\n\t /* template */\n\t __webpack_require__(169),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 168 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tvar _dom = __webpack_require__(44);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t props: {\n\t disabledDate: {},\n\t date: {},\n\t month: {\n\t type: Number\n\t }\n\t },\n\t mixins: [_locale2.default],\n\t methods: {\n\t getCellStyle: function getCellStyle(month) {\n\t var style = {};\n\n\t var year = this.date.getFullYear();\n\t var date = new Date(0);\n\t date.setFullYear(year);\n\t date.setMonth(month, 1);\n\t date.setHours(0);\n\t var nextMonth = new Date(date);\n\t nextMonth.setMonth(month + 1);\n\n\t var flag = false;\n\t if (typeof this.disabledDate === 'function') {\n\n\t while (date < nextMonth) {\n\t if (this.disabledDate(date)) {\n\t date = new Date(date.getTime() + 8.64e7);\n\t flag = true;\n\t } else {\n\t flag = false;\n\t break;\n\t }\n\t }\n\t }\n\n\t style.disabled = flag;\n\t style.current = this.month === month;\n\n\t return style;\n\t },\n\t handleMonthTableClick: function handleMonthTableClick(event) {\n\t var target = event.target;\n\t if (target.tagName !== 'A') return;\n\t if ((0, _dom.hasClass)(target.parentNode, 'disabled')) return;\n\t var column = target.parentNode.cellIndex;\n\t var row = target.parentNode.parentNode.rowIndex;\n\t var month = row * 4 + column;\n\n\t this.$emit('pick', month);\n\t }\n\t }\n\t};\n\n/***/ },\n/* 169 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('table', {\n\t staticClass: \"el-month-table\",\n\t on: {\n\t \"click\": _vm.handleMonthTableClick\n\t }\n\t }, [_c('tbody', [_c('tr', [_c('td', {\n\t class: _vm.getCellStyle(0)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.months.jan')))])]), _c('td', {\n\t class: _vm.getCellStyle(1)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.months.feb')))])]), _c('td', {\n\t class: _vm.getCellStyle(2)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.months.mar')))])]), _c('td', {\n\t class: _vm.getCellStyle(3)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.months.apr')))])])]), _c('tr', [_c('td', {\n\t class: _vm.getCellStyle(4)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.months.may')))])]), _c('td', {\n\t class: _vm.getCellStyle(5)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.months.jun')))])]), _c('td', {\n\t class: _vm.getCellStyle(6)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.months.jul')))])]), _c('td', {\n\t class: _vm.getCellStyle(7)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.months.aug')))])])]), _c('tr', [_c('td', {\n\t class: _vm.getCellStyle(8)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.months.sep')))])]), _c('td', {\n\t class: _vm.getCellStyle(9)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.months.oct')))])]), _c('td', {\n\t class: _vm.getCellStyle(10)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.months.nov')))])]), _c('td', {\n\t class: _vm.getCellStyle(11)\n\t }, [_c('a', {\n\t staticClass: \"cell\"\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.months.dec')))])])])])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 170 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(171),\n\t /* template */\n\t __webpack_require__(172),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 171 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _util = __webpack_require__(153);\n\n\tvar _dom = __webpack_require__(44);\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar _WEEKS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\tvar clearHours = function clearHours(time) {\n\t var cloneDate = new Date(time);\n\t cloneDate.setHours(0, 0, 0, 0);\n\t return cloneDate.getTime();\n\t};\n\n\texports.default = {\n\t mixins: [_locale2.default],\n\n\t props: {\n\t firstDayOfWeek: {\n\t default: 7,\n\t type: Number,\n\t validator: function validator(val) {\n\t return val >= 1 && val <= 7;\n\t }\n\t },\n\n\t date: {},\n\n\t year: {},\n\n\t month: {},\n\n\t week: {},\n\n\t selectionMode: {\n\t default: 'day'\n\t },\n\n\t showWeekNumber: {\n\t type: Boolean,\n\t default: false\n\t },\n\n\t disabledDate: {},\n\n\t minDate: {},\n\n\t maxDate: {},\n\n\t rangeState: {\n\t default: function _default() {\n\t return {\n\t endDate: null,\n\t selecting: false,\n\t row: null,\n\t column: null\n\t };\n\t }\n\t }\n\t },\n\n\t computed: {\n\t offsetDay: function offsetDay() {\n\t var week = this.firstDayOfWeek;\n\t // 周日为界限,左右偏移的天数,3217654 例如周一就是 -1,目的是调整前两行日期的位置\n\t return week > 3 ? 7 - week : -week;\n\t },\n\t WEEKS: function WEEKS() {\n\t var week = this.firstDayOfWeek;\n\t return _WEEKS.concat(_WEEKS).slice(week, week + 7);\n\t },\n\t monthDate: function monthDate() {\n\t return this.date.getDate();\n\t },\n\t startDate: function startDate() {\n\t return (0, _util.getStartDateOfMonth)(this.year, this.month);\n\t },\n\t rows: function rows() {\n\t var date = new Date(this.year, this.month, 1);\n\t var day = (0, _util.getFirstDayOfMonth)(date); // day of first day\n\t var dateCountOfMonth = (0, _util.getDayCountOfMonth)(date.getFullYear(), date.getMonth());\n\t var dateCountOfLastMonth = (0, _util.getDayCountOfMonth)(date.getFullYear(), date.getMonth() === 0 ? 11 : date.getMonth() - 1);\n\n\t day = day === 0 ? 7 : day;\n\n\t var offset = this.offsetDay;\n\t var rows = this.tableRows;\n\t var count = 1;\n\t var firstDayPosition = void 0;\n\n\t var startDate = this.startDate;\n\t var disabledDate = this.disabledDate;\n\t var now = clearHours(new Date());\n\n\t for (var i = 0; i < 6; i++) {\n\t var row = rows[i];\n\n\t if (this.showWeekNumber) {\n\t if (!row[0]) {\n\t row[0] = { type: 'week', text: (0, _util.getWeekNumber)(new Date(startDate.getTime() + _util.DAY_DURATION * (i * 7 + 1))) };\n\t }\n\t }\n\n\t for (var j = 0; j < 7; j++) {\n\t var cell = row[this.showWeekNumber ? j + 1 : j];\n\t if (!cell) {\n\t cell = { row: i, column: j, type: 'normal', inRange: false, start: false, end: false };\n\t }\n\n\t cell.type = 'normal';\n\n\t var index = i * 7 + j;\n\t var time = startDate.getTime() + _util.DAY_DURATION * (index - offset);\n\t cell.inRange = time >= clearHours(this.minDate) && time <= clearHours(this.maxDate);\n\t cell.start = this.minDate && time === clearHours(this.minDate);\n\t cell.end = this.maxDate && time === clearHours(this.maxDate);\n\t var isToday = time === now;\n\n\t if (isToday) {\n\t cell.type = 'today';\n\t }\n\n\t if (i >= 0 && i <= 1) {\n\t if (j + i * 7 >= day + offset) {\n\t cell.text = count++;\n\t if (count === 2) {\n\t firstDayPosition = i * 7 + j;\n\t }\n\t } else {\n\t cell.text = dateCountOfLastMonth - (day + offset - j % 7) + 1 + i * 7;\n\t cell.type = 'prev-month';\n\t }\n\t } else {\n\t if (count <= dateCountOfMonth) {\n\t cell.text = count++;\n\t if (count === 2) {\n\t firstDayPosition = i * 7 + j;\n\t }\n\t } else {\n\t cell.text = count++ - dateCountOfMonth;\n\t cell.type = 'next-month';\n\t }\n\t }\n\n\t cell.disabled = typeof disabledDate === 'function' && disabledDate(new Date(time));\n\n\t this.$set(row, this.showWeekNumber ? j + 1 : j, cell);\n\t }\n\n\t if (this.selectionMode === 'week') {\n\t var start = this.showWeekNumber ? 1 : 0;\n\t var end = this.showWeekNumber ? 7 : 6;\n\t var isWeekActive = this.isWeekActive(row[start + 1]);\n\n\t row[start].inRange = isWeekActive;\n\t row[start].start = isWeekActive;\n\t row[end].inRange = isWeekActive;\n\t row[end].end = isWeekActive;\n\t }\n\t }\n\n\t rows.firstDayPosition = firstDayPosition;\n\n\t return rows;\n\t }\n\t },\n\n\t watch: {\n\t 'rangeState.endDate': function rangeStateEndDate(newVal) {\n\t this.markRange(newVal);\n\t },\n\t minDate: function minDate(newVal, oldVal) {\n\t if (newVal && !oldVal) {\n\t this.rangeState.selecting = true;\n\t this.markRange(newVal);\n\t } else if (!newVal) {\n\t this.rangeState.selecting = false;\n\t this.markRange(newVal);\n\t } else {\n\t this.markRange();\n\t }\n\t },\n\t maxDate: function maxDate(newVal, oldVal) {\n\t if (newVal && !oldVal) {\n\t this.rangeState.selecting = false;\n\t this.markRange(newVal);\n\t this.$emit('pick', {\n\t minDate: this.minDate,\n\t maxDate: this.maxDate\n\t });\n\t }\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t tableRows: [[], [], [], [], [], []]\n\t };\n\t },\n\n\n\t methods: {\n\t getCellClasses: function getCellClasses(cell) {\n\t var selectionMode = this.selectionMode;\n\t var monthDate = this.monthDate;\n\n\t var classes = [];\n\t if ((cell.type === 'normal' || cell.type === 'today') && !cell.disabled) {\n\t classes.push('available');\n\t if (cell.type === 'today') {\n\t classes.push('today');\n\t }\n\t } else {\n\t classes.push(cell.type);\n\t }\n\n\t if (selectionMode === 'day' && (cell.type === 'normal' || cell.type === 'today') && Number(this.year) === this.date.getFullYear() && this.month === this.date.getMonth() && monthDate === Number(cell.text)) {\n\t classes.push('current');\n\t }\n\n\t if (cell.inRange && (cell.type === 'normal' || cell.type === 'today' || this.selectionMode === 'week')) {\n\t classes.push('in-range');\n\n\t if (cell.start) {\n\t classes.push('start-date');\n\t }\n\n\t if (cell.end) {\n\t classes.push('end-date');\n\t }\n\t }\n\n\t if (cell.disabled) {\n\t classes.push('disabled');\n\t }\n\n\t return classes.join(' ');\n\t },\n\t getDateOfCell: function getDateOfCell(row, column) {\n\t var startDate = this.startDate;\n\n\t return new Date(startDate.getTime() + (row * 7 + (column - (this.showWeekNumber ? 1 : 0)) - this.offsetDay) * _util.DAY_DURATION);\n\t },\n\t getCellByDate: function getCellByDate(date) {\n\t var startDate = this.startDate;\n\t var rows = this.rows;\n\t var index = (date - startDate) / _util.DAY_DURATION;\n\t var row = rows[Math.floor(index / 7)];\n\n\t if (this.showWeekNumber) {\n\t return row[index % 7 + 1];\n\t } else {\n\t return row[index % 7];\n\t }\n\t },\n\t isWeekActive: function isWeekActive(cell) {\n\t if (this.selectionMode !== 'week') return false;\n\t var newDate = new Date(this.year, this.month, 1);\n\t var year = newDate.getFullYear();\n\t var month = newDate.getMonth();\n\n\t if (cell.type === 'prev-month') {\n\t newDate.setMonth(month === 0 ? 11 : month - 1);\n\t newDate.setFullYear(month === 0 ? year - 1 : year);\n\t }\n\n\t if (cell.type === 'next-month') {\n\t newDate.setMonth(month === 11 ? 0 : month + 1);\n\t newDate.setFullYear(month === 11 ? year + 1 : year);\n\t }\n\n\t newDate.setDate(parseInt(cell.text, 10));\n\n\t return (0, _util.getWeekNumber)(newDate) === this.week;\n\t },\n\t markRange: function markRange(maxDate) {\n\t var startDate = this.startDate;\n\t if (!maxDate) {\n\t maxDate = this.maxDate;\n\t }\n\n\t var rows = this.rows;\n\t var minDate = this.minDate;\n\t for (var i = 0, k = rows.length; i < k; i++) {\n\t var row = rows[i];\n\t for (var j = 0, l = row.length; j < l; j++) {\n\t if (this.showWeekNumber && j === 0) continue;\n\n\t var cell = row[j];\n\t var index = i * 7 + j + (this.showWeekNumber ? -1 : 0);\n\t var time = startDate.getTime() + _util.DAY_DURATION * (index - this.offsetDay);\n\n\t cell.inRange = minDate && time >= clearHours(minDate) && time <= clearHours(maxDate);\n\t cell.start = minDate && time === clearHours(minDate.getTime());\n\t cell.end = maxDate && time === clearHours(maxDate.getTime());\n\t }\n\t }\n\t },\n\t handleMouseMove: function handleMouseMove(event) {\n\t if (!this.rangeState.selecting) return;\n\n\t this.$emit('changerange', {\n\t minDate: this.minDate,\n\t maxDate: this.maxDate,\n\t rangeState: this.rangeState\n\t });\n\n\t var target = event.target;\n\t if (target.tagName !== 'TD') return;\n\n\t var column = target.cellIndex;\n\t var row = target.parentNode.rowIndex - 1;\n\t var _rangeState = this.rangeState,\n\t oldRow = _rangeState.row,\n\t oldColumn = _rangeState.column;\n\n\n\t if (oldRow !== row || oldColumn !== column) {\n\t this.rangeState.row = row;\n\t this.rangeState.column = column;\n\n\t this.rangeState.endDate = this.getDateOfCell(row, column);\n\t }\n\t },\n\t handleClick: function handleClick(event) {\n\t var target = event.target;\n\n\t if (target.tagName !== 'TD') return;\n\t if ((0, _dom.hasClass)(target, 'disabled') || (0, _dom.hasClass)(target, 'week')) return;\n\n\t var selectionMode = this.selectionMode;\n\n\t if (selectionMode === 'week') {\n\t target = target.parentNode.cells[1];\n\t }\n\n\t var year = Number(this.year);\n\t var month = Number(this.month);\n\n\t var cellIndex = target.cellIndex;\n\t var rowIndex = target.parentNode.rowIndex;\n\n\t var cell = this.rows[rowIndex - 1][cellIndex];\n\t var text = cell.text;\n\t var className = target.className;\n\n\t var newDate = new Date(year, month, 1);\n\n\t if (className.indexOf('prev') !== -1) {\n\t if (month === 0) {\n\t year = year - 1;\n\t month = 11;\n\t } else {\n\t month = month - 1;\n\t }\n\t newDate.setFullYear(year);\n\t newDate.setMonth(month);\n\t } else if (className.indexOf('next') !== -1) {\n\t if (month === 11) {\n\t year = year + 1;\n\t month = 0;\n\t } else {\n\t month = month + 1;\n\t }\n\t newDate.setFullYear(year);\n\t newDate.setMonth(month);\n\t }\n\n\t newDate.setDate(parseInt(text, 10));\n\n\t if (this.selectionMode === 'range') {\n\t if (this.minDate && this.maxDate) {\n\t var minDate = new Date(newDate.getTime());\n\t var maxDate = null;\n\n\t this.$emit('pick', { minDate: minDate, maxDate: maxDate }, false);\n\t this.rangeState.selecting = true;\n\t this.markRange(this.minDate);\n\t } else if (this.minDate && !this.maxDate) {\n\t if (newDate >= this.minDate) {\n\t var _maxDate = new Date(newDate.getTime());\n\t this.rangeState.selecting = false;\n\n\t this.$emit('pick', {\n\t minDate: this.minDate,\n\t maxDate: _maxDate\n\t });\n\t } else {\n\t var _minDate = new Date(newDate.getTime());\n\n\t this.$emit('pick', { minDate: _minDate, maxDate: this.maxDate }, false);\n\t }\n\t } else if (!this.minDate) {\n\t var _minDate2 = new Date(newDate.getTime());\n\n\t this.$emit('pick', { minDate: _minDate2, maxDate: this.maxDate }, false);\n\t this.rangeState.selecting = true;\n\t this.markRange(this.minDate);\n\t }\n\t } else if (selectionMode === 'day') {\n\t this.$emit('pick', newDate);\n\t } else if (selectionMode === 'week') {\n\t var weekNumber = (0, _util.getWeekNumber)(newDate);\n\n\t var value = newDate.getFullYear() + 'w' + weekNumber;\n\t this.$emit('pick', {\n\t year: newDate.getFullYear(),\n\t week: weekNumber,\n\t value: value,\n\t date: newDate\n\t });\n\t }\n\t }\n\t }\n\t};\n\n/***/ },\n/* 172 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('table', {\n\t staticClass: \"el-date-table\",\n\t class: {\n\t 'is-week-mode': _vm.selectionMode === 'week'\n\t },\n\t attrs: {\n\t \"cellspacing\": \"0\",\n\t \"cellpadding\": \"0\"\n\t },\n\t on: {\n\t \"click\": _vm.handleClick,\n\t \"mousemove\": _vm.handleMouseMove\n\t }\n\t }, [_c('tbody', [_c('tr', [(_vm.showWeekNumber) ? _c('th', [_vm._v(_vm._s(_vm.t('el.datepicker.week')))]) : _vm._e(), _vm._l((_vm.WEEKS), function(week) {\n\t return _c('th', [_vm._v(_vm._s(_vm.t('el.datepicker.weeks.' + week)))])\n\t })], 2), _vm._l((_vm.rows), function(row) {\n\t return _c('tr', {\n\t staticClass: \"el-date-table__row\",\n\t class: {\n\t current: _vm.isWeekActive(row[1])\n\t }\n\t }, _vm._l((row), function(cell) {\n\t return _c('td', {\n\t class: _vm.getCellClasses(cell),\n\t domProps: {\n\t \"textContent\": _vm._s(cell.type === 'today' ? _vm.t('el.datepicker.today') : cell.text)\n\t }\n\t })\n\t }))\n\t })], 2)])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 173 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"el-zoom-in-top\"\n\t },\n\t on: {\n\t \"after-leave\": function($event) {\n\t _vm.$emit('dodestroy')\n\t }\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible),\n\t expression: \"visible\"\n\t }],\n\t staticClass: \"el-picker-panel el-date-picker\",\n\t class: [{\n\t 'has-sidebar': _vm.$slots.sidebar || _vm.shortcuts,\n\t 'has-time': _vm.showTime\n\t }, _vm.popperClass],\n\t style: ({\n\t width: _vm.width + 'px'\n\t })\n\t }, [_c('div', {\n\t staticClass: \"el-picker-panel__body-wrapper\"\n\t }, [_vm._t(\"sidebar\"), (_vm.shortcuts) ? _c('div', {\n\t staticClass: \"el-picker-panel__sidebar\"\n\t }, _vm._l((_vm.shortcuts), function(shortcut) {\n\t return _c('button', {\n\t staticClass: \"el-picker-panel__shortcut\",\n\t attrs: {\n\t \"type\": \"button\"\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handleShortcutClick(shortcut)\n\t }\n\t }\n\t }, [_vm._v(_vm._s(shortcut.text))])\n\t })) : _vm._e(), _c('div', {\n\t staticClass: \"el-picker-panel__body\"\n\t }, [(_vm.showTime) ? _c('div', {\n\t staticClass: \"el-date-picker__time-header\"\n\t }, [_c('span', {\n\t staticClass: \"el-date-picker__editor-wrap\"\n\t }, [_c('el-input', {\n\t attrs: {\n\t \"placeholder\": _vm.t('el.datepicker.selectDate'),\n\t \"value\": _vm.visibleDate,\n\t \"size\": \"small\"\n\t },\n\t nativeOn: {\n\t \"change\": function($event) {\n\t _vm.visibleDate = $event.target.value\n\t }\n\t }\n\t })], 1), _c('span', {\n\t staticClass: \"el-date-picker__editor-wrap\"\n\t }, [_c('el-input', {\n\t ref: \"input\",\n\t attrs: {\n\t \"placeholder\": _vm.t('el.datepicker.selectTime'),\n\t \"value\": _vm.visibleTime,\n\t \"size\": \"small\"\n\t },\n\t on: {\n\t \"focus\": function($event) {\n\t _vm.timePickerVisible = !_vm.timePickerVisible\n\t }\n\t },\n\t nativeOn: {\n\t \"change\": function($event) {\n\t _vm.visibleTime = $event.target.value\n\t }\n\t }\n\t }), _c('time-picker', {\n\t ref: \"timepicker\",\n\t attrs: {\n\t \"date\": _vm.date,\n\t \"picker-width\": _vm.pickerWidth,\n\t \"visible\": _vm.timePickerVisible\n\t },\n\t on: {\n\t \"pick\": _vm.handleTimePick,\n\t \"mounted\": function($event) {\n\t _vm.$refs.timepicker.format = _vm.timeFormat\n\t }\n\t }\n\t })], 1)]) : _vm._e(), _c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.currentView !== 'time'),\n\t expression: \"currentView !== 'time'\"\n\t }],\n\t staticClass: \"el-date-picker__header\"\n\t }, [_c('button', {\n\t staticClass: \"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left\",\n\t attrs: {\n\t \"type\": \"button\"\n\t },\n\t on: {\n\t \"click\": _vm.prevYear\n\t }\n\t }), _c('button', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.currentView === 'date'),\n\t expression: \"currentView === 'date'\"\n\t }],\n\t staticClass: \"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-arrow-left\",\n\t attrs: {\n\t \"type\": \"button\"\n\t },\n\t on: {\n\t \"click\": _vm.prevMonth\n\t }\n\t }), _c('span', {\n\t staticClass: \"el-date-picker__header-label\",\n\t on: {\n\t \"click\": _vm.showYearPicker\n\t }\n\t }, [_vm._v(_vm._s(_vm.yearLabel))]), _c('span', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.currentView === 'date'),\n\t expression: \"currentView === 'date'\"\n\t }],\n\t staticClass: \"el-date-picker__header-label\",\n\t class: {\n\t active: _vm.currentView === 'month'\n\t },\n\t on: {\n\t \"click\": _vm.showMonthPicker\n\t }\n\t }, [_vm._v(_vm._s(_vm.t((\"el.datepicker.month\" + (_vm.month + 1)))))]), _c('button', {\n\t staticClass: \"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right\",\n\t attrs: {\n\t \"type\": \"button\"\n\t },\n\t on: {\n\t \"click\": _vm.nextYear\n\t }\n\t }), _c('button', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.currentView === 'date'),\n\t expression: \"currentView === 'date'\"\n\t }],\n\t staticClass: \"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-arrow-right\",\n\t attrs: {\n\t \"type\": \"button\"\n\t },\n\t on: {\n\t \"click\": _vm.nextMonth\n\t }\n\t })]), _c('div', {\n\t staticClass: \"el-picker-panel__content\"\n\t }, [_c('date-table', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.currentView === 'date'),\n\t expression: \"currentView === 'date'\"\n\t }],\n\t attrs: {\n\t \"year\": _vm.year,\n\t \"month\": _vm.month,\n\t \"date\": _vm.date,\n\t \"week\": _vm.week,\n\t \"selection-mode\": _vm.selectionMode,\n\t \"first-day-of-week\": _vm.firstDayOfWeek,\n\t \"disabled-date\": _vm.disabledDate\n\t },\n\t on: {\n\t \"pick\": _vm.handleDatePick\n\t }\n\t }), _c('year-table', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.currentView === 'year'),\n\t expression: \"currentView === 'year'\"\n\t }],\n\t ref: \"yearTable\",\n\t attrs: {\n\t \"year\": _vm.year,\n\t \"date\": _vm.date,\n\t \"disabled-date\": _vm.disabledDate\n\t },\n\t on: {\n\t \"pick\": _vm.handleYearPick\n\t }\n\t }), _c('month-table', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.currentView === 'month'),\n\t expression: \"currentView === 'month'\"\n\t }],\n\t attrs: {\n\t \"month\": _vm.month,\n\t \"date\": _vm.date,\n\t \"disabled-date\": _vm.disabledDate\n\t },\n\t on: {\n\t \"pick\": _vm.handleMonthPick\n\t }\n\t })], 1)])], 2), _c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.footerVisible && _vm.currentView === 'date'),\n\t expression: \"footerVisible && currentView === 'date'\"\n\t }],\n\t staticClass: \"el-picker-panel__footer\"\n\t }, [_c('a', {\n\t staticClass: \"el-picker-panel__link-btn\",\n\t attrs: {\n\t \"href\": \"JavaScript:\"\n\t },\n\t on: {\n\t \"click\": _vm.changeToNow\n\t }\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.now')))]), _c('button', {\n\t staticClass: \"el-picker-panel__btn\",\n\t attrs: {\n\t \"type\": \"button\"\n\t },\n\t on: {\n\t \"click\": _vm.confirm\n\t }\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.confirm')))])])])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 174 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(175),\n\t /* template */\n\t __webpack_require__(176),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 175 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _util = __webpack_require__(153);\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tvar _time = __webpack_require__(158);\n\n\tvar _time2 = _interopRequireDefault(_time);\n\n\tvar _dateTable = __webpack_require__(170);\n\n\tvar _dateTable2 = _interopRequireDefault(_dateTable);\n\n\tvar _input = __webpack_require__(20);\n\n\tvar _input2 = _interopRequireDefault(_input);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar calcDefaultValue = function calcDefaultValue(defaultValue) {\n\t if (Array.isArray(defaultValue)) {\n\t return defaultValue[0] ? new Date(defaultValue[0]) : new Date();\n\t } else {\n\t return new Date(defaultValue);\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t mixins: [_locale2.default],\n\n\t computed: {\n\t btnDisabled: function btnDisabled() {\n\t return !(this.minDate && this.maxDate && !this.selecting);\n\t },\n\t leftLabel: function leftLabel() {\n\t return this.date.getFullYear() + ' ' + this.t('el.datepicker.year') + ' ' + this.t('el.datepicker.month' + (this.date.getMonth() + 1));\n\t },\n\t rightLabel: function rightLabel() {\n\t return this.rightDate.getFullYear() + ' ' + this.t('el.datepicker.year') + ' ' + this.t('el.datepicker.month' + (this.rightDate.getMonth() + 1));\n\t },\n\t leftYear: function leftYear() {\n\t return this.date.getFullYear();\n\t },\n\t leftMonth: function leftMonth() {\n\t return this.date.getMonth();\n\t },\n\t rightYear: function rightYear() {\n\t return this.rightDate.getFullYear();\n\t },\n\t rightMonth: function rightMonth() {\n\t return this.rightDate.getMonth();\n\t },\n\t minVisibleDate: function minVisibleDate() {\n\t return this.minDate ? (0, _util.formatDate)(this.minDate) : '';\n\t },\n\t maxVisibleDate: function maxVisibleDate() {\n\t return this.maxDate || this.minDate ? (0, _util.formatDate)(this.maxDate || this.minDate) : '';\n\t },\n\t minVisibleTime: function minVisibleTime() {\n\t return this.minDate ? (0, _util.formatDate)(this.minDate, 'HH:mm:ss') : '';\n\t },\n\t maxVisibleTime: function maxVisibleTime() {\n\t return this.maxDate || this.minDate ? (0, _util.formatDate)(this.maxDate || this.minDate, 'HH:mm:ss') : '';\n\t },\n\t rightDate: function rightDate() {\n\t var newDate = new Date(this.date);\n\t var month = newDate.getMonth();\n\t newDate.setDate(1);\n\n\t if (month === 11) {\n\t newDate.setFullYear(newDate.getFullYear() + 1);\n\t newDate.setMonth(0);\n\t } else {\n\t newDate.setMonth(month + 1);\n\t }\n\t return newDate;\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t popperClass: '',\n\t minPickerWidth: 0,\n\t maxPickerWidth: 0,\n\t date: this.$options.defaultValue ? calcDefaultValue(this.$options.defaultValue) : new Date(),\n\t minDate: '',\n\t maxDate: '',\n\t rangeState: {\n\t endDate: null,\n\t selecting: false,\n\t row: null,\n\t column: null\n\t },\n\t showTime: false,\n\t shortcuts: '',\n\t value: '',\n\t visible: '',\n\t disabledDate: '',\n\t firstDayOfWeek: 7,\n\t minTimePickerVisible: false,\n\t maxTimePickerVisible: false,\n\t width: 0\n\t };\n\t },\n\n\n\t watch: {\n\t showTime: function showTime(val) {\n\t var _this = this;\n\n\t if (!val) return;\n\t this.$nextTick(function (_) {\n\t var minInputElm = _this.$refs.minInput.$el;\n\t var maxInputElm = _this.$refs.maxInput.$el;\n\t if (minInputElm) {\n\t _this.minPickerWidth = minInputElm.getBoundingClientRect().width + 10;\n\t }\n\t if (maxInputElm) {\n\t _this.maxPickerWidth = maxInputElm.getBoundingClientRect().width + 10;\n\t }\n\t });\n\t },\n\t minDate: function minDate() {\n\t var _this2 = this;\n\n\t this.$nextTick(function () {\n\t if (_this2.maxDate && _this2.maxDate < _this2.minDate) {\n\t var format = 'HH:mm:ss';\n\n\t _this2.$refs.maxTimePicker.selectableRange = [[(0, _util.parseDate)((0, _util.formatDate)(_this2.minDate, format), format), (0, _util.parseDate)('23:59:59', format)]];\n\t }\n\t });\n\t },\n\t minTimePickerVisible: function minTimePickerVisible(val) {\n\t var _this3 = this;\n\n\t if (val) this.$nextTick(function () {\n\t return _this3.$refs.minTimePicker.ajustScrollTop();\n\t });\n\t },\n\t maxTimePickerVisible: function maxTimePickerVisible(val) {\n\t var _this4 = this;\n\n\t if (val) this.$nextTick(function () {\n\t return _this4.$refs.maxTimePicker.ajustScrollTop();\n\t });\n\t },\n\t value: function value(newVal) {\n\t if (!newVal) {\n\t this.minDate = null;\n\t this.maxDate = null;\n\t } else if (Array.isArray(newVal)) {\n\t this.minDate = newVal[0] ? (0, _util.toDate)(newVal[0]) : null;\n\t this.maxDate = newVal[1] ? (0, _util.toDate)(newVal[1]) : null;\n\t if (this.minDate) this.date = new Date(this.minDate);\n\t this.handleConfirm(true);\n\t }\n\t }\n\t },\n\n\t methods: {\n\t handleClear: function handleClear() {\n\t this.minDate = null;\n\t this.maxDate = null;\n\t this.date = this.$options.defaultValue ? calcDefaultValue(this.$options.defaultValue) : new Date();\n\t this.handleConfirm(false);\n\t },\n\t handleDateInput: function handleDateInput(event, type) {\n\t var value = event.target.value;\n\t var parsedValue = (0, _util.parseDate)(value, 'yyyy-MM-dd');\n\n\t if (parsedValue) {\n\t if (typeof this.disabledDate === 'function' && this.disabledDate(new Date(parsedValue))) {\n\t return;\n\t }\n\t var target = new Date(type === 'min' ? this.minDate : this.maxDate);\n\t if (target) {\n\t target.setFullYear(parsedValue.getFullYear());\n\t target.setMonth(parsedValue.getMonth(), parsedValue.getDate());\n\t }\n\t }\n\t },\n\t handleChangeRange: function handleChangeRange(val) {\n\t this.minDate = val.minDate;\n\t this.maxDate = val.maxDate;\n\t this.rangeState = val.rangeState;\n\t },\n\t handleDateChange: function handleDateChange(event, type) {\n\t var value = event.target.value;\n\t var parsedValue = (0, _util.parseDate)(value, 'yyyy-MM-dd');\n\t if (parsedValue) {\n\t var target = new Date(type === 'min' ? this.minDate : this.maxDate);\n\t if (target) {\n\t target.setFullYear(parsedValue.getFullYear());\n\t target.setMonth(parsedValue.getMonth(), parsedValue.getDate());\n\t }\n\t if (type === 'min') {\n\t if (target < this.maxDate) {\n\t this.minDate = new Date(target.getTime());\n\t }\n\t } else {\n\t if (target > this.minDate) {\n\t this.maxDate = new Date(target.getTime());\n\t if (this.minDate && this.minDate > this.maxDate) {\n\t this.minDate = null;\n\t }\n\t }\n\t }\n\t }\n\t },\n\t handleTimeChange: function handleTimeChange(event, type) {\n\t var value = event.target.value;\n\t var parsedValue = (0, _util.parseDate)(value, 'HH:mm:ss');\n\t if (parsedValue) {\n\t var target = new Date(type === 'min' ? this.minDate : this.maxDate);\n\t if (target) {\n\t target.setHours(parsedValue.getHours());\n\t target.setMinutes(parsedValue.getMinutes());\n\t target.setSeconds(parsedValue.getSeconds());\n\t }\n\t if (type === 'min') {\n\t if (target < this.maxDate) {\n\t this.minDate = new Date(target.getTime());\n\t }\n\t } else {\n\t if (target > this.minDate) {\n\t this.maxDate = new Date(target.getTime());\n\t }\n\t }\n\t this.$refs[type + 'TimePicker'].value = target;\n\t this[type + 'TimePickerVisible'] = false;\n\t }\n\t },\n\t handleRangePick: function handleRangePick(val) {\n\t var close = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t if (this.maxDate === val.maxDate && this.minDate === val.minDate) {\n\t return;\n\t }\n\t this.onPick && this.onPick(val);\n\t this.maxDate = val.maxDate;\n\t this.minDate = val.minDate;\n\t if (!close || this.showTime) return;\n\t this.handleConfirm();\n\t },\n\t changeToToday: function changeToToday() {\n\t this.date = new Date();\n\t },\n\t handleShortcutClick: function handleShortcutClick(shortcut) {\n\t if (shortcut.onClick) {\n\t shortcut.onClick(this);\n\t }\n\t },\n\t resetView: function resetView() {\n\t this.minTimePickerVisible = false;\n\t this.maxTimePickerVisible = false;\n\t },\n\t setTime: function setTime(date, value) {\n\t var oldDate = new Date(date.getTime());\n\t var hour = value.getHours();\n\t var minute = value.getMinutes();\n\t var second = value.getSeconds();\n\t oldDate.setHours(hour);\n\t oldDate.setMinutes(minute);\n\t oldDate.setSeconds(second);\n\t return new Date(oldDate.getTime());\n\t },\n\t handleMinTimePick: function handleMinTimePick(value, visible, first) {\n\t this.minDate = this.minDate || new Date();\n\t if (value) {\n\t this.minDate = this.setTime(this.minDate, value);\n\t }\n\n\t if (!first) {\n\t this.minTimePickerVisible = visible;\n\t }\n\t },\n\t handleMaxTimePick: function handleMaxTimePick(value, visible, first) {\n\t if (!this.maxDate) {\n\t var now = new Date();\n\t if (now >= this.minDate) {\n\t this.maxDate = new Date();\n\t }\n\t }\n\n\t if (this.maxDate && value) {\n\t this.maxDate = this.setTime(this.maxDate, value);\n\t }\n\n\t if (!first) {\n\t this.maxTimePickerVisible = visible;\n\t }\n\t },\n\t prevMonth: function prevMonth() {\n\t this.date = (0, _util.prevMonth)(this.date);\n\t },\n\t nextMonth: function nextMonth() {\n\t this.date = (0, _util.nextMonth)(this.date);\n\t },\n\t nextYear: function nextYear() {\n\t var date = this.date;\n\t date.setFullYear(date.getFullYear() + 1);\n\t this.resetDate();\n\t },\n\t prevYear: function prevYear() {\n\t var date = this.date;\n\t date.setFullYear(date.getFullYear() - 1);\n\t this.resetDate();\n\t },\n\t handleConfirm: function handleConfirm() {\n\t var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n\t this.$emit('pick', [this.minDate, this.maxDate], visible);\n\t },\n\t resetDate: function resetDate() {\n\t this.date = new Date(this.date);\n\t }\n\t },\n\n\t components: { TimePicker: _time2.default, DateTable: _dateTable2.default, ElInput: _input2.default }\n\t};\n\n/***/ },\n/* 176 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"el-zoom-in-top\"\n\t },\n\t on: {\n\t \"after-leave\": function($event) {\n\t _vm.$emit('dodestroy')\n\t }\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible),\n\t expression: \"visible\"\n\t }],\n\t staticClass: \"el-picker-panel el-date-range-picker\",\n\t class: [{\n\t 'has-sidebar': _vm.$slots.sidebar || _vm.shortcuts,\n\t 'has-time': _vm.showTime\n\t }, _vm.popperClass],\n\t style: ({\n\t width: _vm.width + 'px'\n\t })\n\t }, [_c('div', {\n\t staticClass: \"el-picker-panel__body-wrapper\"\n\t }, [_vm._t(\"sidebar\"), (_vm.shortcuts) ? _c('div', {\n\t staticClass: \"el-picker-panel__sidebar\"\n\t }, _vm._l((_vm.shortcuts), function(shortcut) {\n\t return _c('button', {\n\t staticClass: \"el-picker-panel__shortcut\",\n\t attrs: {\n\t \"type\": \"button\"\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handleShortcutClick(shortcut)\n\t }\n\t }\n\t }, [_vm._v(_vm._s(shortcut.text))])\n\t })) : _vm._e(), _c('div', {\n\t staticClass: \"el-picker-panel__body\"\n\t }, [(_vm.showTime) ? _c('div', {\n\t staticClass: \"el-date-range-picker__time-header\"\n\t }, [_c('span', {\n\t staticClass: \"el-date-range-picker__editors-wrap\"\n\t }, [_c('span', {\n\t staticClass: \"el-date-range-picker__time-picker-wrap\"\n\t }, [_c('el-input', {\n\t ref: \"minInput\",\n\t staticClass: \"el-date-range-picker__editor\",\n\t attrs: {\n\t \"size\": \"small\",\n\t \"placeholder\": _vm.t('el.datepicker.startDate'),\n\t \"value\": _vm.minVisibleDate\n\t },\n\t nativeOn: {\n\t \"input\": function($event) {\n\t _vm.handleDateInput($event, 'min')\n\t },\n\t \"change\": function($event) {\n\t _vm.handleDateChange($event, 'min')\n\t }\n\t }\n\t })], 1), _c('span', {\n\t staticClass: \"el-date-range-picker__time-picker-wrap\"\n\t }, [_c('el-input', {\n\t staticClass: \"el-date-range-picker__editor\",\n\t attrs: {\n\t \"size\": \"small\",\n\t \"placeholder\": _vm.t('el.datepicker.startTime'),\n\t \"value\": _vm.minVisibleTime\n\t },\n\t on: {\n\t \"focus\": function($event) {\n\t _vm.minTimePickerVisible = !_vm.minTimePickerVisible\n\t }\n\t },\n\t nativeOn: {\n\t \"change\": function($event) {\n\t _vm.handleTimeChange($event, 'min')\n\t }\n\t }\n\t }), _c('time-picker', {\n\t ref: \"minTimePicker\",\n\t attrs: {\n\t \"picker-width\": _vm.minPickerWidth,\n\t \"date\": _vm.minDate,\n\t \"visible\": _vm.minTimePickerVisible\n\t },\n\t on: {\n\t \"pick\": _vm.handleMinTimePick\n\t }\n\t })], 1)]), _c('span', {\n\t staticClass: \"el-icon-arrow-right\"\n\t }), _c('span', {\n\t staticClass: \"el-date-range-picker__editors-wrap is-right\"\n\t }, [_c('span', {\n\t staticClass: \"el-date-range-picker__time-picker-wrap\"\n\t }, [_c('el-input', {\n\t staticClass: \"el-date-range-picker__editor\",\n\t attrs: {\n\t \"size\": \"small\",\n\t \"placeholder\": _vm.t('el.datepicker.endDate'),\n\t \"value\": _vm.maxVisibleDate,\n\t \"readonly\": !_vm.minDate\n\t },\n\t nativeOn: {\n\t \"input\": function($event) {\n\t _vm.handleDateInput($event, 'max')\n\t },\n\t \"change\": function($event) {\n\t _vm.handleDateChange($event, 'max')\n\t }\n\t }\n\t })], 1), _c('span', {\n\t staticClass: \"el-date-range-picker__time-picker-wrap\"\n\t }, [_c('el-input', {\n\t ref: \"maxInput\",\n\t staticClass: \"el-date-range-picker__editor\",\n\t attrs: {\n\t \"size\": \"small\",\n\t \"placeholder\": _vm.t('el.datepicker.endTime'),\n\t \"value\": _vm.maxVisibleTime,\n\t \"readonly\": !_vm.minDate\n\t },\n\t on: {\n\t \"focus\": function($event) {\n\t _vm.minDate && (_vm.maxTimePickerVisible = !_vm.maxTimePickerVisible)\n\t }\n\t },\n\t nativeOn: {\n\t \"change\": function($event) {\n\t _vm.handleTimeChange($event, 'max')\n\t }\n\t }\n\t }), _c('time-picker', {\n\t ref: \"maxTimePicker\",\n\t attrs: {\n\t \"picker-width\": _vm.maxPickerWidth,\n\t \"date\": _vm.maxDate,\n\t \"visible\": _vm.maxTimePickerVisible\n\t },\n\t on: {\n\t \"pick\": _vm.handleMaxTimePick\n\t }\n\t })], 1)])]) : _vm._e(), _c('div', {\n\t staticClass: \"el-picker-panel__content el-date-range-picker__content is-left\"\n\t }, [_c('div', {\n\t staticClass: \"el-date-range-picker__header\"\n\t }, [_c('button', {\n\t staticClass: \"el-picker-panel__icon-btn el-icon-d-arrow-left\",\n\t attrs: {\n\t \"type\": \"button\"\n\t },\n\t on: {\n\t \"click\": _vm.prevYear\n\t }\n\t }), _c('button', {\n\t staticClass: \"el-picker-panel__icon-btn el-icon-arrow-left\",\n\t attrs: {\n\t \"type\": \"button\"\n\t },\n\t on: {\n\t \"click\": _vm.prevMonth\n\t }\n\t }), _c('div', [_vm._v(_vm._s(_vm.leftLabel))])]), _c('date-table', {\n\t attrs: {\n\t \"selection-mode\": \"range\",\n\t \"date\": _vm.date,\n\t \"year\": _vm.leftYear,\n\t \"month\": _vm.leftMonth,\n\t \"min-date\": _vm.minDate,\n\t \"max-date\": _vm.maxDate,\n\t \"range-state\": _vm.rangeState,\n\t \"disabled-date\": _vm.disabledDate,\n\t \"first-day-of-week\": _vm.firstDayOfWeek\n\t },\n\t on: {\n\t \"changerange\": _vm.handleChangeRange,\n\t \"pick\": _vm.handleRangePick\n\t }\n\t })], 1), _c('div', {\n\t staticClass: \"el-picker-panel__content el-date-range-picker__content is-right\"\n\t }, [_c('div', {\n\t staticClass: \"el-date-range-picker__header\"\n\t }, [_c('button', {\n\t staticClass: \"el-picker-panel__icon-btn el-icon-d-arrow-right\",\n\t attrs: {\n\t \"type\": \"button\"\n\t },\n\t on: {\n\t \"click\": _vm.nextYear\n\t }\n\t }), _c('button', {\n\t staticClass: \"el-picker-panel__icon-btn el-icon-arrow-right\",\n\t attrs: {\n\t \"type\": \"button\"\n\t },\n\t on: {\n\t \"click\": _vm.nextMonth\n\t }\n\t }), _c('div', [_vm._v(_vm._s(_vm.rightLabel))])]), _c('date-table', {\n\t attrs: {\n\t \"selection-mode\": \"range\",\n\t \"date\": _vm.rightDate,\n\t \"year\": _vm.rightYear,\n\t \"month\": _vm.rightMonth,\n\t \"min-date\": _vm.minDate,\n\t \"max-date\": _vm.maxDate,\n\t \"range-state\": _vm.rangeState,\n\t \"disabled-date\": _vm.disabledDate,\n\t \"first-day-of-week\": _vm.firstDayOfWeek\n\t },\n\t on: {\n\t \"changerange\": _vm.handleChangeRange,\n\t \"pick\": _vm.handleRangePick\n\t }\n\t })], 1)])], 2), (_vm.showTime) ? _c('div', {\n\t staticClass: \"el-picker-panel__footer\"\n\t }, [_c('a', {\n\t staticClass: \"el-picker-panel__link-btn\",\n\t on: {\n\t \"click\": _vm.handleClear\n\t }\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.clear')))]), _c('button', {\n\t staticClass: \"el-picker-panel__btn\",\n\t attrs: {\n\t \"type\": \"button\",\n\t \"disabled\": _vm.btnDisabled\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handleConfirm()\n\t }\n\t }\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.confirm')))])]) : _vm._e()])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 177 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _timeSelect = __webpack_require__(178);\n\n\tvar _timeSelect2 = _interopRequireDefault(_timeSelect);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_timeSelect2.default.install = function (Vue) {\n\t Vue.component(_timeSelect2.default.name, _timeSelect2.default);\n\t};\n\n\texports.default = _timeSelect2.default;\n\n/***/ },\n/* 178 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _picker = __webpack_require__(151);\n\n\tvar _picker2 = _interopRequireDefault(_picker);\n\n\tvar _timeSelect = __webpack_require__(179);\n\n\tvar _timeSelect2 = _interopRequireDefault(_timeSelect);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t mixins: [_picker2.default],\n\n\t name: 'ElTimeSelect',\n\n\t beforeCreate: function beforeCreate() {\n\t this.type = 'time-select';\n\t this.panel = _timeSelect2.default;\n\t }\n\t};\n\n/***/ },\n/* 179 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(180),\n\t /* template */\n\t __webpack_require__(181),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 180 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _scrollbar = __webpack_require__(25);\n\n\tvar _scrollbar2 = _interopRequireDefault(_scrollbar);\n\n\tvar _scrollIntoView = __webpack_require__(112);\n\n\tvar _scrollIntoView2 = _interopRequireDefault(_scrollIntoView);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\tvar parseTime = function parseTime(time) {\n\t var values = (time || '').split(':');\n\t if (values.length >= 2) {\n\t var hours = parseInt(values[0], 10);\n\t var minutes = parseInt(values[1], 10);\n\n\t return {\n\t hours: hours,\n\t minutes: minutes\n\t };\n\t }\n\t /* istanbul ignore next */\n\t return null;\n\t};\n\n\tvar compareTime = function compareTime(time1, time2) {\n\t var value1 = parseTime(time1);\n\t var value2 = parseTime(time2);\n\n\t var minutes1 = value1.minutes + value1.hours * 60;\n\t var minutes2 = value2.minutes + value2.hours * 60;\n\n\t if (minutes1 === minutes2) {\n\t return 0;\n\t }\n\n\t return minutes1 > minutes2 ? 1 : -1;\n\t};\n\n\tvar formatTime = function formatTime(time) {\n\t return (time.hours < 10 ? '0' + time.hours : time.hours) + ':' + (time.minutes < 10 ? '0' + time.minutes : time.minutes);\n\t};\n\n\tvar nextTime = function nextTime(time, step) {\n\t var timeValue = parseTime(time);\n\t var stepValue = parseTime(step);\n\n\t var next = {\n\t hours: timeValue.hours,\n\t minutes: timeValue.minutes\n\t };\n\n\t next.minutes += stepValue.minutes;\n\t next.hours += stepValue.hours;\n\n\t next.hours += Math.floor(next.minutes / 60);\n\t next.minutes = next.minutes % 60;\n\n\t return formatTime(next);\n\t};\n\n\texports.default = {\n\t components: { ElScrollbar: _scrollbar2.default },\n\n\t watch: {\n\t value: function value(val) {\n\t var _this = this;\n\n\t if (!val) return;\n\t if (this.minTime && compareTime(val, this.minTime) < 0) {\n\t this.$emit('pick');\n\t } else if (this.maxTime && compareTime(val, this.maxTime) > 0) {\n\t this.$emit('pick');\n\t }\n\t this.$nextTick(function () {\n\t return _this.scrollToOption();\n\t });\n\t }\n\t },\n\n\t methods: {\n\t handleClick: function handleClick(item) {\n\t if (!item.disabled) {\n\t this.$emit('pick', item.value);\n\t }\n\t },\n\t handleClear: function handleClear() {\n\t this.$emit('pick');\n\t },\n\t scrollToOption: function scrollToOption() {\n\t var className = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'selected';\n\n\t var menu = this.$refs.popper.querySelector('.el-picker-panel__content');\n\t (0, _scrollIntoView2.default)(menu, menu.getElementsByClassName(className)[0]);\n\t },\n\t handleMenuEnter: function handleMenuEnter() {\n\t var _this2 = this;\n\n\t this.$nextTick(function () {\n\t return _this2.scrollToOption();\n\t });\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t popperClass: '',\n\t start: '09:00',\n\t end: '18:00',\n\t step: '00:30',\n\t value: '',\n\t visible: false,\n\t minTime: '',\n\t maxTime: '',\n\t width: 0\n\t };\n\t },\n\n\n\t computed: {\n\t items: function items() {\n\t var start = this.start;\n\t var end = this.end;\n\t var step = this.step;\n\n\t var result = [];\n\n\t if (start && end && step) {\n\t var current = start;\n\t while (compareTime(current, end) <= 0) {\n\t result.push({\n\t value: current,\n\t disabled: compareTime(current, this.minTime || '-1:-1') <= 0 || compareTime(current, this.maxTime || '100:100') >= 0\n\t });\n\t current = nextTime(current, step);\n\t }\n\t }\n\n\t return result;\n\t }\n\t }\n\t};\n\n/***/ },\n/* 181 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"el-zoom-in-top\"\n\t },\n\t on: {\n\t \"before-enter\": _vm.handleMenuEnter,\n\t \"after-leave\": function($event) {\n\t _vm.$emit('dodestroy')\n\t }\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible),\n\t expression: \"visible\"\n\t }],\n\t ref: \"popper\",\n\t staticClass: \"el-picker-panel time-select\",\n\t class: _vm.popperClass,\n\t style: ({\n\t width: _vm.width + 'px'\n\t })\n\t }, [_c('el-scrollbar', {\n\t attrs: {\n\t \"noresize\": \"\",\n\t \"wrap-class\": \"el-picker-panel__content\"\n\t }\n\t }, _vm._l((_vm.items), function(item) {\n\t return _c('div', {\n\t staticClass: \"time-select-item\",\n\t class: {\n\t selected: _vm.value === item.value, disabled: item.disabled\n\t },\n\t attrs: {\n\t \"disabled\": item.disabled\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handleClick(item)\n\t }\n\t }\n\t }, [_vm._v(_vm._s(item.value))])\n\t }))], 1)])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 182 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _timePicker = __webpack_require__(183);\n\n\tvar _timePicker2 = _interopRequireDefault(_timePicker);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_timePicker2.default.install = function (Vue) {\n\t Vue.component(_timePicker2.default.name, _timePicker2.default);\n\t};\n\n\texports.default = _timePicker2.default;\n\n/***/ },\n/* 183 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _picker = __webpack_require__(151);\n\n\tvar _picker2 = _interopRequireDefault(_picker);\n\n\tvar _time = __webpack_require__(158);\n\n\tvar _time2 = _interopRequireDefault(_time);\n\n\tvar _timeRange = __webpack_require__(184);\n\n\tvar _timeRange2 = _interopRequireDefault(_timeRange);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t mixins: [_picker2.default],\n\n\t name: 'ElTimePicker',\n\n\t props: {\n\t isRange: Boolean\n\t },\n\n\t data: function data() {\n\t return {\n\t type: ''\n\t };\n\t },\n\n\n\t watch: {\n\t isRange: function isRange(_isRange) {\n\t if (this.picker) {\n\t this.unmountPicker();\n\t this.type = _isRange ? 'timerange' : 'time';\n\t this.panel = _isRange ? _timeRange2.default : _time2.default;\n\t this.mountPicker();\n\t } else {\n\t this.type = _isRange ? 'timerange' : 'time';\n\t this.panel = _isRange ? _timeRange2.default : _time2.default;\n\t }\n\t }\n\t },\n\n\t created: function created() {\n\t this.type = this.isRange ? 'timerange' : 'time';\n\t this.panel = this.isRange ? _timeRange2.default : _time2.default;\n\t }\n\t};\n\n/***/ },\n/* 184 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(185),\n\t /* template */\n\t __webpack_require__(186),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 185 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _util = __webpack_require__(153);\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tvar _timeSpinner = __webpack_require__(160);\n\n\tvar _timeSpinner2 = _interopRequireDefault(_timeSpinner);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar MIN_TIME = (0, _util.parseDate)('00:00:00', 'HH:mm:ss'); //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\tvar MAX_TIME = (0, _util.parseDate)('23:59:59', 'HH:mm:ss');\n\tvar isDisabled = function isDisabled(minTime, maxTime) {\n\t var minValue = minTime.getHours() * 3600 + minTime.getMinutes() * 60 + minTime.getSeconds();\n\t var maxValue = maxTime.getHours() * 3600 + maxTime.getMinutes() * 60 + maxTime.getSeconds();\n\n\t return minValue > maxValue;\n\t};\n\tvar clacTime = function clacTime(time) {\n\t time = Array.isArray(time) ? time : [time];\n\t var minTime = time[0] || new Date();\n\t var date = new Date();\n\t date.setHours(date.getHours() + 1);\n\t var maxTime = time[1] || date;\n\n\t if (minTime > maxTime) return clacTime();\n\t return { minTime: minTime, maxTime: maxTime };\n\t};\n\n\texports.default = {\n\t mixins: [_locale2.default],\n\n\t components: { TimeSpinner: _timeSpinner2.default },\n\n\t computed: {\n\t showSeconds: function showSeconds() {\n\t return (this.format || '').indexOf('ss') !== -1;\n\t }\n\t },\n\n\t props: ['value'],\n\n\t data: function data() {\n\t var time = clacTime(this.$options.defaultValue);\n\n\t return {\n\t popperClass: '',\n\t minTime: time.minTime,\n\t maxTime: time.maxTime,\n\t btnDisabled: isDisabled(time.minTime, time.maxTime),\n\t maxHours: time.maxTime.getHours(),\n\t maxMinutes: time.maxTime.getMinutes(),\n\t maxSeconds: time.maxTime.getSeconds(),\n\t minHours: time.minTime.getHours(),\n\t minMinutes: time.minTime.getMinutes(),\n\t minSeconds: time.minTime.getSeconds(),\n\t format: 'HH:mm:ss',\n\t visible: false,\n\t width: 0\n\t };\n\t },\n\n\n\t watch: {\n\t value: function value(newVal) {\n\t var _this = this;\n\n\t this.panelCreated();\n\t this.$nextTick(function (_) {\n\t return _this.ajustScrollTop();\n\t });\n\t }\n\t },\n\n\t methods: {\n\t panelCreated: function panelCreated() {\n\t var time = clacTime(this.value);\n\t if (time.minTime === this.minTime && time.maxTime === this.maxTime) {\n\t return;\n\t }\n\n\t this.handleMinChange({\n\t hours: time.minTime.getHours(),\n\t minutes: time.minTime.getMinutes(),\n\t seconds: time.minTime.getSeconds()\n\t });\n\t this.handleMaxChange({\n\t hours: time.maxTime.getHours(),\n\t minutes: time.maxTime.getMinutes(),\n\t seconds: time.maxTime.getSeconds()\n\t });\n\t },\n\t handleClear: function handleClear() {\n\t this.handleCancel();\n\t },\n\t handleCancel: function handleCancel() {\n\t this.$emit('pick');\n\t },\n\t handleChange: function handleChange() {\n\t if (this.minTime > this.maxTime) return;\n\t MIN_TIME.setFullYear(this.minTime.getFullYear());\n\t MIN_TIME.setMonth(this.minTime.getMonth(), this.minTime.getDate());\n\t MAX_TIME.setFullYear(this.maxTime.getFullYear());\n\t MAX_TIME.setMonth(this.maxTime.getMonth(), this.maxTime.getDate());\n\t this.$refs.minSpinner.selectableRange = [[MIN_TIME, this.maxTime]];\n\t this.$refs.maxSpinner.selectableRange = [[this.minTime, MAX_TIME]];\n\t this.handleConfirm(true);\n\t },\n\t handleMaxChange: function handleMaxChange(date) {\n\t if (date.hours !== undefined) {\n\t this.maxTime.setHours(date.hours);\n\t this.maxHours = this.maxTime.getHours();\n\t }\n\t if (date.minutes !== undefined) {\n\t this.maxTime.setMinutes(date.minutes);\n\t this.maxMinutes = this.maxTime.getMinutes();\n\t }\n\t if (date.seconds !== undefined) {\n\t this.maxTime.setSeconds(date.seconds);\n\t this.maxSeconds = this.maxTime.getSeconds();\n\t }\n\t this.handleChange();\n\t },\n\t handleMinChange: function handleMinChange(date) {\n\t if (date.hours !== undefined) {\n\t this.minTime.setHours(date.hours);\n\t this.minHours = this.minTime.getHours();\n\t }\n\t if (date.minutes !== undefined) {\n\t this.minTime.setMinutes(date.minutes);\n\t this.minMinutes = this.minTime.getMinutes();\n\t }\n\t if (date.seconds !== undefined) {\n\t this.minTime.setSeconds(date.seconds);\n\t this.minSeconds = this.minTime.getSeconds();\n\t }\n\n\t this.handleChange();\n\t },\n\t setMinSelectionRange: function setMinSelectionRange(start, end) {\n\t this.$emit('select-range', start, end);\n\t },\n\t setMaxSelectionRange: function setMaxSelectionRange(start, end) {\n\t this.$emit('select-range', start + 11, end + 11);\n\t },\n\t handleConfirm: function handleConfirm() {\n\t var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\t var first = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t var minSelectableRange = this.$refs.minSpinner.selectableRange;\n\t var maxSelectableRange = this.$refs.maxSpinner.selectableRange;\n\n\t this.minTime = (0, _util.limitRange)(this.minTime, minSelectableRange);\n\t this.maxTime = (0, _util.limitRange)(this.maxTime, maxSelectableRange);\n\n\t if (first) return;\n\t this.$emit('pick', [this.minTime, this.maxTime], visible, first);\n\t },\n\t ajustScrollTop: function ajustScrollTop() {\n\t this.$refs.minSpinner.ajustScrollTop();\n\t this.$refs.maxSpinner.ajustScrollTop();\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t var _this2 = this;\n\n\t this.$nextTick(function () {\n\t return _this2.handleConfirm(true, true);\n\t });\n\t }\n\t};\n\n/***/ },\n/* 186 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"el-zoom-in-top\"\n\t },\n\t on: {\n\t \"before-enter\": _vm.panelCreated,\n\t \"after-leave\": function($event) {\n\t _vm.$emit('dodestroy')\n\t }\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible),\n\t expression: \"visible\"\n\t }],\n\t staticClass: \"el-time-range-picker el-picker-panel\",\n\t class: _vm.popperClass,\n\t style: ({\n\t width: _vm.width + 'px'\n\t })\n\t }, [_c('div', {\n\t staticClass: \"el-time-range-picker__content\"\n\t }, [_c('div', {\n\t staticClass: \"el-time-range-picker__cell\"\n\t }, [_c('div', {\n\t staticClass: \"el-time-range-picker__header\"\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.startTime')))]), _c('div', {\n\t staticClass: \"el-time-range-picker__body el-time-panel__content\",\n\t class: {\n\t 'has-seconds': _vm.showSeconds\n\t }\n\t }, [_c('time-spinner', {\n\t ref: \"minSpinner\",\n\t attrs: {\n\t \"show-seconds\": _vm.showSeconds,\n\t \"hours\": _vm.minHours,\n\t \"minutes\": _vm.minMinutes,\n\t \"seconds\": _vm.minSeconds\n\t },\n\t on: {\n\t \"change\": _vm.handleMinChange,\n\t \"select-range\": _vm.setMinSelectionRange\n\t }\n\t })], 1)]), _c('div', {\n\t staticClass: \"el-time-range-picker__cell\"\n\t }, [_c('div', {\n\t staticClass: \"el-time-range-picker__header\"\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.endTime')))]), _c('div', {\n\t staticClass: \"el-time-range-picker__body el-time-panel__content\",\n\t class: {\n\t 'has-seconds': _vm.showSeconds\n\t }\n\t }, [_c('time-spinner', {\n\t ref: \"maxSpinner\",\n\t attrs: {\n\t \"show-seconds\": _vm.showSeconds,\n\t \"hours\": _vm.maxHours,\n\t \"minutes\": _vm.maxMinutes,\n\t \"seconds\": _vm.maxSeconds\n\t },\n\t on: {\n\t \"change\": _vm.handleMaxChange,\n\t \"select-range\": _vm.setMaxSelectionRange\n\t }\n\t })], 1)])]), _c('div', {\n\t staticClass: \"el-time-panel__footer\"\n\t }, [_c('button', {\n\t staticClass: \"el-time-panel__btn cancel\",\n\t attrs: {\n\t \"type\": \"button\"\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handleCancel()\n\t }\n\t }\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.cancel')))]), _c('button', {\n\t staticClass: \"el-time-panel__btn confirm\",\n\t attrs: {\n\t \"type\": \"button\",\n\t \"disabled\": _vm.btnDisabled\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handleConfirm()\n\t }\n\t }\n\t }, [_vm._v(_vm._s(_vm.t('el.datepicker.confirm')))])])])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 187 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(188);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tvar _directive = __webpack_require__(191);\n\n\tvar _directive2 = _interopRequireDefault(_directive);\n\n\tvar _vue = __webpack_require__(133);\n\n\tvar _vue2 = _interopRequireDefault(_vue);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t_vue2.default.directive('popover', _directive2.default);\n\n\t/* istanbul ignore next */\n\t_main2.default.install = function (Vue) {\n\t Vue.directive('popover', _directive2.default);\n\t Vue.component(_main2.default.name, _main2.default);\n\t};\n\t_main2.default.directive = _directive2.default;\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 188 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(189),\n\t /* template */\n\t __webpack_require__(190),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 189 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vuePopper = __webpack_require__(24);\n\n\tvar _vuePopper2 = _interopRequireDefault(_vuePopper);\n\n\tvar _dom = __webpack_require__(44);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElPopover',\n\n\t mixins: [_vuePopper2.default],\n\n\t props: {\n\t trigger: {\n\t type: String,\n\t default: 'click',\n\t validator: function validator(value) {\n\t return ['click', 'focus', 'hover', 'manual'].indexOf(value) > -1;\n\t }\n\t },\n\t openDelay: {\n\t type: Number,\n\t default: 0\n\t },\n\t title: String,\n\t disabled: Boolean,\n\t content: String,\n\t reference: {},\n\t popperClass: String,\n\t width: {},\n\t visibleArrow: {\n\t default: true\n\t },\n\t transition: {\n\t type: String,\n\t default: 'fade-in-linear'\n\t }\n\t },\n\n\t watch: {\n\t showPopper: function showPopper(newVal, oldVal) {\n\t newVal ? this.$emit('show') : this.$emit('hide');\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t var reference = this.reference || this.$refs.reference;\n\t var popper = this.popper || this.$refs.popper;\n\n\t if (!reference && this.$slots.reference && this.$slots.reference[0]) {\n\t reference = this.referenceElm = this.$slots.reference[0].elm;\n\t }\n\t if (this.trigger === 'click') {\n\t (0, _dom.on)(reference, 'click', this.doToggle);\n\t (0, _dom.on)(document, 'click', this.handleDocumentClick);\n\t } else if (this.trigger === 'hover') {\n\t (0, _dom.on)(reference, 'mouseenter', this.handleMouseEnter);\n\t (0, _dom.on)(popper, 'mouseenter', this.handleMouseEnter);\n\t (0, _dom.on)(reference, 'mouseleave', this.handleMouseLeave);\n\t (0, _dom.on)(popper, 'mouseleave', this.handleMouseLeave);\n\t } else if (this.trigger === 'focus') {\n\t var found = false;\n\n\t if ([].slice.call(reference.children).length) {\n\t var children = reference.childNodes;\n\t var len = children.length;\n\t for (var i = 0; i < len; i++) {\n\t if (children[i].nodeName === 'INPUT' || children[i].nodeName === 'TEXTAREA') {\n\t (0, _dom.on)(children[i], 'focus', this.doShow);\n\t (0, _dom.on)(children[i], 'blur', this.doClose);\n\t found = true;\n\t break;\n\t }\n\t }\n\t }\n\t if (found) return;\n\t if (reference.nodeName === 'INPUT' || reference.nodeName === 'TEXTAREA') {\n\t (0, _dom.on)(reference, 'focus', this.doShow);\n\t (0, _dom.on)(reference, 'blur', this.doClose);\n\t } else {\n\t (0, _dom.on)(reference, 'mousedown', this.doShow);\n\t (0, _dom.on)(reference, 'mouseup', this.doClose);\n\t }\n\t }\n\t },\n\n\n\t methods: {\n\t doToggle: function doToggle() {\n\t this.showPopper = !this.showPopper;\n\t },\n\t doShow: function doShow() {\n\t this.showPopper = true;\n\t },\n\t doClose: function doClose() {\n\t this.showPopper = false;\n\t },\n\t handleMouseEnter: function handleMouseEnter() {\n\t var _this = this;\n\n\t clearTimeout(this._timer);\n\t if (this.openDelay) {\n\t this._timer = setTimeout(function () {\n\t _this.showPopper = true;\n\t }, this.openDelay);\n\t } else {\n\t this.showPopper = true;\n\t }\n\t },\n\t handleMouseLeave: function handleMouseLeave() {\n\t var _this2 = this;\n\n\t clearTimeout(this._timer);\n\t this._timer = setTimeout(function () {\n\t _this2.showPopper = false;\n\t }, 200);\n\t },\n\t handleDocumentClick: function handleDocumentClick(e) {\n\t var reference = this.reference || this.$refs.reference;\n\t var popper = this.popper || this.$refs.popper;\n\n\t if (!reference && this.$slots.reference && this.$slots.reference[0]) {\n\t reference = this.referenceElm = this.$slots.reference[0].elm;\n\t }\n\t if (!this.$el || !reference || this.$el.contains(e.target) || reference.contains(e.target) || !popper || popper.contains(e.target)) return;\n\t this.showPopper = false;\n\t }\n\t },\n\n\t destroyed: function destroyed() {\n\t var reference = this.reference;\n\n\t (0, _dom.off)(reference, 'click', this.doToggle);\n\t (0, _dom.off)(reference, 'mouseup', this.doClose);\n\t (0, _dom.off)(reference, 'mousedown', this.doShow);\n\t (0, _dom.off)(reference, 'focus', this.doShow);\n\t (0, _dom.off)(reference, 'blur', this.doClose);\n\t (0, _dom.off)(reference, 'mouseleave', this.handleMouseLeave);\n\t (0, _dom.off)(reference, 'mouseenter', this.handleMouseEnter);\n\t (0, _dom.off)(document, 'click', this.handleDocumentClick);\n\t }\n\t};\n\n/***/ },\n/* 190 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('span', [_c('transition', {\n\t attrs: {\n\t \"name\": _vm.transition\n\t },\n\t on: {\n\t \"after-leave\": _vm.doDestroy\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (!_vm.disabled && _vm.showPopper),\n\t expression: \"!disabled && showPopper\"\n\t }],\n\t ref: \"popper\",\n\t staticClass: \"el-popover\",\n\t class: [_vm.popperClass],\n\t style: ({\n\t width: _vm.width + 'px'\n\t })\n\t }, [(_vm.title) ? _c('div', {\n\t staticClass: \"el-popover__title\",\n\t domProps: {\n\t \"textContent\": _vm._s(_vm.title)\n\t }\n\t }) : _vm._e(), _vm._t(\"default\", [_vm._v(_vm._s(_vm.content))])], 2)]), _vm._t(\"reference\")], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 191 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\n\texports.__esModule = true;\n\texports.default = {\n\t bind: function bind(el, binding, vnode) {\n\t vnode.context.$refs[binding.arg].$refs.reference = el;\n\t }\n\t};\n\n/***/ },\n/* 192 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(193);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_main2.default.install = function (Vue) {\n\t Vue.component(_main2.default.name, _main2.default);\n\t};\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 193 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vuePopper = __webpack_require__(24);\n\n\tvar _vuePopper2 = _interopRequireDefault(_vuePopper);\n\n\tvar _debounce = __webpack_require__(69);\n\n\tvar _debounce2 = _interopRequireDefault(_debounce);\n\n\tvar _vdom = __webpack_require__(194);\n\n\tvar _vue = __webpack_require__(133);\n\n\tvar _vue2 = _interopRequireDefault(_vue);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElTooltip',\n\n\t mixins: [_vuePopper2.default],\n\n\t props: {\n\t openDelay: {\n\t type: Number,\n\t default: 0\n\t },\n\t disabled: Boolean,\n\t manual: Boolean,\n\t effect: {\n\t type: String,\n\t default: 'dark'\n\t },\n\t popperClass: String,\n\t content: String,\n\t visibleArrow: {\n\t default: true\n\t },\n\t transition: {\n\t type: String,\n\t default: 'el-fade-in-linear'\n\t },\n\t popperOptions: {\n\t default: function _default() {\n\t return {\n\t boundariesPadding: 10,\n\t gpuAcceleration: false\n\t };\n\t }\n\t },\n\t enterable: {\n\t type: Boolean,\n\t default: true\n\t },\n\t hideAfter: {\n\t type: Number,\n\t default: 0\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t timeoutPending: null\n\t };\n\t },\n\t beforeCreate: function beforeCreate() {\n\t var _this = this;\n\n\t if (this.$isServer) return;\n\n\t this.popperVM = new _vue2.default({\n\t data: { node: '' },\n\t render: function render(h) {\n\t return this.node;\n\t }\n\t }).$mount();\n\n\t this.debounceClose = (0, _debounce2.default)(200, function () {\n\t return _this.handleClosePopper();\n\t });\n\t },\n\t render: function render(h) {\n\t var _this2 = this;\n\n\t if (this.popperVM) {\n\t this.popperVM.node = h(\n\t 'transition',\n\t {\n\t attrs: {\n\t name: this.transition\n\t },\n\t on: {\n\t 'afterLeave': this.doDestroy\n\t }\n\t },\n\t [h(\n\t 'div',\n\t {\n\t on: {\n\t 'mouseleave': function mouseleave() {\n\t _this2.setExpectedState(false);_this2.debounceClose();\n\t },\n\t 'mouseenter': function mouseenter() {\n\t _this2.setExpectedState(true);\n\t }\n\t },\n\n\t ref: 'popper',\n\t directives: [{\n\t name: 'show',\n\t value: !this.disabled && this.showPopper\n\t }],\n\n\t 'class': ['el-tooltip__popper', 'is-' + this.effect, this.popperClass] },\n\t [this.$slots.content || this.content]\n\t )]\n\t );\n\t }\n\n\t if (!this.$slots.default || !this.$slots.default.length) return this.$slots.default;\n\n\t var vnode = (0, _vdom.getFirstComponentChild)(this.$slots.default);\n\t if (!vnode) return vnode;\n\t var data = vnode.data = vnode.data || {};\n\t var on = vnode.data.on = vnode.data.on || {};\n\t var nativeOn = vnode.data.nativeOn = vnode.data.nativeOn || {};\n\n\t data.staticClass = this.concatClass(data.staticClass, 'el-tooltip');\n\t on.mouseenter = this.addEventHandle(on.mouseenter, this.show);\n\t on.mouseleave = this.addEventHandle(on.mouseleave, this.hide);\n\t nativeOn.mouseenter = this.addEventHandle(nativeOn.mouseenter, this.show);\n\t nativeOn.mouseleave = this.addEventHandle(nativeOn.mouseleave, this.hide);\n\n\t return vnode;\n\t },\n\t mounted: function mounted() {\n\t this.referenceElm = this.$el;\n\t },\n\n\n\t methods: {\n\t show: function show() {\n\t this.setExpectedState(true);\n\t this.handleShowPopper();\n\t },\n\t hide: function hide() {\n\t this.setExpectedState(false);\n\t this.debounceClose();\n\t },\n\t addEventHandle: function addEventHandle(old, fn) {\n\t if (!old) {\n\t return fn;\n\t } else if (Array.isArray(old)) {\n\t return old.indexOf(fn) > -1 ? old : old.concat(fn);\n\t } else {\n\t return old === fn ? old : [old, fn];\n\t }\n\t },\n\t concatClass: function concatClass(a, b) {\n\t if (a && a.indexOf(b) > -1) return a;\n\t return a ? b ? a + ' ' + b : a : b || '';\n\t },\n\t handleShowPopper: function handleShowPopper() {\n\t var _this3 = this;\n\n\t if (!this.expectedState || this.manual) return;\n\t clearTimeout(this.timeout);\n\t this.timeout = setTimeout(function () {\n\t _this3.showPopper = true;\n\t }, this.openDelay);\n\n\t if (this.hideAfter > 0) {\n\t this.timeoutPending = setTimeout(function () {\n\t _this3.showPopper = false;\n\t }, this.hideAfter);\n\t }\n\t },\n\t handleClosePopper: function handleClosePopper() {\n\t if (this.enterable && this.expectedState || this.manual) return;\n\t clearTimeout(this.timeout);\n\n\t if (this.timeoutPending) {\n\t clearTimeout(this.timeoutPending);\n\t }\n\t this.showPopper = false;\n\t },\n\t setExpectedState: function setExpectedState(expectedState) {\n\t if (expectedState === false) {\n\t clearTimeout(this.timeoutPending);\n\t }\n\t this.expectedState = expectedState;\n\t }\n\t }\n\t};\n\n/***/ },\n/* 194 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(23);\n\n/***/ },\n/* 195 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(196);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 196 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\texports.MessageBox = undefined;\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\tvar _vue = __webpack_require__(133);\n\n\tvar _vue2 = _interopRequireDefault(_vue);\n\n\tvar _main = __webpack_require__(197);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tvar _merge = __webpack_require__(64);\n\n\tvar _merge2 = _interopRequireDefault(_merge);\n\n\tvar _vdom = __webpack_require__(194);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar defaults = {\n\t title: undefined,\n\t message: '',\n\t type: '',\n\t showInput: false,\n\t showClose: true,\n\t modalFade: true,\n\t lockScroll: true,\n\t closeOnClickModal: true,\n\t closeOnPressEscape: true,\n\t inputValue: null,\n\t inputPlaceholder: '',\n\t inputPattern: null,\n\t inputValidator: null,\n\t inputErrorMessage: '',\n\t showConfirmButton: true,\n\t showCancelButton: false,\n\t confirmButtonPosition: 'right',\n\t confirmButtonHighlight: false,\n\t cancelButtonHighlight: false,\n\t confirmButtonText: '',\n\t cancelButtonText: '',\n\t confirmButtonClass: '',\n\t cancelButtonClass: '',\n\t customClass: '',\n\t beforeClose: null\n\t};\n\n\tvar MessageBoxConstructor = _vue2.default.extend(_main2.default);\n\n\tvar currentMsg = void 0,\n\t instance = void 0;\n\tvar msgQueue = [];\n\n\tvar defaultCallback = function defaultCallback(action) {\n\t if (currentMsg) {\n\t var callback = currentMsg.callback;\n\t if (typeof callback === 'function') {\n\t if (instance.showInput) {\n\t callback(instance.inputValue, action);\n\t } else {\n\t callback(action);\n\t }\n\t }\n\t if (currentMsg.resolve) {\n\t if (action === 'confirm') {\n\t if (instance.showInput) {\n\t currentMsg.resolve({ value: instance.inputValue, action: action });\n\t } else {\n\t currentMsg.resolve(action);\n\t }\n\t } else if (action === 'cancel' && currentMsg.reject) {\n\t currentMsg.reject(action);\n\t }\n\t }\n\t }\n\t};\n\n\tvar initInstance = function initInstance() {\n\t instance = new MessageBoxConstructor({\n\t el: document.createElement('div')\n\t });\n\n\t instance.callback = defaultCallback;\n\t};\n\n\tvar showNextMsg = function showNextMsg() {\n\t if (!instance) {\n\t initInstance();\n\t }\n\t instance.action = '';\n\n\t if (!instance.visible || instance.closeTimer) {\n\t if (msgQueue.length > 0) {\n\t (function () {\n\t currentMsg = msgQueue.shift();\n\n\t var options = currentMsg.options;\n\t for (var prop in options) {\n\t if (options.hasOwnProperty(prop)) {\n\t instance[prop] = options[prop];\n\t }\n\t }\n\t if (options.callback === undefined) {\n\t instance.callback = defaultCallback;\n\t }\n\n\t var oldCb = instance.callback;\n\t instance.callback = function (action, instance) {\n\t oldCb(action, instance);\n\t showNextMsg();\n\t };\n\t if ((0, _vdom.isVNode)(instance.message)) {\n\t instance.$slots.default = [instance.message];\n\t instance.message = null;\n\t } else {\n\t delete instance.$slots.default;\n\t }\n\t ['modal', 'showClose', 'closeOnClickModal', 'closeOnPressEscape'].forEach(function (prop) {\n\t if (instance[prop] === undefined) {\n\t instance[prop] = true;\n\t }\n\t });\n\t document.body.appendChild(instance.$el);\n\n\t _vue2.default.nextTick(function () {\n\t instance.visible = true;\n\t });\n\t })();\n\t }\n\t }\n\t};\n\n\tvar MessageBox = function MessageBox(options, callback) {\n\t if (_vue2.default.prototype.$isServer) return;\n\t if (typeof options === 'string') {\n\t options = {\n\t message: options\n\t };\n\t if (arguments[1]) {\n\t options.title = arguments[1];\n\t }\n\t if (arguments[2]) {\n\t options.type = arguments[2];\n\t }\n\t } else if (options.callback && !callback) {\n\t callback = options.callback;\n\t }\n\n\t if (typeof Promise !== 'undefined') {\n\t return new Promise(function (resolve, reject) {\n\t // eslint-disable-line\n\t msgQueue.push({\n\t options: (0, _merge2.default)({}, defaults, MessageBox.defaults, options),\n\t callback: callback,\n\t resolve: resolve,\n\t reject: reject\n\t });\n\n\t showNextMsg();\n\t });\n\t } else {\n\t msgQueue.push({\n\t options: (0, _merge2.default)({}, defaults, MessageBox.defaults, options),\n\t callback: callback\n\t });\n\n\t showNextMsg();\n\t }\n\t};\n\n\tMessageBox.setDefaults = function (defaults) {\n\t MessageBox.defaults = defaults;\n\t};\n\n\tMessageBox.alert = function (message, title, options) {\n\t if ((typeof title === 'undefined' ? 'undefined' : _typeof(title)) === 'object') {\n\t options = title;\n\t title = '';\n\t } else if (title === undefined) {\n\t title = '';\n\t }\n\t return MessageBox((0, _merge2.default)({\n\t title: title,\n\t message: message,\n\t $type: 'alert',\n\t closeOnPressEscape: false,\n\t closeOnClickModal: false\n\t }, options));\n\t};\n\n\tMessageBox.confirm = function (message, title, options) {\n\t if ((typeof title === 'undefined' ? 'undefined' : _typeof(title)) === 'object') {\n\t options = title;\n\t title = '';\n\t } else if (title === undefined) {\n\t title = '';\n\t }\n\t return MessageBox((0, _merge2.default)({\n\t title: title,\n\t message: message,\n\t $type: 'confirm',\n\t showCancelButton: true\n\t }, options));\n\t};\n\n\tMessageBox.prompt = function (message, title, options) {\n\t if ((typeof title === 'undefined' ? 'undefined' : _typeof(title)) === 'object') {\n\t options = title;\n\t title = '';\n\t } else if (title === undefined) {\n\t title = '';\n\t }\n\t return MessageBox((0, _merge2.default)({\n\t title: title,\n\t message: message,\n\t showCancelButton: true,\n\t showInput: true,\n\t $type: 'prompt'\n\t }, options));\n\t};\n\n\tMessageBox.close = function () {\n\t instance.visible = false;\n\t msgQueue = [];\n\t currentMsg = null;\n\t};\n\n\texports.default = MessageBox;\n\texports.MessageBox = MessageBox;\n\n/***/ },\n/* 197 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(198),\n\t /* template */\n\t __webpack_require__(199),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 198 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _popup = __webpack_require__(14);\n\n\tvar _popup2 = _interopRequireDefault(_popup);\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tvar _input = __webpack_require__(20);\n\n\tvar _input2 = _interopRequireDefault(_input);\n\n\tvar _button = __webpack_require__(31);\n\n\tvar _button2 = _interopRequireDefault(_button);\n\n\tvar _dom = __webpack_require__(44);\n\n\tvar _locale3 = __webpack_require__(111);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\tvar typeMap = {\n\t success: 'circle-check',\n\t info: 'information',\n\t warning: 'warning',\n\t error: 'circle-cross'\n\t};\n\n\texports.default = {\n\t mixins: [_popup2.default, _locale2.default],\n\n\t props: {\n\t modal: {\n\t default: true\n\t },\n\t lockScroll: {\n\t default: true\n\t },\n\t showClose: {\n\t type: Boolean,\n\t default: true\n\t },\n\t closeOnClickModal: {\n\t default: true\n\t },\n\t closeOnPressEscape: {\n\t default: true\n\t }\n\t },\n\n\t components: {\n\t ElInput: _input2.default,\n\t ElButton: _button2.default\n\t },\n\n\t computed: {\n\t typeClass: function typeClass() {\n\t return this.type && typeMap[this.type] ? 'el-icon-' + typeMap[this.type] : '';\n\t },\n\t confirmButtonClasses: function confirmButtonClasses() {\n\t return 'el-button--primary ' + this.confirmButtonClass;\n\t },\n\t cancelButtonClasses: function cancelButtonClasses() {\n\t return '' + this.cancelButtonClass;\n\t }\n\t },\n\n\t methods: {\n\t getSafeClose: function getSafeClose() {\n\t var _this = this;\n\n\t var currentId = this.uid;\n\t return function () {\n\t _this.$nextTick(function () {\n\t if (currentId === _this.uid) _this.doClose();\n\t });\n\t };\n\t },\n\t doClose: function doClose() {\n\t var _this2 = this;\n\n\t if (!this.visible) return;\n\t this.visible = false;\n\t this._closing = true;\n\n\t this.onClose && this.onClose();\n\n\t if (this.lockScroll) {\n\t setTimeout(function () {\n\t if (_this2.modal && _this2.bodyOverflow !== 'hidden') {\n\t document.body.style.overflow = _this2.bodyOverflow;\n\t document.body.style.paddingRight = _this2.bodyPaddingRight;\n\t }\n\t _this2.bodyOverflow = null;\n\t _this2.bodyPaddingRight = null;\n\t }, 200);\n\t }\n\t this.opened = false;\n\n\t if (!this.transition) {\n\t this.doAfterClose();\n\t }\n\t if (this.action) this.callback(this.action, this);\n\t },\n\t handleWrapperClick: function handleWrapperClick() {\n\t if (this.closeOnClickModal) {\n\t this.handleAction('cancel');\n\t }\n\t },\n\t handleAction: function handleAction(action) {\n\t if (this.$type === 'prompt' && action === 'confirm' && !this.validate()) {\n\t return;\n\t }\n\t this.action = action;\n\t if (typeof this.beforeClose === 'function') {\n\t this.close = this.getSafeClose();\n\t this.beforeClose(action, this, this.close);\n\t } else {\n\t this.doClose();\n\t }\n\t },\n\t validate: function validate() {\n\t if (this.$type === 'prompt') {\n\t var inputPattern = this.inputPattern;\n\t if (inputPattern && !inputPattern.test(this.inputValue || '')) {\n\t this.editorErrorMessage = this.inputErrorMessage || (0, _locale3.t)('el.messagebox.error');\n\t (0, _dom.addClass)(this.$refs.input.$el.querySelector('input'), 'invalid');\n\t return false;\n\t }\n\t var inputValidator = this.inputValidator;\n\t if (typeof inputValidator === 'function') {\n\t var validateResult = inputValidator(this.inputValue);\n\t if (validateResult === false) {\n\t this.editorErrorMessage = this.inputErrorMessage || (0, _locale3.t)('el.messagebox.error');\n\t (0, _dom.addClass)(this.$refs.input.$el.querySelector('input'), 'invalid');\n\t return false;\n\t }\n\t if (typeof validateResult === 'string') {\n\t this.editorErrorMessage = validateResult;\n\t return false;\n\t }\n\t }\n\t }\n\t this.editorErrorMessage = '';\n\t (0, _dom.removeClass)(this.$refs.input.$el.querySelector('input'), 'invalid');\n\t return true;\n\t }\n\t },\n\n\t watch: {\n\t inputValue: {\n\t immediate: true,\n\t handler: function handler(val) {\n\t var _this3 = this;\n\n\t this.$nextTick(function (_) {\n\t if (_this3.$type === 'prompt' && val !== null) {\n\t _this3.validate();\n\t }\n\t });\n\t }\n\t },\n\n\t visible: function visible(val) {\n\t var _this4 = this;\n\n\t if (val) this.uid++;\n\t if (this.$type === 'alert' || this.$type === 'confirm') {\n\t this.$nextTick(function () {\n\t _this4.$refs.confirm.$el.focus();\n\t });\n\t }\n\t if (this.$type !== 'prompt') return;\n\t if (val) {\n\t setTimeout(function () {\n\t if (_this4.$refs.input && _this4.$refs.input.$el) {\n\t _this4.$refs.input.$el.querySelector('input').focus();\n\t }\n\t }, 500);\n\t } else {\n\t this.editorErrorMessage = '';\n\t (0, _dom.removeClass)(this.$refs.input.$el.querySelector('input'), 'invalid');\n\t }\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t uid: 1,\n\t title: undefined,\n\t message: '',\n\t type: '',\n\t customClass: '',\n\t showInput: false,\n\t inputValue: null,\n\t inputPlaceholder: '',\n\t inputPattern: null,\n\t inputValidator: null,\n\t inputErrorMessage: '',\n\t showConfirmButton: true,\n\t showCancelButton: false,\n\t action: '',\n\t confirmButtonText: '',\n\t cancelButtonText: '',\n\t confirmButtonLoading: false,\n\t cancelButtonLoading: false,\n\t confirmButtonClass: '',\n\t confirmButtonDisabled: false,\n\t cancelButtonClass: '',\n\t editorErrorMessage: null,\n\t callback: null\n\t };\n\t }\n\t};\n\n/***/ },\n/* 199 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"msgbox-fade\"\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible),\n\t expression: \"visible\"\n\t }],\n\t staticClass: \"el-message-box__wrapper\",\n\t attrs: {\n\t \"tabindex\": \"-1\"\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t if ($event.target !== $event.currentTarget) { return null; }\n\t _vm.handleWrapperClick($event)\n\t }\n\t }\n\t }, [_c('div', {\n\t staticClass: \"el-message-box\",\n\t class: _vm.customClass\n\t }, [(_vm.title !== undefined) ? _c('div', {\n\t staticClass: \"el-message-box__header\"\n\t }, [_c('div', {\n\t staticClass: \"el-message-box__title\"\n\t }, [_vm._v(_vm._s(_vm.title))]), (_vm.showClose) ? _c('button', {\n\t staticClass: \"el-message-box__headerbtn\",\n\t attrs: {\n\t \"type\": \"button\",\n\t \"aria-label\": \"Close\"\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handleAction('cancel')\n\t }\n\t }\n\t }, [_c('i', {\n\t staticClass: \"el-message-box__close el-icon-close\"\n\t })]) : _vm._e()]) : _vm._e(), (_vm.message !== '') ? _c('div', {\n\t staticClass: \"el-message-box__content\"\n\t }, [_c('div', {\n\t staticClass: \"el-message-box__status\",\n\t class: [_vm.typeClass]\n\t }), _c('div', {\n\t staticClass: \"el-message-box__message\",\n\t style: ({\n\t 'margin-left': _vm.typeClass ? '50px' : '0'\n\t })\n\t }, [_vm._t(\"default\", [_c('p', [_vm._v(_vm._s(_vm.message))])])], 2), _c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.showInput),\n\t expression: \"showInput\"\n\t }],\n\t staticClass: \"el-message-box__input\"\n\t }, [_c('el-input', {\n\t ref: \"input\",\n\t attrs: {\n\t \"placeholder\": _vm.inputPlaceholder\n\t },\n\t nativeOn: {\n\t \"keyup\": function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"enter\", 13)) { return null; }\n\t _vm.handleAction('confirm')\n\t }\n\t },\n\t model: {\n\t value: (_vm.inputValue),\n\t callback: function($$v) {\n\t _vm.inputValue = $$v\n\t },\n\t expression: \"inputValue\"\n\t }\n\t }), _c('div', {\n\t staticClass: \"el-message-box__errormsg\",\n\t style: ({\n\t visibility: !!_vm.editorErrorMessage ? 'visible' : 'hidden'\n\t })\n\t }, [_vm._v(_vm._s(_vm.editorErrorMessage))])], 1)]) : _vm._e(), _c('div', {\n\t staticClass: \"el-message-box__btns\"\n\t }, [_c('el-button', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.showCancelButton),\n\t expression: \"showCancelButton\"\n\t }],\n\t class: [_vm.cancelButtonClasses],\n\t attrs: {\n\t \"loading\": _vm.cancelButtonLoading\n\t },\n\t nativeOn: {\n\t \"click\": function($event) {\n\t _vm.handleAction('cancel')\n\t }\n\t }\n\t }, [_vm._v(\"\\n \" + _vm._s(_vm.cancelButtonText || _vm.t('el.messagebox.cancel')) + \"\\n \")]), _c('el-button', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.showConfirmButton),\n\t expression: \"showConfirmButton\"\n\t }],\n\t ref: \"confirm\",\n\t class: [_vm.confirmButtonClasses],\n\t attrs: {\n\t \"loading\": _vm.confirmButtonLoading\n\t },\n\t nativeOn: {\n\t \"click\": function($event) {\n\t _vm.handleAction('confirm')\n\t }\n\t }\n\t }, [_vm._v(\"\\n \" + _vm._s(_vm.confirmButtonText || _vm.t('el.messagebox.confirm')) + \"\\n \")])], 1)])])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 200 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _breadcrumb = __webpack_require__(201);\n\n\tvar _breadcrumb2 = _interopRequireDefault(_breadcrumb);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_breadcrumb2.default.install = function (Vue) {\n\t Vue.component(_breadcrumb2.default.name, _breadcrumb2.default);\n\t};\n\n\texports.default = _breadcrumb2.default;\n\n/***/ },\n/* 201 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(202),\n\t /* template */\n\t __webpack_require__(203),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 202 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElBreadcrumb',\n\n\t props: {\n\t separator: {\n\t type: String,\n\t default: '/'\n\t }\n\t }\n\t};\n\n/***/ },\n/* 203 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-breadcrumb\"\n\t }, [_vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 204 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _breadcrumbItem = __webpack_require__(205);\n\n\tvar _breadcrumbItem2 = _interopRequireDefault(_breadcrumbItem);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_breadcrumbItem2.default.install = function (Vue) {\n\t Vue.component(_breadcrumbItem2.default.name, _breadcrumbItem2.default);\n\t};\n\n\texports.default = _breadcrumbItem2.default;\n\n/***/ },\n/* 205 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(206),\n\t /* template */\n\t __webpack_require__(207),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 206 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElBreadcrumbItem',\n\t props: {\n\t to: {},\n\t replace: Boolean\n\t },\n\t data: function data() {\n\t return {\n\t separator: ''\n\t };\n\t },\n\t mounted: function mounted() {\n\t var _this = this;\n\n\t this.separator = this.$parent.separator;\n\t var self = this;\n\t if (this.to) {\n\t var link = this.$refs.link;\n\t link.addEventListener('click', function (_) {\n\t var to = _this.to;\n\t self.replace ? self.$router.replace(to) : self.$router.push(to);\n\t });\n\t }\n\t }\n\t};\n\n/***/ },\n/* 207 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('span', {\n\t staticClass: \"el-breadcrumb__item\"\n\t }, [_c('span', {\n\t ref: \"link\",\n\t staticClass: \"el-breadcrumb__item__inner\"\n\t }, [_vm._t(\"default\")], 2), _c('span', {\n\t staticClass: \"el-breadcrumb__separator\"\n\t }, [_vm._v(_vm._s(_vm.separator))])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 208 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _form = __webpack_require__(209);\n\n\tvar _form2 = _interopRequireDefault(_form);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_form2.default.install = function (Vue) {\n\t Vue.component(_form2.default.name, _form2.default);\n\t};\n\n\texports.default = _form2.default;\n\n/***/ },\n/* 209 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(210),\n\t /* template */\n\t __webpack_require__(211),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 210 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElForm',\n\n\t componentName: 'ElForm',\n\n\t props: {\n\t model: Object,\n\t rules: Object,\n\t labelPosition: String,\n\t labelWidth: String,\n\t labelSuffix: {\n\t type: String,\n\t default: ''\n\t },\n\t inline: Boolean,\n\t showMessage: {\n\t type: Boolean,\n\t default: true\n\t }\n\t },\n\t watch: {\n\t rules: function rules() {\n\t this.validate();\n\t }\n\t },\n\t data: function data() {\n\t return {\n\t fields: []\n\t };\n\t },\n\t created: function created() {\n\t var _this = this;\n\n\t this.$on('el.form.addField', function (field) {\n\t if (field) {\n\t _this.fields.push(field);\n\t }\n\t });\n\t /* istanbul ignore next */\n\t this.$on('el.form.removeField', function (field) {\n\t if (field.prop) {\n\t _this.fields.splice(_this.fields.indexOf(field), 1);\n\t }\n\t });\n\t },\n\n\t methods: {\n\t resetFields: function resetFields() {\n\t if (!this.model) {\n\t (\"production\") !== 'production' && console.warn('[Element Warn][Form]model is required for resetFields to work.');\n\t return;\n\t }\n\t this.fields.forEach(function (field) {\n\t field.resetField();\n\t });\n\t },\n\t validate: function validate(callback) {\n\t var _this2 = this;\n\n\t if (!this.model) {\n\t console.warn('[Element Warn][Form]model is required for validate to work!');\n\t return;\n\t };\n\t var valid = true;\n\t var count = 0;\n\t // 如果需要验证的fields为空,调用验证时立刻返回callback\n\t if (this.fields.length === 0 && callback) {\n\t callback(true);\n\t }\n\t this.fields.forEach(function (field, index) {\n\t field.validate('', function (errors) {\n\t if (errors) {\n\t valid = false;\n\t }\n\t if (typeof callback === 'function' && ++count === _this2.fields.length) {\n\t callback(valid);\n\t }\n\t });\n\t });\n\t },\n\t validateField: function validateField(prop, cb) {\n\t var field = this.fields.filter(function (field) {\n\t return field.prop === prop;\n\t })[0];\n\t if (!field) {\n\t throw new Error('must call validateField with valid prop string!');\n\t }\n\n\t field.validate('', cb);\n\t }\n\t }\n\t};\n\n/***/ },\n/* 211 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('form', {\n\t staticClass: \"el-form\",\n\t class: [\n\t _vm.labelPosition ? 'el-form--label-' + _vm.labelPosition : '', {\n\t 'el-form--inline': _vm.inline\n\t }\n\t ]\n\t }, [_vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 212 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _formItem = __webpack_require__(213);\n\n\tvar _formItem2 = _interopRequireDefault(_formItem);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_formItem2.default.install = function (Vue) {\n\t Vue.component(_formItem2.default.name, _formItem2.default);\n\t};\n\n\texports.default = _formItem2.default;\n\n/***/ },\n/* 213 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(214),\n\t /* template */\n\t __webpack_require__(216),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 214 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _asyncValidator = __webpack_require__(215);\n\n\tvar _asyncValidator2 = _interopRequireDefault(_asyncValidator);\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\tfunction noop() {}\n\n\tfunction getPropByPath(obj, path) {\n\t var tempObj = obj;\n\t path = path.replace(/\\[(\\w+)\\]/g, '.$1');\n\t path = path.replace(/^\\./, '');\n\n\t var keyArr = path.split('.');\n\t var i = 0;\n\n\t for (var len = keyArr.length; i < len - 1; ++i) {\n\t var key = keyArr[i];\n\t if (key in tempObj) {\n\t tempObj = tempObj[key];\n\t } else {\n\t throw new Error('please transfer a valid prop path to form item!');\n\t }\n\t }\n\t return {\n\t o: tempObj,\n\t k: keyArr[i],\n\t v: tempObj[keyArr[i]]\n\t };\n\t}\n\n\texports.default = {\n\t name: 'ElFormItem',\n\n\t componentName: 'ElFormItem',\n\n\t mixins: [_emitter2.default],\n\n\t props: {\n\t label: String,\n\t labelWidth: String,\n\t prop: String,\n\t required: Boolean,\n\t rules: [Object, Array],\n\t error: String,\n\t validateStatus: String,\n\t showMessage: {\n\t type: Boolean,\n\t default: true\n\t }\n\t },\n\t watch: {\n\t error: function error(value) {\n\t this.validateMessage = value;\n\t this.validateState = value ? 'error' : '';\n\t },\n\t validateStatus: function validateStatus(value) {\n\t this.validateState = value;\n\t }\n\t },\n\t computed: {\n\t labelStyle: function labelStyle() {\n\t var ret = {};\n\t if (this.form.labelPosition === 'top') return ret;\n\t var labelWidth = this.labelWidth || this.form.labelWidth;\n\t if (labelWidth) {\n\t ret.width = labelWidth;\n\t }\n\t return ret;\n\t },\n\t contentStyle: function contentStyle() {\n\t var ret = {};\n\t var label = this.label;\n\t if (this.form.labelPosition === 'top' || this.form.inline) return ret;\n\t if (!label && !this.labelWidth && this.isNested) return ret;\n\t var labelWidth = this.labelWidth || this.form.labelWidth;\n\t if (labelWidth) {\n\t ret.marginLeft = labelWidth;\n\t }\n\t return ret;\n\t },\n\t form: function form() {\n\t var parent = this.$parent;\n\t var parentName = parent.$options.componentName;\n\t while (parentName !== 'ElForm') {\n\t if (parentName === 'ElFormItem') {\n\t this.isNested = true;\n\t }\n\t parent = parent.$parent;\n\t parentName = parent.$options.componentName;\n\t }\n\t return parent;\n\t },\n\n\t fieldValue: {\n\t cache: false,\n\t get: function get() {\n\t var model = this.form.model;\n\t if (!model || !this.prop) {\n\t return;\n\t }\n\n\t var path = this.prop;\n\t if (path.indexOf(':') !== -1) {\n\t path = path.replace(/:/, '.');\n\t }\n\n\t return getPropByPath(model, path).v;\n\t }\n\t },\n\t isRequired: function isRequired() {\n\t var rules = this.getRules();\n\t var isRequired = false;\n\n\t if (rules && rules.length) {\n\t rules.every(function (rule) {\n\t if (rule.required) {\n\t isRequired = true;\n\t return false;\n\t }\n\t return true;\n\t });\n\t }\n\t return isRequired;\n\t }\n\t },\n\t data: function data() {\n\t return {\n\t validateState: '',\n\t validateMessage: '',\n\t validateDisabled: false,\n\t validator: {},\n\t isNested: false\n\t };\n\t },\n\n\t methods: {\n\t validate: function validate(trigger) {\n\t var _this = this;\n\n\t var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n\n\t var rules = this.getFilteredRule(trigger);\n\t if (!rules || rules.length === 0) {\n\t callback();\n\t return true;\n\t }\n\n\t this.validateState = 'validating';\n\n\t var descriptor = {};\n\t descriptor[this.prop] = rules;\n\n\t var validator = new _asyncValidator2.default(descriptor);\n\t var model = {};\n\n\t model[this.prop] = this.fieldValue;\n\n\t validator.validate(model, { firstFields: true }, function (errors, fields) {\n\t _this.validateState = !errors ? 'success' : 'error';\n\t _this.validateMessage = errors ? errors[0].message : '';\n\n\t callback(_this.validateMessage);\n\t });\n\t },\n\t resetField: function resetField() {\n\t this.validateState = '';\n\t this.validateMessage = '';\n\n\t var model = this.form.model;\n\t var value = this.fieldValue;\n\t var path = this.prop;\n\t if (path.indexOf(':') !== -1) {\n\t path = path.replace(/:/, '.');\n\t }\n\n\t var prop = getPropByPath(model, path);\n\n\t if (Array.isArray(value)) {\n\t this.validateDisabled = true;\n\t prop.o[prop.k] = [].concat(this.initialValue);\n\t } else {\n\t this.validateDisabled = true;\n\t prop.o[prop.k] = this.initialValue;\n\t }\n\t },\n\t getRules: function getRules() {\n\t var formRules = this.form.rules;\n\t var selfRules = this.rules;\n\n\t formRules = formRules ? formRules[this.prop] : [];\n\n\t return [].concat(selfRules || formRules || []);\n\t },\n\t getFilteredRule: function getFilteredRule(trigger) {\n\t var rules = this.getRules();\n\n\t return rules.filter(function (rule) {\n\t return !rule.trigger || rule.trigger.indexOf(trigger) !== -1;\n\t });\n\t },\n\t onFieldBlur: function onFieldBlur() {\n\t this.validate('blur');\n\t },\n\t onFieldChange: function onFieldChange() {\n\t if (this.validateDisabled) {\n\t this.validateDisabled = false;\n\t return;\n\t }\n\n\t this.validate('change');\n\t }\n\t },\n\t mounted: function mounted() {\n\t if (this.prop) {\n\t this.dispatch('ElForm', 'el.form.addField', [this]);\n\n\t var initialValue = this.fieldValue;\n\t if (Array.isArray(initialValue)) {\n\t initialValue = [].concat(initialValue);\n\t }\n\t Object.defineProperty(this, 'initialValue', {\n\t value: initialValue\n\t });\n\n\t var rules = this.getRules();\n\n\t if (rules.length) {\n\t this.$on('el.form.blur', this.onFieldBlur);\n\t this.$on('el.form.change', this.onFieldChange);\n\t }\n\t }\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t this.dispatch('ElForm', 'el.form.removeField', [this]);\n\t }\n\t};\n\n/***/ },\n/* 215 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(44);\n\n/***/ },\n/* 216 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-form-item\",\n\t class: {\n\t 'is-error': _vm.validateState === 'error',\n\t 'is-validating': _vm.validateState === 'validating',\n\t 'is-required': _vm.isRequired || _vm.required\n\t }\n\t }, [(_vm.label || _vm.$slots.label) ? _c('label', {\n\t staticClass: \"el-form-item__label\",\n\t style: (_vm.labelStyle),\n\t attrs: {\n\t \"for\": _vm.prop\n\t }\n\t }, [_vm._t(\"label\", [_vm._v(_vm._s(_vm.label + _vm.form.labelSuffix))])], 2) : _vm._e(), _c('div', {\n\t staticClass: \"el-form-item__content\",\n\t style: (_vm.contentStyle)\n\t }, [_vm._t(\"default\"), _c('transition', {\n\t attrs: {\n\t \"name\": \"el-zoom-in-top\"\n\t }\n\t }, [(_vm.validateState === 'error' && _vm.showMessage && _vm.form.showMessage) ? _c('div', {\n\t staticClass: \"el-form-item__error\"\n\t }, [_vm._v(_vm._s(_vm.validateMessage))]) : _vm._e()])], 2)])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 217 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _tabs = __webpack_require__(218);\n\n\tvar _tabs2 = _interopRequireDefault(_tabs);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_tabs2.default.install = function (Vue) {\n\t Vue.component(_tabs2.default.name, _tabs2.default);\n\t};\n\n\texports.default = _tabs2.default;\n\n/***/ },\n/* 218 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(219),\n\t /* template */\n\t null,\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 219 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _tabNav = __webpack_require__(220);\n\n\tvar _tabNav2 = _interopRequireDefault(_tabNav);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElTabs',\n\n\t components: {\n\t TabNav: _tabNav2.default\n\t },\n\n\t props: {\n\t type: String,\n\t activeName: String,\n\t closable: Boolean,\n\t addable: Boolean,\n\t value: {},\n\t editable: Boolean\n\t },\n\n\t data: function data() {\n\t return {\n\t currentName: this.value || this.activeName,\n\t panes: []\n\t };\n\t },\n\n\n\t watch: {\n\t activeName: function activeName(value) {\n\t this.setCurrentName(value);\n\t },\n\t value: function value(_value) {\n\t this.setCurrentName(_value);\n\t },\n\t currentName: function currentName(value) {\n\t var _this = this;\n\n\t if (this.$refs.nav) {\n\t this.$nextTick(function (_) {\n\t _this.$refs.nav.scrollToActiveTab();\n\t });\n\t }\n\t }\n\t },\n\n\t methods: {\n\t handleTabClick: function handleTabClick(tab, tabName, event) {\n\t if (tab.disabled) return;\n\t this.setCurrentName(tabName);\n\t this.$emit('tab-click', tab, event);\n\t },\n\t handleTabRemove: function handleTabRemove(pane, ev) {\n\t if (pane.disabled) return;\n\t ev.stopPropagation();\n\t this.$emit('edit', pane.name, 'remove');\n\t this.$emit('tab-remove', pane.name);\n\t },\n\t handleTabAdd: function handleTabAdd() {\n\t this.$emit('edit', null, 'add');\n\t this.$emit('tab-add');\n\t },\n\t setCurrentName: function setCurrentName(value) {\n\t this.currentName = value;\n\t this.$emit('input', value);\n\t },\n\t addPanes: function addPanes(item) {\n\t var index = this.$slots.default.filter(function (item) {\n\t return item.elm.nodeType === 1 && /\\bel-tab-pane\\b/.test(item.elm.className);\n\t }).indexOf(item.$vnode);\n\t this.panes.splice(index, 0, item);\n\t },\n\t removePanes: function removePanes(item) {\n\t var panes = this.panes;\n\t var index = panes.indexOf(item);\n\t if (index > -1) {\n\t panes.splice(index, 1);\n\t }\n\t }\n\t },\n\t render: function render(h) {\n\t var type = this.type,\n\t handleTabClick = this.handleTabClick,\n\t handleTabRemove = this.handleTabRemove,\n\t handleTabAdd = this.handleTabAdd,\n\t currentName = this.currentName,\n\t panes = this.panes,\n\t editable = this.editable,\n\t addable = this.addable;\n\n\n\t var newButton = editable || addable ? h(\n\t 'span',\n\t {\n\t 'class': 'el-tabs__new-tab',\n\t on: {\n\t 'click': handleTabAdd\n\t }\n\t },\n\t [h(\n\t 'i',\n\t { 'class': 'el-icon-plus' },\n\t []\n\t )]\n\t ) : null;\n\n\t var navData = {\n\t props: {\n\t currentName: currentName,\n\t onTabClick: handleTabClick,\n\t onTabRemove: handleTabRemove,\n\t editable: editable,\n\t type: type,\n\t panes: panes\n\t },\n\t ref: 'nav'\n\t };\n\n\t return h(\n\t 'div',\n\t { 'class': {\n\t 'el-tabs': true,\n\t 'el-tabs--card': type === 'card',\n\t 'el-tabs--border-card': type === 'border-card'\n\t } },\n\t [h(\n\t 'div',\n\t { 'class': 'el-tabs__header' },\n\t [newButton, h(\n\t 'tab-nav',\n\t navData,\n\t []\n\t )]\n\t ), h(\n\t 'div',\n\t { 'class': 'el-tabs__content' },\n\t [this.$slots.default]\n\t )]\n\t );\n\t },\n\t created: function created() {\n\t if (!this.currentName) {\n\t this.setCurrentName('0');\n\t }\n\t }\n\t};\n\n/***/ },\n/* 220 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(221),\n\t /* template */\n\t null,\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 221 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _tabBar = __webpack_require__(222);\n\n\tvar _tabBar2 = _interopRequireDefault(_tabBar);\n\n\tvar _resizeEvent = __webpack_require__(110);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tfunction noop() {}\n\n\texports.default = {\n\t name: 'TabNav',\n\n\t components: {\n\t TabBar: _tabBar2.default\n\t },\n\n\t props: {\n\t panes: Array,\n\t currentName: String,\n\t editable: Boolean,\n\t onTabClick: {\n\t type: Function,\n\t default: noop\n\t },\n\t onTabRemove: {\n\t type: Function,\n\t default: noop\n\t },\n\t type: String\n\t },\n\n\t data: function data() {\n\t return {\n\t scrollable: false,\n\t navStyle: {\n\t transform: ''\n\t }\n\t };\n\t },\n\n\n\t methods: {\n\t scrollPrev: function scrollPrev() {\n\t var containerWidth = this.$refs.navScroll.offsetWidth;\n\t var currentOffset = this.getCurrentScrollOffset();\n\n\t if (!currentOffset) return;\n\n\t var newOffset = currentOffset > containerWidth ? currentOffset - containerWidth : 0;\n\n\t this.setOffset(newOffset);\n\t },\n\t scrollNext: function scrollNext() {\n\t var navWidth = this.$refs.nav.offsetWidth;\n\t var containerWidth = this.$refs.navScroll.offsetWidth;\n\t var currentOffset = this.getCurrentScrollOffset();\n\n\t if (navWidth - currentOffset <= containerWidth) return;\n\n\t var newOffset = navWidth - currentOffset > containerWidth * 2 ? currentOffset + containerWidth : navWidth - containerWidth;\n\n\t this.setOffset(newOffset);\n\t },\n\t scrollToActiveTab: function scrollToActiveTab() {\n\t if (!this.scrollable) return;\n\t var nav = this.$refs.nav;\n\t var activeTab = this.$el.querySelector('.is-active');\n\t var navScroll = this.$refs.navScroll;\n\t var activeTabBounding = activeTab.getBoundingClientRect();\n\t var navScrollBounding = navScroll.getBoundingClientRect();\n\t var navBounding = nav.getBoundingClientRect();\n\t var currentOffset = this.getCurrentScrollOffset();\n\t var newOffset = currentOffset;\n\n\t if (activeTabBounding.left < navScrollBounding.left) {\n\t newOffset = currentOffset - (navScrollBounding.left - activeTabBounding.left);\n\t }\n\t if (activeTabBounding.right > navScrollBounding.right) {\n\t newOffset = currentOffset + activeTabBounding.right - navScrollBounding.right;\n\t }\n\t if (navBounding.right < navScrollBounding.right) {\n\t newOffset = nav.offsetWidth - navScrollBounding.width;\n\t }\n\t this.setOffset(Math.max(newOffset, 0));\n\t },\n\t getCurrentScrollOffset: function getCurrentScrollOffset() {\n\t var navStyle = this.navStyle;\n\n\t return navStyle.transform ? Number(navStyle.transform.match(/translateX\\(-(\\d+(\\.\\d+)*)px\\)/)[1]) : 0;\n\t },\n\t setOffset: function setOffset(value) {\n\t this.navStyle.transform = 'translateX(-' + value + 'px)';\n\t },\n\t update: function update() {\n\t var navWidth = this.$refs.nav.offsetWidth;\n\t var containerWidth = this.$refs.navScroll.offsetWidth;\n\t var currentOffset = this.getCurrentScrollOffset();\n\n\t if (containerWidth < navWidth) {\n\t var _currentOffset = this.getCurrentScrollOffset();\n\t this.scrollable = this.scrollable || {};\n\t this.scrollable.prev = _currentOffset;\n\t this.scrollable.next = _currentOffset + containerWidth < navWidth;\n\t if (navWidth - _currentOffset < containerWidth) {\n\t this.setOffset(navWidth - containerWidth);\n\t }\n\t } else {\n\t this.scrollable = false;\n\t if (currentOffset > 0) {\n\t this.setOffset(0);\n\t }\n\t }\n\t }\n\t },\n\n\t updated: function updated() {\n\t this.update();\n\t },\n\t render: function render(h) {\n\t var type = this.type,\n\t panes = this.panes,\n\t editable = this.editable,\n\t onTabClick = this.onTabClick,\n\t onTabRemove = this.onTabRemove,\n\t navStyle = this.navStyle,\n\t scrollable = this.scrollable,\n\t scrollNext = this.scrollNext,\n\t scrollPrev = this.scrollPrev;\n\n\n\t var scrollBtn = scrollable ? [h(\n\t 'span',\n\t { 'class': ['el-tabs__nav-prev', scrollable.prev ? '' : 'is-disabled'], on: {\n\t 'click': scrollPrev\n\t }\n\t },\n\t [h(\n\t 'i',\n\t { 'class': 'el-icon-arrow-left' },\n\t []\n\t )]\n\t ), h(\n\t 'span',\n\t { 'class': ['el-tabs__nav-next', scrollable.next ? '' : 'is-disabled'], on: {\n\t 'click': scrollNext\n\t }\n\t },\n\t [h(\n\t 'i',\n\t { 'class': 'el-icon-arrow-right' },\n\t []\n\t )]\n\t )] : null;\n\n\t var tabs = this._l(panes, function (pane, index) {\n\t var tabName = pane.name || pane.index || index;\n\t var closable = pane.isClosable || editable;\n\n\t pane.index = '' + index;\n\n\t var btnClose = closable ? h(\n\t 'span',\n\t { 'class': 'el-icon-close', on: {\n\t 'click': function click(ev) {\n\t onTabRemove(pane, ev);\n\t }\n\t }\n\t },\n\t []\n\t ) : null;\n\n\t var tabLabelContent = pane.$slots.label || pane.label;\n\t return h(\n\t 'div',\n\t {\n\t 'class': {\n\t 'el-tabs__item': true,\n\t 'is-active': pane.active,\n\t 'is-disabled': pane.disabled,\n\t 'is-closable': closable\n\t },\n\t ref: 'tabs',\n\t refInFor: true,\n\t on: {\n\t 'click': function click(ev) {\n\t onTabClick(pane, tabName, ev);\n\t }\n\t }\n\t },\n\t [tabLabelContent, btnClose]\n\t );\n\t });\n\t return h(\n\t 'div',\n\t { 'class': ['el-tabs__nav-wrap', scrollable ? 'is-scrollable' : ''] },\n\t [scrollBtn, h(\n\t 'div',\n\t { 'class': ['el-tabs__nav-scroll'], ref: 'navScroll' },\n\t [h(\n\t 'div',\n\t { 'class': 'el-tabs__nav', ref: 'nav', style: navStyle },\n\t [!type ? h(\n\t 'tab-bar',\n\t {\n\t attrs: { tabs: panes }\n\t },\n\t []\n\t ) : null, tabs]\n\t )]\n\t )]\n\t );\n\t },\n\t mounted: function mounted() {\n\t (0, _resizeEvent.addResizeListener)(this.$el, this.update);\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t if (this.$el && this.update) (0, _resizeEvent.removeResizeListener)(this.$el, this.update);\n\t }\n\t};\n\n/***/ },\n/* 222 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(223),\n\t /* template */\n\t __webpack_require__(224),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 223 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'TabBar',\n\n\t props: {\n\t tabs: Array\n\t },\n\n\t computed: {\n\t barStyle: {\n\t cache: false,\n\t get: function get() {\n\t var _this = this;\n\n\t if (!this.$parent.$refs.tabs) return {};\n\t var style = {};\n\t var offset = 0;\n\t var tabWidth = 0;\n\n\t this.tabs.every(function (tab, index) {\n\t var $el = _this.$parent.$refs.tabs[index];\n\t if (!$el) {\n\t return false;\n\t }\n\n\t if (!tab.active) {\n\t offset += $el.clientWidth;\n\t return true;\n\t } else {\n\t tabWidth = $el.clientWidth;\n\t return false;\n\t }\n\t });\n\n\t var transform = 'translateX(' + offset + 'px)';\n\t style.width = tabWidth + 'px';\n\t style.transform = transform;\n\t style.msTransform = transform;\n\t style.webkitTransform = transform;\n\n\t return style;\n\t }\n\t }\n\t }\n\t};\n\n/***/ },\n/* 224 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-tabs__active-bar\",\n\t style: (_vm.barStyle)\n\t })\n\t},staticRenderFns: []}\n\n/***/ },\n/* 225 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _tabPane = __webpack_require__(226);\n\n\tvar _tabPane2 = _interopRequireDefault(_tabPane);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_tabPane2.default.install = function (Vue) {\n\t Vue.component(_tabPane2.default.name, _tabPane2.default);\n\t};\n\n\texports.default = _tabPane2.default;\n\n/***/ },\n/* 226 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(227),\n\t /* template */\n\t __webpack_require__(228),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 227 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElTabPane',\n\n\t componentName: 'ElTabPane',\n\n\t props: {\n\t label: String,\n\t labelContent: Function,\n\t name: String,\n\t closable: Boolean,\n\t disabled: Boolean\n\t },\n\n\t data: function data() {\n\t return {\n\t index: null\n\t };\n\t },\n\n\n\t computed: {\n\t isClosable: function isClosable() {\n\t return this.closable || this.$parent.closable;\n\t },\n\t active: function active() {\n\t return this.$parent.currentName === (this.name || this.index);\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t this.$parent.addPanes(this);\n\t },\n\t destroyed: function destroyed() {\n\t if (this.$el && this.$el.parentNode) {\n\t this.$el.parentNode.removeChild(this.$el);\n\t }\n\t this.$parent.removePanes(this);\n\t },\n\n\n\t watch: {\n\t label: function label() {\n\t this.$parent.$forceUpdate();\n\t }\n\t }\n\t};\n\n/***/ },\n/* 228 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.active),\n\t expression: \"active\"\n\t }],\n\t staticClass: \"el-tab-pane\"\n\t }, [_vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 229 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _tag = __webpack_require__(230);\n\n\tvar _tag2 = _interopRequireDefault(_tag);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_tag2.default.install = function (Vue) {\n\t Vue.component(_tag2.default.name, _tag2.default);\n\t};\n\n\texports.default = _tag2.default;\n\n/***/ },\n/* 230 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(231),\n\t /* template */\n\t __webpack_require__(232),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 231 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElTag',\n\t props: {\n\t text: String,\n\t closable: Boolean,\n\t type: String,\n\t hit: Boolean,\n\t closeTransition: Boolean,\n\t color: String\n\t },\n\t methods: {\n\t handleClose: function handleClose(event) {\n\t this.$emit('close', event);\n\t }\n\t }\n\t};\n\n/***/ },\n/* 232 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": _vm.closeTransition ? '' : 'el-zoom-in-center'\n\t }\n\t }, [_c('span', {\n\t staticClass: \"el-tag\",\n\t class: [_vm.type ? 'el-tag--' + _vm.type : '', {\n\t 'is-hit': _vm.hit\n\t }],\n\t style: ({\n\t backgroundColor: _vm.color\n\t })\n\t }, [_vm._t(\"default\"), (_vm.closable) ? _c('i', {\n\t staticClass: \"el-tag__close el-icon-close\",\n\t on: {\n\t \"click\": _vm.handleClose\n\t }\n\t }) : _vm._e()], 2)])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 233 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _tree = __webpack_require__(234);\n\n\tvar _tree2 = _interopRequireDefault(_tree);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_tree2.default.install = function (Vue) {\n\t Vue.component(_tree2.default.name, _tree2.default);\n\t};\n\n\texports.default = _tree2.default;\n\n/***/ },\n/* 234 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(235),\n\t /* template */\n\t __webpack_require__(242),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 235 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _treeStore = __webpack_require__(236);\n\n\tvar _treeStore2 = _interopRequireDefault(_treeStore);\n\n\tvar _locale = __webpack_require__(111);\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElTree',\n\n\t mixins: [_emitter2.default],\n\n\t components: {\n\t ElTreeNode: __webpack_require__(239)\n\t },\n\n\t data: function data() {\n\t return {\n\t store: null,\n\t root: null,\n\t currentNode: null\n\t };\n\t },\n\n\n\t props: {\n\t data: {\n\t type: Array\n\t },\n\t emptyText: {\n\t type: String,\n\t default: function _default() {\n\t return (0, _locale.t)('el.tree.emptyText');\n\t }\n\t },\n\t nodeKey: String,\n\t checkStrictly: Boolean,\n\t defaultExpandAll: Boolean,\n\t expandOnClickNode: {\n\t type: Boolean,\n\t default: true\n\t },\n\t autoExpandParent: {\n\t type: Boolean,\n\t default: true\n\t },\n\t defaultCheckedKeys: Array,\n\t defaultExpandedKeys: Array,\n\t renderContent: Function,\n\t showCheckbox: {\n\t type: Boolean,\n\t default: false\n\t },\n\t props: {\n\t default: function _default() {\n\t return {\n\t children: 'children',\n\t label: 'label',\n\t icon: 'icon',\n\t disabled: 'disabled'\n\t };\n\t }\n\t },\n\t lazy: {\n\t type: Boolean,\n\t default: false\n\t },\n\t highlightCurrent: Boolean,\n\t currentNodeKey: [String, Number],\n\t load: Function,\n\t filterNodeMethod: Function,\n\t accordion: Boolean,\n\t indent: {\n\t type: Number,\n\t default: 16\n\t }\n\t },\n\n\t computed: {\n\t children: {\n\t set: function set(value) {\n\t this.data = value;\n\t },\n\t get: function get() {\n\t return this.data;\n\t }\n\t }\n\t },\n\n\t watch: {\n\t defaultCheckedKeys: function defaultCheckedKeys(newVal) {\n\t this.store.defaultCheckedKeys = newVal;\n\t this.store.setDefaultCheckedKey(newVal);\n\t },\n\t defaultExpandedKeys: function defaultExpandedKeys(newVal) {\n\t this.store.defaultExpandedKeys = newVal;\n\t this.store.setDefaultExpandedKeys(newVal);\n\t },\n\t currentNodeKey: function currentNodeKey(newVal) {\n\t this.store.setCurrentNodeKey(newVal);\n\t this.store.currentNodeKey = newVal;\n\t },\n\t data: function data(newVal) {\n\t this.store.setData(newVal);\n\t }\n\t },\n\n\t methods: {\n\t filter: function filter(value) {\n\t if (!this.filterNodeMethod) throw new Error('[Tree] filterNodeMethod is required when filter');\n\t this.store.filter(value);\n\t },\n\t getNodeKey: function getNodeKey(node, index) {\n\t var nodeKey = this.nodeKey;\n\t if (nodeKey && node) {\n\t return node.data[nodeKey];\n\t }\n\t return index;\n\t },\n\t getCheckedNodes: function getCheckedNodes(leafOnly) {\n\t return this.store.getCheckedNodes(leafOnly);\n\t },\n\t getCheckedKeys: function getCheckedKeys(leafOnly) {\n\t return this.store.getCheckedKeys(leafOnly);\n\t },\n\t setCheckedNodes: function setCheckedNodes(nodes, leafOnly) {\n\t if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in setCheckedNodes');\n\t this.store.setCheckedNodes(nodes, leafOnly);\n\t },\n\t setCheckedKeys: function setCheckedKeys(keys, leafOnly) {\n\t if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in setCheckedNodes');\n\t this.store.setCheckedKeys(keys, leafOnly);\n\t },\n\t setChecked: function setChecked(data, checked, deep) {\n\t this.store.setChecked(data, checked, deep);\n\t },\n\t handleNodeExpand: function handleNodeExpand(nodeData, node, instance) {\n\t this.broadcast('ElTreeNode', 'tree-node-expand', node);\n\t this.$emit('node-expand', nodeData, node, instance);\n\t }\n\t },\n\n\t created: function created() {\n\t this.isTree = true;\n\n\t this.store = new _treeStore2.default({\n\t key: this.nodeKey,\n\t data: this.data,\n\t lazy: this.lazy,\n\t props: this.props,\n\t load: this.load,\n\t currentNodeKey: this.currentNodeKey,\n\t checkStrictly: this.checkStrictly,\n\t defaultCheckedKeys: this.defaultCheckedKeys,\n\t defaultExpandedKeys: this.defaultExpandedKeys,\n\t autoExpandParent: this.autoExpandParent,\n\t defaultExpandAll: this.defaultExpandAll,\n\t filterNodeMethod: this.filterNodeMethod\n\t });\n\n\t this.root = this.store.root;\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 236 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\tvar _node = __webpack_require__(237);\n\n\tvar _node2 = _interopRequireDefault(_node);\n\n\tvar _util = __webpack_require__(238);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\tvar TreeStore = function () {\n\t function TreeStore(options) {\n\t var _this = this;\n\n\t _classCallCheck(this, TreeStore);\n\n\t this.currentNode = null;\n\t this.currentNodeKey = null;\n\n\t for (var option in options) {\n\t if (options.hasOwnProperty(option)) {\n\t this[option] = options[option];\n\t }\n\t }\n\n\t this.nodesMap = {};\n\n\t this.root = new _node2.default({\n\t data: this.data,\n\t store: this\n\t });\n\n\t if (this.lazy && this.load) {\n\t var loadFn = this.load;\n\t loadFn(this.root, function (data) {\n\t _this.root.doCreateChildren(data);\n\t _this._initDefaultCheckedNodes();\n\t });\n\t } else {\n\t this._initDefaultCheckedNodes();\n\t }\n\t }\n\n\t TreeStore.prototype.filter = function filter(value) {\n\t var filterNodeMethod = this.filterNodeMethod;\n\t var traverse = function traverse(node) {\n\t var childNodes = node.root ? node.root.childNodes : node.childNodes;\n\n\t childNodes.forEach(function (child) {\n\t child.visible = filterNodeMethod.call(child, value, child.data, child);\n\n\t traverse(child);\n\t });\n\n\t if (!node.visible && childNodes.length) {\n\t var allHidden = true;\n\n\t childNodes.forEach(function (child) {\n\t if (child.visible) allHidden = false;\n\t });\n\n\t if (node.root) {\n\t node.root.visible = allHidden === false;\n\t } else {\n\t node.visible = allHidden === false;\n\t }\n\t }\n\n\t if (node.visible && !node.isLeaf) node.expand();\n\t };\n\n\t traverse(this);\n\t };\n\n\t TreeStore.prototype.setData = function setData(newVal) {\n\t var instanceChanged = newVal !== this.root.data;\n\t this.root.setData(newVal);\n\t if (instanceChanged) {\n\t this._initDefaultCheckedNodes();\n\t }\n\t };\n\n\t TreeStore.prototype.getNode = function getNode(data) {\n\t var key = (typeof data === 'undefined' ? 'undefined' : _typeof(data)) !== 'object' ? data : (0, _util.getNodeKey)(this.key, data);\n\t return this.nodesMap[key];\n\t };\n\n\t TreeStore.prototype.insertBefore = function insertBefore(data, refData) {\n\t var refNode = this.getNode(refData);\n\t refNode.parent.insertBefore({ data: data }, refNode);\n\t };\n\n\t TreeStore.prototype.insertAfter = function insertAfter(data, refData) {\n\t var refNode = this.getNode(refData);\n\t refNode.parent.insertAfter({ data: data }, refNode);\n\t };\n\n\t TreeStore.prototype.remove = function remove(data) {\n\t var node = this.getNode(data);\n\t if (node) {\n\t node.parent.removeChild(node);\n\t }\n\t };\n\n\t TreeStore.prototype.append = function append(data, parentData) {\n\t var parentNode = parentData ? this.getNode(parentData) : this.root;\n\n\t if (parentNode) {\n\t parentNode.insertChild({ data: data });\n\t }\n\t };\n\n\t TreeStore.prototype._initDefaultCheckedNodes = function _initDefaultCheckedNodes() {\n\t var _this2 = this;\n\n\t var defaultCheckedKeys = this.defaultCheckedKeys || [];\n\t var nodesMap = this.nodesMap;\n\n\t defaultCheckedKeys.forEach(function (checkedKey) {\n\t var node = nodesMap[checkedKey];\n\n\t if (node) {\n\t node.setChecked(true, !_this2.checkStrictly);\n\t }\n\t });\n\t };\n\n\t TreeStore.prototype._initDefaultCheckedNode = function _initDefaultCheckedNode(node) {\n\t var defaultCheckedKeys = this.defaultCheckedKeys || [];\n\n\t if (defaultCheckedKeys.indexOf(node.key) !== -1) {\n\t node.setChecked(true, !this.checkStrictly);\n\t }\n\t };\n\n\t TreeStore.prototype.setDefaultCheckedKey = function setDefaultCheckedKey(newVal) {\n\t if (newVal !== this.defaultCheckedKeys) {\n\t this.defaultCheckedKeys = newVal;\n\t this._initDefaultCheckedNodes();\n\t }\n\t };\n\n\t TreeStore.prototype.registerNode = function registerNode(node) {\n\t var key = this.key;\n\t if (!key || !node || !node.data) return;\n\n\t var nodeKey = node.key;\n\t if (nodeKey !== undefined) this.nodesMap[node.key] = node;\n\t };\n\n\t TreeStore.prototype.deregisterNode = function deregisterNode(node) {\n\t var key = this.key;\n\t if (!key || !node || !node.data) return;\n\n\t delete this.nodesMap[node.key];\n\t };\n\n\t TreeStore.prototype.getCheckedNodes = function getCheckedNodes() {\n\t var leafOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n\t var checkedNodes = [];\n\t var traverse = function traverse(node) {\n\t var childNodes = node.root ? node.root.childNodes : node.childNodes;\n\n\t childNodes.forEach(function (child) {\n\t if (!leafOnly && child.checked || leafOnly && child.isLeaf && child.checked) {\n\t checkedNodes.push(child.data);\n\t }\n\n\t traverse(child);\n\t });\n\t };\n\n\t traverse(this);\n\n\t return checkedNodes;\n\t };\n\n\t TreeStore.prototype.getCheckedKeys = function getCheckedKeys() {\n\t var leafOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n\t var key = this.key;\n\t var allNodes = this._getAllNodes();\n\t var keys = [];\n\t allNodes.forEach(function (node) {\n\t if (!leafOnly || leafOnly && node.isLeaf) {\n\t if (node.checked) {\n\t keys.push((node.data || {})[key]);\n\t }\n\t }\n\t });\n\t return keys;\n\t };\n\n\t TreeStore.prototype._getAllNodes = function _getAllNodes() {\n\t var allNodes = [];\n\t var nodesMap = this.nodesMap;\n\t for (var nodeKey in nodesMap) {\n\t if (nodesMap.hasOwnProperty(nodeKey)) {\n\t allNodes.push(nodesMap[nodeKey]);\n\t }\n\t }\n\n\t return allNodes;\n\t };\n\n\t TreeStore.prototype._setCheckedKeys = function _setCheckedKeys(key) {\n\t var leafOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\t var checkedKeys = arguments[2];\n\n\t var allNodes = this._getAllNodes().sort(function (a, b) {\n\t return b.level - a.level;\n\t });\n\t var cache = Object.create(null);\n\t var keys = Object.keys(checkedKeys);\n\t allNodes.forEach(function (node) {\n\t return node.setChecked(false, false);\n\t });\n\t for (var i = 0, j = allNodes.length; i < j; i++) {\n\t var node = allNodes[i];\n\t var nodeKey = node.data[key].toString();\n\t var checked = keys.indexOf(nodeKey) > -1;\n\t if (!checked) {\n\t if (node.checked && !cache[nodeKey]) {\n\t node.setChecked(false, false);\n\t }\n\t continue;\n\t }\n\n\t var parent = node.parent;\n\t while (parent && parent.level > 0) {\n\t cache[parent.data[key]] = true;\n\t parent = parent.parent;\n\t }\n\n\t if (node.isLeaf || this.checkStrictly) {\n\t node.setChecked(true, false);\n\t continue;\n\t }\n\t node.setChecked(true, true);\n\n\t if (leafOnly) {\n\t (function () {\n\t node.setChecked(false, false);\n\t var traverse = function traverse(node) {\n\t var childNodes = node.childNodes;\n\t childNodes.forEach(function (child) {\n\t if (!child.isLeaf) {\n\t child.setChecked(false, false);\n\t }\n\t traverse(child);\n\t });\n\t };\n\t traverse(node);\n\t })();\n\t }\n\t }\n\t };\n\n\t TreeStore.prototype.setCheckedNodes = function setCheckedNodes(array) {\n\t var leafOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t var key = this.key;\n\t var checkedKeys = {};\n\t array.forEach(function (item) {\n\t checkedKeys[(item || {})[key]] = true;\n\t });\n\n\t this._setCheckedKeys(key, leafOnly, checkedKeys);\n\t };\n\n\t TreeStore.prototype.setCheckedKeys = function setCheckedKeys(keys) {\n\t var leafOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n\t this.defaultCheckedKeys = keys;\n\t var key = this.key;\n\t var checkedKeys = {};\n\t keys.forEach(function (key) {\n\t checkedKeys[key] = true;\n\t });\n\n\t this._setCheckedKeys(key, leafOnly, checkedKeys);\n\t };\n\n\t TreeStore.prototype.setDefaultExpandedKeys = function setDefaultExpandedKeys(keys) {\n\t var _this3 = this;\n\n\t keys = keys || [];\n\t this.defaultExpandedKeys = keys;\n\n\t keys.forEach(function (key) {\n\t var node = _this3.getNode(key);\n\t if (node) node.expand(null, _this3.autoExpandParent);\n\t });\n\t };\n\n\t TreeStore.prototype.setChecked = function setChecked(data, checked, deep) {\n\t var node = this.getNode(data);\n\n\t if (node) {\n\t node.setChecked(!!checked, deep);\n\t }\n\t };\n\n\t TreeStore.prototype.getCurrentNode = function getCurrentNode() {\n\t return this.currentNode;\n\t };\n\n\t TreeStore.prototype.setCurrentNode = function setCurrentNode(node) {\n\t this.currentNode = node;\n\t };\n\n\t TreeStore.prototype.setCurrentNodeKey = function setCurrentNodeKey(key) {\n\t var node = this.getNode(key);\n\t if (node) {\n\t this.currentNode = node;\n\t }\n\t };\n\n\t return TreeStore;\n\t}();\n\n\texports.default = TreeStore;\n\t;\n\n/***/ },\n/* 237 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\texports.getChildState = undefined;\n\n\tvar _createClass = 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, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n\tvar _merge = __webpack_require__(64);\n\n\tvar _merge2 = _interopRequireDefault(_merge);\n\n\tvar _util = __webpack_require__(238);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\tvar getChildState = exports.getChildState = function getChildState(node) {\n\t var all = true;\n\t var none = true;\n\t var allWithoutDisable = true;\n\t for (var i = 0, j = node.length; i < j; i++) {\n\t var n = node[i];\n\t if (n.checked !== true || n.indeterminate) {\n\t all = false;\n\t if (!n.disabled) {\n\t allWithoutDisable = false;\n\t }\n\t }\n\t if (n.checked !== false || n.indeterminate) {\n\t none = false;\n\t }\n\t }\n\n\t return { all: all, none: none, allWithoutDisable: allWithoutDisable, half: !all && !none };\n\t};\n\n\tvar reInitChecked = function reInitChecked(node) {\n\t var _getChildState = getChildState(node.childNodes),\n\t all = _getChildState.all,\n\t none = _getChildState.none,\n\t half = _getChildState.half;\n\n\t if (all) {\n\t node.checked = true;\n\t node.indeterminate = false;\n\t } else if (half) {\n\t node.checked = false;\n\t node.indeterminate = true;\n\t } else if (none) {\n\t node.checked = false;\n\t node.indeterminate = false;\n\t }\n\n\t var parent = node.parent;\n\t if (!parent || parent.level === 0) return;\n\n\t if (!node.store.checkStrictly) {\n\t reInitChecked(parent);\n\t }\n\t};\n\n\tvar initLazyLoadChild = function initLazyLoadChild(node) {\n\t var childNodes = node.childNodes;\n\t if (node.checked) {\n\t for (var i = 0, j = childNodes.length; i < j; i++) {\n\t var child = childNodes[i];\n\t if (!child.disabled) {\n\t child.checked = true;\n\t }\n\t }\n\t }\n\n\t var parent = node.parent;\n\t if (!parent || parent.level === 0) return;\n\t reInitChecked(parent);\n\t};\n\n\tvar getPropertyFromData = function getPropertyFromData(node, prop) {\n\t var props = node.store.props;\n\t var data = node.data || {};\n\t var config = props[prop];\n\n\t if (typeof config === 'function') {\n\t return config(data, node);\n\t } else if (typeof config === 'string') {\n\t return data[config];\n\t } else if (typeof config === 'undefined') {\n\t var dataProp = data[prop];\n\t return dataProp === undefined ? '' : dataProp;\n\t }\n\t};\n\n\tvar nodeIdSeed = 0;\n\n\tvar Node = function () {\n\t function Node(options) {\n\t _classCallCheck(this, Node);\n\n\t this.id = nodeIdSeed++;\n\t this.text = null;\n\t this.checked = false;\n\t this.indeterminate = false;\n\t this.data = null;\n\t this.expanded = false;\n\t this.parent = null;\n\t this.visible = true;\n\n\t for (var name in options) {\n\t if (options.hasOwnProperty(name)) {\n\t this[name] = options[name];\n\t }\n\t }\n\n\t // internal\n\t this.level = 0;\n\t this.loaded = false;\n\t this.childNodes = [];\n\t this.loading = false;\n\n\t if (this.parent) {\n\t this.level = this.parent.level + 1;\n\t }\n\n\t var store = this.store;\n\t if (!store) {\n\t throw new Error('[Node]store is required!');\n\t }\n\t store.registerNode(this);\n\n\t var props = store.props;\n\t if (props && typeof props.isLeaf !== 'undefined') {\n\t var isLeaf = getPropertyFromData(this, 'isLeaf');\n\t if (typeof isLeaf === 'boolean') {\n\t this.isLeafByUser = isLeaf;\n\t }\n\t }\n\n\t if (store.lazy !== true && this.data) {\n\t this.setData(this.data);\n\n\t if (store.defaultExpandAll) {\n\t this.expanded = true;\n\t }\n\t } else if (this.level > 0 && store.lazy && store.defaultExpandAll) {\n\t this.expand();\n\t }\n\n\t if (!this.data) return;\n\t var defaultExpandedKeys = store.defaultExpandedKeys;\n\t var key = store.key;\n\t if (key && defaultExpandedKeys && defaultExpandedKeys.indexOf(this.key) !== -1) {\n\t this.expand(null, store.autoExpandParent);\n\t }\n\n\t if (key && store.currentNodeKey !== undefined && this.key === store.currentNodeKey) {\n\t store.currentNode = this;\n\t }\n\n\t if (store.lazy) {\n\t store._initDefaultCheckedNode(this);\n\t }\n\n\t this.updateLeafState();\n\t }\n\n\t Node.prototype.setData = function setData(data) {\n\t if (!Array.isArray(data)) {\n\t (0, _util.markNodeData)(this, data);\n\t }\n\n\t this.data = data;\n\t this.childNodes = [];\n\n\t var children = void 0;\n\t if (this.level === 0 && this.data instanceof Array) {\n\t children = this.data;\n\t } else {\n\t children = getPropertyFromData(this, 'children') || [];\n\t }\n\n\t for (var i = 0, j = children.length; i < j; i++) {\n\t this.insertChild({ data: children[i] });\n\t }\n\t };\n\n\t Node.prototype.insertChild = function insertChild(child, index) {\n\t if (!child) throw new Error('insertChild error: child is required.');\n\n\t if (!(child instanceof Node)) {\n\t (0, _merge2.default)(child, {\n\t parent: this,\n\t store: this.store\n\t });\n\t child = new Node(child);\n\t }\n\n\t child.level = this.level + 1;\n\n\t if (typeof index === 'undefined' || index < 0) {\n\t this.childNodes.push(child);\n\t } else {\n\t this.childNodes.splice(index, 0, child);\n\t }\n\n\t this.updateLeafState();\n\t };\n\n\t Node.prototype.insertBefore = function insertBefore(child, ref) {\n\t var index = void 0;\n\t if (ref) {\n\t index = this.childNodes.indexOf(ref);\n\t }\n\t this.insertChild(child, index);\n\t };\n\n\t Node.prototype.insertAfter = function insertAfter(child, ref) {\n\t var index = void 0;\n\t if (ref) {\n\t index = this.childNodes.indexOf(ref);\n\t if (index !== -1) index += 1;\n\t }\n\t this.insertChild(child, index);\n\t };\n\n\t Node.prototype.removeChild = function removeChild(child) {\n\t var index = this.childNodes.indexOf(child);\n\n\t if (index > -1) {\n\t this.store && this.store.deregisterNode(child);\n\t child.parent = null;\n\t this.childNodes.splice(index, 1);\n\t }\n\n\t this.updateLeafState();\n\t };\n\n\t Node.prototype.removeChildByData = function removeChildByData(data) {\n\t var targetNode = null;\n\t this.childNodes.forEach(function (node) {\n\t if (node.data === data) {\n\t targetNode = node;\n\t }\n\t });\n\n\t if (targetNode) {\n\t this.removeChild(targetNode);\n\t }\n\t };\n\n\t Node.prototype.expand = function expand(callback, expandParent) {\n\t var _this = this;\n\n\t var done = function done() {\n\t if (expandParent) {\n\t var parent = _this.parent;\n\t while (parent.level > 0) {\n\t parent.expanded = true;\n\t parent = parent.parent;\n\t }\n\t }\n\t _this.expanded = true;\n\t if (callback) callback();\n\t };\n\n\t if (this.shouldLoadData()) {\n\t this.loadData(function (data) {\n\t if (data instanceof Array) {\n\t initLazyLoadChild(_this);\n\t done();\n\t }\n\t });\n\t } else {\n\t done();\n\t }\n\t };\n\n\t Node.prototype.doCreateChildren = function doCreateChildren(array) {\n\t var _this2 = this;\n\n\t var defaultProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t array.forEach(function (item) {\n\t _this2.insertChild((0, _merge2.default)({ data: item }, defaultProps));\n\t });\n\t };\n\n\t Node.prototype.collapse = function collapse() {\n\t this.expanded = false;\n\t };\n\n\t Node.prototype.shouldLoadData = function shouldLoadData() {\n\t return this.store.lazy === true && this.store.load && !this.loaded;\n\t };\n\n\t Node.prototype.updateLeafState = function updateLeafState() {\n\t if (this.store.lazy === true && this.loaded !== true && typeof this.isLeafByUser !== 'undefined') {\n\t this.isLeaf = this.isLeafByUser;\n\t return;\n\t }\n\t var childNodes = this.childNodes;\n\t if (!this.store.lazy || this.store.lazy === true && this.loaded === true) {\n\t this.isLeaf = !childNodes || childNodes.length === 0;\n\t return;\n\t }\n\t this.isLeaf = false;\n\t };\n\n\t Node.prototype.setChecked = function setChecked(value, deep, recursion, passValue) {\n\t var _this3 = this;\n\n\t this.indeterminate = value === 'half';\n\t this.checked = value === true;\n\n\t var _getChildState2 = getChildState(this.childNodes),\n\t all = _getChildState2.all,\n\t allWithoutDisable = _getChildState2.allWithoutDisable;\n\n\t if (this.childNodes.length && !all && allWithoutDisable) {\n\t this.checked = false;\n\t value = false;\n\t }\n\n\t var handleDescendants = function handleDescendants(lazy) {\n\t if (deep && !lazy) {\n\t var childNodes = _this3.childNodes;\n\t for (var i = 0, j = childNodes.length; i < j; i++) {\n\t var child = childNodes[i];\n\t passValue = passValue || value !== false;\n\t var isCheck = child.disabled ? child.checked : passValue;\n\t child.setChecked(isCheck, deep, true, passValue);\n\t }\n\n\t var _getChildState3 = getChildState(childNodes),\n\t half = _getChildState3.half,\n\t _all = _getChildState3.all;\n\n\t if (!_all) {\n\t _this3.checked = _all;\n\t _this3.indeterminate = half;\n\t }\n\t }\n\t };\n\n\t if (!this.store.checkStrictly && this.shouldLoadData()) {\n\t // Only work on lazy load data.\n\t this.loadData(function () {\n\t handleDescendants(true);\n\t }, {\n\t checked: value !== false\n\t });\n\t } else {\n\t handleDescendants();\n\t }\n\n\t var parent = this.parent;\n\t if (!parent || parent.level === 0) return;\n\n\t if (!this.store.checkStrictly && !recursion) {\n\t reInitChecked(parent);\n\t }\n\t };\n\n\t Node.prototype.getChildren = function getChildren() {\n\t // this is data\n\t var data = this.data;\n\t if (!data) return null;\n\n\t var props = this.store.props;\n\t var children = 'children';\n\t if (props) {\n\t children = props.children || 'children';\n\t }\n\n\t if (data[children] === undefined) {\n\t data[children] = null;\n\t }\n\n\t return data[children];\n\t };\n\n\t Node.prototype.updateChildren = function updateChildren() {\n\t var _this4 = this;\n\n\t var newData = this.getChildren() || [];\n\t var oldData = this.childNodes.map(function (node) {\n\t return node.data;\n\t });\n\n\t var newDataMap = {};\n\t var newNodes = [];\n\n\t newData.forEach(function (item, index) {\n\t if (item[_util.NODE_KEY]) {\n\t newDataMap[item[_util.NODE_KEY]] = { index: index, data: item };\n\t } else {\n\t newNodes.push({ index: index, data: item });\n\t }\n\t });\n\n\t oldData.forEach(function (item) {\n\t if (!newDataMap[item[_util.NODE_KEY]]) _this4.removeChildByData(item);\n\t });\n\n\t newNodes.forEach(function (_ref) {\n\t var index = _ref.index,\n\t data = _ref.data;\n\n\t _this4.insertChild({ data: data }, index);\n\t });\n\n\t this.updateLeafState();\n\t };\n\n\t Node.prototype.loadData = function loadData(callback) {\n\t var _this5 = this;\n\n\t var defaultProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\t if (this.store.lazy === true && this.store.load && !this.loaded && (!this.loading || Object.keys(defaultProps).length)) {\n\t this.loading = true;\n\n\t var resolve = function resolve(children) {\n\t _this5.loaded = true;\n\t _this5.loading = false;\n\t _this5.childNodes = [];\n\n\t _this5.doCreateChildren(children, defaultProps);\n\n\t _this5.updateLeafState();\n\t if (callback) {\n\t callback.call(_this5, children);\n\t }\n\t };\n\n\t this.store.load(this, resolve);\n\t } else {\n\t if (callback) {\n\t callback.call(this);\n\t }\n\t }\n\t };\n\n\t _createClass(Node, [{\n\t key: 'label',\n\t get: function get() {\n\t return getPropertyFromData(this, 'label');\n\t }\n\t }, {\n\t key: 'icon',\n\t get: function get() {\n\t return getPropertyFromData(this, 'icon');\n\t }\n\t }, {\n\t key: 'key',\n\t get: function get() {\n\t var nodeKey = this.store.key;\n\t if (this.data) return this.data[nodeKey];\n\t return null;\n\t }\n\t }, {\n\t key: 'disabled',\n\t get: function get() {\n\t return getPropertyFromData(this, 'disabled');\n\t }\n\t }]);\n\n\t return Node;\n\t}();\n\n\texports.default = Node;\n\n/***/ },\n/* 238 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\tvar NODE_KEY = exports.NODE_KEY = '$treeNodeId';\n\n\tvar markNodeData = exports.markNodeData = function markNodeData(node, data) {\n\t if (data[NODE_KEY]) return;\n\t Object.defineProperty(data, NODE_KEY, {\n\t value: node.id,\n\t enumerable: false,\n\t configurable: false,\n\t writable: false\n\t });\n\t};\n\n\tvar getNodeKey = exports.getNodeKey = function getNodeKey(key, data) {\n\t if (!key) return data[NODE_KEY];\n\t return data[key];\n\t};\n\n/***/ },\n/* 239 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(240),\n\t /* template */\n\t __webpack_require__(241),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 240 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _collapseTransition = __webpack_require__(49);\n\n\tvar _collapseTransition2 = _interopRequireDefault(_collapseTransition);\n\n\tvar _checkbox = __webpack_require__(130);\n\n\tvar _checkbox2 = _interopRequireDefault(_checkbox);\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElTreeNode',\n\n\t componentName: 'ElTreeNode',\n\n\t mixins: [_emitter2.default],\n\n\t props: {\n\t node: {\n\t default: function _default() {\n\t return {};\n\t }\n\t },\n\t props: {},\n\t renderContent: Function\n\t },\n\n\t components: {\n\t ElCollapseTransition: _collapseTransition2.default,\n\t ElCheckbox: _checkbox2.default,\n\t NodeContent: {\n\t props: {\n\t node: {\n\t required: true\n\t }\n\t },\n\t render: function render(h) {\n\t var parent = this.$parent;\n\t var node = this.node;\n\t var data = node.data;\n\t var store = node.store;\n\t return parent.renderContent ? parent.renderContent.call(parent._renderProxy, h, { _self: parent.tree.$vnode.context, node: node, data: data, store: store }) : h(\n\t 'span',\n\t { 'class': 'el-tree-node__label' },\n\t [this.node.label]\n\t );\n\t }\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t tree: null,\n\t expanded: false,\n\t childNodeRendered: false,\n\t showCheckbox: false,\n\t oldChecked: null,\n\t oldIndeterminate: null\n\t };\n\t },\n\n\n\t watch: {\n\t 'node.indeterminate': function nodeIndeterminate(val) {\n\t this.handleSelectChange(this.node.checked, val);\n\t },\n\t 'node.checked': function nodeChecked(val) {\n\t this.handleSelectChange(val, this.node.indeterminate);\n\t },\n\t 'node.expanded': function nodeExpanded(val) {\n\t this.expanded = val;\n\t if (val) {\n\t this.childNodeRendered = true;\n\t }\n\t }\n\t },\n\n\t methods: {\n\t getNodeKey: function getNodeKey(node, index) {\n\t var nodeKey = this.tree.nodeKey;\n\t if (nodeKey && node) {\n\t return node.data[nodeKey];\n\t }\n\t return index;\n\t },\n\t handleSelectChange: function handleSelectChange(checked, indeterminate) {\n\t if (this.oldChecked !== checked && this.oldIndeterminate !== indeterminate) {\n\t this.tree.$emit('check-change', this.node.data, checked, indeterminate);\n\t }\n\t this.oldChecked = checked;\n\t this.indeterminate = indeterminate;\n\t },\n\t handleClick: function handleClick() {\n\t var store = this.tree.store;\n\t store.setCurrentNode(this.node);\n\t this.tree.$emit('current-change', store.currentNode ? store.currentNode.data : null, store.currentNode);\n\t this.tree.currentNode = this;\n\t if (this.tree.expandOnClickNode) {\n\t this.handleExpandIconClick();\n\t }\n\t this.tree.$emit('node-click', this.node.data, this.node, this);\n\t },\n\t handleExpandIconClick: function handleExpandIconClick() {\n\t if (this.node.isLeaf) return;\n\t if (this.expanded) {\n\t this.tree.$emit('node-collapse', this.node.data, this.node, this);\n\t this.node.collapse();\n\t } else {\n\t this.node.expand();\n\t this.$emit('node-expand', this.node.data, this.node, this);\n\t }\n\t },\n\t handleCheckChange: function handleCheckChange(ev) {\n\t this.node.setChecked(ev.target.checked, !this.tree.checkStrictly);\n\t },\n\t handleChildNodeExpand: function handleChildNodeExpand(nodeData, node, instance) {\n\t this.broadcast('ElTreeNode', 'tree-node-expand', node);\n\t this.tree.$emit('node-expand', nodeData, node, instance);\n\t }\n\t },\n\n\t created: function created() {\n\t var _this = this;\n\n\t var parent = this.$parent;\n\n\t if (parent.isTree) {\n\t this.tree = parent;\n\t } else {\n\t this.tree = parent.tree;\n\t }\n\n\t var tree = this.tree;\n\t if (!tree) {\n\t console.warn('Can not find node\\'s tree.');\n\t }\n\n\t var props = tree.props || {};\n\t var childrenKey = props['children'] || 'children';\n\n\t this.$watch('node.data.' + childrenKey, function () {\n\t _this.node.updateChildren();\n\t });\n\n\t this.showCheckbox = tree.showCheckbox;\n\n\t if (this.node.expanded) {\n\t this.expanded = true;\n\t this.childNodeRendered = true;\n\t }\n\n\t if (this.tree.accordion) {\n\t this.$on('tree-node-expand', function (node) {\n\t if (_this.node !== node) {\n\t _this.node.collapse();\n\t }\n\t });\n\t }\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 241 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.node.visible),\n\t expression: \"node.visible\"\n\t }],\n\t staticClass: \"el-tree-node\",\n\t class: {\n\t 'is-expanded': _vm.childNodeRendered && _vm.expanded,\n\t 'is-current': _vm.tree.store.currentNode === _vm.node,\n\t 'is-hidden': !_vm.node.visible\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t $event.stopPropagation();\n\t _vm.handleClick($event)\n\t }\n\t }\n\t }, [_c('div', {\n\t staticClass: \"el-tree-node__content\",\n\t style: ({\n\t 'padding-left': (_vm.node.level - 1) * _vm.tree.indent + 'px'\n\t })\n\t }, [_c('span', {\n\t staticClass: \"el-tree-node__expand-icon\",\n\t class: {\n\t 'is-leaf': _vm.node.isLeaf, expanded: !_vm.node.isLeaf && _vm.expanded\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t $event.stopPropagation();\n\t _vm.handleExpandIconClick($event)\n\t }\n\t }\n\t }), (_vm.showCheckbox) ? _c('el-checkbox', {\n\t attrs: {\n\t \"indeterminate\": _vm.node.indeterminate,\n\t \"disabled\": !!_vm.node.disabled\n\t },\n\t on: {\n\t \"change\": _vm.handleCheckChange\n\t },\n\t nativeOn: {\n\t \"click\": function($event) {\n\t $event.stopPropagation();\n\t }\n\t },\n\t model: {\n\t value: (_vm.node.checked),\n\t callback: function($$v) {\n\t _vm.node.checked = $$v\n\t },\n\t expression: \"node.checked\"\n\t }\n\t }) : _vm._e(), (_vm.node.loading) ? _c('span', {\n\t staticClass: \"el-tree-node__loading-icon el-icon-loading\"\n\t }) : _vm._e(), _c('node-content', {\n\t attrs: {\n\t \"node\": _vm.node\n\t }\n\t })], 1), _c('el-collapse-transition', [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.expanded),\n\t expression: \"expanded\"\n\t }],\n\t staticClass: \"el-tree-node__children\"\n\t }, _vm._l((_vm.node.childNodes), function(child) {\n\t return _c('el-tree-node', {\n\t key: _vm.getNodeKey(child),\n\t attrs: {\n\t \"render-content\": _vm.renderContent,\n\t \"node\": child\n\t },\n\t on: {\n\t \"node-expand\": _vm.handleChildNodeExpand\n\t }\n\t })\n\t }))])], 1)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 242 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-tree\",\n\t class: {\n\t 'el-tree--highlight-current': _vm.highlightCurrent\n\t }\n\t }, [_vm._l((_vm.root.childNodes), function(child) {\n\t return _c('el-tree-node', {\n\t key: _vm.getNodeKey(child),\n\t attrs: {\n\t \"node\": child,\n\t \"props\": _vm.props,\n\t \"render-content\": _vm.renderContent\n\t },\n\t on: {\n\t \"node-expand\": _vm.handleNodeExpand\n\t }\n\t })\n\t }), (!_vm.root.childNodes || _vm.root.childNodes.length === 0) ? _c('div', {\n\t staticClass: \"el-tree__empty-block\"\n\t }, [_c('span', {\n\t staticClass: \"el-tree__empty-text\"\n\t }, [_vm._v(_vm._s(_vm.emptyText))])]) : _vm._e()], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 243 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(244);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_main2.default.install = function (Vue) {\n\t Vue.component(_main2.default.name, _main2.default);\n\t};\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 244 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(245),\n\t /* template */\n\t __webpack_require__(246),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 245 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\tvar TYPE_CLASSES_MAP = {\n\t 'success': 'el-icon-circle-check',\n\t 'warning': 'el-icon-warning',\n\t 'error': 'el-icon-circle-cross'\n\t};\n\texports.default = {\n\t name: 'ElAlert',\n\n\t props: {\n\t title: {\n\t type: String,\n\t default: '',\n\t required: true\n\t },\n\t description: {\n\t type: String,\n\t default: ''\n\t },\n\t type: {\n\t type: String,\n\t default: 'info'\n\t },\n\t closable: {\n\t type: Boolean,\n\t default: true\n\t },\n\t closeText: {\n\t type: String,\n\t default: ''\n\t },\n\t showIcon: {\n\t type: Boolean,\n\t default: false\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t visible: true\n\t };\n\t },\n\n\n\t methods: {\n\t close: function close() {\n\t this.visible = false;\n\t this.$emit('close');\n\t }\n\t },\n\n\t computed: {\n\t typeClass: function typeClass() {\n\t return 'el-alert--' + this.type;\n\t },\n\t iconClass: function iconClass() {\n\t return TYPE_CLASSES_MAP[this.type] || 'el-icon-information';\n\t },\n\t isBigIcon: function isBigIcon() {\n\t return this.description || this.$slots.default ? 'is-big' : '';\n\t },\n\t isBoldTitle: function isBoldTitle() {\n\t return this.description || this.$slots.default ? 'is-bold' : '';\n\t }\n\t }\n\t};\n\n/***/ },\n/* 246 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"el-alert-fade\"\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible),\n\t expression: \"visible\"\n\t }],\n\t staticClass: \"el-alert\",\n\t class: [_vm.typeClass]\n\t }, [(_vm.showIcon) ? _c('i', {\n\t staticClass: \"el-alert__icon\",\n\t class: [_vm.iconClass, _vm.isBigIcon]\n\t }) : _vm._e(), _c('div', {\n\t staticClass: \"el-alert__content\"\n\t }, [(_vm.title) ? _c('span', {\n\t staticClass: \"el-alert__title\",\n\t class: [_vm.isBoldTitle]\n\t }, [_vm._v(_vm._s(_vm.title))]) : _vm._e(), _vm._t(\"default\", [(_vm.description) ? _c('p', {\n\t staticClass: \"el-alert__description\"\n\t }, [_vm._v(_vm._s(_vm.description))]) : _vm._e()]), _c('i', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.closable),\n\t expression: \"closable\"\n\t }],\n\t staticClass: \"el-alert__closebtn\",\n\t class: {\n\t 'is-customed': _vm.closeText !== '', 'el-icon-close': _vm.closeText === ''\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.close()\n\t }\n\t }\n\t }, [_vm._v(_vm._s(_vm.closeText))])], 2)])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 247 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(248);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 248 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vue = __webpack_require__(133);\n\n\tvar _vue2 = _interopRequireDefault(_vue);\n\n\tvar _popup = __webpack_require__(14);\n\n\tvar _vdom = __webpack_require__(194);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar NotificationConstructor = _vue2.default.extend(__webpack_require__(249));\n\n\tvar instance = void 0;\n\tvar instances = [];\n\tvar seed = 1;\n\n\tvar Notification = function Notification(options) {\n\t if (_vue2.default.prototype.$isServer) return;\n\t options = options || {};\n\t var userOnClose = options.onClose;\n\t var id = 'notification_' + seed++;\n\n\t options.onClose = function () {\n\t Notification.close(id, userOnClose);\n\t };\n\n\t instance = new NotificationConstructor({\n\t data: options\n\t });\n\n\t if ((0, _vdom.isVNode)(options.message)) {\n\t instance.$slots.default = [options.message];\n\t options.message = '';\n\t }\n\t instance.id = id;\n\t instance.vm = instance.$mount();\n\t document.body.appendChild(instance.vm.$el);\n\t instance.vm.visible = true;\n\t instance.dom = instance.vm.$el;\n\t instance.dom.style.zIndex = _popup.PopupManager.nextZIndex();\n\n\t var offset = options.offset || 0;\n\t var topDist = offset;\n\t for (var i = 0, len = instances.length; i < len; i++) {\n\t topDist += instances[i].$el.offsetHeight + 16;\n\t }\n\t topDist += 16;\n\t instance.top = topDist;\n\t instances.push(instance);\n\t return instance.vm;\n\t};\n\n\t['success', 'warning', 'info', 'error'].forEach(function (type) {\n\t Notification[type] = function (options) {\n\t if (typeof options === 'string' || (0, _vdom.isVNode)(options)) {\n\t options = {\n\t message: options\n\t };\n\t }\n\t options.type = type;\n\t return Notification(options);\n\t };\n\t});\n\n\tNotification.close = function (id, userOnClose) {\n\t var index = void 0;\n\t var removedHeight = void 0;\n\t for (var i = 0, len = instances.length; i < len; i++) {\n\t if (id === instances[i].id) {\n\t if (typeof userOnClose === 'function') {\n\t userOnClose(instances[i]);\n\t }\n\t index = i;\n\t removedHeight = instances[i].dom.offsetHeight;\n\t instances.splice(i, 1);\n\t break;\n\t }\n\t }\n\n\t if (len > 1) {\n\t for (i = index; i < len - 1; i++) {\n\t instances[i].dom.style.top = parseInt(instances[i].dom.style.top, 10) - removedHeight - 16 + 'px';\n\t }\n\t }\n\t};\n\n\texports.default = Notification;\n\n/***/ },\n/* 249 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(250),\n\t /* template */\n\t __webpack_require__(251),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 250 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\tvar typeMap = {\n\t success: 'circle-check',\n\t info: 'information',\n\t warning: 'warning',\n\t error: 'circle-cross'\n\t};\n\n\texports.default = {\n\t data: function data() {\n\t return {\n\t visible: false,\n\t title: '',\n\t message: '',\n\t duration: 4500,\n\t type: '',\n\t customClass: '',\n\t iconClass: '',\n\t onClose: null,\n\t onClick: null,\n\t closed: false,\n\t top: null,\n\t timer: null\n\t };\n\t },\n\n\n\t computed: {\n\t typeClass: function typeClass() {\n\t return this.type && typeMap[this.type] ? 'el-icon-' + typeMap[this.type] : '';\n\t }\n\t },\n\n\t watch: {\n\t closed: function closed(newVal) {\n\t if (newVal) {\n\t this.visible = false;\n\t this.$el.addEventListener('transitionend', this.destroyElement);\n\t }\n\t }\n\t },\n\n\t methods: {\n\t destroyElement: function destroyElement() {\n\t this.$el.removeEventListener('transitionend', this.destroyElement);\n\t this.$destroy(true);\n\t this.$el.parentNode.removeChild(this.$el);\n\t },\n\t click: function click() {\n\t if (typeof this.onClick === 'function') {\n\t this.onClick();\n\t }\n\t },\n\t close: function close() {\n\t this.closed = true;\n\t if (typeof this.onClose === 'function') {\n\t this.onClose();\n\t }\n\t },\n\t clearTimer: function clearTimer() {\n\t clearTimeout(this.timer);\n\t },\n\t startTimer: function startTimer() {\n\t var _this = this;\n\n\t if (this.duration > 0) {\n\t this.timer = setTimeout(function () {\n\t if (!_this.closed) {\n\t _this.close();\n\t }\n\t }, this.duration);\n\t }\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t var _this2 = this;\n\n\t if (this.duration > 0) {\n\t this.timer = setTimeout(function () {\n\t if (!_this2.closed) {\n\t _this2.close();\n\t }\n\t }, this.duration);\n\t }\n\t }\n\t};\n\n/***/ },\n/* 251 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"el-notification-fade\"\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible),\n\t expression: \"visible\"\n\t }],\n\t staticClass: \"el-notification\",\n\t class: _vm.customClass,\n\t style: ({\n\t top: _vm.top ? _vm.top + 'px' : 'auto'\n\t }),\n\t on: {\n\t \"mouseenter\": function($event) {\n\t _vm.clearTimer()\n\t },\n\t \"mouseleave\": function($event) {\n\t _vm.startTimer()\n\t },\n\t \"click\": _vm.click\n\t }\n\t }, [(_vm.type || _vm.iconClass) ? _c('i', {\n\t staticClass: \"el-notification__icon\",\n\t class: [_vm.typeClass, _vm.iconClass]\n\t }) : _vm._e(), _c('div', {\n\t staticClass: \"el-notification__group\",\n\t class: {\n\t 'is-with-icon': _vm.typeClass || _vm.iconClass\n\t }\n\t }, [_c('h2', {\n\t staticClass: \"el-notification__title\",\n\t domProps: {\n\t \"textContent\": _vm._s(_vm.title)\n\t }\n\t }), _c('div', {\n\t staticClass: \"el-notification__content\"\n\t }, [_vm._t(\"default\", [_vm._v(_vm._s(_vm.message))])], 2), _c('div', {\n\t staticClass: \"el-notification__closeBtn el-icon-close\",\n\t on: {\n\t \"click\": function($event) {\n\t $event.stopPropagation();\n\t _vm.close($event)\n\t }\n\t }\n\t })])])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 252 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(253);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_main2.default.install = function (Vue) {\n\t Vue.component(_main2.default.name, _main2.default);\n\t};\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 253 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(254),\n\t /* template */\n\t __webpack_require__(259),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 254 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _inputNumber = __webpack_require__(255);\n\n\tvar _inputNumber2 = _interopRequireDefault(_inputNumber);\n\n\tvar _button = __webpack_require__(256);\n\n\tvar _button2 = _interopRequireDefault(_button);\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElSlider',\n\n\t mixins: [_emitter2.default],\n\n\t props: {\n\t min: {\n\t type: Number,\n\t default: 0\n\t },\n\t max: {\n\t type: Number,\n\t default: 100\n\t },\n\t step: {\n\t type: Number,\n\t default: 1\n\t },\n\t value: {\n\t type: [Number, Array],\n\t default: 0\n\t },\n\t showInput: {\n\t type: Boolean,\n\t default: false\n\t },\n\t showInputControls: {\n\t type: Boolean,\n\t default: true\n\t },\n\t showStops: {\n\t type: Boolean,\n\t default: false\n\t },\n\t showTooltip: {\n\t type: Boolean,\n\t default: true\n\t },\n\t formatTooltip: Function,\n\t disabled: {\n\t type: Boolean,\n\t default: false\n\t },\n\t range: {\n\t type: Boolean,\n\t default: false\n\t },\n\t vertical: {\n\t type: Boolean,\n\t default: false\n\t },\n\t height: {\n\t type: String\n\t },\n\t debounce: {\n\t type: Number,\n\t default: 300\n\t }\n\t },\n\n\t components: {\n\t ElInputNumber: _inputNumber2.default,\n\t SliderButton: _button2.default\n\t },\n\n\t data: function data() {\n\t return {\n\t firstValue: null,\n\t secondValue: null,\n\t oldValue: null,\n\t dragging: false,\n\t sliderSize: 1\n\t };\n\t },\n\n\n\t watch: {\n\t value: function value(val, oldVal) {\n\t if (this.dragging || Array.isArray(val) && Array.isArray(oldVal) && val.every(function (item, index) {\n\t return item === oldVal[index];\n\t })) {\n\t return;\n\t }\n\t this.setValues();\n\t },\n\t dragging: function dragging(val) {\n\t if (!val) {\n\t this.setValues();\n\t }\n\t },\n\t firstValue: function firstValue(val) {\n\t if (this.range) {\n\t this.$emit('input', [this.minValue, this.maxValue]);\n\t } else {\n\t this.$emit('input', val);\n\t }\n\t },\n\t secondValue: function secondValue() {\n\t if (this.range) {\n\t this.$emit('input', [this.minValue, this.maxValue]);\n\t }\n\t },\n\t min: function min() {\n\t this.setValues();\n\t },\n\t max: function max() {\n\t this.setValues();\n\t }\n\t },\n\n\t methods: {\n\t valueChanged: function valueChanged() {\n\t var _this = this;\n\n\t if (this.range) {\n\t return ![this.minValue, this.maxValue].every(function (item, index) {\n\t return item === _this.oldValue[index];\n\t });\n\t } else {\n\t return this.value !== this.oldValue;\n\t }\n\t },\n\t setValues: function setValues() {\n\t var val = this.value;\n\t if (this.range && Array.isArray(val)) {\n\t if (val[1] < this.min) {\n\t this.$emit('input', [this.min, this.min]);\n\t } else if (val[0] > this.max) {\n\t this.$emit('input', [this.max, this.max]);\n\t } else if (val[0] < this.min) {\n\t this.$emit('input', [this.min, val[1]]);\n\t } else if (val[1] > this.max) {\n\t this.$emit('input', [val[0], this.max]);\n\t } else {\n\t this.firstValue = val[0];\n\t this.secondValue = val[1];\n\t if (this.valueChanged()) {\n\t this.$emit('change', [this.minValue, this.maxValue]);\n\t this.dispatch('ElFormItem', 'el.form.change', [this.minValue, this.maxValue]);\n\t this.oldValue = val.slice();\n\t }\n\t }\n\t } else if (!this.range && typeof val === 'number' && !isNaN(val)) {\n\t if (val < this.min) {\n\t this.$emit('input', this.min);\n\t } else if (val > this.max) {\n\t this.$emit('input', this.max);\n\t } else {\n\t this.firstValue = val;\n\t if (this.valueChanged()) {\n\t this.$emit('change', val);\n\t this.dispatch('ElFormItem', 'el.form.change', val);\n\t this.oldValue = val;\n\t }\n\t }\n\t }\n\t },\n\t setPosition: function setPosition(percent) {\n\t var targetValue = this.min + percent * (this.max - this.min) / 100;\n\t if (!this.range) {\n\t this.$refs.button1.setPosition(percent);\n\t return;\n\t }\n\t var button = void 0;\n\t if (Math.abs(this.minValue - targetValue) < Math.abs(this.maxValue - targetValue)) {\n\t button = this.firstValue < this.secondValue ? 'button1' : 'button2';\n\t } else {\n\t button = this.firstValue > this.secondValue ? 'button1' : 'button2';\n\t }\n\t this.$refs[button].setPosition(percent);\n\t },\n\t onSliderClick: function onSliderClick(event) {\n\t if (this.disabled || this.dragging) return;\n\t this.resetSize();\n\t if (this.vertical) {\n\t var sliderOffsetBottom = this.$refs.slider.getBoundingClientRect().bottom;\n\t this.setPosition((sliderOffsetBottom - event.clientY) / this.sliderSize * 100);\n\t } else {\n\t var sliderOffsetLeft = this.$refs.slider.getBoundingClientRect().left;\n\t this.setPosition((event.clientX - sliderOffsetLeft) / this.sliderSize * 100);\n\t }\n\t },\n\t resetSize: function resetSize() {\n\t if (this.$refs.slider) {\n\t this.sliderSize = this.$refs.slider['client' + (this.vertical ? 'Height' : 'Width')];\n\t }\n\t }\n\t },\n\n\t computed: {\n\t stops: function stops() {\n\t var _this2 = this;\n\n\t if (this.step === 0) {\n\t (\"production\") !== 'production' && console.warn('[Element Warn][Slider]step should not be 0.');\n\t return [];\n\t }\n\t var stopCount = (this.max - this.min) / this.step;\n\t var stepWidth = 100 * this.step / (this.max - this.min);\n\t var result = [];\n\t for (var i = 1; i < stopCount; i++) {\n\t result.push(i * stepWidth);\n\t }\n\t if (this.range) {\n\t return result.filter(function (step) {\n\t return step < 100 * (_this2.minValue - _this2.min) / (_this2.max - _this2.min) || step > 100 * (_this2.maxValue - _this2.min) / (_this2.max - _this2.min);\n\t });\n\t } else {\n\t return result.filter(function (step) {\n\t return step > 100 * (_this2.firstValue - _this2.min) / (_this2.max - _this2.min);\n\t });\n\t }\n\t },\n\t minValue: function minValue() {\n\t return Math.min(this.firstValue, this.secondValue);\n\t },\n\t maxValue: function maxValue() {\n\t return Math.max(this.firstValue, this.secondValue);\n\t },\n\t barSize: function barSize() {\n\t return this.range ? 100 * (this.maxValue - this.minValue) / (this.max - this.min) + '%' : 100 * (this.firstValue - this.min) / (this.max - this.min) + '%';\n\t },\n\t barStart: function barStart() {\n\t return this.range ? 100 * (this.minValue - this.min) / (this.max - this.min) + '%' : '0%';\n\t },\n\t precision: function precision() {\n\t var precisions = [this.min, this.max, this.step].map(function (item) {\n\t var decimal = ('' + item).split('.')[1];\n\t return decimal ? decimal.length : 0;\n\t });\n\t return Math.max.apply(null, precisions);\n\t },\n\t runwayStyle: function runwayStyle() {\n\t return this.vertical ? { height: this.height } : {};\n\t },\n\t barStyle: function barStyle() {\n\t return this.vertical ? {\n\t height: this.barSize,\n\t bottom: this.barStart\n\t } : {\n\t width: this.barSize,\n\t left: this.barStart\n\t };\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t if (this.range) {\n\t if (Array.isArray(this.value)) {\n\t this.firstValue = Math.max(this.min, this.value[0]);\n\t this.secondValue = Math.min(this.max, this.value[1]);\n\t } else {\n\t this.firstValue = this.min;\n\t this.secondValue = this.max;\n\t }\n\t this.oldValue = [this.firstValue, this.secondValue];\n\t } else {\n\t if (typeof this.value !== 'number' || isNaN(this.value)) {\n\t this.firstValue = this.min;\n\t } else {\n\t this.firstValue = Math.min(this.max, Math.max(this.min, this.value));\n\t }\n\t this.oldValue = this.firstValue;\n\t }\n\t this.resetSize();\n\t window.addEventListener('resize', this.resetSize);\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t window.removeEventListener('resize', this.resetSize);\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 255 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(65);\n\n/***/ },\n/* 256 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(257),\n\t /* template */\n\t __webpack_require__(258),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 257 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _tooltip = __webpack_require__(138);\n\n\tvar _tooltip2 = _interopRequireDefault(_tooltip);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElSliderButton',\n\n\t components: {\n\t ElTooltip: _tooltip2.default\n\t },\n\n\t props: {\n\t value: {\n\t type: Number,\n\t default: 0\n\t },\n\t vertical: {\n\t type: Boolean,\n\t default: false\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t hovering: false,\n\t dragging: false,\n\t startX: 0,\n\t currentX: 0,\n\t startY: 0,\n\t currentY: 0,\n\t startPosition: 0,\n\t newPosition: null,\n\t oldValue: this.value\n\t };\n\t },\n\n\n\t computed: {\n\t disabled: function disabled() {\n\t return this.$parent.disabled;\n\t },\n\t max: function max() {\n\t return this.$parent.max;\n\t },\n\t min: function min() {\n\t return this.$parent.min;\n\t },\n\t step: function step() {\n\t return this.$parent.step;\n\t },\n\t showTooltip: function showTooltip() {\n\t return this.$parent.showTooltip;\n\t },\n\t precision: function precision() {\n\t return this.$parent.precision;\n\t },\n\t currentPosition: function currentPosition() {\n\t return (this.value - this.min) / (this.max - this.min) * 100 + '%';\n\t },\n\t enableFormat: function enableFormat() {\n\t return this.$parent.formatTooltip instanceof Function;\n\t },\n\t formatValue: function formatValue() {\n\t return this.enableFormat && this.$parent.formatTooltip(this.value) || this.value;\n\t },\n\t wrapperStyle: function wrapperStyle() {\n\t return this.vertical ? { bottom: this.currentPosition } : { left: this.currentPosition };\n\t }\n\t },\n\n\t watch: {\n\t dragging: function dragging(val) {\n\t this.$parent.dragging = val;\n\t }\n\t },\n\n\t methods: {\n\t displayTooltip: function displayTooltip() {\n\t this.$refs.tooltip && (this.$refs.tooltip.showPopper = true);\n\t },\n\t hideTooltip: function hideTooltip() {\n\t this.$refs.tooltip && (this.$refs.tooltip.showPopper = false);\n\t },\n\t handleMouseEnter: function handleMouseEnter() {\n\t this.hovering = true;\n\t this.displayTooltip();\n\t },\n\t handleMouseLeave: function handleMouseLeave() {\n\t this.hovering = false;\n\t this.hideTooltip();\n\t },\n\t onButtonDown: function onButtonDown(event) {\n\t if (this.disabled) return;\n\t event.preventDefault();\n\t this.onDragStart(event);\n\t window.addEventListener('mousemove', this.onDragging);\n\t window.addEventListener('mouseup', this.onDragEnd);\n\t window.addEventListener('contextmenu', this.onDragEnd);\n\t },\n\t onDragStart: function onDragStart(event) {\n\t this.dragging = true;\n\t if (this.vertical) {\n\t this.startY = event.clientY;\n\t } else {\n\t this.startX = event.clientX;\n\t }\n\t this.startPosition = parseFloat(this.currentPosition);\n\t this.newPosition = this.startPosition;\n\t },\n\t onDragging: function onDragging(event) {\n\t if (this.dragging) {\n\t this.displayTooltip();\n\t this.$parent.resetSize();\n\t var diff = 0;\n\t if (this.vertical) {\n\t this.currentY = event.clientY;\n\t diff = (this.startY - this.currentY) / this.$parent.sliderSize * 100;\n\t } else {\n\t this.currentX = event.clientX;\n\t diff = (this.currentX - this.startX) / this.$parent.sliderSize * 100;\n\t }\n\t this.newPosition = this.startPosition + diff;\n\t this.setPosition(this.newPosition);\n\t }\n\t },\n\t onDragEnd: function onDragEnd() {\n\t var _this = this;\n\n\t if (this.dragging) {\n\t /*\n\t * 防止在 mouseup 后立即触发 click,导致滑块有几率产生一小段位移\n\t * 不使用 preventDefault 是因为 mouseup 和 click 没有注册在同一个 DOM 上\n\t */\n\t setTimeout(function () {\n\t _this.dragging = false;\n\t _this.hideTooltip();\n\t _this.setPosition(_this.newPosition);\n\t }, 0);\n\t window.removeEventListener('mousemove', this.onDragging);\n\t window.removeEventListener('mouseup', this.onDragEnd);\n\t window.removeEventListener('contextmenu', this.onDragEnd);\n\t }\n\t },\n\t setPosition: function setPosition(newPosition) {\n\t if (newPosition === null) return;\n\t if (newPosition < 0) {\n\t newPosition = 0;\n\t } else if (newPosition > 100) {\n\t newPosition = 100;\n\t }\n\t var lengthPerStep = 100 / ((this.max - this.min) / this.step);\n\t var steps = Math.round(newPosition / lengthPerStep);\n\t var value = steps * lengthPerStep * (this.max - this.min) * 0.01 + this.min;\n\t value = parseFloat(value.toFixed(this.precision));\n\t this.$emit('input', value);\n\t this.$refs.tooltip && this.$refs.tooltip.updatePopper();\n\t if (!this.dragging && this.value !== this.oldValue) {\n\t this.oldValue = this.value;\n\t }\n\t }\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 258 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t ref: \"button\",\n\t staticClass: \"el-slider__button-wrapper\",\n\t class: {\n\t 'hover': _vm.hovering, 'dragging': _vm.dragging\n\t },\n\t style: (_vm.wrapperStyle),\n\t on: {\n\t \"mouseenter\": _vm.handleMouseEnter,\n\t \"mouseleave\": _vm.handleMouseLeave,\n\t \"mousedown\": _vm.onButtonDown\n\t }\n\t }, [_c('el-tooltip', {\n\t ref: \"tooltip\",\n\t attrs: {\n\t \"placement\": \"top\",\n\t \"disabled\": !_vm.showTooltip\n\t }\n\t }, [_c('span', {\n\t slot: \"content\"\n\t }, [_vm._v(_vm._s(_vm.formatValue))]), _c('div', {\n\t staticClass: \"el-slider__button\",\n\t class: {\n\t 'hover': _vm.hovering, 'dragging': _vm.dragging\n\t }\n\t })])], 1)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 259 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-slider\",\n\t class: {\n\t 'is-vertical': _vm.vertical, 'el-slider--with-input': _vm.showInput\n\t }\n\t }, [(_vm.showInput && !_vm.range) ? _c('el-input-number', {\n\t ref: \"input\",\n\t staticClass: \"el-slider__input\",\n\t attrs: {\n\t \"step\": _vm.step,\n\t \"disabled\": _vm.disabled,\n\t \"controls\": _vm.showInputControls,\n\t \"min\": _vm.min,\n\t \"max\": _vm.max,\n\t \"debounce\": _vm.debounce,\n\t \"size\": \"small\"\n\t },\n\t model: {\n\t value: (_vm.firstValue),\n\t callback: function($$v) {\n\t _vm.firstValue = $$v\n\t },\n\t expression: \"firstValue\"\n\t }\n\t }) : _vm._e(), _c('div', {\n\t ref: \"slider\",\n\t staticClass: \"el-slider__runway\",\n\t class: {\n\t 'show-input': _vm.showInput, 'disabled': _vm.disabled\n\t },\n\t style: (_vm.runwayStyle),\n\t on: {\n\t \"click\": _vm.onSliderClick\n\t }\n\t }, [_c('div', {\n\t staticClass: \"el-slider__bar\",\n\t style: (_vm.barStyle)\n\t }), _c('slider-button', {\n\t ref: \"button1\",\n\t attrs: {\n\t \"vertical\": _vm.vertical\n\t },\n\t model: {\n\t value: (_vm.firstValue),\n\t callback: function($$v) {\n\t _vm.firstValue = $$v\n\t },\n\t expression: \"firstValue\"\n\t }\n\t }), (_vm.range) ? _c('slider-button', {\n\t ref: \"button2\",\n\t attrs: {\n\t \"vertical\": _vm.vertical\n\t },\n\t model: {\n\t value: (_vm.secondValue),\n\t callback: function($$v) {\n\t _vm.secondValue = $$v\n\t },\n\t expression: \"secondValue\"\n\t }\n\t }) : _vm._e(), _vm._l((_vm.stops), function(item) {\n\t return (_vm.showStops) ? _c('div', {\n\t staticClass: \"el-slider__stop\",\n\t style: (_vm.vertical ? {\n\t 'bottom': item + '%'\n\t } : {\n\t 'left': item + '%'\n\t })\n\t }) : _vm._e()\n\t })], 2)], 1)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 260 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _directive = __webpack_require__(261);\n\n\tvar _directive2 = _interopRequireDefault(_directive);\n\n\tvar _index = __webpack_require__(265);\n\n\tvar _index2 = _interopRequireDefault(_index);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t install: function install(Vue) {\n\t Vue.use(_directive2.default);\n\t Vue.prototype.$loading = _index2.default;\n\t },\n\n\t directive: _directive2.default,\n\t service: _index2.default\n\t};\n\n/***/ },\n/* 261 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar _vue = __webpack_require__(133);\n\n\tvar _vue2 = _interopRequireDefault(_vue);\n\n\tvar _dom = __webpack_require__(44);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar Mask = _vue2.default.extend(__webpack_require__(262));\n\n\texports.install = function (Vue) {\n\t if (Vue.prototype.$isServer) return;\n\t var toggleLoading = function toggleLoading(el, binding) {\n\t if (binding.value) {\n\t Vue.nextTick(function () {\n\t if (binding.modifiers.fullscreen) {\n\t el.originalPosition = (0, _dom.getStyle)(document.body, 'position');\n\t el.originalOverflow = (0, _dom.getStyle)(document.body, 'overflow');\n\n\t (0, _dom.addClass)(el.mask, 'is-fullscreen');\n\t insertDom(document.body, el, binding);\n\t } else {\n\t (0, _dom.removeClass)(el.mask, 'is-fullscreen');\n\n\t if (binding.modifiers.body) {\n\t el.originalPosition = (0, _dom.getStyle)(document.body, 'position');\n\n\t ['top', 'left'].forEach(function (property) {\n\t var scroll = property === 'top' ? 'scrollTop' : 'scrollLeft';\n\t el.maskStyle[property] = el.getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] + 'px';\n\t });\n\t ['height', 'width'].forEach(function (property) {\n\t el.maskStyle[property] = el.getBoundingClientRect()[property] + 'px';\n\t });\n\n\t insertDom(document.body, el, binding);\n\t } else {\n\t el.originalPosition = (0, _dom.getStyle)(el, 'position');\n\t insertDom(el, el, binding);\n\t }\n\t }\n\t });\n\t } else {\n\t if (el.domVisible) {\n\t el.instance.$on('after-leave', function (_) {\n\t el.domVisible = false;\n\t if (binding.modifiers.fullscreen && el.originalOverflow !== 'hidden') {\n\t document.body.style.overflow = el.originalOverflow;\n\t }\n\t if (binding.modifiers.fullscreen || binding.modifiers.body) {\n\t document.body.style.position = el.originalPosition;\n\t } else {\n\t el.style.position = el.originalPosition;\n\t }\n\t });\n\t el.instance.visible = false;\n\t }\n\t }\n\t };\n\t var insertDom = function insertDom(parent, el, binding) {\n\t if (!el.domVisible && (0, _dom.getStyle)(el, 'display') !== 'none' && (0, _dom.getStyle)(el, 'visibility') !== 'hidden') {\n\t Object.keys(el.maskStyle).forEach(function (property) {\n\t el.mask.style[property] = el.maskStyle[property];\n\t });\n\n\t if (el.originalPosition !== 'absolute' && el.originalPosition !== 'fixed') {\n\t parent.style.position = 'relative';\n\t }\n\t if (binding.modifiers.fullscreen && binding.modifiers.lock) {\n\t parent.style.overflow = 'hidden';\n\t }\n\t el.domVisible = true;\n\n\t parent.appendChild(el.mask);\n\t Vue.nextTick(function () {\n\t el.instance.visible = true;\n\t });\n\t el.domInserted = true;\n\t }\n\t };\n\n\t Vue.directive('loading', {\n\t bind: function bind(el, binding) {\n\t var mask = new Mask({\n\t el: document.createElement('div'),\n\t data: {\n\t text: el.getAttribute('element-loading-text'),\n\t fullscreen: !!binding.modifiers.fullscreen\n\t }\n\t });\n\t el.instance = mask;\n\t el.mask = mask.$el;\n\t el.maskStyle = {};\n\n\t toggleLoading(el, binding);\n\t },\n\n\t update: function update(el, binding) {\n\t el.instance.setText(el.getAttribute('element-loading-text'));\n\t if (binding.oldValue !== binding.value) {\n\t toggleLoading(el, binding);\n\t }\n\t },\n\n\t unbind: function unbind(el, binding) {\n\t if (el.domInserted) {\n\t if (binding.modifiers.fullscreen || binding.modifiers.body) {\n\t document.body.removeChild(el.mask);\n\t } else {\n\t el.mask && el.mask.parentNode && el.mask.parentNode.removeChild(el.mask);\n\t }\n\t }\n\t }\n\t });\n\t};\n\n/***/ },\n/* 262 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(263),\n\t /* template */\n\t __webpack_require__(264),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 263 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t data: function data() {\n\t return {\n\t text: null,\n\t fullscreen: true,\n\t visible: false,\n\t customClass: ''\n\t };\n\t },\n\n\n\t methods: {\n\t handleAfterLeave: function handleAfterLeave() {\n\t this.$emit('after-leave');\n\t },\n\t setText: function setText(text) {\n\t this.text = text;\n\t }\n\t }\n\t};\n\n/***/ },\n/* 264 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"el-loading-fade\"\n\t },\n\t on: {\n\t \"after-leave\": _vm.handleAfterLeave\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible),\n\t expression: \"visible\"\n\t }],\n\t staticClass: \"el-loading-mask\",\n\t class: [_vm.customClass, {\n\t 'is-fullscreen': _vm.fullscreen\n\t }]\n\t }, [_c('div', {\n\t staticClass: \"el-loading-spinner\"\n\t }, [_c('svg', {\n\t staticClass: \"circular\",\n\t attrs: {\n\t \"viewBox\": \"25 25 50 50\"\n\t }\n\t }, [_c('circle', {\n\t staticClass: \"path\",\n\t attrs: {\n\t \"cx\": \"50\",\n\t \"cy\": \"50\",\n\t \"r\": \"20\",\n\t \"fill\": \"none\"\n\t }\n\t })]), (_vm.text) ? _c('p', {\n\t staticClass: \"el-loading-text\"\n\t }, [_vm._v(_vm._s(_vm.text))]) : _vm._e()])])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 265 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vue = __webpack_require__(133);\n\n\tvar _vue2 = _interopRequireDefault(_vue);\n\n\tvar _loading = __webpack_require__(262);\n\n\tvar _loading2 = _interopRequireDefault(_loading);\n\n\tvar _dom = __webpack_require__(44);\n\n\tvar _merge = __webpack_require__(64);\n\n\tvar _merge2 = _interopRequireDefault(_merge);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar LoadingConstructor = _vue2.default.extend(_loading2.default);\n\n\tvar defaults = {\n\t text: null,\n\t fullscreen: true,\n\t body: false,\n\t lock: false,\n\t customClass: ''\n\t};\n\n\tvar fullscreenLoading = void 0;\n\n\tLoadingConstructor.prototype.originalPosition = '';\n\tLoadingConstructor.prototype.originalOverflow = '';\n\n\tLoadingConstructor.prototype.close = function () {\n\t var _this = this;\n\n\t if (this.fullscreen) {\n\t fullscreenLoading = undefined;\n\t }\n\t this.$on('after-leave', function (_) {\n\t if (_this.fullscreen && _this.originalOverflow !== 'hidden') {\n\t document.body.style.overflow = _this.originalOverflow;\n\t }\n\t if (_this.fullscreen || _this.body) {\n\t document.body.style.position = _this.originalPosition;\n\t } else {\n\t _this.target.style.position = _this.originalPosition;\n\t }\n\t if (_this.$el && _this.$el.parentNode) {\n\t _this.$el.parentNode.removeChild(_this.$el);\n\t }\n\t _this.$destroy();\n\t });\n\t this.visible = false;\n\t};\n\n\tvar addStyle = function addStyle(options, parent, instance) {\n\t var maskStyle = {};\n\t if (options.fullscreen) {\n\t instance.originalPosition = (0, _dom.getStyle)(document.body, 'position');\n\t instance.originalOverflow = (0, _dom.getStyle)(document.body, 'overflow');\n\t } else if (options.body) {\n\t instance.originalPosition = (0, _dom.getStyle)(document.body, 'position');\n\t ['top', 'left'].forEach(function (property) {\n\t var scroll = property === 'top' ? 'scrollTop' : 'scrollLeft';\n\t maskStyle[property] = options.target.getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] + 'px';\n\t });\n\t ['height', 'width'].forEach(function (property) {\n\t maskStyle[property] = options.target.getBoundingClientRect()[property] + 'px';\n\t });\n\t } else {\n\t instance.originalPosition = (0, _dom.getStyle)(parent, 'position');\n\t }\n\t Object.keys(maskStyle).forEach(function (property) {\n\t instance.$el.style[property] = maskStyle[property];\n\t });\n\t};\n\n\tvar Loading = function Loading() {\n\t var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n\t if (_vue2.default.prototype.$isServer) return;\n\t options = (0, _merge2.default)({}, defaults, options);\n\t if (typeof options.target === 'string') {\n\t options.target = document.querySelector(options.target);\n\t }\n\t options.target = options.target || document.body;\n\t if (options.target !== document.body) {\n\t options.fullscreen = false;\n\t } else {\n\t options.body = true;\n\t }\n\t if (options.fullscreen && fullscreenLoading) {\n\t return fullscreenLoading;\n\t }\n\n\t var parent = options.body ? document.body : options.target;\n\t var instance = new LoadingConstructor({\n\t el: document.createElement('div'),\n\t data: options\n\t });\n\n\t addStyle(options, parent, instance);\n\t if (instance.originalPosition !== 'absolute' && instance.originalPosition !== 'fixed') {\n\t parent.style.position = 'relative';\n\t }\n\t if (options.fullscreen && options.lock) {\n\t parent.style.overflow = 'hidden';\n\t }\n\t parent.appendChild(instance.$el);\n\t _vue2.default.nextTick(function () {\n\t instance.visible = true;\n\t });\n\t if (options.fullscreen) {\n\t fullscreenLoading = instance;\n\t }\n\t return instance;\n\t};\n\n\texports.default = Loading;\n\n/***/ },\n/* 266 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _icon = __webpack_require__(267);\n\n\tvar _icon2 = _interopRequireDefault(_icon);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_icon2.default.install = function (Vue) {\n\t Vue.component(_icon2.default.name, _icon2.default);\n\t};\n\n\texports.default = _icon2.default;\n\n/***/ },\n/* 267 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(268),\n\t /* template */\n\t __webpack_require__(269),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 268 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElIcon',\n\n\t props: {\n\t name: String\n\t }\n\t};\n\n/***/ },\n/* 269 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('i', {\n\t class: 'el-icon-' + _vm.name\n\t })\n\t},staticRenderFns: []}\n\n/***/ },\n/* 270 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _row = __webpack_require__(271);\n\n\tvar _row2 = _interopRequireDefault(_row);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_row2.default.install = function (Vue) {\n\t Vue.component(_row2.default.name, _row2.default);\n\t};\n\n\texports.default = _row2.default;\n\n/***/ },\n/* 271 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\texports.default = {\n\t name: 'ElRow',\n\n\t componentName: 'ElRow',\n\n\t props: {\n\t tag: {\n\t type: String,\n\t default: 'div'\n\t },\n\t gutter: Number,\n\t type: String,\n\t justify: {\n\t type: String,\n\t default: 'start'\n\t },\n\t align: {\n\t type: String,\n\t default: 'top'\n\t }\n\t },\n\n\t computed: {\n\t style: function style() {\n\t var ret = {};\n\n\t if (this.gutter) {\n\t ret.marginLeft = '-' + this.gutter / 2 + 'px';\n\t ret.marginRight = ret.marginLeft;\n\t }\n\n\t return ret;\n\t }\n\t },\n\n\t render: function render(h) {\n\t return h(this.tag, {\n\t class: ['el-row', this.justify !== 'start' ? 'is-justify-' + this.justify : '', this.align !== 'top' ? 'is-align-' + this.align : '', { 'el-row--flex': this.type === 'flex' }],\n\t style: this.style\n\t }, this.$slots.default);\n\t }\n\t};\n\n/***/ },\n/* 272 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _col = __webpack_require__(273);\n\n\tvar _col2 = _interopRequireDefault(_col);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_col2.default.install = function (Vue) {\n\t Vue.component(_col2.default.name, _col2.default);\n\t};\n\n\texports.default = _col2.default;\n\n/***/ },\n/* 273 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\texports.default = {\n\t name: 'ElCol',\n\n\t props: {\n\t span: {\n\t type: Number,\n\t default: 24\n\t },\n\t tag: {\n\t type: String,\n\t default: 'div'\n\t },\n\t offset: Number,\n\t pull: Number,\n\t push: Number,\n\t xs: [Number, Object],\n\t sm: [Number, Object],\n\t md: [Number, Object],\n\t lg: [Number, Object]\n\t },\n\n\t computed: {\n\t gutter: function gutter() {\n\t var parent = this.$parent;\n\t while (parent && parent.$options.componentName !== 'ElRow') {\n\t parent = parent.$parent;\n\t }\n\t return parent ? parent.gutter : 0;\n\t }\n\t },\n\t render: function render(h) {\n\t var _this = this;\n\n\t var classList = [];\n\t var style = {};\n\n\t if (this.gutter) {\n\t style.paddingLeft = this.gutter / 2 + 'px';\n\t style.paddingRight = style.paddingLeft;\n\t }\n\n\t ['span', 'offset', 'pull', 'push'].forEach(function (prop) {\n\t if (_this[prop]) {\n\t classList.push(prop !== 'span' ? 'el-col-' + prop + '-' + _this[prop] : 'el-col-' + _this[prop]);\n\t }\n\t });\n\n\t ['xs', 'sm', 'md', 'lg'].forEach(function (size) {\n\t if (typeof _this[size] === 'number') {\n\t classList.push('el-col-' + size + '-' + _this[size]);\n\t } else if (_typeof(_this[size]) === 'object') {\n\t (function () {\n\t var props = _this[size];\n\t Object.keys(props).forEach(function (prop) {\n\t classList.push(prop !== 'span' ? 'el-col-' + size + '-' + prop + '-' + props[prop] : 'el-col-' + size + '-' + props[prop]);\n\t });\n\t })();\n\t }\n\t });\n\n\t return h(this.tag, {\n\t class: ['el-col', classList],\n\t style: style\n\t }, this.$slots.default);\n\t }\n\t};\n\n/***/ },\n/* 274 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _src = __webpack_require__(275);\n\n\tvar _src2 = _interopRequireDefault(_src);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_src2.default.install = function (Vue) {\n\t Vue.component(_src2.default.name, _src2.default);\n\t};\n\n\texports.default = _src2.default;\n\n/***/ },\n/* 275 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(276),\n\t /* template */\n\t null,\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 276 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _uploadList = __webpack_require__(277);\n\n\tvar _uploadList2 = _interopRequireDefault(_uploadList);\n\n\tvar _upload = __webpack_require__(281);\n\n\tvar _upload2 = _interopRequireDefault(_upload);\n\n\tvar _iframeUpload = __webpack_require__(287);\n\n\tvar _iframeUpload2 = _interopRequireDefault(_iframeUpload);\n\n\tvar _progress = __webpack_require__(279);\n\n\tvar _progress2 = _interopRequireDefault(_progress);\n\n\tvar _migrating = __webpack_require__(289);\n\n\tvar _migrating2 = _interopRequireDefault(_migrating);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tfunction noop() {}\n\n\texports.default = {\n\t name: 'ElUpload',\n\n\t mixins: [_migrating2.default],\n\n\t components: {\n\t ElProgress: _progress2.default,\n\t UploadList: _uploadList2.default,\n\t Upload: _upload2.default,\n\t IframeUpload: _iframeUpload2.default\n\t },\n\n\t provide: {\n\t uploader: undefined\n\t },\n\n\t props: {\n\t action: {\n\t type: String,\n\t required: true\n\t },\n\t headers: {\n\t type: Object,\n\t default: function _default() {\n\t return {};\n\t }\n\t },\n\t data: Object,\n\t multiple: Boolean,\n\t name: {\n\t type: String,\n\t default: 'file'\n\t },\n\t drag: Boolean,\n\t dragger: Boolean,\n\t withCredentials: Boolean,\n\t showFileList: {\n\t type: Boolean,\n\t default: true\n\t },\n\t accept: String,\n\t type: {\n\t type: String,\n\t default: 'select'\n\t },\n\t beforeUpload: Function,\n\t onRemove: {\n\t type: Function,\n\t default: noop\n\t },\n\t onChange: {\n\t type: Function,\n\t default: noop\n\t },\n\t onPreview: {\n\t type: Function\n\t },\n\t onSuccess: {\n\t type: Function,\n\t default: noop\n\t },\n\t onProgress: {\n\t type: Function,\n\t default: noop\n\t },\n\t onError: {\n\t type: Function,\n\t default: noop\n\t },\n\t fileList: {\n\t type: Array,\n\t default: function _default() {\n\t return [];\n\t }\n\t },\n\t autoUpload: {\n\t type: Boolean,\n\t default: true\n\t },\n\t listType: {\n\t type: String,\n\t default: 'text' // text,picture,picture-card\n\t },\n\t httpRequest: Function,\n\t disabled: Boolean\n\t },\n\n\t data: function data() {\n\t return {\n\t uploadFiles: [],\n\t dragOver: false,\n\t draging: false,\n\t tempIndex: 1\n\t };\n\t },\n\n\n\t watch: {\n\t fileList: {\n\t immediate: true,\n\t handler: function handler(fileList) {\n\t var _this = this;\n\n\t this.uploadFiles = fileList.map(function (item) {\n\t item.uid = item.uid || Date.now() + _this.tempIndex++;\n\t item.status = 'success';\n\t return item;\n\t });\n\t }\n\t }\n\t },\n\n\t methods: {\n\t handleStart: function handleStart(rawFile) {\n\t rawFile.uid = Date.now() + this.tempIndex++;\n\t var file = {\n\t status: 'ready',\n\t name: rawFile.name,\n\t size: rawFile.size,\n\t percentage: 0,\n\t uid: rawFile.uid,\n\t raw: rawFile\n\t };\n\n\t try {\n\t file.url = URL.createObjectURL(rawFile);\n\t } catch (err) {\n\t console.error(err);\n\t return;\n\t }\n\n\t this.uploadFiles.push(file);\n\t this.onChange(file, this.uploadFiles);\n\t },\n\t handleProgress: function handleProgress(ev, rawFile) {\n\t var file = this.getFile(rawFile);\n\t this.onProgress(ev, file, this.uploadFiles);\n\t file.status = 'uploading';\n\t file.percentage = ev.percent || 0;\n\t },\n\t handleSuccess: function handleSuccess(res, rawFile) {\n\t var file = this.getFile(rawFile);\n\n\t if (file) {\n\t file.status = 'success';\n\t file.response = res;\n\n\t this.onSuccess(res, file, this.uploadFiles);\n\t this.onChange(file, this.uploadFiles);\n\t }\n\t },\n\t handleError: function handleError(err, rawFile) {\n\t var file = this.getFile(rawFile);\n\t var fileList = this.uploadFiles;\n\n\t file.status = 'fail';\n\n\t fileList.splice(fileList.indexOf(file), 1);\n\n\t this.onError(err, file, this.uploadFiles);\n\t this.onChange(file, this.uploadFiles);\n\t },\n\t handleRemove: function handleRemove(file, raw) {\n\t if (raw) {\n\t file = this.getFile(raw);\n\t }\n\t this.abort(file);\n\t var fileList = this.uploadFiles;\n\t fileList.splice(fileList.indexOf(file), 1);\n\t this.onRemove(file, fileList);\n\t },\n\t getFile: function getFile(rawFile) {\n\t var fileList = this.uploadFiles;\n\t var target = void 0;\n\t fileList.every(function (item) {\n\t target = rawFile.uid === item.uid ? item : null;\n\t return !target;\n\t });\n\t return target;\n\t },\n\t abort: function abort(file) {\n\t this.$refs['upload-inner'].abort(file);\n\t },\n\t clearFiles: function clearFiles() {\n\t this.uploadFiles = [];\n\t },\n\t submit: function submit() {\n\t var _this2 = this;\n\n\t this.uploadFiles.filter(function (file) {\n\t return file.status === 'ready';\n\t }).forEach(function (file) {\n\t _this2.$refs['upload-inner'].upload(file.raw);\n\t });\n\t },\n\t getMigratingConfig: function getMigratingConfig() {\n\t return {\n\t props: {\n\t 'default-file-list': 'default-file-list is renamed to file-list.',\n\t 'show-upload-list': 'show-upload-list is renamed to show-file-list.',\n\t 'thumbnail-mode': 'thumbnail-mode has been deprecated, you can implement the same effect according to this case: http://element.eleme.io/#/zh-CN/component/upload#yong-hu-tou-xiang-shang-chuan'\n\t }\n\t };\n\t }\n\t },\n\n\t render: function render(h) {\n\t var uploadList = void 0;\n\n\t if (this.showFileList) {\n\t uploadList = h(\n\t _uploadList2.default,\n\t {\n\t attrs: {\n\t disabled: this.disabled,\n\t listType: this.listType,\n\t files: this.uploadFiles,\n\n\t handlePreview: this.onPreview },\n\t on: {\n\t 'remove': this.handleRemove\n\t }\n\t },\n\t []\n\t );\n\t }\n\n\t var uploadData = {\n\t props: {\n\t type: this.type,\n\t drag: this.drag,\n\t action: this.action,\n\t multiple: this.multiple,\n\t 'before-upload': this.beforeUpload,\n\t 'with-credentials': this.withCredentials,\n\t headers: this.headers,\n\t name: this.name,\n\t data: this.data,\n\t accept: this.accept,\n\t fileList: this.uploadFiles,\n\t autoUpload: this.autoUpload,\n\t listType: this.listType,\n\t disabled: this.disabled,\n\t 'on-start': this.handleStart,\n\t 'on-progress': this.handleProgress,\n\t 'on-success': this.handleSuccess,\n\t 'on-error': this.handleError,\n\t 'on-preview': this.onPreview,\n\t 'on-remove': this.handleRemove,\n\t 'http-request': this.httpRequest\n\t },\n\t ref: 'upload-inner'\n\t };\n\n\t var trigger = this.$slots.trigger || this.$slots.default;\n\t var uploadComponent = typeof FormData !== 'undefined' || this.$isServer ? h(\n\t 'upload',\n\t uploadData,\n\t [trigger]\n\t ) : h(\n\t 'iframeUpload',\n\t uploadData,\n\t [trigger]\n\t );\n\n\t return h(\n\t 'div',\n\t null,\n\t [this.listType === 'picture-card' ? uploadList : '', this.$slots.trigger ? [uploadComponent, this.$slots.default] : uploadComponent, this.$slots.tip, this.listType !== 'picture-card' ? uploadList : '']\n\t );\n\t }\n\t};\n\n/***/ },\n/* 277 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(278),\n\t /* template */\n\t __webpack_require__(280),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 278 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tvar _progress = __webpack_require__(279);\n\n\tvar _progress2 = _interopRequireDefault(_progress);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t mixins: [_locale2.default],\n\n\t components: { ElProgress: _progress2.default },\n\n\t props: {\n\t files: {\n\t type: Array,\n\t default: function _default() {\n\t return [];\n\t }\n\t },\n\t disabled: {\n\t type: Boolean,\n\t default: false\n\t },\n\t handlePreview: Function,\n\t listType: String\n\t },\n\t methods: {\n\t parsePercentage: function parsePercentage(val) {\n\t return parseInt(val, 10);\n\t },\n\t handleClick: function handleClick(file) {\n\t this.handlePreview && this.handlePreview(file);\n\t }\n\t }\n\t};\n\n/***/ },\n/* 279 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(66);\n\n/***/ },\n/* 280 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition-group', {\n\t class: [\n\t 'el-upload-list',\n\t 'el-upload-list--' + _vm.listType, {\n\t 'is-disabled': _vm.disabled\n\t }\n\t ],\n\t attrs: {\n\t \"tag\": \"ul\",\n\t \"name\": \"el-list\"\n\t }\n\t }, _vm._l((_vm.files), function(file, index) {\n\t return _c('li', {\n\t key: index,\n\t class: ['el-upload-list__item', 'is-' + file.status]\n\t }, [(file.status !== 'uploading' && ['picture-card', 'picture'].indexOf(_vm.listType) > -1) ? _c('img', {\n\t staticClass: \"el-upload-list__item-thumbnail\",\n\t attrs: {\n\t \"src\": file.url,\n\t \"alt\": \"\"\n\t }\n\t }) : _vm._e(), _c('a', {\n\t staticClass: \"el-upload-list__item-name\",\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handleClick(file)\n\t }\n\t }\n\t }, [_c('i', {\n\t staticClass: \"el-icon-document\"\n\t }), _vm._v(_vm._s(file.name) + \"\\n \")]), _c('label', {\n\t staticClass: \"el-upload-list__item-status-label\"\n\t }, [_c('i', {\n\t class: {\n\t 'el-icon-upload-success': true,\n\t 'el-icon-circle-check': _vm.listType === 'text',\n\t 'el-icon-check': ['picture-card', 'picture'].indexOf(_vm.listType) > -1\n\t }\n\t })]), (!_vm.disabled) ? _c('i', {\n\t staticClass: \"el-icon-close\",\n\t on: {\n\t \"click\": function($event) {\n\t _vm.$emit('remove', file)\n\t }\n\t }\n\t }) : _vm._e(), (file.status === 'uploading') ? _c('el-progress', {\n\t attrs: {\n\t \"type\": _vm.listType === 'picture-card' ? 'circle' : 'line',\n\t \"stroke-width\": _vm.listType === 'picture-card' ? 6 : 2,\n\t \"percentage\": _vm.parsePercentage(file.percentage)\n\t }\n\t }) : _vm._e(), (_vm.listType === 'picture-card') ? _c('span', {\n\t staticClass: \"el-upload-list__item-actions\"\n\t }, [(_vm.handlePreview && _vm.listType === 'picture-card') ? _c('span', {\n\t staticClass: \"el-upload-list__item-preview\",\n\t on: {\n\t \"click\": function($event) {\n\t _vm.handlePreview(file)\n\t }\n\t }\n\t }, [_c('i', {\n\t staticClass: \"el-icon-view\"\n\t })]) : _vm._e(), (!_vm.disabled) ? _c('span', {\n\t staticClass: \"el-upload-list__item-delete\",\n\t on: {\n\t \"click\": function($event) {\n\t _vm.$emit('remove', file)\n\t }\n\t }\n\t }, [_c('i', {\n\t staticClass: \"el-icon-delete2\"\n\t })]) : _vm._e()]) : _vm._e()], 1)\n\t }))\n\t},staticRenderFns: []}\n\n/***/ },\n/* 281 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(282),\n\t /* template */\n\t null,\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 282 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _ajax = __webpack_require__(283);\n\n\tvar _ajax2 = _interopRequireDefault(_ajax);\n\n\tvar _uploadDragger = __webpack_require__(284);\n\n\tvar _uploadDragger2 = _interopRequireDefault(_uploadDragger);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t inject: ['uploader'],\n\t components: {\n\t UploadDragger: _uploadDragger2.default\n\t },\n\t props: {\n\t type: String,\n\t action: {\n\t type: String,\n\t required: true\n\t },\n\t name: {\n\t type: String,\n\t default: 'file'\n\t },\n\t data: Object,\n\t headers: Object,\n\t withCredentials: Boolean,\n\t multiple: Boolean,\n\t accept: String,\n\t onStart: Function,\n\t onProgress: Function,\n\t onSuccess: Function,\n\t onError: Function,\n\t beforeUpload: Function,\n\t drag: Boolean,\n\t onPreview: {\n\t type: Function,\n\t default: function _default() {}\n\t },\n\t onRemove: {\n\t type: Function,\n\t default: function _default() {}\n\t },\n\t fileList: Array,\n\t autoUpload: Boolean,\n\t listType: String,\n\t httpRequest: {\n\t type: Function,\n\t default: _ajax2.default\n\t },\n\t disabled: Boolean\n\t },\n\n\t data: function data() {\n\t return {\n\t mouseover: false,\n\t reqs: {}\n\t };\n\t },\n\n\n\t methods: {\n\t isImage: function isImage(str) {\n\t return str.indexOf('image') !== -1;\n\t },\n\t handleChange: function handleChange(ev) {\n\t var files = ev.target.files;\n\n\t if (!files) return;\n\t this.uploadFiles(files);\n\t },\n\t uploadFiles: function uploadFiles(files) {\n\t var _this = this;\n\n\t var postFiles = Array.prototype.slice.call(files);\n\t if (!this.multiple) {\n\t postFiles = postFiles.slice(0, 1);\n\t }\n\n\t if (postFiles.length === 0) {\n\t return;\n\t }\n\n\t postFiles.forEach(function (rawFile) {\n\t _this.onStart(rawFile);\n\t if (_this.autoUpload) _this.upload(rawFile);\n\t });\n\t },\n\t upload: function upload(rawFile, file) {\n\t var _this2 = this;\n\n\t this.$refs.input.value = null;\n\n\t if (!this.beforeUpload) {\n\t return this.post(rawFile);\n\t }\n\n\t var before = this.beforeUpload(rawFile);\n\t if (before && before.then) {\n\t before.then(function (processedFile) {\n\t if (Object.prototype.toString.call(processedFile) === '[object File]') {\n\t _this2.post(processedFile);\n\t } else {\n\t _this2.post(rawFile);\n\t }\n\t }, function () {\n\t _this2.onRemove(null, rawFile);\n\t });\n\t } else if (before !== false) {\n\t this.post(rawFile);\n\t } else {\n\t this.onRemove(null, rawFile);\n\t }\n\t },\n\t abort: function abort(file) {\n\t var reqs = this.reqs;\n\n\t if (file) {\n\t var uid = file;\n\t if (file.uid) uid = file.uid;\n\t if (reqs[uid]) {\n\t reqs[uid].abort();\n\t }\n\t } else {\n\t Object.keys(reqs).forEach(function (uid) {\n\t if (reqs[uid]) reqs[uid].abort();\n\t delete reqs[uid];\n\t });\n\t }\n\t },\n\t post: function post(rawFile) {\n\t var _this3 = this;\n\n\t var uid = rawFile.uid;\n\n\t var options = {\n\t headers: this.headers,\n\t withCredentials: this.withCredentials,\n\t file: rawFile,\n\t data: this.data,\n\t filename: this.name,\n\t action: this.action,\n\t onProgress: function onProgress(e) {\n\t _this3.onProgress(e, rawFile);\n\t },\n\t onSuccess: function onSuccess(res) {\n\t _this3.onSuccess(res, rawFile);\n\t delete _this3.reqs[uid];\n\t },\n\t onError: function onError(err) {\n\t _this3.onError(err, rawFile);\n\t delete _this3.reqs[uid];\n\t }\n\t };\n\t var req = this.httpRequest(options);\n\t this.reqs[uid] = req;\n\t if (req && req.then) {\n\t req.then(options.onSuccess, options.onError);\n\t }\n\t },\n\t handleClick: function handleClick() {\n\t if (!this.disabled) {\n\t this.$refs.input.value = null;\n\t this.$refs.input.click();\n\t }\n\t }\n\t },\n\n\t render: function render(h) {\n\t var handleClick = this.handleClick,\n\t drag = this.drag,\n\t name = this.name,\n\t handleChange = this.handleChange,\n\t multiple = this.multiple,\n\t accept = this.accept,\n\t listType = this.listType,\n\t uploadFiles = this.uploadFiles,\n\t disabled = this.disabled;\n\n\t var data = {\n\t class: {\n\t 'el-upload': true\n\t },\n\t on: {\n\t click: handleClick\n\t }\n\t };\n\t data.class['el-upload--' + listType] = true;\n\t return h(\n\t 'div',\n\t data,\n\t [drag ? h(\n\t 'upload-dragger',\n\t {\n\t attrs: { disabled: disabled },\n\t on: {\n\t 'file': uploadFiles\n\t }\n\t },\n\t [this.$slots.default]\n\t ) : this.$slots.default, h(\n\t 'input',\n\t { 'class': 'el-upload__input', attrs: { type: 'file', name: name, multiple: multiple, accept: accept },\n\t ref: 'input', on: {\n\t 'change': handleChange\n\t }\n\t },\n\t []\n\t )]\n\t );\n\t }\n\t};\n\n/***/ },\n/* 283 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\texports.default = upload;\n\tfunction getError(action, option, xhr) {\n\t var msg = void 0;\n\t if (xhr.response) {\n\t msg = xhr.status + ' ' + (xhr.response.error || xhr.response);\n\t } else if (xhr.responseText) {\n\t msg = xhr.status + ' ' + xhr.responseText;\n\t } else {\n\t msg = 'fail to post ' + action + ' ' + xhr.status;\n\t }\n\n\t var err = new Error(msg);\n\t err.status = xhr.status;\n\t err.method = 'post';\n\t err.url = action;\n\t return err;\n\t}\n\n\tfunction getBody(xhr) {\n\t var text = xhr.responseText || xhr.response;\n\t if (!text) {\n\t return text;\n\t }\n\n\t try {\n\t return JSON.parse(text);\n\t } catch (e) {\n\t return text;\n\t }\n\t}\n\n\tfunction upload(option) {\n\t if (typeof XMLHttpRequest === 'undefined') {\n\t return;\n\t }\n\n\t var xhr = new XMLHttpRequest();\n\t var action = option.action;\n\n\t if (xhr.upload) {\n\t xhr.upload.onprogress = function progress(e) {\n\t if (e.total > 0) {\n\t e.percent = e.loaded / e.total * 100;\n\t }\n\t option.onProgress(e);\n\t };\n\t }\n\n\t var formData = new FormData();\n\n\t if (option.data) {\n\t Object.keys(option.data).forEach(function (key) {\n\t formData.append(key, option.data[key]);\n\t });\n\t }\n\n\t formData.append(option.filename, option.file);\n\n\t xhr.onerror = function error(e) {\n\t option.onError(e);\n\t };\n\n\t xhr.onload = function onload() {\n\t if (xhr.status < 200 || xhr.status >= 300) {\n\t return option.onError(getError(action, option, xhr));\n\t }\n\n\t option.onSuccess(getBody(xhr));\n\t };\n\n\t xhr.open('post', action, true);\n\n\t if (option.withCredentials && 'withCredentials' in xhr) {\n\t xhr.withCredentials = true;\n\t }\n\n\t var headers = option.headers || {};\n\n\t for (var item in headers) {\n\t if (headers.hasOwnProperty(item) && headers[item] !== null) {\n\t xhr.setRequestHeader(item, headers[item]);\n\t }\n\t }\n\t xhr.send(formData);\n\t return xhr;\n\t}\n\n/***/ },\n/* 284 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(285),\n\t /* template */\n\t __webpack_require__(286),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 285 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElUploadDrag',\n\t props: {\n\t disabled: Boolean\n\t },\n\t data: function data() {\n\t return {\n\t dragover: false\n\t };\n\t },\n\n\t methods: {\n\t onDragover: function onDragover() {\n\t if (!this.disabled) {\n\t this.dragover = true;\n\t }\n\t },\n\t onDrop: function onDrop(e) {\n\t if (!this.disabled) {\n\t this.dragover = false;\n\t this.$emit('file', e.dataTransfer.files);\n\t }\n\t }\n\t }\n\t};\n\n/***/ },\n/* 286 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-upload-dragger\",\n\t class: {\n\t 'is-dragover': _vm.dragover\n\t },\n\t on: {\n\t \"drop\": function($event) {\n\t $event.preventDefault();\n\t _vm.onDrop($event)\n\t },\n\t \"dragover\": function($event) {\n\t $event.preventDefault();\n\t _vm.onDragover($event)\n\t },\n\t \"dragleave\": function($event) {\n\t $event.preventDefault();\n\t _vm.dragover = false\n\t }\n\t }\n\t }, [_vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 287 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(288),\n\t /* template */\n\t null,\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 288 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _uploadDragger = __webpack_require__(284);\n\n\tvar _uploadDragger2 = _interopRequireDefault(_uploadDragger);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t components: {\n\t UploadDragger: _uploadDragger2.default\n\t },\n\t props: {\n\t type: String,\n\t data: {},\n\t action: {\n\t type: String,\n\t required: true\n\t },\n\t name: {\n\t type: String,\n\t default: 'file'\n\t },\n\t withCredentials: Boolean,\n\t accept: String,\n\t onStart: Function,\n\t onProgress: Function,\n\t onSuccess: Function,\n\t onError: Function,\n\t beforeUpload: Function,\n\t onPreview: {\n\t type: Function,\n\t default: function _default() {}\n\t },\n\t onRemove: {\n\t type: Function,\n\t default: function _default() {}\n\t },\n\t drag: Boolean,\n\t listType: String,\n\t disabled: Boolean\n\t },\n\n\t data: function data() {\n\t return {\n\t mouseover: false,\n\t domain: '',\n\t file: null,\n\t submitting: false\n\t };\n\t },\n\n\n\t methods: {\n\t isImage: function isImage(str) {\n\t return str.indexOf('image') !== -1;\n\t },\n\t handleClick: function handleClick() {\n\t if (!this.disabled) {\n\t this.$refs.input.click();\n\t }\n\t },\n\t handleChange: function handleChange(ev) {\n\t var file = ev.target.value;\n\t if (file) {\n\t this.uploadFiles(file);\n\t }\n\t },\n\t uploadFiles: function uploadFiles(file) {\n\t if (this.submitting) return;\n\t this.submitting = true;\n\t this.file = file;\n\t this.onStart(file);\n\n\t var formNode = this.getFormNode();\n\t var dataSpan = this.getFormDataNode();\n\t var data = this.data;\n\t if (typeof data === 'function') {\n\t data = data(file);\n\t }\n\t var inputs = [];\n\t for (var key in data) {\n\t if (data.hasOwnProperty(key)) {\n\t inputs.push('<input name=\"' + key + '\" value=\"' + data[key] + '\"/>');\n\t }\n\t }\n\t dataSpan.innerHTML = inputs.join('');\n\t formNode.submit();\n\t dataSpan.innerHTML = '';\n\t },\n\t getFormNode: function getFormNode() {\n\t return this.$refs.form;\n\t },\n\t getFormDataNode: function getFormDataNode() {\n\t return this.$refs.data;\n\t }\n\t },\n\n\t created: function created() {\n\t this.frameName = 'frame-' + Date.now();\n\t },\n\t mounted: function mounted() {\n\t var self = this;\n\t !this.$isServer && window.addEventListener('message', function (event) {\n\t if (!self.file) return;\n\t var targetOrigin = new URL(self.action).origin;\n\t if (event.origin !== targetOrigin) return;\n\t var response = event.data;\n\t if (response.result === 'success') {\n\t self.onSuccess(response, self.file);\n\t } else if (response.result === 'failed') {\n\t self.onError(response, self.file);\n\t }\n\t self.submitting = false;\n\t self.file = null;\n\t }, false);\n\t },\n\t render: function render(h) {\n\t var drag = this.drag,\n\t uploadFiles = this.uploadFiles,\n\t listType = this.listType,\n\t frameName = this.frameName,\n\t disabled = this.disabled;\n\n\t var oClass = { 'el-upload': true };\n\t oClass['el-upload--' + listType] = true;\n\n\t return h(\n\t 'div',\n\t {\n\t 'class': oClass,\n\t on: {\n\t 'click': this.handleClick\n\t },\n\t nativeOn: {\n\t 'drop': this.onDrop,\n\t 'dragover': this.handleDragover,\n\t 'dragleave': this.handleDragleave\n\t }\n\t },\n\t [h(\n\t 'iframe',\n\t {\n\t on: {\n\t 'load': this.onload\n\t },\n\n\t ref: 'iframe',\n\t attrs: { name: frameName\n\t }\n\t },\n\t []\n\t ), h(\n\t 'form',\n\t { ref: 'form', attrs: { action: this.action, target: frameName, enctype: 'multipart/form-data', method: 'POST' }\n\t },\n\t [h(\n\t 'input',\n\t {\n\t 'class': 'el-upload__input',\n\t attrs: { type: 'file',\n\n\t name: 'file',\n\n\t accept: this.accept },\n\t ref: 'input', on: {\n\t 'change': this.handleChange\n\t }\n\t },\n\t []\n\t ), h(\n\t 'input',\n\t {\n\t attrs: { type: 'hidden', name: 'documentDomain', value: this.$isServer ? '' : document.domain }\n\t },\n\t []\n\t ), h(\n\t 'span',\n\t { ref: 'data' },\n\t []\n\t )]\n\t ), drag ? h(\n\t 'upload-dragger',\n\t {\n\t on: {\n\t 'file': uploadFiles\n\t },\n\t attrs: { disabled: disabled }\n\t },\n\t [this.$slots.default]\n\t ) : this.$slots.default]\n\t );\n\t }\n\t};\n\n/***/ },\n/* 289 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(67);\n\n/***/ },\n/* 290 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _progress = __webpack_require__(291);\n\n\tvar _progress2 = _interopRequireDefault(_progress);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_progress2.default.install = function (Vue) {\n\t Vue.component(_progress2.default.name, _progress2.default);\n\t};\n\n\texports.default = _progress2.default;\n\n/***/ },\n/* 291 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(292),\n\t /* template */\n\t __webpack_require__(293),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 292 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElProgress',\n\t props: {\n\t type: {\n\t type: String,\n\t default: 'line',\n\t validator: function validator(val) {\n\t return ['line', 'circle'].indexOf(val) > -1;\n\t }\n\t },\n\t percentage: {\n\t type: Number,\n\t default: 0,\n\t required: true,\n\t validator: function validator(val) {\n\t return val >= 0 && val <= 100;\n\t }\n\t },\n\t status: {\n\t type: String\n\t },\n\t strokeWidth: {\n\t type: Number,\n\t default: 6\n\t },\n\t textInside: {\n\t type: Boolean,\n\t default: false\n\t },\n\t width: {\n\t type: Number,\n\t default: 126\n\t },\n\t showText: {\n\t type: Boolean,\n\t default: true\n\t }\n\t },\n\t computed: {\n\t barStyle: function barStyle() {\n\t var style = {};\n\t style.width = this.percentage + '%';\n\t return style;\n\t },\n\t relativeStrokeWidth: function relativeStrokeWidth() {\n\t return (this.strokeWidth / this.width * 100).toFixed(1);\n\t },\n\t trackPath: function trackPath() {\n\t var radius = parseInt(50 - parseFloat(this.relativeStrokeWidth) / 2, 10);\n\n\t return 'M 50 50 m 0 -' + radius + ' a ' + radius + ' ' + radius + ' 0 1 1 0 ' + radius * 2 + ' a ' + radius + ' ' + radius + ' 0 1 1 0 -' + radius * 2;\n\t },\n\t perimeter: function perimeter() {\n\t var radius = 50 - parseFloat(this.relativeStrokeWidth) / 2;\n\t return 2 * Math.PI * radius;\n\t },\n\t circlePathStyle: function circlePathStyle() {\n\t var perimeter = this.perimeter;\n\t return {\n\t strokeDasharray: perimeter + 'px,' + perimeter + 'px',\n\t strokeDashoffset: (1 - this.percentage / 100) * perimeter + 'px',\n\t transition: 'stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease'\n\t };\n\t },\n\t stroke: function stroke() {\n\t var ret;\n\t switch (this.status) {\n\t case 'success':\n\t ret = '#13ce66';\n\t break;\n\t case 'exception':\n\t ret = '#ff4949';\n\t break;\n\t default:\n\t ret = '#20a0ff';\n\t }\n\t return ret;\n\t },\n\t iconClass: function iconClass() {\n\t if (this.type === 'line') {\n\t return this.status === 'success' ? 'el-icon-circle-check' : 'el-icon-circle-cross';\n\t } else {\n\t return this.status === 'success' ? 'el-icon-check' : 'el-icon-close';\n\t }\n\t },\n\t progressTextSize: function progressTextSize() {\n\t return this.type === 'line' ? 12 + this.strokeWidth * 0.4 : this.width * 0.111111 + 2;\n\t }\n\t }\n\t};\n\n/***/ },\n/* 293 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-progress\",\n\t class: [\n\t 'el-progress--' + _vm.type,\n\t _vm.status ? 'is-' + _vm.status : '', {\n\t 'el-progress--without-text': !_vm.showText,\n\t 'el-progress--text-inside': _vm.textInside,\n\t }\n\t ]\n\t }, [(_vm.type === 'line') ? _c('div', {\n\t staticClass: \"el-progress-bar\"\n\t }, [_c('div', {\n\t staticClass: \"el-progress-bar__outer\",\n\t style: ({\n\t height: _vm.strokeWidth + 'px'\n\t })\n\t }, [_c('div', {\n\t staticClass: \"el-progress-bar__inner\",\n\t style: (_vm.barStyle)\n\t }, [(_vm.showText && _vm.textInside) ? _c('div', {\n\t staticClass: \"el-progress-bar__innerText\"\n\t }, [_vm._v(_vm._s(_vm.percentage) + \"%\")]) : _vm._e()])])]) : _c('div', {\n\t staticClass: \"el-progress-circle\",\n\t style: ({\n\t height: _vm.width + 'px',\n\t width: _vm.width + 'px'\n\t })\n\t }, [_c('svg', {\n\t attrs: {\n\t \"viewBox\": \"0 0 100 100\"\n\t }\n\t }, [_c('path', {\n\t staticClass: \"el-progress-circle__track\",\n\t attrs: {\n\t \"d\": _vm.trackPath,\n\t \"stroke\": \"#e5e9f2\",\n\t \"stroke-width\": _vm.relativeStrokeWidth,\n\t \"fill\": \"none\"\n\t }\n\t }), _c('path', {\n\t staticClass: \"el-progress-circle__path\",\n\t style: (_vm.circlePathStyle),\n\t attrs: {\n\t \"d\": _vm.trackPath,\n\t \"stroke-linecap\": \"round\",\n\t \"stroke\": _vm.stroke,\n\t \"stroke-width\": _vm.relativeStrokeWidth,\n\t \"fill\": \"none\"\n\t }\n\t })])]), (_vm.showText && !_vm.textInside) ? _c('div', {\n\t staticClass: \"el-progress__text\",\n\t style: ({\n\t fontSize: _vm.progressTextSize + 'px'\n\t })\n\t }, [(!_vm.status) ? [_vm._v(_vm._s(_vm.percentage) + \"%\")] : _c('i', {\n\t class: _vm.iconClass\n\t })], 2) : _vm._e()])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 294 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _spinner = __webpack_require__(295);\n\n\tvar _spinner2 = _interopRequireDefault(_spinner);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_spinner2.default.install = function (Vue) {\n\t Vue.component(_spinner2.default.name, _spinner2.default);\n\t};\n\n\texports.default = _spinner2.default;\n\n/***/ },\n/* 295 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(296),\n\t /* template */\n\t __webpack_require__(297),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 296 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElSpinner',\n\t props: {\n\t type: String,\n\t radius: {\n\t type: Number,\n\t default: 100\n\t },\n\t strokeWidth: {\n\t type: Number,\n\t default: 5\n\t },\n\t strokeColor: {\n\t type: String,\n\t default: '#efefef'\n\t }\n\t }\n\t};\n\n/***/ },\n/* 297 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('span', {\n\t staticClass: \"el-spinner\"\n\t }, [_c('svg', {\n\t staticClass: \"el-spinner-inner\",\n\t style: ({\n\t width: _vm.radius / 2 + 'px',\n\t height: _vm.radius / 2 + 'px'\n\t }),\n\t attrs: {\n\t \"viewBox\": \"0 0 50 50\"\n\t }\n\t }, [_c('circle', {\n\t staticClass: \"path\",\n\t attrs: {\n\t \"cx\": \"25\",\n\t \"cy\": \"25\",\n\t \"r\": \"20\",\n\t \"fill\": \"none\",\n\t \"stroke\": _vm.strokeColor,\n\t \"stroke-width\": _vm.strokeWidth\n\t }\n\t })])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 298 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(299);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 299 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vue = __webpack_require__(133);\n\n\tvar _vue2 = _interopRequireDefault(_vue);\n\n\tvar _popup = __webpack_require__(14);\n\n\tvar _vdom = __webpack_require__(194);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar MessageConstructor = _vue2.default.extend(__webpack_require__(300));\n\n\tvar instance = void 0;\n\tvar instances = [];\n\tvar seed = 1;\n\n\tvar Message = function Message(options) {\n\t if (_vue2.default.prototype.$isServer) return;\n\t options = options || {};\n\t if (typeof options === 'string') {\n\t options = {\n\t message: options\n\t };\n\t }\n\t var userOnClose = options.onClose;\n\t var id = 'message_' + seed++;\n\n\t options.onClose = function () {\n\t Message.close(id, userOnClose);\n\t };\n\t instance = new MessageConstructor({\n\t data: options\n\t });\n\t instance.id = id;\n\t if ((0, _vdom.isVNode)(instance.message)) {\n\t instance.$slots.default = [instance.message];\n\t instance.message = null;\n\t }\n\t instance.vm = instance.$mount();\n\t document.body.appendChild(instance.vm.$el);\n\t instance.vm.visible = true;\n\t instance.dom = instance.vm.$el;\n\t instance.dom.style.zIndex = _popup.PopupManager.nextZIndex();\n\t instances.push(instance);\n\t return instance.vm;\n\t};\n\n\t['success', 'warning', 'info', 'error'].forEach(function (type) {\n\t Message[type] = function (options) {\n\t if (typeof options === 'string') {\n\t options = {\n\t message: options\n\t };\n\t }\n\t options.type = type;\n\t return Message(options);\n\t };\n\t});\n\n\tMessage.close = function (id, userOnClose) {\n\t for (var i = 0, len = instances.length; i < len; i++) {\n\t if (id === instances[i].id) {\n\t if (typeof userOnClose === 'function') {\n\t userOnClose(instances[i]);\n\t }\n\t instances.splice(i, 1);\n\t break;\n\t }\n\t }\n\t};\n\n\tMessage.closeAll = function () {\n\t for (var i = instances.length - 1; i >= 0; i--) {\n\t instances[i].close();\n\t }\n\t};\n\n\texports.default = Message;\n\n/***/ },\n/* 300 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(301),\n\t /* template */\n\t __webpack_require__(307),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 301 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t data: function data() {\n\t return {\n\t visible: false,\n\t message: '',\n\t duration: 3000,\n\t type: 'info',\n\t iconClass: '',\n\t customClass: '',\n\t onClose: null,\n\t showClose: false,\n\t closed: false,\n\t timer: null\n\t };\n\t },\n\n\n\t computed: {\n\t typeImg: function typeImg() {\n\t return __webpack_require__(302)(\"./\" + this.type + '.svg');\n\t }\n\t },\n\n\t watch: {\n\t closed: function closed(newVal) {\n\t if (newVal) {\n\t this.visible = false;\n\t this.$el.addEventListener('transitionend', this.destroyElement);\n\t }\n\t }\n\t },\n\n\t methods: {\n\t destroyElement: function destroyElement() {\n\t this.$el.removeEventListener('transitionend', this.destroyElement);\n\t this.$destroy(true);\n\t this.$el.parentNode.removeChild(this.$el);\n\t },\n\t close: function close() {\n\t this.closed = true;\n\t if (typeof this.onClose === 'function') {\n\t this.onClose(this);\n\t }\n\t },\n\t clearTimer: function clearTimer() {\n\t clearTimeout(this.timer);\n\t },\n\t startTimer: function startTimer() {\n\t var _this = this;\n\n\t if (this.duration > 0) {\n\t this.timer = setTimeout(function () {\n\t if (!_this.closed) {\n\t _this.close();\n\t }\n\t }, this.duration);\n\t }\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t this.startTimer();\n\t }\n\t};\n\n/***/ },\n/* 302 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar map = {\n\t\t\"./error.svg\": 303,\n\t\t\"./info.svg\": 304,\n\t\t\"./success.svg\": 305,\n\t\t\"./warning.svg\": 306\n\t};\n\tfunction webpackContext(req) {\n\t\treturn __webpack_require__(webpackContextResolve(req));\n\t};\n\tfunction webpackContextResolve(req) {\n\t\treturn map[req] || (function() { throw new Error(\"Cannot find module '\" + req + \"'.\") }());\n\t};\n\twebpackContext.keys = function webpackContextKeys() {\n\t\treturn Object.keys(map);\n\t};\n\twebpackContext.resolve = webpackContextResolve;\n\tmodule.exports = webpackContext;\n\twebpackContext.id = 302;\n\n\n/***/ },\n/* 303 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDQwIDQwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzOS4xICgzMTcyMCkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+aWNvbl9kYW5nZXI8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz48L2RlZnM+CiAgICA8ZyBpZD0iRWxlbWVudC1ndWlkZWxpbmUtdjAuMi40IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iTWVzc2FnZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTYwLjAwMDAwMCwgLTMzMi4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9IuW4puWAvuWQkV/kv6Hmga8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYwLjAwMDAwMCwgMzMyLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPGcgaWQ9IlJlY3RhbmdsZS0yIj4KICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iaWNvbl9kYW5nZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlLTIiIGZpbGw9IiNGRjQ5NDkiIHg9IjAiIHk9IjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCI+PC9yZWN0PgogICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjUuODE3MjYyNywxNi4zNDUxNzk2IEMyNS45MzkwOTAyLDE2LjIyMzM0ODMgMjYsMTYuMDc2MTQxOCAyNiwxNS45MDM1NTIzIEMyNiwxNS43MzA5NjI4IDI1LjkzOTA5MDIsMTUuNTgzNzU2MyAyNS44MTcyNjI3LDE1LjQ2MTkyODkgTDI0LjUwNzYxNTcsMTQuMTgyNzQxMSBDMjQuMzg1Nzg4MiwxNC4wNjA5MTM3IDI0LjI0MzY1NzUsMTQgMjQuMDgxMjE5NiwxNCBDMjMuOTE4NzgxNywxNCAyMy43NzY2NTEsMTQuMDYwOTEzNyAyMy42NTQ4MjM1LDE0LjE4Mjc0MTEgTDIwLDE3LjgzNzU2MzUgTDE2LjMxNDcyMTYsMTQuMTgyNzQxMSBDMTYuMTkyODkwMiwxNC4wNjA5MTM3IDE2LjA1MDc1OTUsMTQgMTUuODg4MzIxNiwxNCBDMTUuNzI1ODg3NiwxNCAxNS41ODM3NTY5LDE0LjA2MDkxMzcgMTUuNDYxOTI5NCwxNC4xODI3NDExIEwxNC4xNTIyODI0LDE1LjQ2MTkyODkgQzE0LjA1MDc1ODIsMTUuNTgzNzU2MyAxNCwxNS43MzA5NjI4IDE0LDE1LjkwMzU1MjMgQzE0LDE2LjA3NjE0MTggMTQuMDUwNzU4MiwxNi4yMjMzNDgzIDE0LjE1MjI4MjQsMTYuMzQ1MTc5NiBMMTcuODM3NTYwOCwyMC4wMDAwMDE5IEwxNC4xNTIyODI0LDIzLjY1NDgyNDMgQzE0LjA1MDc1ODIsMjMuNzc2NjUxNyAxNCwyMy45MjM4NTgyIDE0LDI0LjA5NjQ0NzcgQzE0LDI0LjI2OTAzNzIgMTQuMDUwNzU4MiwyNC40MTYyNDM3IDE0LjE1MjI4MjQsMjQuNTM4MDcxMSBMMTUuNDYxOTI5NCwyNS44MTcyNTg5IEMxNS41ODM3NTY5LDI1LjkzOTA4NjMgMTUuNzI1ODg3NiwyNiAxNS44ODgzMjE2LDI2IEMxNi4wNTA3NTk1LDI2IDE2LjE5Mjg5MDIsMjUuOTM5MDg2MyAxNi4zMTQ3MjE2LDI1LjgxNzI1ODkgTDIwLDIyLjE2MjQzNjUgTDIzLjY1NDgyMzUsMjUuODE3MjU4OSBDMjMuNzc2NjUxLDI1LjkzOTA4NjMgMjMuOTE4NzgxNywyNiAyNC4wODEyMTk2LDI2IEMyNC4yNDM2NTc1LDI2IDI0LjM4NTc4ODIsMjUuOTM5MDg2MyAyNC41MDc2MTU3LDI1LjgxNzI1ODkgTDI1LjgxNzI2MjcsMjQuNTM4MDcxMSBDMjUuOTM5MDkwMiwyNC40MTYyNDM3IDI2LDI0LjI2OTAzNzIgMjYsMjQuMDk2NDQ3NyBDMjYsMjMuOTIzODU4MiAyNS45MzkwOTAyLDIzLjc3NjY1MTcgMjUuODE3MjYyNywyMy42NTQ4MjQzIEwyMi4xMzE5ODA0LDIwLjAwMDAwMTkgTDI1LjgxNzI2MjcsMTYuMzQ1MTc5NiBaIiBpZD0iUGF0aCIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+\"\n\n/***/ },\n/* 304 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDQwIDQwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzOS4xICgzMTcyMCkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+aWNvbl9pbmZvPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IkVsZW1lbnQtZ3VpZGVsaW5lLXYwLjIuNCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Ik1lc3NhZ2UiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC02MC4wMDAwMDAsIC0xNTIuMDAwMDAwKSI+CiAgICAgICAgICAgIDxnIGlkPSLluKblgL7lkJFf5L+h5oGvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MC4wMDAwMDAsIDE1Mi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxnIGlkPSJSZWN0YW5nbGUtMiI+CiAgICAgICAgICAgICAgICAgICAgPGcgaWQ9Imljb25faW5mbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUtMiIgZmlsbD0iIzUwQkZGRiIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIj48L3JlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS42MTUzODQ2LDI2LjU0MzIwOTkgQzIxLjYxNTM4NDYsMjYuOTQ3ODc1MSAyMS40NTgzMzQ4LDI3LjI5MTgzNjggMjEuMTQ0MjMwOCwyNy41NzUxMDI5IEMyMC44MzAxMjY4LDI3Ljg1ODM2ODkgMjAuNDQ4NzE5NCwyOCAyMCwyOCBDMTkuNTUxMjgwNiwyOCAxOS4xNjk4NzMyLDI3Ljg1ODM2ODkgMTguODU1NzY5MiwyNy41NzUxMDI5IEMxOC41NDE2NjUyLDI3LjI5MTgzNjggMTguMzg0NjE1NCwyNi45NDc4NzUxIDE4LjM4NDYxNTQsMjYuNTQzMjA5OSBMMTguMzg0NjE1NCwxOS43NDQ4NTYgQzE4LjM4NDYxNTQsMTkuMzQwMTkwNyAxOC41NDE2NjUyLDE4Ljk5NjIyOSAxOC44NTU3NjkyLDE4LjcxMjk2MyBDMTkuMTY5ODczMiwxOC40Mjk2OTY5IDE5LjU1MTI4MDYsMTguMjg4MDY1OCAyMCwxOC4yODgwNjU4IEMyMC40NDg3MTk0LDE4LjI4ODA2NTggMjAuODMwMTI2OCwxOC40Mjk2OTY5IDIxLjE0NDIzMDgsMTguNzEyOTYzIEMyMS40NTgzMzQ4LDE4Ljk5NjIyOSAyMS42MTUzODQ2LDE5LjM0MDE5MDcgMjEuNjE1Mzg0NiwxOS43NDQ4NTYgTDIxLjYxNTM4NDYsMjYuNTQzMjA5OSBaIE0yMCwxNS44MDQyOTgxIEMxOS40NDQ0NDI3LDE1LjgwNDI5ODEgMTguOTcyMjI0LDE1LjYxOTM2ODcgMTguNTgzMzMzMywxNS4yNDk1MDQ2IEMxOC4xOTQ0NDI3LDE0Ljg3OTY0MDYgMTgsMTQuNDMwNTI1NSAxOCwxMy45MDIxNDkxIEMxOCwxMy4zNzM3NzI2IDE4LjE5NDQ0MjcsMTIuOTI0NjU3NSAxOC41ODMzMzMzLDEyLjU1NDc5MzUgQzE4Ljk3MjIyNCwxMi4xODQ5Mjk1IDE5LjQ0NDQ0MjcsMTIgMjAsMTIgQzIwLjU1NTU1NzMsMTIgMjEuMDI3Nzc2LDEyLjE4NDkyOTUgMjEuNDE2NjY2NywxMi41NTQ3OTM1IEMyMS44MDU1NTczLDEyLjkyNDY1NzUgMjIsMTMuMzczNzcyNiAyMiwxMy45MDIxNDkxIEMyMiwxNC40MzA1MjU1IDIxLjgwNTU1NzMsMTQuODc5NjQwNiAyMS40MTY2NjY3LDE1LjI0OTUwNDYgQzIxLjAyNzc3NiwxNS42MTkzNjg3IDIwLjU1NTU1NzMsMTUuODA0Mjk4MSAyMCwxNS44MDQyOTgxIFoiIGlkPSJDb21iaW5lZC1TaGFwZSIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+\"\n\n/***/ },\n/* 305 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDQwIDQwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzOS4xICgzMTcyMCkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+aWNvbl9zdWNjZXNzPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IkVsZW1lbnQtZ3VpZGVsaW5lLXYwLjIuNCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Ik1lc3NhZ2UiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC02MC4wMDAwMDAsIC0yMTIuMDAwMDAwKSI+CiAgICAgICAgICAgIDxnIGlkPSLluKblgL7lkJFf5L+h5oGvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2MC4wMDAwMDAsIDIxMi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxnIGlkPSJSZWN0YW5nbGUtMiI+CiAgICAgICAgICAgICAgICAgICAgPGcgaWQ9Imljb25fc3VjY2VzcyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUtMiIgZmlsbD0iIzEzQ0U2NiIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIj48L3JlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy44MjU1ODE0LDE3LjE0ODQzNTcgTDE5LjAxNzQ0LDI1LjgyODEyMTMgQzE4LjkwMTE2MDksMjUuOTQyNzA4MyAxOC43NjU1MDMzLDI2IDE4LjYxMDQ2NywyNiBDMTguNDU1NDI3LDI2IDE4LjMxOTc2OTMsMjUuOTQyNzA4MyAxOC4yMDM0ODY1LDI1LjgyODEyMTMgTDE4LjAyOTA3MTYsMjUuNjU2MjUgTDEzLjE3NDQxODYsMjAuODQzNzUgQzEzLjA1ODEzOTUsMjAuNzI5MTYzIDEzLDIwLjU5NTQ4MzcgMTMsMjAuNDQyNzA0NyBDMTMsMjAuMjg5OTI5MyAxMy4wNTgxMzk1LDIwLjE1NjI1IDEzLjE3NDQxODYsMjAuMDQxNjY2NyBMMTQuMzY2Mjc3MiwxOC44NjcxODU3IEMxNC40ODI1NiwxOC43NTI2MDIzIDE0LjYxODIxNzcsMTguNjk1MzEwNyAxNC43NzMyNTc3LDE4LjY5NTMxMDcgQzE0LjkyODI5NCwxOC42OTUzMTA3IDE1LjA2Mzk1MTYsMTguNzUyNjAyMyAxNS4xODAyMzA3LDE4Ljg2NzE4NTcgTDE4LjYxMDQ2NywyMi4yNzYwMzggTDI1LjgxOTc2OTMsMTUuMTcxODcxMyBDMjUuOTM2MDQ4NCwxNS4wNTcyODggMjYuMDcxNzA2LDE1IDI2LjIyNjc0MjMsMTUgQzI2LjM4MTc4MjMsMTUgMjYuNTE3NDQsMTUuMDU3Mjg4IDI2LjYzMzcyMjgsMTUuMTcxODcxMyBMMjcuODI1NTgxNCwxNi4zNDYzNTIzIEMyNy45NDE4NjA1LDE2LjQ2MDkzNTcgMjgsMTYuNTk0NjE1IDI4LDE2Ljc0NzM5NCBDMjgsMTYuOTAwMTczIDI3Ljk0MTg2MDUsMTcuMDMzODUyMyAyNy44MjU1ODE0LDE3LjE0ODQzNTcgTDI3LjgyNTU4MTQsMTcuMTQ4NDM1NyBaIiBpZD0iUGF0aCIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+\"\n\n/***/ },\n/* 306 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcgd2lkdGg9IjQwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDQwIDQwIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCAzOS4xICgzMTcyMCkgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+aWNvbl93YXJuaW5nPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+PC9kZWZzPgogICAgPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Ik1lc3NhZ2UiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC02MC4wMDAwMDAsIC0yNzIuMDAwMDAwKSI+CiAgICAgICAgICAgIDxnIGlkPSLluKblgL7lkJFf5L+h5oGvLWNvcHkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYwLjAwMDAwMCwgMjcyLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPGcgaWQ9IlJlY3RhbmdsZS0yIj4KICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iaWNvbl93YXJuaW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3QgaWQ9IlJlY3RhbmdsZS0yIiBmaWxsPSIjRjdCQTJBIiB4PSIwIiB5PSIwIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiPjwvcmVjdD4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTIxLjYxNTM4NDYsMjYuNTQzMjA5OSBDMjEuNjE1Mzg0NiwyNi45NDc4NzUxIDIxLjQ1ODMzNDgsMjcuMjkxODM2OCAyMS4xNDQyMzA4LDI3LjU3NTEwMjkgQzIwLjgzMDEyNjgsMjcuODU4MzY4OSAyMC40NDg3MTk0LDI4IDIwLDI4IEMxOS41NTEyODA2LDI4IDE5LjE2OTg3MzIsMjcuODU4MzY4OSAxOC44NTU3NjkyLDI3LjU3NTEwMjkgQzE4LjU0MTY2NTIsMjcuMjkxODM2OCAxOC4zODQ2MTU0LDI2Ljk0Nzg3NTEgMTguMzg0NjE1NCwyNi41NDMyMDk5IEwxOC4zODQ2MTU0LDE5Ljc0NDg1NiBDMTguMzg0NjE1NCwxOS4zNDAxOTA3IDE4LjU0MTY2NTIsMTguOTk2MjI5IDE4Ljg1NTc2OTIsMTguNzEyOTYzIEMxOS4xNjk4NzMyLDE4LjQyOTY5NjkgMTkuNTUxMjgwNiwxOC4yODgwNjU4IDIwLDE4LjI4ODA2NTggQzIwLjQ0ODcxOTQsMTguMjg4MDY1OCAyMC44MzAxMjY4LDE4LjQyOTY5NjkgMjEuMTQ0MjMwOCwxOC43MTI5NjMgQzIxLjQ1ODMzNDgsMTguOTk2MjI5IDIxLjYxNTM4NDYsMTkuMzQwMTkwNyAyMS42MTUzODQ2LDE5Ljc0NDg1NiBMMjEuNjE1Mzg0NiwyNi41NDMyMDk5IFogTTIwLDE1LjgwNDI5ODEgQzE5LjQ0NDQ0MjcsMTUuODA0Mjk4MSAxOC45NzIyMjQsMTUuNjE5MzY4NyAxOC41ODMzMzMzLDE1LjI0OTUwNDYgQzE4LjE5NDQ0MjcsMTQuODc5NjQwNiAxOCwxNC40MzA1MjU1IDE4LDEzLjkwMjE0OTEgQzE4LDEzLjM3Mzc3MjYgMTguMTk0NDQyNywxMi45MjQ2NTc1IDE4LjU4MzMzMzMsMTIuNTU0NzkzNSBDMTguOTcyMjI0LDEyLjE4NDkyOTUgMTkuNDQ0NDQyNywxMiAyMCwxMiBDMjAuNTU1NTU3MywxMiAyMS4wMjc3NzYsMTIuMTg0OTI5NSAyMS40MTY2NjY3LDEyLjU1NDc5MzUgQzIxLjgwNTU1NzMsMTIuOTI0NjU3NSAyMiwxMy4zNzM3NzI2IDIyLDEzLjkwMjE0OTEgQzIyLDE0LjQzMDUyNTUgMjEuODA1NTU3MywxNC44Nzk2NDA2IDIxLjQxNjY2NjcsMTUuMjQ5NTA0NiBDMjEuMDI3Nzc2LDE1LjYxOTM2ODcgMjAuNTU1NTU3MywxNS44MDQyOTgxIDIwLDE1LjgwNDI5ODEgWiIgaWQ9IkNvbWJpbmVkLVNoYXBlIiBmaWxsPSIjRkZGRkZGIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMC4wMDAwMDAsIDIwLjAwMDAwMCkgc2NhbGUoMSwgLTEpIHRyYW5zbGF0ZSgtMjAuMDAwMDAwLCAtMjAuMDAwMDAwKSAiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==\"\n\n/***/ },\n/* 307 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"el-message-fade\"\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible),\n\t expression: \"visible\"\n\t }],\n\t staticClass: \"el-message\",\n\t class: _vm.customClass,\n\t on: {\n\t \"mouseenter\": _vm.clearTimer,\n\t \"mouseleave\": _vm.startTimer\n\t }\n\t }, [(!_vm.iconClass) ? _c('img', {\n\t staticClass: \"el-message__img\",\n\t attrs: {\n\t \"src\": _vm.typeImg,\n\t \"alt\": \"\"\n\t }\n\t }) : _vm._e(), _c('div', {\n\t staticClass: \"el-message__group\",\n\t class: {\n\t 'is-with-icon': _vm.iconClass\n\t }\n\t }, [_vm._t(\"default\", [_c('p', [(_vm.iconClass) ? _c('i', {\n\t staticClass: \"el-message__icon\",\n\t class: _vm.iconClass\n\t }) : _vm._e(), _vm._v(_vm._s(_vm.message))])]), (_vm.showClose) ? _c('div', {\n\t staticClass: \"el-message__closeBtn el-icon-close\",\n\t on: {\n\t \"click\": _vm.close\n\t }\n\t }) : _vm._e()], 2)])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 308 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(309);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_main2.default.install = function (Vue) {\n\t Vue.component(_main2.default.name, _main2.default);\n\t};\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 309 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(310),\n\t /* template */\n\t __webpack_require__(311),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 310 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElBadge',\n\n\t props: {\n\t value: {},\n\t max: Number,\n\t isDot: Boolean,\n\t hidden: Boolean\n\t },\n\n\t computed: {\n\t content: function content() {\n\t if (this.isDot) return;\n\n\t var value = this.value;\n\t var max = this.max;\n\n\t if (typeof value === 'number' && typeof max === 'number') {\n\t return max < value ? max + '+' : value;\n\t }\n\n\t return value;\n\t }\n\t }\n\t};\n\n/***/ },\n/* 311 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-badge\"\n\t }, [_vm._t(\"default\"), _c('transition', {\n\t attrs: {\n\t \"name\": \"el-zoom-in-center\"\n\t }\n\t }, [_c('sup', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (!_vm.hidden && (_vm.content || _vm.isDot)),\n\t expression: \"!hidden && ( content || isDot )\"\n\t }],\n\t staticClass: \"el-badge__content\",\n\t class: {\n\t 'is-fixed': _vm.$slots.default, 'is-dot': _vm.isDot\n\t },\n\t domProps: {\n\t \"textContent\": _vm._s(_vm.content)\n\t }\n\t })])], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 312 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(313);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_main2.default.install = function (Vue) {\n\t Vue.component(_main2.default.name, _main2.default);\n\t};\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 313 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(314),\n\t /* template */\n\t __webpack_require__(315),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 314 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElCard',\n\n\t props: ['header', 'bodyStyle']\n\t};\n\n/***/ },\n/* 315 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-card\"\n\t }, [(_vm.$slots.header || _vm.header) ? _c('div', {\n\t staticClass: \"el-card__header\"\n\t }, [_vm._t(\"header\", [_vm._v(_vm._s(_vm.header))])], 2) : _vm._e(), _c('div', {\n\t staticClass: \"el-card__body\",\n\t style: (_vm.bodyStyle)\n\t }, [_vm._t(\"default\")], 2)])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 316 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(317);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_main2.default.install = function (Vue) {\n\t Vue.component(_main2.default.name, _main2.default);\n\t};\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 317 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(318),\n\t /* template */\n\t __webpack_require__(319),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 318 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _dom = __webpack_require__(44);\n\n\texports.default = {\n\t name: 'ElRate',\n\n\t data: function data() {\n\t return {\n\t classMap: {},\n\t pointerAtLeftHalf: true,\n\t currentValue: this.value,\n\t hoverIndex: -1\n\t };\n\t },\n\n\n\t props: {\n\t value: {\n\t type: Number,\n\t default: 0\n\t },\n\t lowThreshold: {\n\t type: Number,\n\t default: 2\n\t },\n\t highThreshold: {\n\t type: Number,\n\t default: 4\n\t },\n\t max: {\n\t type: Number,\n\t default: 5\n\t },\n\t colors: {\n\t type: Array,\n\t default: function _default() {\n\t return ['#F7BA2A', '#F7BA2A', '#F7BA2A'];\n\t }\n\t },\n\t voidColor: {\n\t type: String,\n\t default: '#C6D1DE'\n\t },\n\t disabledVoidColor: {\n\t type: String,\n\t default: '#EFF2F7'\n\t },\n\t iconClasses: {\n\t type: Array,\n\t default: function _default() {\n\t return ['el-icon-star-on', 'el-icon-star-on', 'el-icon-star-on'];\n\t }\n\t },\n\t voidIconClass: {\n\t type: String,\n\t default: 'el-icon-star-off'\n\t },\n\t disabledVoidIconClass: {\n\t type: String,\n\t default: 'el-icon-star-on'\n\t },\n\t disabled: {\n\t type: Boolean,\n\t default: false\n\t },\n\t allowHalf: {\n\t type: Boolean,\n\t default: false\n\t },\n\t showText: {\n\t type: Boolean,\n\t default: false\n\t },\n\t textColor: {\n\t type: String,\n\t default: '#1f2d3d'\n\t },\n\t texts: {\n\t type: Array,\n\t default: function _default() {\n\t return ['极差', '失望', '一般', '满意', '惊喜'];\n\t }\n\t },\n\t textTemplate: {\n\t type: String,\n\t default: '{value}'\n\t }\n\t },\n\n\t computed: {\n\t text: function text() {\n\t var result = '';\n\t if (this.disabled) {\n\t result = this.textTemplate.replace(/\\{\\s*value\\s*\\}/, this.value);\n\t } else {\n\t result = this.texts[Math.ceil(this.currentValue) - 1];\n\t }\n\t return result;\n\t },\n\t decimalStyle: function decimalStyle() {\n\t var width = '';\n\t if (this.disabled) {\n\t width = (this.valueDecimal < 50 ? 0 : 50) + '%';\n\t }\n\t if (this.allowHalf) {\n\t width = '50%';\n\t }\n\t return {\n\t color: this.activeColor,\n\t width: width\n\t };\n\t },\n\t valueDecimal: function valueDecimal() {\n\t return this.value * 100 - Math.floor(this.value) * 100;\n\t },\n\t decimalIconClass: function decimalIconClass() {\n\t return this.getValueFromMap(this.value, this.classMap);\n\t },\n\t voidClass: function voidClass() {\n\t return this.disabled ? this.classMap.disabledVoidClass : this.classMap.voidClass;\n\t },\n\t activeClass: function activeClass() {\n\t return this.getValueFromMap(this.currentValue, this.classMap);\n\t },\n\t colorMap: function colorMap() {\n\t return {\n\t lowColor: this.colors[0],\n\t mediumColor: this.colors[1],\n\t highColor: this.colors[2],\n\t voidColor: this.voidColor,\n\t disabledVoidColor: this.disabledVoidColor\n\t };\n\t },\n\t activeColor: function activeColor() {\n\t return this.getValueFromMap(this.currentValue, this.colorMap);\n\t },\n\t classes: function classes() {\n\t var result = [];\n\t var i = 0;\n\t var threshold = this.currentValue;\n\t if (this.allowHalf && this.currentValue !== Math.floor(this.currentValue)) {\n\t threshold--;\n\t }\n\t for (; i < threshold; i++) {\n\t result.push(this.activeClass);\n\t }\n\t for (; i < this.max; i++) {\n\t result.push(this.voidClass);\n\t }\n\t return result;\n\t }\n\t },\n\n\t watch: {\n\t value: function value(val) {\n\t this.$emit('change', val);\n\t this.currentValue = val;\n\t this.pointerAtLeftHalf = this.value !== Math.floor(this.value);\n\t }\n\t },\n\n\t methods: {\n\t getValueFromMap: function getValueFromMap(value, map) {\n\t var result = '';\n\t if (value <= this.lowThreshold) {\n\t result = map.lowColor || map.lowClass;\n\t } else if (value >= this.highThreshold) {\n\t result = map.highColor || map.highClass;\n\t } else {\n\t result = map.mediumColor || map.mediumClass;\n\t }\n\t return result;\n\t },\n\t showDecimalIcon: function showDecimalIcon(item) {\n\t var showWhenDisabled = this.disabled && this.valueDecimal > 0 && item - 1 < this.value && item > this.value;\n\t /* istanbul ignore next */\n\t var showWhenAllowHalf = this.allowHalf && this.pointerAtLeftHalf && item - 0.5 <= this.currentValue && item > this.currentValue;\n\t return showWhenDisabled || showWhenAllowHalf;\n\t },\n\t getIconStyle: function getIconStyle(item) {\n\t var voidColor = this.disabled ? this.colorMap.disabledVoidColor : this.colorMap.voidColor;\n\t return {\n\t color: item <= this.currentValue ? this.activeColor : voidColor\n\t };\n\t },\n\t selectValue: function selectValue(value) {\n\t if (this.disabled) {\n\t return;\n\t }\n\t if (this.allowHalf && this.pointerAtLeftHalf) {\n\t this.$emit('input', this.currentValue);\n\t } else {\n\t this.$emit('input', value);\n\t }\n\t },\n\t setCurrentValue: function setCurrentValue(value, event) {\n\t if (this.disabled) {\n\t return;\n\t }\n\t /* istanbul ignore if */\n\t if (this.allowHalf) {\n\t var target = event.target;\n\t if ((0, _dom.hasClass)(target, 'el-rate__item')) {\n\t target = target.querySelector('.el-rate__icon');\n\t }\n\t if ((0, _dom.hasClass)(target, 'el-rate__decimal')) {\n\t target = target.parentNode;\n\t }\n\t this.pointerAtLeftHalf = event.offsetX * 2 <= target.clientWidth;\n\t this.currentValue = this.pointerAtLeftHalf ? value - 0.5 : value;\n\t } else {\n\t this.currentValue = value;\n\t }\n\t this.hoverIndex = value;\n\t },\n\t resetCurrentValue: function resetCurrentValue() {\n\t if (this.disabled) {\n\t return;\n\t }\n\t if (this.allowHalf) {\n\t this.pointerAtLeftHalf = this.value !== Math.floor(this.value);\n\t }\n\t this.currentValue = this.value;\n\t this.hoverIndex = -1;\n\t }\n\t },\n\n\t created: function created() {\n\t if (!this.value) {\n\t this.$emit('input', 0);\n\t }\n\t this.classMap = {\n\t lowClass: this.iconClasses[0],\n\t mediumClass: this.iconClasses[1],\n\t highClass: this.iconClasses[2],\n\t voidClass: this.voidIconClass,\n\t disabledVoidClass: this.disabledVoidIconClass\n\t };\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 319 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-rate\"\n\t }, [_vm._l((_vm.max), function(item) {\n\t return _c('span', {\n\t staticClass: \"el-rate__item\",\n\t style: ({\n\t cursor: _vm.disabled ? 'auto' : 'pointer'\n\t }),\n\t on: {\n\t \"mousemove\": function($event) {\n\t _vm.setCurrentValue(item, $event)\n\t },\n\t \"mouseleave\": _vm.resetCurrentValue,\n\t \"click\": function($event) {\n\t _vm.selectValue(item)\n\t }\n\t }\n\t }, [_c('i', {\n\t staticClass: \"el-rate__icon\",\n\t class: [_vm.classes[item - 1], {\n\t 'hover': _vm.hoverIndex === item\n\t }],\n\t style: (_vm.getIconStyle(item))\n\t }, [(_vm.showDecimalIcon(item)) ? _c('i', {\n\t staticClass: \"el-rate__decimal\",\n\t class: _vm.decimalIconClass,\n\t style: (_vm.decimalStyle)\n\t }) : _vm._e()])])\n\t }), (_vm.showText) ? _c('span', {\n\t staticClass: \"el-rate__text\",\n\t style: ({\n\t color: _vm.textColor\n\t })\n\t }, [_vm._v(_vm._s(_vm.text))]) : _vm._e()], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 320 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _steps = __webpack_require__(321);\n\n\tvar _steps2 = _interopRequireDefault(_steps);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_steps2.default.install = function (Vue) {\n\t Vue.component(_steps2.default.name, _steps2.default);\n\t};\n\n\texports.default = _steps2.default;\n\n/***/ },\n/* 321 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(322),\n\t /* template */\n\t __webpack_require__(323),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 322 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElSteps',\n\n\t props: {\n\t space: [Number, String],\n\t active: Number,\n\t direction: {\n\t type: String,\n\t default: 'horizontal'\n\t },\n\t alignCenter: Boolean,\n\t center: Boolean,\n\t finishStatus: {\n\t type: String,\n\t default: 'finish'\n\t },\n\t processStatus: {\n\t type: String,\n\t default: 'process'\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t steps: [],\n\t stepOffset: 0\n\t };\n\t },\n\n\n\t watch: {\n\t active: function active(newVal, oldVal) {\n\t this.$emit('change', newVal, oldVal);\n\t },\n\t steps: function steps(_steps) {\n\t var _this = this;\n\n\t _steps.forEach(function (child, index) {\n\t child.index = index;\n\t });\n\t if (this.center) {\n\t (function () {\n\t var len = _steps.length;\n\t _this.$nextTick(function () {\n\t _this.stepOffset = _steps[len - 1].$el.getBoundingClientRect().width / (len - 1);\n\t });\n\t })();\n\t }\n\t }\n\t }\n\t};\n\n/***/ },\n/* 323 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-steps\",\n\t class: ['is-' + _vm.direction, _vm.center ? 'is-center' : '']\n\t }, [_vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 324 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _step = __webpack_require__(325);\n\n\tvar _step2 = _interopRequireDefault(_step);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_step2.default.install = function (Vue) {\n\t Vue.component(_step2.default.name, _step2.default);\n\t};\n\n\texports.default = _step2.default;\n\n/***/ },\n/* 325 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(326),\n\t /* template */\n\t __webpack_require__(327),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 326 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElStep',\n\n\t props: {\n\t title: String,\n\t icon: String,\n\t description: String,\n\t status: String\n\t },\n\n\t data: function data() {\n\t return {\n\t index: -1,\n\t lineStyle: {},\n\t mainOffset: 0,\n\t internalStatus: ''\n\t };\n\t },\n\t beforeCreate: function beforeCreate() {\n\t this.$parent.steps.push(this);\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t var steps = this.$parent.steps;\n\t var index = steps.indexOf(this);\n\t if (index >= 0) {\n\t steps.splice(index, 1);\n\t }\n\t },\n\n\n\t computed: {\n\t currentStatus: function currentStatus() {\n\t return this.status || this.internalStatus;\n\t },\n\t prevStatus: function prevStatus() {\n\t var prevStep = this.$parent.steps[this.index - 1];\n\t return prevStep ? prevStep.currentStatus : 'wait';\n\t },\n\n\t isLast: function isLast() {\n\t var parent = this.$parent;\n\t return parent.steps[parent.steps.length - 1] === this;\n\t },\n\t style: function style() {\n\t var parent = this.$parent;\n\t var isCenter = parent.center;\n\t var len = parent.steps.length;\n\n\t if (isCenter && this.isLast) {\n\t return {};\n\t }\n\n\t var space = typeof parent.space === 'number' ? parent.space + 'px' : parent.space ? parent.space : 100 / (isCenter ? len - 1 : len) + '%';\n\t if (parent.direction === 'horizontal') {\n\t return { width: space };\n\t } else {\n\t if (!this.isLast) {\n\t return { height: space };\n\t }\n\t }\n\t }\n\t },\n\n\t methods: {\n\t updateStatus: function updateStatus(val) {\n\t var prevChild = this.$parent.$children[this.index - 1];\n\n\t if (val > this.index) {\n\t this.internalStatus = this.$parent.finishStatus;\n\t } else if (val === this.index && this.prevStatus !== 'error') {\n\t this.internalStatus = this.$parent.processStatus;\n\t } else {\n\t this.internalStatus = 'wait';\n\t }\n\n\t if (prevChild) prevChild.calcProgress(this.internalStatus);\n\t },\n\t calcProgress: function calcProgress(status) {\n\t var step = 100;\n\t var style = {};\n\n\t style.transitionDelay = 150 * this.index + 'ms';\n\t if (status === this.$parent.processStatus) {\n\t step = this.currentStatus !== 'error' ? 50 : 0;\n\t } else if (status === 'wait') {\n\t step = 0;\n\t style.transitionDelay = -150 * this.index + 'ms';\n\t }\n\n\t style.borderWidth = step ? '1px' : 0;\n\t this.$parent.direction === 'vertical' ? style.height = step + '%' : style.width = step + '%';\n\n\t this.lineStyle = style;\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t var _this = this;\n\n\t var parent = this.$parent;\n\n\t if (parent.direction === 'horizontal') {\n\t if (parent.alignCenter) {\n\t this.mainOffset = -this.$refs.title.getBoundingClientRect().width / 2 + 16 + 'px';\n\t }\n\t }\n\n\t var unwatch = this.$watch('index', function (val) {\n\t _this.$watch('$parent.active', _this.updateStatus, { immediate: true });\n\t unwatch();\n\t });\n\t }\n\t};\n\n/***/ },\n/* 327 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-step\",\n\t class: ['is-' + _vm.$parent.direction],\n\t style: ([_vm.style, _vm.isLast ? '' : {\n\t marginRight: -_vm.$parent.stepOffset + 'px'\n\t }])\n\t }, [_c('div', {\n\t staticClass: \"el-step__head\",\n\t class: ['is-' + _vm.currentStatus, {\n\t 'is-text': !_vm.icon\n\t }]\n\t }, [_c('div', {\n\t staticClass: \"el-step__line\",\n\t class: ['is-' + _vm.$parent.direction, {\n\t 'is-icon': _vm.icon\n\t }],\n\t style: (_vm.isLast ? '' : {\n\t marginRight: _vm.$parent.stepOffset + 'px'\n\t })\n\t }, [_c('i', {\n\t staticClass: \"el-step__line-inner\",\n\t style: (_vm.lineStyle)\n\t })]), _c('span', {\n\t staticClass: \"el-step__icon\"\n\t }, [(_vm.currentStatus !== 'success' && _vm.currentStatus !== 'error') ? _vm._t(\"icon\", [(_vm.icon) ? _c('i', {\n\t class: ['el-icon-' + _vm.icon]\n\t }) : _c('div', [_vm._v(_vm._s(_vm.index + 1))])]) : _c('i', {\n\t class: ['el-icon-' + (_vm.currentStatus === 'success' ? 'check' : 'close')]\n\t })], 2)]), _c('div', {\n\t staticClass: \"el-step__main\",\n\t style: ({\n\t marginLeft: _vm.mainOffset\n\t })\n\t }, [_c('div', {\n\t ref: \"title\",\n\t staticClass: \"el-step__title\",\n\t class: ['is-' + _vm.currentStatus]\n\t }, [_vm._t(\"title\", [_vm._v(_vm._s(_vm.title))])], 2), _c('div', {\n\t staticClass: \"el-step__description\",\n\t class: ['is-' + _vm.currentStatus]\n\t }, [_vm._t(\"description\", [_vm._v(_vm._s(_vm.description))])], 2)])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 328 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(329);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_main2.default.install = function (Vue) {\n\t Vue.component(_main2.default.name, _main2.default);\n\t};\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 329 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(330),\n\t /* template */\n\t __webpack_require__(331),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 330 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _throttle = __webpack_require__(131);\n\n\tvar _throttle2 = _interopRequireDefault(_throttle);\n\n\tvar _resizeEvent = __webpack_require__(110);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElCarousel',\n\n\t props: {\n\t initialIndex: {\n\t type: Number,\n\t default: 0\n\t },\n\t height: String,\n\t trigger: {\n\t type: String,\n\t default: 'hover'\n\t },\n\t autoplay: {\n\t type: Boolean,\n\t default: true\n\t },\n\t interval: {\n\t type: Number,\n\t default: 3000\n\t },\n\t indicatorPosition: String,\n\t indicator: {\n\t type: Boolean,\n\t default: true\n\t },\n\t arrow: {\n\t type: String,\n\t default: 'hover'\n\t },\n\t type: String\n\t },\n\n\t data: function data() {\n\t return {\n\t items: [],\n\t activeIndex: -1,\n\t containerWidth: 0,\n\t timer: null,\n\t hover: false\n\t };\n\t },\n\n\n\t computed: {\n\t hasLabel: function hasLabel() {\n\t return this.items.some(function (item) {\n\t return item.label.toString().length > 0;\n\t });\n\t }\n\t },\n\n\t watch: {\n\t items: function items(val) {\n\t if (val.length > 0) this.setActiveItem(this.initialIndex);\n\t },\n\t activeIndex: function activeIndex(val, oldVal) {\n\t this.resetItemPosition(oldVal);\n\t this.$emit('change', val, oldVal);\n\t },\n\t autoplay: function autoplay(val) {\n\t val ? this.startTimer() : this.pauseTimer();\n\t }\n\t },\n\n\t methods: {\n\t handleMouseEnter: function handleMouseEnter() {\n\t this.hover = true;\n\t this.pauseTimer();\n\t },\n\t handleMouseLeave: function handleMouseLeave() {\n\t this.hover = false;\n\t this.startTimer();\n\t },\n\t itemInStage: function itemInStage(item, index) {\n\t var length = this.items.length;\n\t if (index === length - 1 && item.inStage && this.items[0].active || item.inStage && this.items[index + 1] && this.items[index + 1].active) {\n\t return 'left';\n\t } else if (index === 0 && item.inStage && this.items[length - 1].active || item.inStage && this.items[index - 1] && this.items[index - 1].active) {\n\t return 'right';\n\t }\n\t return false;\n\t },\n\t handleButtonEnter: function handleButtonEnter(arrow) {\n\t var _this = this;\n\n\t this.items.forEach(function (item, index) {\n\t if (arrow === _this.itemInStage(item, index)) {\n\t item.hover = true;\n\t }\n\t });\n\t },\n\t handleButtonLeave: function handleButtonLeave() {\n\t this.items.forEach(function (item) {\n\t item.hover = false;\n\t });\n\t },\n\t updateItems: function updateItems() {\n\t this.items = this.$children.filter(function (child) {\n\t return child.$options.name === 'ElCarouselItem';\n\t });\n\t },\n\t resetItemPosition: function resetItemPosition(oldIndex) {\n\t var _this2 = this;\n\n\t this.items.forEach(function (item, index) {\n\t item.translateItem(index, _this2.activeIndex, oldIndex);\n\t });\n\t },\n\t playSlides: function playSlides() {\n\t if (this.activeIndex < this.items.length - 1) {\n\t this.activeIndex++;\n\t } else {\n\t this.activeIndex = 0;\n\t }\n\t },\n\t pauseTimer: function pauseTimer() {\n\t clearInterval(this.timer);\n\t },\n\t startTimer: function startTimer() {\n\t if (this.interval <= 0 || !this.autoplay) return;\n\t this.timer = setInterval(this.playSlides, this.interval);\n\t },\n\t setActiveItem: function setActiveItem(index) {\n\t if (typeof index === 'string') {\n\t var filteredItems = this.items.filter(function (item) {\n\t return item.name === index;\n\t });\n\t if (filteredItems.length > 0) {\n\t index = this.items.indexOf(filteredItems[0]);\n\t }\n\t }\n\t index = Number(index);\n\t if (isNaN(index) || index !== Math.floor(index)) {\n\t (\"production\") !== 'production' && console.warn('[Element Warn][Carousel]index must be an integer.');\n\t return;\n\t }\n\t var length = this.items.length;\n\t if (index < 0) {\n\t this.activeIndex = length - 1;\n\t } else if (index >= length) {\n\t this.activeIndex = 0;\n\t } else {\n\t this.activeIndex = index;\n\t }\n\t },\n\t prev: function prev() {\n\t this.setActiveItem(this.activeIndex - 1);\n\t },\n\t next: function next() {\n\t this.setActiveItem(this.activeIndex + 1);\n\t },\n\t handleIndicatorClick: function handleIndicatorClick(index) {\n\t this.activeIndex = index;\n\t },\n\t handleIndicatorHover: function handleIndicatorHover(index) {\n\t if (this.trigger === 'hover' && index !== this.activeIndex) {\n\t this.activeIndex = index;\n\t }\n\t }\n\t },\n\n\t created: function created() {\n\t var _this3 = this;\n\n\t this.throttledArrowClick = (0, _throttle2.default)(300, true, function (index) {\n\t _this3.setActiveItem(index);\n\t });\n\t this.throttledIndicatorHover = (0, _throttle2.default)(300, function (index) {\n\t _this3.handleIndicatorHover(index);\n\t });\n\t },\n\t mounted: function mounted() {\n\t var _this4 = this;\n\n\t this.updateItems();\n\t this.$nextTick(function () {\n\t (0, _resizeEvent.addResizeListener)(_this4.$el, _this4.resetItemPosition);\n\t if (_this4.initialIndex < _this4.items.length && _this4.initialIndex >= 0) {\n\t _this4.activeIndex = _this4.initialIndex;\n\t }\n\t _this4.startTimer();\n\t });\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t if (this.$el) (0, _resizeEvent.removeResizeListener)(this.$el, this.resetItemPosition);\n\t }\n\t};\n\n/***/ },\n/* 331 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-carousel\",\n\t class: {\n\t 'el-carousel--card': _vm.type === 'card'\n\t },\n\t on: {\n\t \"mouseenter\": function($event) {\n\t $event.stopPropagation();\n\t _vm.handleMouseEnter($event)\n\t },\n\t \"mouseleave\": function($event) {\n\t $event.stopPropagation();\n\t _vm.handleMouseLeave($event)\n\t }\n\t }\n\t }, [_c('div', {\n\t staticClass: \"el-carousel__container\",\n\t style: ({\n\t height: _vm.height\n\t })\n\t }, [_c('transition', {\n\t attrs: {\n\t \"name\": \"carousel-arrow-left\"\n\t }\n\t }, [(_vm.arrow !== 'never') ? _c('button', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.arrow === 'always' || _vm.hover),\n\t expression: \"arrow === 'always' || hover\"\n\t }],\n\t staticClass: \"el-carousel__arrow el-carousel__arrow--left\",\n\t on: {\n\t \"mouseenter\": function($event) {\n\t _vm.handleButtonEnter('left')\n\t },\n\t \"mouseleave\": _vm.handleButtonLeave,\n\t \"click\": function($event) {\n\t $event.stopPropagation();\n\t _vm.throttledArrowClick(_vm.activeIndex - 1)\n\t }\n\t }\n\t }, [_c('i', {\n\t staticClass: \"el-icon-arrow-left\"\n\t })]) : _vm._e()]), _c('transition', {\n\t attrs: {\n\t \"name\": \"carousel-arrow-right\"\n\t }\n\t }, [(_vm.arrow !== 'never') ? _c('button', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.arrow === 'always' || _vm.hover),\n\t expression: \"arrow === 'always' || hover\"\n\t }],\n\t staticClass: \"el-carousel__arrow el-carousel__arrow--right\",\n\t on: {\n\t \"mouseenter\": function($event) {\n\t _vm.handleButtonEnter('right')\n\t },\n\t \"mouseleave\": _vm.handleButtonLeave,\n\t \"click\": function($event) {\n\t $event.stopPropagation();\n\t _vm.throttledArrowClick(_vm.activeIndex + 1)\n\t }\n\t }\n\t }, [_c('i', {\n\t staticClass: \"el-icon-arrow-right\"\n\t })]) : _vm._e()]), _vm._t(\"default\")], 2), (_vm.indicatorPosition !== 'none') ? _c('ul', {\n\t staticClass: \"el-carousel__indicators\",\n\t class: {\n\t 'el-carousel__indicators--labels': _vm.hasLabel, 'el-carousel__indicators--outside': _vm.indicatorPosition === 'outside' || _vm.type === 'card'\n\t }\n\t }, _vm._l((_vm.items), function(item, index) {\n\t return _c('li', {\n\t staticClass: \"el-carousel__indicator\",\n\t class: {\n\t 'is-active': index === _vm.activeIndex\n\t },\n\t on: {\n\t \"mouseenter\": function($event) {\n\t _vm.throttledIndicatorHover(index)\n\t },\n\t \"click\": function($event) {\n\t $event.stopPropagation();\n\t _vm.handleIndicatorClick(index)\n\t }\n\t }\n\t }, [_c('button', {\n\t staticClass: \"el-carousel__button\"\n\t }, [(_vm.hasLabel) ? _c('span', [_vm._v(_vm._s(item.label))]) : _vm._e()])])\n\t })) : _vm._e()])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 332 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(333);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_main2.default.install = function (Vue) {\n\t Vue.component(_main2.default.name, _main2.default);\n\t};\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 333 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _resizeEvent = __webpack_require__(110);\n\n\tvar _scrollbarWidth = __webpack_require__(136);\n\n\tvar _scrollbarWidth2 = _interopRequireDefault(_scrollbarWidth);\n\n\tvar _util = __webpack_require__(107);\n\n\tvar _bar = __webpack_require__(334);\n\n\tvar _bar2 = _interopRequireDefault(_bar);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t// reference https://github.com/noeldelgado/gemini-scrollbar/blob/master/index.js\n\n\texports.default = {\n\t name: 'ElScrollbar',\n\n\t components: { Bar: _bar2.default },\n\n\t props: {\n\t native: Boolean,\n\t wrapStyle: {},\n\t wrapClass: {},\n\t viewClass: {},\n\t viewStyle: {},\n\t noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能\n\t tag: {\n\t type: String,\n\t default: 'div'\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t sizeWidth: '0',\n\t sizeHeight: '0',\n\t moveX: 0,\n\t moveY: 0\n\t };\n\t },\n\n\n\t computed: {\n\t wrap: function wrap() {\n\t return this.$refs.wrap;\n\t }\n\t },\n\n\t render: function render(h) {\n\t var gutter = (0, _scrollbarWidth2.default)();\n\t var style = this.wrapStyle;\n\n\t if (gutter) {\n\t var gutterWith = '-' + gutter + 'px';\n\t var gutterStyle = 'margin-bottom: ' + gutterWith + '; margin-right: ' + gutterWith + ';';\n\n\t if (Array.isArray(this.wrapStyle)) {\n\t style = (0, _util.toObject)(this.wrapStyle);\n\t style.marginRight = style.marginBottom = gutterWith;\n\t } else if (typeof this.wrapStyle === 'string') {\n\t style += gutterStyle;\n\t } else {\n\t style = gutterStyle;\n\t }\n\t }\n\t var view = h(this.tag, {\n\t class: ['el-scrollbar__view', this.viewClass],\n\t style: this.viewStyle,\n\t ref: 'resize'\n\t }, this.$slots.default);\n\t var wrap = h(\n\t 'div',\n\t {\n\t ref: 'wrap',\n\t style: style,\n\t on: {\n\t 'scroll': this.handleScroll\n\t },\n\n\t 'class': [this.wrapClass, 'el-scrollbar__wrap', gutter ? '' : 'el-scrollbar__wrap--hidden-default'] },\n\t [[view]]\n\t );\n\t var nodes = void 0;\n\n\t if (!this.native) {\n\t nodes = [wrap, h(\n\t _bar2.default,\n\t {\n\t attrs: {\n\t move: this.moveX,\n\t size: this.sizeWidth }\n\t },\n\t []\n\t ), h(\n\t _bar2.default,\n\t {\n\t attrs: {\n\t vertical: true,\n\t move: this.moveY,\n\t size: this.sizeHeight }\n\t },\n\t []\n\t )];\n\t } else {\n\t nodes = [h(\n\t 'div',\n\t {\n\t ref: 'wrap',\n\t 'class': [this.wrapClass, 'el-scrollbar__wrap'],\n\t style: style },\n\t [[view]]\n\t )];\n\t }\n\t return h('div', { class: 'el-scrollbar' }, nodes);\n\t },\n\n\n\t methods: {\n\t handleScroll: function handleScroll() {\n\t var wrap = this.wrap;\n\n\t this.moveY = wrap.scrollTop * 100 / wrap.clientHeight;\n\t this.moveX = wrap.scrollLeft * 100 / wrap.clientWidth;\n\t },\n\t update: function update() {\n\t var heightPercentage = void 0,\n\t widthPercentage = void 0;\n\t var wrap = this.wrap;\n\t if (!wrap) return;\n\n\t heightPercentage = wrap.clientHeight * 100 / wrap.scrollHeight;\n\t widthPercentage = wrap.clientWidth * 100 / wrap.scrollWidth;\n\n\t this.sizeHeight = heightPercentage < 100 ? heightPercentage + '%' : '';\n\t this.sizeWidth = widthPercentage < 100 ? widthPercentage + '%' : '';\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t if (this.native) return;\n\t this.$nextTick(this.update);\n\t !this.noresize && (0, _resizeEvent.addResizeListener)(this.$refs.resize, this.update);\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t if (this.native) return;\n\t !this.noresize && (0, _resizeEvent.removeResizeListener)(this.$refs.resize, this.update);\n\t }\n\t};\n\n/***/ },\n/* 334 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _dom = __webpack_require__(44);\n\n\tvar _util = __webpack_require__(335);\n\n\t/* istanbul ignore next */\n\texports.default = {\n\t name: 'Bar',\n\n\t props: {\n\t vertical: Boolean,\n\t size: String,\n\t move: Number\n\t },\n\n\t computed: {\n\t bar: function bar() {\n\t return _util.BAR_MAP[this.vertical ? 'vertical' : 'horizontal'];\n\t },\n\t wrap: function wrap() {\n\t return this.$parent.wrap;\n\t }\n\t },\n\n\t render: function render(h) {\n\t var size = this.size,\n\t move = this.move,\n\t bar = this.bar;\n\n\n\t return h(\n\t 'div',\n\t {\n\t 'class': ['el-scrollbar__bar', 'is-' + bar.key],\n\t on: {\n\t 'mousedown': this.clickTrackHandler\n\t }\n\t },\n\t [h(\n\t 'div',\n\t {\n\t ref: 'thumb',\n\t 'class': 'el-scrollbar__thumb',\n\t on: {\n\t 'mousedown': this.clickThumbHandler\n\t },\n\n\t style: (0, _util.renderThumbStyle)({ size: size, move: move, bar: bar }) },\n\t []\n\t )]\n\t );\n\t },\n\n\n\t methods: {\n\t clickThumbHandler: function clickThumbHandler(e) {\n\t this.startDrag(e);\n\t this[this.bar.axis] = e.currentTarget[this.bar.offset] - (e[this.bar.client] - e.currentTarget.getBoundingClientRect()[this.bar.direction]);\n\t },\n\t clickTrackHandler: function clickTrackHandler(e) {\n\t var offset = Math.abs(e.target.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]);\n\t var thumbHalf = this.$refs.thumb[this.bar.offset] / 2;\n\t var thumbPositionPercentage = (offset - thumbHalf) * 100 / this.$el[this.bar.offset];\n\n\t this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;\n\t },\n\t startDrag: function startDrag(e) {\n\t e.stopImmediatePropagation();\n\t this.cursorDown = true;\n\n\t (0, _dom.on)(document, 'mousemove', this.mouseMoveDocumentHandler);\n\t (0, _dom.on)(document, 'mouseup', this.mouseUpDocumentHandler);\n\t document.onselectstart = function () {\n\t return false;\n\t };\n\t },\n\t mouseMoveDocumentHandler: function mouseMoveDocumentHandler(e) {\n\t if (this.cursorDown === false) return;\n\t var prevPage = this[this.bar.axis];\n\n\t if (!prevPage) return;\n\n\t var offset = (this.$el.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]) * -1;\n\t var thumbClickPosition = this.$refs.thumb[this.bar.offset] - prevPage;\n\t var thumbPositionPercentage = (offset - thumbClickPosition) * 100 / this.$el[this.bar.offset];\n\n\t this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;\n\t },\n\t mouseUpDocumentHandler: function mouseUpDocumentHandler(e) {\n\t this.cursorDown = false;\n\t this[this.bar.axis] = 0;\n\t (0, _dom.off)(document, 'mousemove', this.mouseMoveDocumentHandler);\n\t document.onselectstart = null;\n\t }\n\t },\n\n\t destroyed: function destroyed() {\n\t (0, _dom.off)(document, 'mouseup', this.mouseUpDocumentHandler);\n\t }\n\t};\n\n/***/ },\n/* 335 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\texports.renderThumbStyle = renderThumbStyle;\n\tvar BAR_MAP = exports.BAR_MAP = {\n\t vertical: {\n\t offset: 'offsetHeight',\n\t scroll: 'scrollTop',\n\t scrollSize: 'scrollHeight',\n\t size: 'height',\n\t key: 'vertical',\n\t axis: 'Y',\n\t client: 'clientY',\n\t direction: 'top'\n\t },\n\t horizontal: {\n\t offset: 'offsetWidth',\n\t scroll: 'scrollLeft',\n\t scrollSize: 'scrollWidth',\n\t size: 'width',\n\t key: 'horizontal',\n\t axis: 'X',\n\t client: 'clientX',\n\t direction: 'left'\n\t }\n\t};\n\n\tfunction renderThumbStyle(_ref) {\n\t var move = _ref.move,\n\t size = _ref.size,\n\t bar = _ref.bar;\n\n\t var style = {};\n\t var translate = 'translate' + bar.axis + '(' + move + '%)';\n\n\t style[bar.size] = size;\n\t style.transform = translate;\n\t style.msTransform = translate;\n\t style.webkitTransform = translate;\n\n\t return style;\n\t};\n\n/***/ },\n/* 336 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _item = __webpack_require__(337);\n\n\tvar _item2 = _interopRequireDefault(_item);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_item2.default.install = function (Vue) {\n\t Vue.component(_item2.default.name, _item2.default);\n\t};\n\n\texports.default = _item2.default;\n\n/***/ },\n/* 337 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(338),\n\t /* template */\n\t __webpack_require__(339),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 338 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\tvar CARD_SCALE = 0.83;\n\texports.default = {\n\t name: 'ElCarouselItem',\n\n\t props: {\n\t name: String,\n\t label: {\n\t type: [String, Number],\n\t default: ''\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t hover: false,\n\t translate: 0,\n\t scale: 1,\n\t active: false,\n\t ready: false,\n\t inStage: false,\n\t animating: false\n\t };\n\t },\n\n\n\t methods: {\n\t processIndex: function processIndex(index, activeIndex, length) {\n\t if (activeIndex === 0 && index === length - 1) {\n\t return -1;\n\t } else if (activeIndex === length - 1 && index === 0) {\n\t return length;\n\t } else if (index < activeIndex - 1 && activeIndex - index >= length / 2) {\n\t return length + 1;\n\t } else if (index > activeIndex + 1 && index - activeIndex >= length / 2) {\n\t return -2;\n\t }\n\t return index;\n\t },\n\t calculateTranslate: function calculateTranslate(index, activeIndex, parentWidth) {\n\t if (this.inStage) {\n\t return parentWidth * ((2 - CARD_SCALE) * (index - activeIndex) + 1) / 4;\n\t } else if (index < activeIndex) {\n\t return -(1 + CARD_SCALE) * parentWidth / 4;\n\t } else {\n\t return (3 + CARD_SCALE) * parentWidth / 4;\n\t }\n\t },\n\t translateItem: function translateItem(index, activeIndex, oldIndex) {\n\t var parentWidth = this.$parent.$el.offsetWidth;\n\t var length = this.$parent.items.length;\n\t if (this.$parent.type !== 'card' && oldIndex !== undefined) {\n\t this.animating = index === activeIndex || index === oldIndex;\n\t }\n\t if (index !== activeIndex && length > 2) {\n\t index = this.processIndex(index, activeIndex, length);\n\t }\n\t if (this.$parent.type === 'card') {\n\t this.inStage = Math.round(Math.abs(index - activeIndex)) <= 1;\n\t this.active = index === activeIndex;\n\t this.translate = this.calculateTranslate(index, activeIndex, parentWidth);\n\t this.scale = this.active ? 1 : CARD_SCALE;\n\t } else {\n\t this.active = index === activeIndex;\n\t this.translate = parentWidth * (index - activeIndex);\n\t }\n\t this.ready = true;\n\t },\n\t handleItemClick: function handleItemClick() {\n\t var parent = this.$parent;\n\t if (parent && parent.type === 'card') {\n\t var index = parent.items.indexOf(this);\n\t parent.setActiveItem(index);\n\t }\n\t }\n\t },\n\n\t created: function created() {\n\t this.$parent && this.$parent.updateItems();\n\t },\n\t destroyed: function destroyed() {\n\t this.$parent && this.$parent.updateItems();\n\t }\n\t};\n\n/***/ },\n/* 339 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.ready),\n\t expression: \"ready\"\n\t }],\n\t staticClass: \"el-carousel__item\",\n\t class: {\n\t 'is-active': _vm.active,\n\t 'el-carousel__item--card': _vm.$parent.type === 'card',\n\t 'is-in-stage': _vm.inStage,\n\t 'is-hover': _vm.hover,\n\t 'is-animating': _vm.animating\n\t },\n\t style: ({\n\t msTransform: (\"translateX(\" + _vm.translate + \"px) scale(\" + _vm.scale + \")\"),\n\t webkitTransform: (\"translateX(\" + _vm.translate + \"px) scale(\" + _vm.scale + \")\"),\n\t transform: (\"translateX(\" + _vm.translate + \"px) scale(\" + _vm.scale + \")\")\n\t }),\n\t on: {\n\t \"click\": _vm.handleItemClick\n\t }\n\t }, [(_vm.$parent.type === 'card') ? _c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (!_vm.active),\n\t expression: \"!active\"\n\t }],\n\t staticClass: \"el-carousel__mask\"\n\t }) : _vm._e(), _vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 340 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _collapse = __webpack_require__(341);\n\n\tvar _collapse2 = _interopRequireDefault(_collapse);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_collapse2.default.install = function (Vue) {\n\t Vue.component(_collapse2.default.name, _collapse2.default);\n\t};\n\n\texports.default = _collapse2.default;\n\n/***/ },\n/* 341 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(342),\n\t /* template */\n\t __webpack_require__(343),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 342 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElCollapse',\n\n\t componentName: 'ElCollapse',\n\n\t props: {\n\t accordion: Boolean,\n\t value: {\n\t type: [Array, String, Number],\n\t default: function _default() {\n\t return [];\n\t }\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t activeNames: [].concat(this.value)\n\t };\n\t },\n\n\n\t watch: {\n\t value: function value(_value) {\n\t this.activeNames = [].concat(_value);\n\t }\n\t },\n\n\t methods: {\n\t setActiveNames: function setActiveNames(activeNames) {\n\t activeNames = [].concat(activeNames);\n\t var value = this.accordion ? activeNames[0] : activeNames;\n\t this.activeNames = activeNames;\n\t this.$emit('input', value);\n\t this.$emit('change', value);\n\t },\n\t handleItemClick: function handleItemClick(item) {\n\t if (this.accordion) {\n\t this.setActiveNames((this.activeNames[0] || this.activeNames[0] === 0) && this.activeNames[0] === item.name ? '' : item.name);\n\t } else {\n\t var activeNames = this.activeNames.slice(0);\n\t var index = activeNames.indexOf(item.name);\n\n\t if (index > -1) {\n\t activeNames.splice(index, 1);\n\t } else {\n\t activeNames.push(item.name);\n\t }\n\t this.setActiveNames(activeNames);\n\t }\n\t }\n\t },\n\n\t created: function created() {\n\t this.$on('item-click', this.handleItemClick);\n\t }\n\t};\n\n/***/ },\n/* 343 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-collapse\"\n\t }, [_vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 344 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _collapseItem = __webpack_require__(345);\n\n\tvar _collapseItem2 = _interopRequireDefault(_collapseItem);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_collapseItem2.default.install = function (Vue) {\n\t Vue.component(_collapseItem2.default.name, _collapseItem2.default);\n\t};\n\n\texports.default = _collapseItem2.default;\n\n/***/ },\n/* 345 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(346),\n\t /* template */\n\t __webpack_require__(347),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 346 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _collapseTransition = __webpack_require__(49);\n\n\tvar _collapseTransition2 = _interopRequireDefault(_collapseTransition);\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElCollapseItem',\n\n\t componentName: 'ElCollapseItem',\n\n\t mixins: [_emitter2.default],\n\n\t components: { ElCollapseTransition: _collapseTransition2.default },\n\n\t data: function data() {\n\t return {\n\t contentWrapStyle: {\n\t height: 'auto',\n\t display: 'block'\n\t },\n\t contentHeight: 0\n\t };\n\t },\n\n\n\t props: {\n\t title: String,\n\t name: {\n\t type: [String, Number],\n\t default: function _default() {\n\t return this._uid;\n\t }\n\t }\n\t },\n\n\t computed: {\n\t isActive: function isActive() {\n\t return this.$parent.activeNames.indexOf(this.name) > -1;\n\t }\n\t },\n\n\t watch: {\n\t 'isActive': function isActive(value) {}\n\t },\n\n\t methods: {\n\t handleHeaderClick: function handleHeaderClick() {\n\t this.dispatch('ElCollapse', 'item-click', this);\n\t }\n\t },\n\n\t mounted: function mounted() {}\n\t};\n\n/***/ },\n/* 347 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-collapse-item\",\n\t class: {\n\t 'is-active': _vm.isActive\n\t }\n\t }, [_c('div', {\n\t staticClass: \"el-collapse-item__header\",\n\t on: {\n\t \"click\": _vm.handleHeaderClick\n\t }\n\t }, [_c('i', {\n\t staticClass: \"el-collapse-item__header__arrow el-icon-arrow-right\"\n\t }), _vm._t(\"title\", [_vm._v(_vm._s(_vm.title))])], 2), _c('el-collapse-transition', [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.isActive),\n\t expression: \"isActive\"\n\t }],\n\t staticClass: \"el-collapse-item__wrap\"\n\t }, [_c('div', {\n\t staticClass: \"el-collapse-item__content\"\n\t }, [_vm._t(\"default\")], 2)])])], 1)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 348 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(349);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_main2.default.install = function (Vue) {\n\t Vue.component(_main2.default.name, _main2.default);\n\t};\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 349 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(350),\n\t /* template */\n\t __webpack_require__(355),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 350 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vue = __webpack_require__(133);\n\n\tvar _vue2 = _interopRequireDefault(_vue);\n\n\tvar _menu = __webpack_require__(351);\n\n\tvar _menu2 = _interopRequireDefault(_menu);\n\n\tvar _input = __webpack_require__(20);\n\n\tvar _input2 = _interopRequireDefault(_input);\n\n\tvar _vuePopper = __webpack_require__(24);\n\n\tvar _vuePopper2 = _interopRequireDefault(_vuePopper);\n\n\tvar _clickoutside = __webpack_require__(21);\n\n\tvar _clickoutside2 = _interopRequireDefault(_clickoutside);\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tvar _locale3 = __webpack_require__(111);\n\n\tvar _debounce = __webpack_require__(69);\n\n\tvar _debounce2 = _interopRequireDefault(_debounce);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar popperMixin = {\n\t props: {\n\t placement: {\n\t type: String,\n\t default: 'bottom-start'\n\t },\n\t appendToBody: _vuePopper2.default.props.appendToBody,\n\t offset: _vuePopper2.default.props.offset,\n\t boundariesPadding: _vuePopper2.default.props.boundariesPadding,\n\t popperOptions: _vuePopper2.default.props.popperOptions\n\t },\n\t methods: _vuePopper2.default.methods,\n\t data: _vuePopper2.default.data,\n\t beforeDestroy: _vuePopper2.default.beforeDestroy\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElCascader',\n\n\t directives: { Clickoutside: _clickoutside2.default },\n\n\t mixins: [popperMixin, _emitter2.default, _locale2.default],\n\n\t components: {\n\t ElInput: _input2.default\n\t },\n\n\t props: {\n\t options: {\n\t type: Array,\n\t required: true\n\t },\n\t props: {\n\t type: Object,\n\t default: function _default() {\n\t return {\n\t children: 'children',\n\t label: 'label',\n\t value: 'value',\n\t disabled: 'disabled'\n\t };\n\t }\n\t },\n\t value: {\n\t type: Array,\n\t default: function _default() {\n\t return [];\n\t }\n\t },\n\t placeholder: {\n\t type: String,\n\t default: function _default() {\n\t return (0, _locale3.t)('el.cascader.placeholder');\n\t }\n\t },\n\t disabled: Boolean,\n\t clearable: {\n\t type: Boolean,\n\t default: false\n\t },\n\t changeOnSelect: Boolean,\n\t popperClass: String,\n\t expandTrigger: {\n\t type: String,\n\t default: 'click'\n\t },\n\t filterable: Boolean,\n\t size: String,\n\t showAllLevels: {\n\t type: Boolean,\n\t default: true\n\t },\n\t debounce: {\n\t type: Number,\n\t default: 300\n\t },\n\t beforeFilter: {\n\t type: Function,\n\t default: function _default() {\n\t return function () {};\n\t }\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t currentValue: this.value || [],\n\t menu: null,\n\t debouncedInputChange: function debouncedInputChange() {},\n\n\t menuVisible: false,\n\t inputHover: false,\n\t inputValue: '',\n\t flatOptions: null\n\t };\n\t },\n\n\n\t computed: {\n\t labelKey: function labelKey() {\n\t return this.props.label || 'label';\n\t },\n\t valueKey: function valueKey() {\n\t return this.props.value || 'value';\n\t },\n\t childrenKey: function childrenKey() {\n\t return this.props.children || 'children';\n\t },\n\t currentLabels: function currentLabels() {\n\t var _this = this;\n\n\t var options = this.options;\n\t var labels = [];\n\t this.currentValue.forEach(function (value) {\n\t var targetOption = options && options.filter(function (option) {\n\t return option[_this.valueKey] === value;\n\t })[0];\n\t if (targetOption) {\n\t labels.push(targetOption[_this.labelKey]);\n\t options = targetOption[_this.childrenKey];\n\t }\n\t });\n\t return labels;\n\t }\n\t },\n\n\t watch: {\n\t menuVisible: function menuVisible(value) {\n\t value ? this.showMenu() : this.hideMenu();\n\t },\n\t value: function value(_value) {\n\t this.currentValue = _value;\n\t },\n\t currentValue: function currentValue(value) {\n\t this.dispatch('ElFormItem', 'el.form.change', [value]);\n\t },\n\n\t options: {\n\t deep: true,\n\t handler: function handler(value) {\n\t if (!this.menu) {\n\t this.initMenu();\n\t }\n\t this.flatOptions = this.flattenOptions(this.options);\n\t this.menu.options = value;\n\t }\n\t }\n\t },\n\n\t methods: {\n\t initMenu: function initMenu() {\n\t this.menu = new _vue2.default(_menu2.default).$mount();\n\t this.menu.options = this.options;\n\t this.menu.props = this.props;\n\t this.menu.expandTrigger = this.expandTrigger;\n\t this.menu.changeOnSelect = this.changeOnSelect;\n\t this.menu.popperClass = this.popperClass;\n\t this.popperElm = this.menu.$el;\n\t this.menu.$on('pick', this.handlePick);\n\t this.menu.$on('activeItemChange', this.handleActiveItemChange);\n\t this.menu.$on('menuLeave', this.doDestroy);\n\t },\n\t showMenu: function showMenu() {\n\t var _this2 = this;\n\n\t if (!this.menu) {\n\t this.initMenu();\n\t }\n\n\t this.menu.value = this.currentValue.slice(0);\n\t this.menu.visible = true;\n\t this.menu.options = this.options;\n\t this.$nextTick(function (_) {\n\t _this2.updatePopper();\n\t _this2.menu.inputWidth = _this2.$refs.input.$el.offsetWidth - 2;\n\t });\n\t },\n\t hideMenu: function hideMenu() {\n\t this.inputValue = '';\n\t this.menu.visible = false;\n\t },\n\t handleActiveItemChange: function handleActiveItemChange(value) {\n\t var _this3 = this;\n\n\t this.$nextTick(function (_) {\n\t _this3.updatePopper();\n\t });\n\t this.$emit('active-item-change', value);\n\t },\n\t handlePick: function handlePick(value) {\n\t var close = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\t this.currentValue = value;\n\t this.$emit('input', value);\n\t this.$emit('change', value);\n\n\t if (close) {\n\t this.menuVisible = false;\n\t } else {\n\t this.$nextTick(this.updatePopper);\n\t }\n\t },\n\t handleInputChange: function handleInputChange(value) {\n\t var _this4 = this;\n\n\t if (!this.menuVisible) return;\n\t var flatOptions = this.flatOptions;\n\n\t if (!value) {\n\t this.menu.options = this.options;\n\t this.$nextTick(this.updatePopper);\n\t return;\n\t }\n\n\t var filteredFlatOptions = flatOptions.filter(function (optionsStack) {\n\t return optionsStack.some(function (option) {\n\t return new RegExp(value, 'i').test(option[_this4.labelKey]);\n\t });\n\t });\n\n\t if (filteredFlatOptions.length > 0) {\n\t filteredFlatOptions = filteredFlatOptions.map(function (optionStack) {\n\t return {\n\t __IS__FLAT__OPTIONS: true,\n\t value: optionStack.map(function (item) {\n\t return item[_this4.valueKey];\n\t }),\n\t label: _this4.renderFilteredOptionLabel(value, optionStack)\n\t };\n\t });\n\t } else {\n\t filteredFlatOptions = [{\n\t __IS__FLAT__OPTIONS: true,\n\t label: this.t('el.cascader.noMatch'),\n\t value: '',\n\t disabled: true\n\t }];\n\t }\n\t this.menu.options = filteredFlatOptions;\n\t this.$nextTick(this.updatePopper);\n\t },\n\t renderFilteredOptionLabel: function renderFilteredOptionLabel(inputValue, optionsStack) {\n\t var _this5 = this;\n\n\t return optionsStack.map(function (option, index) {\n\t var label = option[_this5.labelKey];\n\t var keywordIndex = label.toLowerCase().indexOf(inputValue.toLowerCase());\n\t var labelPart = label.slice(keywordIndex, inputValue.length + keywordIndex);\n\t var node = keywordIndex > -1 ? _this5.highlightKeyword(label, labelPart) : label;\n\t return index === 0 ? node : [' / ', node];\n\t });\n\t },\n\t highlightKeyword: function highlightKeyword(label, keyword) {\n\t var _this6 = this;\n\n\t var h = this._c;\n\t return label.split(keyword).map(function (node, index) {\n\t return index === 0 ? node : [h('span', { class: { 'el-cascader-menu__item__keyword': true } }, [_this6._v(keyword)]), node];\n\t });\n\t },\n\t flattenOptions: function flattenOptions(options) {\n\t var _this7 = this;\n\n\t var ancestor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n\t var flatOptions = [];\n\t options.forEach(function (option) {\n\t var optionsStack = ancestor.concat(option);\n\t if (!option[_this7.childrenKey]) {\n\t flatOptions.push(optionsStack);\n\t } else {\n\t if (_this7.changeOnSelect) {\n\t flatOptions.push(optionsStack);\n\t }\n\t flatOptions = flatOptions.concat(_this7.flattenOptions(option[_this7.childrenKey], optionsStack));\n\t }\n\t });\n\t return flatOptions;\n\t },\n\t clearValue: function clearValue(ev) {\n\t ev.stopPropagation();\n\t this.handlePick([], true);\n\t },\n\t handleClickoutside: function handleClickoutside() {\n\t this.menuVisible = false;\n\t },\n\t handleClick: function handleClick() {\n\t if (this.disabled) return;\n\t if (this.filterable) {\n\t this.menuVisible = true;\n\t this.$refs.input.$refs.input.focus();\n\t return;\n\t }\n\t this.menuVisible = !this.menuVisible;\n\t }\n\t },\n\n\t created: function created() {\n\t var _this8 = this;\n\n\t this.debouncedInputChange = (0, _debounce2.default)(this.debounce, function (value) {\n\t var before = _this8.beforeFilter(value);\n\n\t if (before && before.then) {\n\t _this8.menu.options = [{\n\t __IS__FLAT__OPTIONS: true,\n\t label: _this8.t('el.cascader.loading'),\n\t value: '',\n\t disabled: true\n\t }];\n\t before.then(function () {\n\t _this8.$nextTick(function () {\n\t _this8.handleInputChange(value);\n\t });\n\t });\n\t } else if (before !== false) {\n\t _this8.$nextTick(function () {\n\t _this8.handleInputChange(value);\n\t });\n\t }\n\t });\n\t },\n\t mounted: function mounted() {\n\t this.flatOptions = this.flattenOptions(this.options);\n\t }\n\t};\n\n/***/ },\n/* 351 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(352),\n\t /* template */\n\t null,\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 352 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _babelHelperVueJsxMergeProps = __webpack_require__(353);\n\n\tvar _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps);\n\n\tvar _shared = __webpack_require__(354);\n\n\tvar _scrollIntoView = __webpack_require__(112);\n\n\tvar _scrollIntoView2 = _interopRequireDefault(_scrollIntoView);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar copyArray = function copyArray(arr, props) {\n\t if (!arr || !Array.isArray(arr) || !props) return arr;\n\t var result = [];\n\t var configurableProps = ['__IS__FLAT__OPTIONS', 'label', 'value', 'disabled'];\n\t var childrenProp = props.children || 'children';\n\t arr.forEach(function (item) {\n\t var itemCopy = {};\n\t configurableProps.forEach(function (prop) {\n\t var name = props[prop];\n\t var value = item[name];\n\t if (value === undefined) {\n\t name = prop;\n\t value = item[name];\n\t }\n\t if (value !== undefined) itemCopy[name] = value;\n\t });\n\t if (Array.isArray(item[childrenProp])) {\n\t itemCopy[childrenProp] = copyArray(item[childrenProp], props);\n\t }\n\t result.push(itemCopy);\n\t });\n\t return result;\n\t};\n\n\texports.default = {\n\t name: 'ElCascaderMenu',\n\n\t data: function data() {\n\t return {\n\t inputWidth: 0,\n\t options: [],\n\t props: {},\n\t visible: false,\n\t activeValue: [],\n\t value: [],\n\t expandTrigger: 'click',\n\t changeOnSelect: false,\n\t popperClass: ''\n\t };\n\t },\n\n\n\t watch: {\n\t visible: function visible(value) {\n\t if (value) {\n\t this.activeValue = this.value;\n\t }\n\t },\n\n\t value: {\n\t immediate: true,\n\t handler: function handler(value) {\n\t this.activeValue = value;\n\t }\n\t }\n\t },\n\n\t computed: {\n\t activeOptions: {\n\t cache: false,\n\t get: function get() {\n\t var _this = this;\n\n\t var activeValue = this.activeValue;\n\t var configurableProps = ['label', 'value', 'children', 'disabled'];\n\n\t var formatOptions = function formatOptions(options) {\n\t options.forEach(function (option) {\n\t if (option.__IS__FLAT__OPTIONS) return;\n\t configurableProps.forEach(function (prop) {\n\t var value = option[_this.props[prop] || prop];\n\t if (value !== undefined) option[prop] = value;\n\t });\n\t if (Array.isArray(option.children)) {\n\t formatOptions(option.children);\n\t }\n\t });\n\t };\n\n\t var loadActiveOptions = function loadActiveOptions(options) {\n\t var activeOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n\t var level = activeOptions.length;\n\t activeOptions[level] = options;\n\t var active = activeValue[level];\n\t if ((0, _shared.isDef)(active)) {\n\t options = options.filter(function (option) {\n\t return option.value === active;\n\t })[0];\n\t if (options && options.children) {\n\t loadActiveOptions(options.children, activeOptions);\n\t }\n\t }\n\t return activeOptions;\n\t };\n\n\t var optionsCopy = copyArray(this.options, this.props);\n\t formatOptions(optionsCopy);\n\t return loadActiveOptions(optionsCopy);\n\t }\n\t }\n\t },\n\n\t methods: {\n\t select: function select(item, menuIndex) {\n\t if (item.__IS__FLAT__OPTIONS) {\n\t this.activeValue = item.value;\n\t } else if (menuIndex) {\n\t this.activeValue.splice(menuIndex, this.activeValue.length - 1, item.value);\n\t } else {\n\t this.activeValue = [item.value];\n\t }\n\t this.$emit('pick', this.activeValue.slice());\n\t },\n\t handleMenuLeave: function handleMenuLeave() {\n\t this.$emit('menuLeave');\n\t },\n\t activeItem: function activeItem(item, menuIndex) {\n\t var len = this.activeOptions.length;\n\t this.activeValue.splice(menuIndex, len, item.value);\n\t this.activeOptions.splice(menuIndex + 1, len, item.children);\n\t if (this.changeOnSelect) {\n\t this.$emit('pick', this.activeValue.slice(), false);\n\t } else {\n\t this.$emit('activeItemChange', this.activeValue);\n\t }\n\t },\n\t scrollMenu: function scrollMenu(menu) {\n\t (0, _scrollIntoView2.default)(menu, menu.getElementsByClassName('is-active')[0]);\n\t },\n\t handleMenuEnter: function handleMenuEnter() {\n\t var _this2 = this;\n\n\t this.$nextTick(function () {\n\t return _this2.$refs.menus.forEach(function (menu) {\n\t return _this2.scrollMenu(menu);\n\t });\n\t });\n\t }\n\t },\n\n\t render: function render(h) {\n\t var _this3 = this;\n\n\t var activeValue = this.activeValue,\n\t activeOptions = this.activeOptions,\n\t visible = this.visible,\n\t expandTrigger = this.expandTrigger,\n\t popperClass = this.popperClass;\n\n\n\t var menus = this._l(activeOptions, function (menu, menuIndex) {\n\t var isFlat = false;\n\t var items = _this3._l(menu, function (item) {\n\t var events = {\n\t on: {}\n\t };\n\n\t if (item.__IS__FLAT__OPTIONS) isFlat = true;\n\n\t if (!item.disabled) {\n\t if (item.children) {\n\t var triggerEvent = {\n\t click: 'click',\n\t hover: 'mouseenter'\n\t }[expandTrigger];\n\t events.on[triggerEvent] = function () {\n\t _this3.activeItem(item, menuIndex);\n\t _this3.$nextTick(function () {\n\t // adjust self and next level\n\t _this3.scrollMenu(_this3.$refs.menus[menuIndex]);\n\t _this3.scrollMenu(_this3.$refs.menus[menuIndex + 1]);\n\t });\n\t };\n\t } else {\n\t events.on.click = function () {\n\t _this3.select(item, menuIndex);\n\t _this3.$nextTick(function () {\n\t return _this3.scrollMenu(_this3.$refs.menus[menuIndex]);\n\t });\n\t };\n\t }\n\t }\n\n\t return h(\n\t 'li',\n\t (0, _babelHelperVueJsxMergeProps2.default)([{\n\t 'class': {\n\t 'el-cascader-menu__item': true,\n\t 'el-cascader-menu__item--extensible': item.children,\n\t 'is-active': item.value === activeValue[menuIndex],\n\t 'is-disabled': item.disabled\n\t }\n\t }, events]),\n\t [item.label]\n\t );\n\t });\n\t var menuStyle = {};\n\t if (isFlat) {\n\t menuStyle.minWidth = _this3.inputWidth + 'px';\n\t }\n\n\t return h(\n\t 'ul',\n\t {\n\t 'class': {\n\t 'el-cascader-menu': true,\n\t 'el-cascader-menu--flexible': isFlat\n\t },\n\t style: menuStyle,\n\t refInFor: true,\n\t ref: 'menus' },\n\t [items]\n\t );\n\t });\n\t return h(\n\t 'transition',\n\t {\n\t attrs: { name: 'el-zoom-in-top' },\n\t on: {\n\t 'before-enter': this.handleMenuEnter,\n\t 'after-leave': this.handleMenuLeave\n\t }\n\t },\n\t [h(\n\t 'div',\n\t {\n\t directives: [{\n\t name: 'show',\n\t value: visible\n\t }],\n\n\t 'class': ['el-cascader-menus', popperClass],\n\t ref: 'wrapper'\n\t },\n\t [menus]\n\t )]\n\t );\n\t }\n\t};\n\n/***/ },\n/* 353 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(68);\n\n/***/ },\n/* 354 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(69);\n\n/***/ },\n/* 355 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('span', {\n\t directives: [{\n\t name: \"clickoutside\",\n\t rawName: \"v-clickoutside\",\n\t value: (_vm.handleClickoutside),\n\t expression: \"handleClickoutside\"\n\t }],\n\t ref: \"reference\",\n\t staticClass: \"el-cascader\",\n\t class: [{\n\t 'is-opened': _vm.menuVisible,\n\t 'is-disabled': _vm.disabled\n\t },\n\t _vm.size ? 'el-cascader--' + _vm.size : ''\n\t ],\n\t on: {\n\t \"click\": _vm.handleClick,\n\t \"mouseenter\": function($event) {\n\t _vm.inputHover = true\n\t },\n\t \"mouseleave\": function($event) {\n\t _vm.inputHover = false\n\t }\n\t }\n\t }, [_c('el-input', {\n\t ref: \"input\",\n\t attrs: {\n\t \"readonly\": !_vm.filterable,\n\t \"placeholder\": _vm.currentLabels.length ? undefined : _vm.placeholder,\n\t \"validate-event\": false,\n\t \"size\": _vm.size,\n\t \"disabled\": _vm.disabled\n\t },\n\t on: {\n\t \"change\": _vm.debouncedInputChange\n\t },\n\t model: {\n\t value: (_vm.inputValue),\n\t callback: function($$v) {\n\t _vm.inputValue = $$v\n\t },\n\t expression: \"inputValue\"\n\t }\n\t }, [_c('template', {\n\t slot: \"icon\"\n\t }, [(_vm.clearable && _vm.inputHover && _vm.currentLabels.length) ? _c('i', {\n\t key: \"1\",\n\t staticClass: \"el-input__icon el-icon-circle-close el-cascader__clearIcon\",\n\t on: {\n\t \"click\": _vm.clearValue\n\t }\n\t }) : _c('i', {\n\t key: \"2\",\n\t staticClass: \"el-input__icon el-icon-caret-bottom\",\n\t class: {\n\t 'is-reverse': _vm.menuVisible\n\t }\n\t })])], 2), _c('span', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.inputValue === ''),\n\t expression: \"inputValue === ''\"\n\t }],\n\t staticClass: \"el-cascader__label\"\n\t }, [(_vm.showAllLevels) ? [_vm._l((_vm.currentLabels), function(label, index) {\n\t return [_vm._v(\"\\n \" + _vm._s(label) + \"\\n \"), (index < _vm.currentLabels.length - 1) ? _c('span', [_vm._v(\" / \")]) : _vm._e()]\n\t })] : [_vm._v(\"\\n \" + _vm._s(_vm.currentLabels[_vm.currentLabels.length - 1]) + \"\\n \")]], 2)], 1)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 356 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(357);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_main2.default.install = function (Vue) {\n\t Vue.component(_main2.default.name, _main2.default);\n\t};\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 357 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(358),\n\t /* template */\n\t __webpack_require__(373),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 358 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _color = __webpack_require__(359);\n\n\tvar _color2 = _interopRequireDefault(_color);\n\n\tvar _pickerDropdown = __webpack_require__(360);\n\n\tvar _pickerDropdown2 = _interopRequireDefault(_pickerDropdown);\n\n\tvar _clickoutside = __webpack_require__(21);\n\n\tvar _clickoutside2 = _interopRequireDefault(_clickoutside);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElColorPicker',\n\n\t props: {\n\t value: {\n\t type: String\n\t },\n\t showAlpha: {\n\t type: Boolean\n\t },\n\t colorFormat: {\n\t type: String\n\t }\n\t },\n\n\t directives: { Clickoutside: _clickoutside2.default },\n\n\t computed: {\n\t displayedColor: function displayedColor() {\n\t if (!this.value && !this.showPanelColor) {\n\t return 'transparent';\n\t } else {\n\t var _color$toRgb = this.color.toRgb(),\n\t r = _color$toRgb.r,\n\t g = _color$toRgb.g,\n\t b = _color$toRgb.b;\n\n\t return this.showAlpha ? 'rgba(' + r + ', ' + g + ', ' + b + ', ' + this.color.get('alpha') / 100 + ')' : 'rgb(' + r + ', ' + g + ', ' + b + ')';\n\t }\n\t }\n\t },\n\n\t watch: {\n\t value: function value(val) {\n\t if (!val) {\n\t this.showPanelColor = false;\n\t } else if (val && val !== this.color.value) {\n\t this.color.fromString(val);\n\t }\n\t },\n\n\t color: {\n\t deep: true,\n\t handler: function handler() {\n\t this.showPanelColor = true;\n\t }\n\t },\n\t displayedColor: function displayedColor(val) {\n\t this.$emit('active-change', val);\n\t }\n\t },\n\n\t methods: {\n\t confirmValue: function confirmValue(value) {\n\t this.$emit('input', this.color.value);\n\t this.$emit('change', this.color.value);\n\t this.showPicker = false;\n\t },\n\t clearValue: function clearValue() {\n\t this.$emit('input', null);\n\t this.$emit('change', null);\n\t this.showPanelColor = false;\n\t this.showPicker = false;\n\t this.resetColor();\n\t },\n\t hide: function hide() {\n\t this.showPicker = false;\n\t this.resetColor();\n\t },\n\t resetColor: function resetColor() {\n\t var _this = this;\n\n\t this.$nextTick(function (_) {\n\t if (_this.value) {\n\t _this.color.fromString(_this.value);\n\t } else {\n\t _this.showPanelColor = false;\n\t }\n\t });\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t var value = this.value;\n\t if (value) {\n\t this.color.fromString(value);\n\t }\n\t this.popperElm = this.$refs.dropdown.$el;\n\t },\n\t data: function data() {\n\t var color = new _color2.default({\n\t enableAlpha: this.showAlpha,\n\t format: this.colorFormat\n\t });\n\t return {\n\t color: color,\n\t showPicker: false,\n\t showPanelColor: false\n\t };\n\t },\n\n\n\t components: {\n\t PickerDropdown: _pickerDropdown2.default\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 359 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\tfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\tvar hsv2hsl = function hsv2hsl(hue, sat, val) {\n\t return [hue, sat * val / ((hue = (2 - sat) * val) < 1 ? hue : 2 - hue) || 0, hue / 2];\n\t};\n\n\t// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n\t// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\n\tvar isOnePointZero = function isOnePointZero(n) {\n\t return typeof n === 'string' && n.indexOf('.') !== -1 && parseFloat(n) === 1;\n\t};\n\n\tvar isPercentage = function isPercentage(n) {\n\t return typeof n === 'string' && n.indexOf('%') !== -1;\n\t};\n\n\t// Take input from [0, n] and return it as [0, 1]\n\tvar bound01 = function bound01(value, max) {\n\t if (isOnePointZero(value)) value = '100%';\n\n\t var processPercent = isPercentage(value);\n\t value = Math.min(max, Math.max(0, parseFloat(value)));\n\n\t // Automatically convert percentage into number\n\t if (processPercent) {\n\t value = parseInt(value * max, 10) / 100;\n\t }\n\n\t // Handle floating point rounding errors\n\t if (Math.abs(value - max) < 0.000001) {\n\t return 1;\n\t }\n\n\t // Convert into [0, 1] range if it isn't already\n\t return value % max / parseFloat(max);\n\t};\n\n\tvar INT_HEX_MAP = { 10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F' };\n\n\tvar toHex = function toHex(_ref) {\n\t var r = _ref.r,\n\t g = _ref.g,\n\t b = _ref.b;\n\n\t var hexOne = function hexOne(value) {\n\t value = Math.min(Math.round(value), 255);\n\t var high = Math.floor(value / 16);\n\t var low = value % 16;\n\t return '' + (INT_HEX_MAP[high] || high) + (INT_HEX_MAP[low] || low);\n\t };\n\n\t if (isNaN(r) || isNaN(g) || isNaN(b)) return '';\n\n\t return '#' + hexOne(r) + hexOne(g) + hexOne(b);\n\t};\n\n\tvar HEX_INT_MAP = { A: 10, B: 11, C: 12, D: 13, E: 14, F: 15 };\n\n\tvar parseHexChannel = function parseHexChannel(hex) {\n\t if (hex.length === 2) {\n\t return (HEX_INT_MAP[hex[0].toUpperCase()] || +hex[0]) * 16 + (HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1]);\n\t }\n\n\t return HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1];\n\t};\n\n\tvar hsl2hsv = function hsl2hsv(hue, sat, light) {\n\t sat = sat / 100;\n\t light = light / 100;\n\t var smin = sat;\n\t var lmin = Math.max(light, 0.01);\n\t var sv = void 0;\n\t var v = void 0;\n\n\t light *= 2;\n\t sat *= light <= 1 ? light : 2 - light;\n\t smin *= lmin <= 1 ? lmin : 2 - lmin;\n\t v = (light + sat) / 2;\n\t sv = light === 0 ? 2 * smin / (lmin + smin) : 2 * sat / (light + sat);\n\n\t return {\n\t h: hue,\n\t s: sv * 100,\n\t v: v * 100\n\t };\n\t};\n\n\t// `rgbToHsv`\n\t// Converts an RGB color value to HSV\n\t// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n\t// *Returns:* { h, s, v } in [0,1]\n\tvar rgb2hsv = function rgb2hsv(r, g, b) {\n\t r = bound01(r, 255);\n\t g = bound01(g, 255);\n\t b = bound01(b, 255);\n\n\t var max = Math.max(r, g, b);\n\t var min = Math.min(r, g, b);\n\t var h = void 0,\n\t s = void 0;\n\t var v = max;\n\n\t var d = max - min;\n\t s = max === 0 ? 0 : d / max;\n\n\t if (max === min) {\n\t h = 0; // achromatic\n\t } else {\n\t switch (max) {\n\t case r:\n\t h = (g - b) / d + (g < b ? 6 : 0);\n\t break;\n\t case g:\n\t h = (b - r) / d + 2;\n\t break;\n\t case b:\n\t h = (r - g) / d + 4;\n\t break;\n\t }\n\t h /= 6;\n\t }\n\n\t return { h: h * 360, s: s * 100, v: v * 100 };\n\t};\n\n\t// `hsvToRgb`\n\t// Converts an HSV color value to RGB.\n\t// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n\t// *Returns:* { r, g, b } in the set [0, 255]\n\tvar hsv2rgb = function hsv2rgb(h, s, v) {\n\t h = bound01(h, 360) * 6;\n\t s = bound01(s, 100);\n\t v = bound01(v, 100);\n\n\t var i = Math.floor(h);\n\t var f = h - i;\n\t var p = v * (1 - s);\n\t var q = v * (1 - f * s);\n\t var t = v * (1 - (1 - f) * s);\n\t var mod = i % 6;\n\t var r = [v, q, p, p, t, v][mod];\n\t var g = [t, v, v, q, p, p][mod];\n\t var b = [p, p, t, v, v, q][mod];\n\n\t return {\n\t r: Math.round(r * 255),\n\t g: Math.round(g * 255),\n\t b: Math.round(b * 255)\n\t };\n\t};\n\n\tvar Color = function () {\n\t function Color(options) {\n\t _classCallCheck(this, Color);\n\n\t this._hue = 0;\n\t this._saturation = 100;\n\t this._value = 100;\n\t this._alpha = 100;\n\n\t this.enableAlpha = false;\n\t this.format = 'hex';\n\t this.value = '';\n\n\t options = options || {};\n\n\t for (var option in options) {\n\t if (options.hasOwnProperty(option)) {\n\t this[option] = options[option];\n\t }\n\t }\n\n\t this.doOnChange();\n\t }\n\n\t Color.prototype.set = function set(prop, value) {\n\t if (arguments.length === 1 && (typeof prop === 'undefined' ? 'undefined' : _typeof(prop)) === 'object') {\n\t for (var p in prop) {\n\t if (prop.hasOwnProperty(p)) {\n\t this.set(p, prop[p]);\n\t }\n\t }\n\n\t return;\n\t }\n\n\t this['_' + prop] = value;\n\t this.doOnChange();\n\t };\n\n\t Color.prototype.get = function get(prop) {\n\t return this['_' + prop];\n\t };\n\n\t Color.prototype.toRgb = function toRgb() {\n\t return hsv2rgb(this._hue, this._saturation, this._value);\n\t };\n\n\t Color.prototype.fromString = function fromString(value) {\n\t var _this = this;\n\n\t if (!value) {\n\t this._hue = 0;\n\t this._saturation = 100;\n\t this._value = 100;\n\n\t this.doOnChange();\n\t return;\n\t }\n\n\t var fromHSV = function fromHSV(h, s, v) {\n\t _this._hue = h;\n\t _this._saturation = s;\n\t _this._value = v;\n\n\t _this.doOnChange();\n\t };\n\n\t if (value.indexOf('hsl') !== -1) {\n\t var parts = value.replace(/hsla|hsl|\\(|\\)/gm, '').split(/\\s|,/g).filter(function (val) {\n\t return val !== '';\n\t }).map(function (val, index) {\n\t return index > 2 ? parseFloat(val) : parseInt(val, 10);\n\t });\n\n\t if (parts.length === 4) {\n\t this._alpha = Math.floor(parseFloat(parts[3]) * 100);\n\t }\n\t if (parts.length >= 3) {\n\t var _hsl2hsv = hsl2hsv(parts[0], parts[1], parts[2]),\n\t h = _hsl2hsv.h,\n\t s = _hsl2hsv.s,\n\t v = _hsl2hsv.v;\n\n\t fromHSV(h, s, v);\n\t }\n\t } else if (value.indexOf('hsv') !== -1) {\n\t var _parts = value.replace(/hsva|hsv|\\(|\\)/gm, '').split(/\\s|,/g).filter(function (val) {\n\t return val !== '';\n\t }).map(function (val, index) {\n\t return index > 2 ? parseFloat(val) : parseInt(val, 10);\n\t });\n\n\t if (_parts.length === 4) {\n\t this._alpha = Math.floor(parseFloat(_parts[3]) * 100);\n\t }\n\t if (_parts.length >= 3) {\n\t fromHSV(_parts[0], _parts[1], _parts[2]);\n\t }\n\t } else if (value.indexOf('rgb') !== -1) {\n\t var _parts2 = value.replace(/rgba|rgb|\\(|\\)/gm, '').split(/\\s|,/g).filter(function (val) {\n\t return val !== '';\n\t }).map(function (val, index) {\n\t return index > 2 ? parseFloat(val) : parseInt(val, 10);\n\t });\n\n\t if (_parts2.length === 4) {\n\t this._alpha = Math.floor(parseFloat(_parts2[3]) * 100);\n\t }\n\t if (_parts2.length >= 3) {\n\t var _rgb2hsv = rgb2hsv(_parts2[0], _parts2[1], _parts2[2]),\n\t _h = _rgb2hsv.h,\n\t _s = _rgb2hsv.s,\n\t _v = _rgb2hsv.v;\n\n\t fromHSV(_h, _s, _v);\n\t }\n\t } else if (value.indexOf('#') !== -1) {\n\t var hex = value.replace('#', '').trim();\n\t var r = void 0,\n\t g = void 0,\n\t b = void 0;\n\n\t if (hex.length === 3) {\n\t r = parseHexChannel(hex[0] + hex[0]);\n\t g = parseHexChannel(hex[1] + hex[1]);\n\t b = parseHexChannel(hex[2] + hex[2]);\n\t } else if (hex.length === 6) {\n\t r = parseHexChannel(hex.substring(0, 2));\n\t g = parseHexChannel(hex.substring(2, 4));\n\t b = parseHexChannel(hex.substring(4));\n\t }\n\n\t var _rgb2hsv2 = rgb2hsv(r, g, b),\n\t _h2 = _rgb2hsv2.h,\n\t _s2 = _rgb2hsv2.s,\n\t _v2 = _rgb2hsv2.v;\n\n\t fromHSV(_h2, _s2, _v2);\n\t }\n\t };\n\n\t Color.prototype.doOnChange = function doOnChange() {\n\t var _hue = this._hue,\n\t _saturation = this._saturation,\n\t _value = this._value,\n\t _alpha = this._alpha,\n\t format = this.format;\n\n\n\t if (this.enableAlpha) {\n\t switch (format) {\n\t case 'hsl':\n\t var hsl = hsv2hsl(_hue, _saturation / 100, _value / 100);\n\t this.value = 'hsla(' + _hue + ', ' + Math.round(hsl[1] * 100) + '%, ' + Math.round(hsl[2] * 100) + '%, ' + _alpha / 100 + ')';\n\t break;\n\t case 'hsv':\n\t this.value = 'hsva(' + _hue + ', ' + Math.round(_saturation) + '%, ' + Math.round(_value) + '%, ' + _alpha / 100 + ')';\n\t break;\n\t default:\n\t var _hsv2rgb = hsv2rgb(_hue, _saturation, _value),\n\t r = _hsv2rgb.r,\n\t g = _hsv2rgb.g,\n\t b = _hsv2rgb.b;\n\n\t this.value = 'rgba(' + r + ', ' + g + ', ' + b + ', ' + _alpha / 100 + ')';\n\t }\n\t } else {\n\t switch (format) {\n\t case 'hsl':\n\t var _hsl = hsv2hsl(_hue, _saturation / 100, _value / 100);\n\t this.value = 'hsl(' + _hue + ', ' + Math.round(_hsl[1] * 100) + '%, ' + Math.round(_hsl[2] * 100) + '%)';\n\t break;\n\t case 'hsv':\n\t this.value = 'hsv(' + _hue + ', ' + Math.round(_saturation) + '%, ' + Math.round(_value) + '%)';\n\t break;\n\t case 'rgb':\n\t var _hsv2rgb2 = hsv2rgb(_hue, _saturation, _value),\n\t _r = _hsv2rgb2.r,\n\t _g = _hsv2rgb2.g,\n\t _b = _hsv2rgb2.b;\n\n\t this.value = 'rgb(' + _r + ', ' + _g + ', ' + _b + ')';\n\t break;\n\t default:\n\t this.value = toHex(hsv2rgb(_hue, _saturation, _value));\n\t }\n\t }\n\t };\n\n\t return Color;\n\t}();\n\n\texports.default = Color;\n\t;\n\n/***/ },\n/* 360 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(361),\n\t /* template */\n\t __webpack_require__(372),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 361 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _svPanel = __webpack_require__(362);\n\n\tvar _svPanel2 = _interopRequireDefault(_svPanel);\n\n\tvar _hueSlider = __webpack_require__(366);\n\n\tvar _hueSlider2 = _interopRequireDefault(_hueSlider);\n\n\tvar _alphaSlider = __webpack_require__(369);\n\n\tvar _alphaSlider2 = _interopRequireDefault(_alphaSlider);\n\n\tvar _vuePopper = __webpack_require__(24);\n\n\tvar _vuePopper2 = _interopRequireDefault(_vuePopper);\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'el-color-picker-dropdown',\n\n\t mixins: [_vuePopper2.default, _locale2.default],\n\n\t components: {\n\t SvPanel: _svPanel2.default,\n\t HueSlider: _hueSlider2.default,\n\t AlphaSlider: _alphaSlider2.default\n\t },\n\n\t props: {\n\t color: {\n\t required: true\n\t },\n\t showAlpha: Boolean\n\t },\n\n\t computed: {\n\t currentColor: function currentColor() {\n\t var parent = this.$parent;\n\t return !parent.value && !parent.showPanelColor ? '' : parent.color.value;\n\t }\n\t },\n\n\t methods: {\n\t confirmValue: function confirmValue() {\n\t this.$emit('pick');\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t this.$parent.popperElm = this.popperElm = this.$el;\n\t this.referenceElm = this.$parent.$el;\n\t },\n\n\n\t watch: {\n\t showPopper: function showPopper(val) {\n\t var _this = this;\n\n\t if (val === true) {\n\t this.$nextTick(function () {\n\t var _$refs = _this.$refs,\n\t sl = _$refs.sl,\n\t hue = _$refs.hue,\n\t alpha = _$refs.alpha;\n\n\t sl && sl.update();\n\t hue && hue.update();\n\t alpha && alpha.update();\n\t });\n\t }\n\t }\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 362 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(363),\n\t /* template */\n\t __webpack_require__(365),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 363 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _draggable = __webpack_require__(364);\n\n\tvar _draggable2 = _interopRequireDefault(_draggable);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'el-sl-panel',\n\n\t props: {\n\t color: {\n\t required: true\n\t }\n\t },\n\n\t computed: {\n\t colorValue: function colorValue() {\n\t var hue = this.color.get('hue');\n\t var value = this.color.get('value');\n\t return { hue: hue, value: value };\n\t }\n\t },\n\n\t watch: {\n\t colorValue: function colorValue() {\n\t this.update();\n\t }\n\t },\n\n\t methods: {\n\t update: function update() {\n\t var saturation = this.color.get('saturation');\n\t var value = this.color.get('value');\n\n\t var el = this.$el;\n\n\t var _el$getBoundingClient = el.getBoundingClientRect(),\n\t width = _el$getBoundingClient.width,\n\t height = _el$getBoundingClient.height;\n\n\t if (!height) height = width * 3 / 4;\n\n\t this.cursorLeft = saturation * width / 100;\n\t this.cursorTop = (100 - value) * height / 100;\n\n\t this.background = 'hsl(' + this.color.get('hue') + ', 100%, 50%)';\n\t },\n\t handleDrag: function handleDrag(event) {\n\t var el = this.$el;\n\t var rect = el.getBoundingClientRect();\n\n\t var left = event.clientX - rect.left;\n\t var top = event.clientY - rect.top;\n\t left = Math.max(0, left);\n\t left = Math.min(left, rect.width);\n\n\t top = Math.max(0, top);\n\t top = Math.min(top, rect.height);\n\n\t this.cursorLeft = left;\n\t this.cursorTop = top;\n\t this.color.set({\n\t saturation: left / rect.width * 100,\n\t value: 100 - top / rect.height * 100\n\t });\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t var _this = this;\n\n\t (0, _draggable2.default)(this.$el, {\n\t drag: function drag(event) {\n\t _this.handleDrag(event);\n\t },\n\t end: function end(event) {\n\t _this.handleDrag(event);\n\t }\n\t });\n\n\t this.update();\n\t },\n\t data: function data() {\n\t return {\n\t cursorTop: 0,\n\t cursorLeft: 0,\n\t background: 'hsl(0, 100%, 50%)'\n\t };\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 364 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\texports.default = function (element, options) {\n\t if (_vue2.default.prototype.$isServer) return;\n\t var moveFn = function moveFn(event) {\n\t if (options.drag) {\n\t options.drag(event);\n\t }\n\t };\n\t var upFn = function upFn(event) {\n\t document.removeEventListener('mousemove', moveFn);\n\t document.removeEventListener('mouseup', upFn);\n\t document.onselectstart = null;\n\t document.ondragstart = null;\n\n\t isDragging = false;\n\n\t if (options.end) {\n\t options.end(event);\n\t }\n\t };\n\t element.addEventListener('mousedown', function (event) {\n\t if (isDragging) return;\n\t document.onselectstart = function () {\n\t return false;\n\t };\n\t document.ondragstart = function () {\n\t return false;\n\t };\n\n\t document.addEventListener('mousemove', moveFn);\n\t document.addEventListener('mouseup', upFn);\n\t isDragging = true;\n\n\t if (options.start) {\n\t options.start(event);\n\t }\n\t });\n\t};\n\n\tvar _vue = __webpack_require__(133);\n\n\tvar _vue2 = _interopRequireDefault(_vue);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar isDragging = false;\n\n/***/ },\n/* 365 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-color-svpanel\",\n\t style: ({\n\t backgroundColor: _vm.background\n\t })\n\t }, [_c('div', {\n\t staticClass: \"el-color-svpanel__white\"\n\t }), _c('div', {\n\t staticClass: \"el-color-svpanel__black\"\n\t }), _c('div', {\n\t staticClass: \"el-color-svpanel__cursor\",\n\t style: ({\n\t top: _vm.cursorTop + 'px',\n\t left: _vm.cursorLeft + 'px'\n\t })\n\t }, [_c('div')])])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 366 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(367),\n\t /* template */\n\t __webpack_require__(368),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 367 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _draggable = __webpack_require__(364);\n\n\tvar _draggable2 = _interopRequireDefault(_draggable);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'el-color-hue-slider',\n\n\t props: {\n\t color: {\n\t required: true\n\t },\n\n\t vertical: Boolean\n\t },\n\n\t data: function data() {\n\t return {\n\t thumbLeft: 0,\n\t thumbTop: 0\n\t };\n\t },\n\n\n\t computed: {\n\t hueValue: function hueValue() {\n\t var hue = this.color.get('hue');\n\t return hue;\n\t }\n\t },\n\n\t watch: {\n\t hueValue: function hueValue() {\n\t this.update();\n\t }\n\t },\n\n\t methods: {\n\t handleClick: function handleClick(event) {\n\t var thumb = this.$refs.thumb;\n\t var target = event.target;\n\n\t if (target !== thumb) {\n\t this.handleDrag(event);\n\t }\n\t },\n\t handleDrag: function handleDrag(event) {\n\t var rect = this.$el.getBoundingClientRect();\n\t var thumb = this.$refs.thumb;\n\n\t var hue = void 0;\n\n\t if (!this.vertical) {\n\t var left = event.clientX - rect.left;\n\t left = Math.min(left, rect.width - thumb.offsetWidth / 2);\n\t left = Math.max(thumb.offsetWidth / 2, left);\n\n\t hue = Math.round((left - thumb.offsetWidth / 2) / (rect.width - thumb.offsetWidth) * 360);\n\t } else {\n\t var top = event.clientY - rect.top;\n\t top = Math.min(top, rect.height - thumb.offsetHeight / 2);\n\t top = Math.max(thumb.offsetHeight / 2, top);\n\n\t hue = Math.round((top - thumb.offsetHeight / 2) / (rect.height - thumb.offsetHeight) * 360);\n\t }\n\n\t this.color.set('hue', hue);\n\t },\n\t getThumbLeft: function getThumbLeft() {\n\t if (this.vertical) return 0;\n\t var el = this.$el;\n\t var hue = this.color.get('hue');\n\n\t if (!el) return 0;\n\t var thumb = this.$refs.thumb;\n\t return Math.round(hue * (el.offsetWidth - thumb.offsetWidth / 2) / 360);\n\t },\n\t getThumbTop: function getThumbTop() {\n\t if (!this.vertical) return 0;\n\t var el = this.$el;\n\t var hue = this.color.get('hue');\n\n\t if (!el) return 0;\n\t var thumb = this.$refs.thumb;\n\t return Math.round(hue * (el.offsetHeight - thumb.offsetHeight / 2) / 360);\n\t },\n\t update: function update() {\n\t this.thumbLeft = this.getThumbLeft();\n\t this.thumbTop = this.getThumbTop();\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t var _this = this;\n\n\t var _$refs = this.$refs,\n\t bar = _$refs.bar,\n\t thumb = _$refs.thumb;\n\n\n\t var dragConfig = {\n\t drag: function drag(event) {\n\t _this.handleDrag(event);\n\t },\n\t end: function end(event) {\n\t _this.handleDrag(event);\n\t }\n\t };\n\n\t (0, _draggable2.default)(bar, dragConfig);\n\t (0, _draggable2.default)(thumb, dragConfig);\n\t this.update();\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 368 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-color-hue-slider\",\n\t class: {\n\t 'is-vertical': _vm.vertical\n\t }\n\t }, [_c('div', {\n\t ref: \"bar\",\n\t staticClass: \"el-color-hue-slider__bar\",\n\t on: {\n\t \"click\": _vm.handleClick\n\t }\n\t }), _c('div', {\n\t ref: \"thumb\",\n\t staticClass: \"el-color-hue-slider__thumb\",\n\t style: ({\n\t left: _vm.thumbLeft + 'px',\n\t top: _vm.thumbTop + 'px'\n\t })\n\t })])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 369 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(370),\n\t /* template */\n\t __webpack_require__(371),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 370 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _draggable = __webpack_require__(364);\n\n\tvar _draggable2 = _interopRequireDefault(_draggable);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'el-color-alpha-slider',\n\n\t props: {\n\t color: {\n\t required: true\n\t },\n\t vertical: Boolean\n\t },\n\n\t watch: {\n\t 'color._alpha': function color_alpha() {\n\t this.update();\n\t },\n\t 'color.value': function colorValue() {\n\t this.update();\n\t }\n\t },\n\n\t methods: {\n\t handleClick: function handleClick(event) {\n\t var thumb = this.$refs.thumb;\n\t var target = event.target;\n\n\t if (target !== thumb) {\n\t this.handleDrag(event);\n\t }\n\t },\n\t handleDrag: function handleDrag(event) {\n\t var rect = this.$el.getBoundingClientRect();\n\t var thumb = this.$refs.thumb;\n\n\n\t if (!this.vertical) {\n\t var left = event.clientX - rect.left;\n\t left = Math.max(thumb.offsetWidth / 2, left);\n\t left = Math.min(left, rect.width - thumb.offsetWidth / 2);\n\n\t this.color.set('alpha', Math.round((left - thumb.offsetWidth / 2) / (rect.width - thumb.offsetWidth) * 100));\n\t } else {\n\t var top = event.clientY - rect.top;\n\t top = Math.max(thumb.offsetHeight / 2, top);\n\t top = Math.min(top, rect.height - thumb.offsetHeight / 2);\n\n\t this.color.set('alpha', Math.round((top - thumb.offsetHeight / 2) / (rect.height - thumb.offsetHeight) * 100));\n\t }\n\t },\n\t getThumbLeft: function getThumbLeft() {\n\t if (this.vertical) return 0;\n\t var el = this.$el;\n\t var alpha = this.color._alpha;\n\n\t if (!el) return 0;\n\t var thumb = this.$refs.thumb;\n\t return Math.round(alpha * (el.offsetWidth - thumb.offsetWidth / 2) / 100);\n\t },\n\t getThumbTop: function getThumbTop() {\n\t if (!this.vertical) return 0;\n\t var el = this.$el;\n\t var alpha = this.color._alpha;\n\n\t if (!el) return 0;\n\t var thumb = this.$refs.thumb;\n\t return Math.round(alpha * (el.offsetHeight - thumb.offsetHeight / 2) / 100);\n\t },\n\t getBackground: function getBackground() {\n\t if (this.color && this.color.value) {\n\t var _color$toRgb = this.color.toRgb(),\n\t r = _color$toRgb.r,\n\t g = _color$toRgb.g,\n\t b = _color$toRgb.b;\n\n\t return 'linear-gradient(to right, rgba(' + r + ', ' + g + ', ' + b + ', 0) 0%, rgba(' + r + ', ' + g + ', ' + b + ', 1) 100%)';\n\t }\n\t return null;\n\t },\n\t update: function update() {\n\t this.thumbLeft = this.getThumbLeft();\n\t this.thumbTop = this.getThumbTop();\n\t this.background = this.getBackground();\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t thumbLeft: 0,\n\t thumbTop: 0,\n\t background: null\n\t };\n\t },\n\t mounted: function mounted() {\n\t var _this = this;\n\n\t var _$refs = this.$refs,\n\t bar = _$refs.bar,\n\t thumb = _$refs.thumb;\n\n\n\t var dragConfig = {\n\t drag: function drag(event) {\n\t _this.handleDrag(event);\n\t },\n\t end: function end(event) {\n\t _this.handleDrag(event);\n\t }\n\t };\n\n\t (0, _draggable2.default)(bar, dragConfig);\n\t (0, _draggable2.default)(thumb, dragConfig);\n\t this.update();\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n/* 371 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-color-alpha-slider\",\n\t class: {\n\t 'is-vertical': _vm.vertical\n\t }\n\t }, [_c('div', {\n\t ref: \"bar\",\n\t staticClass: \"el-color-alpha-slider__bar\",\n\t style: ({\n\t background: _vm.background\n\t }),\n\t on: {\n\t \"click\": _vm.handleClick\n\t }\n\t }), _c('div', {\n\t ref: \"thumb\",\n\t staticClass: \"el-color-alpha-slider__thumb\",\n\t style: ({\n\t left: _vm.thumbLeft + 'px',\n\t top: _vm.thumbTop + 'px'\n\t })\n\t })])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 372 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('transition', {\n\t attrs: {\n\t \"name\": \"el-zoom-in-top\"\n\t },\n\t on: {\n\t \"after-leave\": _vm.doDestroy\n\t }\n\t }, [_c('div', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.showPopper),\n\t expression: \"showPopper\"\n\t }],\n\t staticClass: \"el-color-dropdown\"\n\t }, [_c('div', {\n\t staticClass: \"el-color-dropdown__main-wrapper\"\n\t }, [_c('hue-slider', {\n\t ref: \"hue\",\n\t staticStyle: {\n\t \"float\": \"right\"\n\t },\n\t attrs: {\n\t \"color\": _vm.color,\n\t \"vertical\": \"\"\n\t }\n\t }), _c('sv-panel', {\n\t ref: \"sl\",\n\t attrs: {\n\t \"color\": _vm.color\n\t }\n\t })], 1), (_vm.showAlpha) ? _c('alpha-slider', {\n\t ref: \"alpha\",\n\t attrs: {\n\t \"color\": _vm.color\n\t }\n\t }) : _vm._e(), _c('div', {\n\t staticClass: \"el-color-dropdown__btns\"\n\t }, [_c('span', {\n\t staticClass: \"el-color-dropdown__value\"\n\t }, [_vm._v(_vm._s(_vm.currentColor))]), _c('a', {\n\t staticClass: \"el-color-dropdown__link-btn\",\n\t attrs: {\n\t \"href\": \"JavaScript:\"\n\t },\n\t on: {\n\t \"click\": function($event) {\n\t _vm.$emit('clear')\n\t }\n\t }\n\t }, [_vm._v(_vm._s(_vm.t('el.colorpicker.clear')))]), _c('button', {\n\t staticClass: \"el-color-dropdown__btn\",\n\t on: {\n\t \"click\": _vm.confirmValue\n\t }\n\t }, [_vm._v(_vm._s(_vm.t('el.colorpicker.confirm')))])])], 1)])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 373 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t directives: [{\n\t name: \"clickoutside\",\n\t rawName: \"v-clickoutside\",\n\t value: (_vm.hide),\n\t expression: \"hide\"\n\t }],\n\t staticClass: \"el-color-picker\"\n\t }, [_c('div', {\n\t staticClass: \"el-color-picker__trigger\",\n\t on: {\n\t \"click\": function($event) {\n\t _vm.showPicker = !_vm.showPicker\n\t }\n\t }\n\t }, [_c('span', {\n\t staticClass: \"el-color-picker__color\",\n\t class: {\n\t 'is-alpha': _vm.showAlpha\n\t }\n\t }, [_c('span', {\n\t staticClass: \"el-color-picker__color-inner\",\n\t style: ({\n\t backgroundColor: _vm.displayedColor\n\t })\n\t }), (!_vm.value && !_vm.showPanelColor) ? _c('span', {\n\t staticClass: \"el-color-picker__empty el-icon-close\"\n\t }) : _vm._e()]), _c('span', {\n\t staticClass: \"el-color-picker__icon el-icon-caret-bottom\"\n\t })]), _c('picker-dropdown', {\n\t ref: \"dropdown\",\n\t staticClass: \"el-color-picker__panel\",\n\t attrs: {\n\t \"color\": _vm.color,\n\t \"show-alpha\": _vm.showAlpha\n\t },\n\t on: {\n\t \"pick\": _vm.confirmValue,\n\t \"clear\": _vm.clearValue\n\t },\n\t model: {\n\t value: (_vm.showPicker),\n\t callback: function($$v) {\n\t _vm.showPicker = $$v\n\t },\n\t expression: \"showPicker\"\n\t }\n\t })], 1)\n\t},staticRenderFns: []}\n\n/***/ },\n/* 374 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(375);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_main2.default.install = function (Vue) {\n\t Vue.component(_main2.default.name, _main2.default);\n\t};\n\n\texports.default = _main2.default;\n\n/***/ },\n/* 375 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(376),\n\t /* template */\n\t __webpack_require__(380),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 376 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _button = __webpack_require__(31);\n\n\tvar _button2 = _interopRequireDefault(_button);\n\n\tvar _emitter = __webpack_require__(15);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tvar _transferPanel = __webpack_require__(377);\n\n\tvar _transferPanel2 = _interopRequireDefault(_transferPanel);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElTransfer',\n\n\t mixins: [_emitter2.default, _locale2.default],\n\n\t components: {\n\t TransferPanel: _transferPanel2.default,\n\t ElButton: _button2.default\n\t },\n\n\t props: {\n\t data: {\n\t type: Array,\n\t default: function _default() {\n\t return [];\n\t }\n\t },\n\t titles: {\n\t type: Array,\n\t default: function _default() {\n\t return [];\n\t }\n\t },\n\t buttonTexts: {\n\t type: Array,\n\t default: function _default() {\n\t return [];\n\t }\n\t },\n\t filterPlaceholder: {\n\t type: String,\n\t default: ''\n\t },\n\t filterMethod: Function,\n\t leftDefaultChecked: {\n\t type: Array,\n\t default: function _default() {\n\t return [];\n\t }\n\t },\n\t rightDefaultChecked: {\n\t type: Array,\n\t default: function _default() {\n\t return [];\n\t }\n\t },\n\t renderContent: Function,\n\t value: {\n\t type: Array,\n\t default: function _default() {\n\t return [];\n\t }\n\t },\n\t footerFormat: {\n\t type: Object,\n\t default: function _default() {\n\t return {};\n\t }\n\t },\n\t filterable: Boolean,\n\t props: {\n\t type: Object,\n\t default: function _default() {\n\t return {\n\t label: 'label',\n\t key: 'key',\n\t disabled: 'disabled'\n\t };\n\t }\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t leftChecked: [],\n\t rightChecked: []\n\t };\n\t },\n\n\n\t computed: {\n\t sourceData: function sourceData() {\n\t var _this = this;\n\n\t return this.data.filter(function (item) {\n\t return _this.value.indexOf(item[_this.props.key]) === -1;\n\t });\n\t },\n\t targetData: function targetData() {\n\t var _this2 = this;\n\n\t return this.data.filter(function (item) {\n\t return _this2.value.indexOf(item[_this2.props.key]) > -1;\n\t });\n\t }\n\t },\n\n\t watch: {\n\t value: function value(val) {\n\t this.dispatch('ElFormItem', 'el.form.change', val);\n\t }\n\t },\n\n\t methods: {\n\t onSourceCheckedChange: function onSourceCheckedChange(val) {\n\t this.leftChecked = val;\n\t },\n\t onTargetCheckedChange: function onTargetCheckedChange(val) {\n\t this.rightChecked = val;\n\t },\n\t addToLeft: function addToLeft() {\n\t var currentValue = this.value.slice();\n\t this.rightChecked.forEach(function (item) {\n\t var index = currentValue.indexOf(item);\n\t if (index > -1) {\n\t currentValue.splice(index, 1);\n\t }\n\t });\n\t this.$emit('input', currentValue);\n\t this.$emit('change', currentValue, 'left', this.rightChecked);\n\t },\n\t addToRight: function addToRight() {\n\t var _this3 = this;\n\n\t var currentValue = this.value.slice();\n\t this.leftChecked.forEach(function (item) {\n\t if (_this3.value.indexOf(item) === -1) {\n\t currentValue = currentValue.concat(item);\n\t }\n\t });\n\t this.$emit('input', currentValue);\n\t this.$emit('change', currentValue, 'right', this.leftChecked);\n\t }\n\t }\n\t};\n\n/***/ },\n/* 377 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(5)(\n\t /* script */\n\t __webpack_require__(378),\n\t /* template */\n\t __webpack_require__(379),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n/* 378 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _checkboxGroup = __webpack_require__(143);\n\n\tvar _checkboxGroup2 = _interopRequireDefault(_checkboxGroup);\n\n\tvar _checkbox = __webpack_require__(130);\n\n\tvar _checkbox2 = _interopRequireDefault(_checkbox);\n\n\tvar _input = __webpack_require__(20);\n\n\tvar _input2 = _interopRequireDefault(_input);\n\n\tvar _locale = __webpack_require__(10);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t mixins: [_locale2.default],\n\n\t name: 'ElTransferPanel',\n\n\t componentName: 'ElTransferPanel',\n\n\t components: {\n\t ElCheckboxGroup: _checkboxGroup2.default,\n\t ElCheckbox: _checkbox2.default,\n\t ElInput: _input2.default,\n\t OptionContent: {\n\t props: {\n\t option: Object\n\t },\n\t render: function render(h) {\n\t var getParent = function getParent(vm) {\n\t if (vm.$options.componentName === 'ElTransferPanel') {\n\t return vm;\n\t } else if (vm.$parent) {\n\t return getParent(vm.$parent);\n\t } else {\n\t return vm;\n\t }\n\t };\n\t var parent = getParent(this);\n\t return parent.renderContent ? parent.renderContent(h, this.option) : h(\n\t 'span',\n\t null,\n\t [this.option[parent.labelProp] || this.option[parent.keyProp]]\n\t );\n\t }\n\t }\n\t },\n\n\t props: {\n\t data: {\n\t type: Array,\n\t default: function _default() {\n\t return [];\n\t }\n\t },\n\t renderContent: Function,\n\t placeholder: String,\n\t title: String,\n\t filterable: Boolean,\n\t footerFormat: Object,\n\t filterMethod: Function,\n\t defaultChecked: Array,\n\t props: Object\n\t },\n\n\t data: function data() {\n\t return {\n\t checked: [],\n\t allChecked: false,\n\t query: '',\n\t inputHover: false\n\t };\n\t },\n\n\n\t watch: {\n\t checked: function checked(val) {\n\t this.updateAllChecked();\n\t this.$emit('checked-change', val);\n\t },\n\t data: function data() {\n\t var _this = this;\n\n\t var checked = [];\n\t var filteredDataKeys = this.filteredData.map(function (item) {\n\t return item[_this.keyProp];\n\t });\n\t this.checked.forEach(function (item) {\n\t if (filteredDataKeys.indexOf(item) > -1) {\n\t checked.push(item);\n\t }\n\t });\n\t this.checked = checked;\n\t },\n\t checkableData: function checkableData() {\n\t this.updateAllChecked();\n\t },\n\n\n\t defaultChecked: {\n\t immediate: true,\n\t handler: function handler(val, oldVal) {\n\t var _this2 = this;\n\n\t if (oldVal && val.length === oldVal.length && val.every(function (item) {\n\t return oldVal.indexOf(item) > -1;\n\t })) return;\n\t var checked = [];\n\t var checkableDataKeys = this.checkableData.map(function (item) {\n\t return item[_this2.keyProp];\n\t });\n\t val.forEach(function (item) {\n\t if (checkableDataKeys.indexOf(item) > -1) {\n\t checked.push(item);\n\t }\n\t });\n\t this.checked = checked;\n\t }\n\t }\n\t },\n\n\t computed: {\n\t filteredData: function filteredData() {\n\t var _this3 = this;\n\n\t return this.data.filter(function (item) {\n\t if (typeof _this3.filterMethod === 'function') {\n\t return _this3.filterMethod(_this3.query, item);\n\t } else {\n\t var label = item[_this3.labelProp] || item[_this3.keyProp].toString();\n\t return label.toLowerCase().indexOf(_this3.query.toLowerCase()) > -1;\n\t }\n\t });\n\t },\n\t checkableData: function checkableData() {\n\t var _this4 = this;\n\n\t return this.filteredData.filter(function (item) {\n\t return !item[_this4.disabledProp];\n\t });\n\t },\n\t checkedSummary: function checkedSummary() {\n\t var checkedLength = this.checked.length;\n\t var dataLength = this.data.length;\n\t var _footerFormat = this.footerFormat,\n\t noChecked = _footerFormat.noChecked,\n\t hasChecked = _footerFormat.hasChecked;\n\n\t if (noChecked && hasChecked) {\n\t return checkedLength > 0 ? hasChecked.replace(/\\${checked}/g, checkedLength).replace(/\\${total}/g, dataLength) : noChecked.replace(/\\${total}/g, dataLength);\n\t } else {\n\t return checkedLength > 0 ? this.t('el.transfer.hasCheckedFormat', { total: dataLength, checked: checkedLength }) : this.t('el.transfer.noCheckedFormat', { total: dataLength });\n\t }\n\t },\n\t isIndeterminate: function isIndeterminate() {\n\t var checkedLength = this.checked.length;\n\t return checkedLength > 0 && checkedLength < this.checkableData.length;\n\t },\n\t hasNoMatch: function hasNoMatch() {\n\t return this.query.length > 0 && this.filteredData.length === 0;\n\t },\n\t inputIcon: function inputIcon() {\n\t return this.query.length > 0 && this.inputHover ? 'circle-close' : 'search';\n\t },\n\t labelProp: function labelProp() {\n\t return this.props.label || 'label';\n\t },\n\t keyProp: function keyProp() {\n\t return this.props.key || 'key';\n\t },\n\t disabledProp: function disabledProp() {\n\t return this.props.disabled || 'disabled';\n\t }\n\t },\n\n\t methods: {\n\t updateAllChecked: function updateAllChecked() {\n\t var _this5 = this;\n\n\t var checkableDataKeys = this.checkableData.map(function (item) {\n\t return item[_this5.keyProp];\n\t });\n\t this.allChecked = checkableDataKeys.length > 0 && checkableDataKeys.every(function (item) {\n\t return _this5.checked.indexOf(item) > -1;\n\t });\n\t },\n\t handleAllCheckedChange: function handleAllCheckedChange(value) {\n\t var _this6 = this;\n\n\t this.checked = value.target.checked ? this.checkableData.map(function (item) {\n\t return item[_this6.keyProp];\n\t }) : [];\n\t },\n\t clearQuery: function clearQuery() {\n\t if (this.inputIcon === 'circle-close') {\n\t this.query = '';\n\t }\n\t }\n\t }\n\t};\n\n/***/ },\n/* 379 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-transfer-panel\"\n\t }, [_c('p', {\n\t staticClass: \"el-transfer-panel__header\"\n\t }, [_vm._v(_vm._s(_vm.title))]), _c('div', {\n\t staticClass: \"el-transfer-panel__body\"\n\t }, [(_vm.filterable) ? _c('el-input', {\n\t staticClass: \"el-transfer-panel__filter\",\n\t attrs: {\n\t \"size\": \"small\",\n\t \"placeholder\": _vm.placeholder,\n\t \"icon\": _vm.inputIcon\n\t },\n\t on: {\n\t \"click\": _vm.clearQuery\n\t },\n\t nativeOn: {\n\t \"mouseenter\": function($event) {\n\t _vm.inputHover = true\n\t },\n\t \"mouseleave\": function($event) {\n\t _vm.inputHover = false\n\t }\n\t },\n\t model: {\n\t value: (_vm.query),\n\t callback: function($$v) {\n\t _vm.query = $$v\n\t },\n\t expression: \"query\"\n\t }\n\t }) : _vm._e(), _c('el-checkbox-group', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (!_vm.hasNoMatch && _vm.data.length > 0),\n\t expression: \"!hasNoMatch && data.length > 0\"\n\t }],\n\t staticClass: \"el-transfer-panel__list\",\n\t class: {\n\t 'is-filterable': _vm.filterable\n\t },\n\t model: {\n\t value: (_vm.checked),\n\t callback: function($$v) {\n\t _vm.checked = $$v\n\t },\n\t expression: \"checked\"\n\t }\n\t }, _vm._l((_vm.filteredData), function(item) {\n\t return _c('el-checkbox', {\n\t key: item[_vm.keyProp],\n\t staticClass: \"el-transfer-panel__item\",\n\t attrs: {\n\t \"label\": item[_vm.keyProp],\n\t \"disabled\": item[_vm.disabledProp]\n\t }\n\t }, [_c('option-content', {\n\t attrs: {\n\t \"option\": item\n\t }\n\t })], 1)\n\t })), _c('p', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.hasNoMatch),\n\t expression: \"hasNoMatch\"\n\t }],\n\t staticClass: \"el-transfer-panel__empty\"\n\t }, [_vm._v(_vm._s(_vm.t('el.transfer.noMatch')))]), _c('p', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.data.length === 0 && !_vm.hasNoMatch),\n\t expression: \"data.length === 0 && !hasNoMatch\"\n\t }],\n\t staticClass: \"el-transfer-panel__empty\"\n\t }, [_vm._v(_vm._s(_vm.t('el.transfer.noData')))])], 1), _c('p', {\n\t staticClass: \"el-transfer-panel__footer\"\n\t }, [_c('el-checkbox', {\n\t attrs: {\n\t \"indeterminate\": _vm.isIndeterminate\n\t },\n\t on: {\n\t \"change\": _vm.handleAllCheckedChange\n\t },\n\t model: {\n\t value: (_vm.allChecked),\n\t callback: function($$v) {\n\t _vm.allChecked = $$v\n\t },\n\t expression: \"allChecked\"\n\t }\n\t }, [_vm._v(_vm._s(_vm.checkedSummary))]), _vm._t(\"default\")], 2)])\n\t},staticRenderFns: []}\n\n/***/ },\n/* 380 */\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-transfer\"\n\t }, [_c('transfer-panel', _vm._b({\n\t attrs: {\n\t \"data\": _vm.sourceData,\n\t \"title\": _vm.titles[0] || _vm.t('el.transfer.titles.0'),\n\t \"default-checked\": _vm.leftDefaultChecked,\n\t \"placeholder\": _vm.filterPlaceholder || _vm.t('el.transfer.filterPlaceholder')\n\t },\n\t on: {\n\t \"checked-change\": _vm.onSourceCheckedChange\n\t }\n\t }, 'transfer-panel', _vm.$props), [_vm._t(\"left-footer\")], 2), _c('div', {\n\t staticClass: \"el-transfer__buttons\"\n\t }, [_c('el-button', {\n\t attrs: {\n\t \"type\": \"primary\",\n\t \"size\": \"small\",\n\t \"disabled\": _vm.rightChecked.length === 0\n\t },\n\t nativeOn: {\n\t \"click\": function($event) {\n\t _vm.addToLeft($event)\n\t }\n\t }\n\t }, [_c('i', {\n\t staticClass: \"el-icon-arrow-left\"\n\t }), (_vm.buttonTexts[0] !== undefined) ? _c('span', [_vm._v(_vm._s(_vm.buttonTexts[0]))]) : _vm._e()]), _c('el-button', {\n\t attrs: {\n\t \"type\": \"primary\",\n\t \"size\": \"small\",\n\t \"disabled\": _vm.leftChecked.length === 0\n\t },\n\t nativeOn: {\n\t \"click\": function($event) {\n\t _vm.addToRight($event)\n\t }\n\t }\n\t }, [(_vm.buttonTexts[1] !== undefined) ? _c('span', [_vm._v(_vm._s(_vm.buttonTexts[1]))]) : _vm._e(), _c('i', {\n\t staticClass: \"el-icon-arrow-right\"\n\t })])], 1), _c('transfer-panel', _vm._b({\n\t attrs: {\n\t \"data\": _vm.targetData,\n\t \"title\": _vm.titles[1] || _vm.t('el.transfer.titles.1'),\n\t \"default-checked\": _vm.rightDefaultChecked,\n\t \"placeholder\": _vm.filterPlaceholder || _vm.t('el.transfer.filterPlaceholder')\n\t },\n\t on: {\n\t \"checked-change\": _vm.onTargetCheckedChange\n\t }\n\t }, 'transfer-panel', _vm.$props), [_vm._t(\"right-footer\")], 2)], 1)\n\t},staticRenderFns: []}\n\n/***/ }\n/******/ ]);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvZWxlbWVudC11aS5jb21tb24uanM/Y2NiZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCOztBQUU5Rjs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSx1Q0FBdUMsSUFBSTtBQUMzQztBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFtQixhQUFhLDBCQUEwQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRCxhQUFhO0FBQ25FO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRixPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKLGdCQUFnQix1Q0FBdUM7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUiwrQkFBK0Isb0JBQW9CO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEs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QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFtQixhQUFhLDBCQUEwQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUYsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FB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LHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtB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QTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLGNBQWM7QUFDZCxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDM0U7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRixPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQSxjQUFjO0FBQ2QsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBLGFBQWE7QUFDYjtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxpQkFBaUIsbUJBQW1CLGFBQWEsMEJBQTBCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1IsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUYsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDM0U7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCOztBQUU5RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxpQkFBaUIsbUJBQW1CLGFBQWEsMEJBQTBCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRixPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxxR0FBcUcsbUJBQW1CLEVBQUUsbUJBQW1CLDhIQUE4SCxHQUFHO0FBQzlRO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCOztBQUU5RjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKLGdCQUFnQix1Q0FBdUM7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsUUFBUTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxVQUFVOztBQUVWO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0Esc0JBQXNCLDJCQUEyQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjs7QUFFQTs7QUFFQTs7QUFFQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsTUFBTTs7QUFFTjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pELElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0EsWUFBWTtBQUNaLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQSxNQUFNO0FBQ04sSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osVUFBVTtBQUNWO0FBQ0EsTUFBTTs7QUFFTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDBCQUEwQjtBQUMxQjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DLE9BQU87QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVGQUF1RixhQUFhO0FBQ3BHO0FBQ0E7O0FBRUE7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEscUdBQXFHLG1CQUFtQixFQUFFLG1CQUFtQiw4SEFBOEg7O0FBRTNROztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUYsa0RBQWtELDBDQUEwQywwREFBMEQsRUFBRTs7QUFFeEo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUIsNEJBQTRCO0FBQzVCLGdDQUFnQztBQUNoQyw0QkFBNEI7QUFDNUIsaUNBQWlDO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBLFlBQVk7QUFDWjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEIsaUVBQWlFLG1IQUFtSDtBQUNwTDtBQUNBLGNBQWM7QUFDZDtBQUNBLGdCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixnQ0FBZ0M7QUFDekQscURBQXFEO0FBQ3JELDRFQUE0RSwrQ0FBK0M7QUFDM0g7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EscUJBQXFCLG1GQUFtRjtBQUN4Ryw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7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Q0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtB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O0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCOztBQUU5RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUYsMENBQTBDLHNFQUFzRTs7QUFFaEg7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsWUFBWSx5Q0FBeUM7QUFDckQ7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTixvREFBb0Q7O0FBRXBEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxrQkFBa0I7QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsb0dBQW9HO0FBQzlHO0FBQ0E7QUFDQTtBQUNBLFVBQVUsa0JBQWtCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCOztBQUU5RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLGNBQWM7QUFDZCxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLElBQUk7O0FBRUosZ0JBQWdCLDJCQUEyQjs7QUFFM0MsZ0JBQWdCLHVDQUF1Qzs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsMENBQTBDLFNBQVM7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7O0FBR047QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCOztBQUU5RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0EsZ0JBQWdCLG1DQUFtQzs7QUFFbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLGdCQUFnQjtBQUM3QyxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QixrQkFBa0I7QUFDL0MsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsa0JBQWtCO0FBQy9DO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFtQixhQUFhLDBCQUEwQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7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O0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTixJQUFJO0FBQ0osRUFBRTs7QUFFRixPQUFPO0FBQ1A7QUFDQTs7QUFFQSxpQkFBaUIsbUJBQW1CLGFBQWEsMEJBQTBCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTixJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUYsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUosZ0JBQWdCO0FBQ2hCOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDM0U7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDZDQUE2QztBQUM1RSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBLE1BQU07QUFDTixJQUFJO0FBQ0o7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCOztBQUU5RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsTUFBTTs7QUFFTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFtQixhQUFhLDBCQUEwQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0Esc0RBQXNELGFBQWE7QUFDbkU7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFD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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxrQ0FBa0Msb0JBQW9CO0FBQ3REO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFD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Q0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFVBQVUsZ0NBQWdDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFVBQVUsaUNBQWlDO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFRLG9FQUFvRTtBQUM1RTtBQUNBO0FBQ0EsVUFBVSxxREFBcUQ7QUFDL0Q7QUFDQTtBQUNBLFlB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QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCOztBQUU5RjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxxR0FBcUcsbUJBQW1CLEVBQUUsbUJBQW1CLDhIQUE4SDs7QUFFM1E7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGLGtEQUFrRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXhKO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQyxhQUFhO0FBQy9DOztBQUVBO0FBQ0E7QUFDQSxpQ0FBaUMsYUFBYTtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLCtCQUErQixhQUFhO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLHlDQUF5QyxPQUFPO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUIsTUFBTTs7QUFFTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtB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O0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSixFQUFFOztBQUVGLE9BQU87QUFDUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtB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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFtQixhQUFhLDBCQUEwQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCOztBQUU5RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCOztBQUU5RjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsZUFBZTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLFFBQVE7QUFDUjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxNQUFNO0FBQ047QUFDQSwrQkFBK0Isc0JBQXNCO0FBQ3JELE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSwrQkFBK0IsK0JBQStCLElBQUk7QUFDbEU7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxpQkFBaUIsbUJBQW1CLGFBQWEsMEJBQTBCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRixPQUFPO0FBQ1A7QUFDQTs7QUFFQSxpQkFBaUIsbUJBQW1CLGFBQWEsMEJBQTBCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTixJQUFJO0FBQ0osRUFBRTs7QUFFRixPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQSxjQUFjOztBQUVkO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxpQkFBaUIsbUJBQW1CLGFBQWEsMEJBQTBCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKLEVBQUU7O0FBRUYsT0FBTztB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Q1osVUFBVTtBQUNWO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCOztBQUU5RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZ0JBQWdCLGlDQUFpQzs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSixFQUFFOztBQUVGLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxVQUFVO0FBQ1YsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFCQUFxQjtBQUN4QztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsVUFBVSxzQ0FBc0MsK0RBQStEO0FBQy9HO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxrQkFBa0IsTUFBTTtBQUN4QjtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0MsYUFBYTtBQUM1RCxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsZUFBZTtBQUM1QjtBQUNBO0FBQ0EsYUFBYSxjQUFjO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNB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QUFDUDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCOztBQUU5RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxpQkFBaUIsbUJBQW1CLGFBQWEsMEJBQTBCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFD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QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStEOztBQUUvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixRQUFROztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsVUFBVTtBQUNWLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaURBQWlELFNBQVMsMENBQTBDLEVBQUU7QUFDdEcsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLFVBQVU7QUFDVixRQUFRO0FBQ1I7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLE1BQU07QUFDTixJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsUUFBUTtBQUNSO0FBQ0EsSUFBSTs7QUFFSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7O0FBRUE7QUFD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OztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOzs7QUFHSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtB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QUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ04sSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGLE9BQU87QUFDUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDM0U7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjtBQUNBIiwiZmlsZSI6IjI5LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge30sXG4vKioqKioqLyBcdFx0XHRpZDogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4vKioqKioqLyBcdFx0fTtcblxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cblxuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9kaXN0L1wiO1xuXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxuXG4vKioqLyB9LFxuLyogMSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBfaW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXG5cdHZhciBfaW5kZXgyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXgpO1xuXG5cdHZhciBfaW5kZXgzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5cblx0dmFyIF9pbmRleDQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDMpO1xuXG5cdHZhciBfaW5kZXg1ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG5cblx0dmFyIF9pbmRleDYgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDUpO1xuXG5cdHZhciBfaW5kZXg3ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOCk7XG5cblx0dmFyIF9pbmRleDggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDcpO1xuXG5cdHZhciBfaW5kZXg5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XG5cblx0dmFyIF9pbmRleDEwID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXg5KTtcblxuXHR2YXIgX2luZGV4MTEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcblxuXHR2YXIgX2luZGV4MTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDExKTtcblxuXHR2YXIgX2luZGV4MTMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxKTtcblxuXHR2YXIgX2luZGV4MTQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDEzKTtcblxuXHR2YXIgX2luZGV4MTUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcblxuXHR2YXIgX2luZGV4MTYgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDE1KTtcblxuXHR2YXIgX2luZGV4MTcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyKTtcblxuXHR2YXIgX2luZGV4MTggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDE3KTtcblxuXHR2YXIgX2luZGV4MTkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2KTtcblxuXHR2YXIgX2luZGV4MjAgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDE5KTtcblxuXHR2YXIgX2luZGV4MjEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtcblxuXHR2YXIgX2luZGV4MjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDIxKTtcblxuXHR2YXIgX2luZGV4MjMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY2KTtcblxuXHR2YXIgX2luZGV4MjQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDIzKTtcblxuXHR2YXIgX2luZGV4MjUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKTtcblxuXHR2YXIgX2luZGV4MjYgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDI1KTtcblxuXHR2YXIgX2luZGV4MjcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc1KTtcblxuXHR2YXIgX2luZGV4MjggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDI3KTtcblxuXHR2YXIgX2luZGV4MjkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KTtcblxuXHR2YXIgX2luZGV4MzAgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDI5KTtcblxuXHR2YXIgX2luZGV4MzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgzKTtcblxuXHR2YXIgX2luZGV4MzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDMxKTtcblxuXHR2YXIgX2luZGV4MzMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg3KTtcblxuXHR2YXIgX2luZGV4MzQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDMzKTtcblxuXHR2YXIgX2luZGV4MzUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkxKTtcblxuXHR2YXIgX2luZGV4MzYgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDM1KTtcblxuXHR2YXIgX2luZGV4MzcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcblxuXHR2YXIgX2luZGV4MzggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDM3KTtcblxuXHR2YXIgX2luZGV4MzkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk5KTtcblxuXHR2YXIgX2luZGV4NDAgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDM5KTtcblxuXHR2YXIgX2luZGV4NDEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNCk7XG5cblx0dmFyIF9pbmRleDQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXg0MSk7XG5cblx0dmFyIF9pbmRleDQzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTUpO1xuXG5cdHZhciBfaW5kZXg0NCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4NDMpO1xuXG5cdHZhciBfaW5kZXg0NSA9IF9fd2VicGFja19yZXF1aXJlX18oMTE5KTtcblxuXHR2YXIgX2luZGV4NDYgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDQ1KTtcblxuXHR2YXIgX2luZGV4NDcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMyk7XG5cblx0dmFyIF9pbmRleDQ4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXg0Nyk7XG5cblx0dmFyIF9pbmRleDQ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjcpO1xuXG5cdHZhciBfaW5kZXg1MCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4NDkpO1xuXG5cdHZhciBfaW5kZXg1MSA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ3KTtcblxuXHR2YXIgX2luZGV4NTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDUxKTtcblxuXHR2YXIgX2luZGV4NTMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0OSk7XG5cblx0dmFyIF9pbmRleDU0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXg1Myk7XG5cblx0dmFyIF9pbmRleDU1ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzcpO1xuXG5cdHZhciBfaW5kZXg1NiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4NTUpO1xuXG5cdHZhciBfaW5kZXg1NyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgyKTtcblxuXHR2YXIgX2luZGV4NTggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDU3KTtcblxuXHR2YXIgX2luZGV4NTkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Nyk7XG5cblx0dmFyIF9pbmRleDYwID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXg1OSk7XG5cblx0dmFyIF9pbmRleDYxID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTIpO1xuXG5cdHZhciBfaW5kZXg2MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4NjEpO1xuXG5cdHZhciBfaW5kZXg2MyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk1KTtcblxuXHR2YXIgX2luZGV4NjQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDYzKTtcblxuXHR2YXIgX2luZGV4NjUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwMCk7XG5cblx0dmFyIF9pbmRleDY2ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXg2NSk7XG5cblx0dmFyIF9pbmRleDY3ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDQpO1xuXG5cdHZhciBfaW5kZXg2OCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4NjcpO1xuXG5cdHZhciBfaW5kZXg2OSA9IF9fd2VicGFja19yZXF1aXJlX18oMjA4KTtcblxuXHR2YXIgX2luZGV4NzAgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDY5KTtcblxuXHR2YXIgX2luZGV4NzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMik7XG5cblx0dmFyIF9pbmRleDcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXg3MSk7XG5cblx0dmFyIF9pbmRleDczID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTcpO1xuXG5cdHZhciBfaW5kZXg3NCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4NzMpO1xuXG5cdHZhciBfaW5kZXg3NSA9IF9fd2VicGFja19yZXF1aXJlX18oMjI1KTtcblxuXHR2YXIgX2luZGV4NzYgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDc1KTtcblxuXHR2YXIgX2luZGV4NzcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOSk7XG5cblx0dmFyIF9pbmRleDc4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXg3Nyk7XG5cblx0dmFyIF9pbmRleDc5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzMpO1xuXG5cdHZhciBfaW5kZXg4MCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4NzkpO1xuXG5cdHZhciBfaW5kZXg4MSA9IF9fd2VicGFja19yZXF1aXJlX18oMjQzKTtcblxuXHR2YXIgX2luZGV4ODIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDgxKTtcblxuXHR2YXIgX2luZGV4ODMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nyk7XG5cblx0dmFyIF9pbmRleDg0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXg4Myk7XG5cblx0dmFyIF9pbmRleDg1ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTIpO1xuXG5cdHZhciBfaW5kZXg4NiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4ODUpO1xuXG5cdHZhciBfaW5kZXg4NyA9IF9fd2VicGFja19yZXF1aXJlX18oMjYwKTtcblxuXHR2YXIgX2luZGV4ODggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDg3KTtcblxuXHR2YXIgX2luZGV4ODkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2Nik7XG5cblx0dmFyIF9pbmRleDkwID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXg4OSk7XG5cblx0dmFyIF9pbmRleDkxID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNzApO1xuXG5cdHZhciBfaW5kZXg5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4OTEpO1xuXG5cdHZhciBfaW5kZXg5MyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcyKTtcblxuXHR2YXIgX2luZGV4OTQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDkzKTtcblxuXHR2YXIgX2luZGV4OTUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3NCk7XG5cblx0dmFyIF9pbmRleDk2ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXg5NSk7XG5cblx0dmFyIF9pbmRleDk3ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOTApO1xuXG5cdHZhciBfaW5kZXg5OCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4OTcpO1xuXG5cdHZhciBfaW5kZXg5OSA9IF9fd2VicGFja19yZXF1aXJlX18oMjk0KTtcblxuXHR2YXIgX2luZGV4MTAwID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXg5OSk7XG5cblx0dmFyIF9pbmRleDEwMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjk4KTtcblxuXHR2YXIgX2luZGV4MTAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXgxMDEpO1xuXG5cdHZhciBfaW5kZXgxMDMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwOCk7XG5cblx0dmFyIF9pbmRleDEwNCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4MTAzKTtcblxuXHR2YXIgX2luZGV4MTA1ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMTIpO1xuXG5cdHZhciBfaW5kZXgxMDYgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDEwNSk7XG5cblx0dmFyIF9pbmRleDEwNyA9IF9fd2VicGFja19yZXF1aXJlX18oMzE2KTtcblxuXHR2YXIgX2luZGV4MTA4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXgxMDcpO1xuXG5cdHZhciBfaW5kZXgxMDkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyMCk7XG5cblx0dmFyIF9pbmRleDExMCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4MTA5KTtcblxuXHR2YXIgX2luZGV4MTExID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMjQpO1xuXG5cdHZhciBfaW5kZXgxMTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDExMSk7XG5cblx0dmFyIF9pbmRleDExMyA9IF9fd2VicGFja19yZXF1aXJlX18oMzI4KTtcblxuXHR2YXIgX2luZGV4MTE0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXgxMTMpO1xuXG5cdHZhciBfaW5kZXgxMTUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzMik7XG5cblx0dmFyIF9pbmRleDExNiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4MTE1KTtcblxuXHR2YXIgX2luZGV4MTE3ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMzYpO1xuXG5cdHZhciBfaW5kZXgxMTggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDExNyk7XG5cblx0dmFyIF9pbmRleDExOSA9IF9fd2VicGFja19yZXF1aXJlX18oMzQwKTtcblxuXHR2YXIgX2luZGV4MTIwID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXgxMTkpO1xuXG5cdHZhciBfaW5kZXgxMjEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0NCk7XG5cblx0dmFyIF9pbmRleDEyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4MTIxKTtcblxuXHR2YXIgX2luZGV4MTIzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNDgpO1xuXG5cdHZhciBfaW5kZXgxMjQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleDEyMyk7XG5cblx0dmFyIF9pbmRleDEyNSA9IF9fd2VicGFja19yZXF1aXJlX18oMzU2KTtcblxuXHR2YXIgX2luZGV4MTI2ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5kZXgxMjUpO1xuXG5cdHZhciBfaW5kZXgxMjcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3NCk7XG5cblx0dmFyIF9pbmRleDEyOCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2luZGV4MTI3KTtcblxuXHR2YXIgX2xvY2FsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcblxuXHR2YXIgX2xvY2FsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sb2NhbGUpO1xuXG5cdHZhciBfY29sbGFwc2VUcmFuc2l0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSk7XG5cblx0dmFyIF9jb2xsYXBzZVRyYW5zaXRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29sbGFwc2VUcmFuc2l0aW9uKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIEF1dG9tYXRpYyBnZW5lcmF0ZWQgYnkgJy4vYnVpbGQvYmluL2J1aWxkLWVudHJ5LmpzJyAqL1xuXG5cdHZhciBjb21wb25lbnRzID0gW19pbmRleDIuZGVmYXVsdCwgX2luZGV4NC5kZWZhdWx0LCBfaW5kZXg2LmRlZmF1bHQsIF9pbmRleDguZGVmYXVsdCwgX2luZGV4MTAuZGVmYXVsdCwgX2luZGV4MTIuZGVmYXVsdCwgX2luZGV4MTQuZGVmYXVsdCwgX2luZGV4MTYuZGVmYXVsdCwgX2luZGV4MTguZGVmYXVsdCwgX2luZGV4MjAuZGVmYXVsdCwgX2luZGV4MjIuZGVmYXVsdCwgX2luZGV4MjQuZGVmYXVsdCwgX2luZGV4MjYuZGVmYXVsdCwgX2luZGV4MjguZGVmYXVsdCwgX2luZGV4MzAuZGVmYXVsdCwgX2luZGV4MzIuZGVmYXVsdCwgX2luZGV4MzQuZGVmYXVsdCwgX2luZGV4MzYuZGVmYXVsdCwgX2luZGV4MzguZGVmYXVsdCwgX2luZGV4NDAuZGVmYXVsdCwgX2luZGV4NDIuZGVmYXVsdCwgX2luZGV4NDQuZGVmYXVsdCwgX2luZGV4NDYuZGVmYXVsdCwgX2luZGV4NDguZGVmYXVsdCwgX2luZGV4NTAuZGVmYXVsdCwgX2luZGV4NTIuZGVmYXVsdCwgX2luZGV4NTQuZGVmYXVsdCwgX2luZGV4NTYuZGVmYXVsdCwgX2luZGV4NTguZGVmYXVsdCwgX2luZGV4NjAuZGVmYXVsdCwgX2luZGV4NjIuZGVmYXVsdCwgX2luZGV4NjYuZGVmYXVsdCwgX2luZGV4NjguZGVmYXVsdCwgX2luZGV4NzAuZGVmYXVsdCwgX2luZGV4NzIuZGVmYXVsdCwgX2luZGV4NzQuZGVmYXVsdCwgX2luZGV4NzYuZGVmYXVsdCwgX2luZGV4NzguZGVmYXVsdCwgX2luZGV4ODAuZGVmYXVsdCwgX2luZGV4ODIuZGVmYXVsdCwgX2luZGV4ODYuZGVmYXVsdCwgX2luZGV4OTAuZGVmYXVsdCwgX2luZGV4OTIuZGVmYXVsdCwgX2luZGV4OTQuZGVmYXVsdCwgX2luZGV4OTYuZGVmYXVsdCwgX2luZGV4OTguZGVmYXVsdCwgX2luZGV4MTAwLmRlZmF1bHQsIF9pbmRleDEwNC5kZWZhdWx0LCBfaW5kZXgxMDYuZGVmYXVsdCwgX2luZGV4MTA4LmRlZmF1bHQsIF9pbmRleDExMC5kZWZhdWx0LCBfaW5kZXgxMTIuZGVmYXVsdCwgX2luZGV4MTE0LmRlZmF1bHQsIF9pbmRleDExNi5kZWZhdWx0LCBfaW5kZXgxMTguZGVmYXVsdCwgX2luZGV4MTIwLmRlZmF1bHQsIF9pbmRleDEyMi5kZWZhdWx0LCBfaW5kZXgxMjQuZGVmYXVsdCwgX2luZGV4MTI2LmRlZmF1bHQsIF9pbmRleDEyOC5kZWZhdWx0LCBfY29sbGFwc2VUcmFuc2l0aW9uMi5kZWZhdWx0XTtcblxuXHR2YXIgaW5zdGFsbCA9IGZ1bmN0aW9uIGluc3RhbGwoVnVlKSB7XG5cdCAgdmFyIG9wdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG5cdCAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5cdCAgaWYgKGluc3RhbGwuaW5zdGFsbGVkKSByZXR1cm47XG5cdCAgX2xvY2FsZTIuZGVmYXVsdC51c2Uob3B0cy5sb2NhbGUpO1xuXHQgIF9sb2NhbGUyLmRlZmF1bHQuaTE4bihvcHRzLmkxOG4pO1xuXG5cdCAgY29tcG9uZW50cy5tYXAoZnVuY3Rpb24gKGNvbXBvbmVudCkge1xuXHQgICAgVnVlLmNvbXBvbmVudChjb21wb25lbnQubmFtZSwgY29tcG9uZW50KTtcblx0ICB9KTtcblxuXHQgIFZ1ZS51c2UoX2luZGV4ODguZGVmYXVsdC5kaXJlY3RpdmUpO1xuXG5cdCAgVnVlLnByb3RvdHlwZS4kbG9hZGluZyA9IF9pbmRleDg4LmRlZmF1bHQuc2VydmljZTtcblx0ICBWdWUucHJvdG90eXBlLiRtc2dib3ggPSBfaW5kZXg2NC5kZWZhdWx0O1xuXHQgIFZ1ZS5wcm90b3R5cGUuJGFsZXJ0ID0gX2luZGV4NjQuZGVmYXVsdC5hbGVydDtcblx0ICBWdWUucHJvdG90eXBlLiRjb25maXJtID0gX2luZGV4NjQuZGVmYXVsdC5jb25maXJtO1xuXHQgIFZ1ZS5wcm90b3R5cGUuJHByb21wdCA9IF9pbmRleDY0LmRlZmF1bHQucHJvbXB0O1xuXHQgIFZ1ZS5wcm90b3R5cGUuJG5vdGlmeSA9IF9pbmRleDg0LmRlZmF1bHQ7XG5cdCAgVnVlLnByb3RvdHlwZS4kbWVzc2FnZSA9IF9pbmRleDEwMi5kZWZhdWx0O1xuXHR9O1xuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LlZ1ZSkge1xuXHQgIGluc3RhbGwod2luZG93LlZ1ZSk7XG5cdH07XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7XG5cdCAgdmVyc2lvbjogJzEuNC42Jyxcblx0ICBsb2NhbGU6IF9sb2NhbGUyLmRlZmF1bHQudXNlLFxuXHQgIGkxOG46IF9sb2NhbGUyLmRlZmF1bHQuaTE4bixcblx0ICBpbnN0YWxsOiBpbnN0YWxsLFxuXHQgIENvbGxhcHNlVHJhbnNpdGlvbjogX2NvbGxhcHNlVHJhbnNpdGlvbjIuZGVmYXVsdCxcblx0ICBMb2FkaW5nOiBfaW5kZXg4OC5kZWZhdWx0LFxuXHQgIFBhZ2luYXRpb246IF9pbmRleDIuZGVmYXVsdCxcblx0ICBEaWFsb2c6IF9pbmRleDQuZGVmYXVsdCxcblx0ICBBdXRvY29tcGxldGU6IF9pbmRleDYuZGVmYXVsdCxcblx0ICBEcm9wZG93bjogX2luZGV4OC5kZWZhdWx0LFxuXHQgIERyb3Bkb3duTWVudTogX2luZGV4MTAuZGVmYXVsdCxcblx0ICBEcm9wZG93bkl0ZW06IF9pbmRleDEyLmRlZmF1bHQsXG5cdCAgTWVudTogX2luZGV4MTQuZGVmYXVsdCxcblx0ICBTdWJtZW51OiBfaW5kZXgxNi5kZWZhdWx0LFxuXHQgIE1lbnVJdGVtOiBfaW5kZXgxOC5kZWZhdWx0LFxuXHQgIE1lbnVJdGVtR3JvdXA6IF9pbmRleDIwLmRlZmF1bHQsXG5cdCAgSW5wdXQ6IF9pbmRleDIyLmRlZmF1bHQsXG5cdCAgSW5wdXROdW1iZXI6IF9pbmRleDI0LmRlZmF1bHQsXG5cdCAgUmFkaW86IF9pbmRleDI2LmRlZmF1bHQsXG5cdCAgUmFkaW9Hcm91cDogX2luZGV4MjguZGVmYXVsdCxcblx0ICBSYWRpb0J1dHRvbjogX2luZGV4MzAuZGVmYXVsdCxcblx0ICBDaGVja2JveDogX2luZGV4MzIuZGVmYXVsdCxcblx0ICBDaGVja2JveEJ1dHRvbjogX2luZGV4MzQuZGVmYXVsdCxcblx0ICBDaGVja2JveEdyb3VwOiBfaW5kZXgzNi5kZWZhdWx0LFxuXHQgIFN3aXRjaDogX2luZGV4MzguZGVmYXVsdCxcblx0ICBTZWxlY3Q6IF9pbmRleDQwLmRlZmF1bHQsXG5cdCAgT3B0aW9uOiBfaW5kZXg0Mi5kZWZhdWx0LFxuXHQgIE9wdGlvbkdyb3VwOiBfaW5kZXg0NC5kZWZhdWx0LFxuXHQgIEJ1dHRvbjogX2luZGV4NDYuZGVmYXVsdCxcblx0ICBCdXR0b25Hcm91cDogX2luZGV4NDguZGVmYXVsdCxcblx0ICBUYWJsZTogX2luZGV4NTAuZGVmYXVsdCxcblx0ICBUYWJsZUNvbHVtbjogX2luZGV4NTIuZGVmYXVsdCxcblx0ICBEYXRlUGlja2VyOiBfaW5kZXg1NC5kZWZhdWx0LFxuXHQgIFRpbWVTZWxlY3Q6IF9pbmRleDU2LmRlZmF1bHQsXG5cdCAgVGltZVBpY2tlcjogX2luZGV4NTguZGVmYXVsdCxcblx0ICBQb3BvdmVyOiBfaW5kZXg2MC5kZWZhdWx0LFxuXHQgIFRvb2x0aXA6IF9pbmRleDYyLmRlZmF1bHQsXG5cdCAgTWVzc2FnZUJveDogX2luZGV4NjQuZGVmYXVsdCxcblx0ICBCcmVhZGNydW1iOiBfaW5kZXg2Ni5kZWZhdWx0LFxuXHQgIEJyZWFkY3J1bWJJdGVtOiBfaW5kZXg2OC5kZWZhdWx0LFxuXHQgIEZvcm06IF9pbmRleDcwLmRlZmF1bHQsXG5cdCAgRm9ybUl0ZW06IF9pbmRleDcyLmRlZmF1bHQsXG5cdCAgVGFiczogX2luZGV4NzQuZGVmYXVsdCxcblx0ICBUYWJQYW5lOiBfaW5kZXg3Ni5kZWZhdWx0LFxuXHQgIFRhZzogX2luZGV4NzguZGVmYXVsdCxcblx0ICBUcmVlOiBfaW5kZXg4MC5kZWZhdWx0LFxuXHQgIEFsZXJ0OiBfaW5kZXg4Mi5kZWZhdWx0LFxuXHQgIE5vdGlmaWNhdGlvbjogX2luZGV4ODQuZGVmYXVsdCxcblx0ICBTbGlkZXI6IF9pbmRleDg2LmRlZmF1bHQsXG5cdCAgSWNvbjogX2luZGV4OTAuZGVmYXVsdCxcblx0ICBSb3c6IF9pbmRleDkyLmRlZmF1bHQsXG5cdCAgQ29sOiBfaW5kZXg5NC5kZWZhdWx0LFxuXHQgIFVwbG9hZDogX2luZGV4OTYuZGVmYXVsdCxcblx0ICBQcm9ncmVzczogX2luZGV4OTguZGVmYXVsdCxcblx0ICBTcGlubmVyOiBfaW5kZXgxMDAuZGVmYXVsdCxcblx0ICBNZXNzYWdlOiBfaW5kZXgxMDIuZGVmYXVsdCxcblx0ICBCYWRnZTogX2luZGV4MTA0LmRlZmF1bHQsXG5cdCAgQ2FyZDogX2luZGV4MTA2LmRlZmF1bHQsXG5cdCAgUmF0ZTogX2luZGV4MTA4LmRlZmF1bHQsXG5cdCAgU3RlcHM6IF9pbmRleDExMC5kZWZhdWx0LFxuXHQgIFN0ZXA6IF9pbmRleDExMi5kZWZhdWx0LFxuXHQgIENhcm91c2VsOiBfaW5kZXgxMTQuZGVmYXVsdCxcblx0ICBTY3JvbGxiYXI6IF9pbmRleDExNi5kZWZhdWx0LFxuXHQgIENhcm91c2VsSXRlbTogX2luZGV4MTE4LmRlZmF1bHQsXG5cdCAgQ29sbGFwc2U6IF9pbmRleDEyMC5kZWZhdWx0LFxuXHQgIENvbGxhcHNlSXRlbTogX2luZGV4MTIyLmRlZmF1bHQsXG5cdCAgQ2FzY2FkZXI6IF9pbmRleDEyNC5kZWZhdWx0LFxuXHQgIENvbG9yUGlja2VyOiBfaW5kZXgxMjYuZGVmYXVsdCxcblx0ICBUcmFuc2ZlcjogX2luZGV4MTI4LmRlZmF1bHRcblx0fTtcblxuLyoqKi8gfSxcbi8qIDIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfcGFnaW5hdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cblx0dmFyIF9wYWdpbmF0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BhZ2luYXRpb24pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X3BhZ2luYXRpb24yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9wYWdpbmF0aW9uMi5kZWZhdWx0Lm5hbWUsIF9wYWdpbmF0aW9uMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfcGFnaW5hdGlvbjIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfcGFnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXG5cdHZhciBfcGFnZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGFnZXIpO1xuXG5cdHZhciBfc2VsZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcblxuXHR2YXIgX3NlbGVjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zZWxlY3QpO1xuXG5cdHZhciBfb3B0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcblxuXHR2YXIgX29wdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9vcHRpb24pO1xuXG5cdHZhciBfbG9jYWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5cblx0dmFyIF9sb2NhbGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9jYWxlKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxQYWdpbmF0aW9uJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBwYWdlU2l6ZToge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDEwXG5cdCAgICB9LFxuXG5cdCAgICBzbWFsbDogQm9vbGVhbixcblxuXHQgICAgdG90YWw6IE51bWJlcixcblxuXHQgICAgcGFnZUNvdW50OiBOdW1iZXIsXG5cblx0ICAgIGN1cnJlbnRQYWdlOiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogMVxuXHQgICAgfSxcblxuXHQgICAgbGF5b3V0OiB7XG5cdCAgICAgIGRlZmF1bHQ6ICdwcmV2LCBwYWdlciwgbmV4dCwganVtcGVyLCAtPiwgdG90YWwnXG5cdCAgICB9LFxuXG5cdCAgICBwYWdlU2l6ZXM6IHtcblx0ICAgICAgdHlwZTogQXJyYXksXG5cdCAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuXHQgICAgICAgIHJldHVybiBbMTAsIDIwLCAzMCwgNDAsIDUwLCAxMDBdO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBpbnRlcm5hbEN1cnJlbnRQYWdlOiAxLFxuXHQgICAgICBpbnRlcm5hbFBhZ2VTaXplOiAwXG5cdCAgICB9O1xuXHQgIH0sXG5cdCAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuXHQgICAgdmFyIHRlbXBsYXRlID0gaChcblx0ICAgICAgJ2RpdicsXG5cdCAgICAgIHsgJ2NsYXNzJzogJ2VsLXBhZ2luYXRpb24nIH0sXG5cdCAgICAgIFtdXG5cdCAgICApO1xuXHQgICAgdmFyIGxheW91dCA9IHRoaXMubGF5b3V0IHx8ICcnO1xuXHQgICAgaWYgKCFsYXlvdXQpIHJldHVybjtcblx0ICAgIHZhciBURU1QTEFURV9NQVAgPSB7XG5cdCAgICAgIHByZXY6IGgoXG5cdCAgICAgICAgJ3ByZXYnLFxuXHQgICAgICAgIG51bGwsXG5cdCAgICAgICAgW11cblx0ICAgICAgKSxcblx0ICAgICAganVtcGVyOiBoKFxuXHQgICAgICAgICdqdW1wZXInLFxuXHQgICAgICAgIG51bGwsXG5cdCAgICAgICAgW11cblx0ICAgICAgKSxcblx0ICAgICAgcGFnZXI6IGgoXG5cdCAgICAgICAgJ3BhZ2VyJyxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICBhdHRyczogeyBjdXJyZW50UGFnZTogdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlLCBwYWdlQ291bnQ6IHRoaXMuaW50ZXJuYWxQYWdlQ291bnQgfSxcblx0ICAgICAgICAgIG9uOiB7XG5cdCAgICAgICAgICAgICdjaGFuZ2UnOiB0aGlzLmhhbmRsZUN1cnJlbnRDaGFuZ2Vcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIFtdXG5cdCAgICAgICksXG5cdCAgICAgIG5leHQ6IGgoXG5cdCAgICAgICAgJ25leHQnLFxuXHQgICAgICAgIG51bGwsXG5cdCAgICAgICAgW11cblx0ICAgICAgKSxcblx0ICAgICAgc2l6ZXM6IGgoXG5cdCAgICAgICAgJ3NpemVzJyxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICBhdHRyczogeyBwYWdlU2l6ZXM6IHRoaXMucGFnZVNpemVzIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIFtdXG5cdCAgICAgICksXG5cdCAgICAgIHNsb3Q6IGgoXG5cdCAgICAgICAgJ215LXNsb3QnLFxuXHQgICAgICAgIG51bGwsXG5cdCAgICAgICAgW11cblx0ICAgICAgKSxcblx0ICAgICAgdG90YWw6IGgoXG5cdCAgICAgICAgJ3RvdGFsJyxcblx0ICAgICAgICBudWxsLFxuXHQgICAgICAgIFtdXG5cdCAgICAgIClcblx0ICAgIH07XG5cdCAgICB2YXIgY29tcG9uZW50cyA9IGxheW91dC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHQgICAgICByZXR1cm4gaXRlbS50cmltKCk7XG5cdCAgICB9KTtcblx0ICAgIHZhciByaWdodFdyYXBwZXIgPSBoKFxuXHQgICAgICAnZGl2Jyxcblx0ICAgICAgeyAnY2xhc3MnOiAnZWwtcGFnaW5hdGlvbl9fcmlnaHR3cmFwcGVyJyB9LFxuXHQgICAgICBbXVxuXHQgICAgKTtcblx0ICAgIHZhciBoYXZlUmlnaHRXcmFwcGVyID0gZmFsc2U7XG5cblx0ICAgIGlmICh0aGlzLnNtYWxsKSB7XG5cdCAgICAgIHRlbXBsYXRlLmRhdGEuY2xhc3MgKz0gJyBlbC1wYWdpbmF0aW9uLS1zbWFsbCc7XG5cdCAgICB9XG5cblx0ICAgIGNvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbiAoY29tcG8pIHtcblx0ICAgICAgaWYgKGNvbXBvID09PSAnLT4nKSB7XG5cdCAgICAgICAgaGF2ZVJpZ2h0V3JhcHBlciA9IHRydWU7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKCFoYXZlUmlnaHRXcmFwcGVyKSB7XG5cdCAgICAgICAgdGVtcGxhdGUuY2hpbGRyZW4ucHVzaChURU1QTEFURV9NQVBbY29tcG9dKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByaWdodFdyYXBwZXIuY2hpbGRyZW4ucHVzaChURU1QTEFURV9NQVBbY29tcG9dKTtcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIGlmIChoYXZlUmlnaHRXcmFwcGVyKSB7XG5cdCAgICAgIHRlbXBsYXRlLmNoaWxkcmVuLnVuc2hpZnQocmlnaHRXcmFwcGVyKTtcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIHRlbXBsYXRlO1xuXHQgIH0sXG5cblxuXHQgIGNvbXBvbmVudHM6IHtcblx0ICAgIE15U2xvdDoge1xuXHQgICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudC4kc2xvdHMuZGVmYXVsdCA/IHRoaXMuJHBhcmVudC4kc2xvdHMuZGVmYXVsdFswXSA6ICcnO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgUHJldjoge1xuXHQgICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG5cdCAgICAgICAgcmV0dXJuIGgoXG5cdCAgICAgICAgICAnYnV0dG9uJyxcblx0ICAgICAgICAgIHtcblx0ICAgICAgICAgICAgYXR0cnM6IHtcblx0ICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJ1xuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnY2xhc3MnOiBbJ2J0bi1wcmV2JywgeyBkaXNhYmxlZDogdGhpcy4kcGFyZW50LmludGVybmFsQ3VycmVudFBhZ2UgPD0gMSB9XSxcblx0ICAgICAgICAgICAgb246IHtcblx0ICAgICAgICAgICAgICAnY2xpY2snOiB0aGlzLiRwYXJlbnQucHJldlxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9LFxuXHQgICAgICAgICAgW2goXG5cdCAgICAgICAgICAgICdpJyxcblx0ICAgICAgICAgICAgeyAnY2xhc3MnOiAnZWwtaWNvbiBlbC1pY29uLWFycm93LWxlZnQnIH0sXG5cdCAgICAgICAgICAgIFtdXG5cdCAgICAgICAgICApXVxuXHQgICAgICAgICk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cblx0ICAgIE5leHQ6IHtcblx0ICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuXHQgICAgICAgIHJldHVybiBoKFxuXHQgICAgICAgICAgJ2J1dHRvbicsXG5cdCAgICAgICAgICB7XG5cdCAgICAgICAgICAgIGF0dHJzOiB7XG5cdCAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbidcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2NsYXNzJzogWydidG4tbmV4dCcsIHsgZGlzYWJsZWQ6IHRoaXMuJHBhcmVudC5pbnRlcm5hbEN1cnJlbnRQYWdlID09PSB0aGlzLiRwYXJlbnQuaW50ZXJuYWxQYWdlQ291bnQgfHwgdGhpcy4kcGFyZW50LmludGVybmFsUGFnZUNvdW50ID09PSAwIH1dLFxuXHQgICAgICAgICAgICBvbjoge1xuXHQgICAgICAgICAgICAgICdjbGljayc6IHRoaXMuJHBhcmVudC5uZXh0XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0sXG5cdCAgICAgICAgICBbaChcblx0ICAgICAgICAgICAgJ2knLFxuXHQgICAgICAgICAgICB7ICdjbGFzcyc6ICdlbC1pY29uIGVsLWljb24tYXJyb3ctcmlnaHQnIH0sXG5cdCAgICAgICAgICAgIFtdXG5cdCAgICAgICAgICApXVxuXHQgICAgICAgICk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cblx0ICAgIFNpemVzOiB7XG5cdCAgICAgIG1peGluczogW19sb2NhbGUyLmRlZmF1bHRdLFxuXG5cdCAgICAgIHByb3BzOiB7XG5cdCAgICAgICAgcGFnZVNpemVzOiBBcnJheVxuXHQgICAgICB9LFxuXG5cdCAgICAgIHdhdGNoOiB7XG5cdCAgICAgICAgcGFnZVNpemVzOiB7XG5cdCAgICAgICAgICBpbW1lZGlhdGU6IHRydWUsXG5cdCAgICAgICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbHVlKSB7XG5cdCAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHQgICAgICAgICAgICAgIHRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VTaXplID0gdmFsdWUuaW5kZXhPZih0aGlzLiRwYXJlbnQucGFnZVNpemUpID4gLTEgPyB0aGlzLiRwYXJlbnQucGFnZVNpemUgOiB0aGlzLnBhZ2VTaXplc1swXTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfSxcblxuXHQgICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgICAgIHJldHVybiBoKFxuXHQgICAgICAgICAgJ3NwYW4nLFxuXHQgICAgICAgICAgeyAnY2xhc3MnOiAnZWwtcGFnaW5hdGlvbl9fc2l6ZXMnIH0sXG5cdCAgICAgICAgICBbaChcblx0ICAgICAgICAgICAgJ2VsLXNlbGVjdCcsXG5cdCAgICAgICAgICAgIHtcblx0ICAgICAgICAgICAgICBhdHRyczoge1xuXHQgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VTaXplXG5cdCAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICBvbjoge1xuXHQgICAgICAgICAgICAgICAgJ2lucHV0JzogdGhpcy5oYW5kbGVDaGFuZ2Vcblx0ICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIFt0aGlzLnBhZ2VTaXplcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gaChcblx0ICAgICAgICAgICAgICAgICdlbC1vcHRpb24nLFxuXHQgICAgICAgICAgICAgICAge1xuXHQgICAgICAgICAgICAgICAgICBhdHRyczoge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuXHQgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtICsgJyAnICsgX3RoaXMudCgnZWwucGFnaW5hdGlvbi5wYWdlc2l6ZScpIH1cblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICBbXVxuXHQgICAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgIH0pXVxuXHQgICAgICAgICAgKV1cblx0ICAgICAgICApO1xuXHQgICAgICB9LFxuXG5cblx0ICAgICAgY29tcG9uZW50czoge1xuXHQgICAgICAgIEVsU2VsZWN0OiBfc2VsZWN0Mi5kZWZhdWx0LFxuXHQgICAgICAgIEVsT3B0aW9uOiBfb3B0aW9uMi5kZWZhdWx0XG5cdCAgICAgIH0sXG5cblx0ICAgICAgbWV0aG9kczoge1xuXHQgICAgICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKHZhbCkge1xuXHQgICAgICAgICAgaWYgKHZhbCAhPT0gdGhpcy4kcGFyZW50LmludGVybmFsUGFnZVNpemUpIHtcblx0ICAgICAgICAgICAgdGhpcy4kcGFyZW50LmludGVybmFsUGFnZVNpemUgPSB2YWwgPSBwYXJzZUludCh2YWwsIDEwKTtcblx0ICAgICAgICAgICAgdGhpcy4kcGFyZW50LiRlbWl0KCdzaXplLWNoYW5nZScsIHZhbCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXG5cdCAgICBKdW1wZXI6IHtcblx0ICAgICAgbWl4aW5zOiBbX2xvY2FsZTIuZGVmYXVsdF0sXG5cblx0ICAgICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgb2xkVmFsdWU6IG51bGxcblx0ICAgICAgICB9O1xuXHQgICAgICB9LFxuXG5cblx0ICAgICAgbWV0aG9kczoge1xuXHQgICAgICAgIGhhbmRsZUZvY3VzOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhldmVudCkge1xuXHQgICAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGhhbmRsZUJsdXI6IGZ1bmN0aW9uIGhhbmRsZUJsdXIoX3JlZikge1xuXHQgICAgICAgICAgdmFyIHRhcmdldCA9IF9yZWYudGFyZ2V0O1xuXG5cdCAgICAgICAgICB0aGlzLnJlYXNzaWduTWF4VmFsdWUodGFyZ2V0KTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIGhhbmRsZUtleVVwOiBmdW5jdGlvbiBoYW5kbGVLZXlVcChldmVudCkge1xuXHQgICAgICAgICAgdmFyIGtleSA9IGV2ZW50LmtleSB8fCAnJztcblx0ICAgICAgICAgIHZhciBrZXlDb2RlID0gZXZlbnQua2V5Q29kZSB8fCAnJztcblx0ICAgICAgICAgIGlmIChrZXkgJiYga2V5ID09PSAnRW50ZXInIHx8IGtleUNvZGUgJiYga2V5Q29kZSA9PT0gMTMpIHtcblx0ICAgICAgICAgICAgdGhpcy5yZWFzc2lnbk1heFZhbHVlKGV2ZW50LnRhcmdldCk7XG5cdCAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHsgdGFyZ2V0OiBldmVudC50YXJnZXQgfSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShfcmVmMikge1xuXHQgICAgICAgICAgdmFyIHRhcmdldCA9IF9yZWYyLnRhcmdldDtcblxuXHQgICAgICAgICAgdGhpcy4kcGFyZW50LmludGVybmFsQ3VycmVudFBhZ2UgPSB0aGlzLiRwYXJlbnQuZ2V0VmFsaWRDdXJyZW50UGFnZSh0YXJnZXQudmFsdWUpO1xuXHQgICAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IG51bGw7XG5cdCAgICAgICAgfSxcblx0ICAgICAgICByZWFzc2lnbk1heFZhbHVlOiBmdW5jdGlvbiByZWFzc2lnbk1heFZhbHVlKHRhcmdldCkge1xuXHQgICAgICAgICAgaWYgKCt0YXJnZXQudmFsdWUgPiB0aGlzLiRwYXJlbnQuaW50ZXJuYWxQYWdlQ291bnQpIHtcblx0ICAgICAgICAgICAgdGFyZ2V0LnZhbHVlID0gdGhpcy4kcGFyZW50LmludGVybmFsUGFnZUNvdW50O1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfSxcblxuXHQgICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG5cdCAgICAgICAgcmV0dXJuIGgoXG5cdCAgICAgICAgICAnc3BhbicsXG5cdCAgICAgICAgICB7ICdjbGFzcyc6ICdlbC1wYWdpbmF0aW9uX19qdW1wJyB9LFxuXHQgICAgICAgICAgW3RoaXMudCgnZWwucGFnaW5hdGlvbi5nb3RvJyksIGgoXG5cdCAgICAgICAgICAgICdpbnB1dCcsXG5cdCAgICAgICAgICAgIHtcblx0ICAgICAgICAgICAgICAnY2xhc3MnOiAnZWwtcGFnaW5hdGlvbl9fZWRpdG9yJyxcblx0ICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAnbnVtYmVyJyxcblx0ICAgICAgICAgICAgICAgIG1pbjogMSxcblx0ICAgICAgICAgICAgICAgIG1heDogdGhpcy4kcGFyZW50LmludGVybmFsUGFnZUNvdW50LFxuXHQgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuJHBhcmVudC5pbnRlcm5hbEN1cnJlbnRQYWdlLFxuXG5cdCAgICAgICAgICAgICAgICBudW1iZXI6IHRydWUgfSxcblx0ICAgICAgICAgICAgICBkb21Qcm9wczoge1xuXHQgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdGhpcy4kcGFyZW50LmludGVybmFsQ3VycmVudFBhZ2Vcblx0ICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgIG9uOiB7XG5cdCAgICAgICAgICAgICAgICAnY2hhbmdlJzogdGhpcy5oYW5kbGVDaGFuZ2UsXG5cdCAgICAgICAgICAgICAgICAnZm9jdXMnOiB0aGlzLmhhbmRsZUZvY3VzLFxuXHQgICAgICAgICAgICAgICAgJ2JsdXInOiB0aGlzLmhhbmRsZUJsdXIsXG5cdCAgICAgICAgICAgICAgICAna2V5dXAnOiB0aGlzLmhhbmRsZUtleVVwXG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICBbXVxuXHQgICAgICAgICAgKSwgdGhpcy50KCdlbC5wYWdpbmF0aW9uLnBhZ2VDbGFzc2lmaWVyJyldXG5cdCAgICAgICAgKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblxuXHQgICAgVG90YWw6IHtcblx0ICAgICAgbWl4aW5zOiBbX2xvY2FsZTIuZGVmYXVsdF0sXG5cblx0ICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy4kcGFyZW50LnRvdGFsID09PSAnbnVtYmVyJyA/IGgoXG5cdCAgICAgICAgICAnc3BhbicsXG5cdCAgICAgICAgICB7ICdjbGFzcyc6ICdlbC1wYWdpbmF0aW9uX190b3RhbCcgfSxcblx0ICAgICAgICAgIFt0aGlzLnQoJ2VsLnBhZ2luYXRpb24udG90YWwnLCB7IHRvdGFsOiB0aGlzLiRwYXJlbnQudG90YWwgfSldXG5cdCAgICAgICAgKSA6ICcnO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXG5cdCAgICBQYWdlcjogX3BhZ2VyMi5kZWZhdWx0XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUN1cnJlbnRDaGFuZ2UodmFsKSB7XG5cdCAgICAgIHRoaXMuaW50ZXJuYWxDdXJyZW50UGFnZSA9IHRoaXMuZ2V0VmFsaWRDdXJyZW50UGFnZSh2YWwpO1xuXHQgICAgfSxcblx0ICAgIHByZXY6IGZ1bmN0aW9uIHByZXYoKSB7XG5cdCAgICAgIHZhciBuZXdWYWwgPSB0aGlzLmludGVybmFsQ3VycmVudFBhZ2UgLSAxO1xuXHQgICAgICB0aGlzLmludGVybmFsQ3VycmVudFBhZ2UgPSB0aGlzLmdldFZhbGlkQ3VycmVudFBhZ2UobmV3VmFsKTtcblx0ICAgIH0sXG5cdCAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuXHQgICAgICB2YXIgbmV3VmFsID0gdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlICsgMTtcblx0ICAgICAgdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlID0gdGhpcy5nZXRWYWxpZEN1cnJlbnRQYWdlKG5ld1ZhbCk7XG5cdCAgICB9LFxuXHQgICAgZ2V0VmFsaWRDdXJyZW50UGFnZTogZnVuY3Rpb24gZ2V0VmFsaWRDdXJyZW50UGFnZSh2YWx1ZSkge1xuXHQgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG5cblx0ICAgICAgdmFyIGhhdmVQYWdlQ291bnQgPSB0eXBlb2YgdGhpcy5pbnRlcm5hbFBhZ2VDb3VudCA9PT0gJ251bWJlcic7XG5cblx0ICAgICAgdmFyIHJlc2V0VmFsdWUgPSB2b2lkIDA7XG5cdCAgICAgIGlmICghaGF2ZVBhZ2VDb3VudCkge1xuXHQgICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPCAxKSByZXNldFZhbHVlID0gMTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBpZiAodmFsdWUgPCAxKSB7XG5cdCAgICAgICAgICByZXNldFZhbHVlID0gMTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID4gdGhpcy5pbnRlcm5hbFBhZ2VDb3VudCkge1xuXHQgICAgICAgICAgcmVzZXRWYWx1ZSA9IHRoaXMuaW50ZXJuYWxQYWdlQ291bnQ7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKHJlc2V0VmFsdWUgPT09IHVuZGVmaW5lZCAmJiBpc05hTih2YWx1ZSkpIHtcblx0ICAgICAgICByZXNldFZhbHVlID0gMTtcblx0ICAgICAgfSBlbHNlIGlmIChyZXNldFZhbHVlID09PSAwKSB7XG5cdCAgICAgICAgcmVzZXRWYWx1ZSA9IDE7XG5cdCAgICAgIH1cblxuXHQgICAgICByZXR1cm4gcmVzZXRWYWx1ZSA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiByZXNldFZhbHVlO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgaW50ZXJuYWxQYWdlQ291bnQ6IGZ1bmN0aW9uIGludGVybmFsUGFnZUNvdW50KCkge1xuXHQgICAgICBpZiAodHlwZW9mIHRoaXMudG90YWwgPT09ICdudW1iZXInKSB7XG5cdCAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gdGhpcy5pbnRlcm5hbFBhZ2VTaXplKTtcblx0ICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5wYWdlQ291bnQgPT09ICdudW1iZXInKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMucGFnZUNvdW50O1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICB3YXRjaDoge1xuXHQgICAgY3VycmVudFBhZ2U6IHtcblx0ICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuXHQgICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbCkge1xuXHQgICAgICAgIHRoaXMuaW50ZXJuYWxDdXJyZW50UGFnZSA9IHZhbDtcblx0ICAgICAgfVxuXHQgICAgfSxcblxuXHQgICAgcGFnZVNpemU6IHtcblx0ICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuXHQgICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbCkge1xuXHQgICAgICAgIHRoaXMuaW50ZXJuYWxQYWdlU2l6ZSA9IHZhbDtcblx0ICAgICAgfVxuXHQgICAgfSxcblxuXHQgICAgaW50ZXJuYWxDdXJyZW50UGFnZTogZnVuY3Rpb24gaW50ZXJuYWxDdXJyZW50UGFnZShuZXdWYWwsIG9sZFZhbCkge1xuXHQgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuXHQgICAgICBuZXdWYWwgPSBwYXJzZUludChuZXdWYWwsIDEwKTtcblxuXHQgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cblx0ICAgICAgaWYgKGlzTmFOKG5ld1ZhbCkpIHtcblx0ICAgICAgICBuZXdWYWwgPSBvbGRWYWwgfHwgMTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBuZXdWYWwgPSB0aGlzLmdldFZhbGlkQ3VycmVudFBhZ2UobmV3VmFsKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGlmIChuZXdWYWwgIT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIF90aGlzMi5pbnRlcm5hbEN1cnJlbnRQYWdlID0gbmV3VmFsO1xuXHQgICAgICAgICAgaWYgKG9sZFZhbCAhPT0gbmV3VmFsKSB7XG5cdCAgICAgICAgICAgIF90aGlzMi4kZW1pdCgndXBkYXRlOmN1cnJlbnRQYWdlJywgbmV3VmFsKTtcblx0ICAgICAgICAgICAgX3RoaXMyLiRlbWl0KCdjdXJyZW50LWNoYW5nZScsIF90aGlzMi5pbnRlcm5hbEN1cnJlbnRQYWdlKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6Y3VycmVudFBhZ2UnLCBuZXdWYWwpO1xuXHQgICAgICAgIHRoaXMuJGVtaXQoJ2N1cnJlbnQtY2hhbmdlJywgdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGludGVybmFsUGFnZUNvdW50OiBmdW5jdGlvbiBpbnRlcm5hbFBhZ2VDb3VudChuZXdWYWwpIHtcblx0ICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5cdCAgICAgIHZhciBvbGRQYWdlID0gdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlO1xuXHQgICAgICBpZiAobmV3VmFsID4gMCAmJiBvbGRQYWdlID09PSAwKSB7XG5cdCAgICAgICAgdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlID0gMTtcblx0ICAgICAgfSBlbHNlIGlmIChvbGRQYWdlID4gbmV3VmFsKSB7XG5cdCAgICAgICAgdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlID0gbmV3VmFsID09PSAwID8gMSA6IG5ld1ZhbDtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oNiksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiA1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuXHQvLyB0aGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuXHQvLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZVxuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcblx0ICByYXdTY3JpcHRFeHBvcnRzLFxuXHQgIGNvbXBpbGVkVGVtcGxhdGUsXG5cdCAgaW5qZWN0U3R5bGVzLFxuXHQgIHNjb3BlSWQsXG5cdCAgbW9kdWxlSWRlbnRpZmllciAvKiBzZXJ2ZXIgb25seSAqL1xuXHQpIHtcblx0ICB2YXIgZXNNb2R1bGVcblx0ICB2YXIgc2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzIHx8IHt9XG5cblx0ICAvLyBFUzYgbW9kdWxlcyBpbnRlcm9wXG5cdCAgdmFyIHR5cGUgPSB0eXBlb2YgcmF3U2NyaXB0RXhwb3J0cy5kZWZhdWx0XG5cdCAgaWYgKHR5cGUgPT09ICdvYmplY3QnIHx8IHR5cGUgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgIGVzTW9kdWxlID0gcmF3U2NyaXB0RXhwb3J0c1xuXHQgICAgc2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMuZGVmYXVsdFxuXHQgIH1cblxuXHQgIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3Bcblx0ICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG5cdCAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuXHQgICAgOiBzY3JpcHRFeHBvcnRzXG5cblx0ICAvLyByZW5kZXIgZnVuY3Rpb25zXG5cdCAgaWYgKGNvbXBpbGVkVGVtcGxhdGUpIHtcblx0ICAgIG9wdGlvbnMucmVuZGVyID0gY29tcGlsZWRUZW1wbGF0ZS5yZW5kZXJcblx0ICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gY29tcGlsZWRUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnNcblx0ICB9XG5cblx0ICAvLyBzY29wZWRJZFxuXHQgIGlmIChzY29wZUlkKSB7XG5cdCAgICBvcHRpb25zLl9zY29wZUlkID0gc2NvcGVJZFxuXHQgIH1cblxuXHQgIHZhciBob29rXG5cdCAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG5cdCAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgLy8gMi4zIGluamVjdGlvblxuXHQgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dClcblx0ICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG5cdCAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0ICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuXHQgICAgICB9XG5cdCAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG5cdCAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcblx0ICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuXHQgICAgICB9XG5cdCAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuXHQgICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuXHQgICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuXHQgICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcblx0ICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuXHQgIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG5cdCAgICBob29rID0gaW5qZWN0U3R5bGVzXG5cdCAgfVxuXG5cdCAgaWYgKGhvb2spIHtcblx0ICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG5cdCAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuXHQgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuXHQgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcblx0ICAgICAgOiBbaG9va11cblx0ICB9XG5cblx0ICByZXR1cm4ge1xuXHQgICAgZXNNb2R1bGU6IGVzTW9kdWxlLFxuXHQgICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcblx0ICAgIG9wdGlvbnM6IG9wdGlvbnNcblx0ICB9XG5cdH1cblxuXG4vKioqLyB9LFxuLyogNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbFBhZ2VyJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBjdXJyZW50UGFnZTogTnVtYmVyLFxuXG5cdCAgICBwYWdlQ291bnQ6IE51bWJlclxuXHQgIH0sXG5cblx0ICB3YXRjaDoge1xuXHQgICAgc2hvd1ByZXZNb3JlOiBmdW5jdGlvbiBzaG93UHJldk1vcmUodmFsKSB7XG5cdCAgICAgIGlmICghdmFsKSB0aGlzLnF1aWNrcHJldkljb25DbGFzcyA9ICdlbC1pY29uLW1vcmUnO1xuXHQgICAgfSxcblx0ICAgIHNob3dOZXh0TW9yZTogZnVuY3Rpb24gc2hvd05leHRNb3JlKHZhbCkge1xuXHQgICAgICBpZiAoIXZhbCkgdGhpcy5xdWlja25leHRJY29uQ2xhc3MgPSAnZWwtaWNvbi1tb3JlJztcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgb25QYWdlckNsaWNrOiBmdW5jdGlvbiBvblBhZ2VyQ2xpY2soZXZlbnQpIHtcblx0ICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0ICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnVUwnKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cblx0ICAgICAgdmFyIG5ld1BhZ2UgPSBOdW1iZXIoZXZlbnQudGFyZ2V0LnRleHRDb250ZW50KTtcblx0ICAgICAgdmFyIHBhZ2VDb3VudCA9IHRoaXMucGFnZUNvdW50O1xuXHQgICAgICB2YXIgY3VycmVudFBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuXG5cdCAgICAgIGlmICh0YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoJ21vcmUnKSAhPT0gLTEpIHtcblx0ICAgICAgICBpZiAodGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKCdxdWlja3ByZXYnKSAhPT0gLTEpIHtcblx0ICAgICAgICAgIG5ld1BhZ2UgPSBjdXJyZW50UGFnZSAtIDU7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoJ3F1aWNrbmV4dCcpICE9PSAtMSkge1xuXHQgICAgICAgICAgbmV3UGFnZSA9IGN1cnJlbnRQYWdlICsgNTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cblx0ICAgICAgaWYgKCFpc05hTihuZXdQYWdlKSkge1xuXHQgICAgICAgIGlmIChuZXdQYWdlIDwgMSkge1xuXHQgICAgICAgICAgbmV3UGFnZSA9IDE7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaWYgKG5ld1BhZ2UgPiBwYWdlQ291bnQpIHtcblx0ICAgICAgICAgIG5ld1BhZ2UgPSBwYWdlQ291bnQ7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKG5ld1BhZ2UgIT09IGN1cnJlbnRQYWdlKSB7XG5cdCAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgbmV3UGFnZSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIHBhZ2VyczogZnVuY3Rpb24gcGFnZXJzKCkge1xuXHQgICAgICB2YXIgcGFnZXJDb3VudCA9IDc7XG5cblx0ICAgICAgdmFyIGN1cnJlbnRQYWdlID0gTnVtYmVyKHRoaXMuY3VycmVudFBhZ2UpO1xuXHQgICAgICB2YXIgcGFnZUNvdW50ID0gTnVtYmVyKHRoaXMucGFnZUNvdW50KTtcblxuXHQgICAgICB2YXIgc2hvd1ByZXZNb3JlID0gZmFsc2U7XG5cdCAgICAgIHZhciBzaG93TmV4dE1vcmUgPSBmYWxzZTtcblxuXHQgICAgICBpZiAocGFnZUNvdW50ID4gcGFnZXJDb3VudCkge1xuXHQgICAgICAgIGlmIChjdXJyZW50UGFnZSA+IHBhZ2VyQ291bnQgLSAzKSB7XG5cdCAgICAgICAgICBzaG93UHJldk1vcmUgPSB0cnVlO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmIChjdXJyZW50UGFnZSA8IHBhZ2VDb3VudCAtIDMpIHtcblx0ICAgICAgICAgIHNob3dOZXh0TW9yZSA9IHRydWU7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgdmFyIGFycmF5ID0gW107XG5cblx0ICAgICAgaWYgKHNob3dQcmV2TW9yZSAmJiAhc2hvd05leHRNb3JlKSB7XG5cdCAgICAgICAgdmFyIHN0YXJ0UGFnZSA9IHBhZ2VDb3VudCAtIChwYWdlckNvdW50IC0gMik7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0UGFnZTsgaSA8IHBhZ2VDb3VudDsgaSsrKSB7XG5cdCAgICAgICAgICBhcnJheS5wdXNoKGkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSBlbHNlIGlmICghc2hvd1ByZXZNb3JlICYmIHNob3dOZXh0TW9yZSkge1xuXHQgICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBwYWdlckNvdW50OyBfaSsrKSB7XG5cdCAgICAgICAgICBhcnJheS5wdXNoKF9pKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0gZWxzZSBpZiAoc2hvd1ByZXZNb3JlICYmIHNob3dOZXh0TW9yZSkge1xuXHQgICAgICAgIHZhciBvZmZzZXQgPSBNYXRoLmZsb29yKHBhZ2VyQ291bnQgLyAyKSAtIDE7XG5cdCAgICAgICAgZm9yICh2YXIgX2kyID0gY3VycmVudFBhZ2UgLSBvZmZzZXQ7IF9pMiA8PSBjdXJyZW50UGFnZSArIG9mZnNldDsgX2kyKyspIHtcblx0ICAgICAgICAgIGFycmF5LnB1c2goX2kyKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgZm9yICh2YXIgX2kzID0gMjsgX2kzIDwgcGFnZUNvdW50OyBfaTMrKykge1xuXHQgICAgICAgICAgYXJyYXkucHVzaChfaTMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIHRoaXMuc2hvd1ByZXZNb3JlID0gc2hvd1ByZXZNb3JlO1xuXHQgICAgICB0aGlzLnNob3dOZXh0TW9yZSA9IHNob3dOZXh0TW9yZTtcblxuXHQgICAgICByZXR1cm4gYXJyYXk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBjdXJyZW50OiBudWxsLFxuXHQgICAgICBzaG93UHJldk1vcmU6IGZhbHNlLFxuXHQgICAgICBzaG93TmV4dE1vcmU6IGZhbHNlLFxuXHQgICAgICBxdWlja25leHRJY29uQ2xhc3M6ICdlbC1pY29uLW1vcmUnLFxuXHQgICAgICBxdWlja3ByZXZJY29uQ2xhc3M6ICdlbC1pY29uLW1vcmUnXG5cdCAgICB9O1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCd1bCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXBhZ2VyXCIsXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5vblBhZ2VyQ2xpY2tcblx0ICAgIH1cblx0ICB9LCBbKF92bS5wYWdlQ291bnQgPiAwKSA/IF9jKCdsaScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcIm51bWJlclwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgYWN0aXZlOiBfdm0uY3VycmVudFBhZ2UgPT09IDFcblx0ICAgIH1cblx0ICB9LCBbX3ZtLl92KFwiMVwiKV0pIDogX3ZtLl9lKCksIChfdm0uc2hvd1ByZXZNb3JlKSA/IF9jKCdsaScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWljb24gbW9yZSBidG4tcXVpY2twcmV2XCIsXG5cdCAgICBjbGFzczogW192bS5xdWlja3ByZXZJY29uQ2xhc3NdLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJtb3VzZWVudGVyXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5xdWlja3ByZXZJY29uQ2xhc3MgPSAnZWwtaWNvbi1kLWFycm93LWxlZnQnXG5cdCAgICAgIH0sXG5cdCAgICAgIFwibW91c2VsZWF2ZVwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0ucXVpY2twcmV2SWNvbkNsYXNzID0gJ2VsLWljb24tbW9yZSdcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pIDogX3ZtLl9lKCksIF92bS5fbCgoX3ZtLnBhZ2VycyksIGZ1bmN0aW9uKHBhZ2VyKSB7XG5cdCAgICByZXR1cm4gX2MoJ2xpJywge1xuXHQgICAgICBzdGF0aWNDbGFzczogXCJudW1iZXJcIixcblx0ICAgICAgY2xhc3M6IHtcblx0ICAgICAgICBhY3RpdmU6IF92bS5jdXJyZW50UGFnZSA9PT0gcGFnZXJcblx0ICAgICAgfVxuXHQgICAgfSwgW192bS5fdihfdm0uX3MocGFnZXIpKV0pXG5cdCAgfSksIChfdm0uc2hvd05leHRNb3JlKSA/IF9jKCdsaScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWljb24gbW9yZSBidG4tcXVpY2tuZXh0XCIsXG5cdCAgICBjbGFzczogW192bS5xdWlja25leHRJY29uQ2xhc3NdLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJtb3VzZWVudGVyXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5xdWlja25leHRJY29uQ2xhc3MgPSAnZWwtaWNvbi1kLWFycm93LXJpZ2h0J1xuXHQgICAgICB9LFxuXHQgICAgICBcIm1vdXNlbGVhdmVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLnF1aWNrbmV4dEljb25DbGFzcyA9ICdlbC1pY29uLW1vcmUnXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KSA6IF92bS5fZSgpLCAoX3ZtLnBhZ2VDb3VudCA+IDEpID8gX2MoJ2xpJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwibnVtYmVyXCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICBhY3RpdmU6IF92bS5jdXJyZW50UGFnZSA9PT0gX3ZtLnBhZ2VDb3VudFxuXHQgICAgfVxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS5wYWdlQ291bnQpKV0pIDogX3ZtLl9lKCldLCAyKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiA4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9zZWxlY3RcIik7XG5cbi8qKiovIH0sXG4vKiA5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9vcHRpb25cIik7XG5cbi8qKiovIH0sXG4vKiAxMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2xvY2FsZVwiKTtcblxuLyoqKi8gfSxcbi8qIDExICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2NvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xuXG5cdHZhciBfY29tcG9uZW50MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbXBvbmVudCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfY29tcG9uZW50Mi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfY29tcG9uZW50Mi5kZWZhdWx0Lm5hbWUsIF9jb21wb25lbnQyLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9jb21wb25lbnQyLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAxMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxMyksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMTMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfcG9wdXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblxuXHR2YXIgX3BvcHVwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BvcHVwKTtcblxuXHR2YXIgX2VtaXR0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblxuXHR2YXIgX2VtaXR0ZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW1pdHRlcik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxEaWFsb2cnLFxuXG5cdCAgbWl4aW5zOiBbX3BvcHVwMi5kZWZhdWx0LCBfZW1pdHRlcjIuZGVmYXVsdF0sXG5cblx0ICBwcm9wczoge1xuXHQgICAgdGl0bGU6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnJ1xuXHQgICAgfSxcblxuXHQgICAgbW9kYWw6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogdHJ1ZVxuXHQgICAgfSxcblxuXHQgICAgbW9kYWxBcHBlbmRUb0JvZHk6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogdHJ1ZVxuXHQgICAgfSxcblxuXHQgICAgbG9ja1Njcm9sbDoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXG5cdCAgICBjbG9zZU9uQ2xpY2tNb2RhbDoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXG5cdCAgICBjbG9zZU9uUHJlc3NFc2NhcGU6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogdHJ1ZVxuXHQgICAgfSxcblxuXHQgICAgc2hvd0Nsb3NlOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IHRydWVcblx0ICAgIH0sXG5cblx0ICAgIHNpemU6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnc21hbGwnXG5cdCAgICB9LFxuXG5cdCAgICBjdXN0b21DbGFzczoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICcnXG5cdCAgICB9LFxuXG5cdCAgICB0b3A6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnMTUlJ1xuXHQgICAgfSxcblx0ICAgIGJlZm9yZUNsb3NlOiBGdW5jdGlvblxuXHQgIH0sXG5cblx0ICB3YXRjaDoge1xuXHQgICAgdmlzaWJsZTogZnVuY3Rpb24gdmlzaWJsZSh2YWwpIHtcblx0ICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6dmlzaWJsZScsIHZhbCk7XG5cdCAgICAgIGlmICh2YWwpIHtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdvcGVuJyk7XG5cdCAgICAgICAgdGhpcy4kZWwuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy51cGRhdGVQb3BwZXIpO1xuXHQgICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIF90aGlzLiRyZWZzLmRpYWxvZy5zY3JvbGxUb3AgPSAwO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuJGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMudXBkYXRlUG9wcGVyKTtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdjbG9zZScpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBzaXplQ2xhc3M6IGZ1bmN0aW9uIHNpemVDbGFzcygpIHtcblx0ICAgICAgcmV0dXJuICdlbC1kaWFsb2ctLScgKyB0aGlzLnNpemU7XG5cdCAgICB9LFxuXHQgICAgc3R5bGU6IGZ1bmN0aW9uIHN0eWxlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5zaXplID09PSAnZnVsbCcgPyB7fSA6IHsgJ3RvcCc6IHRoaXMudG9wIH07XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGhhbmRsZVdyYXBwZXJDbGljazogZnVuY3Rpb24gaGFuZGxlV3JhcHBlckNsaWNrKCkge1xuXHQgICAgICBpZiAoIXRoaXMuY2xvc2VPbkNsaWNrTW9kYWwpIHJldHVybjtcblx0ICAgICAgdGhpcy5oYW5kbGVDbG9zZSgpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUNsb3NlOiBmdW5jdGlvbiBoYW5kbGVDbG9zZSgpIHtcblx0ICAgICAgaWYgKHR5cGVvZiB0aGlzLmJlZm9yZUNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgdGhpcy5iZWZvcmVDbG9zZSh0aGlzLmhpZGUpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuaGlkZSgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaGlkZTogZnVuY3Rpb24gaGlkZShjYW5jZWwpIHtcblx0ICAgICAgaWYgKGNhbmNlbCAhPT0gZmFsc2UpIHtcblx0ICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6dmlzaWJsZScsIGZhbHNlKTtcblx0ICAgICAgICB0aGlzLiRlbWl0KCd2aXNpYmxlLWNoYW5nZScsIGZhbHNlKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHVwZGF0ZVBvcHBlcjogZnVuY3Rpb24gdXBkYXRlUG9wcGVyKCkge1xuXHQgICAgICB0aGlzLmJyb2FkY2FzdCgnRWxTZWxlY3REcm9wZG93bicsICd1cGRhdGVQb3BwZXInKTtcblx0ICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsRHJvcGRvd25NZW51JywgJ3VwZGF0ZVBvcHBlcicpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgaWYgKHRoaXMudmlzaWJsZSkge1xuXHQgICAgICB0aGlzLnJlbmRlcmVkID0gdHJ1ZTtcblx0ICAgICAgdGhpcy5vcGVuKCk7XG5cdCAgICB9XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMTQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3BvcHVwXCIpO1xuXG4vKioqLyB9LFxuLyogMTUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL21peGlucy9lbWl0dGVyXCIpO1xuXG4vKioqLyB9LFxuLyogMTYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCd0cmFuc2l0aW9uJywge1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJuYW1lXCI6IFwiZGlhbG9nLWZhZGVcIlxuXHQgICAgfVxuXHQgIH0sIFtfYygnZGl2Jywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLnZpc2libGUpLFxuXHQgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1kaWFsb2dfX3dyYXBwZXJcIixcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKCRldmVudC50YXJnZXQgIT09ICRldmVudC5jdXJyZW50VGFyZ2V0KSB7IHJldHVybiBudWxsOyB9XG5cdCAgICAgICAgX3ZtLmhhbmRsZVdyYXBwZXJDbGljaygkZXZlbnQpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LCBbX2MoJ2RpdicsIHtcblx0ICAgIHJlZjogXCJkaWFsb2dcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWRpYWxvZ1wiLFxuXHQgICAgY2xhc3M6IFtfdm0uc2l6ZUNsYXNzLCBfdm0uY3VzdG9tQ2xhc3NdLFxuXHQgICAgc3R5bGU6IChfdm0uc3R5bGUpXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1kaWFsb2dfX2hlYWRlclwiXG5cdCAgfSwgW192bS5fdChcInRpdGxlXCIsIFtfYygnc3BhbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWRpYWxvZ19fdGl0bGVcIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50aXRsZSkpXSldKSwgKF92bS5zaG93Q2xvc2UpID8gX2MoJ2J1dHRvbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWRpYWxvZ19faGVhZGVyYnRuXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInR5cGVcIjogXCJidXR0b25cIixcblx0ICAgICAgXCJhcmlhLWxhYmVsXCI6IFwiQ2xvc2VcIlxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLmhhbmRsZUNsb3NlXG5cdCAgICB9XG5cdCAgfSwgW19jKCdpJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGlhbG9nX19jbG9zZSBlbC1pY29uIGVsLWljb24tY2xvc2VcIlxuXHQgIH0pXSkgOiBfdm0uX2UoKV0sIDIpLCAoX3ZtLnJlbmRlcmVkKSA/IF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1kaWFsb2dfX2JvZHlcIlxuXHQgIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMikgOiBfdm0uX2UoKSwgKF92bS4kc2xvdHMuZm9vdGVyKSA/IF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1kaWFsb2dfX2Zvb3RlclwiXG5cdCAgfSwgW192bS5fdChcImZvb3RlclwiKV0sIDIpIDogX3ZtLl9lKCldKV0pXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMTcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfYXV0b2NvbXBsZXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XG5cblx0dmFyIF9hdXRvY29tcGxldGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXV0b2NvbXBsZXRlKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9hdXRvY29tcGxldGUyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9hdXRvY29tcGxldGUyLmRlZmF1bHQubmFtZSwgX2F1dG9jb21wbGV0ZTIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX2F1dG9jb21wbGV0ZTIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDE4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjcpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAxOSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9pbnB1dCA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xuXG5cdHZhciBfaW5wdXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5wdXQpO1xuXG5cdHZhciBfY2xpY2tvdXRzaWRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XG5cblx0dmFyIF9jbGlja291dHNpZGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xpY2tvdXRzaWRlKTtcblxuXHR2YXIgX2F1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMik7XG5cblx0dmFyIF9hdXRvY29tcGxldGVTdWdnZXN0aW9uczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hdXRvY29tcGxldGVTdWdnZXN0aW9ucyk7XG5cblx0dmFyIF9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cblx0dmFyIF9lbWl0dGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VtaXR0ZXIpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsQXV0b2NvbXBsZXRlJyxcblxuXHQgIG1peGluczogW19lbWl0dGVyMi5kZWZhdWx0XSxcblxuXHQgIGNvbXBvbmVudE5hbWU6ICdFbEF1dG9jb21wbGV0ZScsXG5cblx0ICBjb21wb25lbnRzOiB7XG5cdCAgICBFbElucHV0OiBfaW5wdXQyLmRlZmF1bHQsXG5cdCAgICBFbEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zOiBfYXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnMyLmRlZmF1bHRcblx0ICB9LFxuXG5cdCAgZGlyZWN0aXZlczogeyBDbGlja291dHNpZGU6IF9jbGlja291dHNpZGUyLmRlZmF1bHQgfSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBwcm9wczoge1xuXHQgICAgICB0eXBlOiBPYmplY3QsXG5cdCAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICBsYWJlbDogJ3ZhbHVlJyxcblx0ICAgICAgICAgIHZhbHVlOiAndmFsdWUnXG5cdCAgICAgICAgfTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHBvcHBlckNsYXNzOiBTdHJpbmcsXG5cdCAgICBwbGFjZWhvbGRlcjogU3RyaW5nLFxuXHQgICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG5cdCAgICBuYW1lOiBTdHJpbmcsXG5cdCAgICBzaXplOiBTdHJpbmcsXG5cdCAgICB2YWx1ZTogU3RyaW5nLFxuXHQgICAgYXV0b2ZvY3VzOiBCb29sZWFuLFxuXHQgICAgZmV0Y2hTdWdnZXN0aW9uczogRnVuY3Rpb24sXG5cdCAgICB0cmlnZ2VyT25Gb2N1czoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXHQgICAgY3VzdG9tSXRlbTogU3RyaW5nLFxuXHQgICAgaWNvbjogU3RyaW5nLFxuXHQgICAgb25JY29uQ2xpY2s6IEZ1bmN0aW9uLFxuXHQgICAgc2VsZWN0V2hlblVubWF0Y2hlZDoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiBmYWxzZVxuXHQgICAgfVxuXHQgIH0sXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIGFjdGl2YXRlZDogZmFsc2UsXG5cdCAgICAgIGlzT25Db21wb3NpdGlvbjogZmFsc2UsXG5cdCAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcblx0ICAgICAgbG9hZGluZzogZmFsc2UsXG5cdCAgICAgIGhpZ2hsaWdodGVkSW5kZXg6IC0xXG5cdCAgICB9O1xuXHQgIH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgc3VnZ2VzdGlvblZpc2libGU6IGZ1bmN0aW9uIHN1Z2dlc3Rpb25WaXNpYmxlKCkge1xuXHQgICAgICB2YXIgc3VnZ2VzdGlvbnMgPSB0aGlzLnN1Z2dlc3Rpb25zO1xuXHQgICAgICB2YXIgaXNWYWxpZERhdGEgPSBBcnJheS5pc0FycmF5KHN1Z2dlc3Rpb25zKSAmJiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwO1xuXHQgICAgICByZXR1cm4gKGlzVmFsaWREYXRhIHx8IHRoaXMubG9hZGluZykgJiYgdGhpcy5hY3RpdmF0ZWQ7XG5cdCAgICB9XG5cdCAgfSxcblx0ICB3YXRjaDoge1xuXHQgICAgc3VnZ2VzdGlvblZpc2libGU6IGZ1bmN0aW9uIHN1Z2dlc3Rpb25WaXNpYmxlKHZhbCkge1xuXHQgICAgICB0aGlzLmJyb2FkY2FzdCgnRWxBdXRvY29tcGxldGVTdWdnZXN0aW9ucycsICd2aXNpYmxlJywgW3ZhbCwgdGhpcy4kcmVmcy5pbnB1dC4kcmVmcy5pbnB1dC5vZmZzZXRXaWR0aF0pO1xuXHQgICAgfVxuXHQgIH0sXG5cdCAgbWV0aG9kczoge1xuXHQgICAgZ2V0RGF0YTogZnVuY3Rpb24gZ2V0RGF0YShxdWVyeVN0cmluZykge1xuXHQgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cdCAgICAgIHRoaXMuZmV0Y2hTdWdnZXN0aW9ucyhxdWVyeVN0cmluZywgZnVuY3Rpb24gKHN1Z2dlc3Rpb25zKSB7XG5cdCAgICAgICAgX3RoaXMubG9hZGluZyA9IGZhbHNlO1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHN1Z2dlc3Rpb25zKSkge1xuXHQgICAgICAgICAgX3RoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9ucztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgY29uc29sZS5lcnJvcignYXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25zIG11c3QgYmUgYW4gYXJyYXknKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUNvbXBvc2l0aW9uOiBmdW5jdGlvbiBoYW5kbGVDb21wb3NpdGlvbihldmVudCkge1xuXHQgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NvbXBvc2l0aW9uZW5kJykge1xuXHQgICAgICAgIHRoaXMuaXNPbkNvbXBvc2l0aW9uID0gZmFsc2U7XG5cdCAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodGhpcy52YWx1ZSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5pc09uQ29tcG9zaXRpb24gPSB0cnVlO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcblx0ICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG5cdCAgICAgIGlmICh0aGlzLmlzT25Db21wb3NpdGlvbiB8fCAhdGhpcy50cmlnZ2VyT25Gb2N1cyAmJiAhdmFsdWUpIHtcblx0ICAgICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuZ2V0RGF0YSh2YWx1ZSk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlRm9jdXM6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKCkge1xuXHQgICAgICB0aGlzLmFjdGl2YXRlZCA9IHRydWU7XG5cdCAgICAgIGlmICh0aGlzLnRyaWdnZXJPbkZvY3VzKSB7XG5cdCAgICAgICAgdGhpcy5nZXREYXRhKHRoaXMudmFsdWUpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKGUpIHtcblx0ICAgICAgdGhpcy5hY3RpdmF0ZWQgPSBmYWxzZTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVLZXlFbnRlcjogZnVuY3Rpb24gaGFuZGxlS2V5RW50ZXIoZSkge1xuXHQgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuXHQgICAgICBpZiAodGhpcy5zdWdnZXN0aW9uVmlzaWJsZSAmJiB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPj0gMCAmJiB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPCB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuXHQgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICB0aGlzLnNlbGVjdCh0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuaGlnaGxpZ2h0ZWRJbmRleF0pO1xuXHQgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0V2hlblVubWF0Y2hlZCkge1xuXHQgICAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdCcsIHsgdmFsdWU6IHRoaXMudmFsdWUgfSk7XG5cdCAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcblx0ICAgICAgICAgIF90aGlzMi5zdWdnZXN0aW9ucyA9IFtdO1xuXHQgICAgICAgICAgX3RoaXMyLmhpZ2hsaWdodGVkSW5kZXggPSAtMTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNlbGVjdDogZnVuY3Rpb24gc2VsZWN0KGl0ZW0pIHtcblx0ICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cblx0ICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBpdGVtW3RoaXMucHJvcHMudmFsdWVdKTtcblx0ICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0JywgaXRlbSk7XG5cdCAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7XG5cdCAgICAgICAgX3RoaXMzLnN1Z2dlc3Rpb25zID0gW107XG5cdCAgICAgICAgX3RoaXMzLmhpZ2hsaWdodGVkSW5kZXggPSAtMTtcblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgaGlnaGxpZ2h0OiBmdW5jdGlvbiBoaWdobGlnaHQoaW5kZXgpIHtcblx0ICAgICAgaWYgKCF0aGlzLnN1Z2dlc3Rpb25WaXNpYmxlIHx8IHRoaXMubG9hZGluZykge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfVxuXHQgICAgICBpZiAoaW5kZXggPCAwKSB7XG5cdCAgICAgICAgdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gLTE7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChpbmRleCA+PSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuXHQgICAgICAgIGluZGV4ID0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxO1xuXHQgICAgICB9XG5cdCAgICAgIHZhciBzdWdnZXN0aW9uID0gdGhpcy4kcmVmcy5zdWdnZXN0aW9ucy4kZWwucXVlcnlTZWxlY3RvcignLmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX193cmFwJyk7XG5cdCAgICAgIHZhciBzdWdnZXN0aW9uTGlzdCA9IHN1Z2dlc3Rpb24ucXVlcnlTZWxlY3RvckFsbCgnLmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX19saXN0IGxpJyk7XG5cblx0ICAgICAgdmFyIGhpZ2hsaWdodEl0ZW0gPSBzdWdnZXN0aW9uTGlzdFtpbmRleF07XG5cdCAgICAgIHZhciBzY3JvbGxUb3AgPSBzdWdnZXN0aW9uLnNjcm9sbFRvcDtcblx0ICAgICAgdmFyIG9mZnNldFRvcCA9IGhpZ2hsaWdodEl0ZW0ub2Zmc2V0VG9wO1xuXG5cdCAgICAgIGlmIChvZmZzZXRUb3AgKyBoaWdobGlnaHRJdGVtLnNjcm9sbEhlaWdodCA+IHNjcm9sbFRvcCArIHN1Z2dlc3Rpb24uY2xpZW50SGVpZ2h0KSB7XG5cdCAgICAgICAgc3VnZ2VzdGlvbi5zY3JvbGxUb3AgKz0gaGlnaGxpZ2h0SXRlbS5zY3JvbGxIZWlnaHQ7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKG9mZnNldFRvcCA8IHNjcm9sbFRvcCkge1xuXHQgICAgICAgIHN1Z2dlc3Rpb24uc2Nyb2xsVG9wIC09IGhpZ2hsaWdodEl0ZW0uc2Nyb2xsSGVpZ2h0O1xuXHQgICAgICB9XG5cblx0ICAgICAgdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gaW5kZXg7XG5cdCAgICB9XG5cdCAgfSxcblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cblx0ICAgIHRoaXMuJG9uKCdpdGVtLWNsaWNrJywgZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgX3RoaXM0LnNlbGVjdChpdGVtKTtcblx0ICAgIH0pO1xuXHQgIH0sXG5cdCAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcblx0ICAgIHRoaXMuJHJlZnMuc3VnZ2VzdGlvbnMuJGRlc3Ryb3koKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvaW5wdXRcIik7XG5cbi8qKiovIH0sXG4vKiAyMSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvY2xpY2tvdXRzaWRlXCIpO1xuXG4vKioqLyB9LFxuLyogMjIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjMpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNiksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDIzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3Z1ZVBvcHBlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xuXG5cdHZhciBfdnVlUG9wcGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZVBvcHBlcik7XG5cblx0dmFyIF9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cblx0dmFyIF9lbWl0dGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VtaXR0ZXIpO1xuXG5cdHZhciBfc2Nyb2xsYmFyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG5cblx0dmFyIF9zY3JvbGxiYXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2Nyb2xsYmFyKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBjb21wb25lbnRzOiB7IEVsU2Nyb2xsYmFyOiBfc2Nyb2xsYmFyMi5kZWZhdWx0IH0sXG5cdCAgbWl4aW5zOiBbX3Z1ZVBvcHBlcjIuZGVmYXVsdCwgX2VtaXR0ZXIyLmRlZmF1bHRdLFxuXG5cdCAgY29tcG9uZW50TmFtZTogJ0VsQXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnMnLFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHBhcmVudDogdGhpcy4kcGFyZW50LFxuXHQgICAgICBkcm9wZG93bldpZHRoOiAnJ1xuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBwcm9wczoge1xuXHQgICAgcHJvcHM6IE9iamVjdCxcblx0ICAgIHN1Z2dlc3Rpb25zOiBBcnJheSxcblx0ICAgIG9wdGlvbnM6IHtcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgIGdwdUFjY2VsZXJhdGlvbjogZmFsc2Vcblx0ICAgICAgICB9O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIHNlbGVjdDogZnVuY3Rpb24gc2VsZWN0KGl0ZW0pIHtcblx0ICAgICAgdGhpcy5kaXNwYXRjaCgnRWxBdXRvY29tcGxldGUnLCAnaXRlbS1jbGljaycsIGl0ZW0pO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkge1xuXHQgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcblx0ICAgICAgX3RoaXMudXBkYXRlUG9wcGVyKCk7XG5cdCAgICB9KTtcblx0ICB9LFxuXHQgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdCAgICB0aGlzLiRwYXJlbnQucG9wcGVyRWxtID0gdGhpcy5wb3BwZXJFbG0gPSB0aGlzLiRlbDtcblx0ICAgIHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy4kcGFyZW50LiRyZWZzLmlucHV0LiRyZWZzLmlucHV0O1xuXHQgIH0sXG5cdCAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcblx0ICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgICB0aGlzLiRvbigndmlzaWJsZScsIGZ1bmN0aW9uICh2YWwsIGlucHV0V2lkdGgpIHtcblx0ICAgICAgX3RoaXMyLmRyb3Bkb3duV2lkdGggPSBpbnB1dFdpZHRoICsgJ3B4Jztcblx0ICAgICAgX3RoaXMyLnNob3dQb3BwZXIgPSB2YWw7XG5cdCAgICB9KTtcblx0ICB9XG5cdH07IC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cbi8qKiovIH0sXG4vKiAyNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdnVlLXBvcHBlclwiKTtcblxuLyoqKi8gfSxcbi8qIDI1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9zY3JvbGxiYXJcIik7XG5cbi8qKiovIH0sXG4vKiAyNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ3RyYW5zaXRpb24nLCB7XG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcIm5hbWVcIjogXCJlbC16b29tLWluLXRvcFwiXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJhZnRlci1sZWF2ZVwiOiBfdm0uZG9EZXN0cm95XG5cdCAgICB9XG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0uc2hvd1BvcHBlciksXG5cdCAgICAgIGV4cHJlc3Npb246IFwic2hvd1BvcHBlclwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uXCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaXMtbG9hZGluZyc6IF92bS5wYXJlbnQubG9hZGluZ1xuXHQgICAgfSxcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICB3aWR0aDogX3ZtLmRyb3Bkb3duV2lkdGhcblx0ICAgIH0pXG5cdCAgfSwgW19jKCdlbC1zY3JvbGxiYXInLCB7XG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInRhZ1wiOiBcInVsXCIsXG5cdCAgICAgIFwid3JhcC1jbGFzc1wiOiBcImVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX193cmFwXCIsXG5cdCAgICAgIFwidmlldy1jbGFzc1wiOiBcImVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX19saXN0XCJcblx0ICAgIH1cblx0ICB9LCBbKF92bS5wYXJlbnQubG9hZGluZykgPyBfYygnbGknLCBbX2MoJ2knLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1pY29uLWxvYWRpbmdcIlxuXHQgIH0pXSkgOiBfdm0uX2woKF92bS5zdWdnZXN0aW9ucyksIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG5cdCAgICByZXR1cm4gWyghX3ZtLnBhcmVudC5jdXN0b21JdGVtKSA/IF9jKCdsaScsIHtcblx0ICAgICAgY2xhc3M6IHtcblx0ICAgICAgICAnaGlnaGxpZ2h0ZWQnOiBfdm0ucGFyZW50LmhpZ2hsaWdodGVkSW5kZXggPT09IGluZGV4XG5cdCAgICAgIH0sXG5cdCAgICAgIG9uOiB7XG5cdCAgICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICAgIF92bS5zZWxlY3QoaXRlbSlcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sIFtfdm0uX3YoXCJcXG4gICAgICAgICAgXCIgKyBfdm0uX3MoaXRlbVtfdm0ucHJvcHMubGFiZWxdKSArIFwiXFxuICAgICAgICBcIildKSA6IF9jKF92bS5wYXJlbnQuY3VzdG9tSXRlbSwge1xuXHQgICAgICB0YWc6IFwiY29tcG9uZW50XCIsXG5cdCAgICAgIGNsYXNzOiB7XG5cdCAgICAgICAgJ2hpZ2hsaWdodGVkJzogX3ZtLnBhcmVudC5oaWdobGlnaHRlZEluZGV4ID09PSBpbmRleFxuXHQgICAgICB9LFxuXHQgICAgICBhdHRyczoge1xuXHQgICAgICAgIFwiaXRlbVwiOiBpdGVtLFxuXHQgICAgICAgIFwiaW5kZXhcIjogaW5kZXhcblx0ICAgICAgfSxcblx0ICAgICAgb246IHtcblx0ICAgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgICAgX3ZtLnNlbGVjdChpdGVtKVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSldXG5cdCAgfSldLCAyKV0sIDEpXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMjcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcImNsaWNrb3V0c2lkZVwiLFxuXHQgICAgICByYXdOYW1lOiBcInYtY2xpY2tvdXRzaWRlXCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLmNsb3NlKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJjbG9zZVwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWF1dG9jb21wbGV0ZVwiXG5cdCAgfSwgW19jKCdlbC1pbnB1dCcsIF92bS5fYih7XG5cdCAgICByZWY6IFwiaW5wdXRcIixcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2hhbmdlXCI6IF92bS5oYW5kbGVDaGFuZ2UsXG5cdCAgICAgIFwiZm9jdXNcIjogX3ZtLmhhbmRsZUZvY3VzXG5cdCAgICB9LFxuXHQgICAgbmF0aXZlT246IHtcblx0ICAgICAgXCJjb21wb3NpdGlvbnN0YXJ0XCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5oYW5kbGVDb21wb3NpdGlvbigkZXZlbnQpXG5cdCAgICAgIH0sXG5cdCAgICAgIFwiY29tcG9zaXRpb251cGRhdGVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmhhbmRsZUNvbXBvc2l0aW9uKCRldmVudClcblx0ICAgICAgfSxcblx0ICAgICAgXCJjb21wb3NpdGlvbmVuZFwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uaGFuZGxlQ29tcG9zaXRpb24oJGV2ZW50KVxuXHQgICAgICB9LFxuXHQgICAgICBcImtleWRvd25cIjogW2Z1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIGlmICghKCdidXR0b24nIGluICRldmVudCkgJiYgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInVwXCIsIDM4KSkgeyByZXR1cm4gbnVsbDsgfVxuXHQgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIF92bS5oaWdobGlnaHQoX3ZtLmhpZ2hsaWdodGVkSW5kZXggLSAxKVxuXHQgICAgICB9LCBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBpZiAoISgnYnV0dG9uJyBpbiAkZXZlbnQpICYmIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJkb3duXCIsIDQwKSkgeyByZXR1cm4gbnVsbDsgfVxuXHQgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIF92bS5oaWdobGlnaHQoX3ZtLmhpZ2hsaWdodGVkSW5kZXggKyAxKVxuXHQgICAgICB9LCBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBpZiAoISgnYnV0dG9uJyBpbiAkZXZlbnQpICYmIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlbnRlclwiLCAxMykpIHsgcmV0dXJuIG51bGw7IH1cblx0ICAgICAgICBfdm0uaGFuZGxlS2V5RW50ZXIoJGV2ZW50KVxuXHQgICAgICB9LCBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBpZiAoISgnYnV0dG9uJyBpbiAkZXZlbnQpICYmIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJ0YWJcIiwgOSkpIHsgcmV0dXJuIG51bGw7IH1cblx0ICAgICAgICBfdm0uY2xvc2UoJGV2ZW50KVxuXHQgICAgICB9XVxuXHQgICAgfVxuXHQgIH0sICdlbC1pbnB1dCcsIF92bS4kcHJvcHMpLCBbKF92bS4kc2xvdHMucHJlcGVuZCkgPyBfYygndGVtcGxhdGUnLCB7XG5cdCAgICBzbG90OiBcInByZXBlbmRcIlxuXHQgIH0sIFtfdm0uX3QoXCJwcmVwZW5kXCIpXSwgMikgOiBfdm0uX2UoKSwgKF92bS4kc2xvdHMuYXBwZW5kKSA/IF9jKCd0ZW1wbGF0ZScsIHtcblx0ICAgIHNsb3Q6IFwiYXBwZW5kXCJcblx0ICB9LCBbX3ZtLl90KFwiYXBwZW5kXCIpXSwgMikgOiBfdm0uX2UoKV0sIDIpLCBfYygnZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zJywge1xuXHQgICAgcmVmOiBcInN1Z2dlc3Rpb25zXCIsXG5cdCAgICBjbGFzczogW192bS5wb3BwZXJDbGFzcyA/IF92bS5wb3BwZXJDbGFzcyA6ICcnXSxcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwicHJvcHNcIjogX3ZtLnByb3BzLFxuXHQgICAgICBcInN1Z2dlc3Rpb25zXCI6IF92bS5zdWdnZXN0aW9uc1xuXHQgICAgfVxuXHQgIH0pXSwgMSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMjggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfZHJvcGRvd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcblxuXHR2YXIgX2Ryb3Bkb3duMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Ryb3Bkb3duKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9kcm9wZG93bjIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX2Ryb3Bkb3duMi5kZWZhdWx0Lm5hbWUsIF9kcm9wZG93bjIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX2Ryb3Bkb3duMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogMjkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzApLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgbnVsbCxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMzAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfY2xpY2tvdXRzaWRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XG5cblx0dmFyIF9jbGlja291dHNpZGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2xpY2tvdXRzaWRlKTtcblxuXHR2YXIgX2VtaXR0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblxuXHR2YXIgX2VtaXR0ZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW1pdHRlcik7XG5cblx0dmFyIF9idXR0b24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcblxuXHR2YXIgX2J1dHRvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9idXR0b24pO1xuXG5cdHZhciBfYnV0dG9uR3JvdXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcblxuXHR2YXIgX2J1dHRvbkdyb3VwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2J1dHRvbkdyb3VwKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxEcm9wZG93bicsXG5cblx0ICBjb21wb25lbnROYW1lOiAnRWxEcm9wZG93bicsXG5cblx0ICBtaXhpbnM6IFtfZW1pdHRlcjIuZGVmYXVsdF0sXG5cblx0ICBkaXJlY3RpdmVzOiB7IENsaWNrb3V0c2lkZTogX2NsaWNrb3V0c2lkZTIuZGVmYXVsdCB9LFxuXG5cdCAgY29tcG9uZW50czoge1xuXHQgICAgRWxCdXR0b246IF9idXR0b24yLmRlZmF1bHQsXG5cdCAgICBFbEJ1dHRvbkdyb3VwOiBfYnV0dG9uR3JvdXAyLmRlZmF1bHRcblx0ICB9LFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIHRyaWdnZXI6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnaG92ZXInXG5cdCAgICB9LFxuXHQgICAgbWVudUFsaWduOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2VuZCdcblx0ICAgIH0sXG5cdCAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICBzaXplOiBTdHJpbmcsXG5cdCAgICBzcGxpdEJ1dHRvbjogQm9vbGVhbixcblx0ICAgIGhpZGVPbkNsaWNrOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IHRydWVcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHRpbWVvdXQ6IG51bGwsXG5cdCAgICAgIHZpc2libGU6IGZhbHNlLFxuXHQgICAgICB0cmlnZ2VyRWxtOiBudWxsXG5cdCAgICB9O1xuXHQgIH0sXG5cdCAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcblx0ICAgIHRoaXMuJG9uKCdtZW51LWl0ZW0tY2xpY2snLCB0aGlzLmhhbmRsZU1lbnVJdGVtQ2xpY2spO1xuXHQgICAgdGhpcy5pbml0RXZlbnQoKTtcblx0ICB9LFxuXG5cblx0ICB3YXRjaDoge1xuXHQgICAgdmlzaWJsZTogZnVuY3Rpb24gdmlzaWJsZSh2YWwpIHtcblx0ICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsRHJvcGRvd25NZW51JywgJ3Zpc2libGUnLCB2YWwpO1xuXHQgICAgICB0aGlzLiRlbWl0KCd2aXNpYmxlLWNoYW5nZScsIHZhbCk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIHNob3c6IGZ1bmN0aW9uIHNob3coKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgaWYgKHRoaXMudHJpZ2dlckVsbS5kaXNhYmxlZCkgcmV0dXJuO1xuXHQgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblx0ICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgX3RoaXMudmlzaWJsZSA9IHRydWU7XG5cdCAgICAgIH0sIDI1MCk7XG5cdCAgICB9LFxuXHQgICAgaGlkZTogZnVuY3Rpb24gaGlkZSgpIHtcblx0ICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cblx0ICAgICAgaWYgKHRoaXMudHJpZ2dlckVsbS5kaXNhYmxlZCkgcmV0dXJuO1xuXHQgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblx0ICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgX3RoaXMyLnZpc2libGUgPSBmYWxzZTtcblx0ICAgICAgfSwgMTUwKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soKSB7XG5cdCAgICAgIGlmICh0aGlzLnRyaWdnZXJFbG0uZGlzYWJsZWQpIHJldHVybjtcblx0ICAgICAgdGhpcy52aXNpYmxlID0gIXRoaXMudmlzaWJsZTtcblx0ICAgIH0sXG5cdCAgICBpbml0RXZlbnQ6IGZ1bmN0aW9uIGluaXRFdmVudCgpIHtcblx0ICAgICAgdmFyIHRyaWdnZXIgPSB0aGlzLnRyaWdnZXIsXG5cdCAgICAgICAgICBzaG93ID0gdGhpcy5zaG93LFxuXHQgICAgICAgICAgaGlkZSA9IHRoaXMuaGlkZSxcblx0ICAgICAgICAgIGhhbmRsZUNsaWNrID0gdGhpcy5oYW5kbGVDbGljayxcblx0ICAgICAgICAgIHNwbGl0QnV0dG9uID0gdGhpcy5zcGxpdEJ1dHRvbjtcblxuXHQgICAgICB0aGlzLnRyaWdnZXJFbG0gPSBzcGxpdEJ1dHRvbiA/IHRoaXMuJHJlZnMudHJpZ2dlci4kZWwgOiB0aGlzLiRzbG90cy5kZWZhdWx0WzBdLmVsbTtcblxuXHQgICAgICBpZiAodHJpZ2dlciA9PT0gJ2hvdmVyJykge1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckVsbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgc2hvdyk7XG5cdCAgICAgICAgdGhpcy50cmlnZ2VyRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBoaWRlKTtcblxuXHQgICAgICAgIHZhciBkcm9wZG93bkVsbSA9IHRoaXMuJHNsb3RzLmRyb3Bkb3duWzBdLmVsbTtcblxuXHQgICAgICAgIGRyb3Bkb3duRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBzaG93KTtcblx0ICAgICAgICBkcm9wZG93bkVsbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgaGlkZSk7XG5cdCAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuXHQgICAgICAgIHRoaXMudHJpZ2dlckVsbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGhhbmRsZU1lbnVJdGVtQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZU1lbnVJdGVtQ2xpY2soY29tbWFuZCwgaW5zdGFuY2UpIHtcblx0ICAgICAgaWYgKHRoaXMuaGlkZU9uQ2xpY2spIHtcblx0ICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLiRlbWl0KCdjb21tYW5kJywgY29tbWFuZCwgaW5zdGFuY2UpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG5cdCAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuXHQgICAgdmFyIGhpZGUgPSB0aGlzLmhpZGUsXG5cdCAgICAgICAgc3BsaXRCdXR0b24gPSB0aGlzLnNwbGl0QnV0dG9uLFxuXHQgICAgICAgIHR5cGUgPSB0aGlzLnR5cGUsXG5cdCAgICAgICAgc2l6ZSA9IHRoaXMuc2l6ZTtcblxuXG5cdCAgICB2YXIgaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiBoYW5kbGVDbGljayhfKSB7XG5cdCAgICAgIF90aGlzMy4kZW1pdCgnY2xpY2snKTtcblx0ICAgIH07XG5cblx0ICAgIHZhciB0cmlnZ2VyRWxtID0gIXNwbGl0QnV0dG9uID8gdGhpcy4kc2xvdHMuZGVmYXVsdCA6IGgoXG5cdCAgICAgICdlbC1idXR0b24tZ3JvdXAnLFxuXHQgICAgICBudWxsLFxuXHQgICAgICBbaChcblx0ICAgICAgICAnZWwtYnV0dG9uJyxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICBhdHRyczogeyB0eXBlOiB0eXBlLCBzaXplOiBzaXplIH0sXG5cdCAgICAgICAgICBuYXRpdmVPbjoge1xuXHQgICAgICAgICAgICAnY2xpY2snOiBoYW5kbGVDbGlja1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgW3RoaXMuJHNsb3RzLmRlZmF1bHRdXG5cdCAgICAgICksIGgoXG5cdCAgICAgICAgJ2VsLWJ1dHRvbicsXG5cdCAgICAgICAgeyByZWY6ICd0cmlnZ2VyJywgYXR0cnM6IHsgdHlwZTogdHlwZSwgc2l6ZTogc2l6ZSB9LFxuXHQgICAgICAgICAgJ2NsYXNzJzogJ2VsLWRyb3Bkb3duX19jYXJldC1idXR0b24nIH0sXG5cdCAgICAgICAgW2goXG5cdCAgICAgICAgICAnaScsXG5cdCAgICAgICAgICB7ICdjbGFzcyc6ICdlbC1kcm9wZG93bl9faWNvbiBlbC1pY29uLWNhcmV0LWJvdHRvbScgfSxcblx0ICAgICAgICAgIFtdXG5cdCAgICAgICAgKV1cblx0ICAgICAgKV1cblx0ICAgICk7XG5cblx0ICAgIHJldHVybiBoKFxuXHQgICAgICAnZGl2Jyxcblx0ICAgICAgeyAnY2xhc3MnOiAnZWwtZHJvcGRvd24nLCBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICAgICAgbmFtZTogJ2NsaWNrb3V0c2lkZScsXG5cdCAgICAgICAgICB2YWx1ZTogaGlkZVxuXHQgICAgICAgIH1dXG5cdCAgICAgIH0sXG5cdCAgICAgIFt0cmlnZ2VyRWxtLCB0aGlzLiRzbG90cy5kcm9wZG93bl1cblx0ICAgICk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMzEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL2J1dHRvblwiKTtcblxuLyoqKi8gfSxcbi8qIDMyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9idXR0b24tZ3JvdXBcIik7XG5cbi8qKiovIH0sXG4vKiAzMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9kcm9wZG93bk1lbnUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcblxuXHR2YXIgX2Ryb3Bkb3duTWVudTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kcm9wZG93bk1lbnUpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X2Ryb3Bkb3duTWVudTIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX2Ryb3Bkb3duTWVudTIuZGVmYXVsdC5uYW1lLCBfZHJvcGRvd25NZW51Mi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfZHJvcGRvd25NZW51Mi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogMzQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzUpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzNiksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDM1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3Z1ZVBvcHBlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xuXG5cdHZhciBfdnVlUG9wcGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZVBvcHBlcik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsRHJvcGRvd25NZW51JyxcblxuXHQgIGNvbXBvbmVudE5hbWU6ICdFbERyb3Bkb3duTWVudScsXG5cblx0ICBtaXhpbnM6IFtfdnVlUG9wcGVyMi5kZWZhdWx0XSxcblxuXHQgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG5cdCAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICB0aGlzLiRvbigndXBkYXRlUG9wcGVyJywgZnVuY3Rpb24gKCkge1xuXHQgICAgICBpZiAoX3RoaXMuc2hvd1BvcHBlcikgX3RoaXMudXBkYXRlUG9wcGVyKCk7XG5cdCAgICB9KTtcblx0ICAgIHRoaXMuJG9uKCd2aXNpYmxlJywgZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICBfdGhpcy5zaG93UG9wcGVyID0gdmFsO1xuXHQgICAgfSk7XG5cdCAgfSxcblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdGhpcy4kcGFyZW50LnBvcHBlckVsbSA9IHRoaXMucG9wcGVyRWxtID0gdGhpcy4kZWw7XG5cdCAgICB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMuJHBhcmVudC4kZWw7XG5cdCAgfSxcblxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgICckcGFyZW50Lm1lbnVBbGlnbic6IHtcblx0ICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuXHQgICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbCkge1xuXHQgICAgICAgIHRoaXMuY3VycmVudFBsYWNlbWVudCA9ICdib3R0b20tJyArIHZhbDtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblx0fTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuLyoqKi8gfSxcbi8qIDM2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygndHJhbnNpdGlvbicsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwibmFtZVwiOiBcImVsLXpvb20taW4tdG9wXCJcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImFmdGVyLWxlYXZlXCI6IF92bS5kb0Rlc3Ryb3lcblx0ICAgIH1cblx0ICB9LCBbX2MoJ3VsJywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLnNob3dQb3BwZXIpLFxuXHQgICAgICBleHByZXNzaW9uOiBcInNob3dQb3BwZXJcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1kcm9wZG93bi1tZW51XCJcblx0ICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMzcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfZHJvcGRvd25JdGVtID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOCk7XG5cblx0dmFyIF9kcm9wZG93bkl0ZW0yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZHJvcGRvd25JdGVtKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9kcm9wZG93bkl0ZW0yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9kcm9wZG93bkl0ZW0yLmRlZmF1bHQubmFtZSwgX2Ryb3Bkb3duSXRlbTIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX2Ryb3Bkb3duSXRlbTIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDM4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oNDApLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAzOSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cblx0dmFyIF9lbWl0dGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VtaXR0ZXIpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbERyb3Bkb3duSXRlbScsXG5cblx0ICBtaXhpbnM6IFtfZW1pdHRlcjIuZGVmYXVsdF0sXG5cblx0ICBwcm9wczoge1xuXHQgICAgY29tbWFuZDoge30sXG5cdCAgICBkaXNhYmxlZDogQm9vbGVhbixcblx0ICAgIGRpdmlkZWQ6IEJvb2xlYW5cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGUpIHtcblx0ICAgICAgdGhpcy5kaXNwYXRjaCgnRWxEcm9wZG93bicsICdtZW51LWl0ZW0tY2xpY2snLCBbdGhpcy5jb21tYW5kLCB0aGlzXSk7XG5cdCAgICB9XG5cdCAgfVxuXHR9OyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG4vKioqLyB9LFxuLyogNDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdsaScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWRyb3Bkb3duLW1lbnVfX2l0ZW1cIixcblx0ICAgIGNsYXNzOiB7XG5cdCAgICAgICdpcy1kaXNhYmxlZCc6IF92bS5kaXNhYmxlZCxcblx0ICAgICAgJ2VsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWQnOiBfdm0uZGl2aWRlZFxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLmhhbmRsZUNsaWNrXG5cdCAgICB9XG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiA0MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9tZW51ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Mik7XG5cblx0dmFyIF9tZW51MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21lbnUpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X21lbnUyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9tZW51Mi5kZWZhdWx0Lm5hbWUsIF9tZW51Mi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfbWVudTIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDQyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oNDUpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiA0MyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cblx0dmFyIF9lbWl0dGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VtaXR0ZXIpO1xuXG5cdHZhciBfZG9tID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxNZW51JyxcblxuXHQgIGNvbXBvbmVudE5hbWU6ICdFbE1lbnUnLFxuXG5cdCAgbWl4aW5zOiBbX2VtaXR0ZXIyLmRlZmF1bHRdLFxuXG5cdCAgcHJvdmlkZTogZnVuY3Rpb24gcHJvdmlkZSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHJvb3RNZW51OiB0aGlzXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIGNvbXBvbmVudHM6IHtcblx0ICAgICdlbC1tZW51LWNvbGxhcHNlLXRyYW5zaXRpb24nOiB7XG5cdCAgICAgIGZ1bmN0aW9uYWw6IHRydWUsXG5cdCAgICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGNyZWF0ZUVsZW1lbnQsIGNvbnRleHQpIHtcblx0ICAgICAgICB2YXIgZGF0YSA9IHtcblx0ICAgICAgICAgIHByb3BzOiB7XG5cdCAgICAgICAgICAgIG1vZGU6ICdvdXQtaW4nXG5cdCAgICAgICAgICB9LFxuXHQgICAgICAgICAgb246IHtcblx0ICAgICAgICAgICAgYmVmb3JlRW50ZXI6IGZ1bmN0aW9uIGJlZm9yZUVudGVyKGVsKSB7XG5cdCAgICAgICAgICAgICAgZWwuc3R5bGUub3BhY2l0eSA9IDAuMjtcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgZW50ZXI6IGZ1bmN0aW9uIGVudGVyKGVsKSB7XG5cdCAgICAgICAgICAgICAgKDAsIF9kb20uYWRkQ2xhc3MpKGVsLCAnZWwtb3BhY2l0eS10cmFuc2l0aW9uJyk7XG5cdCAgICAgICAgICAgICAgZWwuc3R5bGUub3BhY2l0eSA9IDE7XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIGFmdGVyRW50ZXI6IGZ1bmN0aW9uIGFmdGVyRW50ZXIoZWwpIHtcblx0ICAgICAgICAgICAgICAoMCwgX2RvbS5yZW1vdmVDbGFzcykoZWwsICdlbC1vcGFjaXR5LXRyYW5zaXRpb24nKTtcblx0ICAgICAgICAgICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gJyc7XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIGJlZm9yZUxlYXZlOiBmdW5jdGlvbiBiZWZvcmVMZWF2ZShlbCkge1xuXHQgICAgICAgICAgICAgIGlmICghZWwuZGF0YXNldCkgZWwuZGF0YXNldCA9IHt9O1xuXG5cdCAgICAgICAgICAgICAgaWYgKCgwLCBfZG9tLmhhc0NsYXNzKShlbCwgJ2VsLW1lbnUtLWNvbGxhcHNlJykpIHtcblx0ICAgICAgICAgICAgICAgICgwLCBfZG9tLnJlbW92ZUNsYXNzKShlbCwgJ2VsLW1lbnUtLWNvbGxhcHNlJyk7XG5cdCAgICAgICAgICAgICAgICBlbC5kYXRhc2V0Lm9sZE92ZXJmbG93ID0gZWwuc3R5bGUub3ZlcmZsb3c7XG5cdCAgICAgICAgICAgICAgICBlbC5kYXRhc2V0LnNjcm9sbFdpZHRoID0gZWwuc2Nyb2xsV2lkdGg7XG5cdCAgICAgICAgICAgICAgICAoMCwgX2RvbS5hZGRDbGFzcykoZWwsICdlbC1tZW51LS1jb2xsYXBzZScpO1xuXHQgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgIGVsLnN0eWxlLndpZHRoID0gZWwuc2Nyb2xsV2lkdGggKyAncHgnO1xuXHQgICAgICAgICAgICAgIGVsLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIGxlYXZlOiBmdW5jdGlvbiBsZWF2ZShlbCkge1xuXHQgICAgICAgICAgICAgIGlmICghKDAsIF9kb20uaGFzQ2xhc3MpKGVsLCAnZWwtbWVudS0tY29sbGFwc2UnKSkge1xuXHQgICAgICAgICAgICAgICAgKDAsIF9kb20uYWRkQ2xhc3MpKGVsLCAnaG9yaXpvbnRhbC1jb2xsYXBzZS10cmFuc2l0aW9uJyk7XG5cdCAgICAgICAgICAgICAgICBlbC5zdHlsZS53aWR0aCA9ICc2NHB4Jztcblx0ICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgKDAsIF9kb20uYWRkQ2xhc3MpKGVsLCAnaG9yaXpvbnRhbC1jb2xsYXBzZS10cmFuc2l0aW9uJyk7XG5cdCAgICAgICAgICAgICAgICBlbC5zdHlsZS53aWR0aCA9IGVsLmRhdGFzZXQuc2Nyb2xsV2lkdGggKyAncHgnO1xuXHQgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgYWZ0ZXJMZWF2ZTogZnVuY3Rpb24gYWZ0ZXJMZWF2ZShlbCkge1xuXHQgICAgICAgICAgICAgICgwLCBfZG9tLnJlbW92ZUNsYXNzKShlbCwgJ2hvcml6b250YWwtY29sbGFwc2UtdHJhbnNpdGlvbicpO1xuXHQgICAgICAgICAgICAgIGlmICgoMCwgX2RvbS5oYXNDbGFzcykoZWwsICdlbC1tZW51LS1jb2xsYXBzZScpKSB7XG5cdCAgICAgICAgICAgICAgICBlbC5zdHlsZS53aWR0aCA9IGVsLmRhdGFzZXQuc2Nyb2xsV2lkdGggKyAncHgnO1xuXHQgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICBlbC5zdHlsZS53aWR0aCA9ICc2NHB4Jztcblx0ICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgZWwuc3R5bGUub3ZlcmZsb3cgPSBlbC5kYXRhc2V0Lm9sZE92ZXJmbG93O1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfTtcblx0ICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgndHJhbnNpdGlvbicsIGRhdGEsIGNvbnRleHQuY2hpbGRyZW4pO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBtb2RlOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ3ZlcnRpY2FsJ1xuXHQgICAgfSxcblx0ICAgIGRlZmF1bHRBY3RpdmU6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnJ1xuXHQgICAgfSxcblx0ICAgIGRlZmF1bHRPcGVuZWRzOiBBcnJheSxcblx0ICAgIHRoZW1lOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2xpZ2h0J1xuXHQgICAgfSxcblx0ICAgIHVuaXF1ZU9wZW5lZDogQm9vbGVhbixcblx0ICAgIHJvdXRlcjogQm9vbGVhbixcblx0ICAgIG1lbnVUcmlnZ2VyOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2hvdmVyJ1xuXHQgICAgfSxcblx0ICAgIGNvbGxhcHNlOiBCb29sZWFuXG5cdCAgfSxcblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgYWN0aXZlSW5kZXg6IHRoaXMuZGVmYXVsdEFjdGl2ZSxcblx0ICAgICAgb3BlbmVkTWVudXM6IHRoaXMuZGVmYXVsdE9wZW5lZHMgPyB0aGlzLmRlZmF1bHRPcGVuZWRzLnNsaWNlKDApIDogW10sXG5cdCAgICAgIGl0ZW1zOiB7fSxcblx0ICAgICAgc3VibWVudXM6IHt9XG5cdCAgICB9O1xuXHQgIH0sXG5cblx0ICB3YXRjaDoge1xuXHQgICAgZGVmYXVsdEFjdGl2ZTogZnVuY3Rpb24gZGVmYXVsdEFjdGl2ZSh2YWx1ZSkge1xuXHQgICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXNbdmFsdWVdO1xuXHQgICAgICBpZiAoaXRlbSkge1xuXHQgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpdGVtLmluZGV4O1xuXHQgICAgICAgIHRoaXMuaW5pdE9wZW5lZE1lbnUoKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gJyc7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBkZWZhdWx0T3BlbmVkczogZnVuY3Rpb24gZGVmYXVsdE9wZW5lZHModmFsdWUpIHtcblx0ICAgICAgdGhpcy5vcGVuZWRNZW51cyA9IHZhbHVlO1xuXHQgICAgfSxcblx0ICAgIGNvbGxhcHNlOiBmdW5jdGlvbiBjb2xsYXBzZSh2YWx1ZSkge1xuXHQgICAgICBpZiAodmFsdWUpIHRoaXMub3BlbmVkTWVudXMgPSBbXTtcblx0ICAgIH1cblx0ICB9LFxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGFkZEl0ZW06IGZ1bmN0aW9uIGFkZEl0ZW0oaXRlbSkge1xuXHQgICAgICB0aGlzLiRzZXQodGhpcy5pdGVtcywgaXRlbS5pbmRleCwgaXRlbSk7XG5cdCAgICB9LFxuXHQgICAgcmVtb3ZlSXRlbTogZnVuY3Rpb24gcmVtb3ZlSXRlbShpdGVtKSB7XG5cdCAgICAgIGRlbGV0ZSB0aGlzLml0ZW1zW2l0ZW0uaW5kZXhdO1xuXHQgICAgfSxcblx0ICAgIGFkZFN1Ym1lbnU6IGZ1bmN0aW9uIGFkZFN1Ym1lbnUoaXRlbSkge1xuXHQgICAgICB0aGlzLiRzZXQodGhpcy5zdWJtZW51cywgaXRlbS5pbmRleCwgaXRlbSk7XG5cdCAgICB9LFxuXHQgICAgcmVtb3ZlU3VibWVudTogZnVuY3Rpb24gcmVtb3ZlU3VibWVudShpdGVtKSB7XG5cdCAgICAgIGRlbGV0ZSB0aGlzLnN1Ym1lbnVzW2l0ZW0uaW5kZXhdO1xuXHQgICAgfSxcblx0ICAgIG9wZW5NZW51OiBmdW5jdGlvbiBvcGVuTWVudShpbmRleCwgaW5kZXhQYXRoKSB7XG5cdCAgICAgIHZhciBvcGVuZWRNZW51cyA9IHRoaXMub3BlbmVkTWVudXM7XG5cdCAgICAgIGlmIChvcGVuZWRNZW51cy5pbmRleE9mKGluZGV4KSAhPT0gLTEpIHJldHVybjtcblx0ICAgICAgLy8g5bCG5LiN5Zyo6K+l6I+c5Y2V6Lev5b6E5LiL55qE5YW25L2Z6I+c5Y2V5pS26LW3XG5cdCAgICAgIGlmICh0aGlzLnVuaXF1ZU9wZW5lZCkge1xuXHQgICAgICAgIHRoaXMub3BlbmVkTWVudXMgPSBvcGVuZWRNZW51cy5maWx0ZXIoZnVuY3Rpb24gKGluZGV4KSB7XG5cdCAgICAgICAgICByZXR1cm4gaW5kZXhQYXRoLmluZGV4T2YoaW5kZXgpICE9PSAtMTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLm9wZW5lZE1lbnVzLnB1c2goaW5kZXgpO1xuXHQgICAgfSxcblx0ICAgIGNsb3NlTWVudTogZnVuY3Rpb24gY2xvc2VNZW51KGluZGV4KSB7XG5cdCAgICAgIHRoaXMub3BlbmVkTWVudXMuc3BsaWNlKHRoaXMub3BlbmVkTWVudXMuaW5kZXhPZihpbmRleCksIDEpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZVN1Ym1lbnVDbGljazogZnVuY3Rpb24gaGFuZGxlU3VibWVudUNsaWNrKHN1Ym1lbnUpIHtcblx0ICAgICAgdmFyIGluZGV4ID0gc3VibWVudS5pbmRleCxcblx0ICAgICAgICAgIGluZGV4UGF0aCA9IHN1Ym1lbnUuaW5kZXhQYXRoO1xuXG5cdCAgICAgIHZhciBpc09wZW5lZCA9IHRoaXMub3BlbmVkTWVudXMuaW5kZXhPZihpbmRleCkgIT09IC0xO1xuXG5cdCAgICAgIGlmIChpc09wZW5lZCkge1xuXHQgICAgICAgIHRoaXMuY2xvc2VNZW51KGluZGV4KTtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdjbG9zZScsIGluZGV4LCBpbmRleFBhdGgpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMub3Blbk1lbnUoaW5kZXgsIGluZGV4UGF0aCk7XG5cdCAgICAgICAgdGhpcy4kZW1pdCgnb3BlbicsIGluZGV4LCBpbmRleFBhdGgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlSXRlbUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVJdGVtQ2xpY2soaXRlbSkge1xuXHQgICAgICB2YXIgaW5kZXggPSBpdGVtLmluZGV4LFxuXHQgICAgICAgICAgaW5kZXhQYXRoID0gaXRlbS5pbmRleFBhdGg7XG5cblx0ICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGl0ZW0uaW5kZXg7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdCcsIGluZGV4LCBpbmRleFBhdGgsIGl0ZW0pO1xuXG5cdCAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdob3Jpem9udGFsJyB8fCB0aGlzLmNvbGxhcHNlKSB7XG5cdCAgICAgICAgdGhpcy5vcGVuZWRNZW51cyA9IFtdO1xuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKHRoaXMucm91dGVyKSB7XG5cdCAgICAgICAgdGhpcy5yb3V0ZVRvSXRlbShpdGVtKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblxuXHQgICAgLy8g5Yid5aeL5YyW5bGV5byA6I+c5Y2VXG5cdCAgICBpbml0T3BlbmVkTWVudTogZnVuY3Rpb24gaW5pdE9wZW5lZE1lbnUoKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgdmFyIGluZGV4ID0gdGhpcy5hY3RpdmVJbmRleDtcblx0ICAgICAgdmFyIGFjdGl2ZUl0ZW0gPSB0aGlzLml0ZW1zW2luZGV4XTtcblx0ICAgICAgaWYgKCFhY3RpdmVJdGVtIHx8IHRoaXMubW9kZSA9PT0gJ2hvcml6b250YWwnIHx8IHRoaXMuY29sbGFwc2UpIHJldHVybjtcblxuXHQgICAgICB2YXIgaW5kZXhQYXRoID0gYWN0aXZlSXRlbS5pbmRleFBhdGg7XG5cblx0ICAgICAgLy8g5bGV5byA6K+l6I+c5Y2V6aG555qE6Lev5b6E5LiK5omA5pyJ5a2Q6I+c5Y2VXG5cdCAgICAgIGluZGV4UGF0aC5mb3JFYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuXHQgICAgICAgIHZhciBzdWJtZW51ID0gX3RoaXMuc3VibWVudXNbaW5kZXhdO1xuXHQgICAgICAgIHN1Ym1lbnUgJiYgX3RoaXMub3Blbk1lbnUoaW5kZXgsIHN1Ym1lbnUuaW5kZXhQYXRoKTtcblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgcm91dGVUb0l0ZW06IGZ1bmN0aW9uIHJvdXRlVG9JdGVtKGl0ZW0pIHtcblx0ICAgICAgdmFyIHJvdXRlID0gaXRlbS5yb3V0ZSB8fCBpdGVtLmluZGV4O1xuXHQgICAgICB0cnkge1xuXHQgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHJvdXRlKTtcblx0ICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXHQgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdCAgICB0aGlzLmluaXRPcGVuZWRNZW51KCk7XG5cdCAgICB0aGlzLiRvbignaXRlbS1jbGljaycsIHRoaXMuaGFuZGxlSXRlbUNsaWNrKTtcblx0ICAgIHRoaXMuJG9uKCdzdWJtZW51LWNsaWNrJywgdGhpcy5oYW5kbGVTdWJtZW51Q2xpY2spO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDQ0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9kb21cIik7XG5cbi8qKiovIH0sXG4vKiA0NSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2VsLW1lbnUtY29sbGFwc2UtdHJhbnNpdGlvbicsIFtfYygndWwnLCB7XG5cdCAgICBrZXk6ICtfdm0uY29sbGFwc2UsXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1tZW51XCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnZWwtbWVudS0taG9yaXpvbnRhbCc6IF92bS5tb2RlID09PSAnaG9yaXpvbnRhbCcsXG5cdCAgICAgICAgJ2VsLW1lbnUtLWRhcmsnOiBfdm0udGhlbWUgPT09ICdkYXJrJyxcblx0ICAgICAgICAnZWwtbWVudS0tY29sbGFwc2UnOiBfdm0uY29sbGFwc2Vcblx0ICAgIH1cblx0ICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogNDYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfc3VibWVudSA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpO1xuXG5cdHZhciBfc3VibWVudTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdWJtZW51KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9zdWJtZW51Mi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfc3VibWVudTIuZGVmYXVsdC5uYW1lLCBfc3VibWVudTIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX3N1Ym1lbnUyLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiA0NyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXyg0OCksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDUxKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogNDggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfY29sbGFwc2VUcmFuc2l0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSk7XG5cblx0dmFyIF9jb2xsYXBzZVRyYW5zaXRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29sbGFwc2VUcmFuc2l0aW9uKTtcblxuXHR2YXIgX21lbnVNaXhpbiA9IF9fd2VicGFja19yZXF1aXJlX18oNTApO1xuXG5cdHZhciBfbWVudU1peGluMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21lbnVNaXhpbik7XG5cblx0dmFyIF9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cblx0dmFyIF9lbWl0dGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VtaXR0ZXIpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbFN1Ym1lbnUnLFxuXG5cdCAgY29tcG9uZW50TmFtZTogJ0VsU3VibWVudScsXG5cblx0ICBtaXhpbnM6IFtfbWVudU1peGluMi5kZWZhdWx0LCBfZW1pdHRlcjIuZGVmYXVsdF0sXG5cblx0ICBjb21wb25lbnRzOiB7IEVsQ29sbGFwc2VUcmFuc2l0aW9uOiBfY29sbGFwc2VUcmFuc2l0aW9uMi5kZWZhdWx0IH0sXG5cblx0ICBwcm9wczoge1xuXHQgICAgaW5kZXg6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICByZXF1aXJlZDogdHJ1ZVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgdGltZW91dDogbnVsbCxcblx0ICAgICAgaXRlbXM6IHt9LFxuXHQgICAgICBzdWJtZW51czoge31cblx0ICAgIH07XG5cdCAgfSxcblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBtZW51VHJhbnNpdGlvbk5hbWU6IGZ1bmN0aW9uIG1lbnVUcmFuc2l0aW9uTmFtZSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMucm9vdE1lbnUuY29sbGFwc2UgPyAnZWwtem9vbS1pbi1sZWZ0JyA6ICdlbC16b29tLWluLXRvcCc7XG5cdCAgICB9LFxuXHQgICAgb3BlbmVkOiBmdW5jdGlvbiBvcGVuZWQoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnJvb3RNZW51Lm9wZW5lZE1lbnVzLmluZGV4T2YodGhpcy5pbmRleCkgPiAtMTtcblx0ICAgIH0sXG5cblx0ICAgIGFjdGl2ZToge1xuXHQgICAgICBjYWNoZTogZmFsc2UsXG5cdCAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuXHQgICAgICAgIHZhciBpc0FjdGl2ZSA9IGZhbHNlO1xuXHQgICAgICAgIHZhciBzdWJtZW51cyA9IHRoaXMuc3VibWVudXM7XG5cdCAgICAgICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcztcblxuXHQgICAgICAgIE9iamVjdC5rZXlzKGl0ZW1zKS5mb3JFYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuXHQgICAgICAgICAgaWYgKGl0ZW1zW2luZGV4XS5hY3RpdmUpIHtcblx0ICAgICAgICAgICAgaXNBY3RpdmUgPSB0cnVlO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXG5cdCAgICAgICAgT2JqZWN0LmtleXMoc3VibWVudXMpLmZvckVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG5cdCAgICAgICAgICBpZiAoc3VibWVudXNbaW5kZXhdLmFjdGl2ZSkge1xuXHQgICAgICAgICAgICBpc0FjdGl2ZSA9IHRydWU7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cblx0ICAgICAgICByZXR1cm4gaXNBY3RpdmU7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGFkZEl0ZW06IGZ1bmN0aW9uIGFkZEl0ZW0oaXRlbSkge1xuXHQgICAgICB0aGlzLiRzZXQodGhpcy5pdGVtcywgaXRlbS5pbmRleCwgaXRlbSk7XG5cdCAgICB9LFxuXHQgICAgcmVtb3ZlSXRlbTogZnVuY3Rpb24gcmVtb3ZlSXRlbShpdGVtKSB7XG5cdCAgICAgIGRlbGV0ZSB0aGlzLml0ZW1zW2l0ZW0uaW5kZXhdO1xuXHQgICAgfSxcblx0ICAgIGFkZFN1Ym1lbnU6IGZ1bmN0aW9uIGFkZFN1Ym1lbnUoaXRlbSkge1xuXHQgICAgICB0aGlzLiRzZXQodGhpcy5zdWJtZW51cywgaXRlbS5pbmRleCwgaXRlbSk7XG5cdCAgICB9LFxuXHQgICAgcmVtb3ZlU3VibWVudTogZnVuY3Rpb24gcmVtb3ZlU3VibWVudShpdGVtKSB7XG5cdCAgICAgIGRlbGV0ZSB0aGlzLnN1Ym1lbnVzW2l0ZW0uaW5kZXhdO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljaygpIHtcblx0ICAgICAgdmFyIHJvb3RNZW51ID0gdGhpcy5yb290TWVudTtcblxuXHQgICAgICBpZiAocm9vdE1lbnUubWVudVRyaWdnZXIgPT09ICdob3ZlcicgJiYgcm9vdE1lbnUubW9kZSA9PT0gJ2hvcml6b250YWwnIHx8IHJvb3RNZW51LmNvbGxhcHNlICYmIHJvb3RNZW51Lm1vZGUgPT09ICd2ZXJ0aWNhbCcpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5kaXNwYXRjaCgnRWxNZW51JywgJ3N1Ym1lbnUtY2xpY2snLCB0aGlzKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVNb3VzZWVudGVyOiBmdW5jdGlvbiBoYW5kbGVNb3VzZWVudGVyKCkge1xuXHQgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICAgIHZhciByb290TWVudSA9IHRoaXMucm9vdE1lbnU7XG5cblx0ICAgICAgaWYgKHJvb3RNZW51Lm1lbnVUcmlnZ2VyID09PSAnY2xpY2snICYmIHJvb3RNZW51Lm1vZGUgPT09ICdob3Jpem9udGFsJyB8fCAhcm9vdE1lbnUuY29sbGFwc2UgJiYgcm9vdE1lbnUubW9kZSA9PT0gJ3ZlcnRpY2FsJykge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfVxuXHQgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblx0ICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgX3RoaXMucm9vdE1lbnUub3Blbk1lbnUoX3RoaXMuaW5kZXgsIF90aGlzLmluZGV4UGF0aCk7XG5cdCAgICAgIH0sIDMwMCk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlTW91c2VsZWF2ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VsZWF2ZSgpIHtcblx0ICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cblx0ICAgICAgdmFyIHJvb3RNZW51ID0gdGhpcy5yb290TWVudTtcblxuXHQgICAgICBpZiAocm9vdE1lbnUubWVudVRyaWdnZXIgPT09ICdjbGljaycgJiYgcm9vdE1lbnUubW9kZSA9PT0gJ2hvcml6b250YWwnIHx8ICFyb290TWVudS5jb2xsYXBzZSAmJiByb290TWVudS5tb2RlID09PSAndmVydGljYWwnKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXHQgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBfdGhpczIucm9vdE1lbnUuY2xvc2VNZW51KF90aGlzMi5pbmRleCk7XG5cdCAgICAgIH0sIDMwMCk7XG5cdCAgICB9XG5cdCAgfSxcblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgdGhpcy5wYXJlbnRNZW51LmFkZFN1Ym1lbnUodGhpcyk7XG5cdCAgICB0aGlzLnJvb3RNZW51LmFkZFN1Ym1lbnUodGhpcyk7XG5cdCAgfSxcblx0ICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuXHQgICAgdGhpcy5wYXJlbnRNZW51LnJlbW92ZVN1Ym1lbnUodGhpcyk7XG5cdCAgICB0aGlzLnJvb3RNZW51LnJlbW92ZVN1Ym1lbnUodGhpcyk7XG5cdCAgfVxuXHR9OyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG4vKioqLyB9LFxuLyogNDkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3RyYW5zaXRpb25zL2NvbGxhcHNlLXRyYW5zaXRpb25cIik7XG5cbi8qKiovIH0sXG4vKiA1MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBjb21wdXRlZDoge1xuXHQgICAgaW5kZXhQYXRoOiBmdW5jdGlvbiBpbmRleFBhdGgoKSB7XG5cdCAgICAgIHZhciBwYXRoID0gW3RoaXMuaW5kZXhdO1xuXHQgICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuXHQgICAgICB3aGlsZSAocGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUgIT09ICdFbE1lbnUnKSB7XG5cdCAgICAgICAgaWYgKHBhcmVudC5pbmRleCkge1xuXHQgICAgICAgICAgcGF0aC51bnNoaWZ0KHBhcmVudC5pbmRleCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBwYXRoO1xuXHQgICAgfSxcblx0ICAgIHJvb3RNZW51OiBmdW5jdGlvbiByb290TWVudSgpIHtcblx0ICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcblx0ICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSAhPT0gJ0VsTWVudScpIHtcblx0ICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcGFyZW50O1xuXHQgICAgfSxcblx0ICAgIHBhcmVudE1lbnU6IGZ1bmN0aW9uIHBhcmVudE1lbnUoKSB7XG5cdCAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG5cdCAgICAgIHdoaWxlIChwYXJlbnQgJiYgWydFbE1lbnUnLCAnRWxTdWJtZW51J10uaW5kZXhPZihwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSkgPT09IC0xKSB7XG5cdCAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHBhcmVudDtcblx0ICAgIH0sXG5cdCAgICBwYWRkaW5nU3R5bGU6IGZ1bmN0aW9uIHBhZGRpbmdTdHlsZSgpIHtcblx0ICAgICAgaWYgKHRoaXMucm9vdE1lbnUubW9kZSAhPT0gJ3ZlcnRpY2FsJykgcmV0dXJuIHt9O1xuXG5cdCAgICAgIHZhciBwYWRkaW5nID0gMjA7XG5cdCAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG5cblx0ICAgICAgaWYgKHRoaXMucm9vdE1lbnUuY29sbGFwc2UpIHtcblx0ICAgICAgICBwYWRkaW5nID0gMjA7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSAhPT0gJ0VsTWVudScpIHtcblx0ICAgICAgICAgIGlmIChwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSA9PT0gJ0VsU3VibWVudScpIHtcblx0ICAgICAgICAgICAgcGFkZGluZyArPSAyMDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4geyBwYWRkaW5nTGVmdDogcGFkZGluZyArICdweCcgfTtcblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiA1MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2xpJywge1xuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2VsLXN1Ym1lbnUnOiB0cnVlLFxuXHQgICAgICAnaXMtYWN0aXZlJzogX3ZtLmFjdGl2ZSxcblx0ICAgICAgJ2lzLW9wZW5lZCc6IF92bS5vcGVuZWRcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcIm1vdXNlZW50ZXJcIjogX3ZtLmhhbmRsZU1vdXNlZW50ZXIsXG5cdCAgICAgIFwibW91c2VsZWF2ZVwiOiBfdm0uaGFuZGxlTW91c2VsZWF2ZVxuXHQgICAgfVxuXHQgIH0sIFtfYygnZGl2Jywge1xuXHQgICAgcmVmOiBcInN1Ym1lbnUtdGl0bGVcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXN1Ym1lbnVfX3RpdGxlXCIsXG5cdCAgICBzdHlsZTogKF92bS5wYWRkaW5nU3R5bGUpLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0uaGFuZGxlQ2xpY2tcblx0ICAgIH1cblx0ICB9LCBbX3ZtLl90KFwidGl0bGVcIiksIF9jKCdpJywge1xuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2VsLXN1Ym1lbnVfX2ljb24tYXJyb3cnOiB0cnVlLFxuXHQgICAgICAnZWwtaWNvbi1jYXJldC1ib3R0b20nOiBfdm0ucm9vdE1lbnUubW9kZSA9PT0gJ2hvcml6b250YWwnLFxuXHQgICAgICAgICdlbC1pY29uLWFycm93LWRvd24nOiBfdm0ucm9vdE1lbnUubW9kZSA9PT0gJ3ZlcnRpY2FsJyAmJiAhX3ZtLnJvb3RNZW51LmNvbGxhcHNlLFxuXHQgICAgICAgICdlbC1pY29uLWNhcmV0LXJpZ2h0JzogX3ZtLnJvb3RNZW51Lm1vZGUgPT09ICd2ZXJ0aWNhbCcgJiYgX3ZtLnJvb3RNZW51LmNvbGxhcHNlXG5cdCAgICB9XG5cdCAgfSldLCAyKSwgKF92bS5yb290TWVudS5tb2RlID09PSAnaG9yaXpvbnRhbCcgfHwgKF92bS5yb290TWVudS5tb2RlID09PSAndmVydGljYWwnICYmIF92bS5yb290TWVudS5jb2xsYXBzZSkpID8gW19jKCd0cmFuc2l0aW9uJywge1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJuYW1lXCI6IF92bS5tZW51VHJhbnNpdGlvbk5hbWVcblx0ICAgIH1cblx0ICB9LCBbX2MoJ3VsJywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLm9wZW5lZCksXG5cdCAgICAgIGV4cHJlc3Npb246IFwib3BlbmVkXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtbWVudVwiXG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKV0pXSA6IF9jKCdlbC1jb2xsYXBzZS10cmFuc2l0aW9uJywgW19jKCd1bCcsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5vcGVuZWQpLFxuXHQgICAgICBleHByZXNzaW9uOiBcIm9wZW5lZFwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLW1lbnVcIlxuXHQgIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMildKV0sIDIpXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDUyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX21lbnVJdGVtID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XG5cblx0dmFyIF9tZW51SXRlbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tZW51SXRlbSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfbWVudUl0ZW0yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9tZW51SXRlbTIuZGVmYXVsdC5uYW1lLCBfbWVudUl0ZW0yLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9tZW51SXRlbTIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDUzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDU0KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oNTUpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiA1NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9tZW51TWl4aW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcblxuXHR2YXIgX21lbnVNaXhpbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tZW51TWl4aW4pO1xuXG5cdHZhciBfZW1pdHRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xuXG5cdHZhciBfZW1pdHRlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbWl0dGVyKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbE1lbnVJdGVtJyxcblxuXHQgIGNvbXBvbmVudE5hbWU6ICdFbE1lbnVJdGVtJyxcblxuXHQgIG1peGluczogW19tZW51TWl4aW4yLmRlZmF1bHQsIF9lbWl0dGVyMi5kZWZhdWx0XSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBpbmRleDoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIHJlcXVpcmVkOiB0cnVlXG5cdCAgICB9LFxuXHQgICAgcm91dGU6IHtcblx0ICAgICAgdHlwZTogT2JqZWN0LFxuXHQgICAgICByZXF1aXJlZDogZmFsc2Vcblx0ICAgIH0sXG5cdCAgICBkaXNhYmxlZDoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICByZXF1aXJlZDogZmFsc2Vcblx0ICAgIH1cblx0ICB9LFxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBhY3RpdmU6IGZ1bmN0aW9uIGFjdGl2ZSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPT09IHRoaXMucm9vdE1lbnUuYWN0aXZlSW5kZXg7XG5cdCAgICB9XG5cdCAgfSxcblx0ICBtZXRob2RzOiB7XG5cdCAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soKSB7XG5cdCAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsTWVudScsICdpdGVtLWNsaWNrJywgdGhpcyk7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2NsaWNrJywgdGhpcyk7XG5cdCAgICB9XG5cdCAgfSxcblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgdGhpcy5wYXJlbnRNZW51LmFkZEl0ZW0odGhpcyk7XG5cdCAgICB0aGlzLnJvb3RNZW51LmFkZEl0ZW0odGhpcyk7XG5cdCAgfSxcblx0ICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuXHQgICAgdGhpcy5wYXJlbnRNZW51LnJlbW92ZUl0ZW0odGhpcyk7XG5cdCAgICB0aGlzLnJvb3RNZW51LnJlbW92ZUl0ZW0odGhpcyk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogNTUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdsaScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLW1lbnUtaXRlbVwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2lzLWFjdGl2ZSc6IF92bS5hY3RpdmUsXG5cdCAgICAgICdpcy1kaXNhYmxlZCc6IF92bS5kaXNhYmxlZFxuXHQgICAgfSxcblx0ICAgIHN0eWxlOiAoX3ZtLnBhZGRpbmdTdHlsZSksXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5oYW5kbGVDbGlja1xuXHQgICAgfVxuXHQgIH0sIFsoX3ZtLiRwYXJlbnQgPT09IF92bS5yb290TWVudSAmJiBfdm0ucm9vdE1lbnUuY29sbGFwc2UpID8gX2MoJ2VsLXRvb2x0aXAnLCB7XG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcImVmZmVjdFwiOiBcImRhcmtcIixcblx0ICAgICAgXCJwbGFjZW1lbnRcIjogXCJyaWdodFwiXG5cdCAgICB9XG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzbG90OiBcImNvbnRlbnRcIlxuXHQgIH0sIFtfdm0uX3QoXCJ0aXRsZVwiKV0sIDIpLCBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljU3R5bGU6IHtcblx0ICAgICAgXCJwb3NpdGlvblwiOiBcImFic29sdXRlXCIsXG5cdCAgICAgIFwibGVmdFwiOiBcIjBcIixcblx0ICAgICAgXCJ0b3BcIjogXCIwXCIsXG5cdCAgICAgIFwiaGVpZ2h0XCI6IFwiMTAwJVwiLFxuXHQgICAgICBcIndpZHRoXCI6IFwiMTAwJVwiLFxuXHQgICAgICBcImRpc3BsYXlcIjogXCJpbmxpbmUtYmxvY2tcIixcblx0ICAgICAgXCJib3gtc2l6aW5nXCI6IFwiYm9yZGVyLWJveFwiLFxuXHQgICAgICBcInBhZGRpbmdcIjogXCIwIDIwcHhcIlxuXHQgICAgfVxuXHQgIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMildKSA6IFtfdm0uX3QoXCJkZWZhdWx0XCIpLCBfdm0uX3QoXCJ0aXRsZVwiKV1dLCAyKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiA1NiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9tZW51SXRlbUdyb3VwID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nyk7XG5cblx0dmFyIF9tZW51SXRlbUdyb3VwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21lbnVJdGVtR3JvdXApO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X21lbnVJdGVtR3JvdXAyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9tZW51SXRlbUdyb3VwMi5kZWZhdWx0Lm5hbWUsIF9tZW51SXRlbUdyb3VwMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfbWVudUl0ZW1Hcm91cDIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDU3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oNTkpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiA1OCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbE1lbnVJdGVtR3JvdXAnLFxuXG5cdCAgY29tcG9uZW50TmFtZTogJ0VsTWVudUl0ZW1Hcm91cCcsXG5cblx0ICBpbmplY3Q6IFsncm9vdE1lbnUnXSxcblx0ICBwcm9wczoge1xuXHQgICAgdGl0bGU6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nXG5cdCAgICB9XG5cdCAgfSxcblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgcGFkZGluZ0xlZnQ6IDIwXG5cdCAgICB9O1xuXHQgIH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgbGV2ZWxQYWRkaW5nOiBmdW5jdGlvbiBsZXZlbFBhZGRpbmcoKSB7XG5cdCAgICAgIHZhciBwYWRkaW5nID0gMTA7XG5cdCAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG5cdCAgICAgIGlmICh0aGlzLnJvb3RNZW51LmNvbGxhcHNlKSByZXR1cm4gMjA7XG5cdCAgICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUgIT09ICdFbE1lbnUnKSB7XG5cdCAgICAgICAgaWYgKHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lID09PSAnRWxTdWJtZW51Jykge1xuXHQgICAgICAgICAgcGFkZGluZyArPSAyMDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG5cdCAgICAgIH1cblx0ICAgICAgcGFkZGluZyA9PT0gMTAgJiYgKHBhZGRpbmcgPSAyMCk7XG5cdCAgICAgIHJldHVybiBwYWRkaW5nO1xuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDU5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnbGknLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1tZW51LWl0ZW0tZ3JvdXBcIlxuXHQgIH0sIFtfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtbWVudS1pdGVtLWdyb3VwX190aXRsZVwiLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIHBhZGRpbmdMZWZ0OiBfdm0ubGV2ZWxQYWRkaW5nICsgJ3B4J1xuXHQgICAgfSlcblx0ICB9LCBbKCFfdm0uJHNsb3RzLnRpdGxlKSA/IFtfdm0uX3YoX3ZtLl9zKF92bS50aXRsZSkpXSA6IF92bS5fdChcInRpdGxlXCIpXSwgMiksIF9jKCd1bCcsIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMildKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiA2MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9pbnB1dCA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xuXG5cdHZhciBfaW5wdXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5wdXQpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X2lucHV0Mi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfaW5wdXQyLmRlZmF1bHQubmFtZSwgX2lucHV0Mi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfaW5wdXQyLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiA2MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXyg2MiksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogNjIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfZW1pdHRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xuXG5cdHZhciBfZW1pdHRlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbWl0dGVyKTtcblxuXHR2YXIgX2NhbGNUZXh0YXJlYUhlaWdodCA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpO1xuXG5cdHZhciBfY2FsY1RleHRhcmVhSGVpZ2h0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NhbGNUZXh0YXJlYUhlaWdodCk7XG5cblx0dmFyIF9tZXJnZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjQpO1xuXG5cdHZhciBfbWVyZ2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWVyZ2UpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbElucHV0JyxcblxuXHQgIGNvbXBvbmVudE5hbWU6ICdFbElucHV0JyxcblxuXHQgIG1peGluczogW19lbWl0dGVyMi5kZWZhdWx0XSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG5cdCAgICAgIHRleHRhcmVhQ2FsY1N0eWxlOiB7fVxuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBwcm9wczoge1xuXHQgICAgdmFsdWU6IFtTdHJpbmcsIE51bWJlcl0sXG5cdCAgICBwbGFjZWhvbGRlcjogU3RyaW5nLFxuXHQgICAgc2l6ZTogU3RyaW5nLFxuXHQgICAgcmVzaXplOiBTdHJpbmcsXG5cdCAgICByZWFkb25seTogQm9vbGVhbixcblx0ICAgIGF1dG9mb2N1czogQm9vbGVhbixcblx0ICAgIGljb246IFN0cmluZyxcblx0ICAgIGRpc2FibGVkOiBCb29sZWFuLFxuXHQgICAgdHlwZToge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICd0ZXh0J1xuXHQgICAgfSxcblx0ICAgIG5hbWU6IFN0cmluZyxcblx0ICAgIGF1dG9zaXplOiB7XG5cdCAgICAgIHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLFxuXHQgICAgICBkZWZhdWx0OiBmYWxzZVxuXHQgICAgfSxcblx0ICAgIHJvd3M6IHtcblx0ICAgICAgdHlwZTogTnVtYmVyLFxuXHQgICAgICBkZWZhdWx0OiAyXG5cdCAgICB9LFxuXHQgICAgYXV0b0NvbXBsZXRlOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ29mZidcblx0ICAgIH0sXG5cdCAgICBmb3JtOiBTdHJpbmcsXG5cdCAgICBtYXhsZW5ndGg6IE51bWJlcixcblx0ICAgIG1pbmxlbmd0aDogTnVtYmVyLFxuXHQgICAgbWF4OiB7fSxcblx0ICAgIG1pbjoge30sXG5cdCAgICBzdGVwOiB7fSxcblx0ICAgIHZhbGlkYXRlRXZlbnQ6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIG9uSWNvbkNsaWNrOiBGdW5jdGlvblxuXHQgIH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgdmFsaWRhdGluZzogZnVuY3Rpb24gdmFsaWRhdGluZygpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudC52YWxpZGF0ZVN0YXRlID09PSAndmFsaWRhdGluZyc7XG5cdCAgICB9LFxuXHQgICAgdGV4dGFyZWFTdHlsZTogZnVuY3Rpb24gdGV4dGFyZWFTdHlsZSgpIHtcblx0ICAgICAgcmV0dXJuICgwLCBfbWVyZ2UyLmRlZmF1bHQpKHt9LCB0aGlzLnRleHRhcmVhQ2FsY1N0eWxlLCB7IHJlc2l6ZTogdGhpcy5yZXNpemUgfSk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHdhdGNoOiB7XG5cdCAgICAndmFsdWUnOiBmdW5jdGlvbiB2YWx1ZSh2YWwsIG9sZFZhbHVlKSB7XG5cdCAgICAgIHRoaXMuc2V0Q3VycmVudFZhbHVlKHZhbCk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGhhbmRsZUJsdXI6IGZ1bmN0aW9uIGhhbmRsZUJsdXIoZXZlbnQpIHtcblx0ICAgICAgdGhpcy4kZW1pdCgnYmx1cicsIGV2ZW50KTtcblx0ICAgICAgaWYgKHRoaXMudmFsaWRhdGVFdmVudCkge1xuXHQgICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5ibHVyJywgW3RoaXMuY3VycmVudFZhbHVlXSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBpbnB1dFNlbGVjdDogZnVuY3Rpb24gaW5wdXRTZWxlY3QoKSB7XG5cdCAgICAgIHRoaXMuJHJlZnMuaW5wdXQuc2VsZWN0KCk7XG5cdCAgICB9LFxuXHQgICAgcmVzaXplVGV4dGFyZWE6IGZ1bmN0aW9uIHJlc2l6ZVRleHRhcmVhKCkge1xuXHQgICAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcblx0ICAgICAgdmFyIGF1dG9zaXplID0gdGhpcy5hdXRvc2l6ZSxcblx0ICAgICAgICAgIHR5cGUgPSB0aGlzLnR5cGU7XG5cblx0ICAgICAgaWYgKCFhdXRvc2l6ZSB8fCB0eXBlICE9PSAndGV4dGFyZWEnKSByZXR1cm47XG5cdCAgICAgIHZhciBtaW5Sb3dzID0gYXV0b3NpemUubWluUm93cztcblx0ICAgICAgdmFyIG1heFJvd3MgPSBhdXRvc2l6ZS5tYXhSb3dzO1xuXG5cdCAgICAgIHRoaXMudGV4dGFyZWFDYWxjU3R5bGUgPSAoMCwgX2NhbGNUZXh0YXJlYUhlaWdodDIuZGVmYXVsdCkodGhpcy4kcmVmcy50ZXh0YXJlYSwgbWluUm93cywgbWF4Um93cyk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlRm9jdXM6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGV2ZW50KSB7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2ZvY3VzJywgZXZlbnQpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUlucHV0OiBmdW5jdGlvbiBoYW5kbGVJbnB1dChldmVudCkge1xuXHQgICAgICB2YXIgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuXHQgICAgICB0aGlzLnNldEN1cnJlbnRWYWx1ZSh2YWx1ZSk7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVJY29uQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUljb25DbGljayhldmVudCkge1xuXHQgICAgICBpZiAodGhpcy5vbkljb25DbGljaykge1xuXHQgICAgICAgIHRoaXMub25JY29uQ2xpY2soZXZlbnQpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2NsaWNrJywgZXZlbnQpO1xuXHQgICAgfSxcblx0ICAgIHNldEN1cnJlbnRWYWx1ZTogZnVuY3Rpb24gc2V0Q3VycmVudFZhbHVlKHZhbHVlKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgaWYgKHZhbHVlID09PSB0aGlzLmN1cnJlbnRWYWx1ZSkgcmV0dXJuO1xuXHQgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoXykge1xuXHQgICAgICAgIF90aGlzLnJlc2l6ZVRleHRhcmVhKCk7XG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHZhbHVlO1xuXHQgICAgICBpZiAodGhpcy52YWxpZGF0ZUV2ZW50KSB7XG5cdCAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIFt2YWx1ZV0pO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG5cdCAgICB0aGlzLiRvbignaW5wdXRTZWxlY3QnLCB0aGlzLmlucHV0U2VsZWN0KTtcblx0ICB9LFxuXHQgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdCAgICB0aGlzLnJlc2l6ZVRleHRhcmVhKCk7XG5cdCAgfVxuXHR9OyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG4vKioqLyB9LFxuLyogNjMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLmRlZmF1bHQgPSBjYWxjVGV4dGFyZWFIZWlnaHQ7XG5cdHZhciBoaWRkZW5UZXh0YXJlYSA9IHZvaWQgMDtcblxuXHR2YXIgSElEREVOX1NUWUxFID0gJ1xcbiAgaGVpZ2h0OjAgIWltcG9ydGFudDtcXG4gIHZpc2liaWxpdHk6aGlkZGVuICFpbXBvcnRhbnQ7XFxuICBvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudDtcXG4gIHBvc2l0aW9uOmFic29sdXRlICFpbXBvcnRhbnQ7XFxuICB6LWluZGV4Oi0xMDAwICFpbXBvcnRhbnQ7XFxuICB0b3A6MCAhaW1wb3J0YW50O1xcbiAgcmlnaHQ6MCAhaW1wb3J0YW50XFxuJztcblxuXHR2YXIgQ09OVEVYVF9TVFlMRSA9IFsnbGV0dGVyLXNwYWNpbmcnLCAnbGluZS1oZWlnaHQnLCAncGFkZGluZy10b3AnLCAncGFkZGluZy1ib3R0b20nLCAnZm9udC1mYW1pbHknLCAnZm9udC13ZWlnaHQnLCAnZm9udC1zaXplJywgJ3RleHQtcmVuZGVyaW5nJywgJ3RleHQtdHJhbnNmb3JtJywgJ3dpZHRoJywgJ3RleHQtaW5kZW50JywgJ3BhZGRpbmctbGVmdCcsICdwYWRkaW5nLXJpZ2h0JywgJ2JvcmRlci13aWR0aCcsICdib3gtc2l6aW5nJ107XG5cblx0ZnVuY3Rpb24gY2FsY3VsYXRlTm9kZVN0eWxpbmcodGFyZ2V0RWxlbWVudCkge1xuXHQgIHZhciBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhcmdldEVsZW1lbnQpO1xuXG5cdCAgdmFyIGJveFNpemluZyA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcblxuXHQgIHZhciBwYWRkaW5nU2l6ZSA9IHBhcnNlRmxvYXQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKSkgKyBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctdG9wJykpO1xuXG5cdCAgdmFyIGJvcmRlclNpemUgPSBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci1ib3R0b20td2lkdGgnKSkgKyBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JvcmRlci10b3Atd2lkdGgnKSk7XG5cblx0ICB2YXIgY29udGV4dFN0eWxlID0gQ09OVEVYVF9TVFlMRS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcblx0ICAgIHJldHVybiBuYW1lICsgJzonICsgc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcblx0ICB9KS5qb2luKCc7Jyk7XG5cblx0ICByZXR1cm4geyBjb250ZXh0U3R5bGU6IGNvbnRleHRTdHlsZSwgcGFkZGluZ1NpemU6IHBhZGRpbmdTaXplLCBib3JkZXJTaXplOiBib3JkZXJTaXplLCBib3hTaXppbmc6IGJveFNpemluZyB9O1xuXHR9XG5cblx0ZnVuY3Rpb24gY2FsY1RleHRhcmVhSGVpZ2h0KHRhcmdldEVsZW1lbnQpIHtcblx0ICB2YXIgbWluUm93cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDtcblx0ICB2YXIgbWF4Um93cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcblxuXHQgIGlmICghaGlkZGVuVGV4dGFyZWEpIHtcblx0ICAgIGhpZGRlblRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcblx0ICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlkZGVuVGV4dGFyZWEpO1xuXHQgIH1cblxuXHQgIHZhciBfY2FsY3VsYXRlTm9kZVN0eWxpbmcgPSBjYWxjdWxhdGVOb2RlU3R5bGluZyh0YXJnZXRFbGVtZW50KSxcblx0ICAgICAgcGFkZGluZ1NpemUgPSBfY2FsY3VsYXRlTm9kZVN0eWxpbmcucGFkZGluZ1NpemUsXG5cdCAgICAgIGJvcmRlclNpemUgPSBfY2FsY3VsYXRlTm9kZVN0eWxpbmcuYm9yZGVyU2l6ZSxcblx0ICAgICAgYm94U2l6aW5nID0gX2NhbGN1bGF0ZU5vZGVTdHlsaW5nLmJveFNpemluZyxcblx0ICAgICAgY29udGV4dFN0eWxlID0gX2NhbGN1bGF0ZU5vZGVTdHlsaW5nLmNvbnRleHRTdHlsZTtcblxuXHQgIGhpZGRlblRleHRhcmVhLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBjb250ZXh0U3R5bGUgKyAnOycgKyBISURERU5fU1RZTEUpO1xuXHQgIGhpZGRlblRleHRhcmVhLnZhbHVlID0gdGFyZ2V0RWxlbWVudC52YWx1ZSB8fCB0YXJnZXRFbGVtZW50LnBsYWNlaG9sZGVyIHx8ICcnO1xuXG5cdCAgdmFyIGhlaWdodCA9IGhpZGRlblRleHRhcmVhLnNjcm9sbEhlaWdodDtcblxuXHQgIGlmIChib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuXHQgICAgaGVpZ2h0ID0gaGVpZ2h0ICsgYm9yZGVyU2l6ZTtcblx0ICB9IGVsc2UgaWYgKGJveFNpemluZyA9PT0gJ2NvbnRlbnQtYm94Jykge1xuXHQgICAgaGVpZ2h0ID0gaGVpZ2h0IC0gcGFkZGluZ1NpemU7XG5cdCAgfVxuXG5cdCAgaGlkZGVuVGV4dGFyZWEudmFsdWUgPSAnJztcblx0ICB2YXIgc2luZ2xlUm93SGVpZ2h0ID0gaGlkZGVuVGV4dGFyZWEuc2Nyb2xsSGVpZ2h0IC0gcGFkZGluZ1NpemU7XG5cblx0ICBpZiAobWluUm93cyAhPT0gbnVsbCkge1xuXHQgICAgdmFyIG1pbkhlaWdodCA9IHNpbmdsZVJvd0hlaWdodCAqIG1pblJvd3M7XG5cdCAgICBpZiAoYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcblx0ICAgICAgbWluSGVpZ2h0ID0gbWluSGVpZ2h0ICsgcGFkZGluZ1NpemUgKyBib3JkZXJTaXplO1xuXHQgICAgfVxuXHQgICAgaGVpZ2h0ID0gTWF0aC5tYXgobWluSGVpZ2h0LCBoZWlnaHQpO1xuXHQgIH1cblx0ICBpZiAobWF4Um93cyAhPT0gbnVsbCkge1xuXHQgICAgdmFyIG1heEhlaWdodCA9IHNpbmdsZVJvd0hlaWdodCAqIG1heFJvd3M7XG5cdCAgICBpZiAoYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcblx0ICAgICAgbWF4SGVpZ2h0ID0gbWF4SGVpZ2h0ICsgcGFkZGluZ1NpemUgKyBib3JkZXJTaXplO1xuXHQgICAgfVxuXHQgICAgaGVpZ2h0ID0gTWF0aC5taW4obWF4SGVpZ2h0LCBoZWlnaHQpO1xuXHQgIH1cblxuXHQgIHJldHVybiB7IGhlaWdodDogaGVpZ2h0ICsgJ3B4JyB9O1xuXHR9O1xuXG4vKioqLyB9LFxuLyogNjQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL21lcmdlXCIpO1xuXG4vKioqLyB9LFxuLyogNjUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICBjbGFzczogW1xuXHQgICAgICBfdm0udHlwZSA9PT0gJ3RleHRhcmVhJyA/ICdlbC10ZXh0YXJlYScgOiAnZWwtaW5wdXQnLFxuXHQgICAgICBfdm0uc2l6ZSA/ICdlbC1pbnB1dC0tJyArIF92bS5zaXplIDogJycsIHtcblx0ICAgICAgICAnaXMtZGlzYWJsZWQnOiBfdm0uZGlzYWJsZWQsXG5cdCAgICAgICAgJ2VsLWlucHV0LWdyb3VwJzogX3ZtLiRzbG90cy5wcmVwZW5kIHx8IF92bS4kc2xvdHMuYXBwZW5kLFxuXHQgICAgICAgICdlbC1pbnB1dC1ncm91cC0tYXBwZW5kJzogX3ZtLiRzbG90cy5hcHBlbmQsXG5cdCAgICAgICAgJ2VsLWlucHV0LWdyb3VwLS1wcmVwZW5kJzogX3ZtLiRzbG90cy5wcmVwZW5kXG5cdCAgICAgIH1cblx0ICAgIF1cblx0ICB9LCBbKF92bS50eXBlICE9PSAndGV4dGFyZWEnKSA/IFsoX3ZtLiRzbG90cy5wcmVwZW5kKSA/IF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1pbnB1dC1ncm91cF9fcHJlcGVuZFwiXG5cdCAgfSwgW192bS5fdChcInByZXBlbmRcIildLCAyKSA6IF92bS5fZSgpLCBfdm0uX3QoXCJpY29uXCIsIFsoX3ZtLmljb24pID8gX2MoJ2knLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9faWNvblwiLFxuXHQgICAgY2xhc3M6IFtcblx0ICAgICAgJ2VsLWljb24tJyArIF92bS5pY29uLFxuXHQgICAgICBfdm0ub25JY29uQ2xpY2sgPyAnaXMtY2xpY2thYmxlJyA6ICcnXG5cdCAgICBdLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0uaGFuZGxlSWNvbkNsaWNrXG5cdCAgICB9XG5cdCAgfSkgOiBfdm0uX2UoKV0pLCAoX3ZtLnR5cGUgIT09ICd0ZXh0YXJlYScpID8gX2MoJ2lucHV0JywgX3ZtLl9iKHtcblx0ICAgIHJlZjogXCJpbnB1dFwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2lubmVyXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcImF1dG9jb21wbGV0ZVwiOiBfdm0uYXV0b0NvbXBsZXRlXG5cdCAgICB9LFxuXHQgICAgZG9tUHJvcHM6IHtcblx0ICAgICAgXCJ2YWx1ZVwiOiBfdm0uY3VycmVudFZhbHVlXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJpbnB1dFwiOiBfdm0uaGFuZGxlSW5wdXQsXG5cdCAgICAgIFwiZm9jdXNcIjogX3ZtLmhhbmRsZUZvY3VzLFxuXHQgICAgICBcImJsdXJcIjogX3ZtLmhhbmRsZUJsdXJcblx0ICAgIH1cblx0ICB9LCAnaW5wdXQnLCBfdm0uJHByb3BzKSkgOiBfdm0uX2UoKSwgKF92bS52YWxpZGF0aW5nKSA/IF9jKCdpJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2ljb24gZWwtaWNvbi1sb2FkaW5nXCJcblx0ICB9KSA6IF92bS5fZSgpLCAoX3ZtLiRzbG90cy5hcHBlbmQpID8gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0LWdyb3VwX19hcHBlbmRcIlxuXHQgIH0sIFtfdm0uX3QoXCJhcHBlbmRcIildLCAyKSA6IF92bS5fZSgpXSA6IF9jKCd0ZXh0YXJlYScsIF92bS5fYih7XG5cdCAgICByZWY6IFwidGV4dGFyZWFcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRleHRhcmVhX19pbm5lclwiLFxuXHQgICAgc3R5bGU6IChfdm0udGV4dGFyZWFTdHlsZSksXG5cdCAgICBkb21Qcm9wczoge1xuXHQgICAgICBcInZhbHVlXCI6IF92bS5jdXJyZW50VmFsdWVcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImlucHV0XCI6IF92bS5oYW5kbGVJbnB1dCxcblx0ICAgICAgXCJmb2N1c1wiOiBfdm0uaGFuZGxlRm9jdXMsXG5cdCAgICAgIFwiYmx1clwiOiBfdm0uaGFuZGxlQmx1clxuXHQgICAgfVxuXHQgIH0sICd0ZXh0YXJlYScsIF92bS4kcHJvcHMpKV0sIDIpXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDY2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2lucHV0TnVtYmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nyk7XG5cblx0dmFyIF9pbnB1dE51bWJlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbnB1dE51bWJlcik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfaW5wdXROdW1iZXIyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9pbnB1dE51bWJlcjIuZGVmYXVsdC5uYW1lLCBfaW5wdXROdW1iZXIyLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9pbnB1dE51bWJlcjIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDY3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDY4KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oNzApLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiA2OCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9pbnB1dCA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xuXG5cdHZhciBfaW5wdXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5wdXQpO1xuXG5cdHZhciBfZG9tID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG5cblx0dmFyIF9kZWJvdW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xuXG5cdHZhciBfZGVib3VuY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVib3VuY2UpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbElucHV0TnVtYmVyJyxcblx0ICBkaXJlY3RpdmVzOiB7XG5cdCAgICByZXBlYXRDbGljazoge1xuXHQgICAgICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuXHQgICAgICAgIHZhciBpbnRlcnZhbCA9IG51bGw7XG5cdCAgICAgICAgdmFyIHN0YXJ0VGltZSA9IHZvaWQgMDtcblx0ICAgICAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG5cdCAgICAgICAgICByZXR1cm4gdm5vZGUuY29udGV4dFtiaW5kaW5nLmV4cHJlc3Npb25dLmFwcGx5KCk7XG5cdCAgICAgICAgfTtcblx0ICAgICAgICB2YXIgY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcblx0ICAgICAgICAgIGlmIChuZXcgRGF0ZSgpIC0gc3RhcnRUaW1lIDwgMTAwKSB7XG5cdCAgICAgICAgICAgIGhhbmRsZXIoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuXHQgICAgICAgICAgaW50ZXJ2YWwgPSBudWxsO1xuXHQgICAgICAgIH07XG5cblx0ICAgICAgICAoMCwgX2RvbS5vbikoZWwsICdtb3VzZWRvd24nLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuXHQgICAgICAgICAgKDAsIF9kb20ub25jZSkoZG9jdW1lbnQsICdtb3VzZXVwJywgY2xlYXIpO1xuXHQgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG5cdCAgICAgICAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKGhhbmRsZXIsIDEwMCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXHQgIGNvbXBvbmVudHM6IHtcblx0ICAgIEVsSW5wdXQ6IF9pbnB1dDIuZGVmYXVsdFxuXHQgIH0sXG5cdCAgcHJvcHM6IHtcblx0ICAgIHN0ZXA6IHtcblx0ICAgICAgdHlwZTogTnVtYmVyLFxuXHQgICAgICBkZWZhdWx0OiAxXG5cdCAgICB9LFxuXHQgICAgbWF4OiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogSW5maW5pdHlcblx0ICAgIH0sXG5cdCAgICBtaW46IHtcblx0ICAgICAgdHlwZTogTnVtYmVyLFxuXHQgICAgICBkZWZhdWx0OiAtSW5maW5pdHlcblx0ICAgIH0sXG5cdCAgICB2YWx1ZToge1xuXHQgICAgICBkZWZhdWx0OiAwXG5cdCAgICB9LFxuXHQgICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG5cdCAgICBzaXplOiBTdHJpbmcsXG5cdCAgICBjb250cm9sczoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXHQgICAgZGVib3VuY2U6IHtcblx0ICAgICAgdHlwZTogTnVtYmVyLFxuXHQgICAgICBkZWZhdWx0OiAzMDBcblx0ICAgIH1cblx0ICB9LFxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBjdXJyZW50VmFsdWU6IDBcblx0ICAgIH07XG5cdCAgfSxcblxuXHQgIHdhdGNoOiB7XG5cdCAgICB2YWx1ZToge1xuXHQgICAgICBpbW1lZGlhdGU6IHRydWUsXG5cdCAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsdWUpIHtcblx0ICAgICAgICB2YXIgbmV3VmFsID0gTnVtYmVyKHZhbHVlKTtcblx0ICAgICAgICBpZiAoaXNOYU4obmV3VmFsKSkgcmV0dXJuO1xuXHQgICAgICAgIGlmIChuZXdWYWwgPj0gdGhpcy5tYXgpIG5ld1ZhbCA9IHRoaXMubWF4O1xuXHQgICAgICAgIGlmIChuZXdWYWwgPD0gdGhpcy5taW4pIG5ld1ZhbCA9IHRoaXMubWluO1xuXHQgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsO1xuXHQgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgbmV3VmFsKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIG1pbkRpc2FibGVkOiBmdW5jdGlvbiBtaW5EaXNhYmxlZCgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2RlY3JlYXNlKHRoaXMudmFsdWUsIHRoaXMuc3RlcCkgPCB0aGlzLm1pbjtcblx0ICAgIH0sXG5cdCAgICBtYXhEaXNhYmxlZDogZnVuY3Rpb24gbWF4RGlzYWJsZWQoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9pbmNyZWFzZSh0aGlzLnZhbHVlLCB0aGlzLnN0ZXApID4gdGhpcy5tYXg7XG5cdCAgICB9LFxuXHQgICAgcHJlY2lzaW9uOiBmdW5jdGlvbiBwcmVjaXNpb24oKSB7XG5cdCAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUsXG5cdCAgICAgICAgICBzdGVwID0gdGhpcy5zdGVwLFxuXHQgICAgICAgICAgZ2V0UHJlY2lzaW9uID0gdGhpcy5nZXRQcmVjaXNpb247XG5cblx0ICAgICAgcmV0dXJuIE1hdGgubWF4KGdldFByZWNpc2lvbih2YWx1ZSksIGdldFByZWNpc2lvbihzdGVwKSk7XG5cdCAgICB9XG5cdCAgfSxcblx0ICBtZXRob2RzOiB7XG5cdCAgICB0b1ByZWNpc2lvbjogZnVuY3Rpb24gdG9QcmVjaXNpb24obnVtLCBwcmVjaXNpb24pIHtcblx0ICAgICAgaWYgKHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkKSBwcmVjaXNpb24gPSB0aGlzLnByZWNpc2lvbjtcblx0ICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocGFyc2VGbG9hdChOdW1iZXIobnVtKS50b0ZpeGVkKHByZWNpc2lvbikpKTtcblx0ICAgIH0sXG5cdCAgICBnZXRQcmVjaXNpb246IGZ1bmN0aW9uIGdldFByZWNpc2lvbih2YWx1ZSkge1xuXHQgICAgICB2YXIgdmFsdWVTdHJpbmcgPSB2YWx1ZS50b1N0cmluZygpO1xuXHQgICAgICB2YXIgZG90UG9zaXRpb24gPSB2YWx1ZVN0cmluZy5pbmRleE9mKCcuJyk7XG5cdCAgICAgIHZhciBwcmVjaXNpb24gPSAwO1xuXHQgICAgICBpZiAoZG90UG9zaXRpb24gIT09IC0xKSB7XG5cdCAgICAgICAgcHJlY2lzaW9uID0gdmFsdWVTdHJpbmcubGVuZ3RoIC0gZG90UG9zaXRpb24gLSAxO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBwcmVjaXNpb247XG5cdCAgICB9LFxuXHQgICAgX2luY3JlYXNlOiBmdW5jdGlvbiBfaW5jcmVhc2UodmFsLCBzdGVwKSB7XG5cdCAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuY3VycmVudFZhbHVlO1xuXG5cdCAgICAgIHZhciBwcmVjaXNpb25GYWN0b3IgPSBNYXRoLnBvdygxMCwgdGhpcy5wcmVjaXNpb24pO1xuXG5cdCAgICAgIHJldHVybiB0aGlzLnRvUHJlY2lzaW9uKChwcmVjaXNpb25GYWN0b3IgKiB2YWwgKyBwcmVjaXNpb25GYWN0b3IgKiBzdGVwKSAvIHByZWNpc2lvbkZhY3Rvcik7XG5cdCAgICB9LFxuXHQgICAgX2RlY3JlYXNlOiBmdW5jdGlvbiBfZGVjcmVhc2UodmFsLCBzdGVwKSB7XG5cdCAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJykgcmV0dXJuIHRoaXMuY3VycmVudFZhbHVlO1xuXG5cdCAgICAgIHZhciBwcmVjaXNpb25GYWN0b3IgPSBNYXRoLnBvdygxMCwgdGhpcy5wcmVjaXNpb24pO1xuXG5cdCAgICAgIHJldHVybiB0aGlzLnRvUHJlY2lzaW9uKChwcmVjaXNpb25GYWN0b3IgKiB2YWwgLSBwcmVjaXNpb25GYWN0b3IgKiBzdGVwKSAvIHByZWNpc2lvbkZhY3Rvcik7XG5cdCAgICB9LFxuXHQgICAgaW5jcmVhc2U6IGZ1bmN0aW9uIGluY3JlYXNlKCkge1xuXHQgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLm1heERpc2FibGVkKSByZXR1cm47XG5cdCAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUgfHwgMDtcblx0ICAgICAgdmFyIG5ld1ZhbCA9IHRoaXMuX2luY3JlYXNlKHZhbHVlLCB0aGlzLnN0ZXApO1xuXHQgICAgICBpZiAobmV3VmFsID4gdGhpcy5tYXgpIHJldHVybjtcblx0ICAgICAgdGhpcy5zZXRDdXJyZW50VmFsdWUobmV3VmFsKTtcblx0ICAgIH0sXG5cdCAgICBkZWNyZWFzZTogZnVuY3Rpb24gZGVjcmVhc2UoKSB7XG5cdCAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMubWluRGlzYWJsZWQpIHJldHVybjtcblx0ICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZSB8fCAwO1xuXHQgICAgICB2YXIgbmV3VmFsID0gdGhpcy5fZGVjcmVhc2UodmFsdWUsIHRoaXMuc3RlcCk7XG5cdCAgICAgIGlmIChuZXdWYWwgPCB0aGlzLm1pbikgcmV0dXJuO1xuXHQgICAgICB0aGlzLnNldEN1cnJlbnRWYWx1ZShuZXdWYWwpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUJsdXI6IGZ1bmN0aW9uIGhhbmRsZUJsdXIoKSB7XG5cdCAgICAgIHRoaXMuJHJlZnMuaW5wdXQuc2V0Q3VycmVudFZhbHVlKHRoaXMuY3VycmVudFZhbHVlKTtcblx0ICAgIH0sXG5cdCAgICBzZXRDdXJyZW50VmFsdWU6IGZ1bmN0aW9uIHNldEN1cnJlbnRWYWx1ZShuZXdWYWwpIHtcblx0ICAgICAgdmFyIG9sZFZhbCA9IHRoaXMuY3VycmVudFZhbHVlO1xuXHQgICAgICBpZiAobmV3VmFsID49IHRoaXMubWF4KSBuZXdWYWwgPSB0aGlzLm1heDtcblx0ICAgICAgaWYgKG5ld1ZhbCA8PSB0aGlzLm1pbikgbmV3VmFsID0gdGhpcy5taW47XG5cdCAgICAgIGlmIChvbGRWYWwgPT09IG5ld1ZhbCkge1xuXHQgICAgICAgIHRoaXMuJHJlZnMuaW5wdXQuc2V0Q3VycmVudFZhbHVlKHRoaXMuY3VycmVudFZhbHVlKTtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgbmV3VmFsLCBvbGRWYWwpO1xuXHQgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIG5ld1ZhbCk7XG5cdCAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUlucHV0OiBmdW5jdGlvbiBoYW5kbGVJbnB1dCh2YWx1ZSkge1xuXHQgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIHZhciBuZXdWYWwgPSBOdW1iZXIodmFsdWUpO1xuXHQgICAgICBpZiAoIWlzTmFOKG5ld1ZhbCkpIHtcblx0ICAgICAgICB0aGlzLnNldEN1cnJlbnRWYWx1ZShuZXdWYWwpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuJHJlZnMuaW5wdXQuc2V0Q3VycmVudFZhbHVlKHRoaXMuY3VycmVudFZhbHVlKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cdCAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcblx0ICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgIHRoaXMuZGVib3VuY2VIYW5kbGVJbnB1dCA9ICgwLCBfZGVib3VuY2UyLmRlZmF1bHQpKHRoaXMuZGVib3VuY2UsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICBfdGhpcy5oYW5kbGVJbnB1dCh2YWx1ZSk7XG5cdCAgICB9KTtcblx0ICB9XG5cdH07IC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cbi8qKiovIH0sXG4vKiA2OSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidGhyb3R0bGUtZGVib3VuY2UvZGVib3VuY2VcIik7XG5cbi8qKiovIH0sXG4vKiA3MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0LW51bWJlclwiLFxuXHQgICAgY2xhc3M6IFtcblx0ICAgICAgX3ZtLnNpemUgPyAnZWwtaW5wdXQtbnVtYmVyLS0nICsgX3ZtLnNpemUgOiAnJywge1xuXHQgICAgICAgICdpcy1kaXNhYmxlZCc6IF92bS5kaXNhYmxlZFxuXHQgICAgICB9LCB7XG5cdCAgICAgICAgJ2lzLXdpdGhvdXQtY29udHJvbHMnOiAhX3ZtLmNvbnRyb2xzXG5cdCAgICAgIH1cblx0ICAgIF1cblx0ICB9LCBbKF92bS5jb250cm9scykgPyBfYygnc3BhbicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwicmVwZWF0LWNsaWNrXCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1yZXBlYXQtY2xpY2tcIixcblx0ICAgICAgdmFsdWU6IChfdm0uZGVjcmVhc2UpLFxuXHQgICAgICBleHByZXNzaW9uOiBcImRlY3JlYXNlXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZVwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2lzLWRpc2FibGVkJzogX3ZtLm1pbkRpc2FibGVkXG5cdCAgICB9XG5cdCAgfSwgW19jKCdpJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1taW51c1wiXG5cdCAgfSldKSA6IF92bS5fZSgpLCAoX3ZtLmNvbnRyb2xzKSA/IF9jKCdzcGFuJywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJyZXBlYXQtY2xpY2tcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXJlcGVhdC1jbGlja1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5pbmNyZWFzZSksXG5cdCAgICAgIGV4cHJlc3Npb246IFwiaW5jcmVhc2VcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlXCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaXMtZGlzYWJsZWQnOiBfdm0ubWF4RGlzYWJsZWRcblx0ICAgIH1cblx0ICB9LCBbX2MoJ2knLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1pY29uLXBsdXNcIlxuXHQgIH0pXSkgOiBfdm0uX2UoKSwgX2MoJ2VsLWlucHV0Jywge1xuXHQgICAgcmVmOiBcImlucHV0XCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInZhbHVlXCI6IF92bS5jdXJyZW50VmFsdWUsXG5cdCAgICAgIFwiZGlzYWJsZWRcIjogX3ZtLmRpc2FibGVkLFxuXHQgICAgICBcInNpemVcIjogX3ZtLnNpemUsXG5cdCAgICAgIFwibWF4XCI6IF92bS5tYXgsXG5cdCAgICAgIFwibWluXCI6IF92bS5taW5cblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImJsdXJcIjogX3ZtLmhhbmRsZUJsdXIsXG5cdCAgICAgIFwiaW5wdXRcIjogX3ZtLmRlYm91bmNlSGFuZGxlSW5wdXRcblx0ICAgIH0sXG5cdCAgICBuYXRpdmVPbjoge1xuXHQgICAgICBcImtleWRvd25cIjogW2Z1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIGlmICghKCdidXR0b24nIGluICRldmVudCkgJiYgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInVwXCIsIDM4KSkgeyByZXR1cm4gbnVsbDsgfVxuXHQgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIF92bS5pbmNyZWFzZSgkZXZlbnQpXG5cdCAgICAgIH0sIGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIGlmICghKCdidXR0b24nIGluICRldmVudCkgJiYgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImRvd25cIiwgNDApKSB7IHJldHVybiBudWxsOyB9XG5cdCAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgX3ZtLmRlY3JlYXNlKCRldmVudClcblx0ICAgICAgfV1cblx0ICAgIH1cblx0ICB9LCBbKF92bS4kc2xvdHMucHJlcGVuZCkgPyBfYygndGVtcGxhdGUnLCB7XG5cdCAgICBzbG90OiBcInByZXBlbmRcIlxuXHQgIH0sIFtfdm0uX3QoXCJwcmVwZW5kXCIpXSwgMikgOiBfdm0uX2UoKSwgKF92bS4kc2xvdHMuYXBwZW5kKSA/IF9jKCd0ZW1wbGF0ZScsIHtcblx0ICAgIHNsb3Q6IFwiYXBwZW5kXCJcblx0ICB9LCBbX3ZtLl90KFwiYXBwZW5kXCIpXSwgMikgOiBfdm0uX2UoKV0sIDIpXSwgMSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogNzEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfcmFkaW8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcblxuXHR2YXIgX3JhZGlvMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JhZGlvKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9yYWRpbzIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoJ2VsLXJhZGlvJywgX3JhZGlvMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfcmFkaW8yLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiA3MiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXyg3MyksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogNzMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfZW1pdHRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xuXG5cdHZhciBfZW1pdHRlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbWl0dGVyKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxSYWRpbycsXG5cblx0ICBtaXhpbnM6IFtfZW1pdHRlcjIuZGVmYXVsdF0sXG5cblx0ICBjb21wb25lbnROYW1lOiAnRWxSYWRpbycsXG5cblx0ICBwcm9wczoge1xuXHQgICAgdmFsdWU6IHt9LFxuXHQgICAgbGFiZWw6IHt9LFxuXHQgICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG5cdCAgICBuYW1lOiBTdHJpbmdcblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIGZvY3VzOiBmYWxzZVxuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgaXNHcm91cDogZnVuY3Rpb24gaXNHcm91cCgpIHtcblx0ICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcblx0ICAgICAgd2hpbGUgKHBhcmVudCkge1xuXHQgICAgICAgIGlmIChwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSAhPT0gJ0VsUmFkaW9Hcm91cCcpIHtcblx0ICAgICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLl9yYWRpb0dyb3VwID0gcGFyZW50O1xuXHQgICAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgIH0sXG5cblxuXHQgICAgbW9kZWw6IHtcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuaXNHcm91cCA/IHRoaXMuX3JhZGlvR3JvdXAudmFsdWUgOiB0aGlzLnZhbHVlO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWwpIHtcblx0ICAgICAgICBpZiAodGhpcy5pc0dyb3VwKSB7XG5cdCAgICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbFJhZGlvR3JvdXAnLCAnaW5wdXQnLCBbdmFsXSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cblx0ICAgIGlzRGlzYWJsZWQ6IGZ1bmN0aW9uIGlzRGlzYWJsZWQoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLmlzR3JvdXAgPyB0aGlzLl9yYWRpb0dyb3VwLmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWQgOiB0aGlzLmRpc2FibGVkO1xuXHQgICAgfVxuXHQgIH1cblx0fTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuLyoqKi8gfSxcbi8qIDc0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnbGFiZWwnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1yYWRpb1wiXG5cdCAgfSwgW19jKCdzcGFuJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmFkaW9fX2lucHV0XCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaXMtZGlzYWJsZWQnOiBfdm0uaXNEaXNhYmxlZCxcblx0ICAgICAgJ2lzLWNoZWNrZWQnOiBfdm0ubW9kZWwgPT09IF92bS5sYWJlbCxcblx0ICAgICAgICAnaXMtZm9jdXMnOiBfdm0uZm9jdXNcblx0ICAgIH1cblx0ICB9LCBbX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1yYWRpb19faW5uZXJcIlxuXHQgIH0pLCBfYygnaW5wdXQnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcIm1vZGVsXCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuXHQgICAgICB2YWx1ZTogKF92bS5tb2RlbCksXG5cdCAgICAgIGV4cHJlc3Npb246IFwibW9kZWxcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1yYWRpb19fb3JpZ2luYWxcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidHlwZVwiOiBcInJhZGlvXCIsXG5cdCAgICAgIFwibmFtZVwiOiBfdm0ubmFtZSxcblx0ICAgICAgXCJkaXNhYmxlZFwiOiBfdm0uaXNEaXNhYmxlZFxuXHQgICAgfSxcblx0ICAgIGRvbVByb3BzOiB7XG5cdCAgICAgIFwidmFsdWVcIjogX3ZtLmxhYmVsLFxuXHQgICAgICBcImNoZWNrZWRcIjogX3ZtLl9xKF92bS5tb2RlbCwgX3ZtLmxhYmVsKVxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiZm9jdXNcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmZvY3VzID0gdHJ1ZVxuXHQgICAgICB9LFxuXHQgICAgICBcImJsdXJcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmZvY3VzID0gZmFsc2Vcblx0ICAgICAgfSxcblx0ICAgICAgXCJfX2NcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLm1vZGVsID0gX3ZtLmxhYmVsXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KV0pLCBfYygnc3BhbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhZGlvX19sYWJlbFwiXG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIiksICghX3ZtLiRzbG90cy5kZWZhdWx0KSA/IFtfdm0uX3YoX3ZtLl9zKF92bS5sYWJlbCkpXSA6IF92bS5fZSgpXSwgMildKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiA3NSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9yYWRpb0dyb3VwID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nik7XG5cblx0dmFyIF9yYWRpb0dyb3VwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3JhZGlvR3JvdXApO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X3JhZGlvR3JvdXAyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9yYWRpb0dyb3VwMi5kZWZhdWx0Lm5hbWUsIF9yYWRpb0dyb3VwMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfcmFkaW9Hcm91cDIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDc2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oNzgpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiA3NyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cblx0dmFyIF9lbWl0dGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VtaXR0ZXIpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbFJhZGlvR3JvdXAnLFxuXG5cdCAgY29tcG9uZW50TmFtZTogJ0VsUmFkaW9Hcm91cCcsXG5cblx0ICBtaXhpbnM6IFtfZW1pdHRlcjIuZGVmYXVsdF0sXG5cblx0ICBwcm9wczoge1xuXHQgICAgdmFsdWU6IHt9LFxuXHQgICAgc2l6ZTogU3RyaW5nLFxuXHQgICAgZmlsbDogU3RyaW5nLFxuXHQgICAgdGV4dENvbG9yOiBTdHJpbmcsXG5cdCAgICBkaXNhYmxlZDogQm9vbGVhblxuXHQgIH0sXG5cdCAgd2F0Y2g6IHtcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShfdmFsdWUpIHtcblx0ICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgX3ZhbHVlKTtcblx0ICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIFt0aGlzLnZhbHVlXSk7XG5cdCAgICB9XG5cdCAgfVxuXHR9OyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG4vKioqLyB9LFxuLyogNzggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1yYWRpby1ncm91cFwiXG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiA3OSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9yYWRpb0J1dHRvbiA9IF9fd2VicGFja19yZXF1aXJlX18oODApO1xuXG5cdHZhciBfcmFkaW9CdXR0b24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmFkaW9CdXR0b24pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X3JhZGlvQnV0dG9uMi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfcmFkaW9CdXR0b24yLmRlZmF1bHQubmFtZSwgX3JhZGlvQnV0dG9uMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfcmFkaW9CdXR0b24yLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiA4MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXyg4MSksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDgyKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogODEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxSYWRpb0J1dHRvbicsXG5cblx0ICBwcm9wczoge1xuXHQgICAgbGFiZWw6IHt9LFxuXHQgICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG5cdCAgICBuYW1lOiBTdHJpbmdcblx0ICB9LFxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICB2YWx1ZToge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fcmFkaW9Hcm91cC52YWx1ZTtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcblx0ICAgICAgICB0aGlzLl9yYWRpb0dyb3VwLiRlbWl0KCdpbnB1dCcsIHZhbHVlKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIF9yYWRpb0dyb3VwOiBmdW5jdGlvbiBfcmFkaW9Hcm91cCgpIHtcblx0ICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcblx0ICAgICAgd2hpbGUgKHBhcmVudCkge1xuXHQgICAgICAgIGlmIChwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSAhPT0gJ0VsUmFkaW9Hcm91cCcpIHtcblx0ICAgICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICByZXR1cm4gcGFyZW50O1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICB9LFxuXHQgICAgYWN0aXZlU3R5bGU6IGZ1bmN0aW9uIGFjdGl2ZVN0eWxlKCkge1xuXHQgICAgICByZXR1cm4ge1xuXHQgICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5fcmFkaW9Hcm91cC5maWxsIHx8ICcnLFxuXHQgICAgICAgIGJvcmRlckNvbG9yOiB0aGlzLl9yYWRpb0dyb3VwLmZpbGwgfHwgJycsXG5cdCAgICAgICAgYm94U2hhZG93OiB0aGlzLl9yYWRpb0dyb3VwLmZpbGwgPyAnLTFweCAwIDAgMCAnICsgdGhpcy5fcmFkaW9Hcm91cC5maWxsIDogJycsXG5cdCAgICAgICAgY29sb3I6IHRoaXMuX3JhZGlvR3JvdXAudGV4dENvbG9yIHx8ICcnXG5cdCAgICAgIH07XG5cdCAgICB9LFxuXHQgICAgc2l6ZTogZnVuY3Rpb24gc2l6ZSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX3JhZGlvR3JvdXAuc2l6ZTtcblx0ICAgIH0sXG5cdCAgICBpc0Rpc2FibGVkOiBmdW5jdGlvbiBpc0Rpc2FibGVkKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCB0aGlzLl9yYWRpb0dyb3VwLmRpc2FibGVkO1xuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDgyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnbGFiZWwnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1yYWRpby1idXR0b25cIixcblx0ICAgIGNsYXNzOiBbXG5cdCAgICAgIF92bS5zaXplID8gJ2VsLXJhZGlvLWJ1dHRvbi0tJyArIF92bS5zaXplIDogJycsIHtcblx0ICAgICAgICAnaXMtYWN0aXZlJzogX3ZtLnZhbHVlID09PSBfdm0ubGFiZWxcblx0ICAgICAgfSwge1xuXHQgICAgICAgICdpcy1kaXNhYmxlZCc6IF92bS5pc0Rpc2FibGVkXG5cdCAgICAgIH1cblx0ICAgIF1cblx0ICB9LCBbX2MoJ2lucHV0Jywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJtb2RlbFwiLFxuXHQgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcblx0ICAgICAgdmFsdWU6IChfdm0udmFsdWUpLFxuXHQgICAgICBleHByZXNzaW9uOiBcInZhbHVlXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmFkaW8tYnV0dG9uX19vcmlnLXJhZGlvXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInR5cGVcIjogXCJyYWRpb1wiLFxuXHQgICAgICBcIm5hbWVcIjogX3ZtLm5hbWUsXG5cdCAgICAgIFwiZGlzYWJsZWRcIjogX3ZtLmlzRGlzYWJsZWRcblx0ICAgIH0sXG5cdCAgICBkb21Qcm9wczoge1xuXHQgICAgICBcInZhbHVlXCI6IF92bS5sYWJlbCxcblx0ICAgICAgXCJjaGVja2VkXCI6IF92bS5fcShfdm0udmFsdWUsIF92bS5sYWJlbClcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcIl9fY1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0udmFsdWUgPSBfdm0ubGFiZWxcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pLCBfYygnc3BhbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhZGlvLWJ1dHRvbl9faW5uZXJcIixcblx0ICAgIHN0eWxlOiAoX3ZtLnZhbHVlID09PSBfdm0ubGFiZWwgPyBfdm0uYWN0aXZlU3R5bGUgOiBudWxsKVxuXHQgIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpLCAoIV92bS4kc2xvdHMuZGVmYXVsdCkgPyBbX3ZtLl92KF92bS5fcyhfdm0ubGFiZWwpKV0gOiBfdm0uX2UoKV0sIDIpXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogODMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfY2hlY2tib3ggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg0KTtcblxuXHR2YXIgX2NoZWNrYm94MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NoZWNrYm94KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9jaGVja2JveDIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX2NoZWNrYm94Mi5kZWZhdWx0Lm5hbWUsIF9jaGVja2JveDIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX2NoZWNrYm94Mi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogODQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oODUpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXyg4NiksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDg1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2VtaXR0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblxuXHR2YXIgX2VtaXR0ZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW1pdHRlcik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsQ2hlY2tib3gnLFxuXG5cdCAgbWl4aW5zOiBbX2VtaXR0ZXIyLmRlZmF1bHRdLFxuXG5cdCAgY29tcG9uZW50TmFtZTogJ0VsQ2hlY2tib3gnLFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHNlbGZNb2RlbDogZmFsc2UsXG5cdCAgICAgIGZvY3VzOiBmYWxzZVxuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgbW9kZWw6IHtcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuaXNHcm91cCA/IHRoaXMuc3RvcmUgOiB0aGlzLnZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5zZWxmTW9kZWw7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbCkge1xuXHQgICAgICAgIGlmICh0aGlzLmlzR3JvdXApIHtcblx0ICAgICAgICAgIHZhciBpc0xpbWl0RXhjZWVkZWQgPSBmYWxzZTtcblx0ICAgICAgICAgIHRoaXMuX2NoZWNrYm94R3JvdXAubWluICE9PSB1bmRlZmluZWQgJiYgdmFsLmxlbmd0aCA8IHRoaXMuX2NoZWNrYm94R3JvdXAubWluICYmIChpc0xpbWl0RXhjZWVkZWQgPSB0cnVlKTtcblxuXHQgICAgICAgICAgdGhpcy5fY2hlY2tib3hHcm91cC5tYXggIT09IHVuZGVmaW5lZCAmJiB2YWwubGVuZ3RoID4gdGhpcy5fY2hlY2tib3hHcm91cC5tYXggJiYgKGlzTGltaXRFeGNlZWRlZCA9IHRydWUpO1xuXG5cdCAgICAgICAgICBpc0xpbWl0RXhjZWVkZWQgPT09IGZhbHNlICYmIHRoaXMuZGlzcGF0Y2goJ0VsQ2hlY2tib3hHcm91cCcsICdpbnB1dCcsIFt2YWxdKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpO1xuXHQgICAgICAgICAgdGhpcy5zZWxmTW9kZWwgPSB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXG5cdCAgICBpc0NoZWNrZWQ6IGZ1bmN0aW9uIGlzQ2hlY2tlZCgpIHtcblx0ICAgICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwodGhpcy5tb2RlbCkgPT09ICdbb2JqZWN0IEJvb2xlYW5dJykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuXHQgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5tb2RlbCkpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5pbmRleE9mKHRoaXMubGFiZWwpID4gLTE7XG5cdCAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0aGlzLm1vZGVsICE9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5tb2RlbCA9PT0gdGhpcy50cnVlTGFiZWw7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBpc0dyb3VwOiBmdW5jdGlvbiBpc0dyb3VwKCkge1xuXHQgICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuXHQgICAgICB3aGlsZSAocGFyZW50KSB7XG5cdCAgICAgICAgaWYgKHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lICE9PSAnRWxDaGVja2JveEdyb3VwJykge1xuXHQgICAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuX2NoZWNrYm94R3JvdXAgPSBwYXJlbnQ7XG5cdCAgICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgfSxcblx0ICAgIHN0b3JlOiBmdW5jdGlvbiBzdG9yZSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXAgPyB0aGlzLl9jaGVja2JveEdyb3VwLnZhbHVlIDogdGhpcy52YWx1ZTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIHZhbHVlOiB7fSxcblx0ICAgIGxhYmVsOiB7fSxcblx0ICAgIGluZGV0ZXJtaW5hdGU6IEJvb2xlYW4sXG5cdCAgICBkaXNhYmxlZDogQm9vbGVhbixcblx0ICAgIGNoZWNrZWQ6IEJvb2xlYW4sXG5cdCAgICBuYW1lOiBTdHJpbmcsXG5cdCAgICB0cnVlTGFiZWw6IFtTdHJpbmcsIE51bWJlcl0sXG5cdCAgICBmYWxzZUxhYmVsOiBbU3RyaW5nLCBOdW1iZXJdXG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGFkZFRvU3RvcmU6IGZ1bmN0aW9uIGFkZFRvU3RvcmUoKSB7XG5cdCAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMubW9kZWwpICYmIHRoaXMubW9kZWwuaW5kZXhPZih0aGlzLmxhYmVsKSA9PT0gLTEpIHtcblx0ICAgICAgICB0aGlzLm1vZGVsLnB1c2godGhpcy5sYWJlbCk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMudHJ1ZUxhYmVsIHx8IHRydWU7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShldikge1xuXHQgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGV2KTtcblx0ICAgICAgaWYgKHRoaXMuaXNHcm91cCkge1xuXHQgICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7XG5cdCAgICAgICAgICBfdGhpcy5kaXNwYXRjaCgnRWxDaGVja2JveEdyb3VwJywgJ2NoYW5nZScsIFtfdGhpcy5fY2hlY2tib3hHcm91cC52YWx1ZV0pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG5cdCAgICB0aGlzLmNoZWNrZWQgJiYgdGhpcy5hZGRUb1N0b3JlKCk7XG5cdCAgfVxuXHR9OyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG4vKioqLyB9LFxuLyogODYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdsYWJlbCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94XCJcblx0ICB9LCBbX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveF9faW5wdXRcIixcblx0ICAgIGNsYXNzOiB7XG5cdCAgICAgICdpcy1kaXNhYmxlZCc6IF92bS5kaXNhYmxlZCxcblx0ICAgICAgJ2lzLWNoZWNrZWQnOiBfdm0uaXNDaGVja2VkLFxuXHQgICAgICAnaXMtaW5kZXRlcm1pbmF0ZSc6IF92bS5pbmRldGVybWluYXRlLFxuXHQgICAgICAnaXMtZm9jdXMnOiBfdm0uZm9jdXNcblx0ICAgIH1cblx0ICB9LCBbX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveF9faW5uZXJcIlxuXHQgIH0pLCAoX3ZtLnRydWVMYWJlbCB8fCBfdm0uZmFsc2VMYWJlbCkgPyBfYygnaW5wdXQnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcIm1vZGVsXCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuXHQgICAgICB2YWx1ZTogKF92bS5tb2RlbCksXG5cdCAgICAgIGV4cHJlc3Npb246IFwibW9kZWxcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveF9fb3JpZ2luYWxcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidHlwZVwiOiBcImNoZWNrYm94XCIsXG5cdCAgICAgIFwibmFtZVwiOiBfdm0ubmFtZSxcblx0ICAgICAgXCJkaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWQsXG5cdCAgICAgIFwidHJ1ZS12YWx1ZVwiOiBfdm0udHJ1ZUxhYmVsLFxuXHQgICAgICBcImZhbHNlLXZhbHVlXCI6IF92bS5mYWxzZUxhYmVsXG5cdCAgICB9LFxuXHQgICAgZG9tUHJvcHM6IHtcblx0ICAgICAgXCJjaGVja2VkXCI6IEFycmF5LmlzQXJyYXkoX3ZtLm1vZGVsKSA/IF92bS5faShfdm0ubW9kZWwsIG51bGwpID4gLTEgOiBfdm0uX3EoX3ZtLm1vZGVsLCBfdm0udHJ1ZUxhYmVsKVxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2hhbmdlXCI6IF92bS5oYW5kbGVDaGFuZ2UsXG5cdCAgICAgIFwiZm9jdXNcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmZvY3VzID0gdHJ1ZVxuXHQgICAgICB9LFxuXHQgICAgICBcImJsdXJcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmZvY3VzID0gZmFsc2Vcblx0ICAgICAgfSxcblx0ICAgICAgXCJfX2NcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgdmFyICQkYSA9IF92bS5tb2RlbCxcblx0ICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuXHQgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gKF92bS50cnVlTGFiZWwpIDogKF92bS5mYWxzZUxhYmVsKTtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG5cdCAgICAgICAgICB2YXIgJCR2ID0gbnVsbCxcblx0ICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KTtcblx0ICAgICAgICAgIGlmICgkJGMpIHtcblx0ICAgICAgICAgICAgJCRpIDwgMCAmJiAoX3ZtLm1vZGVsID0gJCRhLmNvbmNhdCgkJHYpKVxuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgJCRpID4gLTEgJiYgKF92bS5tb2RlbCA9ICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBfdm0ubW9kZWwgPSAkJGNcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KSA6IF9jKCdpbnB1dCcsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwibW9kZWxcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLm1vZGVsKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJtb2RlbFwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94X19vcmlnaW5hbFwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJ0eXBlXCI6IFwiY2hlY2tib3hcIixcblx0ICAgICAgXCJkaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWQsXG5cdCAgICAgIFwibmFtZVwiOiBfdm0ubmFtZVxuXHQgICAgfSxcblx0ICAgIGRvbVByb3BzOiB7XG5cdCAgICAgIFwidmFsdWVcIjogX3ZtLmxhYmVsLFxuXHQgICAgICBcImNoZWNrZWRcIjogQXJyYXkuaXNBcnJheShfdm0ubW9kZWwpID8gX3ZtLl9pKF92bS5tb2RlbCwgX3ZtLmxhYmVsKSA+IC0xIDogKF92bS5tb2RlbClcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNoYW5nZVwiOiBfdm0uaGFuZGxlQ2hhbmdlLFxuXHQgICAgICBcImZvY3VzXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5mb2N1cyA9IHRydWVcblx0ICAgICAgfSxcblx0ICAgICAgXCJibHVyXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5mb2N1cyA9IGZhbHNlXG5cdCAgICAgIH0sXG5cdCAgICAgIFwiX19jXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIHZhciAkJGEgPSBfdm0ubW9kZWwsXG5cdCAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcblx0ICAgICAgICAgICQkYyA9ICQkZWwuY2hlY2tlZCA/ICh0cnVlKSA6IChmYWxzZSk7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJCRhKSkge1xuXHQgICAgICAgICAgdmFyICQkdiA9IF92bS5sYWJlbCxcblx0ICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KTtcblx0ICAgICAgICAgIGlmICgkJGMpIHtcblx0ICAgICAgICAgICAgJCRpIDwgMCAmJiAoX3ZtLm1vZGVsID0gJCRhLmNvbmNhdCgkJHYpKVxuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgJCRpID4gLTEgJiYgKF92bS5tb2RlbCA9ICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBfdm0ubW9kZWwgPSAkJGNcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KV0pLCAoX3ZtLiRzbG90cy5kZWZhdWx0IHx8IF92bS5sYWJlbCkgPyBfYygnc3BhbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94X19sYWJlbFwiXG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIiksICghX3ZtLiRzbG90cy5kZWZhdWx0KSA/IFtfdm0uX3YoX3ZtLl9zKF92bS5sYWJlbCkpXSA6IF92bS5fZSgpXSwgMikgOiBfdm0uX2UoKV0pXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDg3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2NoZWNrYm94QnV0dG9uID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XG5cblx0dmFyIF9jaGVja2JveEJ1dHRvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jaGVja2JveEJ1dHRvbik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfY2hlY2tib3hCdXR0b24yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9jaGVja2JveEJ1dHRvbjIuZGVmYXVsdC5uYW1lLCBfY2hlY2tib3hCdXR0b24yLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9jaGVja2JveEJ1dHRvbjIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDg4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oOTApLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiA4OSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cblx0dmFyIF9lbWl0dGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VtaXR0ZXIpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbENoZWNrYm94QnV0dG9uJyxcblxuXHQgIG1peGluczogW19lbWl0dGVyMi5kZWZhdWx0XSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBzZWxmTW9kZWw6IGZhbHNlLFxuXHQgICAgICBmb2N1czogZmFsc2Vcblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIHZhbHVlOiB7fSxcblx0ICAgIGxhYmVsOiB7fSxcblx0ICAgIGRpc2FibGVkOiBCb29sZWFuLFxuXHQgICAgY2hlY2tlZDogQm9vbGVhbixcblx0ICAgIG5hbWU6IFN0cmluZyxcblx0ICAgIHRydWVMYWJlbDogW1N0cmluZywgTnVtYmVyXSxcblx0ICAgIGZhbHNlTGFiZWw6IFtTdHJpbmcsIE51bWJlcl1cblx0ICB9LFxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBtb2RlbDoge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tib3hHcm91cCA/IHRoaXMuc3RvcmUgOiB0aGlzLnZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5zZWxmTW9kZWw7XG5cdCAgICAgIH0sXG5cdCAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbCkge1xuXHQgICAgICAgIGlmICh0aGlzLl9jaGVja2JveEdyb3VwKSB7XG5cdCAgICAgICAgICB2YXIgaXNMaW1pdEV4Y2VlZGVkID0gZmFsc2U7XG5cdCAgICAgICAgICB0aGlzLl9jaGVja2JveEdyb3VwLm1pbiAhPT0gdW5kZWZpbmVkICYmIHZhbC5sZW5ndGggPCB0aGlzLl9jaGVja2JveEdyb3VwLm1pbiAmJiAoaXNMaW1pdEV4Y2VlZGVkID0gdHJ1ZSk7XG5cblx0ICAgICAgICAgIHRoaXMuX2NoZWNrYm94R3JvdXAubWF4ICE9PSB1bmRlZmluZWQgJiYgdmFsLmxlbmd0aCA+IHRoaXMuX2NoZWNrYm94R3JvdXAubWF4ICYmIChpc0xpbWl0RXhjZWVkZWQgPSB0cnVlKTtcblxuXHQgICAgICAgICAgaXNMaW1pdEV4Y2VlZGVkID09PSBmYWxzZSAmJiB0aGlzLmRpc3BhdGNoKCdFbENoZWNrYm94R3JvdXAnLCAnaW5wdXQnLCBbdmFsXSk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgdGhpcy5zZWxmTW9kZWwgPSB2YWw7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXG5cdCAgICBpc0NoZWNrZWQ6IGZ1bmN0aW9uIGlzQ2hlY2tlZCgpIHtcblx0ICAgICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwodGhpcy5tb2RlbCkgPT09ICdbb2JqZWN0IEJvb2xlYW5dJykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuXHQgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5tb2RlbCkpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5pbmRleE9mKHRoaXMubGFiZWwpID4gLTE7XG5cdCAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0aGlzLm1vZGVsICE9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5tb2RlbCA9PT0gdGhpcy50cnVlTGFiZWw7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBfY2hlY2tib3hHcm91cDogZnVuY3Rpb24gX2NoZWNrYm94R3JvdXAoKSB7XG5cdCAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG5cdCAgICAgIHdoaWxlIChwYXJlbnQpIHtcblx0ICAgICAgICBpZiAocGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUgIT09ICdFbENoZWNrYm94R3JvdXAnKSB7XG5cdCAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgcmV0dXJuIHBhcmVudDtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgfSxcblx0ICAgIHN0b3JlOiBmdW5jdGlvbiBzdG9yZSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXAgPyB0aGlzLl9jaGVja2JveEdyb3VwLnZhbHVlIDogdGhpcy52YWx1ZTtcblx0ICAgIH0sXG5cdCAgICBhY3RpdmVTdHlsZTogZnVuY3Rpb24gYWN0aXZlU3R5bGUoKSB7XG5cdCAgICAgIHJldHVybiB7XG5cdCAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLl9jaGVja2JveEdyb3VwLmZpbGwgfHwgJycsXG5cdCAgICAgICAgYm9yZGVyQ29sb3I6IHRoaXMuX2NoZWNrYm94R3JvdXAuZmlsbCB8fCAnJyxcblx0ICAgICAgICBjb2xvcjogdGhpcy5fY2hlY2tib3hHcm91cC50ZXh0Q29sb3IgfHwgJycsXG5cdCAgICAgICAgJ2JveC1zaGFkb3cnOiAnLTFweCAwIDAgMCAnICsgdGhpcy5fY2hlY2tib3hHcm91cC5maWxsXG5cblx0ICAgICAgfTtcblx0ICAgIH0sXG5cdCAgICBzaXplOiBmdW5jdGlvbiBzaXplKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fY2hlY2tib3hHcm91cC5zaXplO1xuXHQgICAgfVxuXHQgIH0sXG5cdCAgbWV0aG9kczoge1xuXHQgICAgYWRkVG9TdG9yZTogZnVuY3Rpb24gYWRkVG9TdG9yZSgpIHtcblx0ICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5tb2RlbCkgJiYgdGhpcy5tb2RlbC5pbmRleE9mKHRoaXMubGFiZWwpID09PSAtMSkge1xuXHQgICAgICAgIHRoaXMubW9kZWwucHVzaCh0aGlzLmxhYmVsKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy50cnVlTGFiZWwgfHwgdHJ1ZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGV2KSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgZXYpO1xuXHQgICAgICBpZiAodGhpcy5fY2hlY2tib3hHcm91cCkge1xuXHQgICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7XG5cdCAgICAgICAgICBfdGhpcy5kaXNwYXRjaCgnRWxDaGVja2JveEdyb3VwJywgJ2NoYW5nZScsIFtfdGhpcy5fY2hlY2tib3hHcm91cC52YWx1ZV0pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG5cdCAgICB0aGlzLmNoZWNrZWQgJiYgdGhpcy5hZGRUb1N0b3JlKCk7XG5cdCAgfVxuXHR9OyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG4vKioqLyB9LFxuLyogOTAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdsYWJlbCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94LWJ1dHRvblwiLFxuXHQgICAgY2xhc3M6IFtcblx0ICAgICAgX3ZtLnNpemUgPyAnZWwtY2hlY2tib3gtYnV0dG9uLS0nICsgX3ZtLnNpemUgOiAnJywge1xuXHQgICAgICAgICdpcy1kaXNhYmxlZCc6IF92bS5kaXNhYmxlZFxuXHQgICAgICB9LCB7XG5cdCAgICAgICAgJ2lzLWNoZWNrZWQnOiBfdm0uaXNDaGVja2VkXG5cdCAgICAgIH0sIHtcblx0ICAgICAgICAnaXMtZm9jdXMnOiBfdm0uZm9jdXNcblx0ICAgICAgfSBdXG5cdCAgfSwgWyhfdm0udHJ1ZUxhYmVsIHx8IF92bS5mYWxzZUxhYmVsKSA/IF9jKCdpbnB1dCcsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwibW9kZWxcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLm1vZGVsKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJtb2RlbFwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94LWJ1dHRvbl9fb3JpZ2luYWxcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidHlwZVwiOiBcImNoZWNrYm94XCIsXG5cdCAgICAgIFwibmFtZVwiOiBfdm0ubmFtZSxcblx0ICAgICAgXCJkaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWQsXG5cdCAgICAgIFwidHJ1ZS12YWx1ZVwiOiBfdm0udHJ1ZUxhYmVsLFxuXHQgICAgICBcImZhbHNlLXZhbHVlXCI6IF92bS5mYWxzZUxhYmVsXG5cdCAgICB9LFxuXHQgICAgZG9tUHJvcHM6IHtcblx0ICAgICAgXCJjaGVja2VkXCI6IEFycmF5LmlzQXJyYXkoX3ZtLm1vZGVsKSA/IF92bS5faShfdm0ubW9kZWwsIG51bGwpID4gLTEgOiBfdm0uX3EoX3ZtLm1vZGVsLCBfdm0udHJ1ZUxhYmVsKVxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2hhbmdlXCI6IF92bS5oYW5kbGVDaGFuZ2UsXG5cdCAgICAgIFwiZm9jdXNcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmZvY3VzID0gdHJ1ZVxuXHQgICAgICB9LFxuXHQgICAgICBcImJsdXJcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmZvY3VzID0gZmFsc2Vcblx0ICAgICAgfSxcblx0ICAgICAgXCJfX2NcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgdmFyICQkYSA9IF92bS5tb2RlbCxcblx0ICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuXHQgICAgICAgICAgJCRjID0gJCRlbC5jaGVja2VkID8gKF92bS50cnVlTGFiZWwpIDogKF92bS5mYWxzZUxhYmVsKTtcblx0ICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG5cdCAgICAgICAgICB2YXIgJCR2ID0gbnVsbCxcblx0ICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KTtcblx0ICAgICAgICAgIGlmICgkJGMpIHtcblx0ICAgICAgICAgICAgJCRpIDwgMCAmJiAoX3ZtLm1vZGVsID0gJCRhLmNvbmNhdCgkJHYpKVxuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgJCRpID4gLTEgJiYgKF92bS5tb2RlbCA9ICQkYS5zbGljZSgwLCAkJGkpLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBfdm0ubW9kZWwgPSAkJGNcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KSA6IF9jKCdpbnB1dCcsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwibW9kZWxcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLm1vZGVsKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJtb2RlbFwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94LWJ1dHRvbl9fb3JpZ2luYWxcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidHlwZVwiOiBcImNoZWNrYm94XCIsXG5cdCAgICAgIFwibmFtZVwiOiBfdm0ubmFtZSxcblx0ICAgICAgXCJkaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWRcblx0ICAgIH0sXG5cdCAgICBkb21Qcm9wczoge1xuXHQgICAgICBcInZhbHVlXCI6IF92bS5sYWJlbCxcblx0ICAgICAgXCJjaGVja2VkXCI6IEFycmF5LmlzQXJyYXkoX3ZtLm1vZGVsKSA/IF92bS5faShfdm0ubW9kZWwsIF92bS5sYWJlbCkgPiAtMSA6IChfdm0ubW9kZWwpXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjaGFuZ2VcIjogX3ZtLmhhbmRsZUNoYW5nZSxcblx0ICAgICAgXCJmb2N1c1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uZm9jdXMgPSB0cnVlXG5cdCAgICAgIH0sXG5cdCAgICAgIFwiYmx1clwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uZm9jdXMgPSBmYWxzZVxuXHQgICAgICB9LFxuXHQgICAgICBcIl9fY1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICB2YXIgJCRhID0gX3ZtLm1vZGVsLFxuXHQgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG5cdCAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyAodHJ1ZSkgOiAoZmFsc2UpO1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcblx0ICAgICAgICAgIHZhciAkJHYgPSBfdm0ubGFiZWwsXG5cdCAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdik7XG5cdCAgICAgICAgICBpZiAoJCRjKSB7XG5cdCAgICAgICAgICAgICQkaSA8IDAgJiYgKF92bS5tb2RlbCA9ICQkYS5jb25jYXQoJCR2KSlcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICQkaSA+IC0xICYmIChfdm0ubW9kZWwgPSAkJGEuc2xpY2UoMCwgJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSArIDEpKSlcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgX3ZtLm1vZGVsID0gJCRjXG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSksIChfdm0uJHNsb3RzLmRlZmF1bHQgfHwgX3ZtLmxhYmVsKSA/IF9jKCdzcGFuJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lclwiLFxuXHQgICAgc3R5bGU6IChfdm0uaXNDaGVja2VkID8gX3ZtLmFjdGl2ZVN0eWxlIDogbnVsbClcblx0ICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiLCBbX3ZtLl92KF92bS5fcyhfdm0ubGFiZWwpKV0pXSwgMikgOiBfdm0uX2UoKV0pXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDkxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2NoZWNrYm94R3JvdXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkyKTtcblxuXHR2YXIgX2NoZWNrYm94R3JvdXAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2hlY2tib3hHcm91cCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfY2hlY2tib3hHcm91cDIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX2NoZWNrYm94R3JvdXAyLmRlZmF1bHQubmFtZSwgX2NoZWNrYm94R3JvdXAyLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9jaGVja2JveEdyb3VwMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogOTIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oOTMpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXyg5NCksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDkzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2VtaXR0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblxuXHR2YXIgX2VtaXR0ZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW1pdHRlcik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsQ2hlY2tib3hHcm91cCcsXG5cblx0ICBjb21wb25lbnROYW1lOiAnRWxDaGVja2JveEdyb3VwJyxcblxuXHQgIG1peGluczogW19lbWl0dGVyMi5kZWZhdWx0XSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICB2YWx1ZToge30sXG5cdCAgICBtaW46IE51bWJlcixcblx0ICAgIG1heDogTnVtYmVyLFxuXHQgICAgc2l6ZTogU3RyaW5nLFxuXHQgICAgZmlsbDogU3RyaW5nLFxuXHQgICAgdGV4dENvbG9yOiBTdHJpbmdcblx0ICB9LFxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShfdmFsdWUpIHtcblx0ICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIFtfdmFsdWVdKTtcblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiA5NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94LWdyb3VwXCJcblx0ICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDk1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2NvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oOTYpO1xuXG5cdHZhciBfY29tcG9uZW50MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbXBvbmVudCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfY29tcG9uZW50Mi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfY29tcG9uZW50Mi5kZWZhdWx0Lm5hbWUsIF9jb21wb25lbnQyLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9jb21wb25lbnQyLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiA5NiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXyg5NyksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDk4KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogOTcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxTd2l0Y2gnLFxuXHQgIHByb3BzOiB7XG5cdCAgICB2YWx1ZToge1xuXHQgICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nLCBOdW1iZXJdLFxuXHQgICAgICBkZWZhdWx0OiBmYWxzZVxuXHQgICAgfSxcblx0ICAgIGRpc2FibGVkOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IGZhbHNlXG5cdCAgICB9LFxuXHQgICAgd2lkdGg6IHtcblx0ICAgICAgdHlwZTogTnVtYmVyLFxuXHQgICAgICBkZWZhdWx0OiAwXG5cdCAgICB9LFxuXHQgICAgb25JY29uQ2xhc3M6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnJ1xuXHQgICAgfSxcblx0ICAgIG9mZkljb25DbGFzczoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICcnXG5cdCAgICB9LFxuXHQgICAgb25UZXh0OiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ09OJ1xuXHQgICAgfSxcblx0ICAgIG9mZlRleHQ6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnT0ZGJ1xuXHQgICAgfSxcblx0ICAgIG9uQ29sb3I6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnJ1xuXHQgICAgfSxcblx0ICAgIG9mZkNvbG9yOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJydcblx0ICAgIH0sXG5cdCAgICBvblZhbHVlOiB7XG5cdCAgICAgIHR5cGU6IFtCb29sZWFuLCBTdHJpbmcsIE51bWJlcl0sXG5cdCAgICAgIGRlZmF1bHQ6IHRydWVcblx0ICAgIH0sXG5cdCAgICBvZmZWYWx1ZToge1xuXHQgICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nLCBOdW1iZXJdLFxuXHQgICAgICBkZWZhdWx0OiBmYWxzZVxuXHQgICAgfSxcblx0ICAgIG5hbWU6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnJ1xuXHQgICAgfVxuXHQgIH0sXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIGNvcmVXaWR0aDogdGhpcy53aWR0aFxuXHQgICAgfTtcblx0ICB9LFxuXHQgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG5cdCAgICBpZiAoIX5bdGhpcy5vblZhbHVlLCB0aGlzLm9mZlZhbHVlXS5pbmRleE9mKHRoaXMudmFsdWUpKSB7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5vZmZWYWx1ZSk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBjaGVja2VkOiBmdW5jdGlvbiBjaGVja2VkKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gdGhpcy5vblZhbHVlO1xuXHQgICAgfSxcblx0ICAgIGhhc1RleHQ6IGZ1bmN0aW9uIGhhc1RleHQoKSB7XG5cdCAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdCAgICAgIHJldHVybiB0aGlzLm9uVGV4dCB8fCB0aGlzLm9mZlRleHQ7XG5cdCAgICB9LFxuXHQgICAgdHJhbnNmb3JtOiBmdW5jdGlvbiB0cmFuc2Zvcm0oKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLmNoZWNrZWQgPyAndHJhbnNsYXRlKCcgKyAodGhpcy5jb3JlV2lkdGggLSAyMCkgKyAncHgsIDJweCknIDogJ3RyYW5zbGF0ZSgycHgsIDJweCknO1xuXHQgICAgfVxuXHQgIH0sXG5cdCAgd2F0Y2g6IHtcblx0ICAgIGNoZWNrZWQ6IGZ1bmN0aW9uIGNoZWNrZWQoKSB7XG5cdCAgICAgIHRoaXMuJHJlZnMuaW5wdXQuY2hlY2tlZCA9IHRoaXMuY2hlY2tlZDtcblx0ICAgICAgaWYgKHRoaXMub25Db2xvciB8fCB0aGlzLm9mZkNvbG9yKSB7XG5cdCAgICAgICAgdGhpcy5zZXRCYWNrZ3JvdW5kQ29sb3IoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cdCAgbWV0aG9kczoge1xuXHQgICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcblx0ICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsICF0aGlzLmNoZWNrZWQgPyB0aGlzLm9uVmFsdWUgOiB0aGlzLm9mZlZhbHVlKTtcblx0ICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgIXRoaXMuY2hlY2tlZCA/IHRoaXMub25WYWx1ZSA6IHRoaXMub2ZmVmFsdWUpO1xuXHQgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgLy8gc2V0IGlucHV0J3MgY2hlY2tlZCBwcm9wZXJ0eVxuXHQgICAgICAgIC8vIGluIGNhc2UgcGFyZW50IHJlZnVzZXMgdG8gY2hhbmdlIGNvbXBvbmVudCdzIHZhbHVlXG5cdCAgICAgICAgX3RoaXMuJHJlZnMuaW5wdXQuY2hlY2tlZCA9IF90aGlzLmNoZWNrZWQ7XG5cdCAgICAgIH0pO1xuXHQgICAgfSxcblx0ICAgIHNldEJhY2tncm91bmRDb2xvcjogZnVuY3Rpb24gc2V0QmFja2dyb3VuZENvbG9yKCkge1xuXHQgICAgICB2YXIgbmV3Q29sb3IgPSB0aGlzLmNoZWNrZWQgPyB0aGlzLm9uQ29sb3IgOiB0aGlzLm9mZkNvbG9yO1xuXHQgICAgICB0aGlzLiRyZWZzLmNvcmUuc3R5bGUuYm9yZGVyQ29sb3IgPSBuZXdDb2xvcjtcblx0ICAgICAgdGhpcy4kcmVmcy5jb3JlLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IG5ld0NvbG9yO1xuXHQgICAgfVxuXHQgIH0sXG5cdCAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcblx0ICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuXHQgICAgaWYgKHRoaXMud2lkdGggPT09IDApIHtcblx0ICAgICAgdGhpcy5jb3JlV2lkdGggPSB0aGlzLmhhc1RleHQgPyA1OCA6IDQ2O1xuXHQgICAgfVxuXHQgICAgaWYgKHRoaXMub25Db2xvciB8fCB0aGlzLm9mZkNvbG9yKSB7XG5cdCAgICAgIHRoaXMuc2V0QmFja2dyb3VuZENvbG9yKCk7XG5cdCAgICB9XG5cdCAgICB0aGlzLiRyZWZzLmlucHV0LmNoZWNrZWQgPSB0aGlzLmNoZWNrZWQ7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogOTggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdsYWJlbCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXN3aXRjaFwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2lzLWRpc2FibGVkJzogX3ZtLmRpc2FibGVkLCAnZWwtc3dpdGNoLS13aWRlJzogX3ZtLmhhc1RleHQsICdpcy1jaGVja2VkJzogX3ZtLmNoZWNrZWRcblx0ICAgIH1cblx0ICB9LCBbX2MoJ2RpdicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5kaXNhYmxlZCksXG5cdCAgICAgIGV4cHJlc3Npb246IFwiZGlzYWJsZWRcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1zd2l0Y2hfX21hc2tcIlxuXHQgIH0pLCBfYygnaW5wdXQnLCB7XG5cdCAgICByZWY6IFwiaW5wdXRcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXN3aXRjaF9faW5wdXRcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidHlwZVwiOiBcImNoZWNrYm94XCIsXG5cdCAgICAgIFwibmFtZVwiOiBfdm0ubmFtZSxcblx0ICAgICAgXCJ0cnVlLXZhbHVlXCI6IF92bS5vblZhbHVlLFxuXHQgICAgICBcImZhbHNlLXZhbHVlXCI6IF92bS5vZmZWYWx1ZSxcblx0ICAgICAgXCJkaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWRcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNoYW5nZVwiOiBfdm0uaGFuZGxlQ2hhbmdlXG5cdCAgICB9XG5cdCAgfSksIF9jKCdzcGFuJywge1xuXHQgICAgcmVmOiBcImNvcmVcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXN3aXRjaF9fY29yZVwiLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgICd3aWR0aCc6IF92bS5jb3JlV2lkdGggKyAncHgnXG5cdCAgICB9KVxuXHQgIH0sIFtfYygnc3BhbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXN3aXRjaF9fYnV0dG9uXCIsXG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgdHJhbnNmb3JtOiBfdm0udHJhbnNmb3JtXG5cdCAgICB9KVxuXHQgIH0pXSksIF9jKCd0cmFuc2l0aW9uJywge1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJuYW1lXCI6IFwibGFiZWwtZmFkZVwiXG5cdCAgICB9XG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0uY2hlY2tlZCksXG5cdCAgICAgIGV4cHJlc3Npb246IFwiY2hlY2tlZFwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXN3aXRjaF9fbGFiZWwgZWwtc3dpdGNoX19sYWJlbC0tbGVmdFwiLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgICd3aWR0aCc6IF92bS5jb3JlV2lkdGggKyAncHgnXG5cdCAgICB9KVxuXHQgIH0sIFsoX3ZtLm9uSWNvbkNsYXNzKSA/IF9jKCdpJywge1xuXHQgICAgY2xhc3M6IFtfdm0ub25JY29uQ2xhc3NdXG5cdCAgfSkgOiBfdm0uX2UoKSwgKCFfdm0ub25JY29uQ2xhc3MgJiYgX3ZtLm9uVGV4dCkgPyBfYygnc3BhbicsIFtfdm0uX3YoX3ZtLl9zKF92bS5vblRleHQpKV0pIDogX3ZtLl9lKCldKV0pLCBfYygndHJhbnNpdGlvbicsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwibmFtZVwiOiBcImxhYmVsLWZhZGVcIlxuXHQgICAgfVxuXHQgIH0sIFtfYygnZGl2Jywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoIV92bS5jaGVja2VkKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCIhY2hlY2tlZFwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXN3aXRjaF9fbGFiZWwgZWwtc3dpdGNoX19sYWJlbC0tcmlnaHRcIixcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICAnd2lkdGgnOiBfdm0uY29yZVdpZHRoICsgJ3B4J1xuXHQgICAgfSlcblx0ICB9LCBbKF92bS5vZmZJY29uQ2xhc3MpID8gX2MoJ2knLCB7XG5cdCAgICBjbGFzczogW192bS5vZmZJY29uQ2xhc3NdXG5cdCAgfSkgOiBfdm0uX2UoKSwgKCFfdm0ub2ZmSWNvbkNsYXNzICYmIF92bS5vZmZUZXh0KSA/IF9jKCdzcGFuJywgW192bS5fdihfdm0uX3MoX3ZtLm9mZlRleHQpKV0pIDogX3ZtLl9lKCldKV0pXSwgMSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogOTkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfc2VsZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDApO1xuXG5cdHZhciBfc2VsZWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NlbGVjdCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfc2VsZWN0Mi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfc2VsZWN0Mi5kZWZhdWx0Lm5hbWUsIF9zZWxlY3QyLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9zZWxlY3QyLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAxMDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTAxKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTEzKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMTAxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0dmFyIF9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cblx0dmFyIF9lbWl0dGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VtaXR0ZXIpO1xuXG5cdHZhciBfbG9jYWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5cblx0dmFyIF9sb2NhbGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9jYWxlKTtcblxuXHR2YXIgX2lucHV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XG5cblx0dmFyIF9pbnB1dDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbnB1dCk7XG5cblx0dmFyIF9zZWxlY3REcm9wZG93biA9IF9fd2VicGFja19yZXF1aXJlX18oMTAyKTtcblxuXHR2YXIgX3NlbGVjdERyb3Bkb3duMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NlbGVjdERyb3Bkb3duKTtcblxuXHR2YXIgX29wdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTA1KTtcblxuXHR2YXIgX29wdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9vcHRpb24pO1xuXG5cdHZhciBfdGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDkpO1xuXG5cdHZhciBfdGFnMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3RhZyk7XG5cblx0dmFyIF9zY3JvbGxiYXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcblxuXHR2YXIgX3Njcm9sbGJhcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zY3JvbGxiYXIpO1xuXG5cdHZhciBfZGVib3VuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcblxuXHR2YXIgX2RlYm91bmNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlYm91bmNlKTtcblxuXHR2YXIgX2NsaWNrb3V0c2lkZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xuXG5cdHZhciBfY2xpY2tvdXRzaWRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsaWNrb3V0c2lkZSk7XG5cblx0dmFyIF9kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcblxuXHR2YXIgX3Jlc2l6ZUV2ZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTApO1xuXG5cdHZhciBfbG9jYWxlMyA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcblxuXHR2YXIgX3Njcm9sbEludG9WaWV3ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTIpO1xuXG5cdHZhciBfc2Nyb2xsSW50b1ZpZXcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2Nyb2xsSW50b1ZpZXcpO1xuXG5cdHZhciBfdXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTA3KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdHZhciBzaXplTWFwID0ge1xuXHQgICdsYXJnZSc6IDQyLFxuXHQgICdzbWFsbCc6IDMwLFxuXHQgICdtaW5pJzogMjJcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbWl4aW5zOiBbX2VtaXR0ZXIyLmRlZmF1bHQsIF9sb2NhbGUyLmRlZmF1bHRdLFxuXG5cdCAgbmFtZTogJ0VsU2VsZWN0JyxcblxuXHQgIGNvbXBvbmVudE5hbWU6ICdFbFNlbGVjdCcsXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgaWNvbkNsYXNzOiBmdW5jdGlvbiBpY29uQ2xhc3MoKSB7XG5cdCAgICAgIHZhciBjcml0ZXJpYSA9IHRoaXMuY2xlYXJhYmxlICYmICF0aGlzLmRpc2FibGVkICYmIHRoaXMuaW5wdXRIb3ZlcmluZyAmJiAhdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy52YWx1ZSAhPT0gJyc7XG5cdCAgICAgIHJldHVybiBjcml0ZXJpYSA/ICdjaXJjbGUtY2xvc2UgaXMtc2hvdy1jbG9zZScgOiB0aGlzLnJlbW90ZSAmJiB0aGlzLmZpbHRlcmFibGUgPyAnJyA6ICdjYXJldC10b3AnO1xuXHQgICAgfSxcblx0ICAgIGRlYm91bmNlOiBmdW5jdGlvbiBkZWJvdW5jZSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMucmVtb3RlID8gMzAwIDogMDtcblx0ICAgIH0sXG5cdCAgICBlbXB0eVRleHQ6IGZ1bmN0aW9uIGVtcHR5VGV4dCgpIHtcblx0ICAgICAgaWYgKHRoaXMubG9hZGluZykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdUZXh0IHx8IHRoaXMudCgnZWwuc2VsZWN0LmxvYWRpbmcnKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBpZiAodGhpcy5yZW1vdGUgJiYgdGhpcy5xdWVyeSA9PT0gJycgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA+IDAgJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudCA9PT0gMCkge1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMubm9NYXRjaFRleHQgfHwgdGhpcy50KCdlbC5zZWxlY3Qubm9NYXRjaCcpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgcmV0dXJuIHRoaXMubm9EYXRhVGV4dCB8fCB0aGlzLnQoJ2VsLnNlbGVjdC5ub0RhdGEnKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICB9LFxuXHQgICAgc2hvd05ld09wdGlvbjogZnVuY3Rpb24gc2hvd05ld09wdGlvbigpIHtcblx0ICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgICB2YXIgaGFzRXhpc3RpbmdPcHRpb24gPSB0aGlzLm9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcblx0ICAgICAgICByZXR1cm4gIW9wdGlvbi5jcmVhdGVkO1xuXHQgICAgICB9KS5zb21lKGZ1bmN0aW9uIChvcHRpb24pIHtcblx0ICAgICAgICByZXR1cm4gb3B0aW9uLmN1cnJlbnRMYWJlbCA9PT0gX3RoaXMucXVlcnk7XG5cdCAgICAgIH0pO1xuXHQgICAgICByZXR1cm4gdGhpcy5maWx0ZXJhYmxlICYmIHRoaXMuYWxsb3dDcmVhdGUgJiYgdGhpcy5xdWVyeSAhPT0gJycgJiYgIWhhc0V4aXN0aW5nT3B0aW9uO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjb21wb25lbnRzOiB7XG5cdCAgICBFbElucHV0OiBfaW5wdXQyLmRlZmF1bHQsXG5cdCAgICBFbFNlbGVjdE1lbnU6IF9zZWxlY3REcm9wZG93bjIuZGVmYXVsdCxcblx0ICAgIEVsT3B0aW9uOiBfb3B0aW9uMi5kZWZhdWx0LFxuXHQgICAgRWxUYWc6IF90YWcyLmRlZmF1bHQsXG5cdCAgICBFbFNjcm9sbGJhcjogX3Njcm9sbGJhcjIuZGVmYXVsdFxuXHQgIH0sXG5cblx0ICBkaXJlY3RpdmVzOiB7IENsaWNrb3V0c2lkZTogX2NsaWNrb3V0c2lkZTIuZGVmYXVsdCB9LFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIG5hbWU6IFN0cmluZyxcblx0ICAgIHZhbHVlOiB7XG5cdCAgICAgIHJlcXVpcmVkOiB0cnVlXG5cdCAgICB9LFxuXHQgICAgc2l6ZTogU3RyaW5nLFxuXHQgICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG5cdCAgICBjbGVhcmFibGU6IEJvb2xlYW4sXG5cdCAgICBmaWx0ZXJhYmxlOiBCb29sZWFuLFxuXHQgICAgYWxsb3dDcmVhdGU6IEJvb2xlYW4sXG5cdCAgICBsb2FkaW5nOiBCb29sZWFuLFxuXHQgICAgcG9wcGVyQ2xhc3M6IFN0cmluZyxcblx0ICAgIHJlbW90ZTogQm9vbGVhbixcblx0ICAgIGxvYWRpbmdUZXh0OiBTdHJpbmcsXG5cdCAgICBub01hdGNoVGV4dDogU3RyaW5nLFxuXHQgICAgbm9EYXRhVGV4dDogU3RyaW5nLFxuXHQgICAgcmVtb3RlTWV0aG9kOiBGdW5jdGlvbixcblx0ICAgIGZpbHRlck1ldGhvZDogRnVuY3Rpb24sXG5cdCAgICBtdWx0aXBsZTogQm9vbGVhbixcblx0ICAgIG11bHRpcGxlTGltaXQ6IHtcblx0ICAgICAgdHlwZTogTnVtYmVyLFxuXHQgICAgICBkZWZhdWx0OiAwXG5cdCAgICB9LFxuXHQgICAgcGxhY2Vob2xkZXI6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcblx0ICAgICAgICByZXR1cm4gKDAsIF9sb2NhbGUzLnQpKCdlbC5zZWxlY3QucGxhY2Vob2xkZXInKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGRlZmF1bHRGaXJzdE9wdGlvbjogQm9vbGVhbixcblx0ICAgIHZhbHVlS2V5OiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ3ZhbHVlJ1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgb3B0aW9uczogW10sXG5cdCAgICAgIGNhY2hlZE9wdGlvbnM6IFtdLFxuXHQgICAgICBjcmVhdGVkTGFiZWw6IG51bGwsXG5cdCAgICAgIGNyZWF0ZWRTZWxlY3RlZDogZmFsc2UsXG5cdCAgICAgIHNlbGVjdGVkOiB0aGlzLm11bHRpcGxlID8gW10gOiB7fSxcblx0ICAgICAgaXNTZWxlY3Q6IHRydWUsXG5cdCAgICAgIGlucHV0TGVuZ3RoOiAyMCxcblx0ICAgICAgaW5wdXRXaWR0aDogMCxcblx0ICAgICAgY2FjaGVkUGxhY2VIb2xkZXI6ICcnLFxuXHQgICAgICBvcHRpb25zQ291bnQ6IDAsXG5cdCAgICAgIGZpbHRlcmVkT3B0aW9uc0NvdW50OiAwLFxuXHQgICAgICB2aXNpYmxlOiBmYWxzZSxcblx0ICAgICAgc2VsZWN0ZWRMYWJlbDogJycsXG5cdCAgICAgIGhvdmVySW5kZXg6IC0xLFxuXHQgICAgICBxdWVyeTogJycsXG5cdCAgICAgIG9wdGlvbnNBbGxEaXNhYmxlZDogZmFsc2UsXG5cdCAgICAgIGlucHV0SG92ZXJpbmc6IGZhbHNlLFxuXHQgICAgICBjdXJyZW50UGxhY2Vob2xkZXI6ICcnXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIHdhdGNoOiB7XG5cdCAgICBwbGFjZWhvbGRlcjogZnVuY3Rpb24gcGxhY2Vob2xkZXIodmFsKSB7XG5cdCAgICAgIHRoaXMuY2FjaGVkUGxhY2VIb2xkZXIgPSB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9IHZhbDtcblx0ICAgIH0sXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsKSB7XG5cdCAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG5cdCAgICAgICAgdGhpcy5yZXNldElucHV0SGVpZ2h0KCk7XG5cdCAgICAgICAgaWYgKHZhbC5sZW5ndGggPiAwIHx8IHRoaXMuJHJlZnMuaW5wdXQgJiYgdGhpcy5xdWVyeSAhPT0gJycpIHtcblx0ICAgICAgICAgIHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gJyc7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gdGhpcy5jYWNoZWRQbGFjZUhvbGRlcjtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5zZXRTZWxlY3RlZCgpO1xuXHQgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlICYmICF0aGlzLm11bHRpcGxlKSB7XG5cdCAgICAgICAgdGhpcy5pbnB1dExlbmd0aCA9IDIwO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbCk7XG5cdCAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5jaGFuZ2UnLCB2YWwpO1xuXHQgICAgfSxcblx0ICAgIHF1ZXJ5OiBmdW5jdGlvbiBxdWVyeSh2YWwpIHtcblx0ICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cblx0ICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXHQgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKF90aGlzMi52aXNpYmxlKSBfdGhpczIuYnJvYWRjYXN0KCdFbFNlbGVjdERyb3Bkb3duJywgJ3VwZGF0ZVBvcHBlcicpO1xuXHQgICAgICB9KTtcblx0ICAgICAgdGhpcy5ob3ZlckluZGV4ID0gLTE7XG5cdCAgICAgIGlmICh0aGlzLm11bHRpcGxlICYmIHRoaXMuZmlsdGVyYWJsZSkge1xuXHQgICAgICAgIHRoaXMuaW5wdXRMZW5ndGggPSB0aGlzLiRyZWZzLmlucHV0LnZhbHVlLmxlbmd0aCAqIDE1ICsgMjA7XG5cdCAgICAgICAgdGhpcy5tYW5hZ2VQbGFjZWhvbGRlcigpO1xuXHQgICAgICAgIHRoaXMucmVzZXRJbnB1dEhlaWdodCgpO1xuXHQgICAgICB9XG5cdCAgICAgIGlmICh0aGlzLnJlbW90ZSAmJiB0eXBlb2YgdGhpcy5yZW1vdGVNZXRob2QgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICB0aGlzLmhvdmVySW5kZXggPSAtMTtcblx0ICAgICAgICB0aGlzLnJlbW90ZU1ldGhvZCh2YWwpO1xuXHQgICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbicsICdyZXNldEluZGV4Jyk7XG5cdCAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuZmlsdGVyTWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgdGhpcy5maWx0ZXJNZXRob2QodmFsKTtcblx0ICAgICAgICB0aGlzLmJyb2FkY2FzdCgnRWxPcHRpb25Hcm91cCcsICdxdWVyeUNoYW5nZScpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zQ291bnQgPSB0aGlzLm9wdGlvbnNDb3VudDtcblx0ICAgICAgICB0aGlzLmJyb2FkY2FzdCgnRWxPcHRpb24nLCAncXVlcnlDaGFuZ2UnLCB2YWwpO1xuXHQgICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbkdyb3VwJywgJ3F1ZXJ5Q2hhbmdlJyk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKHRoaXMuZGVmYXVsdEZpcnN0T3B0aW9uICYmICh0aGlzLmZpbHRlcmFibGUgfHwgdGhpcy5yZW1vdGUpICYmIHRoaXMuZmlsdGVyZWRPcHRpb25zQ291bnQpIHtcblx0ICAgICAgICB0aGlzLmNoZWNrRGVmYXVsdEZpcnN0T3B0aW9uKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB2aXNpYmxlOiBmdW5jdGlvbiB2aXNpYmxlKHZhbCkge1xuXHQgICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuXHQgICAgICBpZiAoIXZhbCkge1xuXHQgICAgICAgIHRoaXMuJHJlZnMucmVmZXJlbmNlLiRlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmJsdXIoKTtcblx0ICAgICAgICB0aGlzLmhhbmRsZUljb25IaWRlKCk7XG5cdCAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCAnZGVzdHJveVBvcHBlcicpO1xuXHQgICAgICAgIGlmICh0aGlzLiRyZWZzLmlucHV0KSB7XG5cdCAgICAgICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuXHQgICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbCA9ICcnO1xuXHQgICAgICAgIHRoaXMuaW5wdXRMZW5ndGggPSAyMDtcblx0ICAgICAgICB0aGlzLnJlc2V0SG92ZXJJbmRleCgpO1xuXHQgICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIGlmIChfdGhpczMuJHJlZnMuaW5wdXQgJiYgX3RoaXMzLiRyZWZzLmlucHV0LnZhbHVlID09PSAnJyAmJiBfdGhpczMuc2VsZWN0ZWQubGVuZ3RoID09PSAwKSB7XG5cdCAgICAgICAgICAgIF90aGlzMy5jdXJyZW50UGxhY2Vob2xkZXIgPSBfdGhpczMuY2FjaGVkUGxhY2VIb2xkZXI7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG5cdCAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xuXHQgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlICYmIHRoaXMuYWxsb3dDcmVhdGUgJiYgdGhpcy5jcmVhdGVkU2VsZWN0ZWQgJiYgdGhpcy5jcmVhdGVkT3B0aW9uKSB7XG5cdCAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gdGhpcy5jcmVhdGVkTGFiZWw7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gdGhpcy5zZWxlY3RlZC5jdXJyZW50TGFiZWw7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSkgdGhpcy5xdWVyeSA9IHRoaXMuc2VsZWN0ZWRMYWJlbDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5oYW5kbGVJY29uU2hvdygpO1xuXHQgICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbFNlbGVjdERyb3Bkb3duJywgJ3VwZGF0ZVBvcHBlcicpO1xuXHQgICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUpIHtcblx0ICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnNlbGVjdGVkTGFiZWw7XG5cdCAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuXHQgICAgICAgICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKCk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBpZiAoIXRoaXMucmVtb3RlKSB7XG5cdCAgICAgICAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uJywgJ3F1ZXJ5Q2hhbmdlJywgJycpO1xuXHQgICAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbkdyb3VwJywgJ3F1ZXJ5Q2hhbmdlJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsSW5wdXQnLCAnaW5wdXRTZWxlY3QnKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy4kZW1pdCgndmlzaWJsZS1jaGFuZ2UnLCB2YWwpO1xuXHQgICAgfSxcblx0ICAgIG9wdGlvbnM6IGZ1bmN0aW9uIG9wdGlvbnModmFsKSB7XG5cdCAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuXHQgICAgICB0aGlzLm9wdGlvbnNBbGxEaXNhYmxlZCA9IHZhbC5sZW5ndGggPT09IHZhbC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgICByZXR1cm4gaXRlbS5kaXNhYmxlZCA9PT0gdHJ1ZTtcblx0ICAgICAgfSkubGVuZ3RoO1xuXHQgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuXHQgICAgICAgIHRoaXMucmVzZXRJbnB1dEhlaWdodCgpO1xuXHQgICAgICB9XG5cdCAgICAgIHZhciBpbnB1dHMgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpO1xuXHQgICAgICBpZiAoW10uaW5kZXhPZi5jYWxsKGlucHV0cywgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgPT09IC0xKSB7XG5cdCAgICAgICAgdGhpcy5zZXRTZWxlY3RlZCgpO1xuXHQgICAgICB9XG5cdCAgICAgIGlmICh0aGlzLmRlZmF1bHRGaXJzdE9wdGlvbiAmJiAodGhpcy5maWx0ZXJhYmxlIHx8IHRoaXMucmVtb3RlKSAmJiB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50KSB7XG5cdCAgICAgICAgdGhpcy5jaGVja0RlZmF1bHRGaXJzdE9wdGlvbigpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGhhbmRsZUljb25IaWRlOiBmdW5jdGlvbiBoYW5kbGVJY29uSGlkZSgpIHtcblx0ICAgICAgdmFyIGljb24gPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtaW5wdXRfX2ljb24nKTtcblx0ICAgICAgaWYgKGljb24pIHtcblx0ICAgICAgICAoMCwgX2RvbS5yZW1vdmVDbGFzcykoaWNvbiwgJ2lzLXJldmVyc2UnKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGhhbmRsZUljb25TaG93OiBmdW5jdGlvbiBoYW5kbGVJY29uU2hvdygpIHtcblx0ICAgICAgdmFyIGljb24gPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtaW5wdXRfX2ljb24nKTtcblx0ICAgICAgaWYgKGljb24gJiYgISgwLCBfZG9tLmhhc0NsYXNzKShpY29uLCAnZWwtaWNvbi1jaXJjbGUtY2xvc2UnKSkge1xuXHQgICAgICAgICgwLCBfZG9tLmFkZENsYXNzKShpY29uLCAnaXMtcmV2ZXJzZScpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2Nyb2xsVG9PcHRpb246IGZ1bmN0aW9uIHNjcm9sbFRvT3B0aW9uKG9wdGlvbikge1xuXHQgICAgICB2YXIgdGFyZ2V0ID0gQXJyYXkuaXNBcnJheShvcHRpb24pICYmIG9wdGlvblswXSA/IG9wdGlvblswXS4kZWwgOiBvcHRpb24uJGVsO1xuXHQgICAgICBpZiAodGhpcy4kcmVmcy5wb3BwZXIgJiYgdGFyZ2V0KSB7XG5cdCAgICAgICAgdmFyIG1lbnUgPSB0aGlzLiRyZWZzLnBvcHBlci4kZWwucXVlcnlTZWxlY3RvcignLmVsLXNlbGVjdC1kcm9wZG93bl9fd3JhcCcpO1xuXHQgICAgICAgICgwLCBfc2Nyb2xsSW50b1ZpZXcyLmRlZmF1bHQpKG1lbnUsIHRhcmdldCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVNZW51RW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1lbnVFbnRlcigpIHtcblx0ICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cblx0ICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBfdGhpczQuc2Nyb2xsVG9PcHRpb24oX3RoaXM0LnNlbGVjdGVkKTtcblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgZ2V0T3B0aW9uOiBmdW5jdGlvbiBnZXRPcHRpb24odmFsdWUpIHtcblx0ICAgICAgdmFyIG9wdGlvbiA9IHZvaWQgMDtcblx0ICAgICAgdmFyIGlzT2JqZWN0ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS50b0xvd2VyQ2FzZSgpID09PSAnW29iamVjdCBvYmplY3RdJztcblx0ICAgICAgZm9yICh2YXIgaSA9IHRoaXMuY2FjaGVkT3B0aW9ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgICAgIHZhciBjYWNoZWRPcHRpb24gPSB0aGlzLmNhY2hlZE9wdGlvbnNbaV07XG5cdCAgICAgICAgdmFyIGlzRXF1YWwgPSBpc09iamVjdCA/ICgwLCBfdXRpbC5nZXRWYWx1ZUJ5UGF0aCkoY2FjaGVkT3B0aW9uLnZhbHVlLCB0aGlzLnZhbHVlS2V5KSA9PT0gKDAsIF91dGlsLmdldFZhbHVlQnlQYXRoKSh2YWx1ZSwgdGhpcy52YWx1ZUtleSkgOiBjYWNoZWRPcHRpb24udmFsdWUgPT09IHZhbHVlO1xuXHQgICAgICAgIGlmIChpc0VxdWFsKSB7XG5cdCAgICAgICAgICBvcHRpb24gPSBjYWNoZWRPcHRpb247XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKG9wdGlvbikgcmV0dXJuIG9wdGlvbjtcblx0ICAgICAgdmFyIGxhYmVsID0gIWlzT2JqZWN0ID8gdmFsdWUgOiAnJztcblx0ICAgICAgdmFyIG5ld09wdGlvbiA9IHtcblx0ICAgICAgICB2YWx1ZTogdmFsdWUsXG5cdCAgICAgICAgY3VycmVudExhYmVsOiBsYWJlbFxuXHQgICAgICB9O1xuXHQgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuXHQgICAgICAgIG5ld09wdGlvbi5oaXRTdGF0ZSA9IGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBuZXdPcHRpb247XG5cdCAgICB9LFxuXHQgICAgc2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uIHNldFNlbGVjdGVkKCkge1xuXHQgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuXHQgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcblx0ICAgICAgICB2YXIgb3B0aW9uID0gdGhpcy5nZXRPcHRpb24odGhpcy52YWx1ZSk7XG5cdCAgICAgICAgaWYgKG9wdGlvbi5jcmVhdGVkKSB7XG5cdCAgICAgICAgICB0aGlzLmNyZWF0ZWRMYWJlbCA9IG9wdGlvbi5jdXJyZW50TGFiZWw7XG5cdCAgICAgICAgICB0aGlzLmNyZWF0ZWRTZWxlY3RlZCA9IHRydWU7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuY3JlYXRlZFNlbGVjdGVkID0gZmFsc2U7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbCA9IG9wdGlvbi5jdXJyZW50TGFiZWw7XG5cdCAgICAgICAgdGhpcy5zZWxlY3RlZCA9IG9wdGlvbjtcblx0ICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlKSB0aGlzLnF1ZXJ5ID0gdGhpcy5zZWxlY3RlZExhYmVsO1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfVxuXHQgICAgICB2YXIgcmVzdWx0ID0gW107XG5cdCAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG5cdCAgICAgICAgdGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHQgICAgICAgICAgcmVzdWx0LnB1c2goX3RoaXM1LmdldE9wdGlvbih2YWx1ZSkpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuc2VsZWN0ZWQgPSByZXN1bHQ7XG5cdCAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBfdGhpczUucmVzZXRJbnB1dEhlaWdodCgpO1xuXHQgICAgICB9KTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVGb2N1czogZnVuY3Rpb24gaGFuZGxlRm9jdXMoKSB7XG5cdCAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlSWNvbkNsaWNrOiBmdW5jdGlvbiBoYW5kbGVJY29uQ2xpY2soZXZlbnQpIHtcblx0ICAgICAgaWYgKHRoaXMuaWNvbkNsYXNzLmluZGV4T2YoJ2NpcmNsZS1jbG9zZScpID4gLTEpIHtcblx0ICAgICAgICB0aGlzLmRlbGV0ZVNlbGVjdGVkKGV2ZW50KTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB0aGlzLnRvZ2dsZU1lbnUoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGhhbmRsZU1vdXNlRG93bjogZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duKGV2ZW50KSB7XG5cdCAgICAgIGlmIChldmVudC50YXJnZXQudGFnTmFtZSAhPT0gJ0lOUFVUJykgcmV0dXJuO1xuXHQgICAgICBpZiAodGhpcy52aXNpYmxlKSB7XG5cdCAgICAgICAgdGhpcy5oYW5kbGVDbG9zZSgpO1xuXHQgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBkb0Rlc3Ryb3k6IGZ1bmN0aW9uIGRvRGVzdHJveSgpIHtcblx0ICAgICAgdGhpcy4kcmVmcy5wb3BwZXIgJiYgdGhpcy4kcmVmcy5wb3BwZXIuZG9EZXN0cm95KCk7XG5cdCAgICAgIHRoaXMuZHJvcGRvd25VbCA9IG51bGw7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQ2xvc2U6IGZ1bmN0aW9uIGhhbmRsZUNsb3NlKCkge1xuXHQgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcblx0ICAgIH0sXG5cdCAgICB0b2dnbGVMYXN0T3B0aW9uSGl0U3RhdGU6IGZ1bmN0aW9uIHRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZShoaXQpIHtcblx0ICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpKSByZXR1cm47XG5cdCAgICAgIHZhciBvcHRpb24gPSB0aGlzLnNlbGVjdGVkW3RoaXMuc2VsZWN0ZWQubGVuZ3RoIC0gMV07XG5cdCAgICAgIGlmICghb3B0aW9uKSByZXR1cm47XG5cblx0ICAgICAgaWYgKGhpdCA9PT0gdHJ1ZSB8fCBoaXQgPT09IGZhbHNlKSB7XG5cdCAgICAgICAgb3B0aW9uLmhpdFN0YXRlID0gaGl0O1xuXHQgICAgICAgIHJldHVybiBoaXQ7XG5cdCAgICAgIH1cblxuXHQgICAgICBvcHRpb24uaGl0U3RhdGUgPSAhb3B0aW9uLmhpdFN0YXRlO1xuXHQgICAgICByZXR1cm4gb3B0aW9uLmhpdFN0YXRlO1xuXHQgICAgfSxcblx0ICAgIGRlbGV0ZVByZXZUYWc6IGZ1bmN0aW9uIGRlbGV0ZVByZXZUYWcoZSkge1xuXHQgICAgICBpZiAoZS50YXJnZXQudmFsdWUubGVuZ3RoIDw9IDAgJiYgIXRoaXMudG9nZ2xlTGFzdE9wdGlvbkhpdFN0YXRlKCkpIHtcblx0ICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnNsaWNlKCk7XG5cdCAgICAgICAgdmFsdWUucG9wKCk7XG5cdCAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtYW5hZ2VQbGFjZWhvbGRlcjogZnVuY3Rpb24gbWFuYWdlUGxhY2Vob2xkZXIoKSB7XG5cdCAgICAgIGlmICh0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciAhPT0gJycpIHtcblx0ICAgICAgICB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMuJHJlZnMuaW5wdXQudmFsdWUgPyAnJyA6IHRoaXMuY2FjaGVkUGxhY2VIb2xkZXI7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZXNldElucHV0U3RhdGU6IGZ1bmN0aW9uIHJlc2V0SW5wdXRTdGF0ZShlKSB7XG5cdCAgICAgIGlmIChlLmtleUNvZGUgIT09IDgpIHRoaXMudG9nZ2xlTGFzdE9wdGlvbkhpdFN0YXRlKGZhbHNlKTtcblx0ICAgICAgdGhpcy5pbnB1dExlbmd0aCA9IHRoaXMuJHJlZnMuaW5wdXQudmFsdWUubGVuZ3RoICogMTUgKyAyMDtcblx0ICAgICAgdGhpcy5yZXNldElucHV0SGVpZ2h0KCk7XG5cdCAgICB9LFxuXHQgICAgcmVzZXRJbnB1dEhlaWdodDogZnVuY3Rpb24gcmVzZXRJbnB1dEhlaWdodCgpIHtcblx0ICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cblx0ICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghX3RoaXM2LiRyZWZzLnJlZmVyZW5jZSkgcmV0dXJuO1xuXHQgICAgICAgIHZhciBpbnB1dENoaWxkTm9kZXMgPSBfdGhpczYuJHJlZnMucmVmZXJlbmNlLiRlbC5jaGlsZE5vZGVzO1xuXHQgICAgICAgIHZhciBpbnB1dCA9IFtdLmZpbHRlci5jYWxsKGlucHV0Q2hpbGROb2RlcywgZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgICAgIHJldHVybiBpdGVtLnRhZ05hbWUgPT09ICdJTlBVVCc7XG5cdCAgICAgICAgfSlbMF07XG5cdCAgICAgICAgaW5wdXQuc3R5bGUuaGVpZ2h0ID0gTWF0aC5tYXgoX3RoaXM2LiRyZWZzLnRhZ3MuY2xpZW50SGVpZ2h0ICsgNiwgc2l6ZU1hcFtfdGhpczYuc2l6ZV0gfHwgMzYpICsgJ3B4Jztcblx0ICAgICAgICBpZiAoX3RoaXM2LnZpc2libGUgJiYgX3RoaXM2LmVtcHR5VGV4dCAhPT0gZmFsc2UpIHtcblx0ICAgICAgICAgIF90aGlzNi5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCAndXBkYXRlUG9wcGVyJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgIH0sXG5cdCAgICByZXNldEhvdmVySW5kZXg6IGZ1bmN0aW9uIHJlc2V0SG92ZXJJbmRleCgpIHtcblx0ICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cblx0ICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCFfdGhpczcubXVsdGlwbGUpIHtcblx0ICAgICAgICAgIF90aGlzNy5ob3ZlckluZGV4ID0gX3RoaXM3Lm9wdGlvbnMuaW5kZXhPZihfdGhpczcuc2VsZWN0ZWQpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBpZiAoX3RoaXM3LnNlbGVjdGVkLmxlbmd0aCA+IDApIHtcblx0ICAgICAgICAgICAgX3RoaXM3LmhvdmVySW5kZXggPSBNYXRoLm1pbi5hcHBseShudWxsLCBfdGhpczcuc2VsZWN0ZWQubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNy5vcHRpb25zLmluZGV4T2YoaXRlbSk7XG5cdCAgICAgICAgICAgIH0pKTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIF90aGlzNy5ob3ZlckluZGV4ID0gLTE7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9LCAzMDApO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZU9wdGlvblNlbGVjdDogZnVuY3Rpb24gaGFuZGxlT3B0aW9uU2VsZWN0KG9wdGlvbikge1xuXHQgICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuXHQgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUuc2xpY2UoKTtcblx0ICAgICAgICB2YXIgb3B0aW9uSW5kZXggPSB0aGlzLmdldFZhbHVlSW5kZXgodmFsdWUsIG9wdGlvbi52YWx1ZSk7XG5cdCAgICAgICAgaWYgKG9wdGlvbkluZGV4ID4gLTEpIHtcblx0ICAgICAgICAgIHZhbHVlLnNwbGljZShvcHRpb25JbmRleCwgMSk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLm11bHRpcGxlTGltaXQgPD0gMCB8fCB2YWx1ZS5sZW5ndGggPCB0aGlzLm11bHRpcGxlTGltaXQpIHtcblx0ICAgICAgICAgIHZhbHVlLnB1c2gob3B0aW9uLnZhbHVlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG5cdCAgICAgICAgaWYgKG9wdGlvbi5jcmVhdGVkKSB7XG5cdCAgICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG5cdCAgICAgICAgICB0aGlzLmlucHV0TGVuZ3RoID0gMjA7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUpIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIG9wdGlvbi52YWx1ZSk7XG5cdCAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBfdGhpczguc2Nyb2xsVG9PcHRpb24ob3B0aW9uKTtcblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgZ2V0VmFsdWVJbmRleDogZnVuY3Rpb24gZ2V0VmFsdWVJbmRleCgpIHtcblx0ICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cblx0ICAgICAgdmFyIGFyciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107XG5cdCAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1sxXTtcblxuXHQgICAgICB2YXIgaXNPYmplY3QgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICdbb2JqZWN0IG9iamVjdF0nO1xuXHQgICAgICBpZiAoIWlzT2JqZWN0KSB7XG5cdCAgICAgICAgcmV0dXJuIGFyci5pbmRleE9mKHZhbHVlKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB2YXIgX3JldCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIHZhciB2YWx1ZUtleSA9IF90aGlzOS52YWx1ZUtleTtcblx0ICAgICAgICAgIHZhciBpbmRleCA9IC0xO1xuXHQgICAgICAgICAgYXJyLnNvbWUoZnVuY3Rpb24gKGl0ZW0sIGkpIHtcblx0ICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5nZXRWYWx1ZUJ5UGF0aCkoaXRlbSwgdmFsdWVLZXkpID09PSAoMCwgX3V0aWwuZ2V0VmFsdWVCeVBhdGgpKHZhbHVlLCB2YWx1ZUtleSkpIHtcblx0ICAgICAgICAgICAgICBpbmRleCA9IGk7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICB2OiBpbmRleFxuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9KCk7XG5cblx0ICAgICAgICBpZiAoKHR5cGVvZiBfcmV0ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihfcmV0KSkgPT09IFwib2JqZWN0XCIpIHJldHVybiBfcmV0LnY7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB0b2dnbGVNZW51OiBmdW5jdGlvbiB0b2dnbGVNZW51KCkge1xuXHQgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlICYmIHRoaXMucXVlcnkgPT09ICcnICYmIHRoaXMudmlzaWJsZSkge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfVxuXHQgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcblx0ICAgICAgICB0aGlzLnZpc2libGUgPSAhdGhpcy52aXNpYmxlO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbmF2aWdhdGVPcHRpb25zOiBmdW5jdGlvbiBuYXZpZ2F0ZU9wdGlvbnMoZGlyZWN0aW9uKSB7XG5cdCAgICAgIHZhciBfdGhpczEwID0gdGhpcztcblxuXHQgICAgICBpZiAoIXRoaXMudmlzaWJsZSkge1xuXHQgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwIHx8IHRoaXMuZmlsdGVyZWRPcHRpb25zQ291bnQgPT09IDApIHJldHVybjtcblx0ICAgICAgdGhpcy5vcHRpb25zQWxsRGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSB0aGlzLm9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgcmV0dXJuIGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7XG5cdCAgICAgIH0pLmxlbmd0aDtcblx0ICAgICAgaWYgKCF0aGlzLm9wdGlvbnNBbGxEaXNhYmxlZCkge1xuXHQgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICduZXh0Jykge1xuXHQgICAgICAgICAgdGhpcy5ob3ZlckluZGV4Kys7XG5cdCAgICAgICAgICBpZiAodGhpcy5ob3ZlckluZGV4ID09PSB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaG92ZXJJbmRleCA9IDA7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICBpZiAodGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0uZGlzYWJsZWQgPT09IHRydWUgfHwgdGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0uZ3JvdXBEaXNhYmxlZCA9PT0gdHJ1ZSB8fCAhdGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0udmlzaWJsZSkge1xuXHQgICAgICAgICAgICB0aGlzLm5hdmlnYXRlT3B0aW9ucygnbmV4dCcpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncHJldicpIHtcblx0ICAgICAgICAgIHRoaXMuaG92ZXJJbmRleC0tO1xuXHQgICAgICAgICAgaWYgKHRoaXMuaG92ZXJJbmRleCA8IDApIHtcblx0ICAgICAgICAgICAgdGhpcy5ob3ZlckluZGV4ID0gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDE7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICBpZiAodGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0uZGlzYWJsZWQgPT09IHRydWUgfHwgdGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0uZ3JvdXBEaXNhYmxlZCA9PT0gdHJ1ZSB8fCAhdGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0udmlzaWJsZSkge1xuXHQgICAgICAgICAgICB0aGlzLm5hdmlnYXRlT3B0aW9ucygncHJldicpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIF90aGlzMTAuc2Nyb2xsVG9PcHRpb24oX3RoaXMxMC5vcHRpb25zW190aGlzMTAuaG92ZXJJbmRleF0pO1xuXHQgICAgICB9KTtcblx0ICAgIH0sXG5cdCAgICBzZWxlY3RPcHRpb246IGZ1bmN0aW9uIHNlbGVjdE9wdGlvbigpIHtcblx0ICAgICAgaWYgKHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdKSB7XG5cdCAgICAgICAgdGhpcy5oYW5kbGVPcHRpb25TZWxlY3QodGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZGVsZXRlU2VsZWN0ZWQ6IGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKGV2ZW50KSB7XG5cdCAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsICcnKTtcblx0ICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2NsZWFyJyk7XG5cdCAgICB9LFxuXHQgICAgZGVsZXRlVGFnOiBmdW5jdGlvbiBkZWxldGVUYWcoZXZlbnQsIHRhZykge1xuXHQgICAgICB2YXIgaW5kZXggPSB0aGlzLnNlbGVjdGVkLmluZGV4T2YodGFnKTtcblx0ICAgICAgaWYgKGluZGV4ID4gLTEgJiYgIXRoaXMuZGlzYWJsZWQpIHtcblx0ICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnNsaWNlKCk7XG5cdCAgICAgICAgdmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbHVlKTtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdyZW1vdmUtdGFnJywgdGFnKTtcblx0ICAgICAgfVxuXHQgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgIH0sXG5cdCAgICBvbklucHV0Q2hhbmdlOiBmdW5jdGlvbiBvbklucHV0Q2hhbmdlKCkge1xuXHQgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlKSB7XG5cdCAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuc2VsZWN0ZWRMYWJlbDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG9uT3B0aW9uRGVzdHJveTogZnVuY3Rpb24gb25PcHRpb25EZXN0cm95KG9wdGlvbikge1xuXHQgICAgICB0aGlzLm9wdGlvbnNDb3VudC0tO1xuXHQgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50LS07XG5cdCAgICAgIHZhciBpbmRleCA9IHRoaXMub3B0aW9ucy5pbmRleE9mKG9wdGlvbik7XG5cdCAgICAgIGlmIChpbmRleCA+IC0xKSB7XG5cdCAgICAgICAgdGhpcy5vcHRpb25zLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uJywgJ3Jlc2V0SW5kZXgnKTtcblx0ICAgIH0sXG5cdCAgICByZXNldElucHV0V2lkdGg6IGZ1bmN0aW9uIHJlc2V0SW5wdXRXaWR0aCgpIHtcblx0ICAgICAgdGhpcy5pbnB1dFdpZHRoID0gdGhpcy4kcmVmcy5yZWZlcmVuY2UuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZVJlc2l6ZTogZnVuY3Rpb24gaGFuZGxlUmVzaXplKCkge1xuXHQgICAgICB0aGlzLnJlc2V0SW5wdXRXaWR0aCgpO1xuXHQgICAgICBpZiAodGhpcy5tdWx0aXBsZSkgdGhpcy5yZXNldElucHV0SGVpZ2h0KCk7XG5cdCAgICB9LFxuXHQgICAgY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb246IGZ1bmN0aW9uIGNoZWNrRGVmYXVsdEZpcnN0T3B0aW9uKCkge1xuXHQgICAgICB0aGlzLmhvdmVySW5kZXggPSAtMTtcblx0ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgIT09IHRoaXMub3B0aW9ucy5sZW5ndGg7ICsraSkge1xuXHQgICAgICAgIHZhciBvcHRpb24gPSB0aGlzLm9wdGlvbnNbaV07XG5cdCAgICAgICAgaWYgKHRoaXMucXVlcnkpIHtcblx0ICAgICAgICAgIC8vIHBpY2sgZmlyc3Qgb3B0aW9ucyB0aGF0IHBhc3NlcyB0aGUgZmlsdGVyXG5cdCAgICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmdyb3VwRGlzYWJsZWQgJiYgb3B0aW9uLnZpc2libGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5ob3ZlckluZGV4ID0gaTtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIC8vIHBpY2sgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvblxuXHQgICAgICAgICAgaWYgKG9wdGlvbi5pdGVtU2VsZWN0ZWQpIHtcblx0ICAgICAgICAgICAgdGhpcy5ob3ZlckluZGV4ID0gaTtcblx0ICAgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZ2V0VmFsdWVLZXk6IGZ1bmN0aW9uIGdldFZhbHVlS2V5KGl0ZW0pIHtcblx0ICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVtLnZhbHVlKS50b0xvd2VyQ2FzZSgpICE9PSAnW29iamVjdCBvYmplY3RdJykge1xuXHQgICAgICAgIHJldHVybiBpdGVtLnZhbHVlO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHJldHVybiAoMCwgX3V0aWwuZ2V0VmFsdWVCeVBhdGgpKGl0ZW0udmFsdWUsIHRoaXMudmFsdWVLZXkpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG5cdCAgICB2YXIgX3RoaXMxMSA9IHRoaXM7XG5cblx0ICAgIHRoaXMuY2FjaGVkUGxhY2VIb2xkZXIgPSB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXI7XG5cdCAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuXHQgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIFtdKTtcblx0ICAgIH1cblx0ICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgJycpO1xuXHQgICAgfVxuXG5cdCAgICB0aGlzLmRlYm91bmNlZE9uSW5wdXRDaGFuZ2UgPSAoMCwgX2RlYm91bmNlMi5kZWZhdWx0KSh0aGlzLmRlYm91bmNlLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgIF90aGlzMTEub25JbnB1dENoYW5nZSgpO1xuXHQgICAgfSk7XG5cblx0ICAgIHRoaXMuJG9uKCdoYW5kbGVPcHRpb25DbGljaycsIHRoaXMuaGFuZGxlT3B0aW9uU2VsZWN0KTtcblx0ICAgIHRoaXMuJG9uKCdvbk9wdGlvbkRlc3Ryb3knLCB0aGlzLm9uT3B0aW9uRGVzdHJveSk7XG5cdCAgICB0aGlzLiRvbignc2V0U2VsZWN0ZWQnLCB0aGlzLnNldFNlbGVjdGVkKTtcblx0ICB9LFxuXHQgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdCAgICB2YXIgX3RoaXMxMiA9IHRoaXM7XG5cblx0ICAgIGlmICh0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG5cdCAgICAgIHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gJyc7XG5cdCAgICB9XG5cdCAgICAoMCwgX3Jlc2l6ZUV2ZW50LmFkZFJlc2l6ZUxpc3RlbmVyKSh0aGlzLiRlbCwgdGhpcy5oYW5kbGVSZXNpemUpO1xuXHQgICAgaWYgKHRoaXMucmVtb3RlICYmIHRoaXMubXVsdGlwbGUpIHtcblx0ICAgICAgdGhpcy5yZXNldElucHV0SGVpZ2h0KCk7XG5cdCAgICB9XG5cdCAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgIGlmIChfdGhpczEyLiRyZWZzLnJlZmVyZW5jZSAmJiBfdGhpczEyLiRyZWZzLnJlZmVyZW5jZS4kZWwpIHtcblx0ICAgICAgICBfdGhpczEyLmlucHV0V2lkdGggPSBfdGhpczEyLiRyZWZzLnJlZmVyZW5jZS4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cdCAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgdGhpcy5zZXRTZWxlY3RlZCgpO1xuXHQgIH0sXG5cdCAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcblx0ICAgIGlmICh0aGlzLiRlbCAmJiB0aGlzLmhhbmRsZVJlc2l6ZSkgKDAsIF9yZXNpemVFdmVudC5yZW1vdmVSZXNpemVMaXN0ZW5lcikodGhpcy4kZWwsIHRoaXMuaGFuZGxlUmVzaXplKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxMDIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTAzKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTA0KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMTAzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3Z1ZVBvcHBlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xuXG5cdHZhciBfdnVlUG9wcGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZVBvcHBlcik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsU2VsZWN0RHJvcGRvd24nLFxuXG5cdCAgY29tcG9uZW50TmFtZTogJ0VsU2VsZWN0RHJvcGRvd24nLFxuXG5cdCAgbWl4aW5zOiBbX3Z1ZVBvcHBlcjIuZGVmYXVsdF0sXG5cblx0ICBwcm9wczoge1xuXHQgICAgcGxhY2VtZW50OiB7XG5cdCAgICAgIGRlZmF1bHQ6ICdib3R0b20tc3RhcnQnXG5cdCAgICB9LFxuXG5cdCAgICBib3VuZGFyaWVzUGFkZGluZzoge1xuXHQgICAgICBkZWZhdWx0OiAwXG5cdCAgICB9LFxuXG5cdCAgICBwb3BwZXJPcHRpb25zOiB7XG5cdCAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICBncHVBY2NlbGVyYXRpb246IGZhbHNlXG5cdCAgICAgICAgfTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgbWluV2lkdGg6ICcnXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBwb3BwZXJDbGFzczogZnVuY3Rpb24gcG9wcGVyQ2xhc3MoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQucG9wcGVyQ2xhc3M7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHdhdGNoOiB7XG5cdCAgICAnJHBhcmVudC5pbnB1dFdpZHRoJzogZnVuY3Rpb24gJHBhcmVudElucHV0V2lkdGgoKSB7XG5cdCAgICAgIHRoaXMubWluV2lkdGggPSB0aGlzLiRwYXJlbnQuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICsgJ3B4Jztcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcblx0ICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgIHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy4kcGFyZW50LiRyZWZzLnJlZmVyZW5jZS4kZWw7XG5cdCAgICB0aGlzLiRwYXJlbnQucG9wcGVyRWxtID0gdGhpcy5wb3BwZXJFbG0gPSB0aGlzLiRlbDtcblx0ICAgIHRoaXMuJG9uKCd1cGRhdGVQb3BwZXInLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgIGlmIChfdGhpcy4kcGFyZW50LnZpc2libGUpIF90aGlzLnVwZGF0ZVBvcHBlcigpO1xuXHQgICAgfSk7XG5cdCAgICB0aGlzLiRvbignZGVzdHJveVBvcHBlcicsIHRoaXMuZGVzdHJveVBvcHBlcik7XG5cdCAgfVxuXHR9OyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG4vKioqLyB9LFxuLyogMTA0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0LWRyb3Bkb3duXCIsXG5cdCAgICBjbGFzczogW3tcblx0ICAgICAgJ2lzLW11bHRpcGxlJzogX3ZtLiRwYXJlbnQubXVsdGlwbGVcblx0ICAgIH0sIF92bS5wb3BwZXJDbGFzc10sXG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgbWluV2lkdGg6IF92bS5taW5XaWR0aFxuXHQgICAgfSlcblx0ICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDEwNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxMDYpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxMDgpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAxMDYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHR2YXIgX2VtaXR0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblxuXHR2YXIgX2VtaXR0ZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW1pdHRlcik7XG5cblx0dmFyIF91dGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDcpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG1peGluczogW19lbWl0dGVyMi5kZWZhdWx0XSxcblxuXHQgIG5hbWU6ICdFbE9wdGlvbicsXG5cblx0ICBjb21wb25lbnROYW1lOiAnRWxPcHRpb24nLFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIHZhbHVlOiB7XG5cdCAgICAgIHJlcXVpcmVkOiB0cnVlXG5cdCAgICB9LFxuXHQgICAgbGFiZWw6IFtTdHJpbmcsIE51bWJlcl0sXG5cdCAgICBjcmVhdGVkOiBCb29sZWFuLFxuXHQgICAgZGlzYWJsZWQ6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogZmFsc2Vcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIGluZGV4OiAtMSxcblx0ICAgICAgZ3JvdXBEaXNhYmxlZDogZmFsc2UsXG5cdCAgICAgIHZpc2libGU6IHRydWUsXG5cdCAgICAgIGhpdFN0YXRlOiBmYWxzZVxuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgaXNPYmplY3Q6IGZ1bmN0aW9uIGlzT2JqZWN0KCkge1xuXHQgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMudmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICdbb2JqZWN0IG9iamVjdF0nO1xuXHQgICAgfSxcblx0ICAgIGN1cnJlbnRMYWJlbDogZnVuY3Rpb24gY3VycmVudExhYmVsKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5sYWJlbCB8fCAodGhpcy5pc09iamVjdCA/ICcnIDogdGhpcy52YWx1ZSk7XG5cdCAgICB9LFxuXHQgICAgY3VycmVudFZhbHVlOiBmdW5jdGlvbiBjdXJyZW50VmFsdWUoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHRoaXMubGFiZWwgfHwgJyc7XG5cdCAgICB9LFxuXHQgICAgcGFyZW50OiBmdW5jdGlvbiBwYXJlbnQoKSB7XG5cdCAgICAgIHZhciByZXN1bHQgPSB0aGlzLiRwYXJlbnQ7XG5cdCAgICAgIHdoaWxlICghcmVzdWx0LmlzU2VsZWN0KSB7XG5cdCAgICAgICAgcmVzdWx0ID0gcmVzdWx0LiRwYXJlbnQ7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJlc3VsdDtcblx0ICAgIH0sXG5cdCAgICBpdGVtU2VsZWN0ZWQ6IGZ1bmN0aW9uIGl0ZW1TZWxlY3RlZCgpIHtcblx0ICAgICAgaWYgKCF0aGlzLnBhcmVudC5tdWx0aXBsZSkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmlzRXF1YWwodGhpcy52YWx1ZSwgdGhpcy5wYXJlbnQudmFsdWUpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zKHRoaXMucGFyZW50LnZhbHVlLCB0aGlzLnZhbHVlKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGxpbWl0UmVhY2hlZDogZnVuY3Rpb24gbGltaXRSZWFjaGVkKCkge1xuXHQgICAgICBpZiAodGhpcy5wYXJlbnQubXVsdGlwbGUpIHtcblx0ICAgICAgICByZXR1cm4gIXRoaXMuaXRlbVNlbGVjdGVkICYmIHRoaXMucGFyZW50LnZhbHVlLmxlbmd0aCA+PSB0aGlzLnBhcmVudC5tdWx0aXBsZUxpbWl0ICYmIHRoaXMucGFyZW50Lm11bHRpcGxlTGltaXQgPiAwO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICB3YXRjaDoge1xuXHQgICAgY3VycmVudExhYmVsOiBmdW5jdGlvbiBjdXJyZW50TGFiZWwoKSB7XG5cdCAgICAgIGlmICghdGhpcy5jcmVhdGVkICYmICF0aGlzLnBhcmVudC5yZW1vdGUpIHRoaXMuZGlzcGF0Y2goJ0VsU2VsZWN0JywgJ3NldFNlbGVjdGVkJyk7XG5cdCAgICB9LFxuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKCkge1xuXHQgICAgICBpZiAoIXRoaXMuY3JlYXRlZCAmJiAhdGhpcy5wYXJlbnQucmVtb3RlKSB0aGlzLmRpc3BhdGNoKCdFbFNlbGVjdCcsICdzZXRTZWxlY3RlZCcpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBpc0VxdWFsOiBmdW5jdGlvbiBpc0VxdWFsKGEsIGIpIHtcblx0ICAgICAgaWYgKCF0aGlzLmlzT2JqZWN0KSB7XG5cdCAgICAgICAgcmV0dXJuIGEgPT09IGI7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdmFyIHZhbHVlS2V5ID0gdGhpcy5wYXJlbnQudmFsdWVLZXk7XG5cdCAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5nZXRWYWx1ZUJ5UGF0aCkoYSwgdmFsdWVLZXkpID09PSAoMCwgX3V0aWwuZ2V0VmFsdWVCeVBhdGgpKGIsIHZhbHVlS2V5KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNvbnRhaW5zOiBmdW5jdGlvbiBjb250YWlucygpIHtcblx0ICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgICB2YXIgYXJyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBbXTtcblx0ICAgICAgdmFyIHRhcmdldCA9IGFyZ3VtZW50c1sxXTtcblxuXHQgICAgICBpZiAoIXRoaXMuaXNPYmplY3QpIHtcblx0ICAgICAgICByZXR1cm4gYXJyLmluZGV4T2YodGFyZ2V0KSA+IC0xO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHZhciBfcmV0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgdmFyIHZhbHVlS2V5ID0gX3RoaXMucGFyZW50LnZhbHVlS2V5O1xuXHQgICAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgdjogYXJyLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLmdldFZhbHVlQnlQYXRoKShpdGVtLCB2YWx1ZUtleSkgPT09ICgwLCBfdXRpbC5nZXRWYWx1ZUJ5UGF0aCkodGFyZ2V0LCB2YWx1ZUtleSk7XG5cdCAgICAgICAgICAgIH0pXG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgIH0oKTtcblxuXHQgICAgICAgIGlmICgodHlwZW9mIF9yZXQgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKF9yZXQpKSA9PT0gXCJvYmplY3RcIikgcmV0dXJuIF9yZXQudjtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGhhbmRsZUdyb3VwRGlzYWJsZWQ6IGZ1bmN0aW9uIGhhbmRsZUdyb3VwRGlzYWJsZWQodmFsKSB7XG5cdCAgICAgIHRoaXMuZ3JvdXBEaXNhYmxlZCA9IHZhbDtcblx0ICAgIH0sXG5cdCAgICBob3Zlckl0ZW06IGZ1bmN0aW9uIGhvdmVySXRlbSgpIHtcblx0ICAgICAgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLmdyb3VwRGlzYWJsZWQpIHtcblx0ICAgICAgICB0aGlzLnBhcmVudC5ob3ZlckluZGV4ID0gdGhpcy5wYXJlbnQub3B0aW9ucy5pbmRleE9mKHRoaXMpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2VsZWN0T3B0aW9uQ2xpY2s6IGZ1bmN0aW9uIHNlbGVjdE9wdGlvbkNsaWNrKCkge1xuXHQgICAgICBpZiAodGhpcy5kaXNhYmxlZCAhPT0gdHJ1ZSAmJiB0aGlzLmdyb3VwRGlzYWJsZWQgIT09IHRydWUpIHtcblx0ICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbFNlbGVjdCcsICdoYW5kbGVPcHRpb25DbGljaycsIHRoaXMpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcXVlcnlDaGFuZ2U6IGZ1bmN0aW9uIHF1ZXJ5Q2hhbmdlKHF1ZXJ5KSB7XG5cdCAgICAgIC8vIHF1ZXJ5IOmHjOWmguaenOacieato+WImeS4reeahOeJueauiuWtl+espu+8jOmcgOimgeWFiOWwhui/meS6m+Wtl+espui9rOS5iVxuXHQgICAgICB2YXIgcGFyc2VkUXVlcnkgPSBTdHJpbmcocXVlcnkpLnJlcGxhY2UoLyhcXF58XFwofFxcKXxcXFt8XFxdfFxcJHxcXCp8XFwrfFxcLnxcXD98XFxcXHxcXHt8XFx9fFxcfCkvZywgJ1xcXFwkMScpO1xuXHQgICAgICB0aGlzLnZpc2libGUgPSBuZXcgUmVnRXhwKHBhcnNlZFF1ZXJ5LCAnaScpLnRlc3QodGhpcy5jdXJyZW50TGFiZWwpIHx8IHRoaXMuY3JlYXRlZDtcblx0ICAgICAgaWYgKCF0aGlzLnZpc2libGUpIHtcblx0ICAgICAgICB0aGlzLnBhcmVudC5maWx0ZXJlZE9wdGlvbnNDb3VudC0tO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVzZXRJbmRleDogZnVuY3Rpb24gcmVzZXRJbmRleCgpIHtcblx0ICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cblx0ICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIF90aGlzMi5pbmRleCA9IF90aGlzMi5wYXJlbnQub3B0aW9ucy5pbmRleE9mKF90aGlzMik7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgdGhpcy5wYXJlbnQub3B0aW9ucy5wdXNoKHRoaXMpO1xuXHQgICAgdGhpcy5wYXJlbnQuY2FjaGVkT3B0aW9ucy5wdXNoKHRoaXMpO1xuXHQgICAgdGhpcy5wYXJlbnQub3B0aW9uc0NvdW50Kys7XG5cdCAgICB0aGlzLnBhcmVudC5maWx0ZXJlZE9wdGlvbnNDb3VudCsrO1xuXHQgICAgdGhpcy5pbmRleCA9IHRoaXMucGFyZW50Lm9wdGlvbnMuaW5kZXhPZih0aGlzKTtcblxuXHQgICAgdGhpcy4kb24oJ3F1ZXJ5Q2hhbmdlJywgdGhpcy5xdWVyeUNoYW5nZSk7XG5cdCAgICB0aGlzLiRvbignaGFuZGxlR3JvdXBEaXNhYmxlZCcsIHRoaXMuaGFuZGxlR3JvdXBEaXNhYmxlZCk7XG5cdCAgICB0aGlzLiRvbigncmVzZXRJbmRleCcsIHRoaXMucmVzZXRJbmRleCk7XG5cdCAgfSxcblx0ICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuXHQgICAgdGhpcy5kaXNwYXRjaCgnRWxTZWxlY3QnLCAnb25PcHRpb25EZXN0cm95JywgdGhpcyk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMTA3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy91dGlsXCIpO1xuXG4vKioqLyB9LFxuLyogMTA4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnbGknLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0udmlzaWJsZSksXG5cdCAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdC1kcm9wZG93bl9faXRlbVwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ3NlbGVjdGVkJzogX3ZtLml0ZW1TZWxlY3RlZCxcblx0ICAgICAgJ2lzLWRpc2FibGVkJzogX3ZtLmRpc2FibGVkIHx8IF92bS5ncm91cERpc2FibGVkIHx8IF92bS5saW1pdFJlYWNoZWQsXG5cdCAgICAgICAgJ2hvdmVyJzogX3ZtLnBhcmVudC5ob3ZlckluZGV4ID09PSBfdm0uaW5kZXhcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcIm1vdXNlZW50ZXJcIjogX3ZtLmhvdmVySXRlbSxcblx0ICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgICAgX3ZtLnNlbGVjdE9wdGlvbkNsaWNrKCRldmVudClcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIsIFtfYygnc3BhbicsIFtfdm0uX3YoX3ZtLl9zKF92bS5jdXJyZW50TGFiZWwpKV0pXSldLCAyKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAxMDkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3RhZ1wiKTtcblxuLyoqKi8gfSxcbi8qIDExMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvcmVzaXplLWV2ZW50XCIpO1xuXG4vKioqLyB9LFxuLyogMTExICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9sb2NhbGVcIik7XG5cbi8qKiovIH0sXG4vKiAxMTIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Njcm9sbC1pbnRvLXZpZXdcIik7XG5cbi8qKiovIH0sXG4vKiAxMTMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcImNsaWNrb3V0c2lkZVwiLFxuXHQgICAgICByYXdOYW1lOiBcInYtY2xpY2tvdXRzaWRlXCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLmhhbmRsZUNsb3NlKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJoYW5kbGVDbG9zZVwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdFwiXG5cdCAgfSwgWyhfdm0ubXVsdGlwbGUpID8gX2MoJ2RpdicsIHtcblx0ICAgIHJlZjogXCJ0YWdzXCIsXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3RfX3RhZ3NcIixcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICAnbWF4LXdpZHRoJzogX3ZtLmlucHV0V2lkdGggLSAzMiArICdweCdcblx0ICAgIH0pLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgICAgX3ZtLnRvZ2dsZU1lbnUoJGV2ZW50KVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSwgW19jKCd0cmFuc2l0aW9uLWdyb3VwJywge1xuXHQgICAgb246IHtcblx0ICAgICAgXCJhZnRlci1sZWF2ZVwiOiBfdm0ucmVzZXRJbnB1dEhlaWdodFxuXHQgICAgfVxuXHQgIH0sIF92bS5fbCgoX3ZtLnNlbGVjdGVkKSwgZnVuY3Rpb24oaXRlbSkge1xuXHQgICAgcmV0dXJuIF9jKCdlbC10YWcnLCB7XG5cdCAgICAgIGtleTogX3ZtLmdldFZhbHVlS2V5KGl0ZW0pLFxuXHQgICAgICBhdHRyczoge1xuXHQgICAgICAgIFwiY2xvc2FibGVcIjogIV92bS5kaXNhYmxlZCxcblx0ICAgICAgICBcImhpdFwiOiBpdGVtLmhpdFN0YXRlLFxuXHQgICAgICAgIFwidHlwZVwiOiBcInByaW1hcnlcIixcblx0ICAgICAgICBcImNsb3NlLXRyYW5zaXRpb25cIjogXCJcIlxuXHQgICAgICB9LFxuXHQgICAgICBvbjoge1xuXHQgICAgICAgIFwiY2xvc2VcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgICBfdm0uZGVsZXRlVGFnKCRldmVudCwgaXRlbSlcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sIFtfYygnc3BhbicsIHtcblx0ICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0X190YWdzLXRleHRcIlxuXHQgICAgfSwgW192bS5fdihfdm0uX3MoaXRlbS5jdXJyZW50TGFiZWwpKV0pXSlcblx0ICB9KSksIChfdm0uZmlsdGVyYWJsZSkgPyBfYygnaW5wdXQnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcIm1vZGVsXCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuXHQgICAgICB2YWx1ZTogKF92bS5xdWVyeSksXG5cdCAgICAgIGV4cHJlc3Npb246IFwicXVlcnlcIlxuXHQgICAgfV0sXG5cdCAgICByZWY6IFwiaW5wdXRcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdF9faW5wdXRcIixcblx0ICAgIGNsYXNzOiAoXCJpcy1cIiArIF92bS5zaXplKSxcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICB3aWR0aDogX3ZtLmlucHV0TGVuZ3RoICsgJ3B4Jyxcblx0ICAgICAgJ21heC13aWR0aCc6IF92bS5pbnB1dFdpZHRoIC0gNDIgKyAncHgnXG5cdCAgICB9KSxcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidHlwZVwiOiBcInRleHRcIixcblx0ICAgICAgXCJkaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWQsXG5cdCAgICAgIFwiZGVib3VuY2VcIjogX3ZtLnJlbW90ZSA/IDMwMCA6IDBcblx0ICAgIH0sXG5cdCAgICBkb21Qcm9wczoge1xuXHQgICAgICBcInZhbHVlXCI6IChfdm0ucXVlcnkpXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJmb2N1c1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0udmlzaWJsZSA9IHRydWVcblx0ICAgICAgfSxcblx0ICAgICAgXCJrZXl1cFwiOiBfdm0ubWFuYWdlUGxhY2Vob2xkZXIsXG5cdCAgICAgIFwia2V5ZG93blwiOiBbX3ZtLnJlc2V0SW5wdXRTdGF0ZSwgZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKCEoJ2J1dHRvbicgaW4gJGV2ZW50KSAmJiBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZG93blwiLCA0MCkpIHsgcmV0dXJuIG51bGw7IH1cblx0ICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICBfdm0ubmF2aWdhdGVPcHRpb25zKCduZXh0Jylcblx0ICAgICAgfSwgZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKCEoJ2J1dHRvbicgaW4gJGV2ZW50KSAmJiBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwidXBcIiwgMzgpKSB7IHJldHVybiBudWxsOyB9XG5cdCAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgX3ZtLm5hdmlnYXRlT3B0aW9ucygncHJldicpXG5cdCAgICAgIH0sIGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIGlmICghKCdidXR0b24nIGluICRldmVudCkgJiYgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVudGVyXCIsIDEzKSkgeyByZXR1cm4gbnVsbDsgfVxuXHQgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIF92bS5zZWxlY3RPcHRpb24oJGV2ZW50KVxuXHQgICAgICB9LCBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBpZiAoISgnYnV0dG9uJyBpbiAkZXZlbnQpICYmIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlc2NcIiwgMjcpKSB7IHJldHVybiBudWxsOyB9XG5cdCAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIF92bS52aXNpYmxlID0gZmFsc2Vcblx0ICAgICAgfSwgZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKCEoJ2J1dHRvbicgaW4gJGV2ZW50KSAmJiBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZGVsZXRlXCIsIFs4LCA0Nl0pKSB7IHJldHVybiBudWxsOyB9XG5cdCAgICAgICAgX3ZtLmRlbGV0ZVByZXZUYWcoJGV2ZW50KVxuXHQgICAgICB9XSxcblx0ICAgICAgXCJpbnB1dFwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHsgcmV0dXJuOyB9XG5cdCAgICAgICAgX3ZtLnF1ZXJ5ID0gJGV2ZW50LnRhcmdldC52YWx1ZVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSkgOiBfdm0uX2UoKV0sIDEpIDogX3ZtLl9lKCksIF9jKCdlbC1pbnB1dCcsIHtcblx0ICAgIHJlZjogXCJyZWZlcmVuY2VcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidHlwZVwiOiBcInRleHRcIixcblx0ICAgICAgXCJwbGFjZWhvbGRlclwiOiBfdm0uY3VycmVudFBsYWNlaG9sZGVyLFxuXHQgICAgICBcIm5hbWVcIjogX3ZtLm5hbWUsXG5cdCAgICAgIFwic2l6ZVwiOiBfdm0uc2l6ZSxcblx0ICAgICAgXCJkaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWQsXG5cdCAgICAgIFwicmVhZG9ubHlcIjogIV92bS5maWx0ZXJhYmxlIHx8IF92bS5tdWx0aXBsZSxcblx0ICAgICAgXCJ2YWxpZGF0ZS1ldmVudFwiOiBmYWxzZSxcblx0ICAgICAgXCJpY29uXCI6IF92bS5pY29uQ2xhc3Ncblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImZvY3VzXCI6IF92bS5oYW5kbGVGb2N1cyxcblx0ICAgICAgXCJjbGlja1wiOiBfdm0uaGFuZGxlSWNvbkNsaWNrXG5cdCAgICB9LFxuXHQgICAgbmF0aXZlT246IHtcblx0ICAgICAgXCJtb3VzZWRvd25cIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmhhbmRsZU1vdXNlRG93bigkZXZlbnQpXG5cdCAgICAgIH0sXG5cdCAgICAgIFwia2V5dXBcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmRlYm91bmNlZE9uSW5wdXRDaGFuZ2UoJGV2ZW50KVxuXHQgICAgICB9LFxuXHQgICAgICBcImtleWRvd25cIjogW2Z1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIGlmICghKCdidXR0b24nIGluICRldmVudCkgJiYgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImRvd25cIiwgNDApKSB7IHJldHVybiBudWxsOyB9XG5cdCAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgX3ZtLm5hdmlnYXRlT3B0aW9ucygnbmV4dCcpXG5cdCAgICAgIH0sIGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIGlmICghKCdidXR0b24nIGluICRldmVudCkgJiYgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInVwXCIsIDM4KSkgeyByZXR1cm4gbnVsbDsgfVxuXHQgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIF92bS5uYXZpZ2F0ZU9wdGlvbnMoJ3ByZXYnKVxuXHQgICAgICB9LCBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBpZiAoISgnYnV0dG9uJyBpbiAkZXZlbnQpICYmIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlbnRlclwiLCAxMykpIHsgcmV0dXJuIG51bGw7IH1cblx0ICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICBfdm0uc2VsZWN0T3B0aW9uKCRldmVudClcblx0ICAgICAgfSwgZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKCEoJ2J1dHRvbicgaW4gJGV2ZW50KSAmJiBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZXNjXCIsIDI3KSkgeyByZXR1cm4gbnVsbDsgfVxuXHQgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICBfdm0udmlzaWJsZSA9IGZhbHNlXG5cdCAgICAgIH0sIGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIGlmICghKCdidXR0b24nIGluICRldmVudCkgJiYgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInRhYlwiLCA5KSkgeyByZXR1cm4gbnVsbDsgfVxuXHQgICAgICAgIF92bS52aXNpYmxlID0gZmFsc2Vcblx0ICAgICAgfV0sXG5cdCAgICAgIFwicGFzdGVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmRlYm91bmNlZE9uSW5wdXRDaGFuZ2UoJGV2ZW50KVxuXHQgICAgICB9LFxuXHQgICAgICBcIm1vdXNlZW50ZXJcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmlucHV0SG92ZXJpbmcgPSB0cnVlXG5cdCAgICAgIH0sXG5cdCAgICAgIFwibW91c2VsZWF2ZVwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uaW5wdXRIb3ZlcmluZyA9IGZhbHNlXG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtb2RlbDoge1xuXHQgICAgICB2YWx1ZTogKF92bS5zZWxlY3RlZExhYmVsKSxcblx0ICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuXHQgICAgICAgIF92bS5zZWxlY3RlZExhYmVsID0gJCR2XG5cdCAgICAgIH0sXG5cdCAgICAgIGV4cHJlc3Npb246IFwic2VsZWN0ZWRMYWJlbFwiXG5cdCAgICB9XG5cdCAgfSksIF9jKCd0cmFuc2l0aW9uJywge1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJuYW1lXCI6IFwiZWwtem9vbS1pbi10b3BcIlxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiYmVmb3JlLWVudGVyXCI6IF92bS5oYW5kbGVNZW51RW50ZXIsXG5cdCAgICAgIFwiYWZ0ZXItbGVhdmVcIjogX3ZtLmRvRGVzdHJveVxuXHQgICAgfVxuXHQgIH0sIFtfYygnZWwtc2VsZWN0LW1lbnUnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0udmlzaWJsZSAmJiBfdm0uZW1wdHlUZXh0ICE9PSBmYWxzZSksXG5cdCAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZSAmJiBlbXB0eVRleHQgIT09IGZhbHNlXCJcblx0ICAgIH1dLFxuXHQgICAgcmVmOiBcInBvcHBlclwiXG5cdCAgfSwgW19jKCdlbC1zY3JvbGxiYXInLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0ub3B0aW9ucy5sZW5ndGggPiAwICYmICFfdm0ubG9hZGluZyksXG5cdCAgICAgIGV4cHJlc3Npb246IFwib3B0aW9ucy5sZW5ndGggPiAwICYmICFsb2FkaW5nXCJcblx0ICAgIH1dLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2lzLWVtcHR5JzogIV92bS5hbGxvd0NyZWF0ZSAmJiBfdm0uZmlsdGVyZWRPcHRpb25zQ291bnQgPT09IDBcblx0ICAgIH0sXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInRhZ1wiOiBcInVsXCIsXG5cdCAgICAgIFwid3JhcC1jbGFzc1wiOiBcImVsLXNlbGVjdC1kcm9wZG93bl9fd3JhcFwiLFxuXHQgICAgICBcInZpZXctY2xhc3NcIjogXCJlbC1zZWxlY3QtZHJvcGRvd25fX2xpc3RcIlxuXHQgICAgfVxuXHQgIH0sIFsoX3ZtLnNob3dOZXdPcHRpb24pID8gX2MoJ2VsLW9wdGlvbicsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidmFsdWVcIjogX3ZtLnF1ZXJ5LFxuXHQgICAgICBcImNyZWF0ZWRcIjogXCJcIlxuXHQgICAgfVxuXHQgIH0pIDogX3ZtLl9lKCksIF92bS5fdChcImRlZmF1bHRcIildLCAyKSwgKF92bS5lbXB0eVRleHQgJiYgKF92bS5hbGxvd0NyZWF0ZSAmJiBfdm0ub3B0aW9ucy5sZW5ndGggPT09IDAgfHwgIV92bS5hbGxvd0NyZWF0ZSkpID8gX2MoJ3AnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3QtZHJvcGRvd25fX2VtcHR5XCJcblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0uZW1wdHlUZXh0KSldKSA6IF92bS5fZSgpXSwgMSldLCAxKV0sIDEpXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDExNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9vcHRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNSk7XG5cblx0dmFyIF9vcHRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfb3B0aW9uKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9vcHRpb24yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9vcHRpb24yLmRlZmF1bHQubmFtZSwgX29wdGlvbjIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX29wdGlvbjIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDExNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9vcHRpb25Hcm91cCA9IF9fd2VicGFja19yZXF1aXJlX18oMTE2KTtcblxuXHR2YXIgX29wdGlvbkdyb3VwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX29wdGlvbkdyb3VwKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9vcHRpb25Hcm91cDIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX29wdGlvbkdyb3VwMi5kZWZhdWx0Lm5hbWUsIF9vcHRpb25Hcm91cDIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX29wdGlvbkdyb3VwMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogMTE2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNyksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDExOCksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDExNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cblx0dmFyIF9lbWl0dGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VtaXR0ZXIpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG1peGluczogW19lbWl0dGVyMi5kZWZhdWx0XSxcblxuXHQgIG5hbWU6ICdFbE9wdGlvbkdyb3VwJyxcblxuXHQgIGNvbXBvbmVudE5hbWU6ICdFbE9wdGlvbkdyb3VwJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBsYWJlbDogU3RyaW5nLFxuXHQgICAgZGlzYWJsZWQ6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogZmFsc2Vcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHZpc2libGU6IHRydWVcblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgIGRpc2FibGVkOiBmdW5jdGlvbiBkaXNhYmxlZCh2YWwpIHtcblx0ICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uJywgJ2hhbmRsZUdyb3VwRGlzYWJsZWQnLCB2YWwpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBxdWVyeUNoYW5nZTogZnVuY3Rpb24gcXVlcnlDaGFuZ2UoKSB7XG5cdCAgICAgIHRoaXMudmlzaWJsZSA9IHRoaXMuJGNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkodGhpcy4kY2hpbGRyZW4pICYmIHRoaXMuJGNoaWxkcmVuLnNvbWUoZnVuY3Rpb24gKG9wdGlvbikge1xuXHQgICAgICAgIHJldHVybiBvcHRpb24udmlzaWJsZSA9PT0gdHJ1ZTtcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG5cdCAgICB0aGlzLiRvbigncXVlcnlDaGFuZ2UnLCB0aGlzLnF1ZXJ5Q2hhbmdlKTtcblx0ICB9LFxuXHQgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdCAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuXHQgICAgICB0aGlzLmJyb2FkY2FzdCgnRWxPcHRpb24nLCAnaGFuZGxlR3JvdXBEaXNhYmxlZCcsIHRoaXMuZGlzYWJsZWQpO1xuXHQgICAgfVxuXHQgIH1cblx0fTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuLyoqKi8gfSxcbi8qIDExOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ3VsJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0LWdyb3VwX193cmFwXCJcblx0ICB9LCBbX2MoJ2xpJywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLnZpc2libGUpLFxuXHQgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3QtZ3JvdXBfX3RpdGxlXCJcblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0ubGFiZWwpKV0pLCBfYygnbGknLCBbX2MoJ3VsJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0LWdyb3VwXCJcblx0ICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXSldKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAxMTkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfYnV0dG9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjApO1xuXG5cdHZhciBfYnV0dG9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2J1dHRvbik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfYnV0dG9uMi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfYnV0dG9uMi5kZWZhdWx0Lm5hbWUsIF9idXR0b24yLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9idXR0b24yLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAxMjAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTIxKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTIyKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMTIxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsQnV0dG9uJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICB0eXBlOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2RlZmF1bHQnXG5cdCAgICB9LFxuXHQgICAgc2l6ZTogU3RyaW5nLFxuXHQgICAgaWNvbjoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICcnXG5cdCAgICB9LFxuXHQgICAgbmF0aXZlVHlwZToge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICdidXR0b24nXG5cdCAgICB9LFxuXHQgICAgbG9hZGluZzogQm9vbGVhbixcblx0ICAgIGRpc2FibGVkOiBCb29sZWFuLFxuXHQgICAgcGxhaW46IEJvb2xlYW4sXG5cdCAgICBhdXRvZm9jdXM6IEJvb2xlYW5cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2dCkge1xuXHQgICAgICB0aGlzLiRlbWl0KCdjbGljaycsIGV2dCk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlSW5uZXJDbGljazogZnVuY3Rpb24gaGFuZGxlSW5uZXJDbGljayhldnQpIHtcblx0ICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcblx0ICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxMjIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdidXR0b24nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1idXR0b25cIixcblx0ICAgIGNsYXNzOiBbXG5cdCAgICAgIF92bS50eXBlID8gJ2VsLWJ1dHRvbi0tJyArIF92bS50eXBlIDogJycsXG5cdCAgICAgIF92bS5zaXplID8gJ2VsLWJ1dHRvbi0tJyArIF92bS5zaXplIDogJycsIHtcblx0ICAgICAgICAnaXMtZGlzYWJsZWQnOiBfdm0uZGlzYWJsZWQsXG5cdCAgICAgICAgJ2lzLWxvYWRpbmcnOiBfdm0ubG9hZGluZyxcblx0ICAgICAgICAnaXMtcGxhaW4nOiBfdm0ucGxhaW5cblx0ICAgICAgfVxuXHQgICAgXSxcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwiZGlzYWJsZWRcIjogX3ZtLmRpc2FibGVkLFxuXHQgICAgICBcImF1dG9mb2N1c1wiOiBfdm0uYXV0b2ZvY3VzLFxuXHQgICAgICBcInR5cGVcIjogX3ZtLm5hdGl2ZVR5cGVcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5oYW5kbGVDbGlja1xuXHQgICAgfVxuXHQgIH0sIFsoX3ZtLmxvYWRpbmcpID8gX2MoJ2knLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1pY29uLWxvYWRpbmdcIixcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLmhhbmRsZUlubmVyQ2xpY2tcblx0ICAgIH1cblx0ICB9KSA6IF92bS5fZSgpLCAoX3ZtLmljb24gJiYgIV92bS5sb2FkaW5nKSA/IF9jKCdpJywge1xuXHQgICAgY2xhc3M6ICdlbC1pY29uLScgKyBfdm0uaWNvbixcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLmhhbmRsZUlubmVyQ2xpY2tcblx0ICAgIH1cblx0ICB9KSA6IF92bS5fZSgpLCAoX3ZtLiRzbG90cy5kZWZhdWx0KSA/IF9jKCdzcGFuJywge1xuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0uaGFuZGxlSW5uZXJDbGlja1xuXHQgICAgfVxuXHQgIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMikgOiBfdm0uX2UoKV0pXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDEyMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9idXR0b25Hcm91cCA9IF9fd2VicGFja19yZXF1aXJlX18oMTI0KTtcblxuXHR2YXIgX2J1dHRvbkdyb3VwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2J1dHRvbkdyb3VwKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9idXR0b25Hcm91cDIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX2J1dHRvbkdyb3VwMi5kZWZhdWx0Lm5hbWUsIF9idXR0b25Hcm91cDIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX2J1dHRvbkdyb3VwMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogMTI0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNSksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNiksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDEyNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0LyoqXG5cdCAqIGJ1dHRvblxuXHQgKiBAbW9kdWxlIGNvbXBvbmVudHMvYmFzaWMvbWVudVxuXHQgKiBAZGVzYyDnlKjkuo7mjInpkq7nu4Rcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0g5ZCN56ewXG5cdCAqL1xuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsQnV0dG9uR3JvdXAnXG5cdH07XG5cbi8qKiovIH0sXG4vKiAxMjYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1idXR0b24tZ3JvdXBcIlxuXHQgIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMTI3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3RhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjgpO1xuXG5cdHZhciBfdGFibGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdGFibGUpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X3RhYmxlMi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfdGFibGUyLmRlZmF1bHQubmFtZSwgX3RhYmxlMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfdGFibGUyLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAxMjggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTI5KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTQ2KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMTI5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2NoZWNrYm94ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzApO1xuXG5cdHZhciBfY2hlY2tib3gyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2hlY2tib3gpO1xuXG5cdHZhciBfdGhyb3R0bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMSk7XG5cblx0dmFyIF90aHJvdHRsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90aHJvdHRsZSk7XG5cblx0dmFyIF9kZWJvdW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xuXG5cdHZhciBfZGVib3VuY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVib3VuY2UpO1xuXG5cdHZhciBfcmVzaXplRXZlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMCk7XG5cblx0dmFyIF9sb2NhbGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcblxuXHR2YXIgX2xvY2FsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sb2NhbGUpO1xuXG5cdHZhciBfdGFibGVTdG9yZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMyKTtcblxuXHR2YXIgX3RhYmxlU3RvcmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdGFibGVTdG9yZSk7XG5cblx0dmFyIF90YWJsZUxheW91dCA9IF9fd2VicGFja19yZXF1aXJlX18oMTM1KTtcblxuXHR2YXIgX3RhYmxlTGF5b3V0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3RhYmxlTGF5b3V0KTtcblxuXHR2YXIgX3RhYmxlQm9keSA9IF9fd2VicGFja19yZXF1aXJlX18oMTM3KTtcblxuXHR2YXIgX3RhYmxlQm9keTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90YWJsZUJvZHkpO1xuXG5cdHZhciBfdGFibGVIZWFkZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOSk7XG5cblx0dmFyIF90YWJsZUhlYWRlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90YWJsZUhlYWRlcik7XG5cblx0dmFyIF90YWJsZUZvb3RlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ1KTtcblxuXHR2YXIgX3RhYmxlRm9vdGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3RhYmxlRm9vdGVyKTtcblxuXHR2YXIgX3V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHR2YXIgdGFibGVJZFNlZWQgPSAxOyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxUYWJsZScsXG5cblx0ICBtaXhpbnM6IFtfbG9jYWxlMi5kZWZhdWx0XSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBkYXRhOiB7XG5cdCAgICAgIHR5cGU6IEFycmF5LFxuXHQgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcblx0ICAgICAgICByZXR1cm4gW107XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cblx0ICAgIHdpZHRoOiBbU3RyaW5nLCBOdW1iZXJdLFxuXG5cdCAgICBoZWlnaHQ6IFtTdHJpbmcsIE51bWJlcl0sXG5cblx0ICAgIG1heEhlaWdodDogW1N0cmluZywgTnVtYmVyXSxcblxuXHQgICAgZml0OiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IHRydWVcblx0ICAgIH0sXG5cblx0ICAgIHN0cmlwZTogQm9vbGVhbixcblxuXHQgICAgYm9yZGVyOiBCb29sZWFuLFxuXG5cdCAgICByb3dLZXk6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcblxuXHQgICAgY29udGV4dDoge30sXG5cblx0ICAgIHNob3dIZWFkZXI6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogdHJ1ZVxuXHQgICAgfSxcblxuXHQgICAgc2hvd1N1bW1hcnk6IEJvb2xlYW4sXG5cblx0ICAgIHN1bVRleHQ6IFN0cmluZyxcblxuXHQgICAgc3VtbWFyeU1ldGhvZDogRnVuY3Rpb24sXG5cblx0ICAgIHJvd0NsYXNzTmFtZTogW1N0cmluZywgRnVuY3Rpb25dLFxuXG5cdCAgICByb3dTdHlsZTogW09iamVjdCwgRnVuY3Rpb25dLFxuXG5cdCAgICBoaWdobGlnaHRDdXJyZW50Um93OiBCb29sZWFuLFxuXG5cdCAgICBjdXJyZW50Um93S2V5OiBbU3RyaW5nLCBOdW1iZXJdLFxuXG5cdCAgICBlbXB0eVRleHQ6IFN0cmluZyxcblxuXHQgICAgZXhwYW5kUm93S2V5czogQXJyYXksXG5cblx0ICAgIGRlZmF1bHRFeHBhbmRBbGw6IEJvb2xlYW4sXG5cblx0ICAgIGRlZmF1bHRTb3J0OiBPYmplY3QsXG5cblx0ICAgIHRvb2x0aXBFZmZlY3Q6IFN0cmluZ1xuXHQgIH0sXG5cblx0ICBjb21wb25lbnRzOiB7XG5cdCAgICBUYWJsZUhlYWRlcjogX3RhYmxlSGVhZGVyMi5kZWZhdWx0LFxuXHQgICAgVGFibGVGb290ZXI6IF90YWJsZUZvb3RlcjIuZGVmYXVsdCxcblx0ICAgIFRhYmxlQm9keTogX3RhYmxlQm9keTIuZGVmYXVsdCxcblx0ICAgIEVsQ2hlY2tib3g6IF9jaGVja2JveDIuZGVmYXVsdFxuXHQgIH0sXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBzZXRDdXJyZW50Um93OiBmdW5jdGlvbiBzZXRDdXJyZW50Um93KHJvdykge1xuXHQgICAgICB0aGlzLnN0b3JlLmNvbW1pdCgnc2V0Q3VycmVudFJvdycsIHJvdyk7XG5cdCAgICB9LFxuXHQgICAgdG9nZ2xlUm93U2VsZWN0aW9uOiBmdW5jdGlvbiB0b2dnbGVSb3dTZWxlY3Rpb24ocm93LCBzZWxlY3RlZCkge1xuXHQgICAgICB0aGlzLnN0b3JlLnRvZ2dsZVJvd1NlbGVjdGlvbihyb3csIHNlbGVjdGVkKTtcblx0ICAgICAgdGhpcy5zdG9yZS51cGRhdGVBbGxTZWxlY3RlZCgpO1xuXHQgICAgfSxcblx0ICAgIGNsZWFyU2VsZWN0aW9uOiBmdW5jdGlvbiBjbGVhclNlbGVjdGlvbigpIHtcblx0ICAgICAgdGhpcy5zdG9yZS5jbGVhclNlbGVjdGlvbigpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZU1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKSB7XG5cdCAgICAgIHRoaXMuc3RvcmUuY29tbWl0KCdzZXRIb3ZlclJvdycsIG51bGwpO1xuXHQgICAgICBpZiAodGhpcy5ob3ZlclN0YXRlKSB0aGlzLmhvdmVyU3RhdGUgPSBudWxsO1xuXHQgICAgfSxcblx0ICAgIHVwZGF0ZVNjcm9sbFk6IGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbFkoKSB7XG5cdCAgICAgIHRoaXMubGF5b3V0LnVwZGF0ZVNjcm9sbFkoKTtcblx0ICAgIH0sXG5cdCAgICBiaW5kRXZlbnRzOiBmdW5jdGlvbiBiaW5kRXZlbnRzKCkge1xuXHQgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICAgIHZhciBfJHJlZnMgPSB0aGlzLiRyZWZzLFxuXHQgICAgICAgICAgaGVhZGVyV3JhcHBlciA9IF8kcmVmcy5oZWFkZXJXcmFwcGVyLFxuXHQgICAgICAgICAgZm9vdGVyV3JhcHBlciA9IF8kcmVmcy5mb290ZXJXcmFwcGVyO1xuXG5cdCAgICAgIHZhciByZWZzID0gdGhpcy4kcmVmcztcblx0ICAgICAgdGhpcy5ib2R5V3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKGhlYWRlcldyYXBwZXIpIGhlYWRlcldyYXBwZXIuc2Nyb2xsTGVmdCA9IHRoaXMuc2Nyb2xsTGVmdDtcblx0ICAgICAgICBpZiAoZm9vdGVyV3JhcHBlcikgZm9vdGVyV3JhcHBlci5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxMZWZ0O1xuXHQgICAgICAgIGlmIChyZWZzLmZpeGVkQm9keVdyYXBwZXIpIHJlZnMuZml4ZWRCb2R5V3JhcHBlci5zY3JvbGxUb3AgPSB0aGlzLnNjcm9sbFRvcDtcblx0ICAgICAgICBpZiAocmVmcy5yaWdodEZpeGVkQm9keVdyYXBwZXIpIHJlZnMucmlnaHRGaXhlZEJvZHlXcmFwcGVyLnNjcm9sbFRvcCA9IHRoaXMuc2Nyb2xsVG9wO1xuXHQgICAgICB9KTtcblxuXHQgICAgICB2YXIgc2Nyb2xsQm9keVdyYXBwZXIgPSBmdW5jdGlvbiBzY3JvbGxCb2R5V3JhcHBlcihldmVudCkge1xuXHQgICAgICAgIHZhciBkZWx0YVggPSBldmVudC5kZWx0YVgsXG5cdCAgICAgICAgICAgIGRlbHRhWSA9IGV2ZW50LmRlbHRhWTtcblxuXG5cdCAgICAgICAgaWYgKE1hdGguYWJzKGRlbHRhWCkgPCBNYXRoLmFicyhkZWx0YVkpKSByZXR1cm47XG5cblx0ICAgICAgICBpZiAoZGVsdGFYID4gMCkge1xuXHQgICAgICAgICAgX3RoaXMuYm9keVdyYXBwZXIuc2Nyb2xsTGVmdCArPSAxMDtcblx0ICAgICAgICB9IGVsc2UgaWYgKGRlbHRhWCA8IDApIHtcblx0ICAgICAgICAgIF90aGlzLmJvZHlXcmFwcGVyLnNjcm9sbExlZnQgLT0gMTA7XG5cdCAgICAgICAgfVxuXHQgICAgICB9O1xuXHQgICAgICBpZiAoaGVhZGVyV3JhcHBlcikge1xuXHQgICAgICAgICgwLCBfdXRpbC5tb3VzZXdoZWVsKShoZWFkZXJXcmFwcGVyLCAoMCwgX3Rocm90dGxlMi5kZWZhdWx0KSgxNiwgc2Nyb2xsQm9keVdyYXBwZXIpKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAoZm9vdGVyV3JhcHBlcikge1xuXHQgICAgICAgICgwLCBfdXRpbC5tb3VzZXdoZWVsKShmb290ZXJXcmFwcGVyLCAoMCwgX3Rocm90dGxlMi5kZWZhdWx0KSgxNiwgc2Nyb2xsQm9keVdyYXBwZXIpKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGlmICh0aGlzLmZpdCkge1xuXHQgICAgICAgIHRoaXMud2luZG93UmVzaXplTGlzdGVuZXIgPSAoMCwgX3Rocm90dGxlMi5kZWZhdWx0KSg1MCwgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgaWYgKF90aGlzLiRyZWFkeSkgX3RoaXMuZG9MYXlvdXQoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICAoMCwgX3Jlc2l6ZUV2ZW50LmFkZFJlc2l6ZUxpc3RlbmVyKSh0aGlzLiRlbCwgdGhpcy53aW5kb3dSZXNpemVMaXN0ZW5lcik7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBkb0xheW91dDogZnVuY3Rpb24gZG9MYXlvdXQoKSB7XG5cdCAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgICAgIHRoaXMuc3RvcmUudXBkYXRlQ29sdW1ucygpO1xuXHQgICAgICB0aGlzLmxheW91dC51cGRhdGUoKTtcblx0ICAgICAgdGhpcy51cGRhdGVTY3JvbGxZKCk7XG5cdCAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoX3RoaXMyLmhlaWdodCkge1xuXHQgICAgICAgICAgX3RoaXMyLmxheW91dC5zZXRIZWlnaHQoX3RoaXMyLmhlaWdodCk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChfdGhpczIubWF4SGVpZ2h0KSB7XG5cdCAgICAgICAgICBfdGhpczIubGF5b3V0LnNldE1heEhlaWdodChfdGhpczIubWF4SGVpZ2h0KTtcblx0ICAgICAgICB9IGVsc2UgaWYgKF90aGlzMi5zaG91bGRVcGRhdGVIZWlnaHQpIHtcblx0ICAgICAgICAgIF90aGlzMi5sYXlvdXQudXBkYXRlSGVpZ2h0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChfdGhpczIuJGVsKSB7XG5cdCAgICAgICAgICBfdGhpczIuaXNIaWRkZW4gPSBfdGhpczIuJGVsLmNsaWVudFdpZHRoID09PSAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG5cdCAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuXHQgICAgdGhpcy50YWJsZUlkID0gJ2VsLXRhYmxlXycgKyB0YWJsZUlkU2VlZCArICdfJztcblx0ICAgIHRoaXMuZGVib3VuY2VkTGF5b3V0ID0gKDAsIF9kZWJvdW5jZTIuZGVmYXVsdCkoNTAsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgcmV0dXJuIF90aGlzMy5kb0xheW91dCgpO1xuXHQgICAgfSk7XG5cdCAgfSxcblxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIGJvZHlXcmFwcGVyOiBmdW5jdGlvbiBib2R5V3JhcHBlcigpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuJHJlZnMuYm9keVdyYXBwZXI7XG5cdCAgICB9LFxuXHQgICAgc2hvdWxkVXBkYXRlSGVpZ2h0OiBmdW5jdGlvbiBzaG91bGRVcGRhdGVIZWlnaHQoKSB7XG5cdCAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5oZWlnaHQgPT09ICdudW1iZXInIHx8IHRoaXMuZml4ZWRDb2x1bW5zLmxlbmd0aCA+IDAgfHwgdGhpcy5yaWdodEZpeGVkQ29sdW1ucy5sZW5ndGggPiAwO1xuXHQgICAgfSxcblx0ICAgIHNlbGVjdGlvbjogZnVuY3Rpb24gc2VsZWN0aW9uKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZXMuc2VsZWN0aW9uO1xuXHQgICAgfSxcblx0ICAgIGNvbHVtbnM6IGZ1bmN0aW9uIGNvbHVtbnMoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlcy5jb2x1bW5zO1xuXHQgICAgfSxcblx0ICAgIHRhYmxlRGF0YTogZnVuY3Rpb24gdGFibGVEYXRhKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZXMuZGF0YTtcblx0ICAgIH0sXG5cdCAgICBmaXhlZENvbHVtbnM6IGZ1bmN0aW9uIGZpeGVkQ29sdW1ucygpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuc3RhdGVzLmZpeGVkQ29sdW1ucztcblx0ICAgIH0sXG5cdCAgICByaWdodEZpeGVkQ29sdW1uczogZnVuY3Rpb24gcmlnaHRGaXhlZENvbHVtbnMoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlcy5yaWdodEZpeGVkQ29sdW1ucztcblx0ICAgIH0sXG5cdCAgICBib2R5SGVpZ2h0OiBmdW5jdGlvbiBib2R5SGVpZ2h0KCkge1xuXHQgICAgICB2YXIgc3R5bGUgPSB7fTtcblxuXHQgICAgICBpZiAodGhpcy5oZWlnaHQpIHtcblx0ICAgICAgICBzdHlsZSA9IHtcblx0ICAgICAgICAgIGhlaWdodDogdGhpcy5sYXlvdXQuYm9keUhlaWdodCA/IHRoaXMubGF5b3V0LmJvZHlIZWlnaHQgKyAncHgnIDogJydcblx0ICAgICAgICB9O1xuXHQgICAgICB9IGVsc2UgaWYgKHRoaXMubWF4SGVpZ2h0KSB7XG5cdCAgICAgICAgc3R5bGUgPSB7XG5cdCAgICAgICAgICAnbWF4LWhlaWdodCc6ICh0aGlzLnNob3dIZWFkZXIgPyB0aGlzLm1heEhlaWdodCAtIHRoaXMubGF5b3V0LmhlYWRlckhlaWdodCAtIHRoaXMubGF5b3V0LmZvb3RlckhlaWdodCA6IHRoaXMubWF4SGVpZ2h0IC0gdGhpcy5sYXlvdXQuZm9vdGVySGVpZ2h0KSArICdweCdcblx0ICAgICAgICB9O1xuXHQgICAgICB9XG5cblx0ICAgICAgcmV0dXJuIHN0eWxlO1xuXHQgICAgfSxcblx0ICAgIGJvZHlXaWR0aDogZnVuY3Rpb24gYm9keVdpZHRoKCkge1xuXHQgICAgICB2YXIgX2xheW91dCA9IHRoaXMubGF5b3V0LFxuXHQgICAgICAgICAgYm9keVdpZHRoID0gX2xheW91dC5ib2R5V2lkdGgsXG5cdCAgICAgICAgICBzY3JvbGxZID0gX2xheW91dC5zY3JvbGxZLFxuXHQgICAgICAgICAgZ3V0dGVyV2lkdGggPSBfbGF5b3V0Lmd1dHRlcldpZHRoO1xuXG5cdCAgICAgIHJldHVybiBib2R5V2lkdGggPyBib2R5V2lkdGggLSAoc2Nyb2xsWSA/IGd1dHRlcldpZHRoIDogMCkgKyAncHgnIDogJyc7XG5cdCAgICB9LFxuXHQgICAgZml4ZWRCb2R5SGVpZ2h0OiBmdW5jdGlvbiBmaXhlZEJvZHlIZWlnaHQoKSB7XG5cdCAgICAgIHZhciBzdHlsZSA9IHt9O1xuXG5cdCAgICAgIGlmICh0aGlzLmhlaWdodCkge1xuXHQgICAgICAgIHN0eWxlID0ge1xuXHQgICAgICAgICAgaGVpZ2h0OiB0aGlzLmxheW91dC5maXhlZEJvZHlIZWlnaHQgPyB0aGlzLmxheW91dC5maXhlZEJvZHlIZWlnaHQgKyAncHgnIDogJydcblx0ICAgICAgICB9O1xuXHQgICAgICB9IGVsc2UgaWYgKHRoaXMubWF4SGVpZ2h0KSB7XG5cdCAgICAgICAgdmFyIG1heEhlaWdodCA9IHRoaXMubGF5b3V0LnNjcm9sbFggPyB0aGlzLm1heEhlaWdodCAtIHRoaXMubGF5b3V0Lmd1dHRlcldpZHRoIDogdGhpcy5tYXhIZWlnaHQ7XG5cblx0ICAgICAgICBpZiAodGhpcy5zaG93SGVhZGVyKSB7XG5cdCAgICAgICAgICBtYXhIZWlnaHQgLT0gdGhpcy5sYXlvdXQuaGVhZGVySGVpZ2h0O1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHN0eWxlID0ge1xuXHQgICAgICAgICAgJ21heC1oZWlnaHQnOiBtYXhIZWlnaHQgKyAncHgnXG5cdCAgICAgICAgfTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHJldHVybiBzdHlsZTtcblx0ICAgIH0sXG5cdCAgICBmaXhlZEhlaWdodDogZnVuY3Rpb24gZml4ZWRIZWlnaHQoKSB7XG5cdCAgICAgIHZhciBzdHlsZSA9IHt9O1xuXG5cdCAgICAgIGlmICh0aGlzLm1heEhlaWdodCkge1xuXHQgICAgICAgIHN0eWxlID0ge1xuXHQgICAgICAgICAgYm90dG9tOiB0aGlzLmxheW91dC5zY3JvbGxYICYmIHRoaXMuZGF0YS5sZW5ndGggPyB0aGlzLmxheW91dC5ndXR0ZXJXaWR0aCArICdweCcgOiAnJ1xuXHQgICAgICAgIH07XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgc3R5bGUgPSB7XG5cdCAgICAgICAgICBoZWlnaHQ6IHRoaXMubGF5b3V0LnZpZXdwb3J0SGVpZ2h0ID8gdGhpcy5sYXlvdXQudmlld3BvcnRIZWlnaHQgKyAncHgnIDogJydcblx0ICAgICAgICB9O1xuXHQgICAgICB9XG5cblx0ICAgICAgcmV0dXJuIHN0eWxlO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICB3YXRjaDoge1xuXHQgICAgaGVpZ2h0OiBmdW5jdGlvbiBoZWlnaHQodmFsdWUpIHtcblx0ICAgICAgdGhpcy5sYXlvdXQuc2V0SGVpZ2h0KHZhbHVlKTtcblx0ICAgIH0sXG5cdCAgICBjdXJyZW50Um93S2V5OiBmdW5jdGlvbiBjdXJyZW50Um93S2V5KG5ld1ZhbCkge1xuXHQgICAgICB0aGlzLnN0b3JlLnNldEN1cnJlbnRSb3dLZXkobmV3VmFsKTtcblx0ICAgIH0sXG5cblxuXHQgICAgZGF0YToge1xuXHQgICAgICBpbW1lZGlhdGU6IHRydWUsXG5cdCAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsKSB7XG5cdCAgICAgICAgdGhpcy5zdG9yZS5jb21taXQoJ3NldERhdGEnLCB2YWwpO1xuXHQgICAgICAgIGlmICh0aGlzLiRyZWFkeSkgdGhpcy5kb0xheW91dCgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXG5cdCAgICBleHBhbmRSb3dLZXlzOiBmdW5jdGlvbiBleHBhbmRSb3dLZXlzKG5ld1ZhbCkge1xuXHQgICAgICB0aGlzLnN0b3JlLnNldEV4cGFuZFJvd0tleXMobmV3VmFsKTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG5cdCAgICBpZiAodGhpcy53aW5kb3dSZXNpemVMaXN0ZW5lcikgKDAsIF9yZXNpemVFdmVudC5yZW1vdmVSZXNpemVMaXN0ZW5lcikodGhpcy4kZWwsIHRoaXMud2luZG93UmVzaXplTGlzdGVuZXIpO1xuXHQgIH0sXG5cdCAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcblx0ICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG5cdCAgICB0aGlzLmJpbmRFdmVudHMoKTtcblx0ICAgIHRoaXMuZG9MYXlvdXQoKTtcblxuXHQgICAgLy8gaW5pdCBmaWx0ZXJzXG5cdCAgICB0aGlzLnN0b3JlLnN0YXRlcy5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuXHQgICAgICBpZiAoY29sdW1uLmZpbHRlcmVkVmFsdWUgJiYgY29sdW1uLmZpbHRlcmVkVmFsdWUubGVuZ3RoKSB7XG5cdCAgICAgICAgX3RoaXM0LnN0b3JlLmNvbW1pdCgnZmlsdGVyQ2hhbmdlJywge1xuXHQgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG5cdCAgICAgICAgICB2YWx1ZXM6IGNvbHVtbi5maWx0ZXJlZFZhbHVlLFxuXHQgICAgICAgICAgc2lsZW50OiB0cnVlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICB0aGlzLiRyZWFkeSA9IHRydWU7XG5cdCAgfSxcblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgdmFyIHN0b3JlID0gbmV3IF90YWJsZVN0b3JlMi5kZWZhdWx0KHRoaXMsIHtcblx0ICAgICAgcm93S2V5OiB0aGlzLnJvd0tleSxcblx0ICAgICAgZGVmYXVsdEV4cGFuZEFsbDogdGhpcy5kZWZhdWx0RXhwYW5kQWxsXG5cdCAgICB9KTtcblx0ICAgIHZhciBsYXlvdXQgPSBuZXcgX3RhYmxlTGF5b3V0Mi5kZWZhdWx0KHtcblx0ICAgICAgc3RvcmU6IHN0b3JlLFxuXHQgICAgICB0YWJsZTogdGhpcyxcblx0ICAgICAgZml0OiB0aGlzLmZpdCxcblx0ICAgICAgc2hvd0hlYWRlcjogdGhpcy5zaG93SGVhZGVyXG5cdCAgICB9KTtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHN0b3JlOiBzdG9yZSxcblx0ICAgICAgbGF5b3V0OiBsYXlvdXQsXG5cdCAgICAgIGlzSGlkZGVuOiBmYWxzZSxcblx0ICAgICAgcmVuZGVyRXhwYW5kZWQ6IG51bGwsXG5cdCAgICAgIHJlc2l6ZVByb3h5VmlzaWJsZTogZmFsc2Vcblx0ICAgIH07XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMTMwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9jaGVja2JveFwiKTtcblxuLyoqKi8gfSxcbi8qIDEzMSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidGhyb3R0bGUtZGVib3VuY2UvdGhyb3R0bGVcIik7XG5cbi8qKiovIH0sXG4vKiAxMzIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfdnVlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xuXG5cdHZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZSk7XG5cblx0dmFyIF9kZWJvdW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xuXG5cdHZhciBfZGVib3VuY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVib3VuY2UpO1xuXG5cdHZhciBfdXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTM0KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdHZhciBzb3J0RGF0YSA9IGZ1bmN0aW9uIHNvcnREYXRhKGRhdGEsIHN0YXRlcykge1xuXHQgIHZhciBzb3J0aW5nQ29sdW1uID0gc3RhdGVzLnNvcnRpbmdDb2x1bW47XG5cdCAgaWYgKCFzb3J0aW5nQ29sdW1uIHx8IHR5cGVvZiBzb3J0aW5nQ29sdW1uLnNvcnRhYmxlID09PSAnc3RyaW5nJykge1xuXHQgICAgcmV0dXJuIGRhdGE7XG5cdCAgfVxuXHQgIHJldHVybiAoMCwgX3V0aWwub3JkZXJCeSkoZGF0YSwgc3RhdGVzLnNvcnRQcm9wLCBzdGF0ZXMuc29ydE9yZGVyLCBzb3J0aW5nQ29sdW1uLnNvcnRNZXRob2QpO1xuXHR9O1xuXG5cdHZhciBnZXRLZXlzTWFwID0gZnVuY3Rpb24gZ2V0S2V5c01hcChhcnJheSwgcm93S2V5KSB7XG5cdCAgdmFyIGFycmF5TWFwID0ge307XG5cdCAgKGFycmF5IHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChyb3csIGluZGV4KSB7XG5cdCAgICBhcnJheU1hcFsoMCwgX3V0aWwuZ2V0Um93SWRlbnRpdHkpKHJvdywgcm93S2V5KV0gPSB7IHJvdzogcm93LCBpbmRleDogaW5kZXggfTtcblx0ICB9KTtcblx0ICByZXR1cm4gYXJyYXlNYXA7XG5cdH07XG5cblx0dmFyIHRvZ2dsZVJvd1NlbGVjdGlvbiA9IGZ1bmN0aW9uIHRvZ2dsZVJvd1NlbGVjdGlvbihzdGF0ZXMsIHJvdywgc2VsZWN0ZWQpIHtcblx0ICB2YXIgY2hhbmdlZCA9IGZhbHNlO1xuXHQgIHZhciBzZWxlY3Rpb24gPSBzdGF0ZXMuc2VsZWN0aW9uO1xuXHQgIHZhciBpbmRleCA9IHNlbGVjdGlvbi5pbmRleE9mKHJvdyk7XG5cdCAgaWYgKHR5cGVvZiBzZWxlY3RlZCA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0ICAgIGlmIChpbmRleCA9PT0gLTEpIHtcblx0ICAgICAgc2VsZWN0aW9uLnB1c2gocm93KTtcblx0ICAgICAgY2hhbmdlZCA9IHRydWU7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBzZWxlY3Rpb24uc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgY2hhbmdlZCA9IHRydWU7XG5cdCAgICB9XG5cdCAgfSBlbHNlIHtcblx0ICAgIGlmIChzZWxlY3RlZCAmJiBpbmRleCA9PT0gLTEpIHtcblx0ICAgICAgc2VsZWN0aW9uLnB1c2gocm93KTtcblx0ICAgICAgY2hhbmdlZCA9IHRydWU7XG5cdCAgICB9IGVsc2UgaWYgKCFzZWxlY3RlZCAmJiBpbmRleCA+IC0xKSB7XG5cdCAgICAgIHNlbGVjdGlvbi5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICBjaGFuZ2VkID0gdHJ1ZTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICByZXR1cm4gY2hhbmdlZDtcblx0fTtcblxuXHR2YXIgVGFibGVTdG9yZSA9IGZ1bmN0aW9uIFRhYmxlU3RvcmUodGFibGUpIHtcblx0ICB2YXIgaW5pdGlhbFN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuXHQgIGlmICghdGFibGUpIHtcblx0ICAgIHRocm93IG5ldyBFcnJvcignVGFibGUgaXMgcmVxdWlyZWQuJyk7XG5cdCAgfVxuXHQgIHRoaXMudGFibGUgPSB0YWJsZTtcblxuXHQgIHRoaXMuc3RhdGVzID0ge1xuXHQgICAgcm93S2V5OiBudWxsLFxuXHQgICAgX2NvbHVtbnM6IFtdLFxuXHQgICAgb3JpZ2luQ29sdW1uczogW10sXG5cdCAgICBjb2x1bW5zOiBbXSxcblx0ICAgIGZpeGVkQ29sdW1uczogW10sXG5cdCAgICByaWdodEZpeGVkQ29sdW1uczogW10sXG5cdCAgICBpc0NvbXBsZXg6IGZhbHNlLFxuXHQgICAgX2RhdGE6IG51bGwsXG5cdCAgICBmaWx0ZXJlZERhdGE6IG51bGwsXG5cdCAgICBkYXRhOiBudWxsLFxuXHQgICAgc29ydGluZ0NvbHVtbjogbnVsbCxcblx0ICAgIHNvcnRQcm9wOiBudWxsLFxuXHQgICAgc29ydE9yZGVyOiBudWxsLFxuXHQgICAgaXNBbGxTZWxlY3RlZDogZmFsc2UsXG5cdCAgICBzZWxlY3Rpb246IFtdLFxuXHQgICAgcmVzZXJ2ZVNlbGVjdGlvbjogZmFsc2UsXG5cdCAgICBzZWxlY3RhYmxlOiBudWxsLFxuXHQgICAgY3VycmVudFJvdzogbnVsbCxcblx0ICAgIGhvdmVyUm93OiBudWxsLFxuXHQgICAgZmlsdGVyczoge30sXG5cdCAgICBleHBhbmRSb3dzOiBbXSxcblx0ICAgIGRlZmF1bHRFeHBhbmRBbGw6IGZhbHNlXG5cdCAgfTtcblxuXHQgIGZvciAodmFyIHByb3AgaW4gaW5pdGlhbFN0YXRlKSB7XG5cdCAgICBpZiAoaW5pdGlhbFN0YXRlLmhhc093blByb3BlcnR5KHByb3ApICYmIHRoaXMuc3RhdGVzLmhhc093blByb3BlcnR5KHByb3ApKSB7XG5cdCAgICAgIHRoaXMuc3RhdGVzW3Byb3BdID0gaW5pdGlhbFN0YXRlW3Byb3BdO1xuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuXHRUYWJsZVN0b3JlLnByb3RvdHlwZS5tdXRhdGlvbnMgPSB7XG5cdCAgc2V0RGF0YTogZnVuY3Rpb24gc2V0RGF0YShzdGF0ZXMsIGRhdGEpIHtcblx0ICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgIHZhciBkYXRhSW5zdGFuY2VDaGFuZ2VkID0gc3RhdGVzLl9kYXRhICE9PSBkYXRhO1xuXHQgICAgc3RhdGVzLl9kYXRhID0gZGF0YTtcblx0ICAgIHN0YXRlcy5kYXRhID0gc29ydERhdGEoZGF0YSB8fCBbXSwgc3RhdGVzKTtcblxuXHQgICAgLy8gc3RhdGVzLmRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHQgICAgLy8gICBpZiAoIWl0ZW0uJGV4dHJhKSB7XG5cdCAgICAvLyAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGl0ZW0sICckZXh0cmEnLCB7XG5cdCAgICAvLyAgICAgICB2YWx1ZToge30sXG5cdCAgICAvLyAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuXHQgICAgLy8gICAgIH0pO1xuXHQgICAgLy8gICB9XG5cdCAgICAvLyB9KTtcblxuXHQgICAgdGhpcy51cGRhdGVDdXJyZW50Um93KCk7XG5cblx0ICAgIGlmICghc3RhdGVzLnJlc2VydmVTZWxlY3Rpb24pIHtcblx0ICAgICAgaWYgKGRhdGFJbnN0YW5jZUNoYW5nZWQpIHtcblx0ICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5jbGVhblNlbGVjdGlvbigpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMudXBkYXRlQWxsU2VsZWN0ZWQoKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgdmFyIHJvd0tleSA9IHN0YXRlcy5yb3dLZXk7XG5cdCAgICAgICAgaWYgKHJvd0tleSkge1xuXHQgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHN0YXRlcy5zZWxlY3Rpb247XG5cdCAgICAgICAgICAgIHZhciBzZWxlY3RlZE1hcCA9IGdldEtleXNNYXAoc2VsZWN0aW9uLCByb3dLZXkpO1xuXG5cdCAgICAgICAgICAgIHN0YXRlcy5kYXRhLmZvckVhY2goZnVuY3Rpb24gKHJvdykge1xuXHQgICAgICAgICAgICAgIHZhciByb3dJZCA9ICgwLCBfdXRpbC5nZXRSb3dJZGVudGl0eSkocm93LCByb3dLZXkpO1xuXHQgICAgICAgICAgICAgIHZhciByb3dJbmZvID0gc2VsZWN0ZWRNYXBbcm93SWRdO1xuXHQgICAgICAgICAgICAgIGlmIChyb3dJbmZvKSB7XG5cdCAgICAgICAgICAgICAgICBzZWxlY3Rpb25bcm93SW5mby5pbmRleF0gPSByb3c7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblxuXHQgICAgICAgICAgICBfdGhpcy51cGRhdGVBbGxTZWxlY3RlZCgpO1xuXHQgICAgICAgICAgfSkoKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgY29uc29sZS53YXJuKCdXQVJOOiByb3dLZXkgaXMgcmVxdWlyZWQgd2hlbiByZXNlcnZlLXNlbGVjdGlvbiBpcyBlbmFibGVkLicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSkoKTtcblx0ICAgIH1cblxuXHQgICAgdmFyIGRlZmF1bHRFeHBhbmRBbGwgPSBzdGF0ZXMuZGVmYXVsdEV4cGFuZEFsbDtcblx0ICAgIGlmIChkZWZhdWx0RXhwYW5kQWxsKSB7XG5cdCAgICAgIHRoaXMuc3RhdGVzLmV4cGFuZFJvd3MgPSAoc3RhdGVzLmRhdGEgfHwgW10pLnNsaWNlKDApO1xuXHQgICAgfVxuXG5cdCAgICBfdnVlMi5kZWZhdWx0Lm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgcmV0dXJuIF90aGlzLnRhYmxlLnVwZGF0ZVNjcm9sbFkoKTtcblx0ICAgIH0pO1xuXHQgIH0sXG5cdCAgY2hhbmdlU29ydENvbmRpdGlvbjogZnVuY3Rpb24gY2hhbmdlU29ydENvbmRpdGlvbihzdGF0ZXMpIHtcblx0ICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgICBzdGF0ZXMuZGF0YSA9IHNvcnREYXRhKHN0YXRlcy5maWx0ZXJlZERhdGEgfHwgc3RhdGVzLl9kYXRhIHx8IFtdLCBzdGF0ZXMpO1xuXG5cdCAgICB0aGlzLnRhYmxlLiRlbWl0KCdzb3J0LWNoYW5nZScsIHtcblx0ICAgICAgY29sdW1uOiB0aGlzLnN0YXRlcy5zb3J0aW5nQ29sdW1uLFxuXHQgICAgICBwcm9wOiB0aGlzLnN0YXRlcy5zb3J0UHJvcCxcblx0ICAgICAgb3JkZXI6IHRoaXMuc3RhdGVzLnNvcnRPcmRlclxuXHQgICAgfSk7XG5cblx0ICAgIF92dWUyLmRlZmF1bHQubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHQgICAgICByZXR1cm4gX3RoaXMyLnRhYmxlLnVwZGF0ZVNjcm9sbFkoKTtcblx0ICAgIH0pO1xuXHQgIH0sXG5cdCAgZmlsdGVyQ2hhbmdlOiBmdW5jdGlvbiBmaWx0ZXJDaGFuZ2Uoc3RhdGVzLCBvcHRpb25zKSB7XG5cdCAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuXHQgICAgdmFyIGNvbHVtbiA9IG9wdGlvbnMuY29sdW1uLFxuXHQgICAgICAgIHZhbHVlcyA9IG9wdGlvbnMudmFsdWVzLFxuXHQgICAgICAgIHNpbGVudCA9IG9wdGlvbnMuc2lsZW50O1xuXG5cdCAgICBpZiAodmFsdWVzICYmICFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcblx0ICAgICAgdmFsdWVzID0gW3ZhbHVlc107XG5cdCAgICB9XG5cblx0ICAgIHZhciBwcm9wID0gY29sdW1uLnByb3BlcnR5O1xuXHQgICAgdmFyIGZpbHRlcnMgPSB7fTtcblxuXHQgICAgaWYgKHByb3ApIHtcblx0ICAgICAgc3RhdGVzLmZpbHRlcnNbY29sdW1uLmlkXSA9IHZhbHVlcztcblx0ICAgICAgZmlsdGVyc1tjb2x1bW4uY29sdW1uS2V5IHx8IGNvbHVtbi5pZF0gPSB2YWx1ZXM7XG5cdCAgICB9XG5cblx0ICAgIHZhciBkYXRhID0gc3RhdGVzLl9kYXRhO1xuXG5cdCAgICBPYmplY3Qua2V5cyhzdGF0ZXMuZmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uSWQpIHtcblx0ICAgICAgdmFyIHZhbHVlcyA9IHN0YXRlcy5maWx0ZXJzW2NvbHVtbklkXTtcblx0ICAgICAgaWYgKCF2YWx1ZXMgfHwgdmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXHQgICAgICB2YXIgY29sdW1uID0gKDAsIF91dGlsLmdldENvbHVtbkJ5SWQpKF90aGlzMy5zdGF0ZXMsIGNvbHVtbklkKTtcblx0ICAgICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZmlsdGVyTWV0aG9kKSB7XG5cdCAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChyb3cpIHtcblx0ICAgICAgICAgIHJldHVybiB2YWx1ZXMuc29tZShmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5maWx0ZXJNZXRob2QuY2FsbChudWxsLCB2YWx1ZSwgcm93KTtcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgc3RhdGVzLmZpbHRlcmVkRGF0YSA9IGRhdGE7XG5cdCAgICBzdGF0ZXMuZGF0YSA9IHNvcnREYXRhKGRhdGEsIHN0YXRlcyk7XG5cblx0ICAgIGlmICghc2lsZW50KSB7XG5cdCAgICAgIHRoaXMudGFibGUuJGVtaXQoJ2ZpbHRlci1jaGFuZ2UnLCBmaWx0ZXJzKTtcblx0ICAgIH1cblxuXHQgICAgX3Z1ZTIuZGVmYXVsdC5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgIHJldHVybiBfdGhpczMudGFibGUudXBkYXRlU2Nyb2xsWSgpO1xuXHQgICAgfSk7XG5cdCAgfSxcblx0ICBpbnNlcnRDb2x1bW46IGZ1bmN0aW9uIGluc2VydENvbHVtbihzdGF0ZXMsIGNvbHVtbiwgaW5kZXgsIHBhcmVudCkge1xuXHQgICAgdmFyIGFycmF5ID0gc3RhdGVzLl9jb2x1bW5zO1xuXHQgICAgaWYgKHBhcmVudCkge1xuXHQgICAgICBhcnJheSA9IHBhcmVudC5jaGlsZHJlbjtcblx0ICAgICAgaWYgKCFhcnJheSkgYXJyYXkgPSBwYXJlbnQuY2hpbGRyZW4gPSBbXTtcblx0ICAgIH1cblxuXHQgICAgaWYgKHR5cGVvZiBpbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0ICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAwLCBjb2x1bW4pO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgYXJyYXkucHVzaChjb2x1bW4pO1xuXHQgICAgfVxuXG5cdCAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdzZWxlY3Rpb24nKSB7XG5cdCAgICAgIHN0YXRlcy5zZWxlY3RhYmxlID0gY29sdW1uLnNlbGVjdGFibGU7XG5cdCAgICAgIHN0YXRlcy5yZXNlcnZlU2VsZWN0aW9uID0gY29sdW1uLnJlc2VydmVTZWxlY3Rpb247XG5cdCAgICB9XG5cblx0ICAgIHRoaXMudXBkYXRlQ29sdW1ucygpOyAvLyBoYWNrIGZvciBkeW5hbWljcyBpbnNlcnQgY29sdW1uXG5cdCAgICB0aGlzLnNjaGVkdWxlTGF5b3V0KCk7XG5cdCAgfSxcblx0ICByZW1vdmVDb2x1bW46IGZ1bmN0aW9uIHJlbW92ZUNvbHVtbihzdGF0ZXMsIGNvbHVtbikge1xuXHQgICAgdmFyIF9jb2x1bW5zID0gc3RhdGVzLl9jb2x1bW5zO1xuXHQgICAgaWYgKF9jb2x1bW5zKSB7XG5cdCAgICAgIF9jb2x1bW5zLnNwbGljZShfY29sdW1ucy5pbmRleE9mKGNvbHVtbiksIDEpO1xuXHQgICAgfVxuXG5cdCAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoKTsgLy8gaGFjayBmb3IgZHluYW1pY3MgcmVtb3ZlIGNvbHVtblxuXHQgICAgdGhpcy5zY2hlZHVsZUxheW91dCgpO1xuXHQgIH0sXG5cdCAgc2V0SG92ZXJSb3c6IGZ1bmN0aW9uIHNldEhvdmVyUm93KHN0YXRlcywgcm93KSB7XG5cdCAgICBzdGF0ZXMuaG92ZXJSb3cgPSByb3c7XG5cdCAgfSxcblx0ICBzZXRDdXJyZW50Um93OiBmdW5jdGlvbiBzZXRDdXJyZW50Um93KHN0YXRlcywgcm93KSB7XG5cdCAgICB2YXIgb2xkQ3VycmVudFJvdyA9IHN0YXRlcy5jdXJyZW50Um93O1xuXHQgICAgc3RhdGVzLmN1cnJlbnRSb3cgPSByb3c7XG5cblx0ICAgIGlmIChvbGRDdXJyZW50Um93ICE9PSByb3cpIHtcblx0ICAgICAgdGhpcy50YWJsZS4kZW1pdCgnY3VycmVudC1jaGFuZ2UnLCByb3csIG9sZEN1cnJlbnRSb3cpO1xuXHQgICAgfVxuXHQgIH0sXG5cdCAgcm93U2VsZWN0ZWRDaGFuZ2VkOiBmdW5jdGlvbiByb3dTZWxlY3RlZENoYW5nZWQoc3RhdGVzLCByb3cpIHtcblx0ICAgIHZhciBjaGFuZ2VkID0gdG9nZ2xlUm93U2VsZWN0aW9uKHN0YXRlcywgcm93KTtcblx0ICAgIHZhciBzZWxlY3Rpb24gPSBzdGF0ZXMuc2VsZWN0aW9uO1xuXG5cdCAgICBpZiAoY2hhbmdlZCkge1xuXHQgICAgICB2YXIgdGFibGUgPSB0aGlzLnRhYmxlO1xuXHQgICAgICB0YWJsZS4kZW1pdCgnc2VsZWN0aW9uLWNoYW5nZScsIHNlbGVjdGlvbik7XG5cdCAgICAgIHRhYmxlLiRlbWl0KCdzZWxlY3QnLCBzZWxlY3Rpb24sIHJvdyk7XG5cdCAgICB9XG5cblx0ICAgIHRoaXMudXBkYXRlQWxsU2VsZWN0ZWQoKTtcblx0ICB9LFxuXG5cblx0ICB0b2dnbGVSb3dFeHBhbmRlZDogZnVuY3Rpb24gdG9nZ2xlUm93RXhwYW5kZWQoc3RhdGVzLCByb3csIGV4cGFuZGVkKSB7XG5cdCAgICB2YXIgZXhwYW5kUm93cyA9IHN0YXRlcy5leHBhbmRSb3dzO1xuXHQgICAgaWYgKHR5cGVvZiBleHBhbmRlZCAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0ICAgICAgdmFyIGluZGV4ID0gZXhwYW5kUm93cy5pbmRleE9mKHJvdyk7XG5cdCAgICAgIGlmIChleHBhbmRlZCkge1xuXHQgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIGV4cGFuZFJvd3MucHVzaChyb3cpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIGV4cGFuZFJvd3Muc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgfVxuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdmFyIF9pbmRleCA9IGV4cGFuZFJvd3MuaW5kZXhPZihyb3cpO1xuXHQgICAgICBpZiAoX2luZGV4ID09PSAtMSkge1xuXHQgICAgICAgIGV4cGFuZFJvd3MucHVzaChyb3cpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIGV4cGFuZFJvd3Muc3BsaWNlKF9pbmRleCwgMSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHRoaXMudGFibGUuJGVtaXQoJ2V4cGFuZCcsIHJvdywgZXhwYW5kUm93cy5pbmRleE9mKHJvdykgIT09IC0xKTtcblx0ICB9LFxuXG5cdCAgdG9nZ2xlQWxsU2VsZWN0aW9uOiAoMCwgX2RlYm91bmNlMi5kZWZhdWx0KSgxMCwgZnVuY3Rpb24gKHN0YXRlcykge1xuXHQgICAgdmFyIGRhdGEgPSBzdGF0ZXMuZGF0YSB8fCBbXTtcblx0ICAgIHZhciB2YWx1ZSA9ICFzdGF0ZXMuaXNBbGxTZWxlY3RlZDtcblx0ICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLnN0YXRlcy5zZWxlY3Rpb247XG5cdCAgICB2YXIgc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlO1xuXG5cdCAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG5cdCAgICAgIGlmIChzdGF0ZXMuc2VsZWN0YWJsZSkge1xuXHQgICAgICAgIGlmIChzdGF0ZXMuc2VsZWN0YWJsZS5jYWxsKG51bGwsIGl0ZW0sIGluZGV4KSAmJiB0b2dnbGVSb3dTZWxlY3Rpb24oc3RhdGVzLCBpdGVtLCB2YWx1ZSkpIHtcblx0ICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBpZiAodG9nZ2xlUm93U2VsZWN0aW9uKHN0YXRlcywgaXRlbSwgdmFsdWUpKSB7XG5cdCAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICB2YXIgdGFibGUgPSB0aGlzLnRhYmxlO1xuXHQgICAgaWYgKHNlbGVjdGlvbkNoYW5nZWQpIHtcblx0ICAgICAgdGFibGUuJGVtaXQoJ3NlbGVjdGlvbi1jaGFuZ2UnLCBzZWxlY3Rpb24pO1xuXHQgICAgfVxuXHQgICAgdGFibGUuJGVtaXQoJ3NlbGVjdC1hbGwnLCBzZWxlY3Rpb24pO1xuXHQgICAgc3RhdGVzLmlzQWxsU2VsZWN0ZWQgPSB2YWx1ZTtcblx0ICB9KVxuXHR9O1xuXG5cdHZhciBkb0ZsYXR0ZW5Db2x1bW5zID0gZnVuY3Rpb24gZG9GbGF0dGVuQ29sdW1ucyhjb2x1bW5zKSB7XG5cdCAgdmFyIHJlc3VsdCA9IFtdO1xuXHQgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdCAgICBpZiAoY29sdW1uLmNoaWxkcmVuKSB7XG5cdCAgICAgIHJlc3VsdC5wdXNoLmFwcGx5KHJlc3VsdCwgZG9GbGF0dGVuQ29sdW1ucyhjb2x1bW4uY2hpbGRyZW4pKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG5cdCAgICB9XG5cdCAgfSk7XG5cdCAgcmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHRUYWJsZVN0b3JlLnByb3RvdHlwZS51cGRhdGVDb2x1bW5zID0gZnVuY3Rpb24gKCkge1xuXHQgIHZhciBzdGF0ZXMgPSB0aGlzLnN0YXRlcztcblx0ICB2YXIgX2NvbHVtbnMgPSBzdGF0ZXMuX2NvbHVtbnMgfHwgW107XG5cdCAgc3RhdGVzLmZpeGVkQ29sdW1ucyA9IF9jb2x1bW5zLmZpbHRlcihmdW5jdGlvbiAoY29sdW1uKSB7XG5cdCAgICByZXR1cm4gY29sdW1uLmZpeGVkID09PSB0cnVlIHx8IGNvbHVtbi5maXhlZCA9PT0gJ2xlZnQnO1xuXHQgIH0pO1xuXHQgIHN0YXRlcy5yaWdodEZpeGVkQ29sdW1ucyA9IF9jb2x1bW5zLmZpbHRlcihmdW5jdGlvbiAoY29sdW1uKSB7XG5cdCAgICByZXR1cm4gY29sdW1uLmZpeGVkID09PSAncmlnaHQnO1xuXHQgIH0pO1xuXG5cdCAgaWYgKHN0YXRlcy5maXhlZENvbHVtbnMubGVuZ3RoID4gMCAmJiBfY29sdW1uc1swXSAmJiBfY29sdW1uc1swXS50eXBlID09PSAnc2VsZWN0aW9uJyAmJiAhX2NvbHVtbnNbMF0uZml4ZWQpIHtcblx0ICAgIF9jb2x1bW5zWzBdLmZpeGVkID0gdHJ1ZTtcblx0ICAgIHN0YXRlcy5maXhlZENvbHVtbnMudW5zaGlmdChfY29sdW1uc1swXSk7XG5cdCAgfVxuXHQgIHN0YXRlcy5vcmlnaW5Db2x1bW5zID0gW10uY29uY2F0KHN0YXRlcy5maXhlZENvbHVtbnMpLmNvbmNhdChfY29sdW1ucy5maWx0ZXIoZnVuY3Rpb24gKGNvbHVtbikge1xuXHQgICAgcmV0dXJuICFjb2x1bW4uZml4ZWQ7XG5cdCAgfSkpLmNvbmNhdChzdGF0ZXMucmlnaHRGaXhlZENvbHVtbnMpO1xuXHQgIHN0YXRlcy5jb2x1bW5zID0gZG9GbGF0dGVuQ29sdW1ucyhzdGF0ZXMub3JpZ2luQ29sdW1ucyk7XG5cdCAgc3RhdGVzLmlzQ29tcGxleCA9IHN0YXRlcy5maXhlZENvbHVtbnMubGVuZ3RoID4gMCB8fCBzdGF0ZXMucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoID4gMDtcblx0fTtcblxuXHRUYWJsZVN0b3JlLnByb3RvdHlwZS5pc1NlbGVjdGVkID0gZnVuY3Rpb24gKHJvdykge1xuXHQgIHJldHVybiAodGhpcy5zdGF0ZXMuc2VsZWN0aW9uIHx8IFtdKS5pbmRleE9mKHJvdykgPiAtMTtcblx0fTtcblxuXHRUYWJsZVN0b3JlLnByb3RvdHlwZS5jbGVhclNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICB2YXIgc3RhdGVzID0gdGhpcy5zdGF0ZXM7XG5cdCAgc3RhdGVzLmlzQWxsU2VsZWN0ZWQgPSBmYWxzZTtcblx0ICB2YXIgb2xkU2VsZWN0aW9uID0gc3RhdGVzLnNlbGVjdGlvbjtcblx0ICBzdGF0ZXMuc2VsZWN0aW9uID0gW107XG5cdCAgaWYgKG9sZFNlbGVjdGlvbi5sZW5ndGggPiAwKSB7XG5cdCAgICB0aGlzLnRhYmxlLiRlbWl0KCdzZWxlY3Rpb24tY2hhbmdlJywgc3RhdGVzLnNlbGVjdGlvbik7XG5cdCAgfVxuXHR9O1xuXG5cdFRhYmxlU3RvcmUucHJvdG90eXBlLnNldEV4cGFuZFJvd0tleXMgPSBmdW5jdGlvbiAocm93S2V5cykge1xuXHQgIHZhciBleHBhbmRSb3dzID0gW107XG5cdCAgdmFyIGRhdGEgPSB0aGlzLnN0YXRlcy5kYXRhO1xuXHQgIHZhciByb3dLZXkgPSB0aGlzLnN0YXRlcy5yb3dLZXk7XG5cdCAgaWYgKCFyb3dLZXkpIHRocm93IG5ldyBFcnJvcignW1RhYmxlXSBwcm9wIHJvdy1rZXkgc2hvdWxkIG5vdCBiZSBlbXB0eS4nKTtcblx0ICB2YXIga2V5c01hcCA9IGdldEtleXNNYXAoZGF0YSwgcm93S2V5KTtcblx0ICByb3dLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHQgICAgdmFyIGluZm8gPSBrZXlzTWFwW2tleV07XG5cdCAgICBpZiAoaW5mbykge1xuXHQgICAgICBleHBhbmRSb3dzLnB1c2goaW5mby5yb3cpO1xuXHQgICAgfVxuXHQgIH0pO1xuXG5cdCAgdGhpcy5zdGF0ZXMuZXhwYW5kUm93cyA9IGV4cGFuZFJvd3M7XG5cdH07XG5cblx0VGFibGVTdG9yZS5wcm90b3R5cGUudG9nZ2xlUm93U2VsZWN0aW9uID0gZnVuY3Rpb24gKHJvdywgc2VsZWN0ZWQpIHtcblx0ICB2YXIgY2hhbmdlZCA9IHRvZ2dsZVJvd1NlbGVjdGlvbih0aGlzLnN0YXRlcywgcm93LCBzZWxlY3RlZCk7XG5cdCAgaWYgKGNoYW5nZWQpIHtcblx0ICAgIHRoaXMudGFibGUuJGVtaXQoJ3NlbGVjdGlvbi1jaGFuZ2UnLCB0aGlzLnN0YXRlcy5zZWxlY3Rpb24pO1xuXHQgIH1cblx0fTtcblxuXHRUYWJsZVN0b3JlLnByb3RvdHlwZS5jbGVhblNlbGVjdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0ICB2YXIgc2VsZWN0aW9uID0gdGhpcy5zdGF0ZXMuc2VsZWN0aW9uIHx8IFtdO1xuXHQgIHZhciBkYXRhID0gdGhpcy5zdGF0ZXMuZGF0YTtcblx0ICB2YXIgcm93S2V5ID0gdGhpcy5zdGF0ZXMucm93S2V5O1xuXHQgIHZhciBkZWxldGVkID0gdm9pZCAwO1xuXHQgIGlmIChyb3dLZXkpIHtcblx0ICAgIGRlbGV0ZWQgPSBbXTtcblx0ICAgIHZhciBzZWxlY3RlZE1hcCA9IGdldEtleXNNYXAoc2VsZWN0aW9uLCByb3dLZXkpO1xuXHQgICAgdmFyIGRhdGFNYXAgPSBnZXRLZXlzTWFwKGRhdGEsIHJvd0tleSk7XG5cdCAgICBmb3IgKHZhciBrZXkgaW4gc2VsZWN0ZWRNYXApIHtcblx0ICAgICAgaWYgKHNlbGVjdGVkTWFwLmhhc093blByb3BlcnR5KGtleSkgJiYgIWRhdGFNYXBba2V5XSkge1xuXHQgICAgICAgIGRlbGV0ZWQucHVzaChzZWxlY3RlZE1hcFtrZXldLnJvdyk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9IGVsc2Uge1xuXHQgICAgZGVsZXRlZCA9IHNlbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgcmV0dXJuIGRhdGEuaW5kZXhPZihpdGVtKSA9PT0gLTE7XG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBkZWxldGVkLmZvckVhY2goZnVuY3Rpb24gKGRlbGV0ZWRJdGVtKSB7XG5cdCAgICBzZWxlY3Rpb24uc3BsaWNlKHNlbGVjdGlvbi5pbmRleE9mKGRlbGV0ZWRJdGVtKSwgMSk7XG5cdCAgfSk7XG5cblx0ICBpZiAoZGVsZXRlZC5sZW5ndGgpIHtcblx0ICAgIHRoaXMudGFibGUuJGVtaXQoJ3NlbGVjdGlvbi1jaGFuZ2UnLCBzZWxlY3Rpb24pO1xuXHQgIH1cblx0fTtcblxuXHRUYWJsZVN0b3JlLnByb3RvdHlwZS51cGRhdGVBbGxTZWxlY3RlZCA9IGZ1bmN0aW9uICgpIHtcblx0ICB2YXIgc3RhdGVzID0gdGhpcy5zdGF0ZXM7XG5cdCAgdmFyIHNlbGVjdGlvbiA9IHN0YXRlcy5zZWxlY3Rpb24sXG5cdCAgICAgIHJvd0tleSA9IHN0YXRlcy5yb3dLZXksXG5cdCAgICAgIHNlbGVjdGFibGUgPSBzdGF0ZXMuc2VsZWN0YWJsZSxcblx0ICAgICAgZGF0YSA9IHN0YXRlcy5kYXRhO1xuXG5cdCAgaWYgKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKSB7XG5cdCAgICBzdGF0ZXMuaXNBbGxTZWxlY3RlZCA9IGZhbHNlO1xuXHQgICAgcmV0dXJuO1xuXHQgIH1cblxuXHQgIHZhciBzZWxlY3RlZE1hcCA9IHZvaWQgMDtcblx0ICBpZiAocm93S2V5KSB7XG5cdCAgICBzZWxlY3RlZE1hcCA9IGdldEtleXNNYXAoc3RhdGVzLnNlbGVjdGlvbiwgcm93S2V5KTtcblx0ICB9XG5cblx0ICB2YXIgaXNTZWxlY3RlZCA9IGZ1bmN0aW9uIGlzU2VsZWN0ZWQocm93KSB7XG5cdCAgICBpZiAoc2VsZWN0ZWRNYXApIHtcblx0ICAgICAgcmV0dXJuICEhc2VsZWN0ZWRNYXBbKDAsIF91dGlsLmdldFJvd0lkZW50aXR5KShyb3csIHJvd0tleSldO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIHNlbGVjdGlvbi5pbmRleE9mKHJvdykgIT09IC0xO1xuXHQgICAgfVxuXHQgIH07XG5cblx0ICB2YXIgaXNBbGxTZWxlY3RlZCA9IHRydWU7XG5cdCAgdmFyIHNlbGVjdGVkQ291bnQgPSAwO1xuXHQgIGZvciAodmFyIGkgPSAwLCBqID0gZGF0YS5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0ICAgIHZhciBpdGVtID0gZGF0YVtpXTtcblx0ICAgIGlmIChzZWxlY3RhYmxlKSB7XG5cdCAgICAgIHZhciBpc1Jvd1NlbGVjdGFibGUgPSBzZWxlY3RhYmxlLmNhbGwobnVsbCwgaXRlbSwgaSk7XG5cdCAgICAgIGlmIChpc1Jvd1NlbGVjdGFibGUpIHtcblx0ICAgICAgICBpZiAoIWlzU2VsZWN0ZWQoaXRlbSkpIHtcblx0ICAgICAgICAgIGlzQWxsU2VsZWN0ZWQgPSBmYWxzZTtcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBzZWxlY3RlZENvdW50Kys7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBpZiAoIWlzU2VsZWN0ZWQoaXRlbSkpIHtcblx0ICAgICAgICBpc0FsbFNlbGVjdGVkID0gZmFsc2U7XG5cdCAgICAgICAgYnJlYWs7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgc2VsZWN0ZWRDb3VudCsrO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgaWYgKHNlbGVjdGVkQ291bnQgPT09IDApIGlzQWxsU2VsZWN0ZWQgPSBmYWxzZTtcblxuXHQgIHN0YXRlcy5pc0FsbFNlbGVjdGVkID0gaXNBbGxTZWxlY3RlZDtcblx0fTtcblxuXHRUYWJsZVN0b3JlLnByb3RvdHlwZS5zY2hlZHVsZUxheW91dCA9IGZ1bmN0aW9uICgpIHtcblx0ICB0aGlzLnRhYmxlLmRlYm91bmNlZExheW91dCgpO1xuXHR9O1xuXG5cdFRhYmxlU3RvcmUucHJvdG90eXBlLnNldEN1cnJlbnRSb3dLZXkgPSBmdW5jdGlvbiAoa2V5KSB7XG5cdCAgdmFyIHN0YXRlcyA9IHRoaXMuc3RhdGVzO1xuXHQgIHZhciByb3dLZXkgPSBzdGF0ZXMucm93S2V5O1xuXHQgIGlmICghcm93S2V5KSB0aHJvdyBuZXcgRXJyb3IoJ1tUYWJsZV0gcm93LWtleSBzaG91bGQgbm90IGJlIGVtcHR5LicpO1xuXHQgIHZhciBkYXRhID0gc3RhdGVzLmRhdGEgfHwgW107XG5cdCAgdmFyIGtleXNNYXAgPSBnZXRLZXlzTWFwKGRhdGEsIHJvd0tleSk7XG5cdCAgdmFyIGluZm8gPSBrZXlzTWFwW2tleV07XG5cdCAgaWYgKGluZm8pIHtcblx0ICAgIHN0YXRlcy5jdXJyZW50Um93ID0gaW5mby5yb3c7XG5cdCAgfVxuXHR9O1xuXG5cdFRhYmxlU3RvcmUucHJvdG90eXBlLnVwZGF0ZUN1cnJlbnRSb3cgPSBmdW5jdGlvbiAoKSB7XG5cdCAgdmFyIHN0YXRlcyA9IHRoaXMuc3RhdGVzO1xuXHQgIHZhciB0YWJsZSA9IHRoaXMudGFibGU7XG5cdCAgdmFyIGRhdGEgPSBzdGF0ZXMuZGF0YSB8fCBbXTtcblx0ICB2YXIgb2xkQ3VycmVudFJvdyA9IHN0YXRlcy5jdXJyZW50Um93O1xuXG5cdCAgaWYgKGRhdGEuaW5kZXhPZihvbGRDdXJyZW50Um93KSA9PT0gLTEpIHtcblx0ICAgIHN0YXRlcy5jdXJyZW50Um93ID0gbnVsbDtcblxuXHQgICAgaWYgKHN0YXRlcy5jdXJyZW50Um93ICE9PSBvbGRDdXJyZW50Um93KSB7XG5cdCAgICAgIHRhYmxlLiRlbWl0KCdjdXJyZW50LWNoYW5nZScsIG51bGwsIG9sZEN1cnJlbnRSb3cpO1xuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuXHRUYWJsZVN0b3JlLnByb3RvdHlwZS5jb21taXQgPSBmdW5jdGlvbiAobmFtZSkge1xuXHQgIHZhciBtdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucztcblx0ICBpZiAobXV0YXRpb25zW25hbWVdKSB7XG5cdCAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcblx0ICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG5cdCAgICB9XG5cblx0ICAgIG11dGF0aW9uc1tuYW1lXS5hcHBseSh0aGlzLCBbdGhpcy5zdGF0ZXNdLmNvbmNhdChhcmdzKSk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9uIG5vdCBmb3VuZDogJyArIG5hbWUpO1xuXHQgIH1cblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBUYWJsZVN0b3JlO1xuXG4vKioqLyB9LFxuLyogMTMzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ2dWVcIik7XG5cbi8qKiovIH0sXG4vKiAxMzQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLmdldFJvd0lkZW50aXR5ID0gZXhwb3J0cy5tb3VzZXdoZWVsID0gZXhwb3J0cy5nZXRDb2x1bW5CeUNlbGwgPSBleHBvcnRzLmdldENvbHVtbkJ5SWQgPSBleHBvcnRzLm9yZGVyQnkgPSBleHBvcnRzLmdldENlbGwgPSB1bmRlZmluZWQ7XG5cblx0dmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5cdHZhciBfdXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTA3KTtcblxuXHR2YXIgZ2V0Q2VsbCA9IGV4cG9ydHMuZ2V0Q2VsbCA9IGZ1bmN0aW9uIGdldENlbGwoZXZlbnQpIHtcblx0ICB2YXIgY2VsbCA9IGV2ZW50LnRhcmdldDtcblxuXHQgIHdoaWxlIChjZWxsICYmIGNlbGwudGFnTmFtZS50b1VwcGVyQ2FzZSgpICE9PSAnSFRNTCcpIHtcblx0ICAgIGlmIChjZWxsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1REJykge1xuXHQgICAgICByZXR1cm4gY2VsbDtcblx0ICAgIH1cblx0ICAgIGNlbGwgPSBjZWxsLnBhcmVudE5vZGU7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIG51bGw7XG5cdH07XG5cblx0dmFyIGlzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG5cdCAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiAodHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2Yob2JqKSkgPT09ICdvYmplY3QnO1xuXHR9O1xuXG5cdHZhciBvcmRlckJ5ID0gZXhwb3J0cy5vcmRlckJ5ID0gZnVuY3Rpb24gb3JkZXJCeShhcnJheSwgc29ydEtleSwgcmV2ZXJzZSwgc29ydE1ldGhvZCkge1xuXHQgIGlmICh0eXBlb2YgcmV2ZXJzZSA9PT0gJ3N0cmluZycpIHtcblx0ICAgIHJldmVyc2UgPSByZXZlcnNlID09PSAnZGVzY2VuZGluZycgPyAtMSA6IDE7XG5cdCAgfVxuXHQgIGlmICghc29ydEtleSAmJiAhc29ydE1ldGhvZCkge1xuXHQgICAgcmV0dXJuIGFycmF5O1xuXHQgIH1cblx0ICB2YXIgb3JkZXIgPSByZXZlcnNlICYmIHJldmVyc2UgPCAwID8gLTEgOiAxO1xuXG5cdCAgLy8gc29ydCBvbiBhIGNvcHkgdG8gYXZvaWQgbXV0YXRpbmcgb3JpZ2luYWwgYXJyYXlcblx0ICByZXR1cm4gYXJyYXkuc2xpY2UoKS5zb3J0KHNvcnRNZXRob2QgPyBmdW5jdGlvbiAoYSwgYikge1xuXHQgICAgcmV0dXJuIHNvcnRNZXRob2QoYSwgYikgPyBvcmRlciA6IC1vcmRlcjtcblx0ICB9IDogZnVuY3Rpb24gKGEsIGIpIHtcblx0ICAgIGlmIChzb3J0S2V5ICE9PSAnJGtleScpIHtcblx0ICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICckdmFsdWUnIGluIGEpIGEgPSBhLiR2YWx1ZTtcblx0ICAgICAgaWYgKGlzT2JqZWN0KGIpICYmICckdmFsdWUnIGluIGIpIGIgPSBiLiR2YWx1ZTtcblx0ICAgIH1cblx0ICAgIGEgPSBpc09iamVjdChhKSA/ICgwLCBfdXRpbC5nZXRWYWx1ZUJ5UGF0aCkoYSwgc29ydEtleSkgOiBhO1xuXHQgICAgYiA9IGlzT2JqZWN0KGIpID8gKDAsIF91dGlsLmdldFZhbHVlQnlQYXRoKShiLCBzb3J0S2V5KSA6IGI7XG5cdCAgICByZXR1cm4gYSA9PT0gYiA/IDAgOiBhID4gYiA/IG9yZGVyIDogLW9yZGVyO1xuXHQgIH0pO1xuXHR9O1xuXG5cdHZhciBnZXRDb2x1bW5CeUlkID0gZXhwb3J0cy5nZXRDb2x1bW5CeUlkID0gZnVuY3Rpb24gZ2V0Q29sdW1uQnlJZCh0YWJsZSwgY29sdW1uSWQpIHtcblx0ICB2YXIgY29sdW1uID0gbnVsbDtcblx0ICB0YWJsZS5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgIGlmIChpdGVtLmlkID09PSBjb2x1bW5JZCkge1xuXHQgICAgICBjb2x1bW4gPSBpdGVtO1xuXHQgICAgfVxuXHQgIH0pO1xuXHQgIHJldHVybiBjb2x1bW47XG5cdH07XG5cblx0dmFyIGdldENvbHVtbkJ5Q2VsbCA9IGV4cG9ydHMuZ2V0Q29sdW1uQnlDZWxsID0gZnVuY3Rpb24gZ2V0Q29sdW1uQnlDZWxsKHRhYmxlLCBjZWxsKSB7XG5cdCAgdmFyIG1hdGNoZXMgPSAoY2VsbC5jbGFzc05hbWUgfHwgJycpLm1hdGNoKC9lbC10YWJsZV9bXlxcc10rL2dtKTtcblx0ICBpZiAobWF0Y2hlcykge1xuXHQgICAgcmV0dXJuIGdldENvbHVtbkJ5SWQodGFibGUsIG1hdGNoZXNbMF0pO1xuXHQgIH1cblx0ICByZXR1cm4gbnVsbDtcblx0fTtcblxuXHR2YXIgaXNGaXJlZm94ID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IC0xO1xuXG5cdHZhciBtb3VzZXdoZWVsID0gZXhwb3J0cy5tb3VzZXdoZWVsID0gZnVuY3Rpb24gbW91c2V3aGVlbChlbGVtZW50LCBjYWxsYmFjaykge1xuXHQgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikge1xuXHQgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGlzRmlyZWZveCA/ICdET01Nb3VzZVNjcm9sbCcgOiAnbW91c2V3aGVlbCcsIGNhbGxiYWNrKTtcblx0ICB9XG5cdH07XG5cblx0dmFyIGdldFJvd0lkZW50aXR5ID0gZXhwb3J0cy5nZXRSb3dJZGVudGl0eSA9IGZ1bmN0aW9uIGdldFJvd0lkZW50aXR5KHJvdywgcm93S2V5KSB7XG5cdCAgaWYgKCFyb3cpIHRocm93IG5ldyBFcnJvcigncm93IGlzIHJlcXVpcmVkIHdoZW4gZ2V0IHJvdyBpZGVudGl0eScpO1xuXHQgIGlmICh0eXBlb2Ygcm93S2V5ID09PSAnc3RyaW5nJykge1xuXHQgICAgaWYgKHJvd0tleS5pbmRleE9mKCcuJykgPCAwKSB7XG5cdCAgICAgIHJldHVybiByb3dbcm93S2V5XTtcblx0ICAgIH1cblx0ICAgIHZhciBrZXkgPSByb3dLZXkuc3BsaXQoJy4nKTtcblx0ICAgIHZhciBjdXJyZW50ID0gcm93O1xuXHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXkubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgY3VycmVudCA9IGN1cnJlbnRba2V5W2ldXTtcblx0ICAgIH1cblx0ICAgIHJldHVybiBjdXJyZW50O1xuXHQgIH0gZWxzZSBpZiAodHlwZW9mIHJvd0tleSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgcmV0dXJuIHJvd0tleS5jYWxsKG51bGwsIHJvdyk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMTM1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3Njcm9sbGJhcldpZHRoID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzYpO1xuXG5cdHZhciBfc2Nyb2xsYmFyV2lkdGgyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2Nyb2xsYmFyV2lkdGgpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuXHR2YXIgVGFibGVMYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgZnVuY3Rpb24gVGFibGVMYXlvdXQob3B0aW9ucykge1xuXHQgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRhYmxlTGF5b3V0KTtcblxuXHQgICAgdGhpcy50YWJsZSA9IG51bGw7XG5cdCAgICB0aGlzLnN0b3JlID0gbnVsbDtcblx0ICAgIHRoaXMuY29sdW1ucyA9IG51bGw7XG5cdCAgICB0aGlzLmZpdCA9IHRydWU7XG5cdCAgICB0aGlzLnNob3dIZWFkZXIgPSB0cnVlO1xuXG5cdCAgICB0aGlzLmhlaWdodCA9IG51bGw7XG5cdCAgICB0aGlzLnNjcm9sbFggPSBmYWxzZTtcblx0ICAgIHRoaXMuc2Nyb2xsWSA9IGZhbHNlO1xuXHQgICAgdGhpcy5ib2R5V2lkdGggPSBudWxsO1xuXHQgICAgdGhpcy5maXhlZFdpZHRoID0gbnVsbDtcblx0ICAgIHRoaXMucmlnaHRGaXhlZFdpZHRoID0gbnVsbDtcblx0ICAgIHRoaXMudGFibGVIZWlnaHQgPSBudWxsO1xuXHQgICAgdGhpcy5oZWFkZXJIZWlnaHQgPSA0NDsgLy8gVGFibGUgSGVhZGVyIEhlaWdodFxuXHQgICAgdGhpcy5mb290ZXJIZWlnaHQgPSA0NDsgLy8gVGFibGUgRm9vdGVyIEhlaWdodFxuXHQgICAgdGhpcy52aWV3cG9ydEhlaWdodCA9IG51bGw7IC8vIFRhYmxlIEhlaWdodCAtIFNjcm9sbCBCYXIgSGVpZ2h0XG5cdCAgICB0aGlzLmJvZHlIZWlnaHQgPSBudWxsOyAvLyBUYWJsZSBIZWlnaHQgLSBUYWJsZSBIZWFkZXIgSGVpZ2h0XG5cdCAgICB0aGlzLmZpeGVkQm9keUhlaWdodCA9IG51bGw7IC8vIFRhYmxlIEhlaWdodCAtIFRhYmxlIEhlYWRlciBIZWlnaHQgLSBTY3JvbGwgQmFyIEhlaWdodFxuXHQgICAgdGhpcy5ndXR0ZXJXaWR0aCA9ICgwLCBfc2Nyb2xsYmFyV2lkdGgyLmRlZmF1bHQpKCk7XG5cblx0ICAgIGZvciAodmFyIG5hbWUgaW4gb3B0aW9ucykge1xuXHQgICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuXHQgICAgICAgIHRoaXNbbmFtZV0gPSBvcHRpb25zW25hbWVdO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIGlmICghdGhpcy50YWJsZSkge1xuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RhYmxlIGlzIHJlcXVpcmVkIGZvciBUYWJsZSBMYXlvdXQnKTtcblx0ICAgIH1cblx0ICAgIGlmICghdGhpcy5zdG9yZSkge1xuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0b3JlIGlzIHJlcXVpcmVkIGZvciBUYWJsZSBMYXlvdXQnKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBUYWJsZUxheW91dC5wcm90b3R5cGUudXBkYXRlU2Nyb2xsWSA9IGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbFkoKSB7XG5cdCAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG5cdCAgICBpZiAodHlwZW9mIGhlaWdodCAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIGhlaWdodCAhPT0gJ251bWJlcicpIHJldHVybjtcblx0ICAgIHZhciBib2R5V3JhcHBlciA9IHRoaXMudGFibGUuYm9keVdyYXBwZXI7XG5cdCAgICBpZiAodGhpcy50YWJsZS4kZWwgJiYgYm9keVdyYXBwZXIpIHtcblx0ICAgICAgdmFyIGJvZHkgPSBib2R5V3JhcHBlci5xdWVyeVNlbGVjdG9yKCcuZWwtdGFibGVfX2JvZHknKTtcblx0ICAgICAgdGhpcy5zY3JvbGxZID0gYm9keS5vZmZzZXRIZWlnaHQgPiBib2R5V3JhcHBlci5vZmZzZXRIZWlnaHQ7XG5cdCAgICB9XG5cdCAgfTtcblxuXHQgIFRhYmxlTGF5b3V0LnByb3RvdHlwZS5zZXRIZWlnaHQgPSBmdW5jdGlvbiBzZXRIZWlnaHQodmFsdWUpIHtcblx0ICAgIHZhciBwcm9wID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnaGVpZ2h0JztcblxuXHQgICAgdmFyIGVsID0gdGhpcy50YWJsZS4kZWw7XG5cdCAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuXHQgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdCAgICB9XG5cblx0ICAgIHRoaXMuaGVpZ2h0ID0gdmFsdWU7XG5cblx0ICAgIGlmICghZWwpIHJldHVybjtcblx0ICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG5cdCAgICAgIGVsLnN0eWxlW3Byb3BdID0gdmFsdWUgKyAncHgnO1xuXG5cdCAgICAgIHRoaXMudXBkYXRlSGVpZ2h0KCk7XG5cdCAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0ICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuXHQgICAgICAgIGVsLnN0eWxlW3Byb3BdID0gJyc7XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy51cGRhdGVIZWlnaHQoKTtcblx0ICAgIH1cblx0ICB9O1xuXG5cdCAgVGFibGVMYXlvdXQucHJvdG90eXBlLnNldE1heEhlaWdodCA9IGZ1bmN0aW9uIHNldE1heEhlaWdodCh2YWx1ZSkge1xuXHQgICAgcmV0dXJuIHRoaXMuc2V0SGVpZ2h0KHZhbHVlLCAnbWF4LWhlaWdodCcpO1xuXHQgIH07XG5cblx0ICBUYWJsZUxheW91dC5wcm90b3R5cGUudXBkYXRlSGVpZ2h0ID0gZnVuY3Rpb24gdXBkYXRlSGVpZ2h0KCkge1xuXHQgICAgdmFyIGhlaWdodCA9IHRoaXMudGFibGVIZWlnaHQgPSB0aGlzLnRhYmxlLiRlbC5jbGllbnRIZWlnaHQ7XG5cdCAgICB2YXIgbm9EYXRhID0gIXRoaXMudGFibGUuZGF0YSB8fCB0aGlzLnRhYmxlLmRhdGEubGVuZ3RoID09PSAwO1xuXHQgICAgdmFyIF90YWJsZSQkcmVmcyA9IHRoaXMudGFibGUuJHJlZnMsXG5cdCAgICAgICAgaGVhZGVyV3JhcHBlciA9IF90YWJsZSQkcmVmcy5oZWFkZXJXcmFwcGVyLFxuXHQgICAgICAgIGZvb3RlcldyYXBwZXIgPSBfdGFibGUkJHJlZnMuZm9vdGVyV3JhcHBlcjtcblxuXHQgICAgdmFyIGZvb3RlckhlaWdodCA9IHRoaXMuZm9vdGVySGVpZ2h0ID0gZm9vdGVyV3JhcHBlciA/IGZvb3RlcldyYXBwZXIub2Zmc2V0SGVpZ2h0IDogMDtcblx0ICAgIGlmICh0aGlzLnNob3dIZWFkZXIgJiYgIWhlYWRlcldyYXBwZXIpIHJldHVybjtcblx0ICAgIGlmICghdGhpcy5zaG93SGVhZGVyKSB7XG5cdCAgICAgIHRoaXMuaGVhZGVySGVpZ2h0ID0gMDtcblx0ICAgICAgaWYgKHRoaXMuaGVpZ2h0ICE9PSBudWxsICYmICghaXNOYU4odGhpcy5oZWlnaHQpIHx8IHR5cGVvZiB0aGlzLmhlaWdodCA9PT0gJ3N0cmluZycpKSB7XG5cdCAgICAgICAgdGhpcy5ib2R5SGVpZ2h0ID0gaGVpZ2h0IC0gZm9vdGVySGVpZ2h0ICsgKGZvb3RlcldyYXBwZXIgPyAxIDogMCk7XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5maXhlZEJvZHlIZWlnaHQgPSB0aGlzLnNjcm9sbFggPyBoZWlnaHQgLSB0aGlzLmd1dHRlcldpZHRoIDogaGVpZ2h0O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdmFyIGhlYWRlckhlaWdodCA9IHRoaXMuaGVhZGVySGVpZ2h0ID0gaGVhZGVyV3JhcHBlci5vZmZzZXRIZWlnaHQ7XG5cdCAgICAgIHZhciBib2R5SGVpZ2h0ID0gaGVpZ2h0IC0gaGVhZGVySGVpZ2h0IC0gZm9vdGVySGVpZ2h0ICsgKGZvb3RlcldyYXBwZXIgPyAxIDogMCk7XG5cdCAgICAgIGlmICh0aGlzLmhlaWdodCAhPT0gbnVsbCAmJiAoIWlzTmFOKHRoaXMuaGVpZ2h0KSB8fCB0eXBlb2YgdGhpcy5oZWlnaHQgPT09ICdzdHJpbmcnKSkge1xuXHQgICAgICAgIHRoaXMuYm9keUhlaWdodCA9IGJvZHlIZWlnaHQ7XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5maXhlZEJvZHlIZWlnaHQgPSB0aGlzLnNjcm9sbFggPyBib2R5SGVpZ2h0IC0gdGhpcy5ndXR0ZXJXaWR0aCA6IGJvZHlIZWlnaHQ7XG5cdCAgICB9XG5cdCAgICB0aGlzLnZpZXdwb3J0SGVpZ2h0ID0gdGhpcy5zY3JvbGxYID8gaGVpZ2h0IC0gKG5vRGF0YSA/IDAgOiB0aGlzLmd1dHRlcldpZHRoKSA6IGhlaWdodDtcblx0ICB9O1xuXG5cdCAgVGFibGVMYXlvdXQucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcblx0ICAgIHZhciBmaXQgPSB0aGlzLmZpdDtcblx0ICAgIHZhciBjb2x1bW5zID0gdGhpcy50YWJsZS5jb2x1bW5zO1xuXHQgICAgdmFyIGJvZHlXaWR0aCA9IHRoaXMudGFibGUuJGVsLmNsaWVudFdpZHRoO1xuXHQgICAgdmFyIGJvZHlNaW5XaWR0aCA9IDA7XG5cblx0ICAgIHZhciBmbGF0dGVuQ29sdW1ucyA9IFtdO1xuXHQgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcblx0ICAgICAgaWYgKGNvbHVtbi5pc0NvbHVtbkdyb3VwKSB7XG5cdCAgICAgICAgZmxhdHRlbkNvbHVtbnMucHVzaC5hcHBseShmbGF0dGVuQ29sdW1ucywgY29sdW1uLmNvbHVtbnMpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIGZsYXR0ZW5Db2x1bW5zLnB1c2goY29sdW1uKTtcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIHZhciBmbGV4Q29sdW1ucyA9IGZsYXR0ZW5Db2x1bW5zLmZpbHRlcihmdW5jdGlvbiAoY29sdW1uKSB7XG5cdCAgICAgIHJldHVybiB0eXBlb2YgY29sdW1uLndpZHRoICE9PSAnbnVtYmVyJztcblx0ICAgIH0pO1xuXG5cdCAgICBpZiAoZmxleENvbHVtbnMubGVuZ3RoID4gMCAmJiBmaXQpIHtcblx0ICAgICAgZmxhdHRlbkNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdCAgICAgICAgYm9keU1pbldpZHRoICs9IGNvbHVtbi53aWR0aCB8fCBjb2x1bW4ubWluV2lkdGggfHwgODA7XG5cdCAgICAgIH0pO1xuXG5cdCAgICAgIGlmIChib2R5TWluV2lkdGggPCBib2R5V2lkdGggLSB0aGlzLmd1dHRlcldpZHRoKSB7XG5cdCAgICAgICAgLy8gRE9OJ1QgSEFWRSBTQ1JPTEwgQkFSXG5cdCAgICAgICAgdGhpcy5zY3JvbGxYID0gZmFsc2U7XG5cblx0ICAgICAgICB2YXIgdG90YWxGbGV4V2lkdGggPSBib2R5V2lkdGggLSB0aGlzLmd1dHRlcldpZHRoIC0gYm9keU1pbldpZHRoO1xuXG5cdCAgICAgICAgaWYgKGZsZXhDb2x1bW5zLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgZmxleENvbHVtbnNbMF0ucmVhbFdpZHRoID0gKGZsZXhDb2x1bW5zWzBdLm1pbldpZHRoIHx8IDgwKSArIHRvdGFsRmxleFdpZHRoO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgYWxsQ29sdW1uc1dpZHRoID0gZmxleENvbHVtbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjb2x1bW4pIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gcHJldiArIChjb2x1bW4ubWluV2lkdGggfHwgODApO1xuXHQgICAgICAgICAgICB9LCAwKTtcblx0ICAgICAgICAgICAgdmFyIGZsZXhXaWR0aFBlclBpeGVsID0gdG90YWxGbGV4V2lkdGggLyBhbGxDb2x1bW5zV2lkdGg7XG5cdCAgICAgICAgICAgIHZhciBub25lRmlyc3RXaWR0aCA9IDA7XG5cblx0ICAgICAgICAgICAgZmxleENvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uLCBpbmRleCkge1xuXHQgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkgcmV0dXJuO1xuXHQgICAgICAgICAgICAgIHZhciBmbGV4V2lkdGggPSBNYXRoLmZsb29yKChjb2x1bW4ubWluV2lkdGggfHwgODApICogZmxleFdpZHRoUGVyUGl4ZWwpO1xuXHQgICAgICAgICAgICAgIG5vbmVGaXJzdFdpZHRoICs9IGZsZXhXaWR0aDtcblx0ICAgICAgICAgICAgICBjb2x1bW4ucmVhbFdpZHRoID0gKGNvbHVtbi5taW5XaWR0aCB8fCA4MCkgKyBmbGV4V2lkdGg7XG5cdCAgICAgICAgICAgIH0pO1xuXG5cdCAgICAgICAgICAgIGZsZXhDb2x1bW5zWzBdLnJlYWxXaWR0aCA9IChmbGV4Q29sdW1uc1swXS5taW5XaWR0aCB8fCA4MCkgKyB0b3RhbEZsZXhXaWR0aCAtIG5vbmVGaXJzdFdpZHRoO1xuXHQgICAgICAgICAgfSkoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgLy8gSEFWRSBIT1JJWk9OVEFMIFNDUk9MTCBCQVJcblx0ICAgICAgICB0aGlzLnNjcm9sbFggPSB0cnVlO1xuXHQgICAgICAgIGZsZXhDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuXHQgICAgICAgICAgY29sdW1uLnJlYWxXaWR0aCA9IGNvbHVtbi5taW5XaWR0aDtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHRoaXMuYm9keVdpZHRoID0gTWF0aC5tYXgoYm9keU1pbldpZHRoLCBib2R5V2lkdGgpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgZmxhdHRlbkNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdCAgICAgICAgaWYgKCFjb2x1bW4ud2lkdGggJiYgIWNvbHVtbi5taW5XaWR0aCkge1xuXHQgICAgICAgICAgY29sdW1uLnJlYWxXaWR0aCA9IDgwO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBjb2x1bW4ucmVhbFdpZHRoID0gY29sdW1uLndpZHRoIHx8IGNvbHVtbi5taW5XaWR0aDtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBib2R5TWluV2lkdGggKz0gY29sdW1uLnJlYWxXaWR0aDtcblx0ICAgICAgfSk7XG5cdCAgICAgIHRoaXMuc2Nyb2xsWCA9IGJvZHlNaW5XaWR0aCA+IGJvZHlXaWR0aDtcblxuXHQgICAgICB0aGlzLmJvZHlXaWR0aCA9IGJvZHlNaW5XaWR0aDtcblx0ICAgIH1cblxuXHQgICAgdmFyIGZpeGVkQ29sdW1ucyA9IHRoaXMuc3RvcmUuc3RhdGVzLmZpeGVkQ29sdW1ucztcblxuXHQgICAgaWYgKGZpeGVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XG5cdCAgICAgIHZhciBmaXhlZFdpZHRoID0gMDtcblx0ICAgICAgZml4ZWRDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuXHQgICAgICAgIGZpeGVkV2lkdGggKz0gY29sdW1uLnJlYWxXaWR0aDtcblx0ICAgICAgfSk7XG5cblx0ICAgICAgdGhpcy5maXhlZFdpZHRoID0gZml4ZWRXaWR0aDtcblx0ICAgIH1cblxuXHQgICAgdmFyIHJpZ2h0Rml4ZWRDb2x1bW5zID0gdGhpcy5zdG9yZS5zdGF0ZXMucmlnaHRGaXhlZENvbHVtbnM7XG5cdCAgICBpZiAocmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoID4gMCkge1xuXHQgICAgICB2YXIgcmlnaHRGaXhlZFdpZHRoID0gMDtcblx0ICAgICAgcmlnaHRGaXhlZENvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdCAgICAgICAgcmlnaHRGaXhlZFdpZHRoICs9IGNvbHVtbi5yZWFsV2lkdGg7XG5cdCAgICAgIH0pO1xuXG5cdCAgICAgIHRoaXMucmlnaHRGaXhlZFdpZHRoID0gcmlnaHRGaXhlZFdpZHRoO1xuXHQgICAgfVxuXHQgIH07XG5cblx0ICByZXR1cm4gVGFibGVMYXlvdXQ7XG5cdH0oKTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBUYWJsZUxheW91dDtcblxuLyoqKi8gfSxcbi8qIDEzNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsYmFyLXdpZHRoXCIpO1xuXG4vKioqLyB9LFxuLyogMTM3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNCk7XG5cblx0dmFyIF9kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcblxuXHR2YXIgX2NoZWNrYm94ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzApO1xuXG5cdHZhciBfY2hlY2tib3gyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2hlY2tib3gpO1xuXG5cdHZhciBfdG9vbHRpcCA9IF9fd2VicGFja19yZXF1aXJlX18oMTM4KTtcblxuXHR2YXIgX3Rvb2x0aXAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdG9vbHRpcCk7XG5cblx0dmFyIF9kZWJvdW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xuXG5cdHZhciBfZGVib3VuY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVib3VuY2UpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIGNvbXBvbmVudHM6IHtcblx0ICAgIEVsQ2hlY2tib3g6IF9jaGVja2JveDIuZGVmYXVsdCxcblx0ICAgIEVsVG9vbHRpcDogX3Rvb2x0aXAyLmRlZmF1bHRcblx0ICB9LFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIHN0b3JlOiB7XG5cdCAgICAgIHJlcXVpcmVkOiB0cnVlXG5cdCAgICB9LFxuXHQgICAgc3RyaXBlOiBCb29sZWFuLFxuXHQgICAgY29udGV4dDoge30sXG5cdCAgICBsYXlvdXQ6IHtcblx0ICAgICAgcmVxdWlyZWQ6IHRydWVcblx0ICAgIH0sXG5cdCAgICByb3dDbGFzc05hbWU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcblx0ICAgIHJvd1N0eWxlOiBbT2JqZWN0LCBGdW5jdGlvbl0sXG5cdCAgICBmaXhlZDogU3RyaW5nLFxuXHQgICAgaGlnaGxpZ2h0OiBCb29sZWFuXG5cdCAgfSxcblxuXHQgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcblx0ICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgIHZhciBjb2x1bW5zSGlkZGVuID0gdGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbiAoY29sdW1uLCBpbmRleCkge1xuXHQgICAgICByZXR1cm4gX3RoaXMuaXNDb2x1bW5IaWRkZW4oaW5kZXgpO1xuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gaChcblx0ICAgICAgJ3RhYmxlJyxcblx0ICAgICAge1xuXHQgICAgICAgICdjbGFzcyc6ICdlbC10YWJsZV9fYm9keScsXG5cdCAgICAgICAgYXR0cnM6IHsgY2VsbHNwYWNpbmc6ICcwJyxcblx0ICAgICAgICAgIGNlbGxwYWRkaW5nOiAnMCcsXG5cdCAgICAgICAgICBib3JkZXI6ICcwJyB9XG5cdCAgICAgIH0sXG5cdCAgICAgIFtoKFxuXHQgICAgICAgICdjb2xncm91cCcsXG5cdCAgICAgICAgbnVsbCxcblx0ICAgICAgICBbdGhpcy5fbCh0aGlzLmNvbHVtbnMsIGZ1bmN0aW9uIChjb2x1bW4pIHtcblx0ICAgICAgICAgIHJldHVybiBoKFxuXHQgICAgICAgICAgICAnY29sJyxcblx0ICAgICAgICAgICAge1xuXHQgICAgICAgICAgICAgIGF0dHJzOiB7XG5cdCAgICAgICAgICAgICAgICBuYW1lOiBjb2x1bW4uaWQsXG5cdCAgICAgICAgICAgICAgICB3aWR0aDogY29sdW1uLnJlYWxXaWR0aCB8fCBjb2x1bW4ud2lkdGhcblx0ICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIFtdXG5cdCAgICAgICAgICApO1xuXHQgICAgICAgIH0pXVxuXHQgICAgICApLCBoKFxuXHQgICAgICAgICd0Ym9keScsXG5cdCAgICAgICAgbnVsbCxcblx0ICAgICAgICBbdGhpcy5fbCh0aGlzLmRhdGEsIGZ1bmN0aW9uIChyb3csICRpbmRleCkge1xuXHQgICAgICAgICAgcmV0dXJuIFtoKFxuXHQgICAgICAgICAgICAndHInLFxuXHQgICAgICAgICAgICB7XG5cdCAgICAgICAgICAgICAgc3R5bGU6IF90aGlzLnJvd1N0eWxlID8gX3RoaXMuZ2V0Um93U3R5bGUocm93LCAkaW5kZXgpIDogbnVsbCxcblx0ICAgICAgICAgICAgICBrZXk6IF90aGlzLnRhYmxlLnJvd0tleSA/IF90aGlzLmdldEtleU9mUm93KHJvdywgJGluZGV4KSA6ICRpbmRleCxcblx0ICAgICAgICAgICAgICBvbjoge1xuXHQgICAgICAgICAgICAgICAgJ2RibGNsaWNrJzogZnVuY3Rpb24gZGJsY2xpY2soJGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVEb3VibGVDbGljaygkZXZlbnQsIHJvdyk7XG5cdCAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgJ2NsaWNrJzogZnVuY3Rpb24gY2xpY2soJGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVDbGljaygkZXZlbnQsIHJvdyk7XG5cdCAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgJ2NvbnRleHRtZW51JzogZnVuY3Rpb24gY29udGV4dG1lbnUoJGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVDb250ZXh0TWVudSgkZXZlbnQsIHJvdyk7XG5cdCAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgJ21vdXNlZW50ZXInOiBmdW5jdGlvbiBtb3VzZWVudGVyKF8pIHtcblx0ICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZU1vdXNlRW50ZXIoJGluZGV4KTtcblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICAnbW91c2VsZWF2ZSc6IGZ1bmN0aW9uIG1vdXNlbGVhdmUoXykge1xuXHQgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTW91c2VMZWF2ZSgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgICAnY2xhc3MnOiBbX3RoaXMuZ2V0Um93Q2xhc3Mocm93LCAkaW5kZXgpXSB9LFxuXHQgICAgICAgICAgICBbX3RoaXMuX2woX3RoaXMuY29sdW1ucywgZnVuY3Rpb24gKGNvbHVtbiwgY2VsbEluZGV4KSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIGgoXG5cdCAgICAgICAgICAgICAgICAndGQnLFxuXHQgICAgICAgICAgICAgICAge1xuXHQgICAgICAgICAgICAgICAgICAnY2xhc3MnOiBbY29sdW1uLmlkLCBjb2x1bW4uYWxpZ24sIGNvbHVtbi5jbGFzc05hbWUgfHwgJycsIGNvbHVtbnNIaWRkZW5bY2VsbEluZGV4XSA/ICdpcy1oaWRkZW4nIDogJyddLFxuXHQgICAgICAgICAgICAgICAgICBvbjoge1xuXHQgICAgICAgICAgICAgICAgICAgICdtb3VzZWVudGVyJzogZnVuY3Rpb24gbW91c2VlbnRlcigkZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVDZWxsTW91c2VFbnRlcigkZXZlbnQsIHJvdyk7XG5cdCAgICAgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgICAgICAnbW91c2VsZWF2ZSc6IF90aGlzLmhhbmRsZUNlbGxNb3VzZUxlYXZlXG5cdCAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICBbY29sdW1uLnJlbmRlckNlbGwuY2FsbChfdGhpcy5fcmVuZGVyUHJveHksIGgsIHsgcm93OiByb3csIGNvbHVtbjogY29sdW1uLCAkaW5kZXg6ICRpbmRleCwgc3RvcmU6IF90aGlzLnN0b3JlLCBfc2VsZjogX3RoaXMuY29udGV4dCB8fCBfdGhpcy50YWJsZS4kdm5vZGUuY29udGV4dCB9LCBjb2x1bW5zSGlkZGVuW2NlbGxJbmRleF0pXVxuXHQgICAgICAgICAgICAgICk7XG5cdCAgICAgICAgICAgIH0pLCAhX3RoaXMuZml4ZWQgJiYgX3RoaXMubGF5b3V0LnNjcm9sbFkgJiYgX3RoaXMubGF5b3V0Lmd1dHRlcldpZHRoID8gaChcblx0ICAgICAgICAgICAgICAndGQnLFxuXHQgICAgICAgICAgICAgIHsgJ2NsYXNzJzogJ2d1dHRlcicgfSxcblx0ICAgICAgICAgICAgICBbXVxuXHQgICAgICAgICAgICApIDogJyddXG5cdCAgICAgICAgICApLCBfdGhpcy5zdG9yZS5zdGF0ZXMuZXhwYW5kUm93cy5pbmRleE9mKHJvdykgPiAtMSA/IGgoXG5cdCAgICAgICAgICAgICd0cicsXG5cdCAgICAgICAgICAgIG51bGwsXG5cdCAgICAgICAgICAgIFtoKFxuXHQgICAgICAgICAgICAgICd0ZCcsXG5cdCAgICAgICAgICAgICAge1xuXHQgICAgICAgICAgICAgICAgYXR0cnM6IHsgY29sc3BhbjogX3RoaXMuY29sdW1ucy5sZW5ndGggfSxcblx0ICAgICAgICAgICAgICAgICdjbGFzcyc6ICdlbC10YWJsZV9fZXhwYW5kZWQtY2VsbCcgfSxcblx0ICAgICAgICAgICAgICBbX3RoaXMudGFibGUucmVuZGVyRXhwYW5kZWQgPyBfdGhpcy50YWJsZS5yZW5kZXJFeHBhbmRlZChoLCB7IHJvdzogcm93LCAkaW5kZXg6ICRpbmRleCwgc3RvcmU6IF90aGlzLnN0b3JlIH0pIDogJyddXG5cdCAgICAgICAgICAgICldXG5cdCAgICAgICAgICApIDogJyddO1xuXHQgICAgICAgIH0pLmNvbmNhdCh0aGlzLl9zZWxmLiRwYXJlbnQuJHNsb3RzLmFwcGVuZCkuY29uY2F0KGgoXG5cdCAgICAgICAgICAnZWwtdG9vbHRpcCcsXG5cdCAgICAgICAgICB7XG5cdCAgICAgICAgICAgIGF0dHJzOiB7IGVmZmVjdDogdGhpcy50YWJsZS50b29sdGlwRWZmZWN0LCBwbGFjZW1lbnQ6ICd0b3AnLCBjb250ZW50OiB0aGlzLnRvb2x0aXBDb250ZW50IH0sXG5cdCAgICAgICAgICAgIHJlZjogJ3Rvb2x0aXAnIH0sXG5cdCAgICAgICAgICBbXVxuXHQgICAgICAgICkpXVxuXHQgICAgICApXVxuXHQgICAgKTtcblx0ICB9LFxuXG5cblx0ICB3YXRjaDoge1xuXHQgICAgJ3N0b3JlLnN0YXRlcy5ob3ZlclJvdyc6IGZ1bmN0aW9uIHN0b3JlU3RhdGVzSG92ZXJSb3cobmV3VmFsLCBvbGRWYWwpIHtcblx0ICAgICAgaWYgKCF0aGlzLnN0b3JlLnN0YXRlcy5pc0NvbXBsZXgpIHJldHVybjtcblx0ICAgICAgdmFyIGVsID0gdGhpcy4kZWw7XG5cdCAgICAgIGlmICghZWwpIHJldHVybjtcblx0ICAgICAgdmFyIHJvd3MgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCd0Ym9keSA+IHRyLmVsLXRhYmxlX19yb3cnKTtcblx0ICAgICAgdmFyIG9sZFJvdyA9IHJvd3Nbb2xkVmFsXTtcblx0ICAgICAgdmFyIG5ld1JvdyA9IHJvd3NbbmV3VmFsXTtcblx0ICAgICAgaWYgKG9sZFJvdykge1xuXHQgICAgICAgICgwLCBfZG9tLnJlbW92ZUNsYXNzKShvbGRSb3csICdob3Zlci1yb3cnKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAobmV3Um93KSB7XG5cdCAgICAgICAgKDAsIF9kb20uYWRkQ2xhc3MpKG5ld1JvdywgJ2hvdmVyLXJvdycpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgJ3N0b3JlLnN0YXRlcy5jdXJyZW50Um93JzogZnVuY3Rpb24gc3RvcmVTdGF0ZXNDdXJyZW50Um93KG5ld1ZhbCwgb2xkVmFsKSB7XG5cdCAgICAgIGlmICghdGhpcy5oaWdobGlnaHQpIHJldHVybjtcblx0ICAgICAgdmFyIGVsID0gdGhpcy4kZWw7XG5cdCAgICAgIGlmICghZWwpIHJldHVybjtcblx0ICAgICAgdmFyIGRhdGEgPSB0aGlzLnN0b3JlLnN0YXRlcy5kYXRhO1xuXHQgICAgICB2YXIgcm93cyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3Rib2R5ID4gdHIuZWwtdGFibGVfX3JvdycpO1xuXHQgICAgICB2YXIgb2xkUm93ID0gcm93c1tkYXRhLmluZGV4T2Yob2xkVmFsKV07XG5cdCAgICAgIHZhciBuZXdSb3cgPSByb3dzW2RhdGEuaW5kZXhPZihuZXdWYWwpXTtcblx0ICAgICAgaWYgKG9sZFJvdykge1xuXHQgICAgICAgICgwLCBfZG9tLnJlbW92ZUNsYXNzKShvbGRSb3csICdjdXJyZW50LXJvdycpO1xuXHQgICAgICB9IGVsc2UgaWYgKHJvd3MpIHtcblx0ICAgICAgICBbXS5mb3JFYWNoLmNhbGwocm93cywgZnVuY3Rpb24gKHJvdykge1xuXHQgICAgICAgICAgcmV0dXJuICgwLCBfZG9tLnJlbW92ZUNsYXNzKShyb3csICdjdXJyZW50LXJvdycpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChuZXdSb3cpIHtcblx0ICAgICAgICAoMCwgX2RvbS5hZGRDbGFzcykobmV3Um93LCAnY3VycmVudC1yb3cnKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgdGFibGU6IGZ1bmN0aW9uIHRhYmxlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcGFyZW50O1xuXHQgICAgfSxcblx0ICAgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlcy5kYXRhO1xuXHQgICAgfSxcblx0ICAgIGNvbHVtbnNDb3VudDogZnVuY3Rpb24gY29sdW1uc0NvdW50KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZXMuY29sdW1ucy5sZW5ndGg7XG5cdCAgICB9LFxuXHQgICAgbGVmdEZpeGVkQ291bnQ6IGZ1bmN0aW9uIGxlZnRGaXhlZENvdW50KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZXMuZml4ZWRDb2x1bW5zLmxlbmd0aDtcblx0ICAgIH0sXG5cdCAgICByaWdodEZpeGVkQ291bnQ6IGZ1bmN0aW9uIHJpZ2h0Rml4ZWRDb3VudCgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuc3RhdGVzLnJpZ2h0Rml4ZWRDb2x1bW5zLmxlbmd0aDtcblx0ICAgIH0sXG5cdCAgICBjb2x1bW5zOiBmdW5jdGlvbiBjb2x1bW5zKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZXMuY29sdW1ucztcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHRvb2x0aXBDb250ZW50OiAnJ1xuXHQgICAgfTtcblx0ICB9LFxuXHQgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG5cdCAgICB0aGlzLmFjdGl2YXRlVG9vbHRpcCA9ICgwLCBfZGVib3VuY2UyLmRlZmF1bHQpKDUwLCBmdW5jdGlvbiAodG9vbHRpcCkge1xuXHQgICAgICByZXR1cm4gdG9vbHRpcC5oYW5kbGVTaG93UG9wcGVyKCk7XG5cdCAgICB9KTtcblx0ICB9LFxuXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBnZXRLZXlPZlJvdzogZnVuY3Rpb24gZ2V0S2V5T2ZSb3cocm93LCBpbmRleCkge1xuXHQgICAgICB2YXIgcm93S2V5ID0gdGhpcy50YWJsZS5yb3dLZXk7XG5cdCAgICAgIGlmIChyb3dLZXkpIHtcblx0ICAgICAgICByZXR1cm4gKDAsIF91dGlsLmdldFJvd0lkZW50aXR5KShyb3csIHJvd0tleSk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIGluZGV4O1xuXHQgICAgfSxcblx0ICAgIGlzQ29sdW1uSGlkZGVuOiBmdW5jdGlvbiBpc0NvbHVtbkhpZGRlbihpbmRleCkge1xuXHQgICAgICBpZiAodGhpcy5maXhlZCA9PT0gdHJ1ZSB8fCB0aGlzLmZpeGVkID09PSAnbGVmdCcpIHtcblx0ICAgICAgICByZXR1cm4gaW5kZXggPj0gdGhpcy5sZWZ0Rml4ZWRDb3VudDtcblx0ICAgICAgfSBlbHNlIGlmICh0aGlzLmZpeGVkID09PSAncmlnaHQnKSB7XG5cdCAgICAgICAgcmV0dXJuIGluZGV4IDwgdGhpcy5jb2x1bW5zQ291bnQgLSB0aGlzLnJpZ2h0Rml4ZWRDb3VudDtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gaW5kZXggPCB0aGlzLmxlZnRGaXhlZENvdW50IHx8IGluZGV4ID49IHRoaXMuY29sdW1uc0NvdW50IC0gdGhpcy5yaWdodEZpeGVkQ291bnQ7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBnZXRSb3dTdHlsZTogZnVuY3Rpb24gZ2V0Um93U3R5bGUocm93LCBpbmRleCkge1xuXHQgICAgICB2YXIgcm93U3R5bGUgPSB0aGlzLnJvd1N0eWxlO1xuXHQgICAgICBpZiAodHlwZW9mIHJvd1N0eWxlID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgcmV0dXJuIHJvd1N0eWxlLmNhbGwobnVsbCwgcm93LCBpbmRleCk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJvd1N0eWxlO1xuXHQgICAgfSxcblx0ICAgIGdldFJvd0NsYXNzOiBmdW5jdGlvbiBnZXRSb3dDbGFzcyhyb3csIGluZGV4KSB7XG5cdCAgICAgIHZhciBjbGFzc2VzID0gWydlbC10YWJsZV9fcm93J107XG5cblx0ICAgICAgaWYgKHRoaXMuc3RyaXBlICYmIGluZGV4ICUgMiA9PT0gMSkge1xuXHQgICAgICAgIGNsYXNzZXMucHVzaCgnZWwtdGFibGVfX3Jvdy0tc3RyaXBlZCcpO1xuXHQgICAgICB9XG5cdCAgICAgIHZhciByb3dDbGFzc05hbWUgPSB0aGlzLnJvd0NsYXNzTmFtZTtcblx0ICAgICAgaWYgKHR5cGVvZiByb3dDbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgY2xhc3Nlcy5wdXNoKHJvd0NsYXNzTmFtZSk7XG5cdCAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJvd0NsYXNzTmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgIGNsYXNzZXMucHVzaChyb3dDbGFzc05hbWUuY2FsbChudWxsLCByb3csIGluZGV4KSB8fCAnJyk7XG5cdCAgICAgIH1cblxuXHQgICAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQ2VsbE1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZUNlbGxNb3VzZUVudGVyKGV2ZW50LCByb3cpIHtcblx0ICAgICAgdmFyIHRhYmxlID0gdGhpcy50YWJsZTtcblx0ICAgICAgdmFyIGNlbGwgPSAoMCwgX3V0aWwuZ2V0Q2VsbCkoZXZlbnQpO1xuXG5cdCAgICAgIGlmIChjZWxsKSB7XG5cdCAgICAgICAgdmFyIGNvbHVtbiA9ICgwLCBfdXRpbC5nZXRDb2x1bW5CeUNlbGwpKHRhYmxlLCBjZWxsKTtcblx0ICAgICAgICB2YXIgaG92ZXJTdGF0ZSA9IHRhYmxlLmhvdmVyU3RhdGUgPSB7IGNlbGw6IGNlbGwsIGNvbHVtbjogY29sdW1uLCByb3c6IHJvdyB9O1xuXHQgICAgICAgIHRhYmxlLiRlbWl0KCdjZWxsLW1vdXNlLWVudGVyJywgaG92ZXJTdGF0ZS5yb3csIGhvdmVyU3RhdGUuY29sdW1uLCBob3ZlclN0YXRlLmNlbGwsIGV2ZW50KTtcblx0ICAgICAgfVxuXG5cdCAgICAgIC8vIOWIpOaWreaYr+WQpnRleHQtb3ZlcmZsb3csIOWmguaenOaYr+WwseaYvuekunRvb2x0aXBcblx0ICAgICAgdmFyIGNlbGxDaGlsZCA9IGV2ZW50LnRhcmdldC5xdWVyeVNlbGVjdG9yKCcuY2VsbCcpO1xuXG5cdCAgICAgIGlmICgoMCwgX2RvbS5oYXNDbGFzcykoY2VsbENoaWxkLCAnZWwtdG9vbHRpcCcpICYmIGNlbGxDaGlsZC5zY3JvbGxXaWR0aCA+IGNlbGxDaGlsZC5vZmZzZXRXaWR0aCkge1xuXHQgICAgICAgIHZhciB0b29sdGlwID0gdGhpcy4kcmVmcy50b29sdGlwO1xuXG5cdCAgICAgICAgdGhpcy50b29sdGlwQ29udGVudCA9IGNlbGwuaW5uZXJUZXh0O1xuXHQgICAgICAgIHRvb2x0aXAucmVmZXJlbmNlRWxtID0gY2VsbDtcblx0ICAgICAgICB0b29sdGlwLiRyZWZzLnBvcHBlciAmJiAodG9vbHRpcC4kcmVmcy5wb3BwZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJyk7XG5cdCAgICAgICAgdG9vbHRpcC5kb0Rlc3Ryb3koKTtcblx0ICAgICAgICB0b29sdGlwLnNldEV4cGVjdGVkU3RhdGUodHJ1ZSk7XG5cdCAgICAgICAgdGhpcy5hY3RpdmF0ZVRvb2x0aXAodG9vbHRpcCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDZWxsTW91c2VMZWF2ZTogZnVuY3Rpb24gaGFuZGxlQ2VsbE1vdXNlTGVhdmUoZXZlbnQpIHtcblx0ICAgICAgdmFyIHRvb2x0aXAgPSB0aGlzLiRyZWZzLnRvb2x0aXA7XG5cdCAgICAgIGlmICh0b29sdGlwKSB7XG5cdCAgICAgICAgdG9vbHRpcC5zZXRFeHBlY3RlZFN0YXRlKGZhbHNlKTtcblx0ICAgICAgICB0b29sdGlwLmhhbmRsZUNsb3NlUG9wcGVyKCk7XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIGNlbGwgPSAoMCwgX3V0aWwuZ2V0Q2VsbCkoZXZlbnQpO1xuXHQgICAgICBpZiAoIWNlbGwpIHJldHVybjtcblxuXHQgICAgICB2YXIgb2xkSG92ZXJTdGF0ZSA9IHRoaXMudGFibGUuaG92ZXJTdGF0ZTtcblx0ICAgICAgdGhpcy50YWJsZS4kZW1pdCgnY2VsbC1tb3VzZS1sZWF2ZScsIG9sZEhvdmVyU3RhdGUucm93LCBvbGRIb3ZlclN0YXRlLmNvbHVtbiwgb2xkSG92ZXJTdGF0ZS5jZWxsLCBldmVudCk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlTW91c2VFbnRlcjogZnVuY3Rpb24gaGFuZGxlTW91c2VFbnRlcihpbmRleCkge1xuXHQgICAgICB0aGlzLnN0b3JlLmNvbW1pdCgnc2V0SG92ZXJSb3cnLCBpbmRleCk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlTW91c2VMZWF2ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpIHtcblx0ICAgICAgdGhpcy5zdG9yZS5jb21taXQoJ3NldEhvdmVyUm93JywgbnVsbCk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQ29udGV4dE1lbnU6IGZ1bmN0aW9uIGhhbmRsZUNvbnRleHRNZW51KGV2ZW50LCByb3cpIHtcblx0ICAgICAgdGhpcy5oYW5kbGVFdmVudChldmVudCwgcm93LCAnY29udGV4dG1lbnUnKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVEb3VibGVDbGljazogZnVuY3Rpb24gaGFuZGxlRG91YmxlQ2xpY2soZXZlbnQsIHJvdykge1xuXHQgICAgICB0aGlzLmhhbmRsZUV2ZW50KGV2ZW50LCByb3csICdkYmxjbGljaycpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCwgcm93KSB7XG5cdCAgICAgIHRoaXMuc3RvcmUuY29tbWl0KCdzZXRDdXJyZW50Um93Jywgcm93KTtcblx0ICAgICAgdGhpcy5oYW5kbGVFdmVudChldmVudCwgcm93LCAnY2xpY2snKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVFdmVudDogZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQsIHJvdywgbmFtZSkge1xuXHQgICAgICB2YXIgdGFibGUgPSB0aGlzLnRhYmxlO1xuXHQgICAgICB2YXIgY2VsbCA9ICgwLCBfdXRpbC5nZXRDZWxsKShldmVudCk7XG5cdCAgICAgIHZhciBjb2x1bW4gPSB2b2lkIDA7XG5cdCAgICAgIGlmIChjZWxsKSB7XG5cdCAgICAgICAgY29sdW1uID0gKDAsIF91dGlsLmdldENvbHVtbkJ5Q2VsbCkodGFibGUsIGNlbGwpO1xuXHQgICAgICAgIGlmIChjb2x1bW4pIHtcblx0ICAgICAgICAgIHRhYmxlLiRlbWl0KCdjZWxsLScgKyBuYW1lLCByb3csIGNvbHVtbiwgY2VsbCwgZXZlbnQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICB0YWJsZS4kZW1pdCgncm93LScgKyBuYW1lLCByb3csIGV2ZW50LCBjb2x1bW4pO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUV4cGFuZENsaWNrOiBmdW5jdGlvbiBoYW5kbGVFeHBhbmRDbGljayhyb3cpIHtcblx0ICAgICAgdGhpcy5zdG9yZS5jb21taXQoJ3RvZ2dsZVJvd0V4cGFuZGVkJywgcm93KTtcblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxMzggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3Rvb2x0aXBcIik7XG5cbi8qKiovIH0sXG4vKiAxMzkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfZG9tID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG5cblx0dmFyIF9jaGVja2JveCA9IF9fd2VicGFja19yZXF1aXJlX18oMTMwKTtcblxuXHR2YXIgX2NoZWNrYm94MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NoZWNrYm94KTtcblxuXHR2YXIgX3RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA5KTtcblxuXHR2YXIgX3RhZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90YWcpO1xuXG5cdHZhciBfdnVlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xuXG5cdHZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZSk7XG5cblx0dmFyIF9maWx0ZXJQYW5lbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKTtcblxuXHR2YXIgX2ZpbHRlclBhbmVsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ZpbHRlclBhbmVsKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdHZhciBnZXRBbGxDb2x1bW5zID0gZnVuY3Rpb24gZ2V0QWxsQ29sdW1ucyhjb2x1bW5zKSB7XG5cdCAgdmFyIHJlc3VsdCA9IFtdO1xuXHQgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdCAgICBpZiAoY29sdW1uLmNoaWxkcmVuKSB7XG5cdCAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG5cdCAgICAgIHJlc3VsdC5wdXNoLmFwcGx5KHJlc3VsdCwgZ2V0QWxsQ29sdW1ucyhjb2x1bW4uY2hpbGRyZW4pKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG5cdCAgICB9XG5cdCAgfSk7XG5cdCAgcmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHR2YXIgY29udmVydFRvUm93cyA9IGZ1bmN0aW9uIGNvbnZlcnRUb1Jvd3Mob3JpZ2luQ29sdW1ucykge1xuXHQgIHZhciBtYXhMZXZlbCA9IDE7XG5cdCAgdmFyIHRyYXZlcnNlID0gZnVuY3Rpb24gdHJhdmVyc2UoY29sdW1uLCBwYXJlbnQpIHtcblx0ICAgIGlmIChwYXJlbnQpIHtcblx0ICAgICAgY29sdW1uLmxldmVsID0gcGFyZW50LmxldmVsICsgMTtcblx0ICAgICAgaWYgKG1heExldmVsIDwgY29sdW1uLmxldmVsKSB7XG5cdCAgICAgICAgbWF4TGV2ZWwgPSBjb2x1bW4ubGV2ZWw7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIGlmIChjb2x1bW4uY2hpbGRyZW4pIHtcblx0ICAgICAgdmFyIGNvbFNwYW4gPSAwO1xuXHQgICAgICBjb2x1bW4uY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoc3ViQ29sdW1uKSB7XG5cdCAgICAgICAgdHJhdmVyc2Uoc3ViQ29sdW1uLCBjb2x1bW4pO1xuXHQgICAgICAgIGNvbFNwYW4gKz0gc3ViQ29sdW1uLmNvbFNwYW47XG5cdCAgICAgIH0pO1xuXHQgICAgICBjb2x1bW4uY29sU3BhbiA9IGNvbFNwYW47XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBjb2x1bW4uY29sU3BhbiA9IDE7XG5cdCAgICB9XG5cdCAgfTtcblxuXHQgIG9yaWdpbkNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdCAgICBjb2x1bW4ubGV2ZWwgPSAxO1xuXHQgICAgdHJhdmVyc2UoY29sdW1uKTtcblx0ICB9KTtcblxuXHQgIHZhciByb3dzID0gW107XG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXhMZXZlbDsgaSsrKSB7XG5cdCAgICByb3dzLnB1c2goW10pO1xuXHQgIH1cblxuXHQgIHZhciBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhvcmlnaW5Db2x1bW5zKTtcblxuXHQgIGFsbENvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG5cdCAgICBpZiAoIWNvbHVtbi5jaGlsZHJlbikge1xuXHQgICAgICBjb2x1bW4ucm93U3BhbiA9IG1heExldmVsIC0gY29sdW1uLmxldmVsICsgMTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGNvbHVtbi5yb3dTcGFuID0gMTtcblx0ICAgIH1cblx0ICAgIHJvd3NbY29sdW1uLmxldmVsIC0gMV0ucHVzaChjb2x1bW4pO1xuXHQgIH0pO1xuXG5cdCAgcmV0dXJuIHJvd3M7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbFRhYmxlSGVhZGVyJyxcblxuXHQgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcblx0ICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgIHZhciBvcmlnaW5Db2x1bW5zID0gdGhpcy5zdG9yZS5zdGF0ZXMub3JpZ2luQ29sdW1ucztcblx0ICAgIHZhciBjb2x1bW5Sb3dzID0gY29udmVydFRvUm93cyhvcmlnaW5Db2x1bW5zLCB0aGlzLmNvbHVtbnMpO1xuXG5cdCAgICByZXR1cm4gaChcblx0ICAgICAgJ3RhYmxlJyxcblx0ICAgICAge1xuXHQgICAgICAgICdjbGFzcyc6ICdlbC10YWJsZV9faGVhZGVyJyxcblx0ICAgICAgICBhdHRyczogeyBjZWxsc3BhY2luZzogJzAnLFxuXHQgICAgICAgICAgY2VsbHBhZGRpbmc6ICcwJyxcblx0ICAgICAgICAgIGJvcmRlcjogJzAnIH1cblx0ICAgICAgfSxcblx0ICAgICAgW2goXG5cdCAgICAgICAgJ2NvbGdyb3VwJyxcblx0ICAgICAgICBudWxsLFxuXHQgICAgICAgIFt0aGlzLl9sKHRoaXMuY29sdW1ucywgZnVuY3Rpb24gKGNvbHVtbikge1xuXHQgICAgICAgICAgcmV0dXJuIGgoXG5cdCAgICAgICAgICAgICdjb2wnLFxuXHQgICAgICAgICAgICB7XG5cdCAgICAgICAgICAgICAgYXR0cnM6IHtcblx0ICAgICAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5pZCxcblx0ICAgICAgICAgICAgICAgIHdpZHRoOiBjb2x1bW4ucmVhbFdpZHRoIHx8IGNvbHVtbi53aWR0aFxuXHQgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgW11cblx0ICAgICAgICAgICk7XG5cdCAgICAgICAgfSksICF0aGlzLmZpeGVkICYmIHRoaXMubGF5b3V0Lmd1dHRlcldpZHRoID8gaChcblx0ICAgICAgICAgICdjb2wnLFxuXHQgICAgICAgICAge1xuXHQgICAgICAgICAgICBhdHRyczogeyBuYW1lOiAnZ3V0dGVyJywgd2lkdGg6IHRoaXMubGF5b3V0LnNjcm9sbFkgPyB0aGlzLmxheW91dC5ndXR0ZXJXaWR0aCA6ICcnIH1cblx0ICAgICAgICAgIH0sXG5cdCAgICAgICAgICBbXVxuXHQgICAgICAgICkgOiAnJ11cblx0ICAgICAgKSwgaChcblx0ICAgICAgICAndGhlYWQnLFxuXHQgICAgICAgIG51bGwsXG5cdCAgICAgICAgW3RoaXMuX2woY29sdW1uUm93cywgZnVuY3Rpb24gKGNvbHVtbnMsIHJvd0luZGV4KSB7XG5cdCAgICAgICAgICByZXR1cm4gaChcblx0ICAgICAgICAgICAgJ3RyJyxcblx0ICAgICAgICAgICAgbnVsbCxcblx0ICAgICAgICAgICAgW190aGlzLl9sKGNvbHVtbnMsIGZ1bmN0aW9uIChjb2x1bW4sIGNlbGxJbmRleCkge1xuXHQgICAgICAgICAgICAgIHJldHVybiBoKFxuXHQgICAgICAgICAgICAgICAgJ3RoJyxcblx0ICAgICAgICAgICAgICAgIHtcblx0ICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcblx0ICAgICAgICAgICAgICAgICAgICBjb2xzcGFuOiBjb2x1bW4uY29sU3Bhbixcblx0ICAgICAgICAgICAgICAgICAgICByb3dzcGFuOiBjb2x1bW4ucm93U3BhblxuXHQgICAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgICBvbjoge1xuXHQgICAgICAgICAgICAgICAgICAgICdtb3VzZW1vdmUnOiBmdW5jdGlvbiBtb3VzZW1vdmUoJGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTW91c2VNb3ZlKCRldmVudCwgY29sdW1uKTtcblx0ICAgICAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgICAgICdtb3VzZW91dCc6IF90aGlzLmhhbmRsZU1vdXNlT3V0LFxuXHQgICAgICAgICAgICAgICAgICAgICdtb3VzZWRvd24nOiBmdW5jdGlvbiBtb3VzZWRvd24oJGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTW91c2VEb3duKCRldmVudCwgY29sdW1uKTtcblx0ICAgICAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgICAgICdjbGljayc6IGZ1bmN0aW9uIGNsaWNrKCRldmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUhlYWRlckNsaWNrKCRldmVudCwgY29sdW1uKTtcblx0ICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgICAgICAgJ2NsYXNzJzogW2NvbHVtbi5pZCwgY29sdW1uLm9yZGVyLCBjb2x1bW4uaGVhZGVyQWxpZ24sIGNvbHVtbi5jbGFzc05hbWUgfHwgJycsIHJvd0luZGV4ID09PSAwICYmIF90aGlzLmlzQ2VsbEhpZGRlbihjZWxsSW5kZXgsIGNvbHVtbnMpID8gJ2lzLWhpZGRlbicgOiAnJywgIWNvbHVtbi5jaGlsZHJlbiA/ICdpcy1sZWFmJyA6ICcnLCBjb2x1bW4ubGFiZWxDbGFzc05hbWUsIGNvbHVtbi5zb3J0YWJsZSA/ICdpcy1zb3J0YWJsZScgOiAnJ10gfSxcblx0ICAgICAgICAgICAgICAgIFtoKFxuXHQgICAgICAgICAgICAgICAgICAnZGl2Jyxcblx0ICAgICAgICAgICAgICAgICAgeyAnY2xhc3MnOiBbJ2NlbGwnLCBjb2x1bW4uZmlsdGVyZWRWYWx1ZSAmJiBjb2x1bW4uZmlsdGVyZWRWYWx1ZS5sZW5ndGggPiAwID8gJ2hpZ2hsaWdodCcgOiAnJywgY29sdW1uLmxhYmVsQ2xhc3NOYW1lXSB9LFxuXHQgICAgICAgICAgICAgICAgICBbY29sdW1uLnJlbmRlckhlYWRlciA/IGNvbHVtbi5yZW5kZXJIZWFkZXIuY2FsbChfdGhpcy5fcmVuZGVyUHJveHksIGgsIHsgY29sdW1uOiBjb2x1bW4sICRpbmRleDogY2VsbEluZGV4LCBzdG9yZTogX3RoaXMuc3RvcmUsIF9zZWxmOiBfdGhpcy4kcGFyZW50LiR2bm9kZS5jb250ZXh0IH0pIDogY29sdW1uLmxhYmVsLCBjb2x1bW4uc29ydGFibGUgPyBoKFxuXHQgICAgICAgICAgICAgICAgICAgICdzcGFuJyxcblx0ICAgICAgICAgICAgICAgICAgICB7ICdjbGFzcyc6ICdjYXJldC13cmFwcGVyJywgb246IHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgJ2NsaWNrJzogZnVuY3Rpb24gY2xpY2soJGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZVNvcnRDbGljaygkZXZlbnQsIGNvbHVtbik7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICAgICAgIFtoKFxuXHQgICAgICAgICAgICAgICAgICAgICAgJ2knLFxuXHQgICAgICAgICAgICAgICAgICAgICAgeyAnY2xhc3MnOiAnc29ydC1jYXJldCBhc2NlbmRpbmcnLCBvbjoge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICdjbGljayc6IGZ1bmN0aW9uIGNsaWNrKCRldmVudCkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZVNvcnRDbGljaygkZXZlbnQsIGNvbHVtbiwgJ2FzY2VuZGluZycpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgICAgICAgIFtdXG5cdCAgICAgICAgICAgICAgICAgICAgKSwgaChcblx0ICAgICAgICAgICAgICAgICAgICAgICdpJyxcblx0ICAgICAgICAgICAgICAgICAgICAgIHsgJ2NsYXNzJzogJ3NvcnQtY2FyZXQgZGVzY2VuZGluZycsIG9uOiB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsaWNrJzogZnVuY3Rpb24gY2xpY2soJGV2ZW50KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlU29ydENsaWNrKCRldmVudCwgY29sdW1uLCAnZGVzY2VuZGluZycpO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgICAgICAgIFtdXG5cdCAgICAgICAgICAgICAgICAgICAgKV1cblx0ICAgICAgICAgICAgICAgICAgKSA6ICcnLCBjb2x1bW4uZmlsdGVyYWJsZSA/IGgoXG5cdCAgICAgICAgICAgICAgICAgICAgJ3NwYW4nLFxuXHQgICAgICAgICAgICAgICAgICAgIHsgJ2NsYXNzJzogJ2VsLXRhYmxlX19jb2x1bW4tZmlsdGVyLXRyaWdnZXInLCBvbjoge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICAnY2xpY2snOiBmdW5jdGlvbiBjbGljaygkZXZlbnQpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlRmlsdGVyQ2xpY2soJGV2ZW50LCBjb2x1bW4pO1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgICAgICAgICBbaChcblx0ICAgICAgICAgICAgICAgICAgICAgICdpJyxcblx0ICAgICAgICAgICAgICAgICAgICAgIHsgJ2NsYXNzJzogWydlbC1pY29uLWFycm93LWRvd24nLCBjb2x1bW4uZmlsdGVyT3BlbmVkID8gJ2VsLWljb24tYXJyb3ctdXAnIDogJyddIH0sXG5cdCAgICAgICAgICAgICAgICAgICAgICBbXVxuXHQgICAgICAgICAgICAgICAgICAgICldXG5cdCAgICAgICAgICAgICAgICAgICkgOiAnJ11cblx0ICAgICAgICAgICAgICAgICldXG5cdCAgICAgICAgICAgICAgKTtcblx0ICAgICAgICAgICAgfSksICFfdGhpcy5maXhlZCAmJiBfdGhpcy5sYXlvdXQuZ3V0dGVyV2lkdGggPyBoKFxuXHQgICAgICAgICAgICAgICd0aCcsXG5cdCAgICAgICAgICAgICAgeyAnY2xhc3MnOiAnZ3V0dGVyJywgc3R5bGU6IHsgd2lkdGg6IF90aGlzLmxheW91dC5zY3JvbGxZID8gX3RoaXMubGF5b3V0Lmd1dHRlcldpZHRoICsgJ3B4JyA6ICcwJyB9IH0sXG5cdCAgICAgICAgICAgICAgW11cblx0ICAgICAgICAgICAgKSA6ICcnXVxuXHQgICAgICAgICAgKTtcblx0ICAgICAgICB9KV1cblx0ICAgICAgKV1cblx0ICAgICk7XG5cdCAgfSxcblxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIGZpeGVkOiBTdHJpbmcsXG5cdCAgICBzdG9yZToge1xuXHQgICAgICByZXF1aXJlZDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIGxheW91dDoge1xuXHQgICAgICByZXF1aXJlZDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIGJvcmRlcjogQm9vbGVhbixcblx0ICAgIGRlZmF1bHRTb3J0OiB7XG5cdCAgICAgIHR5cGU6IE9iamVjdCxcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgIHByb3A6ICcnLFxuXHQgICAgICAgICAgb3JkZXI6ICcnXG5cdCAgICAgICAgfTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjb21wb25lbnRzOiB7XG5cdCAgICBFbENoZWNrYm94OiBfY2hlY2tib3gyLmRlZmF1bHQsXG5cdCAgICBFbFRhZzogX3RhZzIuZGVmYXVsdFxuXHQgIH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgaXNBbGxTZWxlY3RlZDogZnVuY3Rpb24gaXNBbGxTZWxlY3RlZCgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuc3RhdGVzLmlzQWxsU2VsZWN0ZWQ7XG5cdCAgICB9LFxuXHQgICAgY29sdW1uc0NvdW50OiBmdW5jdGlvbiBjb2x1bW5zQ291bnQoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlcy5jb2x1bW5zLmxlbmd0aDtcblx0ICAgIH0sXG5cdCAgICBsZWZ0Rml4ZWRDb3VudDogZnVuY3Rpb24gbGVmdEZpeGVkQ291bnQoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlcy5maXhlZENvbHVtbnMubGVuZ3RoO1xuXHQgICAgfSxcblx0ICAgIHJpZ2h0Rml4ZWRDb3VudDogZnVuY3Rpb24gcmlnaHRGaXhlZENvdW50KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZXMucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoO1xuXHQgICAgfSxcblx0ICAgIGNvbHVtbnM6IGZ1bmN0aW9uIGNvbHVtbnMoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlcy5jb2x1bW5zO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgdGhpcy5maWx0ZXJQYW5lbHMgPSB7fTtcblx0ICB9LFxuXHQgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdCAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuXHQgICAgaWYgKHRoaXMuZGVmYXVsdFNvcnQucHJvcCkge1xuXHQgICAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBzdGF0ZXMgPSBfdGhpczIuc3RvcmUuc3RhdGVzO1xuXHQgICAgICAgIHN0YXRlcy5zb3J0UHJvcCA9IF90aGlzMi5kZWZhdWx0U29ydC5wcm9wO1xuXHQgICAgICAgIHN0YXRlcy5zb3J0T3JkZXIgPSBfdGhpczIuZGVmYXVsdFNvcnQub3JkZXIgfHwgJ2FzY2VuZGluZyc7XG5cdCAgICAgICAgX3RoaXMyLiRuZXh0VGljayhmdW5jdGlvbiAoXykge1xuXHQgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IF90aGlzMi5jb2x1bW5zLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBjb2x1bW4gPSBfdGhpczIuY29sdW1uc1tpXTtcblx0ICAgICAgICAgICAgaWYgKGNvbHVtbi5wcm9wZXJ0eSA9PT0gc3RhdGVzLnNvcnRQcm9wKSB7XG5cdCAgICAgICAgICAgICAgY29sdW1uLm9yZGVyID0gc3RhdGVzLnNvcnRPcmRlcjtcblx0ICAgICAgICAgICAgICBzdGF0ZXMuc29ydGluZ0NvbHVtbiA9IGNvbHVtbjtcblx0ICAgICAgICAgICAgICBicmVhaztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICBpZiAoc3RhdGVzLnNvcnRpbmdDb2x1bW4pIHtcblx0ICAgICAgICAgICAgX3RoaXMyLnN0b3JlLmNvbW1pdCgnY2hhbmdlU29ydENvbmRpdGlvbicpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9KSgpO1xuXHQgICAgfVxuXHQgIH0sXG5cdCAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcblx0ICAgIHZhciBwYW5lbHMgPSB0aGlzLmZpbHRlclBhbmVscztcblx0ICAgIGZvciAodmFyIHByb3AgaW4gcGFuZWxzKSB7XG5cdCAgICAgIGlmIChwYW5lbHMuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgcGFuZWxzW3Byb3BdKSB7XG5cdCAgICAgICAgcGFuZWxzW3Byb3BdLiRkZXN0cm95KHRydWUpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgaXNDZWxsSGlkZGVuOiBmdW5jdGlvbiBpc0NlbGxIaWRkZW4oaW5kZXgsIGNvbHVtbnMpIHtcblx0ICAgICAgaWYgKHRoaXMuZml4ZWQgPT09IHRydWUgfHwgdGhpcy5maXhlZCA9PT0gJ2xlZnQnKSB7XG5cdCAgICAgICAgcmV0dXJuIGluZGV4ID49IHRoaXMubGVmdEZpeGVkQ291bnQ7XG5cdCAgICAgIH0gZWxzZSBpZiAodGhpcy5maXhlZCA9PT0gJ3JpZ2h0Jykge1xuXHQgICAgICAgIHZhciBiZWZvcmUgPSAwO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kZXg7IGkrKykge1xuXHQgICAgICAgICAgYmVmb3JlICs9IGNvbHVtbnNbaV0uY29sU3Bhbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGJlZm9yZSA8IHRoaXMuY29sdW1uc0NvdW50IC0gdGhpcy5yaWdodEZpeGVkQ291bnQ7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuIGluZGV4IDwgdGhpcy5sZWZ0Rml4ZWRDb3VudCB8fCBpbmRleCA+PSB0aGlzLmNvbHVtbnNDb3VudCAtIHRoaXMucmlnaHRGaXhlZENvdW50O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdG9nZ2xlQWxsU2VsZWN0aW9uOiBmdW5jdGlvbiB0b2dnbGVBbGxTZWxlY3Rpb24oKSB7XG5cdCAgICAgIHRoaXMuc3RvcmUuY29tbWl0KCd0b2dnbGVBbGxTZWxlY3Rpb24nKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVGaWx0ZXJDbGljazogZnVuY3Rpb24gaGFuZGxlRmlsdGVyQ2xpY2soZXZlbnQsIGNvbHVtbikge1xuXHQgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0ICAgICAgdmFyIGNlbGwgPSB0YXJnZXQucGFyZW50Tm9kZTtcblx0ICAgICAgdmFyIHRhYmxlID0gdGhpcy4kcGFyZW50O1xuXG5cdCAgICAgIHZhciBmaWx0ZXJQYW5lbCA9IHRoaXMuZmlsdGVyUGFuZWxzW2NvbHVtbi5pZF07XG5cblx0ICAgICAgaWYgKGZpbHRlclBhbmVsICYmIGNvbHVtbi5maWx0ZXJPcGVuZWQpIHtcblx0ICAgICAgICBmaWx0ZXJQYW5lbC5zaG93UG9wcGVyID0gZmFsc2U7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKCFmaWx0ZXJQYW5lbCkge1xuXHQgICAgICAgIGZpbHRlclBhbmVsID0gbmV3IF92dWUyLmRlZmF1bHQoX2ZpbHRlclBhbmVsMi5kZWZhdWx0KTtcblx0ICAgICAgICB0aGlzLmZpbHRlclBhbmVsc1tjb2x1bW4uaWRdID0gZmlsdGVyUGFuZWw7XG5cdCAgICAgICAgaWYgKGNvbHVtbi5maWx0ZXJQbGFjZW1lbnQpIHtcblx0ICAgICAgICAgIGZpbHRlclBhbmVsLnBsYWNlbWVudCA9IGNvbHVtbi5maWx0ZXJQbGFjZW1lbnQ7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZpbHRlclBhbmVsLnRhYmxlID0gdGFibGU7XG5cdCAgICAgICAgZmlsdGVyUGFuZWwuY2VsbCA9IGNlbGw7XG5cdCAgICAgICAgZmlsdGVyUGFuZWwuY29sdW1uID0gY29sdW1uO1xuXHQgICAgICAgICF0aGlzLiRpc1NlcnZlciAmJiBmaWx0ZXJQYW5lbC4kbW91bnQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuXHQgICAgICB9XG5cblx0ICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZmlsdGVyUGFuZWwuc2hvd1BvcHBlciA9IHRydWU7XG5cdCAgICAgIH0sIDE2KTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVIZWFkZXJDbGljazogZnVuY3Rpb24gaGFuZGxlSGVhZGVyQ2xpY2soZXZlbnQsIGNvbHVtbikge1xuXHQgICAgICBpZiAoIWNvbHVtbi5maWx0ZXJzICYmIGNvbHVtbi5zb3J0YWJsZSkge1xuXHQgICAgICAgIHRoaXMuaGFuZGxlU29ydENsaWNrKGV2ZW50LCBjb2x1bW4pO1xuXHQgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5maWx0ZXJzICYmICFjb2x1bW4uc29ydGFibGUpIHtcblx0ICAgICAgICB0aGlzLmhhbmRsZUZpbHRlckNsaWNrKGV2ZW50LCBjb2x1bW4pO1xuXHQgICAgICB9XG5cblx0ICAgICAgdGhpcy4kcGFyZW50LiRlbWl0KCdoZWFkZXItY2xpY2snLCBjb2x1bW4sIGV2ZW50KTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVNb3VzZURvd246IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldmVudCwgY29sdW1uKSB7XG5cdCAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG5cdCAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuXHQgICAgICBpZiAoY29sdW1uLmNoaWxkcmVuICYmIGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPiAwKSByZXR1cm47XG5cdCAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuXHQgICAgICBpZiAodGhpcy5kcmFnZ2luZ0NvbHVtbiAmJiB0aGlzLmJvcmRlcikge1xuXHQgICAgICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICBfdGhpczMuZHJhZ2dpbmcgPSB0cnVlO1xuXG5cdCAgICAgICAgICBfdGhpczMuJHBhcmVudC5yZXNpemVQcm94eVZpc2libGUgPSB0cnVlO1xuXG5cdCAgICAgICAgICB2YXIgdGFibGUgPSBfdGhpczMuJHBhcmVudDtcblx0ICAgICAgICAgIHZhciB0YWJsZUVsID0gdGFibGUuJGVsO1xuXHQgICAgICAgICAgdmFyIHRhYmxlTGVmdCA9IHRhYmxlRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0ICAgICAgICAgIHZhciBjb2x1bW5FbCA9IF90aGlzMy4kZWwucXVlcnlTZWxlY3RvcigndGguJyArIGNvbHVtbi5pZCk7XG5cdCAgICAgICAgICB2YXIgY29sdW1uUmVjdCA9IGNvbHVtbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHQgICAgICAgICAgdmFyIG1pbkxlZnQgPSBjb2x1bW5SZWN0LmxlZnQgLSB0YWJsZUxlZnQgKyAzMDtcblxuXHQgICAgICAgICAgKDAsIF9kb20uYWRkQ2xhc3MpKGNvbHVtbkVsLCAnbm9jbGljaycpO1xuXG5cdCAgICAgICAgICBfdGhpczMuZHJhZ1N0YXRlID0ge1xuXHQgICAgICAgICAgICBzdGFydE1vdXNlTGVmdDogZXZlbnQuY2xpZW50WCxcblx0ICAgICAgICAgICAgc3RhcnRMZWZ0OiBjb2x1bW5SZWN0LnJpZ2h0IC0gdGFibGVMZWZ0LFxuXHQgICAgICAgICAgICBzdGFydENvbHVtbkxlZnQ6IGNvbHVtblJlY3QubGVmdCAtIHRhYmxlTGVmdCxcblx0ICAgICAgICAgICAgdGFibGVMZWZ0OiB0YWJsZUxlZnRcblx0ICAgICAgICAgIH07XG5cblx0ICAgICAgICAgIHZhciByZXNpemVQcm94eSA9IHRhYmxlLiRyZWZzLnJlc2l6ZVByb3h5O1xuXHQgICAgICAgICAgcmVzaXplUHJveHkuc3R5bGUubGVmdCA9IF90aGlzMy5kcmFnU3RhdGUuc3RhcnRMZWZ0ICsgJ3B4JztcblxuXHQgICAgICAgICAgZG9jdW1lbnQub25zZWxlY3RzdGFydCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICAgIGRvY3VtZW50Lm9uZHJhZ3N0YXJ0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgICB9O1xuXG5cdCAgICAgICAgICB2YXIgaGFuZGxlTW91c2VNb3ZlID0gZnVuY3Rpb24gaGFuZGxlTW91c2VNb3ZlKGV2ZW50KSB7XG5cdCAgICAgICAgICAgIHZhciBkZWx0YUxlZnQgPSBldmVudC5jbGllbnRYIC0gX3RoaXMzLmRyYWdTdGF0ZS5zdGFydE1vdXNlTGVmdDtcblx0ICAgICAgICAgICAgdmFyIHByb3h5TGVmdCA9IF90aGlzMy5kcmFnU3RhdGUuc3RhcnRMZWZ0ICsgZGVsdGFMZWZ0O1xuXG5cdCAgICAgICAgICAgIHJlc2l6ZVByb3h5LnN0eWxlLmxlZnQgPSBNYXRoLm1heChtaW5MZWZ0LCBwcm94eUxlZnQpICsgJ3B4Jztcblx0ICAgICAgICAgIH07XG5cblx0ICAgICAgICAgIHZhciBoYW5kbGVNb3VzZVVwID0gZnVuY3Rpb24gaGFuZGxlTW91c2VVcCgpIHtcblx0ICAgICAgICAgICAgaWYgKF90aGlzMy5kcmFnZ2luZykge1xuXHQgICAgICAgICAgICAgIHZhciBfZHJhZ1N0YXRlID0gX3RoaXMzLmRyYWdTdGF0ZSxcblx0ICAgICAgICAgICAgICAgICAgc3RhcnRDb2x1bW5MZWZ0ID0gX2RyYWdTdGF0ZS5zdGFydENvbHVtbkxlZnQsXG5cdCAgICAgICAgICAgICAgICAgIHN0YXJ0TGVmdCA9IF9kcmFnU3RhdGUuc3RhcnRMZWZ0O1xuXG5cdCAgICAgICAgICAgICAgdmFyIGZpbmFsTGVmdCA9IHBhcnNlSW50KHJlc2l6ZVByb3h5LnN0eWxlLmxlZnQsIDEwKTtcblx0ICAgICAgICAgICAgICB2YXIgY29sdW1uV2lkdGggPSBmaW5hbExlZnQgLSBzdGFydENvbHVtbkxlZnQ7XG5cdCAgICAgICAgICAgICAgY29sdW1uLndpZHRoID0gY29sdW1uLnJlYWxXaWR0aCA9IGNvbHVtbldpZHRoO1xuXHQgICAgICAgICAgICAgIHRhYmxlLiRlbWl0KCdoZWFkZXItZHJhZ2VuZCcsIGNvbHVtbi53aWR0aCwgc3RhcnRMZWZ0IC0gc3RhcnRDb2x1bW5MZWZ0LCBjb2x1bW4sIGV2ZW50KTtcblxuXHQgICAgICAgICAgICAgIF90aGlzMy5zdG9yZS5zY2hlZHVsZUxheW91dCgpO1xuXG5cdCAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnJztcblx0ICAgICAgICAgICAgICBfdGhpczMuZHJhZ2dpbmcgPSBmYWxzZTtcblx0ICAgICAgICAgICAgICBfdGhpczMuZHJhZ2dpbmdDb2x1bW4gPSBudWxsO1xuXHQgICAgICAgICAgICAgIF90aGlzMy5kcmFnU3RhdGUgPSB7fTtcblxuXHQgICAgICAgICAgICAgIHRhYmxlLnJlc2l6ZVByb3h5VmlzaWJsZSA9IGZhbHNlO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgaGFuZGxlTW91c2VNb3ZlKTtcblx0ICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xuXHQgICAgICAgICAgICBkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ID0gbnVsbDtcblx0ICAgICAgICAgICAgZG9jdW1lbnQub25kcmFnc3RhcnQgPSBudWxsO1xuXG5cdCAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICgwLCBfZG9tLnJlbW92ZUNsYXNzKShjb2x1bW5FbCwgJ25vY2xpY2snKTtcblx0ICAgICAgICAgICAgfSwgMCk7XG5cdCAgICAgICAgICB9O1xuXG5cdCAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xuXHQgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIGhhbmRsZU1vdXNlVXApO1xuXHQgICAgICAgIH0pKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVNb3VzZU1vdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTW92ZShldmVudCwgY29sdW1uKSB7XG5cdCAgICAgIGlmIChjb2x1bW4uY2hpbGRyZW4gJiYgY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA+IDApIHJldHVybjtcblx0ICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0ICAgICAgd2hpbGUgKHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZSAhPT0gJ1RIJykge1xuXHQgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKCFjb2x1bW4gfHwgIWNvbHVtbi5yZXNpemFibGUpIHJldHVybjtcblxuXHQgICAgICBpZiAoIXRoaXMuZHJhZ2dpbmcgJiYgdGhpcy5ib3JkZXIpIHtcblx0ICAgICAgICB2YXIgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHQgICAgICAgIHZhciBib2R5U3R5bGUgPSBkb2N1bWVudC5ib2R5LnN0eWxlO1xuXHQgICAgICAgIGlmIChyZWN0LndpZHRoID4gMTIgJiYgcmVjdC5yaWdodCAtIGV2ZW50LnBhZ2VYIDwgOCkge1xuXHQgICAgICAgICAgYm9keVN0eWxlLmN1cnNvciA9ICdjb2wtcmVzaXplJztcblx0ICAgICAgICAgIHRoaXMuZHJhZ2dpbmdDb2x1bW4gPSBjb2x1bW47XG5cdCAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kcmFnZ2luZykge1xuXHQgICAgICAgICAgYm9keVN0eWxlLmN1cnNvciA9ICcnO1xuXHQgICAgICAgICAgdGhpcy5kcmFnZ2luZ0NvbHVtbiA9IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlTW91c2VPdXQ6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlT3V0KCkge1xuXHQgICAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcblx0ICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnJztcblx0ICAgIH0sXG5cdCAgICB0b2dnbGVPcmRlcjogZnVuY3Rpb24gdG9nZ2xlT3JkZXIob3JkZXIpIHtcblx0ICAgICAgcmV0dXJuICFvcmRlciA/ICdhc2NlbmRpbmcnIDogb3JkZXIgPT09ICdhc2NlbmRpbmcnID8gJ2Rlc2NlbmRpbmcnIDogbnVsbDtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVTb3J0Q2xpY2s6IGZ1bmN0aW9uIGhhbmRsZVNvcnRDbGljayhldmVudCwgY29sdW1uLCBnaXZlbk9yZGVyKSB7XG5cdCAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICB2YXIgb3JkZXIgPSBnaXZlbk9yZGVyIHx8IHRoaXMudG9nZ2xlT3JkZXIoY29sdW1uLm9yZGVyKTtcblxuXHQgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHQgICAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lICE9PSAnVEgnKSB7XG5cdCAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lID09PSAnVEgnKSB7XG5cdCAgICAgICAgaWYgKCgwLCBfZG9tLmhhc0NsYXNzKSh0YXJnZXQsICdub2NsaWNrJykpIHtcblx0ICAgICAgICAgICgwLCBfZG9tLnJlbW92ZUNsYXNzKSh0YXJnZXQsICdub2NsaWNrJyk7XG5cdCAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKCFjb2x1bW4uc29ydGFibGUpIHJldHVybjtcblxuXHQgICAgICB2YXIgc3RhdGVzID0gdGhpcy5zdG9yZS5zdGF0ZXM7XG5cdCAgICAgIHZhciBzb3J0UHJvcCA9IHN0YXRlcy5zb3J0UHJvcDtcblx0ICAgICAgdmFyIHNvcnRPcmRlciA9IHZvaWQgMDtcblx0ICAgICAgdmFyIHNvcnRpbmdDb2x1bW4gPSBzdGF0ZXMuc29ydGluZ0NvbHVtbjtcblxuXHQgICAgICBpZiAoc29ydGluZ0NvbHVtbiAhPT0gY29sdW1uKSB7XG5cdCAgICAgICAgaWYgKHNvcnRpbmdDb2x1bW4pIHtcblx0ICAgICAgICAgIHNvcnRpbmdDb2x1bW4ub3JkZXIgPSBudWxsO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBzdGF0ZXMuc29ydGluZ0NvbHVtbiA9IGNvbHVtbjtcblx0ICAgICAgICBzb3J0UHJvcCA9IGNvbHVtbi5wcm9wZXJ0eTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGlmICghb3JkZXIpIHtcblx0ICAgICAgICBzb3J0T3JkZXIgPSBjb2x1bW4ub3JkZXIgPSBudWxsO1xuXHQgICAgICAgIHN0YXRlcy5zb3J0aW5nQ29sdW1uID0gbnVsbDtcblx0ICAgICAgICBzb3J0UHJvcCA9IG51bGw7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgc29ydE9yZGVyID0gY29sdW1uLm9yZGVyID0gb3JkZXI7XG5cdCAgICAgIH1cblxuXHQgICAgICBzdGF0ZXMuc29ydFByb3AgPSBzb3J0UHJvcDtcblx0ICAgICAgc3RhdGVzLnNvcnRPcmRlciA9IHNvcnRPcmRlcjtcblxuXHQgICAgICB0aGlzLnN0b3JlLmNvbW1pdCgnY2hhbmdlU29ydENvbmRpdGlvbicpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgZHJhZ2dpbmdDb2x1bW46IG51bGwsXG5cdCAgICAgIGRyYWdnaW5nOiBmYWxzZSxcblx0ICAgICAgZHJhZ1N0YXRlOiB7fVxuXHQgICAgfTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxNDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTQxKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTQ0KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMTQxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3Z1ZVBvcHBlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xuXG5cdHZhciBfdnVlUG9wcGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZVBvcHBlcik7XG5cblx0dmFyIF9wb3B1cCA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xuXG5cdHZhciBfbG9jYWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5cblx0dmFyIF9sb2NhbGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9jYWxlKTtcblxuXHR2YXIgX2NsaWNrb3V0c2lkZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xuXG5cdHZhciBfY2xpY2tvdXRzaWRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsaWNrb3V0c2lkZSk7XG5cblx0dmFyIF9kcm9wZG93biA9IF9fd2VicGFja19yZXF1aXJlX18oMTQyKTtcblxuXHR2YXIgX2Ryb3Bkb3duMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Ryb3Bkb3duKTtcblxuXHR2YXIgX2NoZWNrYm94ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzApO1xuXG5cdHZhciBfY2hlY2tib3gyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2hlY2tib3gpO1xuXG5cdHZhciBfY2hlY2tib3hHcm91cCA9IF9fd2VicGFja19yZXF1aXJlX18oMTQzKTtcblxuXHR2YXIgX2NoZWNrYm94R3JvdXAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2hlY2tib3hHcm91cCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsVGFibGVGaWx0ZXJQYW5lbCcsXG5cblx0ICBtaXhpbnM6IFtfdnVlUG9wcGVyMi5kZWZhdWx0LCBfbG9jYWxlMi5kZWZhdWx0XSxcblxuXHQgIGRpcmVjdGl2ZXM6IHtcblx0ICAgIENsaWNrb3V0c2lkZTogX2NsaWNrb3V0c2lkZTIuZGVmYXVsdFxuXHQgIH0sXG5cblx0ICBjb21wb25lbnRzOiB7XG5cdCAgICBFbENoZWNrYm94OiBfY2hlY2tib3gyLmRlZmF1bHQsXG5cdCAgICBFbENoZWNrYm94R3JvdXA6IF9jaGVja2JveEdyb3VwMi5kZWZhdWx0XG5cdCAgfSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBwbGFjZW1lbnQ6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnYm90dG9tLWVuZCdcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY3VzdG9tUmVuZGVyOiBmdW5jdGlvbiBjdXN0b21SZW5kZXIoaCkge1xuXHQgICAgcmV0dXJuIGgoXG5cdCAgICAgICdkaXYnLFxuXHQgICAgICB7ICdjbGFzcyc6ICdlbC10YWJsZS1maWx0ZXInIH0sXG5cdCAgICAgIFtoKFxuXHQgICAgICAgICdkaXYnLFxuXHQgICAgICAgIHsgJ2NsYXNzJzogJ2VsLXRhYmxlLWZpbHRlcl9fY29udGVudCcgfSxcblx0ICAgICAgICBbXVxuXHQgICAgICApLCBoKFxuXHQgICAgICAgICdkaXYnLFxuXHQgICAgICAgIHsgJ2NsYXNzJzogJ2VsLXRhYmxlLWZpbHRlcl9fYm90dG9tJyB9LFxuXHQgICAgICAgIFtoKFxuXHQgICAgICAgICAgJ2J1dHRvbicsXG5cdCAgICAgICAgICB7XG5cdCAgICAgICAgICAgIG9uOiB7XG5cdCAgICAgICAgICAgICAgJ2NsaWNrJzogdGhpcy5oYW5kbGVDb25maXJtXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0sXG5cdCAgICAgICAgICBbdGhpcy50KCdlbC50YWJsZS5jb25maXJtRmlsdGVyJyldXG5cdCAgICAgICAgKSwgaChcblx0ICAgICAgICAgICdidXR0b24nLFxuXHQgICAgICAgICAge1xuXHQgICAgICAgICAgICBvbjoge1xuXHQgICAgICAgICAgICAgICdjbGljayc6IHRoaXMuaGFuZGxlUmVzZXRcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSxcblx0ICAgICAgICAgIFt0aGlzLnQoJ2VsLnRhYmxlLnJlc2V0RmlsdGVyJyldXG5cdCAgICAgICAgKV1cblx0ICAgICAgKV1cblx0ICAgICk7XG5cdCAgfSxcblxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgaXNBY3RpdmU6IGZ1bmN0aW9uIGlzQWN0aXZlKGZpbHRlcikge1xuXHQgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlID09PSB0aGlzLmZpbHRlclZhbHVlO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZU91dHNpZGVDbGljazogZnVuY3Rpb24gaGFuZGxlT3V0c2lkZUNsaWNrKCkge1xuXHQgICAgICB0aGlzLnNob3dQb3BwZXIgPSBmYWxzZTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDb25maXJtOiBmdW5jdGlvbiBoYW5kbGVDb25maXJtKCkge1xuXHQgICAgICB0aGlzLmNvbmZpcm1GaWx0ZXIodGhpcy5maWx0ZXJlZFZhbHVlKTtcblx0ICAgICAgdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2soKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVSZXNldDogZnVuY3Rpb24gaGFuZGxlUmVzZXQoKSB7XG5cdCAgICAgIHRoaXMuZmlsdGVyZWRWYWx1ZSA9IFtdO1xuXHQgICAgICB0aGlzLmNvbmZpcm1GaWx0ZXIodGhpcy5maWx0ZXJlZFZhbHVlKTtcblx0ICAgICAgdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2soKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVTZWxlY3Q6IGZ1bmN0aW9uIGhhbmRsZVNlbGVjdChmaWx0ZXJWYWx1ZSkge1xuXHQgICAgICB0aGlzLmZpbHRlclZhbHVlID0gZmlsdGVyVmFsdWU7XG5cblx0ICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJWYWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZmlsdGVyVmFsdWUgIT09IG51bGwpIHtcblx0ICAgICAgICB0aGlzLmNvbmZpcm1GaWx0ZXIodGhpcy5maWx0ZXJlZFZhbHVlKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB0aGlzLmNvbmZpcm1GaWx0ZXIoW10pO1xuXHQgICAgICB9XG5cblx0ICAgICAgdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2soKTtcblx0ICAgIH0sXG5cdCAgICBjb25maXJtRmlsdGVyOiBmdW5jdGlvbiBjb25maXJtRmlsdGVyKGZpbHRlcmVkVmFsdWUpIHtcblx0ICAgICAgdGhpcy50YWJsZS5zdG9yZS5jb21taXQoJ2ZpbHRlckNoYW5nZScsIHtcblx0ICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuXHQgICAgICAgIHZhbHVlczogZmlsdGVyZWRWYWx1ZVxuXHQgICAgICB9KTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHRhYmxlOiBudWxsLFxuXHQgICAgICBjZWxsOiBudWxsLFxuXHQgICAgICBjb2x1bW46IG51bGxcblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIGZpbHRlcnM6IGZ1bmN0aW9uIGZpbHRlcnMoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLmNvbHVtbiAmJiB0aGlzLmNvbHVtbi5maWx0ZXJzO1xuXHQgICAgfSxcblxuXG5cdCAgICBmaWx0ZXJWYWx1ZToge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcblx0ICAgICAgICByZXR1cm4gKHRoaXMuY29sdW1uLmZpbHRlcmVkVmFsdWUgfHwgW10pWzBdO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuXHQgICAgICAgIGlmICh0aGlzLmZpbHRlcmVkVmFsdWUpIHtcblx0ICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlICE9PSBudWxsKSB7XG5cdCAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRWYWx1ZS5zcGxpY2UoMCwgMSwgdmFsdWUpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFZhbHVlLnNwbGljZSgwLCAxKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cblx0ICAgIGZpbHRlcmVkVmFsdWU6IHtcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG5cdCAgICAgICAgaWYgKHRoaXMuY29sdW1uKSB7XG5cdCAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZmlsdGVyZWRWYWx1ZSB8fCBbXTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuXHQgICAgICAgIGlmICh0aGlzLmNvbHVtbikge1xuXHQgICAgICAgICAgdGhpcy5jb2x1bW4uZmlsdGVyZWRWYWx1ZSA9IHZhbHVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblxuXHQgICAgbXVsdGlwbGU6IGZ1bmN0aW9uIG11bHRpcGxlKCkge1xuXHQgICAgICBpZiAodGhpcy5jb2x1bW4pIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZmlsdGVyTXVsdGlwbGU7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdCAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICB0aGlzLnBvcHBlckVsbSA9IHRoaXMuJGVsO1xuXHQgICAgdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLmNlbGw7XG5cdCAgICB0aGlzLnRhYmxlLmJvZHlXcmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgX3RoaXMudXBkYXRlUG9wcGVyKCk7XG5cdCAgICB9KTtcblxuXHQgICAgdGhpcy4kd2F0Y2goJ3Nob3dQb3BwZXInLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgaWYgKF90aGlzLmNvbHVtbikgX3RoaXMuY29sdW1uLmZpbHRlck9wZW5lZCA9IHZhbHVlO1xuXHQgICAgICBpZiAodmFsdWUpIHtcblx0ICAgICAgICBfZHJvcGRvd24yLmRlZmF1bHQub3BlbihfdGhpcyk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgX2Ryb3Bkb3duMi5kZWZhdWx0LmNsb3NlKF90aGlzKTtcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cdCAgfSxcblxuXHQgIHdhdGNoOiB7XG5cdCAgICBzaG93UG9wcGVyOiBmdW5jdGlvbiBzaG93UG9wcGVyKHZhbCkge1xuXHQgICAgICBpZiAodmFsID09PSB0cnVlICYmIHBhcnNlSW50KHRoaXMucG9wcGVySlMuX3BvcHBlci5zdHlsZS56SW5kZXgsIDEwKSA8IF9wb3B1cC5Qb3B1cE1hbmFnZXIuekluZGV4KSB7XG5cdCAgICAgICAgdGhpcy5wb3BwZXJKUy5fcG9wcGVyLnN0eWxlLnpJbmRleCA9IF9wb3B1cC5Qb3B1cE1hbmFnZXIubmV4dFpJbmRleCgpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXHR9OyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG4vKioqLyB9LFxuLyogMTQyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3Z1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMzKTtcblxuXHR2YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0dmFyIGRyb3Bkb3ducyA9IFtdO1xuXG5cdCFfdnVlMi5kZWZhdWx0LnByb3RvdHlwZS4kaXNTZXJ2ZXIgJiYgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICBkcm9wZG93bnMuZm9yRWFjaChmdW5jdGlvbiAoZHJvcGRvd24pIHtcblx0ICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdCAgICBpZiAoIWRyb3Bkb3duIHx8ICFkcm9wZG93bi4kZWwpIHJldHVybjtcblx0ICAgIGlmICh0YXJnZXQgPT09IGRyb3Bkb3duLiRlbCB8fCBkcm9wZG93bi4kZWwuY29udGFpbnModGFyZ2V0KSkge1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9XG5cdCAgICBkcm9wZG93bi5oYW5kbGVPdXRzaWRlQ2xpY2sgJiYgZHJvcGRvd24uaGFuZGxlT3V0c2lkZUNsaWNrKGV2ZW50KTtcblx0ICB9KTtcblx0fSk7XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG9wZW46IGZ1bmN0aW9uIG9wZW4oaW5zdGFuY2UpIHtcblx0ICAgIGlmIChpbnN0YW5jZSkge1xuXHQgICAgICBkcm9wZG93bnMucHVzaChpbnN0YW5jZSk7XG5cdCAgICB9XG5cdCAgfSxcblx0ICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoaW5zdGFuY2UpIHtcblx0ICAgIHZhciBpbmRleCA9IGRyb3Bkb3ducy5pbmRleE9mKGluc3RhbmNlKTtcblx0ICAgIGlmIChpbmRleCAhPT0gLTEpIHtcblx0ICAgICAgZHJvcGRvd25zLnNwbGljZShpbnN0YW5jZSwgMSk7XG5cdCAgICB9XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMTQzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9jaGVja2JveC1ncm91cFwiKTtcblxuLyoqKi8gfSxcbi8qIDE0NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ3RyYW5zaXRpb24nLCB7XG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcIm5hbWVcIjogXCJlbC16b29tLWluLXRvcFwiXG5cdCAgICB9XG5cdCAgfSwgWyhfdm0ubXVsdGlwbGUpID8gX2MoJ2RpdicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5zaG93UG9wcGVyKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJzaG93UG9wcGVyXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGUtZmlsdGVyXCJcblx0ICB9LCBbX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlLWZpbHRlcl9fY29udGVudFwiXG5cdCAgfSwgW19jKCdlbC1jaGVja2JveC1ncm91cCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlLWZpbHRlcl9fY2hlY2tib3gtZ3JvdXBcIixcblx0ICAgIG1vZGVsOiB7XG5cdCAgICAgIHZhbHVlOiAoX3ZtLmZpbHRlcmVkVmFsdWUpLFxuXHQgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG5cdCAgICAgICAgX3ZtLmZpbHRlcmVkVmFsdWUgPSAkJHZcblx0ICAgICAgfSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJmaWx0ZXJlZFZhbHVlXCJcblx0ICAgIH1cblx0ICB9LCBfdm0uX2woKF92bS5maWx0ZXJzKSwgZnVuY3Rpb24oZmlsdGVyKSB7XG5cdCAgICByZXR1cm4gX2MoJ2VsLWNoZWNrYm94Jywge1xuXHQgICAgICBrZXk6IGZpbHRlci52YWx1ZSxcblx0ICAgICAgYXR0cnM6IHtcblx0ICAgICAgICBcImxhYmVsXCI6IGZpbHRlci52YWx1ZVxuXHQgICAgICB9XG5cdCAgICB9LCBbX3ZtLl92KF92bS5fcyhmaWx0ZXIudGV4dCkpXSlcblx0ICB9KSldLCAxKSwgX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlLWZpbHRlcl9fYm90dG9tXCJcblx0ICB9LCBbX2MoJ2J1dHRvbicsIHtcblx0ICAgIGNsYXNzOiB7XG5cdCAgICAgICdpcy1kaXNhYmxlZCc6IF92bS5maWx0ZXJlZFZhbHVlLmxlbmd0aCA9PT0gMFxuXHQgICAgfSxcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwiZGlzYWJsZWRcIjogX3ZtLmZpbHRlcmVkVmFsdWUubGVuZ3RoID09PSAwXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0uaGFuZGxlQ29uZmlybVxuXHQgICAgfVxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC50YWJsZS5jb25maXJtRmlsdGVyJykpKV0pLCBfYygnYnV0dG9uJywge1xuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0uaGFuZGxlUmVzZXRcblx0ICAgIH1cblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0udCgnZWwudGFibGUucmVzZXRGaWx0ZXInKSkpXSldKV0pIDogX2MoJ2RpdicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5zaG93UG9wcGVyKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJzaG93UG9wcGVyXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGUtZmlsdGVyXCJcblx0ICB9LCBbX2MoJ3VsJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGUtZmlsdGVyX19saXN0XCJcblx0ICB9LCBbX2MoJ2xpJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGUtZmlsdGVyX19saXN0LWl0ZW1cIixcblx0ICAgIGNsYXNzOiB7XG5cdCAgICAgICdpcy1hY3RpdmUnOiBfdm0uZmlsdGVyVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBfdm0uZmlsdGVyVmFsdWUgPT09IG51bGxcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5oYW5kbGVTZWxlY3QobnVsbClcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC50YWJsZS5jbGVhckZpbHRlcicpKSldKSwgX3ZtLl9sKChfdm0uZmlsdGVycyksIGZ1bmN0aW9uKGZpbHRlcikge1xuXHQgICAgcmV0dXJuIF9jKCdsaScsIHtcblx0ICAgICAga2V5OiBmaWx0ZXIudmFsdWUsXG5cdCAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlLWZpbHRlcl9fbGlzdC1pdGVtXCIsXG5cdCAgICAgIGNsYXNzOiB7XG5cdCAgICAgICAgJ2lzLWFjdGl2ZSc6IF92bS5pc0FjdGl2ZShmaWx0ZXIpXG5cdCAgICAgIH0sXG5cdCAgICAgIGF0dHJzOiB7XG5cdCAgICAgICAgXCJsYWJlbFwiOiBmaWx0ZXIudmFsdWVcblx0ICAgICAgfSxcblx0ICAgICAgb246IHtcblx0ICAgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgICAgX3ZtLmhhbmRsZVNlbGVjdChmaWx0ZXIudmFsdWUpXG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LCBbX3ZtLl92KF92bS5fcyhmaWx0ZXIudGV4dCkpXSlcblx0ICB9KV0sIDIpXSldKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAxNDUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsVGFibGVGb290ZXInLFxuXG5cdCAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuXHQgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgdmFyIHN1bXMgPSBbXTtcblx0ICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4sIGluZGV4KSB7XG5cdCAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuXHQgICAgICAgIHN1bXNbaW5kZXhdID0gX3RoaXMuc3VtVGV4dDtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIHZhbHVlcyA9IF90aGlzLnN0b3JlLnN0YXRlcy5kYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHQgICAgICAgIHJldHVybiBOdW1iZXIoaXRlbVtjb2x1bW4ucHJvcGVydHldKTtcblx0ICAgICAgfSk7XG5cdCAgICAgIHZhciBwcmVjaXNpb25zID0gW107XG5cdCAgICAgIHZhciBub3ROdW1iZXIgPSB0cnVlO1xuXHQgICAgICB2YWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuXHQgICAgICAgICAgbm90TnVtYmVyID0gZmFsc2U7XG5cdCAgICAgICAgICB2YXIgZGVjaW1hbCA9ICgnJyArIHZhbHVlKS5zcGxpdCgnLicpWzFdO1xuXHQgICAgICAgICAgcHJlY2lzaW9ucy5wdXNoKGRlY2ltYWwgPyBkZWNpbWFsLmxlbmd0aCA6IDApO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICAgIHZhciBwcmVjaXNpb24gPSBNYXRoLm1heC5hcHBseShudWxsLCBwcmVjaXNpb25zKTtcblx0ICAgICAgaWYgKCFub3ROdW1iZXIpIHtcblx0ICAgICAgICBzdW1zW2luZGV4XSA9IHZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGN1cnIpIHtcblx0ICAgICAgICAgIHZhciB2YWx1ZSA9IE51bWJlcihjdXJyKTtcblx0ICAgICAgICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KChwcmV2ICsgY3VycikudG9GaXhlZChNYXRoLm1pbihwcmVjaXNpb24sIDIwKSkpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHByZXY7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSwgMCk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgc3Vtc1tpbmRleF0gPSAnJztcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIHJldHVybiBoKFxuXHQgICAgICAndGFibGUnLFxuXHQgICAgICB7XG5cdCAgICAgICAgJ2NsYXNzJzogJ2VsLXRhYmxlX19mb290ZXInLFxuXHQgICAgICAgIGF0dHJzOiB7IGNlbGxzcGFjaW5nOiAnMCcsXG5cdCAgICAgICAgICBjZWxscGFkZGluZzogJzAnLFxuXHQgICAgICAgICAgYm9yZGVyOiAnMCcgfVxuXHQgICAgICB9LFxuXHQgICAgICBbaChcblx0ICAgICAgICAnY29sZ3JvdXAnLFxuXHQgICAgICAgIG51bGwsXG5cdCAgICAgICAgW3RoaXMuX2wodGhpcy5jb2x1bW5zLCBmdW5jdGlvbiAoY29sdW1uKSB7XG5cdCAgICAgICAgICByZXR1cm4gaChcblx0ICAgICAgICAgICAgJ2NvbCcsXG5cdCAgICAgICAgICAgIHtcblx0ICAgICAgICAgICAgICBhdHRyczoge1xuXHQgICAgICAgICAgICAgICAgbmFtZTogY29sdW1uLmlkLFxuXHQgICAgICAgICAgICAgICAgd2lkdGg6IGNvbHVtbi5yZWFsV2lkdGggfHwgY29sdW1uLndpZHRoXG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICBbXVxuXHQgICAgICAgICAgKTtcblx0ICAgICAgICB9KSwgIXRoaXMuZml4ZWQgJiYgdGhpcy5sYXlvdXQuZ3V0dGVyV2lkdGggPyBoKFxuXHQgICAgICAgICAgJ2NvbCcsXG5cdCAgICAgICAgICB7XG5cdCAgICAgICAgICAgIGF0dHJzOiB7IG5hbWU6ICdndXR0ZXInLCB3aWR0aDogdGhpcy5sYXlvdXQuc2Nyb2xsWSA/IHRoaXMubGF5b3V0Lmd1dHRlcldpZHRoIDogJycgfVxuXHQgICAgICAgICAgfSxcblx0ICAgICAgICAgIFtdXG5cdCAgICAgICAgKSA6ICcnXVxuXHQgICAgICApLCBoKFxuXHQgICAgICAgICd0Ym9keScsXG5cdCAgICAgICAgbnVsbCxcblx0ICAgICAgICBbaChcblx0ICAgICAgICAgICd0cicsXG5cdCAgICAgICAgICBudWxsLFxuXHQgICAgICAgICAgW3RoaXMuX2wodGhpcy5jb2x1bW5zLCBmdW5jdGlvbiAoY29sdW1uLCBjZWxsSW5kZXgpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGgoXG5cdCAgICAgICAgICAgICAgJ3RkJyxcblx0ICAgICAgICAgICAgICB7XG5cdCAgICAgICAgICAgICAgICBhdHRyczoge1xuXHQgICAgICAgICAgICAgICAgICBjb2xzcGFuOiBjb2x1bW4uY29sU3Bhbixcblx0ICAgICAgICAgICAgICAgICAgcm93c3BhbjogY29sdW1uLnJvd1NwYW5cblx0ICAgICAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICAgICAnY2xhc3MnOiBbY29sdW1uLmlkLCBjb2x1bW4uaGVhZGVyQWxpZ24sIGNvbHVtbi5jbGFzc05hbWUgfHwgJycsIF90aGlzLmlzQ2VsbEhpZGRlbihjZWxsSW5kZXgsIF90aGlzLmNvbHVtbnMpID8gJ2lzLWhpZGRlbicgOiAnJywgIWNvbHVtbi5jaGlsZHJlbiA/ICdpcy1sZWFmJyA6ICcnLCBjb2x1bW4ubGFiZWxDbGFzc05hbWVdIH0sXG5cdCAgICAgICAgICAgICAgW2goXG5cdCAgICAgICAgICAgICAgICAnZGl2Jyxcblx0ICAgICAgICAgICAgICAgIHsgJ2NsYXNzJzogWydjZWxsJywgY29sdW1uLmxhYmVsQ2xhc3NOYW1lXSB9LFxuXHQgICAgICAgICAgICAgICAgW190aGlzLnN1bW1hcnlNZXRob2QgPyBfdGhpcy5zdW1tYXJ5TWV0aG9kKHsgY29sdW1uczogX3RoaXMuY29sdW1ucywgZGF0YTogX3RoaXMuc3RvcmUuc3RhdGVzLmRhdGEgfSlbY2VsbEluZGV4XSA6IHN1bXNbY2VsbEluZGV4XV1cblx0ICAgICAgICAgICAgICApXVxuXHQgICAgICAgICAgICApO1xuXHQgICAgICAgICAgfSksICF0aGlzLmZpeGVkICYmIHRoaXMubGF5b3V0Lmd1dHRlcldpZHRoID8gaChcblx0ICAgICAgICAgICAgJ3RkJyxcblx0ICAgICAgICAgICAgeyAnY2xhc3MnOiAnZ3V0dGVyJywgc3R5bGU6IHsgd2lkdGg6IHRoaXMubGF5b3V0LnNjcm9sbFkgPyB0aGlzLmxheW91dC5ndXR0ZXJXaWR0aCArICdweCcgOiAnMCcgfSB9LFxuXHQgICAgICAgICAgICBbXVxuXHQgICAgICAgICAgKSA6ICcnXVxuXHQgICAgICAgICldXG5cdCAgICAgICldXG5cdCAgICApO1xuXHQgIH0sXG5cblxuXHQgIHByb3BzOiB7XG5cdCAgICBmaXhlZDogU3RyaW5nLFxuXHQgICAgc3RvcmU6IHtcblx0ICAgICAgcmVxdWlyZWQ6IHRydWVcblx0ICAgIH0sXG5cdCAgICBsYXlvdXQ6IHtcblx0ICAgICAgcmVxdWlyZWQ6IHRydWVcblx0ICAgIH0sXG5cdCAgICBzdW1tYXJ5TWV0aG9kOiBGdW5jdGlvbixcblx0ICAgIHN1bVRleHQ6IFN0cmluZyxcblx0ICAgIGJvcmRlcjogQm9vbGVhbixcblx0ICAgIGRlZmF1bHRTb3J0OiB7XG5cdCAgICAgIHR5cGU6IE9iamVjdCxcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgIHByb3A6ICcnLFxuXHQgICAgICAgICAgb3JkZXI6ICcnXG5cdCAgICAgICAgfTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgaXNBbGxTZWxlY3RlZDogZnVuY3Rpb24gaXNBbGxTZWxlY3RlZCgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuc3RhdGVzLmlzQWxsU2VsZWN0ZWQ7XG5cdCAgICB9LFxuXHQgICAgY29sdW1uc0NvdW50OiBmdW5jdGlvbiBjb2x1bW5zQ291bnQoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlcy5jb2x1bW5zLmxlbmd0aDtcblx0ICAgIH0sXG5cdCAgICBsZWZ0Rml4ZWRDb3VudDogZnVuY3Rpb24gbGVmdEZpeGVkQ291bnQoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlcy5maXhlZENvbHVtbnMubGVuZ3RoO1xuXHQgICAgfSxcblx0ICAgIHJpZ2h0Rml4ZWRDb3VudDogZnVuY3Rpb24gcmlnaHRGaXhlZENvdW50KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5zdG9yZS5zdGF0ZXMucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoO1xuXHQgICAgfSxcblx0ICAgIGNvbHVtbnM6IGZ1bmN0aW9uIGNvbHVtbnMoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlcy5jb2x1bW5zO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBpc0NlbGxIaWRkZW46IGZ1bmN0aW9uIGlzQ2VsbEhpZGRlbihpbmRleCwgY29sdW1ucykge1xuXHQgICAgICBpZiAodGhpcy5maXhlZCA9PT0gdHJ1ZSB8fCB0aGlzLmZpeGVkID09PSAnbGVmdCcpIHtcblx0ICAgICAgICByZXR1cm4gaW5kZXggPj0gdGhpcy5sZWZ0Rml4ZWRDb3VudDtcblx0ICAgICAgfSBlbHNlIGlmICh0aGlzLmZpeGVkID09PSAncmlnaHQnKSB7XG5cdCAgICAgICAgdmFyIGJlZm9yZSA9IDA7XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7XG5cdCAgICAgICAgICBiZWZvcmUgKz0gY29sdW1uc1tpXS5jb2xTcGFuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gYmVmb3JlIDwgdGhpcy5jb2x1bW5zQ291bnQgLSB0aGlzLnJpZ2h0Rml4ZWRDb3VudDtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gaW5kZXggPCB0aGlzLmxlZnRGaXhlZENvdW50IHx8IGluZGV4ID49IHRoaXMuY29sdW1uc0NvdW50IC0gdGhpcy5yaWdodEZpeGVkQ291bnQ7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxNDYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZVwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2VsLXRhYmxlLS1maXQnOiBfdm0uZml0LFxuXHQgICAgICAnZWwtdGFibGUtLXN0cmlwZWQnOiBfdm0uc3RyaXBlLFxuXHQgICAgICAnZWwtdGFibGUtLWJvcmRlcic6IF92bS5ib3JkZXIsXG5cdCAgICAgICdlbC10YWJsZS0taGlkZGVuJzogX3ZtLmlzSGlkZGVuLFxuXHQgICAgICAnZWwtdGFibGUtLWZsdWlkLWhlaWdodCc6IF92bS5tYXhIZWlnaHQsXG5cdCAgICAgICdlbC10YWJsZS0tZW5hYmxlLXJvdy1ob3Zlcic6ICFfdm0uc3RvcmUuc3RhdGVzLmlzQ29tcGxleCxcblx0ICAgICAgICAnZWwtdGFibGUtLWVuYWJsZS1yb3ctdHJhbnNpdGlvbic6IChfdm0uc3RvcmUuc3RhdGVzLmRhdGEgfHwgW10pLmxlbmd0aCAhPT0gMCAmJiAoX3ZtLnN0b3JlLnN0YXRlcy5kYXRhIHx8IFtdKS5sZW5ndGggPCAxMDBcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcIm1vdXNlbGVhdmVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmhhbmRsZU1vdXNlTGVhdmUoJGV2ZW50KVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICByZWY6IFwiaGlkZGVuQ29sdW1uc1wiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiaGlkZGVuLWNvbHVtbnNcIlxuXHQgIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMiksIChfdm0uc2hvd0hlYWRlcikgPyBfYygnZGl2Jywge1xuXHQgICAgcmVmOiBcImhlYWRlcldyYXBwZXJcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19oZWFkZXItd3JhcHBlclwiXG5cdCAgfSwgW19jKCd0YWJsZS1oZWFkZXInLCB7XG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgd2lkdGg6IF92bS5sYXlvdXQuYm9keVdpZHRoID8gX3ZtLmxheW91dC5ib2R5V2lkdGggKyAncHgnIDogJydcblx0ICAgIH0pLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJzdG9yZVwiOiBfdm0uc3RvcmUsXG5cdCAgICAgIFwibGF5b3V0XCI6IF92bS5sYXlvdXQsXG5cdCAgICAgIFwiYm9yZGVyXCI6IF92bS5ib3JkZXIsXG5cdCAgICAgIFwiZGVmYXVsdC1zb3J0XCI6IF92bS5kZWZhdWx0U29ydFxuXHQgICAgfVxuXHQgIH0pXSwgMSkgOiBfdm0uX2UoKSwgX2MoJ2RpdicsIHtcblx0ICAgIHJlZjogXCJib2R5V3JhcHBlclwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2JvZHktd3JhcHBlclwiLFxuXHQgICAgc3R5bGU6IChbX3ZtLmJvZHlIZWlnaHRdKVxuXHQgIH0sIFtfYygndGFibGUtYm9keScsIHtcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICB3aWR0aDogX3ZtLmJvZHlXaWR0aFxuXHQgICAgfSksXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcImNvbnRleHRcIjogX3ZtLmNvbnRleHQsXG5cdCAgICAgIFwic3RvcmVcIjogX3ZtLnN0b3JlLFxuXHQgICAgICBcInN0cmlwZVwiOiBfdm0uc3RyaXBlLFxuXHQgICAgICBcImxheW91dFwiOiBfdm0ubGF5b3V0LFxuXHQgICAgICBcInJvdy1jbGFzcy1uYW1lXCI6IF92bS5yb3dDbGFzc05hbWUsXG5cdCAgICAgIFwicm93LXN0eWxlXCI6IF92bS5yb3dTdHlsZSxcblx0ICAgICAgXCJoaWdobGlnaHRcIjogX3ZtLmhpZ2hsaWdodEN1cnJlbnRSb3dcblx0ICAgIH1cblx0ICB9KSwgKCFfdm0uZGF0YSB8fCBfdm0uZGF0YS5sZW5ndGggPT09IDApID8gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19lbXB0eS1ibG9ja1wiLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIHdpZHRoOiBfdm0uYm9keVdpZHRoXG5cdCAgICB9KVxuXHQgIH0sIFtfYygnc3BhbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19lbXB0eS10ZXh0XCJcblx0ICB9LCBbX3ZtLl90KFwiZW1wdHlcIiwgW192bS5fdihfdm0uX3MoX3ZtLmVtcHR5VGV4dCB8fCBfdm0udCgnZWwudGFibGUuZW1wdHlUZXh0JykpKV0pXSwgMildKSA6IF92bS5fZSgpXSwgMSksIChfdm0uc2hvd1N1bW1hcnkpID8gX2MoJ2RpdicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5kYXRhICYmIF92bS5kYXRhLmxlbmd0aCA+IDApLFxuXHQgICAgICBleHByZXNzaW9uOiBcImRhdGEgJiYgZGF0YS5sZW5ndGggPiAwXCJcblx0ICAgIH1dLFxuXHQgICAgcmVmOiBcImZvb3RlcldyYXBwZXJcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19mb290ZXItd3JhcHBlclwiXG5cdCAgfSwgW19jKCd0YWJsZS1mb290ZXInLCB7XG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgd2lkdGg6IF92bS5sYXlvdXQuYm9keVdpZHRoID8gX3ZtLmxheW91dC5ib2R5V2lkdGggKyAncHgnIDogJydcblx0ICAgIH0pLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJzdG9yZVwiOiBfdm0uc3RvcmUsXG5cdCAgICAgIFwibGF5b3V0XCI6IF92bS5sYXlvdXQsXG5cdCAgICAgIFwiYm9yZGVyXCI6IF92bS5ib3JkZXIsXG5cdCAgICAgIFwic3VtLXRleHRcIjogX3ZtLnN1bVRleHQgfHwgX3ZtLnQoJ2VsLnRhYmxlLnN1bVRleHQnKSxcblx0ICAgICAgXCJzdW1tYXJ5LW1ldGhvZFwiOiBfdm0uc3VtbWFyeU1ldGhvZCxcblx0ICAgICAgXCJkZWZhdWx0LXNvcnRcIjogX3ZtLmRlZmF1bHRTb3J0XG5cdCAgICB9XG5cdCAgfSldLCAxKSA6IF92bS5fZSgpLCAoX3ZtLmZpeGVkQ29sdW1ucy5sZW5ndGggPiAwKSA/IF9jKCdkaXYnLCB7XG5cdCAgICByZWY6IFwiZml4ZWRXcmFwcGVyXCIsXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fZml4ZWRcIixcblx0ICAgIHN0eWxlOiAoW3tcblx0ICAgICAgICB3aWR0aDogX3ZtLmxheW91dC5maXhlZFdpZHRoID8gX3ZtLmxheW91dC5maXhlZFdpZHRoICsgJ3B4JyA6ICcnXG5cdCAgICAgIH0sXG5cdCAgICAgIF92bS5maXhlZEhlaWdodFxuXHQgICAgXSlcblx0ICB9LCBbKF92bS5zaG93SGVhZGVyKSA/IF9jKCdkaXYnLCB7XG5cdCAgICByZWY6IFwiZml4ZWRIZWFkZXJXcmFwcGVyXCIsXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fZml4ZWQtaGVhZGVyLXdyYXBwZXJcIlxuXHQgIH0sIFtfYygndGFibGUtaGVhZGVyJywge1xuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIHdpZHRoOiBfdm0ubGF5b3V0LmZpeGVkV2lkdGggPyBfdm0ubGF5b3V0LmZpeGVkV2lkdGggKyAncHgnIDogJydcblx0ICAgIH0pLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJmaXhlZFwiOiBcImxlZnRcIixcblx0ICAgICAgXCJib3JkZXJcIjogX3ZtLmJvcmRlcixcblx0ICAgICAgXCJzdG9yZVwiOiBfdm0uc3RvcmUsXG5cdCAgICAgIFwibGF5b3V0XCI6IF92bS5sYXlvdXRcblx0ICAgIH1cblx0ICB9KV0sIDEpIDogX3ZtLl9lKCksIF9jKCdkaXYnLCB7XG5cdCAgICByZWY6IFwiZml4ZWRCb2R5V3JhcHBlclwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2ZpeGVkLWJvZHktd3JhcHBlclwiLFxuXHQgICAgc3R5bGU6IChbe1xuXHQgICAgICAgIHRvcDogX3ZtLmxheW91dC5oZWFkZXJIZWlnaHQgKyAncHgnXG5cdCAgICAgIH0sXG5cdCAgICAgIF92bS5maXhlZEJvZHlIZWlnaHRcblx0ICAgIF0pXG5cdCAgfSwgW19jKCd0YWJsZS1ib2R5Jywge1xuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIHdpZHRoOiBfdm0ubGF5b3V0LmZpeGVkV2lkdGggPyBfdm0ubGF5b3V0LmZpeGVkV2lkdGggKyAncHgnIDogJydcblx0ICAgIH0pLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJmaXhlZFwiOiBcImxlZnRcIixcblx0ICAgICAgXCJzdG9yZVwiOiBfdm0uc3RvcmUsXG5cdCAgICAgIFwic3RyaXBlXCI6IF92bS5zdHJpcGUsXG5cdCAgICAgIFwibGF5b3V0XCI6IF92bS5sYXlvdXQsXG5cdCAgICAgIFwiaGlnaGxpZ2h0XCI6IF92bS5oaWdobGlnaHRDdXJyZW50Um93LFxuXHQgICAgICBcInJvdy1jbGFzcy1uYW1lXCI6IF92bS5yb3dDbGFzc05hbWUsXG5cdCAgICAgIFwicm93LXN0eWxlXCI6IF92bS5yb3dTdHlsZVxuXHQgICAgfVxuXHQgIH0pXSwgMSksIChfdm0uc2hvd1N1bW1hcnkpID8gX2MoJ2RpdicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5kYXRhICYmIF92bS5kYXRhLmxlbmd0aCA+IDApLFxuXHQgICAgICBleHByZXNzaW9uOiBcImRhdGEgJiYgZGF0YS5sZW5ndGggPiAwXCJcblx0ICAgIH1dLFxuXHQgICAgcmVmOiBcImZpeGVkRm9vdGVyV3JhcHBlclwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2ZpeGVkLWZvb3Rlci13cmFwcGVyXCJcblx0ICB9LCBbX2MoJ3RhYmxlLWZvb3RlcicsIHtcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICB3aWR0aDogX3ZtLmxheW91dC5maXhlZFdpZHRoID8gX3ZtLmxheW91dC5maXhlZFdpZHRoICsgJ3B4JyA6ICcnXG5cdCAgICB9KSxcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwiZml4ZWRcIjogXCJsZWZ0XCIsXG5cdCAgICAgIFwiYm9yZGVyXCI6IF92bS5ib3JkZXIsXG5cdCAgICAgIFwic3VtLXRleHRcIjogX3ZtLnN1bVRleHQgfHwgX3ZtLnQoJ2VsLnRhYmxlLnN1bVRleHQnKSxcblx0ICAgICAgXCJzdW1tYXJ5LW1ldGhvZFwiOiBfdm0uc3VtbWFyeU1ldGhvZCxcblx0ICAgICAgXCJzdG9yZVwiOiBfdm0uc3RvcmUsXG5cdCAgICAgIFwibGF5b3V0XCI6IF92bS5sYXlvdXRcblx0ICAgIH1cblx0ICB9KV0sIDEpIDogX3ZtLl9lKCldKSA6IF92bS5fZSgpLCAoX3ZtLnJpZ2h0Rml4ZWRDb2x1bW5zLmxlbmd0aCA+IDApID8gX2MoJ2RpdicsIHtcblx0ICAgIHJlZjogXCJyaWdodEZpeGVkV3JhcHBlclwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2ZpeGVkLXJpZ2h0XCIsXG5cdCAgICBzdHlsZTogKFt7XG5cdCAgICAgICAgd2lkdGg6IF92bS5sYXlvdXQucmlnaHRGaXhlZFdpZHRoID8gX3ZtLmxheW91dC5yaWdodEZpeGVkV2lkdGggKyAncHgnIDogJydcblx0ICAgICAgfSwge1xuXHQgICAgICAgIHJpZ2h0OiBfdm0ubGF5b3V0LnNjcm9sbFkgPyAoX3ZtLmJvcmRlciA/IF92bS5sYXlvdXQuZ3V0dGVyV2lkdGggOiAoX3ZtLmxheW91dC5ndXR0ZXJXaWR0aCB8fCAxKSkgKyAncHgnIDogJydcblx0ICAgICAgfSxcblx0ICAgICAgX3ZtLmZpeGVkSGVpZ2h0XG5cdCAgICBdKVxuXHQgIH0sIFsoX3ZtLnNob3dIZWFkZXIpID8gX2MoJ2RpdicsIHtcblx0ICAgIHJlZjogXCJyaWdodEZpeGVkSGVhZGVyV3JhcHBlclwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2ZpeGVkLWhlYWRlci13cmFwcGVyXCJcblx0ICB9LCBbX2MoJ3RhYmxlLWhlYWRlcicsIHtcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICB3aWR0aDogX3ZtLmxheW91dC5yaWdodEZpeGVkV2lkdGggPyBfdm0ubGF5b3V0LnJpZ2h0Rml4ZWRXaWR0aCArICdweCcgOiAnJ1xuXHQgICAgfSksXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcImZpeGVkXCI6IFwicmlnaHRcIixcblx0ICAgICAgXCJib3JkZXJcIjogX3ZtLmJvcmRlcixcblx0ICAgICAgXCJzdG9yZVwiOiBfdm0uc3RvcmUsXG5cdCAgICAgIFwibGF5b3V0XCI6IF92bS5sYXlvdXRcblx0ICAgIH1cblx0ICB9KV0sIDEpIDogX3ZtLl9lKCksIF9jKCdkaXYnLCB7XG5cdCAgICByZWY6IFwicmlnaHRGaXhlZEJvZHlXcmFwcGVyXCIsXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fZml4ZWQtYm9keS13cmFwcGVyXCIsXG5cdCAgICBzdHlsZTogKFt7XG5cdCAgICAgICAgdG9wOiBfdm0ubGF5b3V0LmhlYWRlckhlaWdodCArICdweCdcblx0ICAgICAgfSxcblx0ICAgICAgX3ZtLmZpeGVkQm9keUhlaWdodFxuXHQgICAgXSlcblx0ICB9LCBbX2MoJ3RhYmxlLWJvZHknLCB7XG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgd2lkdGg6IF92bS5sYXlvdXQucmlnaHRGaXhlZFdpZHRoID8gX3ZtLmxheW91dC5yaWdodEZpeGVkV2lkdGggKyAncHgnIDogJydcblx0ICAgIH0pLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJmaXhlZFwiOiBcInJpZ2h0XCIsXG5cdCAgICAgIFwic3RvcmVcIjogX3ZtLnN0b3JlLFxuXHQgICAgICBcInN0cmlwZVwiOiBfdm0uc3RyaXBlLFxuXHQgICAgICBcImxheW91dFwiOiBfdm0ubGF5b3V0LFxuXHQgICAgICBcInJvdy1jbGFzcy1uYW1lXCI6IF92bS5yb3dDbGFzc05hbWUsXG5cdCAgICAgIFwicm93LXN0eWxlXCI6IF92bS5yb3dTdHlsZSxcblx0ICAgICAgXCJoaWdobGlnaHRcIjogX3ZtLmhpZ2hsaWdodEN1cnJlbnRSb3dcblx0ICAgIH1cblx0ICB9KV0sIDEpLCAoX3ZtLnNob3dTdW1tYXJ5KSA/IF9jKCdkaXYnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0uZGF0YSAmJiBfdm0uZGF0YS5sZW5ndGggPiAwKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJkYXRhICYmIGRhdGEubGVuZ3RoID4gMFwiXG5cdCAgICB9XSxcblx0ICAgIHJlZjogXCJyaWdodEZpeGVkRm9vdGVyV3JhcHBlclwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2ZpeGVkLWZvb3Rlci13cmFwcGVyXCJcblx0ICB9LCBbX2MoJ3RhYmxlLWZvb3RlcicsIHtcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICB3aWR0aDogX3ZtLmxheW91dC5yaWdodEZpeGVkV2lkdGggPyBfdm0ubGF5b3V0LnJpZ2h0Rml4ZWRXaWR0aCArICdweCcgOiAnJ1xuXHQgICAgfSksXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcImZpeGVkXCI6IFwicmlnaHRcIixcblx0ICAgICAgXCJib3JkZXJcIjogX3ZtLmJvcmRlcixcblx0ICAgICAgXCJzdW0tdGV4dFwiOiBfdm0uc3VtVGV4dCB8fCBfdm0udCgnZWwudGFibGUuc3VtVGV4dCcpLFxuXHQgICAgICBcInN1bW1hcnktbWV0aG9kXCI6IF92bS5zdW1tYXJ5TWV0aG9kLFxuXHQgICAgICBcInN0b3JlXCI6IF92bS5zdG9yZSxcblx0ICAgICAgXCJsYXlvdXRcIjogX3ZtLmxheW91dFxuXHQgICAgfVxuXHQgIH0pXSwgMSkgOiBfdm0uX2UoKV0pIDogX3ZtLl9lKCksIChfdm0ucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoID4gMCkgPyBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2ZpeGVkLXJpZ2h0LXBhdGNoXCIsXG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgd2lkdGg6IF92bS5sYXlvdXQuc2Nyb2xsWSA/IF92bS5sYXlvdXQuZ3V0dGVyV2lkdGggKyAncHgnIDogJzAnLFxuXHQgICAgICBoZWlnaHQ6IF92bS5sYXlvdXQuaGVhZGVySGVpZ2h0ICsgJ3B4J1xuXHQgICAgfSlcblx0ICB9KSA6IF92bS5fZSgpLCBfYygnZGl2Jywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLnJlc2l6ZVByb3h5VmlzaWJsZSksXG5cdCAgICAgIGV4cHJlc3Npb246IFwicmVzaXplUHJveHlWaXNpYmxlXCJcblx0ICAgIH1dLFxuXHQgICAgcmVmOiBcInJlc2l6ZVByb3h5XCIsXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fY29sdW1uLXJlc2l6ZS1wcm94eVwiXG5cdCAgfSldKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAxNDcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfdGFibGVDb2x1bW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0OCk7XG5cblx0dmFyIF90YWJsZUNvbHVtbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90YWJsZUNvbHVtbik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfdGFibGVDb2x1bW4yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF90YWJsZUNvbHVtbjIuZGVmYXVsdC5uYW1lLCBfdGFibGVDb2x1bW4yLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF90YWJsZUNvbHVtbjIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDE0OCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9jaGVja2JveCA9IF9fd2VicGFja19yZXF1aXJlX18oMTMwKTtcblxuXHR2YXIgX2NoZWNrYm94MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NoZWNrYm94KTtcblxuXHR2YXIgX3RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA5KTtcblxuXHR2YXIgX3RhZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90YWcpO1xuXG5cdHZhciBfbWVyZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KTtcblxuXHR2YXIgX21lcmdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21lcmdlKTtcblxuXHR2YXIgX3V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNyk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRmdW5jdGlvbiBfb2JqZWN0RGVzdHJ1Y3R1cmluZ0VtcHR5KG9iaikgeyBpZiAob2JqID09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgZGVzdHJ1Y3R1cmUgdW5kZWZpbmVkXCIpOyB9XG5cblx0dmFyIGNvbHVtbklkU2VlZCA9IDE7XG5cblx0dmFyIGRlZmF1bHRzID0ge1xuXHQgIGRlZmF1bHQ6IHtcblx0ICAgIG9yZGVyOiAnJ1xuXHQgIH0sXG5cdCAgc2VsZWN0aW9uOiB7XG5cdCAgICB3aWR0aDogNDgsXG5cdCAgICBtaW5XaWR0aDogNDgsXG5cdCAgICByZWFsV2lkdGg6IDQ4LFxuXHQgICAgb3JkZXI6ICcnLFxuXHQgICAgY2xhc3NOYW1lOiAnZWwtdGFibGUtY29sdW1uLS1zZWxlY3Rpb24nXG5cdCAgfSxcblx0ICBleHBhbmQ6IHtcblx0ICAgIHdpZHRoOiA0OCxcblx0ICAgIG1pbldpZHRoOiA0OCxcblx0ICAgIHJlYWxXaWR0aDogNDgsXG5cdCAgICBvcmRlcjogJydcblx0ICB9LFxuXHQgIGluZGV4OiB7XG5cdCAgICB3aWR0aDogNDgsXG5cdCAgICBtaW5XaWR0aDogNDgsXG5cdCAgICByZWFsV2lkdGg6IDQ4LFxuXHQgICAgb3JkZXI6ICcnXG5cdCAgfVxuXHR9O1xuXG5cdHZhciBmb3JjZWQgPSB7XG5cdCAgc2VsZWN0aW9uOiB7XG5cdCAgICByZW5kZXJIZWFkZXI6IGZ1bmN0aW9uIHJlbmRlckhlYWRlcihoKSB7XG5cdCAgICAgIHJldHVybiBoKFxuXHQgICAgICAgICdlbC1jaGVja2JveCcsXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgbmF0aXZlT246IHtcblx0ICAgICAgICAgICAgJ2NsaWNrJzogdGhpcy50b2dnbGVBbGxTZWxlY3Rpb25cblx0ICAgICAgICAgIH0sXG5cdCAgICAgICAgICBhdHRyczoge1xuXHQgICAgICAgICAgICB2YWx1ZTogdGhpcy5pc0FsbFNlbGVjdGVkIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIFtdXG5cdCAgICAgICk7XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyQ2VsbDogZnVuY3Rpb24gcmVuZGVyQ2VsbChoLCBfcmVmKSB7XG5cdCAgICAgIHZhciByb3cgPSBfcmVmLnJvdyxcblx0ICAgICAgICAgIGNvbHVtbiA9IF9yZWYuY29sdW1uLFxuXHQgICAgICAgICAgc3RvcmUgPSBfcmVmLnN0b3JlLFxuXHQgICAgICAgICAgJGluZGV4ID0gX3JlZi4kaW5kZXg7XG5cblx0ICAgICAgcmV0dXJuIGgoXG5cdCAgICAgICAgJ2VsLWNoZWNrYm94Jyxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICBhdHRyczoge1xuXHQgICAgICAgICAgICB2YWx1ZTogc3RvcmUuaXNTZWxlY3RlZChyb3cpLFxuXHQgICAgICAgICAgICBkaXNhYmxlZDogY29sdW1uLnNlbGVjdGFibGUgPyAhY29sdW1uLnNlbGVjdGFibGUuY2FsbChudWxsLCByb3csICRpbmRleCkgOiBmYWxzZVxuXHQgICAgICAgICAgfSxcblx0ICAgICAgICAgIG9uOiB7XG5cdCAgICAgICAgICAgICdpbnB1dCc6IGZ1bmN0aW9uIGlucHV0KCkge1xuXHQgICAgICAgICAgICAgIHN0b3JlLmNvbW1pdCgncm93U2VsZWN0ZWRDaGFuZ2VkJywgcm93KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgW11cblx0ICAgICAgKTtcblx0ICAgIH0sXG5cdCAgICBzb3J0YWJsZTogZmFsc2UsXG5cdCAgICByZXNpemFibGU6IGZhbHNlXG5cdCAgfSxcblx0ICBpbmRleDoge1xuXHQgICAgcmVuZGVySGVhZGVyOiBmdW5jdGlvbiByZW5kZXJIZWFkZXIoaCwgX3JlZjIpIHtcblx0ICAgICAgdmFyIGNvbHVtbiA9IF9yZWYyLmNvbHVtbjtcblxuXHQgICAgICByZXR1cm4gY29sdW1uLmxhYmVsIHx8ICcjJztcblx0ICAgIH0sXG5cdCAgICByZW5kZXJDZWxsOiBmdW5jdGlvbiByZW5kZXJDZWxsKGgsIF9yZWYzKSB7XG5cdCAgICAgIHZhciAkaW5kZXggPSBfcmVmMy4kaW5kZXg7XG5cblx0ICAgICAgcmV0dXJuIGgoXG5cdCAgICAgICAgJ2RpdicsXG5cdCAgICAgICAgbnVsbCxcblx0ICAgICAgICBbJGluZGV4ICsgMV1cblx0ICAgICAgKTtcblx0ICAgIH0sXG5cdCAgICBzb3J0YWJsZTogZmFsc2Vcblx0ICB9LFxuXHQgIGV4cGFuZDoge1xuXHQgICAgcmVuZGVySGVhZGVyOiBmdW5jdGlvbiByZW5kZXJIZWFkZXIoaCwgX3JlZjQpIHtcblx0ICAgICAgX29iamVjdERlc3RydWN0dXJpbmdFbXB0eShfcmVmNCk7XG5cblx0ICAgICAgcmV0dXJuICcnO1xuXHQgICAgfSxcblx0ICAgIHJlbmRlckNlbGw6IGZ1bmN0aW9uIHJlbmRlckNlbGwoaCwgX3JlZjUsIHByb3h5KSB7XG5cdCAgICAgIHZhciByb3cgPSBfcmVmNS5yb3csXG5cdCAgICAgICAgICBzdG9yZSA9IF9yZWY1LnN0b3JlO1xuXG5cdCAgICAgIHZhciBleHBhbmRlZCA9IHN0b3JlLnN0YXRlcy5leHBhbmRSb3dzLmluZGV4T2Yocm93KSA+IC0xO1xuXHQgICAgICByZXR1cm4gaChcblx0ICAgICAgICAnZGl2Jyxcblx0ICAgICAgICB7ICdjbGFzcyc6ICdlbC10YWJsZV9fZXhwYW5kLWljb24gJyArIChleHBhbmRlZCA/ICdlbC10YWJsZV9fZXhwYW5kLWljb24tLWV4cGFuZGVkJyA6ICcnKSxcblx0ICAgICAgICAgIG9uOiB7XG5cdCAgICAgICAgICAgICdjbGljayc6IGZ1bmN0aW9uIGNsaWNrKCkge1xuXHQgICAgICAgICAgICAgIHJldHVybiBwcm94eS5oYW5kbGVFeHBhbmRDbGljayhyb3cpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBbaChcblx0ICAgICAgICAgICdpJyxcblx0ICAgICAgICAgIHsgJ2NsYXNzJzogJ2VsLWljb24gZWwtaWNvbi1hcnJvdy1yaWdodCcgfSxcblx0ICAgICAgICAgIFtdXG5cdCAgICAgICAgKV1cblx0ICAgICAgKTtcblx0ICAgIH0sXG5cdCAgICBzb3J0YWJsZTogZmFsc2UsXG5cdCAgICByZXNpemFibGU6IGZhbHNlLFxuXHQgICAgY2xhc3NOYW1lOiAnZWwtdGFibGVfX2V4cGFuZC1jb2x1bW4nXG5cdCAgfVxuXHR9O1xuXG5cdHZhciBnZXREZWZhdWx0Q29sdW1uID0gZnVuY3Rpb24gZ2V0RGVmYXVsdENvbHVtbih0eXBlLCBvcHRpb25zKSB7XG5cdCAgdmFyIGNvbHVtbiA9IHt9O1xuXG5cdCAgKDAsIF9tZXJnZTIuZGVmYXVsdCkoY29sdW1uLCBkZWZhdWx0c1t0eXBlIHx8ICdkZWZhdWx0J10pO1xuXG5cdCAgZm9yICh2YXIgbmFtZSBpbiBvcHRpb25zKSB7XG5cdCAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuXHQgICAgICB2YXIgdmFsdWUgPSBvcHRpb25zW25hbWVdO1xuXHQgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuXHQgICAgICAgIGNvbHVtbltuYW1lXSA9IHZhbHVlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgaWYgKCFjb2x1bW4ubWluV2lkdGgpIHtcblx0ICAgIGNvbHVtbi5taW5XaWR0aCA9IDgwO1xuXHQgIH1cblxuXHQgIGNvbHVtbi5yZWFsV2lkdGggPSBjb2x1bW4ud2lkdGggfHwgY29sdW1uLm1pbldpZHRoO1xuXG5cdCAgcmV0dXJuIGNvbHVtbjtcblx0fTtcblxuXHR2YXIgREVGQVVMVF9SRU5ERVJfQ0VMTCA9IGZ1bmN0aW9uIERFRkFVTFRfUkVOREVSX0NFTEwoaCwgX3JlZjYpIHtcblx0ICB2YXIgcm93ID0gX3JlZjYucm93LFxuXHQgICAgICBjb2x1bW4gPSBfcmVmNi5jb2x1bW47XG5cblx0ICB2YXIgcHJvcGVydHkgPSBjb2x1bW4ucHJvcGVydHk7XG5cdCAgdmFyIHZhbHVlID0gcHJvcGVydHkgJiYgcHJvcGVydHkuaW5kZXhPZignLicpID09PSAtMSA/IHJvd1twcm9wZXJ0eV0gOiAoMCwgX3V0aWwuZ2V0VmFsdWVCeVBhdGgpKHJvdywgcHJvcGVydHkpO1xuXHQgIGlmIChjb2x1bW4gJiYgY29sdW1uLmZvcm1hdHRlcikge1xuXHQgICAgcmV0dXJuIGNvbHVtbi5mb3JtYXR0ZXIocm93LCBjb2x1bW4sIHZhbHVlKTtcblx0ICB9XG5cdCAgcmV0dXJuIHZhbHVlO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxUYWJsZUNvbHVtbicsXG5cblx0ICBwcm9wczoge1xuXHQgICAgdHlwZToge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICdkZWZhdWx0J1xuXHQgICAgfSxcblx0ICAgIGxhYmVsOiBTdHJpbmcsXG5cdCAgICBjbGFzc05hbWU6IFN0cmluZyxcblx0ICAgIGxhYmVsQ2xhc3NOYW1lOiBTdHJpbmcsXG5cdCAgICBwcm9wZXJ0eTogU3RyaW5nLFxuXHQgICAgcHJvcDogU3RyaW5nLFxuXHQgICAgd2lkdGg6IHt9LFxuXHQgICAgbWluV2lkdGg6IHt9LFxuXHQgICAgcmVuZGVySGVhZGVyOiBGdW5jdGlvbixcblx0ICAgIHNvcnRhYmxlOiB7XG5cdCAgICAgIHR5cGU6IFtTdHJpbmcsIEJvb2xlYW5dLFxuXHQgICAgICBkZWZhdWx0OiBmYWxzZVxuXHQgICAgfSxcblx0ICAgIHNvcnRNZXRob2Q6IEZ1bmN0aW9uLFxuXHQgICAgcmVzaXphYmxlOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IHRydWVcblx0ICAgIH0sXG5cdCAgICBjb250ZXh0OiB7fSxcblx0ICAgIGNvbHVtbktleTogU3RyaW5nLFxuXHQgICAgYWxpZ246IFN0cmluZyxcblx0ICAgIGhlYWRlckFsaWduOiBTdHJpbmcsXG5cdCAgICBzaG93VG9vbHRpcFdoZW5PdmVyZmxvdzogQm9vbGVhbixcblx0ICAgIHNob3dPdmVyZmxvd1Rvb2x0aXA6IEJvb2xlYW4sXG5cdCAgICBmaXhlZDogW0Jvb2xlYW4sIFN0cmluZ10sXG5cdCAgICBmb3JtYXR0ZXI6IEZ1bmN0aW9uLFxuXHQgICAgc2VsZWN0YWJsZTogRnVuY3Rpb24sXG5cdCAgICByZXNlcnZlU2VsZWN0aW9uOiBCb29sZWFuLFxuXHQgICAgZmlsdGVyTWV0aG9kOiBGdW5jdGlvbixcblx0ICAgIGZpbHRlcmVkVmFsdWU6IEFycmF5LFxuXHQgICAgZmlsdGVyczogQXJyYXksXG5cdCAgICBmaWx0ZXJQbGFjZW1lbnQ6IFN0cmluZyxcblx0ICAgIGZpbHRlck11bHRpcGxlOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IHRydWVcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIGlzU3ViQ29sdW1uOiBmYWxzZSxcblx0ICAgICAgY29sdW1uczogW11cblx0ICAgIH07XG5cdCAgfSxcblx0ICBiZWZvcmVDcmVhdGU6IGZ1bmN0aW9uIGJlZm9yZUNyZWF0ZSgpIHtcblx0ICAgIHRoaXMucm93ID0ge307XG5cdCAgICB0aGlzLmNvbHVtbiA9IHt9O1xuXHQgICAgdGhpcy4kaW5kZXggPSAwO1xuXHQgIH0sXG5cblxuXHQgIGNvbXBvbmVudHM6IHtcblx0ICAgIEVsQ2hlY2tib3g6IF9jaGVja2JveDIuZGVmYXVsdCxcblx0ICAgIEVsVGFnOiBfdGFnMi5kZWZhdWx0XG5cdCAgfSxcblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBvd25lcjogZnVuY3Rpb24gb3duZXIoKSB7XG5cdCAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG5cdCAgICAgIHdoaWxlIChwYXJlbnQgJiYgIXBhcmVudC50YWJsZUlkKSB7XG5cdCAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHBhcmVudDtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcblx0ICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgIHRoaXMuY3VzdG9tUmVuZGVyID0gdGhpcy4kb3B0aW9ucy5yZW5kZXI7XG5cdCAgICB0aGlzLiRvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIChoKSB7XG5cdCAgICAgIHJldHVybiBoKCdkaXYnLCBfdGhpcy4kc2xvdHMuZGVmYXVsdCk7XG5cdCAgICB9O1xuXHQgICAgdGhpcy5jb2x1bW5JZCA9ICh0aGlzLiRwYXJlbnQudGFibGVJZCB8fCB0aGlzLiRwYXJlbnQuY29sdW1uSWQgKyAnXycpICsgJ2NvbHVtbl8nICsgY29sdW1uSWRTZWVkKys7XG5cblx0ICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG5cdCAgICB2YXIgb3duZXIgPSB0aGlzLm93bmVyO1xuXHQgICAgdGhpcy5pc1N1YkNvbHVtbiA9IG93bmVyICE9PSBwYXJlbnQ7XG5cblx0ICAgIHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG5cdCAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoO1xuXHQgICAgaWYgKHdpZHRoICE9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgd2lkdGggPSBwYXJzZUludCh3aWR0aCwgMTApO1xuXHQgICAgICBpZiAoaXNOYU4od2lkdGgpKSB7XG5cdCAgICAgICAgd2lkdGggPSBudWxsO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHZhciBtaW5XaWR0aCA9IHRoaXMubWluV2lkdGg7XG5cdCAgICBpZiAobWluV2lkdGggIT09IHVuZGVmaW5lZCkge1xuXHQgICAgICBtaW5XaWR0aCA9IHBhcnNlSW50KG1pbldpZHRoLCAxMCk7XG5cdCAgICAgIGlmIChpc05hTihtaW5XaWR0aCkpIHtcblx0ICAgICAgICBtaW5XaWR0aCA9IDgwO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHZhciBpc0NvbHVtbkdyb3VwID0gZmFsc2U7XG5cblx0ICAgIHZhciBjb2x1bW4gPSBnZXREZWZhdWx0Q29sdW1uKHR5cGUsIHtcblx0ICAgICAgaWQ6IHRoaXMuY29sdW1uSWQsXG5cdCAgICAgIGNvbHVtbktleTogdGhpcy5jb2x1bW5LZXksXG5cdCAgICAgIGxhYmVsOiB0aGlzLmxhYmVsLFxuXHQgICAgICBjbGFzc05hbWU6IHRoaXMuY2xhc3NOYW1lLFxuXHQgICAgICBsYWJlbENsYXNzTmFtZTogdGhpcy5sYWJlbENsYXNzTmFtZSxcblx0ICAgICAgcHJvcGVydHk6IHRoaXMucHJvcCB8fCB0aGlzLnByb3BlcnR5LFxuXHQgICAgICB0eXBlOiB0eXBlLFxuXHQgICAgICByZW5kZXJDZWxsOiBudWxsLFxuXHQgICAgICByZW5kZXJIZWFkZXI6IHRoaXMucmVuZGVySGVhZGVyLFxuXHQgICAgICBtaW5XaWR0aDogbWluV2lkdGgsXG5cdCAgICAgIHdpZHRoOiB3aWR0aCxcblx0ICAgICAgaXNDb2x1bW5Hcm91cDogaXNDb2x1bW5Hcm91cCxcblx0ICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0LFxuXHQgICAgICBhbGlnbjogdGhpcy5hbGlnbiA/ICdpcy0nICsgdGhpcy5hbGlnbiA6IG51bGwsXG5cdCAgICAgIGhlYWRlckFsaWduOiB0aGlzLmhlYWRlckFsaWduID8gJ2lzLScgKyB0aGlzLmhlYWRlckFsaWduIDogdGhpcy5hbGlnbiA/ICdpcy0nICsgdGhpcy5hbGlnbiA6IG51bGwsXG5cdCAgICAgIHNvcnRhYmxlOiB0aGlzLnNvcnRhYmxlID09PSAnJyA/IHRydWUgOiB0aGlzLnNvcnRhYmxlLFxuXHQgICAgICBzb3J0TWV0aG9kOiB0aGlzLnNvcnRNZXRob2QsXG5cdCAgICAgIHJlc2l6YWJsZTogdGhpcy5yZXNpemFibGUsXG5cdCAgICAgIHNob3dPdmVyZmxvd1Rvb2x0aXA6IHRoaXMuc2hvd092ZXJmbG93VG9vbHRpcCB8fCB0aGlzLnNob3dUb29sdGlwV2hlbk92ZXJmbG93LFxuXHQgICAgICBmb3JtYXR0ZXI6IHRoaXMuZm9ybWF0dGVyLFxuXHQgICAgICBzZWxlY3RhYmxlOiB0aGlzLnNlbGVjdGFibGUsXG5cdCAgICAgIHJlc2VydmVTZWxlY3Rpb246IHRoaXMucmVzZXJ2ZVNlbGVjdGlvbixcblx0ICAgICAgZml4ZWQ6IHRoaXMuZml4ZWQgPT09ICcnID8gdHJ1ZSA6IHRoaXMuZml4ZWQsXG5cdCAgICAgIGZpbHRlck1ldGhvZDogdGhpcy5maWx0ZXJNZXRob2QsXG5cdCAgICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVycyxcblx0ICAgICAgZmlsdGVyYWJsZTogdGhpcy5maWx0ZXJzIHx8IHRoaXMuZmlsdGVyTWV0aG9kLFxuXHQgICAgICBmaWx0ZXJNdWx0aXBsZTogdGhpcy5maWx0ZXJNdWx0aXBsZSxcblx0ICAgICAgZmlsdGVyT3BlbmVkOiBmYWxzZSxcblx0ICAgICAgZmlsdGVyZWRWYWx1ZTogdGhpcy5maWx0ZXJlZFZhbHVlIHx8IFtdLFxuXHQgICAgICBmaWx0ZXJQbGFjZW1lbnQ6IHRoaXMuZmlsdGVyUGxhY2VtZW50IHx8ICcnXG5cdCAgICB9KTtcblxuXHQgICAgKDAsIF9tZXJnZTIuZGVmYXVsdCkoY29sdW1uLCBmb3JjZWRbdHlwZV0gfHwge30pO1xuXG5cdCAgICB0aGlzLmNvbHVtbkNvbmZpZyA9IGNvbHVtbjtcblxuXHQgICAgdmFyIHJlbmRlckNlbGwgPSBjb2x1bW4ucmVuZGVyQ2VsbDtcblx0ICAgIHZhciBfc2VsZiA9IHRoaXM7XG5cblx0ICAgIGlmICh0eXBlID09PSAnZXhwYW5kJykge1xuXHQgICAgICBvd25lci5yZW5kZXJFeHBhbmRlZCA9IGZ1bmN0aW9uIChoLCBkYXRhKSB7XG5cdCAgICAgICAgcmV0dXJuIF9zZWxmLiRzY29wZWRTbG90cy5kZWZhdWx0ID8gX3NlbGYuJHNjb3BlZFNsb3RzLmRlZmF1bHQoZGF0YSkgOiBfc2VsZi4kc2xvdHMuZGVmYXVsdDtcblx0ICAgICAgfTtcblxuXHQgICAgICBjb2x1bW4ucmVuZGVyQ2VsbCA9IGZ1bmN0aW9uIChoLCBkYXRhKSB7XG5cdCAgICAgICAgcmV0dXJuIGgoXG5cdCAgICAgICAgICAnZGl2Jyxcblx0ICAgICAgICAgIHsgJ2NsYXNzJzogJ2NlbGwnIH0sXG5cdCAgICAgICAgICBbcmVuZGVyQ2VsbChoLCBkYXRhLCB0aGlzLl9yZW5kZXJQcm94eSldXG5cdCAgICAgICAgKTtcblx0ICAgICAgfTtcblxuXHQgICAgICByZXR1cm47XG5cdCAgICB9XG5cblx0ICAgIGNvbHVtbi5yZW5kZXJDZWxsID0gZnVuY3Rpb24gKGgsIGRhdGEpIHtcblx0ICAgICAgLy8g5pyq5p2l54mI5pys56e76ZmkXG5cdCAgICAgIGlmIChfc2VsZi4kdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZSkge1xuXHQgICAgICAgIHJlbmRlckNlbGwgPSBmdW5jdGlvbiByZW5kZXJDZWxsKCkge1xuXHQgICAgICAgICAgZGF0YS5fc2VsZiA9IF9zZWxmLmNvbnRleHQgfHwgZGF0YS5fc2VsZjtcblx0ICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGF0YS5fc2VsZikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gZGF0YS5fc2VsZikge1xuXHQgICAgICAgICAgICAgIGlmICghZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuXHQgICAgICAgICAgICAgICAgZGF0YVtwcm9wXSA9IGRhdGEuX3NlbGZbcHJvcF07XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICAvLyDpnZnmgIHlhoXlrrnkvJrnvJPlrZjliLAgX3N0YXRpY1RyZWVzIOWGhe+8jOS4jeaUueeahOivneiOt+WPlueahOmdmeaAgeaVsOaNruWwseS4jeaYr+WGhemDqCBjb250ZXh0XG5cdCAgICAgICAgICBkYXRhLl9zdGF0aWNUcmVlcyA9IF9zZWxmLl9zdGF0aWNUcmVlcztcblx0ICAgICAgICAgIGRhdGEuJG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gX3NlbGYuJG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zO1xuXHQgICAgICAgICAgcmV0dXJuIF9zZWxmLmN1c3RvbVJlbmRlci5jYWxsKGRhdGEpO1xuXHQgICAgICAgIH07XG5cdCAgICAgIH0gZWxzZSBpZiAoX3NlbGYuJHNjb3BlZFNsb3RzLmRlZmF1bHQpIHtcblx0ICAgICAgICByZW5kZXJDZWxsID0gZnVuY3Rpb24gcmVuZGVyQ2VsbCgpIHtcblx0ICAgICAgICAgIHJldHVybiBfc2VsZi4kc2NvcGVkU2xvdHMuZGVmYXVsdChkYXRhKTtcblx0ICAgICAgICB9O1xuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKCFyZW5kZXJDZWxsKSB7XG5cdCAgICAgICAgcmVuZGVyQ2VsbCA9IERFRkFVTFRfUkVOREVSX0NFTEw7XG5cdCAgICAgIH1cblxuXHQgICAgICByZXR1cm4gX3NlbGYuc2hvd092ZXJmbG93VG9vbHRpcCB8fCBfc2VsZi5zaG93VG9vbHRpcFdoZW5PdmVyZmxvdyA/IGgoXG5cdCAgICAgICAgJ2RpdicsXG5cdCAgICAgICAgeyAnY2xhc3MnOiAnY2VsbCBlbC10b29sdGlwJywgc3R5bGU6ICd3aWR0aDonICsgKGRhdGEuY29sdW1uLnJlYWxXaWR0aCB8fCBkYXRhLmNvbHVtbi53aWR0aCkgKyAncHgnIH0sXG5cdCAgICAgICAgW3JlbmRlckNlbGwoaCwgZGF0YSldXG5cdCAgICAgICkgOiBoKFxuXHQgICAgICAgICdkaXYnLFxuXHQgICAgICAgIHsgJ2NsYXNzJzogJ2NlbGwnIH0sXG5cdCAgICAgICAgW3JlbmRlckNlbGwoaCwgZGF0YSldXG5cdCAgICAgICk7XG5cdCAgICB9O1xuXHQgIH0sXG5cdCAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG5cdCAgICBpZiAoIXRoaXMuJHBhcmVudCkgcmV0dXJuO1xuXHQgICAgdGhpcy5vd25lci5zdG9yZS5jb21taXQoJ3JlbW92ZUNvbHVtbicsIHRoaXMuY29sdW1uQ29uZmlnKTtcblx0ICB9LFxuXG5cblx0ICB3YXRjaDoge1xuXHQgICAgbGFiZWw6IGZ1bmN0aW9uIGxhYmVsKG5ld1ZhbCkge1xuXHQgICAgICBpZiAodGhpcy5jb2x1bW5Db25maWcpIHtcblx0ICAgICAgICB0aGlzLmNvbHVtbkNvbmZpZy5sYWJlbCA9IG5ld1ZhbDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHByb3A6IGZ1bmN0aW9uIHByb3AobmV3VmFsKSB7XG5cdCAgICAgIGlmICh0aGlzLmNvbHVtbkNvbmZpZykge1xuXHQgICAgICAgIHRoaXMuY29sdW1uQ29uZmlnLnByb3BlcnR5ID0gbmV3VmFsO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcHJvcGVydHk6IGZ1bmN0aW9uIHByb3BlcnR5KG5ld1ZhbCkge1xuXHQgICAgICBpZiAodGhpcy5jb2x1bW5Db25maWcpIHtcblx0ICAgICAgICB0aGlzLmNvbHVtbkNvbmZpZy5wcm9wZXJ0eSA9IG5ld1ZhbDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGZpbHRlcnM6IGZ1bmN0aW9uIGZpbHRlcnMobmV3VmFsKSB7XG5cdCAgICAgIGlmICh0aGlzLmNvbHVtbkNvbmZpZykge1xuXHQgICAgICAgIHRoaXMuY29sdW1uQ29uZmlnLmZpbHRlcnMgPSBuZXdWYWw7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBmaWx0ZXJNdWx0aXBsZTogZnVuY3Rpb24gZmlsdGVyTXVsdGlwbGUobmV3VmFsKSB7XG5cdCAgICAgIGlmICh0aGlzLmNvbHVtbkNvbmZpZykge1xuXHQgICAgICAgIHRoaXMuY29sdW1uQ29uZmlnLmZpbHRlck11bHRpcGxlID0gbmV3VmFsO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgYWxpZ246IGZ1bmN0aW9uIGFsaWduKG5ld1ZhbCkge1xuXHQgICAgICBpZiAodGhpcy5jb2x1bW5Db25maWcpIHtcblx0ICAgICAgICB0aGlzLmNvbHVtbkNvbmZpZy5hbGlnbiA9IG5ld1ZhbCA/ICdpcy0nICsgbmV3VmFsIDogbnVsbDtcblxuXHQgICAgICAgIGlmICghdGhpcy5oZWFkZXJBbGlnbikge1xuXHQgICAgICAgICAgdGhpcy5jb2x1bW5Db25maWcuaGVhZGVyQWxpZ24gPSBuZXdWYWwgPyAnaXMtJyArIG5ld1ZhbCA6IG51bGw7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaGVhZGVyQWxpZ246IGZ1bmN0aW9uIGhlYWRlckFsaWduKG5ld1ZhbCkge1xuXHQgICAgICBpZiAodGhpcy5jb2x1bW5Db25maWcpIHtcblx0ICAgICAgICB0aGlzLmNvbHVtbkNvbmZpZy5oZWFkZXJBbGlnbiA9ICdpcy0nICsgKG5ld1ZhbCA/IG5ld1ZhbCA6IHRoaXMuYWxpZ24pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgd2lkdGg6IGZ1bmN0aW9uIHdpZHRoKG5ld1ZhbCkge1xuXHQgICAgICBpZiAodGhpcy5jb2x1bW5Db25maWcpIHtcblx0ICAgICAgICB0aGlzLmNvbHVtbkNvbmZpZy53aWR0aCA9IG5ld1ZhbDtcblx0ICAgICAgICB0aGlzLm93bmVyLnN0b3JlLnNjaGVkdWxlTGF5b3V0KCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtaW5XaWR0aDogZnVuY3Rpb24gbWluV2lkdGgobmV3VmFsKSB7XG5cdCAgICAgIGlmICh0aGlzLmNvbHVtbkNvbmZpZykge1xuXHQgICAgICAgIHRoaXMuY29sdW1uQ29uZmlnLm1pbldpZHRoID0gbmV3VmFsO1xuXHQgICAgICAgIHRoaXMub3duZXIuc3RvcmUuc2NoZWR1bGVMYXlvdXQoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGZpeGVkOiBmdW5jdGlvbiBmaXhlZChuZXdWYWwpIHtcblx0ICAgICAgaWYgKHRoaXMuY29sdW1uQ29uZmlnKSB7XG5cdCAgICAgICAgdGhpcy5jb2x1bW5Db25maWcuZml4ZWQgPSBuZXdWYWw7XG5cdCAgICAgICAgdGhpcy5vd25lci5zdG9yZS5zY2hlZHVsZUxheW91dCgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc29ydGFibGU6IGZ1bmN0aW9uIHNvcnRhYmxlKG5ld1ZhbCkge1xuXHQgICAgICBpZiAodGhpcy5jb2x1bW5Db25maWcpIHtcblx0ICAgICAgICB0aGlzLmNvbHVtbkNvbmZpZy5zb3J0YWJsZSA9IG5ld1ZhbDtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdmFyIG93bmVyID0gdGhpcy5vd25lcjtcblx0ICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG5cdCAgICB2YXIgY29sdW1uSW5kZXggPSB2b2lkIDA7XG5cblx0ICAgIGlmICghdGhpcy5pc1N1YkNvbHVtbikge1xuXHQgICAgICBjb2x1bW5JbmRleCA9IFtdLmluZGV4T2YuY2FsbChwYXJlbnQuJHJlZnMuaGlkZGVuQ29sdW1ucy5jaGlsZHJlbiwgdGhpcy4kZWwpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgY29sdW1uSW5kZXggPSBbXS5pbmRleE9mLmNhbGwocGFyZW50LiRlbC5jaGlsZHJlbiwgdGhpcy4kZWwpO1xuXHQgICAgfVxuXG5cdCAgICBvd25lci5zdG9yZS5jb21taXQoJ2luc2VydENvbHVtbicsIHRoaXMuY29sdW1uQ29uZmlnLCBjb2x1bW5JbmRleCwgdGhpcy5pc1N1YkNvbHVtbiA/IHBhcmVudC5jb2x1bW5Db25maWcgOiBudWxsKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxNDkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfZGF0ZVBpY2tlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTUwKTtcblxuXHR2YXIgX2RhdGVQaWNrZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGF0ZVBpY2tlcik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfZGF0ZVBpY2tlcjIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gaW5zdGFsbChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9kYXRlUGlja2VyMi5kZWZhdWx0Lm5hbWUsIF9kYXRlUGlja2VyMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfZGF0ZVBpY2tlcjIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDE1MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9waWNrZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1MSk7XG5cblx0dmFyIF9waWNrZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGlja2VyKTtcblxuXHR2YXIgX2RhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Nik7XG5cblx0dmFyIF9kYXRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RhdGUpO1xuXG5cdHZhciBfZGF0ZVJhbmdlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzQpO1xuXG5cdHZhciBfZGF0ZVJhbmdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RhdGVSYW5nZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHR2YXIgZ2V0UGFuZWwgPSBmdW5jdGlvbiBnZXRQYW5lbCh0eXBlKSB7XG5cdCAgaWYgKHR5cGUgPT09ICdkYXRlcmFuZ2UnIHx8IHR5cGUgPT09ICdkYXRldGltZXJhbmdlJykge1xuXHQgICAgcmV0dXJuIF9kYXRlUmFuZ2UyLmRlZmF1bHQ7XG5cdCAgfVxuXHQgIHJldHVybiBfZGF0ZTIuZGVmYXVsdDtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbWl4aW5zOiBbX3BpY2tlcjIuZGVmYXVsdF0sXG5cblx0ICBuYW1lOiAnRWxEYXRlUGlja2VyJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICB0eXBlOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2RhdGUnXG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHdhdGNoOiB7XG5cdCAgICB0eXBlOiBmdW5jdGlvbiB0eXBlKF90eXBlKSB7XG5cdCAgICAgIGlmICh0aGlzLnBpY2tlcikge1xuXHQgICAgICAgIHRoaXMudW5tb3VudFBpY2tlcigpO1xuXHQgICAgICAgIHRoaXMucGFuZWwgPSBnZXRQYW5lbChfdHlwZSk7XG5cdCAgICAgICAgdGhpcy5tb3VudFBpY2tlcigpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMucGFuZWwgPSBnZXRQYW5lbChfdHlwZSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcblx0ICAgIHRoaXMucGFuZWwgPSBnZXRQYW5lbCh0aGlzLnR5cGUpO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDE1MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxNTIpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxNTUpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAxNTIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfdnVlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xuXG5cdHZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZSk7XG5cblx0dmFyIF9jbGlja291dHNpZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcblxuXHR2YXIgX2NsaWNrb3V0c2lkZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGlja291dHNpZGUpO1xuXG5cdHZhciBfdXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUzKTtcblxuXHR2YXIgX3Z1ZVBvcHBlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xuXG5cdHZhciBfdnVlUG9wcGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZVBvcHBlcik7XG5cblx0dmFyIF9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cblx0dmFyIF9lbWl0dGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VtaXR0ZXIpO1xuXG5cdHZhciBfaW5wdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcblxuXHR2YXIgX2lucHV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lucHV0KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0dmFyIE5ld1BvcHBlciA9IHtcblx0ICBwcm9wczoge1xuXHQgICAgYXBwZW5kVG9Cb2R5OiBfdnVlUG9wcGVyMi5kZWZhdWx0LnByb3BzLmFwcGVuZFRvQm9keSxcblx0ICAgIG9mZnNldDogX3Z1ZVBvcHBlcjIuZGVmYXVsdC5wcm9wcy5vZmZzZXQsXG5cdCAgICBib3VuZGFyaWVzUGFkZGluZzogX3Z1ZVBvcHBlcjIuZGVmYXVsdC5wcm9wcy5ib3VuZGFyaWVzUGFkZGluZ1xuXHQgIH0sXG5cdCAgbWV0aG9kczogX3Z1ZVBvcHBlcjIuZGVmYXVsdC5tZXRob2RzLFxuXHQgIGRhdGE6IF92dWVQb3BwZXIyLmRlZmF1bHQuZGF0YSxcblx0ICBiZWZvcmVEZXN0cm95OiBfdnVlUG9wcGVyMi5kZWZhdWx0LmJlZm9yZURlc3Ryb3lcblx0fTtcblxuXHR2YXIgREVGQVVMVF9GT1JNQVRTID0ge1xuXHQgIGRhdGU6ICd5eXl5LU1NLWRkJyxcblx0ICBtb250aDogJ3l5eXktTU0nLFxuXHQgIGRhdGV0aW1lOiAneXl5eS1NTS1kZCBISDptbTpzcycsXG5cdCAgdGltZTogJ0hIOm1tOnNzJyxcblx0ICB3ZWVrOiAneXl5eXdXVycsXG5cdCAgdGltZXJhbmdlOiAnSEg6bW06c3MnLFxuXHQgIGRhdGVyYW5nZTogJ3l5eXktTU0tZGQnLFxuXHQgIGRhdGV0aW1lcmFuZ2U6ICd5eXl5LU1NLWRkIEhIOm1tOnNzJyxcblx0ICB5ZWFyOiAneXl5eSdcblx0fTtcblx0dmFyIEhBVkVfVFJJR0dFUl9UWVBFUyA9IFsnZGF0ZScsICdkYXRldGltZScsICd0aW1lJywgJ3RpbWUtc2VsZWN0JywgJ3dlZWsnLCAnbW9udGgnLCAneWVhcicsICdkYXRlcmFuZ2UnLCAndGltZXJhbmdlJywgJ2RhdGV0aW1lcmFuZ2UnXTtcblx0dmFyIERBVEVfRk9STUFUVEVSID0gZnVuY3Rpb24gREFURV9GT1JNQVRURVIodmFsdWUsIGZvcm1hdCkge1xuXHQgIHJldHVybiAoMCwgX3V0aWwuZm9ybWF0RGF0ZSkodmFsdWUsIGZvcm1hdCk7XG5cdH07XG5cdHZhciBEQVRFX1BBUlNFUiA9IGZ1bmN0aW9uIERBVEVfUEFSU0VSKHRleHQsIGZvcm1hdCkge1xuXHQgIHJldHVybiAoMCwgX3V0aWwucGFyc2VEYXRlKSh0ZXh0LCBmb3JtYXQpO1xuXHR9O1xuXHR2YXIgUkFOR0VfRk9STUFUVEVSID0gZnVuY3Rpb24gUkFOR0VfRk9STUFUVEVSKHZhbHVlLCBmb3JtYXQsIHNlcGFyYXRvcikge1xuXHQgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDIpIHtcblx0ICAgIHZhciBzdGFydCA9IHZhbHVlWzBdO1xuXHQgICAgdmFyIGVuZCA9IHZhbHVlWzFdO1xuXG5cdCAgICBpZiAoc3RhcnQgJiYgZW5kKSB7XG5cdCAgICAgIHJldHVybiAoMCwgX3V0aWwuZm9ybWF0RGF0ZSkoc3RhcnQsIGZvcm1hdCkgKyBzZXBhcmF0b3IgKyAoMCwgX3V0aWwuZm9ybWF0RGF0ZSkoZW5kLCBmb3JtYXQpO1xuXHQgICAgfVxuXHQgIH1cblx0ICByZXR1cm4gJyc7XG5cdH07XG5cdHZhciBSQU5HRV9QQVJTRVIgPSBmdW5jdGlvbiBSQU5HRV9QQVJTRVIodGV4dCwgZm9ybWF0LCBzZXBhcmF0b3IpIHtcblx0ICB2YXIgYXJyYXkgPSB0ZXh0LnNwbGl0KHNlcGFyYXRvcik7XG5cdCAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMikge1xuXHQgICAgdmFyIHJhbmdlMSA9IGFycmF5WzBdO1xuXHQgICAgdmFyIHJhbmdlMiA9IGFycmF5WzFdO1xuXG5cdCAgICByZXR1cm4gWygwLCBfdXRpbC5wYXJzZURhdGUpKHJhbmdlMSwgZm9ybWF0KSwgKDAsIF91dGlsLnBhcnNlRGF0ZSkocmFuZ2UyLCBmb3JtYXQpXTtcblx0ICB9XG5cdCAgcmV0dXJuIFtdO1xuXHR9O1xuXHR2YXIgVFlQRV9WQUxVRV9SRVNPTFZFUl9NQVAgPSB7XG5cdCAgZGVmYXVsdDoge1xuXHQgICAgZm9ybWF0dGVyOiBmdW5jdGlvbiBmb3JtYXR0ZXIodmFsdWUpIHtcblx0ICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuXHQgICAgICByZXR1cm4gJycgKyB2YWx1ZTtcblx0ICAgIH0sXG5cdCAgICBwYXJzZXI6IGZ1bmN0aW9uIHBhcnNlcih0ZXh0KSB7XG5cdCAgICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQgfHwgdGV4dCA9PT0gJycpIHJldHVybiBudWxsO1xuXHQgICAgICByZXR1cm4gdGV4dDtcblx0ICAgIH1cblx0ICB9LFxuXHQgIHdlZWs6IHtcblx0ICAgIGZvcm1hdHRlcjogZnVuY3Rpb24gZm9ybWF0dGVyKHZhbHVlLCBmb3JtYXQpIHtcblx0ICAgICAgdmFyIGRhdGUgPSAoMCwgX3V0aWwuZm9ybWF0RGF0ZSkodmFsdWUsIGZvcm1hdCk7XG5cdCAgICAgIHZhciB3ZWVrID0gKDAsIF91dGlsLmdldFdlZWtOdW1iZXIpKHZhbHVlKTtcblxuXHQgICAgICBkYXRlID0gL1dXLy50ZXN0KGRhdGUpID8gZGF0ZS5yZXBsYWNlKC9XVy8sIHdlZWsgPCAxMCA/ICcwJyArIHdlZWsgOiB3ZWVrKSA6IGRhdGUucmVwbGFjZSgvVy8sIHdlZWspO1xuXHQgICAgICByZXR1cm4gZGF0ZTtcblx0ICAgIH0sXG5cdCAgICBwYXJzZXI6IGZ1bmN0aW9uIHBhcnNlcih0ZXh0KSB7XG5cdCAgICAgIHZhciBhcnJheSA9ICh0ZXh0IHx8ICcnKS5zcGxpdCgndycpO1xuXHQgICAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAyKSB7XG5cdCAgICAgICAgdmFyIHllYXIgPSBOdW1iZXIoYXJyYXlbMF0pO1xuXHQgICAgICAgIHZhciBtb250aCA9IE51bWJlcihhcnJheVsxXSk7XG5cblx0ICAgICAgICBpZiAoIWlzTmFOKHllYXIpICYmICFpc05hTihtb250aCkgJiYgbW9udGggPCA1NCkge1xuXHQgICAgICAgICAgcmV0dXJuIHRleHQ7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfVxuXHQgIH0sXG5cdCAgZGF0ZToge1xuXHQgICAgZm9ybWF0dGVyOiBEQVRFX0ZPUk1BVFRFUixcblx0ICAgIHBhcnNlcjogREFURV9QQVJTRVJcblx0ICB9LFxuXHQgIGRhdGV0aW1lOiB7XG5cdCAgICBmb3JtYXR0ZXI6IERBVEVfRk9STUFUVEVSLFxuXHQgICAgcGFyc2VyOiBEQVRFX1BBUlNFUlxuXHQgIH0sXG5cdCAgZGF0ZXJhbmdlOiB7XG5cdCAgICBmb3JtYXR0ZXI6IFJBTkdFX0ZPUk1BVFRFUixcblx0ICAgIHBhcnNlcjogUkFOR0VfUEFSU0VSXG5cdCAgfSxcblx0ICBkYXRldGltZXJhbmdlOiB7XG5cdCAgICBmb3JtYXR0ZXI6IFJBTkdFX0ZPUk1BVFRFUixcblx0ICAgIHBhcnNlcjogUkFOR0VfUEFSU0VSXG5cdCAgfSxcblx0ICB0aW1lcmFuZ2U6IHtcblx0ICAgIGZvcm1hdHRlcjogUkFOR0VfRk9STUFUVEVSLFxuXHQgICAgcGFyc2VyOiBSQU5HRV9QQVJTRVJcblx0ICB9LFxuXHQgIHRpbWU6IHtcblx0ICAgIGZvcm1hdHRlcjogREFURV9GT1JNQVRURVIsXG5cdCAgICBwYXJzZXI6IERBVEVfUEFSU0VSXG5cdCAgfSxcblx0ICBtb250aDoge1xuXHQgICAgZm9ybWF0dGVyOiBEQVRFX0ZPUk1BVFRFUixcblx0ICAgIHBhcnNlcjogREFURV9QQVJTRVJcblx0ICB9LFxuXHQgIHllYXI6IHtcblx0ICAgIGZvcm1hdHRlcjogREFURV9GT1JNQVRURVIsXG5cdCAgICBwYXJzZXI6IERBVEVfUEFSU0VSXG5cdCAgfSxcblx0ICBudW1iZXI6IHtcblx0ICAgIGZvcm1hdHRlcjogZnVuY3Rpb24gZm9ybWF0dGVyKHZhbHVlKSB7XG5cdCAgICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcblx0ICAgICAgcmV0dXJuICcnICsgdmFsdWU7XG5cdCAgICB9LFxuXHQgICAgcGFyc2VyOiBmdW5jdGlvbiBwYXJzZXIodGV4dCkge1xuXHQgICAgICB2YXIgcmVzdWx0ID0gTnVtYmVyKHRleHQpO1xuXG5cdCAgICAgIGlmICghaXNOYU4odGV4dCkpIHtcblx0ICAgICAgICByZXR1cm4gcmVzdWx0O1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHJldHVybiBudWxsO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXHR9O1xuXHR2YXIgUExBQ0VNRU5UX01BUCA9IHtcblx0ICBsZWZ0OiAnYm90dG9tLXN0YXJ0Jyxcblx0ICBjZW50ZXI6ICdib3R0b20nLFxuXHQgIHJpZ2h0OiAnYm90dG9tLWVuZCdcblx0fTtcblxuXHQvLyBvbmx5IGNvbnNpZGVycyBkYXRlLXBpY2tlcidzIHZhbHVlOiBEYXRlIG9yIFtEYXRlLCBEYXRlXVxuXHR2YXIgdmFsdWVFcXVhbHMgPSBmdW5jdGlvbiB2YWx1ZUVxdWFscyhhLCBiKSB7XG5cdCAgdmFyIGFJc0FycmF5ID0gYSBpbnN0YW5jZW9mIEFycmF5O1xuXHQgIHZhciBiSXNBcnJheSA9IGIgaW5zdGFuY2VvZiBBcnJheTtcblx0ICBpZiAoYUlzQXJyYXkgJiYgYklzQXJyYXkpIHtcblx0ICAgIHJldHVybiBuZXcgRGF0ZShhWzBdKS5nZXRUaW1lKCkgPT09IG5ldyBEYXRlKGJbMF0pLmdldFRpbWUoKSAmJiBuZXcgRGF0ZShhWzFdKS5nZXRUaW1lKCkgPT09IG5ldyBEYXRlKGJbMV0pLmdldFRpbWUoKTtcblx0ICB9XG5cdCAgaWYgKCFhSXNBcnJheSAmJiAhYklzQXJyYXkpIHtcblx0ICAgIHJldHVybiBuZXcgRGF0ZShhKS5nZXRUaW1lKCkgPT09IG5ldyBEYXRlKGIpLmdldFRpbWUoKTtcblx0ICB9XG5cdCAgcmV0dXJuIGZhbHNlO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBtaXhpbnM6IFtfZW1pdHRlcjIuZGVmYXVsdCwgTmV3UG9wcGVyXSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBzaXplOiBTdHJpbmcsXG5cdCAgICBmb3JtYXQ6IFN0cmluZyxcblx0ICAgIHJlYWRvbmx5OiBCb29sZWFuLFxuXHQgICAgcGxhY2Vob2xkZXI6IFN0cmluZyxcblx0ICAgIGRpc2FibGVkOiBCb29sZWFuLFxuXHQgICAgY2xlYXJhYmxlOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IHRydWVcblx0ICAgIH0sXG5cdCAgICBwb3BwZXJDbGFzczogU3RyaW5nLFxuXHQgICAgZWRpdGFibGU6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIGFsaWduOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2xlZnQnXG5cdCAgICB9LFxuXHQgICAgdmFsdWU6IHt9LFxuXHQgICAgZGVmYXVsdFZhbHVlOiB7fSxcblx0ICAgIHJhbmdlU2VwYXJhdG9yOiB7XG5cdCAgICAgIGRlZmF1bHQ6ICcgLSAnXG5cdCAgICB9LFxuXHQgICAgcGlja2VyT3B0aW9uczoge31cblx0ICB9LFxuXG5cdCAgY29tcG9uZW50czogeyBFbElucHV0OiBfaW5wdXQyLmRlZmF1bHQgfSxcblxuXHQgIGRpcmVjdGl2ZXM6IHsgQ2xpY2tvdXRzaWRlOiBfY2xpY2tvdXRzaWRlMi5kZWZhdWx0IH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgcGlja2VyVmlzaWJsZTogZmFsc2UsXG5cdCAgICAgIHNob3dDbG9zZTogZmFsc2UsXG5cdCAgICAgIGN1cnJlbnRWYWx1ZTogJycsXG5cdCAgICAgIHVud2F0Y2hQaWNrZXJPcHRpb25zOiBudWxsXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIHdhdGNoOiB7XG5cdCAgICBwaWNrZXJWaXNpYmxlOiBmdW5jdGlvbiBwaWNrZXJWaXNpYmxlKHZhbCkge1xuXHQgICAgICBpZiAoIXZhbCkgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmJsdXInKTtcblx0ICAgICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXHQgICAgICB2YWwgPyB0aGlzLnNob3dQaWNrZXIoKSA6IHRoaXMuaGlkZVBpY2tlcigpO1xuXHQgICAgfSxcblx0ICAgIGN1cnJlbnRWYWx1ZTogZnVuY3Rpb24gY3VycmVudFZhbHVlKHZhbCkge1xuXHQgICAgICBpZiAodmFsKSByZXR1cm47XG5cdCAgICAgIGlmICh0aGlzLnBpY2tlciAmJiB0eXBlb2YgdGhpcy5waWNrZXIuaGFuZGxlQ2xlYXIgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICB0aGlzLnBpY2tlci5oYW5kbGVDbGVhcigpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0Jyk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cblx0ICAgIHZhbHVlOiB7XG5cdCAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcblx0ICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWwpIHtcblx0ICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9ICgwLCBfdXRpbC5pc0RhdGUpKHZhbCkgPyBuZXcgRGF0ZSh2YWwpIDogdmFsO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZGlzcGxheVZhbHVlOiBmdW5jdGlvbiBkaXNwbGF5VmFsdWUodmFsKSB7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbCk7XG5cdCAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5jaGFuZ2UnKTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIHJlZmVyZW5jZTogZnVuY3Rpb24gcmVmZXJlbmNlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcmVmcy5yZWZlcmVuY2UuJGVsO1xuXHQgICAgfSxcblx0ICAgIHJlZklucHV0OiBmdW5jdGlvbiByZWZJbnB1dCgpIHtcblx0ICAgICAgaWYgKHRoaXMucmVmZXJlbmNlKSByZXR1cm4gdGhpcy5yZWZlcmVuY2UucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcblx0ICAgICAgcmV0dXJuIHt9O1xuXHQgICAgfSxcblx0ICAgIHZhbHVlSXNFbXB0eTogZnVuY3Rpb24gdmFsdWVJc0VtcHR5KCkge1xuXHQgICAgICB2YXIgdmFsID0gdGhpcy5jdXJyZW50VmFsdWU7XG5cdCAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICBpZiAodmFsW2ldKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgaWYgKHZhbCkge1xuXHQgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgIH0sXG5cdCAgICB0cmlnZ2VyQ2xhc3M6IGZ1bmN0aW9uIHRyaWdnZXJDbGFzcygpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMudHlwZS5pbmRleE9mKCd0aW1lJykgIT09IC0xID8gJ2VsLWljb24tdGltZScgOiAnZWwtaWNvbi1kYXRlJztcblx0ICAgIH0sXG5cdCAgICBzZWxlY3Rpb25Nb2RlOiBmdW5jdGlvbiBzZWxlY3Rpb25Nb2RlKCkge1xuXHQgICAgICBpZiAodGhpcy50eXBlID09PSAnd2VlaycpIHtcblx0ICAgICAgICByZXR1cm4gJ3dlZWsnO1xuXHQgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ21vbnRoJykge1xuXHQgICAgICAgIHJldHVybiAnbW9udGgnO1xuXHQgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ3llYXInKSB7XG5cdCAgICAgICAgcmV0dXJuICd5ZWFyJztcblx0ICAgICAgfVxuXG5cdCAgICAgIHJldHVybiAnZGF5Jztcblx0ICAgIH0sXG5cdCAgICBoYXZlVHJpZ2dlcjogZnVuY3Rpb24gaGF2ZVRyaWdnZXIoKSB7XG5cdCAgICAgIGlmICh0eXBlb2YgdGhpcy5zaG93VHJpZ2dlciAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5zaG93VHJpZ2dlcjtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gSEFWRV9UUklHR0VSX1RZUEVTLmluZGV4T2YodGhpcy50eXBlKSAhPT0gLTE7XG5cdCAgICB9LFxuXG5cblx0ICAgIGRpc3BsYXlWYWx1ZToge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcblx0ICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmN1cnJlbnRWYWx1ZTtcblx0ICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cdCAgICAgICAgdmFyIGZvcm1hdHRlciA9IChUWVBFX1ZBTFVFX1JFU09MVkVSX01BUFt0aGlzLnR5cGVdIHx8IFRZUEVfVkFMVUVfUkVTT0xWRVJfTUFQWydkZWZhdWx0J10pLmZvcm1hdHRlcjtcblx0ICAgICAgICB2YXIgZm9ybWF0ID0gREVGQVVMVF9GT1JNQVRTW3RoaXMudHlwZV07XG5cblx0ICAgICAgICByZXR1cm4gZm9ybWF0dGVyKHZhbHVlLCB0aGlzLmZvcm1hdCB8fCBmb3JtYXQsIHRoaXMucmFuZ2VTZXBhcmF0b3IpO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuXHQgICAgICAgIGlmICh2YWx1ZSkge1xuXHQgICAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cdCAgICAgICAgICB2YXIgcGFyc2VyID0gKFRZUEVfVkFMVUVfUkVTT0xWRVJfTUFQW3R5cGVdIHx8IFRZUEVfVkFMVUVfUkVTT0xWRVJfTUFQWydkZWZhdWx0J10pLnBhcnNlcjtcblx0ICAgICAgICAgIHZhciBwYXJzZWRWYWx1ZSA9IHBhcnNlcih2YWx1ZSwgdGhpcy5mb3JtYXQgfHwgREVGQVVMVF9GT1JNQVRTW3R5cGVdLCB0aGlzLnJhbmdlU2VwYXJhdG9yKTtcblxuXHQgICAgICAgICAgaWYgKHBhcnNlZFZhbHVlICYmIHRoaXMucGlja2VyKSB7XG5cdCAgICAgICAgICAgIHRoaXMucGlja2VyLnZhbHVlID0gcGFyc2VkVmFsdWU7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuXHQgICAgICAgICAgdGhpcy5waWNrZXIudmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy4kZm9yY2VVcGRhdGUoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgLy8gdnVlLXBvcHBlclxuXHQgICAgdGhpcy5wb3BwZXJPcHRpb25zID0ge1xuXHQgICAgICBib3VuZGFyaWVzUGFkZGluZzogMCxcblx0ICAgICAgZ3B1QWNjZWxlcmF0aW9uOiBmYWxzZVxuXHQgICAgfTtcblx0ICAgIHRoaXMucGxhY2VtZW50ID0gUExBQ0VNRU5UX01BUFt0aGlzLmFsaWduXSB8fCBQTEFDRU1FTlRfTUFQLmxlZnQ7XG5cdCAgfSxcblxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgaGFuZGxlTW91c2VFbnRlckljb246IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXJJY29uKCkge1xuXHQgICAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLmRpc2FibGVkKSByZXR1cm47XG5cdCAgICAgIGlmICghdGhpcy52YWx1ZUlzRW1wdHkgJiYgdGhpcy5jbGVhcmFibGUpIHtcblx0ICAgICAgICB0aGlzLnNob3dDbG9zZSA9IHRydWU7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDbGlja0ljb246IGZ1bmN0aW9uIGhhbmRsZUNsaWNrSWNvbigpIHtcblx0ICAgICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuXHQgICAgICBpZiAodGhpcy5zaG93Q2xvc2UpIHtcblx0ICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRoaXMuJG9wdGlvbnMuZGVmYXVsdFZhbHVlIHx8ICcnO1xuXHQgICAgICAgIHRoaXMuc2hvd0Nsb3NlID0gZmFsc2U7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5waWNrZXJWaXNpYmxlID0gIXRoaXMucGlja2VyVmlzaWJsZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGRhdGVDaGFuZ2VkOiBmdW5jdGlvbiBkYXRlQ2hhbmdlZChkYXRlQSwgZGF0ZUIpIHtcblx0ICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0ZUEpKSB7XG5cdCAgICAgICAgdmFyIGxlbiA9IGRhdGVBLmxlbmd0aDtcblx0ICAgICAgICBpZiAoIWRhdGVCKSByZXR1cm4gdHJ1ZTtcblx0ICAgICAgICB3aGlsZSAobGVuLS0pIHtcblx0ICAgICAgICAgIGlmICghKDAsIF91dGlsLmVxdWFsRGF0ZSkoZGF0ZUFbbGVuXSwgZGF0ZUJbbGVuXSkpIHJldHVybiB0cnVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBpZiAoISgwLCBfdXRpbC5lcXVhbERhdGUpKGRhdGVBLCBkYXRlQikpIHJldHVybiB0cnVlO1xuXHQgICAgICB9XG5cblx0ICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUNsb3NlOiBmdW5jdGlvbiBoYW5kbGVDbG9zZSgpIHtcblx0ICAgICAgdGhpcy5waWNrZXJWaXNpYmxlID0gZmFsc2U7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlRm9jdXM6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKCkge1xuXHQgICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHQgICAgICBpZiAoSEFWRV9UUklHR0VSX1RZUEVTLmluZGV4T2YodHlwZSkgIT09IC0xICYmICF0aGlzLnBpY2tlclZpc2libGUpIHtcblx0ICAgICAgICB0aGlzLnBpY2tlclZpc2libGUgPSB0cnVlO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2ZvY3VzJywgdGhpcyk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cigpIHtcblx0ICAgICAgdGhpcy4kZW1pdCgnYmx1cicsIHRoaXMpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUtleWRvd246IGZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZXZlbnQpIHtcblx0ICAgICAgdmFyIGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuXG5cdCAgICAgIC8vIFRBQiBvciBFU0Ncblx0ICAgICAgaWYgKGtleUNvZGUgPT09IDkgfHwga2V5Q29kZSA9PT0gMjcpIHtcblx0ICAgICAgICB0aGlzLnBpY2tlclZpc2libGUgPSBmYWxzZTtcblx0ICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGhpZGVQaWNrZXI6IGZ1bmN0aW9uIGhpZGVQaWNrZXIoKSB7XG5cdCAgICAgIGlmICh0aGlzLnBpY2tlcikge1xuXHQgICAgICAgIHRoaXMucGlja2VyLnJlc2V0VmlldyAmJiB0aGlzLnBpY2tlci5yZXNldFZpZXcoKTtcblx0ICAgICAgICB0aGlzLnBpY2tlclZpc2libGUgPSB0aGlzLnBpY2tlci52aXNpYmxlID0gZmFsc2U7XG5cdCAgICAgICAgdGhpcy5kZXN0cm95UG9wcGVyKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzaG93UGlja2VyOiBmdW5jdGlvbiBzaG93UGlja2VyKCkge1xuXHQgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuXHQgICAgICBpZiAoIXRoaXMucGlja2VyKSB7XG5cdCAgICAgICAgdGhpcy5tb3VudFBpY2tlcigpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMucGlja2VyVmlzaWJsZSA9IHRoaXMucGlja2VyLnZpc2libGUgPSB0cnVlO1xuXG5cdCAgICAgIHRoaXMudXBkYXRlUG9wcGVyKCk7XG5cblx0ICAgICAgaWYgKHRoaXMuY3VycmVudFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuXHQgICAgICAgIHRoaXMucGlja2VyLmRhdGUgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRWYWx1ZS5nZXRUaW1lKCkpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMucGlja2VyLnZhbHVlID0gdGhpcy5jdXJyZW50VmFsdWU7XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5waWNrZXIucmVzZXRWaWV3ICYmIHRoaXMucGlja2VyLnJlc2V0VmlldygpO1xuXG5cdCAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBfdGhpcy5waWNrZXIuYWp1c3RTY3JvbGxUb3AgJiYgX3RoaXMucGlja2VyLmFqdXN0U2Nyb2xsVG9wKCk7XG5cdCAgICAgIH0pO1xuXHQgICAgfSxcblx0ICAgIG1vdW50UGlja2VyOiBmdW5jdGlvbiBtb3VudFBpY2tlcigpIHtcblx0ICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cblx0ICAgICAgdGhpcy5wYW5lbC5kZWZhdWx0VmFsdWUgPSB0aGlzLmRlZmF1bHRWYWx1ZSB8fCB0aGlzLmN1cnJlbnRWYWx1ZTtcblx0ICAgICAgdGhpcy5waWNrZXIgPSBuZXcgX3Z1ZTIuZGVmYXVsdCh0aGlzLnBhbmVsKS4kbW91bnQoKTtcblx0ICAgICAgdGhpcy5waWNrZXIucG9wcGVyQ2xhc3MgPSB0aGlzLnBvcHBlckNsYXNzO1xuXHQgICAgICB0aGlzLnBvcHBlckVsbSA9IHRoaXMucGlja2VyLiRlbDtcblx0ICAgICAgdGhpcy5waWNrZXIud2lkdGggPSB0aGlzLnJlZmVyZW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblx0ICAgICAgdGhpcy5waWNrZXIuc2hvd1RpbWUgPSB0aGlzLnR5cGUgPT09ICdkYXRldGltZScgfHwgdGhpcy50eXBlID09PSAnZGF0ZXRpbWVyYW5nZSc7XG5cdCAgICAgIHRoaXMucGlja2VyLnNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlbGVjdGlvbk1vZGU7XG5cdCAgICAgIGlmICh0aGlzLmZvcm1hdCkge1xuXHQgICAgICAgIHRoaXMucGlja2VyLmZvcm1hdCA9IHRoaXMuZm9ybWF0O1xuXHQgICAgICB9XG5cblx0ICAgICAgdmFyIHVwZGF0ZU9wdGlvbnMgPSBmdW5jdGlvbiB1cGRhdGVPcHRpb25zKCkge1xuXHQgICAgICAgIHZhciBvcHRpb25zID0gX3RoaXMyLnBpY2tlck9wdGlvbnM7XG5cblx0ICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNlbGVjdGFibGVSYW5nZSkge1xuXHQgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHJhbmdlcyA9IG9wdGlvbnMuc2VsZWN0YWJsZVJhbmdlO1xuXHQgICAgICAgICAgICB2YXIgcGFyc2VyID0gVFlQRV9WQUxVRV9SRVNPTFZFUl9NQVAuZGF0ZXRpbWVyYW5nZS5wYXJzZXI7XG5cdCAgICAgICAgICAgIHZhciBmb3JtYXQgPSBERUZBVUxUX0ZPUk1BVFMudGltZXJhbmdlO1xuXG5cdCAgICAgICAgICAgIHJhbmdlcyA9IEFycmF5LmlzQXJyYXkocmFuZ2VzKSA/IHJhbmdlcyA6IFtyYW5nZXNdO1xuXHQgICAgICAgICAgICBfdGhpczIucGlja2VyLnNlbGVjdGFibGVSYW5nZSA9IHJhbmdlcy5tYXAoZnVuY3Rpb24gKHJhbmdlKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlcihyYW5nZSwgZm9ybWF0LCBfdGhpczIucmFuZ2VTZXBhcmF0b3IpO1xuXHQgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgIH0pKCk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcblx0ICAgICAgICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG9wdGlvbikgJiZcblx0ICAgICAgICAgIC8vIOW/veeVpSB0aW1lLXBpY2tlciDnmoTor6XphY3nva7poblcblx0ICAgICAgICAgIG9wdGlvbiAhPT0gJ3NlbGVjdGFibGVSYW5nZScpIHtcblx0ICAgICAgICAgICAgX3RoaXMyLnBpY2tlcltvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfTtcblx0ICAgICAgdXBkYXRlT3B0aW9ucygpO1xuXHQgICAgICB0aGlzLnVud2F0Y2hQaWNrZXJPcHRpb25zID0gdGhpcy4kd2F0Y2goJ3BpY2tlck9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIHVwZGF0ZU9wdGlvbnMoKTtcblx0ICAgICAgfSwgeyBkZWVwOiB0cnVlIH0pO1xuXG5cdCAgICAgIHRoaXMuJGVsLmFwcGVuZENoaWxkKHRoaXMucGlja2VyLiRlbCk7XG5cdCAgICAgIHRoaXMucGlja2VyLnJlc2V0VmlldyAmJiB0aGlzLnBpY2tlci5yZXNldFZpZXcoKTtcblxuXHQgICAgICB0aGlzLnBpY2tlci4kb24oJ2RvZGVzdHJveScsIHRoaXMuZG9EZXN0cm95KTtcblx0ICAgICAgdGhpcy5waWNrZXIuJG9uKCdwaWNrJywgZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcblx0ICAgICAgICB2YXIgdmlzaWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG5cblx0ICAgICAgICAvLyBkbyBub3QgZW1pdCBpZiB2YWx1ZXMgYXJlIHNhbWVcblx0ICAgICAgICBpZiAoIXZhbHVlRXF1YWxzKF90aGlzMi52YWx1ZSwgZGF0ZSkpIHtcblx0ICAgICAgICAgIF90aGlzMi4kZW1pdCgnaW5wdXQnLCBkYXRlKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgX3RoaXMyLnBpY2tlclZpc2libGUgPSBfdGhpczIucGlja2VyLnZpc2libGUgPSB2aXNpYmxlO1xuXHQgICAgICAgIF90aGlzMi5waWNrZXIucmVzZXRWaWV3ICYmIF90aGlzMi5waWNrZXIucmVzZXRWaWV3KCk7XG5cdCAgICAgIH0pO1xuXG5cdCAgICAgIHRoaXMucGlja2VyLiRvbignc2VsZWN0LXJhbmdlJywgZnVuY3Rpb24gKHN0YXJ0LCBlbmQpIHtcblx0ICAgICAgICBfdGhpczIucmVmSW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7XG5cdCAgICAgICAgX3RoaXMyLnJlZklucHV0LmZvY3VzKCk7XG5cdCAgICAgIH0pO1xuXHQgICAgfSxcblx0ICAgIHVubW91bnRQaWNrZXI6IGZ1bmN0aW9uIHVubW91bnRQaWNrZXIoKSB7XG5cdCAgICAgIGlmICh0aGlzLnBpY2tlcikge1xuXHQgICAgICAgIHRoaXMucGlja2VyLiRkZXN0cm95KCk7XG5cdCAgICAgICAgdGhpcy5waWNrZXIuJG9mZigpO1xuXHQgICAgICAgIGlmICh0eXBlb2YgdGhpcy51bndhdGNoUGlja2VyT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgdGhpcy51bndhdGNoUGlja2VyT3B0aW9ucygpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnBpY2tlci4kZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBpY2tlci4kZWwpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMTUzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy5saW1pdFJhbmdlID0gZXhwb3J0cy5nZXRSYW5nZUhvdXJzID0gZXhwb3J0cy5uZXh0TW9udGggPSBleHBvcnRzLnByZXZNb250aCA9IGV4cG9ydHMuZ2V0V2Vla051bWJlciA9IGV4cG9ydHMuZ2V0U3RhcnREYXRlT2ZNb250aCA9IGV4cG9ydHMuREFZX0RVUkFUSU9OID0gZXhwb3J0cy5nZXRGaXJzdERheU9mTW9udGggPSBleHBvcnRzLmdldERheUNvdW50T2ZNb250aCA9IGV4cG9ydHMucGFyc2VEYXRlID0gZXhwb3J0cy5mb3JtYXREYXRlID0gZXhwb3J0cy5pc0RhdGUgPSBleHBvcnRzLnRvRGF0ZSA9IGV4cG9ydHMuZXF1YWxEYXRlID0gdW5kZWZpbmVkO1xuXG5cdHZhciBfZGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTU0KTtcblxuXHR2YXIgX2RhdGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGF0ZSk7XG5cblx0dmFyIF9sb2NhbGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHR2YXIgd2Vla3MgPSBbJ3N1bicsICdtb24nLCAndHVlJywgJ3dlZCcsICd0aHUnLCAnZnJpJywgJ3NhdCddO1xuXHR2YXIgbW9udGhzID0gWydqYW4nLCAnZmViJywgJ21hcicsICdhcHInLCAnbWF5JywgJ2p1bicsICdqdWwnLCAnYXVnJywgJ3NlcCcsICdvY3QnLCAnbm92JywgJ2RlYyddO1xuXHR2YXIgZ2V0STE4blNldHRpbmdzID0gZnVuY3Rpb24gZ2V0STE4blNldHRpbmdzKCkge1xuXHQgIHJldHVybiB7XG5cdCAgICBkYXlOYW1lc1Nob3J0OiB3ZWVrcy5tYXAoZnVuY3Rpb24gKHdlZWspIHtcblx0ICAgICAgcmV0dXJuICgwLCBfbG9jYWxlLnQpKCdlbC5kYXRlcGlja2VyLndlZWtzLicgKyB3ZWVrKTtcblx0ICAgIH0pLFxuXHQgICAgZGF5TmFtZXM6IHdlZWtzLm1hcChmdW5jdGlvbiAod2Vlaykge1xuXHQgICAgICByZXR1cm4gKDAsIF9sb2NhbGUudCkoJ2VsLmRhdGVwaWNrZXIud2Vla3MuJyArIHdlZWspO1xuXHQgICAgfSksXG5cdCAgICBtb250aE5hbWVzU2hvcnQ6IG1vbnRocy5tYXAoZnVuY3Rpb24gKG1vbnRoKSB7XG5cdCAgICAgIHJldHVybiAoMCwgX2xvY2FsZS50KSgnZWwuZGF0ZXBpY2tlci5tb250aHMuJyArIG1vbnRoKTtcblx0ICAgIH0pLFxuXHQgICAgbW9udGhOYW1lczogbW9udGhzLm1hcChmdW5jdGlvbiAobW9udGgsIGluZGV4KSB7XG5cdCAgICAgIHJldHVybiAoMCwgX2xvY2FsZS50KSgnZWwuZGF0ZXBpY2tlci5tb250aCcgKyAoaW5kZXggKyAxKSk7XG5cdCAgICB9KSxcblx0ICAgIGFtUG06IFsnYW0nLCAncG0nXVxuXHQgIH07XG5cdH07XG5cblx0dmFyIG5ld0FycmF5ID0gZnVuY3Rpb24gbmV3QXJyYXkoc3RhcnQsIGVuZCkge1xuXHQgIHZhciByZXN1bHQgPSBbXTtcblx0ICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcblx0ICAgIHJlc3VsdC5wdXNoKGkpO1xuXHQgIH1cblx0ICByZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdHZhciBlcXVhbERhdGUgPSBleHBvcnRzLmVxdWFsRGF0ZSA9IGZ1bmN0aW9uIGVxdWFsRGF0ZShkYXRlQSwgZGF0ZUIpIHtcblx0ICByZXR1cm4gZGF0ZUEgPT09IGRhdGVCIHx8IG5ldyBEYXRlKGRhdGVBKS5nZXRUaW1lKCkgPT09IG5ldyBEYXRlKGRhdGVCKS5nZXRUaW1lKCk7XG5cdH07XG5cblx0dmFyIHRvRGF0ZSA9IGV4cG9ydHMudG9EYXRlID0gZnVuY3Rpb24gdG9EYXRlKGRhdGUpIHtcblx0ICByZXR1cm4gaXNEYXRlKGRhdGUpID8gbmV3IERhdGUoZGF0ZSkgOiBudWxsO1xuXHR9O1xuXG5cdHZhciBpc0RhdGUgPSBleHBvcnRzLmlzRGF0ZSA9IGZ1bmN0aW9uIGlzRGF0ZShkYXRlKSB7XG5cdCAgaWYgKGRhdGUgPT09IG51bGwgfHwgZGF0ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG5cdCAgaWYgKGlzTmFOKG5ldyBEYXRlKGRhdGUpLmdldFRpbWUoKSkpIHJldHVybiBmYWxzZTtcblx0ICByZXR1cm4gdHJ1ZTtcblx0fTtcblxuXHR2YXIgZm9ybWF0RGF0ZSA9IGV4cG9ydHMuZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZSwgZm9ybWF0KSB7XG5cdCAgZGF0ZSA9IHRvRGF0ZShkYXRlKTtcblx0ICBpZiAoIWRhdGUpIHJldHVybiAnJztcblx0ICByZXR1cm4gX2RhdGUyLmRlZmF1bHQuZm9ybWF0KGRhdGUsIGZvcm1hdCB8fCAneXl5eS1NTS1kZCcsIGdldEkxOG5TZXR0aW5ncygpKTtcblx0fTtcblxuXHR2YXIgcGFyc2VEYXRlID0gZXhwb3J0cy5wYXJzZURhdGUgPSBmdW5jdGlvbiBwYXJzZURhdGUoc3RyaW5nLCBmb3JtYXQpIHtcblx0ICByZXR1cm4gX2RhdGUyLmRlZmF1bHQucGFyc2Uoc3RyaW5nLCBmb3JtYXQgfHwgJ3l5eXktTU0tZGQnLCBnZXRJMThuU2V0dGluZ3MoKSk7XG5cdH07XG5cblx0dmFyIGdldERheUNvdW50T2ZNb250aCA9IGV4cG9ydHMuZ2V0RGF5Q291bnRPZk1vbnRoID0gZnVuY3Rpb24gZ2V0RGF5Q291bnRPZk1vbnRoKHllYXIsIG1vbnRoKSB7XG5cdCAgaWYgKG1vbnRoID09PSAzIHx8IG1vbnRoID09PSA1IHx8IG1vbnRoID09PSA4IHx8IG1vbnRoID09PSAxMCkge1xuXHQgICAgcmV0dXJuIDMwO1xuXHQgIH1cblxuXHQgIGlmIChtb250aCA9PT0gMSkge1xuXHQgICAgaWYgKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCkge1xuXHQgICAgICByZXR1cm4gMjk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gMjg7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcmV0dXJuIDMxO1xuXHR9O1xuXG5cdHZhciBnZXRGaXJzdERheU9mTW9udGggPSBleHBvcnRzLmdldEZpcnN0RGF5T2ZNb250aCA9IGZ1bmN0aW9uIGdldEZpcnN0RGF5T2ZNb250aChkYXRlKSB7XG5cdCAgdmFyIHRlbXAgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG5cdCAgdGVtcC5zZXREYXRlKDEpO1xuXHQgIHJldHVybiB0ZW1wLmdldERheSgpO1xuXHR9O1xuXG5cdHZhciBEQVlfRFVSQVRJT04gPSBleHBvcnRzLkRBWV9EVVJBVElPTiA9IDg2NDAwMDAwO1xuXG5cdHZhciBnZXRTdGFydERhdGVPZk1vbnRoID0gZXhwb3J0cy5nZXRTdGFydERhdGVPZk1vbnRoID0gZnVuY3Rpb24gZ2V0U3RhcnREYXRlT2ZNb250aCh5ZWFyLCBtb250aCkge1xuXHQgIHZhciByZXN1bHQgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7XG5cdCAgdmFyIGRheSA9IHJlc3VsdC5nZXREYXkoKTtcblxuXHQgIGlmIChkYXkgPT09IDApIHtcblx0ICAgIHJlc3VsdC5zZXRUaW1lKHJlc3VsdC5nZXRUaW1lKCkgLSBEQVlfRFVSQVRJT04gKiA3KTtcblx0ICB9IGVsc2Uge1xuXHQgICAgcmVzdWx0LnNldFRpbWUocmVzdWx0LmdldFRpbWUoKSAtIERBWV9EVVJBVElPTiAqIGRheSk7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHJlc3VsdDtcblx0fTtcblxuXHR2YXIgZ2V0V2Vla051bWJlciA9IGV4cG9ydHMuZ2V0V2Vla051bWJlciA9IGZ1bmN0aW9uIGdldFdlZWtOdW1iZXIoc3JjKSB7XG5cdCAgdmFyIGRhdGUgPSBuZXcgRGF0ZShzcmMuZ2V0VGltZSgpKTtcblx0ICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuXHQgIC8vIFRodXJzZGF5IGluIGN1cnJlbnQgd2VlayBkZWNpZGVzIHRoZSB5ZWFyLlxuXHQgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDMgLSAoZGF0ZS5nZXREYXkoKSArIDYpICUgNyk7XG5cdCAgLy8gSmFudWFyeSA0IGlzIGFsd2F5cyBpbiB3ZWVrIDEuXG5cdCAgdmFyIHdlZWsxID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCA0KTtcblx0ICAvLyBBZGp1c3QgdG8gVGh1cnNkYXkgaW4gd2VlayAxIGFuZCBjb3VudCBudW1iZXIgb2Ygd2Vla3MgZnJvbSBkYXRlIHRvIHdlZWsgMS5cblx0ICByZXR1cm4gMSArIE1hdGgucm91bmQoKChkYXRlLmdldFRpbWUoKSAtIHdlZWsxLmdldFRpbWUoKSkgLyA4NjQwMDAwMCAtIDMgKyAod2VlazEuZ2V0RGF5KCkgKyA2KSAlIDcpIC8gNyk7XG5cdH07XG5cblx0dmFyIHByZXZNb250aCA9IGV4cG9ydHMucHJldk1vbnRoID0gZnVuY3Rpb24gcHJldk1vbnRoKHNyYykge1xuXHQgIHZhciB5ZWFyID0gc3JjLmdldEZ1bGxZZWFyKCk7XG5cdCAgdmFyIG1vbnRoID0gc3JjLmdldE1vbnRoKCk7XG5cdCAgdmFyIGRhdGUgPSBzcmMuZ2V0RGF0ZSgpO1xuXG5cdCAgdmFyIG5ld1llYXIgPSBtb250aCA9PT0gMCA/IHllYXIgLSAxIDogeWVhcjtcblx0ICB2YXIgbmV3TW9udGggPSBtb250aCA9PT0gMCA/IDExIDogbW9udGggLSAxO1xuXG5cdCAgdmFyIG5ld01vbnRoRGF5Q291bnQgPSBnZXREYXlDb3VudE9mTW9udGgobmV3WWVhciwgbmV3TW9udGgpO1xuXHQgIGlmIChuZXdNb250aERheUNvdW50IDwgZGF0ZSkge1xuXHQgICAgc3JjLnNldERhdGUobmV3TW9udGhEYXlDb3VudCk7XG5cdCAgfVxuXG5cdCAgc3JjLnNldE1vbnRoKG5ld01vbnRoKTtcblx0ICBzcmMuc2V0RnVsbFllYXIobmV3WWVhcik7XG5cblx0ICByZXR1cm4gbmV3IERhdGUoc3JjLmdldFRpbWUoKSk7XG5cdH07XG5cblx0dmFyIG5leHRNb250aCA9IGV4cG9ydHMubmV4dE1vbnRoID0gZnVuY3Rpb24gbmV4dE1vbnRoKHNyYykge1xuXHQgIHZhciB5ZWFyID0gc3JjLmdldEZ1bGxZZWFyKCk7XG5cdCAgdmFyIG1vbnRoID0gc3JjLmdldE1vbnRoKCk7XG5cdCAgdmFyIGRhdGUgPSBzcmMuZ2V0RGF0ZSgpO1xuXG5cdCAgdmFyIG5ld1llYXIgPSBtb250aCA9PT0gMTEgPyB5ZWFyICsgMSA6IHllYXI7XG5cdCAgdmFyIG5ld01vbnRoID0gbW9udGggPT09IDExID8gMCA6IG1vbnRoICsgMTtcblxuXHQgIHZhciBuZXdNb250aERheUNvdW50ID0gZ2V0RGF5Q291bnRPZk1vbnRoKG5ld1llYXIsIG5ld01vbnRoKTtcblx0ICBpZiAobmV3TW9udGhEYXlDb3VudCA8IGRhdGUpIHtcblx0ICAgIHNyYy5zZXREYXRlKG5ld01vbnRoRGF5Q291bnQpO1xuXHQgIH1cblxuXHQgIHNyYy5zZXRNb250aChuZXdNb250aCk7XG5cdCAgc3JjLnNldEZ1bGxZZWFyKG5ld1llYXIpO1xuXG5cdCAgcmV0dXJuIG5ldyBEYXRlKHNyYy5nZXRUaW1lKCkpO1xuXHR9O1xuXG5cdHZhciBnZXRSYW5nZUhvdXJzID0gZXhwb3J0cy5nZXRSYW5nZUhvdXJzID0gZnVuY3Rpb24gZ2V0UmFuZ2VIb3VycyhyYW5nZXMpIHtcblx0ICB2YXIgaG91cnMgPSBbXTtcblx0ICB2YXIgZGlzYWJsZWRIb3VycyA9IFtdO1xuXG5cdCAgKHJhbmdlcyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAocmFuZ2UpIHtcblx0ICAgIHZhciB2YWx1ZSA9IHJhbmdlLm1hcChmdW5jdGlvbiAoZGF0ZSkge1xuXHQgICAgICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xuXHQgICAgfSk7XG5cblx0ICAgIGRpc2FibGVkSG91cnMgPSBkaXNhYmxlZEhvdXJzLmNvbmNhdChuZXdBcnJheSh2YWx1ZVswXSwgdmFsdWVbMV0pKTtcblx0ICB9KTtcblxuXHQgIGlmIChkaXNhYmxlZEhvdXJzLmxlbmd0aCkge1xuXHQgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG5cdCAgICAgIGhvdXJzW2ldID0gZGlzYWJsZWRIb3Vycy5pbmRleE9mKGkpID09PSAtMTtcblx0ICAgIH1cblx0ICB9IGVsc2Uge1xuXHQgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IDI0OyBfaSsrKSB7XG5cdCAgICAgIGhvdXJzW19pXSA9IGZhbHNlO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIHJldHVybiBob3Vycztcblx0fTtcblxuXHR2YXIgbGltaXRSYW5nZSA9IGV4cG9ydHMubGltaXRSYW5nZSA9IGZ1bmN0aW9uIGxpbWl0UmFuZ2UoZGF0ZSwgcmFuZ2VzKSB7XG5cdCAgdmFyIGZvcm1hdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJ3l5eXktTU0tZGQgSEg6bW06c3MnO1xuXG5cdCAgaWYgKCFyYW5nZXMgfHwgIXJhbmdlcy5sZW5ndGgpIHJldHVybiBkYXRlO1xuXG5cdCAgdmFyIGxlbiA9IHJhbmdlcy5sZW5ndGg7XG5cblx0ICBkYXRlID0gX2RhdGUyLmRlZmF1bHQucGFyc2UoX2RhdGUyLmRlZmF1bHQuZm9ybWF0KGRhdGUsIGZvcm1hdCksIGZvcm1hdCk7XG5cdCAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHQgICAgdmFyIHJhbmdlID0gcmFuZ2VzW2ldO1xuXHQgICAgaWYgKGRhdGUgPj0gcmFuZ2VbMF0gJiYgZGF0ZSA8PSByYW5nZVsxXSkge1xuXHQgICAgICByZXR1cm4gZGF0ZTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICB2YXIgbWF4RGF0ZSA9IHJhbmdlc1swXVswXTtcblx0ICB2YXIgbWluRGF0ZSA9IHJhbmdlc1swXVswXTtcblxuXHQgIHJhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uIChyYW5nZSkge1xuXHQgICAgbWluRGF0ZSA9IG5ldyBEYXRlKE1hdGgubWluKHJhbmdlWzBdLCBtaW5EYXRlKSk7XG5cdCAgICBtYXhEYXRlID0gbmV3IERhdGUoTWF0aC5tYXgocmFuZ2VbMV0sIG1heERhdGUpKTtcblx0ICB9KTtcblxuXHQgIHJldHVybiBkYXRlIDwgbWluRGF0ZSA/IG1pbkRhdGUgOiBtYXhEYXRlO1xuXHR9O1xuXG4vKioqLyB9LFxuLyogMTU0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9kYXRlXCIpO1xuXG4vKioqLyB9LFxuLyogMTU1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnZWwtaW5wdXQnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcImNsaWNrb3V0c2lkZVwiLFxuXHQgICAgICByYXdOYW1lOiBcInYtY2xpY2tvdXRzaWRlXCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLmhhbmRsZUNsb3NlKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJoYW5kbGVDbG9zZVwiXG5cdCAgICB9XSxcblx0ICAgIHJlZjogXCJyZWZlcmVuY2VcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtZWRpdG9yXCIsXG5cdCAgICBjbGFzczogJ2VsLWRhdGUtZWRpdG9yLS0nICsgX3ZtLnR5cGUsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInJlYWRvbmx5XCI6ICFfdm0uZWRpdGFibGUgfHwgX3ZtLnJlYWRvbmx5LFxuXHQgICAgICBcImRpc2FibGVkXCI6IF92bS5kaXNhYmxlZCxcblx0ICAgICAgXCJzaXplXCI6IF92bS5zaXplLFxuXHQgICAgICBcInBsYWNlaG9sZGVyXCI6IF92bS5wbGFjZWhvbGRlcixcblx0ICAgICAgXCJ2YWx1ZVwiOiBfdm0uZGlzcGxheVZhbHVlLFxuXHQgICAgICBcInZhbGlkYXRlRXZlbnRcIjogZmFsc2Vcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImZvY3VzXCI6IF92bS5oYW5kbGVGb2N1cyxcblx0ICAgICAgXCJibHVyXCI6IF92bS5oYW5kbGVCbHVyXG5cdCAgICB9LFxuXHQgICAgbmF0aXZlT246IHtcblx0ICAgICAgXCJrZXlkb3duXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5oYW5kbGVLZXlkb3duKCRldmVudClcblx0ICAgICAgfSxcblx0ICAgICAgXCJjaGFuZ2VcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmRpc3BsYXlWYWx1ZSA9ICRldmVudC50YXJnZXQudmFsdWVcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFsoX3ZtLmhhdmVUcmlnZ2VyKSA/IF9jKCdpJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2ljb25cIixcblx0ICAgIGNsYXNzOiBbX3ZtLnNob3dDbG9zZSA/ICdlbC1pY29uLWNsb3NlJyA6IF92bS50cmlnZ2VyQ2xhc3NdLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0uaGFuZGxlQ2xpY2tJY29uLFxuXHQgICAgICBcIm1vdXNlZW50ZXJcIjogX3ZtLmhhbmRsZU1vdXNlRW50ZXJJY29uLFxuXHQgICAgICBcIm1vdXNlbGVhdmVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLnNob3dDbG9zZSA9IGZhbHNlXG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzbG90OiBcImljb25cIlxuXHQgIH0pIDogX3ZtLl9lKCldKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAxNTYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTU3KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTczKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMTU3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Myk7XG5cblx0dmFyIF9sb2NhbGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcblxuXHR2YXIgX2xvY2FsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sb2NhbGUpO1xuXG5cdHZhciBfaW5wdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcblxuXHR2YXIgX2lucHV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lucHV0KTtcblxuXHR2YXIgX3RpbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1OCk7XG5cblx0dmFyIF90aW1lMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3RpbWUpO1xuXG5cdHZhciBfeWVhclRhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjQpO1xuXG5cdHZhciBfeWVhclRhYmxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3llYXJUYWJsZSk7XG5cblx0dmFyIF9tb250aFRhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjcpO1xuXG5cdHZhciBfbW9udGhUYWJsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tb250aFRhYmxlKTtcblxuXHR2YXIgX2RhdGVUYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwKTtcblxuXHR2YXIgX2RhdGVUYWJsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kYXRlVGFibGUpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG1peGluczogW19sb2NhbGUyLmRlZmF1bHRdLFxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgIHNob3dUaW1lOiBmdW5jdGlvbiBzaG93VGltZSh2YWwpIHtcblx0ICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cblx0ICAgICAgaWYgKCF2YWwpIHJldHVybjtcblx0ICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcblx0ICAgICAgICB2YXIgaW5wdXRFbG0gPSBfdGhpcy4kcmVmcy5pbnB1dC4kZWw7XG5cdCAgICAgICAgaWYgKGlucHV0RWxtKSB7XG5cdCAgICAgICAgICBfdGhpcy5waWNrZXJXaWR0aCA9IGlucHV0RWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICsgMTA7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgIH0sXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUobmV3VmFsKSB7XG5cdCAgICAgIGlmICghbmV3VmFsKSByZXR1cm47XG5cdCAgICAgIG5ld1ZhbCA9IG5ldyBEYXRlKG5ld1ZhbCk7XG5cdCAgICAgIGlmICghaXNOYU4obmV3VmFsKSkge1xuXHQgICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXNhYmxlZERhdGUgPT09ICdmdW5jdGlvbicgJiYgdGhpcy5kaXNhYmxlZERhdGUobmV3IERhdGUobmV3VmFsKSkpIHtcblx0ICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5kYXRlID0gbmV3VmFsO1xuXHQgICAgICAgIHRoaXMueWVhciA9IG5ld1ZhbC5nZXRGdWxsWWVhcigpO1xuXHQgICAgICAgIHRoaXMubW9udGggPSBuZXdWYWwuZ2V0TW9udGgoKTtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgbmV3VmFsLCBmYWxzZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB0aW1lUGlja2VyVmlzaWJsZTogZnVuY3Rpb24gdGltZVBpY2tlclZpc2libGUodmFsKSB7XG5cdCAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgICAgIGlmICh2YWwpIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gX3RoaXMyLiRyZWZzLnRpbWVwaWNrZXIuYWp1c3RTY3JvbGxUb3AoKTtcblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgc2VsZWN0aW9uTW9kZTogZnVuY3Rpb24gc2VsZWN0aW9uTW9kZShuZXdWYWwpIHtcblx0ICAgICAgaWYgKG5ld1ZhbCA9PT0gJ21vbnRoJykge1xuXHQgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdCAgICAgICAgaWYgKHRoaXMuY3VycmVudFZpZXcgIT09ICd5ZWFyJyB8fCB0aGlzLmN1cnJlbnRWaWV3ICE9PSAnbW9udGgnKSB7XG5cdCAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ21vbnRoJztcblx0ICAgICAgICB9XG5cdCAgICAgIH0gZWxzZSBpZiAobmV3VmFsID09PSAnd2VlaycpIHtcblx0ICAgICAgICB0aGlzLndlZWsgPSAoMCwgX3V0aWwuZ2V0V2Vla051bWJlcikodGhpcy5kYXRlKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGRhdGU6IGZ1bmN0aW9uIGRhdGUobmV3VmFsKSB7XG5cdCAgICAgIHRoaXMueWVhciA9IG5ld1ZhbC5nZXRGdWxsWWVhcigpO1xuXHQgICAgICB0aGlzLm1vbnRoID0gbmV3VmFsLmdldE1vbnRoKCk7XG5cdCAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICd3ZWVrJykgdGhpcy53ZWVrID0gKDAsIF91dGlsLmdldFdlZWtOdW1iZXIpKG5ld1ZhbCk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGhhbmRsZUNsZWFyOiBmdW5jdGlvbiBoYW5kbGVDbGVhcigpIHtcblx0ICAgICAgdGhpcy5kYXRlID0gdGhpcy4kb3B0aW9ucy5kZWZhdWx0VmFsdWUgPyBuZXcgRGF0ZSh0aGlzLiRvcHRpb25zLmRlZmF1bHRWYWx1ZSkgOiBuZXcgRGF0ZSgpO1xuXHQgICAgICB0aGlzLiRlbWl0KCdwaWNrJyk7XG5cdCAgICB9LFxuXHQgICAgcmVzZXREYXRlOiBmdW5jdGlvbiByZXNldERhdGUoKSB7XG5cdCAgICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZSk7XG5cdCAgICB9LFxuXHQgICAgc2hvd01vbnRoUGlja2VyOiBmdW5jdGlvbiBzaG93TW9udGhQaWNrZXIoKSB7XG5cdCAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAnbW9udGgnO1xuXHQgICAgfSxcblx0ICAgIHNob3dZZWFyUGlja2VyOiBmdW5jdGlvbiBzaG93WWVhclBpY2tlcigpIHtcblx0ICAgICAgdGhpcy5jdXJyZW50VmlldyA9ICd5ZWFyJztcblx0ICAgIH0sXG5cblxuXHQgICAgLy8gWFhYOiDmsqHnlKjliLBcblx0ICAgIC8vIGhhbmRsZUxhYmVsQ2xpY2soKSB7XG5cdCAgICAvLyAgIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAnZGF0ZScpIHtcblx0ICAgIC8vICAgICB0aGlzLnNob3dNb250aFBpY2tlcigpO1xuXHQgICAgLy8gICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICdtb250aCcpIHtcblx0ICAgIC8vICAgICB0aGlzLnNob3dZZWFyUGlja2VyKCk7XG5cdCAgICAvLyAgIH1cblx0ICAgIC8vIH0sXG5cblx0ICAgIHByZXZNb250aDogZnVuY3Rpb24gcHJldk1vbnRoKCkge1xuXHQgICAgICB0aGlzLm1vbnRoLS07XG5cdCAgICAgIGlmICh0aGlzLm1vbnRoIDwgMCkge1xuXHQgICAgICAgIHRoaXMubW9udGggPSAxMTtcblx0ICAgICAgICB0aGlzLnllYXItLTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG5leHRNb250aDogZnVuY3Rpb24gbmV4dE1vbnRoKCkge1xuXHQgICAgICB0aGlzLm1vbnRoKys7XG5cdCAgICAgIGlmICh0aGlzLm1vbnRoID4gMTEpIHtcblx0ICAgICAgICB0aGlzLm1vbnRoID0gMDtcblx0ICAgICAgICB0aGlzLnllYXIrKztcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG5leHRZZWFyOiBmdW5jdGlvbiBuZXh0WWVhcigpIHtcblx0ICAgICAgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICd5ZWFyJykge1xuXHQgICAgICAgIHRoaXMuJHJlZnMueWVhclRhYmxlLm5leHRUZW5ZZWFyKCk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy55ZWFyKys7XG5cdCAgICAgICAgdGhpcy5kYXRlLnNldEZ1bGxZZWFyKHRoaXMueWVhcik7XG5cdCAgICAgICAgdGhpcy5yZXNldERhdGUoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHByZXZZZWFyOiBmdW5jdGlvbiBwcmV2WWVhcigpIHtcblx0ICAgICAgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICd5ZWFyJykge1xuXHQgICAgICAgIHRoaXMuJHJlZnMueWVhclRhYmxlLnByZXZUZW5ZZWFyKCk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy55ZWFyLS07XG5cdCAgICAgICAgdGhpcy5kYXRlLnNldEZ1bGxZZWFyKHRoaXMueWVhcik7XG5cdCAgICAgICAgdGhpcy5yZXNldERhdGUoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGhhbmRsZVNob3J0Y3V0Q2xpY2s6IGZ1bmN0aW9uIGhhbmRsZVNob3J0Y3V0Q2xpY2soc2hvcnRjdXQpIHtcblx0ICAgICAgaWYgKHNob3J0Y3V0Lm9uQ2xpY2spIHtcblx0ICAgICAgICBzaG9ydGN1dC5vbkNsaWNrKHRoaXMpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlVGltZVBpY2s6IGZ1bmN0aW9uIGhhbmRsZVRpbWVQaWNrKHBpY2tlciwgdmlzaWJsZSwgZmlyc3QpIHtcblx0ICAgICAgaWYgKHBpY2tlcikge1xuXHQgICAgICAgIHZhciBvbGREYXRlID0gbmV3IERhdGUodGhpcy5kYXRlLmdldFRpbWUoKSk7XG5cdCAgICAgICAgdmFyIGhvdXIgPSBwaWNrZXIuZ2V0SG91cnMoKTtcblx0ICAgICAgICB2YXIgbWludXRlID0gcGlja2VyLmdldE1pbnV0ZXMoKTtcblx0ICAgICAgICB2YXIgc2Vjb25kID0gcGlja2VyLmdldFNlY29uZHMoKTtcblx0ICAgICAgICBvbGREYXRlLnNldEhvdXJzKGhvdXIpO1xuXHQgICAgICAgIG9sZERhdGUuc2V0TWludXRlcyhtaW51dGUpO1xuXHQgICAgICAgIG9sZERhdGUuc2V0U2Vjb25kcyhzZWNvbmQpO1xuXHQgICAgICAgIHRoaXMuZGF0ZSA9IG5ldyBEYXRlKG9sZERhdGUuZ2V0VGltZSgpKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGlmICghZmlyc3QpIHtcblx0ICAgICAgICB0aGlzLnRpbWVQaWNrZXJWaXNpYmxlID0gdmlzaWJsZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGhhbmRsZU1vbnRoUGljazogZnVuY3Rpb24gaGFuZGxlTW9udGhQaWNrKG1vbnRoKSB7XG5cdCAgICAgIHRoaXMubW9udGggPSBtb250aDtcblx0ICAgICAgdmFyIHNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlbGVjdGlvbk1vZGU7XG5cdCAgICAgIGlmIChzZWxlY3Rpb25Nb2RlICE9PSAnbW9udGgnKSB7XG5cdCAgICAgICAgdGhpcy5kYXRlLnNldE1vbnRoKG1vbnRoKTtcblx0ICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ2RhdGUnO1xuXHQgICAgICAgIHRoaXMucmVzZXREYXRlKCk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5kYXRlLnNldE1vbnRoKG1vbnRoKTtcblx0ICAgICAgICB0aGlzLnllYXIgJiYgdGhpcy5kYXRlLnNldEZ1bGxZZWFyKHRoaXMueWVhcik7XG5cdCAgICAgICAgdGhpcy5yZXNldERhdGUoKTtcblx0ICAgICAgICB2YXIgdmFsdWUgPSBuZXcgRGF0ZSh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSwgbW9udGgsIDEpO1xuXHQgICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCB2YWx1ZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVEYXRlUGljazogZnVuY3Rpb24gaGFuZGxlRGF0ZVBpY2sodmFsdWUpIHtcblx0ICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ2RheScpIHtcblx0ICAgICAgICBpZiAoIXRoaXMuc2hvd1RpbWUpIHtcblx0ICAgICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBuZXcgRGF0ZSh2YWx1ZS5nZXRUaW1lKCkpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdGhpcy5kYXRlLnNldEZ1bGxZZWFyKHZhbHVlLmdldEZ1bGxZZWFyKCkpO1xuXHQgICAgICAgIHRoaXMuZGF0ZS5zZXRNb250aCh2YWx1ZS5nZXRNb250aCgpLCB2YWx1ZS5nZXREYXRlKCkpO1xuXHQgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3dlZWsnKSB7XG5cdCAgICAgICAgdGhpcy53ZWVrID0gdmFsdWUud2Vlaztcblx0ICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgdmFsdWUuZGF0ZSk7XG5cdCAgICAgIH1cblxuXHQgICAgICB0aGlzLnJlc2V0RGF0ZSgpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZVllYXJQaWNrOiBmdW5jdGlvbiBoYW5kbGVZZWFyUGljayh5ZWFyKSB7XG5cdCAgICAgIHZhciBjbG9zZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcblxuXHQgICAgICB0aGlzLnllYXIgPSB5ZWFyO1xuXHQgICAgICBpZiAoIWNsb3NlKSByZXR1cm47XG5cblx0ICAgICAgdGhpcy5kYXRlLnNldEZ1bGxZZWFyKHllYXIpO1xuXHQgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAneWVhcicpIHtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgbmV3IERhdGUoeWVhciwgMCwgMSkpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAnbW9udGgnO1xuXHQgICAgICB9XG5cblx0ICAgICAgdGhpcy5yZXNldERhdGUoKTtcblx0ICAgIH0sXG5cdCAgICBjaGFuZ2VUb05vdzogZnVuY3Rpb24gY2hhbmdlVG9Ob3coKSB7XG5cdCAgICAgIHRoaXMuZGF0ZS5zZXRUaW1lKCtuZXcgRGF0ZSgpKTtcblx0ICAgICAgdGhpcy4kZW1pdCgncGljaycsIG5ldyBEYXRlKHRoaXMuZGF0ZS5nZXRUaW1lKCkpKTtcblx0ICAgICAgdGhpcy5yZXNldERhdGUoKTtcblx0ICAgIH0sXG5cdCAgICBjb25maXJtOiBmdW5jdGlvbiBjb25maXJtKCkge1xuXHQgICAgICB0aGlzLmRhdGUuc2V0TWlsbGlzZWNvbmRzKDApO1xuXHQgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgdGhpcy5kYXRlKTtcblx0ICAgIH0sXG5cdCAgICByZXNldFZpZXc6IGZ1bmN0aW9uIHJlc2V0VmlldygpIHtcblx0ICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ21vbnRoJykge1xuXHQgICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAnbW9udGgnO1xuXHQgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3llYXInKSB7XG5cdCAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9ICd5ZWFyJztcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ2RhdGUnO1xuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSAhPT0gJ3dlZWsnKSB7XG5cdCAgICAgICAgdGhpcy55ZWFyID0gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCk7XG5cdCAgICAgICAgdGhpcy5tb250aCA9IHRoaXMuZGF0ZS5nZXRNb250aCgpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNvbXBvbmVudHM6IHtcblx0ICAgIFRpbWVQaWNrZXI6IF90aW1lMi5kZWZhdWx0LCBZZWFyVGFibGU6IF95ZWFyVGFibGUyLmRlZmF1bHQsIE1vbnRoVGFibGU6IF9tb250aFRhYmxlMi5kZWZhdWx0LCBEYXRlVGFibGU6IF9kYXRlVGFibGUyLmRlZmF1bHQsIEVsSW5wdXQ6IF9pbnB1dDIuZGVmYXVsdFxuXHQgIH0sXG5cblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgaWYgKHRoaXMuZGF0ZSAmJiAhdGhpcy55ZWFyKSB7XG5cdCAgICAgIHRoaXMueWVhciA9IHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpO1xuXHQgICAgICB0aGlzLm1vbnRoID0gdGhpcy5kYXRlLmdldE1vbnRoKCk7XG5cdCAgICB9XG5cdCAgfSxcblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgcG9wcGVyQ2xhc3M6ICcnLFxuXHQgICAgICBwaWNrZXJXaWR0aDogMCxcblx0ICAgICAgZGF0ZTogdGhpcy4kb3B0aW9ucy5kZWZhdWx0VmFsdWUgPyBuZXcgRGF0ZSh0aGlzLiRvcHRpb25zLmRlZmF1bHRWYWx1ZSkgOiBuZXcgRGF0ZSgpLFxuXHQgICAgICB2YWx1ZTogJycsXG5cdCAgICAgIHNob3dUaW1lOiBmYWxzZSxcblx0ICAgICAgc2VsZWN0aW9uTW9kZTogJ2RheScsXG5cdCAgICAgIHNob3J0Y3V0czogJycsXG5cdCAgICAgIHZpc2libGU6IGZhbHNlLFxuXHQgICAgICBjdXJyZW50VmlldzogJ2RhdGUnLFxuXHQgICAgICBkaXNhYmxlZERhdGU6ICcnLFxuXHQgICAgICBmaXJzdERheU9mV2VlazogNyxcblx0ICAgICAgeWVhcjogbnVsbCxcblx0ICAgICAgbW9udGg6IG51bGwsXG5cdCAgICAgIHdlZWs6IG51bGwsXG5cdCAgICAgIHNob3dXZWVrTnVtYmVyOiBmYWxzZSxcblx0ICAgICAgdGltZVBpY2tlclZpc2libGU6IGZhbHNlLFxuXHQgICAgICB3aWR0aDogMCxcblx0ICAgICAgZm9ybWF0OiAnJ1xuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgZm9vdGVyVmlzaWJsZTogZnVuY3Rpb24gZm9vdGVyVmlzaWJsZSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuc2hvd1RpbWU7XG5cdCAgICB9LFxuXG5cblx0ICAgIHZpc2libGVUaW1lOiB7XG5cdCAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuXHQgICAgICAgIHJldHVybiAoMCwgX3V0aWwuZm9ybWF0RGF0ZSkodGhpcy5kYXRlLCB0aGlzLnRpbWVGb3JtYXQpO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWwpIHtcblx0ICAgICAgICBpZiAodmFsKSB7XG5cdCAgICAgICAgICB2YXIgZGF0ZSA9ICgwLCBfdXRpbC5wYXJzZURhdGUpKHZhbCwgdGhpcy50aW1lRm9ybWF0KTtcblx0ICAgICAgICAgIGlmIChkYXRlKSB7XG5cdCAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkpO1xuXHQgICAgICAgICAgICBkYXRlLnNldE1vbnRoKHRoaXMuZGF0ZS5nZXRNb250aCgpKTtcblx0ICAgICAgICAgICAgZGF0ZS5zZXREYXRlKHRoaXMuZGF0ZS5nZXREYXRlKCkpO1xuXHQgICAgICAgICAgICB0aGlzLmRhdGUgPSBkYXRlO1xuXHQgICAgICAgICAgICB0aGlzLiRyZWZzLnRpbWVwaWNrZXIudmFsdWUgPSBkYXRlO1xuXHQgICAgICAgICAgICB0aGlzLnRpbWVQaWNrZXJWaXNpYmxlID0gZmFsc2U7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXG5cdCAgICB2aXNpYmxlRGF0ZToge1xuXHQgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcblx0ICAgICAgICByZXR1cm4gKDAsIF91dGlsLmZvcm1hdERhdGUpKHRoaXMuZGF0ZSwgdGhpcy5kYXRlRm9ybWF0KTtcblx0ICAgICAgfSxcblx0ICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsKSB7XG5cdCAgICAgICAgdmFyIGRhdGUgPSAoMCwgX3V0aWwucGFyc2VEYXRlKSh2YWwsIHRoaXMuZGF0ZUZvcm1hdCk7XG5cdCAgICAgICAgaWYgKCFkYXRlKSB7XG5cdCAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXNhYmxlZERhdGUgPT09ICdmdW5jdGlvbicgJiYgdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkpIHtcblx0ICAgICAgICAgIHJldHVybjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgZGF0ZS5zZXRIb3Vycyh0aGlzLmRhdGUuZ2V0SG91cnMoKSk7XG5cdCAgICAgICAgZGF0ZS5zZXRNaW51dGVzKHRoaXMuZGF0ZS5nZXRNaW51dGVzKCkpO1xuXHQgICAgICAgIGRhdGUuc2V0U2Vjb25kcyh0aGlzLmRhdGUuZ2V0U2Vjb25kcygpKTtcblx0ICAgICAgICB0aGlzLmRhdGUgPSBkYXRlO1xuXHQgICAgICAgIHRoaXMucmVzZXRWaWV3KCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cblx0ICAgIHllYXJMYWJlbDogZnVuY3Rpb24geWVhckxhYmVsKCkge1xuXHQgICAgICB2YXIgeWVhciA9IHRoaXMueWVhcjtcblx0ICAgICAgaWYgKCF5ZWFyKSByZXR1cm4gJyc7XG5cdCAgICAgIHZhciB5ZWFyVHJhbnNsYXRpb24gPSB0aGlzLnQoJ2VsLmRhdGVwaWNrZXIueWVhcicpO1xuXHQgICAgICBpZiAodGhpcy5jdXJyZW50VmlldyA9PT0gJ3llYXInKSB7XG5cdCAgICAgICAgdmFyIHN0YXJ0WWVhciA9IE1hdGguZmxvb3IoeWVhciAvIDEwKSAqIDEwO1xuXHQgICAgICAgIGlmICh5ZWFyVHJhbnNsYXRpb24pIHtcblx0ICAgICAgICAgIHJldHVybiBzdGFydFllYXIgKyAnICcgKyB5ZWFyVHJhbnNsYXRpb24gKyAnIC0gJyArIChzdGFydFllYXIgKyA5KSArICcgJyArIHllYXJUcmFuc2xhdGlvbjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIHN0YXJ0WWVhciArICcgLSAnICsgKHN0YXJ0WWVhciArIDkpO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiB0aGlzLnllYXIgKyAnICcgKyB5ZWFyVHJhbnNsYXRpb247XG5cdCAgICB9LFxuXHQgICAgdGltZUZvcm1hdDogZnVuY3Rpb24gdGltZUZvcm1hdCgpIHtcblx0ICAgICAgaWYgKHRoaXMuZm9ybWF0ICYmIHRoaXMuZm9ybWF0LmluZGV4T2YoJ3NzJykgPT09IC0xKSB7XG5cdCAgICAgICAgcmV0dXJuICdISDptbSc7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuICdISDptbTpzcyc7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBkYXRlRm9ybWF0OiBmdW5jdGlvbiBkYXRlRm9ybWF0KCkge1xuXHQgICAgICBpZiAodGhpcy5mb3JtYXQpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQucmVwbGFjZSgnSEgnLCAnJykucmVwbGFjZSgnOm1tJywgJycpLnJlcGxhY2UoJzpzcycsICcnKS50cmltKCk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuICd5eXl5LU1NLWRkJztcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblx0fTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuLyoqKi8gfSxcbi8qIDE1OCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxNTkpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxNjMpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAxNTkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfdXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUzKTtcblxuXHR2YXIgX2xvY2FsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG5cdHZhciBfbG9jYWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xvY2FsZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBtaXhpbnM6IFtfbG9jYWxlMi5kZWZhdWx0XSxcblxuXHQgIGNvbXBvbmVudHM6IHtcblx0ICAgIFRpbWVTcGlubmVyOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MClcblx0ICB9LFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIHBpY2tlcldpZHRoOiB7fSxcblx0ICAgIGRhdGU6IHtcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB2aXNpYmxlOiBCb29sZWFuXG5cdCAgfSxcblxuXHQgIHdhdGNoOiB7XG5cdCAgICB2aXNpYmxlOiBmdW5jdGlvbiB2aXNpYmxlKHZhbCkge1xuXHQgICAgICB0aGlzLmN1cnJlbnRWaXNpYmxlID0gdmFsO1xuXHQgICAgICBpZiAodmFsKSB7XG5cdCAgICAgICAgdGhpcy5vbGRIb3VycyA9IHRoaXMuaG91cnM7XG5cdCAgICAgICAgdGhpcy5vbGRNaW51dGVzID0gdGhpcy5taW51dGVzO1xuXHQgICAgICAgIHRoaXMub2xkU2Vjb25kcyA9IHRoaXMuc2Vjb25kcztcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHBpY2tlcldpZHRoOiBmdW5jdGlvbiBwaWNrZXJXaWR0aCh2YWwpIHtcblx0ICAgICAgdGhpcy53aWR0aCA9IHZhbDtcblx0ICAgIH0sXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUobmV3VmFsKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgdmFyIGRhdGUgPSB2b2lkIDA7XG5cdCAgICAgIGlmIChuZXdWYWwgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdCAgICAgICAgZGF0ZSA9ICgwLCBfdXRpbC5saW1pdFJhbmdlKShuZXdWYWwsIHRoaXMuc2VsZWN0YWJsZVJhbmdlKTtcblx0ICAgICAgfSBlbHNlIGlmICghbmV3VmFsKSB7XG5cdCAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cdCAgICAgIH1cblxuXHQgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh7XG5cdCAgICAgICAgaG91cnM6IGRhdGUuZ2V0SG91cnMoKSxcblx0ICAgICAgICBtaW51dGVzOiBkYXRlLmdldE1pbnV0ZXMoKSxcblx0ICAgICAgICBzZWNvbmRzOiBkYXRlLmdldFNlY29uZHMoKVxuXHQgICAgICB9KTtcblx0ICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcblx0ICAgICAgICByZXR1cm4gX3RoaXMuYWp1c3RTY3JvbGxUb3AoKTtcblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgc2VsZWN0YWJsZVJhbmdlOiBmdW5jdGlvbiBzZWxlY3RhYmxlUmFuZ2UodmFsKSB7XG5cdCAgICAgIHRoaXMuJHJlZnMuc3Bpbm5lci5zZWxlY3RhYmxlUmFuZ2UgPSB2YWw7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBwb3BwZXJDbGFzczogJycsXG5cdCAgICAgIGZvcm1hdDogJ0hIOm1tOnNzJyxcblx0ICAgICAgdmFsdWU6ICcnLFxuXHQgICAgICBob3VyczogMCxcblx0ICAgICAgbWludXRlczogMCxcblx0ICAgICAgc2Vjb25kczogMCxcblx0ICAgICAgb2xkSG91cnM6IDAsXG5cdCAgICAgIG9sZE1pbnV0ZXM6IDAsXG5cdCAgICAgIG9sZFNlY29uZHM6IDAsXG5cdCAgICAgIHNlbGVjdGFibGVSYW5nZTogW10sXG5cdCAgICAgIGN1cnJlbnREYXRlOiB0aGlzLiRvcHRpb25zLmRlZmF1bHRWYWx1ZSB8fCB0aGlzLmRhdGUgfHwgbmV3IERhdGUoKSxcblx0ICAgICAgY3VycmVudFZpc2libGU6IHRoaXMudmlzaWJsZSB8fCBmYWxzZSxcblx0ICAgICAgd2lkdGg6IHRoaXMucGlja2VyV2lkdGggfHwgMFxuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgc2hvd1NlY29uZHM6IGZ1bmN0aW9uIHNob3dTZWNvbmRzKCkge1xuXHQgICAgICByZXR1cm4gKHRoaXMuZm9ybWF0IHx8ICcnKS5pbmRleE9mKCdzcycpICE9PSAtMTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgaGFuZGxlQ2xlYXI6IGZ1bmN0aW9uIGhhbmRsZUNsZWFyKCkge1xuXHQgICAgICB0aGlzLiRlbWl0KCdwaWNrJyk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQ2FuY2VsOiBmdW5jdGlvbiBoYW5kbGVDYW5jZWwoKSB7XG5cdCAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0SG91cnModGhpcy5vbGRIb3Vycyk7XG5cdCAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0TWludXRlcyh0aGlzLm9sZE1pbnV0ZXMpO1xuXHQgICAgICB0aGlzLmN1cnJlbnREYXRlLnNldFNlY29uZHModGhpcy5vbGRTZWNvbmRzKTtcblx0ICAgICAgdGhpcy5ob3VycyA9IHRoaXMuY3VycmVudERhdGUuZ2V0SG91cnMoKTtcblx0ICAgICAgdGhpcy5taW51dGVzID0gdGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKCk7XG5cdCAgICAgIHRoaXMuc2Vjb25kcyA9IHRoaXMuY3VycmVudERhdGUuZ2V0U2Vjb25kcygpO1xuXHQgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCgwLCBfdXRpbC5saW1pdFJhbmdlKSh0aGlzLmN1cnJlbnREYXRlLCB0aGlzLnNlbGVjdGFibGVSYW5nZSwgJ0hIOm1tOnNzJykpO1xuXHQgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgZGF0ZSk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZGF0ZSkge1xuXHQgICAgICBpZiAoZGF0ZS5ob3VycyAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgdGhpcy5jdXJyZW50RGF0ZS5zZXRIb3VycyhkYXRlLmhvdXJzKTtcblx0ICAgICAgICB0aGlzLmhvdXJzID0gdGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChkYXRlLm1pbnV0ZXMgIT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0TWludXRlcyhkYXRlLm1pbnV0ZXMpO1xuXHQgICAgICAgIHRoaXMubWludXRlcyA9IHRoaXMuY3VycmVudERhdGUuZ2V0TWludXRlcygpO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChkYXRlLnNlY29uZHMgIT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgIHRoaXMuY3VycmVudERhdGUuc2V0U2Vjb25kcyhkYXRlLnNlY29uZHMpO1xuXHQgICAgICAgIHRoaXMuc2Vjb25kcyA9IHRoaXMuY3VycmVudERhdGUuZ2V0U2Vjb25kcygpO1xuXHQgICAgICB9XG5cblx0ICAgICAgdGhpcy5oYW5kbGVDb25maXJtKHRydWUpO1xuXHQgICAgfSxcblx0ICAgIHNldFNlbGVjdGlvblJhbmdlOiBmdW5jdGlvbiBzZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKSB7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdC1yYW5nZScsIHN0YXJ0LCBlbmQpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUNvbmZpcm06IGZ1bmN0aW9uIGhhbmRsZUNvbmZpcm0oKSB7XG5cdCAgICAgIHZhciB2aXNpYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblx0ICAgICAgdmFyIGZpcnN0ID0gYXJndW1lbnRzWzFdO1xuXG5cdCAgICAgIGlmIChmaXJzdCkgcmV0dXJuO1xuXHQgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCgwLCBfdXRpbC5saW1pdFJhbmdlKSh0aGlzLmN1cnJlbnREYXRlLCB0aGlzLnNlbGVjdGFibGVSYW5nZSwgJ0hIOm1tOnNzJykpO1xuXHQgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgZGF0ZSwgdmlzaWJsZSwgZmlyc3QpO1xuXHQgICAgfSxcblx0ICAgIGFqdXN0U2Nyb2xsVG9wOiBmdW5jdGlvbiBhanVzdFNjcm9sbFRvcCgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuJHJlZnMuc3Bpbm5lci5hanVzdFNjcm9sbFRvcCgpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgdGhpcy5ob3VycyA9IHRoaXMuY3VycmVudERhdGUuZ2V0SG91cnMoKTtcblx0ICAgIHRoaXMubWludXRlcyA9IHRoaXMuY3VycmVudERhdGUuZ2V0TWludXRlcygpO1xuXHQgICAgdGhpcy5zZWNvbmRzID0gdGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKCk7XG5cdCAgfSxcblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cblx0ICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgcmV0dXJuIF90aGlzMi5oYW5kbGVDb25maXJtKHRydWUsIHRydWUpO1xuXHQgICAgfSk7XG5cdCAgICB0aGlzLiRlbWl0KCdtb3VudGVkJyk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMTYwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MSksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MiksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDE2MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF91dGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTMpO1xuXG5cdHZhciBfc2Nyb2xsYmFyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XG5cblx0dmFyIF9zY3JvbGxiYXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2Nyb2xsYmFyKTtcblxuXHR2YXIgX2RlYm91bmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OSk7XG5cblx0dmFyIF9kZWJvdW5jZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWJvdW5jZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgY29tcG9uZW50czogeyBFbFNjcm9sbGJhcjogX3Njcm9sbGJhcjIuZGVmYXVsdCB9LFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIGhvdXJzOiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogMFxuXHQgICAgfSxcblxuXHQgICAgbWludXRlczoge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDBcblx0ICAgIH0sXG5cblx0ICAgIHNlY29uZHM6IHtcblx0ICAgICAgdHlwZTogTnVtYmVyLFxuXHQgICAgICBkZWZhdWx0OiAwXG5cdCAgICB9LFxuXG5cdCAgICBzaG93U2Vjb25kczoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHdhdGNoOiB7XG5cdCAgICBob3Vyc1ByaXZhdGU6IGZ1bmN0aW9uIGhvdXJzUHJpdmF0ZShuZXdWYWwsIG9sZFZhbCkge1xuXHQgICAgICBpZiAoIShuZXdWYWwgPj0gMCAmJiBuZXdWYWwgPD0gMjMpKSB7XG5cdCAgICAgICAgdGhpcy5ob3Vyc1ByaXZhdGUgPSBvbGRWYWw7XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5hanVzdEVsVG9wKCdob3VyJywgbmV3VmFsKTtcblx0ICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgeyBob3VyczogbmV3VmFsIH0pO1xuXHQgICAgfSxcblx0ICAgIG1pbnV0ZXNQcml2YXRlOiBmdW5jdGlvbiBtaW51dGVzUHJpdmF0ZShuZXdWYWwsIG9sZFZhbCkge1xuXHQgICAgICBpZiAoIShuZXdWYWwgPj0gMCAmJiBuZXdWYWwgPD0gNTkpKSB7XG5cdCAgICAgICAgdGhpcy5taW51dGVzUHJpdmF0ZSA9IG9sZFZhbDtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLmFqdXN0RWxUb3AoJ21pbnV0ZScsIG5ld1ZhbCk7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHsgbWludXRlczogbmV3VmFsIH0pO1xuXHQgICAgfSxcblx0ICAgIHNlY29uZHNQcml2YXRlOiBmdW5jdGlvbiBzZWNvbmRzUHJpdmF0ZShuZXdWYWwsIG9sZFZhbCkge1xuXHQgICAgICBpZiAoIShuZXdWYWwgPj0gMCAmJiBuZXdWYWwgPD0gNTkpKSB7XG5cdCAgICAgICAgdGhpcy5zZWNvbmRzUHJpdmF0ZSA9IG9sZFZhbDtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLmFqdXN0RWxUb3AoJ3NlY29uZCcsIG5ld1ZhbCk7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHsgc2Vjb25kczogbmV3VmFsIH0pO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgaG91cnNMaXN0OiBmdW5jdGlvbiBob3Vyc0xpc3QoKSB7XG5cdCAgICAgIHJldHVybiAoMCwgX3V0aWwuZ2V0UmFuZ2VIb3VycykodGhpcy5zZWxlY3RhYmxlUmFuZ2UpO1xuXHQgICAgfSxcblx0ICAgIGhvdXJFbDogZnVuY3Rpb24gaG91ckVsKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcmVmcy5ob3VyLndyYXA7XG5cdCAgICB9LFxuXHQgICAgbWludXRlRWw6IGZ1bmN0aW9uIG1pbnV0ZUVsKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcmVmcy5taW51dGUud3JhcDtcblx0ICAgIH0sXG5cdCAgICBzZWNvbmRFbDogZnVuY3Rpb24gc2Vjb25kRWwoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLiRyZWZzLnNlY29uZC53cmFwO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgaG91cnNQcml2YXRlOiAwLFxuXHQgICAgICBtaW51dGVzUHJpdmF0ZTogMCxcblx0ICAgICAgc2Vjb25kc1ByaXZhdGU6IDAsXG5cdCAgICAgIHNlbGVjdGFibGVSYW5nZTogW11cblx0ICAgIH07XG5cdCAgfSxcblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgdGhpcy5kZWJvdW5jZUFqdXN0RWxUb3AgPSAoMCwgX2RlYm91bmNlMi5kZWZhdWx0KSgxMDAsIGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgICAgIHJldHVybiBfdGhpcy5hanVzdEVsVG9wKHR5cGUsIF90aGlzW3R5cGUgKyAncyddKTtcblx0ICAgIH0pO1xuXHQgIH0sXG5cdCAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcblx0ICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgIF90aGlzMi5iaW5kU2Nyb2xsRXZlbnQoKTtcblx0ICAgIH0pO1xuXHQgIH0sXG5cblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayh0eXBlLCB2YWx1ZSwgZGlzYWJsZWQpIHtcblx0ICAgICAgaWYgKHZhbHVlLmRpc2FibGVkKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cblx0ICAgICAgdGhpc1t0eXBlICsgJ1ByaXZhdGUnXSA9IHZhbHVlLnZhbHVlID49IDAgPyB2YWx1ZS52YWx1ZSA6IHZhbHVlO1xuXG5cdCAgICAgIHRoaXMuZW1pdFNlbGVjdFJhbmdlKHR5cGUpO1xuXHQgICAgfSxcblx0ICAgIGVtaXRTZWxlY3RSYW5nZTogZnVuY3Rpb24gZW1pdFNlbGVjdFJhbmdlKHR5cGUpIHtcblx0ICAgICAgaWYgKHR5cGUgPT09ICdob3VycycpIHtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdzZWxlY3QtcmFuZ2UnLCAwLCAyKTtcblx0ICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnbWludXRlcycpIHtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdzZWxlY3QtcmFuZ2UnLCAzLCA1KTtcblx0ICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnc2Vjb25kcycpIHtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdzZWxlY3QtcmFuZ2UnLCA2LCA4KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGJpbmRTY3JvbGxFdmVudDogZnVuY3Rpb24gYmluZFNjcm9sbEV2ZW50KCkge1xuXHQgICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuXHQgICAgICB2YXIgYmluZEZ1bnRpb24gPSBmdW5jdGlvbiBiaW5kRnVudGlvbih0eXBlKSB7XG5cdCAgICAgICAgX3RoaXMzW3R5cGUgKyAnRWwnXS5vbnNjcm9sbCA9IGZ1bmN0aW9uIChlKSB7XG5cdCAgICAgICAgICByZXR1cm4gX3RoaXMzLmhhbmRsZVNjcm9sbCh0eXBlLCBlKTtcblx0ICAgICAgICB9O1xuXHQgICAgICB9O1xuXHQgICAgICBiaW5kRnVudGlvbignaG91cicpO1xuXHQgICAgICBiaW5kRnVudGlvbignbWludXRlJyk7XG5cdCAgICAgIGJpbmRGdW50aW9uKCdzZWNvbmQnKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVTY3JvbGw6IGZ1bmN0aW9uIGhhbmRsZVNjcm9sbCh0eXBlKSB7XG5cdCAgICAgIHZhciBhanVzdCA9IHt9O1xuXHQgICAgICBhanVzdFt0eXBlICsgJ3MnXSA9IE1hdGgubWluKE1hdGguZmxvb3IoKHRoaXNbdHlwZSArICdFbCddLnNjcm9sbFRvcCAtIDgwKSAvIDMyICsgMyksICcnICsgdHlwZSA9PT0gJ2hvdXInID8gMjMgOiA1OSk7XG5cdCAgICAgIHRoaXMuZGVib3VuY2VBanVzdEVsVG9wKHR5cGUpO1xuXHQgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBhanVzdCk7XG5cdCAgICB9LFxuXHQgICAgYWp1c3RTY3JvbGxUb3A6IGZ1bmN0aW9uIGFqdXN0U2Nyb2xsVG9wKCkge1xuXHQgICAgICB0aGlzLmFqdXN0RWxUb3AoJ2hvdXInLCB0aGlzLmhvdXJzKTtcblx0ICAgICAgdGhpcy5hanVzdEVsVG9wKCdtaW51dGUnLCB0aGlzLm1pbnV0ZXMpO1xuXHQgICAgICB0aGlzLmFqdXN0RWxUb3AoJ3NlY29uZCcsIHRoaXMuc2Vjb25kcyk7XG5cdCAgICB9LFxuXHQgICAgYWp1c3RFbFRvcDogZnVuY3Rpb24gYWp1c3RFbFRvcCh0eXBlLCB2YWx1ZSkge1xuXHQgICAgICB0aGlzW3R5cGUgKyAnRWwnXS5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCAodmFsdWUgLSAyLjUpICogMzIgKyA4MCk7XG5cdCAgICB9XG5cdCAgfVxuXHR9OyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG4vKioqLyB9LFxuLyogMTYyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyXCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaGFzLXNlY29uZHMnOiBfdm0uc2hvd1NlY29uZHNcblx0ICAgIH1cblx0ICB9LCBbX2MoJ2VsLXNjcm9sbGJhcicsIHtcblx0ICAgIHJlZjogXCJob3VyXCIsXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXNwaW5uZXJfX3dyYXBwZXJcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwid3JhcC1zdHlsZVwiOiBcIm1heC1oZWlnaHQ6IGluaGVyaXQ7XCIsXG5cdCAgICAgIFwidmlldy1jbGFzc1wiOiBcImVsLXRpbWUtc3Bpbm5lcl9fbGlzdFwiLFxuXHQgICAgICBcIm5vcmVzaXplXCI6IFwiXCIsXG5cdCAgICAgIFwidGFnXCI6IFwidWxcIlxuXHQgICAgfSxcblx0ICAgIG5hdGl2ZU9uOiB7XG5cdCAgICAgIFwibW91c2VlbnRlclwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uZW1pdFNlbGVjdFJhbmdlKCdob3VycycpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LCBfdm0uX2woKF92bS5ob3Vyc0xpc3QpLCBmdW5jdGlvbihkaXNhYmxlZCwgaG91cikge1xuXHQgICAgcmV0dXJuIF9jKCdsaScsIHtcblx0ICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX19pdGVtXCIsXG5cdCAgICAgIGNsYXNzOiB7XG5cdCAgICAgICAgJ2FjdGl2ZSc6IGhvdXIgPT09IF92bS5ob3VycywgJ2Rpc2FibGVkJzogZGlzYWJsZWRcblx0ICAgICAgfSxcblx0ICAgICAgYXR0cnM6IHtcblx0ICAgICAgICBcInRyYWNrLWJ5XCI6IFwiaG91clwiXG5cdCAgICAgIH0sXG5cdCAgICAgIGRvbVByb3BzOiB7XG5cdCAgICAgICAgXCJ0ZXh0Q29udGVudFwiOiBfdm0uX3MoaG91cilcblx0ICAgICAgfSxcblx0ICAgICAgb246IHtcblx0ICAgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgICAgX3ZtLmhhbmRsZUNsaWNrKCdob3VycycsIHtcblx0ICAgICAgICAgICAgdmFsdWU6IGhvdXIsXG5cdCAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZFxuXHQgICAgICAgICAgfSwgdHJ1ZSlcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0pXG5cdCAgfSkpLCBfYygnZWwtc2Nyb2xsYmFyJywge1xuXHQgICAgcmVmOiBcIm1pbnV0ZVwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX193cmFwcGVyXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcIndyYXAtc3R5bGVcIjogXCJtYXgtaGVpZ2h0OiBpbmhlcml0O1wiLFxuXHQgICAgICBcInZpZXctY2xhc3NcIjogXCJlbC10aW1lLXNwaW5uZXJfX2xpc3RcIixcblx0ICAgICAgXCJub3Jlc2l6ZVwiOiBcIlwiLFxuXHQgICAgICBcInRhZ1wiOiBcInVsXCJcblx0ICAgIH0sXG5cdCAgICBuYXRpdmVPbjoge1xuXHQgICAgICBcIm1vdXNlZW50ZXJcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmVtaXRTZWxlY3RSYW5nZSgnbWludXRlcycpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LCBfdm0uX2woKDYwKSwgZnVuY3Rpb24obWludXRlLCBrZXkpIHtcblx0ICAgIHJldHVybiBfYygnbGknLCB7XG5cdCAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9faXRlbVwiLFxuXHQgICAgICBjbGFzczoge1xuXHQgICAgICAgICdhY3RpdmUnOiBrZXkgPT09IF92bS5taW51dGVzXG5cdCAgICAgIH0sXG5cdCAgICAgIGRvbVByb3BzOiB7XG5cdCAgICAgICAgXCJ0ZXh0Q29udGVudFwiOiBfdm0uX3Moa2V5KVxuXHQgICAgICB9LFxuXHQgICAgICBvbjoge1xuXHQgICAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgICBfdm0uaGFuZGxlQ2xpY2soJ21pbnV0ZXMnLCBrZXksIHRydWUpXG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9KVxuXHQgIH0pKSwgX2MoJ2VsLXNjcm9sbGJhcicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5zaG93U2Vjb25kcyksXG5cdCAgICAgIGV4cHJlc3Npb246IFwic2hvd1NlY29uZHNcIlxuXHQgICAgfV0sXG5cdCAgICByZWY6IFwic2Vjb25kXCIsXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXNwaW5uZXJfX3dyYXBwZXJcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwid3JhcC1zdHlsZVwiOiBcIm1heC1oZWlnaHQ6IGluaGVyaXQ7XCIsXG5cdCAgICAgIFwidmlldy1jbGFzc1wiOiBcImVsLXRpbWUtc3Bpbm5lcl9fbGlzdFwiLFxuXHQgICAgICBcIm5vcmVzaXplXCI6IFwiXCIsXG5cdCAgICAgIFwidGFnXCI6IFwidWxcIlxuXHQgICAgfSxcblx0ICAgIG5hdGl2ZU9uOiB7XG5cdCAgICAgIFwibW91c2VlbnRlclwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uZW1pdFNlbGVjdFJhbmdlKCdzZWNvbmRzJylcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIF92bS5fbCgoNjApLCBmdW5jdGlvbihzZWNvbmQsIGtleSkge1xuXHQgICAgcmV0dXJuIF9jKCdsaScsIHtcblx0ICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX19pdGVtXCIsXG5cdCAgICAgIGNsYXNzOiB7XG5cdCAgICAgICAgJ2FjdGl2ZSc6IGtleSA9PT0gX3ZtLnNlY29uZHNcblx0ICAgICAgfSxcblx0ICAgICAgZG9tUHJvcHM6IHtcblx0ICAgICAgICBcInRleHRDb250ZW50XCI6IF92bS5fcyhrZXkpXG5cdCAgICAgIH0sXG5cdCAgICAgIG9uOiB7XG5cdCAgICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICAgIF92bS5oYW5kbGVDbGljaygnc2Vjb25kcycsIGtleSwgdHJ1ZSlcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0pXG5cdCAgfSkpXSwgMSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMTYzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygndHJhbnNpdGlvbicsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwibmFtZVwiOiBcImVsLXpvb20taW4tdG9wXCJcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImFmdGVyLWxlYXZlXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS4kZW1pdCgnZG9kZXN0cm95Jylcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFtfYygnZGl2Jywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLmN1cnJlbnRWaXNpYmxlKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJjdXJyZW50VmlzaWJsZVwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcGFuZWxcIixcblx0ICAgIGNsYXNzOiBfdm0ucG9wcGVyQ2xhc3MsXG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgd2lkdGg6IF92bS53aWR0aCArICdweCdcblx0ICAgIH0pXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXBhbmVsX19jb250ZW50XCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaGFzLXNlY29uZHMnOiBfdm0uc2hvd1NlY29uZHNcblx0ICAgIH1cblx0ICB9LCBbX2MoJ3RpbWUtc3Bpbm5lcicsIHtcblx0ICAgIHJlZjogXCJzcGlubmVyXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInNob3ctc2Vjb25kc1wiOiBfdm0uc2hvd1NlY29uZHMsXG5cdCAgICAgIFwiaG91cnNcIjogX3ZtLmhvdXJzLFxuXHQgICAgICBcIm1pbnV0ZXNcIjogX3ZtLm1pbnV0ZXMsXG5cdCAgICAgIFwic2Vjb25kc1wiOiBfdm0uc2Vjb25kc1xuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2hhbmdlXCI6IF92bS5oYW5kbGVDaGFuZ2UsXG5cdCAgICAgIFwic2VsZWN0LXJhbmdlXCI6IF92bS5zZXRTZWxlY3Rpb25SYW5nZVxuXHQgICAgfVxuXHQgIH0pXSwgMSksIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXBhbmVsX19mb290ZXJcIlxuXHQgIH0sIFtfYygnYnV0dG9uJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1wYW5lbF9fYnRuIGNhbmNlbFwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJ0eXBlXCI6IFwiYnV0dG9uXCJcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5oYW5kbGVDYW5jZWxcblx0ICAgIH1cblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0udCgnZWwuZGF0ZXBpY2tlci5jYW5jZWwnKSkpXSksIF9jKCdidXR0b24nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXBhbmVsX19idG4gY29uZmlybVwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJ0eXBlXCI6IFwiYnV0dG9uXCJcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5oYW5kbGVDb25maXJtKClcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC5kYXRlcGlja2VyLmNvbmZpcm0nKSkpXSldKV0pXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMTY0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2NSksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2NiksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDE2NSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgcHJvcHM6IHtcblx0ICAgIGRpc2FibGVkRGF0ZToge30sXG5cdCAgICBkYXRlOiB7fSxcblx0ICAgIHllYXI6IHt9XG5cdCAgfSxcblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBzdGFydFllYXI6IGZ1bmN0aW9uIHN0YXJ0WWVhcigpIHtcblx0ICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy55ZWFyIC8gMTApICogMTA7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGdldENlbGxTdHlsZTogZnVuY3Rpb24gZ2V0Q2VsbFN0eWxlKHllYXIpIHtcblx0ICAgICAgdmFyIHN0eWxlID0ge307XG5cblx0ICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCAwLCAxLCAwKTtcblx0ICAgICAgdmFyIG5leHRZZWFyID0gbmV3IERhdGUoZGF0ZSk7XG5cdCAgICAgIG5leHRZZWFyLnNldEZ1bGxZZWFyKHllYXIgKyAxKTtcblxuXHQgICAgICB2YXIgZmxhZyA9IGZhbHNlO1xuXHQgICAgICBpZiAodHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlID09PSAnZnVuY3Rpb24nKSB7XG5cblx0ICAgICAgICB3aGlsZSAoZGF0ZSA8IG5leHRZZWFyKSB7XG5cdCAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkpIHtcblx0ICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpICsgOC42NGU3KTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAoZGF0ZSAtIG5leHRZZWFyID09PSAwKSBmbGFnID0gdHJ1ZTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHN0eWxlLmRpc2FibGVkID0gZmxhZztcblx0ICAgICAgc3R5bGUuY3VycmVudCA9IE51bWJlcih0aGlzLnllYXIpID09PSB5ZWFyO1xuXG5cdCAgICAgIHJldHVybiBzdHlsZTtcblx0ICAgIH0sXG5cdCAgICBuZXh0VGVuWWVhcjogZnVuY3Rpb24gbmV4dFRlblllYXIoKSB7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBOdW1iZXIodGhpcy55ZWFyKSArIDEwLCBmYWxzZSk7XG5cdCAgICB9LFxuXHQgICAgcHJldlRlblllYXI6IGZ1bmN0aW9uIHByZXZUZW5ZZWFyKCkge1xuXHQgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgTnVtYmVyKHRoaXMueWVhcikgLSAxMCwgZmFsc2UpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZVllYXJUYWJsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVZZWFyVGFibGVDbGljayhldmVudCkge1xuXHQgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHQgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdBJykge1xuXHQgICAgICAgIGlmICgoMCwgX2RvbS5oYXNDbGFzcykodGFyZ2V0LnBhcmVudE5vZGUsICdkaXNhYmxlZCcpKSByZXR1cm47XG5cdCAgICAgICAgdmFyIHllYXIgPSB0YXJnZXQudGV4dENvbnRlbnQgfHwgdGFyZ2V0LmlubmVyVGV4dDtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgTnVtYmVyKHllYXIpKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblx0fTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuLyoqKi8gfSxcbi8qIDE2NiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ3RhYmxlJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwteWVhci10YWJsZVwiLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0uaGFuZGxlWWVhclRhYmxlQ2xpY2tcblx0ICAgIH1cblx0ICB9LCBbX2MoJ3Rib2R5JywgW19jKCd0cicsIFtfYygndGQnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJhdmFpbGFibGVcIixcblx0ICAgIGNsYXNzOiBfdm0uZ2V0Q2VsbFN0eWxlKF92bS5zdGFydFllYXIgKyAwKVxuXHQgIH0sIFtfYygnYScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImNlbGxcIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS5zdGFydFllYXIpKV0pXSksIF9jKCd0ZCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImF2YWlsYWJsZVwiLFxuXHQgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDEpXG5cdCAgfSwgW19jKCdhJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiY2VsbFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDEpKV0pXSksIF9jKCd0ZCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImF2YWlsYWJsZVwiLFxuXHQgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDIpXG5cdCAgfSwgW19jKCdhJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiY2VsbFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDIpKV0pXSksIF9jKCd0ZCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImF2YWlsYWJsZVwiLFxuXHQgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDMpXG5cdCAgfSwgW19jKCdhJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiY2VsbFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDMpKV0pXSldKSwgX2MoJ3RyJywgW19jKCd0ZCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImF2YWlsYWJsZVwiLFxuXHQgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDQpXG5cdCAgfSwgW19jKCdhJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiY2VsbFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDQpKV0pXSksIF9jKCd0ZCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImF2YWlsYWJsZVwiLFxuXHQgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDUpXG5cdCAgfSwgW19jKCdhJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiY2VsbFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDUpKV0pXSksIF9jKCd0ZCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImF2YWlsYWJsZVwiLFxuXHQgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDYpXG5cdCAgfSwgW19jKCdhJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiY2VsbFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDYpKV0pXSksIF9jKCd0ZCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImF2YWlsYWJsZVwiLFxuXHQgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDcpXG5cdCAgfSwgW19jKCdhJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiY2VsbFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDcpKV0pXSldKSwgX2MoJ3RyJywgW19jKCd0ZCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImF2YWlsYWJsZVwiLFxuXHQgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDgpXG5cdCAgfSwgW19jKCdhJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiY2VsbFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDgpKV0pXSksIF9jKCd0ZCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImF2YWlsYWJsZVwiLFxuXHQgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDkpXG5cdCAgfSwgW19jKCdhJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiY2VsbFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDkpKV0pXSksIF9jKCd0ZCcpLCBfYygndGQnKV0pXSldKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAxNjcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTY4KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTY5KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMTY4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2xvY2FsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG5cdHZhciBfbG9jYWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xvY2FsZSk7XG5cblx0dmFyIF9kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIHByb3BzOiB7XG5cdCAgICBkaXNhYmxlZERhdGU6IHt9LFxuXHQgICAgZGF0ZToge30sXG5cdCAgICBtb250aDoge1xuXHQgICAgICB0eXBlOiBOdW1iZXJcblx0ICAgIH1cblx0ICB9LFxuXHQgIG1peGluczogW19sb2NhbGUyLmRlZmF1bHRdLFxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGdldENlbGxTdHlsZTogZnVuY3Rpb24gZ2V0Q2VsbFN0eWxlKG1vbnRoKSB7XG5cdCAgICAgIHZhciBzdHlsZSA9IHt9O1xuXG5cdCAgICAgIHZhciB5ZWFyID0gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCk7XG5cdCAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoMCk7XG5cdCAgICAgIGRhdGUuc2V0RnVsbFllYXIoeWVhcik7XG5cdCAgICAgIGRhdGUuc2V0TW9udGgobW9udGgsIDEpO1xuXHQgICAgICBkYXRlLnNldEhvdXJzKDApO1xuXHQgICAgICB2YXIgbmV4dE1vbnRoID0gbmV3IERhdGUoZGF0ZSk7XG5cdCAgICAgIG5leHRNb250aC5zZXRNb250aChtb250aCArIDEpO1xuXG5cdCAgICAgIHZhciBmbGFnID0gZmFsc2U7XG5cdCAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXNhYmxlZERhdGUgPT09ICdmdW5jdGlvbicpIHtcblxuXHQgICAgICAgIHdoaWxlIChkYXRlIDwgbmV4dE1vbnRoKSB7XG5cdCAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkpIHtcblx0ICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpICsgOC42NGU3KTtcblx0ICAgICAgICAgICAgZmxhZyA9IHRydWU7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBmbGFnID0gZmFsc2U7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIHN0eWxlLmRpc2FibGVkID0gZmxhZztcblx0ICAgICAgc3R5bGUuY3VycmVudCA9IHRoaXMubW9udGggPT09IG1vbnRoO1xuXG5cdCAgICAgIHJldHVybiBzdHlsZTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVNb250aFRhYmxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZU1vbnRoVGFibGVDbGljayhldmVudCkge1xuXHQgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHQgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgIT09ICdBJykgcmV0dXJuO1xuXHQgICAgICBpZiAoKDAsIF9kb20uaGFzQ2xhc3MpKHRhcmdldC5wYXJlbnROb2RlLCAnZGlzYWJsZWQnKSkgcmV0dXJuO1xuXHQgICAgICB2YXIgY29sdW1uID0gdGFyZ2V0LnBhcmVudE5vZGUuY2VsbEluZGV4O1xuXHQgICAgICB2YXIgcm93ID0gdGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZS5yb3dJbmRleDtcblx0ICAgICAgdmFyIG1vbnRoID0gcm93ICogNCArIGNvbHVtbjtcblxuXHQgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgbW9udGgpO1xuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDE2OSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ3RhYmxlJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtbW9udGgtdGFibGVcIixcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLmhhbmRsZU1vbnRoVGFibGVDbGlja1xuXHQgICAgfVxuXHQgIH0sIFtfYygndGJvZHknLCBbX2MoJ3RyJywgW19jKCd0ZCcsIHtcblx0ICAgIGNsYXNzOiBfdm0uZ2V0Q2VsbFN0eWxlKDApXG5cdCAgfSwgW19jKCdhJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiY2VsbFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnQoJ2VsLmRhdGVwaWNrZXIubW9udGhzLmphbicpKSldKV0pLCBfYygndGQnLCB7XG5cdCAgICBjbGFzczogX3ZtLmdldENlbGxTdHlsZSgxKVxuXHQgIH0sIFtfYygnYScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImNlbGxcIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC5kYXRlcGlja2VyLm1vbnRocy5mZWInKSkpXSldKSwgX2MoJ3RkJywge1xuXHQgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoMilcblx0ICB9LCBbX2MoJ2EnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJjZWxsXCJcblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0udCgnZWwuZGF0ZXBpY2tlci5tb250aHMubWFyJykpKV0pXSksIF9jKCd0ZCcsIHtcblx0ICAgIGNsYXNzOiBfdm0uZ2V0Q2VsbFN0eWxlKDMpXG5cdCAgfSwgW19jKCdhJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiY2VsbFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnQoJ2VsLmRhdGVwaWNrZXIubW9udGhzLmFwcicpKSldKV0pXSksIF9jKCd0cicsIFtfYygndGQnLCB7XG5cdCAgICBjbGFzczogX3ZtLmdldENlbGxTdHlsZSg0KVxuXHQgIH0sIFtfYygnYScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImNlbGxcIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC5kYXRlcGlja2VyLm1vbnRocy5tYXknKSkpXSldKSwgX2MoJ3RkJywge1xuXHQgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoNSlcblx0ICB9LCBbX2MoJ2EnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJjZWxsXCJcblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0udCgnZWwuZGF0ZXBpY2tlci5tb250aHMuanVuJykpKV0pXSksIF9jKCd0ZCcsIHtcblx0ICAgIGNsYXNzOiBfdm0uZ2V0Q2VsbFN0eWxlKDYpXG5cdCAgfSwgW19jKCdhJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiY2VsbFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnQoJ2VsLmRhdGVwaWNrZXIubW9udGhzLmp1bCcpKSldKV0pLCBfYygndGQnLCB7XG5cdCAgICBjbGFzczogX3ZtLmdldENlbGxTdHlsZSg3KVxuXHQgIH0sIFtfYygnYScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImNlbGxcIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC5kYXRlcGlja2VyLm1vbnRocy5hdWcnKSkpXSldKV0pLCBfYygndHInLCBbX2MoJ3RkJywge1xuXHQgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoOClcblx0ICB9LCBbX2MoJ2EnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJjZWxsXCJcblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0udCgnZWwuZGF0ZXBpY2tlci5tb250aHMuc2VwJykpKV0pXSksIF9jKCd0ZCcsIHtcblx0ICAgIGNsYXNzOiBfdm0uZ2V0Q2VsbFN0eWxlKDkpXG5cdCAgfSwgW19jKCdhJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiY2VsbFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnQoJ2VsLmRhdGVwaWNrZXIubW9udGhzLm9jdCcpKSldKV0pLCBfYygndGQnLCB7XG5cdCAgICBjbGFzczogX3ZtLmdldENlbGxTdHlsZSgxMClcblx0ICB9LCBbX2MoJ2EnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJjZWxsXCJcblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0udCgnZWwuZGF0ZXBpY2tlci5tb250aHMubm92JykpKV0pXSksIF9jKCd0ZCcsIHtcblx0ICAgIGNsYXNzOiBfdm0uZ2V0Q2VsbFN0eWxlKDExKVxuXHQgIH0sIFtfYygnYScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImNlbGxcIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC5kYXRlcGlja2VyLm1vbnRocy5kZWMnKSkpXSldKV0pXSldKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAxNzAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTcxKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTcyKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMTcxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Myk7XG5cblx0dmFyIF9kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcblxuXHR2YXIgX2xvY2FsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG5cdHZhciBfbG9jYWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xvY2FsZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHR2YXIgX1dFRUtTID0gWydzdW4nLCAnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1JywgJ2ZyaScsICdzYXQnXTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHR2YXIgY2xlYXJIb3VycyA9IGZ1bmN0aW9uIGNsZWFySG91cnModGltZSkge1xuXHQgIHZhciBjbG9uZURhdGUgPSBuZXcgRGF0ZSh0aW1lKTtcblx0ICBjbG9uZURhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG5cdCAgcmV0dXJuIGNsb25lRGF0ZS5nZXRUaW1lKCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG1peGluczogW19sb2NhbGUyLmRlZmF1bHRdLFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIGZpcnN0RGF5T2ZXZWVrOiB7XG5cdCAgICAgIGRlZmF1bHQ6IDcsXG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIHZhbCA+PSAxICYmIHZhbCA8PSA3O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXG5cdCAgICBkYXRlOiB7fSxcblxuXHQgICAgeWVhcjoge30sXG5cblx0ICAgIG1vbnRoOiB7fSxcblxuXHQgICAgd2Vlazoge30sXG5cblx0ICAgIHNlbGVjdGlvbk1vZGU6IHtcblx0ICAgICAgZGVmYXVsdDogJ2RheSdcblx0ICAgIH0sXG5cblx0ICAgIHNob3dXZWVrTnVtYmVyOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IGZhbHNlXG5cdCAgICB9LFxuXG5cdCAgICBkaXNhYmxlZERhdGU6IHt9LFxuXG5cdCAgICBtaW5EYXRlOiB7fSxcblxuXHQgICAgbWF4RGF0ZToge30sXG5cblx0ICAgIHJhbmdlU3RhdGU6IHtcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgIGVuZERhdGU6IG51bGwsXG5cdCAgICAgICAgICBzZWxlY3Rpbmc6IGZhbHNlLFxuXHQgICAgICAgICAgcm93OiBudWxsLFxuXHQgICAgICAgICAgY29sdW1uOiBudWxsXG5cdCAgICAgICAgfTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgb2Zmc2V0RGF5OiBmdW5jdGlvbiBvZmZzZXREYXkoKSB7XG5cdCAgICAgIHZhciB3ZWVrID0gdGhpcy5maXJzdERheU9mV2Vlaztcblx0ICAgICAgLy8g5ZGo5pel5Li655WM6ZmQ77yM5bem5Y+z5YGP56e755qE5aSp5pWw77yMMzIxNzY1NCDkvovlpoLlkajkuIDlsLHmmK8gLTHvvIznm67nmoTmmK/osIPmlbTliY3kuKTooYzml6XmnJ/nmoTkvY3nva5cblx0ICAgICAgcmV0dXJuIHdlZWsgPiAzID8gNyAtIHdlZWsgOiAtd2Vlaztcblx0ICAgIH0sXG5cdCAgICBXRUVLUzogZnVuY3Rpb24gV0VFS1MoKSB7XG5cdCAgICAgIHZhciB3ZWVrID0gdGhpcy5maXJzdERheU9mV2Vlaztcblx0ICAgICAgcmV0dXJuIF9XRUVLUy5jb25jYXQoX1dFRUtTKS5zbGljZSh3ZWVrLCB3ZWVrICsgNyk7XG5cdCAgICB9LFxuXHQgICAgbW9udGhEYXRlOiBmdW5jdGlvbiBtb250aERhdGUoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLmRhdGUuZ2V0RGF0ZSgpO1xuXHQgICAgfSxcblx0ICAgIHN0YXJ0RGF0ZTogZnVuY3Rpb24gc3RhcnREYXRlKCkge1xuXHQgICAgICByZXR1cm4gKDAsIF91dGlsLmdldFN0YXJ0RGF0ZU9mTW9udGgpKHRoaXMueWVhciwgdGhpcy5tb250aCk7XG5cdCAgICB9LFxuXHQgICAgcm93czogZnVuY3Rpb24gcm93cygpIHtcblx0ICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh0aGlzLnllYXIsIHRoaXMubW9udGgsIDEpO1xuXHQgICAgICB2YXIgZGF5ID0gKDAsIF91dGlsLmdldEZpcnN0RGF5T2ZNb250aCkoZGF0ZSk7IC8vIGRheSBvZiBmaXJzdCBkYXlcblx0ICAgICAgdmFyIGRhdGVDb3VudE9mTW9udGggPSAoMCwgX3V0aWwuZ2V0RGF5Q291bnRPZk1vbnRoKShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSk7XG5cdCAgICAgIHZhciBkYXRlQ291bnRPZkxhc3RNb250aCA9ICgwLCBfdXRpbC5nZXREYXlDb3VudE9mTW9udGgpKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpID09PSAwID8gMTEgOiBkYXRlLmdldE1vbnRoKCkgLSAxKTtcblxuXHQgICAgICBkYXkgPSBkYXkgPT09IDAgPyA3IDogZGF5O1xuXG5cdCAgICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldERheTtcblx0ICAgICAgdmFyIHJvd3MgPSB0aGlzLnRhYmxlUm93cztcblx0ICAgICAgdmFyIGNvdW50ID0gMTtcblx0ICAgICAgdmFyIGZpcnN0RGF5UG9zaXRpb24gPSB2b2lkIDA7XG5cblx0ICAgICAgdmFyIHN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlO1xuXHQgICAgICB2YXIgZGlzYWJsZWREYXRlID0gdGhpcy5kaXNhYmxlZERhdGU7XG5cdCAgICAgIHZhciBub3cgPSBjbGVhckhvdXJzKG5ldyBEYXRlKCkpO1xuXG5cdCAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgaSsrKSB7XG5cdCAgICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG5cblx0ICAgICAgICBpZiAodGhpcy5zaG93V2Vla051bWJlcikge1xuXHQgICAgICAgICAgaWYgKCFyb3dbMF0pIHtcblx0ICAgICAgICAgICAgcm93WzBdID0geyB0eXBlOiAnd2VlaycsIHRleHQ6ICgwLCBfdXRpbC5nZXRXZWVrTnVtYmVyKShuZXcgRGF0ZShzdGFydERhdGUuZ2V0VGltZSgpICsgX3V0aWwuREFZX0RVUkFUSU9OICogKGkgKiA3ICsgMSkpKSB9O1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNzsgaisrKSB7XG5cdCAgICAgICAgICB2YXIgY2VsbCA9IHJvd1t0aGlzLnNob3dXZWVrTnVtYmVyID8gaiArIDEgOiBqXTtcblx0ICAgICAgICAgIGlmICghY2VsbCkge1xuXHQgICAgICAgICAgICBjZWxsID0geyByb3c6IGksIGNvbHVtbjogaiwgdHlwZTogJ25vcm1hbCcsIGluUmFuZ2U6IGZhbHNlLCBzdGFydDogZmFsc2UsIGVuZDogZmFsc2UgfTtcblx0ICAgICAgICAgIH1cblxuXHQgICAgICAgICAgY2VsbC50eXBlID0gJ25vcm1hbCc7XG5cblx0ICAgICAgICAgIHZhciBpbmRleCA9IGkgKiA3ICsgajtcblx0ICAgICAgICAgIHZhciB0aW1lID0gc3RhcnREYXRlLmdldFRpbWUoKSArIF91dGlsLkRBWV9EVVJBVElPTiAqIChpbmRleCAtIG9mZnNldCk7XG5cdCAgICAgICAgICBjZWxsLmluUmFuZ2UgPSB0aW1lID49IGNsZWFySG91cnModGhpcy5taW5EYXRlKSAmJiB0aW1lIDw9IGNsZWFySG91cnModGhpcy5tYXhEYXRlKTtcblx0ICAgICAgICAgIGNlbGwuc3RhcnQgPSB0aGlzLm1pbkRhdGUgJiYgdGltZSA9PT0gY2xlYXJIb3Vycyh0aGlzLm1pbkRhdGUpO1xuXHQgICAgICAgICAgY2VsbC5lbmQgPSB0aGlzLm1heERhdGUgJiYgdGltZSA9PT0gY2xlYXJIb3Vycyh0aGlzLm1heERhdGUpO1xuXHQgICAgICAgICAgdmFyIGlzVG9kYXkgPSB0aW1lID09PSBub3c7XG5cblx0ICAgICAgICAgIGlmIChpc1RvZGF5KSB7XG5cdCAgICAgICAgICAgIGNlbGwudHlwZSA9ICd0b2RheSc7XG5cdCAgICAgICAgICB9XG5cblx0ICAgICAgICAgIGlmIChpID49IDAgJiYgaSA8PSAxKSB7XG5cdCAgICAgICAgICAgIGlmIChqICsgaSAqIDcgPj0gZGF5ICsgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgICAgY2VsbC50ZXh0ID0gY291bnQrKztcblx0ICAgICAgICAgICAgICBpZiAoY291bnQgPT09IDIpIHtcblx0ICAgICAgICAgICAgICAgIGZpcnN0RGF5UG9zaXRpb24gPSBpICogNyArIGo7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgIGNlbGwudGV4dCA9IGRhdGVDb3VudE9mTGFzdE1vbnRoIC0gKGRheSArIG9mZnNldCAtIGogJSA3KSArIDEgKyBpICogNztcblx0ICAgICAgICAgICAgICBjZWxsLnR5cGUgPSAncHJldi1tb250aCc7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGlmIChjb3VudCA8PSBkYXRlQ291bnRPZk1vbnRoKSB7XG5cdCAgICAgICAgICAgICAgY2VsbC50ZXh0ID0gY291bnQrKztcblx0ICAgICAgICAgICAgICBpZiAoY291bnQgPT09IDIpIHtcblx0ICAgICAgICAgICAgICAgIGZpcnN0RGF5UG9zaXRpb24gPSBpICogNyArIGo7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgIGNlbGwudGV4dCA9IGNvdW50KysgLSBkYXRlQ291bnRPZk1vbnRoO1xuXHQgICAgICAgICAgICAgIGNlbGwudHlwZSA9ICduZXh0LW1vbnRoJztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXG5cdCAgICAgICAgICBjZWxsLmRpc2FibGVkID0gdHlwZW9mIGRpc2FibGVkRGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkaXNhYmxlZERhdGUobmV3IERhdGUodGltZSkpO1xuXG5cdCAgICAgICAgICB0aGlzLiRzZXQocm93LCB0aGlzLnNob3dXZWVrTnVtYmVyID8gaiArIDEgOiBqLCBjZWxsKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnd2VlaycpIHtcblx0ICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuc2hvd1dlZWtOdW1iZXIgPyAxIDogMDtcblx0ICAgICAgICAgIHZhciBlbmQgPSB0aGlzLnNob3dXZWVrTnVtYmVyID8gNyA6IDY7XG5cdCAgICAgICAgICB2YXIgaXNXZWVrQWN0aXZlID0gdGhpcy5pc1dlZWtBY3RpdmUocm93W3N0YXJ0ICsgMV0pO1xuXG5cdCAgICAgICAgICByb3dbc3RhcnRdLmluUmFuZ2UgPSBpc1dlZWtBY3RpdmU7XG5cdCAgICAgICAgICByb3dbc3RhcnRdLnN0YXJ0ID0gaXNXZWVrQWN0aXZlO1xuXHQgICAgICAgICAgcm93W2VuZF0uaW5SYW5nZSA9IGlzV2Vla0FjdGl2ZTtcblx0ICAgICAgICAgIHJvd1tlbmRdLmVuZCA9IGlzV2Vla0FjdGl2ZTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICByb3dzLmZpcnN0RGF5UG9zaXRpb24gPSBmaXJzdERheVBvc2l0aW9uO1xuXG5cdCAgICAgIHJldHVybiByb3dzO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICB3YXRjaDoge1xuXHQgICAgJ3JhbmdlU3RhdGUuZW5kRGF0ZSc6IGZ1bmN0aW9uIHJhbmdlU3RhdGVFbmREYXRlKG5ld1ZhbCkge1xuXHQgICAgICB0aGlzLm1hcmtSYW5nZShuZXdWYWwpO1xuXHQgICAgfSxcblx0ICAgIG1pbkRhdGU6IGZ1bmN0aW9uIG1pbkRhdGUobmV3VmFsLCBvbGRWYWwpIHtcblx0ICAgICAgaWYgKG5ld1ZhbCAmJiAhb2xkVmFsKSB7XG5cdCAgICAgICAgdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZyA9IHRydWU7XG5cdCAgICAgICAgdGhpcy5tYXJrUmFuZ2UobmV3VmFsKTtcblx0ICAgICAgfSBlbHNlIGlmICghbmV3VmFsKSB7XG5cdCAgICAgICAgdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZyA9IGZhbHNlO1xuXHQgICAgICAgIHRoaXMubWFya1JhbmdlKG5ld1ZhbCk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5tYXJrUmFuZ2UoKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1heERhdGU6IGZ1bmN0aW9uIG1heERhdGUobmV3VmFsLCBvbGRWYWwpIHtcblx0ICAgICAgaWYgKG5ld1ZhbCAmJiAhb2xkVmFsKSB7XG5cdCAgICAgICAgdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZyA9IGZhbHNlO1xuXHQgICAgICAgIHRoaXMubWFya1JhbmdlKG5ld1ZhbCk7XG5cdCAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIHtcblx0ICAgICAgICAgIG1pbkRhdGU6IHRoaXMubWluRGF0ZSxcblx0ICAgICAgICAgIG1heERhdGU6IHRoaXMubWF4RGF0ZVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICB0YWJsZVJvd3M6IFtbXSwgW10sIFtdLCBbXSwgW10sIFtdXVxuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBnZXRDZWxsQ2xhc3NlczogZnVuY3Rpb24gZ2V0Q2VsbENsYXNzZXMoY2VsbCkge1xuXHQgICAgICB2YXIgc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0aW9uTW9kZTtcblx0ICAgICAgdmFyIG1vbnRoRGF0ZSA9IHRoaXMubW9udGhEYXRlO1xuXG5cdCAgICAgIHZhciBjbGFzc2VzID0gW107XG5cdCAgICAgIGlmICgoY2VsbC50eXBlID09PSAnbm9ybWFsJyB8fCBjZWxsLnR5cGUgPT09ICd0b2RheScpICYmICFjZWxsLmRpc2FibGVkKSB7XG5cdCAgICAgICAgY2xhc3Nlcy5wdXNoKCdhdmFpbGFibGUnKTtcblx0ICAgICAgICBpZiAoY2VsbC50eXBlID09PSAndG9kYXknKSB7XG5cdCAgICAgICAgICBjbGFzc2VzLnB1c2goJ3RvZGF5Jyk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIGNsYXNzZXMucHVzaChjZWxsLnR5cGUpO1xuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKHNlbGVjdGlvbk1vZGUgPT09ICdkYXknICYmIChjZWxsLnR5cGUgPT09ICdub3JtYWwnIHx8IGNlbGwudHlwZSA9PT0gJ3RvZGF5JykgJiYgTnVtYmVyKHRoaXMueWVhcikgPT09IHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpICYmIHRoaXMubW9udGggPT09IHRoaXMuZGF0ZS5nZXRNb250aCgpICYmIG1vbnRoRGF0ZSA9PT0gTnVtYmVyKGNlbGwudGV4dCkpIHtcblx0ICAgICAgICBjbGFzc2VzLnB1c2goJ2N1cnJlbnQnKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGlmIChjZWxsLmluUmFuZ2UgJiYgKGNlbGwudHlwZSA9PT0gJ25vcm1hbCcgfHwgY2VsbC50eXBlID09PSAndG9kYXknIHx8IHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3dlZWsnKSkge1xuXHQgICAgICAgIGNsYXNzZXMucHVzaCgnaW4tcmFuZ2UnKTtcblxuXHQgICAgICAgIGlmIChjZWxsLnN0YXJ0KSB7XG5cdCAgICAgICAgICBjbGFzc2VzLnB1c2goJ3N0YXJ0LWRhdGUnKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAoY2VsbC5lbmQpIHtcblx0ICAgICAgICAgIGNsYXNzZXMucHVzaCgnZW5kLWRhdGUnKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAoY2VsbC5kaXNhYmxlZCkge1xuXHQgICAgICAgIGNsYXNzZXMucHVzaCgnZGlzYWJsZWQnKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0ICAgIH0sXG5cdCAgICBnZXREYXRlT2ZDZWxsOiBmdW5jdGlvbiBnZXREYXRlT2ZDZWxsKHJvdywgY29sdW1uKSB7XG5cdCAgICAgIHZhciBzdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZTtcblxuXHQgICAgICByZXR1cm4gbmV3IERhdGUoc3RhcnREYXRlLmdldFRpbWUoKSArIChyb3cgKiA3ICsgKGNvbHVtbiAtICh0aGlzLnNob3dXZWVrTnVtYmVyID8gMSA6IDApKSAtIHRoaXMub2Zmc2V0RGF5KSAqIF91dGlsLkRBWV9EVVJBVElPTik7XG5cdCAgICB9LFxuXHQgICAgZ2V0Q2VsbEJ5RGF0ZTogZnVuY3Rpb24gZ2V0Q2VsbEJ5RGF0ZShkYXRlKSB7XG5cdCAgICAgIHZhciBzdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZTtcblx0ICAgICAgdmFyIHJvd3MgPSB0aGlzLnJvd3M7XG5cdCAgICAgIHZhciBpbmRleCA9IChkYXRlIC0gc3RhcnREYXRlKSAvIF91dGlsLkRBWV9EVVJBVElPTjtcblx0ICAgICAgdmFyIHJvdyA9IHJvd3NbTWF0aC5mbG9vcihpbmRleCAvIDcpXTtcblxuXHQgICAgICBpZiAodGhpcy5zaG93V2Vla051bWJlcikge1xuXHQgICAgICAgIHJldHVybiByb3dbaW5kZXggJSA3ICsgMV07XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuIHJvd1tpbmRleCAlIDddO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaXNXZWVrQWN0aXZlOiBmdW5jdGlvbiBpc1dlZWtBY3RpdmUoY2VsbCkge1xuXHQgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnd2VlaycpIHJldHVybiBmYWxzZTtcblx0ICAgICAgdmFyIG5ld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLnllYXIsIHRoaXMubW9udGgsIDEpO1xuXHQgICAgICB2YXIgeWVhciA9IG5ld0RhdGUuZ2V0RnVsbFllYXIoKTtcblx0ICAgICAgdmFyIG1vbnRoID0gbmV3RGF0ZS5nZXRNb250aCgpO1xuXG5cdCAgICAgIGlmIChjZWxsLnR5cGUgPT09ICdwcmV2LW1vbnRoJykge1xuXHQgICAgICAgIG5ld0RhdGUuc2V0TW9udGgobW9udGggPT09IDAgPyAxMSA6IG1vbnRoIC0gMSk7XG5cdCAgICAgICAgbmV3RGF0ZS5zZXRGdWxsWWVhcihtb250aCA9PT0gMCA/IHllYXIgLSAxIDogeWVhcik7XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAoY2VsbC50eXBlID09PSAnbmV4dC1tb250aCcpIHtcblx0ICAgICAgICBuZXdEYXRlLnNldE1vbnRoKG1vbnRoID09PSAxMSA/IDAgOiBtb250aCArIDEpO1xuXHQgICAgICAgIG5ld0RhdGUuc2V0RnVsbFllYXIobW9udGggPT09IDExID8geWVhciArIDEgOiB5ZWFyKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIG5ld0RhdGUuc2V0RGF0ZShwYXJzZUludChjZWxsLnRleHQsIDEwKSk7XG5cblx0ICAgICAgcmV0dXJuICgwLCBfdXRpbC5nZXRXZWVrTnVtYmVyKShuZXdEYXRlKSA9PT0gdGhpcy53ZWVrO1xuXHQgICAgfSxcblx0ICAgIG1hcmtSYW5nZTogZnVuY3Rpb24gbWFya1JhbmdlKG1heERhdGUpIHtcblx0ICAgICAgdmFyIHN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlO1xuXHQgICAgICBpZiAoIW1heERhdGUpIHtcblx0ICAgICAgICBtYXhEYXRlID0gdGhpcy5tYXhEYXRlO1xuXHQgICAgICB9XG5cblx0ICAgICAgdmFyIHJvd3MgPSB0aGlzLnJvd3M7XG5cdCAgICAgIHZhciBtaW5EYXRlID0gdGhpcy5taW5EYXRlO1xuXHQgICAgICBmb3IgKHZhciBpID0gMCwgayA9IHJvd3MubGVuZ3RoOyBpIDwgazsgaSsrKSB7XG5cdCAgICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG5cdCAgICAgICAgZm9yICh2YXIgaiA9IDAsIGwgPSByb3cubGVuZ3RoOyBqIDwgbDsgaisrKSB7XG5cdCAgICAgICAgICBpZiAodGhpcy5zaG93V2Vla051bWJlciAmJiBqID09PSAwKSBjb250aW51ZTtcblxuXHQgICAgICAgICAgdmFyIGNlbGwgPSByb3dbal07XG5cdCAgICAgICAgICB2YXIgaW5kZXggPSBpICogNyArIGogKyAodGhpcy5zaG93V2Vla051bWJlciA/IC0xIDogMCk7XG5cdCAgICAgICAgICB2YXIgdGltZSA9IHN0YXJ0RGF0ZS5nZXRUaW1lKCkgKyBfdXRpbC5EQVlfRFVSQVRJT04gKiAoaW5kZXggLSB0aGlzLm9mZnNldERheSk7XG5cblx0ICAgICAgICAgIGNlbGwuaW5SYW5nZSA9IG1pbkRhdGUgJiYgdGltZSA+PSBjbGVhckhvdXJzKG1pbkRhdGUpICYmIHRpbWUgPD0gY2xlYXJIb3VycyhtYXhEYXRlKTtcblx0ICAgICAgICAgIGNlbGwuc3RhcnQgPSBtaW5EYXRlICYmIHRpbWUgPT09IGNsZWFySG91cnMobWluRGF0ZS5nZXRUaW1lKCkpO1xuXHQgICAgICAgICAgY2VsbC5lbmQgPSBtYXhEYXRlICYmIHRpbWUgPT09IGNsZWFySG91cnMobWF4RGF0ZS5nZXRUaW1lKCkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGhhbmRsZU1vdXNlTW92ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VNb3ZlKGV2ZW50KSB7XG5cdCAgICAgIGlmICghdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZykgcmV0dXJuO1xuXG5cdCAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZXJhbmdlJywge1xuXHQgICAgICAgIG1pbkRhdGU6IHRoaXMubWluRGF0ZSxcblx0ICAgICAgICBtYXhEYXRlOiB0aGlzLm1heERhdGUsXG5cdCAgICAgICAgcmFuZ2VTdGF0ZTogdGhpcy5yYW5nZVN0YXRlXG5cdCAgICAgIH0pO1xuXG5cdCAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdCAgICAgIGlmICh0YXJnZXQudGFnTmFtZSAhPT0gJ1REJykgcmV0dXJuO1xuXG5cdCAgICAgIHZhciBjb2x1bW4gPSB0YXJnZXQuY2VsbEluZGV4O1xuXHQgICAgICB2YXIgcm93ID0gdGFyZ2V0LnBhcmVudE5vZGUucm93SW5kZXggLSAxO1xuXHQgICAgICB2YXIgX3JhbmdlU3RhdGUgPSB0aGlzLnJhbmdlU3RhdGUsXG5cdCAgICAgICAgICBvbGRSb3cgPSBfcmFuZ2VTdGF0ZS5yb3csXG5cdCAgICAgICAgICBvbGRDb2x1bW4gPSBfcmFuZ2VTdGF0ZS5jb2x1bW47XG5cblxuXHQgICAgICBpZiAob2xkUm93ICE9PSByb3cgfHwgb2xkQ29sdW1uICE9PSBjb2x1bW4pIHtcblx0ICAgICAgICB0aGlzLnJhbmdlU3RhdGUucm93ID0gcm93O1xuXHQgICAgICAgIHRoaXMucmFuZ2VTdGF0ZS5jb2x1bW4gPSBjb2x1bW47XG5cblx0ICAgICAgICB0aGlzLnJhbmdlU3RhdGUuZW5kRGF0ZSA9IHRoaXMuZ2V0RGF0ZU9mQ2VsbChyb3csIGNvbHVtbik7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcblx0ICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblxuXHQgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgIT09ICdURCcpIHJldHVybjtcblx0ICAgICAgaWYgKCgwLCBfZG9tLmhhc0NsYXNzKSh0YXJnZXQsICdkaXNhYmxlZCcpIHx8ICgwLCBfZG9tLmhhc0NsYXNzKSh0YXJnZXQsICd3ZWVrJykpIHJldHVybjtcblxuXHQgICAgICB2YXIgc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0aW9uTW9kZTtcblxuXHQgICAgICBpZiAoc2VsZWN0aW9uTW9kZSA9PT0gJ3dlZWsnKSB7XG5cdCAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUuY2VsbHNbMV07XG5cdCAgICAgIH1cblxuXHQgICAgICB2YXIgeWVhciA9IE51bWJlcih0aGlzLnllYXIpO1xuXHQgICAgICB2YXIgbW9udGggPSBOdW1iZXIodGhpcy5tb250aCk7XG5cblx0ICAgICAgdmFyIGNlbGxJbmRleCA9IHRhcmdldC5jZWxsSW5kZXg7XG5cdCAgICAgIHZhciByb3dJbmRleCA9IHRhcmdldC5wYXJlbnROb2RlLnJvd0luZGV4O1xuXG5cdCAgICAgIHZhciBjZWxsID0gdGhpcy5yb3dzW3Jvd0luZGV4IC0gMV1bY2VsbEluZGV4XTtcblx0ICAgICAgdmFyIHRleHQgPSBjZWxsLnRleHQ7XG5cdCAgICAgIHZhciBjbGFzc05hbWUgPSB0YXJnZXQuY2xhc3NOYW1lO1xuXG5cdCAgICAgIHZhciBuZXdEYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpO1xuXG5cdCAgICAgIGlmIChjbGFzc05hbWUuaW5kZXhPZigncHJldicpICE9PSAtMSkge1xuXHQgICAgICAgIGlmIChtb250aCA9PT0gMCkge1xuXHQgICAgICAgICAgeWVhciA9IHllYXIgLSAxO1xuXHQgICAgICAgICAgbW9udGggPSAxMTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgbW9udGggPSBtb250aCAtIDE7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIG5ld0RhdGUuc2V0RnVsbFllYXIoeWVhcik7XG5cdCAgICAgICAgbmV3RGF0ZS5zZXRNb250aChtb250aCk7XG5cdCAgICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lLmluZGV4T2YoJ25leHQnKSAhPT0gLTEpIHtcblx0ICAgICAgICBpZiAobW9udGggPT09IDExKSB7XG5cdCAgICAgICAgICB5ZWFyID0geWVhciArIDE7XG5cdCAgICAgICAgICBtb250aCA9IDA7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIG1vbnRoID0gbW9udGggKyAxO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBuZXdEYXRlLnNldEZ1bGxZZWFyKHllYXIpO1xuXHQgICAgICAgIG5ld0RhdGUuc2V0TW9udGgobW9udGgpO1xuXHQgICAgICB9XG5cblx0ICAgICAgbmV3RGF0ZS5zZXREYXRlKHBhcnNlSW50KHRleHQsIDEwKSk7XG5cblx0ICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3JhbmdlJykge1xuXHQgICAgICAgIGlmICh0aGlzLm1pbkRhdGUgJiYgdGhpcy5tYXhEYXRlKSB7XG5cdCAgICAgICAgICB2YXIgbWluRGF0ZSA9IG5ldyBEYXRlKG5ld0RhdGUuZ2V0VGltZSgpKTtcblx0ICAgICAgICAgIHZhciBtYXhEYXRlID0gbnVsbDtcblxuXHQgICAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIHsgbWluRGF0ZTogbWluRGF0ZSwgbWF4RGF0ZTogbWF4RGF0ZSB9LCBmYWxzZSk7XG5cdCAgICAgICAgICB0aGlzLnJhbmdlU3RhdGUuc2VsZWN0aW5nID0gdHJ1ZTtcblx0ICAgICAgICAgIHRoaXMubWFya1JhbmdlKHRoaXMubWluRGF0ZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1pbkRhdGUgJiYgIXRoaXMubWF4RGF0ZSkge1xuXHQgICAgICAgICAgaWYgKG5ld0RhdGUgPj0gdGhpcy5taW5EYXRlKSB7XG5cdCAgICAgICAgICAgIHZhciBfbWF4RGF0ZSA9IG5ldyBEYXRlKG5ld0RhdGUuZ2V0VGltZSgpKTtcblx0ICAgICAgICAgICAgdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZyA9IGZhbHNlO1xuXG5cdCAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCB7XG5cdCAgICAgICAgICAgICAgbWluRGF0ZTogdGhpcy5taW5EYXRlLFxuXHQgICAgICAgICAgICAgIG1heERhdGU6IF9tYXhEYXRlXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIF9taW5EYXRlID0gbmV3IERhdGUobmV3RGF0ZS5nZXRUaW1lKCkpO1xuXG5cdCAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCB7IG1pbkRhdGU6IF9taW5EYXRlLCBtYXhEYXRlOiB0aGlzLm1heERhdGUgfSwgZmFsc2UpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubWluRGF0ZSkge1xuXHQgICAgICAgICAgdmFyIF9taW5EYXRlMiA9IG5ldyBEYXRlKG5ld0RhdGUuZ2V0VGltZSgpKTtcblxuXHQgICAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIHsgbWluRGF0ZTogX21pbkRhdGUyLCBtYXhEYXRlOiB0aGlzLm1heERhdGUgfSwgZmFsc2UpO1xuXHQgICAgICAgICAgdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZyA9IHRydWU7XG5cdCAgICAgICAgICB0aGlzLm1hcmtSYW5nZSh0aGlzLm1pbkRhdGUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09PSAnZGF5Jykge1xuXHQgICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBuZXdEYXRlKTtcblx0ICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb25Nb2RlID09PSAnd2VlaycpIHtcblx0ICAgICAgICB2YXIgd2Vla051bWJlciA9ICgwLCBfdXRpbC5nZXRXZWVrTnVtYmVyKShuZXdEYXRlKTtcblxuXHQgICAgICAgIHZhciB2YWx1ZSA9IG5ld0RhdGUuZ2V0RnVsbFllYXIoKSArICd3JyArIHdlZWtOdW1iZXI7XG5cdCAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIHtcblx0ICAgICAgICAgIHllYXI6IG5ld0RhdGUuZ2V0RnVsbFllYXIoKSxcblx0ICAgICAgICAgIHdlZWs6IHdlZWtOdW1iZXIsXG5cdCAgICAgICAgICB2YWx1ZTogdmFsdWUsXG5cdCAgICAgICAgICBkYXRlOiBuZXdEYXRlXG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxNzIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCd0YWJsZScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtdGFibGVcIixcblx0ICAgIGNsYXNzOiB7XG5cdCAgICAgICdpcy13ZWVrLW1vZGUnOiBfdm0uc2VsZWN0aW9uTW9kZSA9PT0gJ3dlZWsnXG5cdCAgICB9LFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJjZWxsc3BhY2luZ1wiOiBcIjBcIixcblx0ICAgICAgXCJjZWxscGFkZGluZ1wiOiBcIjBcIlxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLmhhbmRsZUNsaWNrLFxuXHQgICAgICBcIm1vdXNlbW92ZVwiOiBfdm0uaGFuZGxlTW91c2VNb3ZlXG5cdCAgICB9XG5cdCAgfSwgW19jKCd0Ym9keScsIFtfYygndHInLCBbKF92bS5zaG93V2Vla051bWJlcikgPyBfYygndGgnLCBbX3ZtLl92KF92bS5fcyhfdm0udCgnZWwuZGF0ZXBpY2tlci53ZWVrJykpKV0pIDogX3ZtLl9lKCksIF92bS5fbCgoX3ZtLldFRUtTKSwgZnVuY3Rpb24od2Vlaykge1xuXHQgICAgcmV0dXJuIF9jKCd0aCcsIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC5kYXRlcGlja2VyLndlZWtzLicgKyB3ZWVrKSkpXSlcblx0ICB9KV0sIDIpLCBfdm0uX2woKF92bS5yb3dzKSwgZnVuY3Rpb24ocm93KSB7XG5cdCAgICByZXR1cm4gX2MoJ3RyJywge1xuXHQgICAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXRhYmxlX19yb3dcIixcblx0ICAgICAgY2xhc3M6IHtcblx0ICAgICAgICBjdXJyZW50OiBfdm0uaXNXZWVrQWN0aXZlKHJvd1sxXSlcblx0ICAgICAgfVxuXHQgICAgfSwgX3ZtLl9sKChyb3cpLCBmdW5jdGlvbihjZWxsKSB7XG5cdCAgICAgIHJldHVybiBfYygndGQnLCB7XG5cdCAgICAgICAgY2xhc3M6IF92bS5nZXRDZWxsQ2xhc3NlcyhjZWxsKSxcblx0ICAgICAgICBkb21Qcm9wczoge1xuXHQgICAgICAgICAgXCJ0ZXh0Q29udGVudFwiOiBfdm0uX3MoY2VsbC50eXBlID09PSAndG9kYXknID8gX3ZtLnQoJ2VsLmRhdGVwaWNrZXIudG9kYXknKSA6IGNlbGwudGV4dClcblx0ICAgICAgICB9XG5cdCAgICAgIH0pXG5cdCAgICB9KSlcblx0ICB9KV0sIDIpXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMTczICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygndHJhbnNpdGlvbicsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwibmFtZVwiOiBcImVsLXpvb20taW4tdG9wXCJcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImFmdGVyLWxlYXZlXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS4kZW1pdCgnZG9kZXN0cm95Jylcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFtfYygnZGl2Jywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLnZpc2libGUpLFxuXHQgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWwgZWwtZGF0ZS1waWNrZXJcIixcblx0ICAgIGNsYXNzOiBbe1xuXHQgICAgICAnaGFzLXNpZGViYXInOiBfdm0uJHNsb3RzLnNpZGViYXIgfHwgX3ZtLnNob3J0Y3V0cyxcblx0ICAgICAgJ2hhcy10aW1lJzogX3ZtLnNob3dUaW1lXG5cdCAgICB9LCBfdm0ucG9wcGVyQ2xhc3NdLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIHdpZHRoOiBfdm0ud2lkdGggKyAncHgnXG5cdCAgICB9KVxuXHQgIH0sIFtfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19ib2R5LXdyYXBwZXJcIlxuXHQgIH0sIFtfdm0uX3QoXCJzaWRlYmFyXCIpLCAoX3ZtLnNob3J0Y3V0cykgPyBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19zaWRlYmFyXCJcblx0ICB9LCBfdm0uX2woKF92bS5zaG9ydGN1dHMpLCBmdW5jdGlvbihzaG9ydGN1dCkge1xuXHQgICAgcmV0dXJuIF9jKCdidXR0b24nLCB7XG5cdCAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fc2hvcnRjdXRcIixcblx0ICAgICAgYXR0cnM6IHtcblx0ICAgICAgICBcInR5cGVcIjogXCJidXR0b25cIlxuXHQgICAgICB9LFxuXHQgICAgICBvbjoge1xuXHQgICAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgICBfdm0uaGFuZGxlU2hvcnRjdXRDbGljayhzaG9ydGN1dClcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sIFtfdm0uX3YoX3ZtLl9zKHNob3J0Y3V0LnRleHQpKV0pXG5cdCAgfSkpIDogX3ZtLl9lKCksIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2JvZHlcIlxuXHQgIH0sIFsoX3ZtLnNob3dUaW1lKSA/IF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXBpY2tlcl9fdGltZS1oZWFkZXJcIlxuXHQgIH0sIFtfYygnc3BhbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcGlja2VyX19lZGl0b3Itd3JhcFwiXG5cdCAgfSwgW19jKCdlbC1pbnB1dCcsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwicGxhY2Vob2xkZXJcIjogX3ZtLnQoJ2VsLmRhdGVwaWNrZXIuc2VsZWN0RGF0ZScpLFxuXHQgICAgICBcInZhbHVlXCI6IF92bS52aXNpYmxlRGF0ZSxcblx0ICAgICAgXCJzaXplXCI6IFwic21hbGxcIlxuXHQgICAgfSxcblx0ICAgIG5hdGl2ZU9uOiB7XG5cdCAgICAgIFwiY2hhbmdlXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS52aXNpYmxlRGF0ZSA9ICRldmVudC50YXJnZXQudmFsdWVcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pXSwgMSksIF9jKCdzcGFuJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1waWNrZXJfX2VkaXRvci13cmFwXCJcblx0ICB9LCBbX2MoJ2VsLWlucHV0Jywge1xuXHQgICAgcmVmOiBcImlucHV0XCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInBsYWNlaG9sZGVyXCI6IF92bS50KCdlbC5kYXRlcGlja2VyLnNlbGVjdFRpbWUnKSxcblx0ICAgICAgXCJ2YWx1ZVwiOiBfdm0udmlzaWJsZVRpbWUsXG5cdCAgICAgIFwic2l6ZVwiOiBcInNtYWxsXCJcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImZvY3VzXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS50aW1lUGlja2VyVmlzaWJsZSA9ICFfdm0udGltZVBpY2tlclZpc2libGVcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG5hdGl2ZU9uOiB7XG5cdCAgICAgIFwiY2hhbmdlXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS52aXNpYmxlVGltZSA9ICRldmVudC50YXJnZXQudmFsdWVcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pLCBfYygndGltZS1waWNrZXInLCB7XG5cdCAgICByZWY6IFwidGltZXBpY2tlclwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJkYXRlXCI6IF92bS5kYXRlLFxuXHQgICAgICBcInBpY2tlci13aWR0aFwiOiBfdm0ucGlja2VyV2lkdGgsXG5cdCAgICAgIFwidmlzaWJsZVwiOiBfdm0udGltZVBpY2tlclZpc2libGVcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcInBpY2tcIjogX3ZtLmhhbmRsZVRpbWVQaWNrLFxuXHQgICAgICBcIm1vdW50ZWRcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLiRyZWZzLnRpbWVwaWNrZXIuZm9ybWF0ID0gX3ZtLnRpbWVGb3JtYXRcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pXSwgMSldKSA6IF92bS5fZSgpLCBfYygnZGl2Jywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLmN1cnJlbnRWaWV3ICE9PSAndGltZScpLFxuXHQgICAgICBleHByZXNzaW9uOiBcImN1cnJlbnRWaWV3ICE9PSAndGltZSdcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXBpY2tlcl9faGVhZGVyXCJcblx0ICB9LCBbX2MoJ2J1dHRvbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtZGF0ZS1waWNrZXJfX3ByZXYtYnRuIGVsLWljb24tZC1hcnJvdy1sZWZ0XCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInR5cGVcIjogXCJidXR0b25cIlxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLnByZXZZZWFyXG5cdCAgICB9XG5cdCAgfSksIF9jKCdidXR0b24nLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0uY3VycmVudFZpZXcgPT09ICdkYXRlJyksXG5cdCAgICAgIGV4cHJlc3Npb246IFwiY3VycmVudFZpZXcgPT09ICdkYXRlJ1wiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtZGF0ZS1waWNrZXJfX3ByZXYtYnRuIGVsLWljb24tYXJyb3ctbGVmdFwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJ0eXBlXCI6IFwiYnV0dG9uXCJcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5wcmV2TW9udGhcblx0ICAgIH1cblx0ICB9KSwgX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXBpY2tlcl9faGVhZGVyLWxhYmVsXCIsXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5zaG93WWVhclBpY2tlclxuXHQgICAgfVxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS55ZWFyTGFiZWwpKV0pLCBfYygnc3BhbicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5jdXJyZW50VmlldyA9PT0gJ2RhdGUnKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJjdXJyZW50VmlldyA9PT0gJ2RhdGUnXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1waWNrZXJfX2hlYWRlci1sYWJlbFwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgYWN0aXZlOiBfdm0uY3VycmVudFZpZXcgPT09ICdtb250aCdcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5zaG93TW9udGhQaWNrZXJcblx0ICAgIH1cblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0udCgoXCJlbC5kYXRlcGlja2VyLm1vbnRoXCIgKyAoX3ZtLm1vbnRoICsgMSkpKSkpXSksIF9jKCdidXR0b24nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWRhdGUtcGlja2VyX19uZXh0LWJ0biBlbC1pY29uLWQtYXJyb3ctcmlnaHRcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidHlwZVwiOiBcImJ1dHRvblwiXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0ubmV4dFllYXJcblx0ICAgIH1cblx0ICB9KSwgX2MoJ2J1dHRvbicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5jdXJyZW50VmlldyA9PT0gJ2RhdGUnKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJjdXJyZW50VmlldyA9PT0gJ2RhdGUnXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1kYXRlLXBpY2tlcl9fbmV4dC1idG4gZWwtaWNvbi1hcnJvdy1yaWdodFwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJ0eXBlXCI6IFwiYnV0dG9uXCJcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5uZXh0TW9udGhcblx0ICAgIH1cblx0ICB9KV0pLCBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19jb250ZW50XCJcblx0ICB9LCBbX2MoJ2RhdGUtdGFibGUnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0uY3VycmVudFZpZXcgPT09ICdkYXRlJyksXG5cdCAgICAgIGV4cHJlc3Npb246IFwiY3VycmVudFZpZXcgPT09ICdkYXRlJ1wiXG5cdCAgICB9XSxcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwieWVhclwiOiBfdm0ueWVhcixcblx0ICAgICAgXCJtb250aFwiOiBfdm0ubW9udGgsXG5cdCAgICAgIFwiZGF0ZVwiOiBfdm0uZGF0ZSxcblx0ICAgICAgXCJ3ZWVrXCI6IF92bS53ZWVrLFxuXHQgICAgICBcInNlbGVjdGlvbi1tb2RlXCI6IF92bS5zZWxlY3Rpb25Nb2RlLFxuXHQgICAgICBcImZpcnN0LWRheS1vZi13ZWVrXCI6IF92bS5maXJzdERheU9mV2Vlayxcblx0ICAgICAgXCJkaXNhYmxlZC1kYXRlXCI6IF92bS5kaXNhYmxlZERhdGVcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcInBpY2tcIjogX3ZtLmhhbmRsZURhdGVQaWNrXG5cdCAgICB9XG5cdCAgfSksIF9jKCd5ZWFyLXRhYmxlJywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLmN1cnJlbnRWaWV3ID09PSAneWVhcicpLFxuXHQgICAgICBleHByZXNzaW9uOiBcImN1cnJlbnRWaWV3ID09PSAneWVhcidcIlxuXHQgICAgfV0sXG5cdCAgICByZWY6IFwieWVhclRhYmxlXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInllYXJcIjogX3ZtLnllYXIsXG5cdCAgICAgIFwiZGF0ZVwiOiBfdm0uZGF0ZSxcblx0ICAgICAgXCJkaXNhYmxlZC1kYXRlXCI6IF92bS5kaXNhYmxlZERhdGVcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcInBpY2tcIjogX3ZtLmhhbmRsZVllYXJQaWNrXG5cdCAgICB9XG5cdCAgfSksIF9jKCdtb250aC10YWJsZScsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5jdXJyZW50VmlldyA9PT0gJ21vbnRoJyksXG5cdCAgICAgIGV4cHJlc3Npb246IFwiY3VycmVudFZpZXcgPT09ICdtb250aCdcIlxuXHQgICAgfV0sXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcIm1vbnRoXCI6IF92bS5tb250aCxcblx0ICAgICAgXCJkYXRlXCI6IF92bS5kYXRlLFxuXHQgICAgICBcImRpc2FibGVkLWRhdGVcIjogX3ZtLmRpc2FibGVkRGF0ZVxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwicGlja1wiOiBfdm0uaGFuZGxlTW9udGhQaWNrXG5cdCAgICB9XG5cdCAgfSldLCAxKV0pXSwgMiksIF9jKCdkaXYnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0uZm9vdGVyVmlzaWJsZSAmJiBfdm0uY3VycmVudFZpZXcgPT09ICdkYXRlJyksXG5cdCAgICAgIGV4cHJlc3Npb246IFwiZm9vdGVyVmlzaWJsZSAmJiBjdXJyZW50VmlldyA9PT0gJ2RhdGUnXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19mb290ZXJcIlxuXHQgIH0sIFtfYygnYScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fbGluay1idG5cIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwiaHJlZlwiOiBcIkphdmFTY3JpcHQ6XCJcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5jaGFuZ2VUb05vd1xuXHQgICAgfVxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC5kYXRlcGlja2VyLm5vdycpKSldKSwgX2MoJ2J1dHRvbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fYnRuXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInR5cGVcIjogXCJidXR0b25cIlxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLmNvbmZpcm1cblx0ICAgIH1cblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0udCgnZWwuZGF0ZXBpY2tlci5jb25maXJtJykpKV0pXSldKV0pXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDE3NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxNzUpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxNzYpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAxNzUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfdXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUzKTtcblxuXHR2YXIgX2xvY2FsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG5cdHZhciBfbG9jYWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xvY2FsZSk7XG5cblx0dmFyIF90aW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTgpO1xuXG5cdHZhciBfdGltZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90aW1lKTtcblxuXHR2YXIgX2RhdGVUYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwKTtcblxuXHR2YXIgX2RhdGVUYWJsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kYXRlVGFibGUpO1xuXG5cdHZhciBfaW5wdXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcblxuXHR2YXIgX2lucHV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lucHV0KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdHZhciBjYWxjRGVmYXVsdFZhbHVlID0gZnVuY3Rpb24gY2FsY0RlZmF1bHRWYWx1ZShkZWZhdWx0VmFsdWUpIHtcblx0ICBpZiAoQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpKSB7XG5cdCAgICByZXR1cm4gZGVmYXVsdFZhbHVlWzBdID8gbmV3IERhdGUoZGVmYXVsdFZhbHVlWzBdKSA6IG5ldyBEYXRlKCk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIHJldHVybiBuZXcgRGF0ZShkZWZhdWx0VmFsdWUpO1xuXHQgIH1cblx0fTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbWl4aW5zOiBbX2xvY2FsZTIuZGVmYXVsdF0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgYnRuRGlzYWJsZWQ6IGZ1bmN0aW9uIGJ0bkRpc2FibGVkKCkge1xuXHQgICAgICByZXR1cm4gISh0aGlzLm1pbkRhdGUgJiYgdGhpcy5tYXhEYXRlICYmICF0aGlzLnNlbGVjdGluZyk7XG5cdCAgICB9LFxuXHQgICAgbGVmdExhYmVsOiBmdW5jdGlvbiBsZWZ0TGFiZWwoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArICcgJyArIHRoaXMudCgnZWwuZGF0ZXBpY2tlci55ZWFyJykgKyAnICcgKyB0aGlzLnQoJ2VsLmRhdGVwaWNrZXIubW9udGgnICsgKHRoaXMuZGF0ZS5nZXRNb250aCgpICsgMSkpO1xuXHQgICAgfSxcblx0ICAgIHJpZ2h0TGFiZWw6IGZ1bmN0aW9uIHJpZ2h0TGFiZWwoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnJpZ2h0RGF0ZS5nZXRGdWxsWWVhcigpICsgJyAnICsgdGhpcy50KCdlbC5kYXRlcGlja2VyLnllYXInKSArICcgJyArIHRoaXMudCgnZWwuZGF0ZXBpY2tlci5tb250aCcgKyAodGhpcy5yaWdodERhdGUuZ2V0TW9udGgoKSArIDEpKTtcblx0ICAgIH0sXG5cdCAgICBsZWZ0WWVhcjogZnVuY3Rpb24gbGVmdFllYXIoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKTtcblx0ICAgIH0sXG5cdCAgICBsZWZ0TW9udGg6IGZ1bmN0aW9uIGxlZnRNb250aCgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuZGF0ZS5nZXRNb250aCgpO1xuXHQgICAgfSxcblx0ICAgIHJpZ2h0WWVhcjogZnVuY3Rpb24gcmlnaHRZZWFyKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5yaWdodERhdGUuZ2V0RnVsbFllYXIoKTtcblx0ICAgIH0sXG5cdCAgICByaWdodE1vbnRoOiBmdW5jdGlvbiByaWdodE1vbnRoKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5yaWdodERhdGUuZ2V0TW9udGgoKTtcblx0ICAgIH0sXG5cdCAgICBtaW5WaXNpYmxlRGF0ZTogZnVuY3Rpb24gbWluVmlzaWJsZURhdGUoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLm1pbkRhdGUgPyAoMCwgX3V0aWwuZm9ybWF0RGF0ZSkodGhpcy5taW5EYXRlKSA6ICcnO1xuXHQgICAgfSxcblx0ICAgIG1heFZpc2libGVEYXRlOiBmdW5jdGlvbiBtYXhWaXNpYmxlRGF0ZSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMubWF4RGF0ZSB8fCB0aGlzLm1pbkRhdGUgPyAoMCwgX3V0aWwuZm9ybWF0RGF0ZSkodGhpcy5tYXhEYXRlIHx8IHRoaXMubWluRGF0ZSkgOiAnJztcblx0ICAgIH0sXG5cdCAgICBtaW5WaXNpYmxlVGltZTogZnVuY3Rpb24gbWluVmlzaWJsZVRpbWUoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLm1pbkRhdGUgPyAoMCwgX3V0aWwuZm9ybWF0RGF0ZSkodGhpcy5taW5EYXRlLCAnSEg6bW06c3MnKSA6ICcnO1xuXHQgICAgfSxcblx0ICAgIG1heFZpc2libGVUaW1lOiBmdW5jdGlvbiBtYXhWaXNpYmxlVGltZSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMubWF4RGF0ZSB8fCB0aGlzLm1pbkRhdGUgPyAoMCwgX3V0aWwuZm9ybWF0RGF0ZSkodGhpcy5tYXhEYXRlIHx8IHRoaXMubWluRGF0ZSwgJ0hIOm1tOnNzJykgOiAnJztcblx0ICAgIH0sXG5cdCAgICByaWdodERhdGU6IGZ1bmN0aW9uIHJpZ2h0RGF0ZSgpIHtcblx0ICAgICAgdmFyIG5ld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLmRhdGUpO1xuXHQgICAgICB2YXIgbW9udGggPSBuZXdEYXRlLmdldE1vbnRoKCk7XG5cdCAgICAgIG5ld0RhdGUuc2V0RGF0ZSgxKTtcblxuXHQgICAgICBpZiAobW9udGggPT09IDExKSB7XG5cdCAgICAgICAgbmV3RGF0ZS5zZXRGdWxsWWVhcihuZXdEYXRlLmdldEZ1bGxZZWFyKCkgKyAxKTtcblx0ICAgICAgICBuZXdEYXRlLnNldE1vbnRoKDApO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIG5ld0RhdGUuc2V0TW9udGgobW9udGggKyAxKTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gbmV3RGF0ZTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHBvcHBlckNsYXNzOiAnJyxcblx0ICAgICAgbWluUGlja2VyV2lkdGg6IDAsXG5cdCAgICAgIG1heFBpY2tlcldpZHRoOiAwLFxuXHQgICAgICBkYXRlOiB0aGlzLiRvcHRpb25zLmRlZmF1bHRWYWx1ZSA/IGNhbGNEZWZhdWx0VmFsdWUodGhpcy4kb3B0aW9ucy5kZWZhdWx0VmFsdWUpIDogbmV3IERhdGUoKSxcblx0ICAgICAgbWluRGF0ZTogJycsXG5cdCAgICAgIG1heERhdGU6ICcnLFxuXHQgICAgICByYW5nZVN0YXRlOiB7XG5cdCAgICAgICAgZW5kRGF0ZTogbnVsbCxcblx0ICAgICAgICBzZWxlY3Rpbmc6IGZhbHNlLFxuXHQgICAgICAgIHJvdzogbnVsbCxcblx0ICAgICAgICBjb2x1bW46IG51bGxcblx0ICAgICAgfSxcblx0ICAgICAgc2hvd1RpbWU6IGZhbHNlLFxuXHQgICAgICBzaG9ydGN1dHM6ICcnLFxuXHQgICAgICB2YWx1ZTogJycsXG5cdCAgICAgIHZpc2libGU6ICcnLFxuXHQgICAgICBkaXNhYmxlZERhdGU6ICcnLFxuXHQgICAgICBmaXJzdERheU9mV2VlazogNyxcblx0ICAgICAgbWluVGltZVBpY2tlclZpc2libGU6IGZhbHNlLFxuXHQgICAgICBtYXhUaW1lUGlja2VyVmlzaWJsZTogZmFsc2UsXG5cdCAgICAgIHdpZHRoOiAwXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIHdhdGNoOiB7XG5cdCAgICBzaG93VGltZTogZnVuY3Rpb24gc2hvd1RpbWUodmFsKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgaWYgKCF2YWwpIHJldHVybjtcblx0ICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcblx0ICAgICAgICB2YXIgbWluSW5wdXRFbG0gPSBfdGhpcy4kcmVmcy5taW5JbnB1dC4kZWw7XG5cdCAgICAgICAgdmFyIG1heElucHV0RWxtID0gX3RoaXMuJHJlZnMubWF4SW5wdXQuJGVsO1xuXHQgICAgICAgIGlmIChtaW5JbnB1dEVsbSkge1xuXHQgICAgICAgICAgX3RoaXMubWluUGlja2VyV2lkdGggPSBtaW5JbnB1dEVsbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArIDEwO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAobWF4SW5wdXRFbG0pIHtcblx0ICAgICAgICAgIF90aGlzLm1heFBpY2tlcldpZHRoID0gbWF4SW5wdXRFbG0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKyAxMDtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgfSxcblx0ICAgIG1pbkRhdGU6IGZ1bmN0aW9uIG1pbkRhdGUoKSB7XG5cdCAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoX3RoaXMyLm1heERhdGUgJiYgX3RoaXMyLm1heERhdGUgPCBfdGhpczIubWluRGF0ZSkge1xuXHQgICAgICAgICAgdmFyIGZvcm1hdCA9ICdISDptbTpzcyc7XG5cblx0ICAgICAgICAgIF90aGlzMi4kcmVmcy5tYXhUaW1lUGlja2VyLnNlbGVjdGFibGVSYW5nZSA9IFtbKDAsIF91dGlsLnBhcnNlRGF0ZSkoKDAsIF91dGlsLmZvcm1hdERhdGUpKF90aGlzMi5taW5EYXRlLCBmb3JtYXQpLCBmb3JtYXQpLCAoMCwgX3V0aWwucGFyc2VEYXRlKSgnMjM6NTk6NTknLCBmb3JtYXQpXV07XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgIH0sXG5cdCAgICBtaW5UaW1lUGlja2VyVmlzaWJsZTogZnVuY3Rpb24gbWluVGltZVBpY2tlclZpc2libGUodmFsKSB7XG5cdCAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG5cdCAgICAgIGlmICh2YWwpIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gX3RoaXMzLiRyZWZzLm1pblRpbWVQaWNrZXIuYWp1c3RTY3JvbGxUb3AoKTtcblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgbWF4VGltZVBpY2tlclZpc2libGU6IGZ1bmN0aW9uIG1heFRpbWVQaWNrZXJWaXNpYmxlKHZhbCkge1xuXHQgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuXHQgICAgICBpZiAodmFsKSB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIF90aGlzNC4kcmVmcy5tYXhUaW1lUGlja2VyLmFqdXN0U2Nyb2xsVG9wKCk7XG5cdCAgICAgIH0pO1xuXHQgICAgfSxcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShuZXdWYWwpIHtcblx0ICAgICAgaWYgKCFuZXdWYWwpIHtcblx0ICAgICAgICB0aGlzLm1pbkRhdGUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMubWF4RGF0ZSA9IG51bGw7XG5cdCAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuZXdWYWwpKSB7XG5cdCAgICAgICAgdGhpcy5taW5EYXRlID0gbmV3VmFsWzBdID8gKDAsIF91dGlsLnRvRGF0ZSkobmV3VmFsWzBdKSA6IG51bGw7XG5cdCAgICAgICAgdGhpcy5tYXhEYXRlID0gbmV3VmFsWzFdID8gKDAsIF91dGlsLnRvRGF0ZSkobmV3VmFsWzFdKSA6IG51bGw7XG5cdCAgICAgICAgaWYgKHRoaXMubWluRGF0ZSkgdGhpcy5kYXRlID0gbmV3IERhdGUodGhpcy5taW5EYXRlKTtcblx0ICAgICAgICB0aGlzLmhhbmRsZUNvbmZpcm0odHJ1ZSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgaGFuZGxlQ2xlYXI6IGZ1bmN0aW9uIGhhbmRsZUNsZWFyKCkge1xuXHQgICAgICB0aGlzLm1pbkRhdGUgPSBudWxsO1xuXHQgICAgICB0aGlzLm1heERhdGUgPSBudWxsO1xuXHQgICAgICB0aGlzLmRhdGUgPSB0aGlzLiRvcHRpb25zLmRlZmF1bHRWYWx1ZSA/IGNhbGNEZWZhdWx0VmFsdWUodGhpcy4kb3B0aW9ucy5kZWZhdWx0VmFsdWUpIDogbmV3IERhdGUoKTtcblx0ICAgICAgdGhpcy5oYW5kbGVDb25maXJtKGZhbHNlKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVEYXRlSW5wdXQ6IGZ1bmN0aW9uIGhhbmRsZURhdGVJbnB1dChldmVudCwgdHlwZSkge1xuXHQgICAgICB2YXIgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cdCAgICAgIHZhciBwYXJzZWRWYWx1ZSA9ICgwLCBfdXRpbC5wYXJzZURhdGUpKHZhbHVlLCAneXl5eS1NTS1kZCcpO1xuXG5cdCAgICAgIGlmIChwYXJzZWRWYWx1ZSkge1xuXHQgICAgICAgIGlmICh0eXBlb2YgdGhpcy5kaXNhYmxlZERhdGUgPT09ICdmdW5jdGlvbicgJiYgdGhpcy5kaXNhYmxlZERhdGUobmV3IERhdGUocGFyc2VkVmFsdWUpKSkge1xuXHQgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgdGFyZ2V0ID0gbmV3IERhdGUodHlwZSA9PT0gJ21pbicgPyB0aGlzLm1pbkRhdGUgOiB0aGlzLm1heERhdGUpO1xuXHQgICAgICAgIGlmICh0YXJnZXQpIHtcblx0ICAgICAgICAgIHRhcmdldC5zZXRGdWxsWWVhcihwYXJzZWRWYWx1ZS5nZXRGdWxsWWVhcigpKTtcblx0ICAgICAgICAgIHRhcmdldC5zZXRNb250aChwYXJzZWRWYWx1ZS5nZXRNb250aCgpLCBwYXJzZWRWYWx1ZS5nZXREYXRlKCkpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGhhbmRsZUNoYW5nZVJhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2VSYW5nZSh2YWwpIHtcblx0ICAgICAgdGhpcy5taW5EYXRlID0gdmFsLm1pbkRhdGU7XG5cdCAgICAgIHRoaXMubWF4RGF0ZSA9IHZhbC5tYXhEYXRlO1xuXHQgICAgICB0aGlzLnJhbmdlU3RhdGUgPSB2YWwucmFuZ2VTdGF0ZTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVEYXRlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVEYXRlQ2hhbmdlKGV2ZW50LCB0eXBlKSB7XG5cdCAgICAgIHZhciB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblx0ICAgICAgdmFyIHBhcnNlZFZhbHVlID0gKDAsIF91dGlsLnBhcnNlRGF0ZSkodmFsdWUsICd5eXl5LU1NLWRkJyk7XG5cdCAgICAgIGlmIChwYXJzZWRWYWx1ZSkge1xuXHQgICAgICAgIHZhciB0YXJnZXQgPSBuZXcgRGF0ZSh0eXBlID09PSAnbWluJyA/IHRoaXMubWluRGF0ZSA6IHRoaXMubWF4RGF0ZSk7XG5cdCAgICAgICAgaWYgKHRhcmdldCkge1xuXHQgICAgICAgICAgdGFyZ2V0LnNldEZ1bGxZZWFyKHBhcnNlZFZhbHVlLmdldEZ1bGxZZWFyKCkpO1xuXHQgICAgICAgICAgdGFyZ2V0LnNldE1vbnRoKHBhcnNlZFZhbHVlLmdldE1vbnRoKCksIHBhcnNlZFZhbHVlLmdldERhdGUoKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmICh0eXBlID09PSAnbWluJykge1xuXHQgICAgICAgICAgaWYgKHRhcmdldCA8IHRoaXMubWF4RGF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLm1pbkRhdGUgPSBuZXcgRGF0ZSh0YXJnZXQuZ2V0VGltZSgpKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgaWYgKHRhcmdldCA+IHRoaXMubWluRGF0ZSkge1xuXHQgICAgICAgICAgICB0aGlzLm1heERhdGUgPSBuZXcgRGF0ZSh0YXJnZXQuZ2V0VGltZSgpKTtcblx0ICAgICAgICAgICAgaWYgKHRoaXMubWluRGF0ZSAmJiB0aGlzLm1pbkRhdGUgPiB0aGlzLm1heERhdGUpIHtcblx0ICAgICAgICAgICAgICB0aGlzLm1pbkRhdGUgPSBudWxsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlVGltZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlVGltZUNoYW5nZShldmVudCwgdHlwZSkge1xuXHQgICAgICB2YXIgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cdCAgICAgIHZhciBwYXJzZWRWYWx1ZSA9ICgwLCBfdXRpbC5wYXJzZURhdGUpKHZhbHVlLCAnSEg6bW06c3MnKTtcblx0ICAgICAgaWYgKHBhcnNlZFZhbHVlKSB7XG5cdCAgICAgICAgdmFyIHRhcmdldCA9IG5ldyBEYXRlKHR5cGUgPT09ICdtaW4nID8gdGhpcy5taW5EYXRlIDogdGhpcy5tYXhEYXRlKTtcblx0ICAgICAgICBpZiAodGFyZ2V0KSB7XG5cdCAgICAgICAgICB0YXJnZXQuc2V0SG91cnMocGFyc2VkVmFsdWUuZ2V0SG91cnMoKSk7XG5cdCAgICAgICAgICB0YXJnZXQuc2V0TWludXRlcyhwYXJzZWRWYWx1ZS5nZXRNaW51dGVzKCkpO1xuXHQgICAgICAgICAgdGFyZ2V0LnNldFNlY29uZHMocGFyc2VkVmFsdWUuZ2V0U2Vjb25kcygpKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHR5cGUgPT09ICdtaW4nKSB7XG5cdCAgICAgICAgICBpZiAodGFyZ2V0IDwgdGhpcy5tYXhEYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKHRhcmdldC5nZXRUaW1lKCkpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBpZiAodGFyZ2V0ID4gdGhpcy5taW5EYXRlKSB7XG5cdCAgICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKHRhcmdldC5nZXRUaW1lKCkpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLiRyZWZzW3R5cGUgKyAnVGltZVBpY2tlciddLnZhbHVlID0gdGFyZ2V0O1xuXHQgICAgICAgIHRoaXNbdHlwZSArICdUaW1lUGlja2VyVmlzaWJsZSddID0gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVSYW5nZVBpY2s6IGZ1bmN0aW9uIGhhbmRsZVJhbmdlUGljayh2YWwpIHtcblx0ICAgICAgdmFyIGNsb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuXG5cdCAgICAgIGlmICh0aGlzLm1heERhdGUgPT09IHZhbC5tYXhEYXRlICYmIHRoaXMubWluRGF0ZSA9PT0gdmFsLm1pbkRhdGUpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5vblBpY2sgJiYgdGhpcy5vblBpY2sodmFsKTtcblx0ICAgICAgdGhpcy5tYXhEYXRlID0gdmFsLm1heERhdGU7XG5cdCAgICAgIHRoaXMubWluRGF0ZSA9IHZhbC5taW5EYXRlO1xuXHQgICAgICBpZiAoIWNsb3NlIHx8IHRoaXMuc2hvd1RpbWUpIHJldHVybjtcblx0ICAgICAgdGhpcy5oYW5kbGVDb25maXJtKCk7XG5cdCAgICB9LFxuXHQgICAgY2hhbmdlVG9Ub2RheTogZnVuY3Rpb24gY2hhbmdlVG9Ub2RheSgpIHtcblx0ICAgICAgdGhpcy5kYXRlID0gbmV3IERhdGUoKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVTaG9ydGN1dENsaWNrOiBmdW5jdGlvbiBoYW5kbGVTaG9ydGN1dENsaWNrKHNob3J0Y3V0KSB7XG5cdCAgICAgIGlmIChzaG9ydGN1dC5vbkNsaWNrKSB7XG5cdCAgICAgICAgc2hvcnRjdXQub25DbGljayh0aGlzKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlc2V0VmlldzogZnVuY3Rpb24gcmVzZXRWaWV3KCkge1xuXHQgICAgICB0aGlzLm1pblRpbWVQaWNrZXJWaXNpYmxlID0gZmFsc2U7XG5cdCAgICAgIHRoaXMubWF4VGltZVBpY2tlclZpc2libGUgPSBmYWxzZTtcblx0ICAgIH0sXG5cdCAgICBzZXRUaW1lOiBmdW5jdGlvbiBzZXRUaW1lKGRhdGUsIHZhbHVlKSB7XG5cdCAgICAgIHZhciBvbGREYXRlID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuXHQgICAgICB2YXIgaG91ciA9IHZhbHVlLmdldEhvdXJzKCk7XG5cdCAgICAgIHZhciBtaW51dGUgPSB2YWx1ZS5nZXRNaW51dGVzKCk7XG5cdCAgICAgIHZhciBzZWNvbmQgPSB2YWx1ZS5nZXRTZWNvbmRzKCk7XG5cdCAgICAgIG9sZERhdGUuc2V0SG91cnMoaG91cik7XG5cdCAgICAgIG9sZERhdGUuc2V0TWludXRlcyhtaW51dGUpO1xuXHQgICAgICBvbGREYXRlLnNldFNlY29uZHMoc2Vjb25kKTtcblx0ICAgICAgcmV0dXJuIG5ldyBEYXRlKG9sZERhdGUuZ2V0VGltZSgpKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVNaW5UaW1lUGljazogZnVuY3Rpb24gaGFuZGxlTWluVGltZVBpY2sodmFsdWUsIHZpc2libGUsIGZpcnN0KSB7XG5cdCAgICAgIHRoaXMubWluRGF0ZSA9IHRoaXMubWluRGF0ZSB8fCBuZXcgRGF0ZSgpO1xuXHQgICAgICBpZiAodmFsdWUpIHtcblx0ICAgICAgICB0aGlzLm1pbkRhdGUgPSB0aGlzLnNldFRpbWUodGhpcy5taW5EYXRlLCB2YWx1ZSk7XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAoIWZpcnN0KSB7XG5cdCAgICAgICAgdGhpcy5taW5UaW1lUGlja2VyVmlzaWJsZSA9IHZpc2libGU7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVNYXhUaW1lUGljazogZnVuY3Rpb24gaGFuZGxlTWF4VGltZVBpY2sodmFsdWUsIHZpc2libGUsIGZpcnN0KSB7XG5cdCAgICAgIGlmICghdGhpcy5tYXhEYXRlKSB7XG5cdCAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7XG5cdCAgICAgICAgaWYgKG5vdyA+PSB0aGlzLm1pbkRhdGUpIHtcblx0ICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgaWYgKHRoaXMubWF4RGF0ZSAmJiB2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMubWF4RGF0ZSA9IHRoaXMuc2V0VGltZSh0aGlzLm1heERhdGUsIHZhbHVlKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGlmICghZmlyc3QpIHtcblx0ICAgICAgICB0aGlzLm1heFRpbWVQaWNrZXJWaXNpYmxlID0gdmlzaWJsZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHByZXZNb250aDogZnVuY3Rpb24gcHJldk1vbnRoKCkge1xuXHQgICAgICB0aGlzLmRhdGUgPSAoMCwgX3V0aWwucHJldk1vbnRoKSh0aGlzLmRhdGUpO1xuXHQgICAgfSxcblx0ICAgIG5leHRNb250aDogZnVuY3Rpb24gbmV4dE1vbnRoKCkge1xuXHQgICAgICB0aGlzLmRhdGUgPSAoMCwgX3V0aWwubmV4dE1vbnRoKSh0aGlzLmRhdGUpO1xuXHQgICAgfSxcblx0ICAgIG5leHRZZWFyOiBmdW5jdGlvbiBuZXh0WWVhcigpIHtcblx0ICAgICAgdmFyIGRhdGUgPSB0aGlzLmRhdGU7XG5cdCAgICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgMSk7XG5cdCAgICAgIHRoaXMucmVzZXREYXRlKCk7XG5cdCAgICB9LFxuXHQgICAgcHJldlllYXI6IGZ1bmN0aW9uIHByZXZZZWFyKCkge1xuXHQgICAgICB2YXIgZGF0ZSA9IHRoaXMuZGF0ZTtcblx0ICAgICAgZGF0ZS5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCkgLSAxKTtcblx0ICAgICAgdGhpcy5yZXNldERhdGUoKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDb25maXJtOiBmdW5jdGlvbiBoYW5kbGVDb25maXJtKCkge1xuXHQgICAgICB2YXIgdmlzaWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cblx0ICAgICAgdGhpcy4kZW1pdCgncGljaycsIFt0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZV0sIHZpc2libGUpO1xuXHQgICAgfSxcblx0ICAgIHJlc2V0RGF0ZTogZnVuY3Rpb24gcmVzZXREYXRlKCkge1xuXHQgICAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZSh0aGlzLmRhdGUpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjb21wb25lbnRzOiB7IFRpbWVQaWNrZXI6IF90aW1lMi5kZWZhdWx0LCBEYXRlVGFibGU6IF9kYXRlVGFibGUyLmRlZmF1bHQsIEVsSW5wdXQ6IF9pbnB1dDIuZGVmYXVsdCB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxNzYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCd0cmFuc2l0aW9uJywge1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJuYW1lXCI6IFwiZWwtem9vbS1pbi10b3BcIlxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiYWZ0ZXItbGVhdmVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLiRlbWl0KCdkb2Rlc3Ryb3knKVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0udmlzaWJsZSksXG5cdCAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbCBlbC1kYXRlLXJhbmdlLXBpY2tlclwiLFxuXHQgICAgY2xhc3M6IFt7XG5cdCAgICAgICdoYXMtc2lkZWJhcic6IF92bS4kc2xvdHMuc2lkZWJhciB8fCBfdm0uc2hvcnRjdXRzLFxuXHQgICAgICAnaGFzLXRpbWUnOiBfdm0uc2hvd1RpbWVcblx0ICAgIH0sIF92bS5wb3BwZXJDbGFzc10sXG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgd2lkdGg6IF92bS53aWR0aCArICdweCdcblx0ICAgIH0pXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2JvZHktd3JhcHBlclwiXG5cdCAgfSwgW192bS5fdChcInNpZGViYXJcIiksIChfdm0uc2hvcnRjdXRzKSA/IF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX3NpZGViYXJcIlxuXHQgIH0sIF92bS5fbCgoX3ZtLnNob3J0Y3V0cyksIGZ1bmN0aW9uKHNob3J0Y3V0KSB7XG5cdCAgICByZXR1cm4gX2MoJ2J1dHRvbicsIHtcblx0ICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19zaG9ydGN1dFwiLFxuXHQgICAgICBhdHRyczoge1xuXHQgICAgICAgIFwidHlwZVwiOiBcImJ1dHRvblwiXG5cdCAgICAgIH0sXG5cdCAgICAgIG9uOiB7XG5cdCAgICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICAgIF92bS5oYW5kbGVTaG9ydGN1dENsaWNrKHNob3J0Y3V0KVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSwgW192bS5fdihfdm0uX3Moc2hvcnRjdXQudGV4dCkpXSlcblx0ICB9KSkgOiBfdm0uX2UoKSwgX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fYm9keVwiXG5cdCAgfSwgWyhfdm0uc2hvd1RpbWUpID8gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLWhlYWRlclwiXG5cdCAgfSwgW19jKCdzcGFuJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvcnMtd3JhcFwiXG5cdCAgfSwgW19jKCdzcGFuJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtcGlja2VyLXdyYXBcIlxuXHQgIH0sIFtfYygnZWwtaW5wdXQnLCB7XG5cdCAgICByZWY6IFwibWluSW5wdXRcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcmFuZ2UtcGlja2VyX19lZGl0b3JcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwic2l6ZVwiOiBcInNtYWxsXCIsXG5cdCAgICAgIFwicGxhY2Vob2xkZXJcIjogX3ZtLnQoJ2VsLmRhdGVwaWNrZXIuc3RhcnREYXRlJyksXG5cdCAgICAgIFwidmFsdWVcIjogX3ZtLm1pblZpc2libGVEYXRlXG5cdCAgICB9LFxuXHQgICAgbmF0aXZlT246IHtcblx0ICAgICAgXCJpbnB1dFwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uaGFuZGxlRGF0ZUlucHV0KCRldmVudCwgJ21pbicpXG5cdCAgICAgIH0sXG5cdCAgICAgIFwiY2hhbmdlXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5oYW5kbGVEYXRlQ2hhbmdlKCRldmVudCwgJ21pbicpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KV0sIDEpLCBfYygnc3BhbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLXBpY2tlci13cmFwXCJcblx0ICB9LCBbX2MoJ2VsLWlucHV0Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvclwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJzaXplXCI6IFwic21hbGxcIixcblx0ICAgICAgXCJwbGFjZWhvbGRlclwiOiBfdm0udCgnZWwuZGF0ZXBpY2tlci5zdGFydFRpbWUnKSxcblx0ICAgICAgXCJ2YWx1ZVwiOiBfdm0ubWluVmlzaWJsZVRpbWVcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImZvY3VzXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5taW5UaW1lUGlja2VyVmlzaWJsZSA9ICFfdm0ubWluVGltZVBpY2tlclZpc2libGVcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG5hdGl2ZU9uOiB7XG5cdCAgICAgIFwiY2hhbmdlXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5oYW5kbGVUaW1lQ2hhbmdlKCRldmVudCwgJ21pbicpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KSwgX2MoJ3RpbWUtcGlja2VyJywge1xuXHQgICAgcmVmOiBcIm1pblRpbWVQaWNrZXJcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwicGlja2VyLXdpZHRoXCI6IF92bS5taW5QaWNrZXJXaWR0aCxcblx0ICAgICAgXCJkYXRlXCI6IF92bS5taW5EYXRlLFxuXHQgICAgICBcInZpc2libGVcIjogX3ZtLm1pblRpbWVQaWNrZXJWaXNpYmxlXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJwaWNrXCI6IF92bS5oYW5kbGVNaW5UaW1lUGlja1xuXHQgICAgfVxuXHQgIH0pXSwgMSldKSwgX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1pY29uLWFycm93LXJpZ2h0XCJcblx0ICB9KSwgX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9ycy13cmFwIGlzLXJpZ2h0XCJcblx0ICB9LCBbX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fdGltZS1waWNrZXItd3JhcFwiXG5cdCAgfSwgW19jKCdlbC1pbnB1dCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcmFuZ2UtcGlja2VyX19lZGl0b3JcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwic2l6ZVwiOiBcInNtYWxsXCIsXG5cdCAgICAgIFwicGxhY2Vob2xkZXJcIjogX3ZtLnQoJ2VsLmRhdGVwaWNrZXIuZW5kRGF0ZScpLFxuXHQgICAgICBcInZhbHVlXCI6IF92bS5tYXhWaXNpYmxlRGF0ZSxcblx0ICAgICAgXCJyZWFkb25seVwiOiAhX3ZtLm1pbkRhdGVcblx0ICAgIH0sXG5cdCAgICBuYXRpdmVPbjoge1xuXHQgICAgICBcImlucHV0XCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5oYW5kbGVEYXRlSW5wdXQoJGV2ZW50LCAnbWF4Jylcblx0ICAgICAgfSxcblx0ICAgICAgXCJjaGFuZ2VcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmhhbmRsZURhdGVDaGFuZ2UoJGV2ZW50LCAnbWF4Jylcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pXSwgMSksIF9jKCdzcGFuJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtcGlja2VyLXdyYXBcIlxuXHQgIH0sIFtfYygnZWwtaW5wdXQnLCB7XG5cdCAgICByZWY6IFwibWF4SW5wdXRcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcmFuZ2UtcGlja2VyX19lZGl0b3JcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwic2l6ZVwiOiBcInNtYWxsXCIsXG5cdCAgICAgIFwicGxhY2Vob2xkZXJcIjogX3ZtLnQoJ2VsLmRhdGVwaWNrZXIuZW5kVGltZScpLFxuXHQgICAgICBcInZhbHVlXCI6IF92bS5tYXhWaXNpYmxlVGltZSxcblx0ICAgICAgXCJyZWFkb25seVwiOiAhX3ZtLm1pbkRhdGVcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImZvY3VzXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5taW5EYXRlICYmIChfdm0ubWF4VGltZVBpY2tlclZpc2libGUgPSAhX3ZtLm1heFRpbWVQaWNrZXJWaXNpYmxlKVxuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbmF0aXZlT246IHtcblx0ICAgICAgXCJjaGFuZ2VcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmhhbmRsZVRpbWVDaGFuZ2UoJGV2ZW50LCAnbWF4Jylcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0pLCBfYygndGltZS1waWNrZXInLCB7XG5cdCAgICByZWY6IFwibWF4VGltZVBpY2tlclwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJwaWNrZXItd2lkdGhcIjogX3ZtLm1heFBpY2tlcldpZHRoLFxuXHQgICAgICBcImRhdGVcIjogX3ZtLm1heERhdGUsXG5cdCAgICAgIFwidmlzaWJsZVwiOiBfdm0ubWF4VGltZVBpY2tlclZpc2libGVcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcInBpY2tcIjogX3ZtLmhhbmRsZU1heFRpbWVQaWNrXG5cdCAgICB9XG5cdCAgfSldLCAxKV0pXSkgOiBfdm0uX2UoKSwgX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fY29udGVudCBlbC1kYXRlLXJhbmdlLXBpY2tlcl9fY29udGVudCBpcy1sZWZ0XCJcblx0ICB9LCBbX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXJcIlxuXHQgIH0sIFtfYygnYnV0dG9uJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctbGVmdFwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJ0eXBlXCI6IFwiYnV0dG9uXCJcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5wcmV2WWVhclxuXHQgICAgfVxuXHQgIH0pLCBfYygnYnV0dG9uJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWFycm93LWxlZnRcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidHlwZVwiOiBcImJ1dHRvblwiXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0ucHJldk1vbnRoXG5cdCAgICB9XG5cdCAgfSksIF9jKCdkaXYnLCBbX3ZtLl92KF92bS5fcyhfdm0ubGVmdExhYmVsKSldKV0pLCBfYygnZGF0ZS10YWJsZScsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwic2VsZWN0aW9uLW1vZGVcIjogXCJyYW5nZVwiLFxuXHQgICAgICBcImRhdGVcIjogX3ZtLmRhdGUsXG5cdCAgICAgIFwieWVhclwiOiBfdm0ubGVmdFllYXIsXG5cdCAgICAgIFwibW9udGhcIjogX3ZtLmxlZnRNb250aCxcblx0ICAgICAgXCJtaW4tZGF0ZVwiOiBfdm0ubWluRGF0ZSxcblx0ICAgICAgXCJtYXgtZGF0ZVwiOiBfdm0ubWF4RGF0ZSxcblx0ICAgICAgXCJyYW5nZS1zdGF0ZVwiOiBfdm0ucmFuZ2VTdGF0ZSxcblx0ICAgICAgXCJkaXNhYmxlZC1kYXRlXCI6IF92bS5kaXNhYmxlZERhdGUsXG5cdCAgICAgIFwiZmlyc3QtZGF5LW9mLXdlZWtcIjogX3ZtLmZpcnN0RGF5T2ZXZWVrXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjaGFuZ2VyYW5nZVwiOiBfdm0uaGFuZGxlQ2hhbmdlUmFuZ2UsXG5cdCAgICAgIFwicGlja1wiOiBfdm0uaGFuZGxlUmFuZ2VQaWNrXG5cdCAgICB9XG5cdCAgfSldLCAxKSwgX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fY29udGVudCBlbC1kYXRlLXJhbmdlLXBpY2tlcl9fY29udGVudCBpcy1yaWdodFwiXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVyXCJcblx0ICB9LCBbX2MoJ2J1dHRvbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1kLWFycm93LXJpZ2h0XCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInR5cGVcIjogXCJidXR0b25cIlxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLm5leHRZZWFyXG5cdCAgICB9XG5cdCAgfSksIF9jKCdidXR0b24nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tYXJyb3ctcmlnaHRcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidHlwZVwiOiBcImJ1dHRvblwiXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0ubmV4dE1vbnRoXG5cdCAgICB9XG5cdCAgfSksIF9jKCdkaXYnLCBbX3ZtLl92KF92bS5fcyhfdm0ucmlnaHRMYWJlbCkpXSldKSwgX2MoJ2RhdGUtdGFibGUnLCB7XG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInNlbGVjdGlvbi1tb2RlXCI6IFwicmFuZ2VcIixcblx0ICAgICAgXCJkYXRlXCI6IF92bS5yaWdodERhdGUsXG5cdCAgICAgIFwieWVhclwiOiBfdm0ucmlnaHRZZWFyLFxuXHQgICAgICBcIm1vbnRoXCI6IF92bS5yaWdodE1vbnRoLFxuXHQgICAgICBcIm1pbi1kYXRlXCI6IF92bS5taW5EYXRlLFxuXHQgICAgICBcIm1heC1kYXRlXCI6IF92bS5tYXhEYXRlLFxuXHQgICAgICBcInJhbmdlLXN0YXRlXCI6IF92bS5yYW5nZVN0YXRlLFxuXHQgICAgICBcImRpc2FibGVkLWRhdGVcIjogX3ZtLmRpc2FibGVkRGF0ZSxcblx0ICAgICAgXCJmaXJzdC1kYXktb2Ytd2Vla1wiOiBfdm0uZmlyc3REYXlPZldlZWtcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNoYW5nZXJhbmdlXCI6IF92bS5oYW5kbGVDaGFuZ2VSYW5nZSxcblx0ICAgICAgXCJwaWNrXCI6IF92bS5oYW5kbGVSYW5nZVBpY2tcblx0ICAgIH1cblx0ICB9KV0sIDEpXSldLCAyKSwgKF92bS5zaG93VGltZSkgPyBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19mb290ZXJcIlxuXHQgIH0sIFtfYygnYScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fbGluay1idG5cIixcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLmhhbmRsZUNsZWFyXG5cdCAgICB9XG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnQoJ2VsLmRhdGVwaWNrZXIuY2xlYXInKSkpXSksIF9jKCdidXR0b24nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2J0blwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJ0eXBlXCI6IFwiYnV0dG9uXCIsXG5cdCAgICAgIFwiZGlzYWJsZWRcIjogX3ZtLmJ0bkRpc2FibGVkXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uaGFuZGxlQ29uZmlybSgpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0udCgnZWwuZGF0ZXBpY2tlci5jb25maXJtJykpKV0pXSkgOiBfdm0uX2UoKV0pXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMTc3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3RpbWVTZWxlY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3OCk7XG5cblx0dmFyIF90aW1lU2VsZWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3RpbWVTZWxlY3QpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X3RpbWVTZWxlY3QyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF90aW1lU2VsZWN0Mi5kZWZhdWx0Lm5hbWUsIF90aW1lU2VsZWN0Mi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfdGltZVNlbGVjdDIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDE3OCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9waWNrZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1MSk7XG5cblx0dmFyIF9waWNrZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcGlja2VyKTtcblxuXHR2YXIgX3RpbWVTZWxlY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3OSk7XG5cblx0dmFyIF90aW1lU2VsZWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3RpbWVTZWxlY3QpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG1peGluczogW19waWNrZXIyLmRlZmF1bHRdLFxuXG5cdCAgbmFtZTogJ0VsVGltZVNlbGVjdCcsXG5cblx0ICBiZWZvcmVDcmVhdGU6IGZ1bmN0aW9uIGJlZm9yZUNyZWF0ZSgpIHtcblx0ICAgIHRoaXMudHlwZSA9ICd0aW1lLXNlbGVjdCc7XG5cdCAgICB0aGlzLnBhbmVsID0gX3RpbWVTZWxlY3QyLmRlZmF1bHQ7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMTc5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4MCksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4MSksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDE4MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9zY3JvbGxiYXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcblxuXHR2YXIgX3Njcm9sbGJhcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zY3JvbGxiYXIpO1xuXG5cdHZhciBfc2Nyb2xsSW50b1ZpZXcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMik7XG5cblx0dmFyIF9zY3JvbGxJbnRvVmlldzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zY3JvbGxJbnRvVmlldyk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdHZhciBwYXJzZVRpbWUgPSBmdW5jdGlvbiBwYXJzZVRpbWUodGltZSkge1xuXHQgIHZhciB2YWx1ZXMgPSAodGltZSB8fCAnJykuc3BsaXQoJzonKTtcblx0ICBpZiAodmFsdWVzLmxlbmd0aCA+PSAyKSB7XG5cdCAgICB2YXIgaG91cnMgPSBwYXJzZUludCh2YWx1ZXNbMF0sIDEwKTtcblx0ICAgIHZhciBtaW51dGVzID0gcGFyc2VJbnQodmFsdWVzWzFdLCAxMCk7XG5cblx0ICAgIHJldHVybiB7XG5cdCAgICAgIGhvdXJzOiBob3Vycyxcblx0ICAgICAgbWludXRlczogbWludXRlc1xuXHQgICAgfTtcblx0ICB9XG5cdCAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0ICByZXR1cm4gbnVsbDtcblx0fTtcblxuXHR2YXIgY29tcGFyZVRpbWUgPSBmdW5jdGlvbiBjb21wYXJlVGltZSh0aW1lMSwgdGltZTIpIHtcblx0ICB2YXIgdmFsdWUxID0gcGFyc2VUaW1lKHRpbWUxKTtcblx0ICB2YXIgdmFsdWUyID0gcGFyc2VUaW1lKHRpbWUyKTtcblxuXHQgIHZhciBtaW51dGVzMSA9IHZhbHVlMS5taW51dGVzICsgdmFsdWUxLmhvdXJzICogNjA7XG5cdCAgdmFyIG1pbnV0ZXMyID0gdmFsdWUyLm1pbnV0ZXMgKyB2YWx1ZTIuaG91cnMgKiA2MDtcblxuXHQgIGlmIChtaW51dGVzMSA9PT0gbWludXRlczIpIHtcblx0ICAgIHJldHVybiAwO1xuXHQgIH1cblxuXHQgIHJldHVybiBtaW51dGVzMSA+IG1pbnV0ZXMyID8gMSA6IC0xO1xuXHR9O1xuXG5cdHZhciBmb3JtYXRUaW1lID0gZnVuY3Rpb24gZm9ybWF0VGltZSh0aW1lKSB7XG5cdCAgcmV0dXJuICh0aW1lLmhvdXJzIDwgMTAgPyAnMCcgKyB0aW1lLmhvdXJzIDogdGltZS5ob3VycykgKyAnOicgKyAodGltZS5taW51dGVzIDwgMTAgPyAnMCcgKyB0aW1lLm1pbnV0ZXMgOiB0aW1lLm1pbnV0ZXMpO1xuXHR9O1xuXG5cdHZhciBuZXh0VGltZSA9IGZ1bmN0aW9uIG5leHRUaW1lKHRpbWUsIHN0ZXApIHtcblx0ICB2YXIgdGltZVZhbHVlID0gcGFyc2VUaW1lKHRpbWUpO1xuXHQgIHZhciBzdGVwVmFsdWUgPSBwYXJzZVRpbWUoc3RlcCk7XG5cblx0ICB2YXIgbmV4dCA9IHtcblx0ICAgIGhvdXJzOiB0aW1lVmFsdWUuaG91cnMsXG5cdCAgICBtaW51dGVzOiB0aW1lVmFsdWUubWludXRlc1xuXHQgIH07XG5cblx0ICBuZXh0Lm1pbnV0ZXMgKz0gc3RlcFZhbHVlLm1pbnV0ZXM7XG5cdCAgbmV4dC5ob3VycyArPSBzdGVwVmFsdWUuaG91cnM7XG5cblx0ICBuZXh0LmhvdXJzICs9IE1hdGguZmxvb3IobmV4dC5taW51dGVzIC8gNjApO1xuXHQgIG5leHQubWludXRlcyA9IG5leHQubWludXRlcyAlIDYwO1xuXG5cdCAgcmV0dXJuIGZvcm1hdFRpbWUobmV4dCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIGNvbXBvbmVudHM6IHsgRWxTY3JvbGxiYXI6IF9zY3JvbGxiYXIyLmRlZmF1bHQgfSxcblxuXHQgIHdhdGNoOiB7XG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgaWYgKCF2YWwpIHJldHVybjtcblx0ICAgICAgaWYgKHRoaXMubWluVGltZSAmJiBjb21wYXJlVGltZSh2YWwsIHRoaXMubWluVGltZSkgPCAwKSB7XG5cdCAgICAgICAgdGhpcy4kZW1pdCgncGljaycpO1xuXHQgICAgICB9IGVsc2UgaWYgKHRoaXMubWF4VGltZSAmJiBjb21wYXJlVGltZSh2YWwsIHRoaXMubWF4VGltZSkgPiAwKSB7XG5cdCAgICAgICAgdGhpcy4kZW1pdCgncGljaycpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gX3RoaXMuc2Nyb2xsVG9PcHRpb24oKTtcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayhpdGVtKSB7XG5cdCAgICAgIGlmICghaXRlbS5kaXNhYmxlZCkge1xuXHQgICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBpdGVtLnZhbHVlKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGhhbmRsZUNsZWFyOiBmdW5jdGlvbiBoYW5kbGVDbGVhcigpIHtcblx0ICAgICAgdGhpcy4kZW1pdCgncGljaycpO1xuXHQgICAgfSxcblx0ICAgIHNjcm9sbFRvT3B0aW9uOiBmdW5jdGlvbiBzY3JvbGxUb09wdGlvbigpIHtcblx0ICAgICAgdmFyIGNsYXNzTmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ3NlbGVjdGVkJztcblxuXHQgICAgICB2YXIgbWVudSA9IHRoaXMuJHJlZnMucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoJy5lbC1waWNrZXItcGFuZWxfX2NvbnRlbnQnKTtcblx0ICAgICAgKDAsIF9zY3JvbGxJbnRvVmlldzIuZGVmYXVsdCkobWVudSwgbWVudS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSlbMF0pO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZU1lbnVFbnRlcjogZnVuY3Rpb24gaGFuZGxlTWVudUVudGVyKCkge1xuXHQgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuXHQgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIF90aGlzMi5zY3JvbGxUb09wdGlvbigpO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHBvcHBlckNsYXNzOiAnJyxcblx0ICAgICAgc3RhcnQ6ICcwOTowMCcsXG5cdCAgICAgIGVuZDogJzE4OjAwJyxcblx0ICAgICAgc3RlcDogJzAwOjMwJyxcblx0ICAgICAgdmFsdWU6ICcnLFxuXHQgICAgICB2aXNpYmxlOiBmYWxzZSxcblx0ICAgICAgbWluVGltZTogJycsXG5cdCAgICAgIG1heFRpbWU6ICcnLFxuXHQgICAgICB3aWR0aDogMFxuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgaXRlbXM6IGZ1bmN0aW9uIGl0ZW1zKCkge1xuXHQgICAgICB2YXIgc3RhcnQgPSB0aGlzLnN0YXJ0O1xuXHQgICAgICB2YXIgZW5kID0gdGhpcy5lbmQ7XG5cdCAgICAgIHZhciBzdGVwID0gdGhpcy5zdGVwO1xuXG5cdCAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuXHQgICAgICBpZiAoc3RhcnQgJiYgZW5kICYmIHN0ZXApIHtcblx0ICAgICAgICB2YXIgY3VycmVudCA9IHN0YXJ0O1xuXHQgICAgICAgIHdoaWxlIChjb21wYXJlVGltZShjdXJyZW50LCBlbmQpIDw9IDApIHtcblx0ICAgICAgICAgIHJlc3VsdC5wdXNoKHtcblx0ICAgICAgICAgICAgdmFsdWU6IGN1cnJlbnQsXG5cdCAgICAgICAgICAgIGRpc2FibGVkOiBjb21wYXJlVGltZShjdXJyZW50LCB0aGlzLm1pblRpbWUgfHwgJy0xOi0xJykgPD0gMCB8fCBjb21wYXJlVGltZShjdXJyZW50LCB0aGlzLm1heFRpbWUgfHwgJzEwMDoxMDAnKSA+PSAwXG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICAgIGN1cnJlbnQgPSBuZXh0VGltZShjdXJyZW50LCBzdGVwKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICByZXR1cm4gcmVzdWx0O1xuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDE4MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ3RyYW5zaXRpb24nLCB7XG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcIm5hbWVcIjogXCJlbC16b29tLWluLXRvcFwiXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJiZWZvcmUtZW50ZXJcIjogX3ZtLmhhbmRsZU1lbnVFbnRlcixcblx0ICAgICAgXCJhZnRlci1sZWF2ZVwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uJGVtaXQoJ2RvZGVzdHJveScpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LCBbX2MoJ2RpdicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS52aXNpYmxlKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcblx0ICAgIH1dLFxuXHQgICAgcmVmOiBcInBvcHBlclwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsIHRpbWUtc2VsZWN0XCIsXG5cdCAgICBjbGFzczogX3ZtLnBvcHBlckNsYXNzLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIHdpZHRoOiBfdm0ud2lkdGggKyAncHgnXG5cdCAgICB9KVxuXHQgIH0sIFtfYygnZWwtc2Nyb2xsYmFyJywge1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJub3Jlc2l6ZVwiOiBcIlwiLFxuXHQgICAgICBcIndyYXAtY2xhc3NcIjogXCJlbC1waWNrZXItcGFuZWxfX2NvbnRlbnRcIlxuXHQgICAgfVxuXHQgIH0sIF92bS5fbCgoX3ZtLml0ZW1zKSwgZnVuY3Rpb24oaXRlbSkge1xuXHQgICAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICAgIHN0YXRpY0NsYXNzOiBcInRpbWUtc2VsZWN0LWl0ZW1cIixcblx0ICAgICAgY2xhc3M6IHtcblx0ICAgICAgICBzZWxlY3RlZDogX3ZtLnZhbHVlID09PSBpdGVtLnZhbHVlLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZFxuXHQgICAgICB9LFxuXHQgICAgICBhdHRyczoge1xuXHQgICAgICAgIFwiZGlzYWJsZWRcIjogaXRlbS5kaXNhYmxlZFxuXHQgICAgICB9LFxuXHQgICAgICBvbjoge1xuXHQgICAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgICBfdm0uaGFuZGxlQ2xpY2soaXRlbSlcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sIFtfdm0uX3YoX3ZtLl9zKGl0ZW0udmFsdWUpKV0pXG5cdCAgfSkpXSwgMSldKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAxODIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfdGltZVBpY2tlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTgzKTtcblxuXHR2YXIgX3RpbWVQaWNrZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdGltZVBpY2tlcik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfdGltZVBpY2tlcjIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX3RpbWVQaWNrZXIyLmRlZmF1bHQubmFtZSwgX3RpbWVQaWNrZXIyLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF90aW1lUGlja2VyMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogMTgzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3BpY2tlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTUxKTtcblxuXHR2YXIgX3BpY2tlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9waWNrZXIpO1xuXG5cdHZhciBfdGltZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTU4KTtcblxuXHR2YXIgX3RpbWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdGltZSk7XG5cblx0dmFyIF90aW1lUmFuZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4NCk7XG5cblx0dmFyIF90aW1lUmFuZ2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdGltZVJhbmdlKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBtaXhpbnM6IFtfcGlja2VyMi5kZWZhdWx0XSxcblxuXHQgIG5hbWU6ICdFbFRpbWVQaWNrZXInLFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIGlzUmFuZ2U6IEJvb2xlYW5cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHR5cGU6ICcnXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIHdhdGNoOiB7XG5cdCAgICBpc1JhbmdlOiBmdW5jdGlvbiBpc1JhbmdlKF9pc1JhbmdlKSB7XG5cdCAgICAgIGlmICh0aGlzLnBpY2tlcikge1xuXHQgICAgICAgIHRoaXMudW5tb3VudFBpY2tlcigpO1xuXHQgICAgICAgIHRoaXMudHlwZSA9IF9pc1JhbmdlID8gJ3RpbWVyYW5nZScgOiAndGltZSc7XG5cdCAgICAgICAgdGhpcy5wYW5lbCA9IF9pc1JhbmdlID8gX3RpbWVSYW5nZTIuZGVmYXVsdCA6IF90aW1lMi5kZWZhdWx0O1xuXHQgICAgICAgIHRoaXMubW91bnRQaWNrZXIoKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB0aGlzLnR5cGUgPSBfaXNSYW5nZSA/ICd0aW1lcmFuZ2UnIDogJ3RpbWUnO1xuXHQgICAgICAgIHRoaXMucGFuZWwgPSBfaXNSYW5nZSA/IF90aW1lUmFuZ2UyLmRlZmF1bHQgOiBfdGltZTIuZGVmYXVsdDtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgdGhpcy50eXBlID0gdGhpcy5pc1JhbmdlID8gJ3RpbWVyYW5nZScgOiAndGltZSc7XG5cdCAgICB0aGlzLnBhbmVsID0gdGhpcy5pc1JhbmdlID8gX3RpbWVSYW5nZTIuZGVmYXVsdCA6IF90aW1lMi5kZWZhdWx0O1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDE4NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxODUpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxODYpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAxODUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfdXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMTUzKTtcblxuXHR2YXIgX2xvY2FsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG5cdHZhciBfbG9jYWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xvY2FsZSk7XG5cblx0dmFyIF90aW1lU3Bpbm5lciA9IF9fd2VicGFja19yZXF1aXJlX18oMTYwKTtcblxuXHR2YXIgX3RpbWVTcGlubmVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3RpbWVTcGlubmVyKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdHZhciBNSU5fVElNRSA9ICgwLCBfdXRpbC5wYXJzZURhdGUpKCcwMDowMDowMCcsICdISDptbTpzcycpOyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdHZhciBNQVhfVElNRSA9ICgwLCBfdXRpbC5wYXJzZURhdGUpKCcyMzo1OTo1OScsICdISDptbTpzcycpO1xuXHR2YXIgaXNEaXNhYmxlZCA9IGZ1bmN0aW9uIGlzRGlzYWJsZWQobWluVGltZSwgbWF4VGltZSkge1xuXHQgIHZhciBtaW5WYWx1ZSA9IG1pblRpbWUuZ2V0SG91cnMoKSAqIDM2MDAgKyBtaW5UaW1lLmdldE1pbnV0ZXMoKSAqIDYwICsgbWluVGltZS5nZXRTZWNvbmRzKCk7XG5cdCAgdmFyIG1heFZhbHVlID0gbWF4VGltZS5nZXRIb3VycygpICogMzYwMCArIG1heFRpbWUuZ2V0TWludXRlcygpICogNjAgKyBtYXhUaW1lLmdldFNlY29uZHMoKTtcblxuXHQgIHJldHVybiBtaW5WYWx1ZSA+IG1heFZhbHVlO1xuXHR9O1xuXHR2YXIgY2xhY1RpbWUgPSBmdW5jdGlvbiBjbGFjVGltZSh0aW1lKSB7XG5cdCAgdGltZSA9IEFycmF5LmlzQXJyYXkodGltZSkgPyB0aW1lIDogW3RpbWVdO1xuXHQgIHZhciBtaW5UaW1lID0gdGltZVswXSB8fCBuZXcgRGF0ZSgpO1xuXHQgIHZhciBkYXRlID0gbmV3IERhdGUoKTtcblx0ICBkYXRlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSArIDEpO1xuXHQgIHZhciBtYXhUaW1lID0gdGltZVsxXSB8fCBkYXRlO1xuXG5cdCAgaWYgKG1pblRpbWUgPiBtYXhUaW1lKSByZXR1cm4gY2xhY1RpbWUoKTtcblx0ICByZXR1cm4geyBtaW5UaW1lOiBtaW5UaW1lLCBtYXhUaW1lOiBtYXhUaW1lIH07XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG1peGluczogW19sb2NhbGUyLmRlZmF1bHRdLFxuXG5cdCAgY29tcG9uZW50czogeyBUaW1lU3Bpbm5lcjogX3RpbWVTcGlubmVyMi5kZWZhdWx0IH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgc2hvd1NlY29uZHM6IGZ1bmN0aW9uIHNob3dTZWNvbmRzKCkge1xuXHQgICAgICByZXR1cm4gKHRoaXMuZm9ybWF0IHx8ICcnKS5pbmRleE9mKCdzcycpICE9PSAtMTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgcHJvcHM6IFsndmFsdWUnXSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICB2YXIgdGltZSA9IGNsYWNUaW1lKHRoaXMuJG9wdGlvbnMuZGVmYXVsdFZhbHVlKTtcblxuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgcG9wcGVyQ2xhc3M6ICcnLFxuXHQgICAgICBtaW5UaW1lOiB0aW1lLm1pblRpbWUsXG5cdCAgICAgIG1heFRpbWU6IHRpbWUubWF4VGltZSxcblx0ICAgICAgYnRuRGlzYWJsZWQ6IGlzRGlzYWJsZWQodGltZS5taW5UaW1lLCB0aW1lLm1heFRpbWUpLFxuXHQgICAgICBtYXhIb3VyczogdGltZS5tYXhUaW1lLmdldEhvdXJzKCksXG5cdCAgICAgIG1heE1pbnV0ZXM6IHRpbWUubWF4VGltZS5nZXRNaW51dGVzKCksXG5cdCAgICAgIG1heFNlY29uZHM6IHRpbWUubWF4VGltZS5nZXRTZWNvbmRzKCksXG5cdCAgICAgIG1pbkhvdXJzOiB0aW1lLm1pblRpbWUuZ2V0SG91cnMoKSxcblx0ICAgICAgbWluTWludXRlczogdGltZS5taW5UaW1lLmdldE1pbnV0ZXMoKSxcblx0ICAgICAgbWluU2Vjb25kczogdGltZS5taW5UaW1lLmdldFNlY29uZHMoKSxcblx0ICAgICAgZm9ybWF0OiAnSEg6bW06c3MnLFxuXHQgICAgICB2aXNpYmxlOiBmYWxzZSxcblx0ICAgICAgd2lkdGg6IDBcblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShuZXdWYWwpIHtcblx0ICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgICB0aGlzLnBhbmVsQ3JlYXRlZCgpO1xuXHQgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoXykge1xuXHQgICAgICAgIHJldHVybiBfdGhpcy5hanVzdFNjcm9sbFRvcCgpO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgcGFuZWxDcmVhdGVkOiBmdW5jdGlvbiBwYW5lbENyZWF0ZWQoKSB7XG5cdCAgICAgIHZhciB0aW1lID0gY2xhY1RpbWUodGhpcy52YWx1ZSk7XG5cdCAgICAgIGlmICh0aW1lLm1pblRpbWUgPT09IHRoaXMubWluVGltZSAmJiB0aW1lLm1heFRpbWUgPT09IHRoaXMubWF4VGltZSkge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfVxuXG5cdCAgICAgIHRoaXMuaGFuZGxlTWluQ2hhbmdlKHtcblx0ICAgICAgICBob3VyczogdGltZS5taW5UaW1lLmdldEhvdXJzKCksXG5cdCAgICAgICAgbWludXRlczogdGltZS5taW5UaW1lLmdldE1pbnV0ZXMoKSxcblx0ICAgICAgICBzZWNvbmRzOiB0aW1lLm1pblRpbWUuZ2V0U2Vjb25kcygpXG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLmhhbmRsZU1heENoYW5nZSh7XG5cdCAgICAgICAgaG91cnM6IHRpbWUubWF4VGltZS5nZXRIb3VycygpLFxuXHQgICAgICAgIG1pbnV0ZXM6IHRpbWUubWF4VGltZS5nZXRNaW51dGVzKCksXG5cdCAgICAgICAgc2Vjb25kczogdGltZS5tYXhUaW1lLmdldFNlY29uZHMoKVxuXHQgICAgICB9KTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDbGVhcjogZnVuY3Rpb24gaGFuZGxlQ2xlYXIoKSB7XG5cdCAgICAgIHRoaXMuaGFuZGxlQ2FuY2VsKCk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQ2FuY2VsOiBmdW5jdGlvbiBoYW5kbGVDYW5jZWwoKSB7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ3BpY2snKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZSgpIHtcblx0ICAgICAgaWYgKHRoaXMubWluVGltZSA+IHRoaXMubWF4VGltZSkgcmV0dXJuO1xuXHQgICAgICBNSU5fVElNRS5zZXRGdWxsWWVhcih0aGlzLm1pblRpbWUuZ2V0RnVsbFllYXIoKSk7XG5cdCAgICAgIE1JTl9USU1FLnNldE1vbnRoKHRoaXMubWluVGltZS5nZXRNb250aCgpLCB0aGlzLm1pblRpbWUuZ2V0RGF0ZSgpKTtcblx0ICAgICAgTUFYX1RJTUUuc2V0RnVsbFllYXIodGhpcy5tYXhUaW1lLmdldEZ1bGxZZWFyKCkpO1xuXHQgICAgICBNQVhfVElNRS5zZXRNb250aCh0aGlzLm1heFRpbWUuZ2V0TW9udGgoKSwgdGhpcy5tYXhUaW1lLmdldERhdGUoKSk7XG5cdCAgICAgIHRoaXMuJHJlZnMubWluU3Bpbm5lci5zZWxlY3RhYmxlUmFuZ2UgPSBbW01JTl9USU1FLCB0aGlzLm1heFRpbWVdXTtcblx0ICAgICAgdGhpcy4kcmVmcy5tYXhTcGlubmVyLnNlbGVjdGFibGVSYW5nZSA9IFtbdGhpcy5taW5UaW1lLCBNQVhfVElNRV1dO1xuXHQgICAgICB0aGlzLmhhbmRsZUNvbmZpcm0odHJ1ZSk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlTWF4Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVNYXhDaGFuZ2UoZGF0ZSkge1xuXHQgICAgICBpZiAoZGF0ZS5ob3VycyAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgdGhpcy5tYXhUaW1lLnNldEhvdXJzKGRhdGUuaG91cnMpO1xuXHQgICAgICAgIHRoaXMubWF4SG91cnMgPSB0aGlzLm1heFRpbWUuZ2V0SG91cnMoKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAoZGF0ZS5taW51dGVzICE9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICB0aGlzLm1heFRpbWUuc2V0TWludXRlcyhkYXRlLm1pbnV0ZXMpO1xuXHQgICAgICAgIHRoaXMubWF4TWludXRlcyA9IHRoaXMubWF4VGltZS5nZXRNaW51dGVzKCk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKGRhdGUuc2Vjb25kcyAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgdGhpcy5tYXhUaW1lLnNldFNlY29uZHMoZGF0ZS5zZWNvbmRzKTtcblx0ICAgICAgICB0aGlzLm1heFNlY29uZHMgPSB0aGlzLm1heFRpbWUuZ2V0U2Vjb25kcygpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKCk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlTWluQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVNaW5DaGFuZ2UoZGF0ZSkge1xuXHQgICAgICBpZiAoZGF0ZS5ob3VycyAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgdGhpcy5taW5UaW1lLnNldEhvdXJzKGRhdGUuaG91cnMpO1xuXHQgICAgICAgIHRoaXMubWluSG91cnMgPSB0aGlzLm1pblRpbWUuZ2V0SG91cnMoKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAoZGF0ZS5taW51dGVzICE9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICB0aGlzLm1pblRpbWUuc2V0TWludXRlcyhkYXRlLm1pbnV0ZXMpO1xuXHQgICAgICAgIHRoaXMubWluTWludXRlcyA9IHRoaXMubWluVGltZS5nZXRNaW51dGVzKCk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKGRhdGUuc2Vjb25kcyAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgdGhpcy5taW5UaW1lLnNldFNlY29uZHMoZGF0ZS5zZWNvbmRzKTtcblx0ICAgICAgICB0aGlzLm1pblNlY29uZHMgPSB0aGlzLm1pblRpbWUuZ2V0U2Vjb25kcygpO1xuXHQgICAgICB9XG5cblx0ICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UoKTtcblx0ICAgIH0sXG5cdCAgICBzZXRNaW5TZWxlY3Rpb25SYW5nZTogZnVuY3Rpb24gc2V0TWluU2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCkge1xuXHQgICAgICB0aGlzLiRlbWl0KCdzZWxlY3QtcmFuZ2UnLCBzdGFydCwgZW5kKTtcblx0ICAgIH0sXG5cdCAgICBzZXRNYXhTZWxlY3Rpb25SYW5nZTogZnVuY3Rpb24gc2V0TWF4U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCkge1xuXHQgICAgICB0aGlzLiRlbWl0KCdzZWxlY3QtcmFuZ2UnLCBzdGFydCArIDExLCBlbmQgKyAxMSk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQ29uZmlybTogZnVuY3Rpb24gaGFuZGxlQ29uZmlybSgpIHtcblx0ICAgICAgdmFyIHZpc2libGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuXHQgICAgICB2YXIgZmlyc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG5cdCAgICAgIHZhciBtaW5TZWxlY3RhYmxlUmFuZ2UgPSB0aGlzLiRyZWZzLm1pblNwaW5uZXIuc2VsZWN0YWJsZVJhbmdlO1xuXHQgICAgICB2YXIgbWF4U2VsZWN0YWJsZVJhbmdlID0gdGhpcy4kcmVmcy5tYXhTcGlubmVyLnNlbGVjdGFibGVSYW5nZTtcblxuXHQgICAgICB0aGlzLm1pblRpbWUgPSAoMCwgX3V0aWwubGltaXRSYW5nZSkodGhpcy5taW5UaW1lLCBtaW5TZWxlY3RhYmxlUmFuZ2UpO1xuXHQgICAgICB0aGlzLm1heFRpbWUgPSAoMCwgX3V0aWwubGltaXRSYW5nZSkodGhpcy5tYXhUaW1lLCBtYXhTZWxlY3RhYmxlUmFuZ2UpO1xuXG5cdCAgICAgIGlmIChmaXJzdCkgcmV0dXJuO1xuXHQgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgW3RoaXMubWluVGltZSwgdGhpcy5tYXhUaW1lXSwgdmlzaWJsZSwgZmlyc3QpO1xuXHQgICAgfSxcblx0ICAgIGFqdXN0U2Nyb2xsVG9wOiBmdW5jdGlvbiBhanVzdFNjcm9sbFRvcCgpIHtcblx0ICAgICAgdGhpcy4kcmVmcy5taW5TcGlubmVyLmFqdXN0U2Nyb2xsVG9wKCk7XG5cdCAgICAgIHRoaXMuJHJlZnMubWF4U3Bpbm5lci5hanVzdFNjcm9sbFRvcCgpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cblx0ICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgcmV0dXJuIF90aGlzMi5oYW5kbGVDb25maXJtKHRydWUsIHRydWUpO1xuXHQgICAgfSk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMTg2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygndHJhbnNpdGlvbicsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwibmFtZVwiOiBcImVsLXpvb20taW4tdG9wXCJcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImJlZm9yZS1lbnRlclwiOiBfdm0ucGFuZWxDcmVhdGVkLFxuXHQgICAgICBcImFmdGVyLWxlYXZlXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS4kZW1pdCgnZG9kZXN0cm95Jylcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFtfYygnZGl2Jywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLnZpc2libGUpLFxuXHQgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXJhbmdlLXBpY2tlciBlbC1waWNrZXItcGFuZWxcIixcblx0ICAgIGNsYXNzOiBfdm0ucG9wcGVyQ2xhc3MsXG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgd2lkdGg6IF92bS53aWR0aCArICdweCdcblx0ICAgIH0pXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXJhbmdlLXBpY2tlcl9fY29udGVudFwiXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXJhbmdlLXBpY2tlcl9fY2VsbFwiXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXJhbmdlLXBpY2tlcl9faGVhZGVyXCJcblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0udCgnZWwuZGF0ZXBpY2tlci5zdGFydFRpbWUnKSkpXSksIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXJhbmdlLXBpY2tlcl9fYm9keSBlbC10aW1lLXBhbmVsX19jb250ZW50XCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaGFzLXNlY29uZHMnOiBfdm0uc2hvd1NlY29uZHNcblx0ICAgIH1cblx0ICB9LCBbX2MoJ3RpbWUtc3Bpbm5lcicsIHtcblx0ICAgIHJlZjogXCJtaW5TcGlubmVyXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInNob3ctc2Vjb25kc1wiOiBfdm0uc2hvd1NlY29uZHMsXG5cdCAgICAgIFwiaG91cnNcIjogX3ZtLm1pbkhvdXJzLFxuXHQgICAgICBcIm1pbnV0ZXNcIjogX3ZtLm1pbk1pbnV0ZXMsXG5cdCAgICAgIFwic2Vjb25kc1wiOiBfdm0ubWluU2Vjb25kc1xuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2hhbmdlXCI6IF92bS5oYW5kbGVNaW5DaGFuZ2UsXG5cdCAgICAgIFwic2VsZWN0LXJhbmdlXCI6IF92bS5zZXRNaW5TZWxlY3Rpb25SYW5nZVxuXHQgICAgfVxuXHQgIH0pXSwgMSldKSwgX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcmFuZ2UtcGlja2VyX19jZWxsXCJcblx0ICB9LCBbX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcmFuZ2UtcGlja2VyX19oZWFkZXJcIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC5kYXRlcGlja2VyLmVuZFRpbWUnKSkpXSksIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXJhbmdlLXBpY2tlcl9fYm9keSBlbC10aW1lLXBhbmVsX19jb250ZW50XCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaGFzLXNlY29uZHMnOiBfdm0uc2hvd1NlY29uZHNcblx0ICAgIH1cblx0ICB9LCBbX2MoJ3RpbWUtc3Bpbm5lcicsIHtcblx0ICAgIHJlZjogXCJtYXhTcGlubmVyXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInNob3ctc2Vjb25kc1wiOiBfdm0uc2hvd1NlY29uZHMsXG5cdCAgICAgIFwiaG91cnNcIjogX3ZtLm1heEhvdXJzLFxuXHQgICAgICBcIm1pbnV0ZXNcIjogX3ZtLm1heE1pbnV0ZXMsXG5cdCAgICAgIFwic2Vjb25kc1wiOiBfdm0ubWF4U2Vjb25kc1xuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2hhbmdlXCI6IF92bS5oYW5kbGVNYXhDaGFuZ2UsXG5cdCAgICAgIFwic2VsZWN0LXJhbmdlXCI6IF92bS5zZXRNYXhTZWxlY3Rpb25SYW5nZVxuXHQgICAgfVxuXHQgIH0pXSwgMSldKV0pLCBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1wYW5lbF9fZm9vdGVyXCJcblx0ICB9LCBbX2MoJ2J1dHRvbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcGFuZWxfX2J0biBjYW5jZWxcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidHlwZVwiOiBcImJ1dHRvblwiXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uaGFuZGxlQ2FuY2VsKClcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC5kYXRlcGlja2VyLmNhbmNlbCcpKSldKSwgX2MoJ2J1dHRvbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcGFuZWxfX2J0biBjb25maXJtXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInR5cGVcIjogXCJidXR0b25cIixcblx0ICAgICAgXCJkaXNhYmxlZFwiOiBfdm0uYnRuRGlzYWJsZWRcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5oYW5kbGVDb25maXJtKClcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC5kYXRlcGlja2VyLmNvbmZpcm0nKSkpXSldKV0pXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMTg3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX21haW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OCk7XG5cblx0dmFyIF9tYWluMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21haW4pO1xuXG5cdHZhciBfZGlyZWN0aXZlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTEpO1xuXG5cdHZhciBfZGlyZWN0aXZlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RpcmVjdGl2ZSk7XG5cblx0dmFyIF92dWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMyk7XG5cblx0dmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdF92dWUyLmRlZmF1bHQuZGlyZWN0aXZlKCdwb3BvdmVyJywgX2RpcmVjdGl2ZTIuZGVmYXVsdCk7XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X21haW4yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuZGlyZWN0aXZlKCdwb3BvdmVyJywgX2RpcmVjdGl2ZTIuZGVmYXVsdCk7XG5cdCAgVnVlLmNvbXBvbmVudChfbWFpbjIuZGVmYXVsdC5uYW1lLCBfbWFpbjIuZGVmYXVsdCk7XG5cdH07XG5cdF9tYWluMi5kZWZhdWx0LmRpcmVjdGl2ZSA9IF9kaXJlY3RpdmUyLmRlZmF1bHQ7XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX21haW4yLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAxODggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTg5KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTkwKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMTg5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3Z1ZVBvcHBlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xuXG5cdHZhciBfdnVlUG9wcGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZVBvcHBlcik7XG5cblx0dmFyIF9kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbFBvcG92ZXInLFxuXG5cdCAgbWl4aW5zOiBbX3Z1ZVBvcHBlcjIuZGVmYXVsdF0sXG5cblx0ICBwcm9wczoge1xuXHQgICAgdHJpZ2dlcjoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICdjbGljaycsXG5cdCAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbHVlKSB7XG5cdCAgICAgICAgcmV0dXJuIFsnY2xpY2snLCAnZm9jdXMnLCAnaG92ZXInLCAnbWFudWFsJ10uaW5kZXhPZih2YWx1ZSkgPiAtMTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG9wZW5EZWxheToge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDBcblx0ICAgIH0sXG5cdCAgICB0aXRsZTogU3RyaW5nLFxuXHQgICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG5cdCAgICBjb250ZW50OiBTdHJpbmcsXG5cdCAgICByZWZlcmVuY2U6IHt9LFxuXHQgICAgcG9wcGVyQ2xhc3M6IFN0cmluZyxcblx0ICAgIHdpZHRoOiB7fSxcblx0ICAgIHZpc2libGVBcnJvdzoge1xuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXHQgICAgdHJhbnNpdGlvbjoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICdmYWRlLWluLWxpbmVhcidcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgIHNob3dQb3BwZXI6IGZ1bmN0aW9uIHNob3dQb3BwZXIobmV3VmFsLCBvbGRWYWwpIHtcblx0ICAgICAgbmV3VmFsID8gdGhpcy4kZW1pdCgnc2hvdycpIDogdGhpcy4kZW1pdCgnaGlkZScpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdmFyIHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlIHx8IHRoaXMuJHJlZnMucmVmZXJlbmNlO1xuXHQgICAgdmFyIHBvcHBlciA9IHRoaXMucG9wcGVyIHx8IHRoaXMuJHJlZnMucG9wcGVyO1xuXG5cdCAgICBpZiAoIXJlZmVyZW5jZSAmJiB0aGlzLiRzbG90cy5yZWZlcmVuY2UgJiYgdGhpcy4kc2xvdHMucmVmZXJlbmNlWzBdKSB7XG5cdCAgICAgIHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy4kc2xvdHMucmVmZXJlbmNlWzBdLmVsbTtcblx0ICAgIH1cblx0ICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdjbGljaycpIHtcblx0ICAgICAgKDAsIF9kb20ub24pKHJlZmVyZW5jZSwgJ2NsaWNrJywgdGhpcy5kb1RvZ2dsZSk7XG5cdCAgICAgICgwLCBfZG9tLm9uKShkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5oYW5kbGVEb2N1bWVudENsaWNrKTtcblx0ICAgIH0gZWxzZSBpZiAodGhpcy50cmlnZ2VyID09PSAnaG92ZXInKSB7XG5cdCAgICAgICgwLCBfZG9tLm9uKShyZWZlcmVuY2UsICdtb3VzZWVudGVyJywgdGhpcy5oYW5kbGVNb3VzZUVudGVyKTtcblx0ICAgICAgKDAsIF9kb20ub24pKHBvcHBlciwgJ21vdXNlZW50ZXInLCB0aGlzLmhhbmRsZU1vdXNlRW50ZXIpO1xuXHQgICAgICAoMCwgX2RvbS5vbikocmVmZXJlbmNlLCAnbW91c2VsZWF2ZScsIHRoaXMuaGFuZGxlTW91c2VMZWF2ZSk7XG5cdCAgICAgICgwLCBfZG9tLm9uKShwb3BwZXIsICdtb3VzZWxlYXZlJywgdGhpcy5oYW5kbGVNb3VzZUxlYXZlKTtcblx0ICAgIH0gZWxzZSBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG5cdCAgICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuXG5cdCAgICAgIGlmIChbXS5zbGljZS5jYWxsKHJlZmVyZW5jZS5jaGlsZHJlbikubGVuZ3RoKSB7XG5cdCAgICAgICAgdmFyIGNoaWxkcmVuID0gcmVmZXJlbmNlLmNoaWxkTm9kZXM7XG5cdCAgICAgICAgdmFyIGxlbiA9IGNoaWxkcmVuLmxlbmd0aDtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdCAgICAgICAgICBpZiAoY2hpbGRyZW5baV0ubm9kZU5hbWUgPT09ICdJTlBVVCcgfHwgY2hpbGRyZW5baV0ubm9kZU5hbWUgPT09ICdURVhUQVJFQScpIHtcblx0ICAgICAgICAgICAgKDAsIF9kb20ub24pKGNoaWxkcmVuW2ldLCAnZm9jdXMnLCB0aGlzLmRvU2hvdyk7XG5cdCAgICAgICAgICAgICgwLCBfZG9tLm9uKShjaGlsZHJlbltpXSwgJ2JsdXInLCB0aGlzLmRvQ2xvc2UpO1xuXHQgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICBpZiAoZm91bmQpIHJldHVybjtcblx0ICAgICAgaWYgKHJlZmVyZW5jZS5ub2RlTmFtZSA9PT0gJ0lOUFVUJyB8fCByZWZlcmVuY2Uubm9kZU5hbWUgPT09ICdURVhUQVJFQScpIHtcblx0ICAgICAgICAoMCwgX2RvbS5vbikocmVmZXJlbmNlLCAnZm9jdXMnLCB0aGlzLmRvU2hvdyk7XG5cdCAgICAgICAgKDAsIF9kb20ub24pKHJlZmVyZW5jZSwgJ2JsdXInLCB0aGlzLmRvQ2xvc2UpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICgwLCBfZG9tLm9uKShyZWZlcmVuY2UsICdtb3VzZWRvd24nLCB0aGlzLmRvU2hvdyk7XG5cdCAgICAgICAgKDAsIF9kb20ub24pKHJlZmVyZW5jZSwgJ21vdXNldXAnLCB0aGlzLmRvQ2xvc2UpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgZG9Ub2dnbGU6IGZ1bmN0aW9uIGRvVG9nZ2xlKCkge1xuXHQgICAgICB0aGlzLnNob3dQb3BwZXIgPSAhdGhpcy5zaG93UG9wcGVyO1xuXHQgICAgfSxcblx0ICAgIGRvU2hvdzogZnVuY3Rpb24gZG9TaG93KCkge1xuXHQgICAgICB0aGlzLnNob3dQb3BwZXIgPSB0cnVlO1xuXHQgICAgfSxcblx0ICAgIGRvQ2xvc2U6IGZ1bmN0aW9uIGRvQ2xvc2UoKSB7XG5cdCAgICAgIHRoaXMuc2hvd1BvcHBlciA9IGZhbHNlO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcblx0ICAgICAgaWYgKHRoaXMub3BlbkRlbGF5KSB7XG5cdCAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIF90aGlzLnNob3dQb3BwZXIgPSB0cnVlO1xuXHQgICAgICAgIH0sIHRoaXMub3BlbkRlbGF5KTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB0aGlzLnNob3dQb3BwZXIgPSB0cnVlO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlTW91c2VMZWF2ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpIHtcblx0ICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cblx0ICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcblx0ICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBfdGhpczIuc2hvd1BvcHBlciA9IGZhbHNlO1xuXHQgICAgICB9LCAyMDApO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZURvY3VtZW50Q2xpY2s6IGZ1bmN0aW9uIGhhbmRsZURvY3VtZW50Q2xpY2soZSkge1xuXHQgICAgICB2YXIgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2UgfHwgdGhpcy4kcmVmcy5yZWZlcmVuY2U7XG5cdCAgICAgIHZhciBwb3BwZXIgPSB0aGlzLnBvcHBlciB8fCB0aGlzLiRyZWZzLnBvcHBlcjtcblxuXHQgICAgICBpZiAoIXJlZmVyZW5jZSAmJiB0aGlzLiRzbG90cy5yZWZlcmVuY2UgJiYgdGhpcy4kc2xvdHMucmVmZXJlbmNlWzBdKSB7XG5cdCAgICAgICAgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLiRzbG90cy5yZWZlcmVuY2VbMF0uZWxtO1xuXHQgICAgICB9XG5cdCAgICAgIGlmICghdGhpcy4kZWwgfHwgIXJlZmVyZW5jZSB8fCB0aGlzLiRlbC5jb250YWlucyhlLnRhcmdldCkgfHwgcmVmZXJlbmNlLmNvbnRhaW5zKGUudGFyZ2V0KSB8fCAhcG9wcGVyIHx8IHBvcHBlci5jb250YWlucyhlLnRhcmdldCkpIHJldHVybjtcblx0ICAgICAgdGhpcy5zaG93UG9wcGVyID0gZmFsc2U7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkKCkge1xuXHQgICAgdmFyIHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlO1xuXG5cdCAgICAoMCwgX2RvbS5vZmYpKHJlZmVyZW5jZSwgJ2NsaWNrJywgdGhpcy5kb1RvZ2dsZSk7XG5cdCAgICAoMCwgX2RvbS5vZmYpKHJlZmVyZW5jZSwgJ21vdXNldXAnLCB0aGlzLmRvQ2xvc2UpO1xuXHQgICAgKDAsIF9kb20ub2ZmKShyZWZlcmVuY2UsICdtb3VzZWRvd24nLCB0aGlzLmRvU2hvdyk7XG5cdCAgICAoMCwgX2RvbS5vZmYpKHJlZmVyZW5jZSwgJ2ZvY3VzJywgdGhpcy5kb1Nob3cpO1xuXHQgICAgKDAsIF9kb20ub2ZmKShyZWZlcmVuY2UsICdibHVyJywgdGhpcy5kb0Nsb3NlKTtcblx0ICAgICgwLCBfZG9tLm9mZikocmVmZXJlbmNlLCAnbW91c2VsZWF2ZScsIHRoaXMuaGFuZGxlTW91c2VMZWF2ZSk7XG5cdCAgICAoMCwgX2RvbS5vZmYpKHJlZmVyZW5jZSwgJ21vdXNlZW50ZXInLCB0aGlzLmhhbmRsZU1vdXNlRW50ZXIpO1xuXHQgICAgKDAsIF9kb20ub2ZmKShkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5oYW5kbGVEb2N1bWVudENsaWNrKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxOTAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdzcGFuJywgW19jKCd0cmFuc2l0aW9uJywge1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJuYW1lXCI6IF92bS50cmFuc2l0aW9uXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJhZnRlci1sZWF2ZVwiOiBfdm0uZG9EZXN0cm95XG5cdCAgICB9XG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6ICghX3ZtLmRpc2FibGVkICYmIF92bS5zaG93UG9wcGVyKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCIhZGlzYWJsZWQgJiYgc2hvd1BvcHBlclwiXG5cdCAgICB9XSxcblx0ICAgIHJlZjogXCJwb3BwZXJcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXBvcG92ZXJcIixcblx0ICAgIGNsYXNzOiBbX3ZtLnBvcHBlckNsYXNzXSxcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICB3aWR0aDogX3ZtLndpZHRoICsgJ3B4J1xuXHQgICAgfSlcblx0ICB9LCBbKF92bS50aXRsZSkgPyBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcG9wb3Zlcl9fdGl0bGVcIixcblx0ICAgIGRvbVByb3BzOiB7XG5cdCAgICAgIFwidGV4dENvbnRlbnRcIjogX3ZtLl9zKF92bS50aXRsZSlcblx0ICAgIH1cblx0ICB9KSA6IF92bS5fZSgpLCBfdm0uX3QoXCJkZWZhdWx0XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5jb250ZW50KSldKV0sIDIpXSksIF92bS5fdChcInJlZmVyZW5jZVwiKV0sIDIpXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDE5MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG5cdCAgICB2bm9kZS5jb250ZXh0LiRyZWZzW2JpbmRpbmcuYXJnXS4kcmVmcy5yZWZlcmVuY2UgPSBlbDtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAxOTIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfbWFpbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTkzKTtcblxuXHR2YXIgX21haW4yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWFpbik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfbWFpbjIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX21haW4yLmRlZmF1bHQubmFtZSwgX21haW4yLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9tYWluMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogMTkzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3Z1ZVBvcHBlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xuXG5cdHZhciBfdnVlUG9wcGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZVBvcHBlcik7XG5cblx0dmFyIF9kZWJvdW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xuXG5cdHZhciBfZGVib3VuY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVib3VuY2UpO1xuXG5cdHZhciBfdmRvbSA9IF9fd2VicGFja19yZXF1aXJlX18oMTk0KTtcblxuXHR2YXIgX3Z1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMzKTtcblxuXHR2YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbFRvb2x0aXAnLFxuXG5cdCAgbWl4aW5zOiBbX3Z1ZVBvcHBlcjIuZGVmYXVsdF0sXG5cblx0ICBwcm9wczoge1xuXHQgICAgb3BlbkRlbGF5OiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogMFxuXHQgICAgfSxcblx0ICAgIGRpc2FibGVkOiBCb29sZWFuLFxuXHQgICAgbWFudWFsOiBCb29sZWFuLFxuXHQgICAgZWZmZWN0OiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2RhcmsnXG5cdCAgICB9LFxuXHQgICAgcG9wcGVyQ2xhc3M6IFN0cmluZyxcblx0ICAgIGNvbnRlbnQ6IFN0cmluZyxcblx0ICAgIHZpc2libGVBcnJvdzoge1xuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXHQgICAgdHJhbnNpdGlvbjoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICdlbC1mYWRlLWluLWxpbmVhcidcblx0ICAgIH0sXG5cdCAgICBwb3BwZXJPcHRpb25zOiB7XG5cdCAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICBib3VuZGFyaWVzUGFkZGluZzogMTAsXG5cdCAgICAgICAgICBncHVBY2NlbGVyYXRpb246IGZhbHNlXG5cdCAgICAgICAgfTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGVudGVyYWJsZToge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXHQgICAgaGlkZUFmdGVyOiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogMFxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgdGltZW91dFBlbmRpbmc6IG51bGxcblx0ICAgIH07XG5cdCAgfSxcblx0ICBiZWZvcmVDcmVhdGU6IGZ1bmN0aW9uIGJlZm9yZUNyZWF0ZSgpIHtcblx0ICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuXG5cdCAgICB0aGlzLnBvcHBlclZNID0gbmV3IF92dWUyLmRlZmF1bHQoe1xuXHQgICAgICBkYXRhOiB7IG5vZGU6ICcnIH0sXG5cdCAgICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5ub2RlO1xuXHQgICAgICB9XG5cdCAgICB9KS4kbW91bnQoKTtcblxuXHQgICAgdGhpcy5kZWJvdW5jZUNsb3NlID0gKDAsIF9kZWJvdW5jZTIuZGVmYXVsdCkoMjAwLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVDbG9zZVBvcHBlcigpO1xuXHQgICAgfSk7XG5cdCAgfSxcblx0ICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG5cdCAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuXHQgICAgaWYgKHRoaXMucG9wcGVyVk0pIHtcblx0ICAgICAgdGhpcy5wb3BwZXJWTS5ub2RlID0gaChcblx0ICAgICAgICAndHJhbnNpdGlvbicsXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgYXR0cnM6IHtcblx0ICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2l0aW9uXG5cdCAgICAgICAgICB9LFxuXHQgICAgICAgICAgb246IHtcblx0ICAgICAgICAgICAgJ2FmdGVyTGVhdmUnOiB0aGlzLmRvRGVzdHJveVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgW2goXG5cdCAgICAgICAgICAnZGl2Jyxcblx0ICAgICAgICAgIHtcblx0ICAgICAgICAgICAgb246IHtcblx0ICAgICAgICAgICAgICAnbW91c2VsZWF2ZSc6IGZ1bmN0aW9uIG1vdXNlbGVhdmUoKSB7XG5cdCAgICAgICAgICAgICAgICBfdGhpczIuc2V0RXhwZWN0ZWRTdGF0ZShmYWxzZSk7X3RoaXMyLmRlYm91bmNlQ2xvc2UoKTtcblx0ICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICdtb3VzZWVudGVyJzogZnVuY3Rpb24gbW91c2VlbnRlcigpIHtcblx0ICAgICAgICAgICAgICAgIF90aGlzMi5zZXRFeHBlY3RlZFN0YXRlKHRydWUpO1xuXHQgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICByZWY6ICdwb3BwZXInLFxuXHQgICAgICAgICAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICAgICAgICAgIG5hbWU6ICdzaG93Jyxcblx0ICAgICAgICAgICAgICB2YWx1ZTogIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5zaG93UG9wcGVyXG5cdCAgICAgICAgICAgIH1dLFxuXG5cdCAgICAgICAgICAgICdjbGFzcyc6IFsnZWwtdG9vbHRpcF9fcG9wcGVyJywgJ2lzLScgKyB0aGlzLmVmZmVjdCwgdGhpcy5wb3BwZXJDbGFzc10gfSxcblx0ICAgICAgICAgIFt0aGlzLiRzbG90cy5jb250ZW50IHx8IHRoaXMuY29udGVudF1cblx0ICAgICAgICApXVxuXHQgICAgICApO1xuXHQgICAgfVxuXG5cdCAgICBpZiAoIXRoaXMuJHNsb3RzLmRlZmF1bHQgfHwgIXRoaXMuJHNsb3RzLmRlZmF1bHQubGVuZ3RoKSByZXR1cm4gdGhpcy4kc2xvdHMuZGVmYXVsdDtcblxuXHQgICAgdmFyIHZub2RlID0gKDAsIF92ZG9tLmdldEZpcnN0Q29tcG9uZW50Q2hpbGQpKHRoaXMuJHNsb3RzLmRlZmF1bHQpO1xuXHQgICAgaWYgKCF2bm9kZSkgcmV0dXJuIHZub2RlO1xuXHQgICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhID0gdm5vZGUuZGF0YSB8fCB7fTtcblx0ICAgIHZhciBvbiA9IHZub2RlLmRhdGEub24gPSB2bm9kZS5kYXRhLm9uIHx8IHt9O1xuXHQgICAgdmFyIG5hdGl2ZU9uID0gdm5vZGUuZGF0YS5uYXRpdmVPbiA9IHZub2RlLmRhdGEubmF0aXZlT24gfHwge307XG5cblx0ICAgIGRhdGEuc3RhdGljQ2xhc3MgPSB0aGlzLmNvbmNhdENsYXNzKGRhdGEuc3RhdGljQ2xhc3MsICdlbC10b29sdGlwJyk7XG5cdCAgICBvbi5tb3VzZWVudGVyID0gdGhpcy5hZGRFdmVudEhhbmRsZShvbi5tb3VzZWVudGVyLCB0aGlzLnNob3cpO1xuXHQgICAgb24ubW91c2VsZWF2ZSA9IHRoaXMuYWRkRXZlbnRIYW5kbGUob24ubW91c2VsZWF2ZSwgdGhpcy5oaWRlKTtcblx0ICAgIG5hdGl2ZU9uLm1vdXNlZW50ZXIgPSB0aGlzLmFkZEV2ZW50SGFuZGxlKG5hdGl2ZU9uLm1vdXNlZW50ZXIsIHRoaXMuc2hvdyk7XG5cdCAgICBuYXRpdmVPbi5tb3VzZWxlYXZlID0gdGhpcy5hZGRFdmVudEhhbmRsZShuYXRpdmVPbi5tb3VzZWxlYXZlLCB0aGlzLmhpZGUpO1xuXG5cdCAgICByZXR1cm4gdm5vZGU7XG5cdCAgfSxcblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLiRlbDtcblx0ICB9LFxuXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBzaG93OiBmdW5jdGlvbiBzaG93KCkge1xuXHQgICAgICB0aGlzLnNldEV4cGVjdGVkU3RhdGUodHJ1ZSk7XG5cdCAgICAgIHRoaXMuaGFuZGxlU2hvd1BvcHBlcigpO1xuXHQgICAgfSxcblx0ICAgIGhpZGU6IGZ1bmN0aW9uIGhpZGUoKSB7XG5cdCAgICAgIHRoaXMuc2V0RXhwZWN0ZWRTdGF0ZShmYWxzZSk7XG5cdCAgICAgIHRoaXMuZGVib3VuY2VDbG9zZSgpO1xuXHQgICAgfSxcblx0ICAgIGFkZEV2ZW50SGFuZGxlOiBmdW5jdGlvbiBhZGRFdmVudEhhbmRsZShvbGQsIGZuKSB7XG5cdCAgICAgIGlmICghb2xkKSB7XG5cdCAgICAgICAgcmV0dXJuIGZuO1xuXHQgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2xkKSkge1xuXHQgICAgICAgIHJldHVybiBvbGQuaW5kZXhPZihmbikgPiAtMSA/IG9sZCA6IG9sZC5jb25jYXQoZm4pO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHJldHVybiBvbGQgPT09IGZuID8gb2xkIDogW29sZCwgZm5dO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29uY2F0Q2xhc3M6IGZ1bmN0aW9uIGNvbmNhdENsYXNzKGEsIGIpIHtcblx0ICAgICAgaWYgKGEgJiYgYS5pbmRleE9mKGIpID4gLTEpIHJldHVybiBhO1xuXHQgICAgICByZXR1cm4gYSA/IGIgPyBhICsgJyAnICsgYiA6IGEgOiBiIHx8ICcnO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZVNob3dQb3BwZXI6IGZ1bmN0aW9uIGhhbmRsZVNob3dQb3BwZXIoKSB7XG5cdCAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG5cdCAgICAgIGlmICghdGhpcy5leHBlY3RlZFN0YXRlIHx8IHRoaXMubWFudWFsKSByZXR1cm47XG5cdCAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXHQgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBfdGhpczMuc2hvd1BvcHBlciA9IHRydWU7XG5cdCAgICAgIH0sIHRoaXMub3BlbkRlbGF5KTtcblxuXHQgICAgICBpZiAodGhpcy5oaWRlQWZ0ZXIgPiAwKSB7XG5cdCAgICAgICAgdGhpcy50aW1lb3V0UGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgX3RoaXMzLnNob3dQb3BwZXIgPSBmYWxzZTtcblx0ICAgICAgICB9LCB0aGlzLmhpZGVBZnRlcik7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDbG9zZVBvcHBlcjogZnVuY3Rpb24gaGFuZGxlQ2xvc2VQb3BwZXIoKSB7XG5cdCAgICAgIGlmICh0aGlzLmVudGVyYWJsZSAmJiB0aGlzLmV4cGVjdGVkU3RhdGUgfHwgdGhpcy5tYW51YWwpIHJldHVybjtcblx0ICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG5cblx0ICAgICAgaWYgKHRoaXMudGltZW91dFBlbmRpbmcpIHtcblx0ICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0UGVuZGluZyk7XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5zaG93UG9wcGVyID0gZmFsc2U7XG5cdCAgICB9LFxuXHQgICAgc2V0RXhwZWN0ZWRTdGF0ZTogZnVuY3Rpb24gc2V0RXhwZWN0ZWRTdGF0ZShleHBlY3RlZFN0YXRlKSB7XG5cdCAgICAgIGlmIChleHBlY3RlZFN0YXRlID09PSBmYWxzZSkge1xuXHQgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRQZW5kaW5nKTtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLmV4cGVjdGVkU3RhdGUgPSBleHBlY3RlZFN0YXRlO1xuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDE5NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdmRvbVwiKTtcblxuLyoqKi8gfSxcbi8qIDE5NSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9tYWluID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTYpO1xuXG5cdHZhciBfbWFpbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tYWluKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9tYWluMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogMTk2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy5NZXNzYWdlQm94ID0gdW5kZWZpbmVkO1xuXG5cdHZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuXHR2YXIgX3Z1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMzKTtcblxuXHR2YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG5cdHZhciBfbWFpbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTk3KTtcblxuXHR2YXIgX21haW4yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWFpbik7XG5cblx0dmFyIF9tZXJnZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjQpO1xuXG5cdHZhciBfbWVyZ2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWVyZ2UpO1xuXG5cdHZhciBfdmRvbSA9IF9fd2VicGFja19yZXF1aXJlX18oMTk0KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdHZhciBkZWZhdWx0cyA9IHtcblx0ICB0aXRsZTogdW5kZWZpbmVkLFxuXHQgIG1lc3NhZ2U6ICcnLFxuXHQgIHR5cGU6ICcnLFxuXHQgIHNob3dJbnB1dDogZmFsc2UsXG5cdCAgc2hvd0Nsb3NlOiB0cnVlLFxuXHQgIG1vZGFsRmFkZTogdHJ1ZSxcblx0ICBsb2NrU2Nyb2xsOiB0cnVlLFxuXHQgIGNsb3NlT25DbGlja01vZGFsOiB0cnVlLFxuXHQgIGNsb3NlT25QcmVzc0VzY2FwZTogdHJ1ZSxcblx0ICBpbnB1dFZhbHVlOiBudWxsLFxuXHQgIGlucHV0UGxhY2Vob2xkZXI6ICcnLFxuXHQgIGlucHV0UGF0dGVybjogbnVsbCxcblx0ICBpbnB1dFZhbGlkYXRvcjogbnVsbCxcblx0ICBpbnB1dEVycm9yTWVzc2FnZTogJycsXG5cdCAgc2hvd0NvbmZpcm1CdXR0b246IHRydWUsXG5cdCAgc2hvd0NhbmNlbEJ1dHRvbjogZmFsc2UsXG5cdCAgY29uZmlybUJ1dHRvblBvc2l0aW9uOiAncmlnaHQnLFxuXHQgIGNvbmZpcm1CdXR0b25IaWdobGlnaHQ6IGZhbHNlLFxuXHQgIGNhbmNlbEJ1dHRvbkhpZ2hsaWdodDogZmFsc2UsXG5cdCAgY29uZmlybUJ1dHRvblRleHQ6ICcnLFxuXHQgIGNhbmNlbEJ1dHRvblRleHQ6ICcnLFxuXHQgIGNvbmZpcm1CdXR0b25DbGFzczogJycsXG5cdCAgY2FuY2VsQnV0dG9uQ2xhc3M6ICcnLFxuXHQgIGN1c3RvbUNsYXNzOiAnJyxcblx0ICBiZWZvcmVDbG9zZTogbnVsbFxuXHR9O1xuXG5cdHZhciBNZXNzYWdlQm94Q29uc3RydWN0b3IgPSBfdnVlMi5kZWZhdWx0LmV4dGVuZChfbWFpbjIuZGVmYXVsdCk7XG5cblx0dmFyIGN1cnJlbnRNc2cgPSB2b2lkIDAsXG5cdCAgICBpbnN0YW5jZSA9IHZvaWQgMDtcblx0dmFyIG1zZ1F1ZXVlID0gW107XG5cblx0dmFyIGRlZmF1bHRDYWxsYmFjayA9IGZ1bmN0aW9uIGRlZmF1bHRDYWxsYmFjayhhY3Rpb24pIHtcblx0ICBpZiAoY3VycmVudE1zZykge1xuXHQgICAgdmFyIGNhbGxiYWNrID0gY3VycmVudE1zZy5jYWxsYmFjaztcblx0ICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgaWYgKGluc3RhbmNlLnNob3dJbnB1dCkge1xuXHQgICAgICAgIGNhbGxiYWNrKGluc3RhbmNlLmlucHV0VmFsdWUsIGFjdGlvbik7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgY2FsbGJhY2soYWN0aW9uKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgaWYgKGN1cnJlbnRNc2cucmVzb2x2ZSkge1xuXHQgICAgICBpZiAoYWN0aW9uID09PSAnY29uZmlybScpIHtcblx0ICAgICAgICBpZiAoaW5zdGFuY2Uuc2hvd0lucHV0KSB7XG5cdCAgICAgICAgICBjdXJyZW50TXNnLnJlc29sdmUoeyB2YWx1ZTogaW5zdGFuY2UuaW5wdXRWYWx1ZSwgYWN0aW9uOiBhY3Rpb24gfSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIGN1cnJlbnRNc2cucmVzb2x2ZShhY3Rpb24pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdjYW5jZWwnICYmIGN1cnJlbnRNc2cucmVqZWN0KSB7XG5cdCAgICAgICAgY3VycmVudE1zZy5yZWplY3QoYWN0aW9uKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuXHR2YXIgaW5pdEluc3RhbmNlID0gZnVuY3Rpb24gaW5pdEluc3RhbmNlKCkge1xuXHQgIGluc3RhbmNlID0gbmV3IE1lc3NhZ2VCb3hDb25zdHJ1Y3Rvcih7XG5cdCAgICBlbDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jylcblx0ICB9KTtcblxuXHQgIGluc3RhbmNlLmNhbGxiYWNrID0gZGVmYXVsdENhbGxiYWNrO1xuXHR9O1xuXG5cdHZhciBzaG93TmV4dE1zZyA9IGZ1bmN0aW9uIHNob3dOZXh0TXNnKCkge1xuXHQgIGlmICghaW5zdGFuY2UpIHtcblx0ICAgIGluaXRJbnN0YW5jZSgpO1xuXHQgIH1cblx0ICBpbnN0YW5jZS5hY3Rpb24gPSAnJztcblxuXHQgIGlmICghaW5zdGFuY2UudmlzaWJsZSB8fCBpbnN0YW5jZS5jbG9zZVRpbWVyKSB7XG5cdCAgICBpZiAobXNnUXVldWUubGVuZ3RoID4gMCkge1xuXHQgICAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGN1cnJlbnRNc2cgPSBtc2dRdWV1ZS5zaGlmdCgpO1xuXG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBjdXJyZW50TXNnLm9wdGlvbnM7XG5cdCAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBvcHRpb25zKSB7XG5cdCAgICAgICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuXHQgICAgICAgICAgICBpbnN0YW5jZVtwcm9wXSA9IG9wdGlvbnNbcHJvcF07XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGlmIChvcHRpb25zLmNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgIGluc3RhbmNlLmNhbGxiYWNrID0gZGVmYXVsdENhbGxiYWNrO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBvbGRDYiA9IGluc3RhbmNlLmNhbGxiYWNrO1xuXHQgICAgICAgIGluc3RhbmNlLmNhbGxiYWNrID0gZnVuY3Rpb24gKGFjdGlvbiwgaW5zdGFuY2UpIHtcblx0ICAgICAgICAgIG9sZENiKGFjdGlvbiwgaW5zdGFuY2UpO1xuXHQgICAgICAgICAgc2hvd05leHRNc2coKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIGlmICgoMCwgX3Zkb20uaXNWTm9kZSkoaW5zdGFuY2UubWVzc2FnZSkpIHtcblx0ICAgICAgICAgIGluc3RhbmNlLiRzbG90cy5kZWZhdWx0ID0gW2luc3RhbmNlLm1lc3NhZ2VdO1xuXHQgICAgICAgICAgaW5zdGFuY2UubWVzc2FnZSA9IG51bGw7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIGRlbGV0ZSBpbnN0YW5jZS4kc2xvdHMuZGVmYXVsdDtcblx0ICAgICAgICB9XG5cdCAgICAgICAgWydtb2RhbCcsICdzaG93Q2xvc2UnLCAnY2xvc2VPbkNsaWNrTW9kYWwnLCAnY2xvc2VPblByZXNzRXNjYXBlJ10uZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuXHQgICAgICAgICAgaWYgKGluc3RhbmNlW3Byb3BdID09PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgaW5zdGFuY2VbcHJvcF0gPSB0cnVlO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW5zdGFuY2UuJGVsKTtcblxuXHQgICAgICAgIF92dWUyLmRlZmF1bHQubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgaW5zdGFuY2UudmlzaWJsZSA9IHRydWU7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0pKCk7XG5cdCAgICB9XG5cdCAgfVxuXHR9O1xuXG5cdHZhciBNZXNzYWdlQm94ID0gZnVuY3Rpb24gTWVzc2FnZUJveChvcHRpb25zLCBjYWxsYmFjaykge1xuXHQgIGlmIChfdnVlMi5kZWZhdWx0LnByb3RvdHlwZS4kaXNTZXJ2ZXIpIHJldHVybjtcblx0ICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG5cdCAgICBvcHRpb25zID0ge1xuXHQgICAgICBtZXNzYWdlOiBvcHRpb25zXG5cdCAgICB9O1xuXHQgICAgaWYgKGFyZ3VtZW50c1sxXSkge1xuXHQgICAgICBvcHRpb25zLnRpdGxlID0gYXJndW1lbnRzWzFdO1xuXHQgICAgfVxuXHQgICAgaWYgKGFyZ3VtZW50c1syXSkge1xuXHQgICAgICBvcHRpb25zLnR5cGUgPSBhcmd1bWVudHNbMl07XG5cdCAgICB9XG5cdCAgfSBlbHNlIGlmIChvcHRpb25zLmNhbGxiYWNrICYmICFjYWxsYmFjaykge1xuXHQgICAgY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuXHQgIH1cblxuXHQgIGlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0ICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdCAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblx0ICAgICAgbXNnUXVldWUucHVzaCh7XG5cdCAgICAgICAgb3B0aW9uczogKDAsIF9tZXJnZTIuZGVmYXVsdCkoe30sIGRlZmF1bHRzLCBNZXNzYWdlQm94LmRlZmF1bHRzLCBvcHRpb25zKSxcblx0ICAgICAgICBjYWxsYmFjazogY2FsbGJhY2ssXG5cdCAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZSxcblx0ICAgICAgICByZWplY3Q6IHJlamVjdFxuXHQgICAgICB9KTtcblxuXHQgICAgICBzaG93TmV4dE1zZygpO1xuXHQgICAgfSk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIG1zZ1F1ZXVlLnB1c2goe1xuXHQgICAgICBvcHRpb25zOiAoMCwgX21lcmdlMi5kZWZhdWx0KSh7fSwgZGVmYXVsdHMsIE1lc3NhZ2VCb3guZGVmYXVsdHMsIG9wdGlvbnMpLFxuXHQgICAgICBjYWxsYmFjazogY2FsbGJhY2tcblx0ICAgIH0pO1xuXG5cdCAgICBzaG93TmV4dE1zZygpO1xuXHQgIH1cblx0fTtcblxuXHRNZXNzYWdlQm94LnNldERlZmF1bHRzID0gZnVuY3Rpb24gKGRlZmF1bHRzKSB7XG5cdCAgTWVzc2FnZUJveC5kZWZhdWx0cyA9IGRlZmF1bHRzO1xuXHR9O1xuXG5cdE1lc3NhZ2VCb3guYWxlcnQgPSBmdW5jdGlvbiAobWVzc2FnZSwgdGl0bGUsIG9wdGlvbnMpIHtcblx0ICBpZiAoKHR5cGVvZiB0aXRsZSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YodGl0bGUpKSA9PT0gJ29iamVjdCcpIHtcblx0ICAgIG9wdGlvbnMgPSB0aXRsZTtcblx0ICAgIHRpdGxlID0gJyc7XG5cdCAgfSBlbHNlIGlmICh0aXRsZSA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICB0aXRsZSA9ICcnO1xuXHQgIH1cblx0ICByZXR1cm4gTWVzc2FnZUJveCgoMCwgX21lcmdlMi5kZWZhdWx0KSh7XG5cdCAgICB0aXRsZTogdGl0bGUsXG5cdCAgICBtZXNzYWdlOiBtZXNzYWdlLFxuXHQgICAgJHR5cGU6ICdhbGVydCcsXG5cdCAgICBjbG9zZU9uUHJlc3NFc2NhcGU6IGZhbHNlLFxuXHQgICAgY2xvc2VPbkNsaWNrTW9kYWw6IGZhbHNlXG5cdCAgfSwgb3B0aW9ucykpO1xuXHR9O1xuXG5cdE1lc3NhZ2VCb3guY29uZmlybSA9IGZ1bmN0aW9uIChtZXNzYWdlLCB0aXRsZSwgb3B0aW9ucykge1xuXHQgIGlmICgodHlwZW9mIHRpdGxlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih0aXRsZSkpID09PSAnb2JqZWN0Jykge1xuXHQgICAgb3B0aW9ucyA9IHRpdGxlO1xuXHQgICAgdGl0bGUgPSAnJztcblx0ICB9IGVsc2UgaWYgKHRpdGxlID09PSB1bmRlZmluZWQpIHtcblx0ICAgIHRpdGxlID0gJyc7XG5cdCAgfVxuXHQgIHJldHVybiBNZXNzYWdlQm94KCgwLCBfbWVyZ2UyLmRlZmF1bHQpKHtcblx0ICAgIHRpdGxlOiB0aXRsZSxcblx0ICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG5cdCAgICAkdHlwZTogJ2NvbmZpcm0nLFxuXHQgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZVxuXHQgIH0sIG9wdGlvbnMpKTtcblx0fTtcblxuXHRNZXNzYWdlQm94LnByb21wdCA9IGZ1bmN0aW9uIChtZXNzYWdlLCB0aXRsZSwgb3B0aW9ucykge1xuXHQgIGlmICgodHlwZW9mIHRpdGxlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih0aXRsZSkpID09PSAnb2JqZWN0Jykge1xuXHQgICAgb3B0aW9ucyA9IHRpdGxlO1xuXHQgICAgdGl0bGUgPSAnJztcblx0ICB9IGVsc2UgaWYgKHRpdGxlID09PSB1bmRlZmluZWQpIHtcblx0ICAgIHRpdGxlID0gJyc7XG5cdCAgfVxuXHQgIHJldHVybiBNZXNzYWdlQm94KCgwLCBfbWVyZ2UyLmRlZmF1bHQpKHtcblx0ICAgIHRpdGxlOiB0aXRsZSxcblx0ICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG5cdCAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuXHQgICAgc2hvd0lucHV0OiB0cnVlLFxuXHQgICAgJHR5cGU6ICdwcm9tcHQnXG5cdCAgfSwgb3B0aW9ucykpO1xuXHR9O1xuXG5cdE1lc3NhZ2VCb3guY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgaW5zdGFuY2UudmlzaWJsZSA9IGZhbHNlO1xuXHQgIG1zZ1F1ZXVlID0gW107XG5cdCAgY3VycmVudE1zZyA9IG51bGw7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gTWVzc2FnZUJveDtcblx0ZXhwb3J0cy5NZXNzYWdlQm94ID0gTWVzc2FnZUJveDtcblxuLyoqKi8gfSxcbi8qIDE5NyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxOTgpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxOTkpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAxOTggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfcG9wdXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblxuXHR2YXIgX3BvcHVwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BvcHVwKTtcblxuXHR2YXIgX2xvY2FsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG5cdHZhciBfbG9jYWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xvY2FsZSk7XG5cblx0dmFyIF9pbnB1dCA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xuXG5cdHZhciBfaW5wdXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5wdXQpO1xuXG5cdHZhciBfYnV0dG9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG5cblx0dmFyIF9idXR0b24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYnV0dG9uKTtcblxuXHR2YXIgX2RvbSA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xuXG5cdHZhciBfbG9jYWxlMyA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0dmFyIHR5cGVNYXAgPSB7XG5cdCAgc3VjY2VzczogJ2NpcmNsZS1jaGVjaycsXG5cdCAgaW5mbzogJ2luZm9ybWF0aW9uJyxcblx0ICB3YXJuaW5nOiAnd2FybmluZycsXG5cdCAgZXJyb3I6ICdjaXJjbGUtY3Jvc3MnXG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG1peGluczogW19wb3B1cDIuZGVmYXVsdCwgX2xvY2FsZTIuZGVmYXVsdF0sXG5cblx0ICBwcm9wczoge1xuXHQgICAgbW9kYWw6IHtcblx0ICAgICAgZGVmYXVsdDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIGxvY2tTY3JvbGw6IHtcblx0ICAgICAgZGVmYXVsdDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIHNob3dDbG9zZToge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXHQgICAgY2xvc2VPbkNsaWNrTW9kYWw6IHtcblx0ICAgICAgZGVmYXVsdDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIGNsb3NlT25QcmVzc0VzY2FwZToge1xuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNvbXBvbmVudHM6IHtcblx0ICAgIEVsSW5wdXQ6IF9pbnB1dDIuZGVmYXVsdCxcblx0ICAgIEVsQnV0dG9uOiBfYnV0dG9uMi5kZWZhdWx0XG5cdCAgfSxcblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICB0eXBlQ2xhc3M6IGZ1bmN0aW9uIHR5cGVDbGFzcygpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMudHlwZSAmJiB0eXBlTWFwW3RoaXMudHlwZV0gPyAnZWwtaWNvbi0nICsgdHlwZU1hcFt0aGlzLnR5cGVdIDogJyc7XG5cdCAgICB9LFxuXHQgICAgY29uZmlybUJ1dHRvbkNsYXNzZXM6IGZ1bmN0aW9uIGNvbmZpcm1CdXR0b25DbGFzc2VzKCkge1xuXHQgICAgICByZXR1cm4gJ2VsLWJ1dHRvbi0tcHJpbWFyeSAnICsgdGhpcy5jb25maXJtQnV0dG9uQ2xhc3M7XG5cdCAgICB9LFxuXHQgICAgY2FuY2VsQnV0dG9uQ2xhc3NlczogZnVuY3Rpb24gY2FuY2VsQnV0dG9uQ2xhc3NlcygpIHtcblx0ICAgICAgcmV0dXJuICcnICsgdGhpcy5jYW5jZWxCdXR0b25DbGFzcztcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgZ2V0U2FmZUNsb3NlOiBmdW5jdGlvbiBnZXRTYWZlQ2xvc2UoKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgdmFyIGN1cnJlbnRJZCA9IHRoaXMudWlkO1xuXHQgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIF90aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICBpZiAoY3VycmVudElkID09PSBfdGhpcy51aWQpIF90aGlzLmRvQ2xvc2UoKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfTtcblx0ICAgIH0sXG5cdCAgICBkb0Nsb3NlOiBmdW5jdGlvbiBkb0Nsb3NlKCkge1xuXHQgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuXHQgICAgICBpZiAoIXRoaXMudmlzaWJsZSkgcmV0dXJuO1xuXHQgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcblx0ICAgICAgdGhpcy5fY2xvc2luZyA9IHRydWU7XG5cblx0ICAgICAgdGhpcy5vbkNsb3NlICYmIHRoaXMub25DbG9zZSgpO1xuXG5cdCAgICAgIGlmICh0aGlzLmxvY2tTY3JvbGwpIHtcblx0ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIGlmIChfdGhpczIubW9kYWwgJiYgX3RoaXMyLmJvZHlPdmVyZmxvdyAhPT0gJ2hpZGRlbicpIHtcblx0ICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IF90aGlzMi5ib2R5T3ZlcmZsb3c7XG5cdCAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0ID0gX3RoaXMyLmJvZHlQYWRkaW5nUmlnaHQ7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICBfdGhpczIuYm9keU92ZXJmbG93ID0gbnVsbDtcblx0ICAgICAgICAgIF90aGlzMi5ib2R5UGFkZGluZ1JpZ2h0ID0gbnVsbDtcblx0ICAgICAgICB9LCAyMDApO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG5cblx0ICAgICAgaWYgKCF0aGlzLnRyYW5zaXRpb24pIHtcblx0ICAgICAgICB0aGlzLmRvQWZ0ZXJDbG9zZSgpO1xuXHQgICAgICB9XG5cdCAgICAgIGlmICh0aGlzLmFjdGlvbikgdGhpcy5jYWxsYmFjayh0aGlzLmFjdGlvbiwgdGhpcyk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlV3JhcHBlckNsaWNrOiBmdW5jdGlvbiBoYW5kbGVXcmFwcGVyQ2xpY2soKSB7XG5cdCAgICAgIGlmICh0aGlzLmNsb3NlT25DbGlja01vZGFsKSB7XG5cdCAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24oJ2NhbmNlbCcpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQWN0aW9uOiBmdW5jdGlvbiBoYW5kbGVBY3Rpb24oYWN0aW9uKSB7XG5cdCAgICAgIGlmICh0aGlzLiR0eXBlID09PSAncHJvbXB0JyAmJiBhY3Rpb24gPT09ICdjb25maXJtJyAmJiAhdGhpcy52YWxpZGF0ZSgpKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uO1xuXHQgICAgICBpZiAodHlwZW9mIHRoaXMuYmVmb3JlQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICB0aGlzLmNsb3NlID0gdGhpcy5nZXRTYWZlQ2xvc2UoKTtcblx0ICAgICAgICB0aGlzLmJlZm9yZUNsb3NlKGFjdGlvbiwgdGhpcywgdGhpcy5jbG9zZSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5kb0Nsb3NlKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB2YWxpZGF0ZTogZnVuY3Rpb24gdmFsaWRhdGUoKSB7XG5cdCAgICAgIGlmICh0aGlzLiR0eXBlID09PSAncHJvbXB0Jykge1xuXHQgICAgICAgIHZhciBpbnB1dFBhdHRlcm4gPSB0aGlzLmlucHV0UGF0dGVybjtcblx0ICAgICAgICBpZiAoaW5wdXRQYXR0ZXJuICYmICFpbnB1dFBhdHRlcm4udGVzdCh0aGlzLmlucHV0VmFsdWUgfHwgJycpKSB7XG5cdCAgICAgICAgICB0aGlzLmVkaXRvckVycm9yTWVzc2FnZSA9IHRoaXMuaW5wdXRFcnJvck1lc3NhZ2UgfHwgKDAsIF9sb2NhbGUzLnQpKCdlbC5tZXNzYWdlYm94LmVycm9yJyk7XG5cdCAgICAgICAgICAoMCwgX2RvbS5hZGRDbGFzcykodGhpcy4kcmVmcy5pbnB1dC4kZWwucXVlcnlTZWxlY3RvcignaW5wdXQnKSwgJ2ludmFsaWQnKTtcblx0ICAgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIGlucHV0VmFsaWRhdG9yID0gdGhpcy5pbnB1dFZhbGlkYXRvcjtcblx0ICAgICAgICBpZiAodHlwZW9mIGlucHV0VmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgICB2YXIgdmFsaWRhdGVSZXN1bHQgPSBpbnB1dFZhbGlkYXRvcih0aGlzLmlucHV0VmFsdWUpO1xuXHQgICAgICAgICAgaWYgKHZhbGlkYXRlUmVzdWx0ID09PSBmYWxzZSkge1xuXHQgICAgICAgICAgICB0aGlzLmVkaXRvckVycm9yTWVzc2FnZSA9IHRoaXMuaW5wdXRFcnJvck1lc3NhZ2UgfHwgKDAsIF9sb2NhbGUzLnQpKCdlbC5tZXNzYWdlYm94LmVycm9yJyk7XG5cdCAgICAgICAgICAgICgwLCBfZG9tLmFkZENsYXNzKSh0aGlzLiRyZWZzLmlucHV0LiRlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLCAnaW52YWxpZCcpO1xuXHQgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRlUmVzdWx0ID09PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICB0aGlzLmVkaXRvckVycm9yTWVzc2FnZSA9IHZhbGlkYXRlUmVzdWx0O1xuXHQgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuZWRpdG9yRXJyb3JNZXNzYWdlID0gJyc7XG5cdCAgICAgICgwLCBfZG9tLnJlbW92ZUNsYXNzKSh0aGlzLiRyZWZzLmlucHV0LiRlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLCAnaW52YWxpZCcpO1xuXHQgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgIGlucHV0VmFsdWU6IHtcblx0ICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuXHQgICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbCkge1xuXHQgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG5cdCAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcblx0ICAgICAgICAgIGlmIChfdGhpczMuJHR5cGUgPT09ICdwcm9tcHQnICYmIHZhbCAhPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBfdGhpczMudmFsaWRhdGUoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblxuXHQgICAgdmlzaWJsZTogZnVuY3Rpb24gdmlzaWJsZSh2YWwpIHtcblx0ICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cblx0ICAgICAgaWYgKHZhbCkgdGhpcy51aWQrKztcblx0ICAgICAgaWYgKHRoaXMuJHR5cGUgPT09ICdhbGVydCcgfHwgdGhpcy4kdHlwZSA9PT0gJ2NvbmZpcm0nKSB7XG5cdCAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgX3RoaXM0LiRyZWZzLmNvbmZpcm0uJGVsLmZvY3VzKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKHRoaXMuJHR5cGUgIT09ICdwcm9tcHQnKSByZXR1cm47XG5cdCAgICAgIGlmICh2YWwpIHtcblx0ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIGlmIChfdGhpczQuJHJlZnMuaW5wdXQgJiYgX3RoaXM0LiRyZWZzLmlucHV0LiRlbCkge1xuXHQgICAgICAgICAgICBfdGhpczQuJHJlZnMuaW5wdXQuJGVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykuZm9jdXMoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9LCA1MDApO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuZWRpdG9yRXJyb3JNZXNzYWdlID0gJyc7XG5cdCAgICAgICAgKDAsIF9kb20ucmVtb3ZlQ2xhc3MpKHRoaXMuJHJlZnMuaW5wdXQuJGVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JyksICdpbnZhbGlkJyk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHVpZDogMSxcblx0ICAgICAgdGl0bGU6IHVuZGVmaW5lZCxcblx0ICAgICAgbWVzc2FnZTogJycsXG5cdCAgICAgIHR5cGU6ICcnLFxuXHQgICAgICBjdXN0b21DbGFzczogJycsXG5cdCAgICAgIHNob3dJbnB1dDogZmFsc2UsXG5cdCAgICAgIGlucHV0VmFsdWU6IG51bGwsXG5cdCAgICAgIGlucHV0UGxhY2Vob2xkZXI6ICcnLFxuXHQgICAgICBpbnB1dFBhdHRlcm46IG51bGwsXG5cdCAgICAgIGlucHV0VmFsaWRhdG9yOiBudWxsLFxuXHQgICAgICBpbnB1dEVycm9yTWVzc2FnZTogJycsXG5cdCAgICAgIHNob3dDb25maXJtQnV0dG9uOiB0cnVlLFxuXHQgICAgICBzaG93Q2FuY2VsQnV0dG9uOiBmYWxzZSxcblx0ICAgICAgYWN0aW9uOiAnJyxcblx0ICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICcnLFxuXHQgICAgICBjYW5jZWxCdXR0b25UZXh0OiAnJyxcblx0ICAgICAgY29uZmlybUJ1dHRvbkxvYWRpbmc6IGZhbHNlLFxuXHQgICAgICBjYW5jZWxCdXR0b25Mb2FkaW5nOiBmYWxzZSxcblx0ICAgICAgY29uZmlybUJ1dHRvbkNsYXNzOiAnJyxcblx0ICAgICAgY29uZmlybUJ1dHRvbkRpc2FibGVkOiBmYWxzZSxcblx0ICAgICAgY2FuY2VsQnV0dG9uQ2xhc3M6ICcnLFxuXHQgICAgICBlZGl0b3JFcnJvck1lc3NhZ2U6IG51bGwsXG5cdCAgICAgIGNhbGxiYWNrOiBudWxsXG5cdCAgICB9O1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDE5OSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ3RyYW5zaXRpb24nLCB7XG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcIm5hbWVcIjogXCJtc2dib3gtZmFkZVwiXG5cdCAgICB9XG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0udmlzaWJsZSksXG5cdCAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2UtYm94X193cmFwcGVyXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInRhYmluZGV4XCI6IFwiLTFcIlxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKCRldmVudC50YXJnZXQgIT09ICRldmVudC5jdXJyZW50VGFyZ2V0KSB7IHJldHVybiBudWxsOyB9XG5cdCAgICAgICAgX3ZtLmhhbmRsZVdyYXBwZXJDbGljaygkZXZlbnQpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LCBbX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2UtYm94XCIsXG5cdCAgICBjbGFzczogX3ZtLmN1c3RvbUNsYXNzXG5cdCAgfSwgWyhfdm0udGl0bGUgIT09IHVuZGVmaW5lZCkgPyBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtbWVzc2FnZS1ib3hfX2hlYWRlclwiXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveF9fdGl0bGVcIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50aXRsZSkpXSksIChfdm0uc2hvd0Nsb3NlKSA/IF9jKCdidXR0b24nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveF9faGVhZGVyYnRuXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInR5cGVcIjogXCJidXR0b25cIixcblx0ICAgICAgXCJhcmlhLWxhYmVsXCI6IFwiQ2xvc2VcIlxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmhhbmRsZUFjdGlvbignY2FuY2VsJylcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFtfYygnaScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2UtYm94X19jbG9zZSBlbC1pY29uLWNsb3NlXCJcblx0ICB9KV0pIDogX3ZtLl9lKCldKSA6IF92bS5fZSgpLCAoX3ZtLm1lc3NhZ2UgIT09ICcnKSA/IF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveF9fY29udGVudFwiXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveF9fc3RhdHVzXCIsXG5cdCAgICBjbGFzczogW192bS50eXBlQ2xhc3NdXG5cdCAgfSksIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveF9fbWVzc2FnZVwiLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgICdtYXJnaW4tbGVmdCc6IF92bS50eXBlQ2xhc3MgPyAnNTBweCcgOiAnMCdcblx0ICAgIH0pXG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIiwgW19jKCdwJywgW192bS5fdihfdm0uX3MoX3ZtLm1lc3NhZ2UpKV0pXSldLCAyKSwgX2MoJ2RpdicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5zaG93SW5wdXQpLFxuXHQgICAgICBleHByZXNzaW9uOiBcInNob3dJbnB1dFwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2UtYm94X19pbnB1dFwiXG5cdCAgfSwgW19jKCdlbC1pbnB1dCcsIHtcblx0ICAgIHJlZjogXCJpbnB1dFwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJwbGFjZWhvbGRlclwiOiBfdm0uaW5wdXRQbGFjZWhvbGRlclxuXHQgICAgfSxcblx0ICAgIG5hdGl2ZU9uOiB7XG5cdCAgICAgIFwia2V5dXBcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKCEoJ2J1dHRvbicgaW4gJGV2ZW50KSAmJiBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZW50ZXJcIiwgMTMpKSB7IHJldHVybiBudWxsOyB9XG5cdCAgICAgICAgX3ZtLmhhbmRsZUFjdGlvbignY29uZmlybScpXG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtb2RlbDoge1xuXHQgICAgICB2YWx1ZTogKF92bS5pbnB1dFZhbHVlKSxcblx0ICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuXHQgICAgICAgIF92bS5pbnB1dFZhbHVlID0gJCR2XG5cdCAgICAgIH0sXG5cdCAgICAgIGV4cHJlc3Npb246IFwiaW5wdXRWYWx1ZVwiXG5cdCAgICB9XG5cdCAgfSksIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveF9fZXJyb3Jtc2dcIixcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICB2aXNpYmlsaXR5OiAhIV92bS5lZGl0b3JFcnJvck1lc3NhZ2UgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1xuXHQgICAgfSlcblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0uZWRpdG9yRXJyb3JNZXNzYWdlKSldKV0sIDEpXSkgOiBfdm0uX2UoKSwgX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2UtYm94X19idG5zXCJcblx0ICB9LCBbX2MoJ2VsLWJ1dHRvbicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5zaG93Q2FuY2VsQnV0dG9uKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJzaG93Q2FuY2VsQnV0dG9uXCJcblx0ICAgIH1dLFxuXHQgICAgY2xhc3M6IFtfdm0uY2FuY2VsQnV0dG9uQ2xhc3Nlc10sXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcImxvYWRpbmdcIjogX3ZtLmNhbmNlbEJ1dHRvbkxvYWRpbmdcblx0ICAgIH0sXG5cdCAgICBuYXRpdmVPbjoge1xuXHQgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5oYW5kbGVBY3Rpb24oJ2NhbmNlbCcpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LCBbX3ZtLl92KFwiXFxuICAgICAgICAgIFwiICsgX3ZtLl9zKF92bS5jYW5jZWxCdXR0b25UZXh0IHx8IF92bS50KCdlbC5tZXNzYWdlYm94LmNhbmNlbCcpKSArIFwiXFxuICAgICAgICBcIildKSwgX2MoJ2VsLWJ1dHRvbicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5zaG93Q29uZmlybUJ1dHRvbiksXG5cdCAgICAgIGV4cHJlc3Npb246IFwic2hvd0NvbmZpcm1CdXR0b25cIlxuXHQgICAgfV0sXG5cdCAgICByZWY6IFwiY29uZmlybVwiLFxuXHQgICAgY2xhc3M6IFtfdm0uY29uZmlybUJ1dHRvbkNsYXNzZXNdLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJsb2FkaW5nXCI6IF92bS5jb25maXJtQnV0dG9uTG9hZGluZ1xuXHQgICAgfSxcblx0ICAgIG5hdGl2ZU9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmhhbmRsZUFjdGlvbignY29uZmlybScpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LCBbX3ZtLl92KFwiXFxuICAgICAgICAgIFwiICsgX3ZtLl9zKF92bS5jb25maXJtQnV0dG9uVGV4dCB8fCBfdm0udCgnZWwubWVzc2FnZWJveC5jb25maXJtJykpICsgXCJcXG4gICAgICAgIFwiKV0pXSwgMSldKV0pXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMjAwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2JyZWFkY3J1bWIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwMSk7XG5cblx0dmFyIF9icmVhZGNydW1iMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2JyZWFkY3J1bWIpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X2JyZWFkY3J1bWIyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9icmVhZGNydW1iMi5kZWZhdWx0Lm5hbWUsIF9icmVhZGNydW1iMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfYnJlYWRjcnVtYjIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDIwMSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyMDIpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyMDMpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAyMDIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxCcmVhZGNydW1iJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBzZXBhcmF0b3I6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnLydcblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyMDMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1icmVhZGNydW1iXCJcblx0ICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDIwNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9icmVhZGNydW1iSXRlbSA9IF9fd2VicGFja19yZXF1aXJlX18oMjA1KTtcblxuXHR2YXIgX2JyZWFkY3J1bWJJdGVtMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2JyZWFkY3J1bWJJdGVtKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9icmVhZGNydW1iSXRlbTIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX2JyZWFkY3J1bWJJdGVtMi5kZWZhdWx0Lm5hbWUsIF9icmVhZGNydW1iSXRlbTIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX2JyZWFkY3J1bWJJdGVtMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogMjA1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNiksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNyksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDIwNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbEJyZWFkY3J1bWJJdGVtJyxcblx0ICBwcm9wczoge1xuXHQgICAgdG86IHt9LFxuXHQgICAgcmVwbGFjZTogQm9vbGVhblxuXHQgIH0sXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHNlcGFyYXRvcjogJydcblx0ICAgIH07XG5cdCAgfSxcblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgdGhpcy5zZXBhcmF0b3IgPSB0aGlzLiRwYXJlbnQuc2VwYXJhdG9yO1xuXHQgICAgdmFyIHNlbGYgPSB0aGlzO1xuXHQgICAgaWYgKHRoaXMudG8pIHtcblx0ICAgICAgdmFyIGxpbmsgPSB0aGlzLiRyZWZzLmxpbms7XG5cdCAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoXykge1xuXHQgICAgICAgIHZhciB0byA9IF90aGlzLnRvO1xuXHQgICAgICAgIHNlbGYucmVwbGFjZSA/IHNlbGYuJHJvdXRlci5yZXBsYWNlKHRvKSA6IHNlbGYuJHJvdXRlci5wdXNoKHRvKTtcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMjA3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnc3BhbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWJyZWFkY3J1bWJfX2l0ZW1cIlxuXHQgIH0sIFtfYygnc3BhbicsIHtcblx0ICAgIHJlZjogXCJsaW5rXCIsXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1icmVhZGNydW1iX19pdGVtX19pbm5lclwiXG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKSwgX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1icmVhZGNydW1iX19zZXBhcmF0b3JcIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS5zZXBhcmF0b3IpKV0pXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMjA4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2Zvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOSk7XG5cblx0dmFyIF9mb3JtMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Zvcm0pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X2Zvcm0yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9mb3JtMi5kZWZhdWx0Lm5hbWUsIF9mb3JtMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfZm9ybTIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDIwOSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyMTApLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyMTEpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAyMTAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxGb3JtJyxcblxuXHQgIGNvbXBvbmVudE5hbWU6ICdFbEZvcm0nLFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIG1vZGVsOiBPYmplY3QsXG5cdCAgICBydWxlczogT2JqZWN0LFxuXHQgICAgbGFiZWxQb3NpdGlvbjogU3RyaW5nLFxuXHQgICAgbGFiZWxXaWR0aDogU3RyaW5nLFxuXHQgICAgbGFiZWxTdWZmaXg6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnJ1xuXHQgICAgfSxcblx0ICAgIGlubGluZTogQm9vbGVhbixcblx0ICAgIHNob3dNZXNzYWdlOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IHRydWVcblx0ICAgIH1cblx0ICB9LFxuXHQgIHdhdGNoOiB7XG5cdCAgICBydWxlczogZnVuY3Rpb24gcnVsZXMoKSB7XG5cdCAgICAgIHRoaXMudmFsaWRhdGUoKTtcblx0ICAgIH1cblx0ICB9LFxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBmaWVsZHM6IFtdXG5cdCAgICB9O1xuXHQgIH0sXG5cdCAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcblx0ICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgIHRoaXMuJG9uKCdlbC5mb3JtLmFkZEZpZWxkJywgZnVuY3Rpb24gKGZpZWxkKSB7XG5cdCAgICAgIGlmIChmaWVsZCkge1xuXHQgICAgICAgIF90aGlzLmZpZWxkcy5wdXNoKGZpZWxkKTtcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cdCAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHQgICAgdGhpcy4kb24oJ2VsLmZvcm0ucmVtb3ZlRmllbGQnLCBmdW5jdGlvbiAoZmllbGQpIHtcblx0ICAgICAgaWYgKGZpZWxkLnByb3ApIHtcblx0ICAgICAgICBfdGhpcy5maWVsZHMuc3BsaWNlKF90aGlzLmZpZWxkcy5pbmRleE9mKGZpZWxkKSwgMSk7XG5cdCAgICAgIH1cblx0ICAgIH0pO1xuXHQgIH0sXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICByZXNldEZpZWxkczogZnVuY3Rpb24gcmVzZXRGaWVsZHMoKSB7XG5cdCAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuXHQgICAgICAgIChcInByb2R1Y3Rpb25cIikgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25zb2xlLndhcm4oJ1tFbGVtZW50IFdhcm5dW0Zvcm1dbW9kZWwgaXMgcmVxdWlyZWQgZm9yIHJlc2V0RmllbGRzIHRvIHdvcmsuJyk7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG5cdCAgICAgICAgZmllbGQucmVzZXRGaWVsZCgpO1xuXHQgICAgICB9KTtcblx0ICAgIH0sXG5cdCAgICB2YWxpZGF0ZTogZnVuY3Rpb24gdmFsaWRhdGUoY2FsbGJhY2spIHtcblx0ICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cblx0ICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XG5cdCAgICAgICAgY29uc29sZS53YXJuKCdbRWxlbWVudCBXYXJuXVtGb3JtXW1vZGVsIGlzIHJlcXVpcmVkIGZvciB2YWxpZGF0ZSB0byB3b3JrIScpO1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfTtcblx0ICAgICAgdmFyIHZhbGlkID0gdHJ1ZTtcblx0ICAgICAgdmFyIGNvdW50ID0gMDtcblx0ICAgICAgLy8g5aaC5p6c6ZyA6KaB6aqM6K+B55qEZmllbGRz5Li656m677yM6LCD55So6aqM6K+B5pe256uL5Yi76L+U5ZueY2FsbGJhY2tcblx0ICAgICAgaWYgKHRoaXMuZmllbGRzLmxlbmd0aCA9PT0gMCAmJiBjYWxsYmFjaykge1xuXHQgICAgICAgIGNhbGxiYWNrKHRydWUpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkLCBpbmRleCkge1xuXHQgICAgICAgIGZpZWxkLnZhbGlkYXRlKCcnLCBmdW5jdGlvbiAoZXJyb3JzKSB7XG5cdCAgICAgICAgICBpZiAoZXJyb3JzKSB7XG5cdCAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nICYmICsrY291bnQgPT09IF90aGlzMi5maWVsZHMubGVuZ3RoKSB7XG5cdCAgICAgICAgICAgIGNhbGxiYWNrKHZhbGlkKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgdmFsaWRhdGVGaWVsZDogZnVuY3Rpb24gdmFsaWRhdGVGaWVsZChwcm9wLCBjYikge1xuXHQgICAgICB2YXIgZmllbGQgPSB0aGlzLmZpZWxkcy5maWx0ZXIoZnVuY3Rpb24gKGZpZWxkKSB7XG5cdCAgICAgICAgcmV0dXJuIGZpZWxkLnByb3AgPT09IHByb3A7XG5cdCAgICAgIH0pWzBdO1xuXHQgICAgICBpZiAoIWZpZWxkKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtdXN0IGNhbGwgdmFsaWRhdGVGaWVsZCB3aXRoIHZhbGlkIHByb3Agc3RyaW5nIScpO1xuXHQgICAgICB9XG5cblx0ICAgICAgZmllbGQudmFsaWRhdGUoJycsIGNiKTtcblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyMTEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdmb3JtJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtZm9ybVwiLFxuXHQgICAgY2xhc3M6IFtcblx0ICAgICAgX3ZtLmxhYmVsUG9zaXRpb24gPyAnZWwtZm9ybS0tbGFiZWwtJyArIF92bS5sYWJlbFBvc2l0aW9uIDogJycsIHtcblx0ICAgICAgICAnZWwtZm9ybS0taW5saW5lJzogX3ZtLmlubGluZVxuXHQgICAgICB9XG5cdCAgICBdXG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAyMTIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfZm9ybUl0ZW0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMyk7XG5cblx0dmFyIF9mb3JtSXRlbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9mb3JtSXRlbSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfZm9ybUl0ZW0yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9mb3JtSXRlbTIuZGVmYXVsdC5uYW1lLCBfZm9ybUl0ZW0yLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9mb3JtSXRlbTIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDIxMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyMTQpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyMTYpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAyMTQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfYXN5bmNWYWxpZGF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxNSk7XG5cblx0dmFyIF9hc3luY1ZhbGlkYXRvcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hc3luY1ZhbGlkYXRvcik7XG5cblx0dmFyIF9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cblx0dmFyIF9lbWl0dGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VtaXR0ZXIpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHRmdW5jdGlvbiBub29wKCkge31cblxuXHRmdW5jdGlvbiBnZXRQcm9wQnlQYXRoKG9iaiwgcGF0aCkge1xuXHQgIHZhciB0ZW1wT2JqID0gb2JqO1xuXHQgIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcWyhcXHcrKVxcXS9nLCAnLiQxJyk7XG5cdCAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXlxcLi8sICcnKTtcblxuXHQgIHZhciBrZXlBcnIgPSBwYXRoLnNwbGl0KCcuJyk7XG5cdCAgdmFyIGkgPSAwO1xuXG5cdCAgZm9yICh2YXIgbGVuID0ga2V5QXJyLmxlbmd0aDsgaSA8IGxlbiAtIDE7ICsraSkge1xuXHQgICAgdmFyIGtleSA9IGtleUFycltpXTtcblx0ICAgIGlmIChrZXkgaW4gdGVtcE9iaikge1xuXHQgICAgICB0ZW1wT2JqID0gdGVtcE9ialtrZXldO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhyb3cgbmV3IEVycm9yKCdwbGVhc2UgdHJhbnNmZXIgYSB2YWxpZCBwcm9wIHBhdGggdG8gZm9ybSBpdGVtIScpO1xuXHQgICAgfVxuXHQgIH1cblx0ICByZXR1cm4ge1xuXHQgICAgbzogdGVtcE9iaixcblx0ICAgIGs6IGtleUFycltpXSxcblx0ICAgIHY6IHRlbXBPYmpba2V5QXJyW2ldXVxuXHQgIH07XG5cdH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsRm9ybUl0ZW0nLFxuXG5cdCAgY29tcG9uZW50TmFtZTogJ0VsRm9ybUl0ZW0nLFxuXG5cdCAgbWl4aW5zOiBbX2VtaXR0ZXIyLmRlZmF1bHRdLFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIGxhYmVsOiBTdHJpbmcsXG5cdCAgICBsYWJlbFdpZHRoOiBTdHJpbmcsXG5cdCAgICBwcm9wOiBTdHJpbmcsXG5cdCAgICByZXF1aXJlZDogQm9vbGVhbixcblx0ICAgIHJ1bGVzOiBbT2JqZWN0LCBBcnJheV0sXG5cdCAgICBlcnJvcjogU3RyaW5nLFxuXHQgICAgdmFsaWRhdGVTdGF0dXM6IFN0cmluZyxcblx0ICAgIHNob3dNZXNzYWdlOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IHRydWVcblx0ICAgIH1cblx0ICB9LFxuXHQgIHdhdGNoOiB7XG5cdCAgICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcblx0ICAgICAgdGhpcy52YWxpZGF0ZU1lc3NhZ2UgPSB2YWx1ZTtcblx0ICAgICAgdGhpcy52YWxpZGF0ZVN0YXRlID0gdmFsdWUgPyAnZXJyb3InIDogJyc7XG5cdCAgICB9LFxuXHQgICAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHZhbHVlKSB7XG5cdCAgICAgIHRoaXMudmFsaWRhdGVTdGF0ZSA9IHZhbHVlO1xuXHQgICAgfVxuXHQgIH0sXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIGxhYmVsU3R5bGU6IGZ1bmN0aW9uIGxhYmVsU3R5bGUoKSB7XG5cdCAgICAgIHZhciByZXQgPSB7fTtcblx0ICAgICAgaWYgKHRoaXMuZm9ybS5sYWJlbFBvc2l0aW9uID09PSAndG9wJykgcmV0dXJuIHJldDtcblx0ICAgICAgdmFyIGxhYmVsV2lkdGggPSB0aGlzLmxhYmVsV2lkdGggfHwgdGhpcy5mb3JtLmxhYmVsV2lkdGg7XG5cdCAgICAgIGlmIChsYWJlbFdpZHRoKSB7XG5cdCAgICAgICAgcmV0LndpZHRoID0gbGFiZWxXaWR0aDtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmV0O1xuXHQgICAgfSxcblx0ICAgIGNvbnRlbnRTdHlsZTogZnVuY3Rpb24gY29udGVudFN0eWxlKCkge1xuXHQgICAgICB2YXIgcmV0ID0ge307XG5cdCAgICAgIHZhciBsYWJlbCA9IHRoaXMubGFiZWw7XG5cdCAgICAgIGlmICh0aGlzLmZvcm0ubGFiZWxQb3NpdGlvbiA9PT0gJ3RvcCcgfHwgdGhpcy5mb3JtLmlubGluZSkgcmV0dXJuIHJldDtcblx0ICAgICAgaWYgKCFsYWJlbCAmJiAhdGhpcy5sYWJlbFdpZHRoICYmIHRoaXMuaXNOZXN0ZWQpIHJldHVybiByZXQ7XG5cdCAgICAgIHZhciBsYWJlbFdpZHRoID0gdGhpcy5sYWJlbFdpZHRoIHx8IHRoaXMuZm9ybS5sYWJlbFdpZHRoO1xuXHQgICAgICBpZiAobGFiZWxXaWR0aCkge1xuXHQgICAgICAgIHJldC5tYXJnaW5MZWZ0ID0gbGFiZWxXaWR0aDtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmV0O1xuXHQgICAgfSxcblx0ICAgIGZvcm06IGZ1bmN0aW9uIGZvcm0oKSB7XG5cdCAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG5cdCAgICAgIHZhciBwYXJlbnROYW1lID0gcGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWU7XG5cdCAgICAgIHdoaWxlIChwYXJlbnROYW1lICE9PSAnRWxGb3JtJykge1xuXHQgICAgICAgIGlmIChwYXJlbnROYW1lID09PSAnRWxGb3JtSXRlbScpIHtcblx0ICAgICAgICAgIHRoaXMuaXNOZXN0ZWQgPSB0cnVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcblx0ICAgICAgICBwYXJlbnROYW1lID0gcGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWU7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHBhcmVudDtcblx0ICAgIH0sXG5cblx0ICAgIGZpZWxkVmFsdWU6IHtcblx0ICAgICAgY2FjaGU6IGZhbHNlLFxuXHQgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcblx0ICAgICAgICB2YXIgbW9kZWwgPSB0aGlzLmZvcm0ubW9kZWw7XG5cdCAgICAgICAgaWYgKCFtb2RlbCB8fCAhdGhpcy5wcm9wKSB7XG5cdCAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdmFyIHBhdGggPSB0aGlzLnByb3A7XG5cdCAgICAgICAgaWYgKHBhdGguaW5kZXhPZignOicpICE9PSAtMSkge1xuXHQgICAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvOi8sICcuJyk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGdldFByb3BCeVBhdGgobW9kZWwsIHBhdGgpLnY7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBpc1JlcXVpcmVkOiBmdW5jdGlvbiBpc1JlcXVpcmVkKCkge1xuXHQgICAgICB2YXIgcnVsZXMgPSB0aGlzLmdldFJ1bGVzKCk7XG5cdCAgICAgIHZhciBpc1JlcXVpcmVkID0gZmFsc2U7XG5cblx0ICAgICAgaWYgKHJ1bGVzICYmIHJ1bGVzLmxlbmd0aCkge1xuXHQgICAgICAgIHJ1bGVzLmV2ZXJ5KGZ1bmN0aW9uIChydWxlKSB7XG5cdCAgICAgICAgICBpZiAocnVsZS5yZXF1aXJlZCkge1xuXHQgICAgICAgICAgICBpc1JlcXVpcmVkID0gdHJ1ZTtcblx0ICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIGlzUmVxdWlyZWQ7XG5cdCAgICB9XG5cdCAgfSxcblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgdmFsaWRhdGVTdGF0ZTogJycsXG5cdCAgICAgIHZhbGlkYXRlTWVzc2FnZTogJycsXG5cdCAgICAgIHZhbGlkYXRlRGlzYWJsZWQ6IGZhbHNlLFxuXHQgICAgICB2YWxpZGF0b3I6IHt9LFxuXHQgICAgICBpc05lc3RlZDogZmFsc2Vcblx0ICAgIH07XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZSh0cmlnZ2VyKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBub29wO1xuXG5cdCAgICAgIHZhciBydWxlcyA9IHRoaXMuZ2V0RmlsdGVyZWRSdWxlKHRyaWdnZXIpO1xuXHQgICAgICBpZiAoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgIGNhbGxiYWNrKCk7XG5cdCAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgIH1cblxuXHQgICAgICB0aGlzLnZhbGlkYXRlU3RhdGUgPSAndmFsaWRhdGluZyc7XG5cblx0ICAgICAgdmFyIGRlc2NyaXB0b3IgPSB7fTtcblx0ICAgICAgZGVzY3JpcHRvclt0aGlzLnByb3BdID0gcnVsZXM7XG5cblx0ICAgICAgdmFyIHZhbGlkYXRvciA9IG5ldyBfYXN5bmNWYWxpZGF0b3IyLmRlZmF1bHQoZGVzY3JpcHRvcik7XG5cdCAgICAgIHZhciBtb2RlbCA9IHt9O1xuXG5cdCAgICAgIG1vZGVsW3RoaXMucHJvcF0gPSB0aGlzLmZpZWxkVmFsdWU7XG5cblx0ICAgICAgdmFsaWRhdG9yLnZhbGlkYXRlKG1vZGVsLCB7IGZpcnN0RmllbGRzOiB0cnVlIH0sIGZ1bmN0aW9uIChlcnJvcnMsIGZpZWxkcykge1xuXHQgICAgICAgIF90aGlzLnZhbGlkYXRlU3RhdGUgPSAhZXJyb3JzID8gJ3N1Y2Nlc3MnIDogJ2Vycm9yJztcblx0ICAgICAgICBfdGhpcy52YWxpZGF0ZU1lc3NhZ2UgPSBlcnJvcnMgPyBlcnJvcnNbMF0ubWVzc2FnZSA6ICcnO1xuXG5cdCAgICAgICAgY2FsbGJhY2soX3RoaXMudmFsaWRhdGVNZXNzYWdlKTtcblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgcmVzZXRGaWVsZDogZnVuY3Rpb24gcmVzZXRGaWVsZCgpIHtcblx0ICAgICAgdGhpcy52YWxpZGF0ZVN0YXRlID0gJyc7XG5cdCAgICAgIHRoaXMudmFsaWRhdGVNZXNzYWdlID0gJyc7XG5cblx0ICAgICAgdmFyIG1vZGVsID0gdGhpcy5mb3JtLm1vZGVsO1xuXHQgICAgICB2YXIgdmFsdWUgPSB0aGlzLmZpZWxkVmFsdWU7XG5cdCAgICAgIHZhciBwYXRoID0gdGhpcy5wcm9wO1xuXHQgICAgICBpZiAocGF0aC5pbmRleE9mKCc6JykgIT09IC0xKSB7XG5cdCAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvOi8sICcuJyk7XG5cdCAgICAgIH1cblxuXHQgICAgICB2YXIgcHJvcCA9IGdldFByb3BCeVBhdGgobW9kZWwsIHBhdGgpO1xuXG5cdCAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHQgICAgICAgIHRoaXMudmFsaWRhdGVEaXNhYmxlZCA9IHRydWU7XG5cdCAgICAgICAgcHJvcC5vW3Byb3Aua10gPSBbXS5jb25jYXQodGhpcy5pbml0aWFsVmFsdWUpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMudmFsaWRhdGVEaXNhYmxlZCA9IHRydWU7XG5cdCAgICAgICAgcHJvcC5vW3Byb3Aua10gPSB0aGlzLmluaXRpYWxWYWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGdldFJ1bGVzOiBmdW5jdGlvbiBnZXRSdWxlcygpIHtcblx0ICAgICAgdmFyIGZvcm1SdWxlcyA9IHRoaXMuZm9ybS5ydWxlcztcblx0ICAgICAgdmFyIHNlbGZSdWxlcyA9IHRoaXMucnVsZXM7XG5cblx0ICAgICAgZm9ybVJ1bGVzID0gZm9ybVJ1bGVzID8gZm9ybVJ1bGVzW3RoaXMucHJvcF0gOiBbXTtcblxuXHQgICAgICByZXR1cm4gW10uY29uY2F0KHNlbGZSdWxlcyB8fCBmb3JtUnVsZXMgfHwgW10pO1xuXHQgICAgfSxcblx0ICAgIGdldEZpbHRlcmVkUnVsZTogZnVuY3Rpb24gZ2V0RmlsdGVyZWRSdWxlKHRyaWdnZXIpIHtcblx0ICAgICAgdmFyIHJ1bGVzID0gdGhpcy5nZXRSdWxlcygpO1xuXG5cdCAgICAgIHJldHVybiBydWxlcy5maWx0ZXIoZnVuY3Rpb24gKHJ1bGUpIHtcblx0ICAgICAgICByZXR1cm4gIXJ1bGUudHJpZ2dlciB8fCBydWxlLnRyaWdnZXIuaW5kZXhPZih0cmlnZ2VyKSAhPT0gLTE7XG5cdCAgICAgIH0pO1xuXHQgICAgfSxcblx0ICAgIG9uRmllbGRCbHVyOiBmdW5jdGlvbiBvbkZpZWxkQmx1cigpIHtcblx0ICAgICAgdGhpcy52YWxpZGF0ZSgnYmx1cicpO1xuXHQgICAgfSxcblx0ICAgIG9uRmllbGRDaGFuZ2U6IGZ1bmN0aW9uIG9uRmllbGRDaGFuZ2UoKSB7XG5cdCAgICAgIGlmICh0aGlzLnZhbGlkYXRlRGlzYWJsZWQpIHtcblx0ICAgICAgICB0aGlzLnZhbGlkYXRlRGlzYWJsZWQgPSBmYWxzZTtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblxuXHQgICAgICB0aGlzLnZhbGlkYXRlKCdjaGFuZ2UnKTtcblx0ICAgIH1cblx0ICB9LFxuXHQgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdCAgICBpZiAodGhpcy5wcm9wKSB7XG5cdCAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybScsICdlbC5mb3JtLmFkZEZpZWxkJywgW3RoaXNdKTtcblxuXHQgICAgICB2YXIgaW5pdGlhbFZhbHVlID0gdGhpcy5maWVsZFZhbHVlO1xuXHQgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbml0aWFsVmFsdWUpKSB7XG5cdCAgICAgICAgaW5pdGlhbFZhbHVlID0gW10uY29uY2F0KGluaXRpYWxWYWx1ZSk7XG5cdCAgICAgIH1cblx0ICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdpbml0aWFsVmFsdWUnLCB7XG5cdCAgICAgICAgdmFsdWU6IGluaXRpYWxWYWx1ZVxuXHQgICAgICB9KTtcblxuXHQgICAgICB2YXIgcnVsZXMgPSB0aGlzLmdldFJ1bGVzKCk7XG5cblx0ICAgICAgaWYgKHJ1bGVzLmxlbmd0aCkge1xuXHQgICAgICAgIHRoaXMuJG9uKCdlbC5mb3JtLmJsdXInLCB0aGlzLm9uRmllbGRCbHVyKTtcblx0ICAgICAgICB0aGlzLiRvbignZWwuZm9ybS5jaGFuZ2UnLCB0aGlzLm9uRmllbGRDaGFuZ2UpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblx0ICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuXHQgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtJywgJ2VsLmZvcm0ucmVtb3ZlRmllbGQnLCBbdGhpc10pO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDIxNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYXN5bmMtdmFsaWRhdG9yXCIpO1xuXG4vKioqLyB9LFxuLyogMjE2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtZm9ybS1pdGVtXCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaXMtZXJyb3InOiBfdm0udmFsaWRhdGVTdGF0ZSA9PT0gJ2Vycm9yJyxcblx0ICAgICAgICAnaXMtdmFsaWRhdGluZyc6IF92bS52YWxpZGF0ZVN0YXRlID09PSAndmFsaWRhdGluZycsXG5cdCAgICAgICAgJ2lzLXJlcXVpcmVkJzogX3ZtLmlzUmVxdWlyZWQgfHwgX3ZtLnJlcXVpcmVkXG5cdCAgICB9XG5cdCAgfSwgWyhfdm0ubGFiZWwgfHwgX3ZtLiRzbG90cy5sYWJlbCkgPyBfYygnbGFiZWwnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1mb3JtLWl0ZW1fX2xhYmVsXCIsXG5cdCAgICBzdHlsZTogKF92bS5sYWJlbFN0eWxlKSxcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwiZm9yXCI6IF92bS5wcm9wXG5cdCAgICB9XG5cdCAgfSwgW192bS5fdChcImxhYmVsXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5sYWJlbCArIF92bS5mb3JtLmxhYmVsU3VmZml4KSldKV0sIDIpIDogX3ZtLl9lKCksIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1mb3JtLWl0ZW1fX2NvbnRlbnRcIixcblx0ICAgIHN0eWxlOiAoX3ZtLmNvbnRlbnRTdHlsZSlcblx0ICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKSwgX2MoJ3RyYW5zaXRpb24nLCB7XG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcIm5hbWVcIjogXCJlbC16b29tLWluLXRvcFwiXG5cdCAgICB9XG5cdCAgfSwgWyhfdm0udmFsaWRhdGVTdGF0ZSA9PT0gJ2Vycm9yJyAmJiBfdm0uc2hvd01lc3NhZ2UgJiYgX3ZtLmZvcm0uc2hvd01lc3NhZ2UpID8gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWZvcm0taXRlbV9fZXJyb3JcIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS52YWxpZGF0ZU1lc3NhZ2UpKV0pIDogX3ZtLl9lKCldKV0sIDIpXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMjE3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3RhYnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOCk7XG5cblx0dmFyIF90YWJzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3RhYnMpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X3RhYnMyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF90YWJzMi5kZWZhdWx0Lm5hbWUsIF90YWJzMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfdGFiczIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDIxOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyMTkpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgbnVsbCxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMjE5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3RhYk5hdiA9IF9fd2VicGFja19yZXF1aXJlX18oMjIwKTtcblxuXHR2YXIgX3RhYk5hdjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90YWJOYXYpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbFRhYnMnLFxuXG5cdCAgY29tcG9uZW50czoge1xuXHQgICAgVGFiTmF2OiBfdGFiTmF2Mi5kZWZhdWx0XG5cdCAgfSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICBhY3RpdmVOYW1lOiBTdHJpbmcsXG5cdCAgICBjbG9zYWJsZTogQm9vbGVhbixcblx0ICAgIGFkZGFibGU6IEJvb2xlYW4sXG5cdCAgICB2YWx1ZToge30sXG5cdCAgICBlZGl0YWJsZTogQm9vbGVhblxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgY3VycmVudE5hbWU6IHRoaXMudmFsdWUgfHwgdGhpcy5hY3RpdmVOYW1lLFxuXHQgICAgICBwYW5lczogW11cblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgIGFjdGl2ZU5hbWU6IGZ1bmN0aW9uIGFjdGl2ZU5hbWUodmFsdWUpIHtcblx0ICAgICAgdGhpcy5zZXRDdXJyZW50TmFtZSh2YWx1ZSk7XG5cdCAgICB9LFxuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKF92YWx1ZSkge1xuXHQgICAgICB0aGlzLnNldEN1cnJlbnROYW1lKF92YWx1ZSk7XG5cdCAgICB9LFxuXHQgICAgY3VycmVudE5hbWU6IGZ1bmN0aW9uIGN1cnJlbnROYW1lKHZhbHVlKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgaWYgKHRoaXMuJHJlZnMubmF2KSB7XG5cdCAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcblx0ICAgICAgICAgIF90aGlzLiRyZWZzLm5hdi5zY3JvbGxUb0FjdGl2ZVRhYigpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGhhbmRsZVRhYkNsaWNrOiBmdW5jdGlvbiBoYW5kbGVUYWJDbGljayh0YWIsIHRhYk5hbWUsIGV2ZW50KSB7XG5cdCAgICAgIGlmICh0YWIuZGlzYWJsZWQpIHJldHVybjtcblx0ICAgICAgdGhpcy5zZXRDdXJyZW50TmFtZSh0YWJOYW1lKTtcblx0ICAgICAgdGhpcy4kZW1pdCgndGFiLWNsaWNrJywgdGFiLCBldmVudCk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlVGFiUmVtb3ZlOiBmdW5jdGlvbiBoYW5kbGVUYWJSZW1vdmUocGFuZSwgZXYpIHtcblx0ICAgICAgaWYgKHBhbmUuZGlzYWJsZWQpIHJldHVybjtcblx0ICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2VkaXQnLCBwYW5lLm5hbWUsICdyZW1vdmUnKTtcblx0ICAgICAgdGhpcy4kZW1pdCgndGFiLXJlbW92ZScsIHBhbmUubmFtZSk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlVGFiQWRkOiBmdW5jdGlvbiBoYW5kbGVUYWJBZGQoKSB7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2VkaXQnLCBudWxsLCAnYWRkJyk7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ3RhYi1hZGQnKTtcblx0ICAgIH0sXG5cdCAgICBzZXRDdXJyZW50TmFtZTogZnVuY3Rpb24gc2V0Q3VycmVudE5hbWUodmFsdWUpIHtcblx0ICAgICAgdGhpcy5jdXJyZW50TmFtZSA9IHZhbHVlO1xuXHQgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbHVlKTtcblx0ICAgIH0sXG5cdCAgICBhZGRQYW5lczogZnVuY3Rpb24gYWRkUGFuZXMoaXRlbSkge1xuXHQgICAgICB2YXIgaW5kZXggPSB0aGlzLiRzbG90cy5kZWZhdWx0LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuXHQgICAgICAgIHJldHVybiBpdGVtLmVsbS5ub2RlVHlwZSA9PT0gMSAmJiAvXFxiZWwtdGFiLXBhbmVcXGIvLnRlc3QoaXRlbS5lbG0uY2xhc3NOYW1lKTtcblx0ICAgICAgfSkuaW5kZXhPZihpdGVtLiR2bm9kZSk7XG5cdCAgICAgIHRoaXMucGFuZXMuc3BsaWNlKGluZGV4LCAwLCBpdGVtKTtcblx0ICAgIH0sXG5cdCAgICByZW1vdmVQYW5lczogZnVuY3Rpb24gcmVtb3ZlUGFuZXMoaXRlbSkge1xuXHQgICAgICB2YXIgcGFuZXMgPSB0aGlzLnBhbmVzO1xuXHQgICAgICB2YXIgaW5kZXggPSBwYW5lcy5pbmRleE9mKGl0ZW0pO1xuXHQgICAgICBpZiAoaW5kZXggPiAtMSkge1xuXHQgICAgICAgIHBhbmVzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXHQgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcblx0ICAgIHZhciB0eXBlID0gdGhpcy50eXBlLFxuXHQgICAgICAgIGhhbmRsZVRhYkNsaWNrID0gdGhpcy5oYW5kbGVUYWJDbGljayxcblx0ICAgICAgICBoYW5kbGVUYWJSZW1vdmUgPSB0aGlzLmhhbmRsZVRhYlJlbW92ZSxcblx0ICAgICAgICBoYW5kbGVUYWJBZGQgPSB0aGlzLmhhbmRsZVRhYkFkZCxcblx0ICAgICAgICBjdXJyZW50TmFtZSA9IHRoaXMuY3VycmVudE5hbWUsXG5cdCAgICAgICAgcGFuZXMgPSB0aGlzLnBhbmVzLFxuXHQgICAgICAgIGVkaXRhYmxlID0gdGhpcy5lZGl0YWJsZSxcblx0ICAgICAgICBhZGRhYmxlID0gdGhpcy5hZGRhYmxlO1xuXG5cblx0ICAgIHZhciBuZXdCdXR0b24gPSBlZGl0YWJsZSB8fCBhZGRhYmxlID8gaChcblx0ICAgICAgJ3NwYW4nLFxuXHQgICAgICB7XG5cdCAgICAgICAgJ2NsYXNzJzogJ2VsLXRhYnNfX25ldy10YWInLFxuXHQgICAgICAgIG9uOiB7XG5cdCAgICAgICAgICAnY2xpY2snOiBoYW5kbGVUYWJBZGRcblx0ICAgICAgICB9XG5cdCAgICAgIH0sXG5cdCAgICAgIFtoKFxuXHQgICAgICAgICdpJyxcblx0ICAgICAgICB7ICdjbGFzcyc6ICdlbC1pY29uLXBsdXMnIH0sXG5cdCAgICAgICAgW11cblx0ICAgICAgKV1cblx0ICAgICkgOiBudWxsO1xuXG5cdCAgICB2YXIgbmF2RGF0YSA9IHtcblx0ICAgICAgcHJvcHM6IHtcblx0ICAgICAgICBjdXJyZW50TmFtZTogY3VycmVudE5hbWUsXG5cdCAgICAgICAgb25UYWJDbGljazogaGFuZGxlVGFiQ2xpY2ssXG5cdCAgICAgICAgb25UYWJSZW1vdmU6IGhhbmRsZVRhYlJlbW92ZSxcblx0ICAgICAgICBlZGl0YWJsZTogZWRpdGFibGUsXG5cdCAgICAgICAgdHlwZTogdHlwZSxcblx0ICAgICAgICBwYW5lczogcGFuZXNcblx0ICAgICAgfSxcblx0ICAgICAgcmVmOiAnbmF2J1xuXHQgICAgfTtcblxuXHQgICAgcmV0dXJuIGgoXG5cdCAgICAgICdkaXYnLFxuXHQgICAgICB7ICdjbGFzcyc6IHtcblx0ICAgICAgICAgICdlbC10YWJzJzogdHJ1ZSxcblx0ICAgICAgICAgICdlbC10YWJzLS1jYXJkJzogdHlwZSA9PT0gJ2NhcmQnLFxuXHQgICAgICAgICAgJ2VsLXRhYnMtLWJvcmRlci1jYXJkJzogdHlwZSA9PT0gJ2JvcmRlci1jYXJkJ1xuXHQgICAgICAgIH0gfSxcblx0ICAgICAgW2goXG5cdCAgICAgICAgJ2RpdicsXG5cdCAgICAgICAgeyAnY2xhc3MnOiAnZWwtdGFic19faGVhZGVyJyB9LFxuXHQgICAgICAgIFtuZXdCdXR0b24sIGgoXG5cdCAgICAgICAgICAndGFiLW5hdicsXG5cdCAgICAgICAgICBuYXZEYXRhLFxuXHQgICAgICAgICAgW11cblx0ICAgICAgICApXVxuXHQgICAgICApLCBoKFxuXHQgICAgICAgICdkaXYnLFxuXHQgICAgICAgIHsgJ2NsYXNzJzogJ2VsLXRhYnNfX2NvbnRlbnQnIH0sXG5cdCAgICAgICAgW3RoaXMuJHNsb3RzLmRlZmF1bHRdXG5cdCAgICAgICldXG5cdCAgICApO1xuXHQgIH0sXG5cdCAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcblx0ICAgIGlmICghdGhpcy5jdXJyZW50TmFtZSkge1xuXHQgICAgICB0aGlzLnNldEN1cnJlbnROYW1lKCcwJyk7XG5cdCAgICB9XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMjIwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMSksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBudWxsLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAyMjEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfdGFiQmFyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjIpO1xuXG5cdHZhciBfdGFiQmFyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3RhYkJhcik7XG5cblx0dmFyIF9yZXNpemVFdmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oMTEwKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdGZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnVGFiTmF2JyxcblxuXHQgIGNvbXBvbmVudHM6IHtcblx0ICAgIFRhYkJhcjogX3RhYkJhcjIuZGVmYXVsdFxuXHQgIH0sXG5cblx0ICBwcm9wczoge1xuXHQgICAgcGFuZXM6IEFycmF5LFxuXHQgICAgY3VycmVudE5hbWU6IFN0cmluZyxcblx0ICAgIGVkaXRhYmxlOiBCb29sZWFuLFxuXHQgICAgb25UYWJDbGljazoge1xuXHQgICAgICB0eXBlOiBGdW5jdGlvbixcblx0ICAgICAgZGVmYXVsdDogbm9vcFxuXHQgICAgfSxcblx0ICAgIG9uVGFiUmVtb3ZlOiB7XG5cdCAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuXHQgICAgICBkZWZhdWx0OiBub29wXG5cdCAgICB9LFxuXHQgICAgdHlwZTogU3RyaW5nXG5cdCAgfSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBzY3JvbGxhYmxlOiBmYWxzZSxcblx0ICAgICAgbmF2U3R5bGU6IHtcblx0ICAgICAgICB0cmFuc2Zvcm06ICcnXG5cdCAgICAgIH1cblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgc2Nyb2xsUHJldjogZnVuY3Rpb24gc2Nyb2xsUHJldigpIHtcblx0ICAgICAgdmFyIGNvbnRhaW5lcldpZHRoID0gdGhpcy4kcmVmcy5uYXZTY3JvbGwub2Zmc2V0V2lkdGg7XG5cdCAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gdGhpcy5nZXRDdXJyZW50U2Nyb2xsT2Zmc2V0KCk7XG5cblx0ICAgICAgaWYgKCFjdXJyZW50T2Zmc2V0KSByZXR1cm47XG5cblx0ICAgICAgdmFyIG5ld09mZnNldCA9IGN1cnJlbnRPZmZzZXQgPiBjb250YWluZXJXaWR0aCA/IGN1cnJlbnRPZmZzZXQgLSBjb250YWluZXJXaWR0aCA6IDA7XG5cblx0ICAgICAgdGhpcy5zZXRPZmZzZXQobmV3T2Zmc2V0KTtcblx0ICAgIH0sXG5cdCAgICBzY3JvbGxOZXh0OiBmdW5jdGlvbiBzY3JvbGxOZXh0KCkge1xuXHQgICAgICB2YXIgbmF2V2lkdGggPSB0aGlzLiRyZWZzLm5hdi5vZmZzZXRXaWR0aDtcblx0ICAgICAgdmFyIGNvbnRhaW5lcldpZHRoID0gdGhpcy4kcmVmcy5uYXZTY3JvbGwub2Zmc2V0V2lkdGg7XG5cdCAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gdGhpcy5nZXRDdXJyZW50U2Nyb2xsT2Zmc2V0KCk7XG5cblx0ICAgICAgaWYgKG5hdldpZHRoIC0gY3VycmVudE9mZnNldCA8PSBjb250YWluZXJXaWR0aCkgcmV0dXJuO1xuXG5cdCAgICAgIHZhciBuZXdPZmZzZXQgPSBuYXZXaWR0aCAtIGN1cnJlbnRPZmZzZXQgPiBjb250YWluZXJXaWR0aCAqIDIgPyBjdXJyZW50T2Zmc2V0ICsgY29udGFpbmVyV2lkdGggOiBuYXZXaWR0aCAtIGNvbnRhaW5lcldpZHRoO1xuXG5cdCAgICAgIHRoaXMuc2V0T2Zmc2V0KG5ld09mZnNldCk7XG5cdCAgICB9LFxuXHQgICAgc2Nyb2xsVG9BY3RpdmVUYWI6IGZ1bmN0aW9uIHNjcm9sbFRvQWN0aXZlVGFiKCkge1xuXHQgICAgICBpZiAoIXRoaXMuc2Nyb2xsYWJsZSkgcmV0dXJuO1xuXHQgICAgICB2YXIgbmF2ID0gdGhpcy4kcmVmcy5uYXY7XG5cdCAgICAgIHZhciBhY3RpdmVUYWIgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCcuaXMtYWN0aXZlJyk7XG5cdCAgICAgIHZhciBuYXZTY3JvbGwgPSB0aGlzLiRyZWZzLm5hdlNjcm9sbDtcblx0ICAgICAgdmFyIGFjdGl2ZVRhYkJvdW5kaW5nID0gYWN0aXZlVGFiLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHQgICAgICB2YXIgbmF2U2Nyb2xsQm91bmRpbmcgPSBuYXZTY3JvbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdCAgICAgIHZhciBuYXZCb3VuZGluZyA9IG5hdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0ICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSB0aGlzLmdldEN1cnJlbnRTY3JvbGxPZmZzZXQoKTtcblx0ICAgICAgdmFyIG5ld09mZnNldCA9IGN1cnJlbnRPZmZzZXQ7XG5cblx0ICAgICAgaWYgKGFjdGl2ZVRhYkJvdW5kaW5nLmxlZnQgPCBuYXZTY3JvbGxCb3VuZGluZy5sZWZ0KSB7XG5cdCAgICAgICAgbmV3T2Zmc2V0ID0gY3VycmVudE9mZnNldCAtIChuYXZTY3JvbGxCb3VuZGluZy5sZWZ0IC0gYWN0aXZlVGFiQm91bmRpbmcubGVmdCk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKGFjdGl2ZVRhYkJvdW5kaW5nLnJpZ2h0ID4gbmF2U2Nyb2xsQm91bmRpbmcucmlnaHQpIHtcblx0ICAgICAgICBuZXdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0ICsgYWN0aXZlVGFiQm91bmRpbmcucmlnaHQgLSBuYXZTY3JvbGxCb3VuZGluZy5yaWdodDtcblx0ICAgICAgfVxuXHQgICAgICBpZiAobmF2Qm91bmRpbmcucmlnaHQgPCBuYXZTY3JvbGxCb3VuZGluZy5yaWdodCkge1xuXHQgICAgICAgIG5ld09mZnNldCA9IG5hdi5vZmZzZXRXaWR0aCAtIG5hdlNjcm9sbEJvdW5kaW5nLndpZHRoO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuc2V0T2Zmc2V0KE1hdGgubWF4KG5ld09mZnNldCwgMCkpO1xuXHQgICAgfSxcblx0ICAgIGdldEN1cnJlbnRTY3JvbGxPZmZzZXQ6IGZ1bmN0aW9uIGdldEN1cnJlbnRTY3JvbGxPZmZzZXQoKSB7XG5cdCAgICAgIHZhciBuYXZTdHlsZSA9IHRoaXMubmF2U3R5bGU7XG5cblx0ICAgICAgcmV0dXJuIG5hdlN0eWxlLnRyYW5zZm9ybSA/IE51bWJlcihuYXZTdHlsZS50cmFuc2Zvcm0ubWF0Y2goL3RyYW5zbGF0ZVhcXCgtKFxcZCsoXFwuXFxkKykqKXB4XFwpLylbMV0pIDogMDtcblx0ICAgIH0sXG5cdCAgICBzZXRPZmZzZXQ6IGZ1bmN0aW9uIHNldE9mZnNldCh2YWx1ZSkge1xuXHQgICAgICB0aGlzLm5hdlN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKC0nICsgdmFsdWUgKyAncHgpJztcblx0ICAgIH0sXG5cdCAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcblx0ICAgICAgdmFyIG5hdldpZHRoID0gdGhpcy4kcmVmcy5uYXYub2Zmc2V0V2lkdGg7XG5cdCAgICAgIHZhciBjb250YWluZXJXaWR0aCA9IHRoaXMuJHJlZnMubmF2U2Nyb2xsLm9mZnNldFdpZHRoO1xuXHQgICAgICB2YXIgY3VycmVudE9mZnNldCA9IHRoaXMuZ2V0Q3VycmVudFNjcm9sbE9mZnNldCgpO1xuXG5cdCAgICAgIGlmIChjb250YWluZXJXaWR0aCA8IG5hdldpZHRoKSB7XG5cdCAgICAgICAgdmFyIF9jdXJyZW50T2Zmc2V0ID0gdGhpcy5nZXRDdXJyZW50U2Nyb2xsT2Zmc2V0KCk7XG5cdCAgICAgICAgdGhpcy5zY3JvbGxhYmxlID0gdGhpcy5zY3JvbGxhYmxlIHx8IHt9O1xuXHQgICAgICAgIHRoaXMuc2Nyb2xsYWJsZS5wcmV2ID0gX2N1cnJlbnRPZmZzZXQ7XG5cdCAgICAgICAgdGhpcy5zY3JvbGxhYmxlLm5leHQgPSBfY3VycmVudE9mZnNldCArIGNvbnRhaW5lcldpZHRoIDwgbmF2V2lkdGg7XG5cdCAgICAgICAgaWYgKG5hdldpZHRoIC0gX2N1cnJlbnRPZmZzZXQgPCBjb250YWluZXJXaWR0aCkge1xuXHQgICAgICAgICAgdGhpcy5zZXRPZmZzZXQobmF2V2lkdGggLSBjb250YWluZXJXaWR0aCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuc2Nyb2xsYWJsZSA9IGZhbHNlO1xuXHQgICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ID4gMCkge1xuXHQgICAgICAgICAgdGhpcy5zZXRPZmZzZXQoMCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZGF0ZWQoKSB7XG5cdCAgICB0aGlzLnVwZGF0ZSgpO1xuXHQgIH0sXG5cdCAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuXHQgICAgdmFyIHR5cGUgPSB0aGlzLnR5cGUsXG5cdCAgICAgICAgcGFuZXMgPSB0aGlzLnBhbmVzLFxuXHQgICAgICAgIGVkaXRhYmxlID0gdGhpcy5lZGl0YWJsZSxcblx0ICAgICAgICBvblRhYkNsaWNrID0gdGhpcy5vblRhYkNsaWNrLFxuXHQgICAgICAgIG9uVGFiUmVtb3ZlID0gdGhpcy5vblRhYlJlbW92ZSxcblx0ICAgICAgICBuYXZTdHlsZSA9IHRoaXMubmF2U3R5bGUsXG5cdCAgICAgICAgc2Nyb2xsYWJsZSA9IHRoaXMuc2Nyb2xsYWJsZSxcblx0ICAgICAgICBzY3JvbGxOZXh0ID0gdGhpcy5zY3JvbGxOZXh0LFxuXHQgICAgICAgIHNjcm9sbFByZXYgPSB0aGlzLnNjcm9sbFByZXY7XG5cblxuXHQgICAgdmFyIHNjcm9sbEJ0biA9IHNjcm9sbGFibGUgPyBbaChcblx0ICAgICAgJ3NwYW4nLFxuXHQgICAgICB7ICdjbGFzcyc6IFsnZWwtdGFic19fbmF2LXByZXYnLCBzY3JvbGxhYmxlLnByZXYgPyAnJyA6ICdpcy1kaXNhYmxlZCddLCBvbjoge1xuXHQgICAgICAgICAgJ2NsaWNrJzogc2Nyb2xsUHJldlxuXHQgICAgICAgIH1cblx0ICAgICAgfSxcblx0ICAgICAgW2goXG5cdCAgICAgICAgJ2knLFxuXHQgICAgICAgIHsgJ2NsYXNzJzogJ2VsLWljb24tYXJyb3ctbGVmdCcgfSxcblx0ICAgICAgICBbXVxuXHQgICAgICApXVxuXHQgICAgKSwgaChcblx0ICAgICAgJ3NwYW4nLFxuXHQgICAgICB7ICdjbGFzcyc6IFsnZWwtdGFic19fbmF2LW5leHQnLCBzY3JvbGxhYmxlLm5leHQgPyAnJyA6ICdpcy1kaXNhYmxlZCddLCBvbjoge1xuXHQgICAgICAgICAgJ2NsaWNrJzogc2Nyb2xsTmV4dFxuXHQgICAgICAgIH1cblx0ICAgICAgfSxcblx0ICAgICAgW2goXG5cdCAgICAgICAgJ2knLFxuXHQgICAgICAgIHsgJ2NsYXNzJzogJ2VsLWljb24tYXJyb3ctcmlnaHQnIH0sXG5cdCAgICAgICAgW11cblx0ICAgICAgKV1cblx0ICAgICldIDogbnVsbDtcblxuXHQgICAgdmFyIHRhYnMgPSB0aGlzLl9sKHBhbmVzLCBmdW5jdGlvbiAocGFuZSwgaW5kZXgpIHtcblx0ICAgICAgdmFyIHRhYk5hbWUgPSBwYW5lLm5hbWUgfHwgcGFuZS5pbmRleCB8fCBpbmRleDtcblx0ICAgICAgdmFyIGNsb3NhYmxlID0gcGFuZS5pc0Nsb3NhYmxlIHx8IGVkaXRhYmxlO1xuXG5cdCAgICAgIHBhbmUuaW5kZXggPSAnJyArIGluZGV4O1xuXG5cdCAgICAgIHZhciBidG5DbG9zZSA9IGNsb3NhYmxlID8gaChcblx0ICAgICAgICAnc3BhbicsXG5cdCAgICAgICAgeyAnY2xhc3MnOiAnZWwtaWNvbi1jbG9zZScsIG9uOiB7XG5cdCAgICAgICAgICAgICdjbGljayc6IGZ1bmN0aW9uIGNsaWNrKGV2KSB7XG5cdCAgICAgICAgICAgICAgb25UYWJSZW1vdmUocGFuZSwgZXYpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBbXVxuXHQgICAgICApIDogbnVsbDtcblxuXHQgICAgICB2YXIgdGFiTGFiZWxDb250ZW50ID0gcGFuZS4kc2xvdHMubGFiZWwgfHwgcGFuZS5sYWJlbDtcblx0ICAgICAgcmV0dXJuIGgoXG5cdCAgICAgICAgJ2RpdicsXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgJ2NsYXNzJzoge1xuXHQgICAgICAgICAgICAnZWwtdGFic19faXRlbSc6IHRydWUsXG5cdCAgICAgICAgICAgICdpcy1hY3RpdmUnOiBwYW5lLmFjdGl2ZSxcblx0ICAgICAgICAgICAgJ2lzLWRpc2FibGVkJzogcGFuZS5kaXNhYmxlZCxcblx0ICAgICAgICAgICAgJ2lzLWNsb3NhYmxlJzogY2xvc2FibGVcblx0ICAgICAgICAgIH0sXG5cdCAgICAgICAgICByZWY6ICd0YWJzJyxcblx0ICAgICAgICAgIHJlZkluRm9yOiB0cnVlLFxuXHQgICAgICAgICAgb246IHtcblx0ICAgICAgICAgICAgJ2NsaWNrJzogZnVuY3Rpb24gY2xpY2soZXYpIHtcblx0ICAgICAgICAgICAgICBvblRhYkNsaWNrKHBhbmUsIHRhYk5hbWUsIGV2KTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgW3RhYkxhYmVsQ29udGVudCwgYnRuQ2xvc2VdXG5cdCAgICAgICk7XG5cdCAgICB9KTtcblx0ICAgIHJldHVybiBoKFxuXHQgICAgICAnZGl2Jyxcblx0ICAgICAgeyAnY2xhc3MnOiBbJ2VsLXRhYnNfX25hdi13cmFwJywgc2Nyb2xsYWJsZSA/ICdpcy1zY3JvbGxhYmxlJyA6ICcnXSB9LFxuXHQgICAgICBbc2Nyb2xsQnRuLCBoKFxuXHQgICAgICAgICdkaXYnLFxuXHQgICAgICAgIHsgJ2NsYXNzJzogWydlbC10YWJzX19uYXYtc2Nyb2xsJ10sIHJlZjogJ25hdlNjcm9sbCcgfSxcblx0ICAgICAgICBbaChcblx0ICAgICAgICAgICdkaXYnLFxuXHQgICAgICAgICAgeyAnY2xhc3MnOiAnZWwtdGFic19fbmF2JywgcmVmOiAnbmF2Jywgc3R5bGU6IG5hdlN0eWxlIH0sXG5cdCAgICAgICAgICBbIXR5cGUgPyBoKFxuXHQgICAgICAgICAgICAndGFiLWJhcicsXG5cdCAgICAgICAgICAgIHtcblx0ICAgICAgICAgICAgICBhdHRyczogeyB0YWJzOiBwYW5lcyB9XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgIFtdXG5cdCAgICAgICAgICApIDogbnVsbCwgdGFic11cblx0ICAgICAgICApXVxuXHQgICAgICApXVxuXHQgICAgKTtcblx0ICB9LFxuXHQgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdCAgICAoMCwgX3Jlc2l6ZUV2ZW50LmFkZFJlc2l6ZUxpc3RlbmVyKSh0aGlzLiRlbCwgdGhpcy51cGRhdGUpO1xuXHQgIH0sXG5cdCAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcblx0ICAgIGlmICh0aGlzLiRlbCAmJiB0aGlzLnVwZGF0ZSkgKDAsIF9yZXNpemVFdmVudC5yZW1vdmVSZXNpemVMaXN0ZW5lcikodGhpcy4kZWwsIHRoaXMudXBkYXRlKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyMjIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjIzKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjI0KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMjIzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0Ly9cblx0Ly9cblx0Ly9cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ1RhYkJhcicsXG5cblx0ICBwcm9wczoge1xuXHQgICAgdGFiczogQXJyYXlcblx0ICB9LFxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIGJhclN0eWxlOiB7XG5cdCAgICAgIGNhY2hlOiBmYWxzZSxcblx0ICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG5cdCAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgICAgIGlmICghdGhpcy4kcGFyZW50LiRyZWZzLnRhYnMpIHJldHVybiB7fTtcblx0ICAgICAgICB2YXIgc3R5bGUgPSB7fTtcblx0ICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcblx0ICAgICAgICB2YXIgdGFiV2lkdGggPSAwO1xuXG5cdCAgICAgICAgdGhpcy50YWJzLmV2ZXJ5KGZ1bmN0aW9uICh0YWIsIGluZGV4KSB7XG5cdCAgICAgICAgICB2YXIgJGVsID0gX3RoaXMuJHBhcmVudC4kcmVmcy50YWJzW2luZGV4XTtcblx0ICAgICAgICAgIGlmICghJGVsKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgICAgIH1cblxuXHQgICAgICAgICAgaWYgKCF0YWIuYWN0aXZlKSB7XG5cdCAgICAgICAgICAgIG9mZnNldCArPSAkZWwuY2xpZW50V2lkdGg7XG5cdCAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdGFiV2lkdGggPSAkZWwuY2xpZW50V2lkdGg7XG5cdCAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblxuXHQgICAgICAgIHZhciB0cmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgnICsgb2Zmc2V0ICsgJ3B4KSc7XG5cdCAgICAgICAgc3R5bGUud2lkdGggPSB0YWJXaWR0aCArICdweCc7XG5cdCAgICAgICAgc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuXHQgICAgICAgIHN0eWxlLm1zVHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuXHQgICAgICAgIHN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcblxuXHQgICAgICAgIHJldHVybiBzdHlsZTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDIyNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYnNfX2FjdGl2ZS1iYXJcIixcblx0ICAgIHN0eWxlOiAoX3ZtLmJhclN0eWxlKVxuXHQgIH0pXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDIyNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF90YWJQYW5lID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjYpO1xuXG5cdHZhciBfdGFiUGFuZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90YWJQYW5lKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF90YWJQYW5lMi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfdGFiUGFuZTIuZGVmYXVsdC5uYW1lLCBfdGFiUGFuZTIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX3RhYlBhbmUyLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAyMjYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjI3KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjI4KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMjI3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsVGFiUGFuZScsXG5cblx0ICBjb21wb25lbnROYW1lOiAnRWxUYWJQYW5lJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBsYWJlbDogU3RyaW5nLFxuXHQgICAgbGFiZWxDb250ZW50OiBGdW5jdGlvbixcblx0ICAgIG5hbWU6IFN0cmluZyxcblx0ICAgIGNsb3NhYmxlOiBCb29sZWFuLFxuXHQgICAgZGlzYWJsZWQ6IEJvb2xlYW5cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIGluZGV4OiBudWxsXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBpc0Nsb3NhYmxlOiBmdW5jdGlvbiBpc0Nsb3NhYmxlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5jbG9zYWJsZSB8fCB0aGlzLiRwYXJlbnQuY2xvc2FibGU7XG5cdCAgICB9LFxuXHQgICAgYWN0aXZlOiBmdW5jdGlvbiBhY3RpdmUoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQuY3VycmVudE5hbWUgPT09ICh0aGlzLm5hbWUgfHwgdGhpcy5pbmRleCk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdCAgICB0aGlzLiRwYXJlbnQuYWRkUGFuZXModGhpcyk7XG5cdCAgfSxcblx0ICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcblx0ICAgIGlmICh0aGlzLiRlbCAmJiB0aGlzLiRlbC5wYXJlbnROb2RlKSB7XG5cdCAgICAgIHRoaXMuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWwpO1xuXHQgICAgfVxuXHQgICAgdGhpcy4kcGFyZW50LnJlbW92ZVBhbmVzKHRoaXMpO1xuXHQgIH0sXG5cblxuXHQgIHdhdGNoOiB7XG5cdCAgICBsYWJlbDogZnVuY3Rpb24gbGFiZWwoKSB7XG5cdCAgICAgIHRoaXMuJHBhcmVudC4kZm9yY2VVcGRhdGUoKTtcblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyMjggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0uYWN0aXZlKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJhY3RpdmVcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10YWItcGFuZVwiXG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAyMjkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfdGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzApO1xuXG5cdHZhciBfdGFnMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3RhZyk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfdGFnMi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfdGFnMi5kZWZhdWx0Lm5hbWUsIF90YWcyLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF90YWcyLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAyMzAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjMxKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjMyKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMjMxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsVGFnJyxcblx0ICBwcm9wczoge1xuXHQgICAgdGV4dDogU3RyaW5nLFxuXHQgICAgY2xvc2FibGU6IEJvb2xlYW4sXG5cdCAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICBoaXQ6IEJvb2xlYW4sXG5cdCAgICBjbG9zZVRyYW5zaXRpb246IEJvb2xlYW4sXG5cdCAgICBjb2xvcjogU3RyaW5nXG5cdCAgfSxcblx0ICBtZXRob2RzOiB7XG5cdCAgICBoYW5kbGVDbG9zZTogZnVuY3Rpb24gaGFuZGxlQ2xvc2UoZXZlbnQpIHtcblx0ICAgICAgdGhpcy4kZW1pdCgnY2xvc2UnLCBldmVudCk7XG5cdCAgICB9XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMjMyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygndHJhbnNpdGlvbicsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwibmFtZVwiOiBfdm0uY2xvc2VUcmFuc2l0aW9uID8gJycgOiAnZWwtem9vbS1pbi1jZW50ZXInXG5cdCAgICB9XG5cdCAgfSwgW19jKCdzcGFuJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFnXCIsXG5cdCAgICBjbGFzczogW192bS50eXBlID8gJ2VsLXRhZy0tJyArIF92bS50eXBlIDogJycsIHtcblx0ICAgICAgJ2lzLWhpdCc6IF92bS5oaXRcblx0ICAgIH1dLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIGJhY2tncm91bmRDb2xvcjogX3ZtLmNvbG9yXG5cdCAgICB9KVxuXHQgIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpLCAoX3ZtLmNsb3NhYmxlKSA/IF9jKCdpJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFnX19jbG9zZSBlbC1pY29uLWNsb3NlXCIsXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5oYW5kbGVDbG9zZVxuXHQgICAgfVxuXHQgIH0pIDogX3ZtLl9lKCldLCAyKV0pXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDIzMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF90cmVlID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzQpO1xuXG5cdHZhciBfdHJlZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90cmVlKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF90cmVlMi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfdHJlZTIuZGVmYXVsdC5uYW1lLCBfdHJlZTIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX3RyZWUyLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAyMzQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjM1KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjQyKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMjM1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3RyZWVTdG9yZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjM2KTtcblxuXHR2YXIgX3RyZWVTdG9yZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF90cmVlU3RvcmUpO1xuXG5cdHZhciBfbG9jYWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTEpO1xuXG5cdHZhciBfZW1pdHRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xuXG5cdHZhciBfZW1pdHRlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbWl0dGVyKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxUcmVlJyxcblxuXHQgIG1peGluczogW19lbWl0dGVyMi5kZWZhdWx0XSxcblxuXHQgIGNvbXBvbmVudHM6IHtcblx0ICAgIEVsVHJlZU5vZGU6IF9fd2VicGFja19yZXF1aXJlX18oMjM5KVxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgc3RvcmU6IG51bGwsXG5cdCAgICAgIHJvb3Q6IG51bGwsXG5cdCAgICAgIGN1cnJlbnROb2RlOiBudWxsXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIHByb3BzOiB7XG5cdCAgICBkYXRhOiB7XG5cdCAgICAgIHR5cGU6IEFycmF5XG5cdCAgICB9LFxuXHQgICAgZW1wdHlUZXh0OiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuICgwLCBfbG9jYWxlLnQpKCdlbC50cmVlLmVtcHR5VGV4dCcpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbm9kZUtleTogU3RyaW5nLFxuXHQgICAgY2hlY2tTdHJpY3RseTogQm9vbGVhbixcblx0ICAgIGRlZmF1bHRFeHBhbmRBbGw6IEJvb2xlYW4sXG5cdCAgICBleHBhbmRPbkNsaWNrTm9kZToge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXHQgICAgYXV0b0V4cGFuZFBhcmVudDoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXHQgICAgZGVmYXVsdENoZWNrZWRLZXlzOiBBcnJheSxcblx0ICAgIGRlZmF1bHRFeHBhbmRlZEtleXM6IEFycmF5LFxuXHQgICAgcmVuZGVyQ29udGVudDogRnVuY3Rpb24sXG5cdCAgICBzaG93Q2hlY2tib3g6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogZmFsc2Vcblx0ICAgIH0sXG5cdCAgICBwcm9wczoge1xuXHQgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcblx0ICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgY2hpbGRyZW46ICdjaGlsZHJlbicsXG5cdCAgICAgICAgICBsYWJlbDogJ2xhYmVsJyxcblx0ICAgICAgICAgIGljb246ICdpY29uJyxcblx0ICAgICAgICAgIGRpc2FibGVkOiAnZGlzYWJsZWQnXG5cdCAgICAgICAgfTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGxhenk6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogZmFsc2Vcblx0ICAgIH0sXG5cdCAgICBoaWdobGlnaHRDdXJyZW50OiBCb29sZWFuLFxuXHQgICAgY3VycmVudE5vZGVLZXk6IFtTdHJpbmcsIE51bWJlcl0sXG5cdCAgICBsb2FkOiBGdW5jdGlvbixcblx0ICAgIGZpbHRlck5vZGVNZXRob2Q6IEZ1bmN0aW9uLFxuXHQgICAgYWNjb3JkaW9uOiBCb29sZWFuLFxuXHQgICAgaW5kZW50OiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogMTZcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIGNoaWxkcmVuOiB7XG5cdCAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG5cdCAgICAgICAgdGhpcy5kYXRhID0gdmFsdWU7XG5cdCAgICAgIH0sXG5cdCAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmRhdGE7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgIGRlZmF1bHRDaGVja2VkS2V5czogZnVuY3Rpb24gZGVmYXVsdENoZWNrZWRLZXlzKG5ld1ZhbCkge1xuXHQgICAgICB0aGlzLnN0b3JlLmRlZmF1bHRDaGVja2VkS2V5cyA9IG5ld1ZhbDtcblx0ICAgICAgdGhpcy5zdG9yZS5zZXREZWZhdWx0Q2hlY2tlZEtleShuZXdWYWwpO1xuXHQgICAgfSxcblx0ICAgIGRlZmF1bHRFeHBhbmRlZEtleXM6IGZ1bmN0aW9uIGRlZmF1bHRFeHBhbmRlZEtleXMobmV3VmFsKSB7XG5cdCAgICAgIHRoaXMuc3RvcmUuZGVmYXVsdEV4cGFuZGVkS2V5cyA9IG5ld1ZhbDtcblx0ICAgICAgdGhpcy5zdG9yZS5zZXREZWZhdWx0RXhwYW5kZWRLZXlzKG5ld1ZhbCk7XG5cdCAgICB9LFxuXHQgICAgY3VycmVudE5vZGVLZXk6IGZ1bmN0aW9uIGN1cnJlbnROb2RlS2V5KG5ld1ZhbCkge1xuXHQgICAgICB0aGlzLnN0b3JlLnNldEN1cnJlbnROb2RlS2V5KG5ld1ZhbCk7XG5cdCAgICAgIHRoaXMuc3RvcmUuY3VycmVudE5vZGVLZXkgPSBuZXdWYWw7XG5cdCAgICB9LFxuXHQgICAgZGF0YTogZnVuY3Rpb24gZGF0YShuZXdWYWwpIHtcblx0ICAgICAgdGhpcy5zdG9yZS5zZXREYXRhKG5ld1ZhbCk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKHZhbHVlKSB7XG5cdCAgICAgIGlmICghdGhpcy5maWx0ZXJOb2RlTWV0aG9kKSB0aHJvdyBuZXcgRXJyb3IoJ1tUcmVlXSBmaWx0ZXJOb2RlTWV0aG9kIGlzIHJlcXVpcmVkIHdoZW4gZmlsdGVyJyk7XG5cdCAgICAgIHRoaXMuc3RvcmUuZmlsdGVyKHZhbHVlKTtcblx0ICAgIH0sXG5cdCAgICBnZXROb2RlS2V5OiBmdW5jdGlvbiBnZXROb2RlS2V5KG5vZGUsIGluZGV4KSB7XG5cdCAgICAgIHZhciBub2RlS2V5ID0gdGhpcy5ub2RlS2V5O1xuXHQgICAgICBpZiAobm9kZUtleSAmJiBub2RlKSB7XG5cdCAgICAgICAgcmV0dXJuIG5vZGUuZGF0YVtub2RlS2V5XTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gaW5kZXg7XG5cdCAgICB9LFxuXHQgICAgZ2V0Q2hlY2tlZE5vZGVzOiBmdW5jdGlvbiBnZXRDaGVja2VkTm9kZXMobGVhZk9ubHkpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0Q2hlY2tlZE5vZGVzKGxlYWZPbmx5KTtcblx0ICAgIH0sXG5cdCAgICBnZXRDaGVja2VkS2V5czogZnVuY3Rpb24gZ2V0Q2hlY2tlZEtleXMobGVhZk9ubHkpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0Q2hlY2tlZEtleXMobGVhZk9ubHkpO1xuXHQgICAgfSxcblx0ICAgIHNldENoZWNrZWROb2RlczogZnVuY3Rpb24gc2V0Q2hlY2tlZE5vZGVzKG5vZGVzLCBsZWFmT25seSkge1xuXHQgICAgICBpZiAoIXRoaXMubm9kZUtleSkgdGhyb3cgbmV3IEVycm9yKCdbVHJlZV0gbm9kZUtleSBpcyByZXF1aXJlZCBpbiBzZXRDaGVja2VkTm9kZXMnKTtcblx0ICAgICAgdGhpcy5zdG9yZS5zZXRDaGVja2VkTm9kZXMobm9kZXMsIGxlYWZPbmx5KTtcblx0ICAgIH0sXG5cdCAgICBzZXRDaGVja2VkS2V5czogZnVuY3Rpb24gc2V0Q2hlY2tlZEtleXMoa2V5cywgbGVhZk9ubHkpIHtcblx0ICAgICAgaWYgKCF0aGlzLm5vZGVLZXkpIHRocm93IG5ldyBFcnJvcignW1RyZWVdIG5vZGVLZXkgaXMgcmVxdWlyZWQgaW4gc2V0Q2hlY2tlZE5vZGVzJyk7XG5cdCAgICAgIHRoaXMuc3RvcmUuc2V0Q2hlY2tlZEtleXMoa2V5cywgbGVhZk9ubHkpO1xuXHQgICAgfSxcblx0ICAgIHNldENoZWNrZWQ6IGZ1bmN0aW9uIHNldENoZWNrZWQoZGF0YSwgY2hlY2tlZCwgZGVlcCkge1xuXHQgICAgICB0aGlzLnN0b3JlLnNldENoZWNrZWQoZGF0YSwgY2hlY2tlZCwgZGVlcCk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlTm9kZUV4cGFuZDogZnVuY3Rpb24gaGFuZGxlTm9kZUV4cGFuZChub2RlRGF0YSwgbm9kZSwgaW5zdGFuY2UpIHtcblx0ICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsVHJlZU5vZGUnLCAndHJlZS1ub2RlLWV4cGFuZCcsIG5vZGUpO1xuXHQgICAgICB0aGlzLiRlbWl0KCdub2RlLWV4cGFuZCcsIG5vZGVEYXRhLCBub2RlLCBpbnN0YW5jZSk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG5cdCAgICB0aGlzLmlzVHJlZSA9IHRydWU7XG5cblx0ICAgIHRoaXMuc3RvcmUgPSBuZXcgX3RyZWVTdG9yZTIuZGVmYXVsdCh7XG5cdCAgICAgIGtleTogdGhpcy5ub2RlS2V5LFxuXHQgICAgICBkYXRhOiB0aGlzLmRhdGEsXG5cdCAgICAgIGxhenk6IHRoaXMubGF6eSxcblx0ICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG5cdCAgICAgIGxvYWQ6IHRoaXMubG9hZCxcblx0ICAgICAgY3VycmVudE5vZGVLZXk6IHRoaXMuY3VycmVudE5vZGVLZXksXG5cdCAgICAgIGNoZWNrU3RyaWN0bHk6IHRoaXMuY2hlY2tTdHJpY3RseSxcblx0ICAgICAgZGVmYXVsdENoZWNrZWRLZXlzOiB0aGlzLmRlZmF1bHRDaGVja2VkS2V5cyxcblx0ICAgICAgZGVmYXVsdEV4cGFuZGVkS2V5czogdGhpcy5kZWZhdWx0RXhwYW5kZWRLZXlzLFxuXHQgICAgICBhdXRvRXhwYW5kUGFyZW50OiB0aGlzLmF1dG9FeHBhbmRQYXJlbnQsXG5cdCAgICAgIGRlZmF1bHRFeHBhbmRBbGw6IHRoaXMuZGVmYXVsdEV4cGFuZEFsbCxcblx0ICAgICAgZmlsdGVyTm9kZU1ldGhvZDogdGhpcy5maWx0ZXJOb2RlTWV0aG9kXG5cdCAgICB9KTtcblxuXHQgICAgdGhpcy5yb290ID0gdGhpcy5zdG9yZS5yb290O1xuXHQgIH1cblx0fTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuLyoqKi8gfSxcbi8qIDIzNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5cdHZhciBfbm9kZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjM3KTtcblxuXHR2YXIgX25vZGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbm9kZSk7XG5cblx0dmFyIF91dGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzgpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuXHR2YXIgVHJlZVN0b3JlID0gZnVuY3Rpb24gKCkge1xuXHQgIGZ1bmN0aW9uIFRyZWVTdG9yZShvcHRpb25zKSB7XG5cdCAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHJlZVN0b3JlKTtcblxuXHQgICAgdGhpcy5jdXJyZW50Tm9kZSA9IG51bGw7XG5cdCAgICB0aGlzLmN1cnJlbnROb2RlS2V5ID0gbnVsbDtcblxuXHQgICAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcblx0ICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0aW9uKSkge1xuXHQgICAgICAgIHRoaXNbb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICB0aGlzLm5vZGVzTWFwID0ge307XG5cblx0ICAgIHRoaXMucm9vdCA9IG5ldyBfbm9kZTIuZGVmYXVsdCh7XG5cdCAgICAgIGRhdGE6IHRoaXMuZGF0YSxcblx0ICAgICAgc3RvcmU6IHRoaXNcblx0ICAgIH0pO1xuXG5cdCAgICBpZiAodGhpcy5sYXp5ICYmIHRoaXMubG9hZCkge1xuXHQgICAgICB2YXIgbG9hZEZuID0gdGhpcy5sb2FkO1xuXHQgICAgICBsb2FkRm4odGhpcy5yb290LCBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIF90aGlzLnJvb3QuZG9DcmVhdGVDaGlsZHJlbihkYXRhKTtcblx0ICAgICAgICBfdGhpcy5faW5pdERlZmF1bHRDaGVja2VkTm9kZXMoKTtcblx0ICAgICAgfSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aGlzLl9pbml0RGVmYXVsdENoZWNrZWROb2RlcygpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIFRyZWVTdG9yZS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gZmlsdGVyKHZhbHVlKSB7XG5cdCAgICB2YXIgZmlsdGVyTm9kZU1ldGhvZCA9IHRoaXMuZmlsdGVyTm9kZU1ldGhvZDtcblx0ICAgIHZhciB0cmF2ZXJzZSA9IGZ1bmN0aW9uIHRyYXZlcnNlKG5vZGUpIHtcblx0ICAgICAgdmFyIGNoaWxkTm9kZXMgPSBub2RlLnJvb3QgPyBub2RlLnJvb3QuY2hpbGROb2RlcyA6IG5vZGUuY2hpbGROb2RlcztcblxuXHQgICAgICBjaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG5cdCAgICAgICAgY2hpbGQudmlzaWJsZSA9IGZpbHRlck5vZGVNZXRob2QuY2FsbChjaGlsZCwgdmFsdWUsIGNoaWxkLmRhdGEsIGNoaWxkKTtcblxuXHQgICAgICAgIHRyYXZlcnNlKGNoaWxkKTtcblx0ICAgICAgfSk7XG5cblx0ICAgICAgaWYgKCFub2RlLnZpc2libGUgJiYgY2hpbGROb2Rlcy5sZW5ndGgpIHtcblx0ICAgICAgICB2YXIgYWxsSGlkZGVuID0gdHJ1ZTtcblxuXHQgICAgICAgIGNoaWxkTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcblx0ICAgICAgICAgIGlmIChjaGlsZC52aXNpYmxlKSBhbGxIaWRkZW4gPSBmYWxzZTtcblx0ICAgICAgICB9KTtcblxuXHQgICAgICAgIGlmIChub2RlLnJvb3QpIHtcblx0ICAgICAgICAgIG5vZGUucm9vdC52aXNpYmxlID0gYWxsSGlkZGVuID09PSBmYWxzZTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgbm9kZS52aXNpYmxlID0gYWxsSGlkZGVuID09PSBmYWxzZTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAobm9kZS52aXNpYmxlICYmICFub2RlLmlzTGVhZikgbm9kZS5leHBhbmQoKTtcblx0ICAgIH07XG5cblx0ICAgIHRyYXZlcnNlKHRoaXMpO1xuXHQgIH07XG5cblx0ICBUcmVlU3RvcmUucHJvdG90eXBlLnNldERhdGEgPSBmdW5jdGlvbiBzZXREYXRhKG5ld1ZhbCkge1xuXHQgICAgdmFyIGluc3RhbmNlQ2hhbmdlZCA9IG5ld1ZhbCAhPT0gdGhpcy5yb290LmRhdGE7XG5cdCAgICB0aGlzLnJvb3Quc2V0RGF0YShuZXdWYWwpO1xuXHQgICAgaWYgKGluc3RhbmNlQ2hhbmdlZCkge1xuXHQgICAgICB0aGlzLl9pbml0RGVmYXVsdENoZWNrZWROb2RlcygpO1xuXHQgICAgfVxuXHQgIH07XG5cblx0ICBUcmVlU3RvcmUucHJvdG90eXBlLmdldE5vZGUgPSBmdW5jdGlvbiBnZXROb2RlKGRhdGEpIHtcblx0ICAgIHZhciBrZXkgPSAodHlwZW9mIGRhdGEgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGRhdGEpKSAhPT0gJ29iamVjdCcgPyBkYXRhIDogKDAsIF91dGlsLmdldE5vZGVLZXkpKHRoaXMua2V5LCBkYXRhKTtcblx0ICAgIHJldHVybiB0aGlzLm5vZGVzTWFwW2tleV07XG5cdCAgfTtcblxuXHQgIFRyZWVTdG9yZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gaW5zZXJ0QmVmb3JlKGRhdGEsIHJlZkRhdGEpIHtcblx0ICAgIHZhciByZWZOb2RlID0gdGhpcy5nZXROb2RlKHJlZkRhdGEpO1xuXHQgICAgcmVmTm9kZS5wYXJlbnQuaW5zZXJ0QmVmb3JlKHsgZGF0YTogZGF0YSB9LCByZWZOb2RlKTtcblx0ICB9O1xuXG5cdCAgVHJlZVN0b3JlLnByb3RvdHlwZS5pbnNlcnRBZnRlciA9IGZ1bmN0aW9uIGluc2VydEFmdGVyKGRhdGEsIHJlZkRhdGEpIHtcblx0ICAgIHZhciByZWZOb2RlID0gdGhpcy5nZXROb2RlKHJlZkRhdGEpO1xuXHQgICAgcmVmTm9kZS5wYXJlbnQuaW5zZXJ0QWZ0ZXIoeyBkYXRhOiBkYXRhIH0sIHJlZk5vZGUpO1xuXHQgIH07XG5cblx0ICBUcmVlU3RvcmUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShkYXRhKSB7XG5cdCAgICB2YXIgbm9kZSA9IHRoaXMuZ2V0Tm9kZShkYXRhKTtcblx0ICAgIGlmIChub2RlKSB7XG5cdCAgICAgIG5vZGUucGFyZW50LnJlbW92ZUNoaWxkKG5vZGUpO1xuXHQgICAgfVxuXHQgIH07XG5cblx0ICBUcmVlU3RvcmUucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChkYXRhLCBwYXJlbnREYXRhKSB7XG5cdCAgICB2YXIgcGFyZW50Tm9kZSA9IHBhcmVudERhdGEgPyB0aGlzLmdldE5vZGUocGFyZW50RGF0YSkgOiB0aGlzLnJvb3Q7XG5cblx0ICAgIGlmIChwYXJlbnROb2RlKSB7XG5cdCAgICAgIHBhcmVudE5vZGUuaW5zZXJ0Q2hpbGQoeyBkYXRhOiBkYXRhIH0pO1xuXHQgICAgfVxuXHQgIH07XG5cblx0ICBUcmVlU3RvcmUucHJvdG90eXBlLl9pbml0RGVmYXVsdENoZWNrZWROb2RlcyA9IGZ1bmN0aW9uIF9pbml0RGVmYXVsdENoZWNrZWROb2RlcygpIHtcblx0ICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgICB2YXIgZGVmYXVsdENoZWNrZWRLZXlzID0gdGhpcy5kZWZhdWx0Q2hlY2tlZEtleXMgfHwgW107XG5cdCAgICB2YXIgbm9kZXNNYXAgPSB0aGlzLm5vZGVzTWFwO1xuXG5cdCAgICBkZWZhdWx0Q2hlY2tlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAoY2hlY2tlZEtleSkge1xuXHQgICAgICB2YXIgbm9kZSA9IG5vZGVzTWFwW2NoZWNrZWRLZXldO1xuXG5cdCAgICAgIGlmIChub2RlKSB7XG5cdCAgICAgICAgbm9kZS5zZXRDaGVja2VkKHRydWUsICFfdGhpczIuY2hlY2tTdHJpY3RseSk7XG5cdCAgICAgIH1cblx0ICAgIH0pO1xuXHQgIH07XG5cblx0ICBUcmVlU3RvcmUucHJvdG90eXBlLl9pbml0RGVmYXVsdENoZWNrZWROb2RlID0gZnVuY3Rpb24gX2luaXREZWZhdWx0Q2hlY2tlZE5vZGUobm9kZSkge1xuXHQgICAgdmFyIGRlZmF1bHRDaGVja2VkS2V5cyA9IHRoaXMuZGVmYXVsdENoZWNrZWRLZXlzIHx8IFtdO1xuXG5cdCAgICBpZiAoZGVmYXVsdENoZWNrZWRLZXlzLmluZGV4T2Yobm9kZS5rZXkpICE9PSAtMSkge1xuXHQgICAgICBub2RlLnNldENoZWNrZWQodHJ1ZSwgIXRoaXMuY2hlY2tTdHJpY3RseSk7XG5cdCAgICB9XG5cdCAgfTtcblxuXHQgIFRyZWVTdG9yZS5wcm90b3R5cGUuc2V0RGVmYXVsdENoZWNrZWRLZXkgPSBmdW5jdGlvbiBzZXREZWZhdWx0Q2hlY2tlZEtleShuZXdWYWwpIHtcblx0ICAgIGlmIChuZXdWYWwgIT09IHRoaXMuZGVmYXVsdENoZWNrZWRLZXlzKSB7XG5cdCAgICAgIHRoaXMuZGVmYXVsdENoZWNrZWRLZXlzID0gbmV3VmFsO1xuXHQgICAgICB0aGlzLl9pbml0RGVmYXVsdENoZWNrZWROb2RlcygpO1xuXHQgICAgfVxuXHQgIH07XG5cblx0ICBUcmVlU3RvcmUucHJvdG90eXBlLnJlZ2lzdGVyTm9kZSA9IGZ1bmN0aW9uIHJlZ2lzdGVyTm9kZShub2RlKSB7XG5cdCAgICB2YXIga2V5ID0gdGhpcy5rZXk7XG5cdCAgICBpZiAoIWtleSB8fCAhbm9kZSB8fCAhbm9kZS5kYXRhKSByZXR1cm47XG5cblx0ICAgIHZhciBub2RlS2V5ID0gbm9kZS5rZXk7XG5cdCAgICBpZiAobm9kZUtleSAhPT0gdW5kZWZpbmVkKSB0aGlzLm5vZGVzTWFwW25vZGUua2V5XSA9IG5vZGU7XG5cdCAgfTtcblxuXHQgIFRyZWVTdG9yZS5wcm90b3R5cGUuZGVyZWdpc3Rlck5vZGUgPSBmdW5jdGlvbiBkZXJlZ2lzdGVyTm9kZShub2RlKSB7XG5cdCAgICB2YXIga2V5ID0gdGhpcy5rZXk7XG5cdCAgICBpZiAoIWtleSB8fCAhbm9kZSB8fCAhbm9kZS5kYXRhKSByZXR1cm47XG5cblx0ICAgIGRlbGV0ZSB0aGlzLm5vZGVzTWFwW25vZGUua2V5XTtcblx0ICB9O1xuXG5cdCAgVHJlZVN0b3JlLnByb3RvdHlwZS5nZXRDaGVja2VkTm9kZXMgPSBmdW5jdGlvbiBnZXRDaGVja2VkTm9kZXMoKSB7XG5cdCAgICB2YXIgbGVhZk9ubHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuXG5cdCAgICB2YXIgY2hlY2tlZE5vZGVzID0gW107XG5cdCAgICB2YXIgdHJhdmVyc2UgPSBmdW5jdGlvbiB0cmF2ZXJzZShub2RlKSB7XG5cdCAgICAgIHZhciBjaGlsZE5vZGVzID0gbm9kZS5yb290ID8gbm9kZS5yb290LmNoaWxkTm9kZXMgOiBub2RlLmNoaWxkTm9kZXM7XG5cblx0ICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuXHQgICAgICAgIGlmICghbGVhZk9ubHkgJiYgY2hpbGQuY2hlY2tlZCB8fCBsZWFmT25seSAmJiBjaGlsZC5pc0xlYWYgJiYgY2hpbGQuY2hlY2tlZCkge1xuXHQgICAgICAgICAgY2hlY2tlZE5vZGVzLnB1c2goY2hpbGQuZGF0YSk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdHJhdmVyc2UoY2hpbGQpO1xuXHQgICAgICB9KTtcblx0ICAgIH07XG5cblx0ICAgIHRyYXZlcnNlKHRoaXMpO1xuXG5cdCAgICByZXR1cm4gY2hlY2tlZE5vZGVzO1xuXHQgIH07XG5cblx0ICBUcmVlU3RvcmUucHJvdG90eXBlLmdldENoZWNrZWRLZXlzID0gZnVuY3Rpb24gZ2V0Q2hlY2tlZEtleXMoKSB7XG5cdCAgICB2YXIgbGVhZk9ubHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuXG5cdCAgICB2YXIga2V5ID0gdGhpcy5rZXk7XG5cdCAgICB2YXIgYWxsTm9kZXMgPSB0aGlzLl9nZXRBbGxOb2RlcygpO1xuXHQgICAgdmFyIGtleXMgPSBbXTtcblx0ICAgIGFsbE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgaWYgKCFsZWFmT25seSB8fCBsZWFmT25seSAmJiBub2RlLmlzTGVhZikge1xuXHQgICAgICAgIGlmIChub2RlLmNoZWNrZWQpIHtcblx0ICAgICAgICAgIGtleXMucHVzaCgobm9kZS5kYXRhIHx8IHt9KVtrZXldKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIGtleXM7XG5cdCAgfTtcblxuXHQgIFRyZWVTdG9yZS5wcm90b3R5cGUuX2dldEFsbE5vZGVzID0gZnVuY3Rpb24gX2dldEFsbE5vZGVzKCkge1xuXHQgICAgdmFyIGFsbE5vZGVzID0gW107XG5cdCAgICB2YXIgbm9kZXNNYXAgPSB0aGlzLm5vZGVzTWFwO1xuXHQgICAgZm9yICh2YXIgbm9kZUtleSBpbiBub2Rlc01hcCkge1xuXHQgICAgICBpZiAobm9kZXNNYXAuaGFzT3duUHJvcGVydHkobm9kZUtleSkpIHtcblx0ICAgICAgICBhbGxOb2Rlcy5wdXNoKG5vZGVzTWFwW25vZGVLZXldKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gYWxsTm9kZXM7XG5cdCAgfTtcblxuXHQgIFRyZWVTdG9yZS5wcm90b3R5cGUuX3NldENoZWNrZWRLZXlzID0gZnVuY3Rpb24gX3NldENoZWNrZWRLZXlzKGtleSkge1xuXHQgICAgdmFyIGxlYWZPbmx5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblx0ICAgIHZhciBjaGVja2VkS2V5cyA9IGFyZ3VtZW50c1syXTtcblxuXHQgICAgdmFyIGFsbE5vZGVzID0gdGhpcy5fZ2V0QWxsTm9kZXMoKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG5cdCAgICAgIHJldHVybiBiLmxldmVsIC0gYS5sZXZlbDtcblx0ICAgIH0pO1xuXHQgICAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0ICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY2hlY2tlZEtleXMpO1xuXHQgICAgYWxsTm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICByZXR1cm4gbm9kZS5zZXRDaGVja2VkKGZhbHNlLCBmYWxzZSk7XG5cdCAgICB9KTtcblx0ICAgIGZvciAodmFyIGkgPSAwLCBqID0gYWxsTm9kZXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdCAgICAgIHZhciBub2RlID0gYWxsTm9kZXNbaV07XG5cdCAgICAgIHZhciBub2RlS2V5ID0gbm9kZS5kYXRhW2tleV0udG9TdHJpbmcoKTtcblx0ICAgICAgdmFyIGNoZWNrZWQgPSBrZXlzLmluZGV4T2Yobm9kZUtleSkgPiAtMTtcblx0ICAgICAgaWYgKCFjaGVja2VkKSB7XG5cdCAgICAgICAgaWYgKG5vZGUuY2hlY2tlZCAmJiAhY2FjaGVbbm9kZUtleV0pIHtcblx0ICAgICAgICAgIG5vZGUuc2V0Q2hlY2tlZChmYWxzZSwgZmFsc2UpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBjb250aW51ZTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblx0ICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQubGV2ZWwgPiAwKSB7XG5cdCAgICAgICAgY2FjaGVbcGFyZW50LmRhdGFba2V5XV0gPSB0cnVlO1xuXHQgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAobm9kZS5pc0xlYWYgfHwgdGhpcy5jaGVja1N0cmljdGx5KSB7XG5cdCAgICAgICAgbm9kZS5zZXRDaGVja2VkKHRydWUsIGZhbHNlKTtcblx0ICAgICAgICBjb250aW51ZTtcblx0ICAgICAgfVxuXHQgICAgICBub2RlLnNldENoZWNrZWQodHJ1ZSwgdHJ1ZSk7XG5cblx0ICAgICAgaWYgKGxlYWZPbmx5KSB7XG5cdCAgICAgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIG5vZGUuc2V0Q2hlY2tlZChmYWxzZSwgZmFsc2UpO1xuXHQgICAgICAgICAgdmFyIHRyYXZlcnNlID0gZnVuY3Rpb24gdHJhdmVyc2Uobm9kZSkge1xuXHQgICAgICAgICAgICB2YXIgY2hpbGROb2RlcyA9IG5vZGUuY2hpbGROb2Rlcztcblx0ICAgICAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuXHQgICAgICAgICAgICAgIGlmICghY2hpbGQuaXNMZWFmKSB7XG5cdCAgICAgICAgICAgICAgICBjaGlsZC5zZXRDaGVja2VkKGZhbHNlLCBmYWxzZSk7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgIHRyYXZlcnNlKGNoaWxkKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgICAgdHJhdmVyc2Uobm9kZSk7XG5cdCAgICAgICAgfSkoKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH07XG5cblx0ICBUcmVlU3RvcmUucHJvdG90eXBlLnNldENoZWNrZWROb2RlcyA9IGZ1bmN0aW9uIHNldENoZWNrZWROb2RlcyhhcnJheSkge1xuXHQgICAgdmFyIGxlYWZPbmx5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuXHQgICAgdmFyIGtleSA9IHRoaXMua2V5O1xuXHQgICAgdmFyIGNoZWNrZWRLZXlzID0ge307XG5cdCAgICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgIGNoZWNrZWRLZXlzWyhpdGVtIHx8IHt9KVtrZXldXSA9IHRydWU7XG5cdCAgICB9KTtcblxuXHQgICAgdGhpcy5fc2V0Q2hlY2tlZEtleXMoa2V5LCBsZWFmT25seSwgY2hlY2tlZEtleXMpO1xuXHQgIH07XG5cblx0ICBUcmVlU3RvcmUucHJvdG90eXBlLnNldENoZWNrZWRLZXlzID0gZnVuY3Rpb24gc2V0Q2hlY2tlZEtleXMoa2V5cykge1xuXHQgICAgdmFyIGxlYWZPbmx5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuXHQgICAgdGhpcy5kZWZhdWx0Q2hlY2tlZEtleXMgPSBrZXlzO1xuXHQgICAgdmFyIGtleSA9IHRoaXMua2V5O1xuXHQgICAgdmFyIGNoZWNrZWRLZXlzID0ge307XG5cdCAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHQgICAgICBjaGVja2VkS2V5c1trZXldID0gdHJ1ZTtcblx0ICAgIH0pO1xuXG5cdCAgICB0aGlzLl9zZXRDaGVja2VkS2V5cyhrZXksIGxlYWZPbmx5LCBjaGVja2VkS2V5cyk7XG5cdCAgfTtcblxuXHQgIFRyZWVTdG9yZS5wcm90b3R5cGUuc2V0RGVmYXVsdEV4cGFuZGVkS2V5cyA9IGZ1bmN0aW9uIHNldERlZmF1bHRFeHBhbmRlZEtleXMoa2V5cykge1xuXHQgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cblx0ICAgIGtleXMgPSBrZXlzIHx8IFtdO1xuXHQgICAgdGhpcy5kZWZhdWx0RXhwYW5kZWRLZXlzID0ga2V5cztcblxuXHQgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0ICAgICAgdmFyIG5vZGUgPSBfdGhpczMuZ2V0Tm9kZShrZXkpO1xuXHQgICAgICBpZiAobm9kZSkgbm9kZS5leHBhbmQobnVsbCwgX3RoaXMzLmF1dG9FeHBhbmRQYXJlbnQpO1xuXHQgICAgfSk7XG5cdCAgfTtcblxuXHQgIFRyZWVTdG9yZS5wcm90b3R5cGUuc2V0Q2hlY2tlZCA9IGZ1bmN0aW9uIHNldENoZWNrZWQoZGF0YSwgY2hlY2tlZCwgZGVlcCkge1xuXHQgICAgdmFyIG5vZGUgPSB0aGlzLmdldE5vZGUoZGF0YSk7XG5cblx0ICAgIGlmIChub2RlKSB7XG5cdCAgICAgIG5vZGUuc2V0Q2hlY2tlZCghIWNoZWNrZWQsIGRlZXApO1xuXHQgICAgfVxuXHQgIH07XG5cblx0ICBUcmVlU3RvcmUucHJvdG90eXBlLmdldEN1cnJlbnROb2RlID0gZnVuY3Rpb24gZ2V0Q3VycmVudE5vZGUoKSB7XG5cdCAgICByZXR1cm4gdGhpcy5jdXJyZW50Tm9kZTtcblx0ICB9O1xuXG5cdCAgVHJlZVN0b3JlLnByb3RvdHlwZS5zZXRDdXJyZW50Tm9kZSA9IGZ1bmN0aW9uIHNldEN1cnJlbnROb2RlKG5vZGUpIHtcblx0ICAgIHRoaXMuY3VycmVudE5vZGUgPSBub2RlO1xuXHQgIH07XG5cblx0ICBUcmVlU3RvcmUucHJvdG90eXBlLnNldEN1cnJlbnROb2RlS2V5ID0gZnVuY3Rpb24gc2V0Q3VycmVudE5vZGVLZXkoa2V5KSB7XG5cdCAgICB2YXIgbm9kZSA9IHRoaXMuZ2V0Tm9kZShrZXkpO1xuXHQgICAgaWYgKG5vZGUpIHtcblx0ICAgICAgdGhpcy5jdXJyZW50Tm9kZSA9IG5vZGU7XG5cdCAgICB9XG5cdCAgfTtcblxuXHQgIHJldHVybiBUcmVlU3RvcmU7XG5cdH0oKTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBUcmVlU3RvcmU7XG5cdDtcblxuLyoqKi8gfSxcbi8qIDIzNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuZ2V0Q2hpbGRTdGF0ZSA9IHVuZGVmaW5lZDtcblxuXHR2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG5cdHZhciBfbWVyZ2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KTtcblxuXHR2YXIgX21lcmdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21lcmdlKTtcblxuXHR2YXIgX3V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzOCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5cdHZhciBnZXRDaGlsZFN0YXRlID0gZXhwb3J0cy5nZXRDaGlsZFN0YXRlID0gZnVuY3Rpb24gZ2V0Q2hpbGRTdGF0ZShub2RlKSB7XG5cdCAgdmFyIGFsbCA9IHRydWU7XG5cdCAgdmFyIG5vbmUgPSB0cnVlO1xuXHQgIHZhciBhbGxXaXRob3V0RGlzYWJsZSA9IHRydWU7XG5cdCAgZm9yICh2YXIgaSA9IDAsIGogPSBub2RlLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuXHQgICAgdmFyIG4gPSBub2RlW2ldO1xuXHQgICAgaWYgKG4uY2hlY2tlZCAhPT0gdHJ1ZSB8fCBuLmluZGV0ZXJtaW5hdGUpIHtcblx0ICAgICAgYWxsID0gZmFsc2U7XG5cdCAgICAgIGlmICghbi5kaXNhYmxlZCkge1xuXHQgICAgICAgIGFsbFdpdGhvdXREaXNhYmxlID0gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIGlmIChuLmNoZWNrZWQgIT09IGZhbHNlIHx8IG4uaW5kZXRlcm1pbmF0ZSkge1xuXHQgICAgICBub25lID0gZmFsc2U7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgcmV0dXJuIHsgYWxsOiBhbGwsIG5vbmU6IG5vbmUsIGFsbFdpdGhvdXREaXNhYmxlOiBhbGxXaXRob3V0RGlzYWJsZSwgaGFsZjogIWFsbCAmJiAhbm9uZSB9O1xuXHR9O1xuXG5cdHZhciByZUluaXRDaGVja2VkID0gZnVuY3Rpb24gcmVJbml0Q2hlY2tlZChub2RlKSB7XG5cdCAgdmFyIF9nZXRDaGlsZFN0YXRlID0gZ2V0Q2hpbGRTdGF0ZShub2RlLmNoaWxkTm9kZXMpLFxuXHQgICAgICBhbGwgPSBfZ2V0Q2hpbGRTdGF0ZS5hbGwsXG5cdCAgICAgIG5vbmUgPSBfZ2V0Q2hpbGRTdGF0ZS5ub25lLFxuXHQgICAgICBoYWxmID0gX2dldENoaWxkU3RhdGUuaGFsZjtcblxuXHQgIGlmIChhbGwpIHtcblx0ICAgIG5vZGUuY2hlY2tlZCA9IHRydWU7XG5cdCAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblx0ICB9IGVsc2UgaWYgKGhhbGYpIHtcblx0ICAgIG5vZGUuY2hlY2tlZCA9IGZhbHNlO1xuXHQgICAgbm9kZS5pbmRldGVybWluYXRlID0gdHJ1ZTtcblx0ICB9IGVsc2UgaWYgKG5vbmUpIHtcblx0ICAgIG5vZGUuY2hlY2tlZCA9IGZhbHNlO1xuXHQgICAgbm9kZS5pbmRldGVybWluYXRlID0gZmFsc2U7XG5cdCAgfVxuXG5cdCAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50O1xuXHQgIGlmICghcGFyZW50IHx8IHBhcmVudC5sZXZlbCA9PT0gMCkgcmV0dXJuO1xuXG5cdCAgaWYgKCFub2RlLnN0b3JlLmNoZWNrU3RyaWN0bHkpIHtcblx0ICAgIHJlSW5pdENoZWNrZWQocGFyZW50KTtcblx0ICB9XG5cdH07XG5cblx0dmFyIGluaXRMYXp5TG9hZENoaWxkID0gZnVuY3Rpb24gaW5pdExhenlMb2FkQ2hpbGQobm9kZSkge1xuXHQgIHZhciBjaGlsZE5vZGVzID0gbm9kZS5jaGlsZE5vZGVzO1xuXHQgIGlmIChub2RlLmNoZWNrZWQpIHtcblx0ICAgIGZvciAodmFyIGkgPSAwLCBqID0gY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0ICAgICAgdmFyIGNoaWxkID0gY2hpbGROb2Rlc1tpXTtcblx0ICAgICAgaWYgKCFjaGlsZC5kaXNhYmxlZCkge1xuXHQgICAgICAgIGNoaWxkLmNoZWNrZWQgPSB0cnVlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50O1xuXHQgIGlmICghcGFyZW50IHx8IHBhcmVudC5sZXZlbCA9PT0gMCkgcmV0dXJuO1xuXHQgIHJlSW5pdENoZWNrZWQocGFyZW50KTtcblx0fTtcblxuXHR2YXIgZ2V0UHJvcGVydHlGcm9tRGF0YSA9IGZ1bmN0aW9uIGdldFByb3BlcnR5RnJvbURhdGEobm9kZSwgcHJvcCkge1xuXHQgIHZhciBwcm9wcyA9IG5vZGUuc3RvcmUucHJvcHM7XG5cdCAgdmFyIGRhdGEgPSBub2RlLmRhdGEgfHwge307XG5cdCAgdmFyIGNvbmZpZyA9IHByb3BzW3Byb3BdO1xuXG5cdCAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgIHJldHVybiBjb25maWcoZGF0YSwgbm9kZSk7XG5cdCAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuXHQgICAgcmV0dXJuIGRhdGFbY29uZmlnXTtcblx0ICB9IGVsc2UgaWYgKHR5cGVvZiBjb25maWcgPT09ICd1bmRlZmluZWQnKSB7XG5cdCAgICB2YXIgZGF0YVByb3AgPSBkYXRhW3Byb3BdO1xuXHQgICAgcmV0dXJuIGRhdGFQcm9wID09PSB1bmRlZmluZWQgPyAnJyA6IGRhdGFQcm9wO1xuXHQgIH1cblx0fTtcblxuXHR2YXIgbm9kZUlkU2VlZCA9IDA7XG5cblx0dmFyIE5vZGUgPSBmdW5jdGlvbiAoKSB7XG5cdCAgZnVuY3Rpb24gTm9kZShvcHRpb25zKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTm9kZSk7XG5cblx0ICAgIHRoaXMuaWQgPSBub2RlSWRTZWVkKys7XG5cdCAgICB0aGlzLnRleHQgPSBudWxsO1xuXHQgICAgdGhpcy5jaGVja2VkID0gZmFsc2U7XG5cdCAgICB0aGlzLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblx0ICAgIHRoaXMuZGF0YSA9IG51bGw7XG5cdCAgICB0aGlzLmV4cGFuZGVkID0gZmFsc2U7XG5cdCAgICB0aGlzLnBhcmVudCA9IG51bGw7XG5cdCAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuXG5cdCAgICBmb3IgKHZhciBuYW1lIGluIG9wdGlvbnMpIHtcblx0ICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcblx0ICAgICAgICB0aGlzW25hbWVdID0gb3B0aW9uc1tuYW1lXTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICAvLyBpbnRlcm5hbFxuXHQgICAgdGhpcy5sZXZlbCA9IDA7XG5cdCAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuXHQgICAgdGhpcy5jaGlsZE5vZGVzID0gW107XG5cdCAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuXHQgICAgaWYgKHRoaXMucGFyZW50KSB7XG5cdCAgICAgIHRoaXMubGV2ZWwgPSB0aGlzLnBhcmVudC5sZXZlbCArIDE7XG5cdCAgICB9XG5cblx0ICAgIHZhciBzdG9yZSA9IHRoaXMuc3RvcmU7XG5cdCAgICBpZiAoIXN0b3JlKSB7XG5cdCAgICAgIHRocm93IG5ldyBFcnJvcignW05vZGVdc3RvcmUgaXMgcmVxdWlyZWQhJyk7XG5cdCAgICB9XG5cdCAgICBzdG9yZS5yZWdpc3Rlck5vZGUodGhpcyk7XG5cblx0ICAgIHZhciBwcm9wcyA9IHN0b3JlLnByb3BzO1xuXHQgICAgaWYgKHByb3BzICYmIHR5cGVvZiBwcm9wcy5pc0xlYWYgIT09ICd1bmRlZmluZWQnKSB7XG5cdCAgICAgIHZhciBpc0xlYWYgPSBnZXRQcm9wZXJ0eUZyb21EYXRhKHRoaXMsICdpc0xlYWYnKTtcblx0ICAgICAgaWYgKHR5cGVvZiBpc0xlYWYgPT09ICdib29sZWFuJykge1xuXHQgICAgICAgIHRoaXMuaXNMZWFmQnlVc2VyID0gaXNMZWFmO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIGlmIChzdG9yZS5sYXp5ICE9PSB0cnVlICYmIHRoaXMuZGF0YSkge1xuXHQgICAgICB0aGlzLnNldERhdGEodGhpcy5kYXRhKTtcblxuXHQgICAgICBpZiAoc3RvcmUuZGVmYXVsdEV4cGFuZEFsbCkge1xuXHQgICAgICAgIHRoaXMuZXhwYW5kZWQgPSB0cnVlO1xuXHQgICAgICB9XG5cdCAgICB9IGVsc2UgaWYgKHRoaXMubGV2ZWwgPiAwICYmIHN0b3JlLmxhenkgJiYgc3RvcmUuZGVmYXVsdEV4cGFuZEFsbCkge1xuXHQgICAgICB0aGlzLmV4cGFuZCgpO1xuXHQgICAgfVxuXG5cdCAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuO1xuXHQgICAgdmFyIGRlZmF1bHRFeHBhbmRlZEtleXMgPSBzdG9yZS5kZWZhdWx0RXhwYW5kZWRLZXlzO1xuXHQgICAgdmFyIGtleSA9IHN0b3JlLmtleTtcblx0ICAgIGlmIChrZXkgJiYgZGVmYXVsdEV4cGFuZGVkS2V5cyAmJiBkZWZhdWx0RXhwYW5kZWRLZXlzLmluZGV4T2YodGhpcy5rZXkpICE9PSAtMSkge1xuXHQgICAgICB0aGlzLmV4cGFuZChudWxsLCBzdG9yZS5hdXRvRXhwYW5kUGFyZW50KTtcblx0ICAgIH1cblxuXHQgICAgaWYgKGtleSAmJiBzdG9yZS5jdXJyZW50Tm9kZUtleSAhPT0gdW5kZWZpbmVkICYmIHRoaXMua2V5ID09PSBzdG9yZS5jdXJyZW50Tm9kZUtleSkge1xuXHQgICAgICBzdG9yZS5jdXJyZW50Tm9kZSA9IHRoaXM7XG5cdCAgICB9XG5cblx0ICAgIGlmIChzdG9yZS5sYXp5KSB7XG5cdCAgICAgIHN0b3JlLl9pbml0RGVmYXVsdENoZWNrZWROb2RlKHRoaXMpO1xuXHQgICAgfVxuXG5cdCAgICB0aGlzLnVwZGF0ZUxlYWZTdGF0ZSgpO1xuXHQgIH1cblxuXHQgIE5vZGUucHJvdG90eXBlLnNldERhdGEgPSBmdW5jdGlvbiBzZXREYXRhKGRhdGEpIHtcblx0ICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuXHQgICAgICAoMCwgX3V0aWwubWFya05vZGVEYXRhKSh0aGlzLCBkYXRhKTtcblx0ICAgIH1cblxuXHQgICAgdGhpcy5kYXRhID0gZGF0YTtcblx0ICAgIHRoaXMuY2hpbGROb2RlcyA9IFtdO1xuXG5cdCAgICB2YXIgY2hpbGRyZW4gPSB2b2lkIDA7XG5cdCAgICBpZiAodGhpcy5sZXZlbCA9PT0gMCAmJiB0aGlzLmRhdGEgaW5zdGFuY2VvZiBBcnJheSkge1xuXHQgICAgICBjaGlsZHJlbiA9IHRoaXMuZGF0YTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGNoaWxkcmVuID0gZ2V0UHJvcGVydHlGcm9tRGF0YSh0aGlzLCAnY2hpbGRyZW4nKSB8fCBbXTtcblx0ICAgIH1cblxuXHQgICAgZm9yICh2YXIgaSA9IDAsIGogPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBqOyBpKyspIHtcblx0ICAgICAgdGhpcy5pbnNlcnRDaGlsZCh7IGRhdGE6IGNoaWxkcmVuW2ldIH0pO1xuXHQgICAgfVxuXHQgIH07XG5cblx0ICBOb2RlLnByb3RvdHlwZS5pbnNlcnRDaGlsZCA9IGZ1bmN0aW9uIGluc2VydENoaWxkKGNoaWxkLCBpbmRleCkge1xuXHQgICAgaWYgKCFjaGlsZCkgdGhyb3cgbmV3IEVycm9yKCdpbnNlcnRDaGlsZCBlcnJvcjogY2hpbGQgaXMgcmVxdWlyZWQuJyk7XG5cblx0ICAgIGlmICghKGNoaWxkIGluc3RhbmNlb2YgTm9kZSkpIHtcblx0ICAgICAgKDAsIF9tZXJnZTIuZGVmYXVsdCkoY2hpbGQsIHtcblx0ICAgICAgICBwYXJlbnQ6IHRoaXMsXG5cdCAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmVcblx0ICAgICAgfSk7XG5cdCAgICAgIGNoaWxkID0gbmV3IE5vZGUoY2hpbGQpO1xuXHQgICAgfVxuXG5cdCAgICBjaGlsZC5sZXZlbCA9IHRoaXMubGV2ZWwgKyAxO1xuXG5cdCAgICBpZiAodHlwZW9mIGluZGV4ID09PSAndW5kZWZpbmVkJyB8fCBpbmRleCA8IDApIHtcblx0ICAgICAgdGhpcy5jaGlsZE5vZGVzLnB1c2goY2hpbGQpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy5jaGlsZE5vZGVzLnNwbGljZShpbmRleCwgMCwgY2hpbGQpO1xuXHQgICAgfVxuXG5cdCAgICB0aGlzLnVwZGF0ZUxlYWZTdGF0ZSgpO1xuXHQgIH07XG5cblx0ICBOb2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmUgPSBmdW5jdGlvbiBpbnNlcnRCZWZvcmUoY2hpbGQsIHJlZikge1xuXHQgICAgdmFyIGluZGV4ID0gdm9pZCAwO1xuXHQgICAgaWYgKHJlZikge1xuXHQgICAgICBpbmRleCA9IHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHJlZik7XG5cdCAgICB9XG5cdCAgICB0aGlzLmluc2VydENoaWxkKGNoaWxkLCBpbmRleCk7XG5cdCAgfTtcblxuXHQgIE5vZGUucHJvdG90eXBlLmluc2VydEFmdGVyID0gZnVuY3Rpb24gaW5zZXJ0QWZ0ZXIoY2hpbGQsIHJlZikge1xuXHQgICAgdmFyIGluZGV4ID0gdm9pZCAwO1xuXHQgICAgaWYgKHJlZikge1xuXHQgICAgICBpbmRleCA9IHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHJlZik7XG5cdCAgICAgIGlmIChpbmRleCAhPT0gLTEpIGluZGV4ICs9IDE7XG5cdCAgICB9XG5cdCAgICB0aGlzLmluc2VydENoaWxkKGNoaWxkLCBpbmRleCk7XG5cdCAgfTtcblxuXHQgIE5vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gcmVtb3ZlQ2hpbGQoY2hpbGQpIHtcblx0ICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKGNoaWxkKTtcblxuXHQgICAgaWYgKGluZGV4ID4gLTEpIHtcblx0ICAgICAgdGhpcy5zdG9yZSAmJiB0aGlzLnN0b3JlLmRlcmVnaXN0ZXJOb2RlKGNoaWxkKTtcblx0ICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcblx0ICAgICAgdGhpcy5jaGlsZE5vZGVzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICB9XG5cblx0ICAgIHRoaXMudXBkYXRlTGVhZlN0YXRlKCk7XG5cdCAgfTtcblxuXHQgIE5vZGUucHJvdG90eXBlLnJlbW92ZUNoaWxkQnlEYXRhID0gZnVuY3Rpb24gcmVtb3ZlQ2hpbGRCeURhdGEoZGF0YSkge1xuXHQgICAgdmFyIHRhcmdldE5vZGUgPSBudWxsO1xuXHQgICAgdGhpcy5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgaWYgKG5vZGUuZGF0YSA9PT0gZGF0YSkge1xuXHQgICAgICAgIHRhcmdldE5vZGUgPSBub2RlO1xuXHQgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgaWYgKHRhcmdldE5vZGUpIHtcblx0ICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0YXJnZXROb2RlKTtcblx0ICAgIH1cblx0ICB9O1xuXG5cdCAgTm9kZS5wcm90b3R5cGUuZXhwYW5kID0gZnVuY3Rpb24gZXhwYW5kKGNhbGxiYWNrLCBleHBhbmRQYXJlbnQpIHtcblx0ICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgIHZhciBkb25lID0gZnVuY3Rpb24gZG9uZSgpIHtcblx0ICAgICAgaWYgKGV4cGFuZFBhcmVudCkge1xuXHQgICAgICAgIHZhciBwYXJlbnQgPSBfdGhpcy5wYXJlbnQ7XG5cdCAgICAgICAgd2hpbGUgKHBhcmVudC5sZXZlbCA+IDApIHtcblx0ICAgICAgICAgIHBhcmVudC5leHBhbmRlZCA9IHRydWU7XG5cdCAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgICBfdGhpcy5leHBhbmRlZCA9IHRydWU7XG5cdCAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcblx0ICAgIH07XG5cblx0ICAgIGlmICh0aGlzLnNob3VsZExvYWREYXRhKCkpIHtcblx0ICAgICAgdGhpcy5sb2FkRGF0YShmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcblx0ICAgICAgICAgIGluaXRMYXp5TG9hZENoaWxkKF90aGlzKTtcblx0ICAgICAgICAgIGRvbmUoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgZG9uZSgpO1xuXHQgICAgfVxuXHQgIH07XG5cblx0ICBOb2RlLnByb3RvdHlwZS5kb0NyZWF0ZUNoaWxkcmVuID0gZnVuY3Rpb24gZG9DcmVhdGVDaGlsZHJlbihhcnJheSkge1xuXHQgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cblx0ICAgIHZhciBkZWZhdWx0UHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG5cdCAgICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgIF90aGlzMi5pbnNlcnRDaGlsZCgoMCwgX21lcmdlMi5kZWZhdWx0KSh7IGRhdGE6IGl0ZW0gfSwgZGVmYXVsdFByb3BzKSk7XG5cdCAgICB9KTtcblx0ICB9O1xuXG5cdCAgTm9kZS5wcm90b3R5cGUuY29sbGFwc2UgPSBmdW5jdGlvbiBjb2xsYXBzZSgpIHtcblx0ICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcblx0ICB9O1xuXG5cdCAgTm9kZS5wcm90b3R5cGUuc2hvdWxkTG9hZERhdGEgPSBmdW5jdGlvbiBzaG91bGRMb2FkRGF0YSgpIHtcblx0ICAgIHJldHVybiB0aGlzLnN0b3JlLmxhenkgPT09IHRydWUgJiYgdGhpcy5zdG9yZS5sb2FkICYmICF0aGlzLmxvYWRlZDtcblx0ICB9O1xuXG5cdCAgTm9kZS5wcm90b3R5cGUudXBkYXRlTGVhZlN0YXRlID0gZnVuY3Rpb24gdXBkYXRlTGVhZlN0YXRlKCkge1xuXHQgICAgaWYgKHRoaXMuc3RvcmUubGF6eSA9PT0gdHJ1ZSAmJiB0aGlzLmxvYWRlZCAhPT0gdHJ1ZSAmJiB0eXBlb2YgdGhpcy5pc0xlYWZCeVVzZXIgIT09ICd1bmRlZmluZWQnKSB7XG5cdCAgICAgIHRoaXMuaXNMZWFmID0gdGhpcy5pc0xlYWZCeVVzZXI7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH1cblx0ICAgIHZhciBjaGlsZE5vZGVzID0gdGhpcy5jaGlsZE5vZGVzO1xuXHQgICAgaWYgKCF0aGlzLnN0b3JlLmxhenkgfHwgdGhpcy5zdG9yZS5sYXp5ID09PSB0cnVlICYmIHRoaXMubG9hZGVkID09PSB0cnVlKSB7XG5cdCAgICAgIHRoaXMuaXNMZWFmID0gIWNoaWxkTm9kZXMgfHwgY2hpbGROb2Rlcy5sZW5ndGggPT09IDA7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH1cblx0ICAgIHRoaXMuaXNMZWFmID0gZmFsc2U7XG5cdCAgfTtcblxuXHQgIE5vZGUucHJvdG90eXBlLnNldENoZWNrZWQgPSBmdW5jdGlvbiBzZXRDaGVja2VkKHZhbHVlLCBkZWVwLCByZWN1cnNpb24sIHBhc3NWYWx1ZSkge1xuXHQgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cblx0ICAgIHRoaXMuaW5kZXRlcm1pbmF0ZSA9IHZhbHVlID09PSAnaGFsZic7XG5cdCAgICB0aGlzLmNoZWNrZWQgPSB2YWx1ZSA9PT0gdHJ1ZTtcblxuXHQgICAgdmFyIF9nZXRDaGlsZFN0YXRlMiA9IGdldENoaWxkU3RhdGUodGhpcy5jaGlsZE5vZGVzKSxcblx0ICAgICAgICBhbGwgPSBfZ2V0Q2hpbGRTdGF0ZTIuYWxsLFxuXHQgICAgICAgIGFsbFdpdGhvdXREaXNhYmxlID0gX2dldENoaWxkU3RhdGUyLmFsbFdpdGhvdXREaXNhYmxlO1xuXG5cdCAgICBpZiAodGhpcy5jaGlsZE5vZGVzLmxlbmd0aCAmJiAhYWxsICYmIGFsbFdpdGhvdXREaXNhYmxlKSB7XG5cdCAgICAgIHRoaXMuY2hlY2tlZCA9IGZhbHNlO1xuXHQgICAgICB2YWx1ZSA9IGZhbHNlO1xuXHQgICAgfVxuXG5cdCAgICB2YXIgaGFuZGxlRGVzY2VuZGFudHMgPSBmdW5jdGlvbiBoYW5kbGVEZXNjZW5kYW50cyhsYXp5KSB7XG5cdCAgICAgIGlmIChkZWVwICYmICFsYXp5KSB7XG5cdCAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSBfdGhpczMuY2hpbGROb2Rlcztcblx0ICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG5cdCAgICAgICAgICB2YXIgY2hpbGQgPSBjaGlsZE5vZGVzW2ldO1xuXHQgICAgICAgICAgcGFzc1ZhbHVlID0gcGFzc1ZhbHVlIHx8IHZhbHVlICE9PSBmYWxzZTtcblx0ICAgICAgICAgIHZhciBpc0NoZWNrID0gY2hpbGQuZGlzYWJsZWQgPyBjaGlsZC5jaGVja2VkIDogcGFzc1ZhbHVlO1xuXHQgICAgICAgICAgY2hpbGQuc2V0Q2hlY2tlZChpc0NoZWNrLCBkZWVwLCB0cnVlLCBwYXNzVmFsdWUpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBfZ2V0Q2hpbGRTdGF0ZTMgPSBnZXRDaGlsZFN0YXRlKGNoaWxkTm9kZXMpLFxuXHQgICAgICAgICAgICBoYWxmID0gX2dldENoaWxkU3RhdGUzLmhhbGYsXG5cdCAgICAgICAgICAgIF9hbGwgPSBfZ2V0Q2hpbGRTdGF0ZTMuYWxsO1xuXG5cdCAgICAgICAgaWYgKCFfYWxsKSB7XG5cdCAgICAgICAgICBfdGhpczMuY2hlY2tlZCA9IF9hbGw7XG5cdCAgICAgICAgICBfdGhpczMuaW5kZXRlcm1pbmF0ZSA9IGhhbGY7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICBpZiAoIXRoaXMuc3RvcmUuY2hlY2tTdHJpY3RseSAmJiB0aGlzLnNob3VsZExvYWREYXRhKCkpIHtcblx0ICAgICAgLy8gT25seSB3b3JrIG9uIGxhenkgbG9hZCBkYXRhLlxuXHQgICAgICB0aGlzLmxvYWREYXRhKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBoYW5kbGVEZXNjZW5kYW50cyh0cnVlKTtcblx0ICAgICAgfSwge1xuXHQgICAgICAgIGNoZWNrZWQ6IHZhbHVlICE9PSBmYWxzZVxuXHQgICAgICB9KTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGhhbmRsZURlc2NlbmRhbnRzKCk7XG5cdCAgICB9XG5cblx0ICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblx0ICAgIGlmICghcGFyZW50IHx8IHBhcmVudC5sZXZlbCA9PT0gMCkgcmV0dXJuO1xuXG5cdCAgICBpZiAoIXRoaXMuc3RvcmUuY2hlY2tTdHJpY3RseSAmJiAhcmVjdXJzaW9uKSB7XG5cdCAgICAgIHJlSW5pdENoZWNrZWQocGFyZW50KTtcblx0ICAgIH1cblx0ICB9O1xuXG5cdCAgTm9kZS5wcm90b3R5cGUuZ2V0Q2hpbGRyZW4gPSBmdW5jdGlvbiBnZXRDaGlsZHJlbigpIHtcblx0ICAgIC8vIHRoaXMgaXMgZGF0YVxuXHQgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG5cdCAgICBpZiAoIWRhdGEpIHJldHVybiBudWxsO1xuXG5cdCAgICB2YXIgcHJvcHMgPSB0aGlzLnN0b3JlLnByb3BzO1xuXHQgICAgdmFyIGNoaWxkcmVuID0gJ2NoaWxkcmVuJztcblx0ICAgIGlmIChwcm9wcykge1xuXHQgICAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuIHx8ICdjaGlsZHJlbic7XG5cdCAgICB9XG5cblx0ICAgIGlmIChkYXRhW2NoaWxkcmVuXSA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgIGRhdGFbY2hpbGRyZW5dID0gbnVsbDtcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIGRhdGFbY2hpbGRyZW5dO1xuXHQgIH07XG5cblx0ICBOb2RlLnByb3RvdHlwZS51cGRhdGVDaGlsZHJlbiA9IGZ1bmN0aW9uIHVwZGF0ZUNoaWxkcmVuKCkge1xuXHQgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cblx0ICAgIHZhciBuZXdEYXRhID0gdGhpcy5nZXRDaGlsZHJlbigpIHx8IFtdO1xuXHQgICAgdmFyIG9sZERhdGEgPSB0aGlzLmNoaWxkTm9kZXMubWFwKGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgIHJldHVybiBub2RlLmRhdGE7XG5cdCAgICB9KTtcblxuXHQgICAgdmFyIG5ld0RhdGFNYXAgPSB7fTtcblx0ICAgIHZhciBuZXdOb2RlcyA9IFtdO1xuXG5cdCAgICBuZXdEYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG5cdCAgICAgIGlmIChpdGVtW191dGlsLk5PREVfS0VZXSkge1xuXHQgICAgICAgIG5ld0RhdGFNYXBbaXRlbVtfdXRpbC5OT0RFX0tFWV1dID0geyBpbmRleDogaW5kZXgsIGRhdGE6IGl0ZW0gfTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBuZXdOb2Rlcy5wdXNoKHsgaW5kZXg6IGluZGV4LCBkYXRhOiBpdGVtIH0pO1xuXHQgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgb2xkRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgIGlmICghbmV3RGF0YU1hcFtpdGVtW191dGlsLk5PREVfS0VZXV0pIF90aGlzNC5yZW1vdmVDaGlsZEJ5RGF0YShpdGVtKTtcblx0ICAgIH0pO1xuXG5cdCAgICBuZXdOb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG5cdCAgICAgIHZhciBpbmRleCA9IF9yZWYuaW5kZXgsXG5cdCAgICAgICAgICBkYXRhID0gX3JlZi5kYXRhO1xuXG5cdCAgICAgIF90aGlzNC5pbnNlcnRDaGlsZCh7IGRhdGE6IGRhdGEgfSwgaW5kZXgpO1xuXHQgICAgfSk7XG5cblx0ICAgIHRoaXMudXBkYXRlTGVhZlN0YXRlKCk7XG5cdCAgfTtcblxuXHQgIE5vZGUucHJvdG90eXBlLmxvYWREYXRhID0gZnVuY3Rpb24gbG9hZERhdGEoY2FsbGJhY2spIHtcblx0ICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG5cdCAgICB2YXIgZGVmYXVsdFByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuXHQgICAgaWYgKHRoaXMuc3RvcmUubGF6eSA9PT0gdHJ1ZSAmJiB0aGlzLnN0b3JlLmxvYWQgJiYgIXRoaXMubG9hZGVkICYmICghdGhpcy5sb2FkaW5nIHx8IE9iamVjdC5rZXlzKGRlZmF1bHRQcm9wcykubGVuZ3RoKSkge1xuXHQgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG5cdCAgICAgIHZhciByZXNvbHZlID0gZnVuY3Rpb24gcmVzb2x2ZShjaGlsZHJlbikge1xuXHQgICAgICAgIF90aGlzNS5sb2FkZWQgPSB0cnVlO1xuXHQgICAgICAgIF90aGlzNS5sb2FkaW5nID0gZmFsc2U7XG5cdCAgICAgICAgX3RoaXM1LmNoaWxkTm9kZXMgPSBbXTtcblxuXHQgICAgICAgIF90aGlzNS5kb0NyZWF0ZUNoaWxkcmVuKGNoaWxkcmVuLCBkZWZhdWx0UHJvcHMpO1xuXG5cdCAgICAgICAgX3RoaXM1LnVwZGF0ZUxlYWZTdGF0ZSgpO1xuXHQgICAgICAgIGlmIChjYWxsYmFjaykge1xuXHQgICAgICAgICAgY2FsbGJhY2suY2FsbChfdGhpczUsIGNoaWxkcmVuKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH07XG5cblx0ICAgICAgdGhpcy5zdG9yZS5sb2FkKHRoaXMsIHJlc29sdmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgaWYgKGNhbGxiYWNrKSB7XG5cdCAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH07XG5cblx0ICBfY3JlYXRlQ2xhc3MoTm9kZSwgW3tcblx0ICAgIGtleTogJ2xhYmVsJyxcblx0ICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuXHQgICAgICByZXR1cm4gZ2V0UHJvcGVydHlGcm9tRGF0YSh0aGlzLCAnbGFiZWwnKTtcblx0ICAgIH1cblx0ICB9LCB7XG5cdCAgICBrZXk6ICdpY29uJyxcblx0ICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuXHQgICAgICByZXR1cm4gZ2V0UHJvcGVydHlGcm9tRGF0YSh0aGlzLCAnaWNvbicpO1xuXHQgICAgfVxuXHQgIH0sIHtcblx0ICAgIGtleTogJ2tleScsXG5cdCAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcblx0ICAgICAgdmFyIG5vZGVLZXkgPSB0aGlzLnN0b3JlLmtleTtcblx0ICAgICAgaWYgKHRoaXMuZGF0YSkgcmV0dXJuIHRoaXMuZGF0YVtub2RlS2V5XTtcblx0ICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICB9XG5cdCAgfSwge1xuXHQgICAga2V5OiAnZGlzYWJsZWQnLFxuXHQgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG5cdCAgICAgIHJldHVybiBnZXRQcm9wZXJ0eUZyb21EYXRhKHRoaXMsICdkaXNhYmxlZCcpO1xuXHQgICAgfVxuXHQgIH1dKTtcblxuXHQgIHJldHVybiBOb2RlO1xuXHR9KCk7XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gTm9kZTtcblxuLyoqKi8gfSxcbi8qIDIzOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdHZhciBOT0RFX0tFWSA9IGV4cG9ydHMuTk9ERV9LRVkgPSAnJHRyZWVOb2RlSWQnO1xuXG5cdHZhciBtYXJrTm9kZURhdGEgPSBleHBvcnRzLm1hcmtOb2RlRGF0YSA9IGZ1bmN0aW9uIG1hcmtOb2RlRGF0YShub2RlLCBkYXRhKSB7XG5cdCAgaWYgKGRhdGFbTk9ERV9LRVldKSByZXR1cm47XG5cdCAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRhdGEsIE5PREVfS0VZLCB7XG5cdCAgICB2YWx1ZTogbm9kZS5pZCxcblx0ICAgIGVudW1lcmFibGU6IGZhbHNlLFxuXHQgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcblx0ICAgIHdyaXRhYmxlOiBmYWxzZVxuXHQgIH0pO1xuXHR9O1xuXG5cdHZhciBnZXROb2RlS2V5ID0gZXhwb3J0cy5nZXROb2RlS2V5ID0gZnVuY3Rpb24gZ2V0Tm9kZUtleShrZXksIGRhdGEpIHtcblx0ICBpZiAoIWtleSkgcmV0dXJuIGRhdGFbTk9ERV9LRVldO1xuXHQgIHJldHVybiBkYXRhW2tleV07XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyMzkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjQwKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjQxKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMjQwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2NvbGxhcHNlVHJhbnNpdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xuXG5cdHZhciBfY29sbGFwc2VUcmFuc2l0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NvbGxhcHNlVHJhbnNpdGlvbik7XG5cblx0dmFyIF9jaGVja2JveCA9IF9fd2VicGFja19yZXF1aXJlX18oMTMwKTtcblxuXHR2YXIgX2NoZWNrYm94MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NoZWNrYm94KTtcblxuXHR2YXIgX2VtaXR0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblxuXHR2YXIgX2VtaXR0ZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW1pdHRlcik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsVHJlZU5vZGUnLFxuXG5cdCAgY29tcG9uZW50TmFtZTogJ0VsVHJlZU5vZGUnLFxuXG5cdCAgbWl4aW5zOiBbX2VtaXR0ZXIyLmRlZmF1bHRdLFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIG5vZGU6IHtcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuIHt9O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcHJvcHM6IHt9LFxuXHQgICAgcmVuZGVyQ29udGVudDogRnVuY3Rpb25cblx0ICB9LFxuXG5cdCAgY29tcG9uZW50czoge1xuXHQgICAgRWxDb2xsYXBzZVRyYW5zaXRpb246IF9jb2xsYXBzZVRyYW5zaXRpb24yLmRlZmF1bHQsXG5cdCAgICBFbENoZWNrYm94OiBfY2hlY2tib3gyLmRlZmF1bHQsXG5cdCAgICBOb2RlQ29udGVudDoge1xuXHQgICAgICBwcm9wczoge1xuXHQgICAgICAgIG5vZGU6IHtcblx0ICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG5cdCAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcblx0ICAgICAgICB2YXIgbm9kZSA9IHRoaXMubm9kZTtcblx0ICAgICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YTtcblx0ICAgICAgICB2YXIgc3RvcmUgPSBub2RlLnN0b3JlO1xuXHQgICAgICAgIHJldHVybiBwYXJlbnQucmVuZGVyQ29udGVudCA/IHBhcmVudC5yZW5kZXJDb250ZW50LmNhbGwocGFyZW50Ll9yZW5kZXJQcm94eSwgaCwgeyBfc2VsZjogcGFyZW50LnRyZWUuJHZub2RlLmNvbnRleHQsIG5vZGU6IG5vZGUsIGRhdGE6IGRhdGEsIHN0b3JlOiBzdG9yZSB9KSA6IGgoXG5cdCAgICAgICAgICAnc3BhbicsXG5cdCAgICAgICAgICB7ICdjbGFzcyc6ICdlbC10cmVlLW5vZGVfX2xhYmVsJyB9LFxuXHQgICAgICAgICAgW3RoaXMubm9kZS5sYWJlbF1cblx0ICAgICAgICApO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICB0cmVlOiBudWxsLFxuXHQgICAgICBleHBhbmRlZDogZmFsc2UsXG5cdCAgICAgIGNoaWxkTm9kZVJlbmRlcmVkOiBmYWxzZSxcblx0ICAgICAgc2hvd0NoZWNrYm94OiBmYWxzZSxcblx0ICAgICAgb2xkQ2hlY2tlZDogbnVsbCxcblx0ICAgICAgb2xkSW5kZXRlcm1pbmF0ZTogbnVsbFxuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICB3YXRjaDoge1xuXHQgICAgJ25vZGUuaW5kZXRlcm1pbmF0ZSc6IGZ1bmN0aW9uIG5vZGVJbmRldGVybWluYXRlKHZhbCkge1xuXHQgICAgICB0aGlzLmhhbmRsZVNlbGVjdENoYW5nZSh0aGlzLm5vZGUuY2hlY2tlZCwgdmFsKTtcblx0ICAgIH0sXG5cdCAgICAnbm9kZS5jaGVja2VkJzogZnVuY3Rpb24gbm9kZUNoZWNrZWQodmFsKSB7XG5cdCAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Q2hhbmdlKHZhbCwgdGhpcy5ub2RlLmluZGV0ZXJtaW5hdGUpO1xuXHQgICAgfSxcblx0ICAgICdub2RlLmV4cGFuZGVkJzogZnVuY3Rpb24gbm9kZUV4cGFuZGVkKHZhbCkge1xuXHQgICAgICB0aGlzLmV4cGFuZGVkID0gdmFsO1xuXHQgICAgICBpZiAodmFsKSB7XG5cdCAgICAgICAgdGhpcy5jaGlsZE5vZGVSZW5kZXJlZCA9IHRydWU7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgZ2V0Tm9kZUtleTogZnVuY3Rpb24gZ2V0Tm9kZUtleShub2RlLCBpbmRleCkge1xuXHQgICAgICB2YXIgbm9kZUtleSA9IHRoaXMudHJlZS5ub2RlS2V5O1xuXHQgICAgICBpZiAobm9kZUtleSAmJiBub2RlKSB7XG5cdCAgICAgICAgcmV0dXJuIG5vZGUuZGF0YVtub2RlS2V5XTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gaW5kZXg7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlU2VsZWN0Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVTZWxlY3RDaGFuZ2UoY2hlY2tlZCwgaW5kZXRlcm1pbmF0ZSkge1xuXHQgICAgICBpZiAodGhpcy5vbGRDaGVja2VkICE9PSBjaGVja2VkICYmIHRoaXMub2xkSW5kZXRlcm1pbmF0ZSAhPT0gaW5kZXRlcm1pbmF0ZSkge1xuXHQgICAgICAgIHRoaXMudHJlZS4kZW1pdCgnY2hlY2stY2hhbmdlJywgdGhpcy5ub2RlLmRhdGEsIGNoZWNrZWQsIGluZGV0ZXJtaW5hdGUpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMub2xkQ2hlY2tlZCA9IGNoZWNrZWQ7XG5cdCAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKCkge1xuXHQgICAgICB2YXIgc3RvcmUgPSB0aGlzLnRyZWUuc3RvcmU7XG5cdCAgICAgIHN0b3JlLnNldEN1cnJlbnROb2RlKHRoaXMubm9kZSk7XG5cdCAgICAgIHRoaXMudHJlZS4kZW1pdCgnY3VycmVudC1jaGFuZ2UnLCBzdG9yZS5jdXJyZW50Tm9kZSA/IHN0b3JlLmN1cnJlbnROb2RlLmRhdGEgOiBudWxsLCBzdG9yZS5jdXJyZW50Tm9kZSk7XG5cdCAgICAgIHRoaXMudHJlZS5jdXJyZW50Tm9kZSA9IHRoaXM7XG5cdCAgICAgIGlmICh0aGlzLnRyZWUuZXhwYW5kT25DbGlja05vZGUpIHtcblx0ICAgICAgICB0aGlzLmhhbmRsZUV4cGFuZEljb25DbGljaygpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMudHJlZS4kZW1pdCgnbm9kZS1jbGljaycsIHRoaXMubm9kZS5kYXRhLCB0aGlzLm5vZGUsIHRoaXMpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUV4cGFuZEljb25DbGljazogZnVuY3Rpb24gaGFuZGxlRXhwYW5kSWNvbkNsaWNrKCkge1xuXHQgICAgICBpZiAodGhpcy5ub2RlLmlzTGVhZikgcmV0dXJuO1xuXHQgICAgICBpZiAodGhpcy5leHBhbmRlZCkge1xuXHQgICAgICAgIHRoaXMudHJlZS4kZW1pdCgnbm9kZS1jb2xsYXBzZScsIHRoaXMubm9kZS5kYXRhLCB0aGlzLm5vZGUsIHRoaXMpO1xuXHQgICAgICAgIHRoaXMubm9kZS5jb2xsYXBzZSgpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMubm9kZS5leHBhbmQoKTtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdub2RlLWV4cGFuZCcsIHRoaXMubm9kZS5kYXRhLCB0aGlzLm5vZGUsIHRoaXMpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQ2hlY2tDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoZWNrQ2hhbmdlKGV2KSB7XG5cdCAgICAgIHRoaXMubm9kZS5zZXRDaGVja2VkKGV2LnRhcmdldC5jaGVja2VkLCAhdGhpcy50cmVlLmNoZWNrU3RyaWN0bHkpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUNoaWxkTm9kZUV4cGFuZDogZnVuY3Rpb24gaGFuZGxlQ2hpbGROb2RlRXhwYW5kKG5vZGVEYXRhLCBub2RlLCBpbnN0YW5jZSkge1xuXHQgICAgICB0aGlzLmJyb2FkY2FzdCgnRWxUcmVlTm9kZScsICd0cmVlLW5vZGUtZXhwYW5kJywgbm9kZSk7XG5cdCAgICAgIHRoaXMudHJlZS4kZW1pdCgnbm9kZS1leHBhbmQnLCBub2RlRGF0YSwgbm9kZSwgaW5zdGFuY2UpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcblxuXHQgICAgaWYgKHBhcmVudC5pc1RyZWUpIHtcblx0ICAgICAgdGhpcy50cmVlID0gcGFyZW50O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdGhpcy50cmVlID0gcGFyZW50LnRyZWU7XG5cdCAgICB9XG5cblx0ICAgIHZhciB0cmVlID0gdGhpcy50cmVlO1xuXHQgICAgaWYgKCF0cmVlKSB7XG5cdCAgICAgIGNvbnNvbGUud2FybignQ2FuIG5vdCBmaW5kIG5vZGVcXCdzIHRyZWUuJyk7XG5cdCAgICB9XG5cblx0ICAgIHZhciBwcm9wcyA9IHRyZWUucHJvcHMgfHwge307XG5cdCAgICB2YXIgY2hpbGRyZW5LZXkgPSBwcm9wc1snY2hpbGRyZW4nXSB8fCAnY2hpbGRyZW4nO1xuXG5cdCAgICB0aGlzLiR3YXRjaCgnbm9kZS5kYXRhLicgKyBjaGlsZHJlbktleSwgZnVuY3Rpb24gKCkge1xuXHQgICAgICBfdGhpcy5ub2RlLnVwZGF0ZUNoaWxkcmVuKCk7XG5cdCAgICB9KTtcblxuXHQgICAgdGhpcy5zaG93Q2hlY2tib3ggPSB0cmVlLnNob3dDaGVja2JveDtcblxuXHQgICAgaWYgKHRoaXMubm9kZS5leHBhbmRlZCkge1xuXHQgICAgICB0aGlzLmV4cGFuZGVkID0gdHJ1ZTtcblx0ICAgICAgdGhpcy5jaGlsZE5vZGVSZW5kZXJlZCA9IHRydWU7XG5cdCAgICB9XG5cblx0ICAgIGlmICh0aGlzLnRyZWUuYWNjb3JkaW9uKSB7XG5cdCAgICAgIHRoaXMuJG9uKCd0cmVlLW5vZGUtZXhwYW5kJywgZnVuY3Rpb24gKG5vZGUpIHtcblx0ICAgICAgICBpZiAoX3RoaXMubm9kZSAhPT0gbm9kZSkge1xuXHQgICAgICAgICAgX3RoaXMubm9kZS5jb2xsYXBzZSgpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICB9XG5cdCAgfVxuXHR9OyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG4vKioqLyB9LFxuLyogMjQxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnZGl2Jywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLm5vZGUudmlzaWJsZSksXG5cdCAgICAgIGV4cHJlc3Npb246IFwibm9kZS52aXNpYmxlXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJlZS1ub2RlXCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaXMtZXhwYW5kZWQnOiBfdm0uY2hpbGROb2RlUmVuZGVyZWQgJiYgX3ZtLmV4cGFuZGVkLFxuXHQgICAgICAgICdpcy1jdXJyZW50JzogX3ZtLnRyZWUuc3RvcmUuY3VycmVudE5vZGUgPT09IF92bS5ub2RlLFxuXHQgICAgICAgICdpcy1oaWRkZW4nOiAhX3ZtLm5vZGUudmlzaWJsZVxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICAgIF92bS5oYW5kbGVDbGljaygkZXZlbnQpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LCBbX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRyZWUtbm9kZV9fY29udGVudFwiLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgICdwYWRkaW5nLWxlZnQnOiAoX3ZtLm5vZGUubGV2ZWwgLSAxKSAqIF92bS50cmVlLmluZGVudCArICdweCdcblx0ICAgIH0pXG5cdCAgfSwgW19jKCdzcGFuJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvblwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2lzLWxlYWYnOiBfdm0ubm9kZS5pc0xlYWYsIGV4cGFuZGVkOiAhX3ZtLm5vZGUuaXNMZWFmICYmIF92bS5leHBhbmRlZFxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICAgIF92bS5oYW5kbGVFeHBhbmRJY29uQ2xpY2soJGV2ZW50KVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSksIChfdm0uc2hvd0NoZWNrYm94KSA/IF9jKCdlbC1jaGVja2JveCcsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwiaW5kZXRlcm1pbmF0ZVwiOiBfdm0ubm9kZS5pbmRldGVybWluYXRlLFxuXHQgICAgICBcImRpc2FibGVkXCI6ICEhX3ZtLm5vZGUuZGlzYWJsZWRcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNoYW5nZVwiOiBfdm0uaGFuZGxlQ2hlY2tDaGFuZ2Vcblx0ICAgIH0sXG5cdCAgICBuYXRpdmVPbjoge1xuXHQgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1vZGVsOiB7XG5cdCAgICAgIHZhbHVlOiAoX3ZtLm5vZGUuY2hlY2tlZCksXG5cdCAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcblx0ICAgICAgICBfdm0ubm9kZS5jaGVja2VkID0gJCR2XG5cdCAgICAgIH0sXG5cdCAgICAgIGV4cHJlc3Npb246IFwibm9kZS5jaGVja2VkXCJcblx0ICAgIH1cblx0ICB9KSA6IF92bS5fZSgpLCAoX3ZtLm5vZGUubG9hZGluZykgPyBfYygnc3BhbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRyZWUtbm9kZV9fbG9hZGluZy1pY29uIGVsLWljb24tbG9hZGluZ1wiXG5cdCAgfSkgOiBfdm0uX2UoKSwgX2MoJ25vZGUtY29udGVudCcsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwibm9kZVwiOiBfdm0ubm9kZVxuXHQgICAgfVxuXHQgIH0pXSwgMSksIF9jKCdlbC1jb2xsYXBzZS10cmFuc2l0aW9uJywgW19jKCdkaXYnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0uZXhwYW5kZWQpLFxuXHQgICAgICBleHByZXNzaW9uOiBcImV4cGFuZGVkXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJlZS1ub2RlX19jaGlsZHJlblwiXG5cdCAgfSwgX3ZtLl9sKChfdm0ubm9kZS5jaGlsZE5vZGVzKSwgZnVuY3Rpb24oY2hpbGQpIHtcblx0ICAgIHJldHVybiBfYygnZWwtdHJlZS1ub2RlJywge1xuXHQgICAgICBrZXk6IF92bS5nZXROb2RlS2V5KGNoaWxkKSxcblx0ICAgICAgYXR0cnM6IHtcblx0ICAgICAgICBcInJlbmRlci1jb250ZW50XCI6IF92bS5yZW5kZXJDb250ZW50LFxuXHQgICAgICAgIFwibm9kZVwiOiBjaGlsZFxuXHQgICAgICB9LFxuXHQgICAgICBvbjoge1xuXHQgICAgICAgIFwibm9kZS1leHBhbmRcIjogX3ZtLmhhbmRsZUNoaWxkTm9kZUV4cGFuZFxuXHQgICAgICB9XG5cdCAgICB9KVxuXHQgIH0pKV0pXSwgMSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMjQyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJlZVwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2VsLXRyZWUtLWhpZ2hsaWdodC1jdXJyZW50JzogX3ZtLmhpZ2hsaWdodEN1cnJlbnRcblx0ICAgIH1cblx0ICB9LCBbX3ZtLl9sKChfdm0ucm9vdC5jaGlsZE5vZGVzKSwgZnVuY3Rpb24oY2hpbGQpIHtcblx0ICAgIHJldHVybiBfYygnZWwtdHJlZS1ub2RlJywge1xuXHQgICAgICBrZXk6IF92bS5nZXROb2RlS2V5KGNoaWxkKSxcblx0ICAgICAgYXR0cnM6IHtcblx0ICAgICAgICBcIm5vZGVcIjogY2hpbGQsXG5cdCAgICAgICAgXCJwcm9wc1wiOiBfdm0ucHJvcHMsXG5cdCAgICAgICAgXCJyZW5kZXItY29udGVudFwiOiBfdm0ucmVuZGVyQ29udGVudFxuXHQgICAgICB9LFxuXHQgICAgICBvbjoge1xuXHQgICAgICAgIFwibm9kZS1leHBhbmRcIjogX3ZtLmhhbmRsZU5vZGVFeHBhbmRcblx0ICAgICAgfVxuXHQgICAgfSlcblx0ICB9KSwgKCFfdm0ucm9vdC5jaGlsZE5vZGVzIHx8IF92bS5yb290LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSA/IF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10cmVlX19lbXB0eS1ibG9ja1wiXG5cdCAgfSwgW19jKCdzcGFuJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJlZV9fZW1wdHktdGV4dFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLmVtcHR5VGV4dCkpXSldKSA6IF92bS5fZSgpXSwgMilcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMjQzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX21haW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NCk7XG5cblx0dmFyIF9tYWluMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21haW4pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X21haW4yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9tYWluMi5kZWZhdWx0Lm5hbWUsIF9tYWluMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfbWFpbjIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDI0NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNDUpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNDYpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAyNDUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdHZhciBUWVBFX0NMQVNTRVNfTUFQID0ge1xuXHQgICdzdWNjZXNzJzogJ2VsLWljb24tY2lyY2xlLWNoZWNrJyxcblx0ICAnd2FybmluZyc6ICdlbC1pY29uLXdhcm5pbmcnLFxuXHQgICdlcnJvcic6ICdlbC1pY29uLWNpcmNsZS1jcm9zcydcblx0fTtcblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbEFsZXJ0JyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICB0aXRsZToge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICcnLFxuXHQgICAgICByZXF1aXJlZDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIGRlc2NyaXB0aW9uOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJydcblx0ICAgIH0sXG5cdCAgICB0eXBlOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2luZm8nXG5cdCAgICB9LFxuXHQgICAgY2xvc2FibGU6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIGNsb3NlVGV4dDoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICcnXG5cdCAgICB9LFxuXHQgICAgc2hvd0ljb246IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogZmFsc2Vcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHZpc2libGU6IHRydWVcblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuXHQgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcblx0ICAgICAgdGhpcy4kZW1pdCgnY2xvc2UnKTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIHR5cGVDbGFzczogZnVuY3Rpb24gdHlwZUNsYXNzKCkge1xuXHQgICAgICByZXR1cm4gJ2VsLWFsZXJ0LS0nICsgdGhpcy50eXBlO1xuXHQgICAgfSxcblx0ICAgIGljb25DbGFzczogZnVuY3Rpb24gaWNvbkNsYXNzKCkge1xuXHQgICAgICByZXR1cm4gVFlQRV9DTEFTU0VTX01BUFt0aGlzLnR5cGVdIHx8ICdlbC1pY29uLWluZm9ybWF0aW9uJztcblx0ICAgIH0sXG5cdCAgICBpc0JpZ0ljb246IGZ1bmN0aW9uIGlzQmlnSWNvbigpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb24gfHwgdGhpcy4kc2xvdHMuZGVmYXVsdCA/ICdpcy1iaWcnIDogJyc7XG5cdCAgICB9LFxuXHQgICAgaXNCb2xkVGl0bGU6IGZ1bmN0aW9uIGlzQm9sZFRpdGxlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5kZXNjcmlwdGlvbiB8fCB0aGlzLiRzbG90cy5kZWZhdWx0ID8gJ2lzLWJvbGQnIDogJyc7XG5cdCAgICB9XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMjQ2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygndHJhbnNpdGlvbicsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwibmFtZVwiOiBcImVsLWFsZXJ0LWZhZGVcIlxuXHQgICAgfVxuXHQgIH0sIFtfYygnZGl2Jywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLnZpc2libGUpLFxuXHQgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1hbGVydFwiLFxuXHQgICAgY2xhc3M6IFtfdm0udHlwZUNsYXNzXVxuXHQgIH0sIFsoX3ZtLnNob3dJY29uKSA/IF9jKCdpJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtYWxlcnRfX2ljb25cIixcblx0ICAgIGNsYXNzOiBbX3ZtLmljb25DbGFzcywgX3ZtLmlzQmlnSWNvbl1cblx0ICB9KSA6IF92bS5fZSgpLCBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtYWxlcnRfX2NvbnRlbnRcIlxuXHQgIH0sIFsoX3ZtLnRpdGxlKSA/IF9jKCdzcGFuJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtYWxlcnRfX3RpdGxlXCIsXG5cdCAgICBjbGFzczogW192bS5pc0JvbGRUaXRsZV1cblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKV0pIDogX3ZtLl9lKCksIF92bS5fdChcImRlZmF1bHRcIiwgWyhfdm0uZGVzY3JpcHRpb24pID8gX2MoJ3AnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1hbGVydF9fZGVzY3JpcHRpb25cIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS5kZXNjcmlwdGlvbikpXSkgOiBfdm0uX2UoKV0pLCBfYygnaScsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5jbG9zYWJsZSksXG5cdCAgICAgIGV4cHJlc3Npb246IFwiY2xvc2FibGVcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1hbGVydF9fY2xvc2VidG5cIixcblx0ICAgIGNsYXNzOiB7XG5cdCAgICAgICdpcy1jdXN0b21lZCc6IF92bS5jbG9zZVRleHQgIT09ICcnLCAnZWwtaWNvbi1jbG9zZSc6IF92bS5jbG9zZVRleHQgPT09ICcnXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uY2xvc2UoKVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLmNsb3NlVGV4dCkpXSldLCAyKV0pXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMjQ3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX21haW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0OCk7XG5cblx0dmFyIF9tYWluMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21haW4pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX21haW4yLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAyNDggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfdnVlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xuXG5cdHZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZSk7XG5cblx0dmFyIF9wb3B1cCA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xuXG5cdHZhciBfdmRvbSA9IF9fd2VicGFja19yZXF1aXJlX18oMTk0KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdHZhciBOb3RpZmljYXRpb25Db25zdHJ1Y3RvciA9IF92dWUyLmRlZmF1bHQuZXh0ZW5kKF9fd2VicGFja19yZXF1aXJlX18oMjQ5KSk7XG5cblx0dmFyIGluc3RhbmNlID0gdm9pZCAwO1xuXHR2YXIgaW5zdGFuY2VzID0gW107XG5cdHZhciBzZWVkID0gMTtcblxuXHR2YXIgTm90aWZpY2F0aW9uID0gZnVuY3Rpb24gTm90aWZpY2F0aW9uKG9wdGlvbnMpIHtcblx0ICBpZiAoX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm47XG5cdCAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdCAgdmFyIHVzZXJPbkNsb3NlID0gb3B0aW9ucy5vbkNsb3NlO1xuXHQgIHZhciBpZCA9ICdub3RpZmljYXRpb25fJyArIHNlZWQrKztcblxuXHQgIG9wdGlvbnMub25DbG9zZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgIE5vdGlmaWNhdGlvbi5jbG9zZShpZCwgdXNlck9uQ2xvc2UpO1xuXHQgIH07XG5cblx0ICBpbnN0YW5jZSA9IG5ldyBOb3RpZmljYXRpb25Db25zdHJ1Y3Rvcih7XG5cdCAgICBkYXRhOiBvcHRpb25zXG5cdCAgfSk7XG5cblx0ICBpZiAoKDAsIF92ZG9tLmlzVk5vZGUpKG9wdGlvbnMubWVzc2FnZSkpIHtcblx0ICAgIGluc3RhbmNlLiRzbG90cy5kZWZhdWx0ID0gW29wdGlvbnMubWVzc2FnZV07XG5cdCAgICBvcHRpb25zLm1lc3NhZ2UgPSAnJztcblx0ICB9XG5cdCAgaW5zdGFuY2UuaWQgPSBpZDtcblx0ICBpbnN0YW5jZS52bSA9IGluc3RhbmNlLiRtb3VudCgpO1xuXHQgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW5zdGFuY2Uudm0uJGVsKTtcblx0ICBpbnN0YW5jZS52bS52aXNpYmxlID0gdHJ1ZTtcblx0ICBpbnN0YW5jZS5kb20gPSBpbnN0YW5jZS52bS4kZWw7XG5cdCAgaW5zdGFuY2UuZG9tLnN0eWxlLnpJbmRleCA9IF9wb3B1cC5Qb3B1cE1hbmFnZXIubmV4dFpJbmRleCgpO1xuXG5cdCAgdmFyIG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0IHx8IDA7XG5cdCAgdmFyIHRvcERpc3QgPSBvZmZzZXQ7XG5cdCAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGluc3RhbmNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHQgICAgdG9wRGlzdCArPSBpbnN0YW5jZXNbaV0uJGVsLm9mZnNldEhlaWdodCArIDE2O1xuXHQgIH1cblx0ICB0b3BEaXN0ICs9IDE2O1xuXHQgIGluc3RhbmNlLnRvcCA9IHRvcERpc3Q7XG5cdCAgaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuXHQgIHJldHVybiBpbnN0YW5jZS52bTtcblx0fTtcblxuXHRbJ3N1Y2Nlc3MnLCAnd2FybmluZycsICdpbmZvJywgJ2Vycm9yJ10uZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuXHQgIE5vdGlmaWNhdGlvblt0eXBlXSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnIHx8ICgwLCBfdmRvbS5pc1ZOb2RlKShvcHRpb25zKSkge1xuXHQgICAgICBvcHRpb25zID0ge1xuXHQgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnNcblx0ICAgICAgfTtcblx0ICAgIH1cblx0ICAgIG9wdGlvbnMudHlwZSA9IHR5cGU7XG5cdCAgICByZXR1cm4gTm90aWZpY2F0aW9uKG9wdGlvbnMpO1xuXHQgIH07XG5cdH0pO1xuXG5cdE5vdGlmaWNhdGlvbi5jbG9zZSA9IGZ1bmN0aW9uIChpZCwgdXNlck9uQ2xvc2UpIHtcblx0ICB2YXIgaW5kZXggPSB2b2lkIDA7XG5cdCAgdmFyIHJlbW92ZWRIZWlnaHQgPSB2b2lkIDA7XG5cdCAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGluc3RhbmNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHQgICAgaWYgKGlkID09PSBpbnN0YW5jZXNbaV0uaWQpIHtcblx0ICAgICAgaWYgKHR5cGVvZiB1c2VyT25DbG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgIHVzZXJPbkNsb3NlKGluc3RhbmNlc1tpXSk7XG5cdCAgICAgIH1cblx0ICAgICAgaW5kZXggPSBpO1xuXHQgICAgICByZW1vdmVkSGVpZ2h0ID0gaW5zdGFuY2VzW2ldLmRvbS5vZmZzZXRIZWlnaHQ7XG5cdCAgICAgIGluc3RhbmNlcy5zcGxpY2UoaSwgMSk7XG5cdCAgICAgIGJyZWFrO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGlmIChsZW4gPiAxKSB7XG5cdCAgICBmb3IgKGkgPSBpbmRleDsgaSA8IGxlbiAtIDE7IGkrKykge1xuXHQgICAgICBpbnN0YW5jZXNbaV0uZG9tLnN0eWxlLnRvcCA9IHBhcnNlSW50KGluc3RhbmNlc1tpXS5kb20uc3R5bGUudG9wLCAxMCkgLSByZW1vdmVkSGVpZ2h0IC0gMTYgKyAncHgnO1xuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBOb3RpZmljYXRpb247XG5cbi8qKiovIH0sXG4vKiAyNDkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjUwKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjUxKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMjUwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHR2YXIgdHlwZU1hcCA9IHtcblx0ICBzdWNjZXNzOiAnY2lyY2xlLWNoZWNrJyxcblx0ICBpbmZvOiAnaW5mb3JtYXRpb24nLFxuXHQgIHdhcm5pbmc6ICd3YXJuaW5nJyxcblx0ICBlcnJvcjogJ2NpcmNsZS1jcm9zcydcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHZpc2libGU6IGZhbHNlLFxuXHQgICAgICB0aXRsZTogJycsXG5cdCAgICAgIG1lc3NhZ2U6ICcnLFxuXHQgICAgICBkdXJhdGlvbjogNDUwMCxcblx0ICAgICAgdHlwZTogJycsXG5cdCAgICAgIGN1c3RvbUNsYXNzOiAnJyxcblx0ICAgICAgaWNvbkNsYXNzOiAnJyxcblx0ICAgICAgb25DbG9zZTogbnVsbCxcblx0ICAgICAgb25DbGljazogbnVsbCxcblx0ICAgICAgY2xvc2VkOiBmYWxzZSxcblx0ICAgICAgdG9wOiBudWxsLFxuXHQgICAgICB0aW1lcjogbnVsbFxuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgdHlwZUNsYXNzOiBmdW5jdGlvbiB0eXBlQ2xhc3MoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnR5cGUgJiYgdHlwZU1hcFt0aGlzLnR5cGVdID8gJ2VsLWljb24tJyArIHR5cGVNYXBbdGhpcy50eXBlXSA6ICcnO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICB3YXRjaDoge1xuXHQgICAgY2xvc2VkOiBmdW5jdGlvbiBjbG9zZWQobmV3VmFsKSB7XG5cdCAgICAgIGlmIChuZXdWYWwpIHtcblx0ICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLiRlbC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgdGhpcy5kZXN0cm95RWxlbWVudCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgZGVzdHJveUVsZW1lbnQ6IGZ1bmN0aW9uIGRlc3Ryb3lFbGVtZW50KCkge1xuXHQgICAgICB0aGlzLiRlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgdGhpcy5kZXN0cm95RWxlbWVudCk7XG5cdCAgICAgIHRoaXMuJGRlc3Ryb3kodHJ1ZSk7XG5cdCAgICAgIHRoaXMuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWwpO1xuXHQgICAgfSxcblx0ICAgIGNsaWNrOiBmdW5jdGlvbiBjbGljaygpIHtcblx0ICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICB0aGlzLm9uQ2xpY2soKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSgpIHtcblx0ICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXHQgICAgICBpZiAodHlwZW9mIHRoaXMub25DbG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgIHRoaXMub25DbG9zZSgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY2xlYXJUaW1lcjogZnVuY3Rpb24gY2xlYXJUaW1lcigpIHtcblx0ICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuXHQgICAgfSxcblx0ICAgIHN0YXJ0VGltZXI6IGZ1bmN0aW9uIHN0YXJ0VGltZXIoKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgaWYgKHRoaXMuZHVyYXRpb24gPiAwKSB7XG5cdCAgICAgICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgaWYgKCFfdGhpcy5jbG9zZWQpIHtcblx0ICAgICAgICAgICAgX3RoaXMuY2xvc2UoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9LCB0aGlzLmR1cmF0aW9uKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cblx0ICAgIGlmICh0aGlzLmR1cmF0aW9uID4gMCkge1xuXHQgICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgaWYgKCFfdGhpczIuY2xvc2VkKSB7XG5cdCAgICAgICAgICBfdGhpczIuY2xvc2UoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0sIHRoaXMuZHVyYXRpb24pO1xuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDI1MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ3RyYW5zaXRpb24nLCB7XG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcIm5hbWVcIjogXCJlbC1ub3RpZmljYXRpb24tZmFkZVwiXG5cdCAgICB9XG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0udmlzaWJsZSksXG5cdCAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLW5vdGlmaWNhdGlvblwiLFxuXHQgICAgY2xhc3M6IF92bS5jdXN0b21DbGFzcyxcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICB0b3A6IF92bS50b3AgPyBfdm0udG9wICsgJ3B4JyA6ICdhdXRvJ1xuXHQgICAgfSksXG5cdCAgICBvbjoge1xuXHQgICAgICBcIm1vdXNlZW50ZXJcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmNsZWFyVGltZXIoKVxuXHQgICAgICB9LFxuXHQgICAgICBcIm1vdXNlbGVhdmVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLnN0YXJ0VGltZXIoKVxuXHQgICAgICB9LFxuXHQgICAgICBcImNsaWNrXCI6IF92bS5jbGlja1xuXHQgICAgfVxuXHQgIH0sIFsoX3ZtLnR5cGUgfHwgX3ZtLmljb25DbGFzcykgPyBfYygnaScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLW5vdGlmaWNhdGlvbl9faWNvblwiLFxuXHQgICAgY2xhc3M6IFtfdm0udHlwZUNsYXNzLCBfdm0uaWNvbkNsYXNzXVxuXHQgIH0pIDogX3ZtLl9lKCksIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1ub3RpZmljYXRpb25fX2dyb3VwXCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaXMtd2l0aC1pY29uJzogX3ZtLnR5cGVDbGFzcyB8fCBfdm0uaWNvbkNsYXNzXG5cdCAgICB9XG5cdCAgfSwgW19jKCdoMicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLW5vdGlmaWNhdGlvbl9fdGl0bGVcIixcblx0ICAgIGRvbVByb3BzOiB7XG5cdCAgICAgIFwidGV4dENvbnRlbnRcIjogX3ZtLl9zKF92bS50aXRsZSlcblx0ICAgIH1cblx0ICB9KSwgX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLW5vdGlmaWNhdGlvbl9fY29udGVudFwiXG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIiwgW192bS5fdihfdm0uX3MoX3ZtLm1lc3NhZ2UpKV0pXSwgMiksIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1ub3RpZmljYXRpb25fX2Nsb3NlQnRuIGVsLWljb24tY2xvc2VcIixcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICAgIF92bS5jbG9zZSgkZXZlbnQpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KV0pXSldKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAyNTIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfbWFpbiA9IF9fd2VicGFja19yZXF1aXJlX18oMjUzKTtcblxuXHR2YXIgX21haW4yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWFpbik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfbWFpbjIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX21haW4yLmRlZmF1bHQubmFtZSwgX21haW4yLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9tYWluMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogMjUzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1NCksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1OSksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDI1NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9pbnB1dE51bWJlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjU1KTtcblxuXHR2YXIgX2lucHV0TnVtYmVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lucHV0TnVtYmVyKTtcblxuXHR2YXIgX2J1dHRvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMjU2KTtcblxuXHR2YXIgX2J1dHRvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9idXR0b24pO1xuXG5cdHZhciBfZW1pdHRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xuXG5cdHZhciBfZW1pdHRlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbWl0dGVyKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxTbGlkZXInLFxuXG5cdCAgbWl4aW5zOiBbX2VtaXR0ZXIyLmRlZmF1bHRdLFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIG1pbjoge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDBcblx0ICAgIH0sXG5cdCAgICBtYXg6IHtcblx0ICAgICAgdHlwZTogTnVtYmVyLFxuXHQgICAgICBkZWZhdWx0OiAxMDBcblx0ICAgIH0sXG5cdCAgICBzdGVwOiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogMVxuXHQgICAgfSxcblx0ICAgIHZhbHVlOiB7XG5cdCAgICAgIHR5cGU6IFtOdW1iZXIsIEFycmF5XSxcblx0ICAgICAgZGVmYXVsdDogMFxuXHQgICAgfSxcblx0ICAgIHNob3dJbnB1dDoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiBmYWxzZVxuXHQgICAgfSxcblx0ICAgIHNob3dJbnB1dENvbnRyb2xzOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IHRydWVcblx0ICAgIH0sXG5cdCAgICBzaG93U3RvcHM6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogZmFsc2Vcblx0ICAgIH0sXG5cdCAgICBzaG93VG9vbHRpcDoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXHQgICAgZm9ybWF0VG9vbHRpcDogRnVuY3Rpb24sXG5cdCAgICBkaXNhYmxlZDoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiBmYWxzZVxuXHQgICAgfSxcblx0ICAgIHJhbmdlOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IGZhbHNlXG5cdCAgICB9LFxuXHQgICAgdmVydGljYWw6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogZmFsc2Vcblx0ICAgIH0sXG5cdCAgICBoZWlnaHQ6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nXG5cdCAgICB9LFxuXHQgICAgZGVib3VuY2U6IHtcblx0ICAgICAgdHlwZTogTnVtYmVyLFxuXHQgICAgICBkZWZhdWx0OiAzMDBcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY29tcG9uZW50czoge1xuXHQgICAgRWxJbnB1dE51bWJlcjogX2lucHV0TnVtYmVyMi5kZWZhdWx0LFxuXHQgICAgU2xpZGVyQnV0dG9uOiBfYnV0dG9uMi5kZWZhdWx0XG5cdCAgfSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBmaXJzdFZhbHVlOiBudWxsLFxuXHQgICAgICBzZWNvbmRWYWx1ZTogbnVsbCxcblx0ICAgICAgb2xkVmFsdWU6IG51bGwsXG5cdCAgICAgIGRyYWdnaW5nOiBmYWxzZSxcblx0ICAgICAgc2xpZGVyU2l6ZTogMVxuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICB3YXRjaDoge1xuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHZhbCwgb2xkVmFsKSB7XG5cdCAgICAgIGlmICh0aGlzLmRyYWdnaW5nIHx8IEFycmF5LmlzQXJyYXkodmFsKSAmJiBBcnJheS5pc0FycmF5KG9sZFZhbCkgJiYgdmFsLmV2ZXJ5KGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuXHQgICAgICAgIHJldHVybiBpdGVtID09PSBvbGRWYWxbaW5kZXhdO1xuXHQgICAgICB9KSkge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLnNldFZhbHVlcygpO1xuXHQgICAgfSxcblx0ICAgIGRyYWdnaW5nOiBmdW5jdGlvbiBkcmFnZ2luZyh2YWwpIHtcblx0ICAgICAgaWYgKCF2YWwpIHtcblx0ICAgICAgICB0aGlzLnNldFZhbHVlcygpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZmlyc3RWYWx1ZTogZnVuY3Rpb24gZmlyc3RWYWx1ZSh2YWwpIHtcblx0ICAgICAgaWYgKHRoaXMucmFuZ2UpIHtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIFt0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlXSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2Vjb25kVmFsdWU6IGZ1bmN0aW9uIHNlY29uZFZhbHVlKCkge1xuXHQgICAgICBpZiAodGhpcy5yYW5nZSkge1xuXHQgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgW3RoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWVdKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1pbjogZnVuY3Rpb24gbWluKCkge1xuXHQgICAgICB0aGlzLnNldFZhbHVlcygpO1xuXHQgICAgfSxcblx0ICAgIG1heDogZnVuY3Rpb24gbWF4KCkge1xuXHQgICAgICB0aGlzLnNldFZhbHVlcygpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICB2YWx1ZUNoYW5nZWQ6IGZ1bmN0aW9uIHZhbHVlQ2hhbmdlZCgpIHtcblx0ICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgICBpZiAodGhpcy5yYW5nZSkge1xuXHQgICAgICAgIHJldHVybiAhW3RoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWVdLmV2ZXJ5KGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuXHQgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IF90aGlzLm9sZFZhbHVlW2luZGV4XTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gdGhpcy5vbGRWYWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNldFZhbHVlczogZnVuY3Rpb24gc2V0VmFsdWVzKCkge1xuXHQgICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcblx0ICAgICAgaWYgKHRoaXMucmFuZ2UgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7XG5cdCAgICAgICAgaWYgKHZhbFsxXSA8IHRoaXMubWluKSB7XG5cdCAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIFt0aGlzLm1pbiwgdGhpcy5taW5dKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHZhbFswXSA+IHRoaXMubWF4KSB7XG5cdCAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIFt0aGlzLm1heCwgdGhpcy5tYXhdKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHZhbFswXSA8IHRoaXMubWluKSB7XG5cdCAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIFt0aGlzLm1pbiwgdmFsWzFdXSk7XG5cdCAgICAgICAgfSBlbHNlIGlmICh2YWxbMV0gPiB0aGlzLm1heCkge1xuXHQgICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBbdmFsWzBdLCB0aGlzLm1heF0pO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmZpcnN0VmFsdWUgPSB2YWxbMF07XG5cdCAgICAgICAgICB0aGlzLnNlY29uZFZhbHVlID0gdmFsWzFdO1xuXHQgICAgICAgICAgaWYgKHRoaXMudmFsdWVDaGFuZ2VkKCkpIHtcblx0ICAgICAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgW3RoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWVdKTtcblx0ICAgICAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIFt0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlXSk7XG5cdCAgICAgICAgICAgIHRoaXMub2xkVmFsdWUgPSB2YWwuc2xpY2UoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH0gZWxzZSBpZiAoIXRoaXMucmFuZ2UgJiYgdHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbCkpIHtcblx0ICAgICAgICBpZiAodmFsIDwgdGhpcy5taW4pIHtcblx0ICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5taW4pO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodmFsID4gdGhpcy5tYXgpIHtcblx0ICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5tYXgpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmZpcnN0VmFsdWUgPSB2YWw7XG5cdCAgICAgICAgICBpZiAodGhpcy52YWx1ZUNoYW5nZWQoKSkge1xuXHQgICAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWwpO1xuXHQgICAgICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgdmFsKTtcblx0ICAgICAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IHZhbDtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzZXRQb3NpdGlvbjogZnVuY3Rpb24gc2V0UG9zaXRpb24ocGVyY2VudCkge1xuXHQgICAgICB2YXIgdGFyZ2V0VmFsdWUgPSB0aGlzLm1pbiArIHBlcmNlbnQgKiAodGhpcy5tYXggLSB0aGlzLm1pbikgLyAxMDA7XG5cdCAgICAgIGlmICghdGhpcy5yYW5nZSkge1xuXHQgICAgICAgIHRoaXMuJHJlZnMuYnV0dG9uMS5zZXRQb3NpdGlvbihwZXJjZW50KTtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIGJ1dHRvbiA9IHZvaWQgMDtcblx0ICAgICAgaWYgKE1hdGguYWJzKHRoaXMubWluVmFsdWUgLSB0YXJnZXRWYWx1ZSkgPCBNYXRoLmFicyh0aGlzLm1heFZhbHVlIC0gdGFyZ2V0VmFsdWUpKSB7XG5cdCAgICAgICAgYnV0dG9uID0gdGhpcy5maXJzdFZhbHVlIDwgdGhpcy5zZWNvbmRWYWx1ZSA/ICdidXR0b24xJyA6ICdidXR0b24yJztcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICBidXR0b24gPSB0aGlzLmZpcnN0VmFsdWUgPiB0aGlzLnNlY29uZFZhbHVlID8gJ2J1dHRvbjEnIDogJ2J1dHRvbjInO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuJHJlZnNbYnV0dG9uXS5zZXRQb3NpdGlvbihwZXJjZW50KTtcblx0ICAgIH0sXG5cdCAgICBvblNsaWRlckNsaWNrOiBmdW5jdGlvbiBvblNsaWRlckNsaWNrKGV2ZW50KSB7XG5cdCAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuZHJhZ2dpbmcpIHJldHVybjtcblx0ICAgICAgdGhpcy5yZXNldFNpemUoKTtcblx0ICAgICAgaWYgKHRoaXMudmVydGljYWwpIHtcblx0ICAgICAgICB2YXIgc2xpZGVyT2Zmc2V0Qm90dG9tID0gdGhpcy4kcmVmcy5zbGlkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tO1xuXHQgICAgICAgIHRoaXMuc2V0UG9zaXRpb24oKHNsaWRlck9mZnNldEJvdHRvbSAtIGV2ZW50LmNsaWVudFkpIC8gdGhpcy5zbGlkZXJTaXplICogMTAwKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB2YXIgc2xpZGVyT2Zmc2V0TGVmdCA9IHRoaXMuJHJlZnMuc2xpZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cdCAgICAgICAgdGhpcy5zZXRQb3NpdGlvbigoZXZlbnQuY2xpZW50WCAtIHNsaWRlck9mZnNldExlZnQpIC8gdGhpcy5zbGlkZXJTaXplICogMTAwKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlc2V0U2l6ZTogZnVuY3Rpb24gcmVzZXRTaXplKCkge1xuXHQgICAgICBpZiAodGhpcy4kcmVmcy5zbGlkZXIpIHtcblx0ICAgICAgICB0aGlzLnNsaWRlclNpemUgPSB0aGlzLiRyZWZzLnNsaWRlclsnY2xpZW50JyArICh0aGlzLnZlcnRpY2FsID8gJ0hlaWdodCcgOiAnV2lkdGgnKV07XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIHN0b3BzOiBmdW5jdGlvbiBzdG9wcygpIHtcblx0ICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cblx0ICAgICAgaWYgKHRoaXMuc3RlcCA9PT0gMCkge1xuXHQgICAgICAgIChcInByb2R1Y3Rpb25cIikgIT09ICdwcm9kdWN0aW9uJyAmJiBjb25zb2xlLndhcm4oJ1tFbGVtZW50IFdhcm5dW1NsaWRlcl1zdGVwIHNob3VsZCBub3QgYmUgMC4nKTtcblx0ICAgICAgICByZXR1cm4gW107XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIHN0b3BDb3VudCA9ICh0aGlzLm1heCAtIHRoaXMubWluKSAvIHRoaXMuc3RlcDtcblx0ICAgICAgdmFyIHN0ZXBXaWR0aCA9IDEwMCAqIHRoaXMuc3RlcCAvICh0aGlzLm1heCAtIHRoaXMubWluKTtcblx0ICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXHQgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHN0b3BDb3VudDsgaSsrKSB7XG5cdCAgICAgICAgcmVzdWx0LnB1c2goaSAqIHN0ZXBXaWR0aCk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKHRoaXMucmFuZ2UpIHtcblx0ICAgICAgICByZXR1cm4gcmVzdWx0LmZpbHRlcihmdW5jdGlvbiAoc3RlcCkge1xuXHQgICAgICAgICAgcmV0dXJuIHN0ZXAgPCAxMDAgKiAoX3RoaXMyLm1pblZhbHVlIC0gX3RoaXMyLm1pbikgLyAoX3RoaXMyLm1heCAtIF90aGlzMi5taW4pIHx8IHN0ZXAgPiAxMDAgKiAoX3RoaXMyLm1heFZhbHVlIC0gX3RoaXMyLm1pbikgLyAoX3RoaXMyLm1heCAtIF90aGlzMi5taW4pO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHJldHVybiByZXN1bHQuZmlsdGVyKGZ1bmN0aW9uIChzdGVwKSB7XG5cdCAgICAgICAgICByZXR1cm4gc3RlcCA+IDEwMCAqIChfdGhpczIuZmlyc3RWYWx1ZSAtIF90aGlzMi5taW4pIC8gKF90aGlzMi5tYXggLSBfdGhpczIubWluKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1pblZhbHVlOiBmdW5jdGlvbiBtaW5WYWx1ZSgpIHtcblx0ICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuZmlyc3RWYWx1ZSwgdGhpcy5zZWNvbmRWYWx1ZSk7XG5cdCAgICB9LFxuXHQgICAgbWF4VmFsdWU6IGZ1bmN0aW9uIG1heFZhbHVlKCkge1xuXHQgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5maXJzdFZhbHVlLCB0aGlzLnNlY29uZFZhbHVlKTtcblx0ICAgIH0sXG5cdCAgICBiYXJTaXplOiBmdW5jdGlvbiBiYXJTaXplKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5yYW5nZSA/IDEwMCAqICh0aGlzLm1heFZhbHVlIC0gdGhpcy5taW5WYWx1ZSkgLyAodGhpcy5tYXggLSB0aGlzLm1pbikgKyAnJScgOiAxMDAgKiAodGhpcy5maXJzdFZhbHVlIC0gdGhpcy5taW4pIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pICsgJyUnO1xuXHQgICAgfSxcblx0ICAgIGJhclN0YXJ0OiBmdW5jdGlvbiBiYXJTdGFydCgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMucmFuZ2UgPyAxMDAgKiAodGhpcy5taW5WYWx1ZSAtIHRoaXMubWluKSAvICh0aGlzLm1heCAtIHRoaXMubWluKSArICclJyA6ICcwJSc7XG5cdCAgICB9LFxuXHQgICAgcHJlY2lzaW9uOiBmdW5jdGlvbiBwcmVjaXNpb24oKSB7XG5cdCAgICAgIHZhciBwcmVjaXNpb25zID0gW3RoaXMubWluLCB0aGlzLm1heCwgdGhpcy5zdGVwXS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgICB2YXIgZGVjaW1hbCA9ICgnJyArIGl0ZW0pLnNwbGl0KCcuJylbMV07XG5cdCAgICAgICAgcmV0dXJuIGRlY2ltYWwgPyBkZWNpbWFsLmxlbmd0aCA6IDA7XG5cdCAgICAgIH0pO1xuXHQgICAgICByZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwgcHJlY2lzaW9ucyk7XG5cdCAgICB9LFxuXHQgICAgcnVud2F5U3R5bGU6IGZ1bmN0aW9uIHJ1bndheVN0eWxlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbCA/IHsgaGVpZ2h0OiB0aGlzLmhlaWdodCB9IDoge307XG5cdCAgICB9LFxuXHQgICAgYmFyU3R5bGU6IGZ1bmN0aW9uIGJhclN0eWxlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbCA/IHtcblx0ICAgICAgICBoZWlnaHQ6IHRoaXMuYmFyU2l6ZSxcblx0ICAgICAgICBib3R0b206IHRoaXMuYmFyU3RhcnRcblx0ICAgICAgfSA6IHtcblx0ICAgICAgICB3aWR0aDogdGhpcy5iYXJTaXplLFxuXHQgICAgICAgIGxlZnQ6IHRoaXMuYmFyU3RhcnRcblx0ICAgICAgfTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcblx0ICAgIGlmICh0aGlzLnJhbmdlKSB7XG5cdCAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG5cdCAgICAgICAgdGhpcy5maXJzdFZhbHVlID0gTWF0aC5tYXgodGhpcy5taW4sIHRoaXMudmFsdWVbMF0pO1xuXHQgICAgICAgIHRoaXMuc2Vjb25kVmFsdWUgPSBNYXRoLm1pbih0aGlzLm1heCwgdGhpcy52YWx1ZVsxXSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5maXJzdFZhbHVlID0gdGhpcy5taW47XG5cdCAgICAgICAgdGhpcy5zZWNvbmRWYWx1ZSA9IHRoaXMubWF4O1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMub2xkVmFsdWUgPSBbdGhpcy5maXJzdFZhbHVlLCB0aGlzLnNlY29uZFZhbHVlXTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ251bWJlcicgfHwgaXNOYU4odGhpcy52YWx1ZSkpIHtcblx0ICAgICAgICB0aGlzLmZpcnN0VmFsdWUgPSB0aGlzLm1pbjtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB0aGlzLmZpcnN0VmFsdWUgPSBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIHRoaXMudmFsdWUpKTtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLm9sZFZhbHVlID0gdGhpcy5maXJzdFZhbHVlO1xuXHQgICAgfVxuXHQgICAgdGhpcy5yZXNldFNpemUoKTtcblx0ICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2V0U2l6ZSk7XG5cdCAgfSxcblx0ICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuXHQgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVzZXRTaXplKTtcblx0ICB9XG5cdH07IC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cbi8qKiovIH0sXG4vKiAyNTUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL2lucHV0LW51bWJlclwiKTtcblxuLyoqKi8gfSxcbi8qIDI1NiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNTcpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNTgpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAyNTcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfdG9vbHRpcCA9IF9fd2VicGFja19yZXF1aXJlX18oMTM4KTtcblxuXHR2YXIgX3Rvb2x0aXAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdG9vbHRpcCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsU2xpZGVyQnV0dG9uJyxcblxuXHQgIGNvbXBvbmVudHM6IHtcblx0ICAgIEVsVG9vbHRpcDogX3Rvb2x0aXAyLmRlZmF1bHRcblx0ICB9LFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIHZhbHVlOiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogMFxuXHQgICAgfSxcblx0ICAgIHZlcnRpY2FsOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IGZhbHNlXG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBob3ZlcmluZzogZmFsc2UsXG5cdCAgICAgIGRyYWdnaW5nOiBmYWxzZSxcblx0ICAgICAgc3RhcnRYOiAwLFxuXHQgICAgICBjdXJyZW50WDogMCxcblx0ICAgICAgc3RhcnRZOiAwLFxuXHQgICAgICBjdXJyZW50WTogMCxcblx0ICAgICAgc3RhcnRQb3NpdGlvbjogMCxcblx0ICAgICAgbmV3UG9zaXRpb246IG51bGwsXG5cdCAgICAgIG9sZFZhbHVlOiB0aGlzLnZhbHVlXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBkaXNhYmxlZDogZnVuY3Rpb24gZGlzYWJsZWQoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQuZGlzYWJsZWQ7XG5cdCAgICB9LFxuXHQgICAgbWF4OiBmdW5jdGlvbiBtYXgoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQubWF4O1xuXHQgICAgfSxcblx0ICAgIG1pbjogZnVuY3Rpb24gbWluKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcGFyZW50Lm1pbjtcblx0ICAgIH0sXG5cdCAgICBzdGVwOiBmdW5jdGlvbiBzdGVwKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcGFyZW50LnN0ZXA7XG5cdCAgICB9LFxuXHQgICAgc2hvd1Rvb2x0aXA6IGZ1bmN0aW9uIHNob3dUb29sdGlwKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcGFyZW50LnNob3dUb29sdGlwO1xuXHQgICAgfSxcblx0ICAgIHByZWNpc2lvbjogZnVuY3Rpb24gcHJlY2lzaW9uKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcGFyZW50LnByZWNpc2lvbjtcblx0ICAgIH0sXG5cdCAgICBjdXJyZW50UG9zaXRpb246IGZ1bmN0aW9uIGN1cnJlbnRQb3NpdGlvbigpIHtcblx0ICAgICAgcmV0dXJuICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pICogMTAwICsgJyUnO1xuXHQgICAgfSxcblx0ICAgIGVuYWJsZUZvcm1hdDogZnVuY3Rpb24gZW5hYmxlRm9ybWF0KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcGFyZW50LmZvcm1hdFRvb2x0aXAgaW5zdGFuY2VvZiBGdW5jdGlvbjtcblx0ICAgIH0sXG5cdCAgICBmb3JtYXRWYWx1ZTogZnVuY3Rpb24gZm9ybWF0VmFsdWUoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLmVuYWJsZUZvcm1hdCAmJiB0aGlzLiRwYXJlbnQuZm9ybWF0VG9vbHRpcCh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlO1xuXHQgICAgfSxcblx0ICAgIHdyYXBwZXJTdHlsZTogZnVuY3Rpb24gd3JhcHBlclN0eWxlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbCA/IHsgYm90dG9tOiB0aGlzLmN1cnJlbnRQb3NpdGlvbiB9IDogeyBsZWZ0OiB0aGlzLmN1cnJlbnRQb3NpdGlvbiB9O1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICB3YXRjaDoge1xuXHQgICAgZHJhZ2dpbmc6IGZ1bmN0aW9uIGRyYWdnaW5nKHZhbCkge1xuXHQgICAgICB0aGlzLiRwYXJlbnQuZHJhZ2dpbmcgPSB2YWw7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGRpc3BsYXlUb29sdGlwOiBmdW5jdGlvbiBkaXNwbGF5VG9vbHRpcCgpIHtcblx0ICAgICAgdGhpcy4kcmVmcy50b29sdGlwICYmICh0aGlzLiRyZWZzLnRvb2x0aXAuc2hvd1BvcHBlciA9IHRydWUpO1xuXHQgICAgfSxcblx0ICAgIGhpZGVUb29sdGlwOiBmdW5jdGlvbiBoaWRlVG9vbHRpcCgpIHtcblx0ICAgICAgdGhpcy4kcmVmcy50b29sdGlwICYmICh0aGlzLiRyZWZzLnRvb2x0aXAuc2hvd1BvcHBlciA9IGZhbHNlKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVNb3VzZUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUVudGVyKCkge1xuXHQgICAgICB0aGlzLmhvdmVyaW5nID0gdHJ1ZTtcblx0ICAgICAgdGhpcy5kaXNwbGF5VG9vbHRpcCgpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZU1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKSB7XG5cdCAgICAgIHRoaXMuaG92ZXJpbmcgPSBmYWxzZTtcblx0ICAgICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuXHQgICAgfSxcblx0ICAgIG9uQnV0dG9uRG93bjogZnVuY3Rpb24gb25CdXR0b25Eb3duKGV2ZW50KSB7XG5cdCAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG5cdCAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgIHRoaXMub25EcmFnU3RhcnQoZXZlbnQpO1xuXHQgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbkRyYWdnaW5nKTtcblx0ICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRHJhZ0VuZCk7XG5cdCAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIHRoaXMub25EcmFnRW5kKTtcblx0ICAgIH0sXG5cdCAgICBvbkRyYWdTdGFydDogZnVuY3Rpb24gb25EcmFnU3RhcnQoZXZlbnQpIHtcblx0ICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG5cdCAgICAgIGlmICh0aGlzLnZlcnRpY2FsKSB7XG5cdCAgICAgICAgdGhpcy5zdGFydFkgPSBldmVudC5jbGllbnRZO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuc3RhcnRYID0gZXZlbnQuY2xpZW50WDtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLnN0YXJ0UG9zaXRpb24gPSBwYXJzZUZsb2F0KHRoaXMuY3VycmVudFBvc2l0aW9uKTtcblx0ICAgICAgdGhpcy5uZXdQb3NpdGlvbiA9IHRoaXMuc3RhcnRQb3NpdGlvbjtcblx0ICAgIH0sXG5cdCAgICBvbkRyYWdnaW5nOiBmdW5jdGlvbiBvbkRyYWdnaW5nKGV2ZW50KSB7XG5cdCAgICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XG5cdCAgICAgICAgdGhpcy5kaXNwbGF5VG9vbHRpcCgpO1xuXHQgICAgICAgIHRoaXMuJHBhcmVudC5yZXNldFNpemUoKTtcblx0ICAgICAgICB2YXIgZGlmZiA9IDA7XG5cdCAgICAgICAgaWYgKHRoaXMudmVydGljYWwpIHtcblx0ICAgICAgICAgIHRoaXMuY3VycmVudFkgPSBldmVudC5jbGllbnRZO1xuXHQgICAgICAgICAgZGlmZiA9ICh0aGlzLnN0YXJ0WSAtIHRoaXMuY3VycmVudFkpIC8gdGhpcy4kcGFyZW50LnNsaWRlclNpemUgKiAxMDA7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuY3VycmVudFggPSBldmVudC5jbGllbnRYO1xuXHQgICAgICAgICAgZGlmZiA9ICh0aGlzLmN1cnJlbnRYIC0gdGhpcy5zdGFydFgpIC8gdGhpcy4kcGFyZW50LnNsaWRlclNpemUgKiAxMDA7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMubmV3UG9zaXRpb24gPSB0aGlzLnN0YXJ0UG9zaXRpb24gKyBkaWZmO1xuXHQgICAgICAgIHRoaXMuc2V0UG9zaXRpb24odGhpcy5uZXdQb3NpdGlvbik7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBvbkRyYWdFbmQ6IGZ1bmN0aW9uIG9uRHJhZ0VuZCgpIHtcblx0ICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgICBpZiAodGhpcy5kcmFnZ2luZykge1xuXHQgICAgICAgIC8qXG5cdCAgICAgICAgICog6Ziy5q2i5ZyoIG1vdXNldXAg5ZCO56uL5Y2z6Kem5Y+RIGNsaWNr77yM5a+86Ie05ruR5Z2X5pyJ5Yeg546H5Lqn55Sf5LiA5bCP5q615L2N56e7XG5cdCAgICAgICAgICog5LiN5L2/55SoIHByZXZlbnREZWZhdWx0IOaYr+WboOS4uiBtb3VzZXVwIOWSjCBjbGljayDmsqHmnInms6jlhozlnKjlkIzkuIDkuKogRE9NIOS4ilxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgX3RoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcblx0ICAgICAgICAgIF90aGlzLmhpZGVUb29sdGlwKCk7XG5cdCAgICAgICAgICBfdGhpcy5zZXRQb3NpdGlvbihfdGhpcy5uZXdQb3NpdGlvbik7XG5cdCAgICAgICAgfSwgMCk7XG5cdCAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25EcmFnZ2luZyk7XG5cdCAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRHJhZ0VuZCk7XG5cdCAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgdGhpcy5vbkRyYWdFbmQpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2V0UG9zaXRpb246IGZ1bmN0aW9uIHNldFBvc2l0aW9uKG5ld1Bvc2l0aW9uKSB7XG5cdCAgICAgIGlmIChuZXdQb3NpdGlvbiA9PT0gbnVsbCkgcmV0dXJuO1xuXHQgICAgICBpZiAobmV3UG9zaXRpb24gPCAwKSB7XG5cdCAgICAgICAgbmV3UG9zaXRpb24gPSAwO1xuXHQgICAgICB9IGVsc2UgaWYgKG5ld1Bvc2l0aW9uID4gMTAwKSB7XG5cdCAgICAgICAgbmV3UG9zaXRpb24gPSAxMDA7XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIGxlbmd0aFBlclN0ZXAgPSAxMDAgLyAoKHRoaXMubWF4IC0gdGhpcy5taW4pIC8gdGhpcy5zdGVwKTtcblx0ICAgICAgdmFyIHN0ZXBzID0gTWF0aC5yb3VuZChuZXdQb3NpdGlvbiAvIGxlbmd0aFBlclN0ZXApO1xuXHQgICAgICB2YXIgdmFsdWUgPSBzdGVwcyAqIGxlbmd0aFBlclN0ZXAgKiAodGhpcy5tYXggLSB0aGlzLm1pbikgKiAwLjAxICsgdGhpcy5taW47XG5cdCAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKSk7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuXHQgICAgICB0aGlzLiRyZWZzLnRvb2x0aXAgJiYgdGhpcy4kcmVmcy50b29sdGlwLnVwZGF0ZVBvcHBlcigpO1xuXHQgICAgICBpZiAoIXRoaXMuZHJhZ2dpbmcgJiYgdGhpcy52YWx1ZSAhPT0gdGhpcy5vbGRWYWx1ZSkge1xuXHQgICAgICAgIHRoaXMub2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXHR9OyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG4vKioqLyB9LFxuLyogMjU4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnZGl2Jywge1xuXHQgICAgcmVmOiBcImJ1dHRvblwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2xpZGVyX19idXR0b24td3JhcHBlclwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2hvdmVyJzogX3ZtLmhvdmVyaW5nLCAnZHJhZ2dpbmcnOiBfdm0uZHJhZ2dpbmdcblx0ICAgIH0sXG5cdCAgICBzdHlsZTogKF92bS53cmFwcGVyU3R5bGUpLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJtb3VzZWVudGVyXCI6IF92bS5oYW5kbGVNb3VzZUVudGVyLFxuXHQgICAgICBcIm1vdXNlbGVhdmVcIjogX3ZtLmhhbmRsZU1vdXNlTGVhdmUsXG5cdCAgICAgIFwibW91c2Vkb3duXCI6IF92bS5vbkJ1dHRvbkRvd25cblx0ICAgIH1cblx0ICB9LCBbX2MoJ2VsLXRvb2x0aXAnLCB7XG5cdCAgICByZWY6IFwidG9vbHRpcFwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJwbGFjZW1lbnRcIjogXCJ0b3BcIixcblx0ICAgICAgXCJkaXNhYmxlZFwiOiAhX3ZtLnNob3dUb29sdGlwXG5cdCAgICB9XG5cdCAgfSwgW19jKCdzcGFuJywge1xuXHQgICAgc2xvdDogXCJjb250ZW50XCJcblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0uZm9ybWF0VmFsdWUpKV0pLCBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2xpZGVyX19idXR0b25cIixcblx0ICAgIGNsYXNzOiB7XG5cdCAgICAgICdob3Zlcic6IF92bS5ob3ZlcmluZywgJ2RyYWdnaW5nJzogX3ZtLmRyYWdnaW5nXG5cdCAgICB9XG5cdCAgfSldKV0sIDEpXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDI1OSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXNsaWRlclwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2lzLXZlcnRpY2FsJzogX3ZtLnZlcnRpY2FsLCAnZWwtc2xpZGVyLS13aXRoLWlucHV0JzogX3ZtLnNob3dJbnB1dFxuXHQgICAgfVxuXHQgIH0sIFsoX3ZtLnNob3dJbnB1dCAmJiAhX3ZtLnJhbmdlKSA/IF9jKCdlbC1pbnB1dC1udW1iZXInLCB7XG5cdCAgICByZWY6IFwiaW5wdXRcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXNsaWRlcl9faW5wdXRcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwic3RlcFwiOiBfdm0uc3RlcCxcblx0ICAgICAgXCJkaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWQsXG5cdCAgICAgIFwiY29udHJvbHNcIjogX3ZtLnNob3dJbnB1dENvbnRyb2xzLFxuXHQgICAgICBcIm1pblwiOiBfdm0ubWluLFxuXHQgICAgICBcIm1heFwiOiBfdm0ubWF4LFxuXHQgICAgICBcImRlYm91bmNlXCI6IF92bS5kZWJvdW5jZSxcblx0ICAgICAgXCJzaXplXCI6IFwic21hbGxcIlxuXHQgICAgfSxcblx0ICAgIG1vZGVsOiB7XG5cdCAgICAgIHZhbHVlOiAoX3ZtLmZpcnN0VmFsdWUpLFxuXHQgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG5cdCAgICAgICAgX3ZtLmZpcnN0VmFsdWUgPSAkJHZcblx0ICAgICAgfSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJmaXJzdFZhbHVlXCJcblx0ICAgIH1cblx0ICB9KSA6IF92bS5fZSgpLCBfYygnZGl2Jywge1xuXHQgICAgcmVmOiBcInNsaWRlclwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2xpZGVyX19ydW53YXlcIixcblx0ICAgIGNsYXNzOiB7XG5cdCAgICAgICdzaG93LWlucHV0JzogX3ZtLnNob3dJbnB1dCwgJ2Rpc2FibGVkJzogX3ZtLmRpc2FibGVkXG5cdCAgICB9LFxuXHQgICAgc3R5bGU6IChfdm0ucnVud2F5U3R5bGUpLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0ub25TbGlkZXJDbGlja1xuXHQgICAgfVxuXHQgIH0sIFtfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2xpZGVyX19iYXJcIixcblx0ICAgIHN0eWxlOiAoX3ZtLmJhclN0eWxlKVxuXHQgIH0pLCBfYygnc2xpZGVyLWJ1dHRvbicsIHtcblx0ICAgIHJlZjogXCJidXR0b24xXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInZlcnRpY2FsXCI6IF92bS52ZXJ0aWNhbFxuXHQgICAgfSxcblx0ICAgIG1vZGVsOiB7XG5cdCAgICAgIHZhbHVlOiAoX3ZtLmZpcnN0VmFsdWUpLFxuXHQgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG5cdCAgICAgICAgX3ZtLmZpcnN0VmFsdWUgPSAkJHZcblx0ICAgICAgfSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJmaXJzdFZhbHVlXCJcblx0ICAgIH1cblx0ICB9KSwgKF92bS5yYW5nZSkgPyBfYygnc2xpZGVyLWJ1dHRvbicsIHtcblx0ICAgIHJlZjogXCJidXR0b24yXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInZlcnRpY2FsXCI6IF92bS52ZXJ0aWNhbFxuXHQgICAgfSxcblx0ICAgIG1vZGVsOiB7XG5cdCAgICAgIHZhbHVlOiAoX3ZtLnNlY29uZFZhbHVlKSxcblx0ICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuXHQgICAgICAgIF92bS5zZWNvbmRWYWx1ZSA9ICQkdlxuXHQgICAgICB9LFxuXHQgICAgICBleHByZXNzaW9uOiBcInNlY29uZFZhbHVlXCJcblx0ICAgIH1cblx0ICB9KSA6IF92bS5fZSgpLCBfdm0uX2woKF92bS5zdG9wcyksIGZ1bmN0aW9uKGl0ZW0pIHtcblx0ICAgIHJldHVybiAoX3ZtLnNob3dTdG9wcykgPyBfYygnZGl2Jywge1xuXHQgICAgICBzdGF0aWNDbGFzczogXCJlbC1zbGlkZXJfX3N0b3BcIixcblx0ICAgICAgc3R5bGU6IChfdm0udmVydGljYWwgPyB7XG5cdCAgICAgICAgJ2JvdHRvbSc6IGl0ZW0gKyAnJSdcblx0ICAgICAgfSA6IHtcblx0ICAgICAgICAnbGVmdCc6IGl0ZW0gKyAnJSdcblx0ICAgICAgfSlcblx0ICAgIH0pIDogX3ZtLl9lKClcblx0ICB9KV0sIDIpXSwgMSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMjYwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2RpcmVjdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYxKTtcblxuXHR2YXIgX2RpcmVjdGl2ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kaXJlY3RpdmUpO1xuXG5cdHZhciBfaW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2NSk7XG5cblx0dmFyIF9pbmRleDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbmRleCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgaW5zdGFsbDogZnVuY3Rpb24gaW5zdGFsbChWdWUpIHtcblx0ICAgIFZ1ZS51c2UoX2RpcmVjdGl2ZTIuZGVmYXVsdCk7XG5cdCAgICBWdWUucHJvdG90eXBlLiRsb2FkaW5nID0gX2luZGV4Mi5kZWZhdWx0O1xuXHQgIH0sXG5cblx0ICBkaXJlY3RpdmU6IF9kaXJlY3RpdmUyLmRlZmF1bHQsXG5cdCAgc2VydmljZTogX2luZGV4Mi5kZWZhdWx0XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyNjEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgX3Z1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMzKTtcblxuXHR2YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG5cdHZhciBfZG9tID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHR2YXIgTWFzayA9IF92dWUyLmRlZmF1bHQuZXh0ZW5kKF9fd2VicGFja19yZXF1aXJlX18oMjYyKSk7XG5cblx0ZXhwb3J0cy5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIGlmIChWdWUucHJvdG90eXBlLiRpc1NlcnZlcikgcmV0dXJuO1xuXHQgIHZhciB0b2dnbGVMb2FkaW5nID0gZnVuY3Rpb24gdG9nZ2xlTG9hZGluZyhlbCwgYmluZGluZykge1xuXHQgICAgaWYgKGJpbmRpbmcudmFsdWUpIHtcblx0ICAgICAgVnVlLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoYmluZGluZy5tb2RpZmllcnMuZnVsbHNjcmVlbikge1xuXHQgICAgICAgICAgZWwub3JpZ2luYWxQb3NpdGlvbiA9ICgwLCBfZG9tLmdldFN0eWxlKShkb2N1bWVudC5ib2R5LCAncG9zaXRpb24nKTtcblx0ICAgICAgICAgIGVsLm9yaWdpbmFsT3ZlcmZsb3cgPSAoMCwgX2RvbS5nZXRTdHlsZSkoZG9jdW1lbnQuYm9keSwgJ292ZXJmbG93Jyk7XG5cblx0ICAgICAgICAgICgwLCBfZG9tLmFkZENsYXNzKShlbC5tYXNrLCAnaXMtZnVsbHNjcmVlbicpO1xuXHQgICAgICAgICAgaW5zZXJ0RG9tKGRvY3VtZW50LmJvZHksIGVsLCBiaW5kaW5nKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgKDAsIF9kb20ucmVtb3ZlQ2xhc3MpKGVsLm1hc2ssICdpcy1mdWxsc2NyZWVuJyk7XG5cblx0ICAgICAgICAgIGlmIChiaW5kaW5nLm1vZGlmaWVycy5ib2R5KSB7XG5cdCAgICAgICAgICAgIGVsLm9yaWdpbmFsUG9zaXRpb24gPSAoMCwgX2RvbS5nZXRTdHlsZSkoZG9jdW1lbnQuYm9keSwgJ3Bvc2l0aW9uJyk7XG5cblx0ICAgICAgICAgICAgWyd0b3AnLCAnbGVmdCddLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdCAgICAgICAgICAgICAgdmFyIHNjcm9sbCA9IHByb3BlcnR5ID09PSAndG9wJyA/ICdzY3JvbGxUb3AnIDogJ3Njcm9sbExlZnQnO1xuXHQgICAgICAgICAgICAgIGVsLm1hc2tTdHlsZVtwcm9wZXJ0eV0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtwcm9wZXJ0eV0gKyBkb2N1bWVudC5ib2R5W3Njcm9sbF0gKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbc2Nyb2xsXSArICdweCc7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBbJ2hlaWdodCcsICd3aWR0aCddLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdCAgICAgICAgICAgICAgZWwubWFza1N0eWxlW3Byb3BlcnR5XSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3Byb3BlcnR5XSArICdweCc7XG5cdCAgICAgICAgICAgIH0pO1xuXG5cdCAgICAgICAgICAgIGluc2VydERvbShkb2N1bWVudC5ib2R5LCBlbCwgYmluZGluZyk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBlbC5vcmlnaW5hbFBvc2l0aW9uID0gKDAsIF9kb20uZ2V0U3R5bGUpKGVsLCAncG9zaXRpb24nKTtcblx0ICAgICAgICAgICAgaW5zZXJ0RG9tKGVsLCBlbCwgYmluZGluZyk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGlmIChlbC5kb21WaXNpYmxlKSB7XG5cdCAgICAgICAgZWwuaW5zdGFuY2UuJG9uKCdhZnRlci1sZWF2ZScsIGZ1bmN0aW9uIChfKSB7XG5cdCAgICAgICAgICBlbC5kb21WaXNpYmxlID0gZmFsc2U7XG5cdCAgICAgICAgICBpZiAoYmluZGluZy5tb2RpZmllcnMuZnVsbHNjcmVlbiAmJiBlbC5vcmlnaW5hbE92ZXJmbG93ICE9PSAnaGlkZGVuJykge1xuXHQgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gZWwub3JpZ2luYWxPdmVyZmxvdztcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIGlmIChiaW5kaW5nLm1vZGlmaWVycy5mdWxsc2NyZWVuIHx8IGJpbmRpbmcubW9kaWZpZXJzLmJvZHkpIHtcblx0ICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wb3NpdGlvbiA9IGVsLm9yaWdpbmFsUG9zaXRpb247XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBlbC5zdHlsZS5wb3NpdGlvbiA9IGVsLm9yaWdpbmFsUG9zaXRpb247XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgZWwuaW5zdGFuY2UudmlzaWJsZSA9IGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfTtcblx0ICB2YXIgaW5zZXJ0RG9tID0gZnVuY3Rpb24gaW5zZXJ0RG9tKHBhcmVudCwgZWwsIGJpbmRpbmcpIHtcblx0ICAgIGlmICghZWwuZG9tVmlzaWJsZSAmJiAoMCwgX2RvbS5nZXRTdHlsZSkoZWwsICdkaXNwbGF5JykgIT09ICdub25lJyAmJiAoMCwgX2RvbS5nZXRTdHlsZSkoZWwsICd2aXNpYmlsaXR5JykgIT09ICdoaWRkZW4nKSB7XG5cdCAgICAgIE9iamVjdC5rZXlzKGVsLm1hc2tTdHlsZSkuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0ICAgICAgICBlbC5tYXNrLnN0eWxlW3Byb3BlcnR5XSA9IGVsLm1hc2tTdHlsZVtwcm9wZXJ0eV07XG5cdCAgICAgIH0pO1xuXG5cdCAgICAgIGlmIChlbC5vcmlnaW5hbFBvc2l0aW9uICE9PSAnYWJzb2x1dGUnICYmIGVsLm9yaWdpbmFsUG9zaXRpb24gIT09ICdmaXhlZCcpIHtcblx0ICAgICAgICBwYXJlbnQuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChiaW5kaW5nLm1vZGlmaWVycy5mdWxsc2NyZWVuICYmIGJpbmRpbmcubW9kaWZpZXJzLmxvY2spIHtcblx0ICAgICAgICBwYXJlbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcblx0ICAgICAgfVxuXHQgICAgICBlbC5kb21WaXNpYmxlID0gdHJ1ZTtcblxuXHQgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoZWwubWFzayk7XG5cdCAgICAgIFZ1ZS5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZWwuaW5zdGFuY2UudmlzaWJsZSA9IHRydWU7XG5cdCAgICAgIH0pO1xuXHQgICAgICBlbC5kb21JbnNlcnRlZCA9IHRydWU7XG5cdCAgICB9XG5cdCAgfTtcblxuXHQgIFZ1ZS5kaXJlY3RpdmUoJ2xvYWRpbmcnLCB7XG5cdCAgICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nKSB7XG5cdCAgICAgIHZhciBtYXNrID0gbmV3IE1hc2soe1xuXHQgICAgICAgIGVsOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcblx0ICAgICAgICBkYXRhOiB7XG5cdCAgICAgICAgICB0ZXh0OiBlbC5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQtbG9hZGluZy10ZXh0JyksXG5cdCAgICAgICAgICBmdWxsc2NyZWVuOiAhIWJpbmRpbmcubW9kaWZpZXJzLmZ1bGxzY3JlZW5cblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgICBlbC5pbnN0YW5jZSA9IG1hc2s7XG5cdCAgICAgIGVsLm1hc2sgPSBtYXNrLiRlbDtcblx0ICAgICAgZWwubWFza1N0eWxlID0ge307XG5cblx0ICAgICAgdG9nZ2xlTG9hZGluZyhlbCwgYmluZGluZyk7XG5cdCAgICB9LFxuXG5cdCAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShlbCwgYmluZGluZykge1xuXHQgICAgICBlbC5pbnN0YW5jZS5zZXRUZXh0KGVsLmdldEF0dHJpYnV0ZSgnZWxlbWVudC1sb2FkaW5nLXRleHQnKSk7XG5cdCAgICAgIGlmIChiaW5kaW5nLm9sZFZhbHVlICE9PSBiaW5kaW5nLnZhbHVlKSB7XG5cdCAgICAgICAgdG9nZ2xlTG9hZGluZyhlbCwgYmluZGluZyk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cblx0ICAgIHVuYmluZDogZnVuY3Rpb24gdW5iaW5kKGVsLCBiaW5kaW5nKSB7XG5cdCAgICAgIGlmIChlbC5kb21JbnNlcnRlZCkge1xuXHQgICAgICAgIGlmIChiaW5kaW5nLm1vZGlmaWVycy5mdWxsc2NyZWVuIHx8IGJpbmRpbmcubW9kaWZpZXJzLmJvZHkpIHtcblx0ICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWwubWFzayk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIGVsLm1hc2sgJiYgZWwubWFzay5wYXJlbnROb2RlICYmIGVsLm1hc2sucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbC5tYXNrKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KTtcblx0fTtcblxuLyoqKi8gfSxcbi8qIDI2MiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNjMpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNjQpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAyNjMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgdGV4dDogbnVsbCxcblx0ICAgICAgZnVsbHNjcmVlbjogdHJ1ZSxcblx0ICAgICAgdmlzaWJsZTogZmFsc2UsXG5cdCAgICAgIGN1c3RvbUNsYXNzOiAnJ1xuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBoYW5kbGVBZnRlckxlYXZlOiBmdW5jdGlvbiBoYW5kbGVBZnRlckxlYXZlKCkge1xuXHQgICAgICB0aGlzLiRlbWl0KCdhZnRlci1sZWF2ZScpO1xuXHQgICAgfSxcblx0ICAgIHNldFRleHQ6IGZ1bmN0aW9uIHNldFRleHQodGV4dCkge1xuXHQgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDI2NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ3RyYW5zaXRpb24nLCB7XG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcIm5hbWVcIjogXCJlbC1sb2FkaW5nLWZhZGVcIlxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiYWZ0ZXItbGVhdmVcIjogX3ZtLmhhbmRsZUFmdGVyTGVhdmVcblx0ICAgIH1cblx0ICB9LCBbX2MoJ2RpdicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS52aXNpYmxlKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtbG9hZGluZy1tYXNrXCIsXG5cdCAgICBjbGFzczogW192bS5jdXN0b21DbGFzcywge1xuXHQgICAgICAnaXMtZnVsbHNjcmVlbic6IF92bS5mdWxsc2NyZWVuXG5cdCAgICB9XVxuXHQgIH0sIFtfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtbG9hZGluZy1zcGlubmVyXCJcblx0ICB9LCBbX2MoJ3N2ZycsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImNpcmN1bGFyXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInZpZXdCb3hcIjogXCIyNSAyNSA1MCA1MFwiXG5cdCAgICB9XG5cdCAgfSwgW19jKCdjaXJjbGUnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJwYXRoXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcImN4XCI6IFwiNTBcIixcblx0ICAgICAgXCJjeVwiOiBcIjUwXCIsXG5cdCAgICAgIFwiclwiOiBcIjIwXCIsXG5cdCAgICAgIFwiZmlsbFwiOiBcIm5vbmVcIlxuXHQgICAgfVxuXHQgIH0pXSksIChfdm0udGV4dCkgPyBfYygncCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWxvYWRpbmctdGV4dFwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnRleHQpKV0pIDogX3ZtLl9lKCldKV0pXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMjY1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3Z1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMzKTtcblxuXHR2YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG5cdHZhciBfbG9hZGluZyA9IF9fd2VicGFja19yZXF1aXJlX18oMjYyKTtcblxuXHR2YXIgX2xvYWRpbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9hZGluZyk7XG5cblx0dmFyIF9kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcblxuXHR2YXIgX21lcmdlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NCk7XG5cblx0dmFyIF9tZXJnZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tZXJnZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHR2YXIgTG9hZGluZ0NvbnN0cnVjdG9yID0gX3Z1ZTIuZGVmYXVsdC5leHRlbmQoX2xvYWRpbmcyLmRlZmF1bHQpO1xuXG5cdHZhciBkZWZhdWx0cyA9IHtcblx0ICB0ZXh0OiBudWxsLFxuXHQgIGZ1bGxzY3JlZW46IHRydWUsXG5cdCAgYm9keTogZmFsc2UsXG5cdCAgbG9jazogZmFsc2UsXG5cdCAgY3VzdG9tQ2xhc3M6ICcnXG5cdH07XG5cblx0dmFyIGZ1bGxzY3JlZW5Mb2FkaW5nID0gdm9pZCAwO1xuXG5cdExvYWRpbmdDb25zdHJ1Y3Rvci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbiA9ICcnO1xuXHRMb2FkaW5nQ29uc3RydWN0b3IucHJvdG90eXBlLm9yaWdpbmFsT3ZlcmZsb3cgPSAnJztcblxuXHRMb2FkaW5nQ29uc3RydWN0b3IucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuXHQgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICBpZiAodGhpcy5mdWxsc2NyZWVuKSB7XG5cdCAgICBmdWxsc2NyZWVuTG9hZGluZyA9IHVuZGVmaW5lZDtcblx0ICB9XG5cdCAgdGhpcy4kb24oJ2FmdGVyLWxlYXZlJywgZnVuY3Rpb24gKF8pIHtcblx0ICAgIGlmIChfdGhpcy5mdWxsc2NyZWVuICYmIF90aGlzLm9yaWdpbmFsT3ZlcmZsb3cgIT09ICdoaWRkZW4nKSB7XG5cdCAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBfdGhpcy5vcmlnaW5hbE92ZXJmbG93O1xuXHQgICAgfVxuXHQgICAgaWYgKF90aGlzLmZ1bGxzY3JlZW4gfHwgX3RoaXMuYm9keSkge1xuXHQgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gX3RoaXMub3JpZ2luYWxQb3NpdGlvbjtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIF90aGlzLnRhcmdldC5zdHlsZS5wb3NpdGlvbiA9IF90aGlzLm9yaWdpbmFsUG9zaXRpb247XG5cdCAgICB9XG5cdCAgICBpZiAoX3RoaXMuJGVsICYmIF90aGlzLiRlbC5wYXJlbnROb2RlKSB7XG5cdCAgICAgIF90aGlzLiRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKF90aGlzLiRlbCk7XG5cdCAgICB9XG5cdCAgICBfdGhpcy4kZGVzdHJveSgpO1xuXHQgIH0pO1xuXHQgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuXHR9O1xuXG5cdHZhciBhZGRTdHlsZSA9IGZ1bmN0aW9uIGFkZFN0eWxlKG9wdGlvbnMsIHBhcmVudCwgaW5zdGFuY2UpIHtcblx0ICB2YXIgbWFza1N0eWxlID0ge307XG5cdCAgaWYgKG9wdGlvbnMuZnVsbHNjcmVlbikge1xuXHQgICAgaW5zdGFuY2Uub3JpZ2luYWxQb3NpdGlvbiA9ICgwLCBfZG9tLmdldFN0eWxlKShkb2N1bWVudC5ib2R5LCAncG9zaXRpb24nKTtcblx0ICAgIGluc3RhbmNlLm9yaWdpbmFsT3ZlcmZsb3cgPSAoMCwgX2RvbS5nZXRTdHlsZSkoZG9jdW1lbnQuYm9keSwgJ292ZXJmbG93Jyk7XG5cdCAgfSBlbHNlIGlmIChvcHRpb25zLmJvZHkpIHtcblx0ICAgIGluc3RhbmNlLm9yaWdpbmFsUG9zaXRpb24gPSAoMCwgX2RvbS5nZXRTdHlsZSkoZG9jdW1lbnQuYm9keSwgJ3Bvc2l0aW9uJyk7XG5cdCAgICBbJ3RvcCcsICdsZWZ0J10uZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcblx0ICAgICAgdmFyIHNjcm9sbCA9IHByb3BlcnR5ID09PSAndG9wJyA/ICdzY3JvbGxUb3AnIDogJ3Njcm9sbExlZnQnO1xuXHQgICAgICBtYXNrU3R5bGVbcHJvcGVydHldID0gb3B0aW9ucy50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbcHJvcGVydHldICsgZG9jdW1lbnQuYm9keVtzY3JvbGxdICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W3Njcm9sbF0gKyAncHgnO1xuXHQgICAgfSk7XG5cdCAgICBbJ2hlaWdodCcsICd3aWR0aCddLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdCAgICAgIG1hc2tTdHlsZVtwcm9wZXJ0eV0gPSBvcHRpb25zLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtwcm9wZXJ0eV0gKyAncHgnO1xuXHQgICAgfSk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIGluc3RhbmNlLm9yaWdpbmFsUG9zaXRpb24gPSAoMCwgX2RvbS5nZXRTdHlsZSkocGFyZW50LCAncG9zaXRpb24nKTtcblx0ICB9XG5cdCAgT2JqZWN0LmtleXMobWFza1N0eWxlKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuXHQgICAgaW5zdGFuY2UuJGVsLnN0eWxlW3Byb3BlcnR5XSA9IG1hc2tTdHlsZVtwcm9wZXJ0eV07XG5cdCAgfSk7XG5cdH07XG5cblx0dmFyIExvYWRpbmcgPSBmdW5jdGlvbiBMb2FkaW5nKCkge1xuXHQgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuXHQgIGlmIChfdnVlMi5kZWZhdWx0LnByb3RvdHlwZS4kaXNTZXJ2ZXIpIHJldHVybjtcblx0ICBvcHRpb25zID0gKDAsIF9tZXJnZTIuZGVmYXVsdCkoe30sIGRlZmF1bHRzLCBvcHRpb25zKTtcblx0ICBpZiAodHlwZW9mIG9wdGlvbnMudGFyZ2V0ID09PSAnc3RyaW5nJykge1xuXHQgICAgb3B0aW9ucy50YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKG9wdGlvbnMudGFyZ2V0KTtcblx0ICB9XG5cdCAgb3B0aW9ucy50YXJnZXQgPSBvcHRpb25zLnRhcmdldCB8fCBkb2N1bWVudC5ib2R5O1xuXHQgIGlmIChvcHRpb25zLnRhcmdldCAhPT0gZG9jdW1lbnQuYm9keSkge1xuXHQgICAgb3B0aW9ucy5mdWxsc2NyZWVuID0gZmFsc2U7XG5cdCAgfSBlbHNlIHtcblx0ICAgIG9wdGlvbnMuYm9keSA9IHRydWU7XG5cdCAgfVxuXHQgIGlmIChvcHRpb25zLmZ1bGxzY3JlZW4gJiYgZnVsbHNjcmVlbkxvYWRpbmcpIHtcblx0ICAgIHJldHVybiBmdWxsc2NyZWVuTG9hZGluZztcblx0ICB9XG5cblx0ICB2YXIgcGFyZW50ID0gb3B0aW9ucy5ib2R5ID8gZG9jdW1lbnQuYm9keSA6IG9wdGlvbnMudGFyZ2V0O1xuXHQgIHZhciBpbnN0YW5jZSA9IG5ldyBMb2FkaW5nQ29uc3RydWN0b3Ioe1xuXHQgICAgZWw6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuXHQgICAgZGF0YTogb3B0aW9uc1xuXHQgIH0pO1xuXG5cdCAgYWRkU3R5bGUob3B0aW9ucywgcGFyZW50LCBpbnN0YW5jZSk7XG5cdCAgaWYgKGluc3RhbmNlLm9yaWdpbmFsUG9zaXRpb24gIT09ICdhYnNvbHV0ZScgJiYgaW5zdGFuY2Uub3JpZ2luYWxQb3NpdGlvbiAhPT0gJ2ZpeGVkJykge1xuXHQgICAgcGFyZW50LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcblx0ICB9XG5cdCAgaWYgKG9wdGlvbnMuZnVsbHNjcmVlbiAmJiBvcHRpb25zLmxvY2spIHtcblx0ICAgIHBhcmVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuXHQgIH1cblx0ICBwYXJlbnQuYXBwZW5kQ2hpbGQoaW5zdGFuY2UuJGVsKTtcblx0ICBfdnVlMi5kZWZhdWx0Lm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgIGluc3RhbmNlLnZpc2libGUgPSB0cnVlO1xuXHQgIH0pO1xuXHQgIGlmIChvcHRpb25zLmZ1bGxzY3JlZW4pIHtcblx0ICAgIGZ1bGxzY3JlZW5Mb2FkaW5nID0gaW5zdGFuY2U7XG5cdCAgfVxuXHQgIHJldHVybiBpbnN0YW5jZTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBMb2FkaW5nO1xuXG4vKioqLyB9LFxuLyogMjY2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2ljb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2Nyk7XG5cblx0dmFyIF9pY29uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ljb24pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X2ljb24yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9pY29uMi5kZWZhdWx0Lm5hbWUsIF9pY29uMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfaWNvbjIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDI2NyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNjgpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNjkpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAyNjggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxJY29uJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBuYW1lOiBTdHJpbmdcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyNjkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdpJywge1xuXHQgICAgY2xhc3M6ICdlbC1pY29uLScgKyBfdm0ubmFtZVxuXHQgIH0pXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDI3MCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9yb3cgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3MSk7XG5cblx0dmFyIF9yb3cyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcm93KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9yb3cyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9yb3cyLmRlZmF1bHQubmFtZSwgX3JvdzIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX3JvdzIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDI3MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxSb3cnLFxuXG5cdCAgY29tcG9uZW50TmFtZTogJ0VsUm93JyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICB0YWc6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnZGl2J1xuXHQgICAgfSxcblx0ICAgIGd1dHRlcjogTnVtYmVyLFxuXHQgICAgdHlwZTogU3RyaW5nLFxuXHQgICAganVzdGlmeToge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICdzdGFydCdcblx0ICAgIH0sXG5cdCAgICBhbGlnbjoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICd0b3AnXG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBzdHlsZTogZnVuY3Rpb24gc3R5bGUoKSB7XG5cdCAgICAgIHZhciByZXQgPSB7fTtcblxuXHQgICAgICBpZiAodGhpcy5ndXR0ZXIpIHtcblx0ICAgICAgICByZXQubWFyZ2luTGVmdCA9ICctJyArIHRoaXMuZ3V0dGVyIC8gMiArICdweCc7XG5cdCAgICAgICAgcmV0Lm1hcmdpblJpZ2h0ID0gcmV0Lm1hcmdpbkxlZnQ7XG5cdCAgICAgIH1cblxuXHQgICAgICByZXR1cm4gcmV0O1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG5cdCAgICByZXR1cm4gaCh0aGlzLnRhZywge1xuXHQgICAgICBjbGFzczogWydlbC1yb3cnLCB0aGlzLmp1c3RpZnkgIT09ICdzdGFydCcgPyAnaXMtanVzdGlmeS0nICsgdGhpcy5qdXN0aWZ5IDogJycsIHRoaXMuYWxpZ24gIT09ICd0b3AnID8gJ2lzLWFsaWduLScgKyB0aGlzLmFsaWduIDogJycsIHsgJ2VsLXJvdy0tZmxleCc6IHRoaXMudHlwZSA9PT0gJ2ZsZXgnIH1dLFxuXHQgICAgICBzdHlsZTogdGhpcy5zdHlsZVxuXHQgICAgfSwgdGhpcy4kc2xvdHMuZGVmYXVsdCk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMjcyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2NvbCA9IF9fd2VicGFja19yZXF1aXJlX18oMjczKTtcblxuXHR2YXIgX2NvbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb2wpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X2NvbDIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX2NvbDIuZGVmYXVsdC5uYW1lLCBfY29sMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfY29sMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogMjczICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbENvbCcsXG5cblx0ICBwcm9wczoge1xuXHQgICAgc3Bhbjoge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDI0XG5cdCAgICB9LFxuXHQgICAgdGFnOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2Rpdidcblx0ICAgIH0sXG5cdCAgICBvZmZzZXQ6IE51bWJlcixcblx0ICAgIHB1bGw6IE51bWJlcixcblx0ICAgIHB1c2g6IE51bWJlcixcblx0ICAgIHhzOiBbTnVtYmVyLCBPYmplY3RdLFxuXHQgICAgc206IFtOdW1iZXIsIE9iamVjdF0sXG5cdCAgICBtZDogW051bWJlciwgT2JqZWN0XSxcblx0ICAgIGxnOiBbTnVtYmVyLCBPYmplY3RdXG5cdCAgfSxcblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBndXR0ZXI6IGZ1bmN0aW9uIGd1dHRlcigpIHtcblx0ICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcblx0ICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSAhPT0gJ0VsUm93Jykge1xuXHQgICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuZ3V0dGVyIDogMDtcblx0ICAgIH1cblx0ICB9LFxuXHQgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcblx0ICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgIHZhciBjbGFzc0xpc3QgPSBbXTtcblx0ICAgIHZhciBzdHlsZSA9IHt9O1xuXG5cdCAgICBpZiAodGhpcy5ndXR0ZXIpIHtcblx0ICAgICAgc3R5bGUucGFkZGluZ0xlZnQgPSB0aGlzLmd1dHRlciAvIDIgKyAncHgnO1xuXHQgICAgICBzdHlsZS5wYWRkaW5nUmlnaHQgPSBzdHlsZS5wYWRkaW5nTGVmdDtcblx0ICAgIH1cblxuXHQgICAgWydzcGFuJywgJ29mZnNldCcsICdwdWxsJywgJ3B1c2gnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG5cdCAgICAgIGlmIChfdGhpc1twcm9wXSkge1xuXHQgICAgICAgIGNsYXNzTGlzdC5wdXNoKHByb3AgIT09ICdzcGFuJyA/ICdlbC1jb2wtJyArIHByb3AgKyAnLScgKyBfdGhpc1twcm9wXSA6ICdlbC1jb2wtJyArIF90aGlzW3Byb3BdKTtcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIFsneHMnLCAnc20nLCAnbWQnLCAnbGcnXS5mb3JFYWNoKGZ1bmN0aW9uIChzaXplKSB7XG5cdCAgICAgIGlmICh0eXBlb2YgX3RoaXNbc2l6ZV0gPT09ICdudW1iZXInKSB7XG5cdCAgICAgICAgY2xhc3NMaXN0LnB1c2goJ2VsLWNvbC0nICsgc2l6ZSArICctJyArIF90aGlzW3NpemVdKTtcblx0ICAgICAgfSBlbHNlIGlmIChfdHlwZW9mKF90aGlzW3NpemVdKSA9PT0gJ29iamVjdCcpIHtcblx0ICAgICAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgdmFyIHByb3BzID0gX3RoaXNbc2l6ZV07XG5cdCAgICAgICAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuXHQgICAgICAgICAgICBjbGFzc0xpc3QucHVzaChwcm9wICE9PSAnc3BhbicgPyAnZWwtY29sLScgKyBzaXplICsgJy0nICsgcHJvcCArICctJyArIHByb3BzW3Byb3BdIDogJ2VsLWNvbC0nICsgc2l6ZSArICctJyArIHByb3BzW3Byb3BdKTtcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0pKCk7XG5cdCAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICByZXR1cm4gaCh0aGlzLnRhZywge1xuXHQgICAgICBjbGFzczogWydlbC1jb2wnLCBjbGFzc0xpc3RdLFxuXHQgICAgICBzdHlsZTogc3R5bGVcblx0ICAgIH0sIHRoaXMuJHNsb3RzLmRlZmF1bHQpO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDI3NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9zcmMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3NSk7XG5cblx0dmFyIF9zcmMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc3JjKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9zcmMyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9zcmMyLmRlZmF1bHQubmFtZSwgX3NyYzIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX3NyYzIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDI3NSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygyNzYpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgbnVsbCxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMjc2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3VwbG9hZExpc3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3Nyk7XG5cblx0dmFyIF91cGxvYWRMaXN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3VwbG9hZExpc3QpO1xuXG5cdHZhciBfdXBsb2FkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyODEpO1xuXG5cdHZhciBfdXBsb2FkMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3VwbG9hZCk7XG5cblx0dmFyIF9pZnJhbWVVcGxvYWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4Nyk7XG5cblx0dmFyIF9pZnJhbWVVcGxvYWQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaWZyYW1lVXBsb2FkKTtcblxuXHR2YXIgX3Byb2dyZXNzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNzkpO1xuXG5cdHZhciBfcHJvZ3Jlc3MyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvZ3Jlc3MpO1xuXG5cdHZhciBfbWlncmF0aW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygyODkpO1xuXG5cdHZhciBfbWlncmF0aW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21pZ3JhdGluZyk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRmdW5jdGlvbiBub29wKCkge31cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsVXBsb2FkJyxcblxuXHQgIG1peGluczogW19taWdyYXRpbmcyLmRlZmF1bHRdLFxuXG5cdCAgY29tcG9uZW50czoge1xuXHQgICAgRWxQcm9ncmVzczogX3Byb2dyZXNzMi5kZWZhdWx0LFxuXHQgICAgVXBsb2FkTGlzdDogX3VwbG9hZExpc3QyLmRlZmF1bHQsXG5cdCAgICBVcGxvYWQ6IF91cGxvYWQyLmRlZmF1bHQsXG5cdCAgICBJZnJhbWVVcGxvYWQ6IF9pZnJhbWVVcGxvYWQyLmRlZmF1bHRcblx0ICB9LFxuXG5cdCAgcHJvdmlkZToge1xuXHQgICAgdXBsb2FkZXI6IHVuZGVmaW5lZFxuXHQgIH0sXG5cblx0ICBwcm9wczoge1xuXHQgICAgYWN0aW9uOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgcmVxdWlyZWQ6IHRydWVcblx0ICAgIH0sXG5cdCAgICBoZWFkZXJzOiB7XG5cdCAgICAgIHR5cGU6IE9iamVjdCxcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuIHt9O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZGF0YTogT2JqZWN0LFxuXHQgICAgbXVsdGlwbGU6IEJvb2xlYW4sXG5cdCAgICBuYW1lOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2ZpbGUnXG5cdCAgICB9LFxuXHQgICAgZHJhZzogQm9vbGVhbixcblx0ICAgIGRyYWdnZXI6IEJvb2xlYW4sXG5cdCAgICB3aXRoQ3JlZGVudGlhbHM6IEJvb2xlYW4sXG5cdCAgICBzaG93RmlsZUxpc3Q6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIGFjY2VwdDogU3RyaW5nLFxuXHQgICAgdHlwZToge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICdzZWxlY3QnXG5cdCAgICB9LFxuXHQgICAgYmVmb3JlVXBsb2FkOiBGdW5jdGlvbixcblx0ICAgIG9uUmVtb3ZlOiB7XG5cdCAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuXHQgICAgICBkZWZhdWx0OiBub29wXG5cdCAgICB9LFxuXHQgICAgb25DaGFuZ2U6IHtcblx0ICAgICAgdHlwZTogRnVuY3Rpb24sXG5cdCAgICAgIGRlZmF1bHQ6IG5vb3Bcblx0ICAgIH0sXG5cdCAgICBvblByZXZpZXc6IHtcblx0ICAgICAgdHlwZTogRnVuY3Rpb25cblx0ICAgIH0sXG5cdCAgICBvblN1Y2Nlc3M6IHtcblx0ICAgICAgdHlwZTogRnVuY3Rpb24sXG5cdCAgICAgIGRlZmF1bHQ6IG5vb3Bcblx0ICAgIH0sXG5cdCAgICBvblByb2dyZXNzOiB7XG5cdCAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuXHQgICAgICBkZWZhdWx0OiBub29wXG5cdCAgICB9LFxuXHQgICAgb25FcnJvcjoge1xuXHQgICAgICB0eXBlOiBGdW5jdGlvbixcblx0ICAgICAgZGVmYXVsdDogbm9vcFxuXHQgICAgfSxcblx0ICAgIGZpbGVMaXN0OiB7XG5cdCAgICAgIHR5cGU6IEFycmF5LFxuXHQgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcblx0ICAgICAgICByZXR1cm4gW107XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBhdXRvVXBsb2FkOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IHRydWVcblx0ICAgIH0sXG5cdCAgICBsaXN0VHlwZToge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICd0ZXh0JyAvLyB0ZXh0LHBpY3R1cmUscGljdHVyZS1jYXJkXG5cdCAgICB9LFxuXHQgICAgaHR0cFJlcXVlc3Q6IEZ1bmN0aW9uLFxuXHQgICAgZGlzYWJsZWQ6IEJvb2xlYW5cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHVwbG9hZEZpbGVzOiBbXSxcblx0ICAgICAgZHJhZ092ZXI6IGZhbHNlLFxuXHQgICAgICBkcmFnaW5nOiBmYWxzZSxcblx0ICAgICAgdGVtcEluZGV4OiAxXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIHdhdGNoOiB7XG5cdCAgICBmaWxlTGlzdDoge1xuXHQgICAgICBpbW1lZGlhdGU6IHRydWUsXG5cdCAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoZmlsZUxpc3QpIHtcblx0ICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICAgICAgdGhpcy51cGxvYWRGaWxlcyA9IGZpbGVMaXN0Lm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHQgICAgICAgICAgaXRlbS51aWQgPSBpdGVtLnVpZCB8fCBEYXRlLm5vdygpICsgX3RoaXMudGVtcEluZGV4Kys7XG5cdCAgICAgICAgICBpdGVtLnN0YXR1cyA9ICdzdWNjZXNzJztcblx0ICAgICAgICAgIHJldHVybiBpdGVtO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGhhbmRsZVN0YXJ0OiBmdW5jdGlvbiBoYW5kbGVTdGFydChyYXdGaWxlKSB7XG5cdCAgICAgIHJhd0ZpbGUudWlkID0gRGF0ZS5ub3coKSArIHRoaXMudGVtcEluZGV4Kys7XG5cdCAgICAgIHZhciBmaWxlID0ge1xuXHQgICAgICAgIHN0YXR1czogJ3JlYWR5Jyxcblx0ICAgICAgICBuYW1lOiByYXdGaWxlLm5hbWUsXG5cdCAgICAgICAgc2l6ZTogcmF3RmlsZS5zaXplLFxuXHQgICAgICAgIHBlcmNlbnRhZ2U6IDAsXG5cdCAgICAgICAgdWlkOiByYXdGaWxlLnVpZCxcblx0ICAgICAgICByYXc6IHJhd0ZpbGVcblx0ICAgICAgfTtcblxuXHQgICAgICB0cnkge1xuXHQgICAgICAgIGZpbGUudXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChyYXdGaWxlKTtcblx0ICAgICAgfSBjYXRjaCAoZXJyKSB7XG5cdCAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfVxuXG5cdCAgICAgIHRoaXMudXBsb2FkRmlsZXMucHVzaChmaWxlKTtcblx0ICAgICAgdGhpcy5vbkNoYW5nZShmaWxlLCB0aGlzLnVwbG9hZEZpbGVzKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVQcm9ncmVzczogZnVuY3Rpb24gaGFuZGxlUHJvZ3Jlc3MoZXYsIHJhd0ZpbGUpIHtcblx0ICAgICAgdmFyIGZpbGUgPSB0aGlzLmdldEZpbGUocmF3RmlsZSk7XG5cdCAgICAgIHRoaXMub25Qcm9ncmVzcyhldiwgZmlsZSwgdGhpcy51cGxvYWRGaWxlcyk7XG5cdCAgICAgIGZpbGUuc3RhdHVzID0gJ3VwbG9hZGluZyc7XG5cdCAgICAgIGZpbGUucGVyY2VudGFnZSA9IGV2LnBlcmNlbnQgfHwgMDtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVTdWNjZXNzOiBmdW5jdGlvbiBoYW5kbGVTdWNjZXNzKHJlcywgcmF3RmlsZSkge1xuXHQgICAgICB2YXIgZmlsZSA9IHRoaXMuZ2V0RmlsZShyYXdGaWxlKTtcblxuXHQgICAgICBpZiAoZmlsZSkge1xuXHQgICAgICAgIGZpbGUuc3RhdHVzID0gJ3N1Y2Nlc3MnO1xuXHQgICAgICAgIGZpbGUucmVzcG9uc2UgPSByZXM7XG5cblx0ICAgICAgICB0aGlzLm9uU3VjY2VzcyhyZXMsIGZpbGUsIHRoaXMudXBsb2FkRmlsZXMpO1xuXHQgICAgICAgIHRoaXMub25DaGFuZ2UoZmlsZSwgdGhpcy51cGxvYWRGaWxlcyk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVFcnJvcjogZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyLCByYXdGaWxlKSB7XG5cdCAgICAgIHZhciBmaWxlID0gdGhpcy5nZXRGaWxlKHJhd0ZpbGUpO1xuXHQgICAgICB2YXIgZmlsZUxpc3QgPSB0aGlzLnVwbG9hZEZpbGVzO1xuXG5cdCAgICAgIGZpbGUuc3RhdHVzID0gJ2ZhaWwnO1xuXG5cdCAgICAgIGZpbGVMaXN0LnNwbGljZShmaWxlTGlzdC5pbmRleE9mKGZpbGUpLCAxKTtcblxuXHQgICAgICB0aGlzLm9uRXJyb3IoZXJyLCBmaWxlLCB0aGlzLnVwbG9hZEZpbGVzKTtcblx0ICAgICAgdGhpcy5vbkNoYW5nZShmaWxlLCB0aGlzLnVwbG9hZEZpbGVzKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVSZW1vdmU6IGZ1bmN0aW9uIGhhbmRsZVJlbW92ZShmaWxlLCByYXcpIHtcblx0ICAgICAgaWYgKHJhdykge1xuXHQgICAgICAgIGZpbGUgPSB0aGlzLmdldEZpbGUocmF3KTtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLmFib3J0KGZpbGUpO1xuXHQgICAgICB2YXIgZmlsZUxpc3QgPSB0aGlzLnVwbG9hZEZpbGVzO1xuXHQgICAgICBmaWxlTGlzdC5zcGxpY2UoZmlsZUxpc3QuaW5kZXhPZihmaWxlKSwgMSk7XG5cdCAgICAgIHRoaXMub25SZW1vdmUoZmlsZSwgZmlsZUxpc3QpO1xuXHQgICAgfSxcblx0ICAgIGdldEZpbGU6IGZ1bmN0aW9uIGdldEZpbGUocmF3RmlsZSkge1xuXHQgICAgICB2YXIgZmlsZUxpc3QgPSB0aGlzLnVwbG9hZEZpbGVzO1xuXHQgICAgICB2YXIgdGFyZ2V0ID0gdm9pZCAwO1xuXHQgICAgICBmaWxlTGlzdC5ldmVyeShmdW5jdGlvbiAoaXRlbSkge1xuXHQgICAgICAgIHRhcmdldCA9IHJhd0ZpbGUudWlkID09PSBpdGVtLnVpZCA/IGl0ZW0gOiBudWxsO1xuXHQgICAgICAgIHJldHVybiAhdGFyZ2V0O1xuXHQgICAgICB9KTtcblx0ICAgICAgcmV0dXJuIHRhcmdldDtcblx0ICAgIH0sXG5cdCAgICBhYm9ydDogZnVuY3Rpb24gYWJvcnQoZmlsZSkge1xuXHQgICAgICB0aGlzLiRyZWZzWyd1cGxvYWQtaW5uZXInXS5hYm9ydChmaWxlKTtcblx0ICAgIH0sXG5cdCAgICBjbGVhckZpbGVzOiBmdW5jdGlvbiBjbGVhckZpbGVzKCkge1xuXHQgICAgICB0aGlzLnVwbG9hZEZpbGVzID0gW107XG5cdCAgICB9LFxuXHQgICAgc3VibWl0OiBmdW5jdGlvbiBzdWJtaXQoKSB7XG5cdCAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgICAgIHRoaXMudXBsb2FkRmlsZXMuZmlsdGVyKGZ1bmN0aW9uIChmaWxlKSB7XG5cdCAgICAgICAgcmV0dXJuIGZpbGUuc3RhdHVzID09PSAncmVhZHknO1xuXHQgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChmaWxlKSB7XG5cdCAgICAgICAgX3RoaXMyLiRyZWZzWyd1cGxvYWQtaW5uZXInXS51cGxvYWQoZmlsZS5yYXcpO1xuXHQgICAgICB9KTtcblx0ICAgIH0sXG5cdCAgICBnZXRNaWdyYXRpbmdDb25maWc6IGZ1bmN0aW9uIGdldE1pZ3JhdGluZ0NvbmZpZygpIHtcblx0ICAgICAgcmV0dXJuIHtcblx0ICAgICAgICBwcm9wczoge1xuXHQgICAgICAgICAgJ2RlZmF1bHQtZmlsZS1saXN0JzogJ2RlZmF1bHQtZmlsZS1saXN0IGlzIHJlbmFtZWQgdG8gZmlsZS1saXN0LicsXG5cdCAgICAgICAgICAnc2hvdy11cGxvYWQtbGlzdCc6ICdzaG93LXVwbG9hZC1saXN0IGlzIHJlbmFtZWQgdG8gc2hvdy1maWxlLWxpc3QuJyxcblx0ICAgICAgICAgICd0aHVtYm5haWwtbW9kZSc6ICd0aHVtYm5haWwtbW9kZSBoYXMgYmVlbiBkZXByZWNhdGVkLCB5b3UgY2FuIGltcGxlbWVudCB0aGUgc2FtZSBlZmZlY3QgYWNjb3JkaW5nIHRvIHRoaXMgY2FzZTogaHR0cDovL2VsZW1lbnQuZWxlbWUuaW8vIy96aC1DTi9jb21wb25lbnQvdXBsb2FkI3lvbmctaHUtdG91LXhpYW5nLXNoYW5nLWNodWFuJ1xuXHQgICAgICAgIH1cblx0ICAgICAgfTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuXHQgICAgdmFyIHVwbG9hZExpc3QgPSB2b2lkIDA7XG5cblx0ICAgIGlmICh0aGlzLnNob3dGaWxlTGlzdCkge1xuXHQgICAgICB1cGxvYWRMaXN0ID0gaChcblx0ICAgICAgICBfdXBsb2FkTGlzdDIuZGVmYXVsdCxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICBhdHRyczoge1xuXHQgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCxcblx0ICAgICAgICAgICAgbGlzdFR5cGU6IHRoaXMubGlzdFR5cGUsXG5cdCAgICAgICAgICAgIGZpbGVzOiB0aGlzLnVwbG9hZEZpbGVzLFxuXG5cdCAgICAgICAgICAgIGhhbmRsZVByZXZpZXc6IHRoaXMub25QcmV2aWV3IH0sXG5cdCAgICAgICAgICBvbjoge1xuXHQgICAgICAgICAgICAncmVtb3ZlJzogdGhpcy5oYW5kbGVSZW1vdmVcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIFtdXG5cdCAgICAgICk7XG5cdCAgICB9XG5cblx0ICAgIHZhciB1cGxvYWREYXRhID0ge1xuXHQgICAgICBwcm9wczoge1xuXHQgICAgICAgIHR5cGU6IHRoaXMudHlwZSxcblx0ICAgICAgICBkcmFnOiB0aGlzLmRyYWcsXG5cdCAgICAgICAgYWN0aW9uOiB0aGlzLmFjdGlvbixcblx0ICAgICAgICBtdWx0aXBsZTogdGhpcy5tdWx0aXBsZSxcblx0ICAgICAgICAnYmVmb3JlLXVwbG9hZCc6IHRoaXMuYmVmb3JlVXBsb2FkLFxuXHQgICAgICAgICd3aXRoLWNyZWRlbnRpYWxzJzogdGhpcy53aXRoQ3JlZGVudGlhbHMsXG5cdCAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuXHQgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcblx0ICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG5cdCAgICAgICAgYWNjZXB0OiB0aGlzLmFjY2VwdCxcblx0ICAgICAgICBmaWxlTGlzdDogdGhpcy51cGxvYWRGaWxlcyxcblx0ICAgICAgICBhdXRvVXBsb2FkOiB0aGlzLmF1dG9VcGxvYWQsXG5cdCAgICAgICAgbGlzdFR5cGU6IHRoaXMubGlzdFR5cGUsXG5cdCAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG5cdCAgICAgICAgJ29uLXN0YXJ0JzogdGhpcy5oYW5kbGVTdGFydCxcblx0ICAgICAgICAnb24tcHJvZ3Jlc3MnOiB0aGlzLmhhbmRsZVByb2dyZXNzLFxuXHQgICAgICAgICdvbi1zdWNjZXNzJzogdGhpcy5oYW5kbGVTdWNjZXNzLFxuXHQgICAgICAgICdvbi1lcnJvcic6IHRoaXMuaGFuZGxlRXJyb3IsXG5cdCAgICAgICAgJ29uLXByZXZpZXcnOiB0aGlzLm9uUHJldmlldyxcblx0ICAgICAgICAnb24tcmVtb3ZlJzogdGhpcy5oYW5kbGVSZW1vdmUsXG5cdCAgICAgICAgJ2h0dHAtcmVxdWVzdCc6IHRoaXMuaHR0cFJlcXVlc3Rcblx0ICAgICAgfSxcblx0ICAgICAgcmVmOiAndXBsb2FkLWlubmVyJ1xuXHQgICAgfTtcblxuXHQgICAgdmFyIHRyaWdnZXIgPSB0aGlzLiRzbG90cy50cmlnZ2VyIHx8IHRoaXMuJHNsb3RzLmRlZmF1bHQ7XG5cdCAgICB2YXIgdXBsb2FkQ29tcG9uZW50ID0gdHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyB8fCB0aGlzLiRpc1NlcnZlciA/IGgoXG5cdCAgICAgICd1cGxvYWQnLFxuXHQgICAgICB1cGxvYWREYXRhLFxuXHQgICAgICBbdHJpZ2dlcl1cblx0ICAgICkgOiBoKFxuXHQgICAgICAnaWZyYW1lVXBsb2FkJyxcblx0ICAgICAgdXBsb2FkRGF0YSxcblx0ICAgICAgW3RyaWdnZXJdXG5cdCAgICApO1xuXG5cdCAgICByZXR1cm4gaChcblx0ICAgICAgJ2RpdicsXG5cdCAgICAgIG51bGwsXG5cdCAgICAgIFt0aGlzLmxpc3RUeXBlID09PSAncGljdHVyZS1jYXJkJyA/IHVwbG9hZExpc3QgOiAnJywgdGhpcy4kc2xvdHMudHJpZ2dlciA/IFt1cGxvYWRDb21wb25lbnQsIHRoaXMuJHNsb3RzLmRlZmF1bHRdIDogdXBsb2FkQ29tcG9uZW50LCB0aGlzLiRzbG90cy50aXAsIHRoaXMubGlzdFR5cGUgIT09ICdwaWN0dXJlLWNhcmQnID8gdXBsb2FkTGlzdCA6ICcnXVxuXHQgICAgKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyNzcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjc4KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjgwKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMjc4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2xvY2FsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG5cdHZhciBfbG9jYWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xvY2FsZSk7XG5cblx0dmFyIF9wcm9ncmVzcyA9IF9fd2VicGFja19yZXF1aXJlX18oMjc5KTtcblxuXHR2YXIgX3Byb2dyZXNzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Byb2dyZXNzKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG1peGluczogW19sb2NhbGUyLmRlZmF1bHRdLFxuXG5cdCAgY29tcG9uZW50czogeyBFbFByb2dyZXNzOiBfcHJvZ3Jlc3MyLmRlZmF1bHQgfSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBmaWxlczoge1xuXHQgICAgICB0eXBlOiBBcnJheSxcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZGlzYWJsZWQ6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogZmFsc2Vcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVQcmV2aWV3OiBGdW5jdGlvbixcblx0ICAgIGxpc3RUeXBlOiBTdHJpbmdcblx0ICB9LFxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIHBhcnNlUGVyY2VudGFnZTogZnVuY3Rpb24gcGFyc2VQZXJjZW50YWdlKHZhbCkge1xuXHQgICAgICByZXR1cm4gcGFyc2VJbnQodmFsLCAxMCk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGZpbGUpIHtcblx0ICAgICAgdGhpcy5oYW5kbGVQcmV2aWV3ICYmIHRoaXMuaGFuZGxlUHJldmlldyhmaWxlKTtcblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyNzkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3Byb2dyZXNzXCIpO1xuXG4vKioqLyB9LFxuLyogMjgwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygndHJhbnNpdGlvbi1ncm91cCcsIHtcblx0ICAgIGNsYXNzOiBbXG5cdCAgICAgICdlbC11cGxvYWQtbGlzdCcsXG5cdCAgICAgICdlbC11cGxvYWQtbGlzdC0tJyArIF92bS5saXN0VHlwZSwge1xuXHQgICAgICAgICdpcy1kaXNhYmxlZCc6IF92bS5kaXNhYmxlZFxuXHQgICAgICB9XG5cdCAgICBdLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJ0YWdcIjogXCJ1bFwiLFxuXHQgICAgICBcIm5hbWVcIjogXCJlbC1saXN0XCJcblx0ICAgIH1cblx0ICB9LCBfdm0uX2woKF92bS5maWxlcyksIGZ1bmN0aW9uKGZpbGUsIGluZGV4KSB7XG5cdCAgICByZXR1cm4gX2MoJ2xpJywge1xuXHQgICAgICBrZXk6IGluZGV4LFxuXHQgICAgICBjbGFzczogWydlbC11cGxvYWQtbGlzdF9faXRlbScsICdpcy0nICsgZmlsZS5zdGF0dXNdXG5cdCAgICB9LCBbKGZpbGUuc3RhdHVzICE9PSAndXBsb2FkaW5nJyAmJiBbJ3BpY3R1cmUtY2FyZCcsICdwaWN0dXJlJ10uaW5kZXhPZihfdm0ubGlzdFR5cGUpID4gLTEpID8gX2MoJ2ltZycsIHtcblx0ICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdXBsb2FkLWxpc3RfX2l0ZW0tdGh1bWJuYWlsXCIsXG5cdCAgICAgIGF0dHJzOiB7XG5cdCAgICAgICAgXCJzcmNcIjogZmlsZS51cmwsXG5cdCAgICAgICAgXCJhbHRcIjogXCJcIlxuXHQgICAgICB9XG5cdCAgICB9KSA6IF92bS5fZSgpLCBfYygnYScsIHtcblx0ICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZVwiLFxuXHQgICAgICBvbjoge1xuXHQgICAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgICBfdm0uaGFuZGxlQ2xpY2soZmlsZSlcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sIFtfYygnaScsIHtcblx0ICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1kb2N1bWVudFwiXG5cdCAgICB9KSwgX3ZtLl92KF92bS5fcyhmaWxlLm5hbWUpICsgXCJcXG4gICAgXCIpXSksIF9jKCdsYWJlbCcsIHtcblx0ICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVsXCJcblx0ICAgIH0sIFtfYygnaScsIHtcblx0ICAgICAgY2xhc3M6IHtcblx0ICAgICAgICAnZWwtaWNvbi11cGxvYWQtc3VjY2Vzcyc6IHRydWUsXG5cdCAgICAgICAgJ2VsLWljb24tY2lyY2xlLWNoZWNrJzogX3ZtLmxpc3RUeXBlID09PSAndGV4dCcsXG5cdCAgICAgICAgICAnZWwtaWNvbi1jaGVjayc6IFsncGljdHVyZS1jYXJkJywgJ3BpY3R1cmUnXS5pbmRleE9mKF92bS5saXN0VHlwZSkgPiAtMVxuXHQgICAgICB9XG5cdCAgICB9KV0pLCAoIV92bS5kaXNhYmxlZCkgPyBfYygnaScsIHtcblx0ICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1jbG9zZVwiLFxuXHQgICAgICBvbjoge1xuXHQgICAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgICBfdm0uJGVtaXQoJ3JlbW92ZScsIGZpbGUpXG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9KSA6IF92bS5fZSgpLCAoZmlsZS5zdGF0dXMgPT09ICd1cGxvYWRpbmcnKSA/IF9jKCdlbC1wcm9ncmVzcycsIHtcblx0ICAgICAgYXR0cnM6IHtcblx0ICAgICAgICBcInR5cGVcIjogX3ZtLmxpc3RUeXBlID09PSAncGljdHVyZS1jYXJkJyA/ICdjaXJjbGUnIDogJ2xpbmUnLFxuXHQgICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IF92bS5saXN0VHlwZSA9PT0gJ3BpY3R1cmUtY2FyZCcgPyA2IDogMixcblx0ICAgICAgICBcInBlcmNlbnRhZ2VcIjogX3ZtLnBhcnNlUGVyY2VudGFnZShmaWxlLnBlcmNlbnRhZ2UpXG5cdCAgICAgIH1cblx0ICAgIH0pIDogX3ZtLl9lKCksIChfdm0ubGlzdFR5cGUgPT09ICdwaWN0dXJlLWNhcmQnKSA/IF9jKCdzcGFuJywge1xuXHQgICAgICBzdGF0aWNDbGFzczogXCJlbC11cGxvYWQtbGlzdF9faXRlbS1hY3Rpb25zXCJcblx0ICAgIH0sIFsoX3ZtLmhhbmRsZVByZXZpZXcgJiYgX3ZtLmxpc3RUeXBlID09PSAncGljdHVyZS1jYXJkJykgPyBfYygnc3BhbicsIHtcblx0ICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdXBsb2FkLWxpc3RfX2l0ZW0tcHJldmlld1wiLFxuXHQgICAgICBvbjoge1xuXHQgICAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgICBfdm0uaGFuZGxlUHJldmlldyhmaWxlKVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSwgW19jKCdpJywge1xuXHQgICAgICBzdGF0aWNDbGFzczogXCJlbC1pY29uLXZpZXdcIlxuXHQgICAgfSldKSA6IF92bS5fZSgpLCAoIV92bS5kaXNhYmxlZCkgPyBfYygnc3BhbicsIHtcblx0ICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdXBsb2FkLWxpc3RfX2l0ZW0tZGVsZXRlXCIsXG5cdCAgICAgIG9uOiB7XG5cdCAgICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICAgIF92bS4kZW1pdCgncmVtb3ZlJywgZmlsZSlcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0sIFtfYygnaScsIHtcblx0ICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1kZWxldGUyXCJcblx0ICAgIH0pXSkgOiBfdm0uX2UoKV0pIDogX3ZtLl9lKCldLCAxKVxuXHQgIH0pKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAyODEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjgyKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIG51bGwsXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDI4MiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9hamF4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyODMpO1xuXG5cdHZhciBfYWpheDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hamF4KTtcblxuXHR2YXIgX3VwbG9hZERyYWdnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4NCk7XG5cblx0dmFyIF91cGxvYWREcmFnZ2VyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3VwbG9hZERyYWdnZXIpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIGluamVjdDogWyd1cGxvYWRlciddLFxuXHQgIGNvbXBvbmVudHM6IHtcblx0ICAgIFVwbG9hZERyYWdnZXI6IF91cGxvYWREcmFnZ2VyMi5kZWZhdWx0XG5cdCAgfSxcblx0ICBwcm9wczoge1xuXHQgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgYWN0aW9uOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgcmVxdWlyZWQ6IHRydWVcblx0ICAgIH0sXG5cdCAgICBuYW1lOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2ZpbGUnXG5cdCAgICB9LFxuXHQgICAgZGF0YTogT2JqZWN0LFxuXHQgICAgaGVhZGVyczogT2JqZWN0LFxuXHQgICAgd2l0aENyZWRlbnRpYWxzOiBCb29sZWFuLFxuXHQgICAgbXVsdGlwbGU6IEJvb2xlYW4sXG5cdCAgICBhY2NlcHQ6IFN0cmluZyxcblx0ICAgIG9uU3RhcnQ6IEZ1bmN0aW9uLFxuXHQgICAgb25Qcm9ncmVzczogRnVuY3Rpb24sXG5cdCAgICBvblN1Y2Nlc3M6IEZ1bmN0aW9uLFxuXHQgICAgb25FcnJvcjogRnVuY3Rpb24sXG5cdCAgICBiZWZvcmVVcGxvYWQ6IEZ1bmN0aW9uLFxuXHQgICAgZHJhZzogQm9vbGVhbixcblx0ICAgIG9uUHJldmlldzoge1xuXHQgICAgICB0eXBlOiBGdW5jdGlvbixcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7fVxuXHQgICAgfSxcblx0ICAgIG9uUmVtb3ZlOiB7XG5cdCAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuXHQgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHt9XG5cdCAgICB9LFxuXHQgICAgZmlsZUxpc3Q6IEFycmF5LFxuXHQgICAgYXV0b1VwbG9hZDogQm9vbGVhbixcblx0ICAgIGxpc3RUeXBlOiBTdHJpbmcsXG5cdCAgICBodHRwUmVxdWVzdDoge1xuXHQgICAgICB0eXBlOiBGdW5jdGlvbixcblx0ICAgICAgZGVmYXVsdDogX2FqYXgyLmRlZmF1bHRcblx0ICAgIH0sXG5cdCAgICBkaXNhYmxlZDogQm9vbGVhblxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgbW91c2VvdmVyOiBmYWxzZSxcblx0ICAgICAgcmVxczoge31cblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgaXNJbWFnZTogZnVuY3Rpb24gaXNJbWFnZShzdHIpIHtcblx0ICAgICAgcmV0dXJuIHN0ci5pbmRleE9mKCdpbWFnZScpICE9PSAtMTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShldikge1xuXHQgICAgICB2YXIgZmlsZXMgPSBldi50YXJnZXQuZmlsZXM7XG5cblx0ICAgICAgaWYgKCFmaWxlcykgcmV0dXJuO1xuXHQgICAgICB0aGlzLnVwbG9hZEZpbGVzKGZpbGVzKTtcblx0ICAgIH0sXG5cdCAgICB1cGxvYWRGaWxlczogZnVuY3Rpb24gdXBsb2FkRmlsZXMoZmlsZXMpIHtcblx0ICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgICB2YXIgcG9zdEZpbGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZmlsZXMpO1xuXHQgICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcblx0ICAgICAgICBwb3N0RmlsZXMgPSBwb3N0RmlsZXMuc2xpY2UoMCwgMSk7XG5cdCAgICAgIH1cblxuXHQgICAgICBpZiAocG9zdEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfVxuXG5cdCAgICAgIHBvc3RGaWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChyYXdGaWxlKSB7XG5cdCAgICAgICAgX3RoaXMub25TdGFydChyYXdGaWxlKTtcblx0ICAgICAgICBpZiAoX3RoaXMuYXV0b1VwbG9hZCkgX3RoaXMudXBsb2FkKHJhd0ZpbGUpO1xuXHQgICAgICB9KTtcblx0ICAgIH0sXG5cdCAgICB1cGxvYWQ6IGZ1bmN0aW9uIHVwbG9hZChyYXdGaWxlLCBmaWxlKSB7XG5cdCAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgICAgIHRoaXMuJHJlZnMuaW5wdXQudmFsdWUgPSBudWxsO1xuXG5cdCAgICAgIGlmICghdGhpcy5iZWZvcmVVcGxvYWQpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5wb3N0KHJhd0ZpbGUpO1xuXHQgICAgICB9XG5cblx0ICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuYmVmb3JlVXBsb2FkKHJhd0ZpbGUpO1xuXHQgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aGVuKSB7XG5cdCAgICAgICAgYmVmb3JlLnRoZW4oZnVuY3Rpb24gKHByb2Nlc3NlZEZpbGUpIHtcblx0ICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2Vzc2VkRmlsZSkgPT09ICdbb2JqZWN0IEZpbGVdJykge1xuXHQgICAgICAgICAgICBfdGhpczIucG9zdChwcm9jZXNzZWRGaWxlKTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIF90aGlzMi5wb3N0KHJhd0ZpbGUpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIF90aGlzMi5vblJlbW92ZShudWxsLCByYXdGaWxlKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfSBlbHNlIGlmIChiZWZvcmUgIT09IGZhbHNlKSB7XG5cdCAgICAgICAgdGhpcy5wb3N0KHJhd0ZpbGUpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMub25SZW1vdmUobnVsbCwgcmF3RmlsZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBhYm9ydDogZnVuY3Rpb24gYWJvcnQoZmlsZSkge1xuXHQgICAgICB2YXIgcmVxcyA9IHRoaXMucmVxcztcblxuXHQgICAgICBpZiAoZmlsZSkge1xuXHQgICAgICAgIHZhciB1aWQgPSBmaWxlO1xuXHQgICAgICAgIGlmIChmaWxlLnVpZCkgdWlkID0gZmlsZS51aWQ7XG5cdCAgICAgICAgaWYgKHJlcXNbdWlkXSkge1xuXHQgICAgICAgICAgcmVxc1t1aWRdLmFib3J0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIE9iamVjdC5rZXlzKHJlcXMpLmZvckVhY2goZnVuY3Rpb24gKHVpZCkge1xuXHQgICAgICAgICAgaWYgKHJlcXNbdWlkXSkgcmVxc1t1aWRdLmFib3J0KCk7XG5cdCAgICAgICAgICBkZWxldGUgcmVxc1t1aWRdO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcG9zdDogZnVuY3Rpb24gcG9zdChyYXdGaWxlKSB7XG5cdCAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG5cdCAgICAgIHZhciB1aWQgPSByYXdGaWxlLnVpZDtcblxuXHQgICAgICB2YXIgb3B0aW9ucyA9IHtcblx0ICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG5cdCAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLndpdGhDcmVkZW50aWFscyxcblx0ICAgICAgICBmaWxlOiByYXdGaWxlLFxuXHQgICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcblx0ICAgICAgICBmaWxlbmFtZTogdGhpcy5uYW1lLFxuXHQgICAgICAgIGFjdGlvbjogdGhpcy5hY3Rpb24sXG5cdCAgICAgICAgb25Qcm9ncmVzczogZnVuY3Rpb24gb25Qcm9ncmVzcyhlKSB7XG5cdCAgICAgICAgICBfdGhpczMub25Qcm9ncmVzcyhlLCByYXdGaWxlKTtcblx0ICAgICAgICB9LFxuXHQgICAgICAgIG9uU3VjY2VzczogZnVuY3Rpb24gb25TdWNjZXNzKHJlcykge1xuXHQgICAgICAgICAgX3RoaXMzLm9uU3VjY2VzcyhyZXMsIHJhd0ZpbGUpO1xuXHQgICAgICAgICAgZGVsZXRlIF90aGlzMy5yZXFzW3VpZF07XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBvbkVycm9yOiBmdW5jdGlvbiBvbkVycm9yKGVycikge1xuXHQgICAgICAgICAgX3RoaXMzLm9uRXJyb3IoZXJyLCByYXdGaWxlKTtcblx0ICAgICAgICAgIGRlbGV0ZSBfdGhpczMucmVxc1t1aWRdO1xuXHQgICAgICAgIH1cblx0ICAgICAgfTtcblx0ICAgICAgdmFyIHJlcSA9IHRoaXMuaHR0cFJlcXVlc3Qob3B0aW9ucyk7XG5cdCAgICAgIHRoaXMucmVxc1t1aWRdID0gcmVxO1xuXHQgICAgICBpZiAocmVxICYmIHJlcS50aGVuKSB7XG5cdCAgICAgICAgcmVxLnRoZW4ob3B0aW9ucy5vblN1Y2Nlc3MsIG9wdGlvbnMub25FcnJvcik7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soKSB7XG5cdCAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuXHQgICAgICAgIHRoaXMuJHJlZnMuaW5wdXQudmFsdWUgPSBudWxsO1xuXHQgICAgICAgIHRoaXMuJHJlZnMuaW5wdXQuY2xpY2soKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG5cdCAgICB2YXIgaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLFxuXHQgICAgICAgIGRyYWcgPSB0aGlzLmRyYWcsXG5cdCAgICAgICAgbmFtZSA9IHRoaXMubmFtZSxcblx0ICAgICAgICBoYW5kbGVDaGFuZ2UgPSB0aGlzLmhhbmRsZUNoYW5nZSxcblx0ICAgICAgICBtdWx0aXBsZSA9IHRoaXMubXVsdGlwbGUsXG5cdCAgICAgICAgYWNjZXB0ID0gdGhpcy5hY2NlcHQsXG5cdCAgICAgICAgbGlzdFR5cGUgPSB0aGlzLmxpc3RUeXBlLFxuXHQgICAgICAgIHVwbG9hZEZpbGVzID0gdGhpcy51cGxvYWRGaWxlcyxcblx0ICAgICAgICBkaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG5cblx0ICAgIHZhciBkYXRhID0ge1xuXHQgICAgICBjbGFzczoge1xuXHQgICAgICAgICdlbC11cGxvYWQnOiB0cnVlXG5cdCAgICAgIH0sXG5cdCAgICAgIG9uOiB7XG5cdCAgICAgICAgY2xpY2s6IGhhbmRsZUNsaWNrXG5cdCAgICAgIH1cblx0ICAgIH07XG5cdCAgICBkYXRhLmNsYXNzWydlbC11cGxvYWQtLScgKyBsaXN0VHlwZV0gPSB0cnVlO1xuXHQgICAgcmV0dXJuIGgoXG5cdCAgICAgICdkaXYnLFxuXHQgICAgICBkYXRhLFxuXHQgICAgICBbZHJhZyA/IGgoXG5cdCAgICAgICAgJ3VwbG9hZC1kcmFnZ2VyJyxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICBhdHRyczogeyBkaXNhYmxlZDogZGlzYWJsZWQgfSxcblx0ICAgICAgICAgIG9uOiB7XG5cdCAgICAgICAgICAgICdmaWxlJzogdXBsb2FkRmlsZXNcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIFt0aGlzLiRzbG90cy5kZWZhdWx0XVxuXHQgICAgICApIDogdGhpcy4kc2xvdHMuZGVmYXVsdCwgaChcblx0ICAgICAgICAnaW5wdXQnLFxuXHQgICAgICAgIHsgJ2NsYXNzJzogJ2VsLXVwbG9hZF9faW5wdXQnLCBhdHRyczogeyB0eXBlOiAnZmlsZScsIG5hbWU6IG5hbWUsIG11bHRpcGxlOiBtdWx0aXBsZSwgYWNjZXB0OiBhY2NlcHQgfSxcblx0ICAgICAgICAgIHJlZjogJ2lucHV0Jywgb246IHtcblx0ICAgICAgICAgICAgJ2NoYW5nZSc6IGhhbmRsZUNoYW5nZVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgW11cblx0ICAgICAgKV1cblx0ICAgICk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMjgzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0ZXhwb3J0cy5kZWZhdWx0ID0gdXBsb2FkO1xuXHRmdW5jdGlvbiBnZXRFcnJvcihhY3Rpb24sIG9wdGlvbiwgeGhyKSB7XG5cdCAgdmFyIG1zZyA9IHZvaWQgMDtcblx0ICBpZiAoeGhyLnJlc3BvbnNlKSB7XG5cdCAgICBtc2cgPSB4aHIuc3RhdHVzICsgJyAnICsgKHhoci5yZXNwb25zZS5lcnJvciB8fCB4aHIucmVzcG9uc2UpO1xuXHQgIH0gZWxzZSBpZiAoeGhyLnJlc3BvbnNlVGV4dCkge1xuXHQgICAgbXNnID0geGhyLnN0YXR1cyArICcgJyArIHhoci5yZXNwb25zZVRleHQ7XG5cdCAgfSBlbHNlIHtcblx0ICAgIG1zZyA9ICdmYWlsIHRvIHBvc3QgJyArIGFjdGlvbiArICcgJyArIHhoci5zdGF0dXM7XG5cdCAgfVxuXG5cdCAgdmFyIGVyciA9IG5ldyBFcnJvcihtc2cpO1xuXHQgIGVyci5zdGF0dXMgPSB4aHIuc3RhdHVzO1xuXHQgIGVyci5tZXRob2QgPSAncG9zdCc7XG5cdCAgZXJyLnVybCA9IGFjdGlvbjtcblx0ICByZXR1cm4gZXJyO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Qm9keSh4aHIpIHtcblx0ICB2YXIgdGV4dCA9IHhoci5yZXNwb25zZVRleHQgfHwgeGhyLnJlc3BvbnNlO1xuXHQgIGlmICghdGV4dCkge1xuXHQgICAgcmV0dXJuIHRleHQ7XG5cdCAgfVxuXG5cdCAgdHJ5IHtcblx0ICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuXHQgIH0gY2F0Y2ggKGUpIHtcblx0ICAgIHJldHVybiB0ZXh0O1xuXHQgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIHVwbG9hZChvcHRpb24pIHtcblx0ICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ID09PSAndW5kZWZpbmVkJykge1xuXHQgICAgcmV0dXJuO1xuXHQgIH1cblxuXHQgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0ICB2YXIgYWN0aW9uID0gb3B0aW9uLmFjdGlvbjtcblxuXHQgIGlmICh4aHIudXBsb2FkKSB7XG5cdCAgICB4aHIudXBsb2FkLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbiBwcm9ncmVzcyhlKSB7XG5cdCAgICAgIGlmIChlLnRvdGFsID4gMCkge1xuXHQgICAgICAgIGUucGVyY2VudCA9IGUubG9hZGVkIC8gZS50b3RhbCAqIDEwMDtcblx0ICAgICAgfVxuXHQgICAgICBvcHRpb24ub25Qcm9ncmVzcyhlKTtcblx0ICAgIH07XG5cdCAgfVxuXG5cdCAgdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cblx0ICBpZiAob3B0aW9uLmRhdGEpIHtcblx0ICAgIE9iamVjdC5rZXlzKG9wdGlvbi5kYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0ICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgb3B0aW9uLmRhdGFba2V5XSk7XG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBmb3JtRGF0YS5hcHBlbmQob3B0aW9uLmZpbGVuYW1lLCBvcHRpb24uZmlsZSk7XG5cblx0ICB4aHIub25lcnJvciA9IGZ1bmN0aW9uIGVycm9yKGUpIHtcblx0ICAgIG9wdGlvbi5vbkVycm9yKGUpO1xuXHQgIH07XG5cblx0ICB4aHIub25sb2FkID0gZnVuY3Rpb24gb25sb2FkKCkge1xuXHQgICAgaWYgKHhoci5zdGF0dXMgPCAyMDAgfHwgeGhyLnN0YXR1cyA+PSAzMDApIHtcblx0ICAgICAgcmV0dXJuIG9wdGlvbi5vbkVycm9yKGdldEVycm9yKGFjdGlvbiwgb3B0aW9uLCB4aHIpKTtcblx0ICAgIH1cblxuXHQgICAgb3B0aW9uLm9uU3VjY2VzcyhnZXRCb2R5KHhocikpO1xuXHQgIH07XG5cblx0ICB4aHIub3BlbigncG9zdCcsIGFjdGlvbiwgdHJ1ZSk7XG5cblx0ICBpZiAob3B0aW9uLndpdGhDcmVkZW50aWFscyAmJiAnd2l0aENyZWRlbnRpYWxzJyBpbiB4aHIpIHtcblx0ICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuXHQgIH1cblxuXHQgIHZhciBoZWFkZXJzID0gb3B0aW9uLmhlYWRlcnMgfHwge307XG5cblx0ICBmb3IgKHZhciBpdGVtIGluIGhlYWRlcnMpIHtcblx0ICAgIGlmIChoZWFkZXJzLmhhc093blByb3BlcnR5KGl0ZW0pICYmIGhlYWRlcnNbaXRlbV0gIT09IG51bGwpIHtcblx0ICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoaXRlbSwgaGVhZGVyc1tpdGVtXSk7XG5cdCAgICB9XG5cdCAgfVxuXHQgIHhoci5zZW5kKGZvcm1EYXRhKTtcblx0ICByZXR1cm4geGhyO1xuXHR9XG5cbi8qKiovIH0sXG4vKiAyODQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjg1KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjg2KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMjg1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsVXBsb2FkRHJhZycsXG5cdCAgcHJvcHM6IHtcblx0ICAgIGRpc2FibGVkOiBCb29sZWFuXG5cdCAgfSxcblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgZHJhZ292ZXI6IGZhbHNlXG5cdCAgICB9O1xuXHQgIH0sXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBvbkRyYWdvdmVyOiBmdW5jdGlvbiBvbkRyYWdvdmVyKCkge1xuXHQgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcblx0ICAgICAgICB0aGlzLmRyYWdvdmVyID0gdHJ1ZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG9uRHJvcDogZnVuY3Rpb24gb25Ecm9wKGUpIHtcblx0ICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG5cdCAgICAgICAgdGhpcy5kcmFnb3ZlciA9IGZhbHNlO1xuXHQgICAgICAgIHRoaXMuJGVtaXQoJ2ZpbGUnLCBlLmRhdGFUcmFuc2Zlci5maWxlcyk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAyODYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC11cGxvYWQtZHJhZ2dlclwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2lzLWRyYWdvdmVyJzogX3ZtLmRyYWdvdmVyXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJkcm9wXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIF92bS5vbkRyb3AoJGV2ZW50KVxuXHQgICAgICB9LFxuXHQgICAgICBcImRyYWdvdmVyXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIF92bS5vbkRyYWdvdmVyKCRldmVudClcblx0ICAgICAgfSxcblx0ICAgICAgXCJkcmFnbGVhdmVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgX3ZtLmRyYWdvdmVyID0gZmFsc2Vcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMjg3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4OCksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBudWxsLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAyODggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfdXBsb2FkRHJhZ2dlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjg0KTtcblxuXHR2YXIgX3VwbG9hZERyYWdnZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdXBsb2FkRHJhZ2dlcik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgY29tcG9uZW50czoge1xuXHQgICAgVXBsb2FkRHJhZ2dlcjogX3VwbG9hZERyYWdnZXIyLmRlZmF1bHRcblx0ICB9LFxuXHQgIHByb3BzOiB7XG5cdCAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICBkYXRhOiB7fSxcblx0ICAgIGFjdGlvbjoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIHJlcXVpcmVkOiB0cnVlXG5cdCAgICB9LFxuXHQgICAgbmFtZToge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICdmaWxlJ1xuXHQgICAgfSxcblx0ICAgIHdpdGhDcmVkZW50aWFsczogQm9vbGVhbixcblx0ICAgIGFjY2VwdDogU3RyaW5nLFxuXHQgICAgb25TdGFydDogRnVuY3Rpb24sXG5cdCAgICBvblByb2dyZXNzOiBGdW5jdGlvbixcblx0ICAgIG9uU3VjY2VzczogRnVuY3Rpb24sXG5cdCAgICBvbkVycm9yOiBGdW5jdGlvbixcblx0ICAgIGJlZm9yZVVwbG9hZDogRnVuY3Rpb24sXG5cdCAgICBvblByZXZpZXc6IHtcblx0ICAgICAgdHlwZTogRnVuY3Rpb24sXG5cdCAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge31cblx0ICAgIH0sXG5cdCAgICBvblJlbW92ZToge1xuXHQgICAgICB0eXBlOiBGdW5jdGlvbixcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7fVxuXHQgICAgfSxcblx0ICAgIGRyYWc6IEJvb2xlYW4sXG5cdCAgICBsaXN0VHlwZTogU3RyaW5nLFxuXHQgICAgZGlzYWJsZWQ6IEJvb2xlYW5cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIG1vdXNlb3ZlcjogZmFsc2UsXG5cdCAgICAgIGRvbWFpbjogJycsXG5cdCAgICAgIGZpbGU6IG51bGwsXG5cdCAgICAgIHN1Ym1pdHRpbmc6IGZhbHNlXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGlzSW1hZ2U6IGZ1bmN0aW9uIGlzSW1hZ2Uoc3RyKSB7XG5cdCAgICAgIHJldHVybiBzdHIuaW5kZXhPZignaW1hZ2UnKSAhPT0gLTE7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKCkge1xuXHQgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcblx0ICAgICAgICB0aGlzLiRyZWZzLmlucHV0LmNsaWNrKCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShldikge1xuXHQgICAgICB2YXIgZmlsZSA9IGV2LnRhcmdldC52YWx1ZTtcblx0ICAgICAgaWYgKGZpbGUpIHtcblx0ICAgICAgICB0aGlzLnVwbG9hZEZpbGVzKGZpbGUpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdXBsb2FkRmlsZXM6IGZ1bmN0aW9uIHVwbG9hZEZpbGVzKGZpbGUpIHtcblx0ICAgICAgaWYgKHRoaXMuc3VibWl0dGluZykgcmV0dXJuO1xuXHQgICAgICB0aGlzLnN1Ym1pdHRpbmcgPSB0cnVlO1xuXHQgICAgICB0aGlzLmZpbGUgPSBmaWxlO1xuXHQgICAgICB0aGlzLm9uU3RhcnQoZmlsZSk7XG5cblx0ICAgICAgdmFyIGZvcm1Ob2RlID0gdGhpcy5nZXRGb3JtTm9kZSgpO1xuXHQgICAgICB2YXIgZGF0YVNwYW4gPSB0aGlzLmdldEZvcm1EYXRhTm9kZSgpO1xuXHQgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcblx0ICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgZGF0YSA9IGRhdGEoZmlsZSk7XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIGlucHV0cyA9IFtdO1xuXHQgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YSkge1xuXHQgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0ICAgICAgICAgIGlucHV0cy5wdXNoKCc8aW5wdXQgbmFtZT1cIicgKyBrZXkgKyAnXCIgdmFsdWU9XCInICsgZGF0YVtrZXldICsgJ1wiLz4nKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgZGF0YVNwYW4uaW5uZXJIVE1MID0gaW5wdXRzLmpvaW4oJycpO1xuXHQgICAgICBmb3JtTm9kZS5zdWJtaXQoKTtcblx0ICAgICAgZGF0YVNwYW4uaW5uZXJIVE1MID0gJyc7XG5cdCAgICB9LFxuXHQgICAgZ2V0Rm9ybU5vZGU6IGZ1bmN0aW9uIGdldEZvcm1Ob2RlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcmVmcy5mb3JtO1xuXHQgICAgfSxcblx0ICAgIGdldEZvcm1EYXRhTm9kZTogZnVuY3Rpb24gZ2V0Rm9ybURhdGFOb2RlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcmVmcy5kYXRhO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgdGhpcy5mcmFtZU5hbWUgPSAnZnJhbWUtJyArIERhdGUubm93KCk7XG5cdCAgfSxcblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdmFyIHNlbGYgPSB0aGlzO1xuXHQgICAgIXRoaXMuJGlzU2VydmVyICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgIGlmICghc2VsZi5maWxlKSByZXR1cm47XG5cdCAgICAgIHZhciB0YXJnZXRPcmlnaW4gPSBuZXcgVVJMKHNlbGYuYWN0aW9uKS5vcmlnaW47XG5cdCAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IHRhcmdldE9yaWdpbikgcmV0dXJuO1xuXHQgICAgICB2YXIgcmVzcG9uc2UgPSBldmVudC5kYXRhO1xuXHQgICAgICBpZiAocmVzcG9uc2UucmVzdWx0ID09PSAnc3VjY2VzcycpIHtcblx0ICAgICAgICBzZWxmLm9uU3VjY2VzcyhyZXNwb25zZSwgc2VsZi5maWxlKTtcblx0ICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5yZXN1bHQgPT09ICdmYWlsZWQnKSB7XG5cdCAgICAgICAgc2VsZi5vbkVycm9yKHJlc3BvbnNlLCBzZWxmLmZpbGUpO1xuXHQgICAgICB9XG5cdCAgICAgIHNlbGYuc3VibWl0dGluZyA9IGZhbHNlO1xuXHQgICAgICBzZWxmLmZpbGUgPSBudWxsO1xuXHQgICAgfSwgZmFsc2UpO1xuXHQgIH0sXG5cdCAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuXHQgICAgdmFyIGRyYWcgPSB0aGlzLmRyYWcsXG5cdCAgICAgICAgdXBsb2FkRmlsZXMgPSB0aGlzLnVwbG9hZEZpbGVzLFxuXHQgICAgICAgIGxpc3RUeXBlID0gdGhpcy5saXN0VHlwZSxcblx0ICAgICAgICBmcmFtZU5hbWUgPSB0aGlzLmZyYW1lTmFtZSxcblx0ICAgICAgICBkaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG5cblx0ICAgIHZhciBvQ2xhc3MgPSB7ICdlbC11cGxvYWQnOiB0cnVlIH07XG5cdCAgICBvQ2xhc3NbJ2VsLXVwbG9hZC0tJyArIGxpc3RUeXBlXSA9IHRydWU7XG5cblx0ICAgIHJldHVybiBoKFxuXHQgICAgICAnZGl2Jyxcblx0ICAgICAge1xuXHQgICAgICAgICdjbGFzcyc6IG9DbGFzcyxcblx0ICAgICAgICBvbjoge1xuXHQgICAgICAgICAgJ2NsaWNrJzogdGhpcy5oYW5kbGVDbGlja1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgbmF0aXZlT246IHtcblx0ICAgICAgICAgICdkcm9wJzogdGhpcy5vbkRyb3AsXG5cdCAgICAgICAgICAnZHJhZ292ZXInOiB0aGlzLmhhbmRsZURyYWdvdmVyLFxuXHQgICAgICAgICAgJ2RyYWdsZWF2ZSc6IHRoaXMuaGFuZGxlRHJhZ2xlYXZlXG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICBbaChcblx0ICAgICAgICAnaWZyYW1lJyxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICBvbjoge1xuXHQgICAgICAgICAgICAnbG9hZCc6IHRoaXMub25sb2FkXG5cdCAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICByZWY6ICdpZnJhbWUnLFxuXHQgICAgICAgICAgYXR0cnM6IHsgbmFtZTogZnJhbWVOYW1lXG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBbXVxuXHQgICAgICApLCBoKFxuXHQgICAgICAgICdmb3JtJyxcblx0ICAgICAgICB7IHJlZjogJ2Zvcm0nLCBhdHRyczogeyBhY3Rpb246IHRoaXMuYWN0aW9uLCB0YXJnZXQ6IGZyYW1lTmFtZSwgZW5jdHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLCBtZXRob2Q6ICdQT1NUJyB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBbaChcblx0ICAgICAgICAgICdpbnB1dCcsXG5cdCAgICAgICAgICB7XG5cdCAgICAgICAgICAgICdjbGFzcyc6ICdlbC11cGxvYWRfX2lucHV0Jyxcblx0ICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogJ2ZpbGUnLFxuXG5cdCAgICAgICAgICAgICAgbmFtZTogJ2ZpbGUnLFxuXG5cdCAgICAgICAgICAgICAgYWNjZXB0OiB0aGlzLmFjY2VwdCB9LFxuXHQgICAgICAgICAgICByZWY6ICdpbnB1dCcsIG9uOiB7XG5cdCAgICAgICAgICAgICAgJ2NoYW5nZSc6IHRoaXMuaGFuZGxlQ2hhbmdlXG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0sXG5cdCAgICAgICAgICBbXVxuXHQgICAgICAgICksIGgoXG5cdCAgICAgICAgICAnaW5wdXQnLFxuXHQgICAgICAgICAge1xuXHQgICAgICAgICAgICBhdHRyczogeyB0eXBlOiAnaGlkZGVuJywgbmFtZTogJ2RvY3VtZW50RG9tYWluJywgdmFsdWU6IHRoaXMuJGlzU2VydmVyID8gJycgOiBkb2N1bWVudC5kb21haW4gfVxuXHQgICAgICAgICAgfSxcblx0ICAgICAgICAgIFtdXG5cdCAgICAgICAgKSwgaChcblx0ICAgICAgICAgICdzcGFuJyxcblx0ICAgICAgICAgIHsgcmVmOiAnZGF0YScgfSxcblx0ICAgICAgICAgIFtdXG5cdCAgICAgICAgKV1cblx0ICAgICAgKSwgZHJhZyA/IGgoXG5cdCAgICAgICAgJ3VwbG9hZC1kcmFnZ2VyJyxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICBvbjoge1xuXHQgICAgICAgICAgICAnZmlsZSc6IHVwbG9hZEZpbGVzXG5cdCAgICAgICAgICB9LFxuXHQgICAgICAgICAgYXR0cnM6IHsgZGlzYWJsZWQ6IGRpc2FibGVkIH1cblx0ICAgICAgICB9LFxuXHQgICAgICAgIFt0aGlzLiRzbG90cy5kZWZhdWx0XVxuXHQgICAgICApIDogdGhpcy4kc2xvdHMuZGVmYXVsdF1cblx0ICAgICk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMjg5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvbWlncmF0aW5nXCIpO1xuXG4vKioqLyB9LFxuLyogMjkwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3Byb2dyZXNzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOTEpO1xuXG5cdHZhciBfcHJvZ3Jlc3MyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvZ3Jlc3MpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X3Byb2dyZXNzMi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfcHJvZ3Jlc3MyLmRlZmF1bHQubmFtZSwgX3Byb2dyZXNzMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfcHJvZ3Jlc3MyLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAyOTEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjkyKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjkzKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMjkyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsUHJvZ3Jlc3MnLFxuXHQgIHByb3BzOiB7XG5cdCAgICB0eXBlOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2xpbmUnLFxuXHQgICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcblx0ICAgICAgICByZXR1cm4gWydsaW5lJywgJ2NpcmNsZSddLmluZGV4T2YodmFsKSA+IC0xO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcGVyY2VudGFnZToge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDAsXG5cdCAgICAgIHJlcXVpcmVkOiB0cnVlLFxuXHQgICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcblx0ICAgICAgICByZXR1cm4gdmFsID49IDAgJiYgdmFsIDw9IDEwMDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHN0YXR1czoge1xuXHQgICAgICB0eXBlOiBTdHJpbmdcblx0ICAgIH0sXG5cdCAgICBzdHJva2VXaWR0aDoge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDZcblx0ICAgIH0sXG5cdCAgICB0ZXh0SW5zaWRlOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IGZhbHNlXG5cdCAgICB9LFxuXHQgICAgd2lkdGg6IHtcblx0ICAgICAgdHlwZTogTnVtYmVyLFxuXHQgICAgICBkZWZhdWx0OiAxMjZcblx0ICAgIH0sXG5cdCAgICBzaG93VGV4dDoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9XG5cdCAgfSxcblx0ICBjb21wdXRlZDoge1xuXHQgICAgYmFyU3R5bGU6IGZ1bmN0aW9uIGJhclN0eWxlKCkge1xuXHQgICAgICB2YXIgc3R5bGUgPSB7fTtcblx0ICAgICAgc3R5bGUud2lkdGggPSB0aGlzLnBlcmNlbnRhZ2UgKyAnJSc7XG5cdCAgICAgIHJldHVybiBzdHlsZTtcblx0ICAgIH0sXG5cdCAgICByZWxhdGl2ZVN0cm9rZVdpZHRoOiBmdW5jdGlvbiByZWxhdGl2ZVN0cm9rZVdpZHRoKCkge1xuXHQgICAgICByZXR1cm4gKHRoaXMuc3Ryb2tlV2lkdGggLyB0aGlzLndpZHRoICogMTAwKS50b0ZpeGVkKDEpO1xuXHQgICAgfSxcblx0ICAgIHRyYWNrUGF0aDogZnVuY3Rpb24gdHJhY2tQYXRoKCkge1xuXHQgICAgICB2YXIgcmFkaXVzID0gcGFyc2VJbnQoNTAgLSBwYXJzZUZsb2F0KHRoaXMucmVsYXRpdmVTdHJva2VXaWR0aCkgLyAyLCAxMCk7XG5cblx0ICAgICAgcmV0dXJuICdNIDUwIDUwIG0gMCAtJyArIHJhZGl1cyArICcgYSAnICsgcmFkaXVzICsgJyAnICsgcmFkaXVzICsgJyAwIDEgMSAwICcgKyByYWRpdXMgKiAyICsgJyBhICcgKyByYWRpdXMgKyAnICcgKyByYWRpdXMgKyAnIDAgMSAxIDAgLScgKyByYWRpdXMgKiAyO1xuXHQgICAgfSxcblx0ICAgIHBlcmltZXRlcjogZnVuY3Rpb24gcGVyaW1ldGVyKCkge1xuXHQgICAgICB2YXIgcmFkaXVzID0gNTAgLSBwYXJzZUZsb2F0KHRoaXMucmVsYXRpdmVTdHJva2VXaWR0aCkgLyAyO1xuXHQgICAgICByZXR1cm4gMiAqIE1hdGguUEkgKiByYWRpdXM7XG5cdCAgICB9LFxuXHQgICAgY2lyY2xlUGF0aFN0eWxlOiBmdW5jdGlvbiBjaXJjbGVQYXRoU3R5bGUoKSB7XG5cdCAgICAgIHZhciBwZXJpbWV0ZXIgPSB0aGlzLnBlcmltZXRlcjtcblx0ICAgICAgcmV0dXJuIHtcblx0ICAgICAgICBzdHJva2VEYXNoYXJyYXk6IHBlcmltZXRlciArICdweCwnICsgcGVyaW1ldGVyICsgJ3B4Jyxcblx0ICAgICAgICBzdHJva2VEYXNob2Zmc2V0OiAoMSAtIHRoaXMucGVyY2VudGFnZSAvIDEwMCkgKiBwZXJpbWV0ZXIgKyAncHgnLFxuXHQgICAgICAgIHRyYW5zaXRpb246ICdzdHJva2UtZGFzaG9mZnNldCAwLjZzIGVhc2UgMHMsIHN0cm9rZSAwLjZzIGVhc2UnXG5cdCAgICAgIH07XG5cdCAgICB9LFxuXHQgICAgc3Ryb2tlOiBmdW5jdGlvbiBzdHJva2UoKSB7XG5cdCAgICAgIHZhciByZXQ7XG5cdCAgICAgIHN3aXRjaCAodGhpcy5zdGF0dXMpIHtcblx0ICAgICAgICBjYXNlICdzdWNjZXNzJzpcblx0ICAgICAgICAgIHJldCA9ICcjMTNjZTY2Jztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIGNhc2UgJ2V4Y2VwdGlvbic6XG5cdCAgICAgICAgICByZXQgPSAnI2ZmNDk0OSc7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgcmV0ID0gJyMyMGEwZmYnO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiByZXQ7XG5cdCAgICB9LFxuXHQgICAgaWNvbkNsYXNzOiBmdW5jdGlvbiBpY29uQ2xhc3MoKSB7XG5cdCAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdsaW5lJykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnID8gJ2VsLWljb24tY2lyY2xlLWNoZWNrJyA6ICdlbC1pY29uLWNpcmNsZS1jcm9zcyc7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSAnc3VjY2VzcycgPyAnZWwtaWNvbi1jaGVjaycgOiAnZWwtaWNvbi1jbG9zZSc7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBwcm9ncmVzc1RleHRTaXplOiBmdW5jdGlvbiBwcm9ncmVzc1RleHRTaXplKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnbGluZScgPyAxMiArIHRoaXMuc3Ryb2tlV2lkdGggKiAwLjQgOiB0aGlzLndpZHRoICogMC4xMTExMTEgKyAyO1xuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDI5MyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzXCIsXG5cdCAgICBjbGFzczogW1xuXHQgICAgICAnZWwtcHJvZ3Jlc3MtLScgKyBfdm0udHlwZSxcblx0ICAgICAgX3ZtLnN0YXR1cyA/ICdpcy0nICsgX3ZtLnN0YXR1cyA6ICcnLCB7XG5cdCAgICAgICAgJ2VsLXByb2dyZXNzLS13aXRob3V0LXRleHQnOiAhX3ZtLnNob3dUZXh0LFxuXHQgICAgICAgICdlbC1wcm9ncmVzcy0tdGV4dC1pbnNpZGUnOiBfdm0udGV4dEluc2lkZSxcblx0ICAgICAgfVxuXHQgICAgXVxuXHQgIH0sIFsoX3ZtLnR5cGUgPT09ICdsaW5lJykgPyBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtYmFyXCJcblx0ICB9LCBbX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzLWJhcl9fb3V0ZXJcIixcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICBoZWlnaHQ6IF92bS5zdHJva2VXaWR0aCArICdweCdcblx0ICAgIH0pXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzcy1iYXJfX2lubmVyXCIsXG5cdCAgICBzdHlsZTogKF92bS5iYXJTdHlsZSlcblx0ICB9LCBbKF92bS5zaG93VGV4dCAmJiBfdm0udGV4dEluc2lkZSkgPyBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtYmFyX19pbm5lclRleHRcIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS5wZXJjZW50YWdlKSArIFwiJVwiKV0pIDogX3ZtLl9lKCldKV0pXSkgOiBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtY2lyY2xlXCIsXG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgaGVpZ2h0OiBfdm0ud2lkdGggKyAncHgnLFxuXHQgICAgICB3aWR0aDogX3ZtLndpZHRoICsgJ3B4J1xuXHQgICAgfSlcblx0ICB9LCBbX2MoJ3N2ZycsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidmlld0JveFwiOiBcIjAgMCAxMDAgMTAwXCJcblx0ICAgIH1cblx0ICB9LCBbX2MoJ3BhdGgnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzcy1jaXJjbGVfX3RyYWNrXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcImRcIjogX3ZtLnRyYWNrUGF0aCxcblx0ICAgICAgXCJzdHJva2VcIjogXCIjZTVlOWYyXCIsXG5cdCAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IF92bS5yZWxhdGl2ZVN0cm9rZVdpZHRoLFxuXHQgICAgICBcImZpbGxcIjogXCJub25lXCJcblx0ICAgIH1cblx0ICB9KSwgX2MoJ3BhdGgnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzcy1jaXJjbGVfX3BhdGhcIixcblx0ICAgIHN0eWxlOiAoX3ZtLmNpcmNsZVBhdGhTdHlsZSksXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcImRcIjogX3ZtLnRyYWNrUGF0aCxcblx0ICAgICAgXCJzdHJva2UtbGluZWNhcFwiOiBcInJvdW5kXCIsXG5cdCAgICAgIFwic3Ryb2tlXCI6IF92bS5zdHJva2UsXG5cdCAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IF92bS5yZWxhdGl2ZVN0cm9rZVdpZHRoLFxuXHQgICAgICBcImZpbGxcIjogXCJub25lXCJcblx0ICAgIH1cblx0ICB9KV0pXSksIChfdm0uc2hvd1RleHQgJiYgIV92bS50ZXh0SW5zaWRlKSA/IF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzc19fdGV4dFwiLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIGZvbnRTaXplOiBfdm0ucHJvZ3Jlc3NUZXh0U2l6ZSArICdweCdcblx0ICAgIH0pXG5cdCAgfSwgWyghX3ZtLnN0YXR1cykgPyBbX3ZtLl92KF92bS5fcyhfdm0ucGVyY2VudGFnZSkgKyBcIiVcIildIDogX2MoJ2knLCB7XG5cdCAgICBjbGFzczogX3ZtLmljb25DbGFzc1xuXHQgIH0pXSwgMikgOiBfdm0uX2UoKV0pXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDI5NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9zcGlubmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOTUpO1xuXG5cdHZhciBfc3Bpbm5lcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zcGlubmVyKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9zcGlubmVyMi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfc3Bpbm5lcjIuZGVmYXVsdC5uYW1lLCBfc3Bpbm5lcjIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX3NwaW5uZXIyLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAyOTUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjk2KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjk3KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMjk2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsU3Bpbm5lcicsXG5cdCAgcHJvcHM6IHtcblx0ICAgIHR5cGU6IFN0cmluZyxcblx0ICAgIHJhZGl1czoge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDEwMFxuXHQgICAgfSxcblx0ICAgIHN0cm9rZVdpZHRoOiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogNVxuXHQgICAgfSxcblx0ICAgIHN0cm9rZUNvbG9yOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJyNlZmVmZWYnXG5cdCAgICB9XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMjk3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnc3BhbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXNwaW5uZXJcIlxuXHQgIH0sIFtfYygnc3ZnJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtc3Bpbm5lci1pbm5lclwiLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIHdpZHRoOiBfdm0ucmFkaXVzIC8gMiArICdweCcsXG5cdCAgICAgIGhlaWdodDogX3ZtLnJhZGl1cyAvIDIgKyAncHgnXG5cdCAgICB9KSxcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidmlld0JveFwiOiBcIjAgMCA1MCA1MFwiXG5cdCAgICB9XG5cdCAgfSwgW19jKCdjaXJjbGUnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJwYXRoXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcImN4XCI6IFwiMjVcIixcblx0ICAgICAgXCJjeVwiOiBcIjI1XCIsXG5cdCAgICAgIFwiclwiOiBcIjIwXCIsXG5cdCAgICAgIFwiZmlsbFwiOiBcIm5vbmVcIixcblx0ICAgICAgXCJzdHJva2VcIjogX3ZtLnN0cm9rZUNvbG9yLFxuXHQgICAgICBcInN0cm9rZS13aWR0aFwiOiBfdm0uc3Ryb2tlV2lkdGhcblx0ICAgIH1cblx0ICB9KV0pXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMjk4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX21haW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5OSk7XG5cblx0dmFyIF9tYWluMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21haW4pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX21haW4yLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAyOTkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfdnVlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xuXG5cdHZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZSk7XG5cblx0dmFyIF9wb3B1cCA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xuXG5cdHZhciBfdmRvbSA9IF9fd2VicGFja19yZXF1aXJlX18oMTk0KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdHZhciBNZXNzYWdlQ29uc3RydWN0b3IgPSBfdnVlMi5kZWZhdWx0LmV4dGVuZChfX3dlYnBhY2tfcmVxdWlyZV9fKDMwMCkpO1xuXG5cdHZhciBpbnN0YW5jZSA9IHZvaWQgMDtcblx0dmFyIGluc3RhbmNlcyA9IFtdO1xuXHR2YXIgc2VlZCA9IDE7XG5cblx0dmFyIE1lc3NhZ2UgPSBmdW5jdGlvbiBNZXNzYWdlKG9wdGlvbnMpIHtcblx0ICBpZiAoX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm47XG5cdCAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdCAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJykge1xuXHQgICAgb3B0aW9ucyA9IHtcblx0ICAgICAgbWVzc2FnZTogb3B0aW9uc1xuXHQgICAgfTtcblx0ICB9XG5cdCAgdmFyIHVzZXJPbkNsb3NlID0gb3B0aW9ucy5vbkNsb3NlO1xuXHQgIHZhciBpZCA9ICdtZXNzYWdlXycgKyBzZWVkKys7XG5cblx0ICBvcHRpb25zLm9uQ2xvc2UgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICBNZXNzYWdlLmNsb3NlKGlkLCB1c2VyT25DbG9zZSk7XG5cdCAgfTtcblx0ICBpbnN0YW5jZSA9IG5ldyBNZXNzYWdlQ29uc3RydWN0b3Ioe1xuXHQgICAgZGF0YTogb3B0aW9uc1xuXHQgIH0pO1xuXHQgIGluc3RhbmNlLmlkID0gaWQ7XG5cdCAgaWYgKCgwLCBfdmRvbS5pc1ZOb2RlKShpbnN0YW5jZS5tZXNzYWdlKSkge1xuXHQgICAgaW5zdGFuY2UuJHNsb3RzLmRlZmF1bHQgPSBbaW5zdGFuY2UubWVzc2FnZV07XG5cdCAgICBpbnN0YW5jZS5tZXNzYWdlID0gbnVsbDtcblx0ICB9XG5cdCAgaW5zdGFuY2Uudm0gPSBpbnN0YW5jZS4kbW91bnQoKTtcblx0ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGluc3RhbmNlLnZtLiRlbCk7XG5cdCAgaW5zdGFuY2Uudm0udmlzaWJsZSA9IHRydWU7XG5cdCAgaW5zdGFuY2UuZG9tID0gaW5zdGFuY2Uudm0uJGVsO1xuXHQgIGluc3RhbmNlLmRvbS5zdHlsZS56SW5kZXggPSBfcG9wdXAuUG9wdXBNYW5hZ2VyLm5leHRaSW5kZXgoKTtcblx0ICBpbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG5cdCAgcmV0dXJuIGluc3RhbmNlLnZtO1xuXHR9O1xuXG5cdFsnc3VjY2VzcycsICd3YXJuaW5nJywgJ2luZm8nLCAnZXJyb3InXS5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG5cdCAgTWVzc2FnZVt0eXBlXSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG5cdCAgICAgIG9wdGlvbnMgPSB7XG5cdCAgICAgICAgbWVzc2FnZTogb3B0aW9uc1xuXHQgICAgICB9O1xuXHQgICAgfVxuXHQgICAgb3B0aW9ucy50eXBlID0gdHlwZTtcblx0ICAgIHJldHVybiBNZXNzYWdlKG9wdGlvbnMpO1xuXHQgIH07XG5cdH0pO1xuXG5cdE1lc3NhZ2UuY2xvc2UgPSBmdW5jdGlvbiAoaWQsIHVzZXJPbkNsb3NlKSB7XG5cdCAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGluc3RhbmNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHQgICAgaWYgKGlkID09PSBpbnN0YW5jZXNbaV0uaWQpIHtcblx0ICAgICAgaWYgKHR5cGVvZiB1c2VyT25DbG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgIHVzZXJPbkNsb3NlKGluc3RhbmNlc1tpXSk7XG5cdCAgICAgIH1cblx0ICAgICAgaW5zdGFuY2VzLnNwbGljZShpLCAxKTtcblx0ICAgICAgYnJlYWs7XG5cdCAgICB9XG5cdCAgfVxuXHR9O1xuXG5cdE1lc3NhZ2UuY2xvc2VBbGwgPSBmdW5jdGlvbiAoKSB7XG5cdCAgZm9yICh2YXIgaSA9IGluc3RhbmNlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHQgICAgaW5zdGFuY2VzW2ldLmNsb3NlKCk7XG5cdCAgfVxuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IE1lc3NhZ2U7XG5cbi8qKiovIH0sXG4vKiAzMDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzAxKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzA3KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMzAxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHZpc2libGU6IGZhbHNlLFxuXHQgICAgICBtZXNzYWdlOiAnJyxcblx0ICAgICAgZHVyYXRpb246IDMwMDAsXG5cdCAgICAgIHR5cGU6ICdpbmZvJyxcblx0ICAgICAgaWNvbkNsYXNzOiAnJyxcblx0ICAgICAgY3VzdG9tQ2xhc3M6ICcnLFxuXHQgICAgICBvbkNsb3NlOiBudWxsLFxuXHQgICAgICBzaG93Q2xvc2U6IGZhbHNlLFxuXHQgICAgICBjbG9zZWQ6IGZhbHNlLFxuXHQgICAgICB0aW1lcjogbnVsbFxuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgdHlwZUltZzogZnVuY3Rpb24gdHlwZUltZygpIHtcblx0ICAgICAgcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMzAyKShcIi4vXCIgKyB0aGlzLnR5cGUgKyAnLnN2ZycpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICB3YXRjaDoge1xuXHQgICAgY2xvc2VkOiBmdW5jdGlvbiBjbG9zZWQobmV3VmFsKSB7XG5cdCAgICAgIGlmIChuZXdWYWwpIHtcblx0ICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcblx0ICAgICAgICB0aGlzLiRlbC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgdGhpcy5kZXN0cm95RWxlbWVudCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgZGVzdHJveUVsZW1lbnQ6IGZ1bmN0aW9uIGRlc3Ryb3lFbGVtZW50KCkge1xuXHQgICAgICB0aGlzLiRlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgdGhpcy5kZXN0cm95RWxlbWVudCk7XG5cdCAgICAgIHRoaXMuJGRlc3Ryb3kodHJ1ZSk7XG5cdCAgICAgIHRoaXMuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWwpO1xuXHQgICAgfSxcblx0ICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSgpIHtcblx0ICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuXHQgICAgICBpZiAodHlwZW9mIHRoaXMub25DbG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgIHRoaXMub25DbG9zZSh0aGlzKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGNsZWFyVGltZXI6IGZ1bmN0aW9uIGNsZWFyVGltZXIoKSB7XG5cdCAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcblx0ICAgIH0sXG5cdCAgICBzdGFydFRpbWVyOiBmdW5jdGlvbiBzdGFydFRpbWVyKCkge1xuXHQgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICAgIGlmICh0aGlzLmR1cmF0aW9uID4gMCkge1xuXHQgICAgICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIGlmICghX3RoaXMuY2xvc2VkKSB7XG5cdCAgICAgICAgICAgIF90aGlzLmNsb3NlKCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSwgdGhpcy5kdXJhdGlvbik7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcblx0ICAgIHRoaXMuc3RhcnRUaW1lcigpO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcbi8qIDMwMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIG1hcCA9IHtcblx0XHRcIi4vZXJyb3Iuc3ZnXCI6IDMwMyxcblx0XHRcIi4vaW5mby5zdmdcIjogMzA0LFxuXHRcdFwiLi9zdWNjZXNzLnN2Z1wiOiAzMDUsXG5cdFx0XCIuL3dhcm5pbmcuc3ZnXCI6IDMwNlxuXHR9O1xuXHRmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyh3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSk7XG5cdH07XG5cdGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0XHRyZXR1cm4gbWFwW3JlcV0gfHwgKGZ1bmN0aW9uKCkgeyB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInLlwiKSB9KCkpO1xuXHR9O1xuXHR3ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xuXHR9O1xuXHR3ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xuXHRtb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xuXHR3ZWJwYWNrQ29udGV4dC5pZCA9IDMwMjtcblxuXG4vKioqLyB9LFxuLyogMzAzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpVlZSR0xUZ2lJSE4wWVc1a1lXeHZibVU5SW01dklqOCtDanh6ZG1jZ2QybGtkR2c5SWpRd2NIZ2lJR2hsYVdkb2REMGlOREJ3ZUNJZ2RtbGxkMEp2ZUQwaU1DQXdJRFF3SURRd0lpQjJaWEp6YVc5dVBTSXhMakVpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUlnZUcxc2JuTTZlR3hwYm1zOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6RTVPVGt2ZUd4cGJtc2lQZ29nSUNBZ1BDRXRMU0JIWlc1bGNtRjBiM0k2SUZOclpYUmphQ0F6T1M0eElDZ3pNVGN5TUNrZ0xTQm9kSFJ3T2k4dmQzZDNMbUp2YUdWdGFXRnVZMjlrYVc1bkxtTnZiUzl6YTJWMFkyZ2dMUzArQ2lBZ0lDQThkR2wwYkdVK2FXTnZibDlrWVc1blpYSThMM1JwZEd4bFBnb2dJQ0FnUEdSbGMyTStRM0psWVhSbFpDQjNhWFJvSUZOclpYUmphQzQ4TDJSbGMyTStDaUFnSUNBOFpHVm1jejQ4TDJSbFpuTStDaUFnSUNBOFp5QnBaRDBpUld4bGJXVnVkQzFuZFdsa1pXeHBibVV0ZGpBdU1pNDBJaUJ6ZEhKdmEyVTlJbTV2Ym1VaUlITjBjbTlyWlMxM2FXUjBhRDBpTVNJZ1ptbHNiRDBpYm05dVpTSWdabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJajRLSUNBZ0lDQWdJQ0E4WnlCcFpEMGlUV1Z6YzJGblpTSWdkSEpoYm5ObWIzSnRQU0owY21GdWMyeGhkR1VvTFRZd0xqQXdNREF3TUN3Z0xUTXpNaTR3TURBd01EQXBJajRLSUNBZ0lDQWdJQ0FnSUNBZ1BHY2dhV1E5SXVXNHB1V0F2dVdRa1Yva3Y2SG1nYThpSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtEWXdMakF3TURBd01Dd2dNek15TGpBd01EQXdNQ2tpUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEdjZ2FXUTlJbEpsWTNSaGJtZHNaUzB5SWo0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThaeUJwWkQwaWFXTnZibDlrWVc1blpYSWlQZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThjbVZqZENCcFpEMGlVbVZqZEdGdVoyeGxMVElpSUdacGJHdzlJaU5HUmpRNU5Ea2lJSGc5SWpBaUlIazlJakFpSUhkcFpIUm9QU0kwTUNJZ2FHVnBaMmgwUFNJME1DSStQQzl5WldOMFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBOGNHRjBhQ0JrUFNKTk1qVXVPREUzTWpZeU55d3hOaTR6TkRVeE56azJJRU15TlM0NU16a3dPVEF5TERFMkxqSXlNek0wT0RNZ01qWXNNVFl1TURjMk1UUXhPQ0F5Tml3eE5TNDVNRE0xTlRJeklFTXlOaXd4TlM0M016QTVOakk0SURJMUxqa3pPVEE1TURJc01UVXVOVGd6TnpVMk15QXlOUzQ0TVRjeU5qSTNMREUxTGpRMk1Ua3lPRGtnVERJMExqVXdOell4TlRjc01UUXVNVGd5TnpReE1TQkRNalF1TXpnMU56ZzRNaXd4TkM0d05qQTVNVE0zSURJMExqSTBNelkxTnpVc01UUWdNalF1TURneE1qRTVOaXd4TkNCRE1qTXVPVEU0TnpneE55d3hOQ0F5TXk0M056WTJOVEVzTVRRdU1EWXdPVEV6TnlBeU15NDJOVFE0TWpNMUxERTBMakU0TWpjME1URWdUREl3TERFM0xqZ3pOelUyTXpVZ1RERTJMak14TkRjeU1UWXNNVFF1TVRneU56UXhNU0JETVRZdU1Ua3lPRGt3TWl3eE5DNHdOakE1TVRNM0lERTJMakExTURjMU9UVXNNVFFnTVRVdU9EZzRNekl4Tml3eE5DQkRNVFV1TnpJMU9EZzNOaXd4TkNBeE5TNDFPRE0zTlRZNUxERTBMakEyTURreE16Y2dNVFV1TkRZeE9USTVOQ3d4TkM0eE9ESTNOREV4SUV3eE5DNHhOVEl5T0RJMExERTFMalEyTVRreU9Ea2dRekUwTGpBMU1EYzFPRElzTVRVdU5UZ3pOelUyTXlBeE5Dd3hOUzQzTXpBNU5qSTRJREUwTERFMUxqa3dNelUxTWpNZ1F6RTBMREUyTGpBM05qRTBNVGdnTVRRdU1EVXdOelU0TWl3eE5pNHlNak16TkRneklERTBMakUxTWpJNE1qUXNNVFl1TXpRMU1UYzVOaUJNTVRjdU9ETTNOVFl3T0N3eU1DNHdNREF3TURFNUlFd3hOQzR4TlRJeU9ESTBMREl6TGpZMU5EZ3lORE1nUXpFMExqQTFNRGMxT0RJc01qTXVOemMyTmpVeE55QXhOQ3d5TXk0NU1qTTROVGd5SURFMExESTBMakE1TmpRME56Y2dRekUwTERJMExqSTJPVEF6TnpJZ01UUXVNRFV3TnpVNE1pd3lOQzQwTVRZeU5ETTNJREUwTGpFMU1qSTRNalFzTWpRdU5UTTRNRGN4TVNCTU1UVXVORFl4T1RJNU5Dd3lOUzQ0TVRjeU5UZzVJRU14TlM0MU9ETTNOVFk1TERJMUxqa3pPVEE0TmpNZ01UVXVOekkxT0RnM05pd3lOaUF4TlM0NE9EZ3pNakUyTERJMklFTXhOaTR3TlRBM05UazFMREkySURFMkxqRTVNamc1TURJc01qVXVPVE01TURnMk15QXhOaTR6TVRRM01qRTJMREkxTGpneE56STFPRGtnVERJd0xESXlMakUyTWpRek5qVWdUREl6TGpZMU5EZ3lNelVzTWpVdU9ERTNNalU0T1NCRE1qTXVOemMyTmpVeExESTFMamt6T1RBNE5qTWdNak11T1RFNE56Z3hOeXd5TmlBeU5DNHdPREV5TVRrMkxESTJJRU15TkM0eU5ETTJOVGMxTERJMklESTBMak00TlRjNE9ESXNNalV1T1RNNU1EZzJNeUF5TkM0MU1EYzJNVFUzTERJMUxqZ3hOekkxT0RrZ1RESTFMamd4TnpJMk1qY3NNalF1TlRNNE1EY3hNU0JETWpVdU9UTTVNRGt3TWl3eU5DNDBNVFl5TkRNM0lESTJMREkwTGpJMk9UQXpOeklnTWpZc01qUXVNRGsyTkRRM055QkRNallzTWpNdU9USXpPRFU0TWlBeU5TNDVNemt3T1RBeUxESXpMamMzTmpZMU1UY2dNalV1T0RFM01qWXlOeXd5TXk0Mk5UUTRNalF6SUV3eU1pNHhNekU1T0RBMExESXdMakF3TURBd01Ua2dUREkxTGpneE56STJNamNzTVRZdU16UTFNVGM1TmlCYUlpQnBaRDBpVUdGMGFDSWdabWxzYkQwaUkwWkdSa1pHUmlJK1BDOXdZWFJvUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZaejRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHd2Wno0S0lDQWdJQ0FnSUNBZ0lDQWdQQzluUGdvZ0lDQWdJQ0FnSUR3dlp6NEtJQ0FnSUR3dlp6NEtQQzl6ZG1jK1wiXG5cbi8qKiovIH0sXG4vKiAzMDQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaUlITjBZVzVrWVd4dmJtVTlJbTV2SWo4K0NqeHpkbWNnZDJsa2RHZzlJalF3Y0hnaUlHaGxhV2RvZEQwaU5EQndlQ0lnZG1sbGQwSnZlRDBpTUNBd0lEUXdJRFF3SWlCMlpYSnphVzl1UFNJeExqRWlJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SWdlRzFzYm5NNmVHeHBibXM5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZlR3hwYm1zaVBnb2dJQ0FnUENFdExTQkhaVzVsY21GMGIzSTZJRk5yWlhSamFDQXpPUzR4SUNnek1UY3lNQ2tnTFNCb2RIUndPaTh2ZDNkM0xtSnZhR1Z0YVdGdVkyOWthVzVuTG1OdmJTOXphMlYwWTJnZ0xTMCtDaUFnSUNBOGRHbDBiR1UrYVdOdmJsOXBibVp2UEM5MGFYUnNaVDRLSUNBZ0lEeGtaWE5qUGtOeVpXRjBaV1FnZDJsMGFDQlRhMlYwWTJndVBDOWtaWE5qUGdvZ0lDQWdQR1JsWm5NK1BDOWtaV1p6UGdvZ0lDQWdQR2NnYVdROUlrVnNaVzFsYm5RdFozVnBaR1ZzYVc1bExYWXdMakl1TkNJZ2MzUnliMnRsUFNKdWIyNWxJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqRWlJR1pwYkd3OUltNXZibVVpSUdacGJHd3RjblZzWlQwaVpYWmxibTlrWkNJK0NpQWdJQ0FnSUNBZ1BHY2dhV1E5SWsxbGMzTmhaMlVpSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtDMDJNQzR3TURBd01EQXNJQzB4TlRJdU1EQXdNREF3S1NJK0NpQWdJQ0FnSUNBZ0lDQWdJRHhuSUdsa1BTTGx1S2JsZ0w3bGtKRmY1TCtoNW9HdklpQjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2cyTUM0d01EQXdNREFzSURFMU1pNHdNREF3TURBcElqNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEeG5JR2xrUFNKU1pXTjBZVzVuYkdVdE1pSStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEdjZ2FXUTlJbWxqYjI1ZmFXNW1ieUkrQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHh5WldOMElHbGtQU0pTWldOMFlXNW5iR1V0TWlJZ1ptbHNiRDBpSXpVd1FrWkdSaUlnZUQwaU1DSWdlVDBpTUNJZ2QybGtkR2c5SWpRd0lpQm9aV2xuYUhROUlqUXdJajQ4TDNKbFkzUStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEeHdZWFJvSUdROUlrMHlNUzQyTVRVek9EUTJMREkyTGpVME16SXdPVGtnUXpJeExqWXhOVE00TkRZc01qWXVPVFEzT0RjMU1TQXlNUzQwTlRnek16UTRMREkzTGpJNU1UZ3pOamdnTWpFdU1UUTBNak13T0N3eU55NDFOelV4TURJNUlFTXlNQzQ0TXpBeE1qWTRMREkzTGpnMU9ETTJPRGtnTWpBdU5EUTROekU1TkN3eU9DQXlNQ3d5T0NCRE1Ua3VOVFV4TWpnd05pd3lPQ0F4T1M0eE5qazROek15TERJM0xqZzFPRE0yT0RrZ01UZ3VPRFUxTnpZNU1pd3lOeTQxTnpVeE1ESTVJRU14T0M0MU5ERTJOalV5TERJM0xqSTVNVGd6TmpnZ01UZ3VNemcwTmpFMU5Dd3lOaTQ1TkRjNE56VXhJREU0TGpNNE5EWXhOVFFzTWpZdU5UUXpNakE1T1NCTU1UZ3VNemcwTmpFMU5Dd3hPUzQzTkRRNE5UWWdRekU0TGpNNE5EWXhOVFFzTVRrdU16UXdNVGt3TnlBeE9DNDFOREUyTmpVeUxERTRMams1TmpJeU9TQXhPQzQ0TlRVM05qa3lMREU0TGpjeE1qazJNeUJETVRrdU1UWTVPRGN6TWl3eE9DNDBNamsyT1RZNUlERTVMalUxTVRJNE1EWXNNVGd1TWpnNE1EWTFPQ0F5TUN3eE9DNHlPRGd3TmpVNElFTXlNQzQwTkRnM01UazBMREU0TGpJNE9EQTJOVGdnTWpBdU9ETXdNVEkyT0N3eE9DNDBNamsyT1RZNUlESXhMakUwTkRJek1EZ3NNVGd1TnpFeU9UWXpJRU15TVM0ME5UZ3pNelE0TERFNExqazVOakl5T1NBeU1TNDJNVFV6T0RRMkxERTVMak0wTURFNU1EY2dNakV1TmpFMU16ZzBOaXd4T1M0M05EUTROVFlnVERJeExqWXhOVE00TkRZc01qWXVOVFF6TWpBNU9TQmFJRTB5TUN3eE5TNDRNRFF5T1RneElFTXhPUzQwTkRRME5ESTNMREUxTGpnd05ESTVPREVnTVRndU9UY3lNakkwTERFMUxqWXhPVE0yT0RjZ01UZ3VOVGd6TXpNek15d3hOUzR5TkRrMU1EUTJJRU14T0M0eE9UUTBOREkzTERFMExqZzNPVFkwTURZZ01UZ3NNVFF1TkRNd05USTFOU0F4T0N3eE15NDVNREl4TkRreElFTXhPQ3d4TXk0ek56TTNOekkySURFNExqRTVORFEwTWpjc01USXVPVEkwTmpVM05TQXhPQzQxT0RNek16TXpMREV5TGpVMU5EYzVNelVnUXpFNExqazNNakl5TkN3eE1pNHhPRFE1TWprMUlERTVMalEwTkRRME1qY3NNVElnTWpBc01USWdRekl3TGpVMU5UVTFOek1zTVRJZ01qRXVNREkzTnpjMkxERXlMakU0TkRreU9UVWdNakV1TkRFMk5qWTJOeXd4TWk0MU5UUTNPVE0xSUVNeU1TNDRNRFUxTlRjekxERXlMamt5TkRZMU56VWdNaklzTVRNdU16Y3pOemN5TmlBeU1pd3hNeTQ1TURJeE5Ea3hJRU15TWl3eE5DNDBNekExTWpVMUlESXhMamd3TlRVMU56TXNNVFF1T0RjNU5qUXdOaUF5TVM0ME1UWTJOalkzTERFMUxqSTBPVFV3TkRZZ1F6SXhMakF5TnpjM05pd3hOUzQyTVRrek5qZzNJREl3TGpVMU5UVTFOek1zTVRVdU9EQTBNams0TVNBeU1Dd3hOUzQ0TURReU9UZ3hJRm9pSUdsa1BTSkRiMjFpYVc1bFpDMVRhR0Z3WlNJZ1ptbHNiRDBpSTBaR1JrWkdSaUkrUEM5d1lYUm9QZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR3dlp6NEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZaejRLSUNBZ0lDQWdJQ0FnSUNBZ1BDOW5QZ29nSUNBZ0lDQWdJRHd2Wno0S0lDQWdJRHd2Wno0S1BDOXpkbWMrXCJcblxuLyoqKi8gfSxcbi8qIDMwNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaVZWUkdMVGdpSUhOMFlXNWtZV3h2Ym1VOUltNXZJajgrQ2p4emRtY2dkMmxrZEdnOUlqUXdjSGdpSUdobGFXZG9kRDBpTkRCd2VDSWdkbWxsZDBKdmVEMGlNQ0F3SURRd0lEUXdJaUIyWlhKemFXOXVQU0l4TGpFaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJZ2VHMXNibk02ZUd4cGJtczlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1RrdmVHeHBibXNpUGdvZ0lDQWdQQ0V0TFNCSFpXNWxjbUYwYjNJNklGTnJaWFJqYUNBek9TNHhJQ2d6TVRjeU1Da2dMU0JvZEhSd09pOHZkM2QzTG1KdmFHVnRhV0Z1WTI5a2FXNW5MbU52YlM5emEyVjBZMmdnTFMwK0NpQWdJQ0E4ZEdsMGJHVSthV052Ymw5emRXTmpaWE56UEM5MGFYUnNaVDRLSUNBZ0lEeGtaWE5qUGtOeVpXRjBaV1FnZDJsMGFDQlRhMlYwWTJndVBDOWtaWE5qUGdvZ0lDQWdQR1JsWm5NK1BDOWtaV1p6UGdvZ0lDQWdQR2NnYVdROUlrVnNaVzFsYm5RdFozVnBaR1ZzYVc1bExYWXdMakl1TkNJZ2MzUnliMnRsUFNKdWIyNWxJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqRWlJR1pwYkd3OUltNXZibVVpSUdacGJHd3RjblZzWlQwaVpYWmxibTlrWkNJK0NpQWdJQ0FnSUNBZ1BHY2dhV1E5SWsxbGMzTmhaMlVpSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtDMDJNQzR3TURBd01EQXNJQzB5TVRJdU1EQXdNREF3S1NJK0NpQWdJQ0FnSUNBZ0lDQWdJRHhuSUdsa1BTTGx1S2JsZ0w3bGtKRmY1TCtoNW9HdklpQjBjbUZ1YzJadmNtMDlJblJ5WVc1emJHRjBaU2cyTUM0d01EQXdNREFzSURJeE1pNHdNREF3TURBcElqNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEeG5JR2xrUFNKU1pXTjBZVzVuYkdVdE1pSStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEdjZ2FXUTlJbWxqYjI1ZmMzVmpZMlZ6Y3lJK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR4eVpXTjBJR2xrUFNKU1pXTjBZVzVuYkdVdE1pSWdabWxzYkQwaUl6RXpRMFUyTmlJZ2VEMGlNQ0lnZVQwaU1DSWdkMmxrZEdnOUlqUXdJaUJvWldsbmFIUTlJalF3SWo0OEwzSmxZM1ErQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHh3WVhSb0lHUTlJazB5Tnk0NE1qVTFPREUwTERFM0xqRTBPRFF6TlRjZ1RERTVMakF4TnpRMExESTFMamd5T0RFeU1UTWdRekU0TGprd01URTJNRGtzTWpVdU9UUXlOekE0TXlBeE9DNDNOalUxTURNekxESTJJREU0TGpZeE1EUTJOeXd5TmlCRE1UZ3VORFUxTkRJM0xESTJJREU0TGpNeE9UYzJPVE1zTWpVdU9UUXlOekE0TXlBeE9DNHlNRE0wT0RZMUxESTFMamd5T0RFeU1UTWdUREU0TGpBeU9UQTNNVFlzTWpVdU5qVTJNalVnVERFekxqRTNORFF4T0RZc01qQXVPRFF6TnpVZ1F6RXpMakExT0RFek9UVXNNakF1TnpJNU1UWXpJREV6TERJd0xqVTVOVFE0TXpjZ01UTXNNakF1TkRReU56QTBOeUJETVRNc01qQXVNamc1T1RJNU15QXhNeTR3TlRneE16azFMREl3TGpFMU5qSTFJREV6TGpFM05EUXhPRFlzTWpBdU1EUXhOalkyTnlCTU1UUXVNelkyTWpjM01pd3hPQzQ0TmpjeE9EVTNJRU14TkM0ME9ESTFOaXd4T0M0M05USTJNREl6SURFMExqWXhPREl4Tnpjc01UZ3VOamsxTXpFd055QXhOQzQzTnpNeU5UYzNMREU0TGpZNU5UTXhNRGNnUXpFMExqa3lPREk1TkN3eE9DNDJPVFV6TVRBM0lERTFMakEyTXprMU1UWXNNVGd1TnpVeU5qQXlNeUF4TlM0eE9EQXlNekEzTERFNExqZzJOekU0TlRjZ1RERTRMall4TURRMk55d3lNaTR5TnpZd016Z2dUREkxTGpneE9UYzJPVE1zTVRVdU1UY3hPRGN4TXlCRE1qVXVPVE0yTURRNE5Dd3hOUzR3TlRjeU9EZ2dNall1TURjeE56QTJMREUxSURJMkxqSXlOamMwTWpNc01UVWdRekkyTGpNNE1UYzRNak1zTVRVZ01qWXVOVEUzTkRRc01UVXVNRFUzTWpnNElESTJMall6TXpjeU1qZ3NNVFV1TVRjeE9EY3hNeUJNTWpjdU9ESTFOVGd4TkN3eE5pNHpORFl6TlRJeklFTXlOeTQ1TkRFNE5qQTFMREUyTGpRMk1Ea3pOVGNnTWpnc01UWXVOVGswTmpFMUlESTRMREUyTGpjME56TTVOQ0JETWpnc01UWXVPVEF3TVRjeklESTNMamswTVRnMk1EVXNNVGN1TURNek9EVXlNeUF5Tnk0NE1qVTFPREUwTERFM0xqRTBPRFF6TlRjZ1RESTNMamd5TlRVNE1UUXNNVGN1TVRRNE5ETTFOeUJhSWlCcFpEMGlVR0YwYUNJZ1ptbHNiRDBpSTBaR1JrWkdSaUkrUEM5d1lYUm9QZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR3dlp6NEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZaejRLSUNBZ0lDQWdJQ0FnSUNBZ1BDOW5QZ29nSUNBZ0lDQWdJRHd2Wno0S0lDQWdJRHd2Wno0S1BDOXpkbWMrXCJcblxuLyoqKi8gfSxcbi8qIDMwNiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaVZWUkdMVGdpSUhOMFlXNWtZV3h2Ym1VOUltNXZJajgrQ2p4emRtY2dkMmxrZEdnOUlqUXdjSGdpSUdobGFXZG9kRDBpTkRCd2VDSWdkbWxsZDBKdmVEMGlNQ0F3SURRd0lEUXdJaUIyWlhKemFXOXVQU0l4TGpFaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJZ2VHMXNibk02ZUd4cGJtczlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1RrdmVHeHBibXNpUGdvZ0lDQWdQQ0V0TFNCSFpXNWxjbUYwYjNJNklGTnJaWFJqYUNBek9TNHhJQ2d6TVRjeU1Da2dMU0JvZEhSd09pOHZkM2QzTG1KdmFHVnRhV0Z1WTI5a2FXNW5MbU52YlM5emEyVjBZMmdnTFMwK0NpQWdJQ0E4ZEdsMGJHVSthV052Ymw5M1lYSnVhVzVuUEM5MGFYUnNaVDRLSUNBZ0lEeGtaWE5qUGtOeVpXRjBaV1FnZDJsMGFDQlRhMlYwWTJndVBDOWtaWE5qUGdvZ0lDQWdQR1JsWm5NK1BDOWtaV1p6UGdvZ0lDQWdQR2NnYVdROUlsQmhaMlV0TVNJZ2MzUnliMnRsUFNKdWIyNWxJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqRWlJR1pwYkd3OUltNXZibVVpSUdacGJHd3RjblZzWlQwaVpYWmxibTlrWkNJK0NpQWdJQ0FnSUNBZ1BHY2dhV1E5SWsxbGMzTmhaMlVpSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtDMDJNQzR3TURBd01EQXNJQzB5TnpJdU1EQXdNREF3S1NJK0NpQWdJQ0FnSUNBZ0lDQWdJRHhuSUdsa1BTTGx1S2JsZ0w3bGtKRmY1TCtoNW9HdkxXTnZjSGtpSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtEWXdMakF3TURBd01Dd2dNamN5TGpBd01EQXdNQ2tpUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEdjZ2FXUTlJbEpsWTNSaGJtZHNaUzB5SWo0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThaeUJwWkQwaWFXTnZibDkzWVhKdWFXNW5JajRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQSEpsWTNRZ2FXUTlJbEpsWTNSaGJtZHNaUzB5SWlCbWFXeHNQU0lqUmpkQ1FUSkJJaUI0UFNJd0lpQjVQU0l3SWlCM2FXUjBhRDBpTkRBaUlHaGxhV2RvZEQwaU5EQWlQand2Y21WamRENEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1BIQmhkR2dnWkQwaVRUSXhMall4TlRNNE5EWXNNall1TlRRek1qQTVPU0JETWpFdU5qRTFNemcwTml3eU5pNDVORGM0TnpVeElESXhMalExT0RNek5EZ3NNamN1TWpreE9ETTJPQ0F5TVM0eE5EUXlNekE0TERJM0xqVTNOVEV3TWprZ1F6SXdMamd6TURFeU5qZ3NNamN1T0RVNE16WTRPU0F5TUM0ME5EZzNNVGswTERJNElESXdMREk0SUVNeE9TNDFOVEV5T0RBMkxESTRJREU1TGpFMk9UZzNNeklzTWpjdU9EVTRNelk0T1NBeE9DNDROVFUzTmpreUxESTNMalUzTlRFd01qa2dRekU0TGpVME1UWTJOVElzTWpjdU1qa3hPRE0yT0NBeE9DNHpPRFEyTVRVMExESTJMamswTnpnM05URWdNVGd1TXpnME5qRTFOQ3d5Tmk0MU5ETXlNRGs1SUV3eE9DNHpPRFEyTVRVMExERTVMamMwTkRnMU5pQkRNVGd1TXpnME5qRTFOQ3d4T1M0ek5EQXhPVEEzSURFNExqVTBNVFkyTlRJc01UZ3VPVGsyTWpJNUlERTRMamcxTlRjMk9USXNNVGd1TnpFeU9UWXpJRU14T1M0eE5qazROek15TERFNExqUXlPVFk1TmprZ01Ua3VOVFV4TWpnd05pd3hPQzR5T0Rnd05qVTRJREl3TERFNExqSTRPREEyTlRnZ1F6SXdMalEwT0RjeE9UUXNNVGd1TWpnNE1EWTFPQ0F5TUM0NE16QXhNalk0TERFNExqUXlPVFk1TmprZ01qRXVNVFEwTWpNd09Dd3hPQzQzTVRJNU5qTWdRekl4TGpRMU9ETXpORGdzTVRndU9UazJNakk1SURJeExqWXhOVE00TkRZc01Ua3VNelF3TVRrd055QXlNUzQyTVRVek9EUTJMREU1TGpjME5EZzFOaUJNTWpFdU5qRTFNemcwTml3eU5pNDFORE15TURrNUlGb2dUVEl3TERFMUxqZ3dOREk1T0RFZ1F6RTVMalEwTkRRME1qY3NNVFV1T0RBME1qazRNU0F4T0M0NU56SXlNalFzTVRVdU5qRTVNelk0TnlBeE9DNDFPRE16TXpNekxERTFMakkwT1RVd05EWWdRekU0TGpFNU5EUTBNamNzTVRRdU9EYzVOalF3TmlBeE9Dd3hOQzQwTXpBMU1qVTFJREU0TERFekxqa3dNakUwT1RFZ1F6RTRMREV6TGpNM016YzNNallnTVRndU1UazBORFF5Tnl3eE1pNDVNalEyTlRjMUlERTRMalU0TXpNek16TXNNVEl1TlRVME56a3pOU0JETVRndU9UY3lNakkwTERFeUxqRTRORGt5T1RVZ01Ua3VORFEwTkRReU55d3hNaUF5TUN3eE1pQkRNakF1TlRVMU5UVTNNeXd4TWlBeU1TNHdNamMzTnpZc01USXVNVGcwT1RJNU5TQXlNUzQwTVRZMk5qWTNMREV5TGpVMU5EYzVNelVnUXpJeExqZ3dOVFUxTnpNc01USXVPVEkwTmpVM05TQXlNaXd4TXk0ek56TTNOekkySURJeUxERXpMamt3TWpFME9URWdRekl5TERFMExqUXpNRFV5TlRVZ01qRXVPREExTlRVM015d3hOQzQ0TnprMk5EQTJJREl4TGpReE5qWTJOamNzTVRVdU1qUTVOVEEwTmlCRE1qRXVNREkzTnpjMkxERTFMall4T1RNMk9EY2dNakF1TlRVMU5UVTNNeXd4TlM0NE1EUXlPVGd4SURJd0xERTFMamd3TkRJNU9ERWdXaUlnYVdROUlrTnZiV0pwYm1Wa0xWTm9ZWEJsSWlCbWFXeHNQU0lqUmtaR1JrWkdJaUIwY21GdWMyWnZjbTA5SW5SeVlXNXpiR0YwWlNneU1DNHdNREF3TURBc0lESXdMakF3TURBd01Da2djMk5oYkdVb01Td2dMVEVwSUhSeVlXNXpiR0YwWlNndE1qQXVNREF3TURBd0xDQXRNakF1TURBd01EQXdLU0FpUGp3dmNHRjBhRDRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBOEwyYytDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThMMmMrQ2lBZ0lDQWdJQ0FnSUNBZ0lEd3ZaejRLSUNBZ0lDQWdJQ0E4TDJjK0NpQWdJQ0E4TDJjK0Nqd3ZjM1puUGc9PVwiXG5cbi8qKiovIH0sXG4vKiAzMDcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCd0cmFuc2l0aW9uJywge1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJuYW1lXCI6IFwiZWwtbWVzc2FnZS1mYWRlXCJcblx0ICAgIH1cblx0ICB9LCBbX2MoJ2RpdicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS52aXNpYmxlKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtbWVzc2FnZVwiLFxuXHQgICAgY2xhc3M6IF92bS5jdXN0b21DbGFzcyxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwibW91c2VlbnRlclwiOiBfdm0uY2xlYXJUaW1lcixcblx0ICAgICAgXCJtb3VzZWxlYXZlXCI6IF92bS5zdGFydFRpbWVyXG5cdCAgICB9XG5cdCAgfSwgWyghX3ZtLmljb25DbGFzcykgPyBfYygnaW1nJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtbWVzc2FnZV9faW1nXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInNyY1wiOiBfdm0udHlwZUltZyxcblx0ICAgICAgXCJhbHRcIjogXCJcIlxuXHQgICAgfVxuXHQgIH0pIDogX3ZtLl9lKCksIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlX19ncm91cFwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2lzLXdpdGgtaWNvbic6IF92bS5pY29uQ2xhc3Ncblx0ICAgIH1cblx0ICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiLCBbX2MoJ3AnLCBbKF92bS5pY29uQ2xhc3MpID8gX2MoJ2knLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlX19pY29uXCIsXG5cdCAgICBjbGFzczogX3ZtLmljb25DbGFzc1xuXHQgIH0pIDogX3ZtLl9lKCksIF92bS5fdihfdm0uX3MoX3ZtLm1lc3NhZ2UpKV0pXSksIChfdm0uc2hvd0Nsb3NlKSA/IF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlX19jbG9zZUJ0biBlbC1pY29uLWNsb3NlXCIsXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5jbG9zZVxuXHQgICAgfVxuXHQgIH0pIDogX3ZtLl9lKCldLCAyKV0pXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMzA4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX21haW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwOSk7XG5cblx0dmFyIF9tYWluMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21haW4pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X21haW4yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9tYWluMi5kZWZhdWx0Lm5hbWUsIF9tYWluMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfbWFpbjIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDMwOSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzMTApLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzMTEpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAzMTAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxCYWRnZScsXG5cblx0ICBwcm9wczoge1xuXHQgICAgdmFsdWU6IHt9LFxuXHQgICAgbWF4OiBOdW1iZXIsXG5cdCAgICBpc0RvdDogQm9vbGVhbixcblx0ICAgIGhpZGRlbjogQm9vbGVhblxuXHQgIH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgY29udGVudDogZnVuY3Rpb24gY29udGVudCgpIHtcblx0ICAgICAgaWYgKHRoaXMuaXNEb3QpIHJldHVybjtcblxuXHQgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuXHQgICAgICB2YXIgbWF4ID0gdGhpcy5tYXg7XG5cblx0ICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIG1heCA9PT0gJ251bWJlcicpIHtcblx0ICAgICAgICByZXR1cm4gbWF4IDwgdmFsdWUgPyBtYXggKyAnKycgOiB2YWx1ZTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHJldHVybiB2YWx1ZTtcblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzMTEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1iYWRnZVwiXG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIiksIF9jKCd0cmFuc2l0aW9uJywge1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJuYW1lXCI6IFwiZWwtem9vbS1pbi1jZW50ZXJcIlxuXHQgICAgfVxuXHQgIH0sIFtfYygnc3VwJywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoIV92bS5oaWRkZW4gJiYgKF92bS5jb250ZW50IHx8IF92bS5pc0RvdCkpLFxuXHQgICAgICBleHByZXNzaW9uOiBcIiFoaWRkZW4gJiYgKCBjb250ZW50IHx8IGlzRG90IClcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1iYWRnZV9fY29udGVudFwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2lzLWZpeGVkJzogX3ZtLiRzbG90cy5kZWZhdWx0LCAnaXMtZG90JzogX3ZtLmlzRG90XG5cdCAgICB9LFxuXHQgICAgZG9tUHJvcHM6IHtcblx0ICAgICAgXCJ0ZXh0Q29udGVudFwiOiBfdm0uX3MoX3ZtLmNvbnRlbnQpXG5cdCAgICB9XG5cdCAgfSldKV0sIDIpXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDMxMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9tYWluID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMTMpO1xuXG5cdHZhciBfbWFpbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tYWluKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9tYWluMi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfbWFpbjIuZGVmYXVsdC5uYW1lLCBfbWFpbjIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX21haW4yLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAzMTMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzE0KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzE1KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMzE0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsQ2FyZCcsXG5cblx0ICBwcm9wczogWydoZWFkZXInLCAnYm9keVN0eWxlJ11cblx0fTtcblxuLyoqKi8gfSxcbi8qIDMxNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNhcmRcIlxuXHQgIH0sIFsoX3ZtLiRzbG90cy5oZWFkZXIgfHwgX3ZtLmhlYWRlcikgPyBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2FyZF9faGVhZGVyXCJcblx0ICB9LCBbX3ZtLl90KFwiaGVhZGVyXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5oZWFkZXIpKV0pXSwgMikgOiBfdm0uX2UoKSwgX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNhcmRfX2JvZHlcIixcblx0ICAgIHN0eWxlOiAoX3ZtLmJvZHlTdHlsZSlcblx0ICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMzE2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX21haW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxNyk7XG5cblx0dmFyIF9tYWluMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21haW4pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X21haW4yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9tYWluMi5kZWZhdWx0Lm5hbWUsIF9tYWluMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfbWFpbjIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDMxNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzMTgpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzMTkpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAzMTggKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfZG9tID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbFJhdGUnLFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIGNsYXNzTWFwOiB7fSxcblx0ICAgICAgcG9pbnRlckF0TGVmdEhhbGY6IHRydWUsXG5cdCAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSxcblx0ICAgICAgaG92ZXJJbmRleDogLTFcblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIHZhbHVlOiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogMFxuXHQgICAgfSxcblx0ICAgIGxvd1RocmVzaG9sZDoge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDJcblx0ICAgIH0sXG5cdCAgICBoaWdoVGhyZXNob2xkOiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogNFxuXHQgICAgfSxcblx0ICAgIG1heDoge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDVcblx0ICAgIH0sXG5cdCAgICBjb2xvcnM6IHtcblx0ICAgICAgdHlwZTogQXJyYXksXG5cdCAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuXHQgICAgICAgIHJldHVybiBbJyNGN0JBMkEnLCAnI0Y3QkEyQScsICcjRjdCQTJBJ107XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB2b2lkQ29sb3I6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnI0M2RDFERSdcblx0ICAgIH0sXG5cdCAgICBkaXNhYmxlZFZvaWRDb2xvcjoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICcjRUZGMkY3J1xuXHQgICAgfSxcblx0ICAgIGljb25DbGFzc2VzOiB7XG5cdCAgICAgIHR5cGU6IEFycmF5LFxuXHQgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcblx0ICAgICAgICByZXR1cm4gWydlbC1pY29uLXN0YXItb24nLCAnZWwtaWNvbi1zdGFyLW9uJywgJ2VsLWljb24tc3Rhci1vbiddO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdm9pZEljb25DbGFzczoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICdlbC1pY29uLXN0YXItb2ZmJ1xuXHQgICAgfSxcblx0ICAgIGRpc2FibGVkVm9pZEljb25DbGFzczoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICdlbC1pY29uLXN0YXItb24nXG5cdCAgICB9LFxuXHQgICAgZGlzYWJsZWQ6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogZmFsc2Vcblx0ICAgIH0sXG5cdCAgICBhbGxvd0hhbGY6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogZmFsc2Vcblx0ICAgIH0sXG5cdCAgICBzaG93VGV4dDoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiBmYWxzZVxuXHQgICAgfSxcblx0ICAgIHRleHRDb2xvcjoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICcjMWYyZDNkJ1xuXHQgICAgfSxcblx0ICAgIHRleHRzOiB7XG5cdCAgICAgIHR5cGU6IEFycmF5LFxuXHQgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcblx0ICAgICAgICByZXR1cm4gWyfmnoHlt64nLCAn5aSx5pybJywgJ+S4gOiIrCcsICfmu6HmhI8nLCAn5oOK5ZacJ107XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB0ZXh0VGVtcGxhdGU6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAne3ZhbHVlfSdcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIHRleHQ6IGZ1bmN0aW9uIHRleHQoKSB7XG5cdCAgICAgIHZhciByZXN1bHQgPSAnJztcblx0ICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcblx0ICAgICAgICByZXN1bHQgPSB0aGlzLnRleHRUZW1wbGF0ZS5yZXBsYWNlKC9cXHtcXHMqdmFsdWVcXHMqXFx9LywgdGhpcy52YWx1ZSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmVzdWx0ID0gdGhpcy50ZXh0c1tNYXRoLmNlaWwodGhpcy5jdXJyZW50VmFsdWUpIC0gMV07XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJlc3VsdDtcblx0ICAgIH0sXG5cdCAgICBkZWNpbWFsU3R5bGU6IGZ1bmN0aW9uIGRlY2ltYWxTdHlsZSgpIHtcblx0ICAgICAgdmFyIHdpZHRoID0gJyc7XG5cdCAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG5cdCAgICAgICAgd2lkdGggPSAodGhpcy52YWx1ZURlY2ltYWwgPCA1MCA/IDAgOiA1MCkgKyAnJSc7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKHRoaXMuYWxsb3dIYWxmKSB7XG5cdCAgICAgICAgd2lkdGggPSAnNTAlJztcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4ge1xuXHQgICAgICAgIGNvbG9yOiB0aGlzLmFjdGl2ZUNvbG9yLFxuXHQgICAgICAgIHdpZHRoOiB3aWR0aFxuXHQgICAgICB9O1xuXHQgICAgfSxcblx0ICAgIHZhbHVlRGVjaW1hbDogZnVuY3Rpb24gdmFsdWVEZWNpbWFsKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy52YWx1ZSAqIDEwMCAtIE1hdGguZmxvb3IodGhpcy52YWx1ZSkgKiAxMDA7XG5cdCAgICB9LFxuXHQgICAgZGVjaW1hbEljb25DbGFzczogZnVuY3Rpb24gZGVjaW1hbEljb25DbGFzcygpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVGcm9tTWFwKHRoaXMudmFsdWUsIHRoaXMuY2xhc3NNYXApO1xuXHQgICAgfSxcblx0ICAgIHZvaWRDbGFzczogZnVuY3Rpb24gdm9pZENsYXNzKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/IHRoaXMuY2xhc3NNYXAuZGlzYWJsZWRWb2lkQ2xhc3MgOiB0aGlzLmNsYXNzTWFwLnZvaWRDbGFzcztcblx0ICAgIH0sXG5cdCAgICBhY3RpdmVDbGFzczogZnVuY3Rpb24gYWN0aXZlQ2xhc3MoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlRnJvbU1hcCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5jbGFzc01hcCk7XG5cdCAgICB9LFxuXHQgICAgY29sb3JNYXA6IGZ1bmN0aW9uIGNvbG9yTWFwKCkge1xuXHQgICAgICByZXR1cm4ge1xuXHQgICAgICAgIGxvd0NvbG9yOiB0aGlzLmNvbG9yc1swXSxcblx0ICAgICAgICBtZWRpdW1Db2xvcjogdGhpcy5jb2xvcnNbMV0sXG5cdCAgICAgICAgaGlnaENvbG9yOiB0aGlzLmNvbG9yc1syXSxcblx0ICAgICAgICB2b2lkQ29sb3I6IHRoaXMudm9pZENvbG9yLFxuXHQgICAgICAgIGRpc2FibGVkVm9pZENvbG9yOiB0aGlzLmRpc2FibGVkVm9pZENvbG9yXG5cdCAgICAgIH07XG5cdCAgICB9LFxuXHQgICAgYWN0aXZlQ29sb3I6IGZ1bmN0aW9uIGFjdGl2ZUNvbG9yKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZUZyb21NYXAodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuY29sb3JNYXApO1xuXHQgICAgfSxcblx0ICAgIGNsYXNzZXM6IGZ1bmN0aW9uIGNsYXNzZXMoKSB7XG5cdCAgICAgIHZhciByZXN1bHQgPSBbXTtcblx0ICAgICAgdmFyIGkgPSAwO1xuXHQgICAgICB2YXIgdGhyZXNob2xkID0gdGhpcy5jdXJyZW50VmFsdWU7XG5cdCAgICAgIGlmICh0aGlzLmFsbG93SGFsZiAmJiB0aGlzLmN1cnJlbnRWYWx1ZSAhPT0gTWF0aC5mbG9vcih0aGlzLmN1cnJlbnRWYWx1ZSkpIHtcblx0ICAgICAgICB0aHJlc2hvbGQtLTtcblx0ICAgICAgfVxuXHQgICAgICBmb3IgKDsgaSA8IHRocmVzaG9sZDsgaSsrKSB7XG5cdCAgICAgICAgcmVzdWx0LnB1c2godGhpcy5hY3RpdmVDbGFzcyk7XG5cdCAgICAgIH1cblx0ICAgICAgZm9yICg7IGkgPCB0aGlzLm1heDsgaSsrKSB7XG5cdCAgICAgICAgcmVzdWx0LnB1c2godGhpcy52b2lkQ2xhc3MpO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiByZXN1bHQ7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHdhdGNoOiB7XG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsKSB7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbCk7XG5cdCAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdmFsO1xuXHQgICAgICB0aGlzLnBvaW50ZXJBdExlZnRIYWxmID0gdGhpcy52YWx1ZSAhPT0gTWF0aC5mbG9vcih0aGlzLnZhbHVlKTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgZ2V0VmFsdWVGcm9tTWFwOiBmdW5jdGlvbiBnZXRWYWx1ZUZyb21NYXAodmFsdWUsIG1hcCkge1xuXHQgICAgICB2YXIgcmVzdWx0ID0gJyc7XG5cdCAgICAgIGlmICh2YWx1ZSA8PSB0aGlzLmxvd1RocmVzaG9sZCkge1xuXHQgICAgICAgIHJlc3VsdCA9IG1hcC5sb3dDb2xvciB8fCBtYXAubG93Q2xhc3M7XG5cdCAgICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gdGhpcy5oaWdoVGhyZXNob2xkKSB7XG5cdCAgICAgICAgcmVzdWx0ID0gbWFwLmhpZ2hDb2xvciB8fCBtYXAuaGlnaENsYXNzO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHJlc3VsdCA9IG1hcC5tZWRpdW1Db2xvciB8fCBtYXAubWVkaXVtQ2xhc3M7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHJlc3VsdDtcblx0ICAgIH0sXG5cdCAgICBzaG93RGVjaW1hbEljb246IGZ1bmN0aW9uIHNob3dEZWNpbWFsSWNvbihpdGVtKSB7XG5cdCAgICAgIHZhciBzaG93V2hlbkRpc2FibGVkID0gdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnZhbHVlRGVjaW1hbCA+IDAgJiYgaXRlbSAtIDEgPCB0aGlzLnZhbHVlICYmIGl0ZW0gPiB0aGlzLnZhbHVlO1xuXHQgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHQgICAgICB2YXIgc2hvd1doZW5BbGxvd0hhbGYgPSB0aGlzLmFsbG93SGFsZiAmJiB0aGlzLnBvaW50ZXJBdExlZnRIYWxmICYmIGl0ZW0gLSAwLjUgPD0gdGhpcy5jdXJyZW50VmFsdWUgJiYgaXRlbSA+IHRoaXMuY3VycmVudFZhbHVlO1xuXHQgICAgICByZXR1cm4gc2hvd1doZW5EaXNhYmxlZCB8fCBzaG93V2hlbkFsbG93SGFsZjtcblx0ICAgIH0sXG5cdCAgICBnZXRJY29uU3R5bGU6IGZ1bmN0aW9uIGdldEljb25TdHlsZShpdGVtKSB7XG5cdCAgICAgIHZhciB2b2lkQ29sb3IgPSB0aGlzLmRpc2FibGVkID8gdGhpcy5jb2xvck1hcC5kaXNhYmxlZFZvaWRDb2xvciA6IHRoaXMuY29sb3JNYXAudm9pZENvbG9yO1xuXHQgICAgICByZXR1cm4ge1xuXHQgICAgICAgIGNvbG9yOiBpdGVtIDw9IHRoaXMuY3VycmVudFZhbHVlID8gdGhpcy5hY3RpdmVDb2xvciA6IHZvaWRDb2xvclxuXHQgICAgICB9O1xuXHQgICAgfSxcblx0ICAgIHNlbGVjdFZhbHVlOiBmdW5jdGlvbiBzZWxlY3RWYWx1ZSh2YWx1ZSkge1xuXHQgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfVxuXHQgICAgICBpZiAodGhpcy5hbGxvd0hhbGYgJiYgdGhpcy5wb2ludGVyQXRMZWZ0SGFsZikge1xuXHQgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5jdXJyZW50VmFsdWUpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2V0Q3VycmVudFZhbHVlOiBmdW5jdGlvbiBzZXRDdXJyZW50VmFsdWUodmFsdWUsIGV2ZW50KSB7XG5cdCAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuXHQgICAgICBpZiAodGhpcy5hbGxvd0hhbGYpIHtcblx0ICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHQgICAgICAgIGlmICgoMCwgX2RvbS5oYXNDbGFzcykodGFyZ2V0LCAnZWwtcmF0ZV9faXRlbScpKSB7XG5cdCAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucXVlcnlTZWxlY3RvcignLmVsLXJhdGVfX2ljb24nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKCgwLCBfZG9tLmhhc0NsYXNzKSh0YXJnZXQsICdlbC1yYXRlX19kZWNpbWFsJykpIHtcblx0ICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnBvaW50ZXJBdExlZnRIYWxmID0gZXZlbnQub2Zmc2V0WCAqIDIgPD0gdGFyZ2V0LmNsaWVudFdpZHRoO1xuXHQgICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdGhpcy5wb2ludGVyQXRMZWZ0SGFsZiA/IHZhbHVlIC0gMC41IDogdmFsdWU7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLmhvdmVySW5kZXggPSB2YWx1ZTtcblx0ICAgIH0sXG5cdCAgICByZXNldEN1cnJlbnRWYWx1ZTogZnVuY3Rpb24gcmVzZXRDdXJyZW50VmFsdWUoKSB7XG5cdCAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIGlmICh0aGlzLmFsbG93SGFsZikge1xuXHQgICAgICAgIHRoaXMucG9pbnRlckF0TGVmdEhhbGYgPSB0aGlzLnZhbHVlICE9PSBNYXRoLmZsb29yKHRoaXMudmFsdWUpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZTtcblx0ICAgICAgdGhpcy5ob3ZlckluZGV4ID0gLTE7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG5cdCAgICBpZiAoIXRoaXMudmFsdWUpIHtcblx0ICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCAwKTtcblx0ICAgIH1cblx0ICAgIHRoaXMuY2xhc3NNYXAgPSB7XG5cdCAgICAgIGxvd0NsYXNzOiB0aGlzLmljb25DbGFzc2VzWzBdLFxuXHQgICAgICBtZWRpdW1DbGFzczogdGhpcy5pY29uQ2xhc3Nlc1sxXSxcblx0ICAgICAgaGlnaENsYXNzOiB0aGlzLmljb25DbGFzc2VzWzJdLFxuXHQgICAgICB2b2lkQ2xhc3M6IHRoaXMudm9pZEljb25DbGFzcyxcblx0ICAgICAgZGlzYWJsZWRWb2lkQ2xhc3M6IHRoaXMuZGlzYWJsZWRWb2lkSWNvbkNsYXNzXG5cdCAgICB9O1xuXHQgIH1cblx0fTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuLyoqKi8gfSxcbi8qIDMxOSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhdGVcIlxuXHQgIH0sIFtfdm0uX2woKF92bS5tYXgpLCBmdW5jdGlvbihpdGVtKSB7XG5cdCAgICByZXR1cm4gX2MoJ3NwYW4nLCB7XG5cdCAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhdGVfX2l0ZW1cIixcblx0ICAgICAgc3R5bGU6ICh7XG5cdCAgICAgICAgY3Vyc29yOiBfdm0uZGlzYWJsZWQgPyAnYXV0bycgOiAncG9pbnRlcidcblx0ICAgICAgfSksXG5cdCAgICAgIG9uOiB7XG5cdCAgICAgICAgXCJtb3VzZW1vdmVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgICBfdm0uc2V0Q3VycmVudFZhbHVlKGl0ZW0sICRldmVudClcblx0ICAgICAgICB9LFxuXHQgICAgICAgIFwibW91c2VsZWF2ZVwiOiBfdm0ucmVzZXRDdXJyZW50VmFsdWUsXG5cdCAgICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICAgIF92bS5zZWxlY3RWYWx1ZShpdGVtKVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSwgW19jKCdpJywge1xuXHQgICAgICBzdGF0aWNDbGFzczogXCJlbC1yYXRlX19pY29uXCIsXG5cdCAgICAgIGNsYXNzOiBbX3ZtLmNsYXNzZXNbaXRlbSAtIDFdLCB7XG5cdCAgICAgICAgJ2hvdmVyJzogX3ZtLmhvdmVySW5kZXggPT09IGl0ZW1cblx0ICAgICAgfV0sXG5cdCAgICAgIHN0eWxlOiAoX3ZtLmdldEljb25TdHlsZShpdGVtKSlcblx0ICAgIH0sIFsoX3ZtLnNob3dEZWNpbWFsSWNvbihpdGVtKSkgPyBfYygnaScsIHtcblx0ICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmF0ZV9fZGVjaW1hbFwiLFxuXHQgICAgICBjbGFzczogX3ZtLmRlY2ltYWxJY29uQ2xhc3MsXG5cdCAgICAgIHN0eWxlOiAoX3ZtLmRlY2ltYWxTdHlsZSlcblx0ICAgIH0pIDogX3ZtLl9lKCldKV0pXG5cdCAgfSksIChfdm0uc2hvd1RleHQpID8gX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1yYXRlX190ZXh0XCIsXG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgY29sb3I6IF92bS50ZXh0Q29sb3Jcblx0ICAgIH0pXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnRleHQpKV0pIDogX3ZtLl9lKCldLCAyKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAzMjAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfc3RlcHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyMSk7XG5cblx0dmFyIF9zdGVwczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdGVwcyk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfc3RlcHMyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9zdGVwczIuZGVmYXVsdC5uYW1lLCBfc3RlcHMyLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9zdGVwczIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDMyMSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzMjIpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzMjMpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAzMjIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxTdGVwcycsXG5cblx0ICBwcm9wczoge1xuXHQgICAgc3BhY2U6IFtOdW1iZXIsIFN0cmluZ10sXG5cdCAgICBhY3RpdmU6IE51bWJlcixcblx0ICAgIGRpcmVjdGlvbjoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICdob3Jpem9udGFsJ1xuXHQgICAgfSxcblx0ICAgIGFsaWduQ2VudGVyOiBCb29sZWFuLFxuXHQgICAgY2VudGVyOiBCb29sZWFuLFxuXHQgICAgZmluaXNoU3RhdHVzOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2ZpbmlzaCdcblx0ICAgIH0sXG5cdCAgICBwcm9jZXNzU3RhdHVzOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ3Byb2Nlc3MnXG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBzdGVwczogW10sXG5cdCAgICAgIHN0ZXBPZmZzZXQ6IDBcblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgIGFjdGl2ZTogZnVuY3Rpb24gYWN0aXZlKG5ld1ZhbCwgb2xkVmFsKSB7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIG5ld1ZhbCwgb2xkVmFsKTtcblx0ICAgIH0sXG5cdCAgICBzdGVwczogZnVuY3Rpb24gc3RlcHMoX3N0ZXBzKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgX3N0ZXBzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkLCBpbmRleCkge1xuXHQgICAgICAgIGNoaWxkLmluZGV4ID0gaW5kZXg7XG5cdCAgICAgIH0pO1xuXHQgICAgICBpZiAodGhpcy5jZW50ZXIpIHtcblx0ICAgICAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgdmFyIGxlbiA9IF9zdGVwcy5sZW5ndGg7XG5cdCAgICAgICAgICBfdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBfdGhpcy5zdGVwT2Zmc2V0ID0gX3N0ZXBzW2xlbiAtIDFdLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAvIChsZW4gLSAxKTtcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH0pKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzMjMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1zdGVwc1wiLFxuXHQgICAgY2xhc3M6IFsnaXMtJyArIF92bS5kaXJlY3Rpb24sIF92bS5jZW50ZXIgPyAnaXMtY2VudGVyJyA6ICcnXVxuXHQgIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMzI0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3N0ZXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyNSk7XG5cblx0dmFyIF9zdGVwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3N0ZXApO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X3N0ZXAyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9zdGVwMi5kZWZhdWx0Lm5hbWUsIF9zdGVwMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfc3RlcDIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDMyNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzMjYpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzMjcpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAzMjYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxTdGVwJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICB0aXRsZTogU3RyaW5nLFxuXHQgICAgaWNvbjogU3RyaW5nLFxuXHQgICAgZGVzY3JpcHRpb246IFN0cmluZyxcblx0ICAgIHN0YXR1czogU3RyaW5nXG5cdCAgfSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBpbmRleDogLTEsXG5cdCAgICAgIGxpbmVTdHlsZToge30sXG5cdCAgICAgIG1haW5PZmZzZXQ6IDAsXG5cdCAgICAgIGludGVybmFsU3RhdHVzOiAnJ1xuXHQgICAgfTtcblx0ICB9LFxuXHQgIGJlZm9yZUNyZWF0ZTogZnVuY3Rpb24gYmVmb3JlQ3JlYXRlKCkge1xuXHQgICAgdGhpcy4kcGFyZW50LnN0ZXBzLnB1c2godGhpcyk7XG5cdCAgfSxcblx0ICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuXHQgICAgdmFyIHN0ZXBzID0gdGhpcy4kcGFyZW50LnN0ZXBzO1xuXHQgICAgdmFyIGluZGV4ID0gc3RlcHMuaW5kZXhPZih0aGlzKTtcblx0ICAgIGlmIChpbmRleCA+PSAwKSB7XG5cdCAgICAgIHN0ZXBzLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICB9XG5cdCAgfSxcblxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIGN1cnJlbnRTdGF0dXM6IGZ1bmN0aW9uIGN1cnJlbnRTdGF0dXMoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnN0YXR1cyB8fCB0aGlzLmludGVybmFsU3RhdHVzO1xuXHQgICAgfSxcblx0ICAgIHByZXZTdGF0dXM6IGZ1bmN0aW9uIHByZXZTdGF0dXMoKSB7XG5cdCAgICAgIHZhciBwcmV2U3RlcCA9IHRoaXMuJHBhcmVudC5zdGVwc1t0aGlzLmluZGV4IC0gMV07XG5cdCAgICAgIHJldHVybiBwcmV2U3RlcCA/IHByZXZTdGVwLmN1cnJlbnRTdGF0dXMgOiAnd2FpdCc7XG5cdCAgICB9LFxuXG5cdCAgICBpc0xhc3Q6IGZ1bmN0aW9uIGlzTGFzdCgpIHtcblx0ICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcblx0ICAgICAgcmV0dXJuIHBhcmVudC5zdGVwc1twYXJlbnQuc3RlcHMubGVuZ3RoIC0gMV0gPT09IHRoaXM7XG5cdCAgICB9LFxuXHQgICAgc3R5bGU6IGZ1bmN0aW9uIHN0eWxlKCkge1xuXHQgICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuXHQgICAgICB2YXIgaXNDZW50ZXIgPSBwYXJlbnQuY2VudGVyO1xuXHQgICAgICB2YXIgbGVuID0gcGFyZW50LnN0ZXBzLmxlbmd0aDtcblxuXHQgICAgICBpZiAoaXNDZW50ZXIgJiYgdGhpcy5pc0xhc3QpIHtcblx0ICAgICAgICByZXR1cm4ge307XG5cdCAgICAgIH1cblxuXHQgICAgICB2YXIgc3BhY2UgPSB0eXBlb2YgcGFyZW50LnNwYWNlID09PSAnbnVtYmVyJyA/IHBhcmVudC5zcGFjZSArICdweCcgOiBwYXJlbnQuc3BhY2UgPyBwYXJlbnQuc3BhY2UgOiAxMDAgLyAoaXNDZW50ZXIgPyBsZW4gLSAxIDogbGVuKSArICclJztcblx0ICAgICAgaWYgKHBhcmVudC5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykge1xuXHQgICAgICAgIHJldHVybiB7IHdpZHRoOiBzcGFjZSB9O1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIGlmICghdGhpcy5pc0xhc3QpIHtcblx0ICAgICAgICAgIHJldHVybiB7IGhlaWdodDogc3BhY2UgfTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgdXBkYXRlU3RhdHVzOiBmdW5jdGlvbiB1cGRhdGVTdGF0dXModmFsKSB7XG5cdCAgICAgIHZhciBwcmV2Q2hpbGQgPSB0aGlzLiRwYXJlbnQuJGNoaWxkcmVuW3RoaXMuaW5kZXggLSAxXTtcblxuXHQgICAgICBpZiAodmFsID4gdGhpcy5pbmRleCkge1xuXHQgICAgICAgIHRoaXMuaW50ZXJuYWxTdGF0dXMgPSB0aGlzLiRwYXJlbnQuZmluaXNoU3RhdHVzO1xuXHQgICAgICB9IGVsc2UgaWYgKHZhbCA9PT0gdGhpcy5pbmRleCAmJiB0aGlzLnByZXZTdGF0dXMgIT09ICdlcnJvcicpIHtcblx0ICAgICAgICB0aGlzLmludGVybmFsU3RhdHVzID0gdGhpcy4kcGFyZW50LnByb2Nlc3NTdGF0dXM7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy5pbnRlcm5hbFN0YXR1cyA9ICd3YWl0Jztcblx0ICAgICAgfVxuXG5cdCAgICAgIGlmIChwcmV2Q2hpbGQpIHByZXZDaGlsZC5jYWxjUHJvZ3Jlc3ModGhpcy5pbnRlcm5hbFN0YXR1cyk7XG5cdCAgICB9LFxuXHQgICAgY2FsY1Byb2dyZXNzOiBmdW5jdGlvbiBjYWxjUHJvZ3Jlc3Moc3RhdHVzKSB7XG5cdCAgICAgIHZhciBzdGVwID0gMTAwO1xuXHQgICAgICB2YXIgc3R5bGUgPSB7fTtcblxuXHQgICAgICBzdHlsZS50cmFuc2l0aW9uRGVsYXkgPSAxNTAgKiB0aGlzLmluZGV4ICsgJ21zJztcblx0ICAgICAgaWYgKHN0YXR1cyA9PT0gdGhpcy4kcGFyZW50LnByb2Nlc3NTdGF0dXMpIHtcblx0ICAgICAgICBzdGVwID0gdGhpcy5jdXJyZW50U3RhdHVzICE9PSAnZXJyb3InID8gNTAgOiAwO1xuXHQgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PT0gJ3dhaXQnKSB7XG5cdCAgICAgICAgc3RlcCA9IDA7XG5cdCAgICAgICAgc3R5bGUudHJhbnNpdGlvbkRlbGF5ID0gLTE1MCAqIHRoaXMuaW5kZXggKyAnbXMnO1xuXHQgICAgICB9XG5cblx0ICAgICAgc3R5bGUuYm9yZGVyV2lkdGggPSBzdGVwID8gJzFweCcgOiAwO1xuXHQgICAgICB0aGlzLiRwYXJlbnQuZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gc3R5bGUuaGVpZ2h0ID0gc3RlcCArICclJyA6IHN0eWxlLndpZHRoID0gc3RlcCArICclJztcblxuXHQgICAgICB0aGlzLmxpbmVTdHlsZSA9IHN0eWxlO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcblxuXHQgICAgaWYgKHBhcmVudC5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykge1xuXHQgICAgICBpZiAocGFyZW50LmFsaWduQ2VudGVyKSB7XG5cdCAgICAgICAgdGhpcy5tYWluT2Zmc2V0ID0gLXRoaXMuJHJlZnMudGl0bGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLyAyICsgMTYgKyAncHgnO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHZhciB1bndhdGNoID0gdGhpcy4kd2F0Y2goJ2luZGV4JywgZnVuY3Rpb24gKHZhbCkge1xuXHQgICAgICBfdGhpcy4kd2F0Y2goJyRwYXJlbnQuYWN0aXZlJywgX3RoaXMudXBkYXRlU3RhdHVzLCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcblx0ICAgICAgdW53YXRjaCgpO1xuXHQgICAgfSk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMzI3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtc3RlcFwiLFxuXHQgICAgY2xhc3M6IFsnaXMtJyArIF92bS4kcGFyZW50LmRpcmVjdGlvbl0sXG5cdCAgICBzdHlsZTogKFtfdm0uc3R5bGUsIF92bS5pc0xhc3QgPyAnJyA6IHtcblx0ICAgICAgbWFyZ2luUmlnaHQ6IC1fdm0uJHBhcmVudC5zdGVwT2Zmc2V0ICsgJ3B4J1xuXHQgICAgfV0pXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1zdGVwX19oZWFkXCIsXG5cdCAgICBjbGFzczogWydpcy0nICsgX3ZtLmN1cnJlbnRTdGF0dXMsIHtcblx0ICAgICAgJ2lzLXRleHQnOiAhX3ZtLmljb25cblx0ICAgIH1dXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1zdGVwX19saW5lXCIsXG5cdCAgICBjbGFzczogWydpcy0nICsgX3ZtLiRwYXJlbnQuZGlyZWN0aW9uLCB7XG5cdCAgICAgICdpcy1pY29uJzogX3ZtLmljb25cblx0ICAgIH1dLFxuXHQgICAgc3R5bGU6IChfdm0uaXNMYXN0ID8gJycgOiB7XG5cdCAgICAgIG1hcmdpblJpZ2h0OiBfdm0uJHBhcmVudC5zdGVwT2Zmc2V0ICsgJ3B4J1xuXHQgICAgfSlcblx0ICB9LCBbX2MoJ2knLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1zdGVwX19saW5lLWlubmVyXCIsXG5cdCAgICBzdHlsZTogKF92bS5saW5lU3R5bGUpXG5cdCAgfSldKSwgX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1zdGVwX19pY29uXCJcblx0ICB9LCBbKF92bS5jdXJyZW50U3RhdHVzICE9PSAnc3VjY2VzcycgJiYgX3ZtLmN1cnJlbnRTdGF0dXMgIT09ICdlcnJvcicpID8gX3ZtLl90KFwiaWNvblwiLCBbKF92bS5pY29uKSA/IF9jKCdpJywge1xuXHQgICAgY2xhc3M6IFsnZWwtaWNvbi0nICsgX3ZtLmljb25dXG5cdCAgfSkgOiBfYygnZGl2JywgW192bS5fdihfdm0uX3MoX3ZtLmluZGV4ICsgMSkpXSldKSA6IF9jKCdpJywge1xuXHQgICAgY2xhc3M6IFsnZWwtaWNvbi0nICsgKF92bS5jdXJyZW50U3RhdHVzID09PSAnc3VjY2VzcycgPyAnY2hlY2snIDogJ2Nsb3NlJyldXG5cdCAgfSldLCAyKV0pLCBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtc3RlcF9fbWFpblwiLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIG1hcmdpbkxlZnQ6IF92bS5tYWluT2Zmc2V0XG5cdCAgICB9KVxuXHQgIH0sIFtfYygnZGl2Jywge1xuXHQgICAgcmVmOiBcInRpdGxlXCIsXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1zdGVwX190aXRsZVwiLFxuXHQgICAgY2xhc3M6IFsnaXMtJyArIF92bS5jdXJyZW50U3RhdHVzXVxuXHQgIH0sIFtfdm0uX3QoXCJ0aXRsZVwiLCBbX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKV0pXSwgMiksIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1zdGVwX19kZXNjcmlwdGlvblwiLFxuXHQgICAgY2xhc3M6IFsnaXMtJyArIF92bS5jdXJyZW50U3RhdHVzXVxuXHQgIH0sIFtfdm0uX3QoXCJkZXNjcmlwdGlvblwiLCBbX3ZtLl92KF92bS5fcyhfdm0uZGVzY3JpcHRpb24pKV0pXSwgMildKV0pXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDMyOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9tYWluID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMjkpO1xuXG5cdHZhciBfbWFpbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tYWluKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9tYWluMi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfbWFpbjIuZGVmYXVsdC5uYW1lLCBfbWFpbjIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX21haW4yLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAzMjkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzMwKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzMxKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMzMwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3Rocm90dGxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzEpO1xuXG5cdHZhciBfdGhyb3R0bGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdGhyb3R0bGUpO1xuXG5cdHZhciBfcmVzaXplRXZlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxDYXJvdXNlbCcsXG5cblx0ICBwcm9wczoge1xuXHQgICAgaW5pdGlhbEluZGV4OiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogMFxuXHQgICAgfSxcblx0ICAgIGhlaWdodDogU3RyaW5nLFxuXHQgICAgdHJpZ2dlcjoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICdob3Zlcidcblx0ICAgIH0sXG5cdCAgICBhdXRvcGxheToge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXHQgICAgaW50ZXJ2YWw6IHtcblx0ICAgICAgdHlwZTogTnVtYmVyLFxuXHQgICAgICBkZWZhdWx0OiAzMDAwXG5cdCAgICB9LFxuXHQgICAgaW5kaWNhdG9yUG9zaXRpb246IFN0cmluZyxcblx0ICAgIGluZGljYXRvcjoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXHQgICAgYXJyb3c6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnaG92ZXInXG5cdCAgICB9LFxuXHQgICAgdHlwZTogU3RyaW5nXG5cdCAgfSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBpdGVtczogW10sXG5cdCAgICAgIGFjdGl2ZUluZGV4OiAtMSxcblx0ICAgICAgY29udGFpbmVyV2lkdGg6IDAsXG5cdCAgICAgIHRpbWVyOiBudWxsLFxuXHQgICAgICBob3ZlcjogZmFsc2Vcblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIGhhc0xhYmVsOiBmdW5jdGlvbiBoYXNMYWJlbCgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuXHQgICAgICAgIHJldHVybiBpdGVtLmxhYmVsLnRvU3RyaW5nKCkubGVuZ3RoID4gMDtcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHdhdGNoOiB7XG5cdCAgICBpdGVtczogZnVuY3Rpb24gaXRlbXModmFsKSB7XG5cdCAgICAgIGlmICh2YWwubGVuZ3RoID4gMCkgdGhpcy5zZXRBY3RpdmVJdGVtKHRoaXMuaW5pdGlhbEluZGV4KTtcblx0ICAgIH0sXG5cdCAgICBhY3RpdmVJbmRleDogZnVuY3Rpb24gYWN0aXZlSW5kZXgodmFsLCBvbGRWYWwpIHtcblx0ICAgICAgdGhpcy5yZXNldEl0ZW1Qb3NpdGlvbihvbGRWYWwpO1xuXHQgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWwsIG9sZFZhbCk7XG5cdCAgICB9LFxuXHQgICAgYXV0b3BsYXk6IGZ1bmN0aW9uIGF1dG9wbGF5KHZhbCkge1xuXHQgICAgICB2YWwgPyB0aGlzLnN0YXJ0VGltZXIoKSA6IHRoaXMucGF1c2VUaW1lcigpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBoYW5kbGVNb3VzZUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUVudGVyKCkge1xuXHQgICAgICB0aGlzLmhvdmVyID0gdHJ1ZTtcblx0ICAgICAgdGhpcy5wYXVzZVRpbWVyKCk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlTW91c2VMZWF2ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpIHtcblx0ICAgICAgdGhpcy5ob3ZlciA9IGZhbHNlO1xuXHQgICAgICB0aGlzLnN0YXJ0VGltZXIoKTtcblx0ICAgIH0sXG5cdCAgICBpdGVtSW5TdGFnZTogZnVuY3Rpb24gaXRlbUluU3RhZ2UoaXRlbSwgaW5kZXgpIHtcblx0ICAgICAgdmFyIGxlbmd0aCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuXHQgICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCAtIDEgJiYgaXRlbS5pblN0YWdlICYmIHRoaXMuaXRlbXNbMF0uYWN0aXZlIHx8IGl0ZW0uaW5TdGFnZSAmJiB0aGlzLml0ZW1zW2luZGV4ICsgMV0gJiYgdGhpcy5pdGVtc1tpbmRleCArIDFdLmFjdGl2ZSkge1xuXHQgICAgICAgIHJldHVybiAnbGVmdCc7XG5cdCAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IDAgJiYgaXRlbS5pblN0YWdlICYmIHRoaXMuaXRlbXNbbGVuZ3RoIC0gMV0uYWN0aXZlIHx8IGl0ZW0uaW5TdGFnZSAmJiB0aGlzLml0ZW1zW2luZGV4IC0gMV0gJiYgdGhpcy5pdGVtc1tpbmRleCAtIDFdLmFjdGl2ZSkge1xuXHQgICAgICAgIHJldHVybiAncmlnaHQnO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVCdXR0b25FbnRlcjogZnVuY3Rpb24gaGFuZGxlQnV0dG9uRW50ZXIoYXJyb3cpIHtcblx0ICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgICB0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG5cdCAgICAgICAgaWYgKGFycm93ID09PSBfdGhpcy5pdGVtSW5TdGFnZShpdGVtLCBpbmRleCkpIHtcblx0ICAgICAgICAgIGl0ZW0uaG92ZXIgPSB0cnVlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQnV0dG9uTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZUJ1dHRvbkxlYXZlKCkge1xuXHQgICAgICB0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgICBpdGVtLmhvdmVyID0gZmFsc2U7XG5cdCAgICAgIH0pO1xuXHQgICAgfSxcblx0ICAgIHVwZGF0ZUl0ZW1zOiBmdW5jdGlvbiB1cGRhdGVJdGVtcygpIHtcblx0ICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuJGNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcblx0ICAgICAgICByZXR1cm4gY2hpbGQuJG9wdGlvbnMubmFtZSA9PT0gJ0VsQ2Fyb3VzZWxJdGVtJztcblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgcmVzZXRJdGVtUG9zaXRpb246IGZ1bmN0aW9uIHJlc2V0SXRlbVBvc2l0aW9uKG9sZEluZGV4KSB7XG5cdCAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcblx0ICAgICAgICBpdGVtLnRyYW5zbGF0ZUl0ZW0oaW5kZXgsIF90aGlzMi5hY3RpdmVJbmRleCwgb2xkSW5kZXgpO1xuXHQgICAgICB9KTtcblx0ICAgIH0sXG5cdCAgICBwbGF5U2xpZGVzOiBmdW5jdGlvbiBwbGF5U2xpZGVzKCkge1xuXHQgICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSkge1xuXHQgICAgICAgIHRoaXMuYWN0aXZlSW5kZXgrKztcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gMDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHBhdXNlVGltZXI6IGZ1bmN0aW9uIHBhdXNlVGltZXIoKSB7XG5cdCAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lcik7XG5cdCAgICB9LFxuXHQgICAgc3RhcnRUaW1lcjogZnVuY3Rpb24gc3RhcnRUaW1lcigpIHtcblx0ICAgICAgaWYgKHRoaXMuaW50ZXJ2YWwgPD0gMCB8fCAhdGhpcy5hdXRvcGxheSkgcmV0dXJuO1xuXHQgICAgICB0aGlzLnRpbWVyID0gc2V0SW50ZXJ2YWwodGhpcy5wbGF5U2xpZGVzLCB0aGlzLmludGVydmFsKTtcblx0ICAgIH0sXG5cdCAgICBzZXRBY3RpdmVJdGVtOiBmdW5jdGlvbiBzZXRBY3RpdmVJdGVtKGluZGV4KSB7XG5cdCAgICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgdmFyIGZpbHRlcmVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuXHQgICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZSA9PT0gaW5kZXg7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKGZpbHRlcmVkSXRlbXMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgICAgaW5kZXggPSB0aGlzLml0ZW1zLmluZGV4T2YoZmlsdGVyZWRJdGVtc1swXSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIGluZGV4ID0gTnVtYmVyKGluZGV4KTtcblx0ICAgICAgaWYgKGlzTmFOKGluZGV4KSB8fCBpbmRleCAhPT0gTWF0aC5mbG9vcihpbmRleCkpIHtcblx0ICAgICAgICAoXCJwcm9kdWN0aW9uXCIpICE9PSAncHJvZHVjdGlvbicgJiYgY29uc29sZS53YXJuKCdbRWxlbWVudCBXYXJuXVtDYXJvdXNlbF1pbmRleCBtdXN0IGJlIGFuIGludGVnZXIuJyk7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIHZhciBsZW5ndGggPSB0aGlzLml0ZW1zLmxlbmd0aDtcblx0ICAgICAgaWYgKGluZGV4IDwgMCkge1xuXHQgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBsZW5ndGggLSAxO1xuXHQgICAgICB9IGVsc2UgaWYgKGluZGV4ID49IGxlbmd0aCkge1xuXHQgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAwO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpbmRleDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHByZXY6IGZ1bmN0aW9uIHByZXYoKSB7XG5cdCAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZUluZGV4IC0gMSk7XG5cdCAgICB9LFxuXHQgICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcblx0ICAgICAgdGhpcy5zZXRBY3RpdmVJdGVtKHRoaXMuYWN0aXZlSW5kZXggKyAxKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVJbmRpY2F0b3JDbGljazogZnVuY3Rpb24gaGFuZGxlSW5kaWNhdG9yQ2xpY2soaW5kZXgpIHtcblx0ICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGluZGV4O1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUluZGljYXRvckhvdmVyOiBmdW5jdGlvbiBoYW5kbGVJbmRpY2F0b3JIb3ZlcihpbmRleCkge1xuXHQgICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnaG92ZXInICYmIGluZGV4ICE9PSB0aGlzLmFjdGl2ZUluZGV4KSB7XG5cdCAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGluZGV4O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG5cdCAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuXHQgICAgdGhpcy50aHJvdHRsZWRBcnJvd0NsaWNrID0gKDAsIF90aHJvdHRsZTIuZGVmYXVsdCkoMzAwLCB0cnVlLCBmdW5jdGlvbiAoaW5kZXgpIHtcblx0ICAgICAgX3RoaXMzLnNldEFjdGl2ZUl0ZW0oaW5kZXgpO1xuXHQgICAgfSk7XG5cdCAgICB0aGlzLnRocm90dGxlZEluZGljYXRvckhvdmVyID0gKDAsIF90aHJvdHRsZTIuZGVmYXVsdCkoMzAwLCBmdW5jdGlvbiAoaW5kZXgpIHtcblx0ICAgICAgX3RoaXMzLmhhbmRsZUluZGljYXRvckhvdmVyKGluZGV4KTtcblx0ICAgIH0pO1xuXHQgIH0sXG5cdCAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcblx0ICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG5cdCAgICB0aGlzLnVwZGF0ZUl0ZW1zKCk7XG5cdCAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgICgwLCBfcmVzaXplRXZlbnQuYWRkUmVzaXplTGlzdGVuZXIpKF90aGlzNC4kZWwsIF90aGlzNC5yZXNldEl0ZW1Qb3NpdGlvbik7XG5cdCAgICAgIGlmIChfdGhpczQuaW5pdGlhbEluZGV4IDwgX3RoaXM0Lml0ZW1zLmxlbmd0aCAmJiBfdGhpczQuaW5pdGlhbEluZGV4ID49IDApIHtcblx0ICAgICAgICBfdGhpczQuYWN0aXZlSW5kZXggPSBfdGhpczQuaW5pdGlhbEluZGV4O1xuXHQgICAgICB9XG5cdCAgICAgIF90aGlzNC5zdGFydFRpbWVyKCk7XG5cdCAgICB9KTtcblx0ICB9LFxuXHQgIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG5cdCAgICBpZiAodGhpcy4kZWwpICgwLCBfcmVzaXplRXZlbnQucmVtb3ZlUmVzaXplTGlzdGVuZXIpKHRoaXMuJGVsLCB0aGlzLnJlc2V0SXRlbVBvc2l0aW9uKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzMzEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jYXJvdXNlbFwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2VsLWNhcm91c2VsLS1jYXJkJzogX3ZtLnR5cGUgPT09ICdjYXJkJ1xuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwibW91c2VlbnRlclwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgICAgX3ZtLmhhbmRsZU1vdXNlRW50ZXIoJGV2ZW50KVxuXHQgICAgICB9LFxuXHQgICAgICBcIm1vdXNlbGVhdmVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICAgIF92bS5oYW5kbGVNb3VzZUxlYXZlKCRldmVudClcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFtfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2Fyb3VzZWxfX2NvbnRhaW5lclwiLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIGhlaWdodDogX3ZtLmhlaWdodFxuXHQgICAgfSlcblx0ICB9LCBbX2MoJ3RyYW5zaXRpb24nLCB7XG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcIm5hbWVcIjogXCJjYXJvdXNlbC1hcnJvdy1sZWZ0XCJcblx0ICAgIH1cblx0ICB9LCBbKF92bS5hcnJvdyAhPT0gJ25ldmVyJykgPyBfYygnYnV0dG9uJywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLmFycm93ID09PSAnYWx3YXlzJyB8fCBfdm0uaG92ZXIpLFxuXHQgICAgICBleHByZXNzaW9uOiBcImFycm93ID09PSAnYWx3YXlzJyB8fCBob3ZlclwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNhcm91c2VsX19hcnJvdyBlbC1jYXJvdXNlbF9fYXJyb3ctLWxlZnRcIixcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwibW91c2VlbnRlclwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uaGFuZGxlQnV0dG9uRW50ZXIoJ2xlZnQnKVxuXHQgICAgICB9LFxuXHQgICAgICBcIm1vdXNlbGVhdmVcIjogX3ZtLmhhbmRsZUJ1dHRvbkxlYXZlLFxuXHQgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgICBfdm0udGhyb3R0bGVkQXJyb3dDbGljayhfdm0uYWN0aXZlSW5kZXggLSAxKVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSwgW19jKCdpJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1hcnJvdy1sZWZ0XCJcblx0ICB9KV0pIDogX3ZtLl9lKCldKSwgX2MoJ3RyYW5zaXRpb24nLCB7XG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcIm5hbWVcIjogXCJjYXJvdXNlbC1hcnJvdy1yaWdodFwiXG5cdCAgICB9XG5cdCAgfSwgWyhfdm0uYXJyb3cgIT09ICduZXZlcicpID8gX2MoJ2J1dHRvbicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5hcnJvdyA9PT0gJ2Fsd2F5cycgfHwgX3ZtLmhvdmVyKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJhcnJvdyA9PT0gJ2Fsd2F5cycgfHwgaG92ZXJcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jYXJvdXNlbF9fYXJyb3cgZWwtY2Fyb3VzZWxfX2Fycm93LS1yaWdodFwiLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJtb3VzZWVudGVyXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5oYW5kbGVCdXR0b25FbnRlcigncmlnaHQnKVxuXHQgICAgICB9LFxuXHQgICAgICBcIm1vdXNlbGVhdmVcIjogX3ZtLmhhbmRsZUJ1dHRvbkxlYXZlLFxuXHQgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgICBfdm0udGhyb3R0bGVkQXJyb3dDbGljayhfdm0uYWN0aXZlSW5kZXggKyAxKVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSwgW19jKCdpJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1hcnJvdy1yaWdodFwiXG5cdCAgfSldKSA6IF92bS5fZSgpXSksIF92bS5fdChcImRlZmF1bHRcIildLCAyKSwgKF92bS5pbmRpY2F0b3JQb3NpdGlvbiAhPT0gJ25vbmUnKSA/IF9jKCd1bCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNhcm91c2VsX19pbmRpY2F0b3JzXCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLWxhYmVscyc6IF92bS5oYXNMYWJlbCwgJ2VsLWNhcm91c2VsX19pbmRpY2F0b3JzLS1vdXRzaWRlJzogX3ZtLmluZGljYXRvclBvc2l0aW9uID09PSAnb3V0c2lkZScgfHwgX3ZtLnR5cGUgPT09ICdjYXJkJ1xuXHQgICAgfVxuXHQgIH0sIF92bS5fbCgoX3ZtLml0ZW1zKSwgZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcblx0ICAgIHJldHVybiBfYygnbGknLCB7XG5cdCAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNhcm91c2VsX19pbmRpY2F0b3JcIixcblx0ICAgICAgY2xhc3M6IHtcblx0ICAgICAgICAnaXMtYWN0aXZlJzogaW5kZXggPT09IF92bS5hY3RpdmVJbmRleFxuXHQgICAgICB9LFxuXHQgICAgICBvbjoge1xuXHQgICAgICAgIFwibW91c2VlbnRlclwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICAgIF92bS50aHJvdHRsZWRJbmRpY2F0b3JIb3ZlcihpbmRleClcblx0ICAgICAgICB9LFxuXHQgICAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgICAgICBfdm0uaGFuZGxlSW5kaWNhdG9yQ2xpY2soaW5kZXgpXG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9LCBbX2MoJ2J1dHRvbicsIHtcblx0ICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2Fyb3VzZWxfX2J1dHRvblwiXG5cdCAgICB9LCBbKF92bS5oYXNMYWJlbCkgPyBfYygnc3BhbicsIFtfdm0uX3YoX3ZtLl9zKGl0ZW0ubGFiZWwpKV0pIDogX3ZtLl9lKCldKV0pXG5cdCAgfSkpIDogX3ZtLl9lKCldKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAzMzIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfbWFpbiA9IF9fd2VicGFja19yZXF1aXJlX18oMzMzKTtcblxuXHR2YXIgX21haW4yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWFpbik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfbWFpbjIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX21haW4yLmRlZmF1bHQubmFtZSwgX21haW4yLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9tYWluMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogMzMzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3Jlc2l6ZUV2ZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTApO1xuXG5cdHZhciBfc2Nyb2xsYmFyV2lkdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNik7XG5cblx0dmFyIF9zY3JvbGxiYXJXaWR0aDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zY3JvbGxiYXJXaWR0aCk7XG5cblx0dmFyIF91dGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDcpO1xuXG5cdHZhciBfYmFyID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMzQpO1xuXG5cdHZhciBfYmFyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Jhcik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHQvLyByZWZlcmVuY2UgaHR0cHM6Ly9naXRodWIuY29tL25vZWxkZWxnYWRvL2dlbWluaS1zY3JvbGxiYXIvYmxvYi9tYXN0ZXIvaW5kZXguanNcblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsU2Nyb2xsYmFyJyxcblxuXHQgIGNvbXBvbmVudHM6IHsgQmFyOiBfYmFyMi5kZWZhdWx0IH0sXG5cblx0ICBwcm9wczoge1xuXHQgICAgbmF0aXZlOiBCb29sZWFuLFxuXHQgICAgd3JhcFN0eWxlOiB7fSxcblx0ICAgIHdyYXBDbGFzczoge30sXG5cdCAgICB2aWV3Q2xhc3M6IHt9LFxuXHQgICAgdmlld1N0eWxlOiB7fSxcblx0ICAgIG5vcmVzaXplOiBCb29sZWFuLCAvLyDlpoLmnpwgY29udGFpbmVyIOWwuuWvuOS4jeS8muWPkeeUn+WPmOWMlu+8jOacgOWlveiuvue9ruWug+WPr+S7peS8mOWMluaAp+iDvVxuXHQgICAgdGFnOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2Rpdidcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIHNpemVXaWR0aDogJzAnLFxuXHQgICAgICBzaXplSGVpZ2h0OiAnMCcsXG5cdCAgICAgIG1vdmVYOiAwLFxuXHQgICAgICBtb3ZlWTogMFxuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgd3JhcDogZnVuY3Rpb24gd3JhcCgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuJHJlZnMud3JhcDtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuXHQgICAgdmFyIGd1dHRlciA9ICgwLCBfc2Nyb2xsYmFyV2lkdGgyLmRlZmF1bHQpKCk7XG5cdCAgICB2YXIgc3R5bGUgPSB0aGlzLndyYXBTdHlsZTtcblxuXHQgICAgaWYgKGd1dHRlcikge1xuXHQgICAgICB2YXIgZ3V0dGVyV2l0aCA9ICctJyArIGd1dHRlciArICdweCc7XG5cdCAgICAgIHZhciBndXR0ZXJTdHlsZSA9ICdtYXJnaW4tYm90dG9tOiAnICsgZ3V0dGVyV2l0aCArICc7IG1hcmdpbi1yaWdodDogJyArIGd1dHRlcldpdGggKyAnOyc7XG5cblx0ICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy53cmFwU3R5bGUpKSB7XG5cdCAgICAgICAgc3R5bGUgPSAoMCwgX3V0aWwudG9PYmplY3QpKHRoaXMud3JhcFN0eWxlKTtcblx0ICAgICAgICBzdHlsZS5tYXJnaW5SaWdodCA9IHN0eWxlLm1hcmdpbkJvdHRvbSA9IGd1dHRlcldpdGg7XG5cdCAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMud3JhcFN0eWxlID09PSAnc3RyaW5nJykge1xuXHQgICAgICAgIHN0eWxlICs9IGd1dHRlclN0eWxlO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHN0eWxlID0gZ3V0dGVyU3R5bGU7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIHZhciB2aWV3ID0gaCh0aGlzLnRhZywge1xuXHQgICAgICBjbGFzczogWydlbC1zY3JvbGxiYXJfX3ZpZXcnLCB0aGlzLnZpZXdDbGFzc10sXG5cdCAgICAgIHN0eWxlOiB0aGlzLnZpZXdTdHlsZSxcblx0ICAgICAgcmVmOiAncmVzaXplJ1xuXHQgICAgfSwgdGhpcy4kc2xvdHMuZGVmYXVsdCk7XG5cdCAgICB2YXIgd3JhcCA9IGgoXG5cdCAgICAgICdkaXYnLFxuXHQgICAgICB7XG5cdCAgICAgICAgcmVmOiAnd3JhcCcsXG5cdCAgICAgICAgc3R5bGU6IHN0eWxlLFxuXHQgICAgICAgIG9uOiB7XG5cdCAgICAgICAgICAnc2Nyb2xsJzogdGhpcy5oYW5kbGVTY3JvbGxcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgJ2NsYXNzJzogW3RoaXMud3JhcENsYXNzLCAnZWwtc2Nyb2xsYmFyX193cmFwJywgZ3V0dGVyID8gJycgOiAnZWwtc2Nyb2xsYmFyX193cmFwLS1oaWRkZW4tZGVmYXVsdCddIH0sXG5cdCAgICAgIFtbdmlld11dXG5cdCAgICApO1xuXHQgICAgdmFyIG5vZGVzID0gdm9pZCAwO1xuXG5cdCAgICBpZiAoIXRoaXMubmF0aXZlKSB7XG5cdCAgICAgIG5vZGVzID0gW3dyYXAsIGgoXG5cdCAgICAgICAgX2JhcjIuZGVmYXVsdCxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICBhdHRyczoge1xuXHQgICAgICAgICAgICBtb3ZlOiB0aGlzLm1vdmVYLFxuXHQgICAgICAgICAgICBzaXplOiB0aGlzLnNpemVXaWR0aCB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBbXVxuXHQgICAgICApLCBoKFxuXHQgICAgICAgIF9iYXIyLmRlZmF1bHQsXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgYXR0cnM6IHtcblx0ICAgICAgICAgICAgdmVydGljYWw6IHRydWUsXG5cdCAgICAgICAgICAgIG1vdmU6IHRoaXMubW92ZVksXG5cdCAgICAgICAgICAgIHNpemU6IHRoaXMuc2l6ZUhlaWdodCB9XG5cdCAgICAgICAgfSxcblx0ICAgICAgICBbXVxuXHQgICAgICApXTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIG5vZGVzID0gW2goXG5cdCAgICAgICAgJ2RpdicsXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgcmVmOiAnd3JhcCcsXG5cdCAgICAgICAgICAnY2xhc3MnOiBbdGhpcy53cmFwQ2xhc3MsICdlbC1zY3JvbGxiYXJfX3dyYXAnXSxcblx0ICAgICAgICAgIHN0eWxlOiBzdHlsZSB9LFxuXHQgICAgICAgIFtbdmlld11dXG5cdCAgICAgICldO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIGgoJ2RpdicsIHsgY2xhc3M6ICdlbC1zY3JvbGxiYXInIH0sIG5vZGVzKTtcblx0ICB9LFxuXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBoYW5kbGVTY3JvbGw6IGZ1bmN0aW9uIGhhbmRsZVNjcm9sbCgpIHtcblx0ICAgICAgdmFyIHdyYXAgPSB0aGlzLndyYXA7XG5cblx0ICAgICAgdGhpcy5tb3ZlWSA9IHdyYXAuc2Nyb2xsVG9wICogMTAwIC8gd3JhcC5jbGllbnRIZWlnaHQ7XG5cdCAgICAgIHRoaXMubW92ZVggPSB3cmFwLnNjcm9sbExlZnQgKiAxMDAgLyB3cmFwLmNsaWVudFdpZHRoO1xuXHQgICAgfSxcblx0ICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge1xuXHQgICAgICB2YXIgaGVpZ2h0UGVyY2VudGFnZSA9IHZvaWQgMCxcblx0ICAgICAgICAgIHdpZHRoUGVyY2VudGFnZSA9IHZvaWQgMDtcblx0ICAgICAgdmFyIHdyYXAgPSB0aGlzLndyYXA7XG5cdCAgICAgIGlmICghd3JhcCkgcmV0dXJuO1xuXG5cdCAgICAgIGhlaWdodFBlcmNlbnRhZ2UgPSB3cmFwLmNsaWVudEhlaWdodCAqIDEwMCAvIHdyYXAuc2Nyb2xsSGVpZ2h0O1xuXHQgICAgICB3aWR0aFBlcmNlbnRhZ2UgPSB3cmFwLmNsaWVudFdpZHRoICogMTAwIC8gd3JhcC5zY3JvbGxXaWR0aDtcblxuXHQgICAgICB0aGlzLnNpemVIZWlnaHQgPSBoZWlnaHRQZXJjZW50YWdlIDwgMTAwID8gaGVpZ2h0UGVyY2VudGFnZSArICclJyA6ICcnO1xuXHQgICAgICB0aGlzLnNpemVXaWR0aCA9IHdpZHRoUGVyY2VudGFnZSA8IDEwMCA/IHdpZHRoUGVyY2VudGFnZSArICclJyA6ICcnO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgaWYgKHRoaXMubmF0aXZlKSByZXR1cm47XG5cdCAgICB0aGlzLiRuZXh0VGljayh0aGlzLnVwZGF0ZSk7XG5cdCAgICAhdGhpcy5ub3Jlc2l6ZSAmJiAoMCwgX3Jlc2l6ZUV2ZW50LmFkZFJlc2l6ZUxpc3RlbmVyKSh0aGlzLiRyZWZzLnJlc2l6ZSwgdGhpcy51cGRhdGUpO1xuXHQgIH0sXG5cdCAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcblx0ICAgIGlmICh0aGlzLm5hdGl2ZSkgcmV0dXJuO1xuXHQgICAgIXRoaXMubm9yZXNpemUgJiYgKDAsIF9yZXNpemVFdmVudC5yZW1vdmVSZXNpemVMaXN0ZW5lcikodGhpcy4kcmVmcy5yZXNpemUsIHRoaXMudXBkYXRlKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzMzQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfZG9tID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XG5cblx0dmFyIF91dGlsID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMzUpO1xuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnQmFyJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICB2ZXJ0aWNhbDogQm9vbGVhbixcblx0ICAgIHNpemU6IFN0cmluZyxcblx0ICAgIG1vdmU6IE51bWJlclxuXHQgIH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgYmFyOiBmdW5jdGlvbiBiYXIoKSB7XG5cdCAgICAgIHJldHVybiBfdXRpbC5CQVJfTUFQW3RoaXMudmVydGljYWwgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnXTtcblx0ICAgIH0sXG5cdCAgICB3cmFwOiBmdW5jdGlvbiB3cmFwKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcGFyZW50LndyYXA7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcblx0ICAgIHZhciBzaXplID0gdGhpcy5zaXplLFxuXHQgICAgICAgIG1vdmUgPSB0aGlzLm1vdmUsXG5cdCAgICAgICAgYmFyID0gdGhpcy5iYXI7XG5cblxuXHQgICAgcmV0dXJuIGgoXG5cdCAgICAgICdkaXYnLFxuXHQgICAgICB7XG5cdCAgICAgICAgJ2NsYXNzJzogWydlbC1zY3JvbGxiYXJfX2JhcicsICdpcy0nICsgYmFyLmtleV0sXG5cdCAgICAgICAgb246IHtcblx0ICAgICAgICAgICdtb3VzZWRvd24nOiB0aGlzLmNsaWNrVHJhY2tIYW5kbGVyXG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICBbaChcblx0ICAgICAgICAnZGl2Jyxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICByZWY6ICd0aHVtYicsXG5cdCAgICAgICAgICAnY2xhc3MnOiAnZWwtc2Nyb2xsYmFyX190aHVtYicsXG5cdCAgICAgICAgICBvbjoge1xuXHQgICAgICAgICAgICAnbW91c2Vkb3duJzogdGhpcy5jbGlja1RodW1iSGFuZGxlclxuXHQgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgc3R5bGU6ICgwLCBfdXRpbC5yZW5kZXJUaHVtYlN0eWxlKSh7IHNpemU6IHNpemUsIG1vdmU6IG1vdmUsIGJhcjogYmFyIH0pIH0sXG5cdCAgICAgICAgW11cblx0ICAgICAgKV1cblx0ICAgICk7XG5cdCAgfSxcblxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgY2xpY2tUaHVtYkhhbmRsZXI6IGZ1bmN0aW9uIGNsaWNrVGh1bWJIYW5kbGVyKGUpIHtcblx0ICAgICAgdGhpcy5zdGFydERyYWcoZSk7XG5cdCAgICAgIHRoaXNbdGhpcy5iYXIuYXhpc10gPSBlLmN1cnJlbnRUYXJnZXRbdGhpcy5iYXIub2Zmc2V0XSAtIChlW3RoaXMuYmFyLmNsaWVudF0gLSBlLmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbdGhpcy5iYXIuZGlyZWN0aW9uXSk7XG5cdCAgICB9LFxuXHQgICAgY2xpY2tUcmFja0hhbmRsZXI6IGZ1bmN0aW9uIGNsaWNrVHJhY2tIYW5kbGVyKGUpIHtcblx0ICAgICAgdmFyIG9mZnNldCA9IE1hdGguYWJzKGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuYmFyLmRpcmVjdGlvbl0gLSBlW3RoaXMuYmFyLmNsaWVudF0pO1xuXHQgICAgICB2YXIgdGh1bWJIYWxmID0gdGhpcy4kcmVmcy50aHVtYlt0aGlzLmJhci5vZmZzZXRdIC8gMjtcblx0ICAgICAgdmFyIHRodW1iUG9zaXRpb25QZXJjZW50YWdlID0gKG9mZnNldCAtIHRodW1iSGFsZikgKiAxMDAgLyB0aGlzLiRlbFt0aGlzLmJhci5vZmZzZXRdO1xuXG5cdCAgICAgIHRoaXMud3JhcFt0aGlzLmJhci5zY3JvbGxdID0gdGh1bWJQb3NpdGlvblBlcmNlbnRhZ2UgKiB0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsU2l6ZV0gLyAxMDA7XG5cdCAgICB9LFxuXHQgICAgc3RhcnREcmFnOiBmdW5jdGlvbiBzdGFydERyYWcoZSkge1xuXHQgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHQgICAgICB0aGlzLmN1cnNvckRvd24gPSB0cnVlO1xuXG5cdCAgICAgICgwLCBfZG9tLm9uKShkb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMubW91c2VNb3ZlRG9jdW1lbnRIYW5kbGVyKTtcblx0ICAgICAgKDAsIF9kb20ub24pKGRvY3VtZW50LCAnbW91c2V1cCcsIHRoaXMubW91c2VVcERvY3VtZW50SGFuZGxlcik7XG5cdCAgICAgIGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICB9O1xuXHQgICAgfSxcblx0ICAgIG1vdXNlTW92ZURvY3VtZW50SGFuZGxlcjogZnVuY3Rpb24gbW91c2VNb3ZlRG9jdW1lbnRIYW5kbGVyKGUpIHtcblx0ICAgICAgaWYgKHRoaXMuY3Vyc29yRG93biA9PT0gZmFsc2UpIHJldHVybjtcblx0ICAgICAgdmFyIHByZXZQYWdlID0gdGhpc1t0aGlzLmJhci5heGlzXTtcblxuXHQgICAgICBpZiAoIXByZXZQYWdlKSByZXR1cm47XG5cblx0ICAgICAgdmFyIG9mZnNldCA9ICh0aGlzLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmJhci5kaXJlY3Rpb25dIC0gZVt0aGlzLmJhci5jbGllbnRdKSAqIC0xO1xuXHQgICAgICB2YXIgdGh1bWJDbGlja1Bvc2l0aW9uID0gdGhpcy4kcmVmcy50aHVtYlt0aGlzLmJhci5vZmZzZXRdIC0gcHJldlBhZ2U7XG5cdCAgICAgIHZhciB0aHVtYlBvc2l0aW9uUGVyY2VudGFnZSA9IChvZmZzZXQgLSB0aHVtYkNsaWNrUG9zaXRpb24pICogMTAwIC8gdGhpcy4kZWxbdGhpcy5iYXIub2Zmc2V0XTtcblxuXHQgICAgICB0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsXSA9IHRodW1iUG9zaXRpb25QZXJjZW50YWdlICogdGhpcy53cmFwW3RoaXMuYmFyLnNjcm9sbFNpemVdIC8gMTAwO1xuXHQgICAgfSxcblx0ICAgIG1vdXNlVXBEb2N1bWVudEhhbmRsZXI6IGZ1bmN0aW9uIG1vdXNlVXBEb2N1bWVudEhhbmRsZXIoZSkge1xuXHQgICAgICB0aGlzLmN1cnNvckRvd24gPSBmYWxzZTtcblx0ICAgICAgdGhpc1t0aGlzLmJhci5heGlzXSA9IDA7XG5cdCAgICAgICgwLCBfZG9tLm9mZikoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlTW92ZURvY3VtZW50SGFuZGxlcik7XG5cdCAgICAgIGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQgPSBudWxsO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcblx0ICAgICgwLCBfZG9tLm9mZikoZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5tb3VzZVVwRG9jdW1lbnRIYW5kbGVyKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzMzUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHRleHBvcnRzLnJlbmRlclRodW1iU3R5bGUgPSByZW5kZXJUaHVtYlN0eWxlO1xuXHR2YXIgQkFSX01BUCA9IGV4cG9ydHMuQkFSX01BUCA9IHtcblx0ICB2ZXJ0aWNhbDoge1xuXHQgICAgb2Zmc2V0OiAnb2Zmc2V0SGVpZ2h0Jyxcblx0ICAgIHNjcm9sbDogJ3Njcm9sbFRvcCcsXG5cdCAgICBzY3JvbGxTaXplOiAnc2Nyb2xsSGVpZ2h0Jyxcblx0ICAgIHNpemU6ICdoZWlnaHQnLFxuXHQgICAga2V5OiAndmVydGljYWwnLFxuXHQgICAgYXhpczogJ1knLFxuXHQgICAgY2xpZW50OiAnY2xpZW50WScsXG5cdCAgICBkaXJlY3Rpb246ICd0b3AnXG5cdCAgfSxcblx0ICBob3Jpem9udGFsOiB7XG5cdCAgICBvZmZzZXQ6ICdvZmZzZXRXaWR0aCcsXG5cdCAgICBzY3JvbGw6ICdzY3JvbGxMZWZ0Jyxcblx0ICAgIHNjcm9sbFNpemU6ICdzY3JvbGxXaWR0aCcsXG5cdCAgICBzaXplOiAnd2lkdGgnLFxuXHQgICAga2V5OiAnaG9yaXpvbnRhbCcsXG5cdCAgICBheGlzOiAnWCcsXG5cdCAgICBjbGllbnQ6ICdjbGllbnRYJyxcblx0ICAgIGRpcmVjdGlvbjogJ2xlZnQnXG5cdCAgfVxuXHR9O1xuXG5cdGZ1bmN0aW9uIHJlbmRlclRodW1iU3R5bGUoX3JlZikge1xuXHQgIHZhciBtb3ZlID0gX3JlZi5tb3ZlLFxuXHQgICAgICBzaXplID0gX3JlZi5zaXplLFxuXHQgICAgICBiYXIgPSBfcmVmLmJhcjtcblxuXHQgIHZhciBzdHlsZSA9IHt9O1xuXHQgIHZhciB0cmFuc2xhdGUgPSAndHJhbnNsYXRlJyArIGJhci5heGlzICsgJygnICsgbW92ZSArICclKSc7XG5cblx0ICBzdHlsZVtiYXIuc2l6ZV0gPSBzaXplO1xuXHQgIHN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zbGF0ZTtcblx0ICBzdHlsZS5tc1RyYW5zZm9ybSA9IHRyYW5zbGF0ZTtcblx0ICBzdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB0cmFuc2xhdGU7XG5cblx0ICByZXR1cm4gc3R5bGU7XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzMzYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfaXRlbSA9IF9fd2VicGFja19yZXF1aXJlX18oMzM3KTtcblxuXHR2YXIgX2l0ZW0yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaXRlbSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfaXRlbTIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX2l0ZW0yLmRlZmF1bHQubmFtZSwgX2l0ZW0yLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9pdGVtMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogMzM3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzOCksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzOSksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDMzOCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0dmFyIENBUkRfU0NBTEUgPSAwLjgzO1xuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsQ2Fyb3VzZWxJdGVtJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBuYW1lOiBTdHJpbmcsXG5cdCAgICBsYWJlbDoge1xuXHQgICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuXHQgICAgICBkZWZhdWx0OiAnJ1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgaG92ZXI6IGZhbHNlLFxuXHQgICAgICB0cmFuc2xhdGU6IDAsXG5cdCAgICAgIHNjYWxlOiAxLFxuXHQgICAgICBhY3RpdmU6IGZhbHNlLFxuXHQgICAgICByZWFkeTogZmFsc2UsXG5cdCAgICAgIGluU3RhZ2U6IGZhbHNlLFxuXHQgICAgICBhbmltYXRpbmc6IGZhbHNlXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIHByb2Nlc3NJbmRleDogZnVuY3Rpb24gcHJvY2Vzc0luZGV4KGluZGV4LCBhY3RpdmVJbmRleCwgbGVuZ3RoKSB7XG5cdCAgICAgIGlmIChhY3RpdmVJbmRleCA9PT0gMCAmJiBpbmRleCA9PT0gbGVuZ3RoIC0gMSkge1xuXHQgICAgICAgIHJldHVybiAtMTtcblx0ICAgICAgfSBlbHNlIGlmIChhY3RpdmVJbmRleCA9PT0gbGVuZ3RoIC0gMSAmJiBpbmRleCA9PT0gMCkge1xuXHQgICAgICAgIHJldHVybiBsZW5ndGg7XG5cdCAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCBhY3RpdmVJbmRleCAtIDEgJiYgYWN0aXZlSW5kZXggLSBpbmRleCA+PSBsZW5ndGggLyAyKSB7XG5cdCAgICAgICAgcmV0dXJuIGxlbmd0aCArIDE7XG5cdCAgICAgIH0gZWxzZSBpZiAoaW5kZXggPiBhY3RpdmVJbmRleCArIDEgJiYgaW5kZXggLSBhY3RpdmVJbmRleCA+PSBsZW5ndGggLyAyKSB7XG5cdCAgICAgICAgcmV0dXJuIC0yO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBpbmRleDtcblx0ICAgIH0sXG5cdCAgICBjYWxjdWxhdGVUcmFuc2xhdGU6IGZ1bmN0aW9uIGNhbGN1bGF0ZVRyYW5zbGF0ZShpbmRleCwgYWN0aXZlSW5kZXgsIHBhcmVudFdpZHRoKSB7XG5cdCAgICAgIGlmICh0aGlzLmluU3RhZ2UpIHtcblx0ICAgICAgICByZXR1cm4gcGFyZW50V2lkdGggKiAoKDIgLSBDQVJEX1NDQUxFKSAqIChpbmRleCAtIGFjdGl2ZUluZGV4KSArIDEpIC8gNDtcblx0ICAgICAgfSBlbHNlIGlmIChpbmRleCA8IGFjdGl2ZUluZGV4KSB7XG5cdCAgICAgICAgcmV0dXJuIC0oMSArIENBUkRfU0NBTEUpICogcGFyZW50V2lkdGggLyA0O1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHJldHVybiAoMyArIENBUkRfU0NBTEUpICogcGFyZW50V2lkdGggLyA0O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdHJhbnNsYXRlSXRlbTogZnVuY3Rpb24gdHJhbnNsYXRlSXRlbShpbmRleCwgYWN0aXZlSW5kZXgsIG9sZEluZGV4KSB7XG5cdCAgICAgIHZhciBwYXJlbnRXaWR0aCA9IHRoaXMuJHBhcmVudC4kZWwub2Zmc2V0V2lkdGg7XG5cdCAgICAgIHZhciBsZW5ndGggPSB0aGlzLiRwYXJlbnQuaXRlbXMubGVuZ3RoO1xuXHQgICAgICBpZiAodGhpcy4kcGFyZW50LnR5cGUgIT09ICdjYXJkJyAmJiBvbGRJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgdGhpcy5hbmltYXRpbmcgPSBpbmRleCA9PT0gYWN0aXZlSW5kZXggfHwgaW5kZXggPT09IG9sZEluZGV4O1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChpbmRleCAhPT0gYWN0aXZlSW5kZXggJiYgbGVuZ3RoID4gMikge1xuXHQgICAgICAgIGluZGV4ID0gdGhpcy5wcm9jZXNzSW5kZXgoaW5kZXgsIGFjdGl2ZUluZGV4LCBsZW5ndGgpO1xuXHQgICAgICB9XG5cdCAgICAgIGlmICh0aGlzLiRwYXJlbnQudHlwZSA9PT0gJ2NhcmQnKSB7XG5cdCAgICAgICAgdGhpcy5pblN0YWdlID0gTWF0aC5yb3VuZChNYXRoLmFicyhpbmRleCAtIGFjdGl2ZUluZGV4KSkgPD0gMTtcblx0ICAgICAgICB0aGlzLmFjdGl2ZSA9IGluZGV4ID09PSBhY3RpdmVJbmRleDtcblx0ICAgICAgICB0aGlzLnRyYW5zbGF0ZSA9IHRoaXMuY2FsY3VsYXRlVHJhbnNsYXRlKGluZGV4LCBhY3RpdmVJbmRleCwgcGFyZW50V2lkdGgpO1xuXHQgICAgICAgIHRoaXMuc2NhbGUgPSB0aGlzLmFjdGl2ZSA/IDEgOiBDQVJEX1NDQUxFO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuYWN0aXZlID0gaW5kZXggPT09IGFjdGl2ZUluZGV4O1xuXHQgICAgICAgIHRoaXMudHJhbnNsYXRlID0gcGFyZW50V2lkdGggKiAoaW5kZXggLSBhY3RpdmVJbmRleCk7XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlSXRlbUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVJdGVtQ2xpY2soKSB7XG5cdCAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG5cdCAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICdjYXJkJykge1xuXHQgICAgICAgIHZhciBpbmRleCA9IHBhcmVudC5pdGVtcy5pbmRleE9mKHRoaXMpO1xuXHQgICAgICAgIHBhcmVudC5zZXRBY3RpdmVJdGVtKGluZGV4KTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgdGhpcy4kcGFyZW50ICYmIHRoaXMuJHBhcmVudC51cGRhdGVJdGVtcygpO1xuXHQgIH0sXG5cdCAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG5cdCAgICB0aGlzLiRwYXJlbnQgJiYgdGhpcy4kcGFyZW50LnVwZGF0ZUl0ZW1zKCk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMzM5ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnZGl2Jywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLnJlYWR5KSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJyZWFkeVwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNhcm91c2VsX19pdGVtXCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaXMtYWN0aXZlJzogX3ZtLmFjdGl2ZSxcblx0ICAgICAgJ2VsLWNhcm91c2VsX19pdGVtLS1jYXJkJzogX3ZtLiRwYXJlbnQudHlwZSA9PT0gJ2NhcmQnLFxuXHQgICAgICAgICdpcy1pbi1zdGFnZSc6IF92bS5pblN0YWdlLFxuXHQgICAgICAgICdpcy1ob3Zlcic6IF92bS5ob3Zlcixcblx0ICAgICAgICAnaXMtYW5pbWF0aW5nJzogX3ZtLmFuaW1hdGluZ1xuXHQgICAgfSxcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICBtc1RyYW5zZm9ybTogKFwidHJhbnNsYXRlWChcIiArIF92bS50cmFuc2xhdGUgKyBcInB4KSBzY2FsZShcIiArIF92bS5zY2FsZSArIFwiKVwiKSxcblx0ICAgICAgd2Via2l0VHJhbnNmb3JtOiAoXCJ0cmFuc2xhdGVYKFwiICsgX3ZtLnRyYW5zbGF0ZSArIFwicHgpIHNjYWxlKFwiICsgX3ZtLnNjYWxlICsgXCIpXCIpLFxuXHQgICAgICB0cmFuc2Zvcm06IChcInRyYW5zbGF0ZVgoXCIgKyBfdm0udHJhbnNsYXRlICsgXCJweCkgc2NhbGUoXCIgKyBfdm0uc2NhbGUgKyBcIilcIilcblx0ICAgIH0pLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0uaGFuZGxlSXRlbUNsaWNrXG5cdCAgICB9XG5cdCAgfSwgWyhfdm0uJHBhcmVudC50eXBlID09PSAnY2FyZCcpID8gX2MoJ2RpdicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKCFfdm0uYWN0aXZlKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCIhYWN0aXZlXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2Fyb3VzZWxfX21hc2tcIlxuXHQgIH0pIDogX3ZtLl9lKCksIF92bS5fdChcImRlZmF1bHRcIildLCAyKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG4vKiAzNDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfY29sbGFwc2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0MSk7XG5cblx0dmFyIF9jb2xsYXBzZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb2xsYXBzZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfY29sbGFwc2UyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9jb2xsYXBzZTIuZGVmYXVsdC5uYW1lLCBfY29sbGFwc2UyLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9jb2xsYXBzZTIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDM0MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzNDIpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzNDMpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAzNDIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxDb2xsYXBzZScsXG5cblx0ICBjb21wb25lbnROYW1lOiAnRWxDb2xsYXBzZScsXG5cblx0ICBwcm9wczoge1xuXHQgICAgYWNjb3JkaW9uOiBCb29sZWFuLFxuXHQgICAgdmFsdWU6IHtcblx0ICAgICAgdHlwZTogW0FycmF5LCBTdHJpbmcsIE51bWJlcl0sXG5cdCAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuXHQgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgYWN0aXZlTmFtZXM6IFtdLmNvbmNhdCh0aGlzLnZhbHVlKVxuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICB3YXRjaDoge1xuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKF92YWx1ZSkge1xuXHQgICAgICB0aGlzLmFjdGl2ZU5hbWVzID0gW10uY29uY2F0KF92YWx1ZSk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIHNldEFjdGl2ZU5hbWVzOiBmdW5jdGlvbiBzZXRBY3RpdmVOYW1lcyhhY3RpdmVOYW1lcykge1xuXHQgICAgICBhY3RpdmVOYW1lcyA9IFtdLmNvbmNhdChhY3RpdmVOYW1lcyk7XG5cdCAgICAgIHZhciB2YWx1ZSA9IHRoaXMuYWNjb3JkaW9uID8gYWN0aXZlTmFtZXNbMF0gOiBhY3RpdmVOYW1lcztcblx0ICAgICAgdGhpcy5hY3RpdmVOYW1lcyA9IGFjdGl2ZU5hbWVzO1xuXHQgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbHVlKTtcblx0ICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUl0ZW1DbGljazogZnVuY3Rpb24gaGFuZGxlSXRlbUNsaWNrKGl0ZW0pIHtcblx0ICAgICAgaWYgKHRoaXMuYWNjb3JkaW9uKSB7XG5cdCAgICAgICAgdGhpcy5zZXRBY3RpdmVOYW1lcygodGhpcy5hY3RpdmVOYW1lc1swXSB8fCB0aGlzLmFjdGl2ZU5hbWVzWzBdID09PSAwKSAmJiB0aGlzLmFjdGl2ZU5hbWVzWzBdID09PSBpdGVtLm5hbWUgPyAnJyA6IGl0ZW0ubmFtZSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdmFyIGFjdGl2ZU5hbWVzID0gdGhpcy5hY3RpdmVOYW1lcy5zbGljZSgwKTtcblx0ICAgICAgICB2YXIgaW5kZXggPSBhY3RpdmVOYW1lcy5pbmRleE9mKGl0ZW0ubmFtZSk7XG5cblx0ICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuXHQgICAgICAgICAgYWN0aXZlTmFtZXMuc3BsaWNlKGluZGV4LCAxKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgYWN0aXZlTmFtZXMucHVzaChpdGVtLm5hbWUpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnNldEFjdGl2ZU5hbWVzKGFjdGl2ZU5hbWVzKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgdGhpcy4kb24oJ2l0ZW0tY2xpY2snLCB0aGlzLmhhbmRsZUl0ZW1DbGljayk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuLyogMzQzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sbGFwc2VcIlxuXHQgIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMzQ0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2NvbGxhcHNlSXRlbSA9IF9fd2VicGFja19yZXF1aXJlX18oMzQ1KTtcblxuXHR2YXIgX2NvbGxhcHNlSXRlbTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb2xsYXBzZUl0ZW0pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X2NvbGxhcHNlSXRlbTIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX2NvbGxhcHNlSXRlbTIuZGVmYXVsdC5uYW1lLCBfY29sbGFwc2VJdGVtMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfY29sbGFwc2VJdGVtMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuLyogMzQ1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0NiksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0NyksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDM0NiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9jb2xsYXBzZVRyYW5zaXRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5KTtcblxuXHR2YXIgX2NvbGxhcHNlVHJhbnNpdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jb2xsYXBzZVRyYW5zaXRpb24pO1xuXG5cdHZhciBfZW1pdHRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xuXG5cdHZhciBfZW1pdHRlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbWl0dGVyKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbENvbGxhcHNlSXRlbScsXG5cblx0ICBjb21wb25lbnROYW1lOiAnRWxDb2xsYXBzZUl0ZW0nLFxuXG5cdCAgbWl4aW5zOiBbX2VtaXR0ZXIyLmRlZmF1bHRdLFxuXG5cdCAgY29tcG9uZW50czogeyBFbENvbGxhcHNlVHJhbnNpdGlvbjogX2NvbGxhcHNlVHJhbnNpdGlvbjIuZGVmYXVsdCB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIGNvbnRlbnRXcmFwU3R5bGU6IHtcblx0ICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcblx0ICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG5cdCAgICAgIH0sXG5cdCAgICAgIGNvbnRlbnRIZWlnaHQ6IDBcblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIHRpdGxlOiBTdHJpbmcsXG5cdCAgICBuYW1lOiB7XG5cdCAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG5cdCAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLl91aWQ7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIGlzQWN0aXZlOiBmdW5jdGlvbiBpc0FjdGl2ZSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudC5hY3RpdmVOYW1lcy5pbmRleE9mKHRoaXMubmFtZSkgPiAtMTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgICdpc0FjdGl2ZSc6IGZ1bmN0aW9uIGlzQWN0aXZlKHZhbHVlKSB7fVxuXHQgIH0sXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBoYW5kbGVIZWFkZXJDbGljazogZnVuY3Rpb24gaGFuZGxlSGVhZGVyQ2xpY2soKSB7XG5cdCAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsQ29sbGFwc2UnLCAnaXRlbS1jbGljaycsIHRoaXMpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge31cblx0fTtcblxuLyoqKi8gfSxcbi8qIDM0NyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbGxhcHNlLWl0ZW1cIixcblx0ICAgIGNsYXNzOiB7XG5cdCAgICAgICdpcy1hY3RpdmUnOiBfdm0uaXNBY3RpdmVcblx0ICAgIH1cblx0ICB9LCBbX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbGxhcHNlLWl0ZW1fX2hlYWRlclwiLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0uaGFuZGxlSGVhZGVyQ2xpY2tcblx0ICAgIH1cblx0ICB9LCBbX2MoJ2knLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xsYXBzZS1pdGVtX19oZWFkZXJfX2Fycm93IGVsLWljb24tYXJyb3ctcmlnaHRcIlxuXHQgIH0pLCBfdm0uX3QoXCJ0aXRsZVwiLCBbX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKV0pXSwgMiksIF9jKCdlbC1jb2xsYXBzZS10cmFuc2l0aW9uJywgW19jKCdkaXYnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0uaXNBY3RpdmUpLFxuXHQgICAgICBleHByZXNzaW9uOiBcImlzQWN0aXZlXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sbGFwc2UtaXRlbV9fd3JhcFwiXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xsYXBzZS1pdGVtX19jb250ZW50XCJcblx0ICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXSldKV0sIDEpXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDM0OCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9tYWluID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNDkpO1xuXG5cdHZhciBfbWFpbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tYWluKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9tYWluMi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfbWFpbjIuZGVmYXVsdC5uYW1lLCBfbWFpbjIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX21haW4yLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAzNDkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzUwKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzU1KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMzUwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3Z1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTMzKTtcblxuXHR2YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG5cdHZhciBfbWVudSA9IF9fd2VicGFja19yZXF1aXJlX18oMzUxKTtcblxuXHR2YXIgX21lbnUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWVudSk7XG5cblx0dmFyIF9pbnB1dCA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xuXG5cdHZhciBfaW5wdXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5wdXQpO1xuXG5cdHZhciBfdnVlUG9wcGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XG5cblx0dmFyIF92dWVQb3BwZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlUG9wcGVyKTtcblxuXHR2YXIgX2NsaWNrb3V0c2lkZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xuXG5cdHZhciBfY2xpY2tvdXRzaWRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsaWNrb3V0c2lkZSk7XG5cblx0dmFyIF9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cblx0dmFyIF9lbWl0dGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VtaXR0ZXIpO1xuXG5cdHZhciBfbG9jYWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5cblx0dmFyIF9sb2NhbGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9jYWxlKTtcblxuXHR2YXIgX2xvY2FsZTMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMSk7XG5cblx0dmFyIF9kZWJvdW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xuXG5cdHZhciBfZGVib3VuY2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVib3VuY2UpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0dmFyIHBvcHBlck1peGluID0ge1xuXHQgIHByb3BzOiB7XG5cdCAgICBwbGFjZW1lbnQ6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnYm90dG9tLXN0YXJ0J1xuXHQgICAgfSxcblx0ICAgIGFwcGVuZFRvQm9keTogX3Z1ZVBvcHBlcjIuZGVmYXVsdC5wcm9wcy5hcHBlbmRUb0JvZHksXG5cdCAgICBvZmZzZXQ6IF92dWVQb3BwZXIyLmRlZmF1bHQucHJvcHMub2Zmc2V0LFxuXHQgICAgYm91bmRhcmllc1BhZGRpbmc6IF92dWVQb3BwZXIyLmRlZmF1bHQucHJvcHMuYm91bmRhcmllc1BhZGRpbmcsXG5cdCAgICBwb3BwZXJPcHRpb25zOiBfdnVlUG9wcGVyMi5kZWZhdWx0LnByb3BzLnBvcHBlck9wdGlvbnNcblx0ICB9LFxuXHQgIG1ldGhvZHM6IF92dWVQb3BwZXIyLmRlZmF1bHQubWV0aG9kcyxcblx0ICBkYXRhOiBfdnVlUG9wcGVyMi5kZWZhdWx0LmRhdGEsXG5cdCAgYmVmb3JlRGVzdHJveTogX3Z1ZVBvcHBlcjIuZGVmYXVsdC5iZWZvcmVEZXN0cm95XG5cdH07IC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbENhc2NhZGVyJyxcblxuXHQgIGRpcmVjdGl2ZXM6IHsgQ2xpY2tvdXRzaWRlOiBfY2xpY2tvdXRzaWRlMi5kZWZhdWx0IH0sXG5cblx0ICBtaXhpbnM6IFtwb3BwZXJNaXhpbiwgX2VtaXR0ZXIyLmRlZmF1bHQsIF9sb2NhbGUyLmRlZmF1bHRdLFxuXG5cdCAgY29tcG9uZW50czoge1xuXHQgICAgRWxJbnB1dDogX2lucHV0Mi5kZWZhdWx0XG5cdCAgfSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBvcHRpb25zOiB7XG5cdCAgICAgIHR5cGU6IEFycmF5LFxuXHQgICAgICByZXF1aXJlZDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIHByb3BzOiB7XG5cdCAgICAgIHR5cGU6IE9iamVjdCxcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgIGNoaWxkcmVuOiAnY2hpbGRyZW4nLFxuXHQgICAgICAgICAgbGFiZWw6ICdsYWJlbCcsXG5cdCAgICAgICAgICB2YWx1ZTogJ3ZhbHVlJyxcblx0ICAgICAgICAgIGRpc2FibGVkOiAnZGlzYWJsZWQnXG5cdCAgICAgICAgfTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHZhbHVlOiB7XG5cdCAgICAgIHR5cGU6IEFycmF5LFxuXHQgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcblx0ICAgICAgICByZXR1cm4gW107XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBwbGFjZWhvbGRlcjoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuXHQgICAgICAgIHJldHVybiAoMCwgX2xvY2FsZTMudCkoJ2VsLmNhc2NhZGVyLnBsYWNlaG9sZGVyJyk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBkaXNhYmxlZDogQm9vbGVhbixcblx0ICAgIGNsZWFyYWJsZToge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiBmYWxzZVxuXHQgICAgfSxcblx0ICAgIGNoYW5nZU9uU2VsZWN0OiBCb29sZWFuLFxuXHQgICAgcG9wcGVyQ2xhc3M6IFN0cmluZyxcblx0ICAgIGV4cGFuZFRyaWdnZXI6IHtcblx0ICAgICAgdHlwZTogU3RyaW5nLFxuXHQgICAgICBkZWZhdWx0OiAnY2xpY2snXG5cdCAgICB9LFxuXHQgICAgZmlsdGVyYWJsZTogQm9vbGVhbixcblx0ICAgIHNpemU6IFN0cmluZyxcblx0ICAgIHNob3dBbGxMZXZlbHM6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhbixcblx0ICAgICAgZGVmYXVsdDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIGRlYm91bmNlOiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogMzAwXG5cdCAgICB9LFxuXHQgICAgYmVmb3JlRmlsdGVyOiB7XG5cdCAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuXHQgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge307XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52YWx1ZSB8fCBbXSxcblx0ICAgICAgbWVudTogbnVsbCxcblx0ICAgICAgZGVib3VuY2VkSW5wdXRDaGFuZ2U6IGZ1bmN0aW9uIGRlYm91bmNlZElucHV0Q2hhbmdlKCkge30sXG5cblx0ICAgICAgbWVudVZpc2libGU6IGZhbHNlLFxuXHQgICAgICBpbnB1dEhvdmVyOiBmYWxzZSxcblx0ICAgICAgaW5wdXRWYWx1ZTogJycsXG5cdCAgICAgIGZsYXRPcHRpb25zOiBudWxsXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBsYWJlbEtleTogZnVuY3Rpb24gbGFiZWxLZXkoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnByb3BzLmxhYmVsIHx8ICdsYWJlbCc7XG5cdCAgICB9LFxuXHQgICAgdmFsdWVLZXk6IGZ1bmN0aW9uIHZhbHVlS2V5KCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZSB8fCAndmFsdWUnO1xuXHQgICAgfSxcblx0ICAgIGNoaWxkcmVuS2V5OiBmdW5jdGlvbiBjaGlsZHJlbktleSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW4gfHwgJ2NoaWxkcmVuJztcblx0ICAgIH0sXG5cdCAgICBjdXJyZW50TGFiZWxzOiBmdW5jdGlvbiBjdXJyZW50TGFiZWxzKCkge1xuXHQgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXHQgICAgICB2YXIgbGFiZWxzID0gW107XG5cdCAgICAgIHRoaXMuY3VycmVudFZhbHVlLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgICAgdmFyIHRhcmdldE9wdGlvbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuXHQgICAgICAgICAgcmV0dXJuIG9wdGlvbltfdGhpcy52YWx1ZUtleV0gPT09IHZhbHVlO1xuXHQgICAgICAgIH0pWzBdO1xuXHQgICAgICAgIGlmICh0YXJnZXRPcHRpb24pIHtcblx0ICAgICAgICAgIGxhYmVscy5wdXNoKHRhcmdldE9wdGlvbltfdGhpcy5sYWJlbEtleV0pO1xuXHQgICAgICAgICAgb3B0aW9ucyA9IHRhcmdldE9wdGlvbltfdGhpcy5jaGlsZHJlbktleV07XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgICAgcmV0dXJuIGxhYmVscztcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgIG1lbnVWaXNpYmxlOiBmdW5jdGlvbiBtZW51VmlzaWJsZSh2YWx1ZSkge1xuXHQgICAgICB2YWx1ZSA/IHRoaXMuc2hvd01lbnUoKSA6IHRoaXMuaGlkZU1lbnUoKTtcblx0ICAgIH0sXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoX3ZhbHVlKSB7XG5cdCAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gX3ZhbHVlO1xuXHQgICAgfSxcblx0ICAgIGN1cnJlbnRWYWx1ZTogZnVuY3Rpb24gY3VycmVudFZhbHVlKHZhbHVlKSB7XG5cdCAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5jaGFuZ2UnLCBbdmFsdWVdKTtcblx0ICAgIH0sXG5cblx0ICAgIG9wdGlvbnM6IHtcblx0ICAgICAgZGVlcDogdHJ1ZSxcblx0ICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWx1ZSkge1xuXHQgICAgICAgIGlmICghdGhpcy5tZW51KSB7XG5cdCAgICAgICAgICB0aGlzLmluaXRNZW51KCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuZmxhdE9wdGlvbnMgPSB0aGlzLmZsYXR0ZW5PcHRpb25zKHRoaXMub3B0aW9ucyk7XG5cdCAgICAgICAgdGhpcy5tZW51Lm9wdGlvbnMgPSB2YWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBpbml0TWVudTogZnVuY3Rpb24gaW5pdE1lbnUoKSB7XG5cdCAgICAgIHRoaXMubWVudSA9IG5ldyBfdnVlMi5kZWZhdWx0KF9tZW51Mi5kZWZhdWx0KS4kbW91bnQoKTtcblx0ICAgICAgdGhpcy5tZW51Lm9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cdCAgICAgIHRoaXMubWVudS5wcm9wcyA9IHRoaXMucHJvcHM7XG5cdCAgICAgIHRoaXMubWVudS5leHBhbmRUcmlnZ2VyID0gdGhpcy5leHBhbmRUcmlnZ2VyO1xuXHQgICAgICB0aGlzLm1lbnUuY2hhbmdlT25TZWxlY3QgPSB0aGlzLmNoYW5nZU9uU2VsZWN0O1xuXHQgICAgICB0aGlzLm1lbnUucG9wcGVyQ2xhc3MgPSB0aGlzLnBvcHBlckNsYXNzO1xuXHQgICAgICB0aGlzLnBvcHBlckVsbSA9IHRoaXMubWVudS4kZWw7XG5cdCAgICAgIHRoaXMubWVudS4kb24oJ3BpY2snLCB0aGlzLmhhbmRsZVBpY2spO1xuXHQgICAgICB0aGlzLm1lbnUuJG9uKCdhY3RpdmVJdGVtQ2hhbmdlJywgdGhpcy5oYW5kbGVBY3RpdmVJdGVtQ2hhbmdlKTtcblx0ICAgICAgdGhpcy5tZW51LiRvbignbWVudUxlYXZlJywgdGhpcy5kb0Rlc3Ryb3kpO1xuXHQgICAgfSxcblx0ICAgIHNob3dNZW51OiBmdW5jdGlvbiBzaG93TWVudSgpIHtcblx0ICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cblx0ICAgICAgaWYgKCF0aGlzLm1lbnUpIHtcblx0ICAgICAgICB0aGlzLmluaXRNZW51KCk7XG5cdCAgICAgIH1cblxuXHQgICAgICB0aGlzLm1lbnUudmFsdWUgPSB0aGlzLmN1cnJlbnRWYWx1ZS5zbGljZSgwKTtcblx0ICAgICAgdGhpcy5tZW51LnZpc2libGUgPSB0cnVlO1xuXHQgICAgICB0aGlzLm1lbnUub3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblx0ICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcblx0ICAgICAgICBfdGhpczIudXBkYXRlUG9wcGVyKCk7XG5cdCAgICAgICAgX3RoaXMyLm1lbnUuaW5wdXRXaWR0aCA9IF90aGlzMi4kcmVmcy5pbnB1dC4kZWwub2Zmc2V0V2lkdGggLSAyO1xuXHQgICAgICB9KTtcblx0ICAgIH0sXG5cdCAgICBoaWRlTWVudTogZnVuY3Rpb24gaGlkZU1lbnUoKSB7XG5cdCAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICcnO1xuXHQgICAgICB0aGlzLm1lbnUudmlzaWJsZSA9IGZhbHNlO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUFjdGl2ZUl0ZW1DaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUFjdGl2ZUl0ZW1DaGFuZ2UodmFsdWUpIHtcblx0ICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cblx0ICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcblx0ICAgICAgICBfdGhpczMudXBkYXRlUG9wcGVyKCk7XG5cdCAgICAgIH0pO1xuXHQgICAgICB0aGlzLiRlbWl0KCdhY3RpdmUtaXRlbS1jaGFuZ2UnLCB2YWx1ZSk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlUGljazogZnVuY3Rpb24gaGFuZGxlUGljayh2YWx1ZSkge1xuXHQgICAgICB2YXIgY2xvc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG5cblx0ICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKTtcblxuXHQgICAgICBpZiAoY2xvc2UpIHtcblx0ICAgICAgICB0aGlzLm1lbnVWaXNpYmxlID0gZmFsc2U7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVQb3BwZXIpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlSW5wdXRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUlucHV0Q2hhbmdlKHZhbHVlKSB7XG5cdCAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG5cdCAgICAgIGlmICghdGhpcy5tZW51VmlzaWJsZSkgcmV0dXJuO1xuXHQgICAgICB2YXIgZmxhdE9wdGlvbnMgPSB0aGlzLmZsYXRPcHRpb25zO1xuXG5cdCAgICAgIGlmICghdmFsdWUpIHtcblx0ICAgICAgICB0aGlzLm1lbnUub3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblx0ICAgICAgICB0aGlzLiRuZXh0VGljayh0aGlzLnVwZGF0ZVBvcHBlcik7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cblx0ICAgICAgdmFyIGZpbHRlcmVkRmxhdE9wdGlvbnMgPSBmbGF0T3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbnNTdGFjaykge1xuXHQgICAgICAgIHJldHVybiBvcHRpb25zU3RhY2suc29tZShmdW5jdGlvbiAob3B0aW9uKSB7XG5cdCAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh2YWx1ZSwgJ2knKS50ZXN0KG9wdGlvbltfdGhpczQubGFiZWxLZXldKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfSk7XG5cblx0ICAgICAgaWYgKGZpbHRlcmVkRmxhdE9wdGlvbnMubGVuZ3RoID4gMCkge1xuXHQgICAgICAgIGZpbHRlcmVkRmxhdE9wdGlvbnMgPSBmaWx0ZXJlZEZsYXRPcHRpb25zLm1hcChmdW5jdGlvbiAob3B0aW9uU3RhY2spIHtcblx0ICAgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIF9fSVNfX0ZMQVRfX09QVElPTlM6IHRydWUsXG5cdCAgICAgICAgICAgIHZhbHVlOiBvcHRpb25TdGFjay5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gaXRlbVtfdGhpczQudmFsdWVLZXldO1xuXHQgICAgICAgICAgICB9KSxcblx0ICAgICAgICAgICAgbGFiZWw6IF90aGlzNC5yZW5kZXJGaWx0ZXJlZE9wdGlvbkxhYmVsKHZhbHVlLCBvcHRpb25TdGFjaylcblx0ICAgICAgICAgIH07XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgZmlsdGVyZWRGbGF0T3B0aW9ucyA9IFt7XG5cdCAgICAgICAgICBfX0lTX19GTEFUX19PUFRJT05TOiB0cnVlLFxuXHQgICAgICAgICAgbGFiZWw6IHRoaXMudCgnZWwuY2FzY2FkZXIubm9NYXRjaCcpLFxuXHQgICAgICAgICAgdmFsdWU6ICcnLFxuXHQgICAgICAgICAgZGlzYWJsZWQ6IHRydWVcblx0ICAgICAgICB9XTtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLm1lbnUub3B0aW9ucyA9IGZpbHRlcmVkRmxhdE9wdGlvbnM7XG5cdCAgICAgIHRoaXMuJG5leHRUaWNrKHRoaXMudXBkYXRlUG9wcGVyKTtcblx0ICAgIH0sXG5cdCAgICByZW5kZXJGaWx0ZXJlZE9wdGlvbkxhYmVsOiBmdW5jdGlvbiByZW5kZXJGaWx0ZXJlZE9wdGlvbkxhYmVsKGlucHV0VmFsdWUsIG9wdGlvbnNTdGFjaykge1xuXHQgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuXHQgICAgICByZXR1cm4gb3B0aW9uc1N0YWNrLm1hcChmdW5jdGlvbiAob3B0aW9uLCBpbmRleCkge1xuXHQgICAgICAgIHZhciBsYWJlbCA9IG9wdGlvbltfdGhpczUubGFiZWxLZXldO1xuXHQgICAgICAgIHZhciBrZXl3b3JkSW5kZXggPSBsYWJlbC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoaW5wdXRWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcblx0ICAgICAgICB2YXIgbGFiZWxQYXJ0ID0gbGFiZWwuc2xpY2Uoa2V5d29yZEluZGV4LCBpbnB1dFZhbHVlLmxlbmd0aCArIGtleXdvcmRJbmRleCk7XG5cdCAgICAgICAgdmFyIG5vZGUgPSBrZXl3b3JkSW5kZXggPiAtMSA/IF90aGlzNS5oaWdobGlnaHRLZXl3b3JkKGxhYmVsLCBsYWJlbFBhcnQpIDogbGFiZWw7XG5cdCAgICAgICAgcmV0dXJuIGluZGV4ID09PSAwID8gbm9kZSA6IFsnIC8gJywgbm9kZV07XG5cdCAgICAgIH0pO1xuXHQgICAgfSxcblx0ICAgIGhpZ2hsaWdodEtleXdvcmQ6IGZ1bmN0aW9uIGhpZ2hsaWdodEtleXdvcmQobGFiZWwsIGtleXdvcmQpIHtcblx0ICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cblx0ICAgICAgdmFyIGggPSB0aGlzLl9jO1xuXHQgICAgICByZXR1cm4gbGFiZWwuc3BsaXQoa2V5d29yZCkubWFwKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuXHQgICAgICAgIHJldHVybiBpbmRleCA9PT0gMCA/IG5vZGUgOiBbaCgnc3BhbicsIHsgY2xhc3M6IHsgJ2VsLWNhc2NhZGVyLW1lbnVfX2l0ZW1fX2tleXdvcmQnOiB0cnVlIH0gfSwgW190aGlzNi5fdihrZXl3b3JkKV0pLCBub2RlXTtcblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgZmxhdHRlbk9wdGlvbnM6IGZ1bmN0aW9uIGZsYXR0ZW5PcHRpb25zKG9wdGlvbnMpIHtcblx0ICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cblx0ICAgICAgdmFyIGFuY2VzdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTtcblxuXHQgICAgICB2YXIgZmxhdE9wdGlvbnMgPSBbXTtcblx0ICAgICAgb3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcblx0ICAgICAgICB2YXIgb3B0aW9uc1N0YWNrID0gYW5jZXN0b3IuY29uY2F0KG9wdGlvbik7XG5cdCAgICAgICAgaWYgKCFvcHRpb25bX3RoaXM3LmNoaWxkcmVuS2V5XSkge1xuXHQgICAgICAgICAgZmxhdE9wdGlvbnMucHVzaChvcHRpb25zU3RhY2spO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBpZiAoX3RoaXM3LmNoYW5nZU9uU2VsZWN0KSB7XG5cdCAgICAgICAgICAgIGZsYXRPcHRpb25zLnB1c2gob3B0aW9uc1N0YWNrKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIGZsYXRPcHRpb25zID0gZmxhdE9wdGlvbnMuY29uY2F0KF90aGlzNy5mbGF0dGVuT3B0aW9ucyhvcHRpb25bX3RoaXM3LmNoaWxkcmVuS2V5XSwgb3B0aW9uc1N0YWNrKSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgICAgcmV0dXJuIGZsYXRPcHRpb25zO1xuXHQgICAgfSxcblx0ICAgIGNsZWFyVmFsdWU6IGZ1bmN0aW9uIGNsZWFyVmFsdWUoZXYpIHtcblx0ICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgIHRoaXMuaGFuZGxlUGljayhbXSwgdHJ1ZSk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQ2xpY2tvdXRzaWRlOiBmdW5jdGlvbiBoYW5kbGVDbGlja291dHNpZGUoKSB7XG5cdCAgICAgIHRoaXMubWVudVZpc2libGUgPSBmYWxzZTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soKSB7XG5cdCAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG5cdCAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUpIHtcblx0ICAgICAgICB0aGlzLm1lbnVWaXNpYmxlID0gdHJ1ZTtcblx0ICAgICAgICB0aGlzLiRyZWZzLmlucHV0LiRyZWZzLmlucHV0LmZvY3VzKCk7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMubWVudVZpc2libGUgPSAhdGhpcy5tZW51VmlzaWJsZTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcblx0ICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG5cdCAgICB0aGlzLmRlYm91bmNlZElucHV0Q2hhbmdlID0gKDAsIF9kZWJvdW5jZTIuZGVmYXVsdCkodGhpcy5kZWJvdW5jZSwgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgIHZhciBiZWZvcmUgPSBfdGhpczguYmVmb3JlRmlsdGVyKHZhbHVlKTtcblxuXHQgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aGVuKSB7XG5cdCAgICAgICAgX3RoaXM4Lm1lbnUub3B0aW9ucyA9IFt7XG5cdCAgICAgICAgICBfX0lTX19GTEFUX19PUFRJT05TOiB0cnVlLFxuXHQgICAgICAgICAgbGFiZWw6IF90aGlzOC50KCdlbC5jYXNjYWRlci5sb2FkaW5nJyksXG5cdCAgICAgICAgICB2YWx1ZTogJycsXG5cdCAgICAgICAgICBkaXNhYmxlZDogdHJ1ZVxuXHQgICAgICAgIH1dO1xuXHQgICAgICAgIGJlZm9yZS50aGVuKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIF90aGlzOC4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICBfdGhpczguaGFuZGxlSW5wdXRDaGFuZ2UodmFsdWUpO1xuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0gZWxzZSBpZiAoYmVmb3JlICE9PSBmYWxzZSkge1xuXHQgICAgICAgIF90aGlzOC4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgX3RoaXM4LmhhbmRsZUlucHV0Q2hhbmdlKHZhbHVlKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cdCAgfSxcblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdGhpcy5mbGF0T3B0aW9ucyA9IHRoaXMuZmxhdHRlbk9wdGlvbnModGhpcy5vcHRpb25zKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzNTEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzUyKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIG51bGwsXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDM1MiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9iYWJlbEhlbHBlclZ1ZUpzeE1lcmdlUHJvcHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1Myk7XG5cblx0dmFyIF9iYWJlbEhlbHBlclZ1ZUpzeE1lcmdlUHJvcHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYmFiZWxIZWxwZXJWdWVKc3hNZXJnZVByb3BzKTtcblxuXHR2YXIgX3NoYXJlZCA9IF9fd2VicGFja19yZXF1aXJlX18oMzU0KTtcblxuXHR2YXIgX3Njcm9sbEludG9WaWV3ID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTIpO1xuXG5cdHZhciBfc2Nyb2xsSW50b1ZpZXcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfc2Nyb2xsSW50b1ZpZXcpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0dmFyIGNvcHlBcnJheSA9IGZ1bmN0aW9uIGNvcHlBcnJheShhcnIsIHByb3BzKSB7XG5cdCAgaWYgKCFhcnIgfHwgIUFycmF5LmlzQXJyYXkoYXJyKSB8fCAhcHJvcHMpIHJldHVybiBhcnI7XG5cdCAgdmFyIHJlc3VsdCA9IFtdO1xuXHQgIHZhciBjb25maWd1cmFibGVQcm9wcyA9IFsnX19JU19fRkxBVF9fT1BUSU9OUycsICdsYWJlbCcsICd2YWx1ZScsICdkaXNhYmxlZCddO1xuXHQgIHZhciBjaGlsZHJlblByb3AgPSBwcm9wcy5jaGlsZHJlbiB8fCAnY2hpbGRyZW4nO1xuXHQgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICB2YXIgaXRlbUNvcHkgPSB7fTtcblx0ICAgIGNvbmZpZ3VyYWJsZVByb3BzLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcblx0ICAgICAgdmFyIG5hbWUgPSBwcm9wc1twcm9wXTtcblx0ICAgICAgdmFyIHZhbHVlID0gaXRlbVtuYW1lXTtcblx0ICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICBuYW1lID0gcHJvcDtcblx0ICAgICAgICB2YWx1ZSA9IGl0ZW1bbmFtZV07XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIGl0ZW1Db3B5W25hbWVdID0gdmFsdWU7XG5cdCAgICB9KTtcblx0ICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1bY2hpbGRyZW5Qcm9wXSkpIHtcblx0ICAgICAgaXRlbUNvcHlbY2hpbGRyZW5Qcm9wXSA9IGNvcHlBcnJheShpdGVtW2NoaWxkcmVuUHJvcF0sIHByb3BzKTtcblx0ICAgIH1cblx0ICAgIHJlc3VsdC5wdXNoKGl0ZW1Db3B5KTtcblx0ICB9KTtcblx0ICByZXR1cm4gcmVzdWx0O1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxDYXNjYWRlck1lbnUnLFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIGlucHV0V2lkdGg6IDAsXG5cdCAgICAgIG9wdGlvbnM6IFtdLFxuXHQgICAgICBwcm9wczoge30sXG5cdCAgICAgIHZpc2libGU6IGZhbHNlLFxuXHQgICAgICBhY3RpdmVWYWx1ZTogW10sXG5cdCAgICAgIHZhbHVlOiBbXSxcblx0ICAgICAgZXhwYW5kVHJpZ2dlcjogJ2NsaWNrJyxcblx0ICAgICAgY2hhbmdlT25TZWxlY3Q6IGZhbHNlLFxuXHQgICAgICBwb3BwZXJDbGFzczogJydcblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgIHZpc2libGU6IGZ1bmN0aW9uIHZpc2libGUodmFsdWUpIHtcblx0ICAgICAgaWYgKHZhbHVlKSB7XG5cdCAgICAgICAgdGhpcy5hY3RpdmVWYWx1ZSA9IHRoaXMudmFsdWU7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cblx0ICAgIHZhbHVlOiB7XG5cdCAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcblx0ICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWx1ZSkge1xuXHQgICAgICAgIHRoaXMuYWN0aXZlVmFsdWUgPSB2YWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgYWN0aXZlT3B0aW9uczoge1xuXHQgICAgICBjYWNoZTogZmFsc2UsXG5cdCAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuXHQgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgICB2YXIgYWN0aXZlVmFsdWUgPSB0aGlzLmFjdGl2ZVZhbHVlO1xuXHQgICAgICAgIHZhciBjb25maWd1cmFibGVQcm9wcyA9IFsnbGFiZWwnLCAndmFsdWUnLCAnY2hpbGRyZW4nLCAnZGlzYWJsZWQnXTtcblxuXHQgICAgICAgIHZhciBmb3JtYXRPcHRpb25zID0gZnVuY3Rpb24gZm9ybWF0T3B0aW9ucyhvcHRpb25zKSB7XG5cdCAgICAgICAgICBvcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbikge1xuXHQgICAgICAgICAgICBpZiAob3B0aW9uLl9fSVNfX0ZMQVRfX09QVElPTlMpIHJldHVybjtcblx0ICAgICAgICAgICAgY29uZmlndXJhYmxlUHJvcHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuXHQgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IG9wdGlvbltfdGhpcy5wcm9wc1twcm9wXSB8fCBwcm9wXTtcblx0ICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgb3B0aW9uW3Byb3BdID0gdmFsdWU7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24uY2hpbGRyZW4pKSB7XG5cdCAgICAgICAgICAgICAgZm9ybWF0T3B0aW9ucyhvcHRpb24uY2hpbGRyZW4pO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICB9O1xuXG5cdCAgICAgICAgdmFyIGxvYWRBY3RpdmVPcHRpb25zID0gZnVuY3Rpb24gbG9hZEFjdGl2ZU9wdGlvbnMob3B0aW9ucykge1xuXHQgICAgICAgICAgdmFyIGFjdGl2ZU9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdO1xuXG5cdCAgICAgICAgICB2YXIgbGV2ZWwgPSBhY3RpdmVPcHRpb25zLmxlbmd0aDtcblx0ICAgICAgICAgIGFjdGl2ZU9wdGlvbnNbbGV2ZWxdID0gb3B0aW9ucztcblx0ICAgICAgICAgIHZhciBhY3RpdmUgPSBhY3RpdmVWYWx1ZVtsZXZlbF07XG5cdCAgICAgICAgICBpZiAoKDAsIF9zaGFyZWQuaXNEZWYpKGFjdGl2ZSkpIHtcblx0ICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uIChvcHRpb24pIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uLnZhbHVlID09PSBhY3RpdmU7XG5cdCAgICAgICAgICAgIH0pWzBdO1xuXHQgICAgICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNoaWxkcmVuKSB7XG5cdCAgICAgICAgICAgICAgbG9hZEFjdGl2ZU9wdGlvbnMob3B0aW9ucy5jaGlsZHJlbiwgYWN0aXZlT3B0aW9ucyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH1cblx0ICAgICAgICAgIHJldHVybiBhY3RpdmVPcHRpb25zO1xuXHQgICAgICAgIH07XG5cblx0ICAgICAgICB2YXIgb3B0aW9uc0NvcHkgPSBjb3B5QXJyYXkodGhpcy5vcHRpb25zLCB0aGlzLnByb3BzKTtcblx0ICAgICAgICBmb3JtYXRPcHRpb25zKG9wdGlvbnNDb3B5KTtcblx0ICAgICAgICByZXR1cm4gbG9hZEFjdGl2ZU9wdGlvbnMob3B0aW9uc0NvcHkpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIHNlbGVjdDogZnVuY3Rpb24gc2VsZWN0KGl0ZW0sIG1lbnVJbmRleCkge1xuXHQgICAgICBpZiAoaXRlbS5fX0lTX19GTEFUX19PUFRJT05TKSB7XG5cdCAgICAgICAgdGhpcy5hY3RpdmVWYWx1ZSA9IGl0ZW0udmFsdWU7XG5cdCAgICAgIH0gZWxzZSBpZiAobWVudUluZGV4KSB7XG5cdCAgICAgICAgdGhpcy5hY3RpdmVWYWx1ZS5zcGxpY2UobWVudUluZGV4LCB0aGlzLmFjdGl2ZVZhbHVlLmxlbmd0aCAtIDEsIGl0ZW0udmFsdWUpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuYWN0aXZlVmFsdWUgPSBbaXRlbS52YWx1ZV07XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy4kZW1pdCgncGljaycsIHRoaXMuYWN0aXZlVmFsdWUuc2xpY2UoKSk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlTWVudUxlYXZlOiBmdW5jdGlvbiBoYW5kbGVNZW51TGVhdmUoKSB7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ21lbnVMZWF2ZScpO1xuXHQgICAgfSxcblx0ICAgIGFjdGl2ZUl0ZW06IGZ1bmN0aW9uIGFjdGl2ZUl0ZW0oaXRlbSwgbWVudUluZGV4KSB7XG5cdCAgICAgIHZhciBsZW4gPSB0aGlzLmFjdGl2ZU9wdGlvbnMubGVuZ3RoO1xuXHQgICAgICB0aGlzLmFjdGl2ZVZhbHVlLnNwbGljZShtZW51SW5kZXgsIGxlbiwgaXRlbS52YWx1ZSk7XG5cdCAgICAgIHRoaXMuYWN0aXZlT3B0aW9ucy5zcGxpY2UobWVudUluZGV4ICsgMSwgbGVuLCBpdGVtLmNoaWxkcmVuKTtcblx0ICAgICAgaWYgKHRoaXMuY2hhbmdlT25TZWxlY3QpIHtcblx0ICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgdGhpcy5hY3RpdmVWYWx1ZS5zbGljZSgpLCBmYWxzZSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy4kZW1pdCgnYWN0aXZlSXRlbUNoYW5nZScsIHRoaXMuYWN0aXZlVmFsdWUpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgc2Nyb2xsTWVudTogZnVuY3Rpb24gc2Nyb2xsTWVudShtZW51KSB7XG5cdCAgICAgICgwLCBfc2Nyb2xsSW50b1ZpZXcyLmRlZmF1bHQpKG1lbnUsIG1lbnUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaXMtYWN0aXZlJylbMF0pO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZU1lbnVFbnRlcjogZnVuY3Rpb24gaGFuZGxlTWVudUVudGVyKCkge1xuXHQgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuXHQgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgcmV0dXJuIF90aGlzMi4kcmVmcy5tZW51cy5mb3JFYWNoKGZ1bmN0aW9uIChtZW51KSB7XG5cdCAgICAgICAgICByZXR1cm4gX3RoaXMyLnNjcm9sbE1lbnUobWVudSk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG5cdCAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuXHQgICAgdmFyIGFjdGl2ZVZhbHVlID0gdGhpcy5hY3RpdmVWYWx1ZSxcblx0ICAgICAgICBhY3RpdmVPcHRpb25zID0gdGhpcy5hY3RpdmVPcHRpb25zLFxuXHQgICAgICAgIHZpc2libGUgPSB0aGlzLnZpc2libGUsXG5cdCAgICAgICAgZXhwYW5kVHJpZ2dlciA9IHRoaXMuZXhwYW5kVHJpZ2dlcixcblx0ICAgICAgICBwb3BwZXJDbGFzcyA9IHRoaXMucG9wcGVyQ2xhc3M7XG5cblxuXHQgICAgdmFyIG1lbnVzID0gdGhpcy5fbChhY3RpdmVPcHRpb25zLCBmdW5jdGlvbiAobWVudSwgbWVudUluZGV4KSB7XG5cdCAgICAgIHZhciBpc0ZsYXQgPSBmYWxzZTtcblx0ICAgICAgdmFyIGl0ZW1zID0gX3RoaXMzLl9sKG1lbnUsIGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgdmFyIGV2ZW50cyA9IHtcblx0ICAgICAgICAgIG9uOiB7fVxuXHQgICAgICAgIH07XG5cblx0ICAgICAgICBpZiAoaXRlbS5fX0lTX19GTEFUX19PUFRJT05TKSBpc0ZsYXQgPSB0cnVlO1xuXG5cdCAgICAgICAgaWYgKCFpdGVtLmRpc2FibGVkKSB7XG5cdCAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuXHQgICAgICAgICAgICB2YXIgdHJpZ2dlckV2ZW50ID0ge1xuXHQgICAgICAgICAgICAgIGNsaWNrOiAnY2xpY2snLFxuXHQgICAgICAgICAgICAgIGhvdmVyOiAnbW91c2VlbnRlcidcblx0ICAgICAgICAgICAgfVtleHBhbmRUcmlnZ2VyXTtcblx0ICAgICAgICAgICAgZXZlbnRzLm9uW3RyaWdnZXJFdmVudF0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgX3RoaXMzLmFjdGl2ZUl0ZW0oaXRlbSwgbWVudUluZGV4KTtcblx0ICAgICAgICAgICAgICBfdGhpczMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIC8vIGFkanVzdCBzZWxmIGFuZCBuZXh0IGxldmVsXG5cdCAgICAgICAgICAgICAgICBfdGhpczMuc2Nyb2xsTWVudShfdGhpczMuJHJlZnMubWVudXNbbWVudUluZGV4XSk7XG5cdCAgICAgICAgICAgICAgICBfdGhpczMuc2Nyb2xsTWVudShfdGhpczMuJHJlZnMubWVudXNbbWVudUluZGV4ICsgMV0pO1xuXHQgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgZXZlbnRzLm9uLmNsaWNrID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgIF90aGlzMy5zZWxlY3QoaXRlbSwgbWVudUluZGV4KTtcblx0ICAgICAgICAgICAgICBfdGhpczMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczMuc2Nyb2xsTWVudShfdGhpczMuJHJlZnMubWVudXNbbWVudUluZGV4XSk7XG5cdCAgICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIGgoXG5cdCAgICAgICAgICAnbGknLFxuXHQgICAgICAgICAgKDAsIF9iYWJlbEhlbHBlclZ1ZUpzeE1lcmdlUHJvcHMyLmRlZmF1bHQpKFt7XG5cdCAgICAgICAgICAgICdjbGFzcyc6IHtcblx0ICAgICAgICAgICAgICAnZWwtY2FzY2FkZXItbWVudV9faXRlbSc6IHRydWUsXG5cdCAgICAgICAgICAgICAgJ2VsLWNhc2NhZGVyLW1lbnVfX2l0ZW0tLWV4dGVuc2libGUnOiBpdGVtLmNoaWxkcmVuLFxuXHQgICAgICAgICAgICAgICdpcy1hY3RpdmUnOiBpdGVtLnZhbHVlID09PSBhY3RpdmVWYWx1ZVttZW51SW5kZXhdLFxuXHQgICAgICAgICAgICAgICdpcy1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWRcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSwgZXZlbnRzXSksXG5cdCAgICAgICAgICBbaXRlbS5sYWJlbF1cblx0ICAgICAgICApO1xuXHQgICAgICB9KTtcblx0ICAgICAgdmFyIG1lbnVTdHlsZSA9IHt9O1xuXHQgICAgICBpZiAoaXNGbGF0KSB7XG5cdCAgICAgICAgbWVudVN0eWxlLm1pbldpZHRoID0gX3RoaXMzLmlucHV0V2lkdGggKyAncHgnO1xuXHQgICAgICB9XG5cblx0ICAgICAgcmV0dXJuIGgoXG5cdCAgICAgICAgJ3VsJyxcblx0ICAgICAgICB7XG5cdCAgICAgICAgICAnY2xhc3MnOiB7XG5cdCAgICAgICAgICAgICdlbC1jYXNjYWRlci1tZW51JzogdHJ1ZSxcblx0ICAgICAgICAgICAgJ2VsLWNhc2NhZGVyLW1lbnUtLWZsZXhpYmxlJzogaXNGbGF0XG5cdCAgICAgICAgICB9LFxuXHQgICAgICAgICAgc3R5bGU6IG1lbnVTdHlsZSxcblx0ICAgICAgICAgIHJlZkluRm9yOiB0cnVlLFxuXHQgICAgICAgICAgcmVmOiAnbWVudXMnIH0sXG5cdCAgICAgICAgW2l0ZW1zXVxuXHQgICAgICApO1xuXHQgICAgfSk7XG5cdCAgICByZXR1cm4gaChcblx0ICAgICAgJ3RyYW5zaXRpb24nLFxuXHQgICAgICB7XG5cdCAgICAgICAgYXR0cnM6IHsgbmFtZTogJ2VsLXpvb20taW4tdG9wJyB9LFxuXHQgICAgICAgIG9uOiB7XG5cdCAgICAgICAgICAnYmVmb3JlLWVudGVyJzogdGhpcy5oYW5kbGVNZW51RW50ZXIsXG5cdCAgICAgICAgICAnYWZ0ZXItbGVhdmUnOiB0aGlzLmhhbmRsZU1lbnVMZWF2ZVxuXHQgICAgICAgIH1cblx0ICAgICAgfSxcblx0ICAgICAgW2goXG5cdCAgICAgICAgJ2RpdicsXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgICAgICAgbmFtZTogJ3Nob3cnLFxuXHQgICAgICAgICAgICB2YWx1ZTogdmlzaWJsZVxuXHQgICAgICAgICAgfV0sXG5cblx0ICAgICAgICAgICdjbGFzcyc6IFsnZWwtY2FzY2FkZXItbWVudXMnLCBwb3BwZXJDbGFzc10sXG5cdCAgICAgICAgICByZWY6ICd3cmFwcGVyJ1xuXHQgICAgICAgIH0sXG5cdCAgICAgICAgW21lbnVzXVxuXHQgICAgICApXVxuXHQgICAgKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzNTMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImJhYmVsLWhlbHBlci12dWUtanN4LW1lcmdlLXByb3BzXCIpO1xuXG4vKioqLyB9LFxuLyogMzU0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9zaGFyZWRcIik7XG5cbi8qKiovIH0sXG4vKiAzNTUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdzcGFuJywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJjbGlja291dHNpZGVcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LWNsaWNrb3V0c2lkZVwiLFxuXHQgICAgICB2YWx1ZTogKF92bS5oYW5kbGVDbGlja291dHNpZGUpLFxuXHQgICAgICBleHByZXNzaW9uOiBcImhhbmRsZUNsaWNrb3V0c2lkZVwiXG5cdCAgICB9XSxcblx0ICAgIHJlZjogXCJyZWZlcmVuY2VcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNhc2NhZGVyXCIsXG5cdCAgICBjbGFzczogW3tcblx0ICAgICAgICAnaXMtb3BlbmVkJzogX3ZtLm1lbnVWaXNpYmxlLFxuXHQgICAgICAgICdpcy1kaXNhYmxlZCc6IF92bS5kaXNhYmxlZFxuXHQgICAgICB9LFxuXHQgICAgICBfdm0uc2l6ZSA/ICdlbC1jYXNjYWRlci0tJyArIF92bS5zaXplIDogJydcblx0ICAgIF0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5oYW5kbGVDbGljayxcblx0ICAgICAgXCJtb3VzZWVudGVyXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5pbnB1dEhvdmVyID0gdHJ1ZVxuXHQgICAgICB9LFxuXHQgICAgICBcIm1vdXNlbGVhdmVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmlucHV0SG92ZXIgPSBmYWxzZVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSwgW19jKCdlbC1pbnB1dCcsIHtcblx0ICAgIHJlZjogXCJpbnB1dFwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJyZWFkb25seVwiOiAhX3ZtLmZpbHRlcmFibGUsXG5cdCAgICAgIFwicGxhY2Vob2xkZXJcIjogX3ZtLmN1cnJlbnRMYWJlbHMubGVuZ3RoID8gdW5kZWZpbmVkIDogX3ZtLnBsYWNlaG9sZGVyLFxuXHQgICAgICBcInZhbGlkYXRlLWV2ZW50XCI6IGZhbHNlLFxuXHQgICAgICBcInNpemVcIjogX3ZtLnNpemUsXG5cdCAgICAgIFwiZGlzYWJsZWRcIjogX3ZtLmRpc2FibGVkXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjaGFuZ2VcIjogX3ZtLmRlYm91bmNlZElucHV0Q2hhbmdlXG5cdCAgICB9LFxuXHQgICAgbW9kZWw6IHtcblx0ICAgICAgdmFsdWU6IChfdm0uaW5wdXRWYWx1ZSksXG5cdCAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcblx0ICAgICAgICBfdm0uaW5wdXRWYWx1ZSA9ICQkdlxuXHQgICAgICB9LFxuXHQgICAgICBleHByZXNzaW9uOiBcImlucHV0VmFsdWVcIlxuXHQgICAgfVxuXHQgIH0sIFtfYygndGVtcGxhdGUnLCB7XG5cdCAgICBzbG90OiBcImljb25cIlxuXHQgIH0sIFsoX3ZtLmNsZWFyYWJsZSAmJiBfdm0uaW5wdXRIb3ZlciAmJiBfdm0uY3VycmVudExhYmVscy5sZW5ndGgpID8gX2MoJ2knLCB7XG5cdCAgICBrZXk6IFwiMVwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2ljb24gZWwtaWNvbi1jaXJjbGUtY2xvc2UgZWwtY2FzY2FkZXJfX2NsZWFySWNvblwiLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0uY2xlYXJWYWx1ZVxuXHQgICAgfVxuXHQgIH0pIDogX2MoJ2knLCB7XG5cdCAgICBrZXk6IFwiMlwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2ljb24gZWwtaWNvbi1jYXJldC1ib3R0b21cIixcblx0ICAgIGNsYXNzOiB7XG5cdCAgICAgICdpcy1yZXZlcnNlJzogX3ZtLm1lbnVWaXNpYmxlXG5cdCAgICB9XG5cdCAgfSldKV0sIDIpLCBfYygnc3BhbicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5pbnB1dFZhbHVlID09PSAnJyksXG5cdCAgICAgIGV4cHJlc3Npb246IFwiaW5wdXRWYWx1ZSA9PT0gJydcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jYXNjYWRlcl9fbGFiZWxcIlxuXHQgIH0sIFsoX3ZtLnNob3dBbGxMZXZlbHMpID8gW192bS5fbCgoX3ZtLmN1cnJlbnRMYWJlbHMpLCBmdW5jdGlvbihsYWJlbCwgaW5kZXgpIHtcblx0ICAgIHJldHVybiBbX3ZtLl92KFwiXFxuICAgICAgICBcIiArIF92bS5fcyhsYWJlbCkgKyBcIlxcbiAgICAgICAgXCIpLCAoaW5kZXggPCBfdm0uY3VycmVudExhYmVscy5sZW5ndGggLSAxKSA/IF9jKCdzcGFuJywgW192bS5fdihcIiAvIFwiKV0pIDogX3ZtLl9lKCldXG5cdCAgfSldIDogW192bS5fdihcIlxcbiAgICAgIFwiICsgX3ZtLl9zKF92bS5jdXJyZW50TGFiZWxzW192bS5jdXJyZW50TGFiZWxzLmxlbmd0aCAtIDFdKSArIFwiXFxuICAgIFwiKV1dLCAyKV0sIDEpXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDM1NiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9tYWluID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNTcpO1xuXG5cdHZhciBfbWFpbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9tYWluKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdF9tYWluMi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfbWFpbjIuZGVmYXVsdC5uYW1lLCBfbWFpbjIuZGVmYXVsdCk7XG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gX21haW4yLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG4vKiAzNTcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzU4KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzczKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMzU4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2NvbG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNTkpO1xuXG5cdHZhciBfY29sb3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY29sb3IpO1xuXG5cdHZhciBfcGlja2VyRHJvcGRvd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2MCk7XG5cblx0dmFyIF9waWNrZXJEcm9wZG93bjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9waWNrZXJEcm9wZG93bik7XG5cblx0dmFyIF9jbGlja291dHNpZGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcblxuXHR2YXIgX2NsaWNrb3V0c2lkZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jbGlja291dHNpZGUpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbENvbG9yUGlja2VyJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICB2YWx1ZToge1xuXHQgICAgICB0eXBlOiBTdHJpbmdcblx0ICAgIH0sXG5cdCAgICBzaG93QWxwaGE6IHtcblx0ICAgICAgdHlwZTogQm9vbGVhblxuXHQgICAgfSxcblx0ICAgIGNvbG9yRm9ybWF0OiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZ1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBkaXJlY3RpdmVzOiB7IENsaWNrb3V0c2lkZTogX2NsaWNrb3V0c2lkZTIuZGVmYXVsdCB9LFxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIGRpc3BsYXllZENvbG9yOiBmdW5jdGlvbiBkaXNwbGF5ZWRDb2xvcigpIHtcblx0ICAgICAgaWYgKCF0aGlzLnZhbHVlICYmICF0aGlzLnNob3dQYW5lbENvbG9yKSB7XG5cdCAgICAgICAgcmV0dXJuICd0cmFuc3BhcmVudCc7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdmFyIF9jb2xvciR0b1JnYiA9IHRoaXMuY29sb3IudG9SZ2IoKSxcblx0ICAgICAgICAgICAgciA9IF9jb2xvciR0b1JnYi5yLFxuXHQgICAgICAgICAgICBnID0gX2NvbG9yJHRvUmdiLmcsXG5cdCAgICAgICAgICAgIGIgPSBfY29sb3IkdG9SZ2IuYjtcblxuXHQgICAgICAgIHJldHVybiB0aGlzLnNob3dBbHBoYSA/ICdyZ2JhKCcgKyByICsgJywgJyArIGcgKyAnLCAnICsgYiArICcsICcgKyB0aGlzLmNvbG9yLmdldCgnYWxwaGEnKSAvIDEwMCArICcpJyA6ICdyZ2IoJyArIHIgKyAnLCAnICsgZyArICcsICcgKyBiICsgJyknO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHdhdGNoOiB7XG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsKSB7XG5cdCAgICAgIGlmICghdmFsKSB7XG5cdCAgICAgICAgdGhpcy5zaG93UGFuZWxDb2xvciA9IGZhbHNlO1xuXHQgICAgICB9IGVsc2UgaWYgKHZhbCAmJiB2YWwgIT09IHRoaXMuY29sb3IudmFsdWUpIHtcblx0ICAgICAgICB0aGlzLmNvbG9yLmZyb21TdHJpbmcodmFsKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblxuXHQgICAgY29sb3I6IHtcblx0ICAgICAgZGVlcDogdHJ1ZSxcblx0ICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcigpIHtcblx0ICAgICAgICB0aGlzLnNob3dQYW5lbENvbG9yID0gdHJ1ZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGRpc3BsYXllZENvbG9yOiBmdW5jdGlvbiBkaXNwbGF5ZWRDb2xvcih2YWwpIHtcblx0ICAgICAgdGhpcy4kZW1pdCgnYWN0aXZlLWNoYW5nZScsIHZhbCk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGNvbmZpcm1WYWx1ZTogZnVuY3Rpb24gY29uZmlybVZhbHVlKHZhbHVlKSB7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5jb2xvci52YWx1ZSk7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY29sb3IudmFsdWUpO1xuXHQgICAgICB0aGlzLnNob3dQaWNrZXIgPSBmYWxzZTtcblx0ICAgIH0sXG5cdCAgICBjbGVhclZhbHVlOiBmdW5jdGlvbiBjbGVhclZhbHVlKCkge1xuXHQgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIG51bGwpO1xuXHQgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBudWxsKTtcblx0ICAgICAgdGhpcy5zaG93UGFuZWxDb2xvciA9IGZhbHNlO1xuXHQgICAgICB0aGlzLnNob3dQaWNrZXIgPSBmYWxzZTtcblx0ICAgICAgdGhpcy5yZXNldENvbG9yKCk7XG5cdCAgICB9LFxuXHQgICAgaGlkZTogZnVuY3Rpb24gaGlkZSgpIHtcblx0ICAgICAgdGhpcy5zaG93UGlja2VyID0gZmFsc2U7XG5cdCAgICAgIHRoaXMucmVzZXRDb2xvcigpO1xuXHQgICAgfSxcblx0ICAgIHJlc2V0Q29sb3I6IGZ1bmN0aW9uIHJlc2V0Q29sb3IoKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcblx0ICAgICAgICBpZiAoX3RoaXMudmFsdWUpIHtcblx0ICAgICAgICAgIF90aGlzLmNvbG9yLmZyb21TdHJpbmcoX3RoaXMudmFsdWUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICBfdGhpcy5zaG93UGFuZWxDb2xvciA9IGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdCAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuXHQgICAgaWYgKHZhbHVlKSB7XG5cdCAgICAgIHRoaXMuY29sb3IuZnJvbVN0cmluZyh2YWx1ZSk7XG5cdCAgICB9XG5cdCAgICB0aGlzLnBvcHBlckVsbSA9IHRoaXMuJHJlZnMuZHJvcGRvd24uJGVsO1xuXHQgIH0sXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHZhciBjb2xvciA9IG5ldyBfY29sb3IyLmRlZmF1bHQoe1xuXHQgICAgICBlbmFibGVBbHBoYTogdGhpcy5zaG93QWxwaGEsXG5cdCAgICAgIGZvcm1hdDogdGhpcy5jb2xvckZvcm1hdFxuXHQgICAgfSk7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBjb2xvcjogY29sb3IsXG5cdCAgICAgIHNob3dQaWNrZXI6IGZhbHNlLFxuXHQgICAgICBzaG93UGFuZWxDb2xvcjogZmFsc2Vcblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgY29tcG9uZW50czoge1xuXHQgICAgUGlja2VyRHJvcGRvd246IF9waWNrZXJEcm9wZG93bjIuZGVmYXVsdFxuXHQgIH1cblx0fTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuLyoqKi8gfSxcbi8qIDM1OSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5cdGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cblx0dmFyIGhzdjJoc2wgPSBmdW5jdGlvbiBoc3YyaHNsKGh1ZSwgc2F0LCB2YWwpIHtcblx0ICByZXR1cm4gW2h1ZSwgc2F0ICogdmFsIC8gKChodWUgPSAoMiAtIHNhdCkgKiB2YWwpIDwgMSA/IGh1ZSA6IDIgLSBodWUpIHx8IDAsIGh1ZSAvIDJdO1xuXHR9O1xuXG5cdC8vIE5lZWQgdG8gaGFuZGxlIDEuMCBhcyAxMDAlLCBzaW5jZSBvbmNlIGl0IGlzIGEgbnVtYmVyLCB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gaXQgYW5kIDFcblx0Ly8gPGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzQyMjA3Mi9qYXZhc2NyaXB0LWhvdy10by1kZXRlY3QtbnVtYmVyLWFzLWEtZGVjaW1hbC1pbmNsdWRpbmctMS0wPlxuXHR2YXIgaXNPbmVQb2ludFplcm8gPSBmdW5jdGlvbiBpc09uZVBvaW50WmVybyhuKSB7XG5cdCAgcmV0dXJuIHR5cGVvZiBuID09PSAnc3RyaW5nJyAmJiBuLmluZGV4T2YoJy4nKSAhPT0gLTEgJiYgcGFyc2VGbG9hdChuKSA9PT0gMTtcblx0fTtcblxuXHR2YXIgaXNQZXJjZW50YWdlID0gZnVuY3Rpb24gaXNQZXJjZW50YWdlKG4pIHtcblx0ICByZXR1cm4gdHlwZW9mIG4gPT09ICdzdHJpbmcnICYmIG4uaW5kZXhPZignJScpICE9PSAtMTtcblx0fTtcblxuXHQvLyBUYWtlIGlucHV0IGZyb20gWzAsIG5dIGFuZCByZXR1cm4gaXQgYXMgWzAsIDFdXG5cdHZhciBib3VuZDAxID0gZnVuY3Rpb24gYm91bmQwMSh2YWx1ZSwgbWF4KSB7XG5cdCAgaWYgKGlzT25lUG9pbnRaZXJvKHZhbHVlKSkgdmFsdWUgPSAnMTAwJSc7XG5cblx0ICB2YXIgcHJvY2Vzc1BlcmNlbnQgPSBpc1BlcmNlbnRhZ2UodmFsdWUpO1xuXHQgIHZhbHVlID0gTWF0aC5taW4obWF4LCBNYXRoLm1heCgwLCBwYXJzZUZsb2F0KHZhbHVlKSkpO1xuXG5cdCAgLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHBlcmNlbnRhZ2UgaW50byBudW1iZXJcblx0ICBpZiAocHJvY2Vzc1BlcmNlbnQpIHtcblx0ICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUgKiBtYXgsIDEwKSAvIDEwMDtcblx0ICB9XG5cblx0ICAvLyBIYW5kbGUgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzXG5cdCAgaWYgKE1hdGguYWJzKHZhbHVlIC0gbWF4KSA8IDAuMDAwMDAxKSB7XG5cdCAgICByZXR1cm4gMTtcblx0ICB9XG5cblx0ICAvLyBDb252ZXJ0IGludG8gWzAsIDFdIHJhbmdlIGlmIGl0IGlzbid0IGFscmVhZHlcblx0ICByZXR1cm4gdmFsdWUgJSBtYXggLyBwYXJzZUZsb2F0KG1heCk7XG5cdH07XG5cblx0dmFyIElOVF9IRVhfTUFQID0geyAxMDogJ0EnLCAxMTogJ0InLCAxMjogJ0MnLCAxMzogJ0QnLCAxNDogJ0UnLCAxNTogJ0YnIH07XG5cblx0dmFyIHRvSGV4ID0gZnVuY3Rpb24gdG9IZXgoX3JlZikge1xuXHQgIHZhciByID0gX3JlZi5yLFxuXHQgICAgICBnID0gX3JlZi5nLFxuXHQgICAgICBiID0gX3JlZi5iO1xuXG5cdCAgdmFyIGhleE9uZSA9IGZ1bmN0aW9uIGhleE9uZSh2YWx1ZSkge1xuXHQgICAgdmFsdWUgPSBNYXRoLm1pbihNYXRoLnJvdW5kKHZhbHVlKSwgMjU1KTtcblx0ICAgIHZhciBoaWdoID0gTWF0aC5mbG9vcih2YWx1ZSAvIDE2KTtcblx0ICAgIHZhciBsb3cgPSB2YWx1ZSAlIDE2O1xuXHQgICAgcmV0dXJuICcnICsgKElOVF9IRVhfTUFQW2hpZ2hdIHx8IGhpZ2gpICsgKElOVF9IRVhfTUFQW2xvd10gfHwgbG93KTtcblx0ICB9O1xuXG5cdCAgaWYgKGlzTmFOKHIpIHx8IGlzTmFOKGcpIHx8IGlzTmFOKGIpKSByZXR1cm4gJyc7XG5cblx0ICByZXR1cm4gJyMnICsgaGV4T25lKHIpICsgaGV4T25lKGcpICsgaGV4T25lKGIpO1xuXHR9O1xuXG5cdHZhciBIRVhfSU5UX01BUCA9IHsgQTogMTAsIEI6IDExLCBDOiAxMiwgRDogMTMsIEU6IDE0LCBGOiAxNSB9O1xuXG5cdHZhciBwYXJzZUhleENoYW5uZWwgPSBmdW5jdGlvbiBwYXJzZUhleENoYW5uZWwoaGV4KSB7XG5cdCAgaWYgKGhleC5sZW5ndGggPT09IDIpIHtcblx0ICAgIHJldHVybiAoSEVYX0lOVF9NQVBbaGV4WzBdLnRvVXBwZXJDYXNlKCldIHx8ICtoZXhbMF0pICogMTYgKyAoSEVYX0lOVF9NQVBbaGV4WzFdLnRvVXBwZXJDYXNlKCldIHx8ICtoZXhbMV0pO1xuXHQgIH1cblxuXHQgIHJldHVybiBIRVhfSU5UX01BUFtoZXhbMV0udG9VcHBlckNhc2UoKV0gfHwgK2hleFsxXTtcblx0fTtcblxuXHR2YXIgaHNsMmhzdiA9IGZ1bmN0aW9uIGhzbDJoc3YoaHVlLCBzYXQsIGxpZ2h0KSB7XG5cdCAgc2F0ID0gc2F0IC8gMTAwO1xuXHQgIGxpZ2h0ID0gbGlnaHQgLyAxMDA7XG5cdCAgdmFyIHNtaW4gPSBzYXQ7XG5cdCAgdmFyIGxtaW4gPSBNYXRoLm1heChsaWdodCwgMC4wMSk7XG5cdCAgdmFyIHN2ID0gdm9pZCAwO1xuXHQgIHZhciB2ID0gdm9pZCAwO1xuXG5cdCAgbGlnaHQgKj0gMjtcblx0ICBzYXQgKj0gbGlnaHQgPD0gMSA/IGxpZ2h0IDogMiAtIGxpZ2h0O1xuXHQgIHNtaW4gKj0gbG1pbiA8PSAxID8gbG1pbiA6IDIgLSBsbWluO1xuXHQgIHYgPSAobGlnaHQgKyBzYXQpIC8gMjtcblx0ICBzdiA9IGxpZ2h0ID09PSAwID8gMiAqIHNtaW4gLyAobG1pbiArIHNtaW4pIDogMiAqIHNhdCAvIChsaWdodCArIHNhdCk7XG5cblx0ICByZXR1cm4ge1xuXHQgICAgaDogaHVlLFxuXHQgICAgczogc3YgKiAxMDAsXG5cdCAgICB2OiB2ICogMTAwXG5cdCAgfTtcblx0fTtcblxuXHQvLyBgcmdiVG9Ic3ZgXG5cdC8vIENvbnZlcnRzIGFuIFJHQiBjb2xvciB2YWx1ZSB0byBIU1Zcblx0Ly8gKkFzc3VtZXM6KiByLCBnLCBhbmQgYiBhcmUgY29udGFpbmVkIGluIHRoZSBzZXQgWzAsIDI1NV0gb3IgWzAsIDFdXG5cdC8vICpSZXR1cm5zOiogeyBoLCBzLCB2IH0gaW4gWzAsMV1cblx0dmFyIHJnYjJoc3YgPSBmdW5jdGlvbiByZ2IyaHN2KHIsIGcsIGIpIHtcblx0ICByID0gYm91bmQwMShyLCAyNTUpO1xuXHQgIGcgPSBib3VuZDAxKGcsIDI1NSk7XG5cdCAgYiA9IGJvdW5kMDEoYiwgMjU1KTtcblxuXHQgIHZhciBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcblx0ICB2YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7XG5cdCAgdmFyIGggPSB2b2lkIDAsXG5cdCAgICAgIHMgPSB2b2lkIDA7XG5cdCAgdmFyIHYgPSBtYXg7XG5cblx0ICB2YXIgZCA9IG1heCAtIG1pbjtcblx0ICBzID0gbWF4ID09PSAwID8gMCA6IGQgLyBtYXg7XG5cblx0ICBpZiAobWF4ID09PSBtaW4pIHtcblx0ICAgIGggPSAwOyAvLyBhY2hyb21hdGljXG5cdCAgfSBlbHNlIHtcblx0ICAgIHN3aXRjaCAobWF4KSB7XG5cdCAgICAgIGNhc2Ugcjpcblx0ICAgICAgICBoID0gKGcgLSBiKSAvIGQgKyAoZyA8IGIgPyA2IDogMCk7XG5cdCAgICAgICAgYnJlYWs7XG5cdCAgICAgIGNhc2UgZzpcblx0ICAgICAgICBoID0gKGIgLSByKSAvIGQgKyAyO1xuXHQgICAgICAgIGJyZWFrO1xuXHQgICAgICBjYXNlIGI6XG5cdCAgICAgICAgaCA9IChyIC0gZykgLyBkICsgNDtcblx0ICAgICAgICBicmVhaztcblx0ICAgIH1cblx0ICAgIGggLz0gNjtcblx0ICB9XG5cblx0ICByZXR1cm4geyBoOiBoICogMzYwLCBzOiBzICogMTAwLCB2OiB2ICogMTAwIH07XG5cdH07XG5cblx0Ly8gYGhzdlRvUmdiYFxuXHQvLyBDb252ZXJ0cyBhbiBIU1YgY29sb3IgdmFsdWUgdG8gUkdCLlxuXHQvLyAqQXNzdW1lczoqIGggaXMgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMzYwXSBhbmQgcyBhbmQgdiBhcmUgY29udGFpbmVkIGluIFswLCAxXSBvciBbMCwgMTAwXVxuXHQvLyAqUmV0dXJuczoqIHsgciwgZywgYiB9IGluIHRoZSBzZXQgWzAsIDI1NV1cblx0dmFyIGhzdjJyZ2IgPSBmdW5jdGlvbiBoc3YycmdiKGgsIHMsIHYpIHtcblx0ICBoID0gYm91bmQwMShoLCAzNjApICogNjtcblx0ICBzID0gYm91bmQwMShzLCAxMDApO1xuXHQgIHYgPSBib3VuZDAxKHYsIDEwMCk7XG5cblx0ICB2YXIgaSA9IE1hdGguZmxvb3IoaCk7XG5cdCAgdmFyIGYgPSBoIC0gaTtcblx0ICB2YXIgcCA9IHYgKiAoMSAtIHMpO1xuXHQgIHZhciBxID0gdiAqICgxIC0gZiAqIHMpO1xuXHQgIHZhciB0ID0gdiAqICgxIC0gKDEgLSBmKSAqIHMpO1xuXHQgIHZhciBtb2QgPSBpICUgNjtcblx0ICB2YXIgciA9IFt2LCBxLCBwLCBwLCB0LCB2XVttb2RdO1xuXHQgIHZhciBnID0gW3QsIHYsIHYsIHEsIHAsIHBdW21vZF07XG5cdCAgdmFyIGIgPSBbcCwgcCwgdCwgdiwgdiwgcV1bbW9kXTtcblxuXHQgIHJldHVybiB7XG5cdCAgICByOiBNYXRoLnJvdW5kKHIgKiAyNTUpLFxuXHQgICAgZzogTWF0aC5yb3VuZChnICogMjU1KSxcblx0ICAgIGI6IE1hdGgucm91bmQoYiAqIDI1NSlcblx0ICB9O1xuXHR9O1xuXG5cdHZhciBDb2xvciA9IGZ1bmN0aW9uICgpIHtcblx0ICBmdW5jdGlvbiBDb2xvcihvcHRpb25zKSB7XG5cdCAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29sb3IpO1xuXG5cdCAgICB0aGlzLl9odWUgPSAwO1xuXHQgICAgdGhpcy5fc2F0dXJhdGlvbiA9IDEwMDtcblx0ICAgIHRoaXMuX3ZhbHVlID0gMTAwO1xuXHQgICAgdGhpcy5fYWxwaGEgPSAxMDA7XG5cblx0ICAgIHRoaXMuZW5hYmxlQWxwaGEgPSBmYWxzZTtcblx0ICAgIHRoaXMuZm9ybWF0ID0gJ2hleCc7XG5cdCAgICB0aGlzLnZhbHVlID0gJyc7XG5cblx0ICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdCAgICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuXHQgICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHRpb24pKSB7XG5cdCAgICAgICAgdGhpc1tvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHRoaXMuZG9PbkNoYW5nZSgpO1xuXHQgIH1cblxuXHQgIENvbG9yLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiBzZXQocHJvcCwgdmFsdWUpIHtcblx0ICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmICh0eXBlb2YgcHJvcCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YocHJvcCkpID09PSAnb2JqZWN0Jykge1xuXHQgICAgICBmb3IgKHZhciBwIGluIHByb3ApIHtcblx0ICAgICAgICBpZiAocHJvcC5oYXNPd25Qcm9wZXJ0eShwKSkge1xuXHQgICAgICAgICAgdGhpcy5zZXQocCwgcHJvcFtwXSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgcmV0dXJuO1xuXHQgICAgfVxuXG5cdCAgICB0aGlzWydfJyArIHByb3BdID0gdmFsdWU7XG5cdCAgICB0aGlzLmRvT25DaGFuZ2UoKTtcblx0ICB9O1xuXG5cdCAgQ29sb3IucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldChwcm9wKSB7XG5cdCAgICByZXR1cm4gdGhpc1snXycgKyBwcm9wXTtcblx0ICB9O1xuXG5cdCAgQ29sb3IucHJvdG90eXBlLnRvUmdiID0gZnVuY3Rpb24gdG9SZ2IoKSB7XG5cdCAgICByZXR1cm4gaHN2MnJnYih0aGlzLl9odWUsIHRoaXMuX3NhdHVyYXRpb24sIHRoaXMuX3ZhbHVlKTtcblx0ICB9O1xuXG5cdCAgQ29sb3IucHJvdG90eXBlLmZyb21TdHJpbmcgPSBmdW5jdGlvbiBmcm9tU3RyaW5nKHZhbHVlKSB7XG5cdCAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICBpZiAoIXZhbHVlKSB7XG5cdCAgICAgIHRoaXMuX2h1ZSA9IDA7XG5cdCAgICAgIHRoaXMuX3NhdHVyYXRpb24gPSAxMDA7XG5cdCAgICAgIHRoaXMuX3ZhbHVlID0gMTAwO1xuXG5cdCAgICAgIHRoaXMuZG9PbkNoYW5nZSgpO1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9XG5cblx0ICAgIHZhciBmcm9tSFNWID0gZnVuY3Rpb24gZnJvbUhTVihoLCBzLCB2KSB7XG5cdCAgICAgIF90aGlzLl9odWUgPSBoO1xuXHQgICAgICBfdGhpcy5fc2F0dXJhdGlvbiA9IHM7XG5cdCAgICAgIF90aGlzLl92YWx1ZSA9IHY7XG5cblx0ICAgICAgX3RoaXMuZG9PbkNoYW5nZSgpO1xuXHQgICAgfTtcblxuXHQgICAgaWYgKHZhbHVlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuXHQgICAgICB2YXIgcGFydHMgPSB2YWx1ZS5yZXBsYWNlKC9oc2xhfGhzbHxcXCh8XFwpL2dtLCAnJykuc3BsaXQoL1xcc3wsL2cpLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIHZhbCAhPT0gJyc7XG5cdCAgICAgIH0pLm1hcChmdW5jdGlvbiAodmFsLCBpbmRleCkge1xuXHQgICAgICAgIHJldHVybiBpbmRleCA+IDIgPyBwYXJzZUZsb2F0KHZhbCkgOiBwYXJzZUludCh2YWwsIDEwKTtcblx0ICAgICAgfSk7XG5cblx0ICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gNCkge1xuXHQgICAgICAgIHRoaXMuX2FscGhhID0gTWF0aC5mbG9vcihwYXJzZUZsb2F0KHBhcnRzWzNdKSAqIDEwMCk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAzKSB7XG5cdCAgICAgICAgdmFyIF9oc2wyaHN2ID0gaHNsMmhzdihwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdKSxcblx0ICAgICAgICAgICAgaCA9IF9oc2wyaHN2LmgsXG5cdCAgICAgICAgICAgIHMgPSBfaHNsMmhzdi5zLFxuXHQgICAgICAgICAgICB2ID0gX2hzbDJoc3YudjtcblxuXHQgICAgICAgIGZyb21IU1YoaCwgcywgdik7XG5cdCAgICAgIH1cblx0ICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZignaHN2JykgIT09IC0xKSB7XG5cdCAgICAgIHZhciBfcGFydHMgPSB2YWx1ZS5yZXBsYWNlKC9oc3ZhfGhzdnxcXCh8XFwpL2dtLCAnJykuc3BsaXQoL1xcc3wsL2cpLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIHZhbCAhPT0gJyc7XG5cdCAgICAgIH0pLm1hcChmdW5jdGlvbiAodmFsLCBpbmRleCkge1xuXHQgICAgICAgIHJldHVybiBpbmRleCA+IDIgPyBwYXJzZUZsb2F0KHZhbCkgOiBwYXJzZUludCh2YWwsIDEwKTtcblx0ICAgICAgfSk7XG5cblx0ICAgICAgaWYgKF9wYXJ0cy5sZW5ndGggPT09IDQpIHtcblx0ICAgICAgICB0aGlzLl9hbHBoYSA9IE1hdGguZmxvb3IocGFyc2VGbG9hdChfcGFydHNbM10pICogMTAwKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAoX3BhcnRzLmxlbmd0aCA+PSAzKSB7XG5cdCAgICAgICAgZnJvbUhTVihfcGFydHNbMF0sIF9wYXJ0c1sxXSwgX3BhcnRzWzJdKTtcblx0ICAgICAgfVxuXHQgICAgfSBlbHNlIGlmICh2YWx1ZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEpIHtcblx0ICAgICAgdmFyIF9wYXJ0czIgPSB2YWx1ZS5yZXBsYWNlKC9yZ2JhfHJnYnxcXCh8XFwpL2dtLCAnJykuc3BsaXQoL1xcc3wsL2cpLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7XG5cdCAgICAgICAgcmV0dXJuIHZhbCAhPT0gJyc7XG5cdCAgICAgIH0pLm1hcChmdW5jdGlvbiAodmFsLCBpbmRleCkge1xuXHQgICAgICAgIHJldHVybiBpbmRleCA+IDIgPyBwYXJzZUZsb2F0KHZhbCkgOiBwYXJzZUludCh2YWwsIDEwKTtcblx0ICAgICAgfSk7XG5cblx0ICAgICAgaWYgKF9wYXJ0czIubGVuZ3RoID09PSA0KSB7XG5cdCAgICAgICAgdGhpcy5fYWxwaGEgPSBNYXRoLmZsb29yKHBhcnNlRmxvYXQoX3BhcnRzMlszXSkgKiAxMDApO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChfcGFydHMyLmxlbmd0aCA+PSAzKSB7XG5cdCAgICAgICAgdmFyIF9yZ2IyaHN2ID0gcmdiMmhzdihfcGFydHMyWzBdLCBfcGFydHMyWzFdLCBfcGFydHMyWzJdKSxcblx0ICAgICAgICAgICAgX2ggPSBfcmdiMmhzdi5oLFxuXHQgICAgICAgICAgICBfcyA9IF9yZ2IyaHN2LnMsXG5cdCAgICAgICAgICAgIF92ID0gX3JnYjJoc3YudjtcblxuXHQgICAgICAgIGZyb21IU1YoX2gsIF9zLCBfdik7XG5cdCAgICAgIH1cblx0ICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZignIycpICE9PSAtMSkge1xuXHQgICAgICB2YXIgaGV4ID0gdmFsdWUucmVwbGFjZSgnIycsICcnKS50cmltKCk7XG5cdCAgICAgIHZhciByID0gdm9pZCAwLFxuXHQgICAgICAgICAgZyA9IHZvaWQgMCxcblx0ICAgICAgICAgIGIgPSB2b2lkIDA7XG5cblx0ICAgICAgaWYgKGhleC5sZW5ndGggPT09IDMpIHtcblx0ICAgICAgICByID0gcGFyc2VIZXhDaGFubmVsKGhleFswXSArIGhleFswXSk7XG5cdCAgICAgICAgZyA9IHBhcnNlSGV4Q2hhbm5lbChoZXhbMV0gKyBoZXhbMV0pO1xuXHQgICAgICAgIGIgPSBwYXJzZUhleENoYW5uZWwoaGV4WzJdICsgaGV4WzJdKTtcblx0ICAgICAgfSBlbHNlIGlmIChoZXgubGVuZ3RoID09PSA2KSB7XG5cdCAgICAgICAgciA9IHBhcnNlSGV4Q2hhbm5lbChoZXguc3Vic3RyaW5nKDAsIDIpKTtcblx0ICAgICAgICBnID0gcGFyc2VIZXhDaGFubmVsKGhleC5zdWJzdHJpbmcoMiwgNCkpO1xuXHQgICAgICAgIGIgPSBwYXJzZUhleENoYW5uZWwoaGV4LnN1YnN0cmluZyg0KSk7XG5cdCAgICAgIH1cblxuXHQgICAgICB2YXIgX3JnYjJoc3YyID0gcmdiMmhzdihyLCBnLCBiKSxcblx0ICAgICAgICAgIF9oMiA9IF9yZ2IyaHN2Mi5oLFxuXHQgICAgICAgICAgX3MyID0gX3JnYjJoc3YyLnMsXG5cdCAgICAgICAgICBfdjIgPSBfcmdiMmhzdjIudjtcblxuXHQgICAgICBmcm9tSFNWKF9oMiwgX3MyLCBfdjIpO1xuXHQgICAgfVxuXHQgIH07XG5cblx0ICBDb2xvci5wcm90b3R5cGUuZG9PbkNoYW5nZSA9IGZ1bmN0aW9uIGRvT25DaGFuZ2UoKSB7XG5cdCAgICB2YXIgX2h1ZSA9IHRoaXMuX2h1ZSxcblx0ICAgICAgICBfc2F0dXJhdGlvbiA9IHRoaXMuX3NhdHVyYXRpb24sXG5cdCAgICAgICAgX3ZhbHVlID0gdGhpcy5fdmFsdWUsXG5cdCAgICAgICAgX2FscGhhID0gdGhpcy5fYWxwaGEsXG5cdCAgICAgICAgZm9ybWF0ID0gdGhpcy5mb3JtYXQ7XG5cblxuXHQgICAgaWYgKHRoaXMuZW5hYmxlQWxwaGEpIHtcblx0ICAgICAgc3dpdGNoIChmb3JtYXQpIHtcblx0ICAgICAgICBjYXNlICdoc2wnOlxuXHQgICAgICAgICAgdmFyIGhzbCA9IGhzdjJoc2woX2h1ZSwgX3NhdHVyYXRpb24gLyAxMDAsIF92YWx1ZSAvIDEwMCk7XG5cdCAgICAgICAgICB0aGlzLnZhbHVlID0gJ2hzbGEoJyArIF9odWUgKyAnLCAnICsgTWF0aC5yb3VuZChoc2xbMV0gKiAxMDApICsgJyUsICcgKyBNYXRoLnJvdW5kKGhzbFsyXSAqIDEwMCkgKyAnJSwgJyArIF9hbHBoYSAvIDEwMCArICcpJztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIGNhc2UgJ2hzdic6XG5cdCAgICAgICAgICB0aGlzLnZhbHVlID0gJ2hzdmEoJyArIF9odWUgKyAnLCAnICsgTWF0aC5yb3VuZChfc2F0dXJhdGlvbikgKyAnJSwgJyArIE1hdGgucm91bmQoX3ZhbHVlKSArICclLCAnICsgX2FscGhhIC8gMTAwICsgJyknO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgIHZhciBfaHN2MnJnYiA9IGhzdjJyZ2IoX2h1ZSwgX3NhdHVyYXRpb24sIF92YWx1ZSksXG5cdCAgICAgICAgICAgICAgciA9IF9oc3YycmdiLnIsXG5cdCAgICAgICAgICAgICAgZyA9IF9oc3YycmdiLmcsXG5cdCAgICAgICAgICAgICAgYiA9IF9oc3YycmdiLmI7XG5cblx0ICAgICAgICAgIHRoaXMudmFsdWUgPSAncmdiYSgnICsgciArICcsICcgKyBnICsgJywgJyArIGIgKyAnLCAnICsgX2FscGhhIC8gMTAwICsgJyknO1xuXHQgICAgICB9XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuXHQgICAgICAgIGNhc2UgJ2hzbCc6XG5cdCAgICAgICAgICB2YXIgX2hzbCA9IGhzdjJoc2woX2h1ZSwgX3NhdHVyYXRpb24gLyAxMDAsIF92YWx1ZSAvIDEwMCk7XG5cdCAgICAgICAgICB0aGlzLnZhbHVlID0gJ2hzbCgnICsgX2h1ZSArICcsICcgKyBNYXRoLnJvdW5kKF9oc2xbMV0gKiAxMDApICsgJyUsICcgKyBNYXRoLnJvdW5kKF9oc2xbMl0gKiAxMDApICsgJyUpJztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIGNhc2UgJ2hzdic6XG5cdCAgICAgICAgICB0aGlzLnZhbHVlID0gJ2hzdignICsgX2h1ZSArICcsICcgKyBNYXRoLnJvdW5kKF9zYXR1cmF0aW9uKSArICclLCAnICsgTWF0aC5yb3VuZChfdmFsdWUpICsgJyUpJztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIGNhc2UgJ3JnYic6XG5cdCAgICAgICAgICB2YXIgX2hzdjJyZ2IyID0gaHN2MnJnYihfaHVlLCBfc2F0dXJhdGlvbiwgX3ZhbHVlKSxcblx0ICAgICAgICAgICAgICBfciA9IF9oc3YycmdiMi5yLFxuXHQgICAgICAgICAgICAgIF9nID0gX2hzdjJyZ2IyLmcsXG5cdCAgICAgICAgICAgICAgX2IgPSBfaHN2MnJnYjIuYjtcblxuXHQgICAgICAgICAgdGhpcy52YWx1ZSA9ICdyZ2IoJyArIF9yICsgJywgJyArIF9nICsgJywgJyArIF9iICsgJyknO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgIHRoaXMudmFsdWUgPSB0b0hleChoc3YycmdiKF9odWUsIF9zYXR1cmF0aW9uLCBfdmFsdWUpKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH07XG5cblx0ICByZXR1cm4gQ29sb3I7XG5cdH0oKTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBDb2xvcjtcblx0O1xuXG4vKioqLyB9LFxuLyogMzYwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2MSksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3MiksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDM2MSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9zdlBhbmVsID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNjIpO1xuXG5cdHZhciBfc3ZQYW5lbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zdlBhbmVsKTtcblxuXHR2YXIgX2h1ZVNsaWRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMzY2KTtcblxuXHR2YXIgX2h1ZVNsaWRlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9odWVTbGlkZXIpO1xuXG5cdHZhciBfYWxwaGFTbGlkZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2OSk7XG5cblx0dmFyIF9hbHBoYVNsaWRlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hbHBoYVNsaWRlcik7XG5cblx0dmFyIF92dWVQb3BwZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcblxuXHR2YXIgX3Z1ZVBvcHBlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWVQb3BwZXIpO1xuXG5cdHZhciBfbG9jYWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5cblx0dmFyIF9sb2NhbGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9jYWxlKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnZWwtY29sb3ItcGlja2VyLWRyb3Bkb3duJyxcblxuXHQgIG1peGluczogW192dWVQb3BwZXIyLmRlZmF1bHQsIF9sb2NhbGUyLmRlZmF1bHRdLFxuXG5cdCAgY29tcG9uZW50czoge1xuXHQgICAgU3ZQYW5lbDogX3N2UGFuZWwyLmRlZmF1bHQsXG5cdCAgICBIdWVTbGlkZXI6IF9odWVTbGlkZXIyLmRlZmF1bHQsXG5cdCAgICBBbHBoYVNsaWRlcjogX2FscGhhU2xpZGVyMi5kZWZhdWx0XG5cdCAgfSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBjb2xvcjoge1xuXHQgICAgICByZXF1aXJlZDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIHNob3dBbHBoYTogQm9vbGVhblxuXHQgIH0sXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgY3VycmVudENvbG9yOiBmdW5jdGlvbiBjdXJyZW50Q29sb3IoKSB7XG5cdCAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG5cdCAgICAgIHJldHVybiAhcGFyZW50LnZhbHVlICYmICFwYXJlbnQuc2hvd1BhbmVsQ29sb3IgPyAnJyA6IHBhcmVudC5jb2xvci52YWx1ZTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgY29uZmlybVZhbHVlOiBmdW5jdGlvbiBjb25maXJtVmFsdWUoKSB7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ3BpY2snKTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcblx0ICAgIHRoaXMuJHBhcmVudC5wb3BwZXJFbG0gPSB0aGlzLnBvcHBlckVsbSA9IHRoaXMuJGVsO1xuXHQgICAgdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLiRwYXJlbnQuJGVsO1xuXHQgIH0sXG5cblxuXHQgIHdhdGNoOiB7XG5cdCAgICBzaG93UG9wcGVyOiBmdW5jdGlvbiBzaG93UG9wcGVyKHZhbCkge1xuXHQgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICAgIGlmICh2YWwgPT09IHRydWUpIHtcblx0ICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICB2YXIgXyRyZWZzID0gX3RoaXMuJHJlZnMsXG5cdCAgICAgICAgICAgICAgc2wgPSBfJHJlZnMuc2wsXG5cdCAgICAgICAgICAgICAgaHVlID0gXyRyZWZzLmh1ZSxcblx0ICAgICAgICAgICAgICBhbHBoYSA9IF8kcmVmcy5hbHBoYTtcblxuXHQgICAgICAgICAgc2wgJiYgc2wudXBkYXRlKCk7XG5cdCAgICAgICAgICBodWUgJiYgaHVlLnVwZGF0ZSgpO1xuXHQgICAgICAgICAgYWxwaGEgJiYgYWxwaGEudXBkYXRlKCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdH07IC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cbi8qKiovIH0sXG4vKiAzNjIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzYzKSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzY1KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMzYzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2RyYWdnYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oMzY0KTtcblxuXHR2YXIgX2RyYWdnYWJsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kcmFnZ2FibGUpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdlbC1zbC1wYW5lbCcsXG5cblx0ICBwcm9wczoge1xuXHQgICAgY29sb3I6IHtcblx0ICAgICAgcmVxdWlyZWQ6IHRydWVcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIGNvbG9yVmFsdWU6IGZ1bmN0aW9uIGNvbG9yVmFsdWUoKSB7XG5cdCAgICAgIHZhciBodWUgPSB0aGlzLmNvbG9yLmdldCgnaHVlJyk7XG5cdCAgICAgIHZhciB2YWx1ZSA9IHRoaXMuY29sb3IuZ2V0KCd2YWx1ZScpO1xuXHQgICAgICByZXR1cm4geyBodWU6IGh1ZSwgdmFsdWU6IHZhbHVlIH07XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHdhdGNoOiB7XG5cdCAgICBjb2xvclZhbHVlOiBmdW5jdGlvbiBjb2xvclZhbHVlKCkge1xuXHQgICAgICB0aGlzLnVwZGF0ZSgpO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcblx0ICAgICAgdmFyIHNhdHVyYXRpb24gPSB0aGlzLmNvbG9yLmdldCgnc2F0dXJhdGlvbicpO1xuXHQgICAgICB2YXIgdmFsdWUgPSB0aGlzLmNvbG9yLmdldCgndmFsdWUnKTtcblxuXHQgICAgICB2YXIgZWwgPSB0aGlzLiRlbDtcblxuXHQgICAgICB2YXIgX2VsJGdldEJvdW5kaW5nQ2xpZW50ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG5cdCAgICAgICAgICB3aWR0aCA9IF9lbCRnZXRCb3VuZGluZ0NsaWVudC53aWR0aCxcblx0ICAgICAgICAgIGhlaWdodCA9IF9lbCRnZXRCb3VuZGluZ0NsaWVudC5oZWlnaHQ7XG5cblx0ICAgICAgaWYgKCFoZWlnaHQpIGhlaWdodCA9IHdpZHRoICogMyAvIDQ7XG5cblx0ICAgICAgdGhpcy5jdXJzb3JMZWZ0ID0gc2F0dXJhdGlvbiAqIHdpZHRoIC8gMTAwO1xuXHQgICAgICB0aGlzLmN1cnNvclRvcCA9ICgxMDAgLSB2YWx1ZSkgKiBoZWlnaHQgLyAxMDA7XG5cblx0ICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gJ2hzbCgnICsgdGhpcy5jb2xvci5nZXQoJ2h1ZScpICsgJywgMTAwJSwgNTAlKSc7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlRHJhZzogZnVuY3Rpb24gaGFuZGxlRHJhZyhldmVudCkge1xuXHQgICAgICB2YXIgZWwgPSB0aGlzLiRlbDtcblx0ICAgICAgdmFyIHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHQgICAgICB2YXIgbGVmdCA9IGV2ZW50LmNsaWVudFggLSByZWN0LmxlZnQ7XG5cdCAgICAgIHZhciB0b3AgPSBldmVudC5jbGllbnRZIC0gcmVjdC50b3A7XG5cdCAgICAgIGxlZnQgPSBNYXRoLm1heCgwLCBsZWZ0KTtcblx0ICAgICAgbGVmdCA9IE1hdGgubWluKGxlZnQsIHJlY3Qud2lkdGgpO1xuXG5cdCAgICAgIHRvcCA9IE1hdGgubWF4KDAsIHRvcCk7XG5cdCAgICAgIHRvcCA9IE1hdGgubWluKHRvcCwgcmVjdC5oZWlnaHQpO1xuXG5cdCAgICAgIHRoaXMuY3Vyc29yTGVmdCA9IGxlZnQ7XG5cdCAgICAgIHRoaXMuY3Vyc29yVG9wID0gdG9wO1xuXHQgICAgICB0aGlzLmNvbG9yLnNldCh7XG5cdCAgICAgICAgc2F0dXJhdGlvbjogbGVmdCAvIHJlY3Qud2lkdGggKiAxMDAsXG5cdCAgICAgICAgdmFsdWU6IDEwMCAtIHRvcCAvIHJlY3QuaGVpZ2h0ICogMTAwXG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgKDAsIF9kcmFnZ2FibGUyLmRlZmF1bHQpKHRoaXMuJGVsLCB7XG5cdCAgICAgIGRyYWc6IGZ1bmN0aW9uIGRyYWcoZXZlbnQpIHtcblx0ICAgICAgICBfdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTtcblx0ICAgICAgfSxcblx0ICAgICAgZW5kOiBmdW5jdGlvbiBlbmQoZXZlbnQpIHtcblx0ICAgICAgICBfdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTtcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIHRoaXMudXBkYXRlKCk7XG5cdCAgfSxcblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgY3Vyc29yVG9wOiAwLFxuXHQgICAgICBjdXJzb3JMZWZ0OiAwLFxuXHQgICAgICBiYWNrZ3JvdW5kOiAnaHNsKDAsIDEwMCUsIDUwJSknXG5cdCAgICB9O1xuXHQgIH1cblx0fTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuLyoqKi8gfSxcbi8qIDM2NCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHtcblx0ICBpZiAoX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm47XG5cdCAgdmFyIG1vdmVGbiA9IGZ1bmN0aW9uIG1vdmVGbihldmVudCkge1xuXHQgICAgaWYgKG9wdGlvbnMuZHJhZykge1xuXHQgICAgICBvcHRpb25zLmRyYWcoZXZlbnQpO1xuXHQgICAgfVxuXHQgIH07XG5cdCAgdmFyIHVwRm4gPSBmdW5jdGlvbiB1cEZuKGV2ZW50KSB7XG5cdCAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3ZlRm4pO1xuXHQgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHVwRm4pO1xuXHQgICAgZG9jdW1lbnQub25zZWxlY3RzdGFydCA9IG51bGw7XG5cdCAgICBkb2N1bWVudC5vbmRyYWdzdGFydCA9IG51bGw7XG5cblx0ICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcblxuXHQgICAgaWYgKG9wdGlvbnMuZW5kKSB7XG5cdCAgICAgIG9wdGlvbnMuZW5kKGV2ZW50KTtcblx0ICAgIH1cblx0ICB9O1xuXHQgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICBpZiAoaXNEcmFnZ2luZykgcmV0dXJuO1xuXHQgICAgZG9jdW1lbnQub25zZWxlY3RzdGFydCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgfTtcblx0ICAgIGRvY3VtZW50Lm9uZHJhZ3N0YXJ0ID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICB9O1xuXG5cdCAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3ZlRm4pO1xuXHQgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHVwRm4pO1xuXHQgICAgaXNEcmFnZ2luZyA9IHRydWU7XG5cblx0ICAgIGlmIChvcHRpb25zLnN0YXJ0KSB7XG5cdCAgICAgIG9wdGlvbnMuc3RhcnQoZXZlbnQpO1xuXHQgICAgfVxuXHQgIH0pO1xuXHR9O1xuXG5cdHZhciBfdnVlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xuXG5cdHZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHR2YXIgaXNEcmFnZ2luZyA9IGZhbHNlO1xuXG4vKioqLyB9LFxuLyogMzY1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3Itc3ZwYW5lbFwiLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIGJhY2tncm91bmRDb2xvcjogX3ZtLmJhY2tncm91bmRcblx0ICAgIH0pXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1zdnBhbmVsX193aGl0ZVwiXG5cdCAgfSksIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1zdnBhbmVsX19ibGFja1wiXG5cdCAgfSksIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1zdnBhbmVsX19jdXJzb3JcIixcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICB0b3A6IF92bS5jdXJzb3JUb3AgKyAncHgnLFxuXHQgICAgICBsZWZ0OiBfdm0uY3Vyc29yTGVmdCArICdweCdcblx0ICAgIH0pXG5cdCAgfSwgW19jKCdkaXYnKV0pXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMzY2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2NyksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2OCksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcbi8qIDM2NyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9kcmFnZ2FibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2NCk7XG5cblx0dmFyIF9kcmFnZ2FibGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZHJhZ2dhYmxlKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnZWwtY29sb3ItaHVlLXNsaWRlcicsXG5cblx0ICBwcm9wczoge1xuXHQgICAgY29sb3I6IHtcblx0ICAgICAgcmVxdWlyZWQ6IHRydWVcblx0ICAgIH0sXG5cblx0ICAgIHZlcnRpY2FsOiBCb29sZWFuXG5cdCAgfSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICB0aHVtYkxlZnQ6IDAsXG5cdCAgICAgIHRodW1iVG9wOiAwXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBodWVWYWx1ZTogZnVuY3Rpb24gaHVlVmFsdWUoKSB7XG5cdCAgICAgIHZhciBodWUgPSB0aGlzLmNvbG9yLmdldCgnaHVlJyk7XG5cdCAgICAgIHJldHVybiBodWU7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHdhdGNoOiB7XG5cdCAgICBodWVWYWx1ZTogZnVuY3Rpb24gaHVlVmFsdWUoKSB7XG5cdCAgICAgIHRoaXMudXBkYXRlKCk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuXHQgICAgICB2YXIgdGh1bWIgPSB0aGlzLiRyZWZzLnRodW1iO1xuXHQgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXG5cdCAgICAgIGlmICh0YXJnZXQgIT09IHRodW1iKSB7XG5cdCAgICAgICAgdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGhhbmRsZURyYWc6IGZ1bmN0aW9uIGhhbmRsZURyYWcoZXZlbnQpIHtcblx0ICAgICAgdmFyIHJlY3QgPSB0aGlzLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0ICAgICAgdmFyIHRodW1iID0gdGhpcy4kcmVmcy50aHVtYjtcblxuXHQgICAgICB2YXIgaHVlID0gdm9pZCAwO1xuXG5cdCAgICAgIGlmICghdGhpcy52ZXJ0aWNhbCkge1xuXHQgICAgICAgIHZhciBsZWZ0ID0gZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdDtcblx0ICAgICAgICBsZWZ0ID0gTWF0aC5taW4obGVmdCwgcmVjdC53aWR0aCAtIHRodW1iLm9mZnNldFdpZHRoIC8gMik7XG5cdCAgICAgICAgbGVmdCA9IE1hdGgubWF4KHRodW1iLm9mZnNldFdpZHRoIC8gMiwgbGVmdCk7XG5cblx0ICAgICAgICBodWUgPSBNYXRoLnJvdW5kKChsZWZ0IC0gdGh1bWIub2Zmc2V0V2lkdGggLyAyKSAvIChyZWN0LndpZHRoIC0gdGh1bWIub2Zmc2V0V2lkdGgpICogMzYwKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB2YXIgdG9wID0gZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wO1xuXHQgICAgICAgIHRvcCA9IE1hdGgubWluKHRvcCwgcmVjdC5oZWlnaHQgLSB0aHVtYi5vZmZzZXRIZWlnaHQgLyAyKTtcblx0ICAgICAgICB0b3AgPSBNYXRoLm1heCh0aHVtYi5vZmZzZXRIZWlnaHQgLyAyLCB0b3ApO1xuXG5cdCAgICAgICAgaHVlID0gTWF0aC5yb3VuZCgodG9wIC0gdGh1bWIub2Zmc2V0SGVpZ2h0IC8gMikgLyAocmVjdC5oZWlnaHQgLSB0aHVtYi5vZmZzZXRIZWlnaHQpICogMzYwKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIHRoaXMuY29sb3Iuc2V0KCdodWUnLCBodWUpO1xuXHQgICAgfSxcblx0ICAgIGdldFRodW1iTGVmdDogZnVuY3Rpb24gZ2V0VGh1bWJMZWZ0KCkge1xuXHQgICAgICBpZiAodGhpcy52ZXJ0aWNhbCkgcmV0dXJuIDA7XG5cdCAgICAgIHZhciBlbCA9IHRoaXMuJGVsO1xuXHQgICAgICB2YXIgaHVlID0gdGhpcy5jb2xvci5nZXQoJ2h1ZScpO1xuXG5cdCAgICAgIGlmICghZWwpIHJldHVybiAwO1xuXHQgICAgICB2YXIgdGh1bWIgPSB0aGlzLiRyZWZzLnRodW1iO1xuXHQgICAgICByZXR1cm4gTWF0aC5yb3VuZChodWUgKiAoZWwub2Zmc2V0V2lkdGggLSB0aHVtYi5vZmZzZXRXaWR0aCAvIDIpIC8gMzYwKTtcblx0ICAgIH0sXG5cdCAgICBnZXRUaHVtYlRvcDogZnVuY3Rpb24gZ2V0VGh1bWJUb3AoKSB7XG5cdCAgICAgIGlmICghdGhpcy52ZXJ0aWNhbCkgcmV0dXJuIDA7XG5cdCAgICAgIHZhciBlbCA9IHRoaXMuJGVsO1xuXHQgICAgICB2YXIgaHVlID0gdGhpcy5jb2xvci5nZXQoJ2h1ZScpO1xuXG5cdCAgICAgIGlmICghZWwpIHJldHVybiAwO1xuXHQgICAgICB2YXIgdGh1bWIgPSB0aGlzLiRyZWZzLnRodW1iO1xuXHQgICAgICByZXR1cm4gTWF0aC5yb3VuZChodWUgKiAoZWwub2Zmc2V0SGVpZ2h0IC0gdGh1bWIub2Zmc2V0SGVpZ2h0IC8gMikgLyAzNjApO1xuXHQgICAgfSxcblx0ICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge1xuXHQgICAgICB0aGlzLnRodW1iTGVmdCA9IHRoaXMuZ2V0VGh1bWJMZWZ0KCk7XG5cdCAgICAgIHRoaXMudGh1bWJUb3AgPSB0aGlzLmdldFRodW1iVG9wKCk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdCAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICB2YXIgXyRyZWZzID0gdGhpcy4kcmVmcyxcblx0ICAgICAgICBiYXIgPSBfJHJlZnMuYmFyLFxuXHQgICAgICAgIHRodW1iID0gXyRyZWZzLnRodW1iO1xuXG5cblx0ICAgIHZhciBkcmFnQ29uZmlnID0ge1xuXHQgICAgICBkcmFnOiBmdW5jdGlvbiBkcmFnKGV2ZW50KSB7XG5cdCAgICAgICAgX3RoaXMuaGFuZGxlRHJhZyhldmVudCk7XG5cdCAgICAgIH0sXG5cdCAgICAgIGVuZDogZnVuY3Rpb24gZW5kKGV2ZW50KSB7XG5cdCAgICAgICAgX3RoaXMuaGFuZGxlRHJhZyhldmVudCk7XG5cdCAgICAgIH1cblx0ICAgIH07XG5cblx0ICAgICgwLCBfZHJhZ2dhYmxlMi5kZWZhdWx0KShiYXIsIGRyYWdDb25maWcpO1xuXHQgICAgKDAsIF9kcmFnZ2FibGUyLmRlZmF1bHQpKHRodW1iLCBkcmFnQ29uZmlnKTtcblx0ICAgIHRoaXMudXBkYXRlKCk7XG5cdCAgfVxuXHR9OyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG4vKioqLyB9LFxuLyogMzY4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItaHVlLXNsaWRlclwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2lzLXZlcnRpY2FsJzogX3ZtLnZlcnRpY2FsXG5cdCAgICB9XG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICByZWY6IFwiYmFyXCIsXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1odWUtc2xpZGVyX19iYXJcIixcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLmhhbmRsZUNsaWNrXG5cdCAgICB9XG5cdCAgfSksIF9jKCdkaXYnLCB7XG5cdCAgICByZWY6IFwidGh1bWJcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLWh1ZS1zbGlkZXJfX3RodW1iXCIsXG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgbGVmdDogX3ZtLnRodW1iTGVmdCArICdweCcsXG5cdCAgICAgIHRvcDogX3ZtLnRodW1iVG9wICsgJ3B4J1xuXHQgICAgfSlcblx0ICB9KV0pXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDM2OSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzNzApLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzNzEpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAzNzAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfZHJhZ2dhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNjQpO1xuXG5cdHZhciBfZHJhZ2dhYmxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RyYWdnYWJsZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ2VsLWNvbG9yLWFscGhhLXNsaWRlcicsXG5cblx0ICBwcm9wczoge1xuXHQgICAgY29sb3I6IHtcblx0ICAgICAgcmVxdWlyZWQ6IHRydWVcblx0ICAgIH0sXG5cdCAgICB2ZXJ0aWNhbDogQm9vbGVhblxuXHQgIH0sXG5cblx0ICB3YXRjaDoge1xuXHQgICAgJ2NvbG9yLl9hbHBoYSc6IGZ1bmN0aW9uIGNvbG9yX2FscGhhKCkge1xuXHQgICAgICB0aGlzLnVwZGF0ZSgpO1xuXHQgICAgfSxcblx0ICAgICdjb2xvci52YWx1ZSc6IGZ1bmN0aW9uIGNvbG9yVmFsdWUoKSB7XG5cdCAgICAgIHRoaXMudXBkYXRlKCk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuXHQgICAgICB2YXIgdGh1bWIgPSB0aGlzLiRyZWZzLnRodW1iO1xuXHQgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXG5cdCAgICAgIGlmICh0YXJnZXQgIT09IHRodW1iKSB7XG5cdCAgICAgICAgdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGhhbmRsZURyYWc6IGZ1bmN0aW9uIGhhbmRsZURyYWcoZXZlbnQpIHtcblx0ICAgICAgdmFyIHJlY3QgPSB0aGlzLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0ICAgICAgdmFyIHRodW1iID0gdGhpcy4kcmVmcy50aHVtYjtcblxuXG5cdCAgICAgIGlmICghdGhpcy52ZXJ0aWNhbCkge1xuXHQgICAgICAgIHZhciBsZWZ0ID0gZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdDtcblx0ICAgICAgICBsZWZ0ID0gTWF0aC5tYXgodGh1bWIub2Zmc2V0V2lkdGggLyAyLCBsZWZ0KTtcblx0ICAgICAgICBsZWZ0ID0gTWF0aC5taW4obGVmdCwgcmVjdC53aWR0aCAtIHRodW1iLm9mZnNldFdpZHRoIC8gMik7XG5cblx0ICAgICAgICB0aGlzLmNvbG9yLnNldCgnYWxwaGEnLCBNYXRoLnJvdW5kKChsZWZ0IC0gdGh1bWIub2Zmc2V0V2lkdGggLyAyKSAvIChyZWN0LndpZHRoIC0gdGh1bWIub2Zmc2V0V2lkdGgpICogMTAwKSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdmFyIHRvcCA9IGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcDtcblx0ICAgICAgICB0b3AgPSBNYXRoLm1heCh0aHVtYi5vZmZzZXRIZWlnaHQgLyAyLCB0b3ApO1xuXHQgICAgICAgIHRvcCA9IE1hdGgubWluKHRvcCwgcmVjdC5oZWlnaHQgLSB0aHVtYi5vZmZzZXRIZWlnaHQgLyAyKTtcblxuXHQgICAgICAgIHRoaXMuY29sb3Iuc2V0KCdhbHBoYScsIE1hdGgucm91bmQoKHRvcCAtIHRodW1iLm9mZnNldEhlaWdodCAvIDIpIC8gKHJlY3QuaGVpZ2h0IC0gdGh1bWIub2Zmc2V0SGVpZ2h0KSAqIDEwMCkpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZ2V0VGh1bWJMZWZ0OiBmdW5jdGlvbiBnZXRUaHVtYkxlZnQoKSB7XG5cdCAgICAgIGlmICh0aGlzLnZlcnRpY2FsKSByZXR1cm4gMDtcblx0ICAgICAgdmFyIGVsID0gdGhpcy4kZWw7XG5cdCAgICAgIHZhciBhbHBoYSA9IHRoaXMuY29sb3IuX2FscGhhO1xuXG5cdCAgICAgIGlmICghZWwpIHJldHVybiAwO1xuXHQgICAgICB2YXIgdGh1bWIgPSB0aGlzLiRyZWZzLnRodW1iO1xuXHQgICAgICByZXR1cm4gTWF0aC5yb3VuZChhbHBoYSAqIChlbC5vZmZzZXRXaWR0aCAtIHRodW1iLm9mZnNldFdpZHRoIC8gMikgLyAxMDApO1xuXHQgICAgfSxcblx0ICAgIGdldFRodW1iVG9wOiBmdW5jdGlvbiBnZXRUaHVtYlRvcCgpIHtcblx0ICAgICAgaWYgKCF0aGlzLnZlcnRpY2FsKSByZXR1cm4gMDtcblx0ICAgICAgdmFyIGVsID0gdGhpcy4kZWw7XG5cdCAgICAgIHZhciBhbHBoYSA9IHRoaXMuY29sb3IuX2FscGhhO1xuXG5cdCAgICAgIGlmICghZWwpIHJldHVybiAwO1xuXHQgICAgICB2YXIgdGh1bWIgPSB0aGlzLiRyZWZzLnRodW1iO1xuXHQgICAgICByZXR1cm4gTWF0aC5yb3VuZChhbHBoYSAqIChlbC5vZmZzZXRIZWlnaHQgLSB0aHVtYi5vZmZzZXRIZWlnaHQgLyAyKSAvIDEwMCk7XG5cdCAgICB9LFxuXHQgICAgZ2V0QmFja2dyb3VuZDogZnVuY3Rpb24gZ2V0QmFja2dyb3VuZCgpIHtcblx0ICAgICAgaWYgKHRoaXMuY29sb3IgJiYgdGhpcy5jb2xvci52YWx1ZSkge1xuXHQgICAgICAgIHZhciBfY29sb3IkdG9SZ2IgPSB0aGlzLmNvbG9yLnRvUmdiKCksXG5cdCAgICAgICAgICAgIHIgPSBfY29sb3IkdG9SZ2Iucixcblx0ICAgICAgICAgICAgZyA9IF9jb2xvciR0b1JnYi5nLFxuXHQgICAgICAgICAgICBiID0gX2NvbG9yJHRvUmdiLmI7XG5cblx0ICAgICAgICByZXR1cm4gJ2xpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgnICsgciArICcsICcgKyBnICsgJywgJyArIGIgKyAnLCAwKSAwJSwgcmdiYSgnICsgciArICcsICcgKyBnICsgJywgJyArIGIgKyAnLCAxKSAxMDAlKSc7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIG51bGw7XG5cdCAgICB9LFxuXHQgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG5cdCAgICAgIHRoaXMudGh1bWJMZWZ0ID0gdGhpcy5nZXRUaHVtYkxlZnQoKTtcblx0ICAgICAgdGhpcy50aHVtYlRvcCA9IHRoaXMuZ2V0VGh1bWJUb3AoKTtcblx0ICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5nZXRCYWNrZ3JvdW5kKCk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICB0aHVtYkxlZnQ6IDAsXG5cdCAgICAgIHRodW1iVG9wOiAwLFxuXHQgICAgICBiYWNrZ3JvdW5kOiBudWxsXG5cdCAgICB9O1xuXHQgIH0sXG5cdCAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcblx0ICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgIHZhciBfJHJlZnMgPSB0aGlzLiRyZWZzLFxuXHQgICAgICAgIGJhciA9IF8kcmVmcy5iYXIsXG5cdCAgICAgICAgdGh1bWIgPSBfJHJlZnMudGh1bWI7XG5cblxuXHQgICAgdmFyIGRyYWdDb25maWcgPSB7XG5cdCAgICAgIGRyYWc6IGZ1bmN0aW9uIGRyYWcoZXZlbnQpIHtcblx0ICAgICAgICBfdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTtcblx0ICAgICAgfSxcblx0ICAgICAgZW5kOiBmdW5jdGlvbiBlbmQoZXZlbnQpIHtcblx0ICAgICAgICBfdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTtcblx0ICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgKDAsIF9kcmFnZ2FibGUyLmRlZmF1bHQpKGJhciwgZHJhZ0NvbmZpZyk7XG5cdCAgICAoMCwgX2RyYWdnYWJsZTIuZGVmYXVsdCkodGh1bWIsIGRyYWdDb25maWcpO1xuXHQgICAgdGhpcy51cGRhdGUoKTtcblx0ICB9XG5cdH07IC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cbi8qKiovIH0sXG4vKiAzNzEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1hbHBoYS1zbGlkZXJcIixcblx0ICAgIGNsYXNzOiB7XG5cdCAgICAgICdpcy12ZXJ0aWNhbCc6IF92bS52ZXJ0aWNhbFxuXHQgICAgfVxuXHQgIH0sIFtfYygnZGl2Jywge1xuXHQgICAgcmVmOiBcImJhclwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItYWxwaGEtc2xpZGVyX19iYXJcIixcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICBiYWNrZ3JvdW5kOiBfdm0uYmFja2dyb3VuZFxuXHQgICAgfSksXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5oYW5kbGVDbGlja1xuXHQgICAgfVxuXHQgIH0pLCBfYygnZGl2Jywge1xuXHQgICAgcmVmOiBcInRodW1iXCIsXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1hbHBoYS1zbGlkZXJfX3RodW1iXCIsXG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgbGVmdDogX3ZtLnRodW1iTGVmdCArICdweCcsXG5cdCAgICAgIHRvcDogX3ZtLnRodW1iVG9wICsgJ3B4J1xuXHQgICAgfSlcblx0ICB9KV0pXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDM3MiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ3RyYW5zaXRpb24nLCB7XG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcIm5hbWVcIjogXCJlbC16b29tLWluLXRvcFwiXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJhZnRlci1sZWF2ZVwiOiBfdm0uZG9EZXN0cm95XG5cdCAgICB9XG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcInNob3dcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcblx0ICAgICAgdmFsdWU6IChfdm0uc2hvd1BvcHBlciksXG5cdCAgICAgIGV4cHJlc3Npb246IFwic2hvd1BvcHBlclwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLWRyb3Bkb3duXCJcblx0ICB9LCBbX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLWRyb3Bkb3duX19tYWluLXdyYXBwZXJcIlxuXHQgIH0sIFtfYygnaHVlLXNsaWRlcicsIHtcblx0ICAgIHJlZjogXCJodWVcIixcblx0ICAgIHN0YXRpY1N0eWxlOiB7XG5cdCAgICAgIFwiZmxvYXRcIjogXCJyaWdodFwiXG5cdCAgICB9LFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJjb2xvclwiOiBfdm0uY29sb3IsXG5cdCAgICAgIFwidmVydGljYWxcIjogXCJcIlxuXHQgICAgfVxuXHQgIH0pLCBfYygnc3YtcGFuZWwnLCB7XG5cdCAgICByZWY6IFwic2xcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwiY29sb3JcIjogX3ZtLmNvbG9yXG5cdCAgICB9XG5cdCAgfSldLCAxKSwgKF92bS5zaG93QWxwaGEpID8gX2MoJ2FscGhhLXNsaWRlcicsIHtcblx0ICAgIHJlZjogXCJhbHBoYVwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJjb2xvclwiOiBfdm0uY29sb3Jcblx0ICAgIH1cblx0ICB9KSA6IF92bS5fZSgpLCBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItZHJvcGRvd25fX2J0bnNcIlxuXHQgIH0sIFtfYygnc3BhbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLWRyb3Bkb3duX192YWx1ZVwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLmN1cnJlbnRDb2xvcikpXSksIF9jKCdhJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItZHJvcGRvd25fX2xpbmstYnRuXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcImhyZWZcIjogXCJKYXZhU2NyaXB0OlwiXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uJGVtaXQoJ2NsZWFyJylcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC5jb2xvcnBpY2tlci5jbGVhcicpKSldKSwgX2MoJ2J1dHRvbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLWRyb3Bkb3duX19idG5cIixcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLmNvbmZpcm1WYWx1ZVxuXHQgICAgfVxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC5jb2xvcnBpY2tlci5jb25maXJtJykpKV0pXSldLCAxKV0pXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfSxcbi8qIDM3MyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwiY2xpY2tvdXRzaWRlXCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1jbGlja291dHNpZGVcIixcblx0ICAgICAgdmFsdWU6IChfdm0uaGlkZSksXG5cdCAgICAgIGV4cHJlc3Npb246IFwiaGlkZVwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLXBpY2tlclwiXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1waWNrZXJfX3RyaWdnZXJcIixcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLnNob3dQaWNrZXIgPSAhX3ZtLnNob3dQaWNrZXJcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFtfYygnc3BhbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLXBpY2tlcl9fY29sb3JcIixcblx0ICAgIGNsYXNzOiB7XG5cdCAgICAgICdpcy1hbHBoYSc6IF92bS5zaG93QWxwaGFcblx0ICAgIH1cblx0ICB9LCBbX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1waWNrZXJfX2NvbG9yLWlubmVyXCIsXG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgYmFja2dyb3VuZENvbG9yOiBfdm0uZGlzcGxheWVkQ29sb3Jcblx0ICAgIH0pXG5cdCAgfSksICghX3ZtLnZhbHVlICYmICFfdm0uc2hvd1BhbmVsQ29sb3IpID8gX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1waWNrZXJfX2VtcHR5IGVsLWljb24tY2xvc2VcIlxuXHQgIH0pIDogX3ZtLl9lKCldKSwgX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1waWNrZXJfX2ljb24gZWwtaWNvbi1jYXJldC1ib3R0b21cIlxuXHQgIH0pXSksIF9jKCdwaWNrZXItZHJvcGRvd24nLCB7XG5cdCAgICByZWY6IFwiZHJvcGRvd25cIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLXBpY2tlcl9fcGFuZWxcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwiY29sb3JcIjogX3ZtLmNvbG9yLFxuXHQgICAgICBcInNob3ctYWxwaGFcIjogX3ZtLnNob3dBbHBoYVxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwicGlja1wiOiBfdm0uY29uZmlybVZhbHVlLFxuXHQgICAgICBcImNsZWFyXCI6IF92bS5jbGVhclZhbHVlXG5cdCAgICB9LFxuXHQgICAgbW9kZWw6IHtcblx0ICAgICAgdmFsdWU6IChfdm0uc2hvd1BpY2tlciksXG5cdCAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcblx0ICAgICAgICBfdm0uc2hvd1BpY2tlciA9ICQkdlxuXHQgICAgICB9LFxuXHQgICAgICBleHByZXNzaW9uOiBcInNob3dQaWNrZXJcIlxuXHQgICAgfVxuXHQgIH0pXSwgMSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMzc0ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX21haW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3NSk7XG5cblx0dmFyIF9tYWluMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21haW4pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X21haW4yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9tYWluMi5kZWZhdWx0Lm5hbWUsIF9tYWluMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfbWFpbjIuZGVmYXVsdDtcblxuLyoqKi8gfSxcbi8qIDM3NSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0dmFyIENvbXBvbmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNSkoXG5cdCAgLyogc2NyaXB0ICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzNzYpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzODApLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG4vKiAzNzYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5cdHZhciBfYnV0dG9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XG5cblx0dmFyIF9idXR0b24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYnV0dG9uKTtcblxuXHR2YXIgX2VtaXR0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblxuXHR2YXIgX2VtaXR0ZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW1pdHRlcik7XG5cblx0dmFyIF9sb2NhbGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcblxuXHR2YXIgX2xvY2FsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sb2NhbGUpO1xuXG5cdHZhciBfdHJhbnNmZXJQYW5lbCA9IF9fd2VicGFja19yZXF1aXJlX18oMzc3KTtcblxuXHR2YXIgX3RyYW5zZmVyUGFuZWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdHJhbnNmZXJQYW5lbCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBuYW1lOiAnRWxUcmFuc2ZlcicsXG5cblx0ICBtaXhpbnM6IFtfZW1pdHRlcjIuZGVmYXVsdCwgX2xvY2FsZTIuZGVmYXVsdF0sXG5cblx0ICBjb21wb25lbnRzOiB7XG5cdCAgICBUcmFuc2ZlclBhbmVsOiBfdHJhbnNmZXJQYW5lbDIuZGVmYXVsdCxcblx0ICAgIEVsQnV0dG9uOiBfYnV0dG9uMi5kZWZhdWx0XG5cdCAgfSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBkYXRhOiB7XG5cdCAgICAgIHR5cGU6IEFycmF5LFxuXHQgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcblx0ICAgICAgICByZXR1cm4gW107XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICB0aXRsZXM6IHtcblx0ICAgICAgdHlwZTogQXJyYXksXG5cdCAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuXHQgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGJ1dHRvblRleHRzOiB7XG5cdCAgICAgIHR5cGU6IEFycmF5LFxuXHQgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcblx0ICAgICAgICByZXR1cm4gW107XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBmaWx0ZXJQbGFjZWhvbGRlcjoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICcnXG5cdCAgICB9LFxuXHQgICAgZmlsdGVyTWV0aG9kOiBGdW5jdGlvbixcblx0ICAgIGxlZnREZWZhdWx0Q2hlY2tlZDoge1xuXHQgICAgICB0eXBlOiBBcnJheSxcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmlnaHREZWZhdWx0Q2hlY2tlZDoge1xuXHQgICAgICB0eXBlOiBBcnJheSxcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVuZGVyQ29udGVudDogRnVuY3Rpb24sXG5cdCAgICB2YWx1ZToge1xuXHQgICAgICB0eXBlOiBBcnJheSxcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuIFtdO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZm9vdGVyRm9ybWF0OiB7XG5cdCAgICAgIHR5cGU6IE9iamVjdCxcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuIHt9O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZmlsdGVyYWJsZTogQm9vbGVhbixcblx0ICAgIHByb3BzOiB7XG5cdCAgICAgIHR5cGU6IE9iamVjdCxcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgIGxhYmVsOiAnbGFiZWwnLFxuXHQgICAgICAgICAga2V5OiAna2V5Jyxcblx0ICAgICAgICAgIGRpc2FibGVkOiAnZGlzYWJsZWQnXG5cdCAgICAgICAgfTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgbGVmdENoZWNrZWQ6IFtdLFxuXHQgICAgICByaWdodENoZWNrZWQ6IFtdXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBzb3VyY2VEYXRhOiBmdW5jdGlvbiBzb3VyY2VEYXRhKCkge1xuXHQgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgcmV0dXJuIF90aGlzLnZhbHVlLmluZGV4T2YoaXRlbVtfdGhpcy5wcm9wcy5rZXldKSA9PT0gLTE7XG5cdCAgICAgIH0pO1xuXHQgICAgfSxcblx0ICAgIHRhcmdldERhdGE6IGZ1bmN0aW9uIHRhcmdldERhdGEoKSB7XG5cdCAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgICAgIHJldHVybiB0aGlzLmRhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgcmV0dXJuIF90aGlzMi52YWx1ZS5pbmRleE9mKGl0ZW1bX3RoaXMyLnByb3BzLmtleV0pID4gLTE7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICB3YXRjaDoge1xuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHZhbCkge1xuXHQgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgdmFsKTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgb25Tb3VyY2VDaGVja2VkQ2hhbmdlOiBmdW5jdGlvbiBvblNvdXJjZUNoZWNrZWRDaGFuZ2UodmFsKSB7XG5cdCAgICAgIHRoaXMubGVmdENoZWNrZWQgPSB2YWw7XG5cdCAgICB9LFxuXHQgICAgb25UYXJnZXRDaGVja2VkQ2hhbmdlOiBmdW5jdGlvbiBvblRhcmdldENoZWNrZWRDaGFuZ2UodmFsKSB7XG5cdCAgICAgIHRoaXMucmlnaHRDaGVja2VkID0gdmFsO1xuXHQgICAgfSxcblx0ICAgIGFkZFRvTGVmdDogZnVuY3Rpb24gYWRkVG9MZWZ0KCkge1xuXHQgICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZS5zbGljZSgpO1xuXHQgICAgICB0aGlzLnJpZ2h0Q2hlY2tlZC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgdmFyIGluZGV4ID0gY3VycmVudFZhbHVlLmluZGV4T2YoaXRlbSk7XG5cdCAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcblx0ICAgICAgICAgIGN1cnJlbnRWYWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgY3VycmVudFZhbHVlKTtcblx0ICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY3VycmVudFZhbHVlLCAnbGVmdCcsIHRoaXMucmlnaHRDaGVja2VkKTtcblx0ICAgIH0sXG5cdCAgICBhZGRUb1JpZ2h0OiBmdW5jdGlvbiBhZGRUb1JpZ2h0KCkge1xuXHQgICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuXHQgICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZS5zbGljZSgpO1xuXHQgICAgICB0aGlzLmxlZnRDaGVja2VkLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgICBpZiAoX3RoaXMzLnZhbHVlLmluZGV4T2YoaXRlbSkgPT09IC0xKSB7XG5cdCAgICAgICAgICBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUuY29uY2F0KGl0ZW0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgY3VycmVudFZhbHVlKTtcblx0ICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY3VycmVudFZhbHVlLCAncmlnaHQnLCB0aGlzLmxlZnRDaGVja2VkKTtcblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzNzcgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzc4KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzc5KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuLyogMzc4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2NoZWNrYm94R3JvdXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Myk7XG5cblx0dmFyIF9jaGVja2JveEdyb3VwMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NoZWNrYm94R3JvdXApO1xuXG5cdHZhciBfY2hlY2tib3ggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMCk7XG5cblx0dmFyIF9jaGVja2JveDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jaGVja2JveCk7XG5cblx0dmFyIF9pbnB1dCA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xuXG5cdHZhciBfaW5wdXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5wdXQpO1xuXG5cdHZhciBfbG9jYWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG5cblx0dmFyIF9sb2NhbGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9jYWxlKTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG1peGluczogW19sb2NhbGUyLmRlZmF1bHRdLFxuXG5cdCAgbmFtZTogJ0VsVHJhbnNmZXJQYW5lbCcsXG5cblx0ICBjb21wb25lbnROYW1lOiAnRWxUcmFuc2ZlclBhbmVsJyxcblxuXHQgIGNvbXBvbmVudHM6IHtcblx0ICAgIEVsQ2hlY2tib3hHcm91cDogX2NoZWNrYm94R3JvdXAyLmRlZmF1bHQsXG5cdCAgICBFbENoZWNrYm94OiBfY2hlY2tib3gyLmRlZmF1bHQsXG5cdCAgICBFbElucHV0OiBfaW5wdXQyLmRlZmF1bHQsXG5cdCAgICBPcHRpb25Db250ZW50OiB7XG5cdCAgICAgIHByb3BzOiB7XG5cdCAgICAgICAgb3B0aW9uOiBPYmplY3Rcblx0ICAgICAgfSxcblx0ICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuXHQgICAgICAgIHZhciBnZXRQYXJlbnQgPSBmdW5jdGlvbiBnZXRQYXJlbnQodm0pIHtcblx0ICAgICAgICAgIGlmICh2bS4kb3B0aW9ucy5jb21wb25lbnROYW1lID09PSAnRWxUcmFuc2ZlclBhbmVsJykge1xuXHQgICAgICAgICAgICByZXR1cm4gdm07XG5cdCAgICAgICAgICB9IGVsc2UgaWYgKHZtLiRwYXJlbnQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGdldFBhcmVudCh2bS4kcGFyZW50KTtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHJldHVybiB2bTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9O1xuXHQgICAgICAgIHZhciBwYXJlbnQgPSBnZXRQYXJlbnQodGhpcyk7XG5cdCAgICAgICAgcmV0dXJuIHBhcmVudC5yZW5kZXJDb250ZW50ID8gcGFyZW50LnJlbmRlckNvbnRlbnQoaCwgdGhpcy5vcHRpb24pIDogaChcblx0ICAgICAgICAgICdzcGFuJyxcblx0ICAgICAgICAgIG51bGwsXG5cdCAgICAgICAgICBbdGhpcy5vcHRpb25bcGFyZW50LmxhYmVsUHJvcF0gfHwgdGhpcy5vcHRpb25bcGFyZW50LmtleVByb3BdXVxuXHQgICAgICAgICk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIGRhdGE6IHtcblx0ICAgICAgdHlwZTogQXJyYXksXG5cdCAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuXHQgICAgICAgIHJldHVybiBbXTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlbmRlckNvbnRlbnQ6IEZ1bmN0aW9uLFxuXHQgICAgcGxhY2Vob2xkZXI6IFN0cmluZyxcblx0ICAgIHRpdGxlOiBTdHJpbmcsXG5cdCAgICBmaWx0ZXJhYmxlOiBCb29sZWFuLFxuXHQgICAgZm9vdGVyRm9ybWF0OiBPYmplY3QsXG5cdCAgICBmaWx0ZXJNZXRob2Q6IEZ1bmN0aW9uLFxuXHQgICAgZGVmYXVsdENoZWNrZWQ6IEFycmF5LFxuXHQgICAgcHJvcHM6IE9iamVjdFxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgY2hlY2tlZDogW10sXG5cdCAgICAgIGFsbENoZWNrZWQ6IGZhbHNlLFxuXHQgICAgICBxdWVyeTogJycsXG5cdCAgICAgIGlucHV0SG92ZXI6IGZhbHNlXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIHdhdGNoOiB7XG5cdCAgICBjaGVja2VkOiBmdW5jdGlvbiBjaGVja2VkKHZhbCkge1xuXHQgICAgICB0aGlzLnVwZGF0ZUFsbENoZWNrZWQoKTtcblx0ICAgICAgdGhpcy4kZW1pdCgnY2hlY2tlZC1jaGFuZ2UnLCB2YWwpO1xuXHQgICAgfSxcblx0ICAgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgdmFyIGNoZWNrZWQgPSBbXTtcblx0ICAgICAgdmFyIGZpbHRlcmVkRGF0YUtleXMgPSB0aGlzLmZpbHRlcmVkRGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgICByZXR1cm4gaXRlbVtfdGhpcy5rZXlQcm9wXTtcblx0ICAgICAgfSk7XG5cdCAgICAgIHRoaXMuY2hlY2tlZC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgaWYgKGZpbHRlcmVkRGF0YUtleXMuaW5kZXhPZihpdGVtKSA+IC0xKSB7XG5cdCAgICAgICAgICBjaGVja2VkLnB1c2goaXRlbSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgICAgdGhpcy5jaGVja2VkID0gY2hlY2tlZDtcblx0ICAgIH0sXG5cdCAgICBjaGVja2FibGVEYXRhOiBmdW5jdGlvbiBjaGVja2FibGVEYXRhKCkge1xuXHQgICAgICB0aGlzLnVwZGF0ZUFsbENoZWNrZWQoKTtcblx0ICAgIH0sXG5cblxuXHQgICAgZGVmYXVsdENoZWNrZWQ6IHtcblx0ICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuXHQgICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbCwgb2xkVmFsKSB7XG5cdCAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cblx0ICAgICAgICBpZiAob2xkVmFsICYmIHZhbC5sZW5ndGggPT09IG9sZFZhbC5sZW5ndGggJiYgdmFsLmV2ZXJ5KGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgICByZXR1cm4gb2xkVmFsLmluZGV4T2YoaXRlbSkgPiAtMTtcblx0ICAgICAgICB9KSkgcmV0dXJuO1xuXHQgICAgICAgIHZhciBjaGVja2VkID0gW107XG5cdCAgICAgICAgdmFyIGNoZWNrYWJsZURhdGFLZXlzID0gdGhpcy5jaGVja2FibGVEYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHQgICAgICAgICAgcmV0dXJuIGl0ZW1bX3RoaXMyLmtleVByb3BdO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHZhbC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgICBpZiAoY2hlY2thYmxlRGF0YUtleXMuaW5kZXhPZihpdGVtKSA+IC0xKSB7XG5cdCAgICAgICAgICAgIGNoZWNrZWQucHVzaChpdGVtKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICB0aGlzLmNoZWNrZWQgPSBjaGVja2VkO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBmaWx0ZXJlZERhdGE6IGZ1bmN0aW9uIGZpbHRlcmVkRGF0YSgpIHtcblx0ICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cblx0ICAgICAgcmV0dXJuIHRoaXMuZGF0YS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgICBpZiAodHlwZW9mIF90aGlzMy5maWx0ZXJNZXRob2QgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgICAgIHJldHVybiBfdGhpczMuZmlsdGVyTWV0aG9kKF90aGlzMy5xdWVyeSwgaXRlbSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHZhciBsYWJlbCA9IGl0ZW1bX3RoaXMzLmxhYmVsUHJvcF0gfHwgaXRlbVtfdGhpczMua2V5UHJvcF0udG9TdHJpbmcoKTtcblx0ICAgICAgICAgIHJldHVybiBsYWJlbC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoX3RoaXMzLnF1ZXJ5LnRvTG93ZXJDYXNlKCkpID4gLTE7XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgIH0sXG5cdCAgICBjaGVja2FibGVEYXRhOiBmdW5jdGlvbiBjaGVja2FibGVEYXRhKCkge1xuXHQgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuXHQgICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZERhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgcmV0dXJuICFpdGVtW190aGlzNC5kaXNhYmxlZFByb3BdO1xuXHQgICAgICB9KTtcblx0ICAgIH0sXG5cdCAgICBjaGVja2VkU3VtbWFyeTogZnVuY3Rpb24gY2hlY2tlZFN1bW1hcnkoKSB7XG5cdCAgICAgIHZhciBjaGVja2VkTGVuZ3RoID0gdGhpcy5jaGVja2VkLmxlbmd0aDtcblx0ICAgICAgdmFyIGRhdGFMZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xuXHQgICAgICB2YXIgX2Zvb3RlckZvcm1hdCA9IHRoaXMuZm9vdGVyRm9ybWF0LFxuXHQgICAgICAgICAgbm9DaGVja2VkID0gX2Zvb3RlckZvcm1hdC5ub0NoZWNrZWQsXG5cdCAgICAgICAgICBoYXNDaGVja2VkID0gX2Zvb3RlckZvcm1hdC5oYXNDaGVja2VkO1xuXG5cdCAgICAgIGlmIChub0NoZWNrZWQgJiYgaGFzQ2hlY2tlZCkge1xuXHQgICAgICAgIHJldHVybiBjaGVja2VkTGVuZ3RoID4gMCA/IGhhc0NoZWNrZWQucmVwbGFjZSgvXFwke2NoZWNrZWR9L2csIGNoZWNrZWRMZW5ndGgpLnJlcGxhY2UoL1xcJHt0b3RhbH0vZywgZGF0YUxlbmd0aCkgOiBub0NoZWNrZWQucmVwbGFjZSgvXFwke3RvdGFsfS9nLCBkYXRhTGVuZ3RoKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gY2hlY2tlZExlbmd0aCA+IDAgPyB0aGlzLnQoJ2VsLnRyYW5zZmVyLmhhc0NoZWNrZWRGb3JtYXQnLCB7IHRvdGFsOiBkYXRhTGVuZ3RoLCBjaGVja2VkOiBjaGVja2VkTGVuZ3RoIH0pIDogdGhpcy50KCdlbC50cmFuc2Zlci5ub0NoZWNrZWRGb3JtYXQnLCB7IHRvdGFsOiBkYXRhTGVuZ3RoIH0pO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaXNJbmRldGVybWluYXRlOiBmdW5jdGlvbiBpc0luZGV0ZXJtaW5hdGUoKSB7XG5cdCAgICAgIHZhciBjaGVja2VkTGVuZ3RoID0gdGhpcy5jaGVja2VkLmxlbmd0aDtcblx0ICAgICAgcmV0dXJuIGNoZWNrZWRMZW5ndGggPiAwICYmIGNoZWNrZWRMZW5ndGggPCB0aGlzLmNoZWNrYWJsZURhdGEubGVuZ3RoO1xuXHQgICAgfSxcblx0ICAgIGhhc05vTWF0Y2g6IGZ1bmN0aW9uIGhhc05vTWF0Y2goKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnF1ZXJ5Lmxlbmd0aCA+IDAgJiYgdGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoID09PSAwO1xuXHQgICAgfSxcblx0ICAgIGlucHV0SWNvbjogZnVuY3Rpb24gaW5wdXRJY29uKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5xdWVyeS5sZW5ndGggPiAwICYmIHRoaXMuaW5wdXRIb3ZlciA/ICdjaXJjbGUtY2xvc2UnIDogJ3NlYXJjaCc7XG5cdCAgICB9LFxuXHQgICAgbGFiZWxQcm9wOiBmdW5jdGlvbiBsYWJlbFByb3AoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnByb3BzLmxhYmVsIHx8ICdsYWJlbCc7XG5cdCAgICB9LFxuXHQgICAga2V5UHJvcDogZnVuY3Rpb24ga2V5UHJvcCgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMucHJvcHMua2V5IHx8ICdrZXknO1xuXHQgICAgfSxcblx0ICAgIGRpc2FibGVkUHJvcDogZnVuY3Rpb24gZGlzYWJsZWRQcm9wKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5wcm9wcy5kaXNhYmxlZCB8fCAnZGlzYWJsZWQnO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICB1cGRhdGVBbGxDaGVja2VkOiBmdW5jdGlvbiB1cGRhdGVBbGxDaGVja2VkKCkge1xuXHQgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuXHQgICAgICB2YXIgY2hlY2thYmxlRGF0YUtleXMgPSB0aGlzLmNoZWNrYWJsZURhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgcmV0dXJuIGl0ZW1bX3RoaXM1LmtleVByb3BdO1xuXHQgICAgICB9KTtcblx0ICAgICAgdGhpcy5hbGxDaGVja2VkID0gY2hlY2thYmxlRGF0YUtleXMubGVuZ3RoID4gMCAmJiBjaGVja2FibGVEYXRhS2V5cy5ldmVyeShmdW5jdGlvbiAoaXRlbSkge1xuXHQgICAgICAgIHJldHVybiBfdGhpczUuY2hlY2tlZC5pbmRleE9mKGl0ZW0pID4gLTE7XG5cdCAgICAgIH0pO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUFsbENoZWNrZWRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUFsbENoZWNrZWRDaGFuZ2UodmFsdWUpIHtcblx0ICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cblx0ICAgICAgdGhpcy5jaGVja2VkID0gdmFsdWUudGFyZ2V0LmNoZWNrZWQgPyB0aGlzLmNoZWNrYWJsZURhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgcmV0dXJuIGl0ZW1bX3RoaXM2LmtleVByb3BdO1xuXHQgICAgICB9KSA6IFtdO1xuXHQgICAgfSxcblx0ICAgIGNsZWFyUXVlcnk6IGZ1bmN0aW9uIGNsZWFyUXVlcnkoKSB7XG5cdCAgICAgIGlmICh0aGlzLmlucHV0SWNvbiA9PT0gJ2NpcmNsZS1jbG9zZScpIHtcblx0ICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG4vKiAzNzkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10cmFuc2Zlci1wYW5lbFwiXG5cdCAgfSwgW19jKCdwJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXItcGFuZWxfX2hlYWRlclwiXG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLnRpdGxlKSldKSwgX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRyYW5zZmVyLXBhbmVsX19ib2R5XCJcblx0ICB9LCBbKF92bS5maWx0ZXJhYmxlKSA/IF9jKCdlbC1pbnB1dCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRyYW5zZmVyLXBhbmVsX19maWx0ZXJcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwic2l6ZVwiOiBcInNtYWxsXCIsXG5cdCAgICAgIFwicGxhY2Vob2xkZXJcIjogX3ZtLnBsYWNlaG9sZGVyLFxuXHQgICAgICBcImljb25cIjogX3ZtLmlucHV0SWNvblxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLmNsZWFyUXVlcnlcblx0ICAgIH0sXG5cdCAgICBuYXRpdmVPbjoge1xuXHQgICAgICBcIm1vdXNlZW50ZXJcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgX3ZtLmlucHV0SG92ZXIgPSB0cnVlXG5cdCAgICAgIH0sXG5cdCAgICAgIFwibW91c2VsZWF2ZVwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uaW5wdXRIb3ZlciA9IGZhbHNlXG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBtb2RlbDoge1xuXHQgICAgICB2YWx1ZTogKF92bS5xdWVyeSksXG5cdCAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcblx0ICAgICAgICBfdm0ucXVlcnkgPSAkJHZcblx0ICAgICAgfSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJxdWVyeVwiXG5cdCAgICB9XG5cdCAgfSkgOiBfdm0uX2UoKSwgX2MoJ2VsLWNoZWNrYm94LWdyb3VwJywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoIV92bS5oYXNOb01hdGNoICYmIF92bS5kYXRhLmxlbmd0aCA+IDApLFxuXHQgICAgICBleHByZXNzaW9uOiBcIiFoYXNOb01hdGNoICYmIGRhdGEubGVuZ3RoID4gMFwiXG5cdCAgICB9XSxcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXRyYW5zZmVyLXBhbmVsX19saXN0XCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaXMtZmlsdGVyYWJsZSc6IF92bS5maWx0ZXJhYmxlXG5cdCAgICB9LFxuXHQgICAgbW9kZWw6IHtcblx0ICAgICAgdmFsdWU6IChfdm0uY2hlY2tlZCksXG5cdCAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcblx0ICAgICAgICBfdm0uY2hlY2tlZCA9ICQkdlxuXHQgICAgICB9LFxuXHQgICAgICBleHByZXNzaW9uOiBcImNoZWNrZWRcIlxuXHQgICAgfVxuXHQgIH0sIF92bS5fbCgoX3ZtLmZpbHRlcmVkRGF0YSksIGZ1bmN0aW9uKGl0ZW0pIHtcblx0ICAgIHJldHVybiBfYygnZWwtY2hlY2tib3gnLCB7XG5cdCAgICAgIGtleTogaXRlbVtfdm0ua2V5UHJvcF0sXG5cdCAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRyYW5zZmVyLXBhbmVsX19pdGVtXCIsXG5cdCAgICAgIGF0dHJzOiB7XG5cdCAgICAgICAgXCJsYWJlbFwiOiBpdGVtW192bS5rZXlQcm9wXSxcblx0ICAgICAgICBcImRpc2FibGVkXCI6IGl0ZW1bX3ZtLmRpc2FibGVkUHJvcF1cblx0ICAgICAgfVxuXHQgICAgfSwgW19jKCdvcHRpb24tY29udGVudCcsIHtcblx0ICAgICAgYXR0cnM6IHtcblx0ICAgICAgICBcIm9wdGlvblwiOiBpdGVtXG5cdCAgICAgIH1cblx0ICAgIH0pXSwgMSlcblx0ICB9KSksIF9jKCdwJywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLmhhc05vTWF0Y2gpLFxuXHQgICAgICBleHByZXNzaW9uOiBcImhhc05vTWF0Y2hcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC10cmFuc2Zlci1wYW5lbF9fZW1wdHlcIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS50KCdlbC50cmFuc2Zlci5ub01hdGNoJykpKV0pLCBfYygncCcsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5kYXRhLmxlbmd0aCA9PT0gMCAmJiAhX3ZtLmhhc05vTWF0Y2gpLFxuXHQgICAgICBleHByZXNzaW9uOiBcImRhdGEubGVuZ3RoID09PSAwICYmICFoYXNOb01hdGNoXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXItcGFuZWxfX2VtcHR5XCJcblx0ICB9LCBbX3ZtLl92KF92bS5fcyhfdm0udCgnZWwudHJhbnNmZXIubm9EYXRhJykpKV0pXSwgMSksIF9jKCdwJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXItcGFuZWxfX2Zvb3RlclwiXG5cdCAgfSwgW19jKCdlbC1jaGVja2JveCcsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwiaW5kZXRlcm1pbmF0ZVwiOiBfdm0uaXNJbmRldGVybWluYXRlXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjaGFuZ2VcIjogX3ZtLmhhbmRsZUFsbENoZWNrZWRDaGFuZ2Vcblx0ICAgIH0sXG5cdCAgICBtb2RlbDoge1xuXHQgICAgICB2YWx1ZTogKF92bS5hbGxDaGVja2VkKSxcblx0ICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuXHQgICAgICAgIF92bS5hbGxDaGVja2VkID0gJCR2XG5cdCAgICAgIH0sXG5cdCAgICAgIGV4cHJlc3Npb246IFwiYWxsQ2hlY2tlZFwiXG5cdCAgICB9XG5cdCAgfSwgW192bS5fdihfdm0uX3MoX3ZtLmNoZWNrZWRTdW1tYXJ5KSldKSwgX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuLyogMzgwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXJcIlxuXHQgIH0sIFtfYygndHJhbnNmZXItcGFuZWwnLCBfdm0uX2Ioe1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJkYXRhXCI6IF92bS5zb3VyY2VEYXRhLFxuXHQgICAgICBcInRpdGxlXCI6IF92bS50aXRsZXNbMF0gfHwgX3ZtLnQoJ2VsLnRyYW5zZmVyLnRpdGxlcy4wJyksXG5cdCAgICAgIFwiZGVmYXVsdC1jaGVja2VkXCI6IF92bS5sZWZ0RGVmYXVsdENoZWNrZWQsXG5cdCAgICAgIFwicGxhY2Vob2xkZXJcIjogX3ZtLmZpbHRlclBsYWNlaG9sZGVyIHx8IF92bS50KCdlbC50cmFuc2Zlci5maWx0ZXJQbGFjZWhvbGRlcicpXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjaGVja2VkLWNoYW5nZVwiOiBfdm0ub25Tb3VyY2VDaGVja2VkQ2hhbmdlXG5cdCAgICB9XG5cdCAgfSwgJ3RyYW5zZmVyLXBhbmVsJywgX3ZtLiRwcm9wcyksIFtfdm0uX3QoXCJsZWZ0LWZvb3RlclwiKV0sIDIpLCBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXJfX2J1dHRvbnNcIlxuXHQgIH0sIFtfYygnZWwtYnV0dG9uJywge1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJ0eXBlXCI6IFwicHJpbWFyeVwiLFxuXHQgICAgICBcInNpemVcIjogXCJzbWFsbFwiLFxuXHQgICAgICBcImRpc2FibGVkXCI6IF92bS5yaWdodENoZWNrZWQubGVuZ3RoID09PSAwXG5cdCAgICB9LFxuXHQgICAgbmF0aXZlT246IHtcblx0ICAgICAgXCJjbGlja1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uYWRkVG9MZWZ0KCRldmVudClcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFtfYygnaScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWljb24tYXJyb3ctbGVmdFwiXG5cdCAgfSksIChfdm0uYnV0dG9uVGV4dHNbMF0gIT09IHVuZGVmaW5lZCkgPyBfYygnc3BhbicsIFtfdm0uX3YoX3ZtLl9zKF92bS5idXR0b25UZXh0c1swXSkpXSkgOiBfdm0uX2UoKV0pLCBfYygnZWwtYnV0dG9uJywge1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJ0eXBlXCI6IFwicHJpbWFyeVwiLFxuXHQgICAgICBcInNpemVcIjogXCJzbWFsbFwiLFxuXHQgICAgICBcImRpc2FibGVkXCI6IF92bS5sZWZ0Q2hlY2tlZC5sZW5ndGggPT09IDBcblx0ICAgIH0sXG5cdCAgICBuYXRpdmVPbjoge1xuXHQgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5hZGRUb1JpZ2h0KCRldmVudClcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sIFsoX3ZtLmJ1dHRvblRleHRzWzFdICE9PSB1bmRlZmluZWQpID8gX2MoJ3NwYW4nLCBbX3ZtLl92KF92bS5fcyhfdm0uYnV0dG9uVGV4dHNbMV0pKV0pIDogX3ZtLl9lKCksIF9jKCdpJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1hcnJvdy1yaWdodFwiXG5cdCAgfSldKV0sIDEpLCBfYygndHJhbnNmZXItcGFuZWwnLCBfdm0uX2Ioe1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJkYXRhXCI6IF92bS50YXJnZXREYXRhLFxuXHQgICAgICBcInRpdGxlXCI6IF92bS50aXRsZXNbMV0gfHwgX3ZtLnQoJ2VsLnRyYW5zZmVyLnRpdGxlcy4xJyksXG5cdCAgICAgIFwiZGVmYXVsdC1jaGVja2VkXCI6IF92bS5yaWdodERlZmF1bHRDaGVja2VkLFxuXHQgICAgICBcInBsYWNlaG9sZGVyXCI6IF92bS5maWx0ZXJQbGFjZWhvbGRlciB8fCBfdm0udCgnZWwudHJhbnNmZXIuZmlsdGVyUGxhY2Vob2xkZXInKVxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2hlY2tlZC1jaGFuZ2VcIjogX3ZtLm9uVGFyZ2V0Q2hlY2tlZENoYW5nZVxuXHQgICAgfVxuXHQgIH0sICd0cmFuc2Zlci1wYW5lbCcsIF92bS4kcHJvcHMpLCBbX3ZtLl90KFwicmlnaHQtZm9vdGVyXCIpXSwgMildLCAxKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH1cbi8qKioqKiovIF0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL2VsZW1lbnQtdWkuY29tbW9uLmpzXG4vLyBtb2R1bGUgaWQgPSAyOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///29\n")},function(module,exports,__webpack_require__){eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(264);\n\n\n/***/ },\n\n/***/ 3:\n/***/ function(module, exports) {\n\n\t/* globals __VUE_SSR_CONTEXT__ */\n\n\t// this module is a runtime utility for cleaner component module output and will\n\t// be included in the final webpack user bundle\n\n\tmodule.exports = function normalizeComponent (\n\t rawScriptExports,\n\t compiledTemplate,\n\t injectStyles,\n\t scopeId,\n\t moduleIdentifier /* server only */\n\t) {\n\t var esModule\n\t var scriptExports = rawScriptExports = rawScriptExports || {}\n\n\t // ES6 modules interop\n\t var type = typeof rawScriptExports.default\n\t if (type === 'object' || type === 'function') {\n\t esModule = rawScriptExports\n\t scriptExports = rawScriptExports.default\n\t }\n\n\t // Vue.extend constructor export interop\n\t var options = typeof scriptExports === 'function'\n\t ? scriptExports.options\n\t : scriptExports\n\n\t // render functions\n\t if (compiledTemplate) {\n\t options.render = compiledTemplate.render\n\t options.staticRenderFns = compiledTemplate.staticRenderFns\n\t }\n\n\t // scopedId\n\t if (scopeId) {\n\t options._scopeId = scopeId\n\t }\n\n\t var hook\n\t if (moduleIdentifier) { // server build\n\t hook = function (context) {\n\t // 2.3 injection\n\t context = context || (this.$vnode && this.$vnode.ssrContext)\n\t // 2.2 with runInNewContext: true\n\t if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n\t context = __VUE_SSR_CONTEXT__\n\t }\n\t // inject component styles\n\t if (injectStyles) {\n\t injectStyles.call(this, context)\n\t }\n\t // register component module identifier for async chunk inferrence\n\t if (context && context._registeredComponents) {\n\t context._registeredComponents.add(moduleIdentifier)\n\t }\n\t }\n\t // used by ssr in case component is cached and beforeCreate\n\t // never gets called\n\t options._ssrRegister = hook\n\t } else if (injectStyles) {\n\t hook = injectStyles\n\t }\n\n\t if (hook) {\n\t // inject component registration as beforeCreate hook\n\t var existing = options.beforeCreate\n\t options.beforeCreate = existing\n\t ? [].concat(existing, hook)\n\t : [hook]\n\t }\n\n\t return {\n\t esModule: esModule,\n\t exports: scriptExports,\n\t options: options\n\t }\n\t}\n\n\n/***/ },\n\n/***/ 9:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(8);\n\n/***/ },\n\n/***/ 10:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(16);\n\n/***/ },\n\n/***/ 13:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(10);\n\n/***/ },\n\n/***/ 14:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(4);\n\n/***/ },\n\n/***/ 15:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(18);\n\n/***/ },\n\n/***/ 46:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(12);\n\n/***/ },\n\n/***/ 60:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(19);\n\n/***/ },\n\n/***/ 61:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(20);\n\n/***/ },\n\n/***/ 62:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(13);\n\n/***/ },\n\n/***/ 63:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(7);\n\n/***/ },\n\n/***/ 123:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(3);\n\n/***/ },\n\n/***/ 217:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(3)(\n\t /* script */\n\t __webpack_require__(218),\n\t /* template */\n\t __webpack_require__(220),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 218:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\tvar _emitter = __webpack_require__(14);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tvar _util = __webpack_require__(219);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t mixins: [_emitter2.default],\n\n\t name: 'ElOption',\n\n\t componentName: 'ElOption',\n\n\t props: {\n\t value: {\n\t required: true\n\t },\n\t label: [String, Number],\n\t created: Boolean,\n\t disabled: {\n\t type: Boolean,\n\t default: false\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t index: -1,\n\t groupDisabled: false,\n\t visible: true,\n\t hitState: false\n\t };\n\t },\n\n\n\t computed: {\n\t isObject: function isObject() {\n\t return Object.prototype.toString.call(this.value).toLowerCase() === '[object object]';\n\t },\n\t currentLabel: function currentLabel() {\n\t return this.label || (this.isObject ? '' : this.value);\n\t },\n\t currentValue: function currentValue() {\n\t return this.value || this.label || '';\n\t },\n\t parent: function parent() {\n\t var result = this.$parent;\n\t while (!result.isSelect) {\n\t result = result.$parent;\n\t }\n\t return result;\n\t },\n\t itemSelected: function itemSelected() {\n\t if (!this.parent.multiple) {\n\t return this.isEqual(this.value, this.parent.value);\n\t } else {\n\t return this.contains(this.parent.value, this.value);\n\t }\n\t },\n\t limitReached: function limitReached() {\n\t if (this.parent.multiple) {\n\t return !this.itemSelected && this.parent.value.length >= this.parent.multipleLimit && this.parent.multipleLimit > 0;\n\t } else {\n\t return false;\n\t }\n\t }\n\t },\n\n\t watch: {\n\t currentLabel: function currentLabel() {\n\t if (!this.created && !this.parent.remote) this.dispatch('ElSelect', 'setSelected');\n\t },\n\t value: function value() {\n\t if (!this.created && !this.parent.remote) this.dispatch('ElSelect', 'setSelected');\n\t }\n\t },\n\n\t methods: {\n\t isEqual: function isEqual(a, b) {\n\t if (!this.isObject) {\n\t return a === b;\n\t } else {\n\t var valueKey = this.parent.valueKey;\n\t return (0, _util.getValueByPath)(a, valueKey) === (0, _util.getValueByPath)(b, valueKey);\n\t }\n\t },\n\t contains: function contains() {\n\t var _this = this;\n\n\t var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\t var target = arguments[1];\n\n\t if (!this.isObject) {\n\t return arr.indexOf(target) > -1;\n\t } else {\n\t var _ret = function () {\n\t var valueKey = _this.parent.valueKey;\n\t return {\n\t v: arr.some(function (item) {\n\t return (0, _util.getValueByPath)(item, valueKey) === (0, _util.getValueByPath)(target, valueKey);\n\t })\n\t };\n\t }();\n\n\t if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === \"object\") return _ret.v;\n\t }\n\t },\n\t handleGroupDisabled: function handleGroupDisabled(val) {\n\t this.groupDisabled = val;\n\t },\n\t hoverItem: function hoverItem() {\n\t if (!this.disabled && !this.groupDisabled) {\n\t this.parent.hoverIndex = this.parent.options.indexOf(this);\n\t }\n\t },\n\t selectOptionClick: function selectOptionClick() {\n\t if (this.disabled !== true && this.groupDisabled !== true) {\n\t this.dispatch('ElSelect', 'handleOptionClick', this);\n\t }\n\t },\n\t queryChange: function queryChange(query) {\n\t // query 里如果有正则中的特殊字符,需要先将这些字符转义\n\t var parsedQuery = String(query).replace(/(\\^|\\(|\\)|\\[|\\]|\\$|\\*|\\+|\\.|\\?|\\\\|\\{|\\}|\\|)/g, '\\\\$1');\n\t this.visible = new RegExp(parsedQuery, 'i').test(this.currentLabel) || this.created;\n\t if (!this.visible) {\n\t this.parent.filteredOptionsCount--;\n\t }\n\t },\n\t resetIndex: function resetIndex() {\n\t var _this2 = this;\n\n\t this.$nextTick(function () {\n\t _this2.index = _this2.parent.options.indexOf(_this2);\n\t });\n\t }\n\t },\n\n\t created: function created() {\n\t this.parent.options.push(this);\n\t this.parent.cachedOptions.push(this);\n\t this.parent.optionsCount++;\n\t this.parent.filteredOptionsCount++;\n\t this.index = this.parent.options.indexOf(this);\n\n\t this.$on('queryChange', this.queryChange);\n\t this.$on('handleGroupDisabled', this.handleGroupDisabled);\n\t this.$on('resetIndex', this.resetIndex);\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t this.dispatch('ElSelect', 'onOptionDestroy', this);\n\t }\n\t};\n\n/***/ },\n\n/***/ 219:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(5);\n\n/***/ },\n\n/***/ 220:\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('li', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible),\n\t expression: \"visible\"\n\t }],\n\t staticClass: \"el-select-dropdown__item\",\n\t class: {\n\t 'selected': _vm.itemSelected,\n\t 'is-disabled': _vm.disabled || _vm.groupDisabled || _vm.limitReached,\n\t 'hover': _vm.parent.hoverIndex === _vm.index\n\t },\n\t on: {\n\t \"mouseenter\": _vm.hoverItem,\n\t \"click\": function($event) {\n\t $event.stopPropagation();\n\t _vm.selectOptionClick($event)\n\t }\n\t }\n\t }, [_vm._t(\"default\", [_c('span', [_vm._v(_vm._s(_vm.currentLabel))])])], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n\n/***/ 264:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _select = __webpack_require__(265);\n\n\tvar _select2 = _interopRequireDefault(_select);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_select2.default.install = function (Vue) {\n\t Vue.component(_select2.default.name, _select2.default);\n\t};\n\n\texports.default = _select2.default;\n\n/***/ },\n\n/***/ 265:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(3)(\n\t /* script */\n\t __webpack_require__(266),\n\t /* template */\n\t __webpack_require__(271),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 266:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\tvar _emitter = __webpack_require__(14);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tvar _locale = __webpack_require__(61);\n\n\tvar _locale2 = _interopRequireDefault(_locale);\n\n\tvar _input = __webpack_require__(9);\n\n\tvar _input2 = _interopRequireDefault(_input);\n\n\tvar _selectDropdown = __webpack_require__(267);\n\n\tvar _selectDropdown2 = _interopRequireDefault(_selectDropdown);\n\n\tvar _option = __webpack_require__(217);\n\n\tvar _option2 = _interopRequireDefault(_option);\n\n\tvar _tag = __webpack_require__(270);\n\n\tvar _tag2 = _interopRequireDefault(_tag);\n\n\tvar _scrollbar = __webpack_require__(15);\n\n\tvar _scrollbar2 = _interopRequireDefault(_scrollbar);\n\n\tvar _debounce = __webpack_require__(63);\n\n\tvar _debounce2 = _interopRequireDefault(_debounce);\n\n\tvar _clickoutside = __webpack_require__(10);\n\n\tvar _clickoutside2 = _interopRequireDefault(_clickoutside);\n\n\tvar _dom = __webpack_require__(123);\n\n\tvar _resizeEvent = __webpack_require__(46);\n\n\tvar _locale3 = __webpack_require__(62);\n\n\tvar _scrollIntoView = __webpack_require__(60);\n\n\tvar _scrollIntoView2 = _interopRequireDefault(_scrollIntoView);\n\n\tvar _util = __webpack_require__(219);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\tvar sizeMap = {\n\t 'large': 42,\n\t 'small': 30,\n\t 'mini': 22\n\t};\n\n\texports.default = {\n\t mixins: [_emitter2.default, _locale2.default],\n\n\t name: 'ElSelect',\n\n\t componentName: 'ElSelect',\n\n\t computed: {\n\t iconClass: function iconClass() {\n\t var criteria = this.clearable && !this.disabled && this.inputHovering && !this.multiple && this.value !== undefined && this.value !== '';\n\t return criteria ? 'circle-close is-show-close' : this.remote && this.filterable ? '' : 'caret-top';\n\t },\n\t debounce: function debounce() {\n\t return this.remote ? 300 : 0;\n\t },\n\t emptyText: function emptyText() {\n\t if (this.loading) {\n\t return this.loadingText || this.t('el.select.loading');\n\t } else {\n\t if (this.remote && this.query === '' && this.options.length === 0) return false;\n\t if (this.filterable && this.options.length > 0 && this.filteredOptionsCount === 0) {\n\t return this.noMatchText || this.t('el.select.noMatch');\n\t }\n\t if (this.options.length === 0) {\n\t return this.noDataText || this.t('el.select.noData');\n\t }\n\t }\n\t return null;\n\t },\n\t showNewOption: function showNewOption() {\n\t var _this = this;\n\n\t var hasExistingOption = this.options.filter(function (option) {\n\t return !option.created;\n\t }).some(function (option) {\n\t return option.currentLabel === _this.query;\n\t });\n\t return this.filterable && this.allowCreate && this.query !== '' && !hasExistingOption;\n\t }\n\t },\n\n\t components: {\n\t ElInput: _input2.default,\n\t ElSelectMenu: _selectDropdown2.default,\n\t ElOption: _option2.default,\n\t ElTag: _tag2.default,\n\t ElScrollbar: _scrollbar2.default\n\t },\n\n\t directives: { Clickoutside: _clickoutside2.default },\n\n\t props: {\n\t name: String,\n\t value: {\n\t required: true\n\t },\n\t size: String,\n\t disabled: Boolean,\n\t clearable: Boolean,\n\t filterable: Boolean,\n\t allowCreate: Boolean,\n\t loading: Boolean,\n\t popperClass: String,\n\t remote: Boolean,\n\t loadingText: String,\n\t noMatchText: String,\n\t noDataText: String,\n\t remoteMethod: Function,\n\t filterMethod: Function,\n\t multiple: Boolean,\n\t multipleLimit: {\n\t type: Number,\n\t default: 0\n\t },\n\t placeholder: {\n\t type: String,\n\t default: function _default() {\n\t return (0, _locale3.t)('el.select.placeholder');\n\t }\n\t },\n\t defaultFirstOption: Boolean,\n\t valueKey: {\n\t type: String,\n\t default: 'value'\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t options: [],\n\t cachedOptions: [],\n\t createdLabel: null,\n\t createdSelected: false,\n\t selected: this.multiple ? [] : {},\n\t isSelect: true,\n\t inputLength: 20,\n\t inputWidth: 0,\n\t cachedPlaceHolder: '',\n\t optionsCount: 0,\n\t filteredOptionsCount: 0,\n\t visible: false,\n\t selectedLabel: '',\n\t hoverIndex: -1,\n\t query: '',\n\t optionsAllDisabled: false,\n\t inputHovering: false,\n\t currentPlaceholder: ''\n\t };\n\t },\n\n\n\t watch: {\n\t placeholder: function placeholder(val) {\n\t this.cachedPlaceHolder = this.currentPlaceholder = val;\n\t },\n\t value: function value(val) {\n\t if (this.multiple) {\n\t this.resetInputHeight();\n\t if (val.length > 0 || this.$refs.input && this.query !== '') {\n\t this.currentPlaceholder = '';\n\t } else {\n\t this.currentPlaceholder = this.cachedPlaceHolder;\n\t }\n\t }\n\t this.setSelected();\n\t if (this.filterable && !this.multiple) {\n\t this.inputLength = 20;\n\t }\n\t this.$emit('change', val);\n\t this.dispatch('ElFormItem', 'el.form.change', val);\n\t },\n\t query: function query(val) {\n\t var _this2 = this;\n\n\t if (val === null || val === undefined) return;\n\t this.$nextTick(function () {\n\t if (_this2.visible) _this2.broadcast('ElSelectDropdown', 'updatePopper');\n\t });\n\t this.hoverIndex = -1;\n\t if (this.multiple && this.filterable) {\n\t this.inputLength = this.$refs.input.value.length * 15 + 20;\n\t this.managePlaceholder();\n\t this.resetInputHeight();\n\t }\n\t if (this.remote && typeof this.remoteMethod === 'function') {\n\t this.hoverIndex = -1;\n\t this.remoteMethod(val);\n\t this.broadcast('ElOption', 'resetIndex');\n\t } else if (typeof this.filterMethod === 'function') {\n\t this.filterMethod(val);\n\t this.broadcast('ElOptionGroup', 'queryChange');\n\t } else {\n\t this.filteredOptionsCount = this.optionsCount;\n\t this.broadcast('ElOption', 'queryChange', val);\n\t this.broadcast('ElOptionGroup', 'queryChange');\n\t }\n\t if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {\n\t this.checkDefaultFirstOption();\n\t }\n\t },\n\t visible: function visible(val) {\n\t var _this3 = this;\n\n\t if (!val) {\n\t this.$refs.reference.$el.querySelector('input').blur();\n\t this.handleIconHide();\n\t this.broadcast('ElSelectDropdown', 'destroyPopper');\n\t if (this.$refs.input) {\n\t this.$refs.input.blur();\n\t }\n\t this.query = '';\n\t this.selectedLabel = '';\n\t this.inputLength = 20;\n\t this.resetHoverIndex();\n\t this.$nextTick(function () {\n\t if (_this3.$refs.input && _this3.$refs.input.value === '' && _this3.selected.length === 0) {\n\t _this3.currentPlaceholder = _this3.cachedPlaceHolder;\n\t }\n\t });\n\t if (!this.multiple) {\n\t if (this.selected) {\n\t if (this.filterable && this.allowCreate && this.createdSelected && this.createdOption) {\n\t this.selectedLabel = this.createdLabel;\n\t } else {\n\t this.selectedLabel = this.selected.currentLabel;\n\t }\n\t if (this.filterable) this.query = this.selectedLabel;\n\t }\n\t }\n\t } else {\n\t this.handleIconShow();\n\t this.broadcast('ElSelectDropdown', 'updatePopper');\n\t if (this.filterable) {\n\t this.query = this.selectedLabel;\n\t if (this.multiple) {\n\t this.$refs.input.focus();\n\t } else {\n\t if (!this.remote) {\n\t this.broadcast('ElOption', 'queryChange', '');\n\t this.broadcast('ElOptionGroup', 'queryChange');\n\t }\n\t this.broadcast('ElInput', 'inputSelect');\n\t }\n\t }\n\t }\n\t this.$emit('visible-change', val);\n\t },\n\t options: function options(val) {\n\t if (this.$isServer) return;\n\t this.optionsAllDisabled = val.length === val.filter(function (item) {\n\t return item.disabled === true;\n\t }).length;\n\t if (this.multiple) {\n\t this.resetInputHeight();\n\t }\n\t var inputs = this.$el.querySelectorAll('input');\n\t if ([].indexOf.call(inputs, document.activeElement) === -1) {\n\t this.setSelected();\n\t }\n\t if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {\n\t this.checkDefaultFirstOption();\n\t }\n\t }\n\t },\n\n\t methods: {\n\t handleIconHide: function handleIconHide() {\n\t var icon = this.$el.querySelector('.el-input__icon');\n\t if (icon) {\n\t (0, _dom.removeClass)(icon, 'is-reverse');\n\t }\n\t },\n\t handleIconShow: function handleIconShow() {\n\t var icon = this.$el.querySelector('.el-input__icon');\n\t if (icon && !(0, _dom.hasClass)(icon, 'el-icon-circle-close')) {\n\t (0, _dom.addClass)(icon, 'is-reverse');\n\t }\n\t },\n\t scrollToOption: function scrollToOption(option) {\n\t var target = Array.isArray(option) && option[0] ? option[0].$el : option.$el;\n\t if (this.$refs.popper && target) {\n\t var menu = this.$refs.popper.$el.querySelector('.el-select-dropdown__wrap');\n\t (0, _scrollIntoView2.default)(menu, target);\n\t }\n\t },\n\t handleMenuEnter: function handleMenuEnter() {\n\t var _this4 = this;\n\n\t this.$nextTick(function () {\n\t return _this4.scrollToOption(_this4.selected);\n\t });\n\t },\n\t getOption: function getOption(value) {\n\t var option = void 0;\n\t var isObject = Object.prototype.toString.call(value).toLowerCase() === '[object object]';\n\t for (var i = this.cachedOptions.length - 1; i >= 0; i--) {\n\t var cachedOption = this.cachedOptions[i];\n\t var isEqual = isObject ? (0, _util.getValueByPath)(cachedOption.value, this.valueKey) === (0, _util.getValueByPath)(value, this.valueKey) : cachedOption.value === value;\n\t if (isEqual) {\n\t option = cachedOption;\n\t break;\n\t }\n\t }\n\t if (option) return option;\n\t var label = !isObject ? value : '';\n\t var newOption = {\n\t value: value,\n\t currentLabel: label\n\t };\n\t if (this.multiple) {\n\t newOption.hitState = false;\n\t }\n\t return newOption;\n\t },\n\t setSelected: function setSelected() {\n\t var _this5 = this;\n\n\t if (!this.multiple) {\n\t var option = this.getOption(this.value);\n\t if (option.created) {\n\t this.createdLabel = option.currentLabel;\n\t this.createdSelected = true;\n\t } else {\n\t this.createdSelected = false;\n\t }\n\t this.selectedLabel = option.currentLabel;\n\t this.selected = option;\n\t if (this.filterable) this.query = this.selectedLabel;\n\t return;\n\t }\n\t var result = [];\n\t if (Array.isArray(this.value)) {\n\t this.value.forEach(function (value) {\n\t result.push(_this5.getOption(value));\n\t });\n\t }\n\t this.selected = result;\n\t this.$nextTick(function () {\n\t _this5.resetInputHeight();\n\t });\n\t },\n\t handleFocus: function handleFocus() {\n\t this.visible = true;\n\t },\n\t handleIconClick: function handleIconClick(event) {\n\t if (this.iconClass.indexOf('circle-close') > -1) {\n\t this.deleteSelected(event);\n\t } else {\n\t this.toggleMenu();\n\t }\n\t },\n\t handleMouseDown: function handleMouseDown(event) {\n\t if (event.target.tagName !== 'INPUT') return;\n\t if (this.visible) {\n\t this.handleClose();\n\t event.preventDefault();\n\t }\n\t },\n\t doDestroy: function doDestroy() {\n\t this.$refs.popper && this.$refs.popper.doDestroy();\n\t this.dropdownUl = null;\n\t },\n\t handleClose: function handleClose() {\n\t this.visible = false;\n\t },\n\t toggleLastOptionHitState: function toggleLastOptionHitState(hit) {\n\t if (!Array.isArray(this.selected)) return;\n\t var option = this.selected[this.selected.length - 1];\n\t if (!option) return;\n\n\t if (hit === true || hit === false) {\n\t option.hitState = hit;\n\t return hit;\n\t }\n\n\t option.hitState = !option.hitState;\n\t return option.hitState;\n\t },\n\t deletePrevTag: function deletePrevTag(e) {\n\t if (e.target.value.length <= 0 && !this.toggleLastOptionHitState()) {\n\t var value = this.value.slice();\n\t value.pop();\n\t this.$emit('input', value);\n\t }\n\t },\n\t managePlaceholder: function managePlaceholder() {\n\t if (this.currentPlaceholder !== '') {\n\t this.currentPlaceholder = this.$refs.input.value ? '' : this.cachedPlaceHolder;\n\t }\n\t },\n\t resetInputState: function resetInputState(e) {\n\t if (e.keyCode !== 8) this.toggleLastOptionHitState(false);\n\t this.inputLength = this.$refs.input.value.length * 15 + 20;\n\t this.resetInputHeight();\n\t },\n\t resetInputHeight: function resetInputHeight() {\n\t var _this6 = this;\n\n\t this.$nextTick(function () {\n\t if (!_this6.$refs.reference) return;\n\t var inputChildNodes = _this6.$refs.reference.$el.childNodes;\n\t var input = [].filter.call(inputChildNodes, function (item) {\n\t return item.tagName === 'INPUT';\n\t })[0];\n\t input.style.height = Math.max(_this6.$refs.tags.clientHeight + 6, sizeMap[_this6.size] || 36) + 'px';\n\t if (_this6.visible && _this6.emptyText !== false) {\n\t _this6.broadcast('ElSelectDropdown', 'updatePopper');\n\t }\n\t });\n\t },\n\t resetHoverIndex: function resetHoverIndex() {\n\t var _this7 = this;\n\n\t setTimeout(function () {\n\t if (!_this7.multiple) {\n\t _this7.hoverIndex = _this7.options.indexOf(_this7.selected);\n\t } else {\n\t if (_this7.selected.length > 0) {\n\t _this7.hoverIndex = Math.min.apply(null, _this7.selected.map(function (item) {\n\t return _this7.options.indexOf(item);\n\t }));\n\t } else {\n\t _this7.hoverIndex = -1;\n\t }\n\t }\n\t }, 300);\n\t },\n\t handleOptionSelect: function handleOptionSelect(option) {\n\t var _this8 = this;\n\n\t if (this.multiple) {\n\t var value = this.value.slice();\n\t var optionIndex = this.getValueIndex(value, option.value);\n\t if (optionIndex > -1) {\n\t value.splice(optionIndex, 1);\n\t } else if (this.multipleLimit <= 0 || value.length < this.multipleLimit) {\n\t value.push(option.value);\n\t }\n\t this.$emit('input', value);\n\t if (option.created) {\n\t this.query = '';\n\t this.inputLength = 20;\n\t }\n\t if (this.filterable) this.$refs.input.focus();\n\t } else {\n\t this.$emit('input', option.value);\n\t this.visible = false;\n\t }\n\t this.$nextTick(function () {\n\t return _this8.scrollToOption(option);\n\t });\n\t },\n\t getValueIndex: function getValueIndex() {\n\t var _this9 = this;\n\n\t var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\t var value = arguments[1];\n\n\t var isObject = Object.prototype.toString.call(value).toLowerCase() === '[object object]';\n\t if (!isObject) {\n\t return arr.indexOf(value);\n\t } else {\n\t var _ret = function () {\n\t var valueKey = _this9.valueKey;\n\t var index = -1;\n\t arr.some(function (item, i) {\n\t if ((0, _util.getValueByPath)(item, valueKey) === (0, _util.getValueByPath)(value, valueKey)) {\n\t index = i;\n\t return true;\n\t }\n\t return false;\n\t });\n\t return {\n\t v: index\n\t };\n\t }();\n\n\t if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === \"object\") return _ret.v;\n\t }\n\t },\n\t toggleMenu: function toggleMenu() {\n\t if (this.filterable && this.query === '' && this.visible) {\n\t return;\n\t }\n\t if (!this.disabled) {\n\t this.visible = !this.visible;\n\t }\n\t },\n\t navigateOptions: function navigateOptions(direction) {\n\t var _this10 = this;\n\n\t if (!this.visible) {\n\t this.visible = true;\n\t return;\n\t }\n\t if (this.options.length === 0 || this.filteredOptionsCount === 0) return;\n\t this.optionsAllDisabled = this.options.length === this.options.filter(function (item) {\n\t return item.disabled === true;\n\t }).length;\n\t if (!this.optionsAllDisabled) {\n\t if (direction === 'next') {\n\t this.hoverIndex++;\n\t if (this.hoverIndex === this.options.length) {\n\t this.hoverIndex = 0;\n\t }\n\t if (this.options[this.hoverIndex].disabled === true || this.options[this.hoverIndex].groupDisabled === true || !this.options[this.hoverIndex].visible) {\n\t this.navigateOptions('next');\n\t }\n\t }\n\t if (direction === 'prev') {\n\t this.hoverIndex--;\n\t if (this.hoverIndex < 0) {\n\t this.hoverIndex = this.options.length - 1;\n\t }\n\t if (this.options[this.hoverIndex].disabled === true || this.options[this.hoverIndex].groupDisabled === true || !this.options[this.hoverIndex].visible) {\n\t this.navigateOptions('prev');\n\t }\n\t }\n\t }\n\t this.$nextTick(function () {\n\t return _this10.scrollToOption(_this10.options[_this10.hoverIndex]);\n\t });\n\t },\n\t selectOption: function selectOption() {\n\t if (this.options[this.hoverIndex]) {\n\t this.handleOptionSelect(this.options[this.hoverIndex]);\n\t }\n\t },\n\t deleteSelected: function deleteSelected(event) {\n\t event.stopPropagation();\n\t this.$emit('input', '');\n\t this.visible = false;\n\t this.$emit('clear');\n\t },\n\t deleteTag: function deleteTag(event, tag) {\n\t var index = this.selected.indexOf(tag);\n\t if (index > -1 && !this.disabled) {\n\t var value = this.value.slice();\n\t value.splice(index, 1);\n\t this.$emit('input', value);\n\t this.$emit('remove-tag', tag);\n\t }\n\t event.stopPropagation();\n\t },\n\t onInputChange: function onInputChange() {\n\t if (this.filterable) {\n\t this.query = this.selectedLabel;\n\t }\n\t },\n\t onOptionDestroy: function onOptionDestroy(option) {\n\t this.optionsCount--;\n\t this.filteredOptionsCount--;\n\t var index = this.options.indexOf(option);\n\t if (index > -1) {\n\t this.options.splice(index, 1);\n\t }\n\t this.broadcast('ElOption', 'resetIndex');\n\t },\n\t resetInputWidth: function resetInputWidth() {\n\t this.inputWidth = this.$refs.reference.$el.getBoundingClientRect().width;\n\t },\n\t handleResize: function handleResize() {\n\t this.resetInputWidth();\n\t if (this.multiple) this.resetInputHeight();\n\t },\n\t checkDefaultFirstOption: function checkDefaultFirstOption() {\n\t this.hoverIndex = -1;\n\t for (var i = 0; i !== this.options.length; ++i) {\n\t var option = this.options[i];\n\t if (this.query) {\n\t // pick first options that passes the filter\n\t if (!option.disabled && !option.groupDisabled && option.visible) {\n\t this.hoverIndex = i;\n\t break;\n\t }\n\t } else {\n\t // pick currently selected option\n\t if (option.itemSelected) {\n\t this.hoverIndex = i;\n\t break;\n\t }\n\t }\n\t }\n\t },\n\t getValueKey: function getValueKey(item) {\n\t if (Object.prototype.toString.call(item.value).toLowerCase() !== '[object object]') {\n\t return item.value;\n\t } else {\n\t return (0, _util.getValueByPath)(item.value, this.valueKey);\n\t }\n\t }\n\t },\n\n\t created: function created() {\n\t var _this11 = this;\n\n\t this.cachedPlaceHolder = this.currentPlaceholder = this.placeholder;\n\t if (this.multiple && !Array.isArray(this.value)) {\n\t this.$emit('input', []);\n\t }\n\t if (!this.multiple && Array.isArray(this.value)) {\n\t this.$emit('input', '');\n\t }\n\n\t this.debouncedOnInputChange = (0, _debounce2.default)(this.debounce, function () {\n\t _this11.onInputChange();\n\t });\n\n\t this.$on('handleOptionClick', this.handleOptionSelect);\n\t this.$on('onOptionDestroy', this.onOptionDestroy);\n\t this.$on('setSelected', this.setSelected);\n\t },\n\t mounted: function mounted() {\n\t var _this12 = this;\n\n\t if (this.multiple && Array.isArray(this.value) && this.value.length > 0) {\n\t this.currentPlaceholder = '';\n\t }\n\t (0, _resizeEvent.addResizeListener)(this.$el, this.handleResize);\n\t if (this.remote && this.multiple) {\n\t this.resetInputHeight();\n\t }\n\t this.$nextTick(function () {\n\t if (_this12.$refs.reference && _this12.$refs.reference.$el) {\n\t _this12.inputWidth = _this12.$refs.reference.$el.getBoundingClientRect().width;\n\t }\n\t });\n\t this.setSelected();\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t if (this.$el && this.handleResize) (0, _resizeEvent.removeResizeListener)(this.$el, this.handleResize);\n\t }\n\t};\n\n/***/ },\n\n/***/ 267:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(3)(\n\t /* script */\n\t __webpack_require__(268),\n\t /* template */\n\t __webpack_require__(269),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 268:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vuePopper = __webpack_require__(13);\n\n\tvar _vuePopper2 = _interopRequireDefault(_vuePopper);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElSelectDropdown',\n\n\t componentName: 'ElSelectDropdown',\n\n\t mixins: [_vuePopper2.default],\n\n\t props: {\n\t placement: {\n\t default: 'bottom-start'\n\t },\n\n\t boundariesPadding: {\n\t default: 0\n\t },\n\n\t popperOptions: {\n\t default: function _default() {\n\t return {\n\t gpuAcceleration: false\n\t };\n\t }\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t minWidth: ''\n\t };\n\t },\n\n\n\t computed: {\n\t popperClass: function popperClass() {\n\t return this.$parent.popperClass;\n\t }\n\t },\n\n\t watch: {\n\t '$parent.inputWidth': function $parentInputWidth() {\n\t this.minWidth = this.$parent.$el.getBoundingClientRect().width + 'px';\n\t }\n\t },\n\n\t mounted: function mounted() {\n\t var _this = this;\n\n\t this.referenceElm = this.$parent.$refs.reference.$el;\n\t this.$parent.popperElm = this.popperElm = this.$el;\n\t this.$on('updatePopper', function () {\n\t if (_this.$parent.visible) _this.updatePopper();\n\t });\n\t this.$on('destroyPopper', this.destroyPopper);\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n\n/***/ 269:\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-select-dropdown\",\n\t class: [{\n\t 'is-multiple': _vm.$parent.multiple\n\t }, _vm.popperClass],\n\t style: ({\n\t minWidth: _vm.minWidth\n\t })\n\t }, [_vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ },\n\n/***/ 270:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(22);\n\n/***/ },\n\n/***/ 271:\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t directives: [{\n\t name: \"clickoutside\",\n\t rawName: \"v-clickoutside\",\n\t value: (_vm.handleClose),\n\t expression: \"handleClose\"\n\t }],\n\t staticClass: \"el-select\"\n\t }, [(_vm.multiple) ? _c('div', {\n\t ref: \"tags\",\n\t staticClass: \"el-select__tags\",\n\t style: ({\n\t 'max-width': _vm.inputWidth - 32 + 'px'\n\t }),\n\t on: {\n\t \"click\": function($event) {\n\t $event.stopPropagation();\n\t _vm.toggleMenu($event)\n\t }\n\t }\n\t }, [_c('transition-group', {\n\t on: {\n\t \"after-leave\": _vm.resetInputHeight\n\t }\n\t }, _vm._l((_vm.selected), function(item) {\n\t return _c('el-tag', {\n\t key: _vm.getValueKey(item),\n\t attrs: {\n\t \"closable\": !_vm.disabled,\n\t \"hit\": item.hitState,\n\t \"type\": \"primary\",\n\t \"close-transition\": \"\"\n\t },\n\t on: {\n\t \"close\": function($event) {\n\t _vm.deleteTag($event, item)\n\t }\n\t }\n\t }, [_c('span', {\n\t staticClass: \"el-select__tags-text\"\n\t }, [_vm._v(_vm._s(item.currentLabel))])])\n\t })), (_vm.filterable) ? _c('input', {\n\t directives: [{\n\t name: \"model\",\n\t rawName: \"v-model\",\n\t value: (_vm.query),\n\t expression: \"query\"\n\t }],\n\t ref: \"input\",\n\t staticClass: \"el-select__input\",\n\t class: (\"is-\" + _vm.size),\n\t style: ({\n\t width: _vm.inputLength + 'px',\n\t 'max-width': _vm.inputWidth - 42 + 'px'\n\t }),\n\t attrs: {\n\t \"type\": \"text\",\n\t \"disabled\": _vm.disabled,\n\t \"debounce\": _vm.remote ? 300 : 0\n\t },\n\t domProps: {\n\t \"value\": (_vm.query)\n\t },\n\t on: {\n\t \"focus\": function($event) {\n\t _vm.visible = true\n\t },\n\t \"keyup\": _vm.managePlaceholder,\n\t \"keydown\": [_vm.resetInputState, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"down\", 40)) { return null; }\n\t $event.preventDefault();\n\t _vm.navigateOptions('next')\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"up\", 38)) { return null; }\n\t $event.preventDefault();\n\t _vm.navigateOptions('prev')\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"enter\", 13)) { return null; }\n\t $event.preventDefault();\n\t _vm.selectOption($event)\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"esc\", 27)) { return null; }\n\t $event.stopPropagation();\n\t $event.preventDefault();\n\t _vm.visible = false\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"delete\", [8, 46])) { return null; }\n\t _vm.deletePrevTag($event)\n\t }],\n\t \"input\": function($event) {\n\t if ($event.target.composing) { return; }\n\t _vm.query = $event.target.value\n\t }\n\t }\n\t }) : _vm._e()], 1) : _vm._e(), _c('el-input', {\n\t ref: \"reference\",\n\t attrs: {\n\t \"type\": \"text\",\n\t \"placeholder\": _vm.currentPlaceholder,\n\t \"name\": _vm.name,\n\t \"size\": _vm.size,\n\t \"disabled\": _vm.disabled,\n\t \"readonly\": !_vm.filterable || _vm.multiple,\n\t \"validate-event\": false,\n\t \"icon\": _vm.iconClass\n\t },\n\t on: {\n\t \"focus\": _vm.handleFocus,\n\t \"click\": _vm.handleIconClick\n\t },\n\t nativeOn: {\n\t \"mousedown\": function($event) {\n\t _vm.handleMouseDown($event)\n\t },\n\t \"keyup\": function($event) {\n\t _vm.debouncedOnInputChange($event)\n\t },\n\t \"keydown\": [function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"down\", 40)) { return null; }\n\t $event.preventDefault();\n\t _vm.navigateOptions('next')\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"up\", 38)) { return null; }\n\t $event.preventDefault();\n\t _vm.navigateOptions('prev')\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"enter\", 13)) { return null; }\n\t $event.preventDefault();\n\t _vm.selectOption($event)\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"esc\", 27)) { return null; }\n\t $event.stopPropagation();\n\t $event.preventDefault();\n\t _vm.visible = false\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"tab\", 9)) { return null; }\n\t _vm.visible = false\n\t }],\n\t \"paste\": function($event) {\n\t _vm.debouncedOnInputChange($event)\n\t },\n\t \"mouseenter\": function($event) {\n\t _vm.inputHovering = true\n\t },\n\t \"mouseleave\": function($event) {\n\t _vm.inputHovering = false\n\t }\n\t },\n\t model: {\n\t value: (_vm.selectedLabel),\n\t callback: function($$v) {\n\t _vm.selectedLabel = $$v\n\t },\n\t expression: \"selectedLabel\"\n\t }\n\t }), _c('transition', {\n\t attrs: {\n\t \"name\": \"el-zoom-in-top\"\n\t },\n\t on: {\n\t \"before-enter\": _vm.handleMenuEnter,\n\t \"after-leave\": _vm.doDestroy\n\t }\n\t }, [_c('el-select-menu', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible && _vm.emptyText !== false),\n\t expression: \"visible && emptyText !== false\"\n\t }],\n\t ref: \"popper\"\n\t }, [_c('el-scrollbar', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.options.length > 0 && !_vm.loading),\n\t expression: \"options.length > 0 && !loading\"\n\t }],\n\t class: {\n\t 'is-empty': !_vm.allowCreate && _vm.filteredOptionsCount === 0\n\t },\n\t attrs: {\n\t \"tag\": \"ul\",\n\t \"wrap-class\": \"el-select-dropdown__wrap\",\n\t \"view-class\": \"el-select-dropdown__list\"\n\t }\n\t }, [(_vm.showNewOption) ? _c('el-option', {\n\t attrs: {\n\t \"value\": _vm.query,\n\t \"created\": \"\"\n\t }\n\t }) : _vm._e(), _vm._t(\"default\")], 2), (_vm.emptyText && (_vm.allowCreate && _vm.options.length === 0 || !_vm.allowCreate)) ? _c('p', {\n\t staticClass: \"el-select-dropdown__empty\"\n\t }, [_vm._v(_vm._s(_vm.emptyText))]) : _vm._e()], 1)], 1)], 1)\n\t},staticRenderFns: []}\n\n/***/ }\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvc2VsZWN0LmpzPzdiNDAiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUosZ0JBQWdCLHVDQUF1Qzs7QUFFdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxRQUFRO0FBQzFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLFVBQVU7O0FBRVY7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxzQkFBc0IsMkJBQTJCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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YTtBQUN0RjtBQUNBO0FBQ0EsUUFBUTtBQUNSLDRFQUE0RSxhQUFhO0FBQ3pGO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsMEVBQTBFLGFBQWE7QUFDdkY7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSLHlFQUF5RSxhQUFhO0FBQ3RGO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjs7QUFFQSxVQUFVIiwiZmlsZSI6IjMwLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge30sXG4vKioqKioqLyBcdFx0XHRpZDogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4vKioqKioqLyBcdFx0fTtcblxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cblxuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9kaXN0L1wiO1xuXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjQpO1xuXG5cbi8qKiovIH0sXG5cbi8qKiovIDM6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuXHQvLyB0aGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuXHQvLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZVxuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcblx0ICByYXdTY3JpcHRFeHBvcnRzLFxuXHQgIGNvbXBpbGVkVGVtcGxhdGUsXG5cdCAgaW5qZWN0U3R5bGVzLFxuXHQgIHNjb3BlSWQsXG5cdCAgbW9kdWxlSWRlbnRpZmllciAvKiBzZXJ2ZXIgb25seSAqL1xuXHQpIHtcblx0ICB2YXIgZXNNb2R1bGVcblx0ICB2YXIgc2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzIHx8IHt9XG5cblx0ICAvLyBFUzYgbW9kdWxlcyBpbnRlcm9wXG5cdCAgdmFyIHR5cGUgPSB0eXBlb2YgcmF3U2NyaXB0RXhwb3J0cy5kZWZhdWx0XG5cdCAgaWYgKHR5cGUgPT09ICdvYmplY3QnIHx8IHR5cGUgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgIGVzTW9kdWxlID0gcmF3U2NyaXB0RXhwb3J0c1xuXHQgICAgc2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMuZGVmYXVsdFxuXHQgIH1cblxuXHQgIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3Bcblx0ICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG5cdCAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuXHQgICAgOiBzY3JpcHRFeHBvcnRzXG5cblx0ICAvLyByZW5kZXIgZnVuY3Rpb25zXG5cdCAgaWYgKGNvbXBpbGVkVGVtcGxhdGUpIHtcblx0ICAgIG9wdGlvbnMucmVuZGVyID0gY29tcGlsZWRUZW1wbGF0ZS5yZW5kZXJcblx0ICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gY29tcGlsZWRUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnNcblx0ICB9XG5cblx0ICAvLyBzY29wZWRJZFxuXHQgIGlmIChzY29wZUlkKSB7XG5cdCAgICBvcHRpb25zLl9zY29wZUlkID0gc2NvcGVJZFxuXHQgIH1cblxuXHQgIHZhciBob29rXG5cdCAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG5cdCAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgLy8gMi4zIGluamVjdGlvblxuXHQgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dClcblx0ICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG5cdCAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0ICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuXHQgICAgICB9XG5cdCAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG5cdCAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcblx0ICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuXHQgICAgICB9XG5cdCAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuXHQgICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuXHQgICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuXHQgICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcblx0ICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuXHQgIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG5cdCAgICBob29rID0gaW5qZWN0U3R5bGVzXG5cdCAgfVxuXG5cdCAgaWYgKGhvb2spIHtcblx0ICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG5cdCAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuXHQgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuXHQgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcblx0ICAgICAgOiBbaG9va11cblx0ICB9XG5cblx0ICByZXR1cm4ge1xuXHQgICAgZXNNb2R1bGU6IGVzTW9kdWxlLFxuXHQgICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcblx0ICAgIG9wdGlvbnM6IG9wdGlvbnNcblx0ICB9XG5cdH1cblxuXG4vKioqLyB9LFxuXG4vKioqLyA5OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvaW5wdXRcIik7XG5cbi8qKiovIH0sXG5cbi8qKiovIDEwOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvY2xpY2tvdXRzaWRlXCIpO1xuXG4vKioqLyB9LFxuXG4vKioqLyAxMzpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Z1ZS1wb3BwZXJcIik7XG5cbi8qKiovIH0sXG5cbi8qKiovIDE0OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXJcIik7XG5cbi8qKiovIH0sXG5cbi8qKiovIDE1OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvc2Nyb2xsYmFyXCIpO1xuXG4vKioqLyB9LFxuXG4vKioqLyA0Njpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Jlc2l6ZS1ldmVudFwiKTtcblxuLyoqKi8gfSxcblxuLyoqKi8gNjA6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9zY3JvbGwtaW50by12aWV3XCIpO1xuXG4vKioqLyB9LFxuXG4vKioqLyA2MTpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL21peGlucy9sb2NhbGVcIik7XG5cbi8qKiovIH0sXG5cbi8qKiovIDYyOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbG9jYWxlXCIpO1xuXG4vKioqLyB9LFxuXG4vKioqLyA2Mzpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInRocm90dGxlLWRlYm91bmNlL2RlYm91bmNlXCIpO1xuXG4vKioqLyB9LFxuXG4vKioqLyAxMjM6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9kb21cIik7XG5cbi8qKiovIH0sXG5cbi8qKiovIDIxNzpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjE4KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjIwKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuXG4vKioqLyAyMTg6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0dmFyIF9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG5cblx0dmFyIF9lbWl0dGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VtaXR0ZXIpO1xuXG5cdHZhciBfdXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMjE5KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IHtcblx0ICBtaXhpbnM6IFtfZW1pdHRlcjIuZGVmYXVsdF0sXG5cblx0ICBuYW1lOiAnRWxPcHRpb24nLFxuXG5cdCAgY29tcG9uZW50TmFtZTogJ0VsT3B0aW9uJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICB2YWx1ZToge1xuXHQgICAgICByZXF1aXJlZDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIGxhYmVsOiBbU3RyaW5nLCBOdW1iZXJdLFxuXHQgICAgY3JlYXRlZDogQm9vbGVhbixcblx0ICAgIGRpc2FibGVkOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IGZhbHNlXG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBpbmRleDogLTEsXG5cdCAgICAgIGdyb3VwRGlzYWJsZWQ6IGZhbHNlLFxuXHQgICAgICB2aXNpYmxlOiB0cnVlLFxuXHQgICAgICBoaXRTdGF0ZTogZmFsc2Vcblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIGlzT2JqZWN0OiBmdW5jdGlvbiBpc09iamVjdCgpIHtcblx0ICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzLnZhbHVlKS50b0xvd2VyQ2FzZSgpID09PSAnW29iamVjdCBvYmplY3RdJztcblx0ICAgIH0sXG5cdCAgICBjdXJyZW50TGFiZWw6IGZ1bmN0aW9uIGN1cnJlbnRMYWJlbCgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMubGFiZWwgfHwgKHRoaXMuaXNPYmplY3QgPyAnJyA6IHRoaXMudmFsdWUpO1xuXHQgICAgfSxcblx0ICAgIGN1cnJlbnRWYWx1ZTogZnVuY3Rpb24gY3VycmVudFZhbHVlKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCB0aGlzLmxhYmVsIHx8ICcnO1xuXHQgICAgfSxcblx0ICAgIHBhcmVudDogZnVuY3Rpb24gcGFyZW50KCkge1xuXHQgICAgICB2YXIgcmVzdWx0ID0gdGhpcy4kcGFyZW50O1xuXHQgICAgICB3aGlsZSAoIXJlc3VsdC5pc1NlbGVjdCkge1xuXHQgICAgICAgIHJlc3VsdCA9IHJlc3VsdC4kcGFyZW50O1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiByZXN1bHQ7XG5cdCAgICB9LFxuXHQgICAgaXRlbVNlbGVjdGVkOiBmdW5jdGlvbiBpdGVtU2VsZWN0ZWQoKSB7XG5cdCAgICAgIGlmICghdGhpcy5wYXJlbnQubXVsdGlwbGUpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5pc0VxdWFsKHRoaXMudmFsdWUsIHRoaXMucGFyZW50LnZhbHVlKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5jb250YWlucyh0aGlzLnBhcmVudC52YWx1ZSwgdGhpcy52YWx1ZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBsaW1pdFJlYWNoZWQ6IGZ1bmN0aW9uIGxpbWl0UmVhY2hlZCgpIHtcblx0ICAgICAgaWYgKHRoaXMucGFyZW50Lm11bHRpcGxlKSB7XG5cdCAgICAgICAgcmV0dXJuICF0aGlzLml0ZW1TZWxlY3RlZCAmJiB0aGlzLnBhcmVudC52YWx1ZS5sZW5ndGggPj0gdGhpcy5wYXJlbnQubXVsdGlwbGVMaW1pdCAmJiB0aGlzLnBhcmVudC5tdWx0aXBsZUxpbWl0ID4gMDtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgIGN1cnJlbnRMYWJlbDogZnVuY3Rpb24gY3VycmVudExhYmVsKCkge1xuXHQgICAgICBpZiAoIXRoaXMuY3JlYXRlZCAmJiAhdGhpcy5wYXJlbnQucmVtb3RlKSB0aGlzLmRpc3BhdGNoKCdFbFNlbGVjdCcsICdzZXRTZWxlY3RlZCcpO1xuXHQgICAgfSxcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSgpIHtcblx0ICAgICAgaWYgKCF0aGlzLmNyZWF0ZWQgJiYgIXRoaXMucGFyZW50LnJlbW90ZSkgdGhpcy5kaXNwYXRjaCgnRWxTZWxlY3QnLCAnc2V0U2VsZWN0ZWQnKTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgaXNFcXVhbDogZnVuY3Rpb24gaXNFcXVhbChhLCBiKSB7XG5cdCAgICAgIGlmICghdGhpcy5pc09iamVjdCkge1xuXHQgICAgICAgIHJldHVybiBhID09PSBiO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHZhciB2YWx1ZUtleSA9IHRoaXMucGFyZW50LnZhbHVlS2V5O1xuXHQgICAgICAgIHJldHVybiAoMCwgX3V0aWwuZ2V0VmFsdWVCeVBhdGgpKGEsIHZhbHVlS2V5KSA9PT0gKDAsIF91dGlsLmdldFZhbHVlQnlQYXRoKShiLCB2YWx1ZUtleSk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBjb250YWluczogZnVuY3Rpb24gY29udGFpbnMoKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgdmFyIGFyciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107XG5cdCAgICAgIHZhciB0YXJnZXQgPSBhcmd1bWVudHNbMV07XG5cblx0ICAgICAgaWYgKCF0aGlzLmlzT2JqZWN0KSB7XG5cdCAgICAgICAgcmV0dXJuIGFyci5pbmRleE9mKHRhcmdldCkgPiAtMTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB2YXIgX3JldCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIHZhciB2YWx1ZUtleSA9IF90aGlzLnBhcmVudC52YWx1ZUtleTtcblx0ICAgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIHY6IGFyci5zb21lKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5nZXRWYWx1ZUJ5UGF0aCkoaXRlbSwgdmFsdWVLZXkpID09PSAoMCwgX3V0aWwuZ2V0VmFsdWVCeVBhdGgpKHRhcmdldCwgdmFsdWVLZXkpO1xuXHQgICAgICAgICAgICB9KVxuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9KCk7XG5cblx0ICAgICAgICBpZiAoKHR5cGVvZiBfcmV0ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihfcmV0KSkgPT09IFwib2JqZWN0XCIpIHJldHVybiBfcmV0LnY7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVHcm91cERpc2FibGVkOiBmdW5jdGlvbiBoYW5kbGVHcm91cERpc2FibGVkKHZhbCkge1xuXHQgICAgICB0aGlzLmdyb3VwRGlzYWJsZWQgPSB2YWw7XG5cdCAgICB9LFxuXHQgICAgaG92ZXJJdGVtOiBmdW5jdGlvbiBob3Zlckl0ZW0oKSB7XG5cdCAgICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5ncm91cERpc2FibGVkKSB7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQuaG92ZXJJbmRleCA9IHRoaXMucGFyZW50Lm9wdGlvbnMuaW5kZXhPZih0aGlzKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNlbGVjdE9wdGlvbkNsaWNrOiBmdW5jdGlvbiBzZWxlY3RPcHRpb25DbGljaygpIHtcblx0ICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgIT09IHRydWUgJiYgdGhpcy5ncm91cERpc2FibGVkICE9PSB0cnVlKSB7XG5cdCAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxTZWxlY3QnLCAnaGFuZGxlT3B0aW9uQ2xpY2snLCB0aGlzKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHF1ZXJ5Q2hhbmdlOiBmdW5jdGlvbiBxdWVyeUNoYW5nZShxdWVyeSkge1xuXHQgICAgICAvLyBxdWVyeSDph4zlpoLmnpzmnInmraPliJnkuK3nmoTnibnmrorlrZfnrKbvvIzpnIDopoHlhYjlsIbov5nkupvlrZfnrKbovazkuYlcblx0ICAgICAgdmFyIHBhcnNlZFF1ZXJ5ID0gU3RyaW5nKHF1ZXJ5KS5yZXBsYWNlKC8oXFxefFxcKHxcXCl8XFxbfFxcXXxcXCR8XFwqfFxcK3xcXC58XFw/fFxcXFx8XFx7fFxcfXxcXHwpL2csICdcXFxcJDEnKTtcblx0ICAgICAgdGhpcy52aXNpYmxlID0gbmV3IFJlZ0V4cChwYXJzZWRRdWVyeSwgJ2knKS50ZXN0KHRoaXMuY3VycmVudExhYmVsKSB8fCB0aGlzLmNyZWF0ZWQ7XG5cdCAgICAgIGlmICghdGhpcy52aXNpYmxlKSB7XG5cdCAgICAgICAgdGhpcy5wYXJlbnQuZmlsdGVyZWRPcHRpb25zQ291bnQtLTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlc2V0SW5kZXg6IGZ1bmN0aW9uIHJlc2V0SW5kZXgoKSB7XG5cdCAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBfdGhpczIuaW5kZXggPSBfdGhpczIucGFyZW50Lm9wdGlvbnMuaW5kZXhPZihfdGhpczIpO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcblx0ICAgIHRoaXMucGFyZW50Lm9wdGlvbnMucHVzaCh0aGlzKTtcblx0ICAgIHRoaXMucGFyZW50LmNhY2hlZE9wdGlvbnMucHVzaCh0aGlzKTtcblx0ICAgIHRoaXMucGFyZW50Lm9wdGlvbnNDb3VudCsrO1xuXHQgICAgdGhpcy5wYXJlbnQuZmlsdGVyZWRPcHRpb25zQ291bnQrKztcblx0ICAgIHRoaXMuaW5kZXggPSB0aGlzLnBhcmVudC5vcHRpb25zLmluZGV4T2YodGhpcyk7XG5cblx0ICAgIHRoaXMuJG9uKCdxdWVyeUNoYW5nZScsIHRoaXMucXVlcnlDaGFuZ2UpO1xuXHQgICAgdGhpcy4kb24oJ2hhbmRsZUdyb3VwRGlzYWJsZWQnLCB0aGlzLmhhbmRsZUdyb3VwRGlzYWJsZWQpO1xuXHQgICAgdGhpcy4kb24oJ3Jlc2V0SW5kZXgnLCB0aGlzLnJlc2V0SW5kZXgpO1xuXHQgIH0sXG5cdCAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcblx0ICAgIHRoaXMuZGlzcGF0Y2goJ0VsU2VsZWN0JywgJ29uT3B0aW9uRGVzdHJveScsIHRoaXMpO1xuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcblxuLyoqKi8gMjE5OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbFwiKTtcblxuLyoqKi8gfSxcblxuLyoqKi8gMjIwOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2xpJywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJzaG93XCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLnZpc2libGUpLFxuXHQgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW1cIixcblx0ICAgIGNsYXNzOiB7XG5cdCAgICAgICdzZWxlY3RlZCc6IF92bS5pdGVtU2VsZWN0ZWQsXG5cdCAgICAgICdpcy1kaXNhYmxlZCc6IF92bS5kaXNhYmxlZCB8fCBfdm0uZ3JvdXBEaXNhYmxlZCB8fCBfdm0ubGltaXRSZWFjaGVkLFxuXHQgICAgICAgICdob3Zlcic6IF92bS5wYXJlbnQuaG92ZXJJbmRleCA9PT0gX3ZtLmluZGV4XG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJtb3VzZWVudGVyXCI6IF92bS5ob3Zlckl0ZW0sXG5cdCAgICAgIFwiY2xpY2tcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICAgIF92bS5zZWxlY3RPcHRpb25DbGljaygkZXZlbnQpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiLCBbX2MoJ3NwYW4nLCBbX3ZtLl92KF92bS5fcyhfdm0uY3VycmVudExhYmVsKSldKV0pXSwgMilcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9LFxuXG4vKioqLyAyNjQ6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3NlbGVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMjY1KTtcblxuXHR2YXIgX3NlbGVjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zZWxlY3QpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X3NlbGVjdDIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX3NlbGVjdDIuZGVmYXVsdC5uYW1lLCBfc2VsZWN0Mi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfc2VsZWN0Mi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuXG4vKioqLyAyNjU6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2NiksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3MSksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcblxuLyoqKi8gMjY2OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdHZhciBfZW1pdHRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xuXG5cdHZhciBfZW1pdHRlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbWl0dGVyKTtcblxuXHR2YXIgX2xvY2FsZSA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xuXG5cdHZhciBfbG9jYWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2xvY2FsZSk7XG5cblx0dmFyIF9pbnB1dCA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG5cblx0dmFyIF9pbnB1dDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbnB1dCk7XG5cblx0dmFyIF9zZWxlY3REcm9wZG93biA9IF9fd2VicGFja19yZXF1aXJlX18oMjY3KTtcblxuXHR2YXIgX3NlbGVjdERyb3Bkb3duMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3NlbGVjdERyb3Bkb3duKTtcblxuXHR2YXIgX29wdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMjE3KTtcblxuXHR2YXIgX29wdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9vcHRpb24pO1xuXG5cdHZhciBfdGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNzApO1xuXG5cdHZhciBfdGFnMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3RhZyk7XG5cblx0dmFyIF9zY3JvbGxiYXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblxuXHR2YXIgX3Njcm9sbGJhcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9zY3JvbGxiYXIpO1xuXG5cdHZhciBfZGVib3VuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcblxuXHR2YXIgX2RlYm91bmNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlYm91bmNlKTtcblxuXHR2YXIgX2NsaWNrb3V0c2lkZSA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xuXG5cdHZhciBfY2xpY2tvdXRzaWRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NsaWNrb3V0c2lkZSk7XG5cblx0dmFyIF9kb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMyk7XG5cblx0dmFyIF9yZXNpemVFdmVudCA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xuXG5cdHZhciBfbG9jYWxlMyA9IF9fd2VicGFja19yZXF1aXJlX18oNjIpO1xuXG5cdHZhciBfc2Nyb2xsSW50b1ZpZXcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtcblxuXHR2YXIgX3Njcm9sbEludG9WaWV3MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Njcm9sbEludG9WaWV3KTtcblxuXHR2YXIgX3V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHR2YXIgc2l6ZU1hcCA9IHtcblx0ICAnbGFyZ2UnOiA0Mixcblx0ICAnc21hbGwnOiAzMCxcblx0ICAnbWluaSc6IDIyXG5cdH07XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG1peGluczogW19lbWl0dGVyMi5kZWZhdWx0LCBfbG9jYWxlMi5kZWZhdWx0XSxcblxuXHQgIG5hbWU6ICdFbFNlbGVjdCcsXG5cblx0ICBjb21wb25lbnROYW1lOiAnRWxTZWxlY3QnLFxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIGljb25DbGFzczogZnVuY3Rpb24gaWNvbkNsYXNzKCkge1xuXHQgICAgICB2YXIgY3JpdGVyaWEgPSB0aGlzLmNsZWFyYWJsZSAmJiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLmlucHV0SG92ZXJpbmcgJiYgIXRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWUgIT09ICcnO1xuXHQgICAgICByZXR1cm4gY3JpdGVyaWEgPyAnY2lyY2xlLWNsb3NlIGlzLXNob3ctY2xvc2UnIDogdGhpcy5yZW1vdGUgJiYgdGhpcy5maWx0ZXJhYmxlID8gJycgOiAnY2FyZXQtdG9wJztcblx0ICAgIH0sXG5cdCAgICBkZWJvdW5jZTogZnVuY3Rpb24gZGVib3VuY2UoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLnJlbW90ZSA/IDMwMCA6IDA7XG5cdCAgICB9LFxuXHQgICAgZW1wdHlUZXh0OiBmdW5jdGlvbiBlbXB0eVRleHQoKSB7XG5cdCAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nVGV4dCB8fCB0aGlzLnQoJ2VsLnNlbGVjdC5sb2FkaW5nJyk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgaWYgKHRoaXMucmVtb3RlICYmIHRoaXMucXVlcnkgPT09ICcnICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcblx0ICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwICYmIHRoaXMuZmlsdGVyZWRPcHRpb25zQ291bnQgPT09IDApIHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLm5vTWF0Y2hUZXh0IHx8IHRoaXMudCgnZWwuc2VsZWN0Lm5vTWF0Y2gnKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgIHJldHVybiB0aGlzLm5vRGF0YVRleHQgfHwgdGhpcy50KCdlbC5zZWxlY3Qubm9EYXRhJyk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBudWxsO1xuXHQgICAgfSxcblx0ICAgIHNob3dOZXdPcHRpb246IGZ1bmN0aW9uIHNob3dOZXdPcHRpb24oKSB7XG5cdCAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgICAgdmFyIGhhc0V4aXN0aW5nT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG5cdCAgICAgICAgcmV0dXJuICFvcHRpb24uY3JlYXRlZDtcblx0ICAgICAgfSkuc29tZShmdW5jdGlvbiAob3B0aW9uKSB7XG5cdCAgICAgICAgcmV0dXJuIG9wdGlvbi5jdXJyZW50TGFiZWwgPT09IF90aGlzLnF1ZXJ5O1xuXHQgICAgICB9KTtcblx0ICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyYWJsZSAmJiB0aGlzLmFsbG93Q3JlYXRlICYmIHRoaXMucXVlcnkgIT09ICcnICYmICFoYXNFeGlzdGluZ09wdGlvbjtcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgY29tcG9uZW50czoge1xuXHQgICAgRWxJbnB1dDogX2lucHV0Mi5kZWZhdWx0LFxuXHQgICAgRWxTZWxlY3RNZW51OiBfc2VsZWN0RHJvcGRvd24yLmRlZmF1bHQsXG5cdCAgICBFbE9wdGlvbjogX29wdGlvbjIuZGVmYXVsdCxcblx0ICAgIEVsVGFnOiBfdGFnMi5kZWZhdWx0LFxuXHQgICAgRWxTY3JvbGxiYXI6IF9zY3JvbGxiYXIyLmRlZmF1bHRcblx0ICB9LFxuXG5cdCAgZGlyZWN0aXZlczogeyBDbGlja291dHNpZGU6IF9jbGlja291dHNpZGUyLmRlZmF1bHQgfSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICBuYW1lOiBTdHJpbmcsXG5cdCAgICB2YWx1ZToge1xuXHQgICAgICByZXF1aXJlZDogdHJ1ZVxuXHQgICAgfSxcblx0ICAgIHNpemU6IFN0cmluZyxcblx0ICAgIGRpc2FibGVkOiBCb29sZWFuLFxuXHQgICAgY2xlYXJhYmxlOiBCb29sZWFuLFxuXHQgICAgZmlsdGVyYWJsZTogQm9vbGVhbixcblx0ICAgIGFsbG93Q3JlYXRlOiBCb29sZWFuLFxuXHQgICAgbG9hZGluZzogQm9vbGVhbixcblx0ICAgIHBvcHBlckNsYXNzOiBTdHJpbmcsXG5cdCAgICByZW1vdGU6IEJvb2xlYW4sXG5cdCAgICBsb2FkaW5nVGV4dDogU3RyaW5nLFxuXHQgICAgbm9NYXRjaFRleHQ6IFN0cmluZyxcblx0ICAgIG5vRGF0YVRleHQ6IFN0cmluZyxcblx0ICAgIHJlbW90ZU1ldGhvZDogRnVuY3Rpb24sXG5cdCAgICBmaWx0ZXJNZXRob2Q6IEZ1bmN0aW9uLFxuXHQgICAgbXVsdGlwbGU6IEJvb2xlYW4sXG5cdCAgICBtdWx0aXBsZUxpbWl0OiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogMFxuXHQgICAgfSxcblx0ICAgIHBsYWNlaG9sZGVyOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG5cdCAgICAgICAgcmV0dXJuICgwLCBfbG9jYWxlMy50KSgnZWwuc2VsZWN0LnBsYWNlaG9sZGVyJyk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBkZWZhdWx0Rmlyc3RPcHRpb246IEJvb2xlYW4sXG5cdCAgICB2YWx1ZUtleToge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICd2YWx1ZSdcblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIG9wdGlvbnM6IFtdLFxuXHQgICAgICBjYWNoZWRPcHRpb25zOiBbXSxcblx0ICAgICAgY3JlYXRlZExhYmVsOiBudWxsLFxuXHQgICAgICBjcmVhdGVkU2VsZWN0ZWQ6IGZhbHNlLFxuXHQgICAgICBzZWxlY3RlZDogdGhpcy5tdWx0aXBsZSA/IFtdIDoge30sXG5cdCAgICAgIGlzU2VsZWN0OiB0cnVlLFxuXHQgICAgICBpbnB1dExlbmd0aDogMjAsXG5cdCAgICAgIGlucHV0V2lkdGg6IDAsXG5cdCAgICAgIGNhY2hlZFBsYWNlSG9sZGVyOiAnJyxcblx0ICAgICAgb3B0aW9uc0NvdW50OiAwLFxuXHQgICAgICBmaWx0ZXJlZE9wdGlvbnNDb3VudDogMCxcblx0ICAgICAgdmlzaWJsZTogZmFsc2UsXG5cdCAgICAgIHNlbGVjdGVkTGFiZWw6ICcnLFxuXHQgICAgICBob3ZlckluZGV4OiAtMSxcblx0ICAgICAgcXVlcnk6ICcnLFxuXHQgICAgICBvcHRpb25zQWxsRGlzYWJsZWQ6IGZhbHNlLFxuXHQgICAgICBpbnB1dEhvdmVyaW5nOiBmYWxzZSxcblx0ICAgICAgY3VycmVudFBsYWNlaG9sZGVyOiAnJ1xuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICB3YXRjaDoge1xuXHQgICAgcGxhY2Vob2xkZXI6IGZ1bmN0aW9uIHBsYWNlaG9sZGVyKHZhbCkge1xuXHQgICAgICB0aGlzLmNhY2hlZFBsYWNlSG9sZGVyID0gdGhpcy5jdXJyZW50UGxhY2Vob2xkZXIgPSB2YWw7XG5cdCAgICB9LFxuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHZhbCkge1xuXHQgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuXHQgICAgICAgIHRoaXMucmVzZXRJbnB1dEhlaWdodCgpO1xuXHQgICAgICAgIGlmICh2YWwubGVuZ3RoID4gMCB8fCB0aGlzLiRyZWZzLmlucHV0ICYmIHRoaXMucXVlcnkgIT09ICcnKSB7XG5cdCAgICAgICAgICB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9ICcnO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMuY2FjaGVkUGxhY2VIb2xkZXI7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuc2V0U2VsZWN0ZWQoKTtcblx0ICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSAmJiAhdGhpcy5tdWx0aXBsZSkge1xuXHQgICAgICAgIHRoaXMuaW5wdXRMZW5ndGggPSAyMDtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWwpO1xuXHQgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgdmFsKTtcblx0ICAgIH0sXG5cdCAgICBxdWVyeTogZnVuY3Rpb24gcXVlcnkodmFsKSB7XG5cdCAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybjtcblx0ICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmIChfdGhpczIudmlzaWJsZSkgX3RoaXMyLmJyb2FkY2FzdCgnRWxTZWxlY3REcm9wZG93bicsICd1cGRhdGVQb3BwZXInKTtcblx0ICAgICAgfSk7XG5cdCAgICAgIHRoaXMuaG92ZXJJbmRleCA9IC0xO1xuXHQgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLmZpbHRlcmFibGUpIHtcblx0ICAgICAgICB0aGlzLmlucHV0TGVuZ3RoID0gdGhpcy4kcmVmcy5pbnB1dC52YWx1ZS5sZW5ndGggKiAxNSArIDIwO1xuXHQgICAgICAgIHRoaXMubWFuYWdlUGxhY2Vob2xkZXIoKTtcblx0ICAgICAgICB0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAodGhpcy5yZW1vdGUgJiYgdHlwZW9mIHRoaXMucmVtb3RlTWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgdGhpcy5ob3ZlckluZGV4ID0gLTE7XG5cdCAgICAgICAgdGhpcy5yZW1vdGVNZXRob2QodmFsKTtcblx0ICAgICAgICB0aGlzLmJyb2FkY2FzdCgnRWxPcHRpb24nLCAncmVzZXRJbmRleCcpO1xuXHQgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmZpbHRlck1ldGhvZCA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgIHRoaXMuZmlsdGVyTWV0aG9kKHZhbCk7XG5cdCAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uR3JvdXAnLCAncXVlcnlDaGFuZ2UnKTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50ID0gdGhpcy5vcHRpb25zQ291bnQ7XG5cdCAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uJywgJ3F1ZXJ5Q2hhbmdlJywgdmFsKTtcblx0ICAgICAgICB0aGlzLmJyb2FkY2FzdCgnRWxPcHRpb25Hcm91cCcsICdxdWVyeUNoYW5nZScpO1xuXHQgICAgICB9XG5cdCAgICAgIGlmICh0aGlzLmRlZmF1bHRGaXJzdE9wdGlvbiAmJiAodGhpcy5maWx0ZXJhYmxlIHx8IHRoaXMucmVtb3RlKSAmJiB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50KSB7XG5cdCAgICAgICAgdGhpcy5jaGVja0RlZmF1bHRGaXJzdE9wdGlvbigpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdmlzaWJsZTogZnVuY3Rpb24gdmlzaWJsZSh2YWwpIHtcblx0ICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cblx0ICAgICAgaWYgKCF2YWwpIHtcblx0ICAgICAgICB0aGlzLiRyZWZzLnJlZmVyZW5jZS4kZWwucXVlcnlTZWxlY3RvcignaW5wdXQnKS5ibHVyKCk7XG5cdCAgICAgICAgdGhpcy5oYW5kbGVJY29uSGlkZSgpO1xuXHQgICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbFNlbGVjdERyb3Bkb3duJywgJ2Rlc3Ryb3lQb3BwZXInKTtcblx0ICAgICAgICBpZiAodGhpcy4kcmVmcy5pbnB1dCkge1xuXHQgICAgICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKCk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMucXVlcnkgPSAnJztcblx0ICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWwgPSAnJztcblx0ICAgICAgICB0aGlzLmlucHV0TGVuZ3RoID0gMjA7XG5cdCAgICAgICAgdGhpcy5yZXNldEhvdmVySW5kZXgoKTtcblx0ICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICBpZiAoX3RoaXMzLiRyZWZzLmlucHV0ICYmIF90aGlzMy4kcmVmcy5pbnB1dC52YWx1ZSA9PT0gJycgJiYgX3RoaXMzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICBfdGhpczMuY3VycmVudFBsYWNlaG9sZGVyID0gX3RoaXMzLmNhY2hlZFBsYWNlSG9sZGVyO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuXHQgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcblx0ICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSAmJiB0aGlzLmFsbG93Q3JlYXRlICYmIHRoaXMuY3JlYXRlZFNlbGVjdGVkICYmIHRoaXMuY3JlYXRlZE9wdGlvbikge1xuXHQgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbCA9IHRoaXMuY3JlYXRlZExhYmVsO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbCA9IHRoaXMuc2VsZWN0ZWQuY3VycmVudExhYmVsO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUpIHRoaXMucXVlcnkgPSB0aGlzLnNlbGVjdGVkTGFiZWw7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMuaGFuZGxlSWNvblNob3coKTtcblx0ICAgICAgICB0aGlzLmJyb2FkY2FzdCgnRWxTZWxlY3REcm9wZG93bicsICd1cGRhdGVQb3BwZXInKTtcblx0ICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlKSB7XG5cdCAgICAgICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5zZWxlY3RlZExhYmVsO1xuXHQgICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcblx0ICAgICAgICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpO1xuXHQgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZSkge1xuXHQgICAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbicsICdxdWVyeUNoYW5nZScsICcnKTtcblx0ICAgICAgICAgICAgICB0aGlzLmJyb2FkY2FzdCgnRWxPcHRpb25Hcm91cCcsICdxdWVyeUNoYW5nZScpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbElucHV0JywgJ2lucHV0U2VsZWN0Jyk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuJGVtaXQoJ3Zpc2libGUtY2hhbmdlJywgdmFsKTtcblx0ICAgIH0sXG5cdCAgICBvcHRpb25zOiBmdW5jdGlvbiBvcHRpb25zKHZhbCkge1xuXHQgICAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcblx0ICAgICAgdGhpcy5vcHRpb25zQWxsRGlzYWJsZWQgPSB2YWwubGVuZ3RoID09PSB2YWwuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgcmV0dXJuIGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7XG5cdCAgICAgIH0pLmxlbmd0aDtcblx0ICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcblx0ICAgICAgICB0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKTtcblx0ICAgICAgfVxuXHQgICAgICB2YXIgaW5wdXRzID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQnKTtcblx0ICAgICAgaWYgKFtdLmluZGV4T2YuY2FsbChpbnB1dHMsIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpID09PSAtMSkge1xuXHQgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQoKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAodGhpcy5kZWZhdWx0Rmlyc3RPcHRpb24gJiYgKHRoaXMuZmlsdGVyYWJsZSB8fCB0aGlzLnJlbW90ZSkgJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudCkge1xuXHQgICAgICAgIHRoaXMuY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb24oKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBoYW5kbGVJY29uSGlkZTogZnVuY3Rpb24gaGFuZGxlSWNvbkhpZGUoKSB7XG5cdCAgICAgIHZhciBpY29uID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvcignLmVsLWlucHV0X19pY29uJyk7XG5cdCAgICAgIGlmIChpY29uKSB7XG5cdCAgICAgICAgKDAsIF9kb20ucmVtb3ZlQ2xhc3MpKGljb24sICdpcy1yZXZlcnNlJyk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVJY29uU2hvdzogZnVuY3Rpb24gaGFuZGxlSWNvblNob3coKSB7XG5cdCAgICAgIHZhciBpY29uID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvcignLmVsLWlucHV0X19pY29uJyk7XG5cdCAgICAgIGlmIChpY29uICYmICEoMCwgX2RvbS5oYXNDbGFzcykoaWNvbiwgJ2VsLWljb24tY2lyY2xlLWNsb3NlJykpIHtcblx0ICAgICAgICAoMCwgX2RvbS5hZGRDbGFzcykoaWNvbiwgJ2lzLXJldmVyc2UnKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHNjcm9sbFRvT3B0aW9uOiBmdW5jdGlvbiBzY3JvbGxUb09wdGlvbihvcHRpb24pIHtcblx0ICAgICAgdmFyIHRhcmdldCA9IEFycmF5LmlzQXJyYXkob3B0aW9uKSAmJiBvcHRpb25bMF0gPyBvcHRpb25bMF0uJGVsIDogb3B0aW9uLiRlbDtcblx0ICAgICAgaWYgKHRoaXMuJHJlZnMucG9wcGVyICYmIHRhcmdldCkge1xuXHQgICAgICAgIHZhciBtZW51ID0gdGhpcy4kcmVmcy5wb3BwZXIuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1zZWxlY3QtZHJvcGRvd25fX3dyYXAnKTtcblx0ICAgICAgICAoMCwgX3Njcm9sbEludG9WaWV3Mi5kZWZhdWx0KShtZW51LCB0YXJnZXQpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlTWVudUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNZW51RW50ZXIoKSB7XG5cdCAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG5cdCAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gX3RoaXM0LnNjcm9sbFRvT3B0aW9uKF90aGlzNC5zZWxlY3RlZCk7XG5cdCAgICAgIH0pO1xuXHQgICAgfSxcblx0ICAgIGdldE9wdGlvbjogZnVuY3Rpb24gZ2V0T3B0aW9uKHZhbHVlKSB7XG5cdCAgICAgIHZhciBvcHRpb24gPSB2b2lkIDA7XG5cdCAgICAgIHZhciBpc09iamVjdCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkudG9Mb3dlckNhc2UoKSA9PT0gJ1tvYmplY3Qgb2JqZWN0XSc7XG5cdCAgICAgIGZvciAodmFyIGkgPSB0aGlzLmNhY2hlZE9wdGlvbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0ICAgICAgICB2YXIgY2FjaGVkT3B0aW9uID0gdGhpcy5jYWNoZWRPcHRpb25zW2ldO1xuXHQgICAgICAgIHZhciBpc0VxdWFsID0gaXNPYmplY3QgPyAoMCwgX3V0aWwuZ2V0VmFsdWVCeVBhdGgpKGNhY2hlZE9wdGlvbi52YWx1ZSwgdGhpcy52YWx1ZUtleSkgPT09ICgwLCBfdXRpbC5nZXRWYWx1ZUJ5UGF0aCkodmFsdWUsIHRoaXMudmFsdWVLZXkpIDogY2FjaGVkT3B0aW9uLnZhbHVlID09PSB2YWx1ZTtcblx0ICAgICAgICBpZiAoaXNFcXVhbCkge1xuXHQgICAgICAgICAgb3B0aW9uID0gY2FjaGVkT3B0aW9uO1xuXHQgICAgICAgICAgYnJlYWs7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIGlmIChvcHRpb24pIHJldHVybiBvcHRpb247XG5cdCAgICAgIHZhciBsYWJlbCA9ICFpc09iamVjdCA/IHZhbHVlIDogJyc7XG5cdCAgICAgIHZhciBuZXdPcHRpb24gPSB7XG5cdCAgICAgICAgdmFsdWU6IHZhbHVlLFxuXHQgICAgICAgIGN1cnJlbnRMYWJlbDogbGFiZWxcblx0ICAgICAgfTtcblx0ICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcblx0ICAgICAgICBuZXdPcHRpb24uaGl0U3RhdGUgPSBmYWxzZTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gbmV3T3B0aW9uO1xuXHQgICAgfSxcblx0ICAgIHNldFNlbGVjdGVkOiBmdW5jdGlvbiBzZXRTZWxlY3RlZCgpIHtcblx0ICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cblx0ICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKHRoaXMudmFsdWUpO1xuXHQgICAgICAgIGlmIChvcHRpb24uY3JlYXRlZCkge1xuXHQgICAgICAgICAgdGhpcy5jcmVhdGVkTGFiZWwgPSBvcHRpb24uY3VycmVudExhYmVsO1xuXHQgICAgICAgICAgdGhpcy5jcmVhdGVkU2VsZWN0ZWQgPSB0cnVlO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLmNyZWF0ZWRTZWxlY3RlZCA9IGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWwgPSBvcHRpb24uY3VycmVudExhYmVsO1xuXHQgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBvcHRpb247XG5cdCAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSkgdGhpcy5xdWVyeSA9IHRoaXMuc2VsZWN0ZWRMYWJlbDtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXHQgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuXHQgICAgICAgIHRoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcblx0ICAgICAgICAgIHJlc3VsdC5wdXNoKF90aGlzNS5nZXRPcHRpb24odmFsdWUpKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLnNlbGVjdGVkID0gcmVzdWx0O1xuXHQgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgX3RoaXM1LnJlc2V0SW5wdXRIZWlnaHQoKTtcblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlRm9jdXM6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKCkge1xuXHQgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUljb25DbGljazogZnVuY3Rpb24gaGFuZGxlSWNvbkNsaWNrKGV2ZW50KSB7XG5cdCAgICAgIGlmICh0aGlzLmljb25DbGFzcy5pbmRleE9mKCdjaXJjbGUtY2xvc2UnKSA+IC0xKSB7XG5cdCAgICAgICAgdGhpcy5kZWxldGVTZWxlY3RlZChldmVudCk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy50b2dnbGVNZW51KCk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVNb3VzZURvd246IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldmVudCkge1xuXHQgICAgICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgIT09ICdJTlBVVCcpIHJldHVybjtcblx0ICAgICAgaWYgKHRoaXMudmlzaWJsZSkge1xuXHQgICAgICAgIHRoaXMuaGFuZGxlQ2xvc2UoKTtcblx0ICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgZG9EZXN0cm95OiBmdW5jdGlvbiBkb0Rlc3Ryb3koKSB7XG5cdCAgICAgIHRoaXMuJHJlZnMucG9wcGVyICYmIHRoaXMuJHJlZnMucG9wcGVyLmRvRGVzdHJveSgpO1xuXHQgICAgICB0aGlzLmRyb3Bkb3duVWwgPSBudWxsO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZUNsb3NlOiBmdW5jdGlvbiBoYW5kbGVDbG9zZSgpIHtcblx0ICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG5cdCAgICB9LFxuXHQgICAgdG9nZ2xlTGFzdE9wdGlvbkhpdFN0YXRlOiBmdW5jdGlvbiB0b2dnbGVMYXN0T3B0aW9uSGl0U3RhdGUoaGl0KSB7XG5cdCAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkKSkgcmV0dXJuO1xuXHQgICAgICB2YXIgb3B0aW9uID0gdGhpcy5zZWxlY3RlZFt0aGlzLnNlbGVjdGVkLmxlbmd0aCAtIDFdO1xuXHQgICAgICBpZiAoIW9wdGlvbikgcmV0dXJuO1xuXG5cdCAgICAgIGlmIChoaXQgPT09IHRydWUgfHwgaGl0ID09PSBmYWxzZSkge1xuXHQgICAgICAgIG9wdGlvbi5oaXRTdGF0ZSA9IGhpdDtcblx0ICAgICAgICByZXR1cm4gaGl0O1xuXHQgICAgICB9XG5cblx0ICAgICAgb3B0aW9uLmhpdFN0YXRlID0gIW9wdGlvbi5oaXRTdGF0ZTtcblx0ICAgICAgcmV0dXJuIG9wdGlvbi5oaXRTdGF0ZTtcblx0ICAgIH0sXG5cdCAgICBkZWxldGVQcmV2VGFnOiBmdW5jdGlvbiBkZWxldGVQcmV2VGFnKGUpIHtcblx0ICAgICAgaWYgKGUudGFyZ2V0LnZhbHVlLmxlbmd0aCA8PSAwICYmICF0aGlzLnRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZSgpKSB7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZS5zbGljZSgpO1xuXHQgICAgICAgIHZhbHVlLnBvcCgpO1xuXHQgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbWFuYWdlUGxhY2Vob2xkZXI6IGZ1bmN0aW9uIG1hbmFnZVBsYWNlaG9sZGVyKCkge1xuXHQgICAgICBpZiAodGhpcy5jdXJyZW50UGxhY2Vob2xkZXIgIT09ICcnKSB7XG5cdCAgICAgICAgdGhpcy5jdXJyZW50UGxhY2Vob2xkZXIgPSB0aGlzLiRyZWZzLmlucHV0LnZhbHVlID8gJycgOiB0aGlzLmNhY2hlZFBsYWNlSG9sZGVyO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcmVzZXRJbnB1dFN0YXRlOiBmdW5jdGlvbiByZXNldElucHV0U3RhdGUoZSkge1xuXHQgICAgICBpZiAoZS5rZXlDb2RlICE9PSA4KSB0aGlzLnRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZShmYWxzZSk7XG5cdCAgICAgIHRoaXMuaW5wdXRMZW5ndGggPSB0aGlzLiRyZWZzLmlucHV0LnZhbHVlLmxlbmd0aCAqIDE1ICsgMjA7XG5cdCAgICAgIHRoaXMucmVzZXRJbnB1dEhlaWdodCgpO1xuXHQgICAgfSxcblx0ICAgIHJlc2V0SW5wdXRIZWlnaHQ6IGZ1bmN0aW9uIHJlc2V0SW5wdXRIZWlnaHQoKSB7XG5cdCAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG5cdCAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBpZiAoIV90aGlzNi4kcmVmcy5yZWZlcmVuY2UpIHJldHVybjtcblx0ICAgICAgICB2YXIgaW5wdXRDaGlsZE5vZGVzID0gX3RoaXM2LiRyZWZzLnJlZmVyZW5jZS4kZWwuY2hpbGROb2Rlcztcblx0ICAgICAgICB2YXIgaW5wdXQgPSBbXS5maWx0ZXIuY2FsbChpbnB1dENoaWxkTm9kZXMsIGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgICByZXR1cm4gaXRlbS50YWdOYW1lID09PSAnSU5QVVQnO1xuXHQgICAgICAgIH0pWzBdO1xuXHQgICAgICAgIGlucHV0LnN0eWxlLmhlaWdodCA9IE1hdGgubWF4KF90aGlzNi4kcmVmcy50YWdzLmNsaWVudEhlaWdodCArIDYsIHNpemVNYXBbX3RoaXM2LnNpemVdIHx8IDM2KSArICdweCc7XG5cdCAgICAgICAgaWYgKF90aGlzNi52aXNpYmxlICYmIF90aGlzNi5lbXB0eVRleHQgIT09IGZhbHNlKSB7XG5cdCAgICAgICAgICBfdGhpczYuYnJvYWRjYXN0KCdFbFNlbGVjdERyb3Bkb3duJywgJ3VwZGF0ZVBvcHBlcicpO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgcmVzZXRIb3ZlckluZGV4OiBmdW5jdGlvbiByZXNldEhvdmVySW5kZXgoKSB7XG5cdCAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG5cdCAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGlmICghX3RoaXM3Lm11bHRpcGxlKSB7XG5cdCAgICAgICAgICBfdGhpczcuaG92ZXJJbmRleCA9IF90aGlzNy5vcHRpb25zLmluZGV4T2YoX3RoaXM3LnNlbGVjdGVkKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgaWYgKF90aGlzNy5zZWxlY3RlZC5sZW5ndGggPiAwKSB7XG5cdCAgICAgICAgICAgIF90aGlzNy5ob3ZlckluZGV4ID0gTWF0aC5taW4uYXBwbHkobnVsbCwgX3RoaXM3LnNlbGVjdGVkLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHQgICAgICAgICAgICAgIHJldHVybiBfdGhpczcub3B0aW9ucy5pbmRleE9mKGl0ZW0pO1xuXHQgICAgICAgICAgICB9KSk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBfdGhpczcuaG92ZXJJbmRleCA9IC0xO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfSwgMzAwKTtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVPcHRpb25TZWxlY3Q6IGZ1bmN0aW9uIGhhbmRsZU9wdGlvblNlbGVjdChvcHRpb24pIHtcblx0ICAgICAgdmFyIF90aGlzOCA9IHRoaXM7XG5cblx0ICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcblx0ICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnNsaWNlKCk7XG5cdCAgICAgICAgdmFyIG9wdGlvbkluZGV4ID0gdGhpcy5nZXRWYWx1ZUluZGV4KHZhbHVlLCBvcHRpb24udmFsdWUpO1xuXHQgICAgICAgIGlmIChvcHRpb25JbmRleCA+IC0xKSB7XG5cdCAgICAgICAgICB2YWx1ZS5zcGxpY2Uob3B0aW9uSW5kZXgsIDEpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tdWx0aXBsZUxpbWl0IDw9IDAgfHwgdmFsdWUubGVuZ3RoIDwgdGhpcy5tdWx0aXBsZUxpbWl0KSB7XG5cdCAgICAgICAgICB2YWx1ZS5wdXNoKG9wdGlvbi52YWx1ZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuXHQgICAgICAgIGlmIChvcHRpb24uY3JlYXRlZCkge1xuXHQgICAgICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuXHQgICAgICAgICAgdGhpcy5pbnB1dExlbmd0aCA9IDIwO1xuXHQgICAgICAgIH1cblx0ICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlKSB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKCk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBvcHRpb24udmFsdWUpO1xuXHQgICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gX3RoaXM4LnNjcm9sbFRvT3B0aW9uKG9wdGlvbik7XG5cdCAgICAgIH0pO1xuXHQgICAgfSxcblx0ICAgIGdldFZhbHVlSW5kZXg6IGZ1bmN0aW9uIGdldFZhbHVlSW5kZXgoKSB7XG5cdCAgICAgIHZhciBfdGhpczkgPSB0aGlzO1xuXG5cdCAgICAgIHZhciBhcnIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuXHQgICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbMV07XG5cblx0ICAgICAgdmFyIGlzT2JqZWN0ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS50b0xvd2VyQ2FzZSgpID09PSAnW29iamVjdCBvYmplY3RdJztcblx0ICAgICAgaWYgKCFpc09iamVjdCkge1xuXHQgICAgICAgIHJldHVybiBhcnIuaW5kZXhPZih2YWx1ZSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdmFyIF9yZXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICB2YXIgdmFsdWVLZXkgPSBfdGhpczkudmFsdWVLZXk7XG5cdCAgICAgICAgICB2YXIgaW5kZXggPSAtMTtcblx0ICAgICAgICAgIGFyci5zb21lKGZ1bmN0aW9uIChpdGVtLCBpKSB7XG5cdCAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuZ2V0VmFsdWVCeVBhdGgpKGl0ZW0sIHZhbHVlS2V5KSA9PT0gKDAsIF91dGlsLmdldFZhbHVlQnlQYXRoKSh2YWx1ZSwgdmFsdWVLZXkpKSB7XG5cdCAgICAgICAgICAgICAgaW5kZXggPSBpO1xuXHQgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgICAgdjogaW5kZXhcblx0ICAgICAgICAgIH07XG5cdCAgICAgICAgfSgpO1xuXG5cdCAgICAgICAgaWYgKCh0eXBlb2YgX3JldCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoX3JldCkpID09PSBcIm9iamVjdFwiKSByZXR1cm4gX3JldC52O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgdG9nZ2xlTWVudTogZnVuY3Rpb24gdG9nZ2xlTWVudSgpIHtcblx0ICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSAmJiB0aGlzLnF1ZXJ5ID09PSAnJyAmJiB0aGlzLnZpc2libGUpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG5cdCAgICAgICAgdGhpcy52aXNpYmxlID0gIXRoaXMudmlzaWJsZTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG5hdmlnYXRlT3B0aW9uczogZnVuY3Rpb24gbmF2aWdhdGVPcHRpb25zKGRpcmVjdGlvbikge1xuXHQgICAgICB2YXIgX3RoaXMxMCA9IHRoaXM7XG5cblx0ICAgICAgaWYgKCF0aGlzLnZpc2libGUpIHtcblx0ICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfVxuXHQgICAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50ID09PSAwKSByZXR1cm47XG5cdCAgICAgIHRoaXMub3B0aW9uc0FsbERpc2FibGVkID0gdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gdGhpcy5vcHRpb25zLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuXHQgICAgICAgIHJldHVybiBpdGVtLmRpc2FibGVkID09PSB0cnVlO1xuXHQgICAgICB9KS5sZW5ndGg7XG5cdCAgICAgIGlmICghdGhpcy5vcHRpb25zQWxsRGlzYWJsZWQpIHtcblx0ICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnbmV4dCcpIHtcblx0ICAgICAgICAgIHRoaXMuaG92ZXJJbmRleCsrO1xuXHQgICAgICAgICAgaWYgKHRoaXMuaG92ZXJJbmRleCA9PT0gdGhpcy5vcHRpb25zLmxlbmd0aCkge1xuXHQgICAgICAgICAgICB0aGlzLmhvdmVySW5kZXggPSAwO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgaWYgKHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdLmRpc2FibGVkID09PSB0cnVlIHx8IHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdLmdyb3VwRGlzYWJsZWQgPT09IHRydWUgfHwgIXRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdLnZpc2libGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZU9wdGlvbnMoJ25leHQnKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3ByZXYnKSB7XG5cdCAgICAgICAgICB0aGlzLmhvdmVySW5kZXgtLTtcblx0ICAgICAgICAgIGlmICh0aGlzLmhvdmVySW5kZXggPCAwKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaG92ZXJJbmRleCA9IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgaWYgKHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdLmRpc2FibGVkID09PSB0cnVlIHx8IHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdLmdyb3VwRGlzYWJsZWQgPT09IHRydWUgfHwgIXRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdLnZpc2libGUpIHtcblx0ICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZU9wdGlvbnMoJ3ByZXYnKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHJldHVybiBfdGhpczEwLnNjcm9sbFRvT3B0aW9uKF90aGlzMTAub3B0aW9uc1tfdGhpczEwLmhvdmVySW5kZXhdKTtcblx0ICAgICAgfSk7XG5cdCAgICB9LFxuXHQgICAgc2VsZWN0T3B0aW9uOiBmdW5jdGlvbiBzZWxlY3RPcHRpb24oKSB7XG5cdCAgICAgIGlmICh0aGlzLm9wdGlvbnNbdGhpcy5ob3ZlckluZGV4XSkge1xuXHQgICAgICAgIHRoaXMuaGFuZGxlT3B0aW9uU2VsZWN0KHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdKTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGRlbGV0ZVNlbGVjdGVkOiBmdW5jdGlvbiBkZWxldGVTZWxlY3RlZChldmVudCkge1xuXHQgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCAnJyk7XG5cdCAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuXHQgICAgICB0aGlzLiRlbWl0KCdjbGVhcicpO1xuXHQgICAgfSxcblx0ICAgIGRlbGV0ZVRhZzogZnVuY3Rpb24gZGVsZXRlVGFnKGV2ZW50LCB0YWcpIHtcblx0ICAgICAgdmFyIGluZGV4ID0gdGhpcy5zZWxlY3RlZC5pbmRleE9mKHRhZyk7XG5cdCAgICAgIGlmIChpbmRleCA+IC0xICYmICF0aGlzLmRpc2FibGVkKSB7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZS5zbGljZSgpO1xuXHQgICAgICAgIHZhbHVlLnNwbGljZShpbmRleCwgMSk7XG5cdCAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG5cdCAgICAgICAgdGhpcy4kZW1pdCgncmVtb3ZlLXRhZycsIHRhZyk7XG5cdCAgICAgIH1cblx0ICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICB9LFxuXHQgICAgb25JbnB1dENoYW5nZTogZnVuY3Rpb24gb25JbnB1dENoYW5nZSgpIHtcblx0ICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSkge1xuXHQgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnNlbGVjdGVkTGFiZWw7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBvbk9wdGlvbkRlc3Ryb3k6IGZ1bmN0aW9uIG9uT3B0aW9uRGVzdHJveShvcHRpb24pIHtcblx0ICAgICAgdGhpcy5vcHRpb25zQ291bnQtLTtcblx0ICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudC0tO1xuXHQgICAgICB2YXIgaW5kZXggPSB0aGlzLm9wdGlvbnMuaW5kZXhPZihvcHRpb24pO1xuXHQgICAgICBpZiAoaW5kZXggPiAtMSkge1xuXHQgICAgICAgIHRoaXMub3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuXHQgICAgICB9XG5cdCAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbicsICdyZXNldEluZGV4Jyk7XG5cdCAgICB9LFxuXHQgICAgcmVzZXRJbnB1dFdpZHRoOiBmdW5jdGlvbiByZXNldElucHV0V2lkdGgoKSB7XG5cdCAgICAgIHRoaXMuaW5wdXRXaWR0aCA9IHRoaXMuJHJlZnMucmVmZXJlbmNlLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblx0ICAgIH0sXG5cdCAgICBoYW5kbGVSZXNpemU6IGZ1bmN0aW9uIGhhbmRsZVJlc2l6ZSgpIHtcblx0ICAgICAgdGhpcy5yZXNldElucHV0V2lkdGgoKTtcblx0ICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHRoaXMucmVzZXRJbnB1dEhlaWdodCgpO1xuXHQgICAgfSxcblx0ICAgIGNoZWNrRGVmYXVsdEZpcnN0T3B0aW9uOiBmdW5jdGlvbiBjaGVja0RlZmF1bHRGaXJzdE9wdGlvbigpIHtcblx0ICAgICAgdGhpcy5ob3ZlckluZGV4ID0gLTE7XG5cdCAgICAgIGZvciAodmFyIGkgPSAwOyBpICE9PSB0aGlzLm9wdGlvbnMubGVuZ3RoOyArK2kpIHtcblx0ICAgICAgICB2YXIgb3B0aW9uID0gdGhpcy5vcHRpb25zW2ldO1xuXHQgICAgICAgIGlmICh0aGlzLnF1ZXJ5KSB7XG5cdCAgICAgICAgICAvLyBwaWNrIGZpcnN0IG9wdGlvbnMgdGhhdCBwYXNzZXMgdGhlIGZpbHRlclxuXHQgICAgICAgICAgaWYgKCFvcHRpb24uZGlzYWJsZWQgJiYgIW9wdGlvbi5ncm91cERpc2FibGVkICYmIG9wdGlvbi52aXNpYmxlKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaG92ZXJJbmRleCA9IGk7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAvLyBwaWNrIGN1cnJlbnRseSBzZWxlY3RlZCBvcHRpb25cblx0ICAgICAgICAgIGlmIChvcHRpb24uaXRlbVNlbGVjdGVkKSB7XG5cdCAgICAgICAgICAgIHRoaXMuaG92ZXJJbmRleCA9IGk7XG5cdCAgICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGdldFZhbHVlS2V5OiBmdW5jdGlvbiBnZXRWYWx1ZUtleShpdGVtKSB7XG5cdCAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlbS52YWx1ZSkudG9Mb3dlckNhc2UoKSAhPT0gJ1tvYmplY3Qgb2JqZWN0XScpIHtcblx0ICAgICAgICByZXR1cm4gaXRlbS52YWx1ZTtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gKDAsIF91dGlsLmdldFZhbHVlQnlQYXRoKShpdGVtLnZhbHVlLCB0aGlzLnZhbHVlS2V5KTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgdmFyIF90aGlzMTEgPSB0aGlzO1xuXG5cdCAgICB0aGlzLmNhY2hlZFBsYWNlSG9sZGVyID0gdGhpcy5jdXJyZW50UGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyO1xuXHQgICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcblx0ICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBbXSk7XG5cdCAgICB9XG5cdCAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuXHQgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsICcnKTtcblx0ICAgIH1cblxuXHQgICAgdGhpcy5kZWJvdW5jZWRPbklucHV0Q2hhbmdlID0gKDAsIF9kZWJvdW5jZTIuZGVmYXVsdCkodGhpcy5kZWJvdW5jZSwgZnVuY3Rpb24gKCkge1xuXHQgICAgICBfdGhpczExLm9uSW5wdXRDaGFuZ2UoKTtcblx0ICAgIH0pO1xuXG5cdCAgICB0aGlzLiRvbignaGFuZGxlT3B0aW9uQ2xpY2snLCB0aGlzLmhhbmRsZU9wdGlvblNlbGVjdCk7XG5cdCAgICB0aGlzLiRvbignb25PcHRpb25EZXN0cm95JywgdGhpcy5vbk9wdGlvbkRlc3Ryb3kpO1xuXHQgICAgdGhpcy4kb24oJ3NldFNlbGVjdGVkJywgdGhpcy5zZXRTZWxlY3RlZCk7XG5cdCAgfSxcblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdmFyIF90aGlzMTIgPSB0aGlzO1xuXG5cdCAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xuXHQgICAgICB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9ICcnO1xuXHQgICAgfVxuXHQgICAgKDAsIF9yZXNpemVFdmVudC5hZGRSZXNpemVMaXN0ZW5lcikodGhpcy4kZWwsIHRoaXMuaGFuZGxlUmVzaXplKTtcblx0ICAgIGlmICh0aGlzLnJlbW90ZSAmJiB0aGlzLm11bHRpcGxlKSB7XG5cdCAgICAgIHRoaXMucmVzZXRJbnB1dEhlaWdodCgpO1xuXHQgICAgfVxuXHQgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuXHQgICAgICBpZiAoX3RoaXMxMi4kcmVmcy5yZWZlcmVuY2UgJiYgX3RoaXMxMi4kcmVmcy5yZWZlcmVuY2UuJGVsKSB7XG5cdCAgICAgICAgX3RoaXMxMi5pbnB1dFdpZHRoID0gX3RoaXMxMi4kcmVmcy5yZWZlcmVuY2UuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXHQgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIHRoaXMuc2V0U2VsZWN0ZWQoKTtcblx0ICB9LFxuXHQgIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG5cdCAgICBpZiAodGhpcy4kZWwgJiYgdGhpcy5oYW5kbGVSZXNpemUpICgwLCBfcmVzaXplRXZlbnQucmVtb3ZlUmVzaXplTGlzdGVuZXIpKHRoaXMuJGVsLCB0aGlzLmhhbmRsZVJlc2l6ZSk7XG5cdCAgfVxuXHR9O1xuXG4vKioqLyB9LFxuXG4vKioqLyAyNjc6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2OCksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2OSksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcblxuLyoqKi8gMjY4OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF92dWVQb3BwZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcblxuXHR2YXIgX3Z1ZVBvcHBlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWVQb3BwZXIpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbFNlbGVjdERyb3Bkb3duJyxcblxuXHQgIGNvbXBvbmVudE5hbWU6ICdFbFNlbGVjdERyb3Bkb3duJyxcblxuXHQgIG1peGluczogW192dWVQb3BwZXIyLmRlZmF1bHRdLFxuXG5cdCAgcHJvcHM6IHtcblx0ICAgIHBsYWNlbWVudDoge1xuXHQgICAgICBkZWZhdWx0OiAnYm90dG9tLXN0YXJ0J1xuXHQgICAgfSxcblxuXHQgICAgYm91bmRhcmllc1BhZGRpbmc6IHtcblx0ICAgICAgZGVmYXVsdDogMFxuXHQgICAgfSxcblxuXHQgICAgcG9wcGVyT3B0aW9uczoge1xuXHQgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcblx0ICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgZ3B1QWNjZWxlcmF0aW9uOiBmYWxzZVxuXHQgICAgICAgIH07XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LFxuXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIG1pbldpZHRoOiAnJ1xuXHQgICAgfTtcblx0ICB9LFxuXG5cblx0ICBjb21wdXRlZDoge1xuXHQgICAgcG9wcGVyQ2xhc3M6IGZ1bmN0aW9uIHBvcHBlckNsYXNzKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy4kcGFyZW50LnBvcHBlckNsYXNzO1xuXHQgICAgfVxuXHQgIH0sXG5cblx0ICB3YXRjaDoge1xuXHQgICAgJyRwYXJlbnQuaW5wdXRXaWR0aCc6IGZ1bmN0aW9uICRwYXJlbnRJbnB1dFdpZHRoKCkge1xuXHQgICAgICB0aGlzLm1pbldpZHRoID0gdGhpcy4kcGFyZW50LiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArICdweCc7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG5cdCAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMuJHBhcmVudC4kcmVmcy5yZWZlcmVuY2UuJGVsO1xuXHQgICAgdGhpcy4kcGFyZW50LnBvcHBlckVsbSA9IHRoaXMucG9wcGVyRWxtID0gdGhpcy4kZWw7XG5cdCAgICB0aGlzLiRvbigndXBkYXRlUG9wcGVyJywgZnVuY3Rpb24gKCkge1xuXHQgICAgICBpZiAoX3RoaXMuJHBhcmVudC52aXNpYmxlKSBfdGhpcy51cGRhdGVQb3BwZXIoKTtcblx0ICAgIH0pO1xuXHQgICAgdGhpcy4kb24oJ2Rlc3Ryb3lQb3BwZXInLCB0aGlzLmRlc3Ryb3lQb3BwZXIpO1xuXHQgIH1cblx0fTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuLyoqKi8gfSxcblxuLyoqKi8gMjY5OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdC1kcm9wZG93blwiLFxuXHQgICAgY2xhc3M6IFt7XG5cdCAgICAgICdpcy1tdWx0aXBsZSc6IF92bS4kcGFyZW50Lm11bHRpcGxlXG5cdCAgICB9LCBfdm0ucG9wcGVyQ2xhc3NdLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIG1pbldpZHRoOiBfdm0ubWluV2lkdGhcblx0ICAgIH0pXG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH0sXG5cbi8qKiovIDI3MDpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3RhZ1wiKTtcblxuLyoqKi8gfSxcblxuLyoqKi8gMjcxOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwiY2xpY2tvdXRzaWRlXCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1jbGlja291dHNpZGVcIixcblx0ICAgICAgdmFsdWU6IChfdm0uaGFuZGxlQ2xvc2UpLFxuXHQgICAgICBleHByZXNzaW9uOiBcImhhbmRsZUNsb3NlXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0XCJcblx0ICB9LCBbKF92bS5tdWx0aXBsZSkgPyBfYygnZGl2Jywge1xuXHQgICAgcmVmOiBcInRhZ3NcIixcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdF9fdGFnc1wiLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgICdtYXgtd2lkdGgnOiBfdm0uaW5wdXRXaWR0aCAtIDMyICsgJ3B4J1xuXHQgICAgfSksXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgICBfdm0udG9nZ2xlTWVudSgkZXZlbnQpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9LCBbX2MoJ3RyYW5zaXRpb24tZ3JvdXAnLCB7XG5cdCAgICBvbjoge1xuXHQgICAgICBcImFmdGVyLWxlYXZlXCI6IF92bS5yZXNldElucHV0SGVpZ2h0XG5cdCAgICB9XG5cdCAgfSwgX3ZtLl9sKChfdm0uc2VsZWN0ZWQpLCBmdW5jdGlvbihpdGVtKSB7XG5cdCAgICByZXR1cm4gX2MoJ2VsLXRhZycsIHtcblx0ICAgICAga2V5OiBfdm0uZ2V0VmFsdWVLZXkoaXRlbSksXG5cdCAgICAgIGF0dHJzOiB7XG5cdCAgICAgICAgXCJjbG9zYWJsZVwiOiAhX3ZtLmRpc2FibGVkLFxuXHQgICAgICAgIFwiaGl0XCI6IGl0ZW0uaGl0U3RhdGUsXG5cdCAgICAgICAgXCJ0eXBlXCI6IFwicHJpbWFyeVwiLFxuXHQgICAgICAgIFwiY2xvc2UtdHJhbnNpdGlvblwiOiBcIlwiXG5cdCAgICAgIH0sXG5cdCAgICAgIG9uOiB7XG5cdCAgICAgICAgXCJjbG9zZVwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICAgIF92bS5kZWxldGVUYWcoJGV2ZW50LCBpdGVtKVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSwgW19jKCdzcGFuJywge1xuXHQgICAgICBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3RfX3RhZ3MtdGV4dFwiXG5cdCAgICB9LCBbX3ZtLl92KF92bS5fcyhpdGVtLmN1cnJlbnRMYWJlbCkpXSldKVxuXHQgIH0pKSwgKF92bS5maWx0ZXJhYmxlKSA/IF9jKCdpbnB1dCcsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwibW9kZWxcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG5cdCAgICAgIHZhbHVlOiAoX3ZtLnF1ZXJ5KSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJxdWVyeVwiXG5cdCAgICB9XSxcblx0ICAgIHJlZjogXCJpbnB1dFwiLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0X19pbnB1dFwiLFxuXHQgICAgY2xhc3M6IChcImlzLVwiICsgX3ZtLnNpemUpLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIHdpZHRoOiBfdm0uaW5wdXRMZW5ndGggKyAncHgnLFxuXHQgICAgICAnbWF4LXdpZHRoJzogX3ZtLmlucHV0V2lkdGggLSA0MiArICdweCdcblx0ICAgIH0pLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJ0eXBlXCI6IFwidGV4dFwiLFxuXHQgICAgICBcImRpc2FibGVkXCI6IF92bS5kaXNhYmxlZCxcblx0ICAgICAgXCJkZWJvdW5jZVwiOiBfdm0ucmVtb3RlID8gMzAwIDogMFxuXHQgICAgfSxcblx0ICAgIGRvbVByb3BzOiB7XG5cdCAgICAgIFwidmFsdWVcIjogKF92bS5xdWVyeSlcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImZvY3VzXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS52aXNpYmxlID0gdHJ1ZVxuXHQgICAgICB9LFxuXHQgICAgICBcImtleXVwXCI6IF92bS5tYW5hZ2VQbGFjZWhvbGRlcixcblx0ICAgICAgXCJrZXlkb3duXCI6IFtfdm0ucmVzZXRJbnB1dFN0YXRlLCBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBpZiAoISgnYnV0dG9uJyBpbiAkZXZlbnQpICYmIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJkb3duXCIsIDQwKSkgeyByZXR1cm4gbnVsbDsgfVxuXHQgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIF92bS5uYXZpZ2F0ZU9wdGlvbnMoJ25leHQnKVxuXHQgICAgICB9LCBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBpZiAoISgnYnV0dG9uJyBpbiAkZXZlbnQpICYmIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJ1cFwiLCAzOCkpIHsgcmV0dXJuIG51bGw7IH1cblx0ICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICBfdm0ubmF2aWdhdGVPcHRpb25zKCdwcmV2Jylcblx0ICAgICAgfSwgZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKCEoJ2J1dHRvbicgaW4gJGV2ZW50KSAmJiBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZW50ZXJcIiwgMTMpKSB7IHJldHVybiBudWxsOyB9XG5cdCAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgX3ZtLnNlbGVjdE9wdGlvbigkZXZlbnQpXG5cdCAgICAgIH0sIGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIGlmICghKCdidXR0b24nIGluICRldmVudCkgJiYgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVzY1wiLCAyNykpIHsgcmV0dXJuIG51bGw7IH1cblx0ICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgX3ZtLnZpc2libGUgPSBmYWxzZVxuXHQgICAgICB9LCBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBpZiAoISgnYnV0dG9uJyBpbiAkZXZlbnQpICYmIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJkZWxldGVcIiwgWzgsIDQ2XSkpIHsgcmV0dXJuIG51bGw7IH1cblx0ICAgICAgICBfdm0uZGVsZXRlUHJldlRhZygkZXZlbnQpXG5cdCAgICAgIH1dLFxuXHQgICAgICBcImlucHV0XCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIGlmICgkZXZlbnQudGFyZ2V0LmNvbXBvc2luZykgeyByZXR1cm47IH1cblx0ICAgICAgICBfdm0ucXVlcnkgPSAkZXZlbnQudGFyZ2V0LnZhbHVlXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9KSA6IF92bS5fZSgpXSwgMSkgOiBfdm0uX2UoKSwgX2MoJ2VsLWlucHV0Jywge1xuXHQgICAgcmVmOiBcInJlZmVyZW5jZVwiLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJ0eXBlXCI6IFwidGV4dFwiLFxuXHQgICAgICBcInBsYWNlaG9sZGVyXCI6IF92bS5jdXJyZW50UGxhY2Vob2xkZXIsXG5cdCAgICAgIFwibmFtZVwiOiBfdm0ubmFtZSxcblx0ICAgICAgXCJzaXplXCI6IF92bS5zaXplLFxuXHQgICAgICBcImRpc2FibGVkXCI6IF92bS5kaXNhYmxlZCxcblx0ICAgICAgXCJyZWFkb25seVwiOiAhX3ZtLmZpbHRlcmFibGUgfHwgX3ZtLm11bHRpcGxlLFxuXHQgICAgICBcInZhbGlkYXRlLWV2ZW50XCI6IGZhbHNlLFxuXHQgICAgICBcImljb25cIjogX3ZtLmljb25DbGFzc1xuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiZm9jdXNcIjogX3ZtLmhhbmRsZUZvY3VzLFxuXHQgICAgICBcImNsaWNrXCI6IF92bS5oYW5kbGVJY29uQ2xpY2tcblx0ICAgIH0sXG5cdCAgICBuYXRpdmVPbjoge1xuXHQgICAgICBcIm1vdXNlZG93blwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uaGFuZGxlTW91c2VEb3duKCRldmVudClcblx0ICAgICAgfSxcblx0ICAgICAgXCJrZXl1cFwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uZGVib3VuY2VkT25JbnB1dENoYW5nZSgkZXZlbnQpXG5cdCAgICAgIH0sXG5cdCAgICAgIFwia2V5ZG93blwiOiBbZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKCEoJ2J1dHRvbicgaW4gJGV2ZW50KSAmJiBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZG93blwiLCA0MCkpIHsgcmV0dXJuIG51bGw7IH1cblx0ICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0ICAgICAgICBfdm0ubmF2aWdhdGVPcHRpb25zKCduZXh0Jylcblx0ICAgICAgfSwgZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKCEoJ2J1dHRvbicgaW4gJGV2ZW50KSAmJiBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwidXBcIiwgMzgpKSB7IHJldHVybiBudWxsOyB9XG5cdCAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgX3ZtLm5hdmlnYXRlT3B0aW9ucygncHJldicpXG5cdCAgICAgIH0sIGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIGlmICghKCdidXR0b24nIGluICRldmVudCkgJiYgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVudGVyXCIsIDEzKSkgeyByZXR1cm4gbnVsbDsgfVxuXHQgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIF92bS5zZWxlY3RPcHRpb24oJGV2ZW50KVxuXHQgICAgICB9LCBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBpZiAoISgnYnV0dG9uJyBpbiAkZXZlbnQpICYmIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlc2NcIiwgMjcpKSB7IHJldHVybiBudWxsOyB9XG5cdCAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHQgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIF92bS52aXNpYmxlID0gZmFsc2Vcblx0ICAgICAgfSwgZnVuY3Rpb24oJGV2ZW50KSB7XG5cdCAgICAgICAgaWYgKCEoJ2J1dHRvbicgaW4gJGV2ZW50KSAmJiBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwidGFiXCIsIDkpKSB7IHJldHVybiBudWxsOyB9XG5cdCAgICAgICAgX3ZtLnZpc2libGUgPSBmYWxzZVxuXHQgICAgICB9XSxcblx0ICAgICAgXCJwYXN0ZVwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uZGVib3VuY2VkT25JbnB1dENoYW5nZSgkZXZlbnQpXG5cdCAgICAgIH0sXG5cdCAgICAgIFwibW91c2VlbnRlclwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uaW5wdXRIb3ZlcmluZyA9IHRydWVcblx0ICAgICAgfSxcblx0ICAgICAgXCJtb3VzZWxlYXZlXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5pbnB1dEhvdmVyaW5nID0gZmFsc2Vcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIG1vZGVsOiB7XG5cdCAgICAgIHZhbHVlOiAoX3ZtLnNlbGVjdGVkTGFiZWwpLFxuXHQgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG5cdCAgICAgICAgX3ZtLnNlbGVjdGVkTGFiZWwgPSAkJHZcblx0ICAgICAgfSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJzZWxlY3RlZExhYmVsXCJcblx0ICAgIH1cblx0ICB9KSwgX2MoJ3RyYW5zaXRpb24nLCB7XG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcIm5hbWVcIjogXCJlbC16b29tLWluLXRvcFwiXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJiZWZvcmUtZW50ZXJcIjogX3ZtLmhhbmRsZU1lbnVFbnRlcixcblx0ICAgICAgXCJhZnRlci1sZWF2ZVwiOiBfdm0uZG9EZXN0cm95XG5cdCAgICB9XG5cdCAgfSwgW19jKCdlbC1zZWxlY3QtbWVudScsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS52aXNpYmxlICYmIF92bS5lbXB0eVRleHQgIT09IGZhbHNlKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlICYmIGVtcHR5VGV4dCAhPT0gZmFsc2VcIlxuXHQgICAgfV0sXG5cdCAgICByZWY6IFwicG9wcGVyXCJcblx0ICB9LCBbX2MoJ2VsLXNjcm9sbGJhcicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5vcHRpb25zLmxlbmd0aCA+IDAgJiYgIV92bS5sb2FkaW5nKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJvcHRpb25zLmxlbmd0aCA+IDAgJiYgIWxvYWRpbmdcIlxuXHQgICAgfV0sXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaXMtZW1wdHknOiAhX3ZtLmFsbG93Q3JlYXRlICYmIF92bS5maWx0ZXJlZE9wdGlvbnNDb3VudCA9PT0gMFxuXHQgICAgfSxcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidGFnXCI6IFwidWxcIixcblx0ICAgICAgXCJ3cmFwLWNsYXNzXCI6IFwiZWwtc2VsZWN0LWRyb3Bkb3duX193cmFwXCIsXG5cdCAgICAgIFwidmlldy1jbGFzc1wiOiBcImVsLXNlbGVjdC1kcm9wZG93bl9fbGlzdFwiXG5cdCAgICB9XG5cdCAgfSwgWyhfdm0uc2hvd05ld09wdGlvbikgPyBfYygnZWwtb3B0aW9uJywge1xuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJ2YWx1ZVwiOiBfdm0ucXVlcnksXG5cdCAgICAgIFwiY3JlYXRlZFwiOiBcIlwiXG5cdCAgICB9XG5cdCAgfSkgOiBfdm0uX2UoKSwgX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpLCAoX3ZtLmVtcHR5VGV4dCAmJiAoX3ZtLmFsbG93Q3JlYXRlICYmIF92bS5vcHRpb25zLmxlbmd0aCA9PT0gMCB8fCAhX3ZtLmFsbG93Q3JlYXRlKSkgPyBfYygncCcsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdC1kcm9wZG93bl9fZW1wdHlcIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS5lbXB0eVRleHQpKV0pIDogX3ZtLl9lKCldLCAxKV0sIDEpXSwgMSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9XG5cbi8qKioqKiovIH0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3NlbGVjdC5qc1xuLy8gbW9kdWxlIGlkID0gMzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///30\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\n\nvar _vue = __webpack_require__(2);\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _dom = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar hasModal = false;\n\nvar getModal = function getModal() {\n if (_vue2.default.prototype.$isServer) return;\n var modalDom = PopupManager.modalDom;\n if (modalDom) {\n hasModal = true;\n } else {\n hasModal = false;\n modalDom = document.createElement('div');\n PopupManager.modalDom = modalDom;\n\n modalDom.addEventListener('touchmove', function (event) {\n event.preventDefault();\n event.stopPropagation();\n });\n\n modalDom.addEventListener('click', function () {\n PopupManager.doOnModalClick && PopupManager.doOnModalClick();\n });\n }\n\n return modalDom;\n};\n\nvar instances = {};\n\nvar PopupManager = {\n zIndex: 2000,\n\n modalFade: true,\n\n getInstance: function getInstance(id) {\n return instances[id];\n },\n\n register: function register(id, instance) {\n if (id && instance) {\n instances[id] = instance;\n }\n },\n\n deregister: function deregister(id) {\n if (id) {\n instances[id] = null;\n delete instances[id];\n }\n },\n\n nextZIndex: function nextZIndex() {\n return PopupManager.zIndex++;\n },\n\n modalStack: [],\n\n doOnModalClick: function doOnModalClick() {\n var topItem = PopupManager.modalStack[PopupManager.modalStack.length - 1];\n if (!topItem) return;\n\n var instance = PopupManager.getInstance(topItem.id);\n if (instance && instance.closeOnClickModal) {\n instance.close();\n }\n },\n\n openModal: function openModal(id, zIndex, dom, modalClass, modalFade) {\n if (_vue2.default.prototype.$isServer) return;\n if (!id || zIndex === undefined) return;\n this.modalFade = modalFade;\n\n var modalStack = this.modalStack;\n\n for (var i = 0, j = modalStack.length; i < j; i++) {\n var item = modalStack[i];\n if (item.id === id) {\n return;\n }\n }\n\n var modalDom = getModal();\n\n (0, _dom.addClass)(modalDom, 'v-modal');\n if (this.modalFade && !hasModal) {\n (0, _dom.addClass)(modalDom, 'v-modal-enter');\n }\n if (modalClass) {\n var classArr = modalClass.trim().split(/\\s+/);\n classArr.forEach(function (item) {\n return (0, _dom.addClass)(modalDom, item);\n });\n }\n setTimeout(function () {\n (0, _dom.removeClass)(modalDom, 'v-modal-enter');\n }, 200);\n\n if (dom && dom.parentNode && dom.parentNode.nodeType !== 11) {\n dom.parentNode.appendChild(modalDom);\n } else {\n document.body.appendChild(modalDom);\n }\n\n if (zIndex) {\n modalDom.style.zIndex = zIndex;\n }\n modalDom.style.display = '';\n\n this.modalStack.push({ id: id, zIndex: zIndex, modalClass: modalClass });\n },\n\n closeModal: function closeModal(id) {\n var modalStack = this.modalStack;\n var modalDom = getModal();\n\n if (modalStack.length > 0) {\n var topItem = modalStack[modalStack.length - 1];\n if (topItem.id === id) {\n if (topItem.modalClass) {\n var classArr = topItem.modalClass.trim().split(/\\s+/);\n classArr.forEach(function (item) {\n return (0, _dom.removeClass)(modalDom, item);\n });\n }\n\n modalStack.pop();\n if (modalStack.length > 0) {\n modalDom.style.zIndex = modalStack[modalStack.length - 1].zIndex;\n }\n } else {\n for (var i = modalStack.length - 1; i >= 0; i--) {\n if (modalStack[i].id === id) {\n modalStack.splice(i, 1);\n break;\n }\n }\n }\n }\n\n if (modalStack.length === 0) {\n if (this.modalFade) {\n (0, _dom.addClass)(modalDom, 'v-modal-leave');\n }\n setTimeout(function () {\n if (modalStack.length === 0) {\n if (modalDom.parentNode) modalDom.parentNode.removeChild(modalDom);\n modalDom.style.display = 'none';\n PopupManager.modalDom = undefined;\n }\n (0, _dom.removeClass)(modalDom, 'v-modal-leave');\n }, 200);\n }\n }\n};\n\nvar getTopPopup = function getTopPopup() {\n if (_vue2.default.prototype.$isServer) return;\n if (PopupManager.modalStack.length > 0) {\n var topPopup = PopupManager.modalStack[PopupManager.modalStack.length - 1];\n if (!topPopup) return;\n var instance = PopupManager.getInstance(topPopup.id);\n\n return instance;\n }\n};\n\nif (!_vue2.default.prototype.$isServer) {\n // handle `esc` key when the popup is shown\n window.addEventListener('keydown', function (event) {\n if (event.keyCode === 27) {\n var topPopup = getTopPopup();\n\n if (topPopup && topPopup.closeOnPressEscape) {\n topPopup.handleClose ? topPopup.handleClose() : topPopup.handleAction ? topPopup.handleAction('cancel') : topPopup.close();\n }\n }\n });\n}\n\nexports.default = PopupManager;\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXAvcG9wdXAtbWFuYWdlci5qcz8zODBjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsZ0JBQWdCOztBQUU3Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLDBDQUEwQyxPQUFPO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEIsaURBQWlEO0FBQzNFLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLDJDQUEyQyxRQUFRO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSIsImZpbGUiOiIzMS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxudmFyIF9kb20gPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi91dGlscy9kb20nKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIGhhc01vZGFsID0gZmFsc2U7XG5cbnZhciBnZXRNb2RhbCA9IGZ1bmN0aW9uIGdldE1vZGFsKCkge1xuICBpZiAoX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm47XG4gIHZhciBtb2RhbERvbSA9IFBvcHVwTWFuYWdlci5tb2RhbERvbTtcbiAgaWYgKG1vZGFsRG9tKSB7XG4gICAgaGFzTW9kYWwgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIGhhc01vZGFsID0gZmFsc2U7XG4gICAgbW9kYWxEb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBQb3B1cE1hbmFnZXIubW9kYWxEb20gPSBtb2RhbERvbTtcblxuICAgIG1vZGFsRG9tLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuXG4gICAgbW9kYWxEb20uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICBQb3B1cE1hbmFnZXIuZG9Pbk1vZGFsQ2xpY2sgJiYgUG9wdXBNYW5hZ2VyLmRvT25Nb2RhbENsaWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbW9kYWxEb207XG59O1xuXG52YXIgaW5zdGFuY2VzID0ge307XG5cbnZhciBQb3B1cE1hbmFnZXIgPSB7XG4gIHpJbmRleDogMjAwMCxcblxuICBtb2RhbEZhZGU6IHRydWUsXG5cbiAgZ2V0SW5zdGFuY2U6IGZ1bmN0aW9uIGdldEluc3RhbmNlKGlkKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlc1tpZF07XG4gIH0sXG5cbiAgcmVnaXN0ZXI6IGZ1bmN0aW9uIHJlZ2lzdGVyKGlkLCBpbnN0YW5jZSkge1xuICAgIGlmIChpZCAmJiBpbnN0YW5jZSkge1xuICAgICAgaW5zdGFuY2VzW2lkXSA9IGluc3RhbmNlO1xuICAgIH1cbiAgfSxcblxuICBkZXJlZ2lzdGVyOiBmdW5jdGlvbiBkZXJlZ2lzdGVyKGlkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICBpbnN0YW5jZXNbaWRdID0gbnVsbDtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZXNbaWRdO1xuICAgIH1cbiAgfSxcblxuICBuZXh0WkluZGV4OiBmdW5jdGlvbiBuZXh0WkluZGV4KCkge1xuICAgIHJldHVybiBQb3B1cE1hbmFnZXIuekluZGV4Kys7XG4gIH0sXG5cbiAgbW9kYWxTdGFjazogW10sXG5cbiAgZG9Pbk1vZGFsQ2xpY2s6IGZ1bmN0aW9uIGRvT25Nb2RhbENsaWNrKCkge1xuICAgIHZhciB0b3BJdGVtID0gUG9wdXBNYW5hZ2VyLm1vZGFsU3RhY2tbUG9wdXBNYW5hZ2VyLm1vZGFsU3RhY2subGVuZ3RoIC0gMV07XG4gICAgaWYgKCF0b3BJdGVtKSByZXR1cm47XG5cbiAgICB2YXIgaW5zdGFuY2UgPSBQb3B1cE1hbmFnZXIuZ2V0SW5zdGFuY2UodG9wSXRlbS5pZCk7XG4gICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLmNsb3NlT25DbGlja01vZGFsKSB7XG4gICAgICBpbnN0YW5jZS5jbG9zZSgpO1xuICAgIH1cbiAgfSxcblxuICBvcGVuTW9kYWw6IGZ1bmN0aW9uIG9wZW5Nb2RhbChpZCwgekluZGV4LCBkb20sIG1vZGFsQ2xhc3MsIG1vZGFsRmFkZSkge1xuICAgIGlmIChfdnVlMi5kZWZhdWx0LnByb3RvdHlwZS4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgICBpZiAoIWlkIHx8IHpJbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgdGhpcy5tb2RhbEZhZGUgPSBtb2RhbEZhZGU7XG5cbiAgICB2YXIgbW9kYWxTdGFjayA9IHRoaXMubW9kYWxTdGFjaztcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbW9kYWxTdGFjay5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gbW9kYWxTdGFja1tpXTtcbiAgICAgIGlmIChpdGVtLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1vZGFsRG9tID0gZ2V0TW9kYWwoKTtcblxuICAgICgwLCBfZG9tLmFkZENsYXNzKShtb2RhbERvbSwgJ3YtbW9kYWwnKTtcbiAgICBpZiAodGhpcy5tb2RhbEZhZGUgJiYgIWhhc01vZGFsKSB7XG4gICAgICAoMCwgX2RvbS5hZGRDbGFzcykobW9kYWxEb20sICd2LW1vZGFsLWVudGVyJyk7XG4gICAgfVxuICAgIGlmIChtb2RhbENsYXNzKSB7XG4gICAgICB2YXIgY2xhc3NBcnIgPSBtb2RhbENsYXNzLnRyaW0oKS5zcGxpdCgvXFxzKy8pO1xuICAgICAgY2xhc3NBcnIuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gKDAsIF9kb20uYWRkQ2xhc3MpKG1vZGFsRG9tLCBpdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICgwLCBfZG9tLnJlbW92ZUNsYXNzKShtb2RhbERvbSwgJ3YtbW9kYWwtZW50ZXInKTtcbiAgICB9LCAyMDApO1xuXG4gICAgaWYgKGRvbSAmJiBkb20ucGFyZW50Tm9kZSAmJiBkb20ucGFyZW50Tm9kZS5ub2RlVHlwZSAhPT0gMTEpIHtcbiAgICAgIGRvbS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKG1vZGFsRG9tKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtb2RhbERvbSk7XG4gICAgfVxuXG4gICAgaWYgKHpJbmRleCkge1xuICAgICAgbW9kYWxEb20uc3R5bGUuekluZGV4ID0gekluZGV4O1xuICAgIH1cbiAgICBtb2RhbERvbS5zdHlsZS5kaXNwbGF5ID0gJyc7XG5cbiAgICB0aGlzLm1vZGFsU3RhY2sucHVzaCh7IGlkOiBpZCwgekluZGV4OiB6SW5kZXgsIG1vZGFsQ2xhc3M6IG1vZGFsQ2xhc3MgfSk7XG4gIH0sXG5cbiAgY2xvc2VNb2RhbDogZnVuY3Rpb24gY2xvc2VNb2RhbChpZCkge1xuICAgIHZhciBtb2RhbFN0YWNrID0gdGhpcy5tb2RhbFN0YWNrO1xuICAgIHZhciBtb2RhbERvbSA9IGdldE1vZGFsKCk7XG5cbiAgICBpZiAobW9kYWxTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgdG9wSXRlbSA9IG1vZGFsU3RhY2tbbW9kYWxTdGFjay5sZW5ndGggLSAxXTtcbiAgICAgIGlmICh0b3BJdGVtLmlkID09PSBpZCkge1xuICAgICAgICBpZiAodG9wSXRlbS5tb2RhbENsYXNzKSB7XG4gICAgICAgICAgdmFyIGNsYXNzQXJyID0gdG9wSXRlbS5tb2RhbENsYXNzLnRyaW0oKS5zcGxpdCgvXFxzKy8pO1xuICAgICAgICAgIGNsYXNzQXJyLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgX2RvbS5yZW1vdmVDbGFzcykobW9kYWxEb20sIGl0ZW0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbW9kYWxTdGFjay5wb3AoKTtcbiAgICAgICAgaWYgKG1vZGFsU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgIG1vZGFsRG9tLnN0eWxlLnpJbmRleCA9IG1vZGFsU3RhY2tbbW9kYWxTdGFjay5sZW5ndGggLSAxXS56SW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBtb2RhbFN0YWNrLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKG1vZGFsU3RhY2tbaV0uaWQgPT09IGlkKSB7XG4gICAgICAgICAgICBtb2RhbFN0YWNrLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtb2RhbFN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaWYgKHRoaXMubW9kYWxGYWRlKSB7XG4gICAgICAgICgwLCBfZG9tLmFkZENsYXNzKShtb2RhbERvbSwgJ3YtbW9kYWwtbGVhdmUnKTtcbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAobW9kYWxTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBpZiAobW9kYWxEb20ucGFyZW50Tm9kZSkgbW9kYWxEb20ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChtb2RhbERvbSk7XG4gICAgICAgICAgbW9kYWxEb20uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICBQb3B1cE1hbmFnZXIubW9kYWxEb20gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgKDAsIF9kb20ucmVtb3ZlQ2xhc3MpKG1vZGFsRG9tLCAndi1tb2RhbC1sZWF2ZScpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBnZXRUb3BQb3B1cCA9IGZ1bmN0aW9uIGdldFRvcFBvcHVwKCkge1xuICBpZiAoX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm47XG4gIGlmIChQb3B1cE1hbmFnZXIubW9kYWxTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHRvcFBvcHVwID0gUG9wdXBNYW5hZ2VyLm1vZGFsU3RhY2tbUG9wdXBNYW5hZ2VyLm1vZGFsU3RhY2subGVuZ3RoIC0gMV07XG4gICAgaWYgKCF0b3BQb3B1cCkgcmV0dXJuO1xuICAgIHZhciBpbnN0YW5jZSA9IFBvcHVwTWFuYWdlci5nZXRJbnN0YW5jZSh0b3BQb3B1cC5pZCk7XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cbn07XG5cbmlmICghX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKSB7XG4gIC8vIGhhbmRsZSBgZXNjYCBrZXkgd2hlbiB0aGUgcG9wdXAgaXMgc2hvd25cbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgIHZhciB0b3BQb3B1cCA9IGdldFRvcFBvcHVwKCk7XG5cbiAgICAgIGlmICh0b3BQb3B1cCAmJiB0b3BQb3B1cC5jbG9zZU9uUHJlc3NFc2NhcGUpIHtcbiAgICAgICAgdG9wUG9wdXAuaGFuZGxlQ2xvc2UgPyB0b3BQb3B1cC5oYW5kbGVDbG9zZSgpIDogdG9wUG9wdXAuaGFuZGxlQWN0aW9uID8gdG9wUG9wdXAuaGFuZGxlQWN0aW9uKCdjYW5jZWwnKSA6IHRvcFBvcHVwLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0cy5kZWZhdWx0ID0gUG9wdXBNYW5hZ2VyO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL3BvcHVwL3BvcHVwLW1hbmFnZXIuanNcbi8vIG1vZHVsZSBpZCA9IDMxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///31\n")},function(module,exports,__webpack_require__){"use strict";eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version {{version}}\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n//\n// Cross module loader\n// Supported: Node, AMD, Browser globals\n//\n;(function (root, factory) {\n if (true) {\n // AMD. Register as an anonymous module.\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object' && module.exports) {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.Popper = factory();\n }\n})(undefined, function () {\n\n 'use strict';\n\n var root = window;\n\n // default options\n var DEFAULTS = {\n // placement of the popper\n placement: 'bottom',\n\n gpuAcceleration: true,\n\n // shift popper from its origin by the given amount of pixels (can be negative)\n offset: 0,\n\n // the element which will act as boundary of the popper\n boundariesElement: 'viewport',\n\n // amount of pixel used to define a minimum distance between the boundaries and the popper\n boundariesPadding: 5,\n\n // popper will try to prevent overflow following this order,\n // by default, then, it could overflow on the left and on top of the boundariesElement\n preventOverflowOrder: ['left', 'right', 'top', 'bottom'],\n\n // the behavior used by flip to change the placement of the popper\n flipBehavior: 'flip',\n\n arrowElement: '[x-arrow]',\n\n // list of functions used to modify the offsets before they are applied to the popper\n modifiers: ['shift', 'offset', 'preventOverflow', 'keepTogether', 'arrow', 'flip', 'applyStyle'],\n\n modifiersIgnored: [],\n\n forceAbsolute: false\n };\n\n /**\n * Create a new Popper.js instance\n * @constructor Popper\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement|Object} popper\n * The HTML element used as popper, or a configuration used to generate the popper.\n * @param {String} [popper.tagName='div'] The tag name of the generated popper.\n * @param {Array} [popper.classNames=['popper']] Array of classes to apply to the generated popper.\n * @param {Array} [popper.attributes] Array of attributes to apply, specify `attr:value` to assign a value to it.\n * @param {HTMLElement|String} [popper.parent=window.document.body] The parent element, given as HTMLElement or as query string.\n * @param {String} [popper.content=''] The content of the popper, it can be text, html, or node; if it is not text, set `contentType` to `html` or `node`.\n * @param {String} [popper.contentType='text'] If `html`, the `content` will be parsed as HTML. If `node`, it will be appended as-is.\n * @param {String} [popper.arrowTagName='div'] Same as `popper.tagName` but for the arrow element.\n * @param {Array} [popper.arrowClassNames='popper__arrow'] Same as `popper.classNames` but for the arrow element.\n * @param {String} [popper.arrowAttributes=['x-arrow']] Same as `popper.attributes` but for the arrow element.\n * @param {Object} options\n * @param {String} [options.placement=bottom]\n * Placement of the popper accepted values: `top(-start, -end), right(-start, -end), bottom(-start, -right),\n * left(-start, -end)`\n *\n * @param {HTMLElement|String} [options.arrowElement='[x-arrow]']\n * The DOM Node used as arrow for the popper, or a CSS selector used to get the DOM node. It must be child of\n * its parent Popper. Popper.js will apply to the given element the style required to align the arrow with its\n * reference element.\n * By default, it will look for a child node of the popper with the `x-arrow` attribute.\n *\n * @param {Boolean} [options.gpuAcceleration=true]\n * When this property is set to true, the popper position will be applied using CSS3 translate3d, allowing the\n * browser to use the GPU to accelerate the rendering.\n * If set to false, the popper will be placed using `top` and `left` properties, not using the GPU.\n *\n * @param {Number} [options.offset=0]\n * Amount of pixels the popper will be shifted (can be negative).\n *\n * @param {String|Element} [options.boundariesElement='viewport']\n * The element which will define the boundaries of the popper position, the popper will never be placed outside\n * of the defined boundaries (except if `keepTogether` is enabled)\n *\n * @param {Number} [options.boundariesPadding=5]\n * Additional padding for the boundaries\n *\n * @param {Array} [options.preventOverflowOrder=['left', 'right', 'top', 'bottom']]\n * Order used when Popper.js tries to avoid overflows from the boundaries, they will be checked in order,\n * this means that the last ones will never overflow\n *\n * @param {String|Array} [options.flipBehavior='flip']\n * The behavior used by the `flip` modifier to change the placement of the popper when the latter is trying to\n * overlap its reference element. Defining `flip` as value, the placement will be flipped on\n * its axis (`right - left`, `top - bottom`).\n * You can even pass an array of placements (eg: `['right', 'left', 'top']` ) to manually specify\n * how alter the placement when a flip is needed. (eg. in the above example, it would first flip from right to left,\n * then, if even in its new placement, the popper is overlapping its reference element, it will be moved to top)\n *\n * @param {Array} [options.modifiers=[ 'shift', 'offset', 'preventOverflow', 'keepTogether', 'arrow', 'flip', 'applyStyle']]\n * List of functions used to modify the data before they are applied to the popper, add your custom functions\n * to this array to edit the offsets and placement.\n * The function should reflect the @params and @returns of preventOverflow\n *\n * @param {Array} [options.modifiersIgnored=[]]\n * Put here any built-in modifier name you want to exclude from the modifiers list\n * The function should reflect the @params and @returns of preventOverflow\n *\n * @param {Boolean} [options.removeOnDestroy=false]\n * Set to true if you want to automatically remove the popper when you call the `destroy` method.\n */\n function Popper(reference, popper, options) {\n this._reference = reference.jquery ? reference[0] : reference;\n this.state = {};\n\n // if the popper variable is a configuration object, parse it to generate an HTMLElement\n // generate a default popper if is not defined\n var isNotDefined = typeof popper === 'undefined' || popper === null;\n var isConfig = popper && Object.prototype.toString.call(popper) === '[object Object]';\n if (isNotDefined || isConfig) {\n this._popper = this.parse(isConfig ? popper : {});\n }\n // otherwise, use the given HTMLElement as popper\n else {\n this._popper = popper.jquery ? popper[0] : popper;\n }\n\n // with {} we create a new object with the options inside it\n this._options = Object.assign({}, DEFAULTS, options);\n\n // refactoring modifiers' list\n this._options.modifiers = this._options.modifiers.map(function (modifier) {\n // remove ignored modifiers\n if (this._options.modifiersIgnored.indexOf(modifier) !== -1) return;\n\n // set the x-placement attribute before everything else because it could be used to add margins to the popper\n // margins needs to be calculated to get the correct popper offsets\n if (modifier === 'applyStyle') {\n this._popper.setAttribute('x-placement', this._options.placement);\n }\n\n // return predefined modifier identified by string or keep the custom one\n return this.modifiers[modifier] || modifier;\n }.bind(this));\n\n // make sure to apply the popper position before any computation\n this.state.position = this._getPosition(this._popper, this._reference);\n setStyle(this._popper, { position: this.state.position, top: 0 });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n // setup event listeners, they will take care of update the position in specific situations\n this._setupEventListeners();\n return this;\n }\n\n //\n // Methods\n //\n /**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\n Popper.prototype.destroy = function () {\n this._popper.removeAttribute('x-placement');\n this._popper.style.left = '';\n this._popper.style.position = '';\n this._popper.style.top = '';\n this._popper.style[getSupportedPropertyName('transform')] = '';\n this._removeEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n if (this._options.removeOnDestroy) {\n this._popper.remove();\n }\n return this;\n };\n\n /**\n * Updates the position of the popper, computing the new offsets and applying the new style\n * @method\n * @memberof Popper\n */\n Popper.prototype.update = function () {\n var data = { instance: this, styles: {} };\n\n // store placement inside the data object, modifiers will be able to edit `placement` if needed\n // and refer to _originalPlacement to know the original value\n data.placement = this._options.placement;\n data._originalPlacement = this._options.placement;\n\n // compute the popper and reference offsets and put them inside data.offsets\n data.offsets = this._getOffsets(this._popper, this._reference, data.placement);\n\n // get boundaries\n data.boundaries = this._getBoundaries(data, this._options.boundariesPadding, this._options.boundariesElement);\n\n data = this.runModifiers(data, this._options.modifiers);\n\n if (typeof this.state.updateCallback === 'function') {\n this.state.updateCallback(data);\n }\n };\n\n /**\n * If a function is passed, it will be executed after the initialization of popper with as first argument the Popper instance.\n * @method\n * @memberof Popper\n * @param {Function} callback\n */\n Popper.prototype.onCreate = function (callback) {\n // the createCallbacks return as first argument the popper instance\n callback(this);\n return this;\n };\n\n /**\n * If a function is passed, it will be executed after each update of popper with as first argument the set of coordinates and informations\n * used to style popper and its arrow.\n * NOTE: it doesn't get fired on the first call of the `Popper.update()` method inside the `Popper` constructor!\n * @method\n * @memberof Popper\n * @param {Function} callback\n */\n Popper.prototype.onUpdate = function (callback) {\n this.state.updateCallback = callback;\n return this;\n };\n\n /**\n * Helper used to generate poppers from a configuration file\n * @method\n * @memberof Popper\n * @param config {Object} configuration\n * @returns {HTMLElement} popper\n */\n Popper.prototype.parse = function (config) {\n var defaultConfig = {\n tagName: 'div',\n classNames: ['popper'],\n attributes: [],\n parent: root.document.body,\n content: '',\n contentType: 'text',\n arrowTagName: 'div',\n arrowClassNames: ['popper__arrow'],\n arrowAttributes: ['x-arrow']\n };\n config = Object.assign({}, defaultConfig, config);\n\n var d = root.document;\n\n var popper = d.createElement(config.tagName);\n addClassNames(popper, config.classNames);\n addAttributes(popper, config.attributes);\n if (config.contentType === 'node') {\n popper.appendChild(config.content.jquery ? config.content[0] : config.content);\n } else if (config.contentType === 'html') {\n popper.innerHTML = config.content;\n } else {\n popper.textContent = config.content;\n }\n\n if (config.arrowTagName) {\n var arrow = d.createElement(config.arrowTagName);\n addClassNames(arrow, config.arrowClassNames);\n addAttributes(arrow, config.arrowAttributes);\n popper.appendChild(arrow);\n }\n\n var parent = config.parent.jquery ? config.parent[0] : config.parent;\n\n // if the given parent is a string, use it to match an element\n // if more than one element is matched, the first one will be used as parent\n // if no elements are matched, the script will throw an error\n if (typeof parent === 'string') {\n parent = d.querySelectorAll(config.parent);\n if (parent.length > 1) {\n console.warn('WARNING: the given `parent` query(' + config.parent + ') matched more than one element, the first one will be used');\n }\n if (parent.length === 0) {\n throw 'ERROR: the given `parent` doesn\\'t exists!';\n }\n parent = parent[0];\n }\n // if the given parent is a DOM nodes list or an array of nodes with more than one element,\n // the first one will be used as parent\n if (parent.length > 1 && parent instanceof Element === false) {\n console.warn('WARNING: you have passed as parent a list of elements, the first one will be used');\n parent = parent[0];\n }\n\n // append the generated popper to its parent\n parent.appendChild(popper);\n\n return popper;\n\n /**\n * Adds class names to the given element\n * @function\n * @ignore\n * @param {HTMLElement} target\n * @param {Array} classes\n */\n function addClassNames(element, classNames) {\n classNames.forEach(function (className) {\n element.classList.add(className);\n });\n }\n\n /**\n * Adds attributes to the given element\n * @function\n * @ignore\n * @param {HTMLElement} target\n * @param {Array} attributes\n * @example\n * addAttributes(element, [ 'data-info:foobar' ]);\n */\n function addAttributes(element, attributes) {\n attributes.forEach(function (attribute) {\n element.setAttribute(attribute.split(':')[0], attribute.split(':')[1] || '');\n });\n }\n };\n\n /**\n * Helper used to get the position which will be applied to the popper\n * @method\n * @memberof Popper\n * @param config {HTMLElement} popper element\n * @param reference {HTMLElement} reference element\n * @returns {String} position\n */\n Popper.prototype._getPosition = function (popper, reference) {\n var container = getOffsetParent(reference);\n\n if (this._options.forceAbsolute) {\n return 'absolute';\n }\n\n // Decide if the popper will be fixed\n // If the reference element is inside a fixed context, the popper will be fixed as well to allow them to scroll together\n var isParentFixed = isFixed(reference, container);\n return isParentFixed ? 'fixed' : 'absolute';\n };\n\n /**\n * Get offsets to the popper\n * @method\n * @memberof Popper\n * @access private\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\n Popper.prototype._getOffsets = function (popper, reference, placement) {\n placement = placement.split('-')[0];\n var popperOffsets = {};\n\n popperOffsets.position = this.state.position;\n var isParentFixed = popperOffsets.position === 'fixed';\n\n //\n // Get reference element position\n //\n var referenceOffsets = getOffsetRectRelativeToCustomParent(reference, getOffsetParent(popper), isParentFixed);\n\n //\n // Get popper sizes\n //\n var popperRect = getOuterSizes(popper);\n\n //\n // Compute offsets of popper\n //\n\n // depending by the popper placement we have to compute its offsets slightly differently\n if (['right', 'left'].indexOf(placement) !== -1) {\n popperOffsets.top = referenceOffsets.top + referenceOffsets.height / 2 - popperRect.height / 2;\n if (placement === 'left') {\n popperOffsets.left = referenceOffsets.left - popperRect.width;\n } else {\n popperOffsets.left = referenceOffsets.right;\n }\n } else {\n popperOffsets.left = referenceOffsets.left + referenceOffsets.width / 2 - popperRect.width / 2;\n if (placement === 'top') {\n popperOffsets.top = referenceOffsets.top - popperRect.height;\n } else {\n popperOffsets.top = referenceOffsets.bottom;\n }\n }\n\n // Add width and height to our offsets object\n popperOffsets.width = popperRect.width;\n popperOffsets.height = popperRect.height;\n\n return {\n popper: popperOffsets,\n reference: referenceOffsets\n };\n };\n\n /**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper\n * @access private\n */\n Popper.prototype._setupEventListeners = function () {\n // NOTE: 1 DOM access here\n this.state.updateBound = this.update.bind(this);\n root.addEventListener('resize', this.state.updateBound);\n // if the boundariesElement is window we don't need to listen for the scroll event\n if (this._options.boundariesElement !== 'window') {\n var target = getScrollParent(this._reference);\n // here it could be both `body` or `documentElement` thanks to Firefox, we then check both\n if (target === root.document.body || target === root.document.documentElement) {\n target = root;\n }\n target.addEventListener('scroll', this.state.updateBound);\n }\n };\n\n /**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper\n * @access private\n */\n Popper.prototype._removeEventListeners = function () {\n // NOTE: 1 DOM access here\n root.removeEventListener('resize', this.state.updateBound);\n if (this._options.boundariesElement !== 'window') {\n var target = getScrollParent(this._reference);\n // here it could be both `body` or `documentElement` thanks to Firefox, we then check both\n if (target === root.document.body || target === root.document.documentElement) {\n target = root;\n }\n target.removeEventListener('scroll', this.state.updateBound);\n }\n this.state.updateBound = null;\n };\n\n /**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper\n * @access private\n * @param {Object} data - Object containing the property \"offsets\" generated by `_getOffsets`\n * @param {Number} padding - Boundaries padding\n * @param {Element} boundariesElement - Element used to define the boundaries\n * @returns {Object} Coordinates of the boundaries\n */\n Popper.prototype._getBoundaries = function (data, padding, boundariesElement) {\n // NOTE: 1 DOM access here\n var boundaries = {};\n var width, height;\n if (boundariesElement === 'window') {\n var body = root.document.body,\n html = root.document.documentElement;\n\n height = Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n width = Math.max(body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth);\n\n boundaries = {\n top: 0,\n right: width,\n bottom: height,\n left: 0\n };\n } else if (boundariesElement === 'viewport') {\n var offsetParent = getOffsetParent(this._popper);\n var scrollParent = getScrollParent(this._popper);\n var offsetParentRect = getOffsetRect(offsetParent);\n\n // Thanks the fucking native API, `document.body.scrollTop` & `document.documentElement.scrollTop`\n var getScrollTopValue = function getScrollTopValue(element) {\n return element == document.body ? Math.max(document.documentElement.scrollTop, document.body.scrollTop) : element.scrollTop;\n };\n var getScrollLeftValue = function getScrollLeftValue(element) {\n return element == document.body ? Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) : element.scrollLeft;\n };\n\n // if the popper is fixed we don't have to substract scrolling from the boundaries\n var scrollTop = data.offsets.popper.position === 'fixed' ? 0 : getScrollTopValue(scrollParent);\n var scrollLeft = data.offsets.popper.position === 'fixed' ? 0 : getScrollLeftValue(scrollParent);\n\n boundaries = {\n top: 0 - (offsetParentRect.top - scrollTop),\n right: root.document.documentElement.clientWidth - (offsetParentRect.left - scrollLeft),\n bottom: root.document.documentElement.clientHeight - (offsetParentRect.top - scrollTop),\n left: 0 - (offsetParentRect.left - scrollLeft)\n };\n } else {\n if (getOffsetParent(this._popper) === boundariesElement) {\n boundaries = {\n top: 0,\n left: 0,\n right: boundariesElement.clientWidth,\n bottom: boundariesElement.clientHeight\n };\n } else {\n boundaries = getOffsetRect(boundariesElement);\n }\n }\n boundaries.left += padding;\n boundaries.right -= padding;\n boundaries.top = boundaries.top + padding;\n boundaries.bottom = boundaries.bottom - padding;\n return boundaries;\n };\n\n /**\n * Loop trough the list of modifiers and run them in order, each of them will then edit the data object\n * @method\n * @memberof Popper\n * @access public\n * @param {Object} data\n * @param {Array} modifiers\n * @param {Function} ends\n */\n Popper.prototype.runModifiers = function (data, modifiers, ends) {\n var modifiersToRun = modifiers.slice();\n if (ends !== undefined) {\n modifiersToRun = this._options.modifiers.slice(0, getArrayKeyIndex(this._options.modifiers, ends));\n }\n\n modifiersToRun.forEach(function (modifier) {\n if (isFunction(modifier)) {\n data = modifier.call(this, data);\n }\n }.bind(this));\n\n return data;\n };\n\n /**\n * Helper used to know if the given modifier depends from another one.\n * @method\n * @memberof Popper\n * @param {String} requesting - name of requesting modifier\n * @param {String} requested - name of requested modifier\n * @returns {Boolean}\n */\n Popper.prototype.isModifierRequired = function (requesting, requested) {\n var index = getArrayKeyIndex(this._options.modifiers, requesting);\n return !!this._options.modifiers.slice(0, index).filter(function (modifier) {\n return modifier === requested;\n }).length;\n };\n\n //\n // Modifiers\n //\n\n /**\n * Modifiers list\n * @namespace Popper.modifiers\n * @memberof Popper\n * @type {Object}\n */\n Popper.prototype.modifiers = {};\n\n /**\n * Apply the computed styles to the popper element\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @returns {Object} The same data object\n */\n Popper.prototype.modifiers.applyStyle = function (data) {\n // apply the final offsets to the popper\n // NOTE: 1 DOM access here\n var styles = {\n position: data.offsets.popper.position\n };\n\n // round top and left to avoid blurry text\n var left = Math.round(data.offsets.popper.left);\n var top = Math.round(data.offsets.popper.top);\n\n // if gpuAcceleration is set to true and transform is supported, we use `translate3d` to apply the position to the popper\n // we automatically use the supported prefixed version if needed\n var prefixedProperty;\n if (this._options.gpuAcceleration && (prefixedProperty = getSupportedPropertyName('transform'))) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles.top = 0;\n styles.left = 0;\n }\n // othwerise, we use the standard `left` and `top` properties\n else {\n styles.left = left;\n styles.top = top;\n }\n\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n Object.assign(styles, data.styles);\n\n setStyle(this._popper, styles);\n\n // set an attribute which will be useful to style the tooltip (use it to properly position its arrow)\n // NOTE: 1 DOM access here\n this._popper.setAttribute('x-placement', data.placement);\n\n // if the arrow modifier is required and the arrow style has been computed, apply the arrow style\n if (this.isModifierRequired(this.modifiers.applyStyle, this.modifiers.arrow) && data.offsets.arrow) {\n setStyle(data.arrowElement, data.offsets.arrow);\n }\n\n return data;\n };\n\n /**\n * Modifier used to shift the popper on the start or end of its reference element side\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.shift = function (data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftVariation = placement.split('-')[1];\n\n // if shift shiftVariation is specified, run the modifier\n if (shiftVariation) {\n var reference = data.offsets.reference;\n var popper = getPopperClientRect(data.offsets.popper);\n\n var shiftOffsets = {\n y: {\n start: { top: reference.top },\n end: { top: reference.top + reference.height - popper.height }\n },\n x: {\n start: { left: reference.left },\n end: { left: reference.left + reference.width - popper.width }\n }\n };\n\n var axis = ['bottom', 'top'].indexOf(basePlacement) !== -1 ? 'x' : 'y';\n\n data.offsets.popper = Object.assign(popper, shiftOffsets[axis][shiftVariation]);\n }\n\n return data;\n };\n\n /**\n * Modifier used to make sure the popper does not overflows from it's boundaries\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.preventOverflow = function (data) {\n var order = this._options.preventOverflowOrder;\n var popper = getPopperClientRect(data.offsets.popper);\n\n var check = {\n left: function left() {\n var left = popper.left;\n if (popper.left < data.boundaries.left) {\n left = Math.max(popper.left, data.boundaries.left);\n }\n return { left: left };\n },\n right: function right() {\n var left = popper.left;\n if (popper.right > data.boundaries.right) {\n left = Math.min(popper.left, data.boundaries.right - popper.width);\n }\n return { left: left };\n },\n top: function top() {\n var top = popper.top;\n if (popper.top < data.boundaries.top) {\n top = Math.max(popper.top, data.boundaries.top);\n }\n return { top: top };\n },\n bottom: function bottom() {\n var top = popper.top;\n if (popper.bottom > data.boundaries.bottom) {\n top = Math.min(popper.top, data.boundaries.bottom - popper.height);\n }\n return { top: top };\n }\n };\n\n order.forEach(function (direction) {\n data.offsets.popper = Object.assign(popper, check[direction]());\n });\n\n return data;\n };\n\n /**\n * Modifier used to make sure the popper is always near its reference\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by _update method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.keepTogether = function (data) {\n var popper = getPopperClientRect(data.offsets.popper);\n var reference = data.offsets.reference;\n var f = Math.floor;\n\n if (popper.right < f(reference.left)) {\n data.offsets.popper.left = f(reference.left) - popper.width;\n }\n if (popper.left > f(reference.right)) {\n data.offsets.popper.left = f(reference.right);\n }\n if (popper.bottom < f(reference.top)) {\n data.offsets.popper.top = f(reference.top) - popper.height;\n }\n if (popper.top > f(reference.bottom)) {\n data.offsets.popper.top = f(reference.bottom);\n }\n\n return data;\n };\n\n /**\n * Modifier used to flip the placement of the popper when the latter is starting overlapping its reference element.\n * Requires the `preventOverflow` modifier before it in order to work.\n * **NOTE:** This modifier will run all its previous modifiers everytime it tries to flip the popper!\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by _update method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.flip = function (data) {\n // check if preventOverflow is in the list of modifiers before the flip modifier.\n // otherwise flip would not work as expected.\n if (!this.isModifierRequired(this.modifiers.flip, this.modifiers.preventOverflow)) {\n console.warn('WARNING: preventOverflow modifier is required by flip modifier in order to work, be sure to include it before flip!');\n return data;\n }\n\n if (data.flipped && data.placement === data._originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n if (this._options.flipBehavior === 'flip') {\n flipOrder = [placement, placementOpposite];\n } else {\n flipOrder = this._options.flipBehavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = getPopperClientRect(data.offsets.popper);\n\n // this boolean is used to distinguish right and bottom from top and left\n // they need different computations to get flipped\n var a = ['right', 'bottom'].indexOf(placement) !== -1;\n\n // using Math.floor because the reference offsets may contain decimals we are not going to consider here\n if (a && Math.floor(data.offsets.reference[placement]) > Math.floor(popperOffsets[placementOpposite]) || !a && Math.floor(data.offsets.reference[placement]) < Math.floor(popperOffsets[placementOpposite])) {\n // we'll use this boolean to detect any flip loop\n data.flipped = true;\n data.placement = flipOrder[index + 1];\n if (variation) {\n data.placement += '-' + variation;\n }\n data.offsets.popper = this._getOffsets(this._popper, this._reference, data.placement).popper;\n\n data = this.runModifiers(data, this._options.modifiers, this._flip);\n }\n }.bind(this));\n return data;\n };\n\n /**\n * Modifier used to add an offset to the popper, useful if you more granularity positioning your popper.\n * The offsets will shift the popper on the side of its reference element.\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by _update method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.offset = function (data) {\n var offset = this._options.offset;\n var popper = data.offsets.popper;\n\n if (data.placement.indexOf('left') !== -1) {\n popper.top -= offset;\n } else if (data.placement.indexOf('right') !== -1) {\n popper.top += offset;\n } else if (data.placement.indexOf('top') !== -1) {\n popper.left -= offset;\n } else if (data.placement.indexOf('bottom') !== -1) {\n popper.left += offset;\n }\n return data;\n };\n\n /**\n * Modifier used to move the arrows on the edge of the popper to make sure them are always between the popper and the reference element\n * It will use the CSS outer size of the arrow element to know how many pixels of conjuction are needed\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by _update method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.arrow = function (data) {\n var arrow = this._options.arrowElement;\n\n // if the arrowElement is a string, suppose it's a CSS selector\n if (typeof arrow === 'string') {\n arrow = this._popper.querySelector(arrow);\n }\n\n // if arrow element is not found, don't run the modifier\n if (!arrow) {\n return data;\n }\n\n // the arrow element must be child of its popper\n if (!this._popper.contains(arrow)) {\n console.warn('WARNING: `arrowElement` must be child of its popper element!');\n return data;\n }\n\n // arrow depends on keepTogether in order to work\n if (!this.isModifierRequired(this.modifiers.arrow, this.modifiers.keepTogether)) {\n console.warn('WARNING: keepTogether modifier is required by arrow modifier in order to work, be sure to include it before arrow!');\n return data;\n }\n\n var arrowStyle = {};\n var placement = data.placement.split('-')[0];\n var popper = getPopperClientRect(data.offsets.popper);\n var reference = data.offsets.reference;\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var side = isVertical ? 'top' : 'left';\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowSize = getOuterSizes(arrow)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowSize);\n }\n // bottom/right side\n if (reference[side] + arrowSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowSize - popper[opSide];\n }\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowSize / 2;\n\n var sideValue = center - popper[side];\n\n // prevent arrow from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowSize - 3, sideValue), 3);\n arrowStyle[side] = sideValue;\n arrowStyle[altSide] = ''; // make sure to remove any old style from the arrow\n\n data.offsets.arrow = arrowStyle;\n data.arrowElement = arrow;\n\n return data;\n };\n\n //\n // Helpers\n //\n\n /**\n * Get the outer sizes of the given element (offset size + margins)\n * @function\n * @ignore\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\n function getOuterSizes(element) {\n // NOTE: 1 DOM access here\n var _display = element.style.display,\n _visibility = element.style.visibility;\n element.style.display = 'block';element.style.visibility = 'hidden';\n var calcWidthToForceRepaint = element.offsetWidth;\n\n // original method\n var styles = root.getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = { width: element.offsetWidth + y, height: element.offsetHeight + x };\n\n // reset element styles\n element.style.display = _display;element.style.visibility = _visibility;\n return result;\n }\n\n /**\n * Get the opposite placement of the given one/\n * @function\n * @ignore\n * @argument {String} placement\n * @returns {String} flipped placement\n */\n function getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n }\n\n /**\n * Given the popper offsets, generate an output similar to getBoundingClientRect\n * @function\n * @ignore\n * @argument {Object} popperOffsets\n * @returns {Object} ClientRect like output\n */\n function getPopperClientRect(popperOffsets) {\n var offsets = Object.assign({}, popperOffsets);\n offsets.right = offsets.left + offsets.width;\n offsets.bottom = offsets.top + offsets.height;\n return offsets;\n }\n\n /**\n * Given an array and the key to find, returns its index\n * @function\n * @ignore\n * @argument {Array} arr\n * @argument keyToFind\n * @returns index or null\n */\n function getArrayKeyIndex(arr, keyToFind) {\n var i = 0,\n key;\n for (key in arr) {\n if (arr[key] === keyToFind) {\n return i;\n }\n i++;\n }\n return null;\n }\n\n /**\n * Get CSS computed property of the given element\n * @function\n * @ignore\n * @argument {Eement} element\n * @argument {String} property\n */\n function getStyleComputedProperty(element, property) {\n // NOTE: 1 DOM access here\n var css = root.getComputedStyle(element, null);\n return css[property];\n }\n\n /**\n * Returns the offset parent of the given element\n * @function\n * @ignore\n * @argument {Element} element\n * @returns {Element} offset parent\n */\n function getOffsetParent(element) {\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent;\n return offsetParent === root.document.body || !offsetParent ? root.document.documentElement : offsetParent;\n }\n\n /**\n * Returns the scrolling parent of the given element\n * @function\n * @ignore\n * @argument {Element} element\n * @returns {Element} offset parent\n */\n function getScrollParent(element) {\n var parent = element.parentNode;\n\n if (!parent) {\n return element;\n }\n\n if (parent === root.document) {\n // Firefox puts the scrollTOp value on `documentElement` instead of `body`, we then check which of them is\n // greater than 0 and return the proper element\n if (root.document.body.scrollTop) {\n return root.document.body;\n } else {\n return root.document.documentElement;\n }\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n if (['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow')) !== -1 || ['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow-x')) !== -1 || ['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow-y')) !== -1) {\n // If the detected scrollParent is body, we perform an additional check on its parentNode\n // in this way we'll get body if the browser is Chrome-ish, or documentElement otherwise\n // fixes issue #65\n return parent;\n }\n return getScrollParent(element.parentNode);\n }\n\n /**\n * Check if the given element is fixed or is inside a fixed parent\n * @function\n * @ignore\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\n function isFixed(element) {\n if (element === root.document.body) {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return element.parentNode ? isFixed(element.parentNode) : element;\n }\n\n /**\n * Set the style to the given popper\n * @function\n * @ignore\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles - Object with a list of properties and values which will be applied to the element\n */\n function setStyle(element, styles) {\n function is_numeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n }\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && is_numeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n }\n\n /**\n * Check if the given variable is a function\n * @function\n * @ignore\n * @argument {*} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\n function isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n }\n\n /**\n * Get the position of the given element, relative to its offset parent\n * @function\n * @ignore\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\n function getOffsetRect(element) {\n var elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop\n };\n\n elementRect.right = elementRect.left + elementRect.width;\n elementRect.bottom = elementRect.top + elementRect.height;\n\n // position\n return elementRect;\n }\n\n /**\n * Get bounding client rect of given element\n * @function\n * @ignore\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\n function getBoundingClientRect(element) {\n var rect = element.getBoundingClientRect();\n\n // whether the IE version is lower than 11\n var isIE = navigator.userAgent.indexOf(\"MSIE\") != -1;\n\n // fix ie document bounding top always 0 bug\n var rectTop = isIE && element.tagName === 'HTML' ? -element.scrollTop : rect.top;\n\n return {\n left: rect.left,\n top: rectTop,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.right - rect.left,\n height: rect.bottom - rectTop\n };\n }\n\n /**\n * Given an element and one of its parents, return the offset\n * @function\n * @ignore\n * @param {HTMLElement} element\n * @param {HTMLElement} parent\n * @return {Object} rect\n */\n function getOffsetRectRelativeToCustomParent(element, parent, fixed) {\n var elementRect = getBoundingClientRect(element);\n var parentRect = getBoundingClientRect(parent);\n\n if (fixed) {\n var scrollParent = getScrollParent(parent);\n parentRect.top += scrollParent.scrollTop;\n parentRect.bottom += scrollParent.scrollTop;\n parentRect.left += scrollParent.scrollLeft;\n parentRect.right += scrollParent.scrollLeft;\n }\n\n var rect = {\n top: elementRect.top - parentRect.top,\n left: elementRect.left - parentRect.left,\n bottom: elementRect.top - parentRect.top + elementRect.height,\n right: elementRect.left - parentRect.left + elementRect.width,\n width: elementRect.width,\n height: elementRect.height\n };\n return rect;\n }\n\n /**\n * Get the prefixed supported property name\n * @function\n * @ignore\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase)\n */\n function getSupportedPropertyName(property) {\n var prefixes = ['', 'ms', 'webkit', 'moz', 'o'];\n\n for (var i = 0; i < prefixes.length; i++) {\n var toCheck = prefixes[i] ? prefixes[i] + property.charAt(0).toUpperCase() + property.slice(1) : property;\n if (typeof root.document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n }\n\n /**\n * The Object.assign() method is used to copy the values of all enumerable own properties from one or more source\n * objects to a target object. It will return the target object.\n * This polyfill doesn't support symbol properties, since ES5 doesn't have symbols anyway\n * Source: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @function\n * @ignore\n */\n if (!Object.assign) {\n Object.defineProperty(Object, 'assign', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: function value(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert first argument to object');\n }\n\n var to = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var nextSource = arguments[i];\n if (nextSource === undefined || nextSource === null) {\n continue;\n }\n nextSource = Object(nextSource);\n\n var keysArray = Object.keys(nextSource);\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n return to;\n }\n });\n }\n\n return Popper;\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcG9wcGVyLmpzPzM0Y2EiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6ImtFQUFBOztBQUVBLG9HQUFvRyxtQkFBbUIsRUFBRSxtQkFBbUIsOEhBQThIOztBQUUxUTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFlBQVk7QUFDM0IsZUFBZSxtQkFBbUI7QUFDbEM7QUFDQSxlQUFlLE9BQU87QUFDdEIsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsTUFBTTtBQUNyQixlQUFlLG1CQUFtQjtBQUNsQyxlQUFlLE9BQU8sOEVBQThFO0FBQ3BHLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxNQUFNO0FBQ3JCLGVBQWUsT0FBTztBQUN0QixlQUFlLE9BQU87QUFDdEIsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLGVBQWUsbUJBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE9BQU87QUFD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RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLE9BQU87QUFDekIsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0Isc0JBQXNCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtRUFBbUUsaUJBQWlCO0FBQ3BGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBLENBQUMiLCJmaWxlIjoiMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuLyoqXG4gKiBAZmlsZU92ZXJ2aWV3IEtpY2thc3MgbGlicmFyeSB0byBjcmVhdGUgYW5kIHBsYWNlIHBvcHBlcnMgbmVhciB0aGVpciByZWZlcmVuY2UgZWxlbWVudHMuXG4gKiBAdmVyc2lvbiB7e3ZlcnNpb259fVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAoYykgMjAxNiBGZWRlcmljbyBaaXZvbG8gYW5kIGNvbnRyaWJ1dG9yc1xuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuLy9cbi8vIENyb3NzIG1vZHVsZSBsb2FkZXJcbi8vIFN1cHBvcnRlZDogTm9kZSwgQU1ELCBCcm93c2VyIGdsb2JhbHNcbi8vXG47KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG4gICAgICAgIGRlZmluZShmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKCh0eXBlb2YgbW9kdWxlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihtb2R1bGUpKSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgICAgLy8gTm9kZS4gRG9lcyBub3Qgd29yayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0XG4gICAgICAgIC8vIG9ubHkgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IG1vZHVsZS5leHBvcnRzLFxuICAgICAgICAvLyBsaWtlIE5vZGUuXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFscyAocm9vdCBpcyB3aW5kb3cpXG4gICAgICAgIHJvb3QuUG9wcGVyID0gZmFjdG9yeSgpO1xuICAgIH1cbn0pKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuXG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHJvb3QgPSB3aW5kb3c7XG5cbiAgICAvLyBkZWZhdWx0IG9wdGlvbnNcbiAgICB2YXIgREVGQVVMVFMgPSB7XG4gICAgICAgIC8vIHBsYWNlbWVudCBvZiB0aGUgcG9wcGVyXG4gICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG5cbiAgICAgICAgZ3B1QWNjZWxlcmF0aW9uOiB0cnVlLFxuXG4gICAgICAgIC8vIHNoaWZ0IHBvcHBlciBmcm9tIGl0cyBvcmlnaW4gYnkgdGhlIGdpdmVuIGFtb3VudCBvZiBwaXhlbHMgKGNhbiBiZSBuZWdhdGl2ZSlcbiAgICAgICAgb2Zmc2V0OiAwLFxuXG4gICAgICAgIC8vIHRoZSBlbGVtZW50IHdoaWNoIHdpbGwgYWN0IGFzIGJvdW5kYXJ5IG9mIHRoZSBwb3BwZXJcbiAgICAgICAgYm91bmRhcmllc0VsZW1lbnQ6ICd2aWV3cG9ydCcsXG5cbiAgICAgICAgLy8gYW1vdW50IG9mIHBpeGVsIHVzZWQgdG8gZGVmaW5lIGEgbWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBib3VuZGFyaWVzIGFuZCB0aGUgcG9wcGVyXG4gICAgICAgIGJvdW5kYXJpZXNQYWRkaW5nOiA1LFxuXG4gICAgICAgIC8vIHBvcHBlciB3aWxsIHRyeSB0byBwcmV2ZW50IG92ZXJmbG93IGZvbGxvd2luZyB0aGlzIG9yZGVyLFxuICAgICAgICAvLyBieSBkZWZhdWx0LCB0aGVuLCBpdCBjb3VsZCBvdmVyZmxvdyBvbiB0aGUgbGVmdCBhbmQgb24gdG9wIG9mIHRoZSBib3VuZGFyaWVzRWxlbWVudFxuICAgICAgICBwcmV2ZW50T3ZlcmZsb3dPcmRlcjogWydsZWZ0JywgJ3JpZ2h0JywgJ3RvcCcsICdib3R0b20nXSxcblxuICAgICAgICAvLyB0aGUgYmVoYXZpb3IgdXNlZCBieSBmbGlwIHRvIGNoYW5nZSB0aGUgcGxhY2VtZW50IG9mIHRoZSBwb3BwZXJcbiAgICAgICAgZmxpcEJlaGF2aW9yOiAnZmxpcCcsXG5cbiAgICAgICAgYXJyb3dFbGVtZW50OiAnW3gtYXJyb3ddJyxcblxuICAgICAgICAvLyBsaXN0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIG1vZGlmeSB0aGUgb2Zmc2V0cyBiZWZvcmUgdGhleSBhcmUgYXBwbGllZCB0byB0aGUgcG9wcGVyXG4gICAgICAgIG1vZGlmaWVyczogWydzaGlmdCcsICdvZmZzZXQnLCAncHJldmVudE92ZXJmbG93JywgJ2tlZXBUb2dldGhlcicsICdhcnJvdycsICdmbGlwJywgJ2FwcGx5U3R5bGUnXSxcblxuICAgICAgICBtb2RpZmllcnNJZ25vcmVkOiBbXSxcblxuICAgICAgICBmb3JjZUFic29sdXRlOiBmYWxzZVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgUG9wcGVyLmpzIGluc3RhbmNlXG4gICAgICogQGNvbnN0cnVjdG9yIFBvcHBlclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fE9iamVjdH0gcG9wcGVyXG4gICAgICogICAgICBUaGUgSFRNTCBlbGVtZW50IHVzZWQgYXMgcG9wcGVyLCBvciBhIGNvbmZpZ3VyYXRpb24gdXNlZCB0byBnZW5lcmF0ZSB0aGUgcG9wcGVyLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbcG9wcGVyLnRhZ05hbWU9J2RpdiddIFRoZSB0YWcgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHBvcHBlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcG9wcGVyLmNsYXNzTmFtZXM9Wydwb3BwZXInXV0gQXJyYXkgb2YgY2xhc3NlcyB0byBhcHBseSB0byB0aGUgZ2VuZXJhdGVkIHBvcHBlci5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbcG9wcGVyLmF0dHJpYnV0ZXNdIEFycmF5IG9mIGF0dHJpYnV0ZXMgdG8gYXBwbHksIHNwZWNpZnkgYGF0dHI6dmFsdWVgIHRvIGFzc2lnbiBhIHZhbHVlIHRvIGl0LlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U3RyaW5nfSBbcG9wcGVyLnBhcmVudD13aW5kb3cuZG9jdW1lbnQuYm9keV0gVGhlIHBhcmVudCBlbGVtZW50LCBnaXZlbiBhcyBIVE1MRWxlbWVudCBvciBhcyBxdWVyeSBzdHJpbmcuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtwb3BwZXIuY29udGVudD0nJ10gVGhlIGNvbnRlbnQgb2YgdGhlIHBvcHBlciwgaXQgY2FuIGJlIHRleHQsIGh0bWwsIG9yIG5vZGU7IGlmIGl0IGlzIG5vdCB0ZXh0LCBzZXQgYGNvbnRlbnRUeXBlYCB0byBgaHRtbGAgb3IgYG5vZGVgLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbcG9wcGVyLmNvbnRlbnRUeXBlPSd0ZXh0J10gSWYgYGh0bWxgLCB0aGUgYGNvbnRlbnRgIHdpbGwgYmUgcGFyc2VkIGFzIEhUTUwuIElmIGBub2RlYCwgaXQgd2lsbCBiZSBhcHBlbmRlZCBhcy1pcy5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3BvcHBlci5hcnJvd1RhZ05hbWU9J2RpdiddIFNhbWUgYXMgYHBvcHBlci50YWdOYW1lYCBidXQgZm9yIHRoZSBhcnJvdyBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwb3BwZXIuYXJyb3dDbGFzc05hbWVzPSdwb3BwZXJfX2Fycm93J10gU2FtZSBhcyBgcG9wcGVyLmNsYXNzTmFtZXNgIGJ1dCBmb3IgdGhlIGFycm93IGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtwb3BwZXIuYXJyb3dBdHRyaWJ1dGVzPVsneC1hcnJvdyddXSBTYW1lIGFzIGBwb3BwZXIuYXR0cmlidXRlc2AgYnV0IGZvciB0aGUgYXJyb3cgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5wbGFjZW1lbnQ9Ym90dG9tXVxuICAgICAqICAgICAgUGxhY2VtZW50IG9mIHRoZSBwb3BwZXIgYWNjZXB0ZWQgdmFsdWVzOiBgdG9wKC1zdGFydCwgLWVuZCksIHJpZ2h0KC1zdGFydCwgLWVuZCksIGJvdHRvbSgtc3RhcnQsIC1yaWdodCksXG4gICAgICogICAgICBsZWZ0KC1zdGFydCwgLWVuZClgXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fFN0cmluZ30gW29wdGlvbnMuYXJyb3dFbGVtZW50PSdbeC1hcnJvd10nXVxuICAgICAqICAgICAgVGhlIERPTSBOb2RlIHVzZWQgYXMgYXJyb3cgZm9yIHRoZSBwb3BwZXIsIG9yIGEgQ1NTIHNlbGVjdG9yIHVzZWQgdG8gZ2V0IHRoZSBET00gbm9kZS4gSXQgbXVzdCBiZSBjaGlsZCBvZlxuICAgICAqICAgICAgaXRzIHBhcmVudCBQb3BwZXIuIFBvcHBlci5qcyB3aWxsIGFwcGx5IHRvIHRoZSBnaXZlbiBlbGVtZW50IHRoZSBzdHlsZSByZXF1aXJlZCB0byBhbGlnbiB0aGUgYXJyb3cgd2l0aCBpdHNcbiAgICAgKiAgICAgIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgICAqICAgICAgQnkgZGVmYXVsdCwgaXQgd2lsbCBsb29rIGZvciBhIGNoaWxkIG5vZGUgb2YgdGhlIHBvcHBlciB3aXRoIHRoZSBgeC1hcnJvd2AgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5ncHVBY2NlbGVyYXRpb249dHJ1ZV1cbiAgICAgKiAgICAgIFdoZW4gdGhpcyBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZSwgdGhlIHBvcHBlciBwb3NpdGlvbiB3aWxsIGJlIGFwcGxpZWQgdXNpbmcgQ1NTMyB0cmFuc2xhdGUzZCwgYWxsb3dpbmcgdGhlXG4gICAgICogICAgICBicm93c2VyIHRvIHVzZSB0aGUgR1BVIHRvIGFjY2VsZXJhdGUgdGhlIHJlbmRlcmluZy5cbiAgICAgKiAgICAgIElmIHNldCB0byBmYWxzZSwgdGhlIHBvcHBlciB3aWxsIGJlIHBsYWNlZCB1c2luZyBgdG9wYCBhbmQgYGxlZnRgIHByb3BlcnRpZXMsIG5vdCB1c2luZyB0aGUgR1BVLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLm9mZnNldD0wXVxuICAgICAqICAgICAgQW1vdW50IG9mIHBpeGVscyB0aGUgcG9wcGVyIHdpbGwgYmUgc2hpZnRlZCAoY2FuIGJlIG5lZ2F0aXZlKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfEVsZW1lbnR9IFtvcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50PSd2aWV3cG9ydCddXG4gICAgICogICAgICBUaGUgZWxlbWVudCB3aGljaCB3aWxsIGRlZmluZSB0aGUgYm91bmRhcmllcyBvZiB0aGUgcG9wcGVyIHBvc2l0aW9uLCB0aGUgcG9wcGVyIHdpbGwgbmV2ZXIgYmUgcGxhY2VkIG91dHNpZGVcbiAgICAgKiAgICAgIG9mIHRoZSBkZWZpbmVkIGJvdW5kYXJpZXMgKGV4Y2VwdCBpZiBga2VlcFRvZ2V0aGVyYCBpcyBlbmFibGVkKVxuICAgICAqXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmJvdW5kYXJpZXNQYWRkaW5nPTVdXG4gICAgICogICAgICBBZGRpdGlvbmFsIHBhZGRpbmcgZm9yIHRoZSBib3VuZGFyaWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5wcmV2ZW50T3ZlcmZsb3dPcmRlcj1bJ2xlZnQnLCAncmlnaHQnLCAndG9wJywgJ2JvdHRvbSddXVxuICAgICAqICAgICAgT3JkZXIgdXNlZCB3aGVuIFBvcHBlci5qcyB0cmllcyB0byBhdm9pZCBvdmVyZmxvd3MgZnJvbSB0aGUgYm91bmRhcmllcywgdGhleSB3aWxsIGJlIGNoZWNrZWQgaW4gb3JkZXIsXG4gICAgICogICAgICB0aGlzIG1lYW5zIHRoYXQgdGhlIGxhc3Qgb25lcyB3aWxsIG5ldmVyIG92ZXJmbG93XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xBcnJheX0gW29wdGlvbnMuZmxpcEJlaGF2aW9yPSdmbGlwJ11cbiAgICAgKiAgICAgIFRoZSBiZWhhdmlvciB1c2VkIGJ5IHRoZSBgZmxpcGAgbW9kaWZpZXIgdG8gY2hhbmdlIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHBvcHBlciB3aGVuIHRoZSBsYXR0ZXIgaXMgdHJ5aW5nIHRvXG4gICAgICogICAgICBvdmVybGFwIGl0cyByZWZlcmVuY2UgZWxlbWVudC4gRGVmaW5pbmcgYGZsaXBgIGFzIHZhbHVlLCB0aGUgcGxhY2VtZW50IHdpbGwgYmUgZmxpcHBlZCBvblxuICAgICAqICAgICAgaXRzIGF4aXMgKGByaWdodCAtIGxlZnRgLCBgdG9wIC0gYm90dG9tYCkuXG4gICAgICogICAgICBZb3UgY2FuIGV2ZW4gcGFzcyBhbiBhcnJheSBvZiBwbGFjZW1lbnRzIChlZzogYFsncmlnaHQnLCAnbGVmdCcsICd0b3AnXWAgKSB0byBtYW51YWxseSBzcGVjaWZ5XG4gICAgICogICAgICBob3cgYWx0ZXIgdGhlIHBsYWNlbWVudCB3aGVuIGEgZmxpcCBpcyBuZWVkZWQuIChlZy4gaW4gdGhlIGFib3ZlIGV4YW1wbGUsIGl0IHdvdWxkIGZpcnN0IGZsaXAgZnJvbSByaWdodCB0byBsZWZ0LFxuICAgICAqICAgICAgdGhlbiwgaWYgZXZlbiBpbiBpdHMgbmV3IHBsYWNlbWVudCwgdGhlIHBvcHBlciBpcyBvdmVybGFwcGluZyBpdHMgcmVmZXJlbmNlIGVsZW1lbnQsIGl0IHdpbGwgYmUgbW92ZWQgdG8gdG9wKVxuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMubW9kaWZpZXJzPVsgJ3NoaWZ0JywgJ29mZnNldCcsICdwcmV2ZW50T3ZlcmZsb3cnLCAna2VlcFRvZ2V0aGVyJywgJ2Fycm93JywgJ2ZsaXAnLCAnYXBwbHlTdHlsZSddXVxuICAgICAqICAgICAgTGlzdCBvZiBmdW5jdGlvbnMgdXNlZCB0byBtb2RpZnkgdGhlIGRhdGEgYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlciwgYWRkIHlvdXIgY3VzdG9tIGZ1bmN0aW9uc1xuICAgICAqICAgICAgdG8gdGhpcyBhcnJheSB0byBlZGl0IHRoZSBvZmZzZXRzIGFuZCBwbGFjZW1lbnQuXG4gICAgICogICAgICBUaGUgZnVuY3Rpb24gc2hvdWxkIHJlZmxlY3QgdGhlIEBwYXJhbXMgYW5kIEByZXR1cm5zIG9mIHByZXZlbnRPdmVyZmxvd1xuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMubW9kaWZpZXJzSWdub3JlZD1bXV1cbiAgICAgKiAgICAgIFB1dCBoZXJlIGFueSBidWlsdC1pbiBtb2RpZmllciBuYW1lIHlvdSB3YW50IHRvIGV4Y2x1ZGUgZnJvbSB0aGUgbW9kaWZpZXJzIGxpc3RcbiAgICAgKiAgICAgIFRoZSBmdW5jdGlvbiBzaG91bGQgcmVmbGVjdCB0aGUgQHBhcmFtcyBhbmQgQHJldHVybnMgb2YgcHJldmVudE92ZXJmbG93XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJlbW92ZU9uRGVzdHJveT1mYWxzZV1cbiAgICAgKiAgICAgIFNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHRoZSBwb3BwZXIgd2hlbiB5b3UgY2FsbCB0aGUgYGRlc3Ryb3lgIG1ldGhvZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fcmVmZXJlbmNlID0gcmVmZXJlbmNlLmpxdWVyeSA/IHJlZmVyZW5jZVswXSA6IHJlZmVyZW5jZTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHt9O1xuXG4gICAgICAgIC8vIGlmIHRoZSBwb3BwZXIgdmFyaWFibGUgaXMgYSBjb25maWd1cmF0aW9uIG9iamVjdCwgcGFyc2UgaXQgdG8gZ2VuZXJhdGUgYW4gSFRNTEVsZW1lbnRcbiAgICAgICAgLy8gZ2VuZXJhdGUgYSBkZWZhdWx0IHBvcHBlciBpZiBpcyBub3QgZGVmaW5lZFxuICAgICAgICB2YXIgaXNOb3REZWZpbmVkID0gdHlwZW9mIHBvcHBlciA9PT0gJ3VuZGVmaW5lZCcgfHwgcG9wcGVyID09PSBudWxsO1xuICAgICAgICB2YXIgaXNDb25maWcgPSBwb3BwZXIgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHBvcHBlcikgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xuICAgICAgICBpZiAoaXNOb3REZWZpbmVkIHx8IGlzQ29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BwZXIgPSB0aGlzLnBhcnNlKGlzQ29uZmlnID8gcG9wcGVyIDoge30pO1xuICAgICAgICB9XG4gICAgICAgIC8vIG90aGVyd2lzZSwgdXNlIHRoZSBnaXZlbiBIVE1MRWxlbWVudCBhcyBwb3BwZXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcG9wcGVyID0gcG9wcGVyLmpxdWVyeSA/IHBvcHBlclswXSA6IHBvcHBlcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAvLyB3aXRoIHt9IHdlIGNyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCB0aGUgb3B0aW9ucyBpbnNpZGUgaXRcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRTLCBvcHRpb25zKTtcblxuICAgICAgICAvLyByZWZhY3RvcmluZyBtb2RpZmllcnMnIGxpc3RcbiAgICAgICAgdGhpcy5fb3B0aW9ucy5tb2RpZmllcnMgPSB0aGlzLl9vcHRpb25zLm1vZGlmaWVycy5tYXAoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgaWdub3JlZCBtb2RpZmllcnNcbiAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLm1vZGlmaWVyc0lnbm9yZWQuaW5kZXhPZihtb2RpZmllcikgIT09IC0xKSByZXR1cm47XG5cbiAgICAgICAgICAgIC8vIHNldCB0aGUgeC1wbGFjZW1lbnQgYXR0cmlidXRlIGJlZm9yZSBldmVyeXRoaW5nIGVsc2UgYmVjYXVzZSBpdCBjb3VsZCBiZSB1c2VkIHRvIGFkZCBtYXJnaW5zIHRvIHRoZSBwb3BwZXJcbiAgICAgICAgICAgIC8vIG1hcmdpbnMgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCB0byBnZXQgdGhlIGNvcnJlY3QgcG9wcGVyIG9mZnNldHNcbiAgICAgICAgICAgIGlmIChtb2RpZmllciA9PT0gJ2FwcGx5U3R5bGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcG9wcGVyLnNldEF0dHJpYnV0ZSgneC1wbGFjZW1lbnQnLCB0aGlzLl9vcHRpb25zLnBsYWNlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHJldHVybiBwcmVkZWZpbmVkIG1vZGlmaWVyIGlkZW50aWZpZWQgYnkgc3RyaW5nIG9yIGtlZXAgdGhlIGN1c3RvbSBvbmVcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGlmaWVyc1ttb2RpZmllcl0gfHwgbW9kaWZpZXI7XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGFwcGx5IHRoZSBwb3BwZXIgcG9zaXRpb24gYmVmb3JlIGFueSBjb21wdXRhdGlvblxuICAgICAgICB0aGlzLnN0YXRlLnBvc2l0aW9uID0gdGhpcy5fZ2V0UG9zaXRpb24odGhpcy5fcG9wcGVyLCB0aGlzLl9yZWZlcmVuY2UpO1xuICAgICAgICBzZXRTdHlsZSh0aGlzLl9wb3BwZXIsIHsgcG9zaXRpb246IHRoaXMuc3RhdGUucG9zaXRpb24sIHRvcDogMCB9KTtcblxuICAgICAgICAvLyBmaXJlIHRoZSBmaXJzdCB1cGRhdGUgdG8gcG9zaXRpb24gdGhlIHBvcHBlciBpbiB0aGUgcmlnaHQgcGxhY2VcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcblxuICAgICAgICAvLyBzZXR1cCBldmVudCBsaXN0ZW5lcnMsIHRoZXkgd2lsbCB0YWtlIGNhcmUgb2YgdXBkYXRlIHRoZSBwb3NpdGlvbiBpbiBzcGVjaWZpYyBzaXR1YXRpb25zXG4gICAgICAgIHRoaXMuX3NldHVwRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBNZXRob2RzXG4gICAgLy9cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBwb3BwZXJcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fcG9wcGVyLnJlbW92ZUF0dHJpYnV0ZSgneC1wbGFjZW1lbnQnKTtcbiAgICAgICAgdGhpcy5fcG9wcGVyLnN0eWxlLmxlZnQgPSAnJztcbiAgICAgICAgdGhpcy5fcG9wcGVyLnN0eWxlLnBvc2l0aW9uID0gJyc7XG4gICAgICAgIHRoaXMuX3BvcHBlci5zdHlsZS50b3AgPSAnJztcbiAgICAgICAgdGhpcy5fcG9wcGVyLnN0eWxlW2dldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJyldID0gJyc7XG4gICAgICAgIHRoaXMuX3JlbW92ZUV2ZW50TGlzdGVuZXJzKCk7XG5cbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBwb3BwZXIgaWYgdXNlciBleHBsaWNpdHkgYXNrZWQgZm9yIHRoZSBkZWxldGlvbiBvbiBkZXN0cm95XG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnJlbW92ZU9uRGVzdHJveSkge1xuICAgICAgICAgICAgdGhpcy5fcG9wcGVyLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgcG9wcGVyLCBjb21wdXRpbmcgdGhlIG5ldyBvZmZzZXRzIGFuZCBhcHBseWluZyB0aGUgbmV3IHN0eWxlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB7IGluc3RhbmNlOiB0aGlzLCBzdHlsZXM6IHt9IH07XG5cbiAgICAgICAgLy8gc3RvcmUgcGxhY2VtZW50IGluc2lkZSB0aGUgZGF0YSBvYmplY3QsIG1vZGlmaWVycyB3aWxsIGJlIGFibGUgdG8gZWRpdCBgcGxhY2VtZW50YCBpZiBuZWVkZWRcbiAgICAgICAgLy8gYW5kIHJlZmVyIHRvIF9vcmlnaW5hbFBsYWNlbWVudCB0byBrbm93IHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgICAgICBkYXRhLnBsYWNlbWVudCA9IHRoaXMuX29wdGlvbnMucGxhY2VtZW50O1xuICAgICAgICBkYXRhLl9vcmlnaW5hbFBsYWNlbWVudCA9IHRoaXMuX29wdGlvbnMucGxhY2VtZW50O1xuXG4gICAgICAgIC8vIGNvbXB1dGUgdGhlIHBvcHBlciBhbmQgcmVmZXJlbmNlIG9mZnNldHMgYW5kIHB1dCB0aGVtIGluc2lkZSBkYXRhLm9mZnNldHNcbiAgICAgICAgZGF0YS5vZmZzZXRzID0gdGhpcy5fZ2V0T2Zmc2V0cyh0aGlzLl9wb3BwZXIsIHRoaXMuX3JlZmVyZW5jZSwgZGF0YS5wbGFjZW1lbnQpO1xuXG4gICAgICAgIC8vIGdldCBib3VuZGFyaWVzXG4gICAgICAgIGRhdGEuYm91bmRhcmllcyA9IHRoaXMuX2dldEJvdW5kYXJpZXMoZGF0YSwgdGhpcy5fb3B0aW9ucy5ib3VuZGFyaWVzUGFkZGluZywgdGhpcy5fb3B0aW9ucy5ib3VuZGFyaWVzRWxlbWVudCk7XG5cbiAgICAgICAgZGF0YSA9IHRoaXMucnVuTW9kaWZpZXJzKGRhdGEsIHRoaXMuX29wdGlvbnMubW9kaWZpZXJzKTtcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhdGUudXBkYXRlQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUudXBkYXRlQ2FsbGJhY2soZGF0YSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSWYgYSBmdW5jdGlvbiBpcyBwYXNzZWQsIGl0IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGluaXRpYWxpemF0aW9uIG9mIHBvcHBlciB3aXRoIGFzIGZpcnN0IGFyZ3VtZW50IHRoZSBQb3BwZXIgaW5zdGFuY2UuXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUub25DcmVhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgLy8gdGhlIGNyZWF0ZUNhbGxiYWNrcyByZXR1cm4gYXMgZmlyc3QgYXJndW1lbnQgdGhlIHBvcHBlciBpbnN0YW5jZVxuICAgICAgICBjYWxsYmFjayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIElmIGEgZnVuY3Rpb24gaXMgcGFzc2VkLCBpdCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGVhY2ggdXBkYXRlIG9mIHBvcHBlciB3aXRoIGFzIGZpcnN0IGFyZ3VtZW50IHRoZSBzZXQgb2YgY29vcmRpbmF0ZXMgYW5kIGluZm9ybWF0aW9uc1xuICAgICAqIHVzZWQgdG8gc3R5bGUgcG9wcGVyIGFuZCBpdHMgYXJyb3cuXG4gICAgICogTk9URTogaXQgZG9lc24ndCBnZXQgZmlyZWQgb24gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGBQb3BwZXIudXBkYXRlKClgIG1ldGhvZCBpbnNpZGUgdGhlIGBQb3BwZXJgIGNvbnN0cnVjdG9yIVxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLm9uVXBkYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuc3RhdGUudXBkYXRlQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciB1c2VkIHRvIGdlbmVyYXRlIHBvcHBlcnMgZnJvbSBhIGNvbmZpZ3VyYXRpb24gZmlsZVxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICogQHBhcmFtIGNvbmZpZyB7T2JqZWN0fSBjb25maWd1cmF0aW9uXG4gICAgICogQHJldHVybnMge0hUTUxFbGVtZW50fSBwb3BwZXJcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLnBhcnNlID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICB2YXIgZGVmYXVsdENvbmZpZyA9IHtcbiAgICAgICAgICAgIHRhZ05hbWU6ICdkaXYnLFxuICAgICAgICAgICAgY2xhc3NOYW1lczogWydwb3BwZXInXSxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IFtdLFxuICAgICAgICAgICAgcGFyZW50OiByb290LmRvY3VtZW50LmJvZHksXG4gICAgICAgICAgICBjb250ZW50OiAnJyxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAndGV4dCcsXG4gICAgICAgICAgICBhcnJvd1RhZ05hbWU6ICdkaXYnLFxuICAgICAgICAgICAgYXJyb3dDbGFzc05hbWVzOiBbJ3BvcHBlcl9fYXJyb3cnXSxcbiAgICAgICAgICAgIGFycm93QXR0cmlidXRlczogWyd4LWFycm93J11cbiAgICAgICAgfTtcbiAgICAgICAgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbmZpZywgY29uZmlnKTtcblxuICAgICAgICB2YXIgZCA9IHJvb3QuZG9jdW1lbnQ7XG5cbiAgICAgICAgdmFyIHBvcHBlciA9IGQuY3JlYXRlRWxlbWVudChjb25maWcudGFnTmFtZSk7XG4gICAgICAgIGFkZENsYXNzTmFtZXMocG9wcGVyLCBjb25maWcuY2xhc3NOYW1lcyk7XG4gICAgICAgIGFkZEF0dHJpYnV0ZXMocG9wcGVyLCBjb25maWcuYXR0cmlidXRlcyk7XG4gICAgICAgIGlmIChjb25maWcuY29udGVudFR5cGUgPT09ICdub2RlJykge1xuICAgICAgICAgICAgcG9wcGVyLmFwcGVuZENoaWxkKGNvbmZpZy5jb250ZW50LmpxdWVyeSA/IGNvbmZpZy5jb250ZW50WzBdIDogY29uZmlnLmNvbnRlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5jb250ZW50VHlwZSA9PT0gJ2h0bWwnKSB7XG4gICAgICAgICAgICBwb3BwZXIuaW5uZXJIVE1MID0gY29uZmlnLmNvbnRlbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb3BwZXIudGV4dENvbnRlbnQgPSBjb25maWcuY29udGVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuYXJyb3dUYWdOYW1lKSB7XG4gICAgICAgICAgICB2YXIgYXJyb3cgPSBkLmNyZWF0ZUVsZW1lbnQoY29uZmlnLmFycm93VGFnTmFtZSk7XG4gICAgICAgICAgICBhZGRDbGFzc05hbWVzKGFycm93LCBjb25maWcuYXJyb3dDbGFzc05hbWVzKTtcbiAgICAgICAgICAgIGFkZEF0dHJpYnV0ZXMoYXJyb3csIGNvbmZpZy5hcnJvd0F0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgcG9wcGVyLmFwcGVuZENoaWxkKGFycm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXJlbnQgPSBjb25maWcucGFyZW50LmpxdWVyeSA/IGNvbmZpZy5wYXJlbnRbMF0gOiBjb25maWcucGFyZW50O1xuXG4gICAgICAgIC8vIGlmIHRoZSBnaXZlbiBwYXJlbnQgaXMgYSBzdHJpbmcsIHVzZSBpdCB0byBtYXRjaCBhbiBlbGVtZW50XG4gICAgICAgIC8vIGlmIG1vcmUgdGhhbiBvbmUgZWxlbWVudCBpcyBtYXRjaGVkLCB0aGUgZmlyc3Qgb25lIHdpbGwgYmUgdXNlZCBhcyBwYXJlbnRcbiAgICAgICAgLy8gaWYgbm8gZWxlbWVudHMgYXJlIG1hdGNoZWQsIHRoZSBzY3JpcHQgd2lsbCB0aHJvdyBhbiBlcnJvclxuICAgICAgICBpZiAodHlwZW9mIHBhcmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHBhcmVudCA9IGQucXVlcnlTZWxlY3RvckFsbChjb25maWcucGFyZW50KTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignV0FSTklORzogdGhlIGdpdmVuIGBwYXJlbnRgIHF1ZXJ5KCcgKyBjb25maWcucGFyZW50ICsgJykgbWF0Y2hlZCBtb3JlIHRoYW4gb25lIGVsZW1lbnQsIHRoZSBmaXJzdCBvbmUgd2lsbCBiZSB1c2VkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93ICdFUlJPUjogdGhlIGdpdmVuIGBwYXJlbnRgIGRvZXNuXFwndCBleGlzdHMhJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFswXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgZ2l2ZW4gcGFyZW50IGlzIGEgRE9NIG5vZGVzIGxpc3Qgb3IgYW4gYXJyYXkgb2Ygbm9kZXMgd2l0aCBtb3JlIHRoYW4gb25lIGVsZW1lbnQsXG4gICAgICAgIC8vIHRoZSBmaXJzdCBvbmUgd2lsbCBiZSB1c2VkIGFzIHBhcmVudFxuICAgICAgICBpZiAocGFyZW50Lmxlbmd0aCA+IDEgJiYgcGFyZW50IGluc3RhbmNlb2YgRWxlbWVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV0FSTklORzogeW91IGhhdmUgcGFzc2VkIGFzIHBhcmVudCBhIGxpc3Qgb2YgZWxlbWVudHMsIHRoZSBmaXJzdCBvbmUgd2lsbCBiZSB1c2VkJyk7XG4gICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRbMF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhcHBlbmQgdGhlIGdlbmVyYXRlZCBwb3BwZXIgdG8gaXRzIHBhcmVudFxuICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQocG9wcGVyKTtcblxuICAgICAgICByZXR1cm4gcG9wcGVyO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGRzIGNsYXNzIG5hbWVzIHRvIHRoZSBnaXZlbiBlbGVtZW50XG4gICAgICAgICAqIEBmdW5jdGlvblxuICAgICAgICAgKiBAaWdub3JlXG4gICAgICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRhcmdldFxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBjbGFzc2VzXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBhZGRDbGFzc05hbWVzKGVsZW1lbnQsIGNsYXNzTmFtZXMpIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBZGRzIGF0dHJpYnV0ZXMgdG8gdGhlIGdpdmVuIGVsZW1lbnRcbiAgICAgICAgICogQGZ1bmN0aW9uXG4gICAgICAgICAqIEBpZ25vcmVcbiAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdGFyZ2V0XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGF0dHJpYnV0ZXNcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogYWRkQXR0cmlidXRlcyhlbGVtZW50LCBbICdkYXRhLWluZm86Zm9vYmFyJyBdKTtcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGFkZEF0dHJpYnV0ZXMoZWxlbWVudCwgYXR0cmlidXRlcykge1xuICAgICAgICAgICAgYXR0cmlidXRlcy5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUuc3BsaXQoJzonKVswXSwgYXR0cmlidXRlLnNwbGl0KCc6JylbMV0gfHwgJycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSGVscGVyIHVzZWQgdG8gZ2V0IHRoZSBwb3NpdGlvbiB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICogQHBhcmFtIGNvbmZpZyB7SFRNTEVsZW1lbnR9IHBvcHBlciBlbGVtZW50XG4gICAgICogQHBhcmFtIHJlZmVyZW5jZSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSBlbGVtZW50XG4gICAgICogQHJldHVybnMge1N0cmluZ30gcG9zaXRpb25cbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLl9nZXRQb3NpdGlvbiA9IGZ1bmN0aW9uIChwb3BwZXIsIHJlZmVyZW5jZSkge1xuICAgICAgICB2YXIgY29udGFpbmVyID0gZ2V0T2Zmc2V0UGFyZW50KHJlZmVyZW5jZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuZm9yY2VBYnNvbHV0ZSkge1xuICAgICAgICAgICAgcmV0dXJuICdhYnNvbHV0ZSc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWNpZGUgaWYgdGhlIHBvcHBlciB3aWxsIGJlIGZpeGVkXG4gICAgICAgIC8vIElmIHRoZSByZWZlcmVuY2UgZWxlbWVudCBpcyBpbnNpZGUgYSBmaXhlZCBjb250ZXh0LCB0aGUgcG9wcGVyIHdpbGwgYmUgZml4ZWQgYXMgd2VsbCB0byBhbGxvdyB0aGVtIHRvIHNjcm9sbCB0b2dldGhlclxuICAgICAgICB2YXIgaXNQYXJlbnRGaXhlZCA9IGlzRml4ZWQocmVmZXJlbmNlLCBjb250YWluZXIpO1xuICAgICAgICByZXR1cm4gaXNQYXJlbnRGaXhlZCA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBHZXQgb2Zmc2V0cyB0byB0aGUgcG9wcGVyXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHBvcHBlciAtIHRoZSBwb3BwZXIgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gcmVmZXJlbmNlIC0gdGhlIHJlZmVyZW5jZSBlbGVtZW50ICh0aGUgcG9wcGVyIHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhpcylcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgb2Zmc2V0cyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlclxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUuX2dldE9mZnNldHMgPSBmdW5jdGlvbiAocG9wcGVyLCByZWZlcmVuY2UsIHBsYWNlbWVudCkge1xuICAgICAgICBwbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgICAgICAgdmFyIHBvcHBlck9mZnNldHMgPSB7fTtcblxuICAgICAgICBwb3BwZXJPZmZzZXRzLnBvc2l0aW9uID0gdGhpcy5zdGF0ZS5wb3NpdGlvbjtcbiAgICAgICAgdmFyIGlzUGFyZW50Rml4ZWQgPSBwb3BwZXJPZmZzZXRzLnBvc2l0aW9uID09PSAnZml4ZWQnO1xuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEdldCByZWZlcmVuY2UgZWxlbWVudCBwb3NpdGlvblxuICAgICAgICAvL1xuICAgICAgICB2YXIgcmVmZXJlbmNlT2Zmc2V0cyA9IGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQ3VzdG9tUGFyZW50KHJlZmVyZW5jZSwgZ2V0T2Zmc2V0UGFyZW50KHBvcHBlciksIGlzUGFyZW50Rml4ZWQpO1xuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEdldCBwb3BwZXIgc2l6ZXNcbiAgICAgICAgLy9cbiAgICAgICAgdmFyIHBvcHBlclJlY3QgPSBnZXRPdXRlclNpemVzKHBvcHBlcik7XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gQ29tcHV0ZSBvZmZzZXRzIG9mIHBvcHBlclxuICAgICAgICAvL1xuXG4gICAgICAgIC8vIGRlcGVuZGluZyBieSB0aGUgcG9wcGVyIHBsYWNlbWVudCB3ZSBoYXZlIHRvIGNvbXB1dGUgaXRzIG9mZnNldHMgc2xpZ2h0bHkgZGlmZmVyZW50bHlcbiAgICAgICAgaWYgKFsncmlnaHQnLCAnbGVmdCddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHBvcHBlck9mZnNldHMudG9wID0gcmVmZXJlbmNlT2Zmc2V0cy50b3AgKyByZWZlcmVuY2VPZmZzZXRzLmhlaWdodCAvIDIgLSBwb3BwZXJSZWN0LmhlaWdodCAvIDI7XG4gICAgICAgICAgICBpZiAocGxhY2VtZW50ID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICBwb3BwZXJPZmZzZXRzLmxlZnQgPSByZWZlcmVuY2VPZmZzZXRzLmxlZnQgLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwb3BwZXJPZmZzZXRzLmxlZnQgPSByZWZlcmVuY2VPZmZzZXRzLnJpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9wcGVyT2Zmc2V0cy5sZWZ0ID0gcmVmZXJlbmNlT2Zmc2V0cy5sZWZ0ICsgcmVmZXJlbmNlT2Zmc2V0cy53aWR0aCAvIDIgLSBwb3BwZXJSZWN0LndpZHRoIC8gMjtcbiAgICAgICAgICAgIGlmIChwbGFjZW1lbnQgPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgICAgcG9wcGVyT2Zmc2V0cy50b3AgPSByZWZlcmVuY2VPZmZzZXRzLnRvcCAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwb3BwZXJPZmZzZXRzLnRvcCA9IHJlZmVyZW5jZU9mZnNldHMuYm90dG9tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIHdpZHRoIGFuZCBoZWlnaHQgdG8gb3VyIG9mZnNldHMgb2JqZWN0XG4gICAgICAgIHBvcHBlck9mZnNldHMud2lkdGggPSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgICBwb3BwZXJPZmZzZXRzLmhlaWdodCA9IHBvcHBlclJlY3QuaGVpZ2h0O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwb3BwZXI6IHBvcHBlck9mZnNldHMsXG4gICAgICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZU9mZnNldHNcbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogU2V0dXAgbmVlZGVkIGV2ZW50IGxpc3RlbmVycyB1c2VkIHRvIHVwZGF0ZSB0aGUgcG9wcGVyIHBvc2l0aW9uXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLl9zZXR1cEV2ZW50TGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICAgICAgICB0aGlzLnN0YXRlLnVwZGF0ZUJvdW5kID0gdGhpcy51cGRhdGUuYmluZCh0aGlzKTtcbiAgICAgICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnN0YXRlLnVwZGF0ZUJvdW5kKTtcbiAgICAgICAgLy8gaWYgdGhlIGJvdW5kYXJpZXNFbGVtZW50IGlzIHdpbmRvdyB3ZSBkb24ndCBuZWVkIHRvIGxpc3RlbiBmb3IgdGhlIHNjcm9sbCBldmVudFxuICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5ib3VuZGFyaWVzRWxlbWVudCAhPT0gJ3dpbmRvdycpIHtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBnZXRTY3JvbGxQYXJlbnQodGhpcy5fcmVmZXJlbmNlKTtcbiAgICAgICAgICAgIC8vIGhlcmUgaXQgY291bGQgYmUgYm90aCBgYm9keWAgb3IgYGRvY3VtZW50RWxlbWVudGAgdGhhbmtzIHRvIEZpcmVmb3gsIHdlIHRoZW4gY2hlY2sgYm90aFxuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gcm9vdC5kb2N1bWVudC5ib2R5IHx8IHRhcmdldCA9PT0gcm9vdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSByb290O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc3RhdGUudXBkYXRlQm91bmQpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMgdXNlZCB0byB1cGRhdGUgdGhlIHBvcHBlciBwb3NpdGlvblxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5fcmVtb3ZlRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gICAgICAgIHJvb3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5zdGF0ZS51cGRhdGVCb3VuZCk7XG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50ICE9PSAnd2luZG93Jykge1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGdldFNjcm9sbFBhcmVudCh0aGlzLl9yZWZlcmVuY2UpO1xuICAgICAgICAgICAgLy8gaGVyZSBpdCBjb3VsZCBiZSBib3RoIGBib2R5YCBvciBgZG9jdW1lbnRFbGVtZW50YCB0aGFua3MgdG8gRmlyZWZveCwgd2UgdGhlbiBjaGVjayBib3RoXG4gICAgICAgICAgICBpZiAodGFyZ2V0ID09PSByb290LmRvY3VtZW50LmJvZHkgfHwgdGFyZ2V0ID09PSByb290LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IHJvb3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zdGF0ZS51cGRhdGVCb3VuZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZS51cGRhdGVCb3VuZCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVkIHRoZSBib3VuZGFyaWVzIGxpbWl0cyBhbmQgcmV0dXJuIHRoZW1cbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIC0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHByb3BlcnR5IFwib2Zmc2V0c1wiIGdlbmVyYXRlZCBieSBgX2dldE9mZnNldHNgXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHBhZGRpbmcgLSBCb3VuZGFyaWVzIHBhZGRpbmdcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50IC0gRWxlbWVudCB1c2VkIHRvIGRlZmluZSB0aGUgYm91bmRhcmllc1xuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IENvb3JkaW5hdGVzIG9mIHRoZSBib3VuZGFyaWVzXG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5fZ2V0Qm91bmRhcmllcyA9IGZ1bmN0aW9uIChkYXRhLCBwYWRkaW5nLCBib3VuZGFyaWVzRWxlbWVudCkge1xuICAgICAgICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICAgICAgICB2YXIgYm91bmRhcmllcyA9IHt9O1xuICAgICAgICB2YXIgd2lkdGgsIGhlaWdodDtcbiAgICAgICAgaWYgKGJvdW5kYXJpZXNFbGVtZW50ID09PSAnd2luZG93Jykge1xuICAgICAgICAgICAgdmFyIGJvZHkgPSByb290LmRvY3VtZW50LmJvZHksXG4gICAgICAgICAgICAgICAgaHRtbCA9IHJvb3QuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLm1heChib2R5LnNjcm9sbEhlaWdodCwgYm9keS5vZmZzZXRIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5vZmZzZXRIZWlnaHQpO1xuICAgICAgICAgICAgd2lkdGggPSBNYXRoLm1heChib2R5LnNjcm9sbFdpZHRoLCBib2R5Lm9mZnNldFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBodG1sLnNjcm9sbFdpZHRoLCBodG1sLm9mZnNldFdpZHRoKTtcblxuICAgICAgICAgICAgYm91bmRhcmllcyA9IHtcbiAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgcmlnaHQ6IHdpZHRoLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogaGVpZ2h0LFxuICAgICAgICAgICAgICAgIGxlZnQ6IDBcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoYm91bmRhcmllc0VsZW1lbnQgPT09ICd2aWV3cG9ydCcpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQodGhpcy5fcG9wcGVyKTtcbiAgICAgICAgICAgIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQodGhpcy5fcG9wcGVyKTtcbiAgICAgICAgICAgIHZhciBvZmZzZXRQYXJlbnRSZWN0ID0gZ2V0T2Zmc2V0UmVjdChvZmZzZXRQYXJlbnQpO1xuXG4gICAgICAgICAgICAvLyBUaGFua3MgdGhlIGZ1Y2tpbmcgbmF0aXZlIEFQSSwgYGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wYCAmIGBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wYFxuICAgICAgICAgICAgdmFyIGdldFNjcm9sbFRvcFZhbHVlID0gZnVuY3Rpb24gZ2V0U2Nyb2xsVG9wVmFsdWUoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50ID09IGRvY3VtZW50LmJvZHkgPyBNYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkgOiBlbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgZ2V0U2Nyb2xsTGVmdFZhbHVlID0gZnVuY3Rpb24gZ2V0U2Nyb2xsTGVmdFZhbHVlKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCA9PSBkb2N1bWVudC5ib2R5ID8gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCkgOiBlbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBpZiB0aGUgcG9wcGVyIGlzIGZpeGVkIHdlIGRvbid0IGhhdmUgdG8gc3Vic3RyYWN0IHNjcm9sbGluZyBmcm9tIHRoZSBib3VuZGFyaWVzXG4gICAgICAgICAgICB2YXIgc2Nyb2xsVG9wID0gZGF0YS5vZmZzZXRzLnBvcHBlci5wb3NpdGlvbiA9PT0gJ2ZpeGVkJyA/IDAgOiBnZXRTY3JvbGxUb3BWYWx1ZShzY3JvbGxQYXJlbnQpO1xuICAgICAgICAgICAgdmFyIHNjcm9sbExlZnQgPSBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uID09PSAnZml4ZWQnID8gMCA6IGdldFNjcm9sbExlZnRWYWx1ZShzY3JvbGxQYXJlbnQpO1xuXG4gICAgICAgICAgICBib3VuZGFyaWVzID0ge1xuICAgICAgICAgICAgICAgIHRvcDogMCAtIChvZmZzZXRQYXJlbnRSZWN0LnRvcCAtIHNjcm9sbFRvcCksXG4gICAgICAgICAgICAgICAgcmlnaHQ6IHJvb3QuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIC0gKG9mZnNldFBhcmVudFJlY3QubGVmdCAtIHNjcm9sbExlZnQpLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogcm9vdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IC0gKG9mZnNldFBhcmVudFJlY3QudG9wIC0gc2Nyb2xsVG9wKSxcbiAgICAgICAgICAgICAgICBsZWZ0OiAwIC0gKG9mZnNldFBhcmVudFJlY3QubGVmdCAtIHNjcm9sbExlZnQpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGdldE9mZnNldFBhcmVudCh0aGlzLl9wb3BwZXIpID09PSBib3VuZGFyaWVzRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IGJvdW5kYXJpZXNFbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBib3R0b206IGJvdW5kYXJpZXNFbGVtZW50LmNsaWVudEhlaWdodFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJvdW5kYXJpZXMgPSBnZXRPZmZzZXRSZWN0KGJvdW5kYXJpZXNFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBib3VuZGFyaWVzLmxlZnQgKz0gcGFkZGluZztcbiAgICAgICAgYm91bmRhcmllcy5yaWdodCAtPSBwYWRkaW5nO1xuICAgICAgICBib3VuZGFyaWVzLnRvcCA9IGJvdW5kYXJpZXMudG9wICsgcGFkZGluZztcbiAgICAgICAgYm91bmRhcmllcy5ib3R0b20gPSBib3VuZGFyaWVzLmJvdHRvbSAtIHBhZGRpbmc7XG4gICAgICAgIHJldHVybiBib3VuZGFyaWVzO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBMb29wIHRyb3VnaCB0aGUgbGlzdCBvZiBtb2RpZmllcnMgYW5kIHJ1biB0aGVtIGluIG9yZGVyLCBlYWNoIG9mIHRoZW0gd2lsbCB0aGVuIGVkaXQgdGhlIGRhdGEgb2JqZWN0XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKiBAYWNjZXNzIHB1YmxpY1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAgICogQHBhcmFtIHtBcnJheX0gbW9kaWZpZXJzXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZW5kc1xuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUucnVuTW9kaWZpZXJzID0gZnVuY3Rpb24gKGRhdGEsIG1vZGlmaWVycywgZW5kcykge1xuICAgICAgICB2YXIgbW9kaWZpZXJzVG9SdW4gPSBtb2RpZmllcnMuc2xpY2UoKTtcbiAgICAgICAgaWYgKGVuZHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbW9kaWZpZXJzVG9SdW4gPSB0aGlzLl9vcHRpb25zLm1vZGlmaWVycy5zbGljZSgwLCBnZXRBcnJheUtleUluZGV4KHRoaXMuX29wdGlvbnMubW9kaWZpZXJzLCBlbmRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBtb2RpZmllcnNUb1J1bi5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24obW9kaWZpZXIpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IG1vZGlmaWVyLmNhbGwodGhpcywgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEhlbHBlciB1c2VkIHRvIGtub3cgaWYgdGhlIGdpdmVuIG1vZGlmaWVyIGRlcGVuZHMgZnJvbSBhbm90aGVyIG9uZS5cbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0aW5nIC0gbmFtZSBvZiByZXF1ZXN0aW5nIG1vZGlmaWVyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RlZCAtIG5hbWUgb2YgcmVxdWVzdGVkIG1vZGlmaWVyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5pc01vZGlmaWVyUmVxdWlyZWQgPSBmdW5jdGlvbiAocmVxdWVzdGluZywgcmVxdWVzdGVkKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGdldEFycmF5S2V5SW5kZXgodGhpcy5fb3B0aW9ucy5tb2RpZmllcnMsIHJlcXVlc3RpbmcpO1xuICAgICAgICByZXR1cm4gISF0aGlzLl9vcHRpb25zLm1vZGlmaWVycy5zbGljZSgwLCBpbmRleCkuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGlmaWVyID09PSByZXF1ZXN0ZWQ7XG4gICAgICAgIH0pLmxlbmd0aDtcbiAgICB9O1xuXG4gICAgLy9cbiAgICAvLyBNb2RpZmllcnNcbiAgICAvL1xuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXJzIGxpc3RcbiAgICAgKiBAbmFtZXNwYWNlIFBvcHBlci5tb2RpZmllcnNcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLm1vZGlmaWVycyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQXBwbHkgdGhlIGNvbXB1dGVkIHN0eWxlcyB0byB0aGUgcG9wcGVyIGVsZW1lbnRcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAgICAgKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gICAgICogQHJldHVybnMge09iamVjdH0gVGhlIHNhbWUgZGF0YSBvYmplY3RcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLm1vZGlmaWVycy5hcHBseVN0eWxlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgLy8gYXBwbHkgdGhlIGZpbmFsIG9mZnNldHMgdG8gdGhlIHBvcHBlclxuICAgICAgICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICAgICAgICB2YXIgc3R5bGVzID0ge1xuICAgICAgICAgICAgcG9zaXRpb246IGRhdGEub2Zmc2V0cy5wb3BwZXIucG9zaXRpb25cbiAgICAgICAgfTtcblxuICAgICAgICAvLyByb3VuZCB0b3AgYW5kIGxlZnQgdG8gYXZvaWQgYmx1cnJ5IHRleHRcbiAgICAgICAgdmFyIGxlZnQgPSBNYXRoLnJvdW5kKGRhdGEub2Zmc2V0cy5wb3BwZXIubGVmdCk7XG4gICAgICAgIHZhciB0b3AgPSBNYXRoLnJvdW5kKGRhdGEub2Zmc2V0cy5wb3BwZXIudG9wKTtcblxuICAgICAgICAvLyBpZiBncHVBY2NlbGVyYXRpb24gaXMgc2V0IHRvIHRydWUgYW5kIHRyYW5zZm9ybSBpcyBzdXBwb3J0ZWQsIHdlIHVzZSBgdHJhbnNsYXRlM2RgIHRvIGFwcGx5IHRoZSBwb3NpdGlvbiB0byB0aGUgcG9wcGVyXG4gICAgICAgIC8vIHdlIGF1dG9tYXRpY2FsbHkgdXNlIHRoZSBzdXBwb3J0ZWQgcHJlZml4ZWQgdmVyc2lvbiBpZiBuZWVkZWRcbiAgICAgICAgdmFyIHByZWZpeGVkUHJvcGVydHk7XG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmdwdUFjY2VsZXJhdGlvbiAmJiAocHJlZml4ZWRQcm9wZXJ0eSA9IGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJykpKSB7XG4gICAgICAgICAgICBzdHlsZXNbcHJlZml4ZWRQcm9wZXJ0eV0gPSAndHJhbnNsYXRlM2QoJyArIGxlZnQgKyAncHgsICcgKyB0b3AgKyAncHgsIDApJztcbiAgICAgICAgICAgIHN0eWxlcy50b3AgPSAwO1xuICAgICAgICAgICAgc3R5bGVzLmxlZnQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIC8vIG90aHdlcmlzZSwgd2UgdXNlIHRoZSBzdGFuZGFyZCBgbGVmdGAgYW5kIGB0b3BgIHByb3BlcnRpZXNcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGVzLmxlZnQgPSBsZWZ0O1xuICAgICAgICAgICAgICAgIHN0eWxlcy50b3AgPSB0b3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgLy8gYW55IHByb3BlcnR5IHByZXNlbnQgaW4gYGRhdGEuc3R5bGVzYCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlcixcbiAgICAgICAgLy8gaW4gdGhpcyB3YXkgd2UgY2FuIG1ha2UgdGhlIDNyZCBwYXJ0eSBtb2RpZmllcnMgYWRkIGN1c3RvbSBzdHlsZXMgdG8gaXRcbiAgICAgICAgLy8gQmUgYXdhcmUsIG1vZGlmaWVycyBjb3VsZCBvdmVycmlkZSB0aGUgcHJvcGVydGllcyBkZWZpbmVkIGluIHRoZSBwcmV2aW91c1xuICAgICAgICAvLyBsaW5lcyBvZiB0aGlzIG1vZGlmaWVyIVxuICAgICAgICBPYmplY3QuYXNzaWduKHN0eWxlcywgZGF0YS5zdHlsZXMpO1xuXG4gICAgICAgIHNldFN0eWxlKHRoaXMuX3BvcHBlciwgc3R5bGVzKTtcblxuICAgICAgICAvLyBzZXQgYW4gYXR0cmlidXRlIHdoaWNoIHdpbGwgYmUgdXNlZnVsIHRvIHN0eWxlIHRoZSB0b29sdGlwICh1c2UgaXQgdG8gcHJvcGVybHkgcG9zaXRpb24gaXRzIGFycm93KVxuICAgICAgICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICAgICAgICB0aGlzLl9wb3BwZXIuc2V0QXR0cmlidXRlKCd4LXBsYWNlbWVudCcsIGRhdGEucGxhY2VtZW50KTtcblxuICAgICAgICAvLyBpZiB0aGUgYXJyb3cgbW9kaWZpZXIgaXMgcmVxdWlyZWQgYW5kIHRoZSBhcnJvdyBzdHlsZSBoYXMgYmVlbiBjb21wdXRlZCwgYXBwbHkgdGhlIGFycm93IHN0eWxlXG4gICAgICAgIGlmICh0aGlzLmlzTW9kaWZpZXJSZXF1aXJlZCh0aGlzLm1vZGlmaWVycy5hcHBseVN0eWxlLCB0aGlzLm1vZGlmaWVycy5hcnJvdykgJiYgZGF0YS5vZmZzZXRzLmFycm93KSB7XG4gICAgICAgICAgICBzZXRTdHlsZShkYXRhLmFycm93RWxlbWVudCwgZGF0YS5vZmZzZXRzLmFycm93KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllciB1c2VkIHRvIHNoaWZ0IHRoZSBwb3BwZXIgb24gdGhlIHN0YXJ0IG9yIGVuZCBvZiBpdHMgcmVmZXJlbmNlIGVsZW1lbnQgc2lkZVxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyLm1vZGlmaWVyc1xuICAgICAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5tb2RpZmllcnMuc2hpZnQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQ7XG4gICAgICAgIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gICAgICAgIHZhciBzaGlmdFZhcmlhdGlvbiA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xuXG4gICAgICAgIC8vIGlmIHNoaWZ0IHNoaWZ0VmFyaWF0aW9uIGlzIHNwZWNpZmllZCwgcnVuIHRoZSBtb2RpZmllclxuICAgICAgICBpZiAoc2hpZnRWYXJpYXRpb24pIHtcbiAgICAgICAgICAgIHZhciByZWZlcmVuY2UgPSBkYXRhLm9mZnNldHMucmVmZXJlbmNlO1xuICAgICAgICAgICAgdmFyIHBvcHBlciA9IGdldFBvcHBlckNsaWVudFJlY3QoZGF0YS5vZmZzZXRzLnBvcHBlcik7XG5cbiAgICAgICAgICAgIHZhciBzaGlmdE9mZnNldHMgPSB7XG4gICAgICAgICAgICAgICAgeToge1xuICAgICAgICAgICAgICAgICAgICBzdGFydDogeyB0b3A6IHJlZmVyZW5jZS50b3AgfSxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiB7IHRvcDogcmVmZXJlbmNlLnRvcCArIHJlZmVyZW5jZS5oZWlnaHQgLSBwb3BwZXIuaGVpZ2h0IH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHsgbGVmdDogcmVmZXJlbmNlLmxlZnQgfSxcbiAgICAgICAgICAgICAgICAgICAgZW5kOiB7IGxlZnQ6IHJlZmVyZW5jZS5sZWZ0ICsgcmVmZXJlbmNlLndpZHRoIC0gcG9wcGVyLndpZHRoIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB2YXIgYXhpcyA9IFsnYm90dG9tJywgJ3RvcCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xID8gJ3gnIDogJ3knO1xuXG4gICAgICAgICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gT2JqZWN0LmFzc2lnbihwb3BwZXIsIHNoaWZ0T2Zmc2V0c1theGlzXVtzaGlmdFZhcmlhdGlvbl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1vZGlmaWVyIHVzZWQgdG8gbWFrZSBzdXJlIHRoZSBwb3BwZXIgZG9lcyBub3Qgb3ZlcmZsb3dzIGZyb20gaXQncyBib3VuZGFyaWVzXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXIubW9kaWZpZXJzXG4gICAgICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLm1vZGlmaWVycy5wcmV2ZW50T3ZlcmZsb3cgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB2YXIgb3JkZXIgPSB0aGlzLl9vcHRpb25zLnByZXZlbnRPdmVyZmxvd09yZGVyO1xuICAgICAgICB2YXIgcG9wcGVyID0gZ2V0UG9wcGVyQ2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcblxuICAgICAgICB2YXIgY2hlY2sgPSB7XG4gICAgICAgICAgICBsZWZ0OiBmdW5jdGlvbiBsZWZ0KCkge1xuICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gcG9wcGVyLmxlZnQ7XG4gICAgICAgICAgICAgICAgaWYgKHBvcHBlci5sZWZ0IDwgZGF0YS5ib3VuZGFyaWVzLmxlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IE1hdGgubWF4KHBvcHBlci5sZWZ0LCBkYXRhLmJvdW5kYXJpZXMubGVmdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGxlZnQ6IGxlZnQgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByaWdodDogZnVuY3Rpb24gcmlnaHQoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxlZnQgPSBwb3BwZXIubGVmdDtcbiAgICAgICAgICAgICAgICBpZiAocG9wcGVyLnJpZ2h0ID4gZGF0YS5ib3VuZGFyaWVzLnJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgPSBNYXRoLm1pbihwb3BwZXIubGVmdCwgZGF0YS5ib3VuZGFyaWVzLnJpZ2h0IC0gcG9wcGVyLndpZHRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbGVmdDogbGVmdCB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRvcDogZnVuY3Rpb24gdG9wKCkge1xuICAgICAgICAgICAgICAgIHZhciB0b3AgPSBwb3BwZXIudG9wO1xuICAgICAgICAgICAgICAgIGlmIChwb3BwZXIudG9wIDwgZGF0YS5ib3VuZGFyaWVzLnRvcCkge1xuICAgICAgICAgICAgICAgICAgICB0b3AgPSBNYXRoLm1heChwb3BwZXIudG9wLCBkYXRhLmJvdW5kYXJpZXMudG9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdG9wOiB0b3AgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib3R0b206IGZ1bmN0aW9uIGJvdHRvbSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9wID0gcG9wcGVyLnRvcDtcbiAgICAgICAgICAgICAgICBpZiAocG9wcGVyLmJvdHRvbSA+IGRhdGEuYm91bmRhcmllcy5ib3R0b20pIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wID0gTWF0aC5taW4ocG9wcGVyLnRvcCwgZGF0YS5ib3VuZGFyaWVzLmJvdHRvbSAtIHBvcHBlci5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyB0b3A6IHRvcCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIG9yZGVyLmZvckVhY2goZnVuY3Rpb24gKGRpcmVjdGlvbikge1xuICAgICAgICAgICAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24ocG9wcGVyLCBjaGVja1tkaXJlY3Rpb25dKCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXIgdXNlZCB0byBtYWtlIHN1cmUgdGhlIHBvcHBlciBpcyBhbHdheXMgbmVhciBpdHMgcmVmZXJlbmNlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXIubW9kaWZpZXJzXG4gICAgICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IF91cGRhdGUgbWV0aG9kXG4gICAgICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUubW9kaWZpZXJzLmtlZXBUb2dldGhlciA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHZhciBwb3BwZXIgPSBnZXRQb3BwZXJDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuICAgICAgICB2YXIgcmVmZXJlbmNlID0gZGF0YS5vZmZzZXRzLnJlZmVyZW5jZTtcbiAgICAgICAgdmFyIGYgPSBNYXRoLmZsb29yO1xuXG4gICAgICAgIGlmIChwb3BwZXIucmlnaHQgPCBmKHJlZmVyZW5jZS5sZWZ0KSkge1xuICAgICAgICAgICAgZGF0YS5vZmZzZXRzLnBvcHBlci5sZWZ0ID0gZihyZWZlcmVuY2UubGVmdCkgLSBwb3BwZXIud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvcHBlci5sZWZ0ID4gZihyZWZlcmVuY2UucmlnaHQpKSB7XG4gICAgICAgICAgICBkYXRhLm9mZnNldHMucG9wcGVyLmxlZnQgPSBmKHJlZmVyZW5jZS5yaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvcHBlci5ib3R0b20gPCBmKHJlZmVyZW5jZS50b3ApKSB7XG4gICAgICAgICAgICBkYXRhLm9mZnNldHMucG9wcGVyLnRvcCA9IGYocmVmZXJlbmNlLnRvcCkgLSBwb3BwZXIuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3BwZXIudG9wID4gZihyZWZlcmVuY2UuYm90dG9tKSkge1xuICAgICAgICAgICAgZGF0YS5vZmZzZXRzLnBvcHBlci50b3AgPSBmKHJlZmVyZW5jZS5ib3R0b20pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1vZGlmaWVyIHVzZWQgdG8gZmxpcCB0aGUgcGxhY2VtZW50IG9mIHRoZSBwb3BwZXIgd2hlbiB0aGUgbGF0dGVyIGlzIHN0YXJ0aW5nIG92ZXJsYXBwaW5nIGl0cyByZWZlcmVuY2UgZWxlbWVudC5cbiAgICAgKiBSZXF1aXJlcyB0aGUgYHByZXZlbnRPdmVyZmxvd2AgbW9kaWZpZXIgYmVmb3JlIGl0IGluIG9yZGVyIHRvIHdvcmsuXG4gICAgICogKipOT1RFOioqIFRoaXMgbW9kaWZpZXIgd2lsbCBydW4gYWxsIGl0cyBwcmV2aW91cyBtb2RpZmllcnMgZXZlcnl0aW1lIGl0IHRyaWVzIHRvIGZsaXAgdGhlIHBvcHBlciFcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAgICAgKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgX3VwZGF0ZSBtZXRob2RcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5tb2RpZmllcnMuZmxpcCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIC8vIGNoZWNrIGlmIHByZXZlbnRPdmVyZmxvdyBpcyBpbiB0aGUgbGlzdCBvZiBtb2RpZmllcnMgYmVmb3JlIHRoZSBmbGlwIG1vZGlmaWVyLlxuICAgICAgICAvLyBvdGhlcndpc2UgZmxpcCB3b3VsZCBub3Qgd29yayBhcyBleHBlY3RlZC5cbiAgICAgICAgaWYgKCF0aGlzLmlzTW9kaWZpZXJSZXF1aXJlZCh0aGlzLm1vZGlmaWVycy5mbGlwLCB0aGlzLm1vZGlmaWVycy5wcmV2ZW50T3ZlcmZsb3cpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1dBUk5JTkc6IHByZXZlbnRPdmVyZmxvdyBtb2RpZmllciBpcyByZXF1aXJlZCBieSBmbGlwIG1vZGlmaWVyIGluIG9yZGVyIHRvIHdvcmssIGJlIHN1cmUgdG8gaW5jbHVkZSBpdCBiZWZvcmUgZmxpcCEnKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEuZmxpcHBlZCAmJiBkYXRhLnBsYWNlbWVudCA9PT0gZGF0YS5fb3JpZ2luYWxQbGFjZW1lbnQpIHtcbiAgICAgICAgICAgIC8vIHNlZW1zIGxpa2UgZmxpcCBpcyB0cnlpbmcgdG8gbG9vcCwgcHJvYmFibHkgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIG9uIGFueSBvZiB0aGUgZmxpcHBhYmxlIHNpZGVzXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICAgICAgICB2YXIgcGxhY2VtZW50T3Bwb3NpdGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICAgICAgICB2YXIgdmFyaWF0aW9uID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVsxXSB8fCAnJztcblxuICAgICAgICB2YXIgZmxpcE9yZGVyID0gW107XG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmZsaXBCZWhhdmlvciA9PT0gJ2ZsaXAnKSB7XG4gICAgICAgICAgICBmbGlwT3JkZXIgPSBbcGxhY2VtZW50LCBwbGFjZW1lbnRPcHBvc2l0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbGlwT3JkZXIgPSB0aGlzLl9vcHRpb25zLmZsaXBCZWhhdmlvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZsaXBPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChzdGVwLCBpbmRleCkge1xuICAgICAgICAgICAgaWYgKHBsYWNlbWVudCAhPT0gc3RlcCB8fCBmbGlwT3JkZXIubGVuZ3RoID09PSBpbmRleCArIDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gICAgICAgICAgICBwbGFjZW1lbnRPcHBvc2l0ZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICAgICAgICAgIHZhciBwb3BwZXJPZmZzZXRzID0gZ2V0UG9wcGVyQ2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcblxuICAgICAgICAgICAgLy8gdGhpcyBib29sZWFuIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggcmlnaHQgYW5kIGJvdHRvbSBmcm9tIHRvcCBhbmQgbGVmdFxuICAgICAgICAgICAgLy8gdGhleSBuZWVkIGRpZmZlcmVudCBjb21wdXRhdGlvbnMgdG8gZ2V0IGZsaXBwZWRcbiAgICAgICAgICAgIHZhciBhID0gWydyaWdodCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuXG4gICAgICAgICAgICAvLyB1c2luZyBNYXRoLmZsb29yIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBvZmZzZXRzIG1heSBjb250YWluIGRlY2ltYWxzIHdlIGFyZSBub3QgZ29pbmcgdG8gY29uc2lkZXIgaGVyZVxuICAgICAgICAgICAgaWYgKGEgJiYgTWF0aC5mbG9vcihkYXRhLm9mZnNldHMucmVmZXJlbmNlW3BsYWNlbWVudF0pID4gTWF0aC5mbG9vcihwb3BwZXJPZmZzZXRzW3BsYWNlbWVudE9wcG9zaXRlXSkgfHwgIWEgJiYgTWF0aC5mbG9vcihkYXRhLm9mZnNldHMucmVmZXJlbmNlW3BsYWNlbWVudF0pIDwgTWF0aC5mbG9vcihwb3BwZXJPZmZzZXRzW3BsYWNlbWVudE9wcG9zaXRlXSkpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSdsbCB1c2UgdGhpcyBib29sZWFuIHRvIGRldGVjdCBhbnkgZmxpcCBsb29wXG4gICAgICAgICAgICAgICAgZGF0YS5mbGlwcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkYXRhLnBsYWNlbWVudCA9IGZsaXBPcmRlcltpbmRleCArIDFdO1xuICAgICAgICAgICAgICAgIGlmICh2YXJpYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5wbGFjZW1lbnQgKz0gJy0nICsgdmFyaWF0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gdGhpcy5fZ2V0T2Zmc2V0cyh0aGlzLl9wb3BwZXIsIHRoaXMuX3JlZmVyZW5jZSwgZGF0YS5wbGFjZW1lbnQpLnBvcHBlcjtcblxuICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLnJ1bk1vZGlmaWVycyhkYXRhLCB0aGlzLl9vcHRpb25zLm1vZGlmaWVycywgdGhpcy5fZmxpcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllciB1c2VkIHRvIGFkZCBhbiBvZmZzZXQgdG8gdGhlIHBvcHBlciwgdXNlZnVsIGlmIHlvdSBtb3JlIGdyYW51bGFyaXR5IHBvc2l0aW9uaW5nIHlvdXIgcG9wcGVyLlxuICAgICAqIFRoZSBvZmZzZXRzIHdpbGwgc2hpZnQgdGhlIHBvcHBlciBvbiB0aGUgc2lkZSBvZiBpdHMgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXIubW9kaWZpZXJzXG4gICAgICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IF91cGRhdGUgbWV0aG9kXG4gICAgICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUubW9kaWZpZXJzLm9mZnNldCA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9vcHRpb25zLm9mZnNldDtcbiAgICAgICAgdmFyIHBvcHBlciA9IGRhdGEub2Zmc2V0cy5wb3BwZXI7XG5cbiAgICAgICAgaWYgKGRhdGEucGxhY2VtZW50LmluZGV4T2YoJ2xlZnQnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHBvcHBlci50b3AgLT0gb2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEucGxhY2VtZW50LmluZGV4T2YoJ3JpZ2h0JykgIT09IC0xKSB7XG4gICAgICAgICAgICBwb3BwZXIudG9wICs9IG9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnBsYWNlbWVudC5pbmRleE9mKCd0b3AnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHBvcHBlci5sZWZ0IC09IG9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnBsYWNlbWVudC5pbmRleE9mKCdib3R0b20nKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHBvcHBlci5sZWZ0ICs9IG9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXIgdXNlZCB0byBtb3ZlIHRoZSBhcnJvd3Mgb24gdGhlIGVkZ2Ugb2YgdGhlIHBvcHBlciB0byBtYWtlIHN1cmUgdGhlbSBhcmUgYWx3YXlzIGJldHdlZW4gdGhlIHBvcHBlciBhbmQgdGhlIHJlZmVyZW5jZSBlbGVtZW50XG4gICAgICogSXQgd2lsbCB1c2UgdGhlIENTUyBvdXRlciBzaXplIG9mIHRoZSBhcnJvdyBlbGVtZW50IHRvIGtub3cgaG93IG1hbnkgcGl4ZWxzIG9mIGNvbmp1Y3Rpb24gYXJlIG5lZWRlZFxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyLm1vZGlmaWVyc1xuICAgICAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBfdXBkYXRlIG1ldGhvZFxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLm1vZGlmaWVycy5hcnJvdyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHZhciBhcnJvdyA9IHRoaXMuX29wdGlvbnMuYXJyb3dFbGVtZW50O1xuXG4gICAgICAgIC8vIGlmIHRoZSBhcnJvd0VsZW1lbnQgaXMgYSBzdHJpbmcsIHN1cHBvc2UgaXQncyBhIENTUyBzZWxlY3RvclxuICAgICAgICBpZiAodHlwZW9mIGFycm93ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYXJyb3cgPSB0aGlzLl9wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvdyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBhcnJvdyBlbGVtZW50IGlzIG5vdCBmb3VuZCwgZG9uJ3QgcnVuIHRoZSBtb2RpZmllclxuICAgICAgICBpZiAoIWFycm93KSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoZSBhcnJvdyBlbGVtZW50IG11c3QgYmUgY2hpbGQgb2YgaXRzIHBvcHBlclxuICAgICAgICBpZiAoIXRoaXMuX3BvcHBlci5jb250YWlucyhhcnJvdykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV0FSTklORzogYGFycm93RWxlbWVudGAgbXVzdCBiZSBjaGlsZCBvZiBpdHMgcG9wcGVyIGVsZW1lbnQhJyk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFycm93IGRlcGVuZHMgb24ga2VlcFRvZ2V0aGVyIGluIG9yZGVyIHRvIHdvcmtcbiAgICAgICAgaWYgKCF0aGlzLmlzTW9kaWZpZXJSZXF1aXJlZCh0aGlzLm1vZGlmaWVycy5hcnJvdywgdGhpcy5tb2RpZmllcnMua2VlcFRvZ2V0aGVyKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiBrZWVwVG9nZXRoZXIgbW9kaWZpZXIgaXMgcmVxdWlyZWQgYnkgYXJyb3cgbW9kaWZpZXIgaW4gb3JkZXIgdG8gd29yaywgYmUgc3VyZSB0byBpbmNsdWRlIGl0IGJlZm9yZSBhcnJvdyEnKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFycm93U3R5bGUgPSB7fTtcbiAgICAgICAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gICAgICAgIHZhciBwb3BwZXIgPSBnZXRQb3BwZXJDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuICAgICAgICB2YXIgcmVmZXJlbmNlID0gZGF0YS5vZmZzZXRzLnJlZmVyZW5jZTtcbiAgICAgICAgdmFyIGlzVmVydGljYWwgPSBbJ2xlZnQnLCAncmlnaHQnXS5pbmRleE9mKHBsYWNlbWVudCkgIT09IC0xO1xuXG4gICAgICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICB2YXIgc2lkZSA9IGlzVmVydGljYWwgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgdmFyIGFsdFNpZGUgPSBpc1ZlcnRpY2FsID8gJ2xlZnQnIDogJ3RvcCc7XG4gICAgICAgIHZhciBvcFNpZGUgPSBpc1ZlcnRpY2FsID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgICAgICB2YXIgYXJyb3dTaXplID0gZ2V0T3V0ZXJTaXplcyhhcnJvdylbbGVuXTtcblxuICAgICAgICAvL1xuICAgICAgICAvLyBleHRlbmRzIGtlZXBUb2dldGhlciBiZWhhdmlvciBtYWtpbmcgc3VyZSB0aGUgcG9wcGVyIGFuZCBpdHMgcmVmZXJlbmNlIGhhdmUgZW5vdWdoIHBpeGVscyBpbiBjb25qdWN0aW9uXG4gICAgICAgIC8vXG5cbiAgICAgICAgLy8gdG9wL2xlZnQgc2lkZVxuICAgICAgICBpZiAocmVmZXJlbmNlW29wU2lkZV0gLSBhcnJvd1NpemUgPCBwb3BwZXJbc2lkZV0pIHtcbiAgICAgICAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gLT0gcG9wcGVyW3NpZGVdIC0gKHJlZmVyZW5jZVtvcFNpZGVdIC0gYXJyb3dTaXplKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBib3R0b20vcmlnaHQgc2lkZVxuICAgICAgICBpZiAocmVmZXJlbmNlW3NpZGVdICsgYXJyb3dTaXplID4gcG9wcGVyW29wU2lkZV0pIHtcbiAgICAgICAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXJbc2lkZV0gKz0gcmVmZXJlbmNlW3NpZGVdICsgYXJyb3dTaXplIC0gcG9wcGVyW29wU2lkZV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb21wdXRlIGNlbnRlciBvZiB0aGUgcG9wcGVyXG4gICAgICAgIHZhciBjZW50ZXIgPSByZWZlcmVuY2Vbc2lkZV0gKyByZWZlcmVuY2VbbGVuXSAvIDIgLSBhcnJvd1NpemUgLyAyO1xuXG4gICAgICAgIHZhciBzaWRlVmFsdWUgPSBjZW50ZXIgLSBwb3BwZXJbc2lkZV07XG5cbiAgICAgICAgLy8gcHJldmVudCBhcnJvdyBmcm9tIGJlaW5nIHBsYWNlZCBub3QgY29udGlndW91c2x5IHRvIGl0cyBwb3BwZXJcbiAgICAgICAgc2lkZVZhbHVlID0gTWF0aC5tYXgoTWF0aC5taW4ocG9wcGVyW2xlbl0gLSBhcnJvd1NpemUgLSAzLCBzaWRlVmFsdWUpLCAzKTtcbiAgICAgICAgYXJyb3dTdHlsZVtzaWRlXSA9IHNpZGVWYWx1ZTtcbiAgICAgICAgYXJyb3dTdHlsZVthbHRTaWRlXSA9ICcnOyAvLyBtYWtlIHN1cmUgdG8gcmVtb3ZlIGFueSBvbGQgc3R5bGUgZnJvbSB0aGUgYXJyb3dcblxuICAgICAgICBkYXRhLm9mZnNldHMuYXJyb3cgPSBhcnJvd1N0eWxlO1xuICAgICAgICBkYXRhLmFycm93RWxlbWVudCA9IGFycm93O1xuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG5cbiAgICAvL1xuICAgIC8vIEhlbHBlcnNcbiAgICAvL1xuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBvdXRlciBzaXplcyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCAob2Zmc2V0IHNpemUgKyBtYXJnaW5zKVxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBvYmplY3QgY29udGFpbmluZyB3aWR0aCBhbmQgaGVpZ2h0IHByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRPdXRlclNpemVzKGVsZW1lbnQpIHtcbiAgICAgICAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgICAgICAgdmFyIF9kaXNwbGF5ID0gZWxlbWVudC5zdHlsZS5kaXNwbGF5LFxuICAgICAgICAgICAgX3Zpc2liaWxpdHkgPSBlbGVtZW50LnN0eWxlLnZpc2liaWxpdHk7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7ZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIHZhciBjYWxjV2lkdGhUb0ZvcmNlUmVwYWludCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG5cbiAgICAgICAgLy8gb3JpZ2luYWwgbWV0aG9kXG4gICAgICAgIHZhciBzdHlsZXMgPSByb290LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luVG9wKSArIHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpbkJvdHRvbSk7XG4gICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luTGVmdCkgKyBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5SaWdodCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB7IHdpZHRoOiBlbGVtZW50Lm9mZnNldFdpZHRoICsgeSwgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodCArIHggfTtcblxuICAgICAgICAvLyByZXNldCBlbGVtZW50IHN0eWxlc1xuICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBfZGlzcGxheTtlbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSBfdmlzaWJpbGl0eTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIG9wcG9zaXRlIHBsYWNlbWVudCBvZiB0aGUgZ2l2ZW4gb25lL1xuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAYXJndW1lbnQge1N0cmluZ30gcGxhY2VtZW50XG4gICAgICogQHJldHVybnMge1N0cmluZ30gZmxpcHBlZCBwbGFjZW1lbnRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgICAgICAgdmFyIGhhc2ggPSB7IGxlZnQ6ICdyaWdodCcsIHJpZ2h0OiAnbGVmdCcsIGJvdHRvbTogJ3RvcCcsIHRvcDogJ2JvdHRvbScgfTtcbiAgICAgICAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiB0aGUgcG9wcGVyIG9mZnNldHMsIGdlbmVyYXRlIGFuIG91dHB1dCBzaW1pbGFyIHRvIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAYXJndW1lbnQge09iamVjdH0gcG9wcGVyT2Zmc2V0c1xuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IENsaWVudFJlY3QgbGlrZSBvdXRwdXRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRQb3BwZXJDbGllbnRSZWN0KHBvcHBlck9mZnNldHMpIHtcbiAgICAgICAgdmFyIG9mZnNldHMgPSBPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJPZmZzZXRzKTtcbiAgICAgICAgb2Zmc2V0cy5yaWdodCA9IG9mZnNldHMubGVmdCArIG9mZnNldHMud2lkdGg7XG4gICAgICAgIG9mZnNldHMuYm90dG9tID0gb2Zmc2V0cy50b3AgKyBvZmZzZXRzLmhlaWdodDtcbiAgICAgICAgcmV0dXJuIG9mZnNldHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYW4gYXJyYXkgYW5kIHRoZSBrZXkgdG8gZmluZCwgcmV0dXJucyBpdHMgaW5kZXhcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICogQGFyZ3VtZW50IHtBcnJheX0gYXJyXG4gICAgICogQGFyZ3VtZW50IGtleVRvRmluZFxuICAgICAqIEByZXR1cm5zIGluZGV4IG9yIG51bGxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRBcnJheUtleUluZGV4KGFyciwga2V5VG9GaW5kKSB7XG4gICAgICAgIHZhciBpID0gMCxcbiAgICAgICAgICAgIGtleTtcbiAgICAgICAgZm9yIChrZXkgaW4gYXJyKSB7XG4gICAgICAgICAgICBpZiAoYXJyW2tleV0gPT09IGtleVRvRmluZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBDU1MgY29tcHV0ZWQgcHJvcGVydHkgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICogQGFyZ3VtZW50IHtFZW1lbnR9IGVsZW1lbnRcbiAgICAgKiBAYXJndW1lbnQge1N0cmluZ30gcHJvcGVydHlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHkpIHtcbiAgICAgICAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgICAgICAgdmFyIGNzcyA9IHJvb3QuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTtcbiAgICAgICAgcmV0dXJuIGNzc1twcm9wZXJ0eV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgb2Zmc2V0IHBhcmVudCBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gb2Zmc2V0IHBhcmVudFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gICAgICAgIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gICAgICAgIHZhciBvZmZzZXRQYXJlbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcbiAgICAgICAgcmV0dXJuIG9mZnNldFBhcmVudCA9PT0gcm9vdC5kb2N1bWVudC5ib2R5IHx8ICFvZmZzZXRQYXJlbnQgPyByb290LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IG9mZnNldFBhcmVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBzY3JvbGxpbmcgcGFyZW50IG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICAgICAqIEByZXR1cm5zIHtFbGVtZW50fSBvZmZzZXQgcGFyZW50XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblxuICAgICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyZW50ID09PSByb290LmRvY3VtZW50KSB7XG4gICAgICAgICAgICAvLyBGaXJlZm94IHB1dHMgdGhlIHNjcm9sbFRPcCB2YWx1ZSBvbiBgZG9jdW1lbnRFbGVtZW50YCBpbnN0ZWFkIG9mIGBib2R5YCwgd2UgdGhlbiBjaGVjayB3aGljaCBvZiB0aGVtIGlzXG4gICAgICAgICAgICAvLyBncmVhdGVyIHRoYW4gMCBhbmQgcmV0dXJuIHRoZSBwcm9wZXIgZWxlbWVudFxuICAgICAgICAgICAgaWYgKHJvb3QuZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm9vdC5kb2N1bWVudC5ib2R5O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm9vdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXJlZm94IHdhbnQgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgICAgICAgaWYgKFsnc2Nyb2xsJywgJ2F1dG8nXS5pbmRleE9mKGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShwYXJlbnQsICdvdmVyZmxvdycpKSAhPT0gLTEgfHwgWydzY3JvbGwnLCAnYXV0byddLmluZGV4T2YoZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KHBhcmVudCwgJ292ZXJmbG93LXgnKSkgIT09IC0xIHx8IFsnc2Nyb2xsJywgJ2F1dG8nXS5pbmRleE9mKGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShwYXJlbnQsICdvdmVyZmxvdy15JykpICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGRldGVjdGVkIHNjcm9sbFBhcmVudCBpcyBib2R5LCB3ZSBwZXJmb3JtIGFuIGFkZGl0aW9uYWwgY2hlY2sgb24gaXRzIHBhcmVudE5vZGVcbiAgICAgICAgICAgIC8vIGluIHRoaXMgd2F5IHdlJ2xsIGdldCBib2R5IGlmIHRoZSBicm93c2VyIGlzIENocm9tZS1pc2gsIG9yIGRvY3VtZW50RWxlbWVudCBvdGhlcndpc2VcbiAgICAgICAgICAgIC8vIGZpeGVzIGlzc3VlICM2NVxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQucGFyZW50Tm9kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgZml4ZWQgb3IgaXMgaW5zaWRlIGEgZml4ZWQgcGFyZW50XG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICAgICAqIEBhcmd1bWVudCB7RWxlbWVudH0gY3VzdG9tQ29udGFpbmVyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59IGFuc3dlciB0byBcImlzRml4ZWQ/XCJcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0ZpeGVkKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IHJvb3QuZG9jdW1lbnQuYm9keSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWxlbWVudCwgJ3Bvc2l0aW9uJykgPT09ICdmaXhlZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbGVtZW50LnBhcmVudE5vZGUgPyBpc0ZpeGVkKGVsZW1lbnQucGFyZW50Tm9kZSkgOiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB0aGUgc3R5bGUgdG8gdGhlIGdpdmVuIHBvcHBlclxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFwcGx5IHRoZSBzdHlsZSB0b1xuICAgICAqIEBhcmd1bWVudCB7T2JqZWN0fSBzdHlsZXMgLSBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldFN0eWxlKGVsZW1lbnQsIHN0eWxlcykge1xuICAgICAgICBmdW5jdGlvbiBpc19udW1lcmljKG4pIHtcbiAgICAgICAgICAgIHJldHVybiBuICE9PSAnJyAmJiAhaXNOYU4ocGFyc2VGbG9hdChuKSkgJiYgaXNGaW5pdGUobik7XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmtleXMoc3R5bGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgICB2YXIgdW5pdCA9ICcnO1xuICAgICAgICAgICAgLy8gYWRkIHVuaXQgaWYgdGhlIHZhbHVlIGlzIG51bWVyaWMgYW5kIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nXG4gICAgICAgICAgICBpZiAoWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10uaW5kZXhPZihwcm9wKSAhPT0gLTEgJiYgaXNfbnVtZXJpYyhzdHlsZXNbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgdW5pdCA9ICdweCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gc3R5bGVzW3Byb3BdICsgdW5pdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGdpdmVuIHZhcmlhYmxlIGlzIGEgZnVuY3Rpb25cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICogQGFyZ3VtZW50IHsqfSBmdW5jdGlvblRvQ2hlY2sgLSB2YXJpYWJsZSB0byBjaGVja1xuICAgICAqIEByZXR1cm5zIHtCb29sZWFufSBhbnN3ZXIgdG86IGlzIGEgZnVuY3Rpb24/XG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihmdW5jdGlvblRvQ2hlY2spIHtcbiAgICAgICAgdmFyIGdldFR5cGUgPSB7fTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uVG9DaGVjayAmJiBnZXRUeXBlLnRvU3RyaW5nLmNhbGwoZnVuY3Rpb25Ub0NoZWNrKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBnaXZlbiBlbGVtZW50LCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0IHBhcmVudFxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IHBvc2l0aW9uIC0gQ29vcmRpbmF0ZXMgb2YgdGhlIGVsZW1lbnQgYW5kIGl0cyBgc2Nyb2xsVG9wYFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE9mZnNldFJlY3QoZWxlbWVudCkge1xuICAgICAgICB2YXIgZWxlbWVudFJlY3QgPSB7XG4gICAgICAgICAgICB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgICAgICAgICB0b3A6IGVsZW1lbnQub2Zmc2V0VG9wXG4gICAgICAgIH07XG5cbiAgICAgICAgZWxlbWVudFJlY3QucmlnaHQgPSBlbGVtZW50UmVjdC5sZWZ0ICsgZWxlbWVudFJlY3Qud2lkdGg7XG4gICAgICAgIGVsZW1lbnRSZWN0LmJvdHRvbSA9IGVsZW1lbnRSZWN0LnRvcCArIGVsZW1lbnRSZWN0LmhlaWdodDtcblxuICAgICAgICAvLyBwb3NpdGlvblxuICAgICAgICByZXR1cm4gZWxlbWVudFJlY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGJvdW5kaW5nIGNsaWVudCByZWN0IG9mIGdpdmVuIGVsZW1lbnRcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICAgICAqIEByZXR1cm4ge09iamVjdH0gY2xpZW50IHJlY3RcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCkge1xuICAgICAgICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgLy8gd2hldGhlciB0aGUgSUUgdmVyc2lvbiBpcyBsb3dlciB0aGFuIDExXG4gICAgICAgIHZhciBpc0lFID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiTVNJRVwiKSAhPSAtMTtcblxuICAgICAgICAvLyBmaXggaWUgZG9jdW1lbnQgYm91bmRpbmcgdG9wIGFsd2F5cyAwIGJ1Z1xuICAgICAgICB2YXIgcmVjdFRvcCA9IGlzSUUgJiYgZWxlbWVudC50YWdOYW1lID09PSAnSFRNTCcgPyAtZWxlbWVudC5zY3JvbGxUb3AgOiByZWN0LnRvcDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbGVmdDogcmVjdC5sZWZ0LFxuICAgICAgICAgICAgdG9wOiByZWN0VG9wLFxuICAgICAgICAgICAgcmlnaHQ6IHJlY3QucmlnaHQsXG4gICAgICAgICAgICBib3R0b206IHJlY3QuYm90dG9tLFxuICAgICAgICAgICAgd2lkdGg6IHJlY3QucmlnaHQgLSByZWN0LmxlZnQsXG4gICAgICAgICAgICBoZWlnaHQ6IHJlY3QuYm90dG9tIC0gcmVjdFRvcFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGFuIGVsZW1lbnQgYW5kIG9uZSBvZiBpdHMgcGFyZW50cywgcmV0dXJuIHRoZSBvZmZzZXRcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudFxuICAgICAqIEByZXR1cm4ge09iamVjdH0gcmVjdFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQ3VzdG9tUGFyZW50KGVsZW1lbnQsIHBhcmVudCwgZml4ZWQpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpO1xuICAgICAgICB2YXIgcGFyZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChwYXJlbnQpO1xuXG4gICAgICAgIGlmIChmaXhlZCkge1xuICAgICAgICAgICAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChwYXJlbnQpO1xuICAgICAgICAgICAgcGFyZW50UmVjdC50b3AgKz0gc2Nyb2xsUGFyZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICAgIHBhcmVudFJlY3QuYm90dG9tICs9IHNjcm9sbFBhcmVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgICBwYXJlbnRSZWN0LmxlZnQgKz0gc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQ7XG4gICAgICAgICAgICBwYXJlbnRSZWN0LnJpZ2h0ICs9IHNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlY3QgPSB7XG4gICAgICAgICAgICB0b3A6IGVsZW1lbnRSZWN0LnRvcCAtIHBhcmVudFJlY3QudG9wLFxuICAgICAgICAgICAgbGVmdDogZWxlbWVudFJlY3QubGVmdCAtIHBhcmVudFJlY3QubGVmdCxcbiAgICAgICAgICAgIGJvdHRvbTogZWxlbWVudFJlY3QudG9wIC0gcGFyZW50UmVjdC50b3AgKyBlbGVtZW50UmVjdC5oZWlnaHQsXG4gICAgICAgICAgICByaWdodDogZWxlbWVudFJlY3QubGVmdCAtIHBhcmVudFJlY3QubGVmdCArIGVsZW1lbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgd2lkdGg6IGVsZW1lbnRSZWN0LndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBlbGVtZW50UmVjdC5oZWlnaHRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwcmVmaXhlZCBzdXBwb3J0ZWQgcHJvcGVydHkgbmFtZVxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAYXJndW1lbnQge1N0cmluZ30gcHJvcGVydHkgKGNhbWVsQ2FzZSlcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBwcmVmaXhlZCBwcm9wZXJ0eSAoY2FtZWxDYXNlKVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFN1cHBvcnRlZFByb3BlcnR5TmFtZShwcm9wZXJ0eSkge1xuICAgICAgICB2YXIgcHJlZml4ZXMgPSBbJycsICdtcycsICd3ZWJraXQnLCAnbW96JywgJ28nXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZWZpeGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdG9DaGVjayA9IHByZWZpeGVzW2ldID8gcHJlZml4ZXNbaV0gKyBwcm9wZXJ0eS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3BlcnR5LnNsaWNlKDEpIDogcHJvcGVydHk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJvb3QuZG9jdW1lbnQuYm9keS5zdHlsZVt0b0NoZWNrXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9DaGVjaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgT2JqZWN0LmFzc2lnbigpIG1ldGhvZCBpcyB1c2VkIHRvIGNvcHkgdGhlIHZhbHVlcyBvZiBhbGwgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZVxuICAgICAqIG9iamVjdHMgdG8gYSB0YXJnZXQgb2JqZWN0LiBJdCB3aWxsIHJldHVybiB0aGUgdGFyZ2V0IG9iamVjdC5cbiAgICAgKiBUaGlzIHBvbHlmaWxsIGRvZXNuJ3Qgc3VwcG9ydCBzeW1ib2wgcHJvcGVydGllcywgc2luY2UgRVM1IGRvZXNuJ3QgaGF2ZSBzeW1ib2xzIGFueXdheVxuICAgICAqIFNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKi9cbiAgICBpZiAoIU9iamVjdC5hc3NpZ24pIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdCwgJ2Fzc2lnbicsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gdW5kZWZpbmVkIHx8IHRhcmdldCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBmaXJzdCBhcmd1bWVudCB0byBvYmplY3QnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdG8gPSBPYmplY3QodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dFNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRTb3VyY2UgPT09IHVuZGVmaW5lZCB8fCBuZXh0U291cmNlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXh0U291cmNlID0gT2JqZWN0KG5leHRTb3VyY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlzQXJyYXkgPSBPYmplY3Qua2V5cyhuZXh0U291cmNlKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbmV4dEluZGV4ID0gMCwgbGVuID0ga2V5c0FycmF5Lmxlbmd0aDsgbmV4dEluZGV4IDwgbGVuOyBuZXh0SW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRLZXkgPSBrZXlzQXJyYXlbbmV4dEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuZXh0U291cmNlLCBuZXh0S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQgJiYgZGVzYy5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0bztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFBvcHBlcjtcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL3BvcHBlci5qc1xuLy8gbW9kdWxlIGlkID0gMzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///32\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\nexports.default = {\n el: {\n colorpicker: {\n confirm: '确定',\n clear: '清空'\n },\n datepicker: {\n now: '此刻',\n today: '今天',\n cancel: '取消',\n clear: '清空',\n confirm: '确定',\n selectDate: '选择日期',\n selectTime: '选择时间',\n startDate: '开始日期',\n startTime: '开始时间',\n endDate: '结束日期',\n endTime: '结束时间',\n year: '年',\n month1: '1 月',\n month2: '2 月',\n month3: '3 月',\n month4: '4 月',\n month5: '5 月',\n month6: '6 月',\n month7: '7 月',\n month8: '8 月',\n month9: '9 月',\n month10: '10 月',\n month11: '11 月',\n month12: '12 月',\n // week: '周次',\n weeks: {\n sun: '日',\n mon: '一',\n tue: '二',\n wed: '三',\n thu: '四',\n fri: '五',\n sat: '六'\n },\n months: {\n jan: '一月',\n feb: '二月',\n mar: '三月',\n apr: '四月',\n may: '五月',\n jun: '六月',\n jul: '七月',\n aug: '八月',\n sep: '九月',\n oct: '十月',\n nov: '十一月',\n dec: '十二月'\n }\n },\n select: {\n loading: '加载中',\n noMatch: '无匹配数据',\n noData: '无数据',\n placeholder: '请选择'\n },\n cascader: {\n noMatch: '无匹配数据',\n loading: '加载中',\n placeholder: '请选择'\n },\n pagination: {\n goto: '前往',\n pagesize: '条/页',\n total: '共 {total} 条',\n pageClassifier: '页'\n },\n messagebox: {\n title: '提示',\n confirm: '确定',\n cancel: '取消',\n error: '输入的数据不合法!'\n },\n upload: {\n delete: '删除',\n preview: '查看图片',\n continue: '继续上传'\n },\n table: {\n emptyText: '暂无数据',\n confirmFilter: '筛选',\n resetFilter: '重置',\n clearFilter: '全部',\n sumText: '合计'\n },\n tree: {\n emptyText: '暂无数据'\n },\n transfer: {\n noMatch: '无匹配数据',\n noData: '无数据',\n titles: ['列表 1', '列表 2'],\n filterPlaceholder: '请输入搜索内容',\n noCheckedFormat: '共 {total} 项',\n hasCheckedFormat: '已选 {checked}/{total} 项'\n }\n }\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbG9jYWxlL2xhbmcvemgtQ04uanM/NTYyZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixNQUFNO0FBQ3ZCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixNQUFNO0FBQ2pDLDZCQUE2QixRQUFRLEVBQUUsTUFBTTtBQUM3QztBQUNBO0FBQ0EiLCJmaWxlIjoiMzMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gIGVsOiB7XG4gICAgY29sb3JwaWNrZXI6IHtcbiAgICAgIGNvbmZpcm06ICfnoa7lrponLFxuICAgICAgY2xlYXI6ICfmuIXnqbonXG4gICAgfSxcbiAgICBkYXRlcGlja2VyOiB7XG4gICAgICBub3c6ICfmraTliLsnLFxuICAgICAgdG9kYXk6ICfku4rlpKknLFxuICAgICAgY2FuY2VsOiAn5Y+W5raIJyxcbiAgICAgIGNsZWFyOiAn5riF56m6JyxcbiAgICAgIGNvbmZpcm06ICfnoa7lrponLFxuICAgICAgc2VsZWN0RGF0ZTogJ+mAieaLqeaXpeacnycsXG4gICAgICBzZWxlY3RUaW1lOiAn6YCJ5oup5pe26Ze0JyxcbiAgICAgIHN0YXJ0RGF0ZTogJ+W8gOWni+aXpeacnycsXG4gICAgICBzdGFydFRpbWU6ICflvIDlp4vml7bpl7QnLFxuICAgICAgZW5kRGF0ZTogJ+e7k+adn+aXpeacnycsXG4gICAgICBlbmRUaW1lOiAn57uT5p2f5pe26Ze0JyxcbiAgICAgIHllYXI6ICflubQnLFxuICAgICAgbW9udGgxOiAnMSDmnIgnLFxuICAgICAgbW9udGgyOiAnMiDmnIgnLFxuICAgICAgbW9udGgzOiAnMyDmnIgnLFxuICAgICAgbW9udGg0OiAnNCDmnIgnLFxuICAgICAgbW9udGg1OiAnNSDmnIgnLFxuICAgICAgbW9udGg2OiAnNiDmnIgnLFxuICAgICAgbW9udGg3OiAnNyDmnIgnLFxuICAgICAgbW9udGg4OiAnOCDmnIgnLFxuICAgICAgbW9udGg5OiAnOSDmnIgnLFxuICAgICAgbW9udGgxMDogJzEwIOaciCcsXG4gICAgICBtb250aDExOiAnMTEg5pyIJyxcbiAgICAgIG1vbnRoMTI6ICcxMiDmnIgnLFxuICAgICAgLy8gd2VlazogJ+WRqOasoScsXG4gICAgICB3ZWVrczoge1xuICAgICAgICBzdW46ICfml6UnLFxuICAgICAgICBtb246ICfkuIAnLFxuICAgICAgICB0dWU6ICfkuownLFxuICAgICAgICB3ZWQ6ICfkuIknLFxuICAgICAgICB0aHU6ICflm5snLFxuICAgICAgICBmcmk6ICfkupQnLFxuICAgICAgICBzYXQ6ICflha0nXG4gICAgICB9LFxuICAgICAgbW9udGhzOiB7XG4gICAgICAgIGphbjogJ+S4gOaciCcsXG4gICAgICAgIGZlYjogJ+S6jOaciCcsXG4gICAgICAgIG1hcjogJ+S4ieaciCcsXG4gICAgICAgIGFwcjogJ+Wbm+aciCcsXG4gICAgICAgIG1heTogJ+S6lOaciCcsXG4gICAgICAgIGp1bjogJ+WFreaciCcsXG4gICAgICAgIGp1bDogJ+S4g+aciCcsXG4gICAgICAgIGF1ZzogJ+WFq+aciCcsXG4gICAgICAgIHNlcDogJ+S5neaciCcsXG4gICAgICAgIG9jdDogJ+WNgeaciCcsXG4gICAgICAgIG5vdjogJ+WNgeS4gOaciCcsXG4gICAgICAgIGRlYzogJ+WNgeS6jOaciCdcbiAgICAgIH1cbiAgICB9LFxuICAgIHNlbGVjdDoge1xuICAgICAgbG9hZGluZzogJ+WKoOi9veS4rScsXG4gICAgICBub01hdGNoOiAn5peg5Yy56YWN5pWw5o2uJyxcbiAgICAgIG5vRGF0YTogJ+aXoOaVsOaNricsXG4gICAgICBwbGFjZWhvbGRlcjogJ+ivt+mAieaLqSdcbiAgICB9LFxuICAgIGNhc2NhZGVyOiB7XG4gICAgICBub01hdGNoOiAn5peg5Yy56YWN5pWw5o2uJyxcbiAgICAgIGxvYWRpbmc6ICfliqDovb3kuK0nLFxuICAgICAgcGxhY2Vob2xkZXI6ICfor7fpgInmi6knXG4gICAgfSxcbiAgICBwYWdpbmF0aW9uOiB7XG4gICAgICBnb3RvOiAn5YmN5b6AJyxcbiAgICAgIHBhZ2VzaXplOiAn5p2hL+mhtScsXG4gICAgICB0b3RhbDogJ+WFsSB7dG90YWx9IOadoScsXG4gICAgICBwYWdlQ2xhc3NpZmllcjogJ+mhtSdcbiAgICB9LFxuICAgIG1lc3NhZ2Vib3g6IHtcbiAgICAgIHRpdGxlOiAn5o+Q56S6JyxcbiAgICAgIGNvbmZpcm06ICfnoa7lrponLFxuICAgICAgY2FuY2VsOiAn5Y+W5raIJyxcbiAgICAgIGVycm9yOiAn6L6T5YWl55qE5pWw5o2u5LiN5ZCI5rOVISdcbiAgICB9LFxuICAgIHVwbG9hZDoge1xuICAgICAgZGVsZXRlOiAn5Yig6ZmkJyxcbiAgICAgIHByZXZpZXc6ICfmn6XnnIvlm77niYcnLFxuICAgICAgY29udGludWU6ICfnu6fnu63kuIrkvKAnXG4gICAgfSxcbiAgICB0YWJsZToge1xuICAgICAgZW1wdHlUZXh0OiAn5pqC5peg5pWw5o2uJyxcbiAgICAgIGNvbmZpcm1GaWx0ZXI6ICfnrZvpgIknLFxuICAgICAgcmVzZXRGaWx0ZXI6ICfph43nva4nLFxuICAgICAgY2xlYXJGaWx0ZXI6ICflhajpg6gnLFxuICAgICAgc3VtVGV4dDogJ+WQiOiuoSdcbiAgICB9LFxuICAgIHRyZWU6IHtcbiAgICAgIGVtcHR5VGV4dDogJ+aaguaXoOaVsOaNridcbiAgICB9LFxuICAgIHRyYW5zZmVyOiB7XG4gICAgICBub01hdGNoOiAn5peg5Yy56YWN5pWw5o2uJyxcbiAgICAgIG5vRGF0YTogJ+aXoOaVsOaNricsXG4gICAgICB0aXRsZXM6IFsn5YiX6KGoIDEnLCAn5YiX6KGoIDInXSxcbiAgICAgIGZpbHRlclBsYWNlaG9sZGVyOiAn6K+36L6T5YWl5pCc57Si5YaF5a65JyxcbiAgICAgIG5vQ2hlY2tlZEZvcm1hdDogJ+WFsSB7dG90YWx9IOmhuScsXG4gICAgICBoYXNDaGVja2VkRm9ybWF0OiAn5bey6YCJIHtjaGVja2VkfS97dG90YWx9IOmhuSdcbiAgICB9XG4gIH1cbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbG9jYWxlL2xhbmcvemgtQ04uanNcbi8vIG1vZHVsZSBpZCA9IDMzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///33\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n return Array.isArray(val) ? [] : {}\n}\n\nfunction cloneIfNecessary(value, optionsArgument) {\n var clone = optionsArgument && optionsArgument.clone === true;\n return (clone && isMergeableObject(value)) ? deepmerge(emptyTarget(value), value, optionsArgument) : value\n}\n\nfunction defaultArrayMerge(target, source, optionsArgument) {\n var destination = target.slice();\n source.forEach(function(e, i) {\n if (typeof destination[i] === 'undefined') {\n destination[i] = cloneIfNecessary(e, optionsArgument);\n } else if (isMergeableObject(e)) {\n destination[i] = deepmerge(target[i], e, optionsArgument);\n } else if (target.indexOf(e) === -1) {\n destination.push(cloneIfNecessary(e, optionsArgument));\n }\n });\n return destination\n}\n\nfunction mergeObject(target, source, optionsArgument) {\n var destination = {};\n if (isMergeableObject(target)) {\n Object.keys(target).forEach(function(key) {\n destination[key] = cloneIfNecessary(target[key], optionsArgument);\n });\n }\n Object.keys(source).forEach(function(key) {\n if (!isMergeableObject(source[key]) || !target[key]) {\n destination[key] = cloneIfNecessary(source[key], optionsArgument);\n } else {\n destination[key] = deepmerge(target[key], source[key], optionsArgument);\n }\n });\n return destination\n}\n\nfunction deepmerge(target, source, optionsArgument) {\n var sourceIsArray = Array.isArray(source);\n var targetIsArray = Array.isArray(target);\n var options = optionsArgument || { arrayMerge: defaultArrayMerge };\n var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n if (!sourceAndTargetTypesMatch) {\n return cloneIfNecessary(source, optionsArgument)\n } else if (sourceIsArray) {\n var arrayMerge = options.arrayMerge || defaultArrayMerge;\n return arrayMerge(target, source, optionsArgument)\n } else {\n return mergeObject(target, source, optionsArgument)\n }\n}\n\ndeepmerge.all = function deepmergeAll(array, optionsArgument) {\n if (!Array.isArray(array) || array.length < 2) {\n throw new Error('first argument should be an array with at least two elements')\n }\n\n // we are sure there are at least 2 values, so it is safe to have no initial value\n return array.reduce(function(prev, next) {\n return deepmerge(prev, next, optionsArgument)\n })\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGVlcG1lcmdlL2Rpc3QvY2pzLmpzPzhiN2EiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBOztBQUVBIiwiZmlsZSI6IjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNNZXJnZWFibGVPYmplY3QgPSBmdW5jdGlvbiBpc01lcmdlYWJsZU9iamVjdCh2YWx1ZSkge1xuXHRyZXR1cm4gaXNOb25OdWxsT2JqZWN0KHZhbHVlKVxuXHRcdCYmICFpc1NwZWNpYWwodmFsdWUpXG59O1xuXG5mdW5jdGlvbiBpc05vbk51bGxPYmplY3QodmFsdWUpIHtcblx0cmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xufVxuXG5mdW5jdGlvbiBpc1NwZWNpYWwodmFsdWUpIHtcblx0dmFyIHN0cmluZ1ZhbHVlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcblxuXHRyZXR1cm4gc3RyaW5nVmFsdWUgPT09ICdbb2JqZWN0IFJlZ0V4cF0nXG5cdFx0fHwgc3RyaW5nVmFsdWUgPT09ICdbb2JqZWN0IERhdGVdJ1xuXHRcdHx8IGlzUmVhY3RFbGVtZW50KHZhbHVlKVxufVxuXG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvYjVhYzk2M2ZiNzkxZDEyOThlN2YzOTYyMzYzODNiYzk1NWY5MTZjMS9zcmMvaXNvbW9ycGhpYy9jbGFzc2ljL2VsZW1lbnQvUmVhY3RFbGVtZW50LmpzI0wyMS1MMjVcbnZhciBjYW5Vc2VTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gY2FuVXNlU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xuXG5mdW5jdGlvbiBpc1JlYWN0RWxlbWVudCh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRVxufVxuXG5mdW5jdGlvbiBlbXB0eVRhcmdldCh2YWwpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpID8gW10gOiB7fVxufVxuXG5mdW5jdGlvbiBjbG9uZUlmTmVjZXNzYXJ5KHZhbHVlLCBvcHRpb25zQXJndW1lbnQpIHtcbiAgICB2YXIgY2xvbmUgPSBvcHRpb25zQXJndW1lbnQgJiYgb3B0aW9uc0FyZ3VtZW50LmNsb25lID09PSB0cnVlO1xuICAgIHJldHVybiAoY2xvbmUgJiYgaXNNZXJnZWFibGVPYmplY3QodmFsdWUpKSA/IGRlZXBtZXJnZShlbXB0eVRhcmdldCh2YWx1ZSksIHZhbHVlLCBvcHRpb25zQXJndW1lbnQpIDogdmFsdWVcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEFycmF5TWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnNBcmd1bWVudCkge1xuICAgIHZhciBkZXN0aW5hdGlvbiA9IHRhcmdldC5zbGljZSgpO1xuICAgIHNvdXJjZS5mb3JFYWNoKGZ1bmN0aW9uKGUsIGkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZXN0aW5hdGlvbltpXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldID0gY2xvbmVJZk5lY2Vzc2FyeShlLCBvcHRpb25zQXJndW1lbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTWVyZ2VhYmxlT2JqZWN0KGUpKSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IGRlZXBtZXJnZSh0YXJnZXRbaV0sIGUsIG9wdGlvbnNBcmd1bWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmluZGV4T2YoZSkgPT09IC0xKSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5wdXNoKGNsb25lSWZOZWNlc3NhcnkoZSwgb3B0aW9uc0FyZ3VtZW50KSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVzdGluYXRpb25cbn1cblxuZnVuY3Rpb24gbWVyZ2VPYmplY3QodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnNBcmd1bWVudCkge1xuICAgIHZhciBkZXN0aW5hdGlvbiA9IHt9O1xuICAgIGlmIChpc01lcmdlYWJsZU9iamVjdCh0YXJnZXQpKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRhcmdldCkuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uW2tleV0gPSBjbG9uZUlmTmVjZXNzYXJ5KHRhcmdldFtrZXldLCBvcHRpb25zQXJndW1lbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgICAgICBpZiAoIWlzTWVyZ2VhYmxlT2JqZWN0KHNvdXJjZVtrZXldKSB8fCAhdGFyZ2V0W2tleV0pIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uW2tleV0gPSBjbG9uZUlmTmVjZXNzYXJ5KHNvdXJjZVtrZXldLCBvcHRpb25zQXJndW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVzdGluYXRpb25ba2V5XSA9IGRlZXBtZXJnZSh0YXJnZXRba2V5XSwgc291cmNlW2tleV0sIG9wdGlvbnNBcmd1bWVudCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGVzdGluYXRpb25cbn1cblxuZnVuY3Rpb24gZGVlcG1lcmdlKHRhcmdldCwgc291cmNlLCBvcHRpb25zQXJndW1lbnQpIHtcbiAgICB2YXIgc291cmNlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoc291cmNlKTtcbiAgICB2YXIgdGFyZ2V0SXNBcnJheSA9IEFycmF5LmlzQXJyYXkodGFyZ2V0KTtcbiAgICB2YXIgb3B0aW9ucyA9IG9wdGlvbnNBcmd1bWVudCB8fCB7IGFycmF5TWVyZ2U6IGRlZmF1bHRBcnJheU1lcmdlIH07XG4gICAgdmFyIHNvdXJjZUFuZFRhcmdldFR5cGVzTWF0Y2ggPSBzb3VyY2VJc0FycmF5ID09PSB0YXJnZXRJc0FycmF5O1xuXG4gICAgaWYgKCFzb3VyY2VBbmRUYXJnZXRUeXBlc01hdGNoKSB7XG4gICAgICAgIHJldHVybiBjbG9uZUlmTmVjZXNzYXJ5KHNvdXJjZSwgb3B0aW9uc0FyZ3VtZW50KVxuICAgIH0gZWxzZSBpZiAoc291cmNlSXNBcnJheSkge1xuICAgICAgICB2YXIgYXJyYXlNZXJnZSA9IG9wdGlvbnMuYXJyYXlNZXJnZSB8fCBkZWZhdWx0QXJyYXlNZXJnZTtcbiAgICAgICAgcmV0dXJuIGFycmF5TWVyZ2UodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnNBcmd1bWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWVyZ2VPYmplY3QodGFyZ2V0LCBzb3VyY2UsIG9wdGlvbnNBcmd1bWVudClcbiAgICB9XG59XG5cbmRlZXBtZXJnZS5hbGwgPSBmdW5jdGlvbiBkZWVwbWVyZ2VBbGwoYXJyYXksIG9wdGlvbnNBcmd1bWVudCkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheSkgfHwgYXJyYXkubGVuZ3RoIDwgMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheSB3aXRoIGF0IGxlYXN0IHR3byBlbGVtZW50cycpXG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIHN1cmUgdGhlcmUgYXJlIGF0IGxlYXN0IDIgdmFsdWVzLCBzbyBpdCBpcyBzYWZlIHRvIGhhdmUgbm8gaW5pdGlhbCB2YWx1ZVxuICAgIHJldHVybiBhcnJheS5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgbmV4dCkge1xuICAgICAgICByZXR1cm4gZGVlcG1lcmdlKHByZXYsIG5leHQsIG9wdGlvbnNBcmd1bWVudClcbiAgICB9KVxufTtcblxudmFyIGRlZXBtZXJnZV8xID0gZGVlcG1lcmdlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZXBtZXJnZV8xO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZGVlcG1lcmdlL2Rpc3QvY2pzLmpzXG4vLyBtb2R1bGUgaWQgPSAzNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///34\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = function (Vue) {\n\n /**\n * template\n *\n * @param {String} string\n * @param {Array} ...args\n * @return {String}\n */\n\n function template(string) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (args.length === 1 && _typeof(args[0]) === 'object') {\n args = args[0];\n }\n\n if (!args || !args.hasOwnProperty) {\n args = {};\n }\n\n return string.replace(RE_NARGS, function (match, prefix, i, index) {\n var result = void 0;\n\n if (string[index - 1] === '{' && string[index + match.length] === '}') {\n return i;\n } else {\n result = (0, _util.hasOwn)(args, i) ? args[i] : null;\n if (result === null || result === undefined) {\n return '';\n }\n\n return result;\n }\n });\n }\n\n return template;\n};\n\nvar _util = __webpack_require__(5);\n\nvar RE_NARGS = /(%|)\\{([0-9a-zA-Z_]+)\\}/g;\n/**\n * String format template\n * - Inspired:\n * https://github.com/Matt-Esch/string-template/index.js\n */\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbG9jYWxlL2Zvcm1hdC5qcz80YWY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBOztBQUVBLG9HQUFvRyxtQkFBbUIsRUFBRSxtQkFBbUIsOEhBQThIOztBQUUxUTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEIsYUFBYSxNQUFNO0FBQ25CLGNBQWM7QUFDZDs7QUFFQTtBQUNBLHNGQUFzRixhQUFhO0FBQ25HO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtDQUFrQyx3Q0FBd0M7QUFDMUU7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHNCQUFzQixpQkFBaUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIzNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoVnVlKSB7XG5cbiAgLyoqXG4gICAqIHRlbXBsYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmdcbiAgICogQHBhcmFtIHtBcnJheX0gLi4uYXJnc1xuICAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIHRlbXBsYXRlKHN0cmluZykge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIF90eXBlb2YoYXJnc1swXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBhcmdzID0gYXJnc1swXTtcbiAgICB9XG5cbiAgICBpZiAoIWFyZ3MgfHwgIWFyZ3MuaGFzT3duUHJvcGVydHkpIHtcbiAgICAgIGFyZ3MgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoUkVfTkFSR1MsIGZ1bmN0aW9uIChtYXRjaCwgcHJlZml4LCBpLCBpbmRleCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHZvaWQgMDtcblxuICAgICAgaWYgKHN0cmluZ1tpbmRleCAtIDFdID09PSAneycgJiYgc3RyaW5nW2luZGV4ICsgbWF0Y2gubGVuZ3RoXSA9PT0gJ30nKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gKDAsIF91dGlsLmhhc093bikoYXJncywgaSkgPyBhcmdzW2ldIDogbnVsbDtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGVtcGxhdGU7XG59O1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi91dGlscy91dGlsJyk7XG5cbnZhciBSRV9OQVJHUyA9IC8oJXwpXFx7KFswLTlhLXpBLVpfXSspXFx9L2c7XG4vKipcbiAqICBTdHJpbmcgZm9ybWF0IHRlbXBsYXRlXG4gKiAgLSBJbnNwaXJlZDpcbiAqICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9NYXR0LUVzY2gvc3RyaW5nLXRlbXBsYXRlL2luZGV4LmpzXG4gKi9cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9sb2NhbGUvZm9ybWF0LmpzXG4vLyBtb2R1bGUgaWQgPSAzNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///35\n")},function(module,exports,__webpack_require__){eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(216);\n\n\n/***/ },\n\n/***/ 3:\n/***/ function(module, exports) {\n\n\t/* globals __VUE_SSR_CONTEXT__ */\n\n\t// this module is a runtime utility for cleaner component module output and will\n\t// be included in the final webpack user bundle\n\n\tmodule.exports = function normalizeComponent (\n\t rawScriptExports,\n\t compiledTemplate,\n\t injectStyles,\n\t scopeId,\n\t moduleIdentifier /* server only */\n\t) {\n\t var esModule\n\t var scriptExports = rawScriptExports = rawScriptExports || {}\n\n\t // ES6 modules interop\n\t var type = typeof rawScriptExports.default\n\t if (type === 'object' || type === 'function') {\n\t esModule = rawScriptExports\n\t scriptExports = rawScriptExports.default\n\t }\n\n\t // Vue.extend constructor export interop\n\t var options = typeof scriptExports === 'function'\n\t ? scriptExports.options\n\t : scriptExports\n\n\t // render functions\n\t if (compiledTemplate) {\n\t options.render = compiledTemplate.render\n\t options.staticRenderFns = compiledTemplate.staticRenderFns\n\t }\n\n\t // scopedId\n\t if (scopeId) {\n\t options._scopeId = scopeId\n\t }\n\n\t var hook\n\t if (moduleIdentifier) { // server build\n\t hook = function (context) {\n\t // 2.3 injection\n\t context = context || (this.$vnode && this.$vnode.ssrContext)\n\t // 2.2 with runInNewContext: true\n\t if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n\t context = __VUE_SSR_CONTEXT__\n\t }\n\t // inject component styles\n\t if (injectStyles) {\n\t injectStyles.call(this, context)\n\t }\n\t // register component module identifier for async chunk inferrence\n\t if (context && context._registeredComponents) {\n\t context._registeredComponents.add(moduleIdentifier)\n\t }\n\t }\n\t // used by ssr in case component is cached and beforeCreate\n\t // never gets called\n\t options._ssrRegister = hook\n\t } else if (injectStyles) {\n\t hook = injectStyles\n\t }\n\n\t if (hook) {\n\t // inject component registration as beforeCreate hook\n\t var existing = options.beforeCreate\n\t options.beforeCreate = existing\n\t ? [].concat(existing, hook)\n\t : [hook]\n\t }\n\n\t return {\n\t esModule: esModule,\n\t exports: scriptExports,\n\t options: options\n\t }\n\t}\n\n\n/***/ },\n\n/***/ 14:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(4);\n\n/***/ },\n\n/***/ 216:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _option = __webpack_require__(217);\n\n\tvar _option2 = _interopRequireDefault(_option);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_option2.default.install = function (Vue) {\n\t Vue.component(_option2.default.name, _option2.default);\n\t};\n\n\texports.default = _option2.default;\n\n/***/ },\n\n/***/ 217:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(3)(\n\t /* script */\n\t __webpack_require__(218),\n\t /* template */\n\t __webpack_require__(220),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 218:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\tvar _emitter = __webpack_require__(14);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tvar _util = __webpack_require__(219);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t mixins: [_emitter2.default],\n\n\t name: 'ElOption',\n\n\t componentName: 'ElOption',\n\n\t props: {\n\t value: {\n\t required: true\n\t },\n\t label: [String, Number],\n\t created: Boolean,\n\t disabled: {\n\t type: Boolean,\n\t default: false\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t index: -1,\n\t groupDisabled: false,\n\t visible: true,\n\t hitState: false\n\t };\n\t },\n\n\n\t computed: {\n\t isObject: function isObject() {\n\t return Object.prototype.toString.call(this.value).toLowerCase() === '[object object]';\n\t },\n\t currentLabel: function currentLabel() {\n\t return this.label || (this.isObject ? '' : this.value);\n\t },\n\t currentValue: function currentValue() {\n\t return this.value || this.label || '';\n\t },\n\t parent: function parent() {\n\t var result = this.$parent;\n\t while (!result.isSelect) {\n\t result = result.$parent;\n\t }\n\t return result;\n\t },\n\t itemSelected: function itemSelected() {\n\t if (!this.parent.multiple) {\n\t return this.isEqual(this.value, this.parent.value);\n\t } else {\n\t return this.contains(this.parent.value, this.value);\n\t }\n\t },\n\t limitReached: function limitReached() {\n\t if (this.parent.multiple) {\n\t return !this.itemSelected && this.parent.value.length >= this.parent.multipleLimit && this.parent.multipleLimit > 0;\n\t } else {\n\t return false;\n\t }\n\t }\n\t },\n\n\t watch: {\n\t currentLabel: function currentLabel() {\n\t if (!this.created && !this.parent.remote) this.dispatch('ElSelect', 'setSelected');\n\t },\n\t value: function value() {\n\t if (!this.created && !this.parent.remote) this.dispatch('ElSelect', 'setSelected');\n\t }\n\t },\n\n\t methods: {\n\t isEqual: function isEqual(a, b) {\n\t if (!this.isObject) {\n\t return a === b;\n\t } else {\n\t var valueKey = this.parent.valueKey;\n\t return (0, _util.getValueByPath)(a, valueKey) === (0, _util.getValueByPath)(b, valueKey);\n\t }\n\t },\n\t contains: function contains() {\n\t var _this = this;\n\n\t var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\t var target = arguments[1];\n\n\t if (!this.isObject) {\n\t return arr.indexOf(target) > -1;\n\t } else {\n\t var _ret = function () {\n\t var valueKey = _this.parent.valueKey;\n\t return {\n\t v: arr.some(function (item) {\n\t return (0, _util.getValueByPath)(item, valueKey) === (0, _util.getValueByPath)(target, valueKey);\n\t })\n\t };\n\t }();\n\n\t if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === \"object\") return _ret.v;\n\t }\n\t },\n\t handleGroupDisabled: function handleGroupDisabled(val) {\n\t this.groupDisabled = val;\n\t },\n\t hoverItem: function hoverItem() {\n\t if (!this.disabled && !this.groupDisabled) {\n\t this.parent.hoverIndex = this.parent.options.indexOf(this);\n\t }\n\t },\n\t selectOptionClick: function selectOptionClick() {\n\t if (this.disabled !== true && this.groupDisabled !== true) {\n\t this.dispatch('ElSelect', 'handleOptionClick', this);\n\t }\n\t },\n\t queryChange: function queryChange(query) {\n\t // query 里如果有正则中的特殊字符,需要先将这些字符转义\n\t var parsedQuery = String(query).replace(/(\\^|\\(|\\)|\\[|\\]|\\$|\\*|\\+|\\.|\\?|\\\\|\\{|\\}|\\|)/g, '\\\\$1');\n\t this.visible = new RegExp(parsedQuery, 'i').test(this.currentLabel) || this.created;\n\t if (!this.visible) {\n\t this.parent.filteredOptionsCount--;\n\t }\n\t },\n\t resetIndex: function resetIndex() {\n\t var _this2 = this;\n\n\t this.$nextTick(function () {\n\t _this2.index = _this2.parent.options.indexOf(_this2);\n\t });\n\t }\n\t },\n\n\t created: function created() {\n\t this.parent.options.push(this);\n\t this.parent.cachedOptions.push(this);\n\t this.parent.optionsCount++;\n\t this.parent.filteredOptionsCount++;\n\t this.index = this.parent.options.indexOf(this);\n\n\t this.$on('queryChange', this.queryChange);\n\t this.$on('handleGroupDisabled', this.handleGroupDisabled);\n\t this.$on('resetIndex', this.resetIndex);\n\t },\n\t beforeDestroy: function beforeDestroy() {\n\t this.dispatch('ElSelect', 'onOptionDestroy', this);\n\t }\n\t};\n\n/***/ },\n\n/***/ 219:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(5);\n\n/***/ },\n\n/***/ 220:\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('li', {\n\t directives: [{\n\t name: \"show\",\n\t rawName: \"v-show\",\n\t value: (_vm.visible),\n\t expression: \"visible\"\n\t }],\n\t staticClass: \"el-select-dropdown__item\",\n\t class: {\n\t 'selected': _vm.itemSelected,\n\t 'is-disabled': _vm.disabled || _vm.groupDisabled || _vm.limitReached,\n\t 'hover': _vm.parent.hoverIndex === _vm.index\n\t },\n\t on: {\n\t \"mouseenter\": _vm.hoverItem,\n\t \"click\": function($event) {\n\t $event.stopPropagation();\n\t _vm.selectOptionClick($event)\n\t }\n\t }\n\t }, [_vm._t(\"default\", [_c('span', [_vm._v(_vm._s(_vm.currentLabel))])])], 2)\n\t},staticRenderFns: []}\n\n/***/ }\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvb3B0aW9uLmpzPzQ5MzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBLHVDQUF1Qyx1Q0FBdUMsZ0JBQWdCOztBQUU5RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEscUdBQXFHLG1CQUFtQixFQUFFLG1CQUFtQiw4SEFBOEgsR0FBRztBQUM5UTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0EsVUFBVTs7QUFFVjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLG9GQUFvRixHQUFHO0FBQ3ZGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjs7QUFFQSxVQUFVIiwiZmlsZSI6IjM2LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge30sXG4vKioqKioqLyBcdFx0XHRpZDogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4vKioqKioqLyBcdFx0fTtcblxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cblxuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9kaXN0L1wiO1xuXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTYpO1xuXG5cbi8qKiovIH0sXG5cbi8qKiovIDM6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuXHQvLyB0aGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuXHQvLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZVxuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcblx0ICByYXdTY3JpcHRFeHBvcnRzLFxuXHQgIGNvbXBpbGVkVGVtcGxhdGUsXG5cdCAgaW5qZWN0U3R5bGVzLFxuXHQgIHNjb3BlSWQsXG5cdCAgbW9kdWxlSWRlbnRpZmllciAvKiBzZXJ2ZXIgb25seSAqL1xuXHQpIHtcblx0ICB2YXIgZXNNb2R1bGVcblx0ICB2YXIgc2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzIHx8IHt9XG5cblx0ICAvLyBFUzYgbW9kdWxlcyBpbnRlcm9wXG5cdCAgdmFyIHR5cGUgPSB0eXBlb2YgcmF3U2NyaXB0RXhwb3J0cy5kZWZhdWx0XG5cdCAgaWYgKHR5cGUgPT09ICdvYmplY3QnIHx8IHR5cGUgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgIGVzTW9kdWxlID0gcmF3U2NyaXB0RXhwb3J0c1xuXHQgICAgc2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMuZGVmYXVsdFxuXHQgIH1cblxuXHQgIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3Bcblx0ICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG5cdCAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuXHQgICAgOiBzY3JpcHRFeHBvcnRzXG5cblx0ICAvLyByZW5kZXIgZnVuY3Rpb25zXG5cdCAgaWYgKGNvbXBpbGVkVGVtcGxhdGUpIHtcblx0ICAgIG9wdGlvbnMucmVuZGVyID0gY29tcGlsZWRUZW1wbGF0ZS5yZW5kZXJcblx0ICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gY29tcGlsZWRUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnNcblx0ICB9XG5cblx0ICAvLyBzY29wZWRJZFxuXHQgIGlmIChzY29wZUlkKSB7XG5cdCAgICBvcHRpb25zLl9zY29wZUlkID0gc2NvcGVJZFxuXHQgIH1cblxuXHQgIHZhciBob29rXG5cdCAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG5cdCAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgLy8gMi4zIGluamVjdGlvblxuXHQgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dClcblx0ICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG5cdCAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0ICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuXHQgICAgICB9XG5cdCAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG5cdCAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcblx0ICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuXHQgICAgICB9XG5cdCAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuXHQgICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuXHQgICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuXHQgICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcblx0ICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuXHQgIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG5cdCAgICBob29rID0gaW5qZWN0U3R5bGVzXG5cdCAgfVxuXG5cdCAgaWYgKGhvb2spIHtcblx0ICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG5cdCAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuXHQgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuXHQgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcblx0ICAgICAgOiBbaG9va11cblx0ICB9XG5cblx0ICByZXR1cm4ge1xuXHQgICAgZXNNb2R1bGU6IGVzTW9kdWxlLFxuXHQgICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcblx0ICAgIG9wdGlvbnM6IG9wdGlvbnNcblx0ICB9XG5cdH1cblxuXG4vKioqLyB9LFxuXG4vKioqLyAxNDpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL21peGlucy9lbWl0dGVyXCIpO1xuXG4vKioqLyB9LFxuXG4vKioqLyAyMTY6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX29wdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oMjE3KTtcblxuXHR2YXIgX29wdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9vcHRpb24pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X29wdGlvbjIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX29wdGlvbjIuZGVmYXVsdC5uYW1lLCBfb3B0aW9uMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfb3B0aW9uMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuXG4vKioqLyAyMTc6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOCksXG5cdCAgLyogdGVtcGxhdGUgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMCksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcblxuLyoqKi8gMjE4OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyAvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXHQvL1xuXG5cdHZhciBfZW1pdHRlciA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xuXG5cdHZhciBfZW1pdHRlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9lbWl0dGVyKTtcblxuXHR2YXIgX3V0aWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbWl4aW5zOiBbX2VtaXR0ZXIyLmRlZmF1bHRdLFxuXG5cdCAgbmFtZTogJ0VsT3B0aW9uJyxcblxuXHQgIGNvbXBvbmVudE5hbWU6ICdFbE9wdGlvbicsXG5cblx0ICBwcm9wczoge1xuXHQgICAgdmFsdWU6IHtcblx0ICAgICAgcmVxdWlyZWQ6IHRydWVcblx0ICAgIH0sXG5cdCAgICBsYWJlbDogW1N0cmluZywgTnVtYmVyXSxcblx0ICAgIGNyZWF0ZWQ6IEJvb2xlYW4sXG5cdCAgICBkaXNhYmxlZDoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiBmYWxzZVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgaW5kZXg6IC0xLFxuXHQgICAgICBncm91cERpc2FibGVkOiBmYWxzZSxcblx0ICAgICAgdmlzaWJsZTogdHJ1ZSxcblx0ICAgICAgaGl0U3RhdGU6IGZhbHNlXG5cdCAgICB9O1xuXHQgIH0sXG5cblxuXHQgIGNvbXB1dGVkOiB7XG5cdCAgICBpc09iamVjdDogZnVuY3Rpb24gaXNPYmplY3QoKSB7XG5cdCAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcy52YWx1ZSkudG9Mb3dlckNhc2UoKSA9PT0gJ1tvYmplY3Qgb2JqZWN0XSc7XG5cdCAgICB9LFxuXHQgICAgY3VycmVudExhYmVsOiBmdW5jdGlvbiBjdXJyZW50TGFiZWwoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLmxhYmVsIHx8ICh0aGlzLmlzT2JqZWN0ID8gJycgOiB0aGlzLnZhbHVlKTtcblx0ICAgIH0sXG5cdCAgICBjdXJyZW50VmFsdWU6IGZ1bmN0aW9uIGN1cnJlbnRWYWx1ZSgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMudmFsdWUgfHwgdGhpcy5sYWJlbCB8fCAnJztcblx0ICAgIH0sXG5cdCAgICBwYXJlbnQ6IGZ1bmN0aW9uIHBhcmVudCgpIHtcblx0ICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuJHBhcmVudDtcblx0ICAgICAgd2hpbGUgKCFyZXN1bHQuaXNTZWxlY3QpIHtcblx0ICAgICAgICByZXN1bHQgPSByZXN1bHQuJHBhcmVudDtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gcmVzdWx0O1xuXHQgICAgfSxcblx0ICAgIGl0ZW1TZWxlY3RlZDogZnVuY3Rpb24gaXRlbVNlbGVjdGVkKCkge1xuXHQgICAgICBpZiAoIXRoaXMucGFyZW50Lm11bHRpcGxlKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuaXNFcXVhbCh0aGlzLnZhbHVlLCB0aGlzLnBhcmVudC52YWx1ZSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbnModGhpcy5wYXJlbnQudmFsdWUsIHRoaXMudmFsdWUpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgbGltaXRSZWFjaGVkOiBmdW5jdGlvbiBsaW1pdFJlYWNoZWQoKSB7XG5cdCAgICAgIGlmICh0aGlzLnBhcmVudC5tdWx0aXBsZSkge1xuXHQgICAgICAgIHJldHVybiAhdGhpcy5pdGVtU2VsZWN0ZWQgJiYgdGhpcy5wYXJlbnQudmFsdWUubGVuZ3RoID49IHRoaXMucGFyZW50Lm11bHRpcGxlTGltaXQgJiYgdGhpcy5wYXJlbnQubXVsdGlwbGVMaW1pdCA+IDA7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHdhdGNoOiB7XG5cdCAgICBjdXJyZW50TGFiZWw6IGZ1bmN0aW9uIGN1cnJlbnRMYWJlbCgpIHtcblx0ICAgICAgaWYgKCF0aGlzLmNyZWF0ZWQgJiYgIXRoaXMucGFyZW50LnJlbW90ZSkgdGhpcy5kaXNwYXRjaCgnRWxTZWxlY3QnLCAnc2V0U2VsZWN0ZWQnKTtcblx0ICAgIH0sXG5cdCAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoKSB7XG5cdCAgICAgIGlmICghdGhpcy5jcmVhdGVkICYmICF0aGlzLnBhcmVudC5yZW1vdGUpIHRoaXMuZGlzcGF0Y2goJ0VsU2VsZWN0JywgJ3NldFNlbGVjdGVkJyk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIGlzRXF1YWw6IGZ1bmN0aW9uIGlzRXF1YWwoYSwgYikge1xuXHQgICAgICBpZiAoIXRoaXMuaXNPYmplY3QpIHtcblx0ICAgICAgICByZXR1cm4gYSA9PT0gYjtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICB2YXIgdmFsdWVLZXkgPSB0aGlzLnBhcmVudC52YWx1ZUtleTtcblx0ICAgICAgICByZXR1cm4gKDAsIF91dGlsLmdldFZhbHVlQnlQYXRoKShhLCB2YWx1ZUtleSkgPT09ICgwLCBfdXRpbC5nZXRWYWx1ZUJ5UGF0aCkoYiwgdmFsdWVLZXkpO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29udGFpbnM6IGZ1bmN0aW9uIGNvbnRhaW5zKCkge1xuXHQgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgICAgIHZhciBhcnIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuXHQgICAgICB2YXIgdGFyZ2V0ID0gYXJndW1lbnRzWzFdO1xuXG5cdCAgICAgIGlmICghdGhpcy5pc09iamVjdCkge1xuXHQgICAgICAgIHJldHVybiBhcnIuaW5kZXhPZih0YXJnZXQpID4gLTE7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdmFyIF9yZXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICB2YXIgdmFsdWVLZXkgPSBfdGhpcy5wYXJlbnQudmFsdWVLZXk7XG5cdCAgICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICB2OiBhcnIuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuXHQgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuZ2V0VmFsdWVCeVBhdGgpKGl0ZW0sIHZhbHVlS2V5KSA9PT0gKDAsIF91dGlsLmdldFZhbHVlQnlQYXRoKSh0YXJnZXQsIHZhbHVlS2V5KTtcblx0ICAgICAgICAgICAgfSlcblx0ICAgICAgICAgIH07XG5cdCAgICAgICAgfSgpO1xuXG5cdCAgICAgICAgaWYgKCh0eXBlb2YgX3JldCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoX3JldCkpID09PSBcIm9iamVjdFwiKSByZXR1cm4gX3JldC52O1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlR3JvdXBEaXNhYmxlZDogZnVuY3Rpb24gaGFuZGxlR3JvdXBEaXNhYmxlZCh2YWwpIHtcblx0ICAgICAgdGhpcy5ncm91cERpc2FibGVkID0gdmFsO1xuXHQgICAgfSxcblx0ICAgIGhvdmVySXRlbTogZnVuY3Rpb24gaG92ZXJJdGVtKCkge1xuXHQgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuZ3JvdXBEaXNhYmxlZCkge1xuXHQgICAgICAgIHRoaXMucGFyZW50LmhvdmVySW5kZXggPSB0aGlzLnBhcmVudC5vcHRpb25zLmluZGV4T2YodGhpcyk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBzZWxlY3RPcHRpb25DbGljazogZnVuY3Rpb24gc2VsZWN0T3B0aW9uQ2xpY2soKSB7XG5cdCAgICAgIGlmICh0aGlzLmRpc2FibGVkICE9PSB0cnVlICYmIHRoaXMuZ3JvdXBEaXNhYmxlZCAhPT0gdHJ1ZSkge1xuXHQgICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsU2VsZWN0JywgJ2hhbmRsZU9wdGlvbkNsaWNrJywgdGhpcyk7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBxdWVyeUNoYW5nZTogZnVuY3Rpb24gcXVlcnlDaGFuZ2UocXVlcnkpIHtcblx0ICAgICAgLy8gcXVlcnkg6YeM5aaC5p6c5pyJ5q2j5YiZ5Lit55qE54m55q6K5a2X56ym77yM6ZyA6KaB5YWI5bCG6L+Z5Lqb5a2X56ym6L2s5LmJXG5cdCAgICAgIHZhciBwYXJzZWRRdWVyeSA9IFN0cmluZyhxdWVyeSkucmVwbGFjZSgvKFxcXnxcXCh8XFwpfFxcW3xcXF18XFwkfFxcKnxcXCt8XFwufFxcP3xcXFxcfFxce3xcXH18XFx8KS9nLCAnXFxcXCQxJyk7XG5cdCAgICAgIHRoaXMudmlzaWJsZSA9IG5ldyBSZWdFeHAocGFyc2VkUXVlcnksICdpJykudGVzdCh0aGlzLmN1cnJlbnRMYWJlbCkgfHwgdGhpcy5jcmVhdGVkO1xuXHQgICAgICBpZiAoIXRoaXMudmlzaWJsZSkge1xuXHQgICAgICAgIHRoaXMucGFyZW50LmZpbHRlcmVkT3B0aW9uc0NvdW50LS07XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICByZXNldEluZGV4OiBmdW5jdGlvbiByZXNldEluZGV4KCkge1xuXHQgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuXHQgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgX3RoaXMyLmluZGV4ID0gX3RoaXMyLnBhcmVudC5vcHRpb25zLmluZGV4T2YoX3RoaXMyKTtcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG5cdCAgICB0aGlzLnBhcmVudC5vcHRpb25zLnB1c2godGhpcyk7XG5cdCAgICB0aGlzLnBhcmVudC5jYWNoZWRPcHRpb25zLnB1c2godGhpcyk7XG5cdCAgICB0aGlzLnBhcmVudC5vcHRpb25zQ291bnQrKztcblx0ICAgIHRoaXMucGFyZW50LmZpbHRlcmVkT3B0aW9uc0NvdW50Kys7XG5cdCAgICB0aGlzLmluZGV4ID0gdGhpcy5wYXJlbnQub3B0aW9ucy5pbmRleE9mKHRoaXMpO1xuXG5cdCAgICB0aGlzLiRvbigncXVlcnlDaGFuZ2UnLCB0aGlzLnF1ZXJ5Q2hhbmdlKTtcblx0ICAgIHRoaXMuJG9uKCdoYW5kbGVHcm91cERpc2FibGVkJywgdGhpcy5oYW5kbGVHcm91cERpc2FibGVkKTtcblx0ICAgIHRoaXMuJG9uKCdyZXNldEluZGV4JywgdGhpcy5yZXNldEluZGV4KTtcblx0ICB9LFxuXHQgIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG5cdCAgICB0aGlzLmRpc3BhdGNoKCdFbFNlbGVjdCcsICdvbk9wdGlvbkRlc3Ryb3knLCB0aGlzKTtcblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG5cbi8qKiovIDIxOTpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWxcIik7XG5cbi8qKiovIH0sXG5cbi8qKiovIDIyMDpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzPXtyZW5kZXI6ZnVuY3Rpb24gKCl7dmFyIF92bT10aGlzO3ZhciBfaD1fdm0uJGNyZWF0ZUVsZW1lbnQ7dmFyIF9jPV92bS5fc2VsZi5fY3x8X2g7XG5cdCAgcmV0dXJuIF9jKCdsaScsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwic2hvd1wiLFxuXHQgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS52aXNpYmxlKSxcblx0ICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtXCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnc2VsZWN0ZWQnOiBfdm0uaXRlbVNlbGVjdGVkLFxuXHQgICAgICAnaXMtZGlzYWJsZWQnOiBfdm0uZGlzYWJsZWQgfHwgX3ZtLmdyb3VwRGlzYWJsZWQgfHwgX3ZtLmxpbWl0UmVhY2hlZCxcblx0ICAgICAgICAnaG92ZXInOiBfdm0ucGFyZW50LmhvdmVySW5kZXggPT09IF92bS5pbmRleFxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwibW91c2VlbnRlclwiOiBfdm0uaG92ZXJJdGVtLFxuXHQgICAgICBcImNsaWNrXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0ICAgICAgICBfdm0uc2VsZWN0T3B0aW9uQ2xpY2soJGV2ZW50KVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIiwgW19jKCdzcGFuJywgW192bS5fdihfdm0uX3MoX3ZtLmN1cnJlbnRMYWJlbCkpXSldKV0sIDIpXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfVxuXG4vKioqKioqLyB9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9vcHRpb24uanNcbi8vIG1vZHVsZSBpZCA9IDM2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///36\n")},function(module,exports){eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(30);\n\n\n/***/ },\n\n/***/ 3:\n/***/ function(module, exports) {\n\n\t/* globals __VUE_SSR_CONTEXT__ */\n\n\t// this module is a runtime utility for cleaner component module output and will\n\t// be included in the final webpack user bundle\n\n\tmodule.exports = function normalizeComponent (\n\t rawScriptExports,\n\t compiledTemplate,\n\t injectStyles,\n\t scopeId,\n\t moduleIdentifier /* server only */\n\t) {\n\t var esModule\n\t var scriptExports = rawScriptExports = rawScriptExports || {}\n\n\t // ES6 modules interop\n\t var type = typeof rawScriptExports.default\n\t if (type === 'object' || type === 'function') {\n\t esModule = rawScriptExports\n\t scriptExports = rawScriptExports.default\n\t }\n\n\t // Vue.extend constructor export interop\n\t var options = typeof scriptExports === 'function'\n\t ? scriptExports.options\n\t : scriptExports\n\n\t // render functions\n\t if (compiledTemplate) {\n\t options.render = compiledTemplate.render\n\t options.staticRenderFns = compiledTemplate.staticRenderFns\n\t }\n\n\t // scopedId\n\t if (scopeId) {\n\t options._scopeId = scopeId\n\t }\n\n\t var hook\n\t if (moduleIdentifier) { // server build\n\t hook = function (context) {\n\t // 2.3 injection\n\t context = context || (this.$vnode && this.$vnode.ssrContext)\n\t // 2.2 with runInNewContext: true\n\t if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n\t context = __VUE_SSR_CONTEXT__\n\t }\n\t // inject component styles\n\t if (injectStyles) {\n\t injectStyles.call(this, context)\n\t }\n\t // register component module identifier for async chunk inferrence\n\t if (context && context._registeredComponents) {\n\t context._registeredComponents.add(moduleIdentifier)\n\t }\n\t }\n\t // used by ssr in case component is cached and beforeCreate\n\t // never gets called\n\t options._ssrRegister = hook\n\t } else if (injectStyles) {\n\t hook = injectStyles\n\t }\n\n\t if (hook) {\n\t // inject component registration as beforeCreate hook\n\t var existing = options.beforeCreate\n\t options.beforeCreate = existing\n\t ? [].concat(existing, hook)\n\t : [hook]\n\t }\n\n\t return {\n\t esModule: esModule,\n\t exports: scriptExports,\n\t options: options\n\t }\n\t}\n\n\n/***/ },\n\n/***/ 30:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _button = __webpack_require__(31);\n\n\tvar _button2 = _interopRequireDefault(_button);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_button2.default.install = function (Vue) {\n\t Vue.component(_button2.default.name, _button2.default);\n\t};\n\n\texports.default = _button2.default;\n\n/***/ },\n\n/***/ 31:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(3)(\n\t /* script */\n\t __webpack_require__(32),\n\t /* template */\n\t __webpack_require__(33),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 32:\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElButton',\n\n\t props: {\n\t type: {\n\t type: String,\n\t default: 'default'\n\t },\n\t size: String,\n\t icon: {\n\t type: String,\n\t default: ''\n\t },\n\t nativeType: {\n\t type: String,\n\t default: 'button'\n\t },\n\t loading: Boolean,\n\t disabled: Boolean,\n\t plain: Boolean,\n\t autofocus: Boolean\n\t },\n\n\t methods: {\n\t handleClick: function handleClick(evt) {\n\t this.$emit('click', evt);\n\t },\n\t handleInnerClick: function handleInnerClick(evt) {\n\t if (this.disabled) {\n\t evt.stopPropagation();\n\t }\n\t }\n\t }\n\t};\n\n/***/ },\n\n/***/ 33:\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('button', {\n\t staticClass: \"el-button\",\n\t class: [\n\t _vm.type ? 'el-button--' + _vm.type : '',\n\t _vm.size ? 'el-button--' + _vm.size : '', {\n\t 'is-disabled': _vm.disabled,\n\t 'is-loading': _vm.loading,\n\t 'is-plain': _vm.plain\n\t }\n\t ],\n\t attrs: {\n\t \"disabled\": _vm.disabled,\n\t \"autofocus\": _vm.autofocus,\n\t \"type\": _vm.nativeType\n\t },\n\t on: {\n\t \"click\": _vm.handleClick\n\t }\n\t }, [(_vm.loading) ? _c('i', {\n\t staticClass: \"el-icon-loading\",\n\t on: {\n\t \"click\": _vm.handleInnerClick\n\t }\n\t }) : _vm._e(), (_vm.icon && !_vm.loading) ? _c('i', {\n\t class: 'el-icon-' + _vm.icon,\n\t on: {\n\t \"click\": _vm.handleInnerClick\n\t }\n\t }) : _vm._e(), (_vm.$slots.default) ? _c('span', {\n\t on: {\n\t \"click\": _vm.handleInnerClick\n\t }\n\t }, [_vm._t(\"default\")], 2) : _vm._e()])\n\t},staticRenderFns: []}\n\n/***/ }\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvYnV0dG9uLmpzPzlhZGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFtQixhQUFhLDBCQUEwQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjs7QUFFQSxVQUFVIiwiZmlsZSI6IjM3LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge30sXG4vKioqKioqLyBcdFx0XHRpZDogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4vKioqKioqLyBcdFx0fTtcblxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cblxuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9kaXN0L1wiO1xuXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMCk7XG5cblxuLyoqKi8gfSxcblxuLyoqKi8gMzpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG5cdC8vIHRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG5cdC8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuXHQgIHJhd1NjcmlwdEV4cG9ydHMsXG5cdCAgY29tcGlsZWRUZW1wbGF0ZSxcblx0ICBpbmplY3RTdHlsZXMsXG5cdCAgc2NvcGVJZCxcblx0ICBtb2R1bGVJZGVudGlmaWVyIC8qIHNlcnZlciBvbmx5ICovXG5cdCkge1xuXHQgIHZhciBlc01vZHVsZVxuXHQgIHZhciBzY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMgfHwge31cblxuXHQgIC8vIEVTNiBtb2R1bGVzIGludGVyb3Bcblx0ICB2YXIgdHlwZSA9IHR5cGVvZiByYXdTY3JpcHRFeHBvcnRzLmRlZmF1bHRcblx0ICBpZiAodHlwZSA9PT0gJ29iamVjdCcgfHwgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgZXNNb2R1bGUgPSByYXdTY3JpcHRFeHBvcnRzXG5cdCAgICBzY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cy5kZWZhdWx0XG5cdCAgfVxuXG5cdCAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuXHQgIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcblx0ICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG5cdCAgICA6IHNjcmlwdEV4cG9ydHNcblxuXHQgIC8vIHJlbmRlciBmdW5jdGlvbnNcblx0ICBpZiAoY29tcGlsZWRUZW1wbGF0ZSkge1xuXHQgICAgb3B0aW9ucy5yZW5kZXIgPSBjb21waWxlZFRlbXBsYXRlLnJlbmRlclxuXHQgICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBjb21waWxlZFRlbXBsYXRlLnN0YXRpY1JlbmRlckZuc1xuXHQgIH1cblxuXHQgIC8vIHNjb3BlZElkXG5cdCAgaWYgKHNjb3BlSWQpIHtcblx0ICAgIG9wdGlvbnMuX3Njb3BlSWQgPSBzY29wZUlkXG5cdCAgfVxuXG5cdCAgdmFyIGhvb2tcblx0ICBpZiAobW9kdWxlSWRlbnRpZmllcikgeyAvLyBzZXJ2ZXIgYnVpbGRcblx0ICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAvLyAyLjMgaW5qZWN0aW9uXG5cdCAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8ICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KVxuXHQgICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcblx0ICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuXHQgICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG5cdCAgICAgIH1cblx0ICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcblx0ICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuXHQgICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG5cdCAgICAgIH1cblx0ICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG5cdCAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG5cdCAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG5cdCAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuXHQgICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG5cdCAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcblx0ICAgIGhvb2sgPSBpbmplY3RTdHlsZXNcblx0ICB9XG5cblx0ICBpZiAoaG9vaykge1xuXHQgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcblx0ICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG5cdCAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nXG5cdCAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKVxuXHQgICAgICA6IFtob29rXVxuXHQgIH1cblxuXHQgIHJldHVybiB7XG5cdCAgICBlc01vZHVsZTogZXNNb2R1bGUsXG5cdCAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuXHQgICAgb3B0aW9uczogb3B0aW9uc1xuXHQgIH1cblx0fVxuXG5cbi8qKiovIH0sXG5cbi8qKiovIDMwOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9idXR0b24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcblxuXHR2YXIgX2J1dHRvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9idXR0b24pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X2J1dHRvbjIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX2J1dHRvbjIuZGVmYXVsdC5uYW1lLCBfYnV0dG9uMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfYnV0dG9uMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuXG4vKioqLyAzMTpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzIpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygzMyksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcblxuLyoqKi8gMzI6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsQnV0dG9uJyxcblxuXHQgIHByb3BzOiB7XG5cdCAgICB0eXBlOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2RlZmF1bHQnXG5cdCAgICB9LFxuXHQgICAgc2l6ZTogU3RyaW5nLFxuXHQgICAgaWNvbjoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICcnXG5cdCAgICB9LFxuXHQgICAgbmF0aXZlVHlwZToge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICdidXR0b24nXG5cdCAgICB9LFxuXHQgICAgbG9hZGluZzogQm9vbGVhbixcblx0ICAgIGRpc2FibGVkOiBCb29sZWFuLFxuXHQgICAgcGxhaW46IEJvb2xlYW4sXG5cdCAgICBhdXRvZm9jdXM6IEJvb2xlYW5cblx0ICB9LFxuXG5cdCAgbWV0aG9kczoge1xuXHQgICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2dCkge1xuXHQgICAgICB0aGlzLiRlbWl0KCdjbGljaycsIGV2dCk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlSW5uZXJDbGljazogZnVuY3Rpb24gaGFuZGxlSW5uZXJDbGljayhldnQpIHtcblx0ICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcblx0ICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG5cbi8qKiovIDMzOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2J1dHRvbicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWJ1dHRvblwiLFxuXHQgICAgY2xhc3M6IFtcblx0ICAgICAgX3ZtLnR5cGUgPyAnZWwtYnV0dG9uLS0nICsgX3ZtLnR5cGUgOiAnJyxcblx0ICAgICAgX3ZtLnNpemUgPyAnZWwtYnV0dG9uLS0nICsgX3ZtLnNpemUgOiAnJywge1xuXHQgICAgICAgICdpcy1kaXNhYmxlZCc6IF92bS5kaXNhYmxlZCxcblx0ICAgICAgICAnaXMtbG9hZGluZyc6IF92bS5sb2FkaW5nLFxuXHQgICAgICAgICdpcy1wbGFpbic6IF92bS5wbGFpblxuXHQgICAgICB9XG5cdCAgICBdLFxuXHQgICAgYXR0cnM6IHtcblx0ICAgICAgXCJkaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWQsXG5cdCAgICAgIFwiYXV0b2ZvY3VzXCI6IF92bS5hdXRvZm9jdXMsXG5cdCAgICAgIFwidHlwZVwiOiBfdm0ubmF0aXZlVHlwZVxuXHQgICAgfSxcblx0ICAgIG9uOiB7XG5cdCAgICAgIFwiY2xpY2tcIjogX3ZtLmhhbmRsZUNsaWNrXG5cdCAgICB9XG5cdCAgfSwgWyhfdm0ubG9hZGluZykgPyBfYygnaScsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWljb24tbG9hZGluZ1wiLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0uaGFuZGxlSW5uZXJDbGlja1xuXHQgICAgfVxuXHQgIH0pIDogX3ZtLl9lKCksIChfdm0uaWNvbiAmJiAhX3ZtLmxvYWRpbmcpID8gX2MoJ2knLCB7XG5cdCAgICBjbGFzczogJ2VsLWljb24tJyArIF92bS5pY29uLFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjbGlja1wiOiBfdm0uaGFuZGxlSW5uZXJDbGlja1xuXHQgICAgfVxuXHQgIH0pIDogX3ZtLl9lKCksIChfdm0uJHNsb3RzLmRlZmF1bHQpID8gX2MoJ3NwYW4nLCB7XG5cdCAgICBvbjoge1xuXHQgICAgICBcImNsaWNrXCI6IF92bS5oYW5kbGVJbm5lckNsaWNrXG5cdCAgICB9XG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKSA6IF92bS5fZSgpXSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9XG5cbi8qKioqKiovIH0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL2J1dHRvbi5qc1xuLy8gbW9kdWxlIGlkID0gMzdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///37\n")},function(module,exports){eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(34);\n\n\n/***/ },\n\n/***/ 3:\n/***/ function(module, exports) {\n\n\t/* globals __VUE_SSR_CONTEXT__ */\n\n\t// this module is a runtime utility for cleaner component module output and will\n\t// be included in the final webpack user bundle\n\n\tmodule.exports = function normalizeComponent (\n\t rawScriptExports,\n\t compiledTemplate,\n\t injectStyles,\n\t scopeId,\n\t moduleIdentifier /* server only */\n\t) {\n\t var esModule\n\t var scriptExports = rawScriptExports = rawScriptExports || {}\n\n\t // ES6 modules interop\n\t var type = typeof rawScriptExports.default\n\t if (type === 'object' || type === 'function') {\n\t esModule = rawScriptExports\n\t scriptExports = rawScriptExports.default\n\t }\n\n\t // Vue.extend constructor export interop\n\t var options = typeof scriptExports === 'function'\n\t ? scriptExports.options\n\t : scriptExports\n\n\t // render functions\n\t if (compiledTemplate) {\n\t options.render = compiledTemplate.render\n\t options.staticRenderFns = compiledTemplate.staticRenderFns\n\t }\n\n\t // scopedId\n\t if (scopeId) {\n\t options._scopeId = scopeId\n\t }\n\n\t var hook\n\t if (moduleIdentifier) { // server build\n\t hook = function (context) {\n\t // 2.3 injection\n\t context = context || (this.$vnode && this.$vnode.ssrContext)\n\t // 2.2 with runInNewContext: true\n\t if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n\t context = __VUE_SSR_CONTEXT__\n\t }\n\t // inject component styles\n\t if (injectStyles) {\n\t injectStyles.call(this, context)\n\t }\n\t // register component module identifier for async chunk inferrence\n\t if (context && context._registeredComponents) {\n\t context._registeredComponents.add(moduleIdentifier)\n\t }\n\t }\n\t // used by ssr in case component is cached and beforeCreate\n\t // never gets called\n\t options._ssrRegister = hook\n\t } else if (injectStyles) {\n\t hook = injectStyles\n\t }\n\n\t if (hook) {\n\t // inject component registration as beforeCreate hook\n\t var existing = options.beforeCreate\n\t options.beforeCreate = existing\n\t ? [].concat(existing, hook)\n\t : [hook]\n\t }\n\n\t return {\n\t esModule: esModule,\n\t exports: scriptExports,\n\t options: options\n\t }\n\t}\n\n\n/***/ },\n\n/***/ 34:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _buttonGroup = __webpack_require__(35);\n\n\tvar _buttonGroup2 = _interopRequireDefault(_buttonGroup);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_buttonGroup2.default.install = function (Vue) {\n\t Vue.component(_buttonGroup2.default.name, _buttonGroup2.default);\n\t};\n\n\texports.default = _buttonGroup2.default;\n\n/***/ },\n\n/***/ 35:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(3)(\n\t /* script */\n\t __webpack_require__(36),\n\t /* template */\n\t __webpack_require__(37),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 36:\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\t/**\n\t * button\n\t * @module components/basic/menu\n\t * @desc 用于按钮组\n\t * @param {string} label - 名称\n\t */\n\texports.default = {\n\t name: 'ElButtonGroup'\n\t};\n\n/***/ },\n\n/***/ 37:\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-button-group\"\n\t }, [_vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ }\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvYnV0dG9uLWdyb3VwLmpzP2NjMDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLE9BQU87QUFDbkI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDM0U7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGOztBQUVBLFVBQVUiLCJmaWxlIjoiMzguanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuXG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG5cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcblxuXG4vKioqLyB9LFxuXG4vKioqLyAzOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0LyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cblx0Ly8gdGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcblx0Ly8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGVcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG5cdCAgcmF3U2NyaXB0RXhwb3J0cyxcblx0ICBjb21waWxlZFRlbXBsYXRlLFxuXHQgIGluamVjdFN0eWxlcyxcblx0ICBzY29wZUlkLFxuXHQgIG1vZHVsZUlkZW50aWZpZXIgLyogc2VydmVyIG9ubHkgKi9cblx0KSB7XG5cdCAgdmFyIGVzTW9kdWxlXG5cdCAgdmFyIHNjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cyB8fCB7fVxuXG5cdCAgLy8gRVM2IG1vZHVsZXMgaW50ZXJvcFxuXHQgIHZhciB0eXBlID0gdHlwZW9mIHJhd1NjcmlwdEV4cG9ydHMuZGVmYXVsdFxuXHQgIGlmICh0eXBlID09PSAnb2JqZWN0JyB8fCB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICBlc01vZHVsZSA9IHJhd1NjcmlwdEV4cG9ydHNcblx0ICAgIHNjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzLmRlZmF1bHRcblx0ICB9XG5cblx0ICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG5cdCAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuXHQgICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcblx0ICAgIDogc2NyaXB0RXhwb3J0c1xuXG5cdCAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuXHQgIGlmIChjb21waWxlZFRlbXBsYXRlKSB7XG5cdCAgICBvcHRpb25zLnJlbmRlciA9IGNvbXBpbGVkVGVtcGxhdGUucmVuZGVyXG5cdCAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IGNvbXBpbGVkVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zXG5cdCAgfVxuXG5cdCAgLy8gc2NvcGVkSWRcblx0ICBpZiAoc2NvcGVJZCkge1xuXHQgICAgb3B0aW9ucy5fc2NvcGVJZCA9IHNjb3BlSWRcblx0ICB9XG5cblx0ICB2YXIgaG9va1xuXHQgIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuXHQgICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgIC8vIDIuMyBpbmplY3Rpb25cblx0ICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpXG5cdCAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuXHQgICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG5cdCAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cblx0ICAgICAgfVxuXHQgICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuXHQgICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG5cdCAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcblx0ICAgICAgfVxuXHQgICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2Vcblx0ICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcblx0ICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcblx0ICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG5cdCAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcblx0ICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuXHQgICAgaG9vayA9IGluamVjdFN0eWxlc1xuXHQgIH1cblxuXHQgIGlmIChob29rKSB7XG5cdCAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuXHQgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcblx0ICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3Rpbmdcblx0ICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG5cdCAgICAgIDogW2hvb2tdXG5cdCAgfVxuXG5cdCAgcmV0dXJuIHtcblx0ICAgIGVzTW9kdWxlOiBlc01vZHVsZSxcblx0ICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG5cdCAgICBvcHRpb25zOiBvcHRpb25zXG5cdCAgfVxuXHR9XG5cblxuLyoqKi8gfSxcblxuLyoqKi8gMzQ6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2J1dHRvbkdyb3VwID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XG5cblx0dmFyIF9idXR0b25Hcm91cDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9idXR0b25Hcm91cCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfYnV0dG9uR3JvdXAyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9idXR0b25Hcm91cDIuZGVmYXVsdC5uYW1lLCBfYnV0dG9uR3JvdXAyLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9idXR0b25Hcm91cDIuZGVmYXVsdDtcblxuLyoqKi8gfSxcblxuLyoqKi8gMzU6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMzcpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG5cbi8qKiovIDM2OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cdC8vXG5cblx0LyoqXG5cdCAqIGJ1dHRvblxuXHQgKiBAbW9kdWxlIGNvbXBvbmVudHMvYmFzaWMvbWVudVxuXHQgKiBAZGVzYyDnlKjkuo7mjInpkq7nu4Rcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0g5ZCN56ewXG5cdCAqL1xuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsQnV0dG9uR3JvdXAnXG5cdH07XG5cbi8qKiovIH0sXG5cbi8qKiovIDM3OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWJ1dHRvbi1ncm91cFwiXG5cdCAgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH1cblxuLyoqKioqKi8gfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvYnV0dG9uLWdyb3VwLmpzXG4vLyBtb2R1bGUgaWQgPSAzOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///38\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\n\nvar _dom = __webpack_require__(3);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Transition = function () {\n function Transition() {\n _classCallCheck(this, Transition);\n }\n\n Transition.prototype.beforeEnter = function beforeEnter(el) {\n (0, _dom.addClass)(el, 'collapse-transition');\n if (!el.dataset) el.dataset = {};\n\n el.dataset.oldPaddingTop = el.style.paddingTop;\n el.dataset.oldPaddingBottom = el.style.paddingBottom;\n\n el.style.height = '0';\n el.style.paddingTop = 0;\n el.style.paddingBottom = 0;\n };\n\n Transition.prototype.enter = function enter(el) {\n el.dataset.oldOverflow = el.style.overflow;\n if (el.scrollHeight !== 0) {\n el.style.height = el.scrollHeight + 'px';\n el.style.paddingTop = el.dataset.oldPaddingTop;\n el.style.paddingBottom = el.dataset.oldPaddingBottom;\n } else {\n el.style.height = '';\n el.style.paddingTop = el.dataset.oldPaddingTop;\n el.style.paddingBottom = el.dataset.oldPaddingBottom;\n }\n\n el.style.overflow = 'hidden';\n };\n\n Transition.prototype.afterEnter = function afterEnter(el) {\n // for safari: remove class then reset height is necessary\n (0, _dom.removeClass)(el, 'collapse-transition');\n el.style.height = '';\n el.style.overflow = el.dataset.oldOverflow;\n };\n\n Transition.prototype.beforeLeave = function beforeLeave(el) {\n if (!el.dataset) el.dataset = {};\n el.dataset.oldPaddingTop = el.style.paddingTop;\n el.dataset.oldPaddingBottom = el.style.paddingBottom;\n el.dataset.oldOverflow = el.style.overflow;\n\n el.style.height = el.scrollHeight + 'px';\n el.style.overflow = 'hidden';\n };\n\n Transition.prototype.leave = function leave(el) {\n if (el.scrollHeight !== 0) {\n // for safari: add class after set height, or it will jump to zero height suddenly, weired\n (0, _dom.addClass)(el, 'collapse-transition');\n el.style.height = 0;\n el.style.paddingTop = 0;\n el.style.paddingBottom = 0;\n }\n };\n\n Transition.prototype.afterLeave = function afterLeave(el) {\n (0, _dom.removeClass)(el, 'collapse-transition');\n el.style.height = '';\n el.style.overflow = el.dataset.oldOverflow;\n el.style.paddingTop = el.dataset.oldPaddingTop;\n el.style.paddingBottom = el.dataset.oldPaddingBottom;\n };\n\n return Transition;\n}();\n\nexports.default = {\n name: 'ElCollapseTransition',\n functional: true,\n render: function render(h, _ref) {\n var children = _ref.children;\n\n var data = {\n on: new Transition()\n };\n\n return h('transition', data, children);\n }\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdHJhbnNpdGlvbnMvY29sbGFwc2UtdHJhbnNpdGlvbi5qcz82NWNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBOztBQUVBOztBQUVBLGlEQUFpRCwwQ0FBMEMsMERBQTBELEVBQUU7O0FBRXZKO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiIzOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9kb20gPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi91dGlscy9kb20nKTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxudmFyIFRyYW5zaXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRyYW5zaXRpb24oKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRyYW5zaXRpb24pO1xuICB9XG5cbiAgVHJhbnNpdGlvbi5wcm90b3R5cGUuYmVmb3JlRW50ZXIgPSBmdW5jdGlvbiBiZWZvcmVFbnRlcihlbCkge1xuICAgICgwLCBfZG9tLmFkZENsYXNzKShlbCwgJ2NvbGxhcHNlLXRyYW5zaXRpb24nKTtcbiAgICBpZiAoIWVsLmRhdGFzZXQpIGVsLmRhdGFzZXQgPSB7fTtcblxuICAgIGVsLmRhdGFzZXQub2xkUGFkZGluZ1RvcCA9IGVsLnN0eWxlLnBhZGRpbmdUb3A7XG4gICAgZWwuZGF0YXNldC5vbGRQYWRkaW5nQm90dG9tID0gZWwuc3R5bGUucGFkZGluZ0JvdHRvbTtcblxuICAgIGVsLnN0eWxlLmhlaWdodCA9ICcwJztcbiAgICBlbC5zdHlsZS5wYWRkaW5nVG9wID0gMDtcbiAgICBlbC5zdHlsZS5wYWRkaW5nQm90dG9tID0gMDtcbiAgfTtcblxuICBUcmFuc2l0aW9uLnByb3RvdHlwZS5lbnRlciA9IGZ1bmN0aW9uIGVudGVyKGVsKSB7XG4gICAgZWwuZGF0YXNldC5vbGRPdmVyZmxvdyA9IGVsLnN0eWxlLm92ZXJmbG93O1xuICAgIGlmIChlbC5zY3JvbGxIZWlnaHQgIT09IDApIHtcbiAgICAgIGVsLnN0eWxlLmhlaWdodCA9IGVsLnNjcm9sbEhlaWdodCArICdweCc7XG4gICAgICBlbC5zdHlsZS5wYWRkaW5nVG9wID0gZWwuZGF0YXNldC5vbGRQYWRkaW5nVG9wO1xuICAgICAgZWwuc3R5bGUucGFkZGluZ0JvdHRvbSA9IGVsLmRhdGFzZXQub2xkUGFkZGluZ0JvdHRvbTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgICBlbC5zdHlsZS5wYWRkaW5nVG9wID0gZWwuZGF0YXNldC5vbGRQYWRkaW5nVG9wO1xuICAgICAgZWwuc3R5bGUucGFkZGluZ0JvdHRvbSA9IGVsLmRhdGFzZXQub2xkUGFkZGluZ0JvdHRvbTtcbiAgICB9XG5cbiAgICBlbC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICB9O1xuXG4gIFRyYW5zaXRpb24ucHJvdG90eXBlLmFmdGVyRW50ZXIgPSBmdW5jdGlvbiBhZnRlckVudGVyKGVsKSB7XG4gICAgLy8gZm9yIHNhZmFyaTogcmVtb3ZlIGNsYXNzIHRoZW4gcmVzZXQgaGVpZ2h0IGlzIG5lY2Vzc2FyeVxuICAgICgwLCBfZG9tLnJlbW92ZUNsYXNzKShlbCwgJ2NvbGxhcHNlLXRyYW5zaXRpb24nKTtcbiAgICBlbC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICBlbC5zdHlsZS5vdmVyZmxvdyA9IGVsLmRhdGFzZXQub2xkT3ZlcmZsb3c7XG4gIH07XG5cbiAgVHJhbnNpdGlvbi5wcm90b3R5cGUuYmVmb3JlTGVhdmUgPSBmdW5jdGlvbiBiZWZvcmVMZWF2ZShlbCkge1xuICAgIGlmICghZWwuZGF0YXNldCkgZWwuZGF0YXNldCA9IHt9O1xuICAgIGVsLmRhdGFzZXQub2xkUGFkZGluZ1RvcCA9IGVsLnN0eWxlLnBhZGRpbmdUb3A7XG4gICAgZWwuZGF0YXNldC5vbGRQYWRkaW5nQm90dG9tID0gZWwuc3R5bGUucGFkZGluZ0JvdHRvbTtcbiAgICBlbC5kYXRhc2V0Lm9sZE92ZXJmbG93ID0gZWwuc3R5bGUub3ZlcmZsb3c7XG5cbiAgICBlbC5zdHlsZS5oZWlnaHQgPSBlbC5zY3JvbGxIZWlnaHQgKyAncHgnO1xuICAgIGVsLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gIH07XG5cbiAgVHJhbnNpdGlvbi5wcm90b3R5cGUubGVhdmUgPSBmdW5jdGlvbiBsZWF2ZShlbCkge1xuICAgIGlmIChlbC5zY3JvbGxIZWlnaHQgIT09IDApIHtcbiAgICAgIC8vIGZvciBzYWZhcmk6IGFkZCBjbGFzcyBhZnRlciBzZXQgaGVpZ2h0LCBvciBpdCB3aWxsIGp1bXAgdG8gemVybyBoZWlnaHQgc3VkZGVubHksIHdlaXJlZFxuICAgICAgKDAsIF9kb20uYWRkQ2xhc3MpKGVsLCAnY29sbGFwc2UtdHJhbnNpdGlvbicpO1xuICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gMDtcbiAgICAgIGVsLnN0eWxlLnBhZGRpbmdUb3AgPSAwO1xuICAgICAgZWwuc3R5bGUucGFkZGluZ0JvdHRvbSA9IDA7XG4gICAgfVxuICB9O1xuXG4gIFRyYW5zaXRpb24ucHJvdG90eXBlLmFmdGVyTGVhdmUgPSBmdW5jdGlvbiBhZnRlckxlYXZlKGVsKSB7XG4gICAgKDAsIF9kb20ucmVtb3ZlQ2xhc3MpKGVsLCAnY29sbGFwc2UtdHJhbnNpdGlvbicpO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9ICcnO1xuICAgIGVsLnN0eWxlLm92ZXJmbG93ID0gZWwuZGF0YXNldC5vbGRPdmVyZmxvdztcbiAgICBlbC5zdHlsZS5wYWRkaW5nVG9wID0gZWwuZGF0YXNldC5vbGRQYWRkaW5nVG9wO1xuICAgIGVsLnN0eWxlLnBhZGRpbmdCb3R0b20gPSBlbC5kYXRhc2V0Lm9sZFBhZGRpbmdCb3R0b207XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb247XG59KCk7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgbmFtZTogJ0VsQ29sbGFwc2VUcmFuc2l0aW9uJyxcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCwgX3JlZikge1xuICAgIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG5cbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIG9uOiBuZXcgVHJhbnNpdGlvbigpXG4gICAgfTtcblxuICAgIHJldHVybiBoKCd0cmFuc2l0aW9uJywgZGF0YSwgY2hpbGRyZW4pO1xuICB9XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3RyYW5zaXRpb25zL2NvbGxhcHNlLXRyYW5zaXRpb24uanNcbi8vIG1vZHVsZSBpZCA9IDM5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///39\n")},function(module,exports,__webpack_require__){eval('module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = "/dist/";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(65);\n\n\n/***/ },\n\n/***/ 3:\n/***/ function(module, exports) {\n\n\t/* globals __VUE_SSR_CONTEXT__ */\n\n\t// this module is a runtime utility for cleaner component module output and will\n\t// be included in the final webpack user bundle\n\n\tmodule.exports = function normalizeComponent (\n\t rawScriptExports,\n\t compiledTemplate,\n\t injectStyles,\n\t scopeId,\n\t moduleIdentifier /* server only */\n\t) {\n\t var esModule\n\t var scriptExports = rawScriptExports = rawScriptExports || {}\n\n\t // ES6 modules interop\n\t var type = typeof rawScriptExports.default\n\t if (type === \'object\' || type === \'function\') {\n\t esModule = rawScriptExports\n\t scriptExports = rawScriptExports.default\n\t }\n\n\t // Vue.extend constructor export interop\n\t var options = typeof scriptExports === \'function\'\n\t ? scriptExports.options\n\t : scriptExports\n\n\t // render functions\n\t if (compiledTemplate) {\n\t options.render = compiledTemplate.render\n\t options.staticRenderFns = compiledTemplate.staticRenderFns\n\t }\n\n\t // scopedId\n\t if (scopeId) {\n\t options._scopeId = scopeId\n\t }\n\n\t var hook\n\t if (moduleIdentifier) { // server build\n\t hook = function (context) {\n\t // 2.3 injection\n\t context = context || (this.$vnode && this.$vnode.ssrContext)\n\t // 2.2 with runInNewContext: true\n\t if (!context && typeof __VUE_SSR_CONTEXT__ !== \'undefined\') {\n\t context = __VUE_SSR_CONTEXT__\n\t }\n\t // inject component styles\n\t if (injectStyles) {\n\t injectStyles.call(this, context)\n\t }\n\t // register component module identifier for async chunk inferrence\n\t if (context && context._registeredComponents) {\n\t context._registeredComponents.add(moduleIdentifier)\n\t }\n\t }\n\t // used by ssr in case component is cached and beforeCreate\n\t // never gets called\n\t options._ssrRegister = hook\n\t } else if (injectStyles) {\n\t hook = injectStyles\n\t }\n\n\t if (hook) {\n\t // inject component registration as beforeCreate hook\n\t var existing = options.beforeCreate\n\t options.beforeCreate = existing\n\t ? [].concat(existing, hook)\n\t : [hook]\n\t }\n\n\t return {\n\t esModule: esModule,\n\t exports: scriptExports,\n\t options: options\n\t }\n\t}\n\n\n/***/ },\n\n/***/ 14:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(4);\n\n/***/ },\n\n/***/ 65:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\'use strict\';\n\n\texports.__esModule = true;\n\n\tvar _checkbox = __webpack_require__(66);\n\n\tvar _checkbox2 = _interopRequireDefault(_checkbox);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_checkbox2.default.install = function (Vue) {\n\t Vue.component(_checkbox2.default.name, _checkbox2.default);\n\t};\n\n\texports.default = _checkbox2.default;\n\n/***/ },\n\n/***/ 66:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(3)(\n\t /* script */\n\t __webpack_require__(67),\n\t /* template */\n\t __webpack_require__(68),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 67:\n/***/ function(module, exports, __webpack_require__) {\n\n\t\'use strict\';\n\n\texports.__esModule = true;\n\n\tvar _emitter = __webpack_require__(14);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: \'ElCheckbox\',\n\n\t mixins: [_emitter2.default],\n\n\t componentName: \'ElCheckbox\',\n\n\t data: function data() {\n\t return {\n\t selfModel: false,\n\t focus: false\n\t };\n\t },\n\n\n\t computed: {\n\t model: {\n\t get: function get() {\n\t return this.isGroup ? this.store : this.value !== undefined ? this.value : this.selfModel;\n\t },\n\t set: function set(val) {\n\t if (this.isGroup) {\n\t var isLimitExceeded = false;\n\t this._checkboxGroup.min !== undefined && val.length < this._checkboxGroup.min && (isLimitExceeded = true);\n\n\t this._checkboxGroup.max !== undefined && val.length > this._checkboxGroup.max && (isLimitExceeded = true);\n\n\t isLimitExceeded === false && this.dispatch(\'ElCheckboxGroup\', \'input\', [val]);\n\t } else {\n\t this.$emit(\'input\', val);\n\t this.selfModel = val;\n\t }\n\t }\n\t },\n\n\t isChecked: function isChecked() {\n\t if ({}.toString.call(this.model) === \'[object Boolean]\') {\n\t return this.model;\n\t } else if (Array.isArray(this.model)) {\n\t return this.model.indexOf(this.label) > -1;\n\t } else if (this.model !== null && this.model !== undefined) {\n\t return this.model === this.trueLabel;\n\t }\n\t },\n\t isGroup: function isGroup() {\n\t var parent = this.$parent;\n\t while (parent) {\n\t if (parent.$options.componentName !== \'ElCheckboxGroup\') {\n\t parent = parent.$parent;\n\t } else {\n\t this._checkboxGroup = parent;\n\t return true;\n\t }\n\t }\n\t return false;\n\t },\n\t store: function store() {\n\t return this._checkboxGroup ? this._checkboxGroup.value : this.value;\n\t }\n\t },\n\n\t props: {\n\t value: {},\n\t label: {},\n\t indeterminate: Boolean,\n\t disabled: Boolean,\n\t checked: Boolean,\n\t name: String,\n\t trueLabel: [String, Number],\n\t falseLabel: [String, Number]\n\t },\n\n\t methods: {\n\t addToStore: function addToStore() {\n\t if (Array.isArray(this.model) && this.model.indexOf(this.label) === -1) {\n\t this.model.push(this.label);\n\t } else {\n\t this.model = this.trueLabel || true;\n\t }\n\t },\n\t handleChange: function handleChange(ev) {\n\t var _this = this;\n\n\t this.$emit(\'change\', ev);\n\t if (this.isGroup) {\n\t this.$nextTick(function (_) {\n\t _this.dispatch(\'ElCheckboxGroup\', \'change\', [_this._checkboxGroup.value]);\n\t });\n\t }\n\t }\n\t },\n\n\t created: function created() {\n\t this.checked && this.addToStore();\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n\n/***/ 68:\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c(\'label\', {\n\t staticClass: "el-checkbox"\n\t }, [_c(\'span\', {\n\t staticClass: "el-checkbox__input",\n\t class: {\n\t \'is-disabled\': _vm.disabled,\n\t \'is-checked\': _vm.isChecked,\n\t \'is-indeterminate\': _vm.indeterminate,\n\t \'is-focus\': _vm.focus\n\t }\n\t }, [_c(\'span\', {\n\t staticClass: "el-checkbox__inner"\n\t }), (_vm.trueLabel || _vm.falseLabel) ? _c(\'input\', {\n\t directives: [{\n\t name: "model",\n\t rawName: "v-model",\n\t value: (_vm.model),\n\t expression: "model"\n\t }],\n\t staticClass: "el-checkbox__original",\n\t attrs: {\n\t "type": "checkbox",\n\t "name": _vm.name,\n\t "disabled": _vm.disabled,\n\t "true-value": _vm.trueLabel,\n\t "false-value": _vm.falseLabel\n\t },\n\t domProps: {\n\t "checked": Array.isArray(_vm.model) ? _vm._i(_vm.model, null) > -1 : _vm._q(_vm.model, _vm.trueLabel)\n\t },\n\t on: {\n\t "change": _vm.handleChange,\n\t "focus": function($event) {\n\t _vm.focus = true\n\t },\n\t "blur": function($event) {\n\t _vm.focus = false\n\t },\n\t "__c": function($event) {\n\t var $$a = _vm.model,\n\t $$el = $event.target,\n\t $$c = $$el.checked ? (_vm.trueLabel) : (_vm.falseLabel);\n\t if (Array.isArray($$a)) {\n\t var $$v = null,\n\t $$i = _vm._i($$a, $$v);\n\t if ($$c) {\n\t $$i < 0 && (_vm.model = $$a.concat($$v))\n\t } else {\n\t $$i > -1 && (_vm.model = $$a.slice(0, $$i).concat($$a.slice($$i + 1)))\n\t }\n\t } else {\n\t _vm.model = $$c\n\t }\n\t }\n\t }\n\t }) : _c(\'input\', {\n\t directives: [{\n\t name: "model",\n\t rawName: "v-model",\n\t value: (_vm.model),\n\t expression: "model"\n\t }],\n\t staticClass: "el-checkbox__original",\n\t attrs: {\n\t "type": "checkbox",\n\t "disabled": _vm.disabled,\n\t "name": _vm.name\n\t },\n\t domProps: {\n\t "value": _vm.label,\n\t "checked": Array.isArray(_vm.model) ? _vm._i(_vm.model, _vm.label) > -1 : (_vm.model)\n\t },\n\t on: {\n\t "change": _vm.handleChange,\n\t "focus": function($event) {\n\t _vm.focus = true\n\t },\n\t "blur": function($event) {\n\t _vm.focus = false\n\t },\n\t "__c": function($event) {\n\t var $$a = _vm.model,\n\t $$el = $event.target,\n\t $$c = $$el.checked ? (true) : (false);\n\t if (Array.isArray($$a)) {\n\t var $$v = _vm.label,\n\t $$i = _vm._i($$a, $$v);\n\t if ($$c) {\n\t $$i < 0 && (_vm.model = $$a.concat($$v))\n\t } else {\n\t $$i > -1 && (_vm.model = $$a.slice(0, $$i).concat($$a.slice($$i + 1)))\n\t }\n\t } else {\n\t _vm.model = $$c\n\t }\n\t }\n\t }\n\t })]), (_vm.$slots.default || _vm.label) ? _c(\'span\', {\n\t staticClass: "el-checkbox__label"\n\t }, [_vm._t("default"), (!_vm.$slots.default) ? [_vm._v(_vm._s(_vm.label))] : _vm._e()], 2) : _vm._e()])\n\t},staticRenderFns: []}\n\n/***/ }\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvY2hlY2tib3guanM/MTBhNCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQSxjQUFjO0FBQ2QsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFtQixhQUFhLDBCQUEwQjtBQUMzRTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGOztBQUVBLFVBQVUiLCJmaWxlIjoiNDAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuXG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG5cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTtcblxuXG4vKioqLyB9LFxuXG4vKioqLyAzOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0LyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cblx0Ly8gdGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcblx0Ly8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGVcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG5cdCAgcmF3U2NyaXB0RXhwb3J0cyxcblx0ICBjb21waWxlZFRlbXBsYXRlLFxuXHQgIGluamVjdFN0eWxlcyxcblx0ICBzY29wZUlkLFxuXHQgIG1vZHVsZUlkZW50aWZpZXIgLyogc2VydmVyIG9ubHkgKi9cblx0KSB7XG5cdCAgdmFyIGVzTW9kdWxlXG5cdCAgdmFyIHNjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cyB8fCB7fVxuXG5cdCAgLy8gRVM2IG1vZHVsZXMgaW50ZXJvcFxuXHQgIHZhciB0eXBlID0gdHlwZW9mIHJhd1NjcmlwdEV4cG9ydHMuZGVmYXVsdFxuXHQgIGlmICh0eXBlID09PSAnb2JqZWN0JyB8fCB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICBlc01vZHVsZSA9IHJhd1NjcmlwdEV4cG9ydHNcblx0ICAgIHNjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzLmRlZmF1bHRcblx0ICB9XG5cblx0ICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG5cdCAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuXHQgICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcblx0ICAgIDogc2NyaXB0RXhwb3J0c1xuXG5cdCAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuXHQgIGlmIChjb21waWxlZFRlbXBsYXRlKSB7XG5cdCAgICBvcHRpb25zLnJlbmRlciA9IGNvbXBpbGVkVGVtcGxhdGUucmVuZGVyXG5cdCAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IGNvbXBpbGVkVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zXG5cdCAgfVxuXG5cdCAgLy8gc2NvcGVkSWRcblx0ICBpZiAoc2NvcGVJZCkge1xuXHQgICAgb3B0aW9ucy5fc2NvcGVJZCA9IHNjb3BlSWRcblx0ICB9XG5cblx0ICB2YXIgaG9va1xuXHQgIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuXHQgICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgIC8vIDIuMyBpbmplY3Rpb25cblx0ICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpXG5cdCAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuXHQgICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG5cdCAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cblx0ICAgICAgfVxuXHQgICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuXHQgICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG5cdCAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcblx0ICAgICAgfVxuXHQgICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2Vcblx0ICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcblx0ICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcblx0ICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG5cdCAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcblx0ICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuXHQgICAgaG9vayA9IGluamVjdFN0eWxlc1xuXHQgIH1cblxuXHQgIGlmIChob29rKSB7XG5cdCAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuXHQgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcblx0ICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3Rpbmdcblx0ICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG5cdCAgICAgIDogW2hvb2tdXG5cdCAgfVxuXG5cdCAgcmV0dXJuIHtcblx0ICAgIGVzTW9kdWxlOiBlc01vZHVsZSxcblx0ICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG5cdCAgICBvcHRpb25zOiBvcHRpb25zXG5cdCAgfVxuXHR9XG5cblxuLyoqKi8gfSxcblxuLyoqKi8gMTQ6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiKTtcblxuLyoqKi8gfSxcblxuLyoqKi8gNjU6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2NoZWNrYm94ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XG5cblx0dmFyIF9jaGVja2JveDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jaGVja2JveCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfY2hlY2tib3gyLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9jaGVja2JveDIuZGVmYXVsdC5uYW1lLCBfY2hlY2tib3gyLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9jaGVja2JveDIuZGVmYXVsdDtcblxuLyoqKi8gfSxcblxuLyoqKi8gNjY6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHR2YXIgQ29tcG9uZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKShcblx0ICAvKiBzY3JpcHQgKi9cblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDY3KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oNjgpLFxuXHQgIC8qIHN0eWxlcyAqL1xuXHQgIG51bGwsXG5cdCAgLyogc2NvcGVJZCAqL1xuXHQgIG51bGwsXG5cdCAgLyogbW9kdWxlSWRlbnRpZmllciAoc2VydmVyIG9ubHkpICovXG5cdCAgbnVsbFxuXHQpXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBDb21wb25lbnQuZXhwb3J0c1xuXG5cbi8qKiovIH0sXG5cbi8qKiovIDY3OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XG5cblx0dmFyIF9lbWl0dGVyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2VtaXR0ZXIpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbENoZWNrYm94JyxcblxuXHQgIG1peGluczogW19lbWl0dGVyMi5kZWZhdWx0XSxcblxuXHQgIGNvbXBvbmVudE5hbWU6ICdFbENoZWNrYm94JyxcblxuXHQgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG5cdCAgICByZXR1cm4ge1xuXHQgICAgICBzZWxmTW9kZWw6IGZhbHNlLFxuXHQgICAgICBmb2N1czogZmFsc2Vcblx0ICAgIH07XG5cdCAgfSxcblxuXG5cdCAgY29tcHV0ZWQ6IHtcblx0ICAgIG1vZGVsOiB7XG5cdCAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuXHQgICAgICAgIHJldHVybiB0aGlzLmlzR3JvdXAgPyB0aGlzLnN0b3JlIDogdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy52YWx1ZSA6IHRoaXMuc2VsZk1vZGVsO1xuXHQgICAgICB9LFxuXHQgICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWwpIHtcblx0ICAgICAgICBpZiAodGhpcy5pc0dyb3VwKSB7XG5cdCAgICAgICAgICB2YXIgaXNMaW1pdEV4Y2VlZGVkID0gZmFsc2U7XG5cdCAgICAgICAgICB0aGlzLl9jaGVja2JveEdyb3VwLm1pbiAhPT0gdW5kZWZpbmVkICYmIHZhbC5sZW5ndGggPCB0aGlzLl9jaGVja2JveEdyb3VwLm1pbiAmJiAoaXNMaW1pdEV4Y2VlZGVkID0gdHJ1ZSk7XG5cblx0ICAgICAgICAgIHRoaXMuX2NoZWNrYm94R3JvdXAubWF4ICE9PSB1bmRlZmluZWQgJiYgdmFsLmxlbmd0aCA+IHRoaXMuX2NoZWNrYm94R3JvdXAubWF4ICYmIChpc0xpbWl0RXhjZWVkZWQgPSB0cnVlKTtcblxuXHQgICAgICAgICAgaXNMaW1pdEV4Y2VlZGVkID09PSBmYWxzZSAmJiB0aGlzLmRpc3BhdGNoKCdFbENoZWNrYm94R3JvdXAnLCAnaW5wdXQnLCBbdmFsXSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsKTtcblx0ICAgICAgICAgIHRoaXMuc2VsZk1vZGVsID0gdmFsO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblxuXHQgICAgaXNDaGVja2VkOiBmdW5jdGlvbiBpc0NoZWNrZWQoKSB7XG5cdCAgICAgIGlmICh7fS50b1N0cmluZy5jYWxsKHRoaXMubW9kZWwpID09PSAnW29iamVjdCBCb29sZWFuXScpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5tb2RlbDtcblx0ICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMubW9kZWwpKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuaW5kZXhPZih0aGlzLmxhYmVsKSA+IC0xO1xuXHQgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZWwgIT09IG51bGwgJiYgdGhpcy5tb2RlbCAhPT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwgPT09IHRoaXMudHJ1ZUxhYmVsO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaXNHcm91cDogZnVuY3Rpb24gaXNHcm91cCgpIHtcblx0ICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcblx0ICAgICAgd2hpbGUgKHBhcmVudCkge1xuXHQgICAgICAgIGlmIChwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSAhPT0gJ0VsQ2hlY2tib3hHcm91cCcpIHtcblx0ICAgICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICB0aGlzLl9jaGVja2JveEdyb3VwID0gcGFyZW50O1xuXHQgICAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBmYWxzZTtcblx0ICAgIH0sXG5cdCAgICBzdG9yZTogZnVuY3Rpb24gc3RvcmUoKSB7XG5cdCAgICAgIHJldHVybiB0aGlzLl9jaGVja2JveEdyb3VwID8gdGhpcy5fY2hlY2tib3hHcm91cC52YWx1ZSA6IHRoaXMudmFsdWU7XG5cdCAgICB9XG5cdCAgfSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICB2YWx1ZToge30sXG5cdCAgICBsYWJlbDoge30sXG5cdCAgICBpbmRldGVybWluYXRlOiBCb29sZWFuLFxuXHQgICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG5cdCAgICBjaGVja2VkOiBCb29sZWFuLFxuXHQgICAgbmFtZTogU3RyaW5nLFxuXHQgICAgdHJ1ZUxhYmVsOiBbU3RyaW5nLCBOdW1iZXJdLFxuXHQgICAgZmFsc2VMYWJlbDogW1N0cmluZywgTnVtYmVyXVxuXHQgIH0sXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBhZGRUb1N0b3JlOiBmdW5jdGlvbiBhZGRUb1N0b3JlKCkge1xuXHQgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm1vZGVsKSAmJiB0aGlzLm1vZGVsLmluZGV4T2YodGhpcy5sYWJlbCkgPT09IC0xKSB7XG5cdCAgICAgICAgdGhpcy5tb2RlbC5wdXNoKHRoaXMubGFiZWwpO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLnRydWVMYWJlbCB8fCB0cnVlO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXYpIHtcblx0ICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBldik7XG5cdCAgICAgIGlmICh0aGlzLmlzR3JvdXApIHtcblx0ICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoXykge1xuXHQgICAgICAgICAgX3RoaXMuZGlzcGF0Y2goJ0VsQ2hlY2tib3hHcm91cCcsICdjaGFuZ2UnLCBbX3RoaXMuX2NoZWNrYm94R3JvdXAudmFsdWVdKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgdGhpcy5jaGVja2VkICYmIHRoaXMuYWRkVG9TdG9yZSgpO1xuXHQgIH1cblx0fTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuLyoqKi8gfSxcblxuLyoqKi8gNjg6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cz17cmVuZGVyOmZ1bmN0aW9uICgpe3ZhciBfdm09dGhpczt2YXIgX2g9X3ZtLiRjcmVhdGVFbGVtZW50O3ZhciBfYz1fdm0uX3NlbGYuX2N8fF9oO1xuXHQgIHJldHVybiBfYygnbGFiZWwnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveFwiXG5cdCAgfSwgW19jKCdzcGFuJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3hfX2lucHV0XCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaXMtZGlzYWJsZWQnOiBfdm0uZGlzYWJsZWQsXG5cdCAgICAgICdpcy1jaGVja2VkJzogX3ZtLmlzQ2hlY2tlZCxcblx0ICAgICAgJ2lzLWluZGV0ZXJtaW5hdGUnOiBfdm0uaW5kZXRlcm1pbmF0ZSxcblx0ICAgICAgJ2lzLWZvY3VzJzogX3ZtLmZvY3VzXG5cdCAgICB9XG5cdCAgfSwgW19jKCdzcGFuJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3hfX2lubmVyXCJcblx0ICB9KSwgKF92bS50cnVlTGFiZWwgfHwgX3ZtLmZhbHNlTGFiZWwpID8gX2MoJ2lucHV0Jywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJtb2RlbFwiLFxuXHQgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcblx0ICAgICAgdmFsdWU6IChfdm0ubW9kZWwpLFxuXHQgICAgICBleHByZXNzaW9uOiBcIm1vZGVsXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3hfX29yaWdpbmFsXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInR5cGVcIjogXCJjaGVja2JveFwiLFxuXHQgICAgICBcIm5hbWVcIjogX3ZtLm5hbWUsXG5cdCAgICAgIFwiZGlzYWJsZWRcIjogX3ZtLmRpc2FibGVkLFxuXHQgICAgICBcInRydWUtdmFsdWVcIjogX3ZtLnRydWVMYWJlbCxcblx0ICAgICAgXCJmYWxzZS12YWx1ZVwiOiBfdm0uZmFsc2VMYWJlbFxuXHQgICAgfSxcblx0ICAgIGRvbVByb3BzOiB7XG5cdCAgICAgIFwiY2hlY2tlZFwiOiBBcnJheS5pc0FycmF5KF92bS5tb2RlbCkgPyBfdm0uX2koX3ZtLm1vZGVsLCBudWxsKSA+IC0xIDogX3ZtLl9xKF92bS5tb2RlbCwgX3ZtLnRydWVMYWJlbClcblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImNoYW5nZVwiOiBfdm0uaGFuZGxlQ2hhbmdlLFxuXHQgICAgICBcImZvY3VzXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5mb2N1cyA9IHRydWVcblx0ICAgICAgfSxcblx0ICAgICAgXCJibHVyXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIF92bS5mb2N1cyA9IGZhbHNlXG5cdCAgICAgIH0sXG5cdCAgICAgIFwiX19jXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIHZhciAkJGEgPSBfdm0ubW9kZWwsXG5cdCAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcblx0ICAgICAgICAgICQkYyA9ICQkZWwuY2hlY2tlZCA/IChfdm0udHJ1ZUxhYmVsKSA6IChfdm0uZmFsc2VMYWJlbCk7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoJCRhKSkge1xuXHQgICAgICAgICAgdmFyICQkdiA9IG51bGwsXG5cdCAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdik7XG5cdCAgICAgICAgICBpZiAoJCRjKSB7XG5cdCAgICAgICAgICAgICQkaSA8IDAgJiYgKF92bS5tb2RlbCA9ICQkYS5jb25jYXQoJCR2KSlcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICQkaSA+IC0xICYmIChfdm0ubW9kZWwgPSAkJGEuc2xpY2UoMCwgJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSArIDEpKSlcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgX3ZtLm1vZGVsID0gJCRjXG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSkgOiBfYygnaW5wdXQnLCB7XG5cdCAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICBuYW1lOiBcIm1vZGVsXCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuXHQgICAgICB2YWx1ZTogKF92bS5tb2RlbCksXG5cdCAgICAgIGV4cHJlc3Npb246IFwibW9kZWxcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveF9fb3JpZ2luYWxcIixcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidHlwZVwiOiBcImNoZWNrYm94XCIsXG5cdCAgICAgIFwiZGlzYWJsZWRcIjogX3ZtLmRpc2FibGVkLFxuXHQgICAgICBcIm5hbWVcIjogX3ZtLm5hbWVcblx0ICAgIH0sXG5cdCAgICBkb21Qcm9wczoge1xuXHQgICAgICBcInZhbHVlXCI6IF92bS5sYWJlbCxcblx0ICAgICAgXCJjaGVja2VkXCI6IEFycmF5LmlzQXJyYXkoX3ZtLm1vZGVsKSA/IF92bS5faShfdm0ubW9kZWwsIF92bS5sYWJlbCkgPiAtMSA6IChfdm0ubW9kZWwpXG5cdCAgICB9LFxuXHQgICAgb246IHtcblx0ICAgICAgXCJjaGFuZ2VcIjogX3ZtLmhhbmRsZUNoYW5nZSxcblx0ICAgICAgXCJmb2N1c1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uZm9jdXMgPSB0cnVlXG5cdCAgICAgIH0sXG5cdCAgICAgIFwiYmx1clwiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICBfdm0uZm9jdXMgPSBmYWxzZVxuXHQgICAgICB9LFxuXHQgICAgICBcIl9fY1wiOiBmdW5jdGlvbigkZXZlbnQpIHtcblx0ICAgICAgICB2YXIgJCRhID0gX3ZtLm1vZGVsLFxuXHQgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG5cdCAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyAodHJ1ZSkgOiAoZmFsc2UpO1xuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcblx0ICAgICAgICAgIHZhciAkJHYgPSBfdm0ubGFiZWwsXG5cdCAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdik7XG5cdCAgICAgICAgICBpZiAoJCRjKSB7XG5cdCAgICAgICAgICAgICQkaSA8IDAgJiYgKF92bS5tb2RlbCA9ICQkYS5jb25jYXQoJCR2KSlcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICQkaSA+IC0xICYmIChfdm0ubW9kZWwgPSAkJGEuc2xpY2UoMCwgJCRpKS5jb25jYXQoJCRhLnNsaWNlKCQkaSArIDEpKSlcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgX3ZtLm1vZGVsID0gJCRjXG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSldKSwgKF92bS4kc2xvdHMuZGVmYXVsdCB8fCBfdm0ubGFiZWwpID8gX2MoJ3NwYW4nLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveF9fbGFiZWxcIlxuXHQgIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpLCAoIV92bS4kc2xvdHMuZGVmYXVsdCkgPyBbX3ZtLl92KF92bS5fcyhfdm0ubGFiZWwpKV0gOiBfdm0uX2UoKV0sIDIpIDogX3ZtLl9lKCldKVxuXHR9LHN0YXRpY1JlbmRlckZuczogW119XG5cbi8qKiovIH1cblxuLyoqKioqKi8gfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvY2hlY2tib3guanNcbi8vIG1vZHVsZSBpZCA9IDQwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///40\n')},function(module,exports,__webpack_require__){eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(345);\n\n\n/***/ },\n\n/***/ 13:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(10);\n\n/***/ },\n\n/***/ 55:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(2);\n\n/***/ },\n\n/***/ 63:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(7);\n\n/***/ },\n\n/***/ 197:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(23);\n\n/***/ },\n\n/***/ 345:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _main = __webpack_require__(346);\n\n\tvar _main2 = _interopRequireDefault(_main);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_main2.default.install = function (Vue) {\n\t Vue.component(_main2.default.name, _main2.default);\n\t};\n\n\texports.default = _main2.default;\n\n/***/ },\n\n/***/ 346:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _vuePopper = __webpack_require__(13);\n\n\tvar _vuePopper2 = _interopRequireDefault(_vuePopper);\n\n\tvar _debounce = __webpack_require__(63);\n\n\tvar _debounce2 = _interopRequireDefault(_debounce);\n\n\tvar _vdom = __webpack_require__(197);\n\n\tvar _vue = __webpack_require__(55);\n\n\tvar _vue2 = _interopRequireDefault(_vue);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElTooltip',\n\n\t mixins: [_vuePopper2.default],\n\n\t props: {\n\t openDelay: {\n\t type: Number,\n\t default: 0\n\t },\n\t disabled: Boolean,\n\t manual: Boolean,\n\t effect: {\n\t type: String,\n\t default: 'dark'\n\t },\n\t popperClass: String,\n\t content: String,\n\t visibleArrow: {\n\t default: true\n\t },\n\t transition: {\n\t type: String,\n\t default: 'el-fade-in-linear'\n\t },\n\t popperOptions: {\n\t default: function _default() {\n\t return {\n\t boundariesPadding: 10,\n\t gpuAcceleration: false\n\t };\n\t }\n\t },\n\t enterable: {\n\t type: Boolean,\n\t default: true\n\t },\n\t hideAfter: {\n\t type: Number,\n\t default: 0\n\t }\n\t },\n\n\t data: function data() {\n\t return {\n\t timeoutPending: null\n\t };\n\t },\n\t beforeCreate: function beforeCreate() {\n\t var _this = this;\n\n\t if (this.$isServer) return;\n\n\t this.popperVM = new _vue2.default({\n\t data: { node: '' },\n\t render: function render(h) {\n\t return this.node;\n\t }\n\t }).$mount();\n\n\t this.debounceClose = (0, _debounce2.default)(200, function () {\n\t return _this.handleClosePopper();\n\t });\n\t },\n\t render: function render(h) {\n\t var _this2 = this;\n\n\t if (this.popperVM) {\n\t this.popperVM.node = h(\n\t 'transition',\n\t {\n\t attrs: {\n\t name: this.transition\n\t },\n\t on: {\n\t 'afterLeave': this.doDestroy\n\t }\n\t },\n\t [h(\n\t 'div',\n\t {\n\t on: {\n\t 'mouseleave': function mouseleave() {\n\t _this2.setExpectedState(false);_this2.debounceClose();\n\t },\n\t 'mouseenter': function mouseenter() {\n\t _this2.setExpectedState(true);\n\t }\n\t },\n\n\t ref: 'popper',\n\t directives: [{\n\t name: 'show',\n\t value: !this.disabled && this.showPopper\n\t }],\n\n\t 'class': ['el-tooltip__popper', 'is-' + this.effect, this.popperClass] },\n\t [this.$slots.content || this.content]\n\t )]\n\t );\n\t }\n\n\t if (!this.$slots.default || !this.$slots.default.length) return this.$slots.default;\n\n\t var vnode = (0, _vdom.getFirstComponentChild)(this.$slots.default);\n\t if (!vnode) return vnode;\n\t var data = vnode.data = vnode.data || {};\n\t var on = vnode.data.on = vnode.data.on || {};\n\t var nativeOn = vnode.data.nativeOn = vnode.data.nativeOn || {};\n\n\t data.staticClass = this.concatClass(data.staticClass, 'el-tooltip');\n\t on.mouseenter = this.addEventHandle(on.mouseenter, this.show);\n\t on.mouseleave = this.addEventHandle(on.mouseleave, this.hide);\n\t nativeOn.mouseenter = this.addEventHandle(nativeOn.mouseenter, this.show);\n\t nativeOn.mouseleave = this.addEventHandle(nativeOn.mouseleave, this.hide);\n\n\t return vnode;\n\t },\n\t mounted: function mounted() {\n\t this.referenceElm = this.$el;\n\t },\n\n\n\t methods: {\n\t show: function show() {\n\t this.setExpectedState(true);\n\t this.handleShowPopper();\n\t },\n\t hide: function hide() {\n\t this.setExpectedState(false);\n\t this.debounceClose();\n\t },\n\t addEventHandle: function addEventHandle(old, fn) {\n\t if (!old) {\n\t return fn;\n\t } else if (Array.isArray(old)) {\n\t return old.indexOf(fn) > -1 ? old : old.concat(fn);\n\t } else {\n\t return old === fn ? old : [old, fn];\n\t }\n\t },\n\t concatClass: function concatClass(a, b) {\n\t if (a && a.indexOf(b) > -1) return a;\n\t return a ? b ? a + ' ' + b : a : b || '';\n\t },\n\t handleShowPopper: function handleShowPopper() {\n\t var _this3 = this;\n\n\t if (!this.expectedState || this.manual) return;\n\t clearTimeout(this.timeout);\n\t this.timeout = setTimeout(function () {\n\t _this3.showPopper = true;\n\t }, this.openDelay);\n\n\t if (this.hideAfter > 0) {\n\t this.timeoutPending = setTimeout(function () {\n\t _this3.showPopper = false;\n\t }, this.hideAfter);\n\t }\n\t },\n\t handleClosePopper: function handleClosePopper() {\n\t if (this.enterable && this.expectedState || this.manual) return;\n\t clearTimeout(this.timeout);\n\n\t if (this.timeoutPending) {\n\t clearTimeout(this.timeoutPending);\n\t }\n\t this.showPopper = false;\n\t },\n\t setExpectedState: function setExpectedState(expectedState) {\n\t if (expectedState === false) {\n\t clearTimeout(this.timeoutPending);\n\t }\n\t this.expectedState = expectedState;\n\t }\n\t }\n\t};\n\n/***/ }\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdG9vbHRpcC5qcz82OGNjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxjQUFjLFdBQVc7QUFDekI7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRCxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7O0FBRWQscUZBQXFGO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7QUFFUjtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsVUFBVSIsImZpbGUiOiI0MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9LFxuLyoqKioqKi8gXHRcdFx0aWQ6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bG9hZGVkOiBmYWxzZVxuLyoqKioqKi8gXHRcdH07XG5cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG5cblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcblxuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oMCk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMzQ1KTtcblxuXG4vKioqLyB9LFxuXG4vKioqLyAxMzpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Z1ZS1wb3BwZXJcIik7XG5cbi8qKiovIH0sXG5cbi8qKiovIDU1OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidnVlXCIpO1xuXG4vKioqLyB9LFxuXG4vKioqLyA2Mzpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInRocm90dGxlLWRlYm91bmNlL2RlYm91bmNlXCIpO1xuXG4vKioqLyB9LFxuXG4vKioqLyAxOTc6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy92ZG9tXCIpO1xuXG4vKioqLyB9LFxuXG4vKioqLyAzNDU6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX21haW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0Nik7XG5cblx0dmFyIF9tYWluMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX21haW4pO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X21haW4yLmRlZmF1bHQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcblx0ICBWdWUuY29tcG9uZW50KF9tYWluMi5kZWZhdWx0Lm5hbWUsIF9tYWluMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfbWFpbjIuZGVmYXVsdDtcblxuLyoqKi8gfSxcblxuLyoqKi8gMzQ2OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblx0dmFyIF92dWVQb3BwZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcblxuXHR2YXIgX3Z1ZVBvcHBlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWVQb3BwZXIpO1xuXG5cdHZhciBfZGVib3VuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcblxuXHR2YXIgX2RlYm91bmNlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlYm91bmNlKTtcblxuXHR2YXIgX3Zkb20gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5Nyk7XG5cblx0dmFyIF92dWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU1KTtcblxuXHR2YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0ZXhwb3J0cy5kZWZhdWx0ID0ge1xuXHQgIG5hbWU6ICdFbFRvb2x0aXAnLFxuXG5cdCAgbWl4aW5zOiBbX3Z1ZVBvcHBlcjIuZGVmYXVsdF0sXG5cblx0ICBwcm9wczoge1xuXHQgICAgb3BlbkRlbGF5OiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogMFxuXHQgICAgfSxcblx0ICAgIGRpc2FibGVkOiBCb29sZWFuLFxuXHQgICAgbWFudWFsOiBCb29sZWFuLFxuXHQgICAgZWZmZWN0OiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2RhcmsnXG5cdCAgICB9LFxuXHQgICAgcG9wcGVyQ2xhc3M6IFN0cmluZyxcblx0ICAgIGNvbnRlbnQ6IFN0cmluZyxcblx0ICAgIHZpc2libGVBcnJvdzoge1xuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXHQgICAgdHJhbnNpdGlvbjoge1xuXHQgICAgICB0eXBlOiBTdHJpbmcsXG5cdCAgICAgIGRlZmF1bHQ6ICdlbC1mYWRlLWluLWxpbmVhcidcblx0ICAgIH0sXG5cdCAgICBwb3BwZXJPcHRpb25zOiB7XG5cdCAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICBib3VuZGFyaWVzUGFkZGluZzogMTAsXG5cdCAgICAgICAgICBncHVBY2NlbGVyYXRpb246IGZhbHNlXG5cdCAgICAgICAgfTtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIGVudGVyYWJsZToge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9LFxuXHQgICAgaGlkZUFmdGVyOiB7XG5cdCAgICAgIHR5cGU6IE51bWJlcixcblx0ICAgICAgZGVmYXVsdDogMFxuXHQgICAgfVxuXHQgIH0sXG5cblx0ICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuXHQgICAgcmV0dXJuIHtcblx0ICAgICAgdGltZW91dFBlbmRpbmc6IG51bGxcblx0ICAgIH07XG5cdCAgfSxcblx0ICBiZWZvcmVDcmVhdGU6IGZ1bmN0aW9uIGJlZm9yZUNyZWF0ZSgpIHtcblx0ICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cblx0ICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuXG5cdCAgICB0aGlzLnBvcHBlclZNID0gbmV3IF92dWUyLmRlZmF1bHQoe1xuXHQgICAgICBkYXRhOiB7IG5vZGU6ICcnIH0sXG5cdCAgICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcblx0ICAgICAgICByZXR1cm4gdGhpcy5ub2RlO1xuXHQgICAgICB9XG5cdCAgICB9KS4kbW91bnQoKTtcblxuXHQgICAgdGhpcy5kZWJvdW5jZUNsb3NlID0gKDAsIF9kZWJvdW5jZTIuZGVmYXVsdCkoMjAwLCBmdW5jdGlvbiAoKSB7XG5cdCAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVDbG9zZVBvcHBlcigpO1xuXHQgICAgfSk7XG5cdCAgfSxcblx0ICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG5cdCAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuXHQgICAgaWYgKHRoaXMucG9wcGVyVk0pIHtcblx0ICAgICAgdGhpcy5wb3BwZXJWTS5ub2RlID0gaChcblx0ICAgICAgICAndHJhbnNpdGlvbicsXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgYXR0cnM6IHtcblx0ICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2l0aW9uXG5cdCAgICAgICAgICB9LFxuXHQgICAgICAgICAgb246IHtcblx0ICAgICAgICAgICAgJ2FmdGVyTGVhdmUnOiB0aGlzLmRvRGVzdHJveVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cdCAgICAgICAgW2goXG5cdCAgICAgICAgICAnZGl2Jyxcblx0ICAgICAgICAgIHtcblx0ICAgICAgICAgICAgb246IHtcblx0ICAgICAgICAgICAgICAnbW91c2VsZWF2ZSc6IGZ1bmN0aW9uIG1vdXNlbGVhdmUoKSB7XG5cdCAgICAgICAgICAgICAgICBfdGhpczIuc2V0RXhwZWN0ZWRTdGF0ZShmYWxzZSk7X3RoaXMyLmRlYm91bmNlQ2xvc2UoKTtcblx0ICAgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAgICdtb3VzZWVudGVyJzogZnVuY3Rpb24gbW91c2VlbnRlcigpIHtcblx0ICAgICAgICAgICAgICAgIF90aGlzMi5zZXRFeHBlY3RlZFN0YXRlKHRydWUpO1xuXHQgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICByZWY6ICdwb3BwZXInLFxuXHQgICAgICAgICAgICBkaXJlY3RpdmVzOiBbe1xuXHQgICAgICAgICAgICAgIG5hbWU6ICdzaG93Jyxcblx0ICAgICAgICAgICAgICB2YWx1ZTogIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5zaG93UG9wcGVyXG5cdCAgICAgICAgICAgIH1dLFxuXG5cdCAgICAgICAgICAgICdjbGFzcyc6IFsnZWwtdG9vbHRpcF9fcG9wcGVyJywgJ2lzLScgKyB0aGlzLmVmZmVjdCwgdGhpcy5wb3BwZXJDbGFzc10gfSxcblx0ICAgICAgICAgIFt0aGlzLiRzbG90cy5jb250ZW50IHx8IHRoaXMuY29udGVudF1cblx0ICAgICAgICApXVxuXHQgICAgICApO1xuXHQgICAgfVxuXG5cdCAgICBpZiAoIXRoaXMuJHNsb3RzLmRlZmF1bHQgfHwgIXRoaXMuJHNsb3RzLmRlZmF1bHQubGVuZ3RoKSByZXR1cm4gdGhpcy4kc2xvdHMuZGVmYXVsdDtcblxuXHQgICAgdmFyIHZub2RlID0gKDAsIF92ZG9tLmdldEZpcnN0Q29tcG9uZW50Q2hpbGQpKHRoaXMuJHNsb3RzLmRlZmF1bHQpO1xuXHQgICAgaWYgKCF2bm9kZSkgcmV0dXJuIHZub2RlO1xuXHQgICAgdmFyIGRhdGEgPSB2bm9kZS5kYXRhID0gdm5vZGUuZGF0YSB8fCB7fTtcblx0ICAgIHZhciBvbiA9IHZub2RlLmRhdGEub24gPSB2bm9kZS5kYXRhLm9uIHx8IHt9O1xuXHQgICAgdmFyIG5hdGl2ZU9uID0gdm5vZGUuZGF0YS5uYXRpdmVPbiA9IHZub2RlLmRhdGEubmF0aXZlT24gfHwge307XG5cblx0ICAgIGRhdGEuc3RhdGljQ2xhc3MgPSB0aGlzLmNvbmNhdENsYXNzKGRhdGEuc3RhdGljQ2xhc3MsICdlbC10b29sdGlwJyk7XG5cdCAgICBvbi5tb3VzZWVudGVyID0gdGhpcy5hZGRFdmVudEhhbmRsZShvbi5tb3VzZWVudGVyLCB0aGlzLnNob3cpO1xuXHQgICAgb24ubW91c2VsZWF2ZSA9IHRoaXMuYWRkRXZlbnRIYW5kbGUob24ubW91c2VsZWF2ZSwgdGhpcy5oaWRlKTtcblx0ICAgIG5hdGl2ZU9uLm1vdXNlZW50ZXIgPSB0aGlzLmFkZEV2ZW50SGFuZGxlKG5hdGl2ZU9uLm1vdXNlZW50ZXIsIHRoaXMuc2hvdyk7XG5cdCAgICBuYXRpdmVPbi5tb3VzZWxlYXZlID0gdGhpcy5hZGRFdmVudEhhbmRsZShuYXRpdmVPbi5tb3VzZWxlYXZlLCB0aGlzLmhpZGUpO1xuXG5cdCAgICByZXR1cm4gdm5vZGU7XG5cdCAgfSxcblx0ICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuXHQgICAgdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLiRlbDtcblx0ICB9LFxuXG5cblx0ICBtZXRob2RzOiB7XG5cdCAgICBzaG93OiBmdW5jdGlvbiBzaG93KCkge1xuXHQgICAgICB0aGlzLnNldEV4cGVjdGVkU3RhdGUodHJ1ZSk7XG5cdCAgICAgIHRoaXMuaGFuZGxlU2hvd1BvcHBlcigpO1xuXHQgICAgfSxcblx0ICAgIGhpZGU6IGZ1bmN0aW9uIGhpZGUoKSB7XG5cdCAgICAgIHRoaXMuc2V0RXhwZWN0ZWRTdGF0ZShmYWxzZSk7XG5cdCAgICAgIHRoaXMuZGVib3VuY2VDbG9zZSgpO1xuXHQgICAgfSxcblx0ICAgIGFkZEV2ZW50SGFuZGxlOiBmdW5jdGlvbiBhZGRFdmVudEhhbmRsZShvbGQsIGZuKSB7XG5cdCAgICAgIGlmICghb2xkKSB7XG5cdCAgICAgICAgcmV0dXJuIGZuO1xuXHQgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2xkKSkge1xuXHQgICAgICAgIHJldHVybiBvbGQuaW5kZXhPZihmbikgPiAtMSA/IG9sZCA6IG9sZC5jb25jYXQoZm4pO1xuXHQgICAgICB9IGVsc2Uge1xuXHQgICAgICAgIHJldHVybiBvbGQgPT09IGZuID8gb2xkIDogW29sZCwgZm5dO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgY29uY2F0Q2xhc3M6IGZ1bmN0aW9uIGNvbmNhdENsYXNzKGEsIGIpIHtcblx0ICAgICAgaWYgKGEgJiYgYS5pbmRleE9mKGIpID4gLTEpIHJldHVybiBhO1xuXHQgICAgICByZXR1cm4gYSA/IGIgPyBhICsgJyAnICsgYiA6IGEgOiBiIHx8ICcnO1xuXHQgICAgfSxcblx0ICAgIGhhbmRsZVNob3dQb3BwZXI6IGZ1bmN0aW9uIGhhbmRsZVNob3dQb3BwZXIoKSB7XG5cdCAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG5cdCAgICAgIGlmICghdGhpcy5leHBlY3RlZFN0YXRlIHx8IHRoaXMubWFudWFsKSByZXR1cm47XG5cdCAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXHQgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBfdGhpczMuc2hvd1BvcHBlciA9IHRydWU7XG5cdCAgICAgIH0sIHRoaXMub3BlbkRlbGF5KTtcblxuXHQgICAgICBpZiAodGhpcy5oaWRlQWZ0ZXIgPiAwKSB7XG5cdCAgICAgICAgdGhpcy50aW1lb3V0UGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgX3RoaXMzLnNob3dQb3BwZXIgPSBmYWxzZTtcblx0ICAgICAgICB9LCB0aGlzLmhpZGVBZnRlcik7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBoYW5kbGVDbG9zZVBvcHBlcjogZnVuY3Rpb24gaGFuZGxlQ2xvc2VQb3BwZXIoKSB7XG5cdCAgICAgIGlmICh0aGlzLmVudGVyYWJsZSAmJiB0aGlzLmV4cGVjdGVkU3RhdGUgfHwgdGhpcy5tYW51YWwpIHJldHVybjtcblx0ICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG5cblx0ICAgICAgaWYgKHRoaXMudGltZW91dFBlbmRpbmcpIHtcblx0ICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0UGVuZGluZyk7XG5cdCAgICAgIH1cblx0ICAgICAgdGhpcy5zaG93UG9wcGVyID0gZmFsc2U7XG5cdCAgICB9LFxuXHQgICAgc2V0RXhwZWN0ZWRTdGF0ZTogZnVuY3Rpb24gc2V0RXhwZWN0ZWRTdGF0ZShleHBlY3RlZFN0YXRlKSB7XG5cdCAgICAgIGlmIChleHBlY3RlZFN0YXRlID09PSBmYWxzZSkge1xuXHQgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRQZW5kaW5nKTtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLmV4cGVjdGVkU3RhdGUgPSBleHBlY3RlZFN0YXRlO1xuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuLyoqKi8gfVxuXG4vKioqKioqLyB9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi90b29sdGlwLmpzXG4vLyBtb2R1bGUgaWQgPSA0MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41\n")},function(module,exports,__webpack_require__){eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(73);\n\n\n/***/ },\n\n/***/ 3:\n/***/ function(module, exports) {\n\n\t/* globals __VUE_SSR_CONTEXT__ */\n\n\t// this module is a runtime utility for cleaner component module output and will\n\t// be included in the final webpack user bundle\n\n\tmodule.exports = function normalizeComponent (\n\t rawScriptExports,\n\t compiledTemplate,\n\t injectStyles,\n\t scopeId,\n\t moduleIdentifier /* server only */\n\t) {\n\t var esModule\n\t var scriptExports = rawScriptExports = rawScriptExports || {}\n\n\t // ES6 modules interop\n\t var type = typeof rawScriptExports.default\n\t if (type === 'object' || type === 'function') {\n\t esModule = rawScriptExports\n\t scriptExports = rawScriptExports.default\n\t }\n\n\t // Vue.extend constructor export interop\n\t var options = typeof scriptExports === 'function'\n\t ? scriptExports.options\n\t : scriptExports\n\n\t // render functions\n\t if (compiledTemplate) {\n\t options.render = compiledTemplate.render\n\t options.staticRenderFns = compiledTemplate.staticRenderFns\n\t }\n\n\t // scopedId\n\t if (scopeId) {\n\t options._scopeId = scopeId\n\t }\n\n\t var hook\n\t if (moduleIdentifier) { // server build\n\t hook = function (context) {\n\t // 2.3 injection\n\t context = context || (this.$vnode && this.$vnode.ssrContext)\n\t // 2.2 with runInNewContext: true\n\t if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n\t context = __VUE_SSR_CONTEXT__\n\t }\n\t // inject component styles\n\t if (injectStyles) {\n\t injectStyles.call(this, context)\n\t }\n\t // register component module identifier for async chunk inferrence\n\t if (context && context._registeredComponents) {\n\t context._registeredComponents.add(moduleIdentifier)\n\t }\n\t }\n\t // used by ssr in case component is cached and beforeCreate\n\t // never gets called\n\t options._ssrRegister = hook\n\t } else if (injectStyles) {\n\t hook = injectStyles\n\t }\n\n\t if (hook) {\n\t // inject component registration as beforeCreate hook\n\t var existing = options.beforeCreate\n\t options.beforeCreate = existing\n\t ? [].concat(existing, hook)\n\t : [hook]\n\t }\n\n\t return {\n\t esModule: esModule,\n\t exports: scriptExports,\n\t options: options\n\t }\n\t}\n\n\n/***/ },\n\n/***/ 14:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(4);\n\n/***/ },\n\n/***/ 73:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _checkboxGroup = __webpack_require__(74);\n\n\tvar _checkboxGroup2 = _interopRequireDefault(_checkboxGroup);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_checkboxGroup2.default.install = function (Vue) {\n\t Vue.component(_checkboxGroup2.default.name, _checkboxGroup2.default);\n\t};\n\n\texports.default = _checkboxGroup2.default;\n\n/***/ },\n\n/***/ 74:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(3)(\n\t /* script */\n\t __webpack_require__(75),\n\t /* template */\n\t __webpack_require__(76),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 75:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _emitter = __webpack_require__(14);\n\n\tvar _emitter2 = _interopRequireDefault(_emitter);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElCheckboxGroup',\n\n\t componentName: 'ElCheckboxGroup',\n\n\t mixins: [_emitter2.default],\n\n\t props: {\n\t value: {},\n\t min: Number,\n\t max: Number,\n\t size: String,\n\t fill: String,\n\t textColor: String\n\t },\n\n\t watch: {\n\t value: function value(_value) {\n\t this.dispatch('ElFormItem', 'el.form.change', [_value]);\n\t }\n\t }\n\t};\n\n/***/ },\n\n/***/ 76:\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-checkbox-group\"\n\t }, [_vm._t(\"default\")], 2)\n\t},staticRenderFns: []}\n\n/***/ }\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvY2hlY2tib3gtZ3JvdXAuanM/YjM3YiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBLGlCQUFpQixtQkFBbUIsYUFBYSwwQkFBMEI7QUFDM0U7QUFDQTtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGOztBQUVBLFVBQVUiLCJmaWxlIjoiNDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuXG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG5cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKTtcblxuXG4vKioqLyB9LFxuXG4vKioqLyAzOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0LyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cblx0Ly8gdGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcblx0Ly8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGVcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG5cdCAgcmF3U2NyaXB0RXhwb3J0cyxcblx0ICBjb21waWxlZFRlbXBsYXRlLFxuXHQgIGluamVjdFN0eWxlcyxcblx0ICBzY29wZUlkLFxuXHQgIG1vZHVsZUlkZW50aWZpZXIgLyogc2VydmVyIG9ubHkgKi9cblx0KSB7XG5cdCAgdmFyIGVzTW9kdWxlXG5cdCAgdmFyIHNjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cyB8fCB7fVxuXG5cdCAgLy8gRVM2IG1vZHVsZXMgaW50ZXJvcFxuXHQgIHZhciB0eXBlID0gdHlwZW9mIHJhd1NjcmlwdEV4cG9ydHMuZGVmYXVsdFxuXHQgIGlmICh0eXBlID09PSAnb2JqZWN0JyB8fCB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICBlc01vZHVsZSA9IHJhd1NjcmlwdEV4cG9ydHNcblx0ICAgIHNjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzLmRlZmF1bHRcblx0ICB9XG5cblx0ICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG5cdCAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuXHQgICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcblx0ICAgIDogc2NyaXB0RXhwb3J0c1xuXG5cdCAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuXHQgIGlmIChjb21waWxlZFRlbXBsYXRlKSB7XG5cdCAgICBvcHRpb25zLnJlbmRlciA9IGNvbXBpbGVkVGVtcGxhdGUucmVuZGVyXG5cdCAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IGNvbXBpbGVkVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zXG5cdCAgfVxuXG5cdCAgLy8gc2NvcGVkSWRcblx0ICBpZiAoc2NvcGVJZCkge1xuXHQgICAgb3B0aW9ucy5fc2NvcGVJZCA9IHNjb3BlSWRcblx0ICB9XG5cblx0ICB2YXIgaG9va1xuXHQgIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuXHQgICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdCAgICAgIC8vIDIuMyBpbmplY3Rpb25cblx0ICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpXG5cdCAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuXHQgICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG5cdCAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cblx0ICAgICAgfVxuXHQgICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuXHQgICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG5cdCAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcblx0ICAgICAgfVxuXHQgICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2Vcblx0ICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcblx0ICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcblx0ICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG5cdCAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcblx0ICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuXHQgICAgaG9vayA9IGluamVjdFN0eWxlc1xuXHQgIH1cblxuXHQgIGlmIChob29rKSB7XG5cdCAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuXHQgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcblx0ICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3Rpbmdcblx0ICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG5cdCAgICAgIDogW2hvb2tdXG5cdCAgfVxuXG5cdCAgcmV0dXJuIHtcblx0ICAgIGVzTW9kdWxlOiBlc01vZHVsZSxcblx0ICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG5cdCAgICBvcHRpb25zOiBvcHRpb25zXG5cdCAgfVxuXHR9XG5cblxuLyoqKi8gfSxcblxuLyoqKi8gMTQ6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiKTtcblxuLyoqKi8gfSxcblxuLyoqKi8gNzM6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2NoZWNrYm94R3JvdXAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0KTtcblxuXHR2YXIgX2NoZWNrYm94R3JvdXAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY2hlY2tib3hHcm91cCk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfY2hlY2tib3hHcm91cDIuZGVmYXVsdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuXHQgIFZ1ZS5jb21wb25lbnQoX2NoZWNrYm94R3JvdXAyLmRlZmF1bHQubmFtZSwgX2NoZWNrYm94R3JvdXAyLmRlZmF1bHQpO1xuXHR9O1xuXG5cdGV4cG9ydHMuZGVmYXVsdCA9IF9jaGVja2JveEdyb3VwMi5kZWZhdWx0O1xuXG4vKioqLyB9LFxuXG4vKioqLyA3NDpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oNzUpLFxuXHQgIC8qIHRlbXBsYXRlICovXG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXyg3NiksXG5cdCAgLyogc3R5bGVzICovXG5cdCAgbnVsbCxcblx0ICAvKiBzY29wZUlkICovXG5cdCAgbnVsbCxcblx0ICAvKiBtb2R1bGVJZGVudGlmaWVyIChzZXJ2ZXIgb25seSkgKi9cblx0ICBudWxsXG5cdClcblxuXHRtb2R1bGUuZXhwb3J0cyA9IENvbXBvbmVudC5leHBvcnRzXG5cblxuLyoqKi8gfSxcblxuLyoqKi8gNzU6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2VtaXR0ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblxuXHR2YXIgX2VtaXR0ZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZW1pdHRlcik7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsQ2hlY2tib3hHcm91cCcsXG5cblx0ICBjb21wb25lbnROYW1lOiAnRWxDaGVja2JveEdyb3VwJyxcblxuXHQgIG1peGluczogW19lbWl0dGVyMi5kZWZhdWx0XSxcblxuXHQgIHByb3BzOiB7XG5cdCAgICB2YWx1ZToge30sXG5cdCAgICBtaW46IE51bWJlcixcblx0ICAgIG1heDogTnVtYmVyLFxuXHQgICAgc2l6ZTogU3RyaW5nLFxuXHQgICAgZmlsbDogU3RyaW5nLFxuXHQgICAgdGV4dENvbG9yOiBTdHJpbmdcblx0ICB9LFxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShfdmFsdWUpIHtcblx0ICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIFtfdmFsdWVdKTtcblx0ICAgIH1cblx0ICB9XG5cdH07XG5cbi8qKiovIH0sXG5cbi8qKiovIDc2OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94LWdyb3VwXCJcblx0ICB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfVxuXG4vKioqKioqLyB9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9jaGVja2JveC1ncm91cC5qc1xuLy8gbW9kdWxlIGlkID0gNDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///42\n")},function(module,exports,__webpack_require__){"use strict";eval("var __WEBPACK_AMD_DEFINE_RESULT__;\n\n/* Modified from https://github.com/taylorhakes/fecha\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 Taylor Hakes\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/*eslint-disable*/\n// 把 YYYY-MM-DD 改成了 yyyy-MM-dd\n(function (main) {\n 'use strict';\n\n /**\n * Parse or format dates\n * @class fecha\n */\n\n var fecha = {};\n var token = /d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\n var twoDigits = /\\d\\d?/;\n var threeDigits = /\\d{3}/;\n var fourDigits = /\\d{4}/;\n var word = /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\n var noop = function noop() {};\n\n function shorten(arr, sLen) {\n var newArr = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n newArr.push(arr[i].substr(0, sLen));\n }\n return newArr;\n }\n\n function monthUpdate(arrName) {\n return function (d, v, i18n) {\n var index = i18n[arrName].indexOf(v.charAt(0).toUpperCase() + v.substr(1).toLowerCase());\n if (~index) {\n d.month = index;\n }\n };\n }\n\n function pad(val, len) {\n val = String(val);\n len = len || 2;\n while (val.length < len) {\n val = '0' + val;\n }\n return val;\n }\n\n var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n var monthNamesShort = shorten(monthNames, 3);\n var dayNamesShort = shorten(dayNames, 3);\n fecha.i18n = {\n dayNamesShort: dayNamesShort,\n dayNames: dayNames,\n monthNamesShort: monthNamesShort,\n monthNames: monthNames,\n amPm: ['am', 'pm'],\n DoFn: function DoFn(D) {\n return D + ['th', 'st', 'nd', 'rd'][D % 10 > 3 ? 0 : (D - D % 10 !== 10) * D % 10];\n }\n };\n\n var formatFlags = {\n D: function D(dateObj) {\n return dateObj.getDay();\n },\n DD: function DD(dateObj) {\n return pad(dateObj.getDay());\n },\n Do: function Do(dateObj, i18n) {\n return i18n.DoFn(dateObj.getDate());\n },\n d: function d(dateObj) {\n return dateObj.getDate();\n },\n dd: function dd(dateObj) {\n return pad(dateObj.getDate());\n },\n ddd: function ddd(dateObj, i18n) {\n return i18n.dayNamesShort[dateObj.getDay()];\n },\n dddd: function dddd(dateObj, i18n) {\n return i18n.dayNames[dateObj.getDay()];\n },\n M: function M(dateObj) {\n return dateObj.getMonth() + 1;\n },\n MM: function MM(dateObj) {\n return pad(dateObj.getMonth() + 1);\n },\n MMM: function MMM(dateObj, i18n) {\n return i18n.monthNamesShort[dateObj.getMonth()];\n },\n MMMM: function MMMM(dateObj, i18n) {\n return i18n.monthNames[dateObj.getMonth()];\n },\n yy: function yy(dateObj) {\n return String(dateObj.getFullYear()).substr(2);\n },\n yyyy: function yyyy(dateObj) {\n return dateObj.getFullYear();\n },\n h: function h(dateObj) {\n return dateObj.getHours() % 12 || 12;\n },\n hh: function hh(dateObj) {\n return pad(dateObj.getHours() % 12 || 12);\n },\n H: function H(dateObj) {\n return dateObj.getHours();\n },\n HH: function HH(dateObj) {\n return pad(dateObj.getHours());\n },\n m: function m(dateObj) {\n return dateObj.getMinutes();\n },\n mm: function mm(dateObj) {\n return pad(dateObj.getMinutes());\n },\n s: function s(dateObj) {\n return dateObj.getSeconds();\n },\n ss: function ss(dateObj) {\n return pad(dateObj.getSeconds());\n },\n S: function S(dateObj) {\n return Math.round(dateObj.getMilliseconds() / 100);\n },\n SS: function SS(dateObj) {\n return pad(Math.round(dateObj.getMilliseconds() / 10), 2);\n },\n SSS: function SSS(dateObj) {\n return pad(dateObj.getMilliseconds(), 3);\n },\n a: function a(dateObj, i18n) {\n return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];\n },\n A: function A(dateObj, i18n) {\n return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();\n },\n ZZ: function ZZ(dateObj) {\n var o = dateObj.getTimezoneOffset();\n return (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4);\n }\n };\n\n var parseFlags = {\n d: [twoDigits, function (d, v) {\n d.day = v;\n }],\n M: [twoDigits, function (d, v) {\n d.month = v - 1;\n }],\n yy: [twoDigits, function (d, v) {\n var da = new Date(),\n cent = +('' + da.getFullYear()).substr(0, 2);\n d.year = '' + (v > 68 ? cent - 1 : cent) + v;\n }],\n h: [twoDigits, function (d, v) {\n d.hour = v;\n }],\n m: [twoDigits, function (d, v) {\n d.minute = v;\n }],\n s: [twoDigits, function (d, v) {\n d.second = v;\n }],\n yyyy: [fourDigits, function (d, v) {\n d.year = v;\n }],\n S: [/\\d/, function (d, v) {\n d.millisecond = v * 100;\n }],\n SS: [/\\d{2}/, function (d, v) {\n d.millisecond = v * 10;\n }],\n SSS: [threeDigits, function (d, v) {\n d.millisecond = v;\n }],\n D: [twoDigits, noop],\n ddd: [word, noop],\n MMM: [word, monthUpdate('monthNamesShort')],\n MMMM: [word, monthUpdate('monthNames')],\n a: [word, function (d, v, i18n) {\n var val = v.toLowerCase();\n if (val === i18n.amPm[0]) {\n d.isPm = false;\n } else if (val === i18n.amPm[1]) {\n d.isPm = true;\n }\n }],\n ZZ: [/[\\+\\-]\\d\\d:?\\d\\d/, function (d, v) {\n var parts = (v + '').match(/([\\+\\-]|\\d\\d)/gi),\n minutes;\n\n if (parts) {\n minutes = +(parts[1] * 60) + parseInt(parts[2], 10);\n d.timezoneOffset = parts[0] === '+' ? minutes : -minutes;\n }\n }]\n };\n parseFlags.DD = parseFlags.D;\n parseFlags.dddd = parseFlags.ddd;\n parseFlags.Do = parseFlags.dd = parseFlags.d;\n parseFlags.mm = parseFlags.m;\n parseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h;\n parseFlags.MM = parseFlags.M;\n parseFlags.ss = parseFlags.s;\n parseFlags.A = parseFlags.a;\n\n // Some common format strings\n fecha.masks = {\n 'default': 'ddd MMM dd yyyy HH:mm:ss',\n shortDate: 'M/D/yy',\n mediumDate: 'MMM d, yyyy',\n longDate: 'MMMM d, yyyy',\n fullDate: 'dddd, MMMM d, yyyy',\n shortTime: 'HH:mm',\n mediumTime: 'HH:mm:ss',\n longTime: 'HH:mm:ss.SSS'\n };\n\n /***\n * Format a date\n * @method format\n * @param {Date|number} dateObj\n * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'\n */\n fecha.format = function (dateObj, mask, i18nSettings) {\n var i18n = i18nSettings || fecha.i18n;\n\n if (typeof dateObj === 'number') {\n dateObj = new Date(dateObj);\n }\n\n if (Object.prototype.toString.call(dateObj) !== '[object Date]' || isNaN(dateObj.getTime())) {\n throw new Error('Invalid Date in fecha.format');\n }\n\n mask = fecha.masks[mask] || mask || fecha.masks['default'];\n\n return mask.replace(token, function ($0) {\n return $0 in formatFlags ? formatFlags[$0](dateObj, i18n) : $0.slice(1, $0.length - 1);\n });\n };\n\n /**\n * Parse a date string into an object, changes - into /\n * @method parse\n * @param {string} dateStr Date string\n * @param {string} format Date parse format\n * @returns {Date|boolean}\n */\n fecha.parse = function (dateStr, format, i18nSettings) {\n var i18n = i18nSettings || fecha.i18n;\n\n if (typeof format !== 'string') {\n throw new Error('Invalid format in fecha.parse');\n }\n\n format = fecha.masks[format] || format;\n\n // Avoid regular expression denial of service, fail early for really long strings\n // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS\n if (dateStr.length > 1000) {\n return false;\n }\n\n var isValid = true;\n var dateInfo = {};\n format.replace(token, function ($0) {\n if (parseFlags[$0]) {\n var info = parseFlags[$0];\n var index = dateStr.search(info[0]);\n if (!~index) {\n isValid = false;\n } else {\n dateStr.replace(info[0], function (result) {\n info[1](dateInfo, result, i18n);\n dateStr = dateStr.substr(index + result.length);\n return result;\n });\n }\n }\n\n return parseFlags[$0] ? '' : $0.slice(1, $0.length - 1);\n });\n\n if (!isValid) {\n return false;\n }\n\n var today = new Date();\n if (dateInfo.isPm === true && dateInfo.hour != null && +dateInfo.hour !== 12) {\n dateInfo.hour = +dateInfo.hour + 12;\n } else if (dateInfo.isPm === false && +dateInfo.hour === 12) {\n dateInfo.hour = 0;\n }\n\n var date;\n if (dateInfo.timezoneOffset != null) {\n dateInfo.minute = +(dateInfo.minute || 0) - +dateInfo.timezoneOffset;\n date = new Date(Date.UTC(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1, dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0));\n } else {\n date = new Date(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1, dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0);\n }\n return date;\n };\n\n /* istanbul ignore next */\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = fecha;\n } else if (true) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = function () {\n return fecha;\n }.call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {\n main.fecha = fecha;\n }\n})(undefined);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvZGF0ZS5qcz83OGQ3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJrQ0FBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsSUFBSSxHQUFHLElBQUksYUFBYSxJQUFJO0FBQzdDO0FBQ0Esd0JBQXdCLEVBQUU7QUFDMUIsdUJBQXVCLEVBQUU7QUFDekIseUhBQXlILElBQUk7QUFDN0g7O0FBRUE7QUFDQTtBQUNBLHFDQUFxQyxTQUFTO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLGFBQWEsRUFBRTtBQUNmO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFlBQVk7QUFDekIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsT0FBTztBQUNwQixlQUFlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUFBO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6IjQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiBNb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS90YXlsb3JoYWtlcy9mZWNoYVxuICpcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUYXlsb3IgSGFrZXNcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiAgICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG4vKmVzbGludC1kaXNhYmxlKi9cbi8vIOaKiiBZWVlZLU1NLUREIOaUueaIkOS6hiB5eXl5LU1NLWRkXG4oZnVuY3Rpb24gKG1haW4pIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiBQYXJzZSBvciBmb3JtYXQgZGF0ZXNcbiAgICogQGNsYXNzIGZlY2hhXG4gICAqL1xuXG4gIHZhciBmZWNoYSA9IHt9O1xuICB2YXIgdG9rZW4gPSAvZHsxLDR9fE17MSw0fXx5eSg/Onl5KT98U3sxLDN9fERvfFpafChbSGhNc0RtXSlcXDE/fFthQV18XCJbXlwiXSpcInwnW14nXSonL2c7XG4gIHZhciB0d29EaWdpdHMgPSAvXFxkXFxkPy87XG4gIHZhciB0aHJlZURpZ2l0cyA9IC9cXGR7M30vO1xuICB2YXIgZm91ckRpZ2l0cyA9IC9cXGR7NH0vO1xuICB2YXIgd29yZCA9IC9bMC05XSpbJ2EtelxcdTAwQTAtXFx1MDVGRlxcdTA3MDAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0rfFtcXHUwNjAwLVxcdTA2RkZcXC9dKyhcXHMqP1tcXHUwNjAwLVxcdTA2RkZdKyl7MSwyfS9pO1xuICB2YXIgbm9vcCA9IGZ1bmN0aW9uIG5vb3AoKSB7fTtcblxuICBmdW5jdGlvbiBzaG9ydGVuKGFyciwgc0xlbikge1xuICAgIHZhciBuZXdBcnIgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBuZXdBcnIucHVzaChhcnJbaV0uc3Vic3RyKDAsIHNMZW4pKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0FycjtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1vbnRoVXBkYXRlKGFyck5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIHYsIGkxOG4pIHtcbiAgICAgIHZhciBpbmRleCA9IGkxOG5bYXJyTmFtZV0uaW5kZXhPZih2LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdi5zdWJzdHIoMSkudG9Mb3dlckNhc2UoKSk7XG4gICAgICBpZiAofmluZGV4KSB7XG4gICAgICAgIGQubW9udGggPSBpbmRleDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFkKHZhbCwgbGVuKSB7XG4gICAgdmFsID0gU3RyaW5nKHZhbCk7XG4gICAgbGVuID0gbGVuIHx8IDI7XG4gICAgd2hpbGUgKHZhbC5sZW5ndGggPCBsZW4pIHtcbiAgICAgIHZhbCA9ICcwJyArIHZhbDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIHZhciBkYXlOYW1lcyA9IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXTtcbiAgdmFyIG1vbnRoTmFtZXMgPSBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXTtcbiAgdmFyIG1vbnRoTmFtZXNTaG9ydCA9IHNob3J0ZW4obW9udGhOYW1lcywgMyk7XG4gIHZhciBkYXlOYW1lc1Nob3J0ID0gc2hvcnRlbihkYXlOYW1lcywgMyk7XG4gIGZlY2hhLmkxOG4gPSB7XG4gICAgZGF5TmFtZXNTaG9ydDogZGF5TmFtZXNTaG9ydCxcbiAgICBkYXlOYW1lczogZGF5TmFtZXMsXG4gICAgbW9udGhOYW1lc1Nob3J0OiBtb250aE5hbWVzU2hvcnQsXG4gICAgbW9udGhOYW1lczogbW9udGhOYW1lcyxcbiAgICBhbVBtOiBbJ2FtJywgJ3BtJ10sXG4gICAgRG9GbjogZnVuY3Rpb24gRG9GbihEKSB7XG4gICAgICByZXR1cm4gRCArIFsndGgnLCAnc3QnLCAnbmQnLCAncmQnXVtEICUgMTAgPiAzID8gMCA6IChEIC0gRCAlIDEwICE9PSAxMCkgKiBEICUgMTBdO1xuICAgIH1cbiAgfTtcblxuICB2YXIgZm9ybWF0RmxhZ3MgPSB7XG4gICAgRDogZnVuY3Rpb24gRChkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gZGF0ZU9iai5nZXREYXkoKTtcbiAgICB9LFxuICAgIEREOiBmdW5jdGlvbiBERChkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gcGFkKGRhdGVPYmouZ2V0RGF5KCkpO1xuICAgIH0sXG4gICAgRG86IGZ1bmN0aW9uIERvKGRhdGVPYmosIGkxOG4pIHtcbiAgICAgIHJldHVybiBpMThuLkRvRm4oZGF0ZU9iai5nZXREYXRlKCkpO1xuICAgIH0sXG4gICAgZDogZnVuY3Rpb24gZChkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gZGF0ZU9iai5nZXREYXRlKCk7XG4gICAgfSxcbiAgICBkZDogZnVuY3Rpb24gZGQoZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIHBhZChkYXRlT2JqLmdldERhdGUoKSk7XG4gICAgfSxcbiAgICBkZGQ6IGZ1bmN0aW9uIGRkZChkYXRlT2JqLCBpMThuKSB7XG4gICAgICByZXR1cm4gaTE4bi5kYXlOYW1lc1Nob3J0W2RhdGVPYmouZ2V0RGF5KCldO1xuICAgIH0sXG4gICAgZGRkZDogZnVuY3Rpb24gZGRkZChkYXRlT2JqLCBpMThuKSB7XG4gICAgICByZXR1cm4gaTE4bi5kYXlOYW1lc1tkYXRlT2JqLmdldERheSgpXTtcbiAgICB9LFxuICAgIE06IGZ1bmN0aW9uIE0oZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIGRhdGVPYmouZ2V0TW9udGgoKSArIDE7XG4gICAgfSxcbiAgICBNTTogZnVuY3Rpb24gTU0oZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIHBhZChkYXRlT2JqLmdldE1vbnRoKCkgKyAxKTtcbiAgICB9LFxuICAgIE1NTTogZnVuY3Rpb24gTU1NKGRhdGVPYmosIGkxOG4pIHtcbiAgICAgIHJldHVybiBpMThuLm1vbnRoTmFtZXNTaG9ydFtkYXRlT2JqLmdldE1vbnRoKCldO1xuICAgIH0sXG4gICAgTU1NTTogZnVuY3Rpb24gTU1NTShkYXRlT2JqLCBpMThuKSB7XG4gICAgICByZXR1cm4gaTE4bi5tb250aE5hbWVzW2RhdGVPYmouZ2V0TW9udGgoKV07XG4gICAgfSxcbiAgICB5eTogZnVuY3Rpb24geXkoZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIFN0cmluZyhkYXRlT2JqLmdldEZ1bGxZZWFyKCkpLnN1YnN0cigyKTtcbiAgICB9LFxuICAgIHl5eXk6IGZ1bmN0aW9uIHl5eXkoZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIGRhdGVPYmouZ2V0RnVsbFllYXIoKTtcbiAgICB9LFxuICAgIGg6IGZ1bmN0aW9uIGgoZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIGRhdGVPYmouZ2V0SG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH0sXG4gICAgaGg6IGZ1bmN0aW9uIGhoKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBwYWQoZGF0ZU9iai5nZXRIb3VycygpICUgMTIgfHwgMTIpO1xuICAgIH0sXG4gICAgSDogZnVuY3Rpb24gSChkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gZGF0ZU9iai5nZXRIb3VycygpO1xuICAgIH0sXG4gICAgSEg6IGZ1bmN0aW9uIEhIKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBwYWQoZGF0ZU9iai5nZXRIb3VycygpKTtcbiAgICB9LFxuICAgIG06IGZ1bmN0aW9uIG0oZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIGRhdGVPYmouZ2V0TWludXRlcygpO1xuICAgIH0sXG4gICAgbW06IGZ1bmN0aW9uIG1tKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBwYWQoZGF0ZU9iai5nZXRNaW51dGVzKCkpO1xuICAgIH0sXG4gICAgczogZnVuY3Rpb24gcyhkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gZGF0ZU9iai5nZXRTZWNvbmRzKCk7XG4gICAgfSxcbiAgICBzczogZnVuY3Rpb24gc3MoZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIHBhZChkYXRlT2JqLmdldFNlY29uZHMoKSk7XG4gICAgfSxcbiAgICBTOiBmdW5jdGlvbiBTKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKGRhdGVPYmouZ2V0TWlsbGlzZWNvbmRzKCkgLyAxMDApO1xuICAgIH0sXG4gICAgU1M6IGZ1bmN0aW9uIFNTKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBwYWQoTWF0aC5yb3VuZChkYXRlT2JqLmdldE1pbGxpc2Vjb25kcygpIC8gMTApLCAyKTtcbiAgICB9LFxuICAgIFNTUzogZnVuY3Rpb24gU1NTKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBwYWQoZGF0ZU9iai5nZXRNaWxsaXNlY29uZHMoKSwgMyk7XG4gICAgfSxcbiAgICBhOiBmdW5jdGlvbiBhKGRhdGVPYmosIGkxOG4pIHtcbiAgICAgIHJldHVybiBkYXRlT2JqLmdldEhvdXJzKCkgPCAxMiA/IGkxOG4uYW1QbVswXSA6IGkxOG4uYW1QbVsxXTtcbiAgICB9LFxuICAgIEE6IGZ1bmN0aW9uIEEoZGF0ZU9iaiwgaTE4bikge1xuICAgICAgcmV0dXJuIGRhdGVPYmouZ2V0SG91cnMoKSA8IDEyID8gaTE4bi5hbVBtWzBdLnRvVXBwZXJDYXNlKCkgOiBpMThuLmFtUG1bMV0udG9VcHBlckNhc2UoKTtcbiAgICB9LFxuICAgIFpaOiBmdW5jdGlvbiBaWihkYXRlT2JqKSB7XG4gICAgICB2YXIgbyA9IGRhdGVPYmouZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgIHJldHVybiAobyA+IDAgPyAnLScgOiAnKycpICsgcGFkKE1hdGguZmxvb3IoTWF0aC5hYnMobykgLyA2MCkgKiAxMDAgKyBNYXRoLmFicyhvKSAlIDYwLCA0KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBhcnNlRmxhZ3MgPSB7XG4gICAgZDogW3R3b0RpZ2l0cywgZnVuY3Rpb24gKGQsIHYpIHtcbiAgICAgIGQuZGF5ID0gdjtcbiAgICB9XSxcbiAgICBNOiBbdHdvRGlnaXRzLCBmdW5jdGlvbiAoZCwgdikge1xuICAgICAgZC5tb250aCA9IHYgLSAxO1xuICAgIH1dLFxuICAgIHl5OiBbdHdvRGlnaXRzLCBmdW5jdGlvbiAoZCwgdikge1xuICAgICAgdmFyIGRhID0gbmV3IERhdGUoKSxcbiAgICAgICAgICBjZW50ID0gKygnJyArIGRhLmdldEZ1bGxZZWFyKCkpLnN1YnN0cigwLCAyKTtcbiAgICAgIGQueWVhciA9ICcnICsgKHYgPiA2OCA/IGNlbnQgLSAxIDogY2VudCkgKyB2O1xuICAgIH1dLFxuICAgIGg6IFt0d29EaWdpdHMsIGZ1bmN0aW9uIChkLCB2KSB7XG4gICAgICBkLmhvdXIgPSB2O1xuICAgIH1dLFxuICAgIG06IFt0d29EaWdpdHMsIGZ1bmN0aW9uIChkLCB2KSB7XG4gICAgICBkLm1pbnV0ZSA9IHY7XG4gICAgfV0sXG4gICAgczogW3R3b0RpZ2l0cywgZnVuY3Rpb24gKGQsIHYpIHtcbiAgICAgIGQuc2Vjb25kID0gdjtcbiAgICB9XSxcbiAgICB5eXl5OiBbZm91ckRpZ2l0cywgZnVuY3Rpb24gKGQsIHYpIHtcbiAgICAgIGQueWVhciA9IHY7XG4gICAgfV0sXG4gICAgUzogWy9cXGQvLCBmdW5jdGlvbiAoZCwgdikge1xuICAgICAgZC5taWxsaXNlY29uZCA9IHYgKiAxMDA7XG4gICAgfV0sXG4gICAgU1M6IFsvXFxkezJ9LywgZnVuY3Rpb24gKGQsIHYpIHtcbiAgICAgIGQubWlsbGlzZWNvbmQgPSB2ICogMTA7XG4gICAgfV0sXG4gICAgU1NTOiBbdGhyZWVEaWdpdHMsIGZ1bmN0aW9uIChkLCB2KSB7XG4gICAgICBkLm1pbGxpc2Vjb25kID0gdjtcbiAgICB9XSxcbiAgICBEOiBbdHdvRGlnaXRzLCBub29wXSxcbiAgICBkZGQ6IFt3b3JkLCBub29wXSxcbiAgICBNTU06IFt3b3JkLCBtb250aFVwZGF0ZSgnbW9udGhOYW1lc1Nob3J0JyldLFxuICAgIE1NTU06IFt3b3JkLCBtb250aFVwZGF0ZSgnbW9udGhOYW1lcycpXSxcbiAgICBhOiBbd29yZCwgZnVuY3Rpb24gKGQsIHYsIGkxOG4pIHtcbiAgICAgIHZhciB2YWwgPSB2LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodmFsID09PSBpMThuLmFtUG1bMF0pIHtcbiAgICAgICAgZC5pc1BtID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHZhbCA9PT0gaTE4bi5hbVBtWzFdKSB7XG4gICAgICAgIGQuaXNQbSA9IHRydWU7XG4gICAgICB9XG4gICAgfV0sXG4gICAgWlo6IFsvW1xcK1xcLV1cXGRcXGQ6P1xcZFxcZC8sIGZ1bmN0aW9uIChkLCB2KSB7XG4gICAgICB2YXIgcGFydHMgPSAodiArICcnKS5tYXRjaCgvKFtcXCtcXC1dfFxcZFxcZCkvZ2kpLFxuICAgICAgICAgIG1pbnV0ZXM7XG5cbiAgICAgIGlmIChwYXJ0cykge1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHBhcnNlSW50KHBhcnRzWzJdLCAxMCk7XG4gICAgICAgIGQudGltZXpvbmVPZmZzZXQgPSBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgICAgfVxuICAgIH1dXG4gIH07XG4gIHBhcnNlRmxhZ3MuREQgPSBwYXJzZUZsYWdzLkQ7XG4gIHBhcnNlRmxhZ3MuZGRkZCA9IHBhcnNlRmxhZ3MuZGRkO1xuICBwYXJzZUZsYWdzLkRvID0gcGFyc2VGbGFncy5kZCA9IHBhcnNlRmxhZ3MuZDtcbiAgcGFyc2VGbGFncy5tbSA9IHBhcnNlRmxhZ3MubTtcbiAgcGFyc2VGbGFncy5oaCA9IHBhcnNlRmxhZ3MuSCA9IHBhcnNlRmxhZ3MuSEggPSBwYXJzZUZsYWdzLmg7XG4gIHBhcnNlRmxhZ3MuTU0gPSBwYXJzZUZsYWdzLk07XG4gIHBhcnNlRmxhZ3Muc3MgPSBwYXJzZUZsYWdzLnM7XG4gIHBhcnNlRmxhZ3MuQSA9IHBhcnNlRmxhZ3MuYTtcblxuICAvLyBTb21lIGNvbW1vbiBmb3JtYXQgc3RyaW5nc1xuICBmZWNoYS5tYXNrcyA9IHtcbiAgICAnZGVmYXVsdCc6ICdkZGQgTU1NIGRkIHl5eXkgSEg6bW06c3MnLFxuICAgIHNob3J0RGF0ZTogJ00vRC95eScsXG4gICAgbWVkaXVtRGF0ZTogJ01NTSBkLCB5eXl5JyxcbiAgICBsb25nRGF0ZTogJ01NTU0gZCwgeXl5eScsXG4gICAgZnVsbERhdGU6ICdkZGRkLCBNTU1NIGQsIHl5eXknLFxuICAgIHNob3J0VGltZTogJ0hIOm1tJyxcbiAgICBtZWRpdW1UaW1lOiAnSEg6bW06c3MnLFxuICAgIGxvbmdUaW1lOiAnSEg6bW06c3MuU1NTJ1xuICB9O1xuXG4gIC8qKipcbiAgICogRm9ybWF0IGEgZGF0ZVxuICAgKiBAbWV0aG9kIGZvcm1hdFxuICAgKiBAcGFyYW0ge0RhdGV8bnVtYmVyfSBkYXRlT2JqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXNrIEZvcm1hdCBvZiB0aGUgZGF0ZSwgaS5lLiAnbW0tZGQteXknIG9yICdzaG9ydERhdGUnXG4gICAqL1xuICBmZWNoYS5mb3JtYXQgPSBmdW5jdGlvbiAoZGF0ZU9iaiwgbWFzaywgaTE4blNldHRpbmdzKSB7XG4gICAgdmFyIGkxOG4gPSBpMThuU2V0dGluZ3MgfHwgZmVjaGEuaTE4bjtcblxuICAgIGlmICh0eXBlb2YgZGF0ZU9iaiA9PT0gJ251bWJlcicpIHtcbiAgICAgIGRhdGVPYmogPSBuZXcgRGF0ZShkYXRlT2JqKTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGVPYmopICE9PSAnW29iamVjdCBEYXRlXScgfHwgaXNOYU4oZGF0ZU9iai5nZXRUaW1lKCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgRGF0ZSBpbiBmZWNoYS5mb3JtYXQnKTtcbiAgICB9XG5cbiAgICBtYXNrID0gZmVjaGEubWFza3NbbWFza10gfHwgbWFzayB8fCBmZWNoYS5tYXNrc1snZGVmYXVsdCddO1xuXG4gICAgcmV0dXJuIG1hc2sucmVwbGFjZSh0b2tlbiwgZnVuY3Rpb24gKCQwKSB7XG4gICAgICByZXR1cm4gJDAgaW4gZm9ybWF0RmxhZ3MgPyBmb3JtYXRGbGFnc1skMF0oZGF0ZU9iaiwgaTE4bikgOiAkMC5zbGljZSgxLCAkMC5sZW5ndGggLSAxKTtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2UgYSBkYXRlIHN0cmluZyBpbnRvIGFuIG9iamVjdCwgY2hhbmdlcyAtIGludG8gL1xuICAgKiBAbWV0aG9kIHBhcnNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkYXRlU3RyIERhdGUgc3RyaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgRGF0ZSBwYXJzZSBmb3JtYXRcbiAgICogQHJldHVybnMge0RhdGV8Ym9vbGVhbn1cbiAgICovXG4gIGZlY2hhLnBhcnNlID0gZnVuY3Rpb24gKGRhdGVTdHIsIGZvcm1hdCwgaTE4blNldHRpbmdzKSB7XG4gICAgdmFyIGkxOG4gPSBpMThuU2V0dGluZ3MgfHwgZmVjaGEuaTE4bjtcblxuICAgIGlmICh0eXBlb2YgZm9ybWF0ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZvcm1hdCBpbiBmZWNoYS5wYXJzZScpO1xuICAgIH1cblxuICAgIGZvcm1hdCA9IGZlY2hhLm1hc2tzW2Zvcm1hdF0gfHwgZm9ybWF0O1xuXG4gICAgLy8gQXZvaWQgcmVndWxhciBleHByZXNzaW9uIGRlbmlhbCBvZiBzZXJ2aWNlLCBmYWlsIGVhcmx5IGZvciByZWFsbHkgbG9uZyBzdHJpbmdzXG4gICAgLy8gaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9SZWd1bGFyX2V4cHJlc3Npb25fRGVuaWFsX29mX1NlcnZpY2VfLV9SZURvU1xuICAgIGlmIChkYXRlU3RyLmxlbmd0aCA+IDEwMDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgaXNWYWxpZCA9IHRydWU7XG4gICAgdmFyIGRhdGVJbmZvID0ge307XG4gICAgZm9ybWF0LnJlcGxhY2UodG9rZW4sIGZ1bmN0aW9uICgkMCkge1xuICAgICAgaWYgKHBhcnNlRmxhZ3NbJDBdKSB7XG4gICAgICAgIHZhciBpbmZvID0gcGFyc2VGbGFnc1skMF07XG4gICAgICAgIHZhciBpbmRleCA9IGRhdGVTdHIuc2VhcmNoKGluZm9bMF0pO1xuICAgICAgICBpZiAoIX5pbmRleCkge1xuICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRlU3RyLnJlcGxhY2UoaW5mb1swXSwgZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaW5mb1sxXShkYXRlSW5mbywgcmVzdWx0LCBpMThuKTtcbiAgICAgICAgICAgIGRhdGVTdHIgPSBkYXRlU3RyLnN1YnN0cihpbmRleCArIHJlc3VsdC5sZW5ndGgpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VGbGFnc1skMF0gPyAnJyA6ICQwLnNsaWNlKDEsICQwLmxlbmd0aCAtIDEpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBpZiAoZGF0ZUluZm8uaXNQbSA9PT0gdHJ1ZSAmJiBkYXRlSW5mby5ob3VyICE9IG51bGwgJiYgK2RhdGVJbmZvLmhvdXIgIT09IDEyKSB7XG4gICAgICBkYXRlSW5mby5ob3VyID0gK2RhdGVJbmZvLmhvdXIgKyAxMjtcbiAgICB9IGVsc2UgaWYgKGRhdGVJbmZvLmlzUG0gPT09IGZhbHNlICYmICtkYXRlSW5mby5ob3VyID09PSAxMikge1xuICAgICAgZGF0ZUluZm8uaG91ciA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGRhdGU7XG4gICAgaWYgKGRhdGVJbmZvLnRpbWV6b25lT2Zmc2V0ICE9IG51bGwpIHtcbiAgICAgIGRhdGVJbmZvLm1pbnV0ZSA9ICsoZGF0ZUluZm8ubWludXRlIHx8IDApIC0gK2RhdGVJbmZvLnRpbWV6b25lT2Zmc2V0O1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKGRhdGVJbmZvLnllYXIgfHwgdG9kYXkuZ2V0RnVsbFllYXIoKSwgZGF0ZUluZm8ubW9udGggfHwgMCwgZGF0ZUluZm8uZGF5IHx8IDEsIGRhdGVJbmZvLmhvdXIgfHwgMCwgZGF0ZUluZm8ubWludXRlIHx8IDAsIGRhdGVJbmZvLnNlY29uZCB8fCAwLCBkYXRlSW5mby5taWxsaXNlY29uZCB8fCAwKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlSW5mby55ZWFyIHx8IHRvZGF5LmdldEZ1bGxZZWFyKCksIGRhdGVJbmZvLm1vbnRoIHx8IDAsIGRhdGVJbmZvLmRheSB8fCAxLCBkYXRlSW5mby5ob3VyIHx8IDAsIGRhdGVJbmZvLm1pbnV0ZSB8fCAwLCBkYXRlSW5mby5zZWNvbmQgfHwgMCwgZGF0ZUluZm8ubWlsbGlzZWNvbmQgfHwgMCk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuICB9O1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmVjaGE7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmZWNoYTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBtYWluLmZlY2hhID0gZmVjaGE7XG4gIH1cbn0pKHVuZGVmaW5lZCk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvZGF0ZS5qc1xuLy8gbW9kdWxlIGlkID0gNDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///43\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || 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; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _util = __webpack_require__(0);\n\nvar _validator = __webpack_require__(45);\n\nvar _validator2 = _interopRequireDefault(_validator);\n\nvar _messages2 = __webpack_require__(64);\n\nvar _rule = __webpack_require__(1);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/**\n * Encapsulates a validation schema.\n *\n * @param descriptor An object declaring validation rules\n * for this schema.\n */\nfunction Schema(descriptor) {\n this.rules = null;\n this._messages = _messages2.messages;\n this.define(descriptor);\n}\n\nSchema.prototype = {\n messages: function messages(_messages) {\n if (_messages) {\n this._messages = (0, _util.deepMerge)((0, _messages2.newMessages)(), _messages);\n }\n return this._messages;\n },\n define: function define(rules) {\n if (!rules) {\n throw new Error('Cannot configure a schema with no rules');\n }\n if ((typeof rules === 'undefined' ? 'undefined' : _typeof(rules)) !== 'object' || Array.isArray(rules)) {\n throw new Error('Rules must be an object');\n }\n this.rules = {};\n var z = void 0;\n var item = void 0;\n for (z in rules) {\n if (rules.hasOwnProperty(z)) {\n item = rules[z];\n this.rules[z] = Array.isArray(item) ? item : [item];\n }\n }\n },\n validate: function validate(source_) {\n var _this = this;\n\n var o = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var oc = arguments[2];\n\n var source = source_;\n var options = o;\n var callback = oc;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!this.rules || Object.keys(this.rules).length === 0) {\n if (callback) {\n callback();\n }\n return;\n }\n function complete(results) {\n var i = void 0;\n var field = void 0;\n var errors = [];\n var fields = {};\n\n function add(e) {\n if (Array.isArray(e)) {\n errors = errors.concat.apply(errors, e);\n } else {\n errors.push(e);\n }\n }\n\n for (i = 0; i < results.length; i++) {\n add(results[i]);\n }\n if (!errors.length) {\n errors = null;\n fields = null;\n } else {\n for (i = 0; i < errors.length; i++) {\n field = errors[i].field;\n fields[field] = fields[field] || [];\n fields[field].push(errors[i]);\n }\n }\n callback(errors, fields);\n }\n\n if (options.messages) {\n var messages = this.messages();\n if (messages === _messages2.messages) {\n messages = (0, _messages2.newMessages)();\n }\n (0, _util.deepMerge)(messages, options.messages);\n options.messages = messages;\n } else {\n options.messages = this.messages();\n }\n\n options.error = _rule.error;\n var arr = void 0;\n var value = void 0;\n var series = {};\n var keys = options.keys || Object.keys(this.rules);\n keys.forEach(function (z) {\n arr = _this.rules[z];\n value = source[z];\n arr.forEach(function (r) {\n var rule = r;\n if (typeof rule.transform === 'function') {\n if (source === source_) {\n source = _extends({}, source);\n }\n value = source[z] = rule.transform(value);\n }\n if (typeof rule === 'function') {\n rule = {\n validator: rule\n };\n } else {\n rule = _extends({}, rule);\n }\n rule.validator = _this.getValidationMethod(rule);\n rule.field = z;\n rule.fullField = rule.fullField || z;\n rule.type = _this.getType(rule);\n if (!rule.validator) {\n return;\n }\n series[z] = series[z] || [];\n series[z].push({\n rule: rule,\n value: value,\n source: source,\n field: z\n });\n });\n });\n var errorFields = {};\n (0, _util.asyncMap)(series, options, function (data, doIt) {\n var rule = data.rule;\n var deep = (rule.type === 'object' || rule.type === 'array') && (_typeof(rule.fields) === 'object' || _typeof(rule.defaultField) === 'object');\n deep = deep && (rule.required || !rule.required && data.value);\n rule.field = data.field;\n function addFullfield(key, schema) {\n return _extends({}, schema, {\n fullField: rule.fullField + '.' + key\n });\n }\n\n function cb() {\n var e = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n var errors = e;\n if (!Array.isArray(errors)) {\n errors = [errors];\n }\n if (errors.length) {\n (0, _util.warning)('async-validator:', errors);\n }\n if (errors.length && rule.message) {\n errors = [].concat(rule.message);\n }\n\n errors = errors.map((0, _util.complementError)(rule));\n\n if ((options.first || options.fieldFirst) && errors.length) {\n errorFields[rule.field] = 1;\n return doIt(errors);\n }\n if (!deep) {\n doIt(errors);\n } else {\n // if rule is required but the target object\n // does not exist fail at the rule level and don't\n // go deeper\n if (rule.required && !data.value) {\n if (rule.message) {\n errors = [].concat(rule.message).map((0, _util.complementError)(rule));\n } else {\n errors = [options.error(rule, (0, _util.format)(options.messages.required, rule.field))];\n }\n return doIt(errors);\n }\n\n var fieldsSchema = {};\n if (rule.defaultField) {\n for (var k in data.value) {\n if (data.value.hasOwnProperty(k)) {\n fieldsSchema[k] = rule.defaultField;\n }\n }\n }\n fieldsSchema = _extends({}, fieldsSchema, data.rule.fields);\n for (var f in fieldsSchema) {\n if (fieldsSchema.hasOwnProperty(f)) {\n var fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]];\n fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));\n }\n }\n var schema = new Schema(fieldsSchema);\n schema.messages(options.messages);\n if (data.rule.options) {\n data.rule.options.messages = options.messages;\n data.rule.options.error = options.error;\n }\n schema.validate(data.value, data.rule.options || options, function (errs) {\n doIt(errs && errs.length ? errors.concat(errs) : errs);\n });\n }\n }\n\n rule.validator(rule, data.value, cb, data.source, options);\n }, function (results) {\n complete(results);\n });\n },\n getType: function getType(rule) {\n if (rule.type === undefined && rule.pattern instanceof RegExp) {\n rule.type = 'pattern';\n }\n if (typeof rule.validator !== 'function' && rule.type && !_validator2[\"default\"].hasOwnProperty(rule.type)) {\n throw new Error((0, _util.format)('Unknown rule type %s', rule.type));\n }\n return rule.type || 'string';\n },\n getValidationMethod: function getValidationMethod(rule) {\n if (typeof rule.validator === 'function') {\n return rule.validator;\n }\n var keys = Object.keys(rule);\n var messageIndex = keys.indexOf('message');\n if (messageIndex !== -1) {\n keys.splice(messageIndex, 1);\n }\n if (keys.length === 1 && keys[0] === 'required') {\n return _validator2[\"default\"].required;\n }\n return _validator2[\"default\"][this.getType(rule)] || false;\n }\n};\n\nSchema.register = function register(type, validator) {\n if (typeof validator !== 'function') {\n throw new Error('Cannot register a validator by type, validator is not a function');\n }\n _validator2[\"default\"][type] = validator;\n};\n\nSchema.messages = _messages2.messages;\n\nexports[\"default\"] = Schema;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi9pbmRleC5qcz8wODM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG1EQUFtRCxnQkFBZ0Isc0JBQXNCLE9BQU8sMkJBQTJCLDBCQUEwQix5REFBeUQsMkJBQTJCLEVBQUUsRUFBRSxFQUFFLGVBQWU7O0FBRTlQLG9HQUFvRyxtQkFBbUIsRUFBRSxtQkFBbUIsOEhBQThIOztBQUUxUTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixvQkFBb0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxtQkFBbUIsbUJBQW1CO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULDRCQUE0QjtBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSIsImZpbGUiOiI0NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxudmFyIF92YWxpZGF0b3IgPSByZXF1aXJlKCcuL3ZhbGlkYXRvci8nKTtcblxudmFyIF92YWxpZGF0b3IyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdmFsaWRhdG9yKTtcblxudmFyIF9tZXNzYWdlczIgPSByZXF1aXJlKCcuL21lc3NhZ2VzJyk7XG5cbnZhciBfcnVsZSA9IHJlcXVpcmUoJy4vcnVsZS8nKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qKlxuICogIEVuY2Fwc3VsYXRlcyBhIHZhbGlkYXRpb24gc2NoZW1hLlxuICpcbiAqICBAcGFyYW0gZGVzY3JpcHRvciBBbiBvYmplY3QgZGVjbGFyaW5nIHZhbGlkYXRpb24gcnVsZXNcbiAqICBmb3IgdGhpcyBzY2hlbWEuXG4gKi9cbmZ1bmN0aW9uIFNjaGVtYShkZXNjcmlwdG9yKSB7XG4gIHRoaXMucnVsZXMgPSBudWxsO1xuICB0aGlzLl9tZXNzYWdlcyA9IF9tZXNzYWdlczIubWVzc2FnZXM7XG4gIHRoaXMuZGVmaW5lKGRlc2NyaXB0b3IpO1xufVxuXG5TY2hlbWEucHJvdG90eXBlID0ge1xuICBtZXNzYWdlczogZnVuY3Rpb24gbWVzc2FnZXMoX21lc3NhZ2VzKSB7XG4gICAgaWYgKF9tZXNzYWdlcykge1xuICAgICAgdGhpcy5fbWVzc2FnZXMgPSAoMCwgX3V0aWwuZGVlcE1lcmdlKSgoMCwgX21lc3NhZ2VzMi5uZXdNZXNzYWdlcykoKSwgX21lc3NhZ2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VzO1xuICB9LFxuICBkZWZpbmU6IGZ1bmN0aW9uIGRlZmluZShydWxlcykge1xuICAgIGlmICghcnVsZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbmZpZ3VyZSBhIHNjaGVtYSB3aXRoIG5vIHJ1bGVzJyk7XG4gICAgfVxuICAgIGlmICgodHlwZW9mIHJ1bGVzID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihydWxlcykpICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHJ1bGVzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdWxlcyBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICB0aGlzLnJ1bGVzID0ge307XG4gICAgdmFyIHogPSB2b2lkIDA7XG4gICAgdmFyIGl0ZW0gPSB2b2lkIDA7XG4gICAgZm9yICh6IGluIHJ1bGVzKSB7XG4gICAgICBpZiAocnVsZXMuaGFzT3duUHJvcGVydHkoeikpIHtcbiAgICAgICAgaXRlbSA9IHJ1bGVzW3pdO1xuICAgICAgICB0aGlzLnJ1bGVzW3pdID0gQXJyYXkuaXNBcnJheShpdGVtKSA/IGl0ZW0gOiBbaXRlbV07XG4gICAgICB9XG4gICAgfVxuICB9LFxuICB2YWxpZGF0ZTogZnVuY3Rpb24gdmFsaWRhdGUoc291cmNlXykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgbyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIG9jID0gYXJndW1lbnRzWzJdO1xuXG4gICAgdmFyIHNvdXJjZSA9IHNvdXJjZV87XG4gICAgdmFyIG9wdGlvbnMgPSBvO1xuICAgIHZhciBjYWxsYmFjayA9IG9jO1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBpZiAoIXRoaXMucnVsZXMgfHwgT2JqZWN0LmtleXModGhpcy5ydWxlcykubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcGxldGUocmVzdWx0cykge1xuICAgICAgdmFyIGkgPSB2b2lkIDA7XG4gICAgICB2YXIgZmllbGQgPSB2b2lkIDA7XG4gICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICB2YXIgZmllbGRzID0ge307XG5cbiAgICAgIGZ1bmN0aW9uIGFkZChlKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdC5hcHBseShlcnJvcnMsIGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9ycy5wdXNoKGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFkZChyZXN1bHRzW2ldKTtcbiAgICAgIH1cbiAgICAgIGlmICghZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICBlcnJvcnMgPSBudWxsO1xuICAgICAgICBmaWVsZHMgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGVycm9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZpZWxkID0gZXJyb3JzW2ldLmZpZWxkO1xuICAgICAgICAgIGZpZWxkc1tmaWVsZF0gPSBmaWVsZHNbZmllbGRdIHx8IFtdO1xuICAgICAgICAgIGZpZWxkc1tmaWVsZF0ucHVzaChlcnJvcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhlcnJvcnMsIGZpZWxkcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubWVzc2FnZXMpIHtcbiAgICAgIHZhciBtZXNzYWdlcyA9IHRoaXMubWVzc2FnZXMoKTtcbiAgICAgIGlmIChtZXNzYWdlcyA9PT0gX21lc3NhZ2VzMi5tZXNzYWdlcykge1xuICAgICAgICBtZXNzYWdlcyA9ICgwLCBfbWVzc2FnZXMyLm5ld01lc3NhZ2VzKSgpO1xuICAgICAgfVxuICAgICAgKDAsIF91dGlsLmRlZXBNZXJnZSkobWVzc2FnZXMsIG9wdGlvbnMubWVzc2FnZXMpO1xuICAgICAgb3B0aW9ucy5tZXNzYWdlcyA9IG1lc3NhZ2VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLm1lc3NhZ2VzID0gdGhpcy5tZXNzYWdlcygpO1xuICAgIH1cblxuICAgIG9wdGlvbnMuZXJyb3IgPSBfcnVsZS5lcnJvcjtcbiAgICB2YXIgYXJyID0gdm9pZCAwO1xuICAgIHZhciB2YWx1ZSA9IHZvaWQgMDtcbiAgICB2YXIgc2VyaWVzID0ge307XG4gICAgdmFyIGtleXMgPSBvcHRpb25zLmtleXMgfHwgT2JqZWN0LmtleXModGhpcy5ydWxlcyk7XG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uICh6KSB7XG4gICAgICBhcnIgPSBfdGhpcy5ydWxlc1t6XTtcbiAgICAgIHZhbHVlID0gc291cmNlW3pdO1xuICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgdmFyIHJ1bGUgPSByO1xuICAgICAgICBpZiAodHlwZW9mIHJ1bGUudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaWYgKHNvdXJjZSA9PT0gc291cmNlXykge1xuICAgICAgICAgICAgc291cmNlID0gX2V4dGVuZHMoe30sIHNvdXJjZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID0gc291cmNlW3pdID0gcnVsZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcnVsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJ1bGUgPSB7XG4gICAgICAgICAgICB2YWxpZGF0b3I6IHJ1bGVcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJ1bGUgPSBfZXh0ZW5kcyh7fSwgcnVsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcnVsZS52YWxpZGF0b3IgPSBfdGhpcy5nZXRWYWxpZGF0aW9uTWV0aG9kKHJ1bGUpO1xuICAgICAgICBydWxlLmZpZWxkID0gejtcbiAgICAgICAgcnVsZS5mdWxsRmllbGQgPSBydWxlLmZ1bGxGaWVsZCB8fCB6O1xuICAgICAgICBydWxlLnR5cGUgPSBfdGhpcy5nZXRUeXBlKHJ1bGUpO1xuICAgICAgICBpZiAoIXJ1bGUudmFsaWRhdG9yKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlcmllc1t6XSA9IHNlcmllc1t6XSB8fCBbXTtcbiAgICAgICAgc2VyaWVzW3pdLnB1c2goe1xuICAgICAgICAgIHJ1bGU6IHJ1bGUsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICAgIGZpZWxkOiB6XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdmFyIGVycm9yRmllbGRzID0ge307XG4gICAgKDAsIF91dGlsLmFzeW5jTWFwKShzZXJpZXMsIG9wdGlvbnMsIGZ1bmN0aW9uIChkYXRhLCBkb0l0KSB7XG4gICAgICB2YXIgcnVsZSA9IGRhdGEucnVsZTtcbiAgICAgIHZhciBkZWVwID0gKHJ1bGUudHlwZSA9PT0gJ29iamVjdCcgfHwgcnVsZS50eXBlID09PSAnYXJyYXknKSAmJiAoX3R5cGVvZihydWxlLmZpZWxkcykgPT09ICdvYmplY3QnIHx8IF90eXBlb2YocnVsZS5kZWZhdWx0RmllbGQpID09PSAnb2JqZWN0Jyk7XG4gICAgICBkZWVwID0gZGVlcCAmJiAocnVsZS5yZXF1aXJlZCB8fCAhcnVsZS5yZXF1aXJlZCAmJiBkYXRhLnZhbHVlKTtcbiAgICAgIHJ1bGUuZmllbGQgPSBkYXRhLmZpZWxkO1xuICAgICAgZnVuY3Rpb24gYWRkRnVsbGZpZWxkKGtleSwgc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc2NoZW1hLCB7XG4gICAgICAgICAgZnVsbEZpZWxkOiBydWxlLmZ1bGxGaWVsZCArICcuJyArIGtleVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY2IoKSB7XG4gICAgICAgIHZhciBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBbXTtcblxuICAgICAgICB2YXIgZXJyb3JzID0gZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGVycm9ycykpIHtcbiAgICAgICAgICBlcnJvcnMgPSBbZXJyb3JzXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuaW5nKSgnYXN5bmMtdmFsaWRhdG9yOicsIGVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggJiYgcnVsZS5tZXNzYWdlKSB7XG4gICAgICAgICAgZXJyb3JzID0gW10uY29uY2F0KHJ1bGUubWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcnMgPSBlcnJvcnMubWFwKCgwLCBfdXRpbC5jb21wbGVtZW50RXJyb3IpKHJ1bGUpKTtcblxuICAgICAgICBpZiAoKG9wdGlvbnMuZmlyc3QgfHwgb3B0aW9ucy5maWVsZEZpcnN0KSAmJiBlcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgZXJyb3JGaWVsZHNbcnVsZS5maWVsZF0gPSAxO1xuICAgICAgICAgIHJldHVybiBkb0l0KGVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZWVwKSB7XG4gICAgICAgICAgZG9JdChlcnJvcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGlmIHJ1bGUgaXMgcmVxdWlyZWQgYnV0IHRoZSB0YXJnZXQgb2JqZWN0XG4gICAgICAgICAgLy8gZG9lcyBub3QgZXhpc3QgZmFpbCBhdCB0aGUgcnVsZSBsZXZlbCBhbmQgZG9uJ3RcbiAgICAgICAgICAvLyBnbyBkZWVwZXJcbiAgICAgICAgICBpZiAocnVsZS5yZXF1aXJlZCAmJiAhZGF0YS52YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHJ1bGUubWVzc2FnZSkge1xuICAgICAgICAgICAgICBlcnJvcnMgPSBbXS5jb25jYXQocnVsZS5tZXNzYWdlKS5tYXAoKDAsIF91dGlsLmNvbXBsZW1lbnRFcnJvcikocnVsZSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXJyb3JzID0gW29wdGlvbnMuZXJyb3IocnVsZSwgKDAsIF91dGlsLmZvcm1hdCkob3B0aW9ucy5tZXNzYWdlcy5yZXF1aXJlZCwgcnVsZS5maWVsZCkpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkb0l0KGVycm9ycyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGZpZWxkc1NjaGVtYSA9IHt9O1xuICAgICAgICAgIGlmIChydWxlLmRlZmF1bHRGaWVsZCkge1xuICAgICAgICAgICAgZm9yICh2YXIgayBpbiBkYXRhLnZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmIChkYXRhLnZhbHVlLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgZmllbGRzU2NoZW1hW2tdID0gcnVsZS5kZWZhdWx0RmllbGQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmllbGRzU2NoZW1hID0gX2V4dGVuZHMoe30sIGZpZWxkc1NjaGVtYSwgZGF0YS5ydWxlLmZpZWxkcyk7XG4gICAgICAgICAgZm9yICh2YXIgZiBpbiBmaWVsZHNTY2hlbWEpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZHNTY2hlbWEuaGFzT3duUHJvcGVydHkoZikpIHtcbiAgICAgICAgICAgICAgdmFyIGZpZWxkU2NoZW1hID0gQXJyYXkuaXNBcnJheShmaWVsZHNTY2hlbWFbZl0pID8gZmllbGRzU2NoZW1hW2ZdIDogW2ZpZWxkc1NjaGVtYVtmXV07XG4gICAgICAgICAgICAgIGZpZWxkc1NjaGVtYVtmXSA9IGZpZWxkU2NoZW1hLm1hcChhZGRGdWxsZmllbGQuYmluZChudWxsLCBmKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBzY2hlbWEgPSBuZXcgU2NoZW1hKGZpZWxkc1NjaGVtYSk7XG4gICAgICAgICAgc2NoZW1hLm1lc3NhZ2VzKG9wdGlvbnMubWVzc2FnZXMpO1xuICAgICAgICAgIGlmIChkYXRhLnJ1bGUub3B0aW9ucykge1xuICAgICAgICAgICAgZGF0YS5ydWxlLm9wdGlvbnMubWVzc2FnZXMgPSBvcHRpb25zLm1lc3NhZ2VzO1xuICAgICAgICAgICAgZGF0YS5ydWxlLm9wdGlvbnMuZXJyb3IgPSBvcHRpb25zLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzY2hlbWEudmFsaWRhdGUoZGF0YS52YWx1ZSwgZGF0YS5ydWxlLm9wdGlvbnMgfHwgb3B0aW9ucywgZnVuY3Rpb24gKGVycnMpIHtcbiAgICAgICAgICAgIGRvSXQoZXJycyAmJiBlcnJzLmxlbmd0aCA/IGVycm9ycy5jb25jYXQoZXJycykgOiBlcnJzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBydWxlLnZhbGlkYXRvcihydWxlLCBkYXRhLnZhbHVlLCBjYiwgZGF0YS5zb3VyY2UsIG9wdGlvbnMpO1xuICAgIH0sIGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgICBjb21wbGV0ZShyZXN1bHRzKTtcbiAgICB9KTtcbiAgfSxcbiAgZ2V0VHlwZTogZnVuY3Rpb24gZ2V0VHlwZShydWxlKSB7XG4gICAgaWYgKHJ1bGUudHlwZSA9PT0gdW5kZWZpbmVkICYmIHJ1bGUucGF0dGVybiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgcnVsZS50eXBlID0gJ3BhdHRlcm4nO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJ1bGUudmFsaWRhdG9yICE9PSAnZnVuY3Rpb24nICYmIHJ1bGUudHlwZSAmJiAhX3ZhbGlkYXRvcjJbXCJkZWZhdWx0XCJdLmhhc093blByb3BlcnR5KHJ1bGUudHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigoMCwgX3V0aWwuZm9ybWF0KSgnVW5rbm93biBydWxlIHR5cGUgJXMnLCBydWxlLnR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJ1bGUudHlwZSB8fCAnc3RyaW5nJztcbiAgfSxcbiAgZ2V0VmFsaWRhdGlvbk1ldGhvZDogZnVuY3Rpb24gZ2V0VmFsaWRhdGlvbk1ldGhvZChydWxlKSB7XG4gICAgaWYgKHR5cGVvZiBydWxlLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHJ1bGUudmFsaWRhdG9yO1xuICAgIH1cbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHJ1bGUpO1xuICAgIHZhciBtZXNzYWdlSW5kZXggPSBrZXlzLmluZGV4T2YoJ21lc3NhZ2UnKTtcbiAgICBpZiAobWVzc2FnZUluZGV4ICE9PSAtMSkge1xuICAgICAga2V5cy5zcGxpY2UobWVzc2FnZUluZGV4LCAxKTtcbiAgICB9XG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAxICYmIGtleXNbMF0gPT09ICdyZXF1aXJlZCcpIHtcbiAgICAgIHJldHVybiBfdmFsaWRhdG9yMltcImRlZmF1bHRcIl0ucmVxdWlyZWQ7XG4gICAgfVxuICAgIHJldHVybiBfdmFsaWRhdG9yMltcImRlZmF1bHRcIl1bdGhpcy5nZXRUeXBlKHJ1bGUpXSB8fCBmYWxzZTtcbiAgfVxufTtcblxuU2NoZW1hLnJlZ2lzdGVyID0gZnVuY3Rpb24gcmVnaXN0ZXIodHlwZSwgdmFsaWRhdG9yKSB7XG4gIGlmICh0eXBlb2YgdmFsaWRhdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcmVnaXN0ZXIgYSB2YWxpZGF0b3IgYnkgdHlwZSwgdmFsaWRhdG9yIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gIH1cbiAgX3ZhbGlkYXRvcjJbXCJkZWZhdWx0XCJdW3R5cGVdID0gdmFsaWRhdG9yO1xufTtcblxuU2NoZW1hLm1lc3NhZ2VzID0gX21lc3NhZ2VzMi5tZXNzYWdlcztcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBTY2hlbWE7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvbGliL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA0NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///44\n")},function(module,exports,__webpack_require__){"use strict";eval('\n\nmodule.exports = {\n string: __webpack_require__(46),\n method: __webpack_require__(52),\n number: __webpack_require__(53),\n "boolean": __webpack_require__(54),\n regexp: __webpack_require__(55),\n integer: __webpack_require__(56),\n "float": __webpack_require__(57),\n array: __webpack_require__(58),\n object: __webpack_require__(59),\n "enum": __webpack_require__(60),\n pattern: __webpack_require__(61),\n email: __webpack_require__(14),\n url: __webpack_require__(14),\n date: __webpack_require__(62),\n hex: __webpack_require__(14),\n required: __webpack_require__(63)\n};\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvaW5kZXguanM/YWU2NyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiNDUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdHJpbmc6IHJlcXVpcmUoJy4vc3RyaW5nJyksXG4gIG1ldGhvZDogcmVxdWlyZSgnLi9tZXRob2QnKSxcbiAgbnVtYmVyOiByZXF1aXJlKCcuL251bWJlcicpLFxuICBcImJvb2xlYW5cIjogcmVxdWlyZSgnLi9ib29sZWFuJyksXG4gIHJlZ2V4cDogcmVxdWlyZSgnLi9yZWdleHAnKSxcbiAgaW50ZWdlcjogcmVxdWlyZSgnLi9pbnRlZ2VyJyksXG4gIFwiZmxvYXRcIjogcmVxdWlyZSgnLi9mbG9hdCcpLFxuICBhcnJheTogcmVxdWlyZSgnLi9hcnJheScpLFxuICBvYmplY3Q6IHJlcXVpcmUoJy4vb2JqZWN0JyksXG4gIFwiZW51bVwiOiByZXF1aXJlKCcuL2VudW0nKSxcbiAgcGF0dGVybjogcmVxdWlyZSgnLi9wYXR0ZXJuJyksXG4gIGVtYWlsOiByZXF1aXJlKCcuL3R5cGUnKSxcbiAgdXJsOiByZXF1aXJlKCcuL3R5cGUnKSxcbiAgZGF0ZTogcmVxdWlyZSgnLi9kYXRlJyksXG4gIGhleDogcmVxdWlyZSgnLi90eXBlJyksXG4gIHJlcXVpcmVkOiByZXF1aXJlKCcuL3JlcXVpcmVkJylcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDQ1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///45\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _rule = __webpack_require__(1);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _util = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\n/**\n * Performs validation for string types.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction string(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n if (validate) {\n if ((0, _util.isEmptyValue)(value, \'string\') && !rule.required) {\n return callback();\n }\n _rule2["default"].required(rule, value, source, errors, options, \'string\');\n if (!(0, _util.isEmptyValue)(value, \'string\')) {\n _rule2["default"].type(rule, value, source, errors, options);\n _rule2["default"].range(rule, value, source, errors, options);\n _rule2["default"].pattern(rule, value, source, errors, options);\n if (rule.whitespace === true) {\n _rule2["default"].whitespace(rule, value, source, errors, options);\n }\n }\n }\n callback(errors);\n}\n\nexports["default"] = string;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3Ivc3RyaW5nLmpzPzI3ODUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiI0Ni5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9ydWxlID0gcmVxdWlyZSgnLi4vcnVsZS8nKTtcblxudmFyIF9ydWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3J1bGUpO1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG4vKipcbiAqICBQZXJmb3JtcyB2YWxpZGF0aW9uIGZvciBzdHJpbmcgdHlwZXMuXG4gKlxuICogIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUuXG4gKiAgQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgb24gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiAgQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqICBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IGJlaW5nIHZhbGlkYXRlZC5cbiAqICBAcGFyYW0gb3B0aW9ucyBUaGUgdmFsaWRhdGlvbiBvcHRpb25zLlxuICogIEBwYXJhbSBvcHRpb25zLm1lc3NhZ2VzIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBzdHJpbmcocnVsZSwgdmFsdWUsIGNhbGxiYWNrLCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGVycm9ycyA9IFtdO1xuICB2YXIgdmFsaWRhdGUgPSBydWxlLnJlcXVpcmVkIHx8ICFydWxlLnJlcXVpcmVkICYmIHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShydWxlLmZpZWxkKTtcbiAgaWYgKHZhbGlkYXRlKSB7XG4gICAgaWYgKCgwLCBfdXRpbC5pc0VtcHR5VmFsdWUpKHZhbHVlLCAnc3RyaW5nJykgJiYgIXJ1bGUucmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBfcnVsZTJbXCJkZWZhdWx0XCJdLnJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucywgJ3N0cmluZycpO1xuICAgIGlmICghKDAsIF91dGlsLmlzRW1wdHlWYWx1ZSkodmFsdWUsICdzdHJpbmcnKSkge1xuICAgICAgX3J1bGUyW1wiZGVmYXVsdFwiXS50eXBlKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgICBfcnVsZTJbXCJkZWZhdWx0XCJdLnJhbmdlKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgICBfcnVsZTJbXCJkZWZhdWx0XCJdLnBhdHRlcm4ocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICAgIGlmIChydWxlLndoaXRlc3BhY2UgPT09IHRydWUpIHtcbiAgICAgICAgX3J1bGUyW1wiZGVmYXVsdFwiXS53aGl0ZXNwYWNlKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbGxiYWNrKGVycm9ycyk7XG59XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gc3RyaW5nO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3Ivc3RyaW5nLmpzXG4vLyBtb2R1bGUgaWQgPSA0NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///46\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _util = __webpack_require__(0);\n\nvar util = _interopRequireWildcard(_util);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj["default"] = obj; return newObj; } }\n\n/**\n * Rule for validating whitespace.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction whitespace(rule, value, source, errors, options) {\n if (/^\\s+$/.test(value) || value === \'\') {\n errors.push(util.format(options.messages.whitespace, rule.fullField));\n }\n}\n\nexports["default"] = whitespace;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi9ydWxlL3doaXRlc3BhY2UuanM/MjJmZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQSx1Q0FBdUMsNkJBQTZCLFlBQVksRUFBRSxPQUFPLGlCQUFpQixtQkFBbUIsdUJBQXVCLDRFQUE0RSxFQUFFLEVBQUUseUJBQXlCLGVBQWUsRUFBRTs7QUFFOVE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiI0Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF91dGlsID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuXG52YXIgdXRpbCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF91dGlsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBlbHNlIHsgdmFyIG5ld09iaiA9IHt9OyBpZiAob2JqICE9IG51bGwpIHsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IG5ld09ialtcImRlZmF1bHRcIl0gPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfVxuXG4vKipcbiAqICBSdWxlIGZvciB2YWxpZGF0aW5nIHdoaXRlc3BhY2UuXG4gKlxuICogIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUuXG4gKiAgQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgb24gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiAgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCBiZWluZyB2YWxpZGF0ZWQuXG4gKiAgQHBhcmFtIGVycm9ycyBBbiBhcnJheSBvZiBlcnJvcnMgdGhhdCB0aGlzIHJ1bGUgbWF5IGFkZFxuICogIHZhbGlkYXRpb24gZXJyb3JzIHRvLlxuICogIEBwYXJhbSBvcHRpb25zIFRoZSB2YWxpZGF0aW9uIG9wdGlvbnMuXG4gKiAgQHBhcmFtIG9wdGlvbnMubWVzc2FnZXMgVGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIHdoaXRlc3BhY2UocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKSB7XG4gIGlmICgvXlxccyskLy50ZXN0KHZhbHVlKSB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICBlcnJvcnMucHVzaCh1dGlsLmZvcm1hdChvcHRpb25zLm1lc3NhZ2VzLndoaXRlc3BhY2UsIHJ1bGUuZnVsbEZpZWxkKSk7XG4gIH1cbn1cblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB3aGl0ZXNwYWNlO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi9ydWxlL3doaXRlc3BhY2UuanNcbi8vIG1vZHVsZSBpZCA9IDQ3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///47\n')},function(module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _util = __webpack_require__(0);\n\nvar util = _interopRequireWildcard(_util);\n\nvar _required = __webpack_require__(24);\n\nvar _required2 = _interopRequireDefault(_required);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\n/* eslint max-len:0 */\n\nvar pattern = {\n // http://emailregex.com/\n email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n url: new RegExp('^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-?)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-?)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$', 'i'),\n hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i\n};\n\nvar types = {\n integer: function integer(value) {\n return types.number(value) && parseInt(value, 10) === value;\n },\n \"float\": function float(value) {\n return types.number(value) && !types.integer(value);\n },\n array: function array(value) {\n return Array.isArray(value);\n },\n regexp: function regexp(value) {\n if (value instanceof RegExp) {\n return true;\n }\n try {\n return !!new RegExp(value);\n } catch (e) {\n return false;\n }\n },\n date: function date(value) {\n return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function';\n },\n number: function number(value) {\n if (isNaN(value)) {\n return false;\n }\n return typeof value === 'number';\n },\n object: function object(value) {\n return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && !types.array(value);\n },\n method: function method(value) {\n return typeof value === 'function';\n },\n email: function email(value) {\n return typeof value === 'string' && !!value.match(pattern.email);\n },\n url: function url(value) {\n return typeof value === 'string' && !!value.match(pattern.url);\n },\n hex: function hex(value) {\n return typeof value === 'string' && !!value.match(pattern.hex);\n }\n};\n\n/**\n * Rule for validating the type of a value.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction type(rule, value, source, errors, options) {\n if (rule.required && value === undefined) {\n (0, _required2[\"default\"])(rule, value, source, errors, options);\n return;\n }\n var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];\n var ruleType = rule.type;\n if (custom.indexOf(ruleType) > -1) {\n if (!types[ruleType](value)) {\n errors.push(util.format(options.messages.types[ruleType], rule.fullField, rule.type));\n }\n // straight typeof check\n } else if (ruleType && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) !== rule.type) {\n errors.push(util.format(options.messages.types[ruleType], rule.fullField, rule.type));\n }\n}\n\nexports[\"default\"] = type;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi9ydWxlL3R5cGUuanM/MTYzNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxvR0FBb0csbUJBQW1CLEVBQUUsbUJBQW1CLDhIQUE4SDs7QUFFMVE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLHVDQUF1Qyw2QkFBNkIsWUFBWSxFQUFFLE9BQU8saUJBQWlCLG1CQUFtQix1QkFBdUIsNEVBQTRFLEVBQUUsRUFBRSx5QkFBeUIsZUFBZSxFQUFFOztBQUU5UTs7QUFFQTtBQUNBO0FBQ0EsNEJBQTRCLHlCQUF5Qiw2QkFBNkIsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxnQ0FBZ0MsR0FBRztBQUM3SiwwSUFBMEksSUFBSSxxQkFBcUIsRUFBRSx1TUFBdU0sR0FBRyxzQkFBc0IsSUFBSTtBQUN6WSxxQkFBcUIsRUFBRSxVQUFVLEVBQUU7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjQ4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxudmFyIHV0aWwgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfdXRpbCk7XG5cbnZhciBfcmVxdWlyZWQgPSByZXF1aXJlKCcuL3JlcXVpcmVkJyk7XG5cbnZhciBfcmVxdWlyZWQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVxdWlyZWQpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBlbHNlIHsgdmFyIG5ld09iaiA9IHt9OyBpZiAob2JqICE9IG51bGwpIHsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IG5ld09ialtcImRlZmF1bHRcIl0gPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfVxuXG4vKiBlc2xpbnQgbWF4LWxlbjowICovXG5cbnZhciBwYXR0ZXJuID0ge1xuICAvLyBodHRwOi8vZW1haWxyZWdleC5jb20vXG4gIGVtYWlsOiAvXigoW148PigpXFxbXFxdXFxcXC4sOzpcXHNAXCJdKyhcXC5bXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKSopfChcIi4rXCIpKUAoKFxcW1swLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31dKXwoKFthLXpBLVpcXC0wLTldK1xcLikrW2EtekEtWl17Mix9KSkkLyxcbiAgdXJsOiBuZXcgUmVnRXhwKCdeKD8hbWFpbHRvOikoPzooPzpodHRwfGh0dHBzfGZ0cCk6Ly98Ly8pKD86XFxcXFMrKD86OlxcXFxTKik/QCk/KD86KD86KD86WzEtOV1cXFxcZD98MVxcXFxkXFxcXGR8MlswMV1cXFxcZHwyMlswLTNdKSg/OlxcXFwuKD86MT9cXFxcZHsxLDJ9fDJbMC00XVxcXFxkfDI1WzAtNV0pKXsyfSg/OlxcXFwuKD86WzAtOV1cXFxcZD98MVxcXFxkXFxcXGR8MlswLTRdXFxcXGR8MjVbMC00XSkpfCg/Oig/OlthLXpcXFxcdTAwYTEtXFxcXHVmZmZmMC05XSstPykqW2EtelxcXFx1MDBhMS1cXFxcdWZmZmYwLTldKykoPzpcXFxcLig/OlthLXpcXFxcdTAwYTEtXFxcXHVmZmZmMC05XSstPykqW2EtelxcXFx1MDBhMS1cXFxcdWZmZmYwLTldKykqKD86XFxcXC4oPzpbYS16XFxcXHUwMGExLVxcXFx1ZmZmZl17Mix9KSkpfGxvY2FsaG9zdCkoPzo6XFxcXGR7Miw1fSk/KD86KC98XFxcXD98IylbXlxcXFxzXSopPyQnLCAnaScpLFxuICBoZXg6IC9eIz8oW2EtZjAtOV17Nn18W2EtZjAtOV17M30pJC9pXG59O1xuXG52YXIgdHlwZXMgPSB7XG4gIGludGVnZXI6IGZ1bmN0aW9uIGludGVnZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZXMubnVtYmVyKHZhbHVlKSAmJiBwYXJzZUludCh2YWx1ZSwgMTApID09PSB2YWx1ZTtcbiAgfSxcbiAgXCJmbG9hdFwiOiBmdW5jdGlvbiBmbG9hdCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlcy5udW1iZXIodmFsdWUpICYmICF0eXBlcy5pbnRlZ2VyKHZhbHVlKTtcbiAgfSxcbiAgYXJyYXk6IGZ1bmN0aW9uIGFycmF5KHZhbHVlKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICB9LFxuICByZWdleHA6IGZ1bmN0aW9uIHJlZ2V4cCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gISFuZXcgUmVnRXhwKHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LFxuICBkYXRlOiBmdW5jdGlvbiBkYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZS5nZXRUaW1lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZS5nZXRNb250aCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUuZ2V0WWVhciA9PT0gJ2Z1bmN0aW9uJztcbiAgfSxcbiAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIodmFsdWUpIHtcbiAgICBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xuICB9LFxuICBvYmplY3Q6IGZ1bmN0aW9uIG9iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih2YWx1ZSkpID09PSAnb2JqZWN0JyAmJiAhdHlwZXMuYXJyYXkodmFsdWUpO1xuICB9LFxuICBtZXRob2Q6IGZ1bmN0aW9uIG1ldGhvZCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG4gIH0sXG4gIGVtYWlsOiBmdW5jdGlvbiBlbWFpbCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICEhdmFsdWUubWF0Y2gocGF0dGVybi5lbWFpbCk7XG4gIH0sXG4gIHVybDogZnVuY3Rpb24gdXJsKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgISF2YWx1ZS5tYXRjaChwYXR0ZXJuLnVybCk7XG4gIH0sXG4gIGhleDogZnVuY3Rpb24gaGV4KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgISF2YWx1ZS5tYXRjaChwYXR0ZXJuLmhleCk7XG4gIH1cbn07XG5cbi8qKlxuICogIFJ1bGUgZm9yIHZhbGlkYXRpbmcgdGhlIHR5cGUgb2YgYSB2YWx1ZS5cbiAqXG4gKiAgQHBhcmFtIHJ1bGUgVGhlIHZhbGlkYXRpb24gcnVsZS5cbiAqICBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBvbiB0aGUgc291cmNlIG9iamVjdC5cbiAqICBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IGJlaW5nIHZhbGlkYXRlZC5cbiAqICBAcGFyYW0gZXJyb3JzIEFuIGFycmF5IG9mIGVycm9ycyB0aGF0IHRoaXMgcnVsZSBtYXkgYWRkXG4gKiAgdmFsaWRhdGlvbiBlcnJvcnMgdG8uXG4gKiAgQHBhcmFtIG9wdGlvbnMgVGhlIHZhbGlkYXRpb24gb3B0aW9ucy5cbiAqICBAcGFyYW0gb3B0aW9ucy5tZXNzYWdlcyBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gdHlwZShydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpIHtcbiAgaWYgKHJ1bGUucmVxdWlyZWQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICgwLCBfcmVxdWlyZWQyW1wiZGVmYXVsdFwiXSkocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGN1c3RvbSA9IFsnaW50ZWdlcicsICdmbG9hdCcsICdhcnJheScsICdyZWdleHAnLCAnb2JqZWN0JywgJ21ldGhvZCcsICdlbWFpbCcsICdudW1iZXInLCAnZGF0ZScsICd1cmwnLCAnaGV4J107XG4gIHZhciBydWxlVHlwZSA9IHJ1bGUudHlwZTtcbiAgaWYgKGN1c3RvbS5pbmRleE9mKHJ1bGVUeXBlKSA+IC0xKSB7XG4gICAgaWYgKCF0eXBlc1tydWxlVHlwZV0odmFsdWUpKSB7XG4gICAgICBlcnJvcnMucHVzaCh1dGlsLmZvcm1hdChvcHRpb25zLm1lc3NhZ2VzLnR5cGVzW3J1bGVUeXBlXSwgcnVsZS5mdWxsRmllbGQsIHJ1bGUudHlwZSkpO1xuICAgIH1cbiAgICAvLyBzdHJhaWdodCB0eXBlb2YgY2hlY2tcbiAgfSBlbHNlIGlmIChydWxlVHlwZSAmJiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih2YWx1ZSkpICE9PSBydWxlLnR5cGUpIHtcbiAgICBlcnJvcnMucHVzaCh1dGlsLmZvcm1hdChvcHRpb25zLm1lc3NhZ2VzLnR5cGVzW3J1bGVUeXBlXSwgcnVsZS5mdWxsRmllbGQsIHJ1bGUudHlwZSkpO1xuICB9XG59XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdHlwZTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2FzeW5jLXZhbGlkYXRvci9saWIvcnVsZS90eXBlLmpzXG4vLyBtb2R1bGUgaWQgPSA0OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///48\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _util = __webpack_require__(0);\n\nvar util = _interopRequireWildcard(_util);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\n/**\n * Rule for validating minimum and maximum allowed values.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction range(rule, value, source, errors, options) {\n var len = typeof rule.len === 'number';\n var min = typeof rule.min === 'number';\n var max = typeof rule.max === 'number';\n var val = value;\n var key = null;\n var num = typeof value === 'number';\n var str = typeof value === 'string';\n var arr = Array.isArray(value);\n if (num) {\n key = 'number';\n } else if (str) {\n key = 'string';\n } else if (arr) {\n key = 'array';\n }\n // if the value is not of a supported type for range validation\n // the validation rule rule should use the\n // type property to also test for a particular type\n if (!key) {\n return false;\n }\n if (str || arr) {\n val = value.length;\n }\n if (len) {\n if (val !== rule.len) {\n errors.push(util.format(options.messages[key].len, rule.fullField, rule.len));\n }\n } else if (min && !max && val < rule.min) {\n errors.push(util.format(options.messages[key].min, rule.fullField, rule.min));\n } else if (max && !min && val > rule.max) {\n errors.push(util.format(options.messages[key].max, rule.fullField, rule.max));\n } else if (min && max && (val < rule.min || val > rule.max)) {\n errors.push(util.format(options.messages[key].range, rule.fullField, rule.min, rule.max));\n }\n}\n\nexports[\"default\"] = range;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi9ydWxlL3JhbmdlLmpzP2U1NjEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUEsdUNBQXVDLDZCQUE2QixZQUFZLEVBQUUsT0FBTyxpQkFBaUIsbUJBQW1CLHVCQUF1Qiw0RUFBNEUsRUFBRSxFQUFFLHlCQUF5QixlQUFlLEVBQUU7O0FBRTlRO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiI0OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF91dGlsID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuXG52YXIgdXRpbCA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF91dGlsKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBlbHNlIHsgdmFyIG5ld09iaiA9IHt9OyBpZiAob2JqICE9IG51bGwpIHsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IG5ld09ialtcImRlZmF1bHRcIl0gPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfVxuXG4vKipcbiAqICBSdWxlIGZvciB2YWxpZGF0aW5nIG1pbmltdW0gYW5kIG1heGltdW0gYWxsb3dlZCB2YWx1ZXMuXG4gKlxuICogIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUuXG4gKiAgQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgb24gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiAgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCBiZWluZyB2YWxpZGF0ZWQuXG4gKiAgQHBhcmFtIGVycm9ycyBBbiBhcnJheSBvZiBlcnJvcnMgdGhhdCB0aGlzIHJ1bGUgbWF5IGFkZFxuICogIHZhbGlkYXRpb24gZXJyb3JzIHRvLlxuICogIEBwYXJhbSBvcHRpb25zIFRoZSB2YWxpZGF0aW9uIG9wdGlvbnMuXG4gKiAgQHBhcmFtIG9wdGlvbnMubWVzc2FnZXMgVGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIHJhbmdlKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucykge1xuICB2YXIgbGVuID0gdHlwZW9mIHJ1bGUubGVuID09PSAnbnVtYmVyJztcbiAgdmFyIG1pbiA9IHR5cGVvZiBydWxlLm1pbiA9PT0gJ251bWJlcic7XG4gIHZhciBtYXggPSB0eXBlb2YgcnVsZS5tYXggPT09ICdudW1iZXInO1xuICB2YXIgdmFsID0gdmFsdWU7XG4gIHZhciBrZXkgPSBudWxsO1xuICB2YXIgbnVtID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcbiAgdmFyIHN0ciA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG4gIHZhciBhcnIgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgaWYgKG51bSkge1xuICAgIGtleSA9ICdudW1iZXInO1xuICB9IGVsc2UgaWYgKHN0cikge1xuICAgIGtleSA9ICdzdHJpbmcnO1xuICB9IGVsc2UgaWYgKGFycikge1xuICAgIGtleSA9ICdhcnJheSc7XG4gIH1cbiAgLy8gaWYgdGhlIHZhbHVlIGlzIG5vdCBvZiBhIHN1cHBvcnRlZCB0eXBlIGZvciByYW5nZSB2YWxpZGF0aW9uXG4gIC8vIHRoZSB2YWxpZGF0aW9uIHJ1bGUgcnVsZSBzaG91bGQgdXNlIHRoZVxuICAvLyB0eXBlIHByb3BlcnR5IHRvIGFsc28gdGVzdCBmb3IgYSBwYXJ0aWN1bGFyIHR5cGVcbiAgaWYgKCFrZXkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHN0ciB8fCBhcnIpIHtcbiAgICB2YWwgPSB2YWx1ZS5sZW5ndGg7XG4gIH1cbiAgaWYgKGxlbikge1xuICAgIGlmICh2YWwgIT09IHJ1bGUubGVuKSB7XG4gICAgICBlcnJvcnMucHVzaCh1dGlsLmZvcm1hdChvcHRpb25zLm1lc3NhZ2VzW2tleV0ubGVuLCBydWxlLmZ1bGxGaWVsZCwgcnVsZS5sZW4pKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobWluICYmICFtYXggJiYgdmFsIDwgcnVsZS5taW4pIHtcbiAgICBlcnJvcnMucHVzaCh1dGlsLmZvcm1hdChvcHRpb25zLm1lc3NhZ2VzW2tleV0ubWluLCBydWxlLmZ1bGxGaWVsZCwgcnVsZS5taW4pKTtcbiAgfSBlbHNlIGlmIChtYXggJiYgIW1pbiAmJiB2YWwgPiBydWxlLm1heCkge1xuICAgIGVycm9ycy5wdXNoKHV0aWwuZm9ybWF0KG9wdGlvbnMubWVzc2FnZXNba2V5XS5tYXgsIHJ1bGUuZnVsbEZpZWxkLCBydWxlLm1heCkpO1xuICB9IGVsc2UgaWYgKG1pbiAmJiBtYXggJiYgKHZhbCA8IHJ1bGUubWluIHx8IHZhbCA+IHJ1bGUubWF4KSkge1xuICAgIGVycm9ycy5wdXNoKHV0aWwuZm9ybWF0KG9wdGlvbnMubWVzc2FnZXNba2V5XS5yYW5nZSwgcnVsZS5mdWxsRmllbGQsIHJ1bGUubWluLCBydWxlLm1heCkpO1xuICB9XG59XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gcmFuZ2U7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvbGliL3J1bGUvcmFuZ2UuanNcbi8vIG1vZHVsZSBpZCA9IDQ5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///49\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _util = __webpack_require__(0);\n\nvar util = _interopRequireWildcard(_util);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj[\"default\"] = obj; return newObj; } }\n\nvar ENUM = 'enum';\n\n/**\n * Rule for validating a value exists in an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, source, errors, options) {\n rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];\n if (rule[ENUM].indexOf(value) === -1) {\n errors.push(util.format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', ')));\n }\n}\n\nexports[\"default\"] = enumerable;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi9ydWxlL2VudW0uanM/Y2UzNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQSx1Q0FBdUMsNkJBQTZCLFlBQVksRUFBRSxPQUFPLGlCQUFpQixtQkFBbUIsdUJBQXVCLDRFQUE0RSxFQUFFLEVBQUUseUJBQXlCLGVBQWUsRUFBRTs7QUFFOVE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjUwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbnZhciB1dGlsID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX3V0aWwpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGVsc2UgeyB2YXIgbmV3T2JqID0ge307IGlmIChvYmogIT0gbnVsbCkgeyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gbmV3T2JqW1wiZGVmYXVsdFwiXSA9IG9iajsgcmV0dXJuIG5ld09iajsgfSB9XG5cbnZhciBFTlVNID0gJ2VudW0nO1xuXG4vKipcbiAqICBSdWxlIGZvciB2YWxpZGF0aW5nIGEgdmFsdWUgZXhpc3RzIGluIGFuIGVudW1lcmFibGUgbGlzdC5cbiAqXG4gKiAgQHBhcmFtIHJ1bGUgVGhlIHZhbGlkYXRpb24gcnVsZS5cbiAqICBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBvbiB0aGUgc291cmNlIG9iamVjdC5cbiAqICBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IGJlaW5nIHZhbGlkYXRlZC5cbiAqICBAcGFyYW0gZXJyb3JzIEFuIGFycmF5IG9mIGVycm9ycyB0aGF0IHRoaXMgcnVsZSBtYXkgYWRkXG4gKiAgdmFsaWRhdGlvbiBlcnJvcnMgdG8uXG4gKiAgQHBhcmFtIG9wdGlvbnMgVGhlIHZhbGlkYXRpb24gb3B0aW9ucy5cbiAqICBAcGFyYW0gb3B0aW9ucy5tZXNzYWdlcyBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gZW51bWVyYWJsZShydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpIHtcbiAgcnVsZVtFTlVNXSA9IEFycmF5LmlzQXJyYXkocnVsZVtFTlVNXSkgPyBydWxlW0VOVU1dIDogW107XG4gIGlmIChydWxlW0VOVU1dLmluZGV4T2YodmFsdWUpID09PSAtMSkge1xuICAgIGVycm9ycy5wdXNoKHV0aWwuZm9ybWF0KG9wdGlvbnMubWVzc2FnZXNbRU5VTV0sIHJ1bGUuZnVsbEZpZWxkLCBydWxlW0VOVU1dLmpvaW4oJywgJykpKTtcbiAgfVxufVxuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGVudW1lcmFibGU7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvbGliL3J1bGUvZW51bS5qc1xuLy8gbW9kdWxlIGlkID0gNTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///50\n")},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _util = __webpack_require__(0);\n\nvar util = _interopRequireWildcard(_util);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj["default"] = obj; return newObj; } }\n\n/**\n * Rule for validating a regular expression pattern.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction pattern(rule, value, source, errors, options) {\n if (rule.pattern instanceof RegExp) {\n if (!rule.pattern.test(value)) {\n errors.push(util.format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));\n }\n }\n}\n\nexports["default"] = pattern;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi9ydWxlL3BhdHRlcm4uanM/MGQ3ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQSx1Q0FBdUMsNkJBQTZCLFlBQVksRUFBRSxPQUFPLGlCQUFpQixtQkFBbUIsdUJBQXVCLDRFQUE0RSxFQUFFLEVBQUUseUJBQXlCLGVBQWUsRUFBRTs7QUFFOVE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiNTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxudmFyIHV0aWwgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfdXRpbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gZWxzZSB7IHZhciBuZXdPYmogPSB7fTsgaWYgKG9iaiAhPSBudWxsKSB7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqOyByZXR1cm4gbmV3T2JqOyB9IH1cblxuLyoqXG4gKiAgUnVsZSBmb3IgdmFsaWRhdGluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLlxuICpcbiAqICBAcGFyYW0gcnVsZSBUaGUgdmFsaWRhdGlvbiBydWxlLlxuICogIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGZpZWxkIG9uIHRoZSBzb3VyY2Ugb2JqZWN0LlxuICogIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QgYmVpbmcgdmFsaWRhdGVkLlxuICogIEBwYXJhbSBlcnJvcnMgQW4gYXJyYXkgb2YgZXJyb3JzIHRoYXQgdGhpcyBydWxlIG1heSBhZGRcbiAqICB2YWxpZGF0aW9uIGVycm9ycyB0by5cbiAqICBAcGFyYW0gb3B0aW9ucyBUaGUgdmFsaWRhdGlvbiBvcHRpb25zLlxuICogIEBwYXJhbSBvcHRpb25zLm1lc3NhZ2VzIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBwYXR0ZXJuKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucykge1xuICBpZiAocnVsZS5wYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgaWYgKCFydWxlLnBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKHV0aWwuZm9ybWF0KG9wdGlvbnMubWVzc2FnZXMucGF0dGVybi5taXNtYXRjaCwgcnVsZS5mdWxsRmllbGQsIHZhbHVlLCBydWxlLnBhdHRlcm4pKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBwYXR0ZXJuO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi9ydWxlL3BhdHRlcm4uanNcbi8vIG1vZHVsZSBpZCA9IDUxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///51\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _rule = __webpack_require__(1);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _util = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\n/**\n * Validates a function.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction method(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n if (validate) {\n if ((0, _util.isEmptyValue)(value) && !rule.required) {\n return callback();\n }\n _rule2["default"].required(rule, value, source, errors, options);\n if (value !== undefined) {\n _rule2["default"].type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexports["default"] = method;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvbWV0aG9kLmpzPzhiMDIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3J1bGUgPSByZXF1aXJlKCcuLi9ydWxlLycpO1xuXG52YXIgX3J1bGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcnVsZSk7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qKlxuICogIFZhbGlkYXRlcyBhIGZ1bmN0aW9uLlxuICpcbiAqICBAcGFyYW0gcnVsZSBUaGUgdmFsaWRhdGlvbiBydWxlLlxuICogIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGZpZWxkIG9uIHRoZSBzb3VyY2Ugb2JqZWN0LlxuICogIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiAgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCBiZWluZyB2YWxpZGF0ZWQuXG4gKiAgQHBhcmFtIG9wdGlvbnMgVGhlIHZhbGlkYXRpb24gb3B0aW9ucy5cbiAqICBAcGFyYW0gb3B0aW9ucy5tZXNzYWdlcyBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gbWV0aG9kKHJ1bGUsIHZhbHVlLCBjYWxsYmFjaywgc291cmNlLCBvcHRpb25zKSB7XG4gIHZhciBlcnJvcnMgPSBbXTtcbiAgdmFyIHZhbGlkYXRlID0gcnVsZS5yZXF1aXJlZCB8fCAhcnVsZS5yZXF1aXJlZCAmJiBzb3VyY2UuaGFzT3duUHJvcGVydHkocnVsZS5maWVsZCk7XG4gIGlmICh2YWxpZGF0ZSkge1xuICAgIGlmICgoMCwgX3V0aWwuaXNFbXB0eVZhbHVlKSh2YWx1ZSkgJiYgIXJ1bGUucmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBfcnVsZTJbXCJkZWZhdWx0XCJdLnJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIF9ydWxlMltcImRlZmF1bHRcIl0udHlwZShydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBjYWxsYmFjayhlcnJvcnMpO1xufVxuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1ldGhvZDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2FzeW5jLXZhbGlkYXRvci9saWIvdmFsaWRhdG9yL21ldGhvZC5qc1xuLy8gbW9kdWxlIGlkID0gNTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///52\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _rule = __webpack_require__(1);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _util = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\n/**\n * Validates a number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction number(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n if (validate) {\n if ((0, _util.isEmptyValue)(value) && !rule.required) {\n return callback();\n }\n _rule2["default"].required(rule, value, source, errors, options);\n if (value !== undefined) {\n _rule2["default"].type(rule, value, source, errors, options);\n _rule2["default"].range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexports["default"] = number;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvbnVtYmVyLmpzPzM4ZmUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiNTMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfcnVsZSA9IHJlcXVpcmUoJy4uL3J1bGUvJyk7XG5cbnZhciBfcnVsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9ydWxlKTtcblxudmFyIF91dGlsID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuLyoqXG4gKiAgVmFsaWRhdGVzIGEgbnVtYmVyLlxuICpcbiAqICBAcGFyYW0gcnVsZSBUaGUgdmFsaWRhdGlvbiBydWxlLlxuICogIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGZpZWxkIG9uIHRoZSBzb3VyY2Ugb2JqZWN0LlxuICogIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiAgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCBiZWluZyB2YWxpZGF0ZWQuXG4gKiAgQHBhcmFtIG9wdGlvbnMgVGhlIHZhbGlkYXRpb24gb3B0aW9ucy5cbiAqICBAcGFyYW0gb3B0aW9ucy5tZXNzYWdlcyBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gbnVtYmVyKHJ1bGUsIHZhbHVlLCBjYWxsYmFjaywgc291cmNlLCBvcHRpb25zKSB7XG4gIHZhciBlcnJvcnMgPSBbXTtcbiAgdmFyIHZhbGlkYXRlID0gcnVsZS5yZXF1aXJlZCB8fCAhcnVsZS5yZXF1aXJlZCAmJiBzb3VyY2UuaGFzT3duUHJvcGVydHkocnVsZS5maWVsZCk7XG4gIGlmICh2YWxpZGF0ZSkge1xuICAgIGlmICgoMCwgX3V0aWwuaXNFbXB0eVZhbHVlKSh2YWx1ZSkgJiYgIXJ1bGUucmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBfcnVsZTJbXCJkZWZhdWx0XCJdLnJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIF9ydWxlMltcImRlZmF1bHRcIl0udHlwZShydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgICAgX3J1bGUyW1wiZGVmYXVsdFwiXS5yYW5nZShydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBjYWxsYmFjayhlcnJvcnMpO1xufVxuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG51bWJlcjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2FzeW5jLXZhbGlkYXRvci9saWIvdmFsaWRhdG9yL251bWJlci5qc1xuLy8gbW9kdWxlIGlkID0gNTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///53\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _util = __webpack_require__(0);\n\nvar _rule = __webpack_require__(1);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\n/**\n * Validates a boolean.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction boolean(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n if (validate) {\n if ((0, _util.isEmptyValue)(value) && !rule.required) {\n return callback();\n }\n _rule2["default"].required(rule, value, source, errors, options);\n if (value !== undefined) {\n _rule2["default"].type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexports["default"] = boolean;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvYm9vbGVhbi5qcz81ZmRiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiI1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF91dGlsID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuXG52YXIgX3J1bGUgPSByZXF1aXJlKCcuLi9ydWxlLycpO1xuXG52YXIgX3J1bGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcnVsZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG4vKipcbiAqICBWYWxpZGF0ZXMgYSBib29sZWFuLlxuICpcbiAqICBAcGFyYW0gcnVsZSBUaGUgdmFsaWRhdGlvbiBydWxlLlxuICogIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGZpZWxkIG9uIHRoZSBzb3VyY2Ugb2JqZWN0LlxuICogIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiAgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCBiZWluZyB2YWxpZGF0ZWQuXG4gKiAgQHBhcmFtIG9wdGlvbnMgVGhlIHZhbGlkYXRpb24gb3B0aW9ucy5cbiAqICBAcGFyYW0gb3B0aW9ucy5tZXNzYWdlcyBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gYm9vbGVhbihydWxlLCB2YWx1ZSwgY2FsbGJhY2ssIHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZXJyb3JzID0gW107XG4gIHZhciB2YWxpZGF0ZSA9IHJ1bGUucmVxdWlyZWQgfHwgIXJ1bGUucmVxdWlyZWQgJiYgc291cmNlLmhhc093blByb3BlcnR5KHJ1bGUuZmllbGQpO1xuICBpZiAodmFsaWRhdGUpIHtcbiAgICBpZiAoKDAsIF91dGlsLmlzRW1wdHlWYWx1ZSkodmFsdWUpICYmICFydWxlLnJlcXVpcmVkKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICB9XG4gICAgX3J1bGUyW1wiZGVmYXVsdFwiXS5yZXF1aXJlZChydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBfcnVsZTJbXCJkZWZhdWx0XCJdLnR5cGUocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgY2FsbGJhY2soZXJyb3JzKTtcbn1cblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBib29sZWFuO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvYm9vbGVhbi5qc1xuLy8gbW9kdWxlIGlkID0gNTRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///54\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _rule = __webpack_require__(1);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _util = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\n/**\n * Validates the regular expression type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction regexp(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n if (validate) {\n if ((0, _util.isEmptyValue)(value) && !rule.required) {\n return callback();\n }\n _rule2["default"].required(rule, value, source, errors, options);\n if (!(0, _util.isEmptyValue)(value)) {\n _rule2["default"].type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexports["default"] = regexp;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvcmVnZXhwLmpzPzI0NjMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3J1bGUgPSByZXF1aXJlKCcuLi9ydWxlLycpO1xuXG52YXIgX3J1bGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcnVsZSk7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qKlxuICogIFZhbGlkYXRlcyB0aGUgcmVndWxhciBleHByZXNzaW9uIHR5cGUuXG4gKlxuICogIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUuXG4gKiAgQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgb24gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiAgQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqICBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IGJlaW5nIHZhbGlkYXRlZC5cbiAqICBAcGFyYW0gb3B0aW9ucyBUaGUgdmFsaWRhdGlvbiBvcHRpb25zLlxuICogIEBwYXJhbSBvcHRpb25zLm1lc3NhZ2VzIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiByZWdleHAocnVsZSwgdmFsdWUsIGNhbGxiYWNrLCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGVycm9ycyA9IFtdO1xuICB2YXIgdmFsaWRhdGUgPSBydWxlLnJlcXVpcmVkIHx8ICFydWxlLnJlcXVpcmVkICYmIHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShydWxlLmZpZWxkKTtcbiAgaWYgKHZhbGlkYXRlKSB7XG4gICAgaWYgKCgwLCBfdXRpbC5pc0VtcHR5VmFsdWUpKHZhbHVlKSAmJiAhcnVsZS5yZXF1aXJlZCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIF9ydWxlMltcImRlZmF1bHRcIl0ucmVxdWlyZWQocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICBpZiAoISgwLCBfdXRpbC5pc0VtcHR5VmFsdWUpKHZhbHVlKSkge1xuICAgICAgX3J1bGUyW1wiZGVmYXVsdFwiXS50eXBlKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIGNhbGxiYWNrKGVycm9ycyk7XG59XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gcmVnZXhwO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvcmVnZXhwLmpzXG4vLyBtb2R1bGUgaWQgPSA1NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///55\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _rule = __webpack_require__(1);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _util = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\n/**\n * Validates a number is an integer.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction integer(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n if (validate) {\n if ((0, _util.isEmptyValue)(value) && !rule.required) {\n return callback();\n }\n _rule2["default"].required(rule, value, source, errors, options);\n if (value !== undefined) {\n _rule2["default"].type(rule, value, source, errors, options);\n _rule2["default"].range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexports["default"] = integer;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvaW50ZWdlci5qcz9hZmYyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjU2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3J1bGUgPSByZXF1aXJlKCcuLi9ydWxlLycpO1xuXG52YXIgX3J1bGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcnVsZSk7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qKlxuICogIFZhbGlkYXRlcyBhIG51bWJlciBpcyBhbiBpbnRlZ2VyLlxuICpcbiAqICBAcGFyYW0gcnVsZSBUaGUgdmFsaWRhdGlvbiBydWxlLlxuICogIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGZpZWxkIG9uIHRoZSBzb3VyY2Ugb2JqZWN0LlxuICogIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiAgQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIG9iamVjdCBiZWluZyB2YWxpZGF0ZWQuXG4gKiAgQHBhcmFtIG9wdGlvbnMgVGhlIHZhbGlkYXRpb24gb3B0aW9ucy5cbiAqICBAcGFyYW0gb3B0aW9ucy5tZXNzYWdlcyBUaGUgdmFsaWRhdGlvbiBtZXNzYWdlcy5cbiAqL1xuZnVuY3Rpb24gaW50ZWdlcihydWxlLCB2YWx1ZSwgY2FsbGJhY2ssIHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZXJyb3JzID0gW107XG4gIHZhciB2YWxpZGF0ZSA9IHJ1bGUucmVxdWlyZWQgfHwgIXJ1bGUucmVxdWlyZWQgJiYgc291cmNlLmhhc093blByb3BlcnR5KHJ1bGUuZmllbGQpO1xuICBpZiAodmFsaWRhdGUpIHtcbiAgICBpZiAoKDAsIF91dGlsLmlzRW1wdHlWYWx1ZSkodmFsdWUpICYmICFydWxlLnJlcXVpcmVkKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICB9XG4gICAgX3J1bGUyW1wiZGVmYXVsdFwiXS5yZXF1aXJlZChydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBfcnVsZTJbXCJkZWZhdWx0XCJdLnR5cGUocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICAgIF9ydWxlMltcImRlZmF1bHRcIl0ucmFuZ2UocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgY2FsbGJhY2soZXJyb3JzKTtcbn1cblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBpbnRlZ2VyO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvaW50ZWdlci5qc1xuLy8gbW9kdWxlIGlkID0gNTZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///56\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _rule = __webpack_require__(1);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _util = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\n/**\n * Validates a number is a floating point number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction floatFn(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n if (validate) {\n if ((0, _util.isEmptyValue)(value) && !rule.required) {\n return callback();\n }\n _rule2["default"].required(rule, value, source, errors, options);\n if (value !== undefined) {\n _rule2["default"].type(rule, value, source, errors, options);\n _rule2["default"].range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexports["default"] = floatFn;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvZmxvYXQuanM/MTM5ZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiI1Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9ydWxlID0gcmVxdWlyZSgnLi4vcnVsZS8nKTtcblxudmFyIF9ydWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3J1bGUpO1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG4vKipcbiAqICBWYWxpZGF0ZXMgYSBudW1iZXIgaXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIuXG4gKlxuICogIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUuXG4gKiAgQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgb24gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiAgQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqICBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IGJlaW5nIHZhbGlkYXRlZC5cbiAqICBAcGFyYW0gb3B0aW9ucyBUaGUgdmFsaWRhdGlvbiBvcHRpb25zLlxuICogIEBwYXJhbSBvcHRpb25zLm1lc3NhZ2VzIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBmbG9hdEZuKHJ1bGUsIHZhbHVlLCBjYWxsYmFjaywgc291cmNlLCBvcHRpb25zKSB7XG4gIHZhciBlcnJvcnMgPSBbXTtcbiAgdmFyIHZhbGlkYXRlID0gcnVsZS5yZXF1aXJlZCB8fCAhcnVsZS5yZXF1aXJlZCAmJiBzb3VyY2UuaGFzT3duUHJvcGVydHkocnVsZS5maWVsZCk7XG4gIGlmICh2YWxpZGF0ZSkge1xuICAgIGlmICgoMCwgX3V0aWwuaXNFbXB0eVZhbHVlKSh2YWx1ZSkgJiYgIXJ1bGUucmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBfcnVsZTJbXCJkZWZhdWx0XCJdLnJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIF9ydWxlMltcImRlZmF1bHRcIl0udHlwZShydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgICAgX3J1bGUyW1wiZGVmYXVsdFwiXS5yYW5nZShydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBjYWxsYmFjayhlcnJvcnMpO1xufVxuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGZsb2F0Rm47XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvbGliL3ZhbGlkYXRvci9mbG9hdC5qc1xuLy8gbW9kdWxlIGlkID0gNTdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///57\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _rule = __webpack_require__(1);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _util = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\n/**\n * Validates an array.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction array(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n if (validate) {\n if ((0, _util.isEmptyValue)(value, \'array\') && !rule.required) {\n return callback();\n }\n _rule2["default"].required(rule, value, source, errors, options, \'array\');\n if (!(0, _util.isEmptyValue)(value, \'array\')) {\n _rule2["default"].type(rule, value, source, errors, options);\n _rule2["default"].range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexports["default"] = array;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvYXJyYXkuanM/ODNiZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTs7QUFFQSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiI1OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9ydWxlID0gcmVxdWlyZSgnLi4vcnVsZS8nKTtcblxudmFyIF9ydWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3J1bGUpO1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG4vKipcbiAqICBWYWxpZGF0ZXMgYW4gYXJyYXkuXG4gKlxuICogIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUuXG4gKiAgQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgb24gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiAgQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqICBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IGJlaW5nIHZhbGlkYXRlZC5cbiAqICBAcGFyYW0gb3B0aW9ucyBUaGUgdmFsaWRhdGlvbiBvcHRpb25zLlxuICogIEBwYXJhbSBvcHRpb25zLm1lc3NhZ2VzIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBhcnJheShydWxlLCB2YWx1ZSwgY2FsbGJhY2ssIHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZXJyb3JzID0gW107XG4gIHZhciB2YWxpZGF0ZSA9IHJ1bGUucmVxdWlyZWQgfHwgIXJ1bGUucmVxdWlyZWQgJiYgc291cmNlLmhhc093blByb3BlcnR5KHJ1bGUuZmllbGQpO1xuICBpZiAodmFsaWRhdGUpIHtcbiAgICBpZiAoKDAsIF91dGlsLmlzRW1wdHlWYWx1ZSkodmFsdWUsICdhcnJheScpICYmICFydWxlLnJlcXVpcmVkKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICB9XG4gICAgX3J1bGUyW1wiZGVmYXVsdFwiXS5yZXF1aXJlZChydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMsICdhcnJheScpO1xuICAgIGlmICghKDAsIF91dGlsLmlzRW1wdHlWYWx1ZSkodmFsdWUsICdhcnJheScpKSB7XG4gICAgICBfcnVsZTJbXCJkZWZhdWx0XCJdLnR5cGUocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICAgIF9ydWxlMltcImRlZmF1bHRcIl0ucmFuZ2UocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgY2FsbGJhY2soZXJyb3JzKTtcbn1cblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBhcnJheTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2FzeW5jLXZhbGlkYXRvci9saWIvdmFsaWRhdG9yL2FycmF5LmpzXG4vLyBtb2R1bGUgaWQgPSA1OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///58\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _rule = __webpack_require__(1);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _util = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\n/**\n * Validates an object.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction object(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n if (validate) {\n if ((0, _util.isEmptyValue)(value) && !rule.required) {\n return callback();\n }\n _rule2["default"].required(rule, value, source, errors, options);\n if (value !== undefined) {\n _rule2["default"].type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexports["default"] = object;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3Ivb2JqZWN0LmpzP2RkZWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjU5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3J1bGUgPSByZXF1aXJlKCcuLi9ydWxlLycpO1xuXG52YXIgX3J1bGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcnVsZSk7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qKlxuICogIFZhbGlkYXRlcyBhbiBvYmplY3QuXG4gKlxuICogIEBwYXJhbSBydWxlIFRoZSB2YWxpZGF0aW9uIHJ1bGUuXG4gKiAgQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgZmllbGQgb24gdGhlIHNvdXJjZSBvYmplY3QuXG4gKiAgQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqICBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0IGJlaW5nIHZhbGlkYXRlZC5cbiAqICBAcGFyYW0gb3B0aW9ucyBUaGUgdmFsaWRhdGlvbiBvcHRpb25zLlxuICogIEBwYXJhbSBvcHRpb25zLm1lc3NhZ2VzIFRoZSB2YWxpZGF0aW9uIG1lc3NhZ2VzLlxuICovXG5mdW5jdGlvbiBvYmplY3QocnVsZSwgdmFsdWUsIGNhbGxiYWNrLCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGVycm9ycyA9IFtdO1xuICB2YXIgdmFsaWRhdGUgPSBydWxlLnJlcXVpcmVkIHx8ICFydWxlLnJlcXVpcmVkICYmIHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShydWxlLmZpZWxkKTtcbiAgaWYgKHZhbGlkYXRlKSB7XG4gICAgaWYgKCgwLCBfdXRpbC5pc0VtcHR5VmFsdWUpKHZhbHVlKSAmJiAhcnVsZS5yZXF1aXJlZCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIF9ydWxlMltcImRlZmF1bHRcIl0ucmVxdWlyZWQocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgX3J1bGUyW1wiZGVmYXVsdFwiXS50eXBlKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgfVxuICB9XG4gIGNhbGxiYWNrKGVycm9ycyk7XG59XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gb2JqZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3Ivb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSA1OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///59\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _rule = __webpack_require__(1);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _util = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\nvar ENUM = \'enum\';\n\n/**\n * Validates an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n if (validate) {\n if ((0, _util.isEmptyValue)(value) && !rule.required) {\n return callback();\n }\n _rule2["default"].required(rule, value, source, errors, options);\n if (value) {\n _rule2["default"][ENUM](rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexports["default"] = enumerable;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvZW51bS5qcz8wYWY5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiI2MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9ydWxlID0gcmVxdWlyZSgnLi4vcnVsZS8nKTtcblxudmFyIF9ydWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3J1bGUpO1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgRU5VTSA9ICdlbnVtJztcblxuLyoqXG4gKiAgVmFsaWRhdGVzIGFuIGVudW1lcmFibGUgbGlzdC5cbiAqXG4gKiAgQHBhcmFtIHJ1bGUgVGhlIHZhbGlkYXRpb24gcnVsZS5cbiAqICBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBvbiB0aGUgc291cmNlIG9iamVjdC5cbiAqICBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QgYmVpbmcgdmFsaWRhdGVkLlxuICogIEBwYXJhbSBvcHRpb25zIFRoZSB2YWxpZGF0aW9uIG9wdGlvbnMuXG4gKiAgQHBhcmFtIG9wdGlvbnMubWVzc2FnZXMgVGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIGVudW1lcmFibGUocnVsZSwgdmFsdWUsIGNhbGxiYWNrLCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGVycm9ycyA9IFtdO1xuICB2YXIgdmFsaWRhdGUgPSBydWxlLnJlcXVpcmVkIHx8ICFydWxlLnJlcXVpcmVkICYmIHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShydWxlLmZpZWxkKTtcbiAgaWYgKHZhbGlkYXRlKSB7XG4gICAgaWYgKCgwLCBfdXRpbC5pc0VtcHR5VmFsdWUpKHZhbHVlKSAmJiAhcnVsZS5yZXF1aXJlZCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIF9ydWxlMltcImRlZmF1bHRcIl0ucmVxdWlyZWQocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIF9ydWxlMltcImRlZmF1bHRcIl1bRU5VTV0ocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgY2FsbGJhY2soZXJyb3JzKTtcbn1cblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBlbnVtZXJhYmxlO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvZW51bS5qc1xuLy8gbW9kdWxlIGlkID0gNjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///60\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _rule = __webpack_require__(1);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _util = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\n/**\n * Validates a regular expression pattern.\n *\n * Performs validation when a rule only contains\n * a pattern property but is not declared as a string type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction pattern(rule, value, callback, source, options) {\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n if (validate) {\n if ((0, _util.isEmptyValue)(value, \'string\') && !rule.required) {\n return callback();\n }\n _rule2["default"].required(rule, value, source, errors, options);\n if (!(0, _util.isEmptyValue)(value, \'string\')) {\n _rule2["default"].pattern(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexports["default"] = pattern;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvcGF0dGVybi5qcz84NWUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiI2MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9ydWxlID0gcmVxdWlyZSgnLi4vcnVsZS8nKTtcblxudmFyIF9ydWxlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3J1bGUpO1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG4vKipcbiAqICBWYWxpZGF0ZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybi5cbiAqXG4gKiAgUGVyZm9ybXMgdmFsaWRhdGlvbiB3aGVuIGEgcnVsZSBvbmx5IGNvbnRhaW5zXG4gKiAgYSBwYXR0ZXJuIHByb3BlcnR5IGJ1dCBpcyBub3QgZGVjbGFyZWQgYXMgYSBzdHJpbmcgdHlwZS5cbiAqXG4gKiAgQHBhcmFtIHJ1bGUgVGhlIHZhbGlkYXRpb24gcnVsZS5cbiAqICBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBmaWVsZCBvbiB0aGUgc291cmNlIG9iamVjdC5cbiAqICBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QgYmVpbmcgdmFsaWRhdGVkLlxuICogIEBwYXJhbSBvcHRpb25zIFRoZSB2YWxpZGF0aW9uIG9wdGlvbnMuXG4gKiAgQHBhcmFtIG9wdGlvbnMubWVzc2FnZXMgVGhlIHZhbGlkYXRpb24gbWVzc2FnZXMuXG4gKi9cbmZ1bmN0aW9uIHBhdHRlcm4ocnVsZSwgdmFsdWUsIGNhbGxiYWNrLCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgdmFyIGVycm9ycyA9IFtdO1xuICB2YXIgdmFsaWRhdGUgPSBydWxlLnJlcXVpcmVkIHx8ICFydWxlLnJlcXVpcmVkICYmIHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShydWxlLmZpZWxkKTtcbiAgaWYgKHZhbGlkYXRlKSB7XG4gICAgaWYgKCgwLCBfdXRpbC5pc0VtcHR5VmFsdWUpKHZhbHVlLCAnc3RyaW5nJykgJiYgIXJ1bGUucmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cbiAgICBfcnVsZTJbXCJkZWZhdWx0XCJdLnJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBzb3VyY2UsIGVycm9ycywgb3B0aW9ucyk7XG4gICAgaWYgKCEoMCwgX3V0aWwuaXNFbXB0eVZhbHVlKSh2YWx1ZSwgJ3N0cmluZycpKSB7XG4gICAgICBfcnVsZTJbXCJkZWZhdWx0XCJdLnBhdHRlcm4ocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgY2FsbGJhY2soZXJyb3JzKTtcbn1cblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBwYXR0ZXJuO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvcGF0dGVybi5qc1xuLy8gbW9kdWxlIGlkID0gNjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///61\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _rule = __webpack_require__(1);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nvar _util = __webpack_require__(0);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\nfunction date(rule, value, callback, source, options) {\n // console.log(\'integer rule called %j\', rule);\n var errors = [];\n var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);\n // console.log(\'validate on %s value\', value);\n if (validate) {\n if ((0, _util.isEmptyValue)(value) && !rule.required) {\n return callback();\n }\n _rule2["default"].required(rule, value, source, errors, options);\n if (!(0, _util.isEmptyValue)(value)) {\n _rule2["default"].type(rule, value, source, errors, options);\n if (value) {\n _rule2["default"].range(rule, value.getTime(), source, errors, options);\n }\n }\n }\n callback(errors);\n}\n\nexports["default"] = date;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvZGF0ZS5qcz8wMjJiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjYyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3J1bGUgPSByZXF1aXJlKCcuLi9ydWxlLycpO1xuXG52YXIgX3J1bGUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcnVsZSk7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGRhdGUocnVsZSwgdmFsdWUsIGNhbGxiYWNrLCBzb3VyY2UsIG9wdGlvbnMpIHtcbiAgLy8gY29uc29sZS5sb2coJ2ludGVnZXIgcnVsZSBjYWxsZWQgJWonLCBydWxlKTtcbiAgdmFyIGVycm9ycyA9IFtdO1xuICB2YXIgdmFsaWRhdGUgPSBydWxlLnJlcXVpcmVkIHx8ICFydWxlLnJlcXVpcmVkICYmIHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShydWxlLmZpZWxkKTtcbiAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlIG9uICVzIHZhbHVlJywgdmFsdWUpO1xuICBpZiAodmFsaWRhdGUpIHtcbiAgICBpZiAoKDAsIF91dGlsLmlzRW1wdHlWYWx1ZSkodmFsdWUpICYmICFydWxlLnJlcXVpcmVkKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICB9XG4gICAgX3J1bGUyW1wiZGVmYXVsdFwiXS5yZXF1aXJlZChydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgIGlmICghKDAsIF91dGlsLmlzRW1wdHlWYWx1ZSkodmFsdWUpKSB7XG4gICAgICBfcnVsZTJbXCJkZWZhdWx0XCJdLnR5cGUocnVsZSwgdmFsdWUsIHNvdXJjZSwgZXJyb3JzLCBvcHRpb25zKTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBfcnVsZTJbXCJkZWZhdWx0XCJdLnJhbmdlKHJ1bGUsIHZhbHVlLmdldFRpbWUoKSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjYWxsYmFjayhlcnJvcnMpO1xufVxuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGRhdGU7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvbGliL3ZhbGlkYXRvci9kYXRlLmpzXG4vLyBtb2R1bGUgaWQgPSA2MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///62\n')},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };\n\nvar _rule = __webpack_require__(1);\n\nvar _rule2 = _interopRequireDefault(_rule);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }\n\nfunction required(rule, value, callback, source, options) {\n var errors = [];\n var type = Array.isArray(value) ? \'array\' : typeof value === \'undefined\' ? \'undefined\' : _typeof(value);\n _rule2["default"].required(rule, value, source, errors, options, type);\n callback(errors);\n}\n\nexports["default"] = required;\nmodule.exports = exports[\'default\'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvcmVxdWlyZWQuanM/NDI5ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRCxvR0FBb0csbUJBQW1CLEVBQUUsbUJBQW1CLDhIQUE4SDs7QUFFMVE7O0FBRUE7O0FBRUEsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6IjYzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbnZhciBfcnVsZSA9IHJlcXVpcmUoJy4uL3J1bGUvJyk7XG5cbnZhciBfcnVsZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9ydWxlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHJlcXVpcmVkKHJ1bGUsIHZhbHVlLCBjYWxsYmFjaywgc291cmNlLCBvcHRpb25zKSB7XG4gIHZhciBlcnJvcnMgPSBbXTtcbiAgdmFyIHR5cGUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/ICdhcnJheScgOiB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHZhbHVlKTtcbiAgX3J1bGUyW1wiZGVmYXVsdFwiXS5yZXF1aXJlZChydWxlLCB2YWx1ZSwgc291cmNlLCBlcnJvcnMsIG9wdGlvbnMsIHR5cGUpO1xuICBjYWxsYmFjayhlcnJvcnMpO1xufVxuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHJlcXVpcmVkO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi92YWxpZGF0b3IvcmVxdWlyZWQuanNcbi8vIG1vZHVsZSBpZCA9IDYzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///63\n')},function(module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.newMessages = newMessages;\nfunction newMessages() {\n return {\n \"default\": 'Validation error on field %s',\n required: '%s is required',\n \"enum\": '%s must be one of %s',\n whitespace: '%s cannot be empty',\n date: {\n format: '%s date %s is invalid for format %s',\n parse: '%s date could not be parsed, %s is invalid ',\n invalid: '%s date %s is invalid'\n },\n types: {\n string: '%s is not a %s',\n method: '%s is not a %s (function)',\n array: '%s is not an %s',\n object: '%s is not an %s',\n number: '%s is not a %s',\n date: '%s is not a %s',\n \"boolean\": '%s is not a %s',\n integer: '%s is not an %s',\n \"float\": '%s is not a %s',\n regexp: '%s is not a valid %s',\n email: '%s is not a valid %s',\n url: '%s is not a valid %s',\n hex: '%s is not a valid %s'\n },\n string: {\n len: '%s must be exactly %s characters',\n min: '%s must be at least %s characters',\n max: '%s cannot be longer than %s characters',\n range: '%s must be between %s and %s characters'\n },\n number: {\n len: '%s must equal %s',\n min: '%s cannot be less than %s',\n max: '%s cannot be greater than %s',\n range: '%s must be between %s and %s'\n },\n array: {\n len: '%s must be exactly %s in length',\n min: '%s cannot be less than %s in length',\n max: '%s cannot be greater than %s in length',\n range: '%s must be between %s and %s in length'\n },\n pattern: {\n mismatch: '%s value %s does not match pattern %s'\n },\n clone: function clone() {\n var cloned = JSON.parse(JSON.stringify(this));\n cloned.clone = this.clone;\n return cloned;\n }\n };\n}\n\nvar messages = exports.messages = newMessages();\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXN5bmMtdmFsaWRhdG9yL2xpYi9tZXNzYWdlcy5qcz9kNmE1Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJmaWxlIjoiNjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm5ld01lc3NhZ2VzID0gbmV3TWVzc2FnZXM7XG5mdW5jdGlvbiBuZXdNZXNzYWdlcygpIHtcbiAgcmV0dXJuIHtcbiAgICBcImRlZmF1bHRcIjogJ1ZhbGlkYXRpb24gZXJyb3Igb24gZmllbGQgJXMnLFxuICAgIHJlcXVpcmVkOiAnJXMgaXMgcmVxdWlyZWQnLFxuICAgIFwiZW51bVwiOiAnJXMgbXVzdCBiZSBvbmUgb2YgJXMnLFxuICAgIHdoaXRlc3BhY2U6ICclcyBjYW5ub3QgYmUgZW1wdHknLFxuICAgIGRhdGU6IHtcbiAgICAgIGZvcm1hdDogJyVzIGRhdGUgJXMgaXMgaW52YWxpZCBmb3IgZm9ybWF0ICVzJyxcbiAgICAgIHBhcnNlOiAnJXMgZGF0ZSBjb3VsZCBub3QgYmUgcGFyc2VkLCAlcyBpcyBpbnZhbGlkICcsXG4gICAgICBpbnZhbGlkOiAnJXMgZGF0ZSAlcyBpcyBpbnZhbGlkJ1xuICAgIH0sXG4gICAgdHlwZXM6IHtcbiAgICAgIHN0cmluZzogJyVzIGlzIG5vdCBhICVzJyxcbiAgICAgIG1ldGhvZDogJyVzIGlzIG5vdCBhICVzIChmdW5jdGlvbiknLFxuICAgICAgYXJyYXk6ICclcyBpcyBub3QgYW4gJXMnLFxuICAgICAgb2JqZWN0OiAnJXMgaXMgbm90IGFuICVzJyxcbiAgICAgIG51bWJlcjogJyVzIGlzIG5vdCBhICVzJyxcbiAgICAgIGRhdGU6ICclcyBpcyBub3QgYSAlcycsXG4gICAgICBcImJvb2xlYW5cIjogJyVzIGlzIG5vdCBhICVzJyxcbiAgICAgIGludGVnZXI6ICclcyBpcyBub3QgYW4gJXMnLFxuICAgICAgXCJmbG9hdFwiOiAnJXMgaXMgbm90IGEgJXMnLFxuICAgICAgcmVnZXhwOiAnJXMgaXMgbm90IGEgdmFsaWQgJXMnLFxuICAgICAgZW1haWw6ICclcyBpcyBub3QgYSB2YWxpZCAlcycsXG4gICAgICB1cmw6ICclcyBpcyBub3QgYSB2YWxpZCAlcycsXG4gICAgICBoZXg6ICclcyBpcyBub3QgYSB2YWxpZCAlcydcbiAgICB9LFxuICAgIHN0cmluZzoge1xuICAgICAgbGVuOiAnJXMgbXVzdCBiZSBleGFjdGx5ICVzIGNoYXJhY3RlcnMnLFxuICAgICAgbWluOiAnJXMgbXVzdCBiZSBhdCBsZWFzdCAlcyBjaGFyYWN0ZXJzJyxcbiAgICAgIG1heDogJyVzIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAlcyBjaGFyYWN0ZXJzJyxcbiAgICAgIHJhbmdlOiAnJXMgbXVzdCBiZSBiZXR3ZWVuICVzIGFuZCAlcyBjaGFyYWN0ZXJzJ1xuICAgIH0sXG4gICAgbnVtYmVyOiB7XG4gICAgICBsZW46ICclcyBtdXN0IGVxdWFsICVzJyxcbiAgICAgIG1pbjogJyVzIGNhbm5vdCBiZSBsZXNzIHRoYW4gJXMnLFxuICAgICAgbWF4OiAnJXMgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiAlcycsXG4gICAgICByYW5nZTogJyVzIG11c3QgYmUgYmV0d2VlbiAlcyBhbmQgJXMnXG4gICAgfSxcbiAgICBhcnJheToge1xuICAgICAgbGVuOiAnJXMgbXVzdCBiZSBleGFjdGx5ICVzIGluIGxlbmd0aCcsXG4gICAgICBtaW46ICclcyBjYW5ub3QgYmUgbGVzcyB0aGFuICVzIGluIGxlbmd0aCcsXG4gICAgICBtYXg6ICclcyBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuICVzIGluIGxlbmd0aCcsXG4gICAgICByYW5nZTogJyVzIG11c3QgYmUgYmV0d2VlbiAlcyBhbmQgJXMgaW4gbGVuZ3RoJ1xuICAgIH0sXG4gICAgcGF0dGVybjoge1xuICAgICAgbWlzbWF0Y2g6ICclcyB2YWx1ZSAlcyBkb2VzIG5vdCBtYXRjaCBwYXR0ZXJuICVzJ1xuICAgIH0sXG4gICAgY2xvbmU6IGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgdmFyIGNsb25lZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcykpO1xuICAgICAgY2xvbmVkLmNsb25lID0gdGhpcy5jbG9uZTtcbiAgICAgIHJldHVybiBjbG9uZWQ7XG4gICAgfVxuICB9O1xufVxuXG52YXIgbWVzc2FnZXMgPSBleHBvcnRzLm1lc3NhZ2VzID0gbmV3TWVzc2FnZXMoKTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9hc3luYy12YWxpZGF0b3IvbGliL21lc3NhZ2VzLmpzXG4vLyBtb2R1bGUgaWQgPSA2NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///64\n")},function(module,exports,__webpack_require__){eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(172);\n\n\n/***/ },\n\n/***/ 3:\n/***/ function(module, exports) {\n\n\t/* globals __VUE_SSR_CONTEXT__ */\n\n\t// this module is a runtime utility for cleaner component module output and will\n\t// be included in the final webpack user bundle\n\n\tmodule.exports = function normalizeComponent (\n\t rawScriptExports,\n\t compiledTemplate,\n\t injectStyles,\n\t scopeId,\n\t moduleIdentifier /* server only */\n\t) {\n\t var esModule\n\t var scriptExports = rawScriptExports = rawScriptExports || {}\n\n\t // ES6 modules interop\n\t var type = typeof rawScriptExports.default\n\t if (type === 'object' || type === 'function') {\n\t esModule = rawScriptExports\n\t scriptExports = rawScriptExports.default\n\t }\n\n\t // Vue.extend constructor export interop\n\t var options = typeof scriptExports === 'function'\n\t ? scriptExports.options\n\t : scriptExports\n\n\t // render functions\n\t if (compiledTemplate) {\n\t options.render = compiledTemplate.render\n\t options.staticRenderFns = compiledTemplate.staticRenderFns\n\t }\n\n\t // scopedId\n\t if (scopeId) {\n\t options._scopeId = scopeId\n\t }\n\n\t var hook\n\t if (moduleIdentifier) { // server build\n\t hook = function (context) {\n\t // 2.3 injection\n\t context = context || (this.$vnode && this.$vnode.ssrContext)\n\t // 2.2 with runInNewContext: true\n\t if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n\t context = __VUE_SSR_CONTEXT__\n\t }\n\t // inject component styles\n\t if (injectStyles) {\n\t injectStyles.call(this, context)\n\t }\n\t // register component module identifier for async chunk inferrence\n\t if (context && context._registeredComponents) {\n\t context._registeredComponents.add(moduleIdentifier)\n\t }\n\t }\n\t // used by ssr in case component is cached and beforeCreate\n\t // never gets called\n\t options._ssrRegister = hook\n\t } else if (injectStyles) {\n\t hook = injectStyles\n\t }\n\n\t if (hook) {\n\t // inject component registration as beforeCreate hook\n\t var existing = options.beforeCreate\n\t options.beforeCreate = existing\n\t ? [].concat(existing, hook)\n\t : [hook]\n\t }\n\n\t return {\n\t esModule: esModule,\n\t exports: scriptExports,\n\t options: options\n\t }\n\t}\n\n\n/***/ },\n\n/***/ 9:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(8);\n\n/***/ },\n\n/***/ 63:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(7);\n\n/***/ },\n\n/***/ 123:\n/***/ function(module, exports) {\n\n\tmodule.exports = __webpack_require__(3);\n\n/***/ },\n\n/***/ 172:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _inputNumber = __webpack_require__(173);\n\n\tvar _inputNumber2 = _interopRequireDefault(_inputNumber);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_inputNumber2.default.install = function (Vue) {\n\t Vue.component(_inputNumber2.default.name, _inputNumber2.default);\n\t};\n\n\texports.default = _inputNumber2.default;\n\n/***/ },\n\n/***/ 173:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(3)(\n\t /* script */\n\t __webpack_require__(174),\n\t /* template */\n\t __webpack_require__(175),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 174:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _input = __webpack_require__(9);\n\n\tvar _input2 = _interopRequireDefault(_input);\n\n\tvar _dom = __webpack_require__(123);\n\n\tvar _debounce = __webpack_require__(63);\n\n\tvar _debounce2 = _interopRequireDefault(_debounce);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\texports.default = {\n\t name: 'ElInputNumber',\n\t directives: {\n\t repeatClick: {\n\t bind: function bind(el, binding, vnode) {\n\t var interval = null;\n\t var startTime = void 0;\n\t var handler = function handler() {\n\t return vnode.context[binding.expression].apply();\n\t };\n\t var clear = function clear() {\n\t if (new Date() - startTime < 100) {\n\t handler();\n\t }\n\t clearInterval(interval);\n\t interval = null;\n\t };\n\n\t (0, _dom.on)(el, 'mousedown', function () {\n\t startTime = new Date();\n\t (0, _dom.once)(document, 'mouseup', clear);\n\t clearInterval(interval);\n\t interval = setInterval(handler, 100);\n\t });\n\t }\n\t }\n\t },\n\t components: {\n\t ElInput: _input2.default\n\t },\n\t props: {\n\t step: {\n\t type: Number,\n\t default: 1\n\t },\n\t max: {\n\t type: Number,\n\t default: Infinity\n\t },\n\t min: {\n\t type: Number,\n\t default: -Infinity\n\t },\n\t value: {\n\t default: 0\n\t },\n\t disabled: Boolean,\n\t size: String,\n\t controls: {\n\t type: Boolean,\n\t default: true\n\t },\n\t debounce: {\n\t type: Number,\n\t default: 300\n\t }\n\t },\n\t data: function data() {\n\t return {\n\t currentValue: 0\n\t };\n\t },\n\n\t watch: {\n\t value: {\n\t immediate: true,\n\t handler: function handler(value) {\n\t var newVal = Number(value);\n\t if (isNaN(newVal)) return;\n\t if (newVal >= this.max) newVal = this.max;\n\t if (newVal <= this.min) newVal = this.min;\n\t this.currentValue = newVal;\n\t this.$emit('input', newVal);\n\t }\n\t }\n\t },\n\t computed: {\n\t minDisabled: function minDisabled() {\n\t return this._decrease(this.value, this.step) < this.min;\n\t },\n\t maxDisabled: function maxDisabled() {\n\t return this._increase(this.value, this.step) > this.max;\n\t },\n\t precision: function precision() {\n\t var value = this.value,\n\t step = this.step,\n\t getPrecision = this.getPrecision;\n\n\t return Math.max(getPrecision(value), getPrecision(step));\n\t }\n\t },\n\t methods: {\n\t toPrecision: function toPrecision(num, precision) {\n\t if (precision === undefined) precision = this.precision;\n\t return parseFloat(parseFloat(Number(num).toFixed(precision)));\n\t },\n\t getPrecision: function getPrecision(value) {\n\t var valueString = value.toString();\n\t var dotPosition = valueString.indexOf('.');\n\t var precision = 0;\n\t if (dotPosition !== -1) {\n\t precision = valueString.length - dotPosition - 1;\n\t }\n\t return precision;\n\t },\n\t _increase: function _increase(val, step) {\n\t if (typeof val !== 'number') return this.currentValue;\n\n\t var precisionFactor = Math.pow(10, this.precision);\n\n\t return this.toPrecision((precisionFactor * val + precisionFactor * step) / precisionFactor);\n\t },\n\t _decrease: function _decrease(val, step) {\n\t if (typeof val !== 'number') return this.currentValue;\n\n\t var precisionFactor = Math.pow(10, this.precision);\n\n\t return this.toPrecision((precisionFactor * val - precisionFactor * step) / precisionFactor);\n\t },\n\t increase: function increase() {\n\t if (this.disabled || this.maxDisabled) return;\n\t var value = this.value || 0;\n\t var newVal = this._increase(value, this.step);\n\t if (newVal > this.max) return;\n\t this.setCurrentValue(newVal);\n\t },\n\t decrease: function decrease() {\n\t if (this.disabled || this.minDisabled) return;\n\t var value = this.value || 0;\n\t var newVal = this._decrease(value, this.step);\n\t if (newVal < this.min) return;\n\t this.setCurrentValue(newVal);\n\t },\n\t handleBlur: function handleBlur() {\n\t this.$refs.input.setCurrentValue(this.currentValue);\n\t },\n\t setCurrentValue: function setCurrentValue(newVal) {\n\t var oldVal = this.currentValue;\n\t if (newVal >= this.max) newVal = this.max;\n\t if (newVal <= this.min) newVal = this.min;\n\t if (oldVal === newVal) {\n\t this.$refs.input.setCurrentValue(this.currentValue);\n\t return;\n\t }\n\t this.$emit('change', newVal, oldVal);\n\t this.$emit('input', newVal);\n\t this.currentValue = newVal;\n\t },\n\t handleInput: function handleInput(value) {\n\t if (value === '') {\n\t return;\n\t }\n\t var newVal = Number(value);\n\t if (!isNaN(newVal)) {\n\t this.setCurrentValue(newVal);\n\t } else {\n\t this.$refs.input.setCurrentValue(this.currentValue);\n\t }\n\t }\n\t },\n\t created: function created() {\n\t var _this = this;\n\n\t this.debounceHandleInput = (0, _debounce2.default)(this.debounce, function (value) {\n\t _this.handleInput(value);\n\t });\n\t }\n\t}; //\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n/***/ },\n\n/***/ 175:\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-input-number\",\n\t class: [\n\t _vm.size ? 'el-input-number--' + _vm.size : '', {\n\t 'is-disabled': _vm.disabled\n\t }, {\n\t 'is-without-controls': !_vm.controls\n\t }\n\t ]\n\t }, [(_vm.controls) ? _c('span', {\n\t directives: [{\n\t name: \"repeat-click\",\n\t rawName: \"v-repeat-click\",\n\t value: (_vm.decrease),\n\t expression: \"decrease\"\n\t }],\n\t staticClass: \"el-input-number__decrease\",\n\t class: {\n\t 'is-disabled': _vm.minDisabled\n\t }\n\t }, [_c('i', {\n\t staticClass: \"el-icon-minus\"\n\t })]) : _vm._e(), (_vm.controls) ? _c('span', {\n\t directives: [{\n\t name: \"repeat-click\",\n\t rawName: \"v-repeat-click\",\n\t value: (_vm.increase),\n\t expression: \"increase\"\n\t }],\n\t staticClass: \"el-input-number__increase\",\n\t class: {\n\t 'is-disabled': _vm.maxDisabled\n\t }\n\t }, [_c('i', {\n\t staticClass: \"el-icon-plus\"\n\t })]) : _vm._e(), _c('el-input', {\n\t ref: \"input\",\n\t attrs: {\n\t \"value\": _vm.currentValue,\n\t \"disabled\": _vm.disabled,\n\t \"size\": _vm.size,\n\t \"max\": _vm.max,\n\t \"min\": _vm.min\n\t },\n\t on: {\n\t \"blur\": _vm.handleBlur,\n\t \"input\": _vm.debounceHandleInput\n\t },\n\t nativeOn: {\n\t \"keydown\": [function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"up\", 38)) { return null; }\n\t $event.preventDefault();\n\t _vm.increase($event)\n\t }, function($event) {\n\t if (!('button' in $event) && _vm._k($event.keyCode, \"down\", 40)) { return null; }\n\t $event.preventDefault();\n\t _vm.decrease($event)\n\t }]\n\t }\n\t }, [(_vm.$slots.prepend) ? _c('template', {\n\t slot: \"prepend\"\n\t }, [_vm._t(\"prepend\")], 2) : _vm._e(), (_vm.$slots.append) ? _c('template', {\n\t slot: \"append\"\n\t }, [_vm._t(\"append\")], 2) : _vm._e()], 2)], 1)\n\t},staticRenderFns: []}\n\n/***/ }\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvaW5wdXQtbnVtYmVyLmpzP2QyNDYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsdUNBQXVDLHVDQUF1QyxnQkFBZ0I7O0FBRTlGO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87O0FBRVA7QUFDQTs7QUFFQSxpQkFBaUIsbUJBQW1CLGFBQWEsMEJBQTBCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLHlFQUF5RSxhQUFhO0FBQ3RGO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsMkVBQTJFLGFBQWE7QUFDeEY7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSixFQUFFOztBQUVGOztBQUVBLFVBQVUiLCJmaWxlIjoiNjUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuXG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG5cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Mik7XG5cblxuLyoqKi8gfSxcblxuLyoqKi8gMzpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5cdC8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG5cdC8vIHRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG5cdC8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlXG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuXHQgIHJhd1NjcmlwdEV4cG9ydHMsXG5cdCAgY29tcGlsZWRUZW1wbGF0ZSxcblx0ICBpbmplY3RTdHlsZXMsXG5cdCAgc2NvcGVJZCxcblx0ICBtb2R1bGVJZGVudGlmaWVyIC8qIHNlcnZlciBvbmx5ICovXG5cdCkge1xuXHQgIHZhciBlc01vZHVsZVxuXHQgIHZhciBzY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMgfHwge31cblxuXHQgIC8vIEVTNiBtb2R1bGVzIGludGVyb3Bcblx0ICB2YXIgdHlwZSA9IHR5cGVvZiByYXdTY3JpcHRFeHBvcnRzLmRlZmF1bHRcblx0ICBpZiAodHlwZSA9PT0gJ29iamVjdCcgfHwgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgZXNNb2R1bGUgPSByYXdTY3JpcHRFeHBvcnRzXG5cdCAgICBzY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cy5kZWZhdWx0XG5cdCAgfVxuXG5cdCAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuXHQgIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcblx0ICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG5cdCAgICA6IHNjcmlwdEV4cG9ydHNcblxuXHQgIC8vIHJlbmRlciBmdW5jdGlvbnNcblx0ICBpZiAoY29tcGlsZWRUZW1wbGF0ZSkge1xuXHQgICAgb3B0aW9ucy5yZW5kZXIgPSBjb21waWxlZFRlbXBsYXRlLnJlbmRlclxuXHQgICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBjb21waWxlZFRlbXBsYXRlLnN0YXRpY1JlbmRlckZuc1xuXHQgIH1cblxuXHQgIC8vIHNjb3BlZElkXG5cdCAgaWYgKHNjb3BlSWQpIHtcblx0ICAgIG9wdGlvbnMuX3Njb3BlSWQgPSBzY29wZUlkXG5cdCAgfVxuXG5cdCAgdmFyIGhvb2tcblx0ICBpZiAobW9kdWxlSWRlbnRpZmllcikgeyAvLyBzZXJ2ZXIgYnVpbGRcblx0ICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuXHQgICAgICAvLyAyLjMgaW5qZWN0aW9uXG5cdCAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8ICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KVxuXHQgICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcblx0ICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuXHQgICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG5cdCAgICAgIH1cblx0ICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcblx0ICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuXHQgICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG5cdCAgICAgIH1cblx0ICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG5cdCAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG5cdCAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG5cdCAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuXHQgICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG5cdCAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcblx0ICAgIGhvb2sgPSBpbmplY3RTdHlsZXNcblx0ICB9XG5cblx0ICBpZiAoaG9vaykge1xuXHQgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcblx0ICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG5cdCAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nXG5cdCAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKVxuXHQgICAgICA6IFtob29rXVxuXHQgIH1cblxuXHQgIHJldHVybiB7XG5cdCAgICBlc01vZHVsZTogZXNNb2R1bGUsXG5cdCAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuXHQgICAgb3B0aW9uczogb3B0aW9uc1xuXHQgIH1cblx0fVxuXG5cbi8qKiovIH0sXG5cbi8qKiovIDk6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9pbnB1dFwiKTtcblxuLyoqKi8gfSxcblxuLyoqKi8gNjM6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ0aHJvdHRsZS1kZWJvdW5jZS9kZWJvdW5jZVwiKTtcblxuLyoqKi8gfSxcblxuLyoqKi8gMTIzOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvZG9tXCIpO1xuXG4vKioqLyB9LFxuXG4vKioqLyAxNzI6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2lucHV0TnVtYmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzMpO1xuXG5cdHZhciBfaW5wdXROdW1iZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW5wdXROdW1iZXIpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X2lucHV0TnVtYmVyMi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfaW5wdXROdW1iZXIyLmRlZmF1bHQubmFtZSwgX2lucHV0TnVtYmVyMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfaW5wdXROdW1iZXIyLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG5cbi8qKiovIDE3Mzpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTc0KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTc1KSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuXG4vKioqLyAxNzQ6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX2lucHV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcblxuXHR2YXIgX2lucHV0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lucHV0KTtcblxuXHR2YXIgX2RvbSA9IF9fd2VicGFja19yZXF1aXJlX18oMTIzKTtcblxuXHR2YXIgX2RlYm91bmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Myk7XG5cblx0dmFyIF9kZWJvdW5jZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kZWJvdW5jZSk7XG5cblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsSW5wdXROdW1iZXInLFxuXHQgIGRpcmVjdGl2ZXM6IHtcblx0ICAgIHJlcGVhdENsaWNrOiB7XG5cdCAgICAgIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG5cdCAgICAgICAgdmFyIGludGVydmFsID0gbnVsbDtcblx0ICAgICAgICB2YXIgc3RhcnRUaW1lID0gdm9pZCAwO1xuXHQgICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gaGFuZGxlcigpIHtcblx0ICAgICAgICAgIHJldHVybiB2bm9kZS5jb250ZXh0W2JpbmRpbmcuZXhwcmVzc2lvbl0uYXBwbHkoKTtcblx0ICAgICAgICB9O1xuXHQgICAgICAgIHZhciBjbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuXHQgICAgICAgICAgaWYgKG5ldyBEYXRlKCkgLSBzdGFydFRpbWUgPCAxMDApIHtcblx0ICAgICAgICAgICAgaGFuZGxlcigpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG5cdCAgICAgICAgICBpbnRlcnZhbCA9IG51bGw7XG5cdCAgICAgICAgfTtcblxuXHQgICAgICAgICgwLCBfZG9tLm9uKShlbCwgJ21vdXNlZG93bicsIGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgIHN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG5cdCAgICAgICAgICAoMCwgX2RvbS5vbmNlKShkb2N1bWVudCwgJ21vdXNldXAnLCBjbGVhcik7XG5cdCAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcblx0ICAgICAgICAgIGludGVydmFsID0gc2V0SW50ZXJ2YWwoaGFuZGxlciwgMTAwKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH0sXG5cdCAgY29tcG9uZW50czoge1xuXHQgICAgRWxJbnB1dDogX2lucHV0Mi5kZWZhdWx0XG5cdCAgfSxcblx0ICBwcm9wczoge1xuXHQgICAgc3RlcDoge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDFcblx0ICAgIH0sXG5cdCAgICBtYXg6IHtcblx0ICAgICAgdHlwZTogTnVtYmVyLFxuXHQgICAgICBkZWZhdWx0OiBJbmZpbml0eVxuXHQgICAgfSxcblx0ICAgIG1pbjoge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IC1JbmZpbml0eVxuXHQgICAgfSxcblx0ICAgIHZhbHVlOiB7XG5cdCAgICAgIGRlZmF1bHQ6IDBcblx0ICAgIH0sXG5cdCAgICBkaXNhYmxlZDogQm9vbGVhbixcblx0ICAgIHNpemU6IFN0cmluZyxcblx0ICAgIGNvbnRyb2xzOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IHRydWVcblx0ICAgIH0sXG5cdCAgICBkZWJvdW5jZToge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDMwMFxuXHQgICAgfVxuXHQgIH0sXG5cdCAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgIGN1cnJlbnRWYWx1ZTogMFxuXHQgICAgfTtcblx0ICB9LFxuXG5cdCAgd2F0Y2g6IHtcblx0ICAgIHZhbHVlOiB7XG5cdCAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcblx0ICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWx1ZSkge1xuXHQgICAgICAgIHZhciBuZXdWYWwgPSBOdW1iZXIodmFsdWUpO1xuXHQgICAgICAgIGlmIChpc05hTihuZXdWYWwpKSByZXR1cm47XG5cdCAgICAgICAgaWYgKG5ld1ZhbCA+PSB0aGlzLm1heCkgbmV3VmFsID0gdGhpcy5tYXg7XG5cdCAgICAgICAgaWYgKG5ld1ZhbCA8PSB0aGlzLm1pbikgbmV3VmFsID0gdGhpcy5taW47XG5cdCAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWw7XG5cdCAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBuZXdWYWwpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblx0ICBjb21wdXRlZDoge1xuXHQgICAgbWluRGlzYWJsZWQ6IGZ1bmN0aW9uIG1pbkRpc2FibGVkKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy5fZGVjcmVhc2UodGhpcy52YWx1ZSwgdGhpcy5zdGVwKSA8IHRoaXMubWluO1xuXHQgICAgfSxcblx0ICAgIG1heERpc2FibGVkOiBmdW5jdGlvbiBtYXhEaXNhYmxlZCgpIHtcblx0ICAgICAgcmV0dXJuIHRoaXMuX2luY3JlYXNlKHRoaXMudmFsdWUsIHRoaXMuc3RlcCkgPiB0aGlzLm1heDtcblx0ICAgIH0sXG5cdCAgICBwcmVjaXNpb246IGZ1bmN0aW9uIHByZWNpc2lvbigpIHtcblx0ICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZSxcblx0ICAgICAgICAgIHN0ZXAgPSB0aGlzLnN0ZXAsXG5cdCAgICAgICAgICBnZXRQcmVjaXNpb24gPSB0aGlzLmdldFByZWNpc2lvbjtcblxuXHQgICAgICByZXR1cm4gTWF0aC5tYXgoZ2V0UHJlY2lzaW9uKHZhbHVlKSwgZ2V0UHJlY2lzaW9uKHN0ZXApKTtcblx0ICAgIH1cblx0ICB9LFxuXHQgIG1ldGhvZHM6IHtcblx0ICAgIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihudW0sIHByZWNpc2lvbikge1xuXHQgICAgICBpZiAocHJlY2lzaW9uID09PSB1bmRlZmluZWQpIHByZWNpc2lvbiA9IHRoaXMucHJlY2lzaW9uO1xuXHQgICAgICByZXR1cm4gcGFyc2VGbG9hdChwYXJzZUZsb2F0KE51bWJlcihudW0pLnRvRml4ZWQocHJlY2lzaW9uKSkpO1xuXHQgICAgfSxcblx0ICAgIGdldFByZWNpc2lvbjogZnVuY3Rpb24gZ2V0UHJlY2lzaW9uKHZhbHVlKSB7XG5cdCAgICAgIHZhciB2YWx1ZVN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cdCAgICAgIHZhciBkb3RQb3NpdGlvbiA9IHZhbHVlU3RyaW5nLmluZGV4T2YoJy4nKTtcblx0ICAgICAgdmFyIHByZWNpc2lvbiA9IDA7XG5cdCAgICAgIGlmIChkb3RQb3NpdGlvbiAhPT0gLTEpIHtcblx0ICAgICAgICBwcmVjaXNpb24gPSB2YWx1ZVN0cmluZy5sZW5ndGggLSBkb3RQb3NpdGlvbiAtIDE7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHByZWNpc2lvbjtcblx0ICAgIH0sXG5cdCAgICBfaW5jcmVhc2U6IGZ1bmN0aW9uIF9pbmNyZWFzZSh2YWwsIHN0ZXApIHtcblx0ICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWU7XG5cblx0ICAgICAgdmFyIHByZWNpc2lvbkZhY3RvciA9IE1hdGgucG93KDEwLCB0aGlzLnByZWNpc2lvbik7XG5cblx0ICAgICAgcmV0dXJuIHRoaXMudG9QcmVjaXNpb24oKHByZWNpc2lvbkZhY3RvciAqIHZhbCArIHByZWNpc2lvbkZhY3RvciAqIHN0ZXApIC8gcHJlY2lzaW9uRmFjdG9yKTtcblx0ICAgIH0sXG5cdCAgICBfZGVjcmVhc2U6IGZ1bmN0aW9uIF9kZWNyZWFzZSh2YWwsIHN0ZXApIHtcblx0ICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInKSByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWU7XG5cblx0ICAgICAgdmFyIHByZWNpc2lvbkZhY3RvciA9IE1hdGgucG93KDEwLCB0aGlzLnByZWNpc2lvbik7XG5cblx0ICAgICAgcmV0dXJuIHRoaXMudG9QcmVjaXNpb24oKHByZWNpc2lvbkZhY3RvciAqIHZhbCAtIHByZWNpc2lvbkZhY3RvciAqIHN0ZXApIC8gcHJlY2lzaW9uRmFjdG9yKTtcblx0ICAgIH0sXG5cdCAgICBpbmNyZWFzZTogZnVuY3Rpb24gaW5jcmVhc2UoKSB7XG5cdCAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMubWF4RGlzYWJsZWQpIHJldHVybjtcblx0ICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZSB8fCAwO1xuXHQgICAgICB2YXIgbmV3VmFsID0gdGhpcy5faW5jcmVhc2UodmFsdWUsIHRoaXMuc3RlcCk7XG5cdCAgICAgIGlmIChuZXdWYWwgPiB0aGlzLm1heCkgcmV0dXJuO1xuXHQgICAgICB0aGlzLnNldEN1cnJlbnRWYWx1ZShuZXdWYWwpO1xuXHQgICAgfSxcblx0ICAgIGRlY3JlYXNlOiBmdW5jdGlvbiBkZWNyZWFzZSgpIHtcblx0ICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5taW5EaXNhYmxlZCkgcmV0dXJuO1xuXHQgICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlIHx8IDA7XG5cdCAgICAgIHZhciBuZXdWYWwgPSB0aGlzLl9kZWNyZWFzZSh2YWx1ZSwgdGhpcy5zdGVwKTtcblx0ICAgICAgaWYgKG5ld1ZhbCA8IHRoaXMubWluKSByZXR1cm47XG5cdCAgICAgIHRoaXMuc2V0Q3VycmVudFZhbHVlKG5ld1ZhbCk7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cigpIHtcblx0ICAgICAgdGhpcy4kcmVmcy5pbnB1dC5zZXRDdXJyZW50VmFsdWUodGhpcy5jdXJyZW50VmFsdWUpO1xuXHQgICAgfSxcblx0ICAgIHNldEN1cnJlbnRWYWx1ZTogZnVuY3Rpb24gc2V0Q3VycmVudFZhbHVlKG5ld1ZhbCkge1xuXHQgICAgICB2YXIgb2xkVmFsID0gdGhpcy5jdXJyZW50VmFsdWU7XG5cdCAgICAgIGlmIChuZXdWYWwgPj0gdGhpcy5tYXgpIG5ld1ZhbCA9IHRoaXMubWF4O1xuXHQgICAgICBpZiAobmV3VmFsIDw9IHRoaXMubWluKSBuZXdWYWwgPSB0aGlzLm1pbjtcblx0ICAgICAgaWYgKG9sZFZhbCA9PT0gbmV3VmFsKSB7XG5cdCAgICAgICAgdGhpcy4kcmVmcy5pbnB1dC5zZXRDdXJyZW50VmFsdWUodGhpcy5jdXJyZW50VmFsdWUpO1xuXHQgICAgICAgIHJldHVybjtcblx0ICAgICAgfVxuXHQgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBuZXdWYWwsIG9sZFZhbCk7XG5cdCAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgbmV3VmFsKTtcblx0ICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWw7XG5cdCAgICB9LFxuXHQgICAgaGFuZGxlSW5wdXQ6IGZ1bmN0aW9uIGhhbmRsZUlucHV0KHZhbHVlKSB7XG5cdCAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIG5ld1ZhbCA9IE51bWJlcih2YWx1ZSk7XG5cdCAgICAgIGlmICghaXNOYU4obmV3VmFsKSkge1xuXHQgICAgICAgIHRoaXMuc2V0Q3VycmVudFZhbHVlKG5ld1ZhbCk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdGhpcy4kcmVmcy5pbnB1dC5zZXRDdXJyZW50VmFsdWUodGhpcy5jdXJyZW50VmFsdWUpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfSxcblx0ICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuXHQgICAgdmFyIF90aGlzID0gdGhpcztcblxuXHQgICAgdGhpcy5kZWJvdW5jZUhhbmRsZUlucHV0ID0gKDAsIF9kZWJvdW5jZTIuZGVmYXVsdCkodGhpcy5kZWJvdW5jZSwgZnVuY3Rpb24gKHZhbHVlKSB7XG5cdCAgICAgIF90aGlzLmhhbmRsZUlucHV0KHZhbHVlKTtcblx0ICAgIH0pO1xuXHQgIH1cblx0fTsgLy9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuLyoqKi8gfSxcblxuLyoqKi8gMTc1OlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0LW51bWJlclwiLFxuXHQgICAgY2xhc3M6IFtcblx0ICAgICAgX3ZtLnNpemUgPyAnZWwtaW5wdXQtbnVtYmVyLS0nICsgX3ZtLnNpemUgOiAnJywge1xuXHQgICAgICAgICdpcy1kaXNhYmxlZCc6IF92bS5kaXNhYmxlZFxuXHQgICAgICB9LCB7XG5cdCAgICAgICAgJ2lzLXdpdGhvdXQtY29udHJvbHMnOiAhX3ZtLmNvbnRyb2xzXG5cdCAgICAgIH1cblx0ICAgIF1cblx0ICB9LCBbKF92bS5jb250cm9scykgPyBfYygnc3BhbicsIHtcblx0ICAgIGRpcmVjdGl2ZXM6IFt7XG5cdCAgICAgIG5hbWU6IFwicmVwZWF0LWNsaWNrXCIsXG5cdCAgICAgIHJhd05hbWU6IFwidi1yZXBlYXQtY2xpY2tcIixcblx0ICAgICAgdmFsdWU6IChfdm0uZGVjcmVhc2UpLFxuXHQgICAgICBleHByZXNzaW9uOiBcImRlY3JlYXNlXCJcblx0ICAgIH1dLFxuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZVwiLFxuXHQgICAgY2xhc3M6IHtcblx0ICAgICAgJ2lzLWRpc2FibGVkJzogX3ZtLm1pbkRpc2FibGVkXG5cdCAgICB9XG5cdCAgfSwgW19jKCdpJywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1taW51c1wiXG5cdCAgfSldKSA6IF92bS5fZSgpLCAoX3ZtLmNvbnRyb2xzKSA/IF9jKCdzcGFuJywge1xuXHQgICAgZGlyZWN0aXZlczogW3tcblx0ICAgICAgbmFtZTogXCJyZXBlYXQtY2xpY2tcIixcblx0ICAgICAgcmF3TmFtZTogXCJ2LXJlcGVhdC1jbGlja1wiLFxuXHQgICAgICB2YWx1ZTogKF92bS5pbmNyZWFzZSksXG5cdCAgICAgIGV4cHJlc3Npb246IFwiaW5jcmVhc2VcIlxuXHQgICAgfV0sXG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlXCIsXG5cdCAgICBjbGFzczoge1xuXHQgICAgICAnaXMtZGlzYWJsZWQnOiBfdm0ubWF4RGlzYWJsZWRcblx0ICAgIH1cblx0ICB9LCBbX2MoJ2knLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1pY29uLXBsdXNcIlxuXHQgIH0pXSkgOiBfdm0uX2UoKSwgX2MoJ2VsLWlucHV0Jywge1xuXHQgICAgcmVmOiBcImlucHV0XCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcInZhbHVlXCI6IF92bS5jdXJyZW50VmFsdWUsXG5cdCAgICAgIFwiZGlzYWJsZWRcIjogX3ZtLmRpc2FibGVkLFxuXHQgICAgICBcInNpemVcIjogX3ZtLnNpemUsXG5cdCAgICAgIFwibWF4XCI6IF92bS5tYXgsXG5cdCAgICAgIFwibWluXCI6IF92bS5taW5cblx0ICAgIH0sXG5cdCAgICBvbjoge1xuXHQgICAgICBcImJsdXJcIjogX3ZtLmhhbmRsZUJsdXIsXG5cdCAgICAgIFwiaW5wdXRcIjogX3ZtLmRlYm91bmNlSGFuZGxlSW5wdXRcblx0ICAgIH0sXG5cdCAgICBuYXRpdmVPbjoge1xuXHQgICAgICBcImtleWRvd25cIjogW2Z1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIGlmICghKCdidXR0b24nIGluICRldmVudCkgJiYgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInVwXCIsIDM4KSkgeyByZXR1cm4gbnVsbDsgfVxuXHQgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHQgICAgICAgIF92bS5pbmNyZWFzZSgkZXZlbnQpXG5cdCAgICAgIH0sIGZ1bmN0aW9uKCRldmVudCkge1xuXHQgICAgICAgIGlmICghKCdidXR0b24nIGluICRldmVudCkgJiYgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImRvd25cIiwgNDApKSB7IHJldHVybiBudWxsOyB9XG5cdCAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdCAgICAgICAgX3ZtLmRlY3JlYXNlKCRldmVudClcblx0ICAgICAgfV1cblx0ICAgIH1cblx0ICB9LCBbKF92bS4kc2xvdHMucHJlcGVuZCkgPyBfYygndGVtcGxhdGUnLCB7XG5cdCAgICBzbG90OiBcInByZXBlbmRcIlxuXHQgIH0sIFtfdm0uX3QoXCJwcmVwZW5kXCIpXSwgMikgOiBfdm0uX2UoKSwgKF92bS4kc2xvdHMuYXBwZW5kKSA/IF9jKCd0ZW1wbGF0ZScsIHtcblx0ICAgIHNsb3Q6IFwiYXBwZW5kXCJcblx0ICB9LCBbX3ZtLl90KFwiYXBwZW5kXCIpXSwgMikgOiBfdm0uX2UoKV0sIDIpXSwgMSlcblx0fSxzdGF0aWNSZW5kZXJGbnM6IFtdfVxuXG4vKioqLyB9XG5cbi8qKioqKiovIH0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL2lucHV0LW51bWJlci5qc1xuLy8gbW9kdWxlIGlkID0gNjVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///65\n")},function(module,exports){eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(237);\n\n\n/***/ },\n\n/***/ 3:\n/***/ function(module, exports) {\n\n\t/* globals __VUE_SSR_CONTEXT__ */\n\n\t// this module is a runtime utility for cleaner component module output and will\n\t// be included in the final webpack user bundle\n\n\tmodule.exports = function normalizeComponent (\n\t rawScriptExports,\n\t compiledTemplate,\n\t injectStyles,\n\t scopeId,\n\t moduleIdentifier /* server only */\n\t) {\n\t var esModule\n\t var scriptExports = rawScriptExports = rawScriptExports || {}\n\n\t // ES6 modules interop\n\t var type = typeof rawScriptExports.default\n\t if (type === 'object' || type === 'function') {\n\t esModule = rawScriptExports\n\t scriptExports = rawScriptExports.default\n\t }\n\n\t // Vue.extend constructor export interop\n\t var options = typeof scriptExports === 'function'\n\t ? scriptExports.options\n\t : scriptExports\n\n\t // render functions\n\t if (compiledTemplate) {\n\t options.render = compiledTemplate.render\n\t options.staticRenderFns = compiledTemplate.staticRenderFns\n\t }\n\n\t // scopedId\n\t if (scopeId) {\n\t options._scopeId = scopeId\n\t }\n\n\t var hook\n\t if (moduleIdentifier) { // server build\n\t hook = function (context) {\n\t // 2.3 injection\n\t context = context || (this.$vnode && this.$vnode.ssrContext)\n\t // 2.2 with runInNewContext: true\n\t if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n\t context = __VUE_SSR_CONTEXT__\n\t }\n\t // inject component styles\n\t if (injectStyles) {\n\t injectStyles.call(this, context)\n\t }\n\t // register component module identifier for async chunk inferrence\n\t if (context && context._registeredComponents) {\n\t context._registeredComponents.add(moduleIdentifier)\n\t }\n\t }\n\t // used by ssr in case component is cached and beforeCreate\n\t // never gets called\n\t options._ssrRegister = hook\n\t } else if (injectStyles) {\n\t hook = injectStyles\n\t }\n\n\t if (hook) {\n\t // inject component registration as beforeCreate hook\n\t var existing = options.beforeCreate\n\t options.beforeCreate = existing\n\t ? [].concat(existing, hook)\n\t : [hook]\n\t }\n\n\t return {\n\t esModule: esModule,\n\t exports: scriptExports,\n\t options: options\n\t }\n\t}\n\n\n/***/ },\n\n/***/ 237:\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\n\tvar _progress = __webpack_require__(238);\n\n\tvar _progress2 = _interopRequireDefault(_progress);\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n\t/* istanbul ignore next */\n\t_progress2.default.install = function (Vue) {\n\t Vue.component(_progress2.default.name, _progress2.default);\n\t};\n\n\texports.default = _progress2.default;\n\n/***/ },\n\n/***/ 238:\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar Component = __webpack_require__(3)(\n\t /* script */\n\t __webpack_require__(239),\n\t /* template */\n\t __webpack_require__(240),\n\t /* styles */\n\t null,\n\t /* scopeId */\n\t null,\n\t /* moduleIdentifier (server only) */\n\t null\n\t)\n\n\tmodule.exports = Component.exports\n\n\n/***/ },\n\n/***/ 239:\n/***/ function(module, exports) {\n\n\t'use strict';\n\n\texports.__esModule = true;\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\t//\n\n\texports.default = {\n\t name: 'ElProgress',\n\t props: {\n\t type: {\n\t type: String,\n\t default: 'line',\n\t validator: function validator(val) {\n\t return ['line', 'circle'].indexOf(val) > -1;\n\t }\n\t },\n\t percentage: {\n\t type: Number,\n\t default: 0,\n\t required: true,\n\t validator: function validator(val) {\n\t return val >= 0 && val <= 100;\n\t }\n\t },\n\t status: {\n\t type: String\n\t },\n\t strokeWidth: {\n\t type: Number,\n\t default: 6\n\t },\n\t textInside: {\n\t type: Boolean,\n\t default: false\n\t },\n\t width: {\n\t type: Number,\n\t default: 126\n\t },\n\t showText: {\n\t type: Boolean,\n\t default: true\n\t }\n\t },\n\t computed: {\n\t barStyle: function barStyle() {\n\t var style = {};\n\t style.width = this.percentage + '%';\n\t return style;\n\t },\n\t relativeStrokeWidth: function relativeStrokeWidth() {\n\t return (this.strokeWidth / this.width * 100).toFixed(1);\n\t },\n\t trackPath: function trackPath() {\n\t var radius = parseInt(50 - parseFloat(this.relativeStrokeWidth) / 2, 10);\n\n\t return 'M 50 50 m 0 -' + radius + ' a ' + radius + ' ' + radius + ' 0 1 1 0 ' + radius * 2 + ' a ' + radius + ' ' + radius + ' 0 1 1 0 -' + radius * 2;\n\t },\n\t perimeter: function perimeter() {\n\t var radius = 50 - parseFloat(this.relativeStrokeWidth) / 2;\n\t return 2 * Math.PI * radius;\n\t },\n\t circlePathStyle: function circlePathStyle() {\n\t var perimeter = this.perimeter;\n\t return {\n\t strokeDasharray: perimeter + 'px,' + perimeter + 'px',\n\t strokeDashoffset: (1 - this.percentage / 100) * perimeter + 'px',\n\t transition: 'stroke-dashoffset 0.6s ease 0s, stroke 0.6s ease'\n\t };\n\t },\n\t stroke: function stroke() {\n\t var ret;\n\t switch (this.status) {\n\t case 'success':\n\t ret = '#13ce66';\n\t break;\n\t case 'exception':\n\t ret = '#ff4949';\n\t break;\n\t default:\n\t ret = '#20a0ff';\n\t }\n\t return ret;\n\t },\n\t iconClass: function iconClass() {\n\t if (this.type === 'line') {\n\t return this.status === 'success' ? 'el-icon-circle-check' : 'el-icon-circle-cross';\n\t } else {\n\t return this.status === 'success' ? 'el-icon-check' : 'el-icon-close';\n\t }\n\t },\n\t progressTextSize: function progressTextSize() {\n\t return this.type === 'line' ? 12 + this.strokeWidth * 0.4 : this.width * 0.111111 + 2;\n\t }\n\t }\n\t};\n\n/***/ },\n\n/***/ 240:\n/***/ function(module, exports) {\n\n\tmodule.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;\n\t return _c('div', {\n\t staticClass: \"el-progress\",\n\t class: [\n\t 'el-progress--' + _vm.type,\n\t _vm.status ? 'is-' + _vm.status : '', {\n\t 'el-progress--without-text': !_vm.showText,\n\t 'el-progress--text-inside': _vm.textInside,\n\t }\n\t ]\n\t }, [(_vm.type === 'line') ? _c('div', {\n\t staticClass: \"el-progress-bar\"\n\t }, [_c('div', {\n\t staticClass: \"el-progress-bar__outer\",\n\t style: ({\n\t height: _vm.strokeWidth + 'px'\n\t })\n\t }, [_c('div', {\n\t staticClass: \"el-progress-bar__inner\",\n\t style: (_vm.barStyle)\n\t }, [(_vm.showText && _vm.textInside) ? _c('div', {\n\t staticClass: \"el-progress-bar__innerText\"\n\t }, [_vm._v(_vm._s(_vm.percentage) + \"%\")]) : _vm._e()])])]) : _c('div', {\n\t staticClass: \"el-progress-circle\",\n\t style: ({\n\t height: _vm.width + 'px',\n\t width: _vm.width + 'px'\n\t })\n\t }, [_c('svg', {\n\t attrs: {\n\t \"viewBox\": \"0 0 100 100\"\n\t }\n\t }, [_c('path', {\n\t staticClass: \"el-progress-circle__track\",\n\t attrs: {\n\t \"d\": _vm.trackPath,\n\t \"stroke\": \"#e5e9f2\",\n\t \"stroke-width\": _vm.relativeStrokeWidth,\n\t \"fill\": \"none\"\n\t }\n\t }), _c('path', {\n\t staticClass: \"el-progress-circle__path\",\n\t style: (_vm.circlePathStyle),\n\t attrs: {\n\t \"d\": _vm.trackPath,\n\t \"stroke-linecap\": \"round\",\n\t \"stroke\": _vm.stroke,\n\t \"stroke-width\": _vm.relativeStrokeWidth,\n\t \"fill\": \"none\"\n\t }\n\t })])]), (_vm.showText && !_vm.textInside) ? _c('div', {\n\t staticClass: \"el-progress__text\",\n\t style: ({\n\t fontSize: _vm.progressTextSize + 'px'\n\t })\n\t }, [(!_vm.status) ? [_vm._v(_vm._s(_vm.percentage) + \"%\")] : _c('i', {\n\t class: _vm.iconClass\n\t })], 2) : _vm._e()])\n\t},staticRenderFns: []}\n\n/***/ }\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvcHJvZ3Jlc3MuanM/MTllOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTs7QUFFQTtBQUNBOztBQUVBOzs7QUFHQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLE9BQU87O0FBRVA7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQSx1Q0FBdUMsdUNBQXVDLGdCQUFnQjs7QUFFOUY7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTzs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EsT0FBTzs7QUFFUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFtQixhQUFhLDBCQUEwQjtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0osRUFBRTs7QUFFRjs7QUFFQSxVQUFVIiwiZmlsZSI6IjY2LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge30sXG4vKioqKioqLyBcdFx0XHRpZDogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4vKioqKioqLyBcdFx0fTtcblxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cblxuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9kaXN0L1wiO1xuXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzcpO1xuXG5cbi8qKiovIH0sXG5cbi8qKiovIDM6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuXHQvLyB0aGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuXHQvLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZVxuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcblx0ICByYXdTY3JpcHRFeHBvcnRzLFxuXHQgIGNvbXBpbGVkVGVtcGxhdGUsXG5cdCAgaW5qZWN0U3R5bGVzLFxuXHQgIHNjb3BlSWQsXG5cdCAgbW9kdWxlSWRlbnRpZmllciAvKiBzZXJ2ZXIgb25seSAqL1xuXHQpIHtcblx0ICB2YXIgZXNNb2R1bGVcblx0ICB2YXIgc2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzIHx8IHt9XG5cblx0ICAvLyBFUzYgbW9kdWxlcyBpbnRlcm9wXG5cdCAgdmFyIHR5cGUgPSB0eXBlb2YgcmF3U2NyaXB0RXhwb3J0cy5kZWZhdWx0XG5cdCAgaWYgKHR5cGUgPT09ICdvYmplY3QnIHx8IHR5cGUgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgIGVzTW9kdWxlID0gcmF3U2NyaXB0RXhwb3J0c1xuXHQgICAgc2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMuZGVmYXVsdFxuXHQgIH1cblxuXHQgIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3Bcblx0ICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG5cdCAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuXHQgICAgOiBzY3JpcHRFeHBvcnRzXG5cblx0ICAvLyByZW5kZXIgZnVuY3Rpb25zXG5cdCAgaWYgKGNvbXBpbGVkVGVtcGxhdGUpIHtcblx0ICAgIG9wdGlvbnMucmVuZGVyID0gY29tcGlsZWRUZW1wbGF0ZS5yZW5kZXJcblx0ICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gY29tcGlsZWRUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnNcblx0ICB9XG5cblx0ICAvLyBzY29wZWRJZFxuXHQgIGlmIChzY29wZUlkKSB7XG5cdCAgICBvcHRpb25zLl9zY29wZUlkID0gc2NvcGVJZFxuXHQgIH1cblxuXHQgIHZhciBob29rXG5cdCAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG5cdCAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0ICAgICAgLy8gMi4zIGluamVjdGlvblxuXHQgICAgICBjb250ZXh0ID0gY29udGV4dCB8fCAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dClcblx0ICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG5cdCAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0ICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuXHQgICAgICB9XG5cdCAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG5cdCAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcblx0ICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuXHQgICAgICB9XG5cdCAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuXHQgICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuXHQgICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuXHQgICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcblx0ICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuXHQgIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG5cdCAgICBob29rID0gaW5qZWN0U3R5bGVzXG5cdCAgfVxuXG5cdCAgaWYgKGhvb2spIHtcblx0ICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG5cdCAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuXHQgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuXHQgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcblx0ICAgICAgOiBbaG9va11cblx0ICB9XG5cblx0ICByZXR1cm4ge1xuXHQgICAgZXNNb2R1bGU6IGVzTW9kdWxlLFxuXHQgICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcblx0ICAgIG9wdGlvbnM6IG9wdGlvbnNcblx0ICB9XG5cdH1cblxuXG4vKioqLyB9LFxuXG4vKioqLyAyMzc6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuXHR2YXIgX3Byb2dyZXNzID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzgpO1xuXG5cdHZhciBfcHJvZ3Jlc3MyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvZ3Jlc3MpO1xuXG5cdGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X3Byb2dyZXNzMi5kZWZhdWx0Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG5cdCAgVnVlLmNvbXBvbmVudChfcHJvZ3Jlc3MyLmRlZmF1bHQubmFtZSwgX3Byb2dyZXNzMi5kZWZhdWx0KTtcblx0fTtcblxuXHRleHBvcnRzLmRlZmF1bHQgPSBfcHJvZ3Jlc3MyLmRlZmF1bHQ7XG5cbi8qKiovIH0sXG5cbi8qKiovIDIzODpcbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdHZhciBDb21wb25lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKFxuXHQgIC8qIHNjcmlwdCAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjM5KSxcblx0ICAvKiB0ZW1wbGF0ZSAqL1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMjQwKSxcblx0ICAvKiBzdHlsZXMgKi9cblx0ICBudWxsLFxuXHQgIC8qIHNjb3BlSWQgKi9cblx0ICBudWxsLFxuXHQgIC8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xuXHQgIG51bGxcblx0KVxuXG5cdG1vZHVsZS5leHBvcnRzID0gQ29tcG9uZW50LmV4cG9ydHNcblxuXG4vKioqLyB9LFxuXG4vKioqLyAyMzk6XG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxuXHQndXNlIHN0cmljdCc7XG5cblx0ZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblx0Ly9cblxuXHRleHBvcnRzLmRlZmF1bHQgPSB7XG5cdCAgbmFtZTogJ0VsUHJvZ3Jlc3MnLFxuXHQgIHByb3BzOiB7XG5cdCAgICB0eXBlOiB7XG5cdCAgICAgIHR5cGU6IFN0cmluZyxcblx0ICAgICAgZGVmYXVsdDogJ2xpbmUnLFxuXHQgICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcblx0ICAgICAgICByZXR1cm4gWydsaW5lJywgJ2NpcmNsZSddLmluZGV4T2YodmFsKSA+IC0xO1xuXHQgICAgICB9XG5cdCAgICB9LFxuXHQgICAgcGVyY2VudGFnZToge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDAsXG5cdCAgICAgIHJlcXVpcmVkOiB0cnVlLFxuXHQgICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcblx0ICAgICAgICByZXR1cm4gdmFsID49IDAgJiYgdmFsIDw9IDEwMDtcblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHN0YXR1czoge1xuXHQgICAgICB0eXBlOiBTdHJpbmdcblx0ICAgIH0sXG5cdCAgICBzdHJva2VXaWR0aDoge1xuXHQgICAgICB0eXBlOiBOdW1iZXIsXG5cdCAgICAgIGRlZmF1bHQ6IDZcblx0ICAgIH0sXG5cdCAgICB0ZXh0SW5zaWRlOiB7XG5cdCAgICAgIHR5cGU6IEJvb2xlYW4sXG5cdCAgICAgIGRlZmF1bHQ6IGZhbHNlXG5cdCAgICB9LFxuXHQgICAgd2lkdGg6IHtcblx0ICAgICAgdHlwZTogTnVtYmVyLFxuXHQgICAgICBkZWZhdWx0OiAxMjZcblx0ICAgIH0sXG5cdCAgICBzaG93VGV4dDoge1xuXHQgICAgICB0eXBlOiBCb29sZWFuLFxuXHQgICAgICBkZWZhdWx0OiB0cnVlXG5cdCAgICB9XG5cdCAgfSxcblx0ICBjb21wdXRlZDoge1xuXHQgICAgYmFyU3R5bGU6IGZ1bmN0aW9uIGJhclN0eWxlKCkge1xuXHQgICAgICB2YXIgc3R5bGUgPSB7fTtcblx0ICAgICAgc3R5bGUud2lkdGggPSB0aGlzLnBlcmNlbnRhZ2UgKyAnJSc7XG5cdCAgICAgIHJldHVybiBzdHlsZTtcblx0ICAgIH0sXG5cdCAgICByZWxhdGl2ZVN0cm9rZVdpZHRoOiBmdW5jdGlvbiByZWxhdGl2ZVN0cm9rZVdpZHRoKCkge1xuXHQgICAgICByZXR1cm4gKHRoaXMuc3Ryb2tlV2lkdGggLyB0aGlzLndpZHRoICogMTAwKS50b0ZpeGVkKDEpO1xuXHQgICAgfSxcblx0ICAgIHRyYWNrUGF0aDogZnVuY3Rpb24gdHJhY2tQYXRoKCkge1xuXHQgICAgICB2YXIgcmFkaXVzID0gcGFyc2VJbnQoNTAgLSBwYXJzZUZsb2F0KHRoaXMucmVsYXRpdmVTdHJva2VXaWR0aCkgLyAyLCAxMCk7XG5cblx0ICAgICAgcmV0dXJuICdNIDUwIDUwIG0gMCAtJyArIHJhZGl1cyArICcgYSAnICsgcmFkaXVzICsgJyAnICsgcmFkaXVzICsgJyAwIDEgMSAwICcgKyByYWRpdXMgKiAyICsgJyBhICcgKyByYWRpdXMgKyAnICcgKyByYWRpdXMgKyAnIDAgMSAxIDAgLScgKyByYWRpdXMgKiAyO1xuXHQgICAgfSxcblx0ICAgIHBlcmltZXRlcjogZnVuY3Rpb24gcGVyaW1ldGVyKCkge1xuXHQgICAgICB2YXIgcmFkaXVzID0gNTAgLSBwYXJzZUZsb2F0KHRoaXMucmVsYXRpdmVTdHJva2VXaWR0aCkgLyAyO1xuXHQgICAgICByZXR1cm4gMiAqIE1hdGguUEkgKiByYWRpdXM7XG5cdCAgICB9LFxuXHQgICAgY2lyY2xlUGF0aFN0eWxlOiBmdW5jdGlvbiBjaXJjbGVQYXRoU3R5bGUoKSB7XG5cdCAgICAgIHZhciBwZXJpbWV0ZXIgPSB0aGlzLnBlcmltZXRlcjtcblx0ICAgICAgcmV0dXJuIHtcblx0ICAgICAgICBzdHJva2VEYXNoYXJyYXk6IHBlcmltZXRlciArICdweCwnICsgcGVyaW1ldGVyICsgJ3B4Jyxcblx0ICAgICAgICBzdHJva2VEYXNob2Zmc2V0OiAoMSAtIHRoaXMucGVyY2VudGFnZSAvIDEwMCkgKiBwZXJpbWV0ZXIgKyAncHgnLFxuXHQgICAgICAgIHRyYW5zaXRpb246ICdzdHJva2UtZGFzaG9mZnNldCAwLjZzIGVhc2UgMHMsIHN0cm9rZSAwLjZzIGVhc2UnXG5cdCAgICAgIH07XG5cdCAgICB9LFxuXHQgICAgc3Ryb2tlOiBmdW5jdGlvbiBzdHJva2UoKSB7XG5cdCAgICAgIHZhciByZXQ7XG5cdCAgICAgIHN3aXRjaCAodGhpcy5zdGF0dXMpIHtcblx0ICAgICAgICBjYXNlICdzdWNjZXNzJzpcblx0ICAgICAgICAgIHJldCA9ICcjMTNjZTY2Jztcblx0ICAgICAgICAgIGJyZWFrO1xuXHQgICAgICAgIGNhc2UgJ2V4Y2VwdGlvbic6XG5cdCAgICAgICAgICByZXQgPSAnI2ZmNDk0OSc7XG5cdCAgICAgICAgICBicmVhaztcblx0ICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgcmV0ID0gJyMyMGEwZmYnO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiByZXQ7XG5cdCAgICB9LFxuXHQgICAgaWNvbkNsYXNzOiBmdW5jdGlvbiBpY29uQ2xhc3MoKSB7XG5cdCAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdsaW5lJykge1xuXHQgICAgICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnID8gJ2VsLWljb24tY2lyY2xlLWNoZWNrJyA6ICdlbC1pY29uLWNpcmNsZS1jcm9zcyc7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSAnc3VjY2VzcycgPyAnZWwtaWNvbi1jaGVjaycgOiAnZWwtaWNvbi1jbG9zZSc7XG5cdCAgICAgIH1cblx0ICAgIH0sXG5cdCAgICBwcm9ncmVzc1RleHRTaXplOiBmdW5jdGlvbiBwcm9ncmVzc1RleHRTaXplKCkge1xuXHQgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnbGluZScgPyAxMiArIHRoaXMuc3Ryb2tlV2lkdGggKiAwLjQgOiB0aGlzLndpZHRoICogMC4xMTExMTEgKyAyO1xuXHQgICAgfVxuXHQgIH1cblx0fTtcblxuLyoqKi8gfSxcblxuLyoqKi8gMjQwOlxuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHM9e3JlbmRlcjpmdW5jdGlvbiAoKXt2YXIgX3ZtPXRoaXM7dmFyIF9oPV92bS4kY3JlYXRlRWxlbWVudDt2YXIgX2M9X3ZtLl9zZWxmLl9jfHxfaDtcblx0ICByZXR1cm4gX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzXCIsXG5cdCAgICBjbGFzczogW1xuXHQgICAgICAnZWwtcHJvZ3Jlc3MtLScgKyBfdm0udHlwZSxcblx0ICAgICAgX3ZtLnN0YXR1cyA/ICdpcy0nICsgX3ZtLnN0YXR1cyA6ICcnLCB7XG5cdCAgICAgICAgJ2VsLXByb2dyZXNzLS13aXRob3V0LXRleHQnOiAhX3ZtLnNob3dUZXh0LFxuXHQgICAgICAgICdlbC1wcm9ncmVzcy0tdGV4dC1pbnNpZGUnOiBfdm0udGV4dEluc2lkZSxcblx0ICAgICAgfVxuXHQgICAgXVxuXHQgIH0sIFsoX3ZtLnR5cGUgPT09ICdsaW5lJykgPyBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtYmFyXCJcblx0ICB9LCBbX2MoJ2RpdicsIHtcblx0ICAgIHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzLWJhcl9fb3V0ZXJcIixcblx0ICAgIHN0eWxlOiAoe1xuXHQgICAgICBoZWlnaHQ6IF92bS5zdHJva2VXaWR0aCArICdweCdcblx0ICAgIH0pXG5cdCAgfSwgW19jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzcy1iYXJfX2lubmVyXCIsXG5cdCAgICBzdHlsZTogKF92bS5iYXJTdHlsZSlcblx0ICB9LCBbKF92bS5zaG93VGV4dCAmJiBfdm0udGV4dEluc2lkZSkgPyBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtYmFyX19pbm5lclRleHRcIlxuXHQgIH0sIFtfdm0uX3YoX3ZtLl9zKF92bS5wZXJjZW50YWdlKSArIFwiJVwiKV0pIDogX3ZtLl9lKCldKV0pXSkgOiBfYygnZGl2Jywge1xuXHQgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtY2lyY2xlXCIsXG5cdCAgICBzdHlsZTogKHtcblx0ICAgICAgaGVpZ2h0OiBfdm0ud2lkdGggKyAncHgnLFxuXHQgICAgICB3aWR0aDogX3ZtLndpZHRoICsgJ3B4J1xuXHQgICAgfSlcblx0ICB9LCBbX2MoJ3N2ZycsIHtcblx0ICAgIGF0dHJzOiB7XG5cdCAgICAgIFwidmlld0JveFwiOiBcIjAgMCAxMDAgMTAwXCJcblx0ICAgIH1cblx0ICB9LCBbX2MoJ3BhdGgnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzcy1jaXJjbGVfX3RyYWNrXCIsXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcImRcIjogX3ZtLnRyYWNrUGF0aCxcblx0ICAgICAgXCJzdHJva2VcIjogXCIjZTVlOWYyXCIsXG5cdCAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IF92bS5yZWxhdGl2ZVN0cm9rZVdpZHRoLFxuXHQgICAgICBcImZpbGxcIjogXCJub25lXCJcblx0ICAgIH1cblx0ICB9KSwgX2MoJ3BhdGgnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzcy1jaXJjbGVfX3BhdGhcIixcblx0ICAgIHN0eWxlOiAoX3ZtLmNpcmNsZVBhdGhTdHlsZSksXG5cdCAgICBhdHRyczoge1xuXHQgICAgICBcImRcIjogX3ZtLnRyYWNrUGF0aCxcblx0ICAgICAgXCJzdHJva2UtbGluZWNhcFwiOiBcInJvdW5kXCIsXG5cdCAgICAgIFwic3Ryb2tlXCI6IF92bS5zdHJva2UsXG5cdCAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IF92bS5yZWxhdGl2ZVN0cm9rZVdpZHRoLFxuXHQgICAgICBcImZpbGxcIjogXCJub25lXCJcblx0ICAgIH1cblx0ICB9KV0pXSksIChfdm0uc2hvd1RleHQgJiYgIV92bS50ZXh0SW5zaWRlKSA/IF9jKCdkaXYnLCB7XG5cdCAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzc19fdGV4dFwiLFxuXHQgICAgc3R5bGU6ICh7XG5cdCAgICAgIGZvbnRTaXplOiBfdm0ucHJvZ3Jlc3NUZXh0U2l6ZSArICdweCdcblx0ICAgIH0pXG5cdCAgfSwgWyghX3ZtLnN0YXR1cykgPyBbX3ZtLl92KF92bS5fcyhfdm0ucGVyY2VudGFnZSkgKyBcIiVcIildIDogX2MoJ2knLCB7XG5cdCAgICBjbGFzczogX3ZtLmljb25DbGFzc1xuXHQgIH0pXSwgMikgOiBfdm0uX2UoKV0pXG5cdH0sc3RhdGljUmVuZGVyRm5zOiBbXX1cblxuLyoqKi8gfVxuXG4vKioqKioqLyB9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9wcm9ncmVzcy5qc1xuLy8gbW9kdWxlIGlkID0gNjZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///66\n")},function(module,exports,__webpack_require__){"use strict";eval("/* WEBPACK VAR INJECTION */(function(process) {\n\nexports.__esModule = true;\n/**\n * Show migrating guide in browser console.\n *\n * Usage:\n * import Migrating from 'element-ui/src/mixins/migrating';\n *\n * mixins: [Migrating]\n *\n * add getMigratingConfig method for your component.\n * getMigratingConfig() {\n * return {\n * props: {\n * 'allow-no-selection': 'allow-no-selection is removed.',\n * 'selection-mode': 'selection-mode is removed.'\n * },\n * events: {\n * selectionchange: 'selectionchange is renamed to selection-change.'\n * }\n * };\n * },\n */\nexports.default = {\n mounted: function mounted() {\n if (process.env.NODE_ENV === 'production') return;\n if (!this.$vnode) return;\n\n var _getMigratingConfig = this.getMigratingConfig(),\n props = _getMigratingConfig.props,\n events = _getMigratingConfig.events;\n\n var _$vnode = this.$vnode,\n data = _$vnode.data,\n componentOptions = _$vnode.componentOptions;\n\n var definedProps = data.attrs || {};\n var definedEvents = componentOptions.listeners || {};\n\n for (var propName in definedProps) {\n if (definedProps.hasOwnProperty(propName) && props[propName]) {\n console.warn('[Element Migrating][Attribute]: ' + props[propName]);\n }\n }\n\n for (var eventName in definedEvents) {\n if (definedEvents.hasOwnProperty(eventName) && events[eventName]) {\n console.warn('[Element Migrating][Event]: ' + events[eventName]);\n }\n }\n },\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {},\n events: {}\n };\n }\n }\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(6)))\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbWl4aW5zL21pZ3JhdGluZy5qcz82OTZlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIrQ0FBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFIiwiZmlsZSI6IjY3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuLyoqXG4gKiBTaG93IG1pZ3JhdGluZyBndWlkZSBpbiBicm93c2VyIGNvbnNvbGUuXG4gKlxuICogVXNhZ2U6XG4gKiBpbXBvcnQgTWlncmF0aW5nIGZyb20gJ2VsZW1lbnQtdWkvc3JjL21peGlucy9taWdyYXRpbmcnO1xuICpcbiAqIG1peGluczogW01pZ3JhdGluZ11cbiAqXG4gKiBhZGQgZ2V0TWlncmF0aW5nQ29uZmlnIG1ldGhvZCBmb3IgeW91ciBjb21wb25lbnQuXG4gKiAgZ2V0TWlncmF0aW5nQ29uZmlnKCkge1xuICogICAgcmV0dXJuIHtcbiAqICAgICAgcHJvcHM6IHtcbiAqICAgICAgICAnYWxsb3ctbm8tc2VsZWN0aW9uJzogJ2FsbG93LW5vLXNlbGVjdGlvbiBpcyByZW1vdmVkLicsXG4gKiAgICAgICAgJ3NlbGVjdGlvbi1tb2RlJzogJ3NlbGVjdGlvbi1tb2RlIGlzIHJlbW92ZWQuJ1xuICogICAgICB9LFxuICogICAgICBldmVudHM6IHtcbiAqICAgICAgICBzZWxlY3Rpb25jaGFuZ2U6ICdzZWxlY3Rpb25jaGFuZ2UgaXMgcmVuYW1lZCB0byBzZWxlY3Rpb24tY2hhbmdlLidcbiAqICAgICAgfVxuICogICAgfTtcbiAqICB9LFxuICovXG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuJHZub2RlKSByZXR1cm47XG5cbiAgICB2YXIgX2dldE1pZ3JhdGluZ0NvbmZpZyA9IHRoaXMuZ2V0TWlncmF0aW5nQ29uZmlnKCksXG4gICAgICAgIHByb3BzID0gX2dldE1pZ3JhdGluZ0NvbmZpZy5wcm9wcyxcbiAgICAgICAgZXZlbnRzID0gX2dldE1pZ3JhdGluZ0NvbmZpZy5ldmVudHM7XG5cbiAgICB2YXIgXyR2bm9kZSA9IHRoaXMuJHZub2RlLFxuICAgICAgICBkYXRhID0gXyR2bm9kZS5kYXRhLFxuICAgICAgICBjb21wb25lbnRPcHRpb25zID0gXyR2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuXG4gICAgdmFyIGRlZmluZWRQcm9wcyA9IGRhdGEuYXR0cnMgfHwge307XG4gICAgdmFyIGRlZmluZWRFdmVudHMgPSBjb21wb25lbnRPcHRpb25zLmxpc3RlbmVycyB8fCB7fTtcblxuICAgIGZvciAodmFyIHByb3BOYW1lIGluIGRlZmluZWRQcm9wcykge1xuICAgICAgaWYgKGRlZmluZWRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkgJiYgcHJvcHNbcHJvcE5hbWVdKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW0VsZW1lbnQgTWlncmF0aW5nXVtBdHRyaWJ1dGVdOiAnICsgcHJvcHNbcHJvcE5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gZGVmaW5lZEV2ZW50cykge1xuICAgICAgaWYgKGRlZmluZWRFdmVudHMuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSAmJiBldmVudHNbZXZlbnROYW1lXSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50IE1pZ3JhdGluZ11bRXZlbnRdOiAnICsgZXZlbnRzW2V2ZW50TmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TWlncmF0aW5nQ29uZmlnOiBmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm9wczoge30sXG4gICAgICAgIGV2ZW50czoge31cbiAgICAgIH07XG4gICAgfVxuICB9XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL21peGlucy9taWdyYXRpbmcuanNcbi8vIG1vZHVsZSBpZCA9IDY3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///67\n")},function(module,exports){eval("var nestRE = /^(attrs|props|on|nativeOn|class|style|hook)$/\n\nmodule.exports = function mergeJSXProps (objs) {\n return objs.reduce(function (a, b) {\n var aa, bb, key, nestedKey, temp\n for (key in b) {\n aa = a[key]\n bb = b[key]\n if (aa && nestRE.test(key)) {\n // normalize class\n if (key === 'class') {\n if (typeof aa === 'string') {\n temp = aa\n a[key] = aa = {}\n aa[temp] = true\n }\n if (typeof bb === 'string') {\n temp = bb\n b[key] = bb = {}\n bb[temp] = true\n }\n }\n if (key === 'on' || key === 'nativeOn' || key === 'hook') {\n // merge functions\n for (nestedKey in bb) {\n aa[nestedKey] = mergeFn(aa[nestedKey], bb[nestedKey])\n }\n } else if (Array.isArray(aa)) {\n a[key] = aa.concat(bb)\n } else if (Array.isArray(bb)) {\n a[key] = [aa].concat(bb)\n } else {\n for (nestedKey in bb) {\n aa[nestedKey] = bb[nestedKey]\n }\n }\n } else {\n a[key] = b[key]\n }\n }\n return a\n }, {})\n}\n\nfunction mergeFn (a, b) {\n return function () {\n a.apply(this, arguments)\n b.apply(this, arguments)\n }\n}\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtaGVscGVyLXZ1ZS1qc3gtbWVyZ2UtcHJvcHMvaW5kZXguanM/OWVmNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsSUFBSTtBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI2OC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBuZXN0UkUgPSAvXihhdHRyc3xwcm9wc3xvbnxuYXRpdmVPbnxjbGFzc3xzdHlsZXxob29rKSQvXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWVyZ2VKU1hQcm9wcyAob2Jqcykge1xuICByZXR1cm4gb2Jqcy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgYWEsIGJiLCBrZXksIG5lc3RlZEtleSwgdGVtcFxuICAgIGZvciAoa2V5IGluIGIpIHtcbiAgICAgIGFhID0gYVtrZXldXG4gICAgICBiYiA9IGJba2V5XVxuICAgICAgaWYgKGFhICYmIG5lc3RSRS50ZXN0KGtleSkpIHtcbiAgICAgICAgLy8gbm9ybWFsaXplIGNsYXNzXG4gICAgICAgIGlmIChrZXkgPT09ICdjbGFzcycpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGFhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGVtcCA9IGFhXG4gICAgICAgICAgICBhW2tleV0gPSBhYSA9IHt9XG4gICAgICAgICAgICBhYVt0ZW1wXSA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBiYiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRlbXAgPSBiYlxuICAgICAgICAgICAgYltrZXldID0gYmIgPSB7fVxuICAgICAgICAgICAgYmJbdGVtcF0gPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdvbicgfHwga2V5ID09PSAnbmF0aXZlT24nIHx8IGtleSA9PT0gJ2hvb2snKSB7XG4gICAgICAgICAgLy8gbWVyZ2UgZnVuY3Rpb25zXG4gICAgICAgICAgZm9yIChuZXN0ZWRLZXkgaW4gYmIpIHtcbiAgICAgICAgICAgIGFhW25lc3RlZEtleV0gPSBtZXJnZUZuKGFhW25lc3RlZEtleV0sIGJiW25lc3RlZEtleV0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYWEpKSB7XG4gICAgICAgICAgYVtrZXldID0gYWEuY29uY2F0KGJiKVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYmIpKSB7XG4gICAgICAgICAgYVtrZXldID0gW2FhXS5jb25jYXQoYmIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChuZXN0ZWRLZXkgaW4gYmIpIHtcbiAgICAgICAgICAgIGFhW25lc3RlZEtleV0gPSBiYltuZXN0ZWRLZXldXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhW2tleV0gPSBiW2tleV1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFcbiAgfSwge30pXG59XG5cbmZ1bmN0aW9uIG1lcmdlRm4gKGEsIGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBhLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICBiLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgfVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvYmFiZWwtaGVscGVyLXZ1ZS1qc3gtbWVyZ2UtcHJvcHMvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDY4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///68\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nexports.__esModule = true;\nexports.isDef = isDef;\nfunction isDef(val) {\n return val !== undefined && val !== null;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvc2hhcmVkLmpzPzEzZjgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5pc0RlZiA9IGlzRGVmO1xuZnVuY3Rpb24gaXNEZWYodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGw7XG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvc2hhcmVkLmpzXG4vLyBtb2R1bGUgaWQgPSA2OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///69\n")},function(module,exports,__webpack_require__){eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(71);\nif(typeof content === 'string') content = [[module.i, content, '']];\n// Prepare cssTransformation\nvar transform;\n\nvar options = {\"hmr\":true}\noptions.transform = transform\n// add the styles to the DOM\nvar update = __webpack_require__(74)(content, options);\nif(content.locals) module.exports = content.locals;\n// Hot Module Replacement\nif(false) {\n\t// When the styles change, update the <style> tags\n\tif(!content.locals) {\n\t\tmodule.hot.accept(\"!!../../../css-loader/index.js!./index.css\", function() {\n\t\t\tvar newContent = require(\"!!../../../css-loader/index.js!./index.css\");\n\t\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\t\t\tupdate(newContent);\n\t\t});\n\t}\n\t// When the module is disposed, remove the <style> tags\n\tmodule.hot.dispose(function() { update(); });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtZGVmYXVsdC9pbmRleC5jc3M/YWI3NSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLGdDQUFnQyxVQUFVLEVBQUU7QUFDNUMiLCJmaWxlIjoiNzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzdHlsZS1sb2FkZXI6IEFkZHMgc29tZSBjc3MgdG8gdGhlIERPTSBieSBhZGRpbmcgYSA8c3R5bGU+IHRhZ1xuXG4vLyBsb2FkIHRoZSBzdHlsZXNcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9pbmRleC5qcyEuL2luZGV4LmNzc1wiKTtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuLy8gUHJlcGFyZSBjc3NUcmFuc2Zvcm1hdGlvblxudmFyIHRyYW5zZm9ybTtcblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbi8vIGFkZCB0aGUgc3R5bGVzIHRvIHRoZSBET01cbnZhciB1cGRhdGUgPSByZXF1aXJlKFwiIS4uLy4uLy4uL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzXCIpKGNvbnRlbnQsIG9wdGlvbnMpO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50XG5pZihtb2R1bGUuaG90KSB7XG5cdC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG5cdGlmKCFjb250ZW50LmxvY2Fscykge1xuXHRcdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi8uLi9jc3MtbG9hZGVyL2luZGV4LmpzIS4vaW5kZXguY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi9jc3MtbG9hZGVyL2luZGV4LmpzIS4vaW5kZXguY3NzXCIpO1xuXHRcdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cdFx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdFx0fSk7XG5cdH1cblx0Ly8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi90aGVtZS1kZWZhdWx0L2luZGV4LmNzc1xuLy8gbW9kdWxlIGlkID0gNzBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///70\n")},function(module,exports,__webpack_require__){eval('exports = module.exports = __webpack_require__(25)(undefined);\n// imports\n\n\n// module\nexports.push([module.i, "@charset \\"UTF-8\\";.el-breadcrumb:after,.el-breadcrumb:before,.el-button-group:after,.el-button-group:before,.el-form-item:after,.el-form-item:before,.el-form-item__content:after,.el-form-item__content:before{display:table;content:\\"\\"}.el-checkbox-button__original,.el-pagination--small .arrow.disabled,.el-table .hidden-columns,.el-table td.is-hidden>*,.el-table th.is-hidden>*,.el-table--hidden{visibility:hidden}.el-form-item__content:after{clear:both}.el-form-item:after{clear:both}.el-breadcrumb:after{clear:both}.el-button-group:after{clear:both}.el-autocomplete-suggestion.is-loading li:after{display:inline-block;content:\\"\\";height:100%;vertical-align:middle}.el-dialog__header:after,.el-dialog__header:before{display:table;content:\\"\\"}.el-dialog__header:after{clear:both}@font-face{font-family:element-icons;src:url(" + __webpack_require__(72) + ") format(\'woff\'),url(" + __webpack_require__(73) + ") format(\'truetype\');font-weight:400;font-style:normal}[class*=\\" el-icon-\\"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-arrow-down:before{content:\\"\\\\E600\\"}.el-icon-arrow-left:before{content:\\"\\\\E601\\"}.el-icon-arrow-right:before{content:\\"\\\\E602\\"}.el-icon-arrow-up:before{content:\\"\\\\E603\\"}.el-icon-caret-bottom:before{content:\\"\\\\E604\\"}.el-icon-caret-left:before{content:\\"\\\\E605\\"}.el-icon-caret-right:before{content:\\"\\\\E606\\"}.el-icon-caret-top:before{content:\\"\\\\E607\\"}.el-icon-check:before{content:\\"\\\\E608\\"}.el-icon-circle-check:before{content:\\"\\\\E609\\"}.el-icon-circle-close:before{content:\\"\\\\E60A\\"}.el-icon-circle-cross:before{content:\\"\\\\E60B\\"}.el-icon-close:before{content:\\"\\\\E60C\\"}.el-icon-upload:before{content:\\"\\\\E60D\\"}.el-icon-d-arrow-left:before{content:\\"\\\\E60E\\"}.el-icon-d-arrow-right:before{content:\\"\\\\E60F\\"}.el-icon-d-caret:before{content:\\"\\\\E610\\"}.el-icon-date:before{content:\\"\\\\E611\\"}.el-icon-delete:before{content:\\"\\\\E612\\"}.el-icon-document:before{content:\\"\\\\E613\\"}.el-icon-edit:before{content:\\"\\\\E614\\"}.el-icon-information:before{content:\\"\\\\E615\\"}.el-icon-loading:before{content:\\"\\\\E616\\"}.el-icon-menu:before{content:\\"\\\\E617\\"}.el-icon-message:before{content:\\"\\\\E618\\"}.el-icon-minus:before{content:\\"\\\\E619\\"}.el-icon-more:before{content:\\"\\\\E61A\\"}.el-icon-picture:before{content:\\"\\\\E61B\\"}.el-icon-plus:before{content:\\"\\\\E61C\\"}.el-icon-search:before{content:\\"\\\\E61D\\"}.el-icon-setting:before{content:\\"\\\\E61E\\"}.el-icon-share:before{content:\\"\\\\E61F\\"}.el-icon-star-off:before{content:\\"\\\\E620\\"}.el-icon-star-on:before{content:\\"\\\\E621\\"}.el-icon-time:before{content:\\"\\\\E622\\"}.el-icon-warning:before{content:\\"\\\\E623\\"}.el-icon-delete2:before{content:\\"\\\\E624\\"}.el-icon-upload2:before{content:\\"\\\\E627\\"}.el-icon-view:before{content:\\"\\\\E626\\"}.el-icon-loading{animation:rotating 1s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#48576a}.el-pagination:after,.el-pagination:before{display:table;content:\\"\\"}.el-pagination:after{clear:both}.el-pagination button,.el-pagination span{display:inline-block;font-size:13px;min-width:28px;height:28px;line-height:28px;vertical-align:top;box-sizing:border-box}.el-pagination .el-select .el-input{width:110px}.el-pagination .el-select .el-input input{padding-right:25px;border-radius:2px;height:28px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#20a0ff}.el-pagination button.disabled{color:#e4e4e4;background-color:#fff;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination .btn-next,.el-pagination .btn-prev{background:center center no-repeat #fff;background-size:16px;border:1px solid #d1dbe5;cursor:pointer;margin:0;color:#97a8be}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px}.el-pagination .btn-prev{border-radius:2px 0 0 2px;border-right:0}.el-pagination .btn-next{border-radius:0 2px 2px 0;border-left:0}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .el-pager li{border-radius:2px}.el-pagination__sizes{margin:0 10px 0 0}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;border-color:#d1dbe5}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#20a0ff}.el-pagination__jump{margin-left:10px}.el-pagination__total{margin:0 10px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{border:1px solid #d1dbe5;border-radius:2px;line-height:18px;padding:4px 2px;width:30px;text-align:center;margin:0 6px;box-sizing:border-box;transition:border .3s;-moz-appearance:textfield}.el-pager,.el-pager li{vertical-align:top;display:inline-block;margin:0}.el-pagination__editor::-webkit-inner-spin-button,.el-pagination__editor::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__editor:focus{outline:0;border-color:#20a0ff}.el-autocomplete-suggestion__wrap,.el-pager li{border:1px solid #d1dbe5;box-sizing:border-box}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0;padding:0}.el-date-table,.el-radio{-webkit-user-select:none;-ms-user-select:none}.el-date-table,.el-radio,.el-time-panel{-moz-user-select:none}.el-pager li{padding:0 4px;border-right:0;background:#fff;font-size:13px;min-width:28px;height:28px;line-height:28px;text-align:center}.el-pager li:last-child{border-right:1px solid #d1dbe5}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#97a8be}.el-pager li.active+li{border-left:0;padding-left:5px}.el-pager li:hover{color:#20a0ff}.el-pager li.active{border-color:#20a0ff;background-color:#20a0ff;color:#fff;cursor:default}.el-dialog{position:absolute;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%);background:#fff;border-radius:2px;box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box;margin-bottom:50px}.el-dialog--tiny{width:30%}.el-dialog--small{width:50%}.el-dialog--large{width:90%}.el-dialog--full{width:100%;top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{top:0;right:0;bottom:0;left:0;position:fixed;overflow:auto;margin:0}.el-autocomplete,.el-dropdown{display:inline-block;position:relative}.el-dialog__header{padding:20px 20px 0}.el-dialog__headerbtn{float:right;background:0 0;border:none;outline:0;padding:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#bfcbd9}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#20a0ff}.el-dialog__title{line-height:1;font-size:16px;font-weight:700;color:#1f2d3d}.el-dialog__body{padding:30px 20px;color:#48576a;font-size:14px}.el-dialog__footer{padding:10px 20px 15px;text-align:right;box-sizing:border-box}.dialog-fade-enter-active{animation:dialog-fade-in .3s}.dialog-fade-leave-active{animation:dialog-fade-out .3s}@keyframes dialog-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-out{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete-suggestion{margin:5px 0;box-shadow:0 0 6px 0 rgba(0,0,0,.04),0 2px 4px 0 rgba(0,0,0,.12)}.el-autocomplete-suggestion li{list-style:none;line-height:36px;padding:0 10px;margin:0;cursor:pointer;color:#48576a;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li:hover{background-color:#e4e8f1}.el-autocomplete-suggestion li.highlighted{background-color:#20a0ff;color:#fff}.el-autocomplete-suggestion li:active{background-color:#0082e6}.el-autocomplete-suggestion.is-loading li:hover,.el-dropdown-menu{background-color:#fff}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #d1dbe5}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-autocomplete-suggestion__wrap{max-height:280px;overflow:auto;background-color:#fff;padding:6px 0;border-radius:2px}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-dropdown{color:#48576a;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-right:5px;padding-left:5px}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown-menu{margin:5px 0;border:1px solid #d1dbe5;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.12);padding:6px 0;z-index:10;position:absolute;top:0;left:0;min-width:100px}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 10px;margin:0;cursor:pointer}.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#e4e8f1;color:#48576a}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bfcbd9;pointer-events:none}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #d1dbe5}.el-dropdown-menu__item--divided:before{content:\'\';height:6px;display:block;margin:0 -10px;background-color:#fff}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;font-size:14px;color:#48576a;padding:0 20px;cursor:pointer;position:relative;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box;white-space:nowrap}.el-menu{border-radius:2px;list-style:none;position:relative;margin:0;padding-left:0;background-color:#eef1f6}.el-menu:after,.el-menu:before{display:table;content:\\"\\"}.el-menu:after{clear:both}.el-menu li{list-style:none}.el-menu--dark{background-color:#324157}.el-menu--dark .el-menu-item,.el-menu--dark .el-submenu__title{color:#bfcbd9}.el-menu--dark .el-menu-item:hover,.el-menu--dark .el-submenu__title:hover{background-color:#48576a}.el-menu--dark .el-submenu .el-menu{background-color:#1f2d3d}.el-menu--dark .el-submenu .el-menu .el-menu-item:hover{background-color:#48576a}.el-menu--horizontal .el-menu-item{float:left;height:60px;line-height:60px;margin:0;cursor:pointer;position:relative;box-sizing:border-box;border-bottom:5px solid transparent}.el-menu--horizontal .el-menu-item a,.el-menu--horizontal .el-menu-item a:hover{color:inherit}.el-menu--horizontal .el-submenu{float:left;position:relative}.el-menu--horizontal .el-submenu>.el-menu{position:absolute;top:65px;left:0;border:1px solid #d1dbe5;padding:5px 0;background-color:#fff;z-index:100;min-width:100%;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-menu--horizontal .el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:5px solid transparent}.el-menu--horizontal .el-submenu .el-menu-item{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px}.el-menu--horizontal .el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:5px;color:#97a8be;margin-top:-3px}.el-menu--horizontal .el-menu-item:hover,.el-menu--horizontal .el-submenu__title:hover{background-color:#eef1f6}.el-menu--horizontal>.el-menu-item:hover,.el-menu--horizontal>.el-submenu.is-active .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{border-bottom:5px solid #20a0ff}.el-menu--horizontal.el-menu--dark .el-menu-item:hover,.el-menu--horizontal.el-menu--dark .el-submenu__title:hover{background-color:#324157}.el-menu--horizontal.el-menu--dark .el-submenu .el-menu-item:hover,.el-menu--horizontal.el-menu--dark .el-submenu .el-submenu-title:hover,.el-menu-item:hover{background-color:#d1dbe5}.el-menu--horizontal.el-menu--dark .el-submenu .el-menu-item,.el-menu--horizontal.el-menu--dark .el-submenu .el-submenu-title{color:#48576a}.el-menu--horizontal.el-menu--dark .el-submenu .el-menu-item.is-active,.el-menu-item.is-active{color:#20a0ff}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;z-index:10}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-ms-transform:none;transform:none}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center}.el-menu-item *{vertical-align:middle}.el-menu-item:first-child{margin-left:0}.el-menu-item:last-child{margin-right:0}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center}.el-submenu .el-menu{background-color:#e4e8f1}.el-submenu .el-menu-item:hover,.el-submenu__title:hover{background-color:#d1dbe5}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-ms-transform:rotate(180deg);transform:rotateZ(180deg)}.el-submenu.is-active .el-submenu__title{border-bottom-color:#20a0ff}.el-submenu__title{position:relative}.el-submenu__title *{vertical-align:middle}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;transition:transform .3s;font-size:12px}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding-top:15px;line-height:normal;font-size:14px;padding-left:20px;color:#97a8be}.el-radio-button__inner,.el-radio-group,.el-radio__input{line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{transition:.2s;opacity:0}.el-radio{color:#1f2d3d;cursor:pointer;white-space:nowrap}.el-radio+.el-radio{margin-left:15px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0}.el-radio__input.is-focus .el-radio__inner{border-color:#20a0ff}.el-radio__input.is-checked .el-radio__inner{border-color:#20a0ff;background:#20a0ff}.el-radio__input.is-checked .el-radio__inner::after{-ms-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-disabled .el-radio__inner{background-color:#eef1f6;border-color:#d1dbe5;cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#eef1f6}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#d1dbe5;border-color:#d1dbe5}.el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#fff}.el-radio__input.is-disabled+.el-radio__label{color:#bbb;cursor:not-allowed}.el-radio__inner{border:1px solid #bfcbd9;width:18px;height:18px;border-radius:50%;cursor:pointer;box-sizing:border-box}.el-radio__inner:hover{border-color:#20a0ff}.el-radio__inner::after{width:6px;height:6px;border-radius:50%;background-color:#fff;content:\\"\\";position:absolute;left:50%;top:50%;-ms-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);transition:transform .15s cubic-bezier(.71,-.46,.88,.6)}.el-switch__core,.el-switch__label{width:46px;height:22px;cursor:pointer}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio-button,.el-radio-button__inner{position:relative;display:inline-block}.el-radio__label{font-size:14px;padding-left:5px}.el-radio-group{display:inline-block;font-size:0}.el-radio-group .el-radio{font-size:14px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #bfcbd9;border-radius:4px 0 0 4px;box-shadow:none!important}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button__inner{white-space:nowrap;background:#fff;border:1px solid #bfcbd9;border-left:0;color:#1f2d3d;-webkit-appearance:none;text-align:center;box-sizing:border-box;outline:0;margin:0;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1);padding:10px 15px;font-size:14px;border-radius:0}.el-radio-button__inner:hover{color:#20a0ff}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1;left:-999px}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#20a0ff;border-color:#20a0ff;box-shadow:-1px 0 0 0 #20a0ff}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#bfcbd9;cursor:not-allowed;background-image:none;background-color:#eef1f6;border-color:#d1dbe5;box-shadow:none}.el-radio-button--large .el-radio-button__inner{padding:11px 19px;font-size:16px;border-radius:0}.el-radio-button--small .el-radio-button__inner{padding:7px 9px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner{padding:4px;font-size:12px;border-radius:0}.el-switch{display:inline-block;position:relative;font-size:14px;line-height:22px;height:22px;vertical-align:middle}.el-switch__label,.el-switch__label *{position:absolute;font-size:14px;display:inline-block}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-switch.is-disabled .el-switch__core{border-color:#e4e8f1!important;background:#e4e8f1!important}.el-switch.is-disabled .el-switch__core span{background-color:#fbfdff!important}.el-switch.is-disabled .el-switch__core~.el-switch__label *{color:#fbfdff!important}.el-switch.is-checked .el-switch__core{border-color:#20a0ff;background-color:#20a0ff}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{transition:.2s;left:0;top:0}.el-switch__label *{line-height:1;top:4px;color:#fff}.el-switch__label--left i{left:6px}.el-switch__label--right i{right:6px}.el-switch__input{display:none}.el-switch__core{margin:0;display:inline-block;position:relative;border:1px solid #bfcbd9;outline:0;border-radius:12px;box-sizing:border-box;background:#bfcbd9;transition:border-color .3s,background-color .3s}.el-switch__core .el-switch__button{top:0;left:0;position:absolute;border-radius:100%;transition:transform .3s;width:16px;height:16px;background-color:#fff}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #d1dbe5;border-radius:2px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);box-sizing:border-box;margin:5px 0}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#20a0ff;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover,.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#e4e8f1}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:10px;font-family:element-icons;content:\\"\\\\E608\\";font-size:11px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:8px 10px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#48576a;height:36px;line-height:1.5;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.selected{color:#fff;background-color:#20a0ff}.el-select-dropdown__item.selected.hover{background-color:#1c8de0}.el-select-dropdown__item span{line-height:1.5!important}.el-select-dropdown__item.is-disabled{color:#bfcbd9;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-group{margin:0;padding:0}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select-group__wrap{list-style:none;margin:0;padding:0}.el-select-group__title{padding-left:10px;font-size:12px;color:#999;height:30px;line-height:30px}.el-select{display:inline-block;position:relative}.el-select:hover .el-input__inner{border-color:#8391a5}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#20a0ff}.el-select .el-input .el-input__icon{color:#bfcbd9;font-size:12px;transition:transform .3s;-ms-transform:translateY(-50%) rotate(180deg);transform:translateY(-50%) rotateZ(180deg);line-height:16px;top:50%;cursor:pointer}.el-select .el-input .el-input__icon.is-show-close{transition:0s;width:16px;height:16px;font-size:14px;right:8px;text-align:center;-ms-transform:translateY(-50%) rotate(180deg);transform:translateY(-50%) rotateZ(180deg);border-radius:100%;color:#bfcbd9}.el-select .el-input .el-input__icon.is-show-close:hover{color:#97a8be}.el-select .el-input .el-input__icon.is-reverse{-ms-transform:translateY(-50%);transform:translateY(-50%)}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#d1dbe5}.el-select>.el-input{display:block}.el-select .el-tag__close{margin-top:-2px}.el-select .el-tag{height:24px;line-height:24px;box-sizing:border-box;margin:3px 0 3px 6px}.el-select__input{border:none;outline:0;padding:0;margin-left:10px;color:#666;font-size:14px;vertical-align:baseline;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#bfcbd9;line-height:18px;font-size:12px}.el-select__close:hover{color:#97a8be}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%)}.el-table,.el-table td,.el-table th{box-sizing:border-box;position:relative}.el-select__tag{display:inline-block;height:24px;line-height:24px;font-size:14px;border-radius:4px;color:#fff;background-color:#20a0ff}.el-select__tag .el-icon-close{font-size:12px}.el-table{overflow:hidden;width:100%;max-width:100%;background-color:#fff;border:1px solid #dfe6ec;font-size:14px;color:#1f2d3d}.el-table .el-tooltip.cell{white-space:nowrap;min-width:50px}.el-table td,.el-table th{height:40px;min-width:0;text-overflow:ellipsis;vertical-align:middle}.el-table::after,.el-table::before{content:\'\';position:absolute;background-color:#dfe6ec;z-index:1}.el-table td.is-right,.el-table th.is-right{text-align:right}.el-table td.is-left,.el-table th.is-left{text-align:left}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td,.el-table th.is-leaf{border-bottom:1px solid #dfe6ec}.el-table td.gutter,.el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table .cell,.el-table th>div{padding-left:18px;padding-right:18px;box-sizing:border-box;text-overflow:ellipsis}.el-table::before{left:0;bottom:0;width:100%;height:1px}.el-table::after{top:0;right:0;width:1px;height:100%}.el-table .caret-wrapper,.el-table th>.cell{position:relative;display:inline-block;vertical-align:middle}.el-table th{white-space:nowrap;overflow:hidden;background-color:#eef1f6;text-align:left}.el-table th.is-sortable{cursor:pointer}.el-table th>div{display:inline-block;line-height:40px;overflow:hidden;white-space:nowrap}.el-table td>div{box-sizing:border-box}.el-table th.required>div::before{display:inline-block;content:\\"\\";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table th>.cell{word-wrap:normal;text-overflow:ellipsis;line-height:30px;width:100%;box-sizing:border-box}.el-table th>.cell.highlight{color:#20a0ff}.el-table .caret-wrapper{cursor:pointer;margin-left:5px;margin-top:-2px;width:16px;height:30px;overflow:visible;overflow:initial}.el-table .cell,.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table .sort-caret{display:inline-block;width:0;height:0;border:0;content:\\"\\";position:absolute;left:3px;z-index:2}.el-table .sort-caret.ascending,.el-table .sort-caret.descending{border-right:5px solid transparent;border-left:5px solid transparent}.el-table .sort-caret.ascending{top:9px;border-top:none;border-bottom:5px solid #97a8be}.el-table .sort-caret.descending{bottom:9px;border-top:5px solid #97a8be;border-bottom:none}.el-table .ascending .sort-caret.ascending{border-bottom-color:#48576a}.el-table .descending .sort-caret.descending{border-top-color:#48576a}.el-table td.gutter{width:0}.el-table .cell{white-space:normal;word-break:break-all;line-height:24px}.el-badge__content,.el-message__group p,.el-progress-bar__inner,.el-steps.is-horizontal,.el-tabs__nav,.el-tag,.el-time-spinner,.el-tree-node,.el-upload-list__item-name{white-space:nowrap}.el-table tr input[type=checkbox]{margin:0}.el-table tr{background-color:#fff}.el-table .hidden-columns{position:absolute;z-index:-1}.el-table__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-table__empty-text{position:absolute;left:50%;top:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#5e7382}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;font-size:12px;transition:transform .2s ease-in-out;height:40px}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expand-icon--expanded{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expanded-cell{padding:20px 50px;background-color:#fbfdff;box-shadow:inset 0 2px 0 #f4f4f4}.el-table__expanded-cell:hover{background-color:#fbfdff!important}.el-table--fit{border-right:0;border-bottom:0}.el-table--border th,.el-table__fixed-right-patch{border-bottom:1px solid #dfe6ec}.el-table--fit td.gutter,.el-table--fit th.gutter{border-right-width:1px}.el-table--border td,.el-table--border th{border-right:1px solid #dfe6ec}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;box-shadow:1px 0 8px #d3d4d6;overflow-x:hidden}.el-table__fixed-right::before,.el-table__fixed::before{content:\'\';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#dfe6ec;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#eef1f6}.el-table__fixed-right{top:0;left:auto;right:0;box-shadow:-1px 0 8px #d3d4d6}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-header-wrapper thead div{background-color:#eef1f6;color:#1f2d3d}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #dfe6ec;background-color:#fbfdff;color:#1f2d3d}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td{border-top:1px solid #dfe6ec}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed}.el-table__footer-wrapper thead div,.el-table__header-wrapper thead div{background-color:#eef1f6;color:#1f2d3d}.el-table__footer-wrapper tbody td,.el-table__header-wrapper tbody td{background-color:#fbfdff;color:#1f2d3d}.el-table__body-wrapper{overflow:auto;position:relative}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#FAFAFA;background-clip:padding-box}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background:#edf7ff}.el-table__body tr.hover-row.current-row>td,.el-table__body tr.hover-row.el-table__row--striped.current-row>td,.el-table__body tr.hover-row.el-table__row--striped>td,.el-table__body tr.hover-row>td{background-color:#eef1f6}.el-table__body tr.current-row>td{background:#edf7ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #dfe6ec;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;margin-left:5px;cursor:pointer}.el-table__column-filter-trigger i{color:#97a8be}.el-table--enable-row-transition .el-table__body td{transition:background-color .25s ease}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active,.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:opacity .2s linear}.el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#eef1f6;background-clip:padding-box}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #d1dbe5;border-radius:2px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.12);box-sizing:border-box;margin:2px 0}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#e4e8f1;color:#48576a}.el-table-filter__list-item.is-active{background-color:#20a0ff;color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #d1dbe5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#8391a5;cursor:pointer;font-size:14px;padding:0 3px}.el-table-filter__bottom button:hover{color:#20a0ff}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#bfcbd9;cursor:not-allowed}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;min-width:224px;user-select:none}.el-date-table td{width:32px;height:32px;box-sizing:border-box;text-align:center;cursor:pointer}.el-date-table td.next-month,.el-date-table td.prev-month{color:#ddd}.el-date-table td.today{color:#20a0ff;position:relative}.el-date-table td.today:before{content:\\" \\";position:absolute;top:0;right:0;width:0;height:0;border-top:.5em solid #20a0ff;border-left:.5em solid transparent}.el-month-table td .cell,.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px}.el-date-table td.available:hover{background-color:#e4e8f1}.el-date-table td.in-range{background-color:#d2ecff}.el-date-table td.in-range:hover{background-color:#afddff}.el-date-table td.current:not(.disabled),.el-date-table td.end-date,.el-date-table td.start-date{background-color:#20a0ff!important;color:#fff}.el-date-table td.disabled{background-color:#f4f4f4;opacity:1;cursor:not-allowed;color:#ccc}.el-fade-in-enter,.el-fade-in-leave-active,.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active,.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-date-table td.week{font-size:80%;color:#8391a5}.el-month-table,.el-year-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-date-table th{padding:5px;color:#8391a5;font-weight:400}.el-date-table.is-week-mode .el-date-table__row:hover{background-color:#e4e8f1}.el-date-table.is-week-mode .el-date-table__row.current{background-color:#d2ecff}.el-month-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-month-table td .cell{color:#48576a}.el-month-table td .cell:hover{background-color:#e4e8f1}.el-month-table td.disabled .cell{background-color:#f4f4f4;cursor:not-allowed;color:#ccc}.el-month-table td.current:not(.disabled) .cell{background-color:#20a0ff!important;color:#fff}.el-year-table .el-icon{color:#97a8be}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td .cell{color:#48576a}.el-year-table td .cell:hover{background-color:#e4e8f1}.el-year-table td.disabled .cell{background-color:#f4f4f4;cursor:not-allowed;color:#ccc}.el-year-table td.current:not(.disabled) .cell{background-color:#20a0ff!important;color:#fff}.el-date-range-picker{min-width:520px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker.has-sidebar.has-time{min-width:766px}.el-date-range-picker.has-sidebar{min-width:620px}.el-date-range-picker.has-time{min-width:660px}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header button{float:left}.el-date-range-picker__header div{font-size:14px;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-right .el-date-range-picker__header button{float:right}.el-date-range-picker__content.is-right .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__editors-wrap{box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#97a8be}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.el-time-range-picker{min-width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #d1dbe5}.el-picker-panel{color:#48576a;border:1px solid #d1dbe5;box-shadow:0 2px 6px #ccc;background:#fff;border-radius:2px;line-height:20px;margin:5px 0}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:\\"\\";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#48576a;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{background-color:#e4e8f1}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#20a0ff}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#97a8be;border:0;background:0 0;cursor:pointer;outline:0;margin-top:3px}.el-date-picker__header-label.active,.el-date-picker__header-label:hover,.el-picker-panel__icon-btn:hover{color:#20a0ff}.el-picker-panel__link-btn{cursor:pointer;color:#20a0ff;text-decoration:none;padding:15px;font-size:12px}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;box-sizing:border-box;padding-top:6px;background-color:#fbfdff;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-date-picker{min-width:254px}.el-date-picker .el-picker-panel__content{min-width:224px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker.has-sidebar.has-time{min-width:434px}.el-date-picker.has-sidebar{min-width:370px}.el-date-picker.has-time{min-width:324px}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header-label{font-size:14px;padding:0 5px;line-height:22px;text-align:center;cursor:pointer}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px}.time-select-item.selected:not(.disabled){background-color:#20a0ff;color:#fff}.time-select-item.selected:not(.disabled):hover{background-color:#20a0ff}.time-select-item.disabled{color:#d1dbe5;cursor:not-allowed}.time-select-item:hover{background-color:#e4e8f1;cursor:pointer}.el-fade-in-enter-active,.el-fade-in-leave-active,.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active,.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active,.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-ms-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-ms-transform:scaleY(1);transform:scaleY(1);-ms-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-ms-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-ms-transform:scaleY(1);transform:scaleY(1);-ms-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-ms-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-ms-transform:scale(1,1);transform:scale(1,1);-ms-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-ms-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-ms-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-date-editor{position:relative;display:inline-block}.el-date-editor .el-picker-panel{position:absolute;min-width:180px;box-sizing:border-box;box-shadow:0 2px 6px #ccc;background:#fff;z-index:10;top:41px}.el-date-editor.el-input{width:193px}.el-date-editor--daterange.el-input{width:220px}.el-date-editor--datetimerange.el-input{width:350px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33%}.el-time-spinner.has-seconds .el-time-spinner__wrapper:nth-child(2){margin-left:1%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__list{padding:0;margin:0;list-style:none;text-align:center}.el-time-spinner__list::after,.el-time-spinner__list::before{content:\'\';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#e4e8f1;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#fff}.el-time-spinner__item.disabled{color:#d1dbe5;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #d1dbe5;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-ms-user-select:none;user-select:none}.el-popover,.el-tabs--border-card{box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-slider__button,.el-slider__button-wrapper{-webkit-user-select:none;-moz-user-select:none}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.el-time-panel__content::before{content:\\":\\";top:50%;color:#fff;position:absolute;font-size:14px;margin-top:-15px;line-height:16px;background-color:#20a0ff;height:32px;z-index:-1;left:0;right:0;box-sizing:border-box;padding-top:6px;text-align:left}.el-time-panel__content::after{left:50%;margin-left:-2px}.el-time-panel__content::before{padding-left:50%;margin-right:-2px}.el-time-panel__content.has-seconds::after{left:66.66667%}.el-time-panel__content.has-seconds::before{padding-left:33.33333%}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#8391a5}.el-time-panel__btn.confirm{font-weight:800;color:#20a0ff}.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:2px;border:1px solid #d1dbe5;padding:10px;z-index:2000;font-size:12px}.el-popover .popper__arrow,.el-popover .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popover .popper__arrow{border-width:6px}.el-popover .popper__arrow::after{content:\\" \\";border-width:6px}.el-popover[x-placement^=top]{margin-bottom:12px}.el-popover[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#d1dbe5;border-bottom-width:0}.el-popover[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popover[x-placement^=bottom]{margin-top:12px}.el-popover[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#d1dbe5}.el-popover[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popover[x-placement^=right]{margin-left:12px}.el-popover[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#d1dbe5;border-left-width:0}.el-popover[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popover[x-placement^=left]{margin-right:12px}.el-popover[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#d1dbe5}.el-popover[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popover__title{color:#1f2d3d;font-size:13px;line-height:1;margin-bottom:9px}.v-modal-enter{animation:v-modal-in .2s ease}.v-modal-leave{animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-message-box{text-align:left;display:inline-block;vertical-align:middle;background-color:#fff;width:420px;border-radius:3px;font-size:16px;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{content:\\"\\";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:20px 20px 0}.el-message-box__headerbtn{position:absolute;top:19px;right:20px;background:0 0;border:none;outline:0;padding:0;cursor:pointer}.el-message-box__headerbtn .el-message-box__close{color:#999}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#20a0ff}.el-message-box__content{padding:30px 20px;color:#48576a;font-size:14px;position:relative}.el-message-box__input{padding-top:15px}.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#ff4949}.el-message-box__errormsg{color:#ff4949;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:16px;font-weight:700;height:18px;color:#333}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:1.4}.el-message-box__btns{padding:10px 20px 15px;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box__status{position:absolute;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%);font-size:36px!important}.el-message-box__status.el-icon-circle-check{color:#13ce66}.el-message-box__status.el-icon-information{color:#50bfff}.el-message-box__status.el-icon-warning{color:#f7ba2a}.el-message-box__status.el-icon-circle-cross{color:#ff4949}.msgbox-fade-enter-active{animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{animation:msgbox-fade-out .3s}@keyframes msgbox-fade-in{0%{transform:translate3d(0,-20px,0);opacity:0}100%{transform:translate3d(0,0,0);opacity:1}}@keyframes msgbox-fade-out{0%{transform:translate3d(0,0,0);opacity:1}100%{transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:13px;line-height:1}.el-breadcrumb__separator{margin:0 8px;color:#bfcbd9}.el-breadcrumb__item{float:left}.el-breadcrumb__item:last-child .el-breadcrumb__item__inner,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__item__inner:hover{color:#97a8be;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-breadcrumb__item__inner,.el-breadcrumb__item__inner a{transition:color .15s linear;color:#48576a}.el-breadcrumb__item__inner a:hover,.el-breadcrumb__item__inner:hover{color:#20a0ff;cursor:pointer}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner,.el-form-item.is-error .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-textarea__inner{border-color:#ff4949}.el-form-item.is-required .el-form-item__label:before{content:\'*\';color:#ff4949;margin-right:4px}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#48576a;line-height:1;padding:11px 12px 11px 0;box-sizing:border-box}.el-form-item__content{line-height:36px;position:relative;font-size:14px}.el-form-item__error{color:#ff4949;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-tabs__header{border-bottom:1px solid #d1dbe5;padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:3px;background-color:#20a0ff;z-index:1;transition:transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;transition:all .15s}.el-tabs__new-tab .el-icon-plus{-ms-transform:scale(.8,.8);transform:scale(.8,.8)}.el-tabs__new-tab:hover{color:#20a0ff}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap.is-scrollable{padding:0 15px}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#8391a5}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{position:relative;transition:transform .3s;float:left}.el-tabs__item{padding:0 16px;height:42px;box-sizing:border-box;line-height:42px;display:inline-block;list-style:none;font-size:14px;color:#8391a5;position:relative}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-ms-transform:scale(.7,.7);transform:scale(.7,.7);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#97a8be;color:#fff}.el-tabs__item:hover{color:#1f2d3d;cursor:pointer}.el-tabs__item.is-disabled{color:#bbb;cursor:default}.el-tabs__item.is-active{color:#20a0ff}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tag,.slideInLeft-transition,.slideInRight-transition{display:inline-block}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-ms-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close,.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item{border:1px solid transparent;transition:all .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-right:9px;padding-left:9px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border:1px solid #d1dbe5;border-bottom-color:#fff;border-radius:4px 4px 0 0}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-right:16px;padding-left:16px}.el-tabs--border-card{background:#fff;border:1px solid #d1dbe5}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#eef1f6;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item{transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;border-top:0;margin-right:-1px;margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background-color:#fff;border-right-color:#d1dbe5;border-left-color:#d1dbe5}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active:first-child{border-left-color:#d1dbe5}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active:last-child{border-right-color:#d1dbe5}.slideInRight-enter{animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;animation:slideInRight-leave .3s}.slideInLeft-enter{animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;animation:slideInLeft-leave .3s}@keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}100%{transform-origin:0 0;transform:translateX(100%);opacity:0}}@keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(-100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}100%{transform-origin:0 0;transform:translateX(-100%);opacity:0}}.el-tag{background-color:#8391a5;padding:0 5px;height:24px;line-height:22px;font-size:12px;color:#fff;border-radius:4px;box-sizing:border-box;border:1px solid transparent}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;-ms-transform:scale(.75,.75);transform:scale(.75,.75);height:18px;width:18px;line-height:18px;vertical-align:middle;top:-1px;right:-2px}.el-tag .el-icon-close:hover{background-color:#fff;color:#8391a5}.el-tag--gray{background-color:#e4e8f1;border-color:#e4e8f1;color:#48576a}.el-tag--gray .el-tag__close:hover{background-color:#48576a;color:#fff}.el-tag--gray.is-hit{border-color:#48576a}.el-tag--primary{background-color:rgba(32,160,255,.1);border-color:rgba(32,160,255,.2);color:#20a0ff}.el-tag--primary .el-tag__close:hover{background-color:#20a0ff;color:#fff}.el-tag--primary.is-hit{border-color:#20a0ff}.el-tag--success{background-color:rgba(18,206,102,.1);border-color:rgba(18,206,102,.2);color:#13ce66}.el-tag--success .el-tag__close:hover{background-color:#13ce66;color:#fff}.el-tag--success.is-hit{border-color:#13ce66}.el-tag--warning{background-color:rgba(247,186,41,.1);border-color:rgba(247,186,41,.2);color:#f7ba2a}.el-tag--warning .el-tag__close:hover{background-color:#f7ba2a;color:#fff}.el-tag--warning.is-hit{border-color:#f7ba2a}.el-tag--danger{background-color:rgba(255,73,73,.1);border-color:rgba(255,73,73,.2);color:#ff4949}.el-tag--danger .el-tag__close:hover{background-color:#ff4949;color:#fff}.el-tag--danger.is-hit{border-color:#ff4949}.el-tree{cursor:default;background:#fff;border:1px solid #d1dbe5}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#5e7382}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree-node__expand-icon,.el-tree-node__label,.el-tree-node__loading-icon{display:inline-block;vertical-align:middle}.el-tree-node__content{line-height:36px;height:36px;cursor:pointer}.el-tree-node__content>.el-checkbox,.el-tree-node__content>.el-tree-node__expand-icon{margin-right:8px}.el-tree-node__content>.el-checkbox{vertical-align:middle}.el-tree-node__content:hover{background:#e4e8f1}.el-tree-node__expand-icon{cursor:pointer;width:0;height:0;margin-left:10px;border:6px solid transparent;border-right-width:0;border-left-color:#97a8be;border-left-width:7px;-ms-transform:rotate(0);transform:rotate(0);transition:transform .3s ease-in-out}.el-tree-node__expand-icon:hover{border-left-color:#999}.el-tree-node__expand-icon.expanded{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{border-color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:4px;font-size:14px;color:#97a8be}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#edf7ff}.el-alert{width:100%;padding:8px 16px;margin:0;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;color:#fff;opacity:1;display:table;transition:opacity .2s}.el-alert .el-alert__description{color:#fff;font-size:12px;margin:5px 0 0}.el-alert--success{background-color:#13ce66}.el-alert--info{background-color:#50bfff}.el-alert--warning{background-color:#f7ba2a}.el-alert--error{background-color:#ff4949}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px;display:table-cell;color:#fff;vertical-align:middle}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert__closebtn{font-size:12px;color:#fff;opacity:1;top:12px;right:15px;position:absolute;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active{opacity:0}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-notification{width:330px;padding:20px;box-sizing:border-box;border-radius:2px;position:fixed;right:16px;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);transition:opacity .3s,transform .3s,right .3s,top .4s;overflow:hidden}.el-notification .el-icon-circle-check{color:#13ce66}.el-notification .el-icon-circle-cross{color:#ff4949}.el-notification .el-icon-information{color:#50bfff}.el-notification .el-icon-warning{color:#f7ba2a}.el-notification__group{margin-left:0}.el-notification__group.is-with-icon{margin-left:55px}.el-notification__title{font-weight:400;font-size:16px;color:#1f2d3d;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:10px 0 0;color:#8391a5;text-align:justify}.el-notification__icon{width:40px;height:40px;font-size:40px;float:left;position:relative;top:3px}.el-notification__closeBtn{top:20px;right:20px;position:absolute;cursor:pointer;color:#bfcbd9;font-size:14px}.el-notification__closeBtn:hover{color:#97a8be}.el-notification-fade-enter{-ms-transform:translateX(100%);transform:translateX(100%);right:0}.el-input-number{display:inline-block;width:180px;position:relative;line-height:normal}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:82px}.el-input-number.is-without-controls .el-input__inner{padding-right:10px}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#d1dbe5;color:#d1dbe5}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#d1dbe5;cursor:not-allowed}.el-input-number__decrease,.el-input-number__increase{height:auto;border-left:1px solid #bfcbd9;width:36px;line-height:34px;top:1px;text-align:center;color:#97a8be;cursor:pointer;position:absolute;z-index:1}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#20a0ff}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#20a0ff}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#d1dbe5;cursor:not-allowed}.el-input-number__increase{right:0}.el-input-number__decrease{right:37px}.el-input-number--large{width:200px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{line-height:40px;width:42px;font-size:16px}.el-input-number--large .el-input-number__decrease{right:43px}.el-input-number--large .el-input__inner{padding-right:94px}.el-input-number--small{width:130px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{line-height:28px;width:30px;font-size:13px}.el-input-number--small .el-input-number__decrease{right:31px}.el-input-number--small .el-input__inner{padding-right:70px}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:\\" \\";border-width:5px}.el-progress-bar__inner:after,.el-row:after,.el-row:before,.el-slider:after,.el-slider:before,.el-slider__button-wrapper:after,.el-upload-cover:after{content:\\"\\"}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#1f2d3d;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#1f2d3d;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#1f2d3d}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#1f2d3d}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#1f2d3d;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#1f2d3d;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#1f2d3d}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#1f2d3d}.el-tooltip__popper.is-light{background:#fff;border:1px solid #1f2d3d}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#1f2d3d}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#1f2d3d}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#1f2d3d}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#1f2d3d}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.el-tooltip__popper.is-dark{background:#1f2d3d;color:#fff}.el-slider:after,.el-slider:before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper:after{display:inline-block;vertical-align:middle}.el-slider:after{clear:both}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:4px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:4px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-16px;-ms-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{-ms-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:64px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:30px;margin-top:-1px;border:1px solid #bfcbd9;line-height:20px;box-sizing:border-box;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#8391a5}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#20a0ff}.el-slider__runway{width:100%;height:4px;margin:16px 0;background-color:#e4e8f1;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar,.el-slider__runway.disabled .el-slider__button{background-color:#bfcbd9}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-ms-transform:scale(1);transform:scale(1);cursor:not-allowed}.el-slider__input{float:right;margin-top:3px}.el-slider__bar{height:4px;background-color:#20a0ff;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{width:36px;height:36px;position:absolute;z-index:1001;top:-16px;-ms-transform:translateX(-50%);transform:translateX(-50%);background-color:transparent;text-align:center;-ms-user-select:none;user-select:none}.el-slider__button-wrapper:after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:12px;height:12px;background-color:#20a0ff;border-radius:50%;transition:.2s;-ms-user-select:none;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-ms-transform:scale(1.5);transform:scale(1.5);background-color:#1c8de0}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{position:absolute;width:4px;height:4px;border-radius:100%;background-color:#bfcbd9;-ms-transform:translateX(-50%);transform:translateX(-50%)}.el-loading-mask{position:absolute;z-index:10000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{width:50px;height:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-col-pull-0,.el-col-pull-1,.el-col-pull-10,.el-col-pull-11,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-2,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-push-0,.el-col-push-1,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-2,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-row{position:relative}.el-loading-spinner .el-loading-text{color:#20a0ff;margin:3px 0;font-size:14px}.el-loading-spinner .circular{width:42px;height:42px;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#20a0ff;stroke-linecap:round}@keyframes loading-rotate{100%{transform:rotate(360deg)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{box-sizing:border-box}.el-row:after,.el-row:before{display:table}.el-row:after{clear:both}.el-row--flex{display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-align-bottom{-ms-flex-align:end;align-items:flex-end}.el-row--flex.is-align-middle{-ms-flex-align:center;align-items:center}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-justify-space-between{-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-end{-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-center{-ms-flex-pack:center;justify-content:center}.el-col-1,.el-col-10,.el-col-11,.el-col-12,.el-col-13,.el-col-14,.el-col-15,.el-col-16,.el-col-17,.el-col-18,.el-col-19,.el-col-2,.el-col-20,.el-col-21,.el-col-22,.el-col-23,.el-col-24,.el-col-3,.el-col-4,.el-col-5,.el-col-6,.el-col-7,.el-col-8,.el-col-9{float:left;box-sizing:border-box}.el-col-0{width:0}.el-col-offset-0{margin-left:0}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media (max-width:768px){.el-col-xs-0{width:0}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media (min-width:768px){.el-col-sm-0{width:0}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media (min-width:992px){.el-col-md-0{width:0}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media (min-width:1200px){.el-col-lg-0{width:0}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}.el-progress-bar__inner:after{display:inline-block;height:100%;vertical-align:middle}.el-upload{display:inline-block;text-align:center;cursor:pointer}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#8391a5;margin-top:7px}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;cursor:pointer;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover{border-color:#20a0ff;color:#20a0ff}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;box-sizing:border-box;width:360px;height:180px;text-align:center;cursor:pointer;position:relative;overflow:hidden}.el-upload-dragger .el-upload__text{color:#97a8be;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#20a0ff;font-style:normal}.el-upload-dragger .el-icon-upload{font-size:67px;color:#97a8be;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid rgba(191,203,217,.2);margin-top:7px;padding-top:5px}.el-upload-dragger:hover{border-color:#20a0ff}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #20a0ff}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item{transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#48576a;line-height:1.8;margin-top:5px;box-sizing:border-box;border-radius:4px;width:100%;position:relative}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;top:-13px;right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#13ce66}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#48576a;-ms-transform:scale(.7);transform:scale(.7)}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item:hover{background-color:#eef1f6}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#20a0ff;cursor:pointer}.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none}.el-upload-list__item-name{color:#48576a;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;transition:color .3s}.el-upload-list__item-name [class^=el-icon]{color:#97a8be;margin-right:7px;height:100%;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#48576a;display:none}.el-upload-list__item-delete:hover{color:#20a0ff}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-ms-transform:rotate(45deg);transform:rotate(45deg);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-ms-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions:after{display:inline-block;content:\\"\\";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-ms-transform:rotate(45deg);transform:rotate(45deg);box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-ms-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover:after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-ms-transform:rotate(45deg);transform:rotate(45deg);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-ms-transform:rotate(-45deg) scale(.8);transform:rotate(-45deg) scale(.8);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;transition:transform .3s cubic-bezier(.23,1,.32,1) .1s,opacity .3s cubic-bezier(.23,1,.32,1) .1s;margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-ms-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#48576a}.el-progress{position:relative;line-height:1}.el-progress.is-exception .el-progress-bar__inner{background-color:#ff4949}.el-progress.is-exception .el-progress__text{color:#ff4949}.el-progress.is-success .el-progress-bar__inner{background-color:#13ce66}.el-progress.is-success .el-progress__text{color:#13ce66}.el-progress__text{font-size:14px;color:#48576a;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle{display:inline-block}.el-progress--circle .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-ms-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__innerText,.el-spinner{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#e4e8f1;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#20a0ff;text-align:right;border-radius:100px;line-height:1}.el-progress-bar__innerText{color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-time-spinner{width:100%}.el-spinner-inner{animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{100%{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);min-width:300px;padding:10px 12px;box-sizing:border-box;border-radius:2px;position:fixed;left:50%;top:20px;-ms-transform:translateX(-50%);transform:translateX(-50%);background-color:#fff;transition:opacity .3s,transform .4s;overflow:hidden}.el-message .el-icon-circle-check{color:#13ce66}.el-message .el-icon-circle-cross{color:#ff4949}.el-message .el-icon-information{color:#50bfff}.el-message .el-icon-warning{color:#f7ba2a}.el-message__group{margin-left:38px;position:relative;height:20px;line-height:20px;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.el-message__group p{font-size:14px;margin:0 34px 0 0;color:#8391a5;text-align:justify}.el-step__head,.el-steps.is-horizontal.is-center{text-align:center}.el-message__group.is-with-icon{margin-left:0}.el-message__img{width:40px;height:40px;position:absolute;left:0;top:0}.el-message__icon{vertical-align:middle;margin-right:8px}.el-message__closeBtn{top:3px;right:0;position:absolute;cursor:pointer;color:#bfcbd9;font-size:14px}.el-message__closeBtn:hover{color:#97a8be}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-ms-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#ff4949;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;border:1px solid #fff}.el-badge__content.is-dot{width:8px;height:8px;padding:0;right:0;border-radius:50%}.el-badge__content.is-fixed{top:0;right:10px;position:absolute;-ms-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-card{border:1px solid #d1dbe5;border-radius:4px;background-color:#fff;overflow:hidden;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-card__header{padding:18px 20px;border-bottom:1px solid #d1dbe5;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#bfcbd9;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-ms-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{font-size:0}.el-steps>:last-child .el-step__line{display:none}.el-step.is-horizontal,.el-step.is-vertical .el-step__head,.el-step.is-vertical .el-step__main,.el-step__line{display:inline-block}.el-step{position:relative;vertical-align:top}.el-step:last-child .el-step__main{padding-right:0}.el-step.is-vertical .el-step__main{padding-left:10px}.el-step__line{position:absolute;border-color:inherit;background-color:#bfcbd9}.el-step__line.is-vertical{width:2px;box-sizing:border-box;top:32px;bottom:0;left:15px}.el-step__line.is-horizontal{top:15px;height:2px;left:32px;right:0}.el-step__line.is-icon.is-horizontal{right:4px}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;transition:all 150ms;box-sizing:border-box;width:0;height:0}.el-step__icon{display:block;line-height:28px}.el-step__icon>*{line-height:inherit;vertical-align:middle}.el-step__head{width:28px;height:28px;border-radius:50%;background-color:transparent;line-height:28px;font-size:28px;vertical-align:top;transition:all 150ms}.el-carousel__arrow,.el-carousel__button{margin:0;transition:.3s;cursor:pointer;outline:0}.el-step__head.is-finish{color:#20a0ff;border-color:#20a0ff}.el-step__head.is-error{color:#ff4949;border-color:#ff4949}.el-step__head.is-success{color:#13ce66;border-color:#13ce66}.el-step__head.is-process,.el-step__head.is-wait{color:#bfcbd9;border-color:#bfcbd9}.el-step__head.is-text{font-size:14px;border-width:2px;border-style:solid}.el-step__head.is-text.is-finish{color:#fff;background-color:#20a0ff;border-color:#20a0ff}.el-step__head.is-text.is-error{color:#fff;background-color:#ff4949;border-color:#ff4949}.el-step__head.is-text.is-success{color:#fff;background-color:#13ce66;border-color:#13ce66}.el-step__head.is-text.is-wait{color:#bfcbd9;background-color:#fff;border-color:#bfcbd9}.el-step__head.is-text.is-process{color:#fff;background-color:#bfcbd9;border-color:#bfcbd9}.el-step__main{white-space:normal;padding-right:10px;text-align:left}.el-step__title{font-size:14px;line-height:32px;display:inline-block}.el-step__title.is-finish{font-weight:700;color:#20a0ff}.el-step__title.is-error{font-weight:700;color:#ff4949}.el-step__title.is-success{font-weight:700;color:#13ce66}.el-step__title.is-wait{font-weight:400;color:#97a8be}.el-step__title.is-process{font-weight:700;color:#48576a}.el-step__description{font-size:12px;font-weight:400;line-height:14px}.el-step__description.is-finish{color:#20a0ff}.el-step__description.is-error{color:#ff4949}.el-step__description.is-success{color:#13ce66}.el-step__description.is-wait{color:#bfcbd9}.el-step__description.is-process{color:#8391a5}.el-carousel{overflow-x:hidden;position:relative}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;padding:0;width:36px;height:36px;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-ms-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__indicators{position:absolute;list-style:none;bottom:0;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-ms-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#8391a5;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-ms-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{width:auto;height:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;padding:0}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-ms-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-ms-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active .el-scrollbar__bar,.el-scrollbar:focus .el-scrollbar__bar,.el-scrollbar:hover .el-scrollbar__bar{opacity:1;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(151,168,190,.3);transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(151,168,190,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;transition:opacity 120ms ease-out}.el-carousel__item--card,.el-carousel__item.is-animating{transition:transform .4s ease-in-out}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-carousel__item{position:absolute;top:0;left:0;width:100%;height:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-active,.el-cascader .el-icon-circle-close,.el-cascader-menus{z-index:2}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__mask{position:absolute;width:100%;height:100%;top:0;left:0;background-color:#fff;opacity:.24;transition:.2s}.el-collapse{border:1px solid #dfe6ec;border-radius:0}.el-collapse-item:last-child{margin-bottom:-1px}.el-collapse-item.is-active>.el-collapse-item__header .el-collapse-item__header__arrow{-ms-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header{height:43px;line-height:43px;padding-left:15px;background-color:#fff;color:#48576a;cursor:pointer;border-bottom:1px solid #dfe6ec;font-size:13px}.el-collapse-item__header__arrow{margin-right:8px;transition:transform .3s}.el-collapse-item__wrap{will-change:height;background-color:#fbfdff;overflow:hidden;box-sizing:border-box;border-bottom:1px solid #dfe6ec}.el-collapse-item__content{padding:10px 15px;font-size:13px;color:#1f2d3d;line-height:1.769230769230769}.el-cascader{display:inline-block;position:relative}.el-cascader .el-input,.el-cascader .el-input__inner{cursor:pointer}.el-cascader .el-input__icon{transition:none}.el-cascader .el-icon-caret-bottom{transition:transform .3s}.el-cascader .el-icon-caret-bottom.is-reverse{-ms-transform:rotate(180deg);transform:rotateZ(180deg)}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#bbb}.el-cascader__label{position:absolute;left:0;top:0;height:100%;line-height:36px;padding:0 25px 0 10px;color:#1f2d3d;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;box-sizing:border-box;cursor:pointer;font-size:14px;text-align:left}.el-cascader__label span{color:#97a8be}.el-cascader--large{font-size:16px}.el-cascader--large .el-cascader__label{line-height:40px}.el-cascader--small{font-size:13px}.el-cascader--small .el-cascader__label{line-height:28px}.el-cascader-menus{white-space:nowrap;background:#fff;position:absolute;margin:5px 0;border:1px solid #d1dbe5;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04)}.el-cascader-menu{display:inline-block;vertical-align:top;height:204px;overflow:auto;border-right:solid 1px #d1dbe5;background-color:#fff;box-sizing:border-box;margin:0;padding:6px 0;min-width:160px}.el-cascader-menu:last-child{border-right:0}.el-cascader-menu__item{font-size:14px;padding:8px 30px 8px 10px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#48576a;height:36px;line-height:1.5;box-sizing:border-box;cursor:pointer}.el-cascader-menu__item:hover{background-color:#e4e8f1}.el-cascader-menu__item.selected{color:#fff;background-color:#20a0ff}.el-cascader-menu__item.selected.hover{background-color:#1c8de0}.el-cascader-menu__item.is-active{color:#fff;background-color:#20a0ff}.el-cascader-menu__item.is-active:hover{background-color:#1c8de0}.el-cascader-menu__item.is-disabled{color:#bfcbd9;background-color:#fff;cursor:not-allowed}.el-cascader-menu__item.is-disabled:hover{background-color:#fff}.el-cascader-menu__item__keyword{font-weight:700}.el-cascader-menu__item--extensible:after{font-family:element-icons;content:\\"\\\\E606\\";font-size:12px;-ms-transform:scale(.8);transform:scale(.8);color:#bfcbd9;position:absolute;right:10px;margin-top:1px}.el-cascader-menu--flexible{height:auto;max-height:180px;overflow:auto}.el-cascader-menu--flexible .el-cascader-menu__item{overflow:visible}.el-color-hue-slider{position:relative;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-hue-slider__bar{position:relative;background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-ms-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:linear-gradient(to bottom,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-alpha-slider__bar{position:relative;background:linear-gradient(to right,rgba(255,255,255,0) 0,rgba(255,255,255,1) 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper::after{content:\\"\\";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#1f2d3d}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#20a0ff;border-color:#20a0ff}.el-color-dropdown__link-btn{cursor:pointer;color:#20a0ff;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:#4db3ff}.el-color-picker{display:inline-block;position:relative;line-height:normal}.el-color-picker__trigger{display:inline-block;box-sizing:border-box;height:36px;padding:6px;border:1px solid #bfcbd9;border-radius:4px;font-size:0}.el-color-picker__color{position:relative;display:inline-block;box-sizing:border-box;border:1px solid #666;width:22px;height:22px;text-align:center}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty{font-size:12px;vertical-align:middle;color:#666;position:absolute;top:4px;left:4px}.el-color-picker__icon{display:inline-block;position:relative;top:-6px;margin-left:8px;width:12px;color:#888;font-size:12px}.el-input,.el-input__inner{width:100%;display:inline-block}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;background-color:#fff;border:1px solid #d1dbe5;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.12)}.el-input{position:relative;font-size:14px}.el-input.is-disabled .el-input__inner{background-color:#eef1f6;border-color:#d1dbe5;color:#bbb;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#bfcbd9}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#bfcbd9}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#bfcbd9}.el-input.is-disabled .el-input__inner::placeholder{color:#bfcbd9}.el-input.is-active .el-input__inner{outline:0;border-color:#20a0ff}.el-input__inner{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #bfcbd9;box-sizing:border-box;color:#1f2d3d;font-size:inherit;height:36px;line-height:1;outline:0;padding:3px 10px;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-button,.el-checkbox-button__inner{-webkit-appearance:none;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;outline:0;text-align:center}.el-input__inner::-webkit-input-placeholder{color:#97a8be}.el-input__inner::-moz-placeholder{color:#97a8be}.el-input__inner:-ms-input-placeholder{color:#97a8be}.el-input__inner::placeholder{color:#97a8be}.el-input__inner:hover{border-color:#8391a5}.el-input__inner:focus{outline:0;border-color:#20a0ff}.el-input__icon{position:absolute;width:35px;height:100%;right:0;top:0;text-align:center;color:#bfcbd9;transition:all .3s}.el-input__icon:after{content:\'\';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__icon+.el-input__inner{padding-right:35px}.el-input__icon.is-clickable:hover{cursor:pointer;color:#8391a5}.el-input__icon.is-clickable:hover+.el-input__inner{border-color:#8391a5}.el-input--large{font-size:16px}.el-input--large .el-input__inner{height:42px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:30px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:22px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#fbfdff;color:#97a8be;vertical-align:middle;display:table-cell;position:relative;border:1px solid #bfcbd9;border-radius:4px;padding:0 10px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:block;margin:-10px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-button,.el-textarea__inner{font-size:14px;box-sizing:border-box}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-textarea{display:inline-block;width:100%;vertical-align:bottom}.el-textarea.is-disabled .el-textarea__inner{background-color:#eef1f6;border-color:#d1dbe5;color:#bbb;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#bfcbd9}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#bfcbd9}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#bfcbd9}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#bfcbd9}.el-textarea__inner{display:block;resize:vertical;padding:5px 7px;line-height:1.5;width:100%;color:#1f2d3d;background-color:#fff;background-image:none;border:1px solid #bfcbd9;border-radius:4px;transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#97a8be}.el-textarea__inner::-moz-placeholder{color:#97a8be}.el-textarea__inner:-ms-input-placeholder{color:#97a8be}.el-textarea__inner::placeholder{color:#97a8be}.el-textarea__inner:hover{border-color:#8391a5}.el-textarea__inner:focus{outline:0;border-color:#20a0ff}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #c4c4c4;color:#1f2d3d;margin:0;padding:10px 15px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#20a0ff;border-color:#20a0ff}.el-button:active{color:#1d90e6;border-color:#1d90e6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:\'\';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#bfcbd9;cursor:not-allowed;background-image:none;background-color:#eef1f6;border-color:#d1dbe5}.el-checkbox,.el-checkbox__input{cursor:pointer;display:inline-block;position:relative;white-space:nowrap}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#d1dbe5;color:#bfcbd9}.el-button.is-active{color:#1d90e6;border-color:#1d90e6}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#20a0ff;color:#20a0ff}.el-button.is-plain:active{background:#fff;border-color:#1d90e6;color:#1d90e6;outline:0}.el-button--primary{color:#fff;background-color:#20a0ff;border-color:#20a0ff}.el-button--primary:focus,.el-button--primary:hover{background:#4db3ff;border-color:#4db3ff;color:#fff}.el-button--primary.is-active,.el-button--primary:active{background:#1d90e6;border-color:#1d90e6;color:#fff}.el-button--primary:active{outline:0}.el-button--primary.is-plain{background:#fff;border:1px solid #bfcbd9;color:#1f2d3d}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#fff;border-color:#20a0ff;color:#20a0ff}.el-button--primary.is-plain:active{background:#fff;border-color:#1d90e6;color:#1d90e6;outline:0}.el-button--success{color:#fff;background-color:#13ce66;border-color:#13ce66}.el-button--success:focus,.el-button--success:hover{background:#42d885;border-color:#42d885;color:#fff}.el-button--success.is-active,.el-button--success:active{background:#11b95c;border-color:#11b95c;color:#fff}.el-button--success:active{outline:0}.el-button--success.is-plain{background:#fff;border:1px solid #bfcbd9;color:#1f2d3d}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#fff;border-color:#13ce66;color:#13ce66}.el-button--success.is-plain:active{background:#fff;border-color:#11b95c;color:#11b95c;outline:0}.el-button--warning{color:#fff;background-color:#f7ba2a;border-color:#f7ba2a}.el-button--warning:focus,.el-button--warning:hover{background:#f9c855;border-color:#f9c855;color:#fff}.el-button--warning.is-active,.el-button--warning:active{background:#dea726;border-color:#dea726;color:#fff}.el-button--warning:active{outline:0}.el-button--warning.is-plain{background:#fff;border:1px solid #bfcbd9;color:#1f2d3d}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#fff;border-color:#f7ba2a;color:#f7ba2a}.el-button--warning.is-plain:active{background:#fff;border-color:#dea726;color:#dea726;outline:0}.el-button--danger{color:#fff;background-color:#ff4949;border-color:#ff4949}.el-button--danger:focus,.el-button--danger:hover{background:#ff6d6d;border-color:#ff6d6d;color:#fff}.el-button--danger.is-active,.el-button--danger:active{background:#e64242;border-color:#e64242;color:#fff}.el-button--danger:active{outline:0}.el-button--danger.is-plain{background:#fff;border:1px solid #bfcbd9;color:#1f2d3d}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#fff;border-color:#ff4949;color:#ff4949}.el-button--danger.is-plain:active{background:#fff;border-color:#e64242;color:#e64242;outline:0}.el-button--info{color:#fff;background-color:#50bfff;border-color:#50bfff}.el-button--info:focus,.el-button--info:hover{background:#73ccff;border-color:#73ccff;color:#fff}.el-button--info.is-active,.el-button--info:active{background:#48ace6;border-color:#48ace6;color:#fff}.el-button--info:active{outline:0}.el-button--info.is-plain{background:#fff;border:1px solid #bfcbd9;color:#1f2d3d}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#fff;border-color:#50bfff;color:#50bfff}.el-button--info.is-plain:active{background:#fff;border-color:#48ace6;color:#48ace6;outline:0}.el-button--large{padding:11px 19px;font-size:16px;border-radius:4px}.el-button--small{padding:7px 9px;font-size:12px;border-radius:4px}.el-button--mini{padding:4px;font-size:12px;border-radius:4px}.el-button--text{border:none;color:#20a0ff;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#4db3ff}.el-button--text:active{color:#1d90e6}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button{float:left;position:relative}.el-button-group .el-button+.el-button{margin-left:0}.el-button-group .el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group .el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group .el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group .el-button:not(:last-child){margin-right:-1px}.el-button-group .el-button.is-active,.el-button-group .el-button:active,.el-button-group .el-button:focus,.el-button-group .el-button:hover{z-index:1}.el-checkbox{color:#1f2d3d;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-checkbox+.el-checkbox{margin-left:15px}.el-checkbox__input{outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#20a0ff;border-color:#0190fe}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:\'\';position:absolute;display:block;border:1px solid #fff;margin-top:-1px;left:3px;right:3px;top:50%}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#20a0ff}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#20a0ff;border-color:#0190fe}.el-checkbox__input.is-checked .el-checkbox__inner::after{-ms-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#eef1f6;border-color:#d1dbe5;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#eef1f6}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#d1dbe5;border-color:#d1dbe5}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#fff}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#d1dbe5;border-color:#d1dbe5}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{border-color:#fff}.el-checkbox__input.is-disabled+.el-checkbox__label{color:#bbb;cursor:not-allowed}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #bfcbd9;border-radius:4px;box-sizing:border-box;width:18px;height:18px;background-color:#fff;z-index:1;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#20a0ff}.el-checkbox__inner::after{box-sizing:content-box;content:\\"\\";border:2px solid #fff;border-left:0;border-top:0;height:8px;left:5px;position:absolute;top:1px;-ms-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:4px;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;-ms-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;left:-999px}.el-checkbox-button,.el-checkbox-button__inner{position:relative;display:inline-block}.el-checkbox__label{font-size:14px;padding-left:5px}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#20a0ff;border-color:#20a0ff;box-shadow:-1px 0 0 0 #20a0ff}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#bfcbd9;cursor:not-allowed;background-image:none;background-color:#eef1f6;border-color:#d1dbe5;box-shadow:none}.el-checkbox-button__inner,.el-transfer-panel{background:#fff;vertical-align:middle;box-sizing:border-box}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#20a0ff}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #bfcbd9;border-radius:4px 0 0 4px;box-shadow:none!important}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button__inner{line-height:1;white-space:nowrap;border:1px solid #bfcbd9;border-left:0;color:#1f2d3d;margin:0;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1);padding:10px 15px;font-size:14px;border-radius:0}.el-checkbox-button__inner:hover{color:#20a0ff}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;left:-999px}.el-checkbox-button--large .el-checkbox-button__inner{padding:11px 19px;font-size:16px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner{padding:7px 9px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner{padding:4px;font-size:12px;border-radius:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 10px}.el-transfer__buttons .el-button{display:block;margin:0 auto;padding:8px 12px}.el-transfer-panel__item+.el-transfer-panel__item,.el-transfer__buttons .el-button [class*=el-icon-]+span{margin-left:0}.el-transfer__buttons .el-button:first-child{margin-bottom:6px}.el-transfer-panel{border:1px solid #d1dbe5;box-shadow:0 2px 4px rgba(0,0,0,.12),0 0 6px rgba(0,0,0,.04);display:inline-block;width:200px;position:relative}.el-transfer-panel .el-transfer-panel__header{height:36px;line-height:36px;background:#fbfdff;margin:0;padding-left:20px;border-bottom:1px solid #d1dbe5;box-sizing:border-box;color:#1f2d3d}.el-transfer-panel .el-transfer-panel__footer{height:36px;background:#fff;margin:0;padding:0;border-top:1px solid #d1dbe5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer:after{display:inline-block;content:\\"\\";height:100%;vertical-align:middle}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#8391a5}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:32px;line-height:32px;padding:6px 20px 0;color:#8391a5}.el-transfer-panel .el-checkbox__label{padding-left:14px}.el-transfer-panel .el-checkbox__inner{width:14px;height:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.el-transfer-panel__body{padding-bottom:36px;height:246px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:214px}.el-transfer-panel__item{height:32px;line-height:32px;padding-left:20px;display:block}.el-transfer-panel__item .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;box-sizing:border-box;padding-left:28px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:9px}.el-transfer-panel__item.el-checkbox{color:#48576a}.el-transfer-panel__item:hover{background:#e4e8f1}.el-transfer-panel__filter{margin-top:10px;text-align:center;padding:0 10px;width:100%;box-sizing:border-box}.el-transfer-panel__filter .el-input__inner{height:22px;width:100%;display:inline-block;box-sizing:border-box}.el-transfer-panel__filter .el-input__icon{right:10px}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}", ""]);\n\n// exports\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtZGVmYXVsdC9pbmRleC5jc3M/NzVhYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBOzs7QUFHQTtBQUNBLDRDQUE2Qyw4TEFBOEwsY0FBYyxhQUFhLGtLQUFrSyxrQkFBa0IsNkJBQTZCLFdBQVcsb0JBQW9CLFdBQVcscUJBQXFCLFdBQVcsdUJBQXVCLFdBQVcsZ0RBQWdELHFCQUFxQixhQUFhLFlBQVksc0JBQXNCLG1EQUFtRCxjQUFjLGFBQWEseUJBQXlCLFdBQVcsV0FBVywwQkFBMEIsZ0hBQXFLLGdCQUFnQixrQkFBa0IseUNBQXlDLG9DQUFvQyxXQUFXLGtCQUFrQixnQkFBZ0Isb0JBQW9CLG9CQUFvQixjQUFjLHdCQUF3QixxQkFBcUIsbUNBQW1DLGtDQUFrQywyQkFBMkIsbUJBQW1CLDJCQUEyQixtQkFBbUIsNEJBQTRCLG1CQUFtQix5QkFBeUIsbUJBQW1CLDZCQUE2QixtQkFBbUIsMkJBQTJCLG1CQUFtQiw0QkFBNEIsbUJBQW1CLDBCQUEwQixtQkFBbUIsc0JBQXNCLG1CQUFtQiw2QkFBNkIsbUJBQW1CLDZCQUE2QixtQkFBbUIsNkJBQTZCLG1CQUFtQixzQkFBc0IsbUJBQW1CLHVCQUF1QixtQkFBbUIsNkJBQTZCLG1CQUFtQiw4QkFBOEIsbUJBQW1CLHdCQUF3QixtQkFBbUIscUJBQXFCLG1CQUFtQix1QkFBdUIsbUJBQW1CLHlCQUF5QixtQkFBbUIscUJBQXFCLG1CQUFtQiw0QkFBNEIsbUJBQW1CLHdCQUF3QixtQkFBbUIscUJBQXFCLG1CQUFtQix3QkFBd0IsbUJBQW1CLHNCQUFzQixtQkFBbUIscUJBQXFCLG1CQUFtQix3QkFBd0IsbUJBQW1CLHFCQUFxQixtQkFBbUIsdUJBQXVCLG1CQUFtQix3QkFBd0IsbUJBQW1CLHNCQUFzQixtQkFBbUIseUJBQXlCLG1CQUFtQix3QkFBd0IsbUJBQW1CLHFCQUFxQixtQkFBbUIsd0JBQXdCLG1CQUFtQix3QkFBd0IsbUJBQW1CLHdCQUF3QixtQkFBbUIscUJBQXFCLG1CQUFtQixpQkFBaUIsc0NBQXNDLGdCQUFnQixnQkFBZ0IsZUFBZSxpQkFBaUIsb0JBQW9CLEdBQUcscUJBQXFCLEtBQUssMkJBQTJCLGVBQWUsbUJBQW1CLGdCQUFnQixjQUFjLDJDQUEyQyxjQUFjLGFBQWEscUJBQXFCLFdBQVcsMENBQTBDLHFCQUFxQixlQUFlLGVBQWUsWUFBWSxpQkFBaUIsbUJBQW1CLHNCQUFzQixvQ0FBb0MsWUFBWSwwQ0FBMEMsbUJBQW1CLGtCQUFrQixZQUFZLHNCQUFzQixZQUFZLGNBQWMsZUFBZSw0QkFBNEIsVUFBVSw0QkFBNEIsY0FBYywrQkFBK0IsY0FBYyxzQkFBc0IsbUJBQW1CLCtFQUErRSxlQUFlLGtEQUFrRCx3Q0FBd0MscUJBQXFCLHlCQUF5QixlQUFlLFNBQVMsY0FBYyxvRUFBb0UsY0FBYyxlQUFlLHlCQUF5QiwwQkFBMEIsZUFBZSx5QkFBeUIsMEJBQTBCLGNBQWMsaUpBQWlKLHlCQUF5QixlQUFlLGlCQUFpQixZQUFZLGVBQWUsbUNBQW1DLGtCQUFrQixzQkFBc0Isa0JBQWtCLGlEQUFpRCxlQUFlLHFCQUFxQix1REFBdUQscUJBQXFCLHFCQUFxQixpQkFBaUIsc0JBQXNCLGNBQWMsNkJBQTZCLFlBQVksdUJBQXVCLHlCQUF5QixrQkFBa0IsaUJBQWlCLGdCQUFnQixXQUFXLGtCQUFrQixhQUFhLHNCQUFzQixzQkFBc0IsMEJBQTBCLHVCQUF1QixtQkFBbUIscUJBQXFCLFNBQVMsb0dBQW9HLHdCQUF3QixTQUFTLDZCQUE2QixVQUFVLHFCQUFxQiwrQ0FBK0MseUJBQXlCLHNCQUFzQixVQUFVLHlCQUF5QixzQkFBc0IscUJBQXFCLGlCQUFpQixnQkFBZ0IsWUFBWSxVQUFVLHlCQUF5Qix5QkFBeUIscUJBQXFCLHdDQUF3QyxzQkFBc0IsYUFBYSxjQUFjLGVBQWUsZ0JBQWdCLGVBQWUsZUFBZSxZQUFZLGlCQUFpQixrQkFBa0Isd0JBQXdCLCtCQUErQixzREFBc0QsaUJBQWlCLGNBQWMsdUJBQXVCLGNBQWMsaUJBQWlCLG1CQUFtQixjQUFjLG9CQUFvQixxQkFBcUIseUJBQXlCLFdBQVcsZUFBZSxXQUFXLGtCQUFrQixTQUFTLCtCQUErQiwyQkFBMkIsZ0JBQWdCLGtCQUFrQixvQ0FBb0Msc0JBQXNCLG1CQUFtQixpQkFBaUIsVUFBVSxrQkFBa0IsVUFBVSxrQkFBa0IsVUFBVSxpQkFBaUIsV0FBVyxNQUFNLGdCQUFnQixZQUFZLGNBQWMsb0JBQW9CLE1BQU0sUUFBUSxTQUFTLE9BQU8sZUFBZSxjQUFjLFNBQVMsOEJBQThCLHFCQUFxQixrQkFBa0IsbUJBQW1CLG9CQUFvQixzQkFBc0IsWUFBWSxlQUFlLFlBQVksVUFBVSxVQUFVLGVBQWUsZUFBZSx3Q0FBd0MsY0FBYyw0RkFBNEYsY0FBYyxrQkFBa0IsY0FBYyxlQUFlLGdCQUFnQixjQUFjLGlCQUFpQixrQkFBa0IsY0FBYyxlQUFlLG1CQUFtQix1QkFBdUIsaUJBQWlCLHNCQUFzQiwwQkFBMEIsNkJBQTZCLDBCQUEwQiw4QkFBOEIsMEJBQTBCLEdBQUcsaUNBQWlDLFVBQVUsS0FBSyw2QkFBNkIsV0FBVywyQkFBMkIsR0FBRyw2QkFBNkIsVUFBVSxLQUFLLGlDQUFpQyxXQUFXLDRCQUE0QixhQUFhLGlFQUFpRSwrQkFBK0IsZ0JBQWdCLGlCQUFpQixlQUFlLFNBQVMsZUFBZSxjQUFjLGVBQWUsbUJBQW1CLGdCQUFnQix1QkFBdUIscUNBQXFDLHlCQUF5QiwyQ0FBMkMseUJBQXlCLFdBQVcsc0NBQXNDLHlCQUF5QixrRUFBa0Usc0JBQXNCLHVDQUF1QyxlQUFlLDZCQUE2QixrREFBa0QsbUJBQW1CLDBDQUEwQyxrQkFBa0IsYUFBYSxrQkFBa0IsZUFBZSxXQUFXLHdEQUF3RCxzQkFBc0Isa0NBQWtDLGlCQUFpQixjQUFjLHNCQUFzQixjQUFjLGtCQUFrQixrQ0FBa0MsU0FBUyxVQUFVLGFBQWEsY0FBYyxlQUFlLDhCQUE4QixjQUFjLHlDQUF5QyxXQUFXLHdDQUF3QyxrQkFBa0IsaUJBQWlCLDJEQUEyRCxlQUFlLG1CQUFtQixlQUFlLGFBQWEsa0JBQWtCLGFBQWEseUJBQXlCLDZEQUE2RCxjQUFjLFdBQVcsa0JBQWtCLE1BQU0sT0FBTyxnQkFBZ0Isd0JBQXdCLGdCQUFnQixpQkFBaUIsZUFBZSxTQUFTLGVBQWUsZ0RBQWdELHlCQUF5QixjQUFjLG9DQUFvQyxlQUFlLGNBQWMsb0JBQW9CLGlDQUFpQyxrQkFBa0IsZUFBZSw2QkFBNkIsd0NBQXdDLFdBQVcsV0FBVyxjQUFjLGVBQWUsc0JBQXNCLGlDQUFpQyxZQUFZLGlCQUFpQixlQUFlLGNBQWMsZUFBZSxlQUFlLGtCQUFrQiwyREFBMkQsc0JBQXNCLG1CQUFtQixTQUFTLGtCQUFrQixnQkFBZ0Isa0JBQWtCLFNBQVMsZUFBZSx5QkFBeUIsK0JBQStCLGNBQWMsYUFBYSxlQUFlLFdBQVcsWUFBWSxnQkFBZ0IsZUFBZSx5QkFBeUIsK0RBQStELGNBQWMsMkVBQTJFLHlCQUF5QixvQ0FBb0MseUJBQXlCLHdEQUF3RCx5QkFBeUIsbUNBQW1DLFdBQVcsWUFBWSxpQkFBaUIsU0FBUyxlQUFlLGtCQUFrQixzQkFBc0Isb0NBQW9DLGdGQUFnRixjQUFjLGlDQUFpQyxXQUFXLGtCQUFrQiwwQ0FBMEMsa0JBQWtCLFNBQVMsT0FBTyx5QkFBeUIsY0FBYyxzQkFBc0IsWUFBWSxlQUFlLGlFQUFpRSxvREFBb0QsWUFBWSxpQkFBaUIsb0NBQW9DLCtDQUErQyxzQkFBc0IsV0FBVyxZQUFZLGlCQUFpQixlQUFlLHlEQUF5RCxnQkFBZ0Isc0JBQXNCLGdCQUFnQixjQUFjLGdCQUFnQix1RkFBdUYseUJBQXlCLGlLQUFpSyxnQ0FBZ0MsbUhBQW1ILHlCQUF5Qiw4SkFBOEoseUJBQXlCLDhIQUE4SCxjQUFjLCtGQUErRixjQUFjLG1CQUFtQixXQUFXLHVIQUF1SCxTQUFTLHNCQUFzQixXQUFXLGtCQUFrQixtSUFBbUksYUFBYSw2RkFBNkYsU0FBUyxRQUFRLGdCQUFnQixrQkFBa0IscUJBQXFCLCtCQUErQixrQkFBa0Isd0NBQXdDLGtCQUFrQixnQkFBZ0IsTUFBTSxVQUFVLFdBQVcsb0ZBQW9GLG1CQUFtQixlQUFlLGdDQUFnQyxpQkFBaUIsV0FBVyxrQkFBa0IsZ0JBQWdCLHNCQUFzQiwwQkFBMEIsY0FBYyx5QkFBeUIsZUFBZSw4QkFBOEIsc0JBQXNCLGlCQUFpQixXQUFXLGtCQUFrQixxQkFBcUIseUJBQXlCLHlEQUF5RCx5QkFBeUIsMEJBQTBCLFlBQVksaUJBQWlCLGVBQWUsZ0JBQWdCLGlFQUFpRSw2QkFBNkIsMEJBQTBCLHlDQUF5Qyw0QkFBNEIsbUJBQW1CLGtCQUFrQixxQkFBcUIsc0JBQXNCLHdCQUF3QixrQkFBa0IsUUFBUSxXQUFXLGdCQUFnQix5QkFBeUIsZUFBZSw0Q0FBNEMsa0JBQWtCLHFCQUFxQix1QkFBdUIsVUFBVSwyQkFBMkIsaUJBQWlCLG1CQUFtQixlQUFlLGtCQUFrQixjQUFjLHlEQUF5RCxjQUFjLHNCQUFzQiwyRUFBMkUsZUFBZSxVQUFVLFVBQVUsY0FBYyxlQUFlLG1CQUFtQixvQkFBb0IsaUJBQWlCLGlCQUFpQixtQkFBbUIsZUFBZSxVQUFVLDJDQUEyQyxxQkFBcUIsNkNBQTZDLHFCQUFxQixtQkFBbUIsb0RBQW9ELDRDQUE0Qyx3Q0FBd0MsOENBQThDLHlCQUF5QixxQkFBcUIsbUJBQW1CLHFEQUFxRCxtQkFBbUIseUJBQXlCLCtEQUErRCxtQkFBbUIseURBQXlELHlCQUF5QixxQkFBcUIsaUZBQWlGLHNCQUFzQiw4Q0FBOEMsV0FBVyxtQkFBbUIsaUJBQWlCLHlCQUF5QixXQUFXLFlBQVksa0JBQWtCLGVBQWUsc0JBQXNCLHVCQUF1QixxQkFBcUIsd0JBQXdCLFVBQVUsV0FBVyxrQkFBa0Isc0JBQXNCLGFBQWEsa0JBQWtCLFNBQVMsUUFBUSw0Q0FBNEMsd0NBQXdDLHdEQUF3RCxtQ0FBbUMsV0FBVyxZQUFZLGVBQWUsb0JBQW9CLFVBQVUsVUFBVSxrQkFBa0IsV0FBVyxNQUFNLE9BQU8sUUFBUSxTQUFTLFNBQVMseUNBQXlDLGtCQUFrQixxQkFBcUIsaUJBQWlCLGVBQWUsaUJBQWlCLGdCQUFnQixxQkFBcUIsWUFBWSwwQkFBMEIsZUFBZSxxREFBcUQsOEJBQThCLDBCQUEwQiwwQkFBMEIsb0RBQW9ELDBCQUEwQixnRUFBZ0Usa0JBQWtCLHdCQUF3QixtQkFBbUIsZ0JBQWdCLHlCQUF5QixjQUFjLGNBQWMsd0JBQXdCLGtCQUFrQixzQkFBc0IsVUFBVSxTQUFTLGVBQWUsa0RBQWtELGtCQUFrQixlQUFlLGdCQUFnQiw4QkFBOEIsY0FBYywwQ0FBMEMsZUFBZSwrQ0FBK0MsZ0JBQWdCLDZCQUE2QixVQUFVLFVBQVUsa0JBQWtCLFdBQVcsWUFBWSw2REFBNkQsV0FBVyx5QkFBeUIscUJBQXFCLDhCQUE4Qiw4REFBOEQsY0FBYyxtQkFBbUIsc0JBQXNCLHlCQUF5QixxQkFBcUIsZ0JBQWdCLGdEQUFnRCxrQkFBa0IsZUFBZSxnQkFBZ0IsZ0RBQWdELGdCQUFnQixlQUFlLGdCQUFnQiwrQ0FBK0MsWUFBWSxlQUFlLGdCQUFnQixXQUFXLHFCQUFxQixrQkFBa0IsZUFBZSxpQkFBaUIsWUFBWSxzQkFBc0Isc0NBQXNDLGtCQUFrQixlQUFlLHFCQUFxQixpRUFBaUUsVUFBVSx3Q0FBd0MsK0JBQStCLDZCQUE2Qiw2Q0FBNkMsbUNBQW1DLDREQUE0RCx3QkFBd0IsdUNBQXVDLHFCQUFxQix5QkFBeUIsaUZBQWlGLG1CQUFtQixrQkFBa0IsZUFBZSxPQUFPLE1BQU0sb0JBQW9CLGNBQWMsUUFBUSxXQUFXLDBCQUEwQixTQUFTLDJCQUEyQixVQUFVLGtCQUFrQixhQUFhLGlCQUFpQixTQUFTLHFCQUFxQixrQkFBa0IseUJBQXlCLFVBQVUsbUJBQW1CLHNCQUFzQixtQkFBbUIsaURBQWlELG9DQUFvQyxNQUFNLE9BQU8sa0JBQWtCLG1CQUFtQix5QkFBeUIsV0FBVyxZQUFZLHNCQUFzQiwrREFBK0QsVUFBVSxnRUFBZ0UsV0FBVyxvQkFBb0Isa0JBQWtCLGFBQWEseUJBQXlCLGtCQUFrQixzQkFBc0IsNkRBQTZELHNCQUFzQixhQUFhLHFFQUFxRSxVQUFVLG1FQUFtRSxjQUFjLHNCQUFzQix5SUFBeUkseUJBQXlCLDBFQUEwRSxrQkFBa0IsV0FBVywwQkFBMEIsbUJBQW1CLGVBQWUsbUNBQW1DLGtDQUFrQywyQkFBMkIsZUFBZSxTQUFTLGtCQUFrQixXQUFXLGVBQWUsMEJBQTBCLGlCQUFpQiwwQkFBMEIsZ0JBQWdCLGNBQWMsU0FBUyxzQkFBc0IsMEJBQTBCLGVBQWUsaUJBQWlCLGtCQUFrQixtQkFBbUIsZ0JBQWdCLHVCQUF1QixjQUFjLFlBQVksZ0JBQWdCLHNCQUFzQixlQUFlLG1DQUFtQyxXQUFXLHlCQUF5Qix5Q0FBeUMseUJBQXlCLCtCQUErQiwwQkFBMEIsc0NBQXNDLGNBQWMsbUJBQW1CLDRDQUE0QyxzQkFBc0IsaUJBQWlCLFNBQVMsVUFBVSwyQ0FBMkMsa0JBQWtCLHVCQUF1QixnQkFBZ0IsU0FBUyxVQUFVLHdCQUF3QixrQkFBa0IsZUFBZSxXQUFXLFlBQVksaUJBQWlCLFdBQVcscUJBQXFCLGtCQUFrQixrQ0FBa0MscUJBQXFCLDRCQUE0QixlQUFlLG1CQUFtQixrQ0FBa0MscUJBQXFCLHFDQUFxQyxjQUFjLGVBQWUseUJBQXlCLDhDQUE4QywyQ0FBMkMsaUJBQWlCLFFBQVEsZUFBZSxtREFBbUQsY0FBYyxXQUFXLFlBQVksZUFBZSxVQUFVLGtCQUFrQiw4Q0FBOEMsMkNBQTJDLG1CQUFtQixjQUFjLHlEQUF5RCxjQUFjLGdEQUFnRCwrQkFBK0IsMkJBQTJCLGtEQUFrRCxtQkFBbUIsd0RBQXdELHFCQUFxQixxQkFBcUIsY0FBYywwQkFBMEIsZ0JBQWdCLG1CQUFtQixZQUFZLGlCQUFpQixzQkFBc0IscUJBQXFCLGtCQUFrQixZQUFZLFVBQVUsVUFBVSxpQkFBaUIsV0FBVyxlQUFlLHdCQUF3Qix3QkFBd0IscUJBQXFCLGdCQUFnQixZQUFZLDZCQUE2QiwwQkFBMEIsWUFBWSxrQkFBa0IsZUFBZSxrQkFBa0IsUUFBUSxhQUFhLFdBQVcsY0FBYyxpQkFBaUIsZUFBZSx3QkFBd0IsY0FBYyxpQkFBaUIsa0JBQWtCLG1CQUFtQixtQkFBbUIsVUFBVSxRQUFRLCtCQUErQiwyQkFBMkIsb0NBQW9DLHNCQUFzQixrQkFBa0IsZ0JBQWdCLHFCQUFxQixZQUFZLGlCQUFpQixlQUFlLGtCQUFrQixXQUFXLHlCQUF5QiwrQkFBK0IsZUFBZSxVQUFVLGdCQUFnQixXQUFXLGVBQWUsc0JBQXNCLHlCQUF5QixlQUFlLGNBQWMsMkJBQTJCLG1CQUFtQixlQUFlLDBCQUEwQixZQUFZLFlBQVksdUJBQXVCLHNCQUFzQixtQ0FBbUMsV0FBVyxrQkFBa0IseUJBQXlCLFVBQVUsNENBQTRDLGlCQUFpQiwwQ0FBMEMsZ0JBQWdCLDhDQUE4QyxrQkFBa0Isa0NBQWtDLGdDQUFnQyx3Q0FBd0MsV0FBVyxxQkFBcUIsc0JBQXNCLFVBQVUsaUNBQWlDLGtCQUFrQixtQkFBbUIsc0JBQXNCLHVCQUF1QixrQkFBa0IsT0FBTyxTQUFTLFdBQVcsV0FBVyxpQkFBaUIsTUFBTSxRQUFRLFVBQVUsWUFBWSw0Q0FBNEMsa0JBQWtCLHFCQUFxQixzQkFBc0IsYUFBYSxtQkFBbUIsZ0JBQWdCLHlCQUF5QixnQkFBZ0IseUJBQXlCLGVBQWUsaUJBQWlCLHFCQUFxQixpQkFBaUIsZ0JBQWdCLG1CQUFtQixpQkFBaUIsc0JBQXNCLGtDQUFrQyxxQkFBcUIsYUFBYSxVQUFVLFdBQVcsa0JBQWtCLG1CQUFtQixpQkFBaUIsc0JBQXNCLG1CQUFtQixpQkFBaUIsdUJBQXVCLGlCQUFpQixXQUFXLHNCQUFzQiw2QkFBNkIsY0FBYyx5QkFBeUIsZUFBZSxnQkFBZ0IsZ0JBQWdCLFdBQVcsWUFBWSxpQkFBaUIsaUJBQWlCLG9FQUFvRSxnQkFBZ0Isc0JBQXNCLHFCQUFxQixRQUFRLFNBQVMsU0FBUyxhQUFhLGtCQUFrQixTQUFTLFVBQVUsaUVBQWlFLG1DQUFtQyxrQ0FBa0MsZ0NBQWdDLFFBQVEsZ0JBQWdCLGdDQUFnQyxpQ0FBaUMsV0FBVyw2QkFBNkIsbUJBQW1CLDJDQUEyQyw0QkFBNEIsNkNBQTZDLHlCQUF5QixvQkFBb0IsUUFBUSxnQkFBZ0IsbUJBQW1CLHFCQUFxQixpQkFBaUIsd0tBQXdLLG1CQUFtQixrQ0FBa0MsU0FBUyxhQUFhLHNCQUFzQiwwQkFBMEIsa0JBQWtCLFdBQVcsdUJBQXVCLGtCQUFrQixnQkFBZ0Isa0JBQWtCLFdBQVcsWUFBWSxzQkFBc0Isa0JBQWtCLFNBQVMsUUFBUSxtQ0FBbUMsK0JBQStCLGNBQWMsK0JBQStCLFVBQVUsa0JBQWtCLHVCQUF1QixrQkFBa0IsZUFBZSxXQUFXLGVBQWUscUNBQXFDLFlBQVksZ0NBQWdDLGtCQUFrQixTQUFTLFFBQVEsaUJBQWlCLGdCQUFnQixpQ0FBaUMsNEJBQTRCLHdCQUF3Qix5QkFBeUIsa0JBQWtCLHlCQUF5QixpQ0FBaUMsK0JBQStCLG1DQUFtQyxlQUFlLGVBQWUsZ0JBQWdCLGtEQUFrRCxnQ0FBZ0Msa0RBQWtELHVCQUF1QiwwQ0FBMEMsK0JBQStCLHdDQUF3QyxrQkFBa0IsTUFBTSxPQUFPLDZCQUE2QixrQkFBa0Isd0RBQXdELFdBQVcsa0JBQWtCLE9BQU8sU0FBUyxXQUFXLFdBQVcseUJBQXlCLFVBQVUsNkJBQTZCLGtCQUFrQixTQUFTLFFBQVEseUJBQXlCLHVCQUF1QixNQUFNLFVBQVUsUUFBUSw4QkFBOEIsbUtBQW1LLFVBQVUsUUFBUSxnQ0FBZ0Msa0JBQWtCLE9BQU8sTUFBTSxVQUFVLDBDQUEwQyx5QkFBeUIsY0FBYyxnQ0FBZ0Msa0JBQWtCLE9BQU8sU0FBUyxVQUFVLHlDQUF5Qyw2QkFBNkIseUJBQXlCLGNBQWMsOEJBQThCLGtCQUFrQixPQUFPLFNBQVMsZ0JBQWdCLFVBQVUsNEVBQTRFLFdBQVcsMEJBQTBCLGdCQUFnQiw2QkFBNkIsNkJBQTZCLG9EQUFvRCxtQkFBbUIsd0VBQXdFLHlCQUF5QixjQUFjLHNFQUFzRSx5QkFBeUIsY0FBYyx3QkFBd0IsY0FBYyxrQkFBa0IsZ0VBQWdFLG1CQUFtQiw0QkFBNEIsNEVBQTRFLG1CQUFtQixzTUFBc00seUJBQXlCLGtDQUFrQyxtQkFBbUIsK0JBQStCLGtCQUFrQixXQUFXLE1BQU0sU0FBUyxRQUFRLDhCQUE4QixXQUFXLGlDQUFpQyxxQkFBcUIsaUJBQWlCLGdCQUFnQixlQUFlLG1DQUFtQyxjQUFjLG9EQUFvRCxzQ0FBc0MsMEhBQTBILDhCQUE4Qix3REFBd0QseUJBQXlCLDRCQUE0Qix3RkFBd0YsU0FBUyxnQkFBZ0Isa0NBQWtDLGtCQUFrQixtQkFBbUIsaUJBQWlCLHlCQUF5QixrQkFBa0Isc0JBQXNCLDZEQUE2RCxzQkFBc0IsYUFBYSx1QkFBdUIsY0FBYyxTQUFTLGdCQUFnQixnQkFBZ0IsNEJBQTRCLGlCQUFpQixlQUFlLGVBQWUsZUFBZSxrQ0FBa0MseUJBQXlCLGNBQWMsc0NBQXNDLHlCQUF5QixXQUFXLDBCQUEwQixnQkFBZ0IseUJBQXlCLDZCQUE2QixZQUFZLGdDQUFnQyxlQUFlLFlBQVksY0FBYyxlQUFlLGVBQWUsY0FBYyxzQ0FBc0MsY0FBYyxzQ0FBc0MsVUFBVSw0Q0FBNEMsY0FBYyxtQkFBbUIsaUNBQWlDLGFBQWEsbURBQW1ELGNBQWMsa0JBQWtCLGdCQUFnQix5REFBeUQsZ0JBQWdCLGVBQWUsZUFBZSxnQkFBZ0IsaUJBQWlCLGtCQUFrQixXQUFXLFlBQVksc0JBQXNCLGtCQUFrQixlQUFlLDBEQUEwRCxXQUFXLHdCQUF3QixjQUFjLGtCQUFrQiwrQkFBK0IsY0FBYyxrQkFBa0IsTUFBTSxRQUFRLFFBQVEsU0FBUyw4QkFBOEIsbUNBQW1DLGlEQUFpRCxXQUFXLFlBQVksY0FBYyxpQkFBaUIsa0NBQWtDLHlCQUF5QiwyQkFBMkIseUJBQXlCLGlDQUFpQyx5QkFBeUIsaUdBQWlHLG1DQUFtQyxXQUFXLDJCQUEyQix5QkFBeUIsVUFBVSxtQkFBbUIsV0FBVyxzTUFBc00sVUFBVSx1QkFBdUIsY0FBYyxjQUFjLCtCQUErQixlQUFlLFlBQVkseUJBQXlCLGtCQUFrQixZQUFZLGNBQWMsZ0JBQWdCLHNEQUFzRCx5QkFBeUIsd0RBQXdELHlCQUF5QixtQkFBbUIsa0JBQWtCLGlCQUFpQixlQUFlLHlCQUF5QixjQUFjLCtCQUErQix5QkFBeUIsa0NBQWtDLHlCQUF5QixtQkFBbUIsV0FBVyxnREFBZ0QsbUNBQW1DLFdBQVcsd0JBQXdCLGNBQWMsa0JBQWtCLGtCQUFrQixpQkFBaUIsZUFBZSx3QkFBd0IsY0FBYyw4QkFBOEIseUJBQXlCLGlDQUFpQyx5QkFBeUIsbUJBQW1CLFdBQVcsK0NBQStDLG1DQUFtQyxXQUFXLHNCQUFzQixnQkFBZ0IsNEJBQTRCLG1CQUFtQixXQUFXLDZDQUE2QyxnQkFBZ0IsZ0RBQWdELFNBQVMsMkNBQTJDLGdCQUFnQixrQ0FBa0MsZ0JBQWdCLCtCQUErQixnQkFBZ0IsOEJBQThCLGtCQUFrQixrQkFBa0IsWUFBWSxxQ0FBcUMsV0FBVyxrQ0FBa0MsZUFBZSxrQkFBa0IsK0JBQStCLFdBQVcsVUFBVSxzQkFBc0IsU0FBUyxhQUFhLDZFQUE2RSxZQUFZLDBFQUEwRSxpQkFBaUIsa0JBQWtCLHVDQUF1QywrQkFBK0Isb0NBQW9DLHNCQUFzQixtQkFBbUIsNkNBQTZDLGlCQUFpQixtQ0FBbUMsa0JBQWtCLGdDQUFnQyxlQUFlLG9CQUFvQixjQUFjLFdBQVcsc0JBQXNCLHdEQUF3RCxlQUFlLHNCQUFzQixtQkFBbUIsY0FBYyx3Q0FBd0Msa0JBQWtCLG1CQUFtQixjQUFjLHlEQUF5RCxrQkFBa0IsU0FBUyxRQUFRLFVBQVUsZ0JBQWdCLHNCQUFzQixnQkFBZ0IsaUJBQWlCLCtCQUErQixrQkFBa0Isa0JBQWtCLGFBQWEsNEJBQTRCLHNCQUFzQixTQUFTLG9CQUFvQixVQUFVLHFCQUFxQiw4QkFBOEIsa0JBQWtCLGtCQUFrQixlQUFlLDRCQUE0QixrQkFBa0IseUJBQXlCLGlCQUFpQixjQUFjLHlCQUF5QiwwQkFBMEIsZ0JBQWdCLGtCQUFrQixpQkFBaUIsYUFBYSxvRUFBb0UsYUFBYSxjQUFjLFdBQVcsMEJBQTBCLGtCQUFrQixZQUFZLHlCQUF5Qiw2QkFBNkIsWUFBWSxpQkFBaUIsc0JBQXNCLGtCQUFrQiwyQkFBMkIsY0FBYyxXQUFXLFNBQVMsNkJBQTZCLGlCQUFpQixlQUFlLGNBQWMsa0JBQWtCLGdCQUFnQixVQUFVLGVBQWUsaUNBQWlDLHlCQUF5QixrQ0FBa0MseUJBQXlCLGNBQWMsc0JBQXNCLHlCQUF5QixXQUFXLGlCQUFpQixrQkFBa0IsZUFBZSxlQUFlLDZCQUE2QixVQUFVLGVBQWUsZ0NBQWdDLFdBQVcsbUJBQW1CLDJCQUEyQixlQUFlLGNBQWMsU0FBUyxlQUFlLGVBQWUsVUFBVSxlQUFlLDBHQUEwRyxjQUFjLDJCQUEyQixlQUFlLGNBQWMscUJBQXFCLGFBQWEsZUFBZSwwREFBMEQsa0JBQWtCLE1BQU0sU0FBUyxZQUFZLCtCQUErQixzQkFBc0IsZ0JBQWdCLHlCQUF5QixjQUFjLHdHQUF3RyxrQkFBa0IsZ0JBQWdCLGdCQUFnQiwwQ0FBMEMsZ0JBQWdCLHNCQUFzQixtQkFBbUIsV0FBVyxxQ0FBcUMsZ0JBQWdCLDRCQUE0QixnQkFBZ0IseUJBQXlCLGdCQUFnQiw2QkFBNkIsa0JBQWtCLG1CQUFtQixjQUFjLDZCQUE2QixrQkFBa0IsZ0NBQWdDLGVBQWUsb0JBQW9CLGNBQWMsV0FBVyxzQkFBc0Isd0JBQXdCLFlBQVksa0JBQWtCLDhCQUE4QixlQUFlLGNBQWMsaUJBQWlCLGtCQUFrQixlQUFlLDBCQUEwQixXQUFXLDBCQUEwQixZQUFZLDJCQUEyQixhQUFhLGtCQUFrQiw0QkFBNEIsV0FBVyxlQUFlLGlCQUFpQixpQkFBaUIsYUFBYSxhQUFhLFlBQVksdUNBQXVDLGlCQUFpQixTQUFTLGtCQUFrQixpQkFBaUIsZUFBZSwwQ0FBMEMseUJBQXlCLFdBQVcsZ0RBQWdELHlCQUF5QiwyQkFBMkIsY0FBYyxtQkFBbUIsd0JBQXdCLHlCQUF5QixlQUFlLGtIQUFrSCw0Q0FBNEMsc0xBQXNMLGlHQUFpRyx5REFBeUQsVUFBVSx3QkFBd0Isb0JBQW9CLDBEQUEwRCxVQUFVLHdCQUF3QixvQkFBb0IsZ0NBQWdDLDRCQUE0QixtREFBbUQsVUFBVSx3QkFBd0Isb0JBQW9CLGdFQUFnRSxVQUFVLHdCQUF3QixvQkFBb0IsbUNBQW1DLCtCQUErQix5REFBeUQsVUFBVSx3QkFBd0Isb0JBQW9CLDREQUE0RCxVQUFVLHlCQUF5QixxQkFBcUIsOEJBQThCLDBCQUEwQixxREFBcUQsVUFBVSw2QkFBNkIseUJBQXlCLHFCQUFxQiw2RkFBNkYsZ0NBQWdDLDRGQUE0Riw0Q0FBNEMsa0JBQWtCLHFDQUFxQyxVQUFVLGdDQUFnQyw0QkFBNEIsdUJBQXVCLGdEQUFnRCxnQkFBZ0Isa0JBQWtCLHFCQUFxQixpQ0FBaUMsa0JBQWtCLGdCQUFnQixzQkFBc0IsMEJBQTBCLGdCQUFnQixXQUFXLFNBQVMseUJBQXlCLFlBQVksb0NBQW9DLFlBQVksd0NBQXdDLFlBQVksdURBQXVELFVBQVUsb0VBQW9FLGVBQWUsMEJBQTBCLGlCQUFpQixjQUFjLHFCQUFxQixVQUFVLG1CQUFtQixrQkFBa0IsdUZBQXVGLG9CQUFvQix1QkFBdUIsVUFBVSxTQUFTLGdCQUFnQixrQkFBa0IsNkRBQTZELFdBQVcsY0FBYyxXQUFXLFlBQVksdUJBQXVCLFlBQVksaUJBQWlCLGVBQWUseURBQXlELG1CQUFtQixlQUFlLDZDQUE2QyxXQUFXLGdDQUFnQyxjQUFjLG1CQUFtQixlQUFlLGFBQWEseUJBQXlCLHNCQUFzQiw2REFBNkQsa0JBQWtCLGtCQUFrQixZQUFZLE9BQU8sYUFBYSx5QkFBeUIscUJBQXFCLGlCQUFpQixrQ0FBa0MsaUVBQWlFLDhDQUE4Qyx5QkFBeUIsc0JBQXNCLHdCQUF3QixZQUFZLGtCQUFrQixnQkFBZ0IsK0RBQStELGNBQWMsUUFBUSxXQUFXLGtCQUFrQixlQUFlLGlCQUFpQixpQkFBaUIseUJBQXlCLFlBQVksV0FBVyxPQUFPLFFBQVEsc0JBQXNCLGdCQUFnQixnQkFBZ0IsK0JBQStCLFNBQVMsaUJBQWlCLGdDQUFnQyxpQkFBaUIsa0JBQWtCLDJDQUEyQyxlQUFlLDRDQUE0Qyx1QkFBdUIsdUJBQXVCLDZCQUE2QixZQUFZLFlBQVksaUJBQWlCLGlCQUFpQixzQkFBc0Isb0JBQW9CLFlBQVksaUJBQWlCLGNBQWMsYUFBYSxlQUFlLDZCQUE2QixVQUFVLGVBQWUsY0FBYyw0QkFBNEIsZ0JBQWdCLGNBQWMsWUFBWSxrQkFBa0IsZ0JBQWdCLGdCQUFnQixrQkFBa0IseUJBQXlCLGFBQWEsYUFBYSxlQUFlLDZEQUE2RCxrQkFBa0IsY0FBYyxRQUFRLFNBQVMseUJBQXlCLG1CQUFtQiwyQkFBMkIsaUJBQWlCLGtDQUFrQyxjQUFjLGlCQUFpQiw4QkFBOEIsbUJBQW1CLDZDQUE2QyxZQUFZLFNBQVMsaUJBQWlCLHlCQUF5QixzQkFBc0Isb0RBQW9ELFdBQVcsaUJBQWlCLHNCQUFzQixzQkFBc0IsaUNBQWlDLGdCQUFnQixnREFBZ0QsU0FBUyxTQUFTLGlCQUFpQixtQkFBbUIsNEJBQTRCLHVEQUF1RCxRQUFRLGlCQUFpQixtQkFBbUIseUJBQXlCLGdDQUFnQyxpQkFBaUIsK0NBQStDLFFBQVEsVUFBVSxrQkFBa0IsMkJBQTJCLG9CQUFvQixzREFBc0QsWUFBWSxTQUFTLHdCQUF3QixvQkFBb0IsK0JBQStCLGtCQUFrQiw4Q0FBOEMsUUFBUSxXQUFXLGtCQUFrQixxQkFBcUIsMEJBQTBCLHFEQUFxRCxVQUFVLFlBQVksaUJBQWlCLHFCQUFxQix1QkFBdUIsbUJBQW1CLGNBQWMsZUFBZSxjQUFjLGtCQUFrQixlQUFlLDhCQUE4QixlQUFlLHdDQUF3QyxzQkFBc0IsR0FBRyxXQUFXLHVCQUF1QixLQUFLLFdBQVcsU0FBUyxlQUFlLE9BQU8sTUFBTSxXQUFXLFlBQVksV0FBVyxnQkFBZ0IsZ0JBQWdCLGdCQUFnQixxQkFBcUIsc0JBQXNCLHNCQUFzQixZQUFZLGtCQUFrQixlQUFlLGdCQUFnQixtQ0FBbUMsMkJBQTJCLHlCQUF5QixlQUFlLE1BQU0sU0FBUyxPQUFPLFFBQVEsa0JBQWtCLGdDQUFnQyxhQUFhLHFCQUFxQixZQUFZLFFBQVEsc0JBQXNCLHdCQUF3QixrQkFBa0Isb0JBQW9CLDJCQUEyQixrQkFBa0IsU0FBUyxXQUFXLGVBQWUsWUFBWSxVQUFVLFVBQVUsZUFBZSxrREFBa0QsV0FBVyxnSEFBZ0gsY0FBYyx5QkFBeUIsa0JBQWtCLGNBQWMsZUFBZSxrQkFBa0IsdUJBQXVCLGlCQUFpQixnRkFBZ0YscUJBQXFCLDBCQUEwQixjQUFjLGVBQWUsZ0JBQWdCLGVBQWUsdUJBQXVCLGVBQWUsZ0JBQWdCLGVBQWUsZ0JBQWdCLFlBQVksV0FBVyx5QkFBeUIsU0FBUywyQkFBMkIsU0FBUyxnQkFBZ0Isc0JBQXNCLHVCQUF1QixpQkFBaUIsMENBQTBDLGlCQUFpQiw4QkFBOEIsK0JBQStCLDJCQUEyQix3QkFBd0Isa0JBQWtCLFFBQVEsK0JBQStCLDJCQUEyQix5QkFBeUIsNkNBQTZDLGNBQWMsNENBQTRDLGNBQWMsd0NBQXdDLGNBQWMsNkNBQTZDLGNBQWMsMEJBQTBCLDZCQUE2QiwwQkFBMEIsOEJBQThCLDBCQUEwQixHQUFHLGlDQUFpQyxVQUFVLEtBQUssNkJBQTZCLFdBQVcsMkJBQTJCLEdBQUcsNkJBQTZCLFVBQVUsS0FBSyxpQ0FBaUMsV0FBVyxlQUFlLGVBQWUsY0FBYywwQkFBMEIsYUFBYSxjQUFjLHFCQUFxQixXQUFXLGdRQUFnUSxjQUFjLFlBQVksMERBQTBELGFBQWEsMERBQTBELDZCQUE2QixjQUFjLHNFQUFzRSxjQUFjLGVBQWUsMENBQTBDLGdCQUFnQix5Q0FBeUMsV0FBVyxxQkFBcUIsZ0JBQWdCLGlCQUFpQiwrQkFBK0IscUJBQXFCLGtCQUFrQixtQkFBbUIsc0NBQXNDLFdBQVcscUJBQXFCLHdDQUF3QyxxQkFBcUIsbUJBQW1CLDJEQUEyRCxjQUFjLGNBQWMsbUJBQW1CLDRCQUE0QixnQkFBZ0IseUtBQXlLLHlCQUF5QixtRkFBbUYscUJBQXFCLHNEQUFzRCxZQUFZLGNBQWMsaUJBQWlCLHFCQUFxQixpQkFBaUIsc0JBQXNCLFdBQVcsZUFBZSxjQUFjLGNBQWMseUJBQXlCLHNCQUFzQix1QkFBdUIsaUJBQWlCLGtCQUFrQixlQUFlLHFCQUFxQixjQUFjLGVBQWUsY0FBYyxnQkFBZ0Isa0JBQWtCLFNBQVMsT0FBTyxpQkFBaUIsZ0NBQWdDLFVBQVUsa0JBQWtCLGdCQUFnQixxQkFBcUIsa0JBQWtCLFNBQVMsT0FBTyxXQUFXLHlCQUF5QixVQUFVLHdEQUF3RCxnQkFBZ0Isa0JBQWtCLFlBQVkseUJBQXlCLFlBQVksV0FBVyxpQkFBaUIsdUJBQXVCLGtCQUFrQixrQkFBa0IsZUFBZSxjQUFjLGVBQWUsb0JBQW9CLGdDQUFnQywyQkFBMkIsdUJBQXVCLHdCQUF3QixjQUFjLG1CQUFtQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixpQ0FBaUMsZUFBZSxxQkFBcUIsZ0JBQWdCLHNDQUFzQyxrQkFBa0IsZUFBZSxpQkFBaUIsZUFBZSxjQUFjLG1CQUFtQixRQUFRLG1CQUFtQixPQUFPLGNBQWMsa0JBQWtCLHlCQUF5QixXQUFXLGVBQWUsZUFBZSxZQUFZLHNCQUFzQixpQkFBaUIscUJBQXFCLGdCQUFnQixlQUFlLGNBQWMsa0JBQWtCLDhCQUE4QixrQkFBa0Isa0JBQWtCLGtEQUFrRCxnQkFBZ0IscUNBQXFDLDJCQUEyQix1QkFBdUIscUJBQXFCLG9DQUFvQyx5QkFBeUIsV0FBVyxxQkFBcUIsY0FBYyxlQUFlLDJCQUEyQixXQUFXLGVBQWUseUJBQXlCLGNBQWMsa0JBQWtCLGdCQUFnQixrQkFBa0IscURBQXFELGFBQWEseURBQXlELHFCQUFxQiw4REFBOEQsa0JBQWtCLGVBQWUsUUFBUSxZQUFZLHNCQUFzQixpQkFBaUIsZ0JBQWdCLFNBQVMsV0FBVyw4QkFBOEIsMEJBQTBCLG9LQUFvSyxXQUFXLCtDQUErQyw2QkFBNkIsa0RBQWtELGlFQUFpRSxrQkFBa0IsaUJBQWlCLHlEQUF5RCx5QkFBeUIseUJBQXlCLDBCQUEwQixxRUFBcUUsbUJBQW1CLGtCQUFrQixzQkFBc0IsZ0JBQWdCLHlCQUF5Qix3Q0FBd0MsYUFBYSx1Q0FBdUMseUJBQXlCLFNBQVMsc0RBQXNELGtEQUFrRCw2QkFBNkIsYUFBYSxrQkFBa0IsaUJBQWlCLGdFQUFnRSxzQkFBc0IsMkJBQTJCLDBCQUEwQiw0RUFBNEUsMEJBQTBCLDJFQUEyRSwyQkFBMkIsb0JBQW9CLGlDQUFpQyxvQkFBb0Isa0JBQWtCLE9BQU8sUUFBUSxpQ0FBaUMsbUJBQW1CLGdDQUFnQyxtQkFBbUIsa0JBQWtCLE9BQU8sUUFBUSxnQ0FBZ0MsOEJBQThCLEdBQUcsVUFBVSxxQkFBcUIsMkJBQTJCLEdBQUcsVUFBVSxxQkFBcUIseUJBQXlCLDhCQUE4QixHQUFHLHFCQUFxQix3QkFBd0IsVUFBVSxLQUFLLHFCQUFxQiwyQkFBMkIsV0FBVyw2QkFBNkIsR0FBRyxVQUFVLHFCQUFxQiw0QkFBNEIsR0FBRyxVQUFVLHFCQUFxQix5QkFBeUIsNkJBQTZCLEdBQUcscUJBQXFCLHdCQUF3QixVQUFVLEtBQUsscUJBQXFCLDRCQUE0QixXQUFXLFFBQVEseUJBQXlCLGNBQWMsWUFBWSxpQkFBaUIsZUFBZSxXQUFXLGtCQUFrQixzQkFBc0IsNkJBQTZCLHVCQUF1QixrQkFBa0Isa0JBQWtCLGtCQUFrQixlQUFlLGVBQWUsNkJBQTZCLHlCQUF5QixZQUFZLFdBQVcsaUJBQWlCLHNCQUFzQixTQUFTLFdBQVcsNkJBQTZCLHNCQUFzQixjQUFjLGNBQWMseUJBQXlCLHFCQUFxQixjQUFjLG1DQUFtQyx5QkFBeUIsV0FBVyxxQkFBcUIscUJBQXFCLGlCQUFpQixxQ0FBcUMsaUNBQWlDLGNBQWMsc0NBQXNDLHlCQUF5QixXQUFXLHdCQUF3QixxQkFBcUIsaUJBQWlCLHFDQUFxQyxpQ0FBaUMsY0FBYyxzQ0FBc0MseUJBQXlCLFdBQVcsd0JBQXdCLHFCQUFxQixpQkFBaUIscUNBQXFDLGlDQUFpQyxjQUFjLHNDQUFzQyx5QkFBeUIsV0FBVyx3QkFBd0IscUJBQXFCLGdCQUFnQixvQ0FBb0MsZ0NBQWdDLGNBQWMscUNBQXFDLHlCQUF5QixXQUFXLHVCQUF1QixxQkFBcUIsU0FBUyxlQUFlLGdCQUFnQix5QkFBeUIsc0JBQXNCLGtCQUFrQixnQkFBZ0Isa0JBQWtCLFdBQVcsWUFBWSxxQkFBcUIsa0JBQWtCLFNBQVMsUUFBUSxtQ0FBbUMsK0JBQStCLGNBQWMsc0NBQXNDLGdCQUFnQiw2QkFBNkIsa0RBQWtELGNBQWMsNEVBQTRFLHFCQUFxQixzQkFBc0IsdUJBQXVCLGlCQUFpQixZQUFZLGVBQWUsc0ZBQXNGLGlCQUFpQixvQ0FBb0Msc0JBQXNCLDZCQUE2QixtQkFBbUIsMkJBQTJCLGVBQWUsUUFBUSxTQUFTLGlCQUFpQiw2QkFBNkIscUJBQXFCLDBCQUEwQixzQkFBc0Isd0JBQXdCLG9CQUFvQixxQ0FBcUMsaUNBQWlDLHVCQUF1QixvQ0FBb0MsNEJBQTRCLHdCQUF3QixtQ0FBbUMseUJBQXlCLGVBQWUscUJBQXFCLGVBQWUsNEJBQTRCLGlCQUFpQixlQUFlLGNBQWMsNEVBQTRFLHlCQUF5QixVQUFVLFdBQVcsaUJBQWlCLFNBQVMsc0JBQXNCLGtCQUFrQixrQkFBa0Isc0JBQXNCLGdCQUFnQixXQUFXLFVBQVUsY0FBYyx1QkFBdUIsaUNBQWlDLFdBQVcsZUFBZSxlQUFlLG1CQUFtQix5QkFBeUIsZ0JBQWdCLHlCQUF5QixtQkFBbUIseUJBQXlCLGlCQUFpQix5QkFBeUIsbUJBQW1CLG1CQUFtQixjQUFjLGdCQUFnQixlQUFlLFdBQVcsbUJBQW1CLFdBQVcsc0JBQXNCLHVCQUF1QixlQUFlLFdBQVcsaUJBQWlCLGVBQWUsaUJBQWlCLHlCQUF5QixnQkFBZ0Isb0JBQW9CLGVBQWUsV0FBVyxVQUFVLFNBQVMsV0FBVyxrQkFBa0IsZUFBZSx5SUFBeUksVUFBVSxnQ0FBZ0Msa0JBQWtCLGVBQWUsUUFBUSxpQkFBaUIsWUFBWSxhQUFhLHNCQUFzQixrQkFBa0IsZUFBZSxXQUFXLHNCQUFzQiw2REFBNkQsdURBQXVELGdCQUFnQix1Q0FBdUMsY0FBYyx1Q0FBdUMsY0FBYyxzQ0FBc0MsY0FBYyxrQ0FBa0MsY0FBYyx3QkFBd0IsY0FBYyxxQ0FBcUMsaUJBQWlCLHdCQUF3QixnQkFBZ0IsZUFBZSxjQUFjLFNBQVMsMEJBQTBCLGVBQWUsaUJBQWlCLGdCQUFnQixjQUFjLG1CQUFtQix1QkFBdUIsV0FBVyxZQUFZLGVBQWUsV0FBVyxrQkFBa0IsUUFBUSwyQkFBMkIsU0FBUyxXQUFXLGtCQUFrQixlQUFlLGNBQWMsZUFBZSxpQ0FBaUMsY0FBYyw0QkFBNEIsK0JBQStCLDJCQUEyQixRQUFRLGlCQUFpQixxQkFBcUIsWUFBWSxrQkFBa0IsbUJBQW1CLDJCQUEyQixjQUFjLGtDQUFrQyx3QkFBd0IscUJBQXFCLGdCQUFnQixtQkFBbUIsc0RBQXNELG1CQUFtQixnSEFBZ0gscUJBQXFCLGNBQWMsNEhBQTRILGNBQWMsbUJBQW1CLHNEQUFzRCxZQUFZLDhCQUE4QixXQUFXLGlCQUFpQixRQUFRLGtCQUFrQixjQUFjLGVBQWUsa0JBQWtCLFVBQVUsa0VBQWtFLGNBQWMsZ01BQWdNLHFCQUFxQiw4RUFBOEUsY0FBYyxtQkFBbUIsMkJBQTJCLFFBQVEsMkJBQTJCLFdBQVcsd0JBQXdCLFlBQVksc0dBQXNHLGlCQUFpQixXQUFXLGVBQWUsbURBQW1ELFdBQVcseUNBQXlDLG1CQUFtQix3QkFBd0IsWUFBWSxzR0FBc0csaUJBQWlCLFdBQVcsZUFBZSxtREFBbUQsV0FBVyx5Q0FBeUMsbUJBQW1CLG9CQUFvQixrQkFBa0Isa0JBQWtCLGFBQWEsYUFBYSxlQUFlLGdCQUFnQiw2RUFBNkUsa0JBQWtCLGNBQWMsUUFBUSxTQUFTLHlCQUF5QixtQkFBbUIsbUNBQW1DLGlCQUFpQiwwQ0FBMEMsY0FBYyxpQkFBaUIsc0pBQXNKLGFBQWEsc0NBQXNDLG1CQUFtQixxREFBcUQsWUFBWSx5QkFBeUIsc0JBQXNCLDREQUE0RCxXQUFXLGlCQUFpQix5QkFBeUIsc0JBQXNCLHlDQUF5QyxnQkFBZ0Isd0RBQXdELFNBQVMsbUJBQW1CLDRCQUE0QiwrREFBK0QsUUFBUSxpQkFBaUIsbUJBQW1CLDRCQUE0Qix3Q0FBd0MsaUJBQWlCLHVEQUF1RCxVQUFVLDJCQUEyQixvQkFBb0IsOERBQThELFlBQVksU0FBUywyQkFBMkIsb0JBQW9CLHVDQUF1QyxrQkFBa0Isc0RBQXNELFdBQVcscUJBQXFCLDBCQUEwQiw2REFBNkQsVUFBVSxZQUFZLGlCQUFpQixxQkFBcUIsMEJBQTBCLDZCQUE2QixnQkFBZ0IseUJBQXlCLDhEQUE4RCx5QkFBeUIscUVBQXFFLHNCQUFzQixpRUFBaUUsNEJBQTRCLHdFQUF3RSx5QkFBeUIsK0RBQStELDBCQUEwQixzRUFBc0UsdUJBQXVCLGdFQUFnRSwyQkFBMkIsdUVBQXVFLHdCQUF3Qiw0QkFBNEIsbUJBQW1CLFdBQVcsbUNBQW1DLGNBQWMsd0VBQXdFLHFCQUFxQixzQkFBc0IsaUJBQWlCLFdBQVcsdUJBQXVCLGtCQUFrQiwwQ0FBMEMsVUFBVSxZQUFZLGNBQWMsdUNBQXVDLFVBQVUsWUFBWSwwQkFBMEIsa0RBQWtELFNBQVMsV0FBVyw4QkFBOEIsMEJBQTBCLHdDQUF3Qyw4QkFBOEIsMEJBQTBCLDZDQUE2QyxvQkFBb0IsK0RBQStELGlCQUFpQixXQUFXLGtCQUFrQixZQUFZLFdBQVcsZ0JBQWdCLGdGQUFnRixrQkFBa0IsaUJBQWlCLGtCQUFrQixvTEFBb0wsU0FBUyxnQkFBZ0IseUJBQXlCLGlCQUFpQixzQkFBc0IsMkRBQTJELDBGQUEwRixXQUFXLFdBQVcsOEJBQThCLDBGQUEwRixXQUFXLCtCQUErQixxSEFBcUgsNEJBQTRCLDZCQUE2QixnTUFBZ00scUJBQXFCLGtNQUFrTSxxQkFBcUIsbUJBQW1CLFdBQVcsV0FBVyxjQUFjLHlCQUF5QixrQkFBa0Isa0JBQWtCLGVBQWUsc0JBQXNCLDhCQUE4QixtQkFBbUIsV0FBVyw0QkFBNEIsZUFBZSwyRkFBMkYseUJBQXlCLDBMQUEwTCxtQkFBbUIsa0tBQWtLLHVCQUF1QixtQkFBbUIsbUJBQW1CLGtCQUFrQixZQUFZLGVBQWUsZ0JBQWdCLFdBQVcseUJBQXlCLDJCQUEyQiw4QkFBOEIsa0JBQWtCLDJCQUEyQixXQUFXLFlBQVksa0JBQWtCLGFBQWEsVUFBVSwrQkFBK0IsMkJBQTJCLDZCQUE2QixrQkFBa0IscUJBQXFCLGlCQUFpQixpQ0FBaUMsWUFBWSxrRUFBa0Usb0JBQW9CLFlBQVksb0NBQW9DLHdCQUF3QixnQkFBZ0IsbUJBQW1CLFdBQVcsWUFBWSx5QkFBeUIsa0JBQWtCLGVBQWUscUJBQXFCLGlCQUFpQiw4RUFBOEUseUJBQXlCLHFCQUFxQix5QkFBeUIsa0RBQWtELG9CQUFvQixZQUFZLDRCQUE0Qix3QkFBd0IsZ0JBQWdCLGlCQUFpQixrQkFBa0IsVUFBVSxXQUFXLG1CQUFtQix5QkFBeUIsK0JBQStCLDJCQUEyQixpQkFBaUIsa0JBQWtCLGNBQWMsc0NBQXNDLFNBQVMsTUFBTSxRQUFRLFNBQVMsT0FBTyx1QkFBdUIsK0JBQStCLGVBQWUsbURBQW1ELGlCQUFpQiw2REFBNkQsV0FBVyxZQUFZLG9CQUFvQixRQUFRLGlCQUFpQixXQUFXLGtCQUFrQixrQkFBa0Isb3dCQUFvd0Isa0JBQWtCLHFDQUFxQyxjQUFjLGFBQWEsZUFBZSw4QkFBOEIsV0FBVyxZQUFZLDRDQUE0QywwQkFBMEIsaURBQWlELHdCQUF3QixvQkFBb0IsZUFBZSxlQUFlLHFCQUFxQiwwQkFBMEIsS0FBSywwQkFBMEIsd0JBQXdCLEdBQUcsdUJBQXVCLG9CQUFvQixJQUFJLHdCQUF3Qix3QkFBd0IsS0FBSyx3QkFBd0IsMEJBQTBCLFFBQVEsc0JBQXNCLDZCQUE2QixjQUFjLGNBQWMsV0FBVyxjQUFjLG9CQUFvQixhQUFhLHlDQUF5QyxhQUFhLDhCQUE4QixtQkFBbUIscUJBQXFCLDhCQUE4QixzQkFBc0IsbUJBQW1CLHNDQUFzQyx5QkFBeUIsNkJBQTZCLHVDQUF1QyxzQkFBc0IsOEJBQThCLDZCQUE2QixrQkFBa0IseUJBQXlCLGdDQUFnQyxxQkFBcUIsdUJBQXVCLCtQQUErUCxXQUFXLHNCQUFzQixVQUFVLFFBQVEsaUJBQWlCLGNBQWMsZUFBZSxRQUFRLGVBQWUsT0FBTyxVQUFVLGVBQWUsaUJBQWlCLHFCQUFxQixlQUFlLGVBQWUsZUFBZSxjQUFjLFVBQVUsZUFBZSxpQkFBaUIscUJBQXFCLGVBQWUsZUFBZSxlQUFlLGNBQWMsVUFBVSxZQUFZLGlCQUFpQixrQkFBa0IsZUFBZSxZQUFZLGVBQWUsV0FBVyxVQUFVLGdCQUFnQixpQkFBaUIsc0JBQXNCLGVBQWUsZ0JBQWdCLGVBQWUsZUFBZSxVQUFVLGdCQUFnQixpQkFBaUIsc0JBQXNCLGVBQWUsZ0JBQWdCLGVBQWUsZUFBZSxVQUFVLFVBQVUsaUJBQWlCLGdCQUFnQixlQUFlLFVBQVUsZUFBZSxTQUFTLFVBQVUsZ0JBQWdCLGlCQUFpQixzQkFBc0IsZUFBZSxnQkFBZ0IsZUFBZSxlQUFlLFVBQVUsZ0JBQWdCLGlCQUFpQixzQkFBc0IsZUFBZSxnQkFBZ0IsZUFBZSxlQUFlLFVBQVUsWUFBWSxpQkFBaUIsa0JBQWtCLGVBQWUsWUFBWSxlQUFlLFdBQVcsV0FBVyxnQkFBZ0Isa0JBQWtCLHNCQUFzQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixzQkFBc0IsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsZUFBZSxXQUFXLFVBQVUsa0JBQWtCLGdCQUFnQixnQkFBZ0Isa0JBQWtCLFVBQVUsZ0JBQWdCLFNBQVMsV0FBVyxnQkFBZ0Isa0JBQWtCLHNCQUFzQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixzQkFBc0IsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsZUFBZSxXQUFXLFlBQVksa0JBQWtCLGtCQUFrQixnQkFBZ0IsWUFBWSxnQkFBZ0IsV0FBVyxXQUFXLGdCQUFnQixrQkFBa0Isc0JBQXNCLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGVBQWUsV0FBVyxnQkFBZ0Isa0JBQWtCLHNCQUFzQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixlQUFlLFdBQVcsVUFBVSxrQkFBa0IsZ0JBQWdCLGdCQUFnQixVQUFVLGdCQUFnQixTQUFTLFdBQVcsZ0JBQWdCLGtCQUFrQixzQkFBc0IsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsZUFBZSxXQUFXLGdCQUFnQixrQkFBa0Isc0JBQXNCLGdCQUFnQixnQkFBZ0IsZ0JBQWdCLGVBQWUsV0FBVyxZQUFZLGtCQUFrQixrQkFBa0IsZ0JBQWdCLFlBQVksZ0JBQWdCLFdBQVcsV0FBVyxnQkFBZ0Isa0JBQWtCLHNCQUFzQixnQkFBZ0IsZ0JBQWdCLGdCQUFnQixlQUFlLFdBQVcsZ0JBQWdCLGtCQUFrQixzQkFBc0IsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsZUFBZSxXQUFXLFdBQVcsa0JBQWtCLGlCQUFpQixnQkFBZ0IsV0FBVyxnQkFBZ0IsVUFBVSx5QkFBeUIsYUFBYSxRQUFRLG9CQUFvQixjQUFjLGtCQUFrQixrQkFBa0IsUUFBUSxrQkFBa0Isa0JBQWtCLE9BQU8sYUFBYSxlQUFlLG9CQUFvQixxQkFBcUIsa0JBQWtCLGtCQUFrQixlQUFlLGtCQUFrQixrQkFBa0IsY0FBYyxhQUFhLGVBQWUsb0JBQW9CLHFCQUFxQixrQkFBa0Isa0JBQWtCLGVBQWUsa0JBQWtCLGtCQUFrQixjQUFjLGFBQWEsWUFBWSxvQkFBb0Isa0JBQWtCLGtCQUFrQixrQkFBa0IsWUFBWSxrQkFBa0Isa0JBQWtCLFdBQVcsYUFBYSxnQkFBZ0Isb0JBQW9CLHNCQUFzQixrQkFBa0Isa0JBQWtCLGdCQUFnQixrQkFBa0Isa0JBQWtCLGVBQWUsYUFBYSxnQkFBZ0Isb0JBQW9CLHNCQUFzQixrQkFBa0Isa0JBQWtCLGdCQUFnQixrQkFBa0Isa0JBQWtCLGVBQWUsYUFBYSxVQUFVLG9CQUFvQixnQkFBZ0Isa0JBQWtCLGtCQUFrQixVQUFVLGtCQUFrQixrQkFBa0IsU0FBUyxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLFlBQVksb0JBQW9CLGtCQUFrQixrQkFBa0Isa0JBQWtCLFlBQVksa0JBQWtCLGtCQUFrQixXQUFXLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsVUFBVSxxQkFBcUIsZ0JBQWdCLG1CQUFtQixrQkFBa0IsVUFBVSxtQkFBbUIsa0JBQWtCLFNBQVMsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxZQUFZLHFCQUFxQixrQkFBa0IsbUJBQW1CLGtCQUFrQixZQUFZLG1CQUFtQixrQkFBa0IsV0FBVyxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLFVBQVUscUJBQXFCLGdCQUFnQixtQkFBbUIsa0JBQWtCLFVBQVUsbUJBQW1CLGtCQUFrQixTQUFTLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsWUFBWSxxQkFBcUIsa0JBQWtCLG1CQUFtQixrQkFBa0IsWUFBWSxtQkFBbUIsa0JBQWtCLFdBQVcsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxXQUFXLHFCQUFxQixpQkFBaUIsbUJBQW1CLGtCQUFrQixXQUFXLG1CQUFtQixrQkFBa0IsV0FBVyx5QkFBeUIsYUFBYSxRQUFRLG9CQUFvQixjQUFjLGtCQUFrQixrQkFBa0IsUUFBUSxrQkFBa0Isa0JBQWtCLE9BQU8sYUFBYSxlQUFlLG9CQUFvQixxQkFBcUIsa0JBQWtCLGtCQUFrQixlQUFlLGtCQUFrQixrQkFBa0IsY0FBYyxhQUFhLGVBQWUsb0JBQW9CLHFCQUFxQixrQkFBa0Isa0JBQWtCLGVBQWUsa0JBQWtCLGtCQUFrQixjQUFjLGFBQWEsWUFBWSxvQkFBb0Isa0JBQWtCLGtCQUFrQixrQkFBa0IsWUFBWSxrQkFBa0Isa0JBQWtCLFdBQVcsYUFBYSxnQkFBZ0Isb0JBQW9CLHNCQUFzQixrQkFBa0Isa0JBQWtCLGdCQUFnQixrQkFBa0Isa0JBQWtCLGVBQWUsYUFBYSxnQkFBZ0Isb0JBQW9CLHNCQUFzQixrQkFBa0Isa0JBQWtCLGdCQUFnQixrQkFBa0Isa0JBQWtCLGVBQWUsYUFBYSxVQUFVLG9CQUFvQixnQkFBZ0Isa0JBQWtCLGtCQUFrQixVQUFVLGtCQUFrQixrQkFBa0IsU0FBUyxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLFlBQVksb0JBQW9CLGtCQUFrQixrQkFBa0Isa0JBQWtCLFlBQVksa0JBQWtCLGtCQUFrQixXQUFXLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsVUFBVSxxQkFBcUIsZ0JBQWdCLG1CQUFtQixrQkFBa0IsVUFBVSxtQkFBbUIsa0JBQWtCLFNBQVMsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxZQUFZLHFCQUFxQixrQkFBa0IsbUJBQW1CLGtCQUFrQixZQUFZLG1CQUFtQixrQkFBa0IsV0FBVyxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLFVBQVUscUJBQXFCLGdCQUFnQixtQkFBbUIsa0JBQWtCLFVBQVUsbUJBQW1CLGtCQUFrQixTQUFTLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsWUFBWSxxQkFBcUIsa0JBQWtCLG1CQUFtQixrQkFBa0IsWUFBWSxtQkFBbUIsa0JBQWtCLFdBQVcsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxXQUFXLHFCQUFxQixpQkFBaUIsbUJBQW1CLGtCQUFrQixXQUFXLG1CQUFtQixrQkFBa0IsV0FBVyx5QkFBeUIsYUFBYSxRQUFRLG9CQUFvQixjQUFjLGtCQUFrQixrQkFBa0IsUUFBUSxrQkFBa0Isa0JBQWtCLE9BQU8sYUFBYSxlQUFlLG9CQUFvQixxQkFBcUIsa0JBQWtCLGtCQUFrQixlQUFlLGtCQUFrQixrQkFBa0IsY0FBYyxhQUFhLGVBQWUsb0JBQW9CLHFCQUFxQixrQkFBa0Isa0JBQWtCLGVBQWUsa0JBQWtCLGtCQUFrQixjQUFjLGFBQWEsWUFBWSxvQkFBb0Isa0JBQWtCLGtCQUFrQixrQkFBa0IsWUFBWSxrQkFBa0Isa0JBQWtCLFdBQVcsYUFBYSxnQkFBZ0Isb0JBQW9CLHNCQUFzQixrQkFBa0Isa0JBQWtCLGdCQUFnQixrQkFBa0Isa0JBQWtCLGVBQWUsYUFBYSxnQkFBZ0Isb0JBQW9CLHNCQUFzQixrQkFBa0Isa0JBQWtCLGdCQUFnQixrQkFBa0Isa0JBQWtCLGVBQWUsYUFBYSxVQUFVLG9CQUFvQixnQkFBZ0Isa0JBQWtCLGtCQUFrQixVQUFVLGtCQUFrQixrQkFBa0IsU0FBUyxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLGdCQUFnQixvQkFBb0Isc0JBQXNCLGtCQUFrQixrQkFBa0IsZ0JBQWdCLGtCQUFrQixrQkFBa0IsZUFBZSxhQUFhLFlBQVksb0JBQW9CLGtCQUFrQixrQkFBa0Isa0JBQWtCLFlBQVksa0JBQWtCLGtCQUFrQixXQUFXLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsVUFBVSxxQkFBcUIsZ0JBQWdCLG1CQUFtQixrQkFBa0IsVUFBVSxtQkFBbUIsa0JBQWtCLFNBQVMsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFBbUIsa0JBQWtCLGVBQWUsY0FBYyxZQUFZLHFCQUFxQixrQkFBa0IsbUJBQW1CLGtCQUFrQixZQUFZLG1CQUFtQixrQkFBa0IsV0FBVyxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLGdCQUFnQixxQkFBcUIsc0JBQXNCLG1CQUFtQixrQkFBa0IsZ0JBQWdCLG1CQUFtQixrQkFBa0IsZUFBZSxjQUFjLFVBQVUscUJBQXFCLGdCQUFnQixtQkFBbUIsa0JBQWtCLFVBQVUsbUJBQW1CLGtCQUFrQixTQUFTLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsZ0JBQWdCLHFCQUFxQixzQkFBc0IsbUJBQW1CLGtCQUFrQixnQkFBZ0IsbUJBQW1CLGtCQUFrQixlQUFlLGNBQWMsWUFBWSxxQkFBcUIsa0JBQWtCLG1CQUFtQixrQkFBa0IsWUFBWSxtQkFBbUIsa0JBQWtCLFdBQVcsY0FBYyxnQkFBZ0IscUJBQXFCLHNCQUFzQixtQkFBbUIsa0JBQWtCLGdCQUFnQixtQkFB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QUFZLGtCQUFrQiw4Q0FBOEMsWUFBWSxpQkFBaUIsbUJBQW1CLFNBQVMsa0JBQWtCLGdDQUFnQyxzQkFBc0IsY0FBYyw4Q0FBOEMsWUFBWSxnQkFBZ0IsU0FBUyxVQUFVLDZCQUE2QixrQkFBa0IsU0FBUyxPQUFPLFdBQVcsVUFBVSxvREFBb0QscUJBQXFCLGFBQWEsWUFBWSxzQkFBc0IsMkRBQTJELGtCQUFrQixjQUFjLDZDQUE2QyxTQUFTLFlBQVksaUJBQWlCLG1CQUFtQixjQUFjLHVDQUF1QyxrQkFBa0IsdUNBQXVDLFdBQVcsWUFBWSxrQkFBa0IsOENBQThDLFdBQVcsVUFBVSxTQUFTLHlCQUF5QixvQkFBb0IsYUFBYSx5QkFBeUIsU0FBUyxjQUFjLGdCQUFnQixhQUFhLGNBQWMsc0JBQXNCLHVDQUF1QyxhQUFhLHlCQUF5QixZQUFZLGlCQUFpQixrQkFBa0IsY0FBYyw2Q0FBNkMsV0FBVyxnQkFBZ0IsdUJBQXVCLG1CQUFtQixjQUFjLHNCQUFzQixrQkFBa0IsNkNBQTZDLGtCQUFrQixRQUFRLHFDQUFxQyxjQUFjLCtCQUErQixtQkFBbUIsMkJBQTJCLGdCQUFnQixrQkFBa0IsZUFBZSxXQUFXLHNCQUFzQiw0Q0FBNEMsWUFBWSxXQUFXLHFCQUFxQixzQkFBc0IsMkNBQTJDLFdBQVcsaURBQWlELGVBQWU7O0FBRXJ6b0kiLCJmaWxlIjoiNzEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikodW5kZWZpbmVkKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIkBjaGFyc2V0IFxcXCJVVEYtOFxcXCI7LmVsLWJyZWFkY3J1bWI6YWZ0ZXIsLmVsLWJyZWFkY3J1bWI6YmVmb3JlLC5lbC1idXR0b24tZ3JvdXA6YWZ0ZXIsLmVsLWJ1dHRvbi1ncm91cDpiZWZvcmUsLmVsLWZvcm0taXRlbTphZnRlciwuZWwtZm9ybS1pdGVtOmJlZm9yZSwuZWwtZm9ybS1pdGVtX19jb250ZW50OmFmdGVyLC5lbC1mb3JtLWl0ZW1fX2NvbnRlbnQ6YmVmb3Jle2Rpc3BsYXk6dGFibGU7Y29udGVudDpcXFwiXFxcIn0uZWwtY2hlY2tib3gtYnV0dG9uX19vcmlnaW5hbCwuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmFycm93LmRpc2FibGVkLC5lbC10YWJsZSAuaGlkZGVuLWNvbHVtbnMsLmVsLXRhYmxlIHRkLmlzLWhpZGRlbj4qLC5lbC10YWJsZSB0aC5pcy1oaWRkZW4+KiwuZWwtdGFibGUtLWhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn0uZWwtZm9ybS1pdGVtX19jb250ZW50OmFmdGVye2NsZWFyOmJvdGh9LmVsLWZvcm0taXRlbTphZnRlcntjbGVhcjpib3RofS5lbC1icmVhZGNydW1iOmFmdGVye2NsZWFyOmJvdGh9LmVsLWJ1dHRvbi1ncm91cDphZnRlcntjbGVhcjpib3RofS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbi5pcy1sb2FkaW5nIGxpOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6XFxcIlxcXCI7aGVpZ2h0OjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1kaWFsb2dfX2hlYWRlcjphZnRlciwuZWwtZGlhbG9nX19oZWFkZXI6YmVmb3Jle2Rpc3BsYXk6dGFibGU7Y29udGVudDpcXFwiXFxcIn0uZWwtZGlhbG9nX19oZWFkZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OmVsZW1lbnQtaWNvbnM7c3JjOnVybChcIiArIHJlcXVpcmUoXCIuL2ZvbnRzL2VsZW1lbnQtaWNvbnMud29mZj90PTE0NzI0NDA3NDFcIikgKyBcIikgZm9ybWF0KCd3b2ZmJyksdXJsKFwiICsgcmVxdWlyZShcIi4vZm9udHMvZWxlbWVudC1pY29ucy50dGY/dD0xNDcyNDQwNzQxXCIpICsgXCIpIGZvcm1hdCgndHJ1ZXR5cGUnKTtmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWx9W2NsYXNzKj1cXFwiIGVsLWljb24tXFxcIl0sW2NsYXNzXj1lbC1pY29uLV17Zm9udC1mYW1pbHk6ZWxlbWVudC1pY29ucyFpbXBvcnRhbnQ7c3BlYWs6bm9uZTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo0MDA7Zm9udC12YXJpYW50Om5vcm1hbDt0ZXh0LXRyYW5zZm9ybTpub25lO2xpbmUtaGVpZ2h0OjE7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7LXdlYmtpdC1mb250LXNtb290aGluZzphbnRpYWxpYXNlZDstbW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9LmVsLWljb24tYXJyb3ctZG93bjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2MDBcXFwifS5lbC1pY29uLWFycm93LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNjAxXFxcIn0uZWwtaWNvbi1hcnJvdy1yaWdodDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2MDJcXFwifS5lbC1pY29uLWFycm93LXVwOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTYwM1xcXCJ9LmVsLWljb24tY2FyZXQtYm90dG9tOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTYwNFxcXCJ9LmVsLWljb24tY2FyZXQtbGVmdDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2MDVcXFwifS5lbC1pY29uLWNhcmV0LXJpZ2h0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTYwNlxcXCJ9LmVsLWljb24tY2FyZXQtdG9wOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTYwN1xcXCJ9LmVsLWljb24tY2hlY2s6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNjA4XFxcIn0uZWwtaWNvbi1jaXJjbGUtY2hlY2s6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNjA5XFxcIn0uZWwtaWNvbi1jaXJjbGUtY2xvc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNjBBXFxcIn0uZWwtaWNvbi1jaXJjbGUtY3Jvc3M6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNjBCXFxcIn0uZWwtaWNvbi1jbG9zZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2MENcXFwifS5lbC1pY29uLXVwbG9hZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2MERcXFwifS5lbC1pY29uLWQtYXJyb3ctbGVmdDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2MEVcXFwifS5lbC1pY29uLWQtYXJyb3ctcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNjBGXFxcIn0uZWwtaWNvbi1kLWNhcmV0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTYxMFxcXCJ9LmVsLWljb24tZGF0ZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2MTFcXFwifS5lbC1pY29uLWRlbGV0ZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2MTJcXFwifS5lbC1pY29uLWRvY3VtZW50OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTYxM1xcXCJ9LmVsLWljb24tZWRpdDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2MTRcXFwifS5lbC1pY29uLWluZm9ybWF0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTYxNVxcXCJ9LmVsLWljb24tbG9hZGluZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2MTZcXFwifS5lbC1pY29uLW1lbnU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNjE3XFxcIn0uZWwtaWNvbi1tZXNzYWdlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTYxOFxcXCJ9LmVsLWljb24tbWludXM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNjE5XFxcIn0uZWwtaWNvbi1tb3JlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTYxQVxcXCJ9LmVsLWljb24tcGljdHVyZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2MUJcXFwifS5lbC1pY29uLXBsdXM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNjFDXFxcIn0uZWwtaWNvbi1zZWFyY2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNjFEXFxcIn0uZWwtaWNvbi1zZXR0aW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTYxRVxcXCJ9LmVsLWljb24tc2hhcmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNjFGXFxcIn0uZWwtaWNvbi1zdGFyLW9mZjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2MjBcXFwifS5lbC1pY29uLXN0YXItb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNjIxXFxcIn0uZWwtaWNvbi10aW1lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTYyMlxcXCJ9LmVsLWljb24td2FybmluZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2MjNcXFwifS5lbC1pY29uLWRlbGV0ZTI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNjI0XFxcIn0uZWwtaWNvbi11cGxvYWQyOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTYyN1xcXCJ9LmVsLWljb24tdmlldzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2MjZcXFwifS5lbC1pY29uLWxvYWRpbmd7YW5pbWF0aW9uOnJvdGF0aW5nIDFzIGxpbmVhciBpbmZpbml0ZX0uZWwtaWNvbi0tcmlnaHR7bWFyZ2luLWxlZnQ6NXB4fS5lbC1pY29uLS1sZWZ0e21hcmdpbi1yaWdodDo1cHh9QGtleWZyYW1lcyByb3RhdGluZ3swJXt0cmFuc2Zvcm06cm90YXRlWigwKX0xMDAle3RyYW5zZm9ybTpyb3RhdGVaKDM2MGRlZyl9fS5lbC1wYWdpbmF0aW9ue3doaXRlLXNwYWNlOm5vd3JhcDtwYWRkaW5nOjJweCA1cHg7Y29sb3I6IzQ4NTc2YX0uZWwtcGFnaW5hdGlvbjphZnRlciwuZWwtcGFnaW5hdGlvbjpiZWZvcmV7ZGlzcGxheTp0YWJsZTtjb250ZW50OlxcXCJcXFwifS5lbC1wYWdpbmF0aW9uOmFmdGVye2NsZWFyOmJvdGh9LmVsLXBhZ2luYXRpb24gYnV0dG9uLC5lbC1wYWdpbmF0aW9uIHNwYW57ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjEzcHg7bWluLXdpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjhweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1wYWdpbmF0aW9uIC5lbC1zZWxlY3QgLmVsLWlucHV0e3dpZHRoOjExMHB4fS5lbC1wYWdpbmF0aW9uIC5lbC1zZWxlY3QgLmVsLWlucHV0IGlucHV0e3BhZGRpbmctcmlnaHQ6MjVweDtib3JkZXItcmFkaXVzOjJweDtoZWlnaHQ6MjhweH0uZWwtcGFnaW5hdGlvbiBidXR0b257Ym9yZGVyOm5vbmU7cGFkZGluZzowIDZweDtiYWNrZ3JvdW5kOjAgMH0uZWwtcGFnaW5hdGlvbiBidXR0b246Zm9jdXN7b3V0bGluZTowfS5lbC1wYWdpbmF0aW9uIGJ1dHRvbjpob3Zlcntjb2xvcjojMjBhMGZmfS5lbC1wYWdpbmF0aW9uIGJ1dHRvbi5kaXNhYmxlZHtjb2xvcjojZTRlNGU0O2JhY2tncm91bmQtY29sb3I6I2ZmZjtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXBhZ2VyIGxpLC5lbC1wYWdlciBsaS5idG4tcXVpY2tuZXh0OmhvdmVyLC5lbC1wYWdlciBsaS5idG4tcXVpY2twcmV2OmhvdmVye2N1cnNvcjpwb2ludGVyfS5lbC1wYWdpbmF0aW9uIC5idG4tbmV4dCwuZWwtcGFnaW5hdGlvbiAuYnRuLXByZXZ7YmFja2dyb3VuZDpjZW50ZXIgY2VudGVyIG5vLXJlcGVhdCAjZmZmO2JhY2tncm91bmQtc2l6ZToxNnB4O2JvcmRlcjoxcHggc29saWQgI2QxZGJlNTtjdXJzb3I6cG9pbnRlcjttYXJnaW46MDtjb2xvcjojOTdhOGJlfS5lbC1wYWdpbmF0aW9uIC5idG4tbmV4dCAuZWwtaWNvbiwuZWwtcGFnaW5hdGlvbiAuYnRuLXByZXYgLmVsLWljb257ZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweH0uZWwtcGFnaW5hdGlvbiAuYnRuLXByZXZ7Ym9yZGVyLXJhZGl1czoycHggMCAwIDJweDtib3JkZXItcmlnaHQ6MH0uZWwtcGFnaW5hdGlvbiAuYnRuLW5leHR7Ym9yZGVyLXJhZGl1czowIDJweCAycHggMDtib3JkZXItbGVmdDowfS5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuYnRuLW5leHQsLmVsLXBhZ2luYXRpb24tLXNtYWxsIC5idG4tcHJldiwuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmVsLXBhZ2VyIGxpLC5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnZXIgbGk6bGFzdC1jaGlsZHtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjJweDtoZWlnaHQ6MjJweDttaW4td2lkdGg6MjJweH0uZWwtcGFnaW5hdGlvbi0tc21hbGwgLmVsLXBhZ2VyIGxpe2JvcmRlci1yYWRpdXM6MnB4fS5lbC1wYWdpbmF0aW9uX19zaXplc3ttYXJnaW46MCAxMHB4IDAgMH0uZWwtcGFnaW5hdGlvbl9fc2l6ZXMgLmVsLWlucHV0IC5lbC1pbnB1dF9faW5uZXJ7Zm9udC1zaXplOjEzcHg7Ym9yZGVyLWNvbG9yOiNkMWRiZTV9LmVsLXBhZ2luYXRpb25fX3NpemVzIC5lbC1pbnB1dCAuZWwtaW5wdXRfX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojMjBhMGZmfS5lbC1wYWdpbmF0aW9uX19qdW1we21hcmdpbi1sZWZ0OjEwcHh9LmVsLXBhZ2luYXRpb25fX3RvdGFse21hcmdpbjowIDEwcHh9LmVsLXBhZ2luYXRpb25fX3JpZ2h0d3JhcHBlcntmbG9hdDpyaWdodH0uZWwtcGFnaW5hdGlvbl9fZWRpdG9ye2JvcmRlcjoxcHggc29saWQgI2QxZGJlNTtib3JkZXItcmFkaXVzOjJweDtsaW5lLWhlaWdodDoxOHB4O3BhZGRpbmc6NHB4IDJweDt3aWR0aDozMHB4O3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowIDZweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7dHJhbnNpdGlvbjpib3JkZXIgLjNzOy1tb3otYXBwZWFyYW5jZTp0ZXh0ZmllbGR9LmVsLXBhZ2VyLC5lbC1wYWdlciBsaXt2ZXJ0aWNhbC1hbGlnbjp0b3A7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjB9LmVsLXBhZ2luYXRpb25fX2VkaXRvcjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiwuZWwtcGFnaW5hdGlvbl9fZWRpdG9yOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5lbC1wYWdpbmF0aW9uX19lZGl0b3I6Zm9jdXN7b3V0bGluZTowO2JvcmRlci1jb2xvcjojMjBhMGZmfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fd3JhcCwuZWwtcGFnZXIgbGl7Ym9yZGVyOjFweCBzb2xpZCAjZDFkYmU1O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtcGFnZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2xpc3Qtc3R5bGU6bm9uZTtmb250LXNpemU6MDtwYWRkaW5nOjB9LmVsLWRhdGUtdGFibGUsLmVsLXJhZGlvey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZX0uZWwtZGF0ZS10YWJsZSwuZWwtcmFkaW8sLmVsLXRpbWUtcGFuZWx7LW1vei11c2VyLXNlbGVjdDpub25lfS5lbC1wYWdlciBsaXtwYWRkaW5nOjAgNHB4O2JvcmRlci1yaWdodDowO2JhY2tncm91bmQ6I2ZmZjtmb250LXNpemU6MTNweDttaW4td2lkdGg6MjhweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4O3RleHQtYWxpZ246Y2VudGVyfS5lbC1wYWdlciBsaTpsYXN0LWNoaWxke2JvcmRlci1yaWdodDoxcHggc29saWQgI2QxZGJlNX0uZWwtcGFnZXIgbGkuYnRuLXF1aWNrbmV4dCwuZWwtcGFnZXIgbGkuYnRuLXF1aWNrcHJldntsaW5lLWhlaWdodDoyOHB4O2NvbG9yOiM5N2E4YmV9LmVsLXBhZ2VyIGxpLmFjdGl2ZStsaXtib3JkZXItbGVmdDowO3BhZGRpbmctbGVmdDo1cHh9LmVsLXBhZ2VyIGxpOmhvdmVye2NvbG9yOiMyMGEwZmZ9LmVsLXBhZ2VyIGxpLmFjdGl2ZXtib3JkZXItY29sb3I6IzIwYTBmZjtiYWNrZ3JvdW5kLWNvbG9yOiMyMGEwZmY7Y29sb3I6I2ZmZjtjdXJzb3I6ZGVmYXVsdH0uZWwtZGlhbG9ne3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czoycHg7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwuMyk7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbi1ib3R0b206NTBweH0uZWwtZGlhbG9nLS10aW55e3dpZHRoOjMwJX0uZWwtZGlhbG9nLS1zbWFsbHt3aWR0aDo1MCV9LmVsLWRpYWxvZy0tbGFyZ2V7d2lkdGg6OTAlfS5lbC1kaWFsb2ctLWZ1bGx7d2lkdGg6MTAwJTt0b3A6MDttYXJnaW4tYm90dG9tOjA7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b30uZWwtZGlhbG9nX193cmFwcGVye3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmZpeGVkO292ZXJmbG93OmF1dG87bWFyZ2luOjB9LmVsLWF1dG9jb21wbGV0ZSwuZWwtZHJvcGRvd257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LmVsLWRpYWxvZ19faGVhZGVye3BhZGRpbmc6MjBweCAyMHB4IDB9LmVsLWRpYWxvZ19faGVhZGVyYnRue2Zsb2F0OnJpZ2h0O2JhY2tncm91bmQ6MCAwO2JvcmRlcjpub25lO291dGxpbmU6MDtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjE2cHh9LmVsLWRpYWxvZ19faGVhZGVyYnRuIC5lbC1kaWFsb2dfX2Nsb3Nle2NvbG9yOiNiZmNiZDl9LmVsLWRpYWxvZ19faGVhZGVyYnRuOmZvY3VzIC5lbC1kaWFsb2dfX2Nsb3NlLC5lbC1kaWFsb2dfX2hlYWRlcmJ0bjpob3ZlciAuZWwtZGlhbG9nX19jbG9zZXtjb2xvcjojMjBhMGZmfS5lbC1kaWFsb2dfX3RpdGxle2xpbmUtaGVpZ2h0OjE7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMxZjJkM2R9LmVsLWRpYWxvZ19fYm9keXtwYWRkaW5nOjMwcHggMjBweDtjb2xvcjojNDg1NzZhO2ZvbnQtc2l6ZToxNHB4fS5lbC1kaWFsb2dfX2Zvb3RlcntwYWRkaW5nOjEwcHggMjBweCAxNXB4O3RleHQtYWxpZ246cmlnaHQ7Ym94LXNpemluZzpib3JkZXItYm94fS5kaWFsb2ctZmFkZS1lbnRlci1hY3RpdmV7YW5pbWF0aW9uOmRpYWxvZy1mYWRlLWluIC4zc30uZGlhbG9nLWZhZGUtbGVhdmUtYWN0aXZle2FuaW1hdGlvbjpkaWFsb2ctZmFkZS1vdXQgLjNzfUBrZXlmcmFtZXMgZGlhbG9nLWZhZGUtaW57MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgZGlhbG9nLWZhZGUtb3V0ezAle3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7b3BhY2l0eToxfTEwMCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfX0uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb257bWFyZ2luOjVweCAwO2JveC1zaGFkb3c6MCAwIDZweCAwIHJnYmEoMCwwLDAsLjA0KSwwIDJweCA0cHggMCByZ2JhKDAsMCwwLC4xMil9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uIGxpe2xpc3Qtc3R5bGU6bm9uZTtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxMHB4O21hcmdpbjowO2N1cnNvcjpwb2ludGVyO2NvbG9yOiM0ODU3NmE7Zm9udC1zaXplOjE0cHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbiBsaTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNGU4ZjF9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uIGxpLmhpZ2hsaWdodGVke2JhY2tncm91bmQtY29sb3I6IzIwYTBmZjtjb2xvcjojZmZmfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbiBsaTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMDA4MmU2fS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbi5pcy1sb2FkaW5nIGxpOmhvdmVyLC5lbC1kcm9wZG93bi1tZW51e2JhY2tncm91bmQtY29sb3I6I2ZmZn0uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb24gbGkuZGl2aWRlcnttYXJnaW4tdG9wOjZweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZDFkYmU1fS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbiBsaS5kaXZpZGVyOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotNnB4fS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbi5pcy1sb2FkaW5nIGxpe3RleHQtYWxpZ246Y2VudGVyO2hlaWdodDoxMDBweDtsaW5lLWhlaWdodDoxMDBweDtmb250LXNpemU6MjBweDtjb2xvcjojOTk5fS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbi5pcy1sb2FkaW5nIC5lbC1pY29uLWxvYWRpbmd7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fd3JhcHttYXgtaGVpZ2h0OjI4MHB4O292ZXJmbG93OmF1dG87YmFja2dyb3VuZC1jb2xvcjojZmZmO3BhZGRpbmc6NnB4IDA7Ym9yZGVyLXJhZGl1czoycHh9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX19saXN0e21hcmdpbjowO3BhZGRpbmc6MH0uZWwtZHJvcGRvd257Y29sb3I6IzQ4NTc2YTtmb250LXNpemU6MTRweH0uZWwtZHJvcGRvd24gLmVsLWJ1dHRvbi1ncm91cHtkaXNwbGF5OmJsb2NrfS5lbC1kcm9wZG93biAuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b257ZmxvYXQ6bm9uZX0uZWwtZHJvcGRvd24gLmVsLWRyb3Bkb3duX19jYXJldC1idXR0b257cGFkZGluZy1yaWdodDo1cHg7cGFkZGluZy1sZWZ0OjVweH0uZWwtZHJvcGRvd24gLmVsLWRyb3Bkb3duX19jYXJldC1idXR0b24gLmVsLWRyb3Bkb3duX19pY29ue3BhZGRpbmctbGVmdDowfS5lbC1kcm9wZG93bl9faWNvbntmb250LXNpemU6MTJweDttYXJnaW46MCAzcHh9LmVsLWRyb3Bkb3duLW1lbnV7bWFyZ2luOjVweCAwO2JvcmRlcjoxcHggc29saWQgI2QxZGJlNTtib3gtc2hhZG93OjAgMnB4IDRweCByZ2JhKDAsMCwwLC4xMiksMCAwIDZweCByZ2JhKDAsMCwwLC4xMik7cGFkZGluZzo2cHggMDt6LWluZGV4OjEwO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDttaW4td2lkdGg6MTAwcHh9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW17bGlzdC1zdHlsZTpub25lO2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDEwcHg7bWFyZ2luOjA7Y3Vyc29yOnBvaW50ZXJ9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW06bm90KC5pcy1kaXNhYmxlZCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTRlOGYxO2NvbG9yOiM0ODU3NmF9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0uaXMtZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6I2JmY2JkOTtwb2ludGVyLWV2ZW50czpub25lfS5lbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVke3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi10b3A6NnB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNkMWRiZTV9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWQ6YmVmb3Jle2NvbnRlbnQ6Jyc7aGVpZ2h0OjZweDtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0xMHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZn0uZWwtbWVudS1pdGVtLC5lbC1zdWJtZW51X190aXRsZXtoZWlnaHQ6NTZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM0ODU3NmE7cGFkZGluZzowIDIwcHg7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjNzLGJhY2tncm91bmQtY29sb3IgLjNzLGNvbG9yIC4zcztib3gtc2l6aW5nOmJvcmRlci1ib3g7d2hpdGUtc3BhY2U6bm93cmFwfS5lbC1tZW51e2JvcmRlci1yYWRpdXM6MnB4O2xpc3Qtc3R5bGU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MDtwYWRkaW5nLWxlZnQ6MDtiYWNrZ3JvdW5kLWNvbG9yOiNlZWYxZjZ9LmVsLW1lbnU6YWZ0ZXIsLmVsLW1lbnU6YmVmb3Jle2Rpc3BsYXk6dGFibGU7Y29udGVudDpcXFwiXFxcIn0uZWwtbWVudTphZnRlcntjbGVhcjpib3RofS5lbC1tZW51IGxpe2xpc3Qtc3R5bGU6bm9uZX0uZWwtbWVudS0tZGFya3tiYWNrZ3JvdW5kLWNvbG9yOiMzMjQxNTd9LmVsLW1lbnUtLWRhcmsgLmVsLW1lbnUtaXRlbSwuZWwtbWVudS0tZGFyayAuZWwtc3VibWVudV9fdGl0bGV7Y29sb3I6I2JmY2JkOX0uZWwtbWVudS0tZGFyayAuZWwtbWVudS1pdGVtOmhvdmVyLC5lbC1tZW51LS1kYXJrIC5lbC1zdWJtZW51X190aXRsZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM0ODU3NmF9LmVsLW1lbnUtLWRhcmsgLmVsLXN1Ym1lbnUgLmVsLW1lbnV7YmFja2dyb3VuZC1jb2xvcjojMWYyZDNkfS5lbC1tZW51LS1kYXJrIC5lbC1zdWJtZW51IC5lbC1tZW51IC5lbC1tZW51LWl0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNDg1NzZhfS5lbC1tZW51LS1ob3Jpem9udGFsIC5lbC1tZW51LWl0ZW17ZmxvYXQ6bGVmdDtoZWlnaHQ6NjBweDtsaW5lLWhlaWdodDo2MHB4O21hcmdpbjowO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOjVweCBzb2xpZCB0cmFuc3BhcmVudH0uZWwtbWVudS0taG9yaXpvbnRhbCAuZWwtbWVudS1pdGVtIGEsLmVsLW1lbnUtLWhvcml6b250YWwgLmVsLW1lbnUtaXRlbSBhOmhvdmVye2NvbG9yOmluaGVyaXR9LmVsLW1lbnUtLWhvcml6b250YWwgLmVsLXN1Ym1lbnV7ZmxvYXQ6bGVmdDtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtbWVudS0taG9yaXpvbnRhbCAuZWwtc3VibWVudT4uZWwtbWVudXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NjVweDtsZWZ0OjA7Ym9yZGVyOjFweCBzb2xpZCAjZDFkYmU1O3BhZGRpbmc6NXB4IDA7YmFja2dyb3VuZC1jb2xvcjojZmZmO3otaW5kZXg6MTAwO21pbi13aWR0aDoxMDAlO2JveC1zaGFkb3c6MCAycHggNHB4IDAgcmdiYSgwLDAsMCwuMTIpLDAgMCA2cHggMCByZ2JhKDAsMCwwLC4wNCl9LmVsLW1lbnUtLWhvcml6b250YWwgLmVsLXN1Ym1lbnUgLmVsLXN1Ym1lbnVfX3RpdGxle2hlaWdodDo2MHB4O2xpbmUtaGVpZ2h0OjYwcHg7Ym9yZGVyLWJvdHRvbTo1cHggc29saWQgdHJhbnNwYXJlbnR9LmVsLW1lbnUtLWhvcml6b250YWwgLmVsLXN1Ym1lbnUgLmVsLW1lbnUtaXRlbXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZmxvYXQ6bm9uZTtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxMHB4fS5lbC1tZW51LS1ob3Jpem9udGFsIC5lbC1zdWJtZW51IC5lbC1zdWJtZW51X19pY29uLWFycm93e3Bvc2l0aW9uOnN0YXRpYzt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLWxlZnQ6NXB4O2NvbG9yOiM5N2E4YmU7bWFyZ2luLXRvcDotM3B4fS5lbC1tZW51LS1ob3Jpem9udGFsIC5lbC1tZW51LWl0ZW06aG92ZXIsLmVsLW1lbnUtLWhvcml6b250YWwgLmVsLXN1Ym1lbnVfX3RpdGxlOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZjFmNn0uZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtbWVudS1pdGVtOmhvdmVyLC5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51LmlzLWFjdGl2ZSAuZWwtc3VibWVudV9fdGl0bGUsLmVsLW1lbnUtLWhvcml6b250YWw+LmVsLXN1Ym1lbnU6aG92ZXIgLmVsLXN1Ym1lbnVfX3RpdGxle2JvcmRlci1ib3R0b206NXB4IHNvbGlkICMyMGEwZmZ9LmVsLW1lbnUtLWhvcml6b250YWwuZWwtbWVudS0tZGFyayAuZWwtbWVudS1pdGVtOmhvdmVyLC5lbC1tZW51LS1ob3Jpem9udGFsLmVsLW1lbnUtLWRhcmsgLmVsLXN1Ym1lbnVfX3RpdGxlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzMyNDE1N30uZWwtbWVudS0taG9yaXpvbnRhbC5lbC1tZW51LS1kYXJrIC5lbC1zdWJtZW51IC5lbC1tZW51LWl0ZW06aG92ZXIsLmVsLW1lbnUtLWhvcml6b250YWwuZWwtbWVudS0tZGFyayAuZWwtc3VibWVudSAuZWwtc3VibWVudS10aXRsZTpob3ZlciwuZWwtbWVudS1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2QxZGJlNX0uZWwtbWVudS0taG9yaXpvbnRhbC5lbC1tZW51LS1kYXJrIC5lbC1zdWJtZW51IC5lbC1tZW51LWl0ZW0sLmVsLW1lbnUtLWhvcml6b250YWwuZWwtbWVudS0tZGFyayAuZWwtc3VibWVudSAuZWwtc3VibWVudS10aXRsZXtjb2xvcjojNDg1NzZhfS5lbC1tZW51LS1ob3Jpem9udGFsLmVsLW1lbnUtLWRhcmsgLmVsLXN1Ym1lbnUgLmVsLW1lbnUtaXRlbS5pcy1hY3RpdmUsLmVsLW1lbnUtaXRlbS5pcy1hY3RpdmV7Y29sb3I6IzIwYTBmZn0uZWwtbWVudS0tY29sbGFwc2V7d2lkdGg6NjRweH0uZWwtbWVudS0tY29sbGFwc2U+LmVsLW1lbnUtaXRlbSBbY2xhc3NePWVsLWljb24tXSwuZWwtbWVudS0tY29sbGFwc2U+LmVsLXN1Ym1lbnU+LmVsLXN1Ym1lbnVfX3RpdGxlIFtjbGFzc149ZWwtaWNvbi1de21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDoyNHB4O3RleHQtYWxpZ246Y2VudGVyfS5lbC1tZW51LS1jb2xsYXBzZT4uZWwtbWVudS1pdGVtIC5lbC1zdWJtZW51X19pY29uLWFycm93LC5lbC1tZW51LS1jb2xsYXBzZT4uZWwtc3VibWVudT4uZWwtc3VibWVudV9fdGl0bGUgLmVsLXN1Ym1lbnVfX2ljb24tYXJyb3d7ZGlzcGxheTpub25lfS5lbC1tZW51LS1jb2xsYXBzZT4uZWwtbWVudS1pdGVtIHNwYW4sLmVsLW1lbnUtLWNvbGxhcHNlPi5lbC1zdWJtZW51Pi5lbC1zdWJtZW51X190aXRsZSBzcGFue2hlaWdodDowO3dpZHRoOjA7b3ZlcmZsb3c6aGlkZGVuO3Zpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1tZW51LS1jb2xsYXBzZSAuZWwtc3VibWVudXtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtbWVudS0tY29sbGFwc2UgLmVsLXN1Ym1lbnUgLmVsLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6NXB4O3RvcDowO2xlZnQ6MTAwJTt6LWluZGV4OjEwfS5lbC1tZW51LS1jb2xsYXBzZSAuZWwtc3VibWVudS5pcy1vcGVuZWQ+LmVsLXN1Ym1lbnVfX3RpdGxlIC5lbC1zdWJtZW51X19pY29uLWFycm93ey1tcy10cmFuc2Zvcm06bm9uZTt0cmFuc2Zvcm06bm9uZX0uZWwtbWVudS1pdGVtIFtjbGFzc149ZWwtaWNvbi1de21hcmdpbi1yaWdodDo1cHg7d2lkdGg6MjRweDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtbWVudS1pdGVtICp7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1tZW51LWl0ZW06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0uZWwtbWVudS1pdGVtOmxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LmVsLXN1Ym1lbnUgW2NsYXNzXj1lbC1pY29uLV17dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDo1cHg7d2lkdGg6MjRweDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtc3VibWVudSAuZWwtbWVudXtiYWNrZ3JvdW5kLWNvbG9yOiNlNGU4ZjF9LmVsLXN1Ym1lbnUgLmVsLW1lbnUtaXRlbTpob3ZlciwuZWwtc3VibWVudV9fdGl0bGU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZDFkYmU1fS5lbC1zdWJtZW51IC5lbC1tZW51LWl0ZW17aGVpZ2h0OjUwcHg7bGluZS1oZWlnaHQ6NTBweDtwYWRkaW5nOjAgNDVweDttaW4td2lkdGg6MjAwcHh9LmVsLXN1Ym1lbnUuaXMtb3BlbmVkPi5lbC1zdWJtZW51X190aXRsZSAuZWwtc3VibWVudV9faWNvbi1hcnJvd3stbXMtdHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpO3RyYW5zZm9ybTpyb3RhdGVaKDE4MGRlZyl9LmVsLXN1Ym1lbnUuaXMtYWN0aXZlIC5lbC1zdWJtZW51X190aXRsZXtib3JkZXItYm90dG9tLWNvbG9yOiMyMGEwZmZ9LmVsLXN1Ym1lbnVfX3RpdGxle3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1zdWJtZW51X190aXRsZSAqe3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtc3VibWVudV9faWNvbi1hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjIwcHg7bWFyZ2luLXRvcDotN3B4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcztmb250LXNpemU6MTJweH0uZWwtcmFkaW8sLmVsLXJhZGlvX19pbm5lciwuZWwtcmFkaW9fX2lucHV0e3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1tZW51LWl0ZW0tZ3JvdXA+dWx7cGFkZGluZzowfS5lbC1tZW51LWl0ZW0tZ3JvdXBfX3RpdGxle3BhZGRpbmctdG9wOjE1cHg7bGluZS1oZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxNHB4O3BhZGRpbmctbGVmdDoyMHB4O2NvbG9yOiM5N2E4YmV9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIsLmVsLXJhZGlvLWdyb3VwLC5lbC1yYWRpb19faW5wdXR7bGluZS1oZWlnaHQ6MTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lmhvcml6b250YWwtY29sbGFwc2UtdHJhbnNpdGlvbiAuZWwtc3VibWVudV9fdGl0bGUgLmVsLXN1Ym1lbnVfX2ljb24tYXJyb3d7dHJhbnNpdGlvbjouMnM7b3BhY2l0eTowfS5lbC1yYWRpb3tjb2xvcjojMWYyZDNkO2N1cnNvcjpwb2ludGVyO3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtcmFkaW8rLmVsLXJhZGlve21hcmdpbi1sZWZ0OjE1cHh9LmVsLXJhZGlvX19pbnB1dHt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowfS5lbC1yYWRpb19faW5wdXQuaXMtZm9jdXMgLmVsLXJhZGlvX19pbm5lcntib3JkZXItY29sb3I6IzIwYTBmZn0uZWwtcmFkaW9fX2lucHV0LmlzLWNoZWNrZWQgLmVsLXJhZGlvX19pbm5lcntib3JkZXItY29sb3I6IzIwYTBmZjtiYWNrZ3JvdW5kOiMyMGEwZmZ9LmVsLXJhZGlvX19pbnB1dC5pcy1jaGVja2VkIC5lbC1yYWRpb19faW5uZXI6OmFmdGVyey1tcy10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEpfS5lbC1yYWRpb19faW5wdXQuaXMtZGlzYWJsZWQgLmVsLXJhZGlvX19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNlZWYxZjY7Ym9yZGVyLWNvbG9yOiNkMWRiZTU7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1yYWRpb19faW5wdXQuaXMtZGlzYWJsZWQgLmVsLXJhZGlvX19pbm5lcjo6YWZ0ZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6I2VlZjFmNn0uZWwtcmFkaW9fX2lucHV0LmlzLWRpc2FibGVkIC5lbC1yYWRpb19faW5uZXIrLmVsLXJhZGlvX19sYWJlbHtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXJhZGlvX19pbnB1dC5pcy1kaXNhYmxlZC5pcy1jaGVja2VkIC5lbC1yYWRpb19faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojZDFkYmU1O2JvcmRlci1jb2xvcjojZDFkYmU1fS5lbC1yYWRpb19faW5uZXIsLmVsLXJhZGlvX19pbnB1dC5pcy1kaXNhYmxlZC5pcy1jaGVja2VkIC5lbC1yYWRpb19faW5uZXI6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2ZmZn0uZWwtcmFkaW9fX2lucHV0LmlzLWRpc2FibGVkKy5lbC1yYWRpb19fbGFiZWx7Y29sb3I6I2JiYjtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXJhZGlvX19pbm5lcntib3JkZXI6MXB4IHNvbGlkICNiZmNiZDk7d2lkdGg6MThweDtoZWlnaHQ6MThweDtib3JkZXItcmFkaXVzOjUwJTtjdXJzb3I6cG9pbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXJhZGlvX19pbm5lcjpob3Zlcntib3JkZXItY29sb3I6IzIwYTBmZn0uZWwtcmFkaW9fX2lubmVyOjphZnRlcnt3aWR0aDo2cHg7aGVpZ2h0OjZweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29udGVudDpcXFwiXFxcIjtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTt0b3A6NTAlOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDApO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMgY3ViaWMtYmV6aWVyKC43MSwtLjQ2LC44OCwuNil9LmVsLXN3aXRjaF9fY29yZSwuZWwtc3dpdGNoX19sYWJlbHt3aWR0aDo0NnB4O2hlaWdodDoyMnB4O2N1cnNvcjpwb2ludGVyfS5lbC1yYWRpb19fb3JpZ2luYWx7b3BhY2l0eTowO291dGxpbmU6MDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Oi0xO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO21hcmdpbjowfS5lbC1yYWRpby1idXR0b24sLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXJhZGlvX19sYWJlbHtmb250LXNpemU6MTRweDtwYWRkaW5nLWxlZnQ6NXB4fS5lbC1yYWRpby1ncm91cHtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MH0uZWwtcmFkaW8tZ3JvdXAgLmVsLXJhZGlve2ZvbnQtc2l6ZToxNHB4fS5lbC1yYWRpby1idXR0b246Zmlyc3QtY2hpbGQgLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNiZmNiZDk7Ym9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fS5lbC1yYWRpby1idXR0b246bGFzdC1jaGlsZCAuZWwtcmFkaW8tYnV0dG9uX19pbm5lcntib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5lbC1yYWRpby1idXR0b246Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZCAuZWwtcmFkaW8tYnV0dG9uX19pbm5lcntib3JkZXItcmFkaXVzOjRweH0uZWwtcmFkaW8tYnV0dG9uX19pbm5lcnt3aGl0ZS1zcGFjZTpub3dyYXA7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2JmY2JkOTtib3JkZXItbGVmdDowO2NvbG9yOiMxZjJkM2Q7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7dGV4dC1hbGlnbjpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6MDttYXJnaW46MDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO3BhZGRpbmc6MTBweCAxNXB4O2ZvbnQtc2l6ZToxNHB4O2JvcmRlci1yYWRpdXM6MH0uZWwtcmFkaW8tYnV0dG9uX19pbm5lcjpob3Zlcntjb2xvcjojMjBhMGZmfS5lbC1yYWRpby1idXR0b25fX2lubmVyIFtjbGFzcyo9ZWwtaWNvbi1de2xpbmUtaGVpZ2h0Oi45fS5lbC1yYWRpby1idXR0b25fX2lubmVyIFtjbGFzcyo9ZWwtaWNvbi1dK3NwYW57bWFyZ2luLWxlZnQ6NXB4fS5lbC1yYWRpby1idXR0b25fX29yaWctcmFkaW97b3BhY2l0eTowO291dGxpbmU6MDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Oi0xO2xlZnQ6LTk5OXB4fS5lbC1yYWRpby1idXR0b25fX29yaWctcmFkaW86Y2hlY2tlZCsuZWwtcmFkaW8tYnV0dG9uX19pbm5lcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIwYTBmZjtib3JkZXItY29sb3I6IzIwYTBmZjtib3gtc2hhZG93Oi0xcHggMCAwIDAgIzIwYTBmZn0uZWwtcmFkaW8tYnV0dG9uX19vcmlnLXJhZGlvOmRpc2FibGVkKy5lbC1yYWRpby1idXR0b25fX2lubmVye2NvbG9yOiNiZmNiZDk7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtaW1hZ2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWYxZjY7Ym9yZGVyLWNvbG9yOiNkMWRiZTU7Ym94LXNoYWRvdzpub25lfS5lbC1yYWRpby1idXR0b24tLWxhcmdlIC5lbC1yYWRpby1idXR0b25fX2lubmVye3BhZGRpbmc6MTFweCAxOXB4O2ZvbnQtc2l6ZToxNnB4O2JvcmRlci1yYWRpdXM6MH0uZWwtcmFkaW8tYnV0dG9uLS1zbWFsbCAuZWwtcmFkaW8tYnV0dG9uX19pbm5lcntwYWRkaW5nOjdweCA5cHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czowfS5lbC1yYWRpby1idXR0b24tLW1pbmkgLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7cGFkZGluZzo0cHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czowfS5lbC1zd2l0Y2h7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjJweDtoZWlnaHQ6MjJweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXN3aXRjaF9fbGFiZWwsLmVsLXN3aXRjaF9fbGFiZWwgKntwb3NpdGlvbjphYnNvbHV0ZTtmb250LXNpemU6MTRweDtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtc3dpdGNoIC5sYWJlbC1mYWRlLWVudGVyLC5lbC1zd2l0Y2ggLmxhYmVsLWZhZGUtbGVhdmUtYWN0aXZle29wYWNpdHk6MH0uZWwtc3dpdGNoLmlzLWRpc2FibGVkIC5lbC1zd2l0Y2hfX2NvcmV7Ym9yZGVyLWNvbG9yOiNlNGU4ZjEhaW1wb3J0YW50O2JhY2tncm91bmQ6I2U0ZThmMSFpbXBvcnRhbnR9LmVsLXN3aXRjaC5pcy1kaXNhYmxlZCAuZWwtc3dpdGNoX19jb3JlIHNwYW57YmFja2dyb3VuZC1jb2xvcjojZmJmZGZmIWltcG9ydGFudH0uZWwtc3dpdGNoLmlzLWRpc2FibGVkIC5lbC1zd2l0Y2hfX2NvcmV+LmVsLXN3aXRjaF9fbGFiZWwgKntjb2xvcjojZmJmZGZmIWltcG9ydGFudH0uZWwtc3dpdGNoLmlzLWNoZWNrZWQgLmVsLXN3aXRjaF9fY29yZXtib3JkZXItY29sb3I6IzIwYTBmZjtiYWNrZ3JvdW5kLWNvbG9yOiMyMGEwZmZ9LmVsLXN3aXRjaC5pcy1kaXNhYmxlZCAuZWwtc3dpdGNoX19jb3JlLC5lbC1zd2l0Y2guaXMtZGlzYWJsZWQgLmVsLXN3aXRjaF9fbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1zd2l0Y2hfX2xhYmVse3RyYW5zaXRpb246LjJzO2xlZnQ6MDt0b3A6MH0uZWwtc3dpdGNoX19sYWJlbCAqe2xpbmUtaGVpZ2h0OjE7dG9wOjRweDtjb2xvcjojZmZmfS5lbC1zd2l0Y2hfX2xhYmVsLS1sZWZ0IGl7bGVmdDo2cHh9LmVsLXN3aXRjaF9fbGFiZWwtLXJpZ2h0IGl7cmlnaHQ6NnB4fS5lbC1zd2l0Y2hfX2lucHV0e2Rpc3BsYXk6bm9uZX0uZWwtc3dpdGNoX19jb3Jle21hcmdpbjowO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlcjoxcHggc29saWQgI2JmY2JkOTtvdXRsaW5lOjA7Ym9yZGVyLXJhZGl1czoxMnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kOiNiZmNiZDk7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjNzLGJhY2tncm91bmQtY29sb3IgLjNzfS5lbC1zd2l0Y2hfX2NvcmUgLmVsLXN3aXRjaF9fYnV0dG9ue3RvcDowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjEwMCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5lbC1zd2l0Y2gtLXdpZGUgLmVsLXN3aXRjaF9fbGFiZWwuZWwtc3dpdGNoX19sYWJlbC0tbGVmdCBzcGFue2xlZnQ6MTBweH0uZWwtc3dpdGNoLS13aWRlIC5lbC1zd2l0Y2hfX2xhYmVsLmVsLXN3aXRjaF9fbGFiZWwtLXJpZ2h0IHNwYW57cmlnaHQ6MTBweH0uZWwtc2VsZWN0LWRyb3Bkb3due3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMTtib3JkZXI6MXB4IHNvbGlkICNkMWRiZTU7Ym9yZGVyLXJhZGl1czoycHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JveC1zaGFkb3c6MCAycHggNHB4IHJnYmEoMCwwLDAsLjEyKSwwIDAgNnB4IHJnYmEoMCwwLDAsLjA0KTtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjVweCAwfS5lbC1zZWxlY3QtZHJvcGRvd24gLmVsLXNjcm9sbGJhci5pcy1lbXB0eSAuZWwtc2VsZWN0LWRyb3Bkb3duX19saXN0e3BhZGRpbmc6MH0uZWwtc2VsZWN0LWRyb3Bkb3duLmlzLW11bHRpcGxlIC5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW0uc2VsZWN0ZWR7Y29sb3I6IzIwYTBmZjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmVsLXNlbGVjdC1kcm9wZG93bi5pcy1tdWx0aXBsZSAuZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtLnNlbGVjdGVkLmhvdmVyLC5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW0uaG92ZXIsLmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNGU4ZjF9LmVsLXNlbGVjdC1kcm9wZG93bi5pcy1tdWx0aXBsZSAuZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtLnNlbGVjdGVkOjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMHB4O2ZvbnQtZmFtaWx5OmVsZW1lbnQtaWNvbnM7Y29udGVudDpcXFwiXFxcXEU2MDhcXFwiO2ZvbnQtc2l6ZToxMXB4Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlfS5lbC1zZWxlY3QtZHJvcGRvd25fX2VtcHR5e3BhZGRpbmc6MTBweCAwO21hcmdpbjowO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM5OTk7Zm9udC1zaXplOjE0cHh9LmVsLXNlbGVjdC1kcm9wZG93bl9fd3JhcHttYXgtaGVpZ2h0OjI3NHB4fS5lbC1zZWxlY3QtZHJvcGRvd25fX2xpc3R7bGlzdC1zdHlsZTpub25lO3BhZGRpbmc6NnB4IDA7bWFyZ2luOjA7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW17Zm9udC1zaXplOjE0cHg7cGFkZGluZzo4cHggMTBweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Y29sb3I6IzQ4NTc2YTtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDoxLjU7Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjpwb2ludGVyfS5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW0uc2VsZWN0ZWR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMyMGEwZmZ9LmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbS5zZWxlY3RlZC5ob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMxYzhkZTB9LmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbSBzcGFue2xpbmUtaGVpZ2h0OjEuNSFpbXBvcnRhbnR9LmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbS5pcy1kaXNhYmxlZHtjb2xvcjojYmZjYmQ5O2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtLmlzLWRpc2FibGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZn0uZWwtc2VsZWN0LWdyb3Vwe21hcmdpbjowO3BhZGRpbmc6MH0uZWwtc2VsZWN0LWdyb3VwIC5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW17cGFkZGluZy1sZWZ0OjIwcHh9LmVsLXNlbGVjdC1ncm91cF9fd3JhcHtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowfS5lbC1zZWxlY3QtZ3JvdXBfX3RpdGxle3BhZGRpbmctbGVmdDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5OTk7aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweH0uZWwtc2VsZWN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1zZWxlY3Q6aG92ZXIgLmVsLWlucHV0X19pbm5lcntib3JkZXItY29sb3I6IzgzOTFhNX0uZWwtc2VsZWN0IC5lbC1pbnB1dF9faW5uZXJ7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZy1yaWdodDozNXB4fS5lbC1zZWxlY3QgLmVsLWlucHV0X19pbm5lcjpmb2N1c3tib3JkZXItY29sb3I6IzIwYTBmZn0uZWwtc2VsZWN0IC5lbC1pbnB1dCAuZWwtaW5wdXRfX2ljb257Y29sb3I6I2JmY2JkOTtmb250LXNpemU6MTJweDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3M7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSgxODBkZWcpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZVooMTgwZGVnKTtsaW5lLWhlaWdodDoxNnB4O3RvcDo1MCU7Y3Vyc29yOnBvaW50ZXJ9LmVsLXNlbGVjdCAuZWwtaW5wdXQgLmVsLWlucHV0X19pY29uLmlzLXNob3ctY2xvc2V7dHJhbnNpdGlvbjowczt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2ZvbnQtc2l6ZToxNHB4O3JpZ2h0OjhweDt0ZXh0LWFsaWduOmNlbnRlcjstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgcm90YXRlKDE4MGRlZyk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgcm90YXRlWigxODBkZWcpO2JvcmRlci1yYWRpdXM6MTAwJTtjb2xvcjojYmZjYmQ5fS5lbC1zZWxlY3QgLmVsLWlucHV0IC5lbC1pbnB1dF9faWNvbi5pcy1zaG93LWNsb3NlOmhvdmVye2NvbG9yOiM5N2E4YmV9LmVsLXNlbGVjdCAuZWwtaW5wdXQgLmVsLWlucHV0X19pY29uLmlzLXJldmVyc2V7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5lbC1zZWxlY3QgLmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1zZWxlY3QgLmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNkMWRiZTV9LmVsLXNlbGVjdD4uZWwtaW5wdXR7ZGlzcGxheTpibG9ja30uZWwtc2VsZWN0IC5lbC10YWdfX2Nsb3Nle21hcmdpbi10b3A6LTJweH0uZWwtc2VsZWN0IC5lbC10YWd7aGVpZ2h0OjI0cHg7bGluZS1oZWlnaHQ6MjRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjNweCAwIDNweCA2cHh9LmVsLXNlbGVjdF9faW5wdXR7Ym9yZGVyOm5vbmU7b3V0bGluZTowO3BhZGRpbmc6MDttYXJnaW4tbGVmdDoxMHB4O2NvbG9yOiM2NjY7Zm9udC1zaXplOjE0cHg7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2hlaWdodDoyOHB4O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmVsLXNlbGVjdF9faW5wdXQuaXMtbWluaXtoZWlnaHQ6MTRweH0uZWwtc2VsZWN0X19jbG9zZXtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6OHB4O3otaW5kZXg6MTAwMDtyaWdodDoyNXB4O2NvbG9yOiNiZmNiZDk7bGluZS1oZWlnaHQ6MThweDtmb250LXNpemU6MTJweH0uZWwtc2VsZWN0X19jbG9zZTpob3Zlcntjb2xvcjojOTdhOGJlfS5lbC1zZWxlY3RfX3RhZ3N7cG9zaXRpb246YWJzb2x1dGU7bGluZS1oZWlnaHQ6bm9ybWFsO3doaXRlLXNwYWNlOm5vcm1hbDt6LWluZGV4OjE7dG9wOjUwJTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LmVsLXRhYmxlLC5lbC10YWJsZSB0ZCwuZWwtdGFibGUgdGh7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1zZWxlY3RfX3RhZ3tkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MjRweDtsaW5lLWhlaWdodDoyNHB4O2ZvbnQtc2l6ZToxNHB4O2JvcmRlci1yYWRpdXM6NHB4O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjBhMGZmfS5lbC1zZWxlY3RfX3RhZyAuZWwtaWNvbi1jbG9zZXtmb250LXNpemU6MTJweH0uZWwtdGFibGV7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RmZTZlYztmb250LXNpemU6MTRweDtjb2xvcjojMWYyZDNkfS5lbC10YWJsZSAuZWwtdG9vbHRpcC5jZWxse3doaXRlLXNwYWNlOm5vd3JhcDttaW4td2lkdGg6NTBweH0uZWwtdGFibGUgdGQsLmVsLXRhYmxlIHRoe2hlaWdodDo0MHB4O21pbi13aWR0aDowO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC10YWJsZTo6YWZ0ZXIsLmVsLXRhYmxlOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNkZmU2ZWM7ei1pbmRleDoxfS5lbC10YWJsZSB0ZC5pcy1yaWdodCwuZWwtdGFibGUgdGguaXMtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0uZWwtdGFibGUgdGQuaXMtbGVmdCwuZWwtdGFibGUgdGguaXMtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LmVsLXRhYmxlIHRkLmlzLWNlbnRlciwuZWwtdGFibGUgdGguaXMtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5lbC10YWJsZSB0ZCwuZWwtdGFibGUgdGguaXMtbGVhZntib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGZlNmVjfS5lbC10YWJsZSB0ZC5ndXR0ZXIsLmVsLXRhYmxlIHRoLmd1dHRlcnt3aWR0aDoxNXB4O2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtwYWRkaW5nOjB9LmVsLXRhYmxlIC5jZWxsLC5lbC10YWJsZSB0aD5kaXZ7cGFkZGluZy1sZWZ0OjE4cHg7cGFkZGluZy1yaWdodDoxOHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5lbC10YWJsZTo6YmVmb3Jle2xlZnQ6MDtib3R0b206MDt3aWR0aDoxMDAlO2hlaWdodDoxcHh9LmVsLXRhYmxlOjphZnRlcnt0b3A6MDtyaWdodDowO3dpZHRoOjFweDtoZWlnaHQ6MTAwJX0uZWwtdGFibGUgLmNhcmV0LXdyYXBwZXIsLmVsLXRhYmxlIHRoPi5jZWxse3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtdGFibGUgdGh7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiNlZWYxZjY7dGV4dC1hbGlnbjpsZWZ0fS5lbC10YWJsZSB0aC5pcy1zb3J0YWJsZXtjdXJzb3I6cG9pbnRlcn0uZWwtdGFibGUgdGg+ZGl2e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjQwcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtdGFibGUgdGQ+ZGl2e2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtdGFibGUgdGgucmVxdWlyZWQ+ZGl2OjpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDpcXFwiXFxcIjt3aWR0aDo4cHg7aGVpZ2h0OjhweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOiNmZjRkNTE7bWFyZ2luLXJpZ2h0OjVweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXRhYmxlIHRoPi5jZWxse3dvcmQtd3JhcDpub3JtYWw7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztsaW5lLWhlaWdodDozMHB4O3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC10YWJsZSB0aD4uY2VsbC5oaWdobGlnaHR7Y29sb3I6IzIwYTBmZn0uZWwtdGFibGUgLmNhcmV0LXdyYXBwZXJ7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWxlZnQ6NXB4O21hcmdpbi10b3A6LTJweDt3aWR0aDoxNnB4O2hlaWdodDozMHB4O292ZXJmbG93OnZpc2libGU7b3ZlcmZsb3c6aW5pdGlhbH0uZWwtdGFibGUgLmNlbGwsLmVsLXRhYmxlX19mb290ZXItd3JhcHBlciwuZWwtdGFibGVfX2hlYWRlci13cmFwcGVye292ZXJmbG93OmhpZGRlbn0uZWwtdGFibGUgLnNvcnQtY2FyZXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXI6MDtjb250ZW50OlxcXCJcXFwiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6M3B4O3otaW5kZXg6Mn0uZWwtdGFibGUgLnNvcnQtY2FyZXQuYXNjZW5kaW5nLC5lbC10YWJsZSAuc29ydC1jYXJldC5kZXNjZW5kaW5ne2JvcmRlci1yaWdodDo1cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkIHRyYW5zcGFyZW50fS5lbC10YWJsZSAuc29ydC1jYXJldC5hc2NlbmRpbmd7dG9wOjlweDtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLWJvdHRvbTo1cHggc29saWQgIzk3YThiZX0uZWwtdGFibGUgLnNvcnQtY2FyZXQuZGVzY2VuZGluZ3tib3R0b206OXB4O2JvcmRlci10b3A6NXB4IHNvbGlkICM5N2E4YmU7Ym9yZGVyLWJvdHRvbTpub25lfS5lbC10YWJsZSAuYXNjZW5kaW5nIC5zb3J0LWNhcmV0LmFzY2VuZGluZ3tib3JkZXItYm90dG9tLWNvbG9yOiM0ODU3NmF9LmVsLXRhYmxlIC5kZXNjZW5kaW5nIC5zb3J0LWNhcmV0LmRlc2NlbmRpbmd7Ym9yZGVyLXRvcC1jb2xvcjojNDg1NzZhfS5lbC10YWJsZSB0ZC5ndXR0ZXJ7d2lkdGg6MH0uZWwtdGFibGUgLmNlbGx7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtYnJlYWs6YnJlYWstYWxsO2xpbmUtaGVpZ2h0OjI0cHh9LmVsLWJhZGdlX19jb250ZW50LC5lbC1tZXNzYWdlX19ncm91cCBwLC5lbC1wcm9ncmVzcy1iYXJfX2lubmVyLC5lbC1zdGVwcy5pcy1ob3Jpem9udGFsLC5lbC10YWJzX19uYXYsLmVsLXRhZywuZWwtdGltZS1zcGlubmVyLC5lbC10cmVlLW5vZGUsLmVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWV7d2hpdGUtc3BhY2U6bm93cmFwfS5lbC10YWJsZSB0ciBpbnB1dFt0eXBlPWNoZWNrYm94XXttYXJnaW46MH0uZWwtdGFibGUgdHJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5lbC10YWJsZSAuaGlkZGVuLWNvbHVtbnN7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMX0uZWwtdGFibGVfX2VtcHR5LWJsb2Nre3Bvc2l0aW9uOnJlbGF0aXZlO21pbi1oZWlnaHQ6NjBweDt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5lbC10YWJsZV9fZW1wdHktdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTt0b3A6NTAlOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO2NvbG9yOiM1ZTczODJ9LmVsLXRhYmxlX19leHBhbmQtY29sdW1uIC5jZWxse3BhZGRpbmc6MDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtdGFibGVfX2V4cGFuZC1pY29ue3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2NvbG9yOiM2NjY7Zm9udC1zaXplOjEycHg7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O2hlaWdodDo0MHB4fS5lbC10YWJsZV9fZXhwYW5kLWljb24+LmVsLWljb257cG9zaXRpb246YWJzb2x1dGU7bGVmdDo1MCU7dG9wOjUwJTttYXJnaW4tbGVmdDotNXB4O21hcmdpbi10b3A6LTVweH0uZWwtdGFibGVfX2V4cGFuZC1pY29uLS1leHBhbmRlZHstbXMtdHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9LmVsLXRhYmxlX19leHBhbmRlZC1jZWxse3BhZGRpbmc6MjBweCA1MHB4O2JhY2tncm91bmQtY29sb3I6I2ZiZmRmZjtib3gtc2hhZG93Omluc2V0IDAgMnB4IDAgI2Y0ZjRmNH0uZWwtdGFibGVfX2V4cGFuZGVkLWNlbGw6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmJmZGZmIWltcG9ydGFudH0uZWwtdGFibGUtLWZpdHtib3JkZXItcmlnaHQ6MDtib3JkZXItYm90dG9tOjB9LmVsLXRhYmxlLS1ib3JkZXIgdGgsLmVsLXRhYmxlX19maXhlZC1yaWdodC1wYXRjaHtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGZlNmVjfS5lbC10YWJsZS0tZml0IHRkLmd1dHRlciwuZWwtdGFibGUtLWZpdCB0aC5ndXR0ZXJ7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweH0uZWwtdGFibGUtLWJvcmRlciB0ZCwuZWwtdGFibGUtLWJvcmRlciB0aHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNkZmU2ZWN9LmVsLXRhYmxlX19maXhlZCwuZWwtdGFibGVfX2ZpeGVkLXJpZ2h0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtib3gtc2hhZG93OjFweCAwIDhweCAjZDNkNGQ2O292ZXJmbG93LXg6aGlkZGVufS5lbC10YWJsZV9fZml4ZWQtcmlnaHQ6OmJlZm9yZSwuZWwtdGFibGVfX2ZpeGVkOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MXB4O2JhY2tncm91bmQtY29sb3I6I2RmZTZlYzt6LWluZGV4OjR9LmVsLXRhYmxlX19maXhlZC1yaWdodC1wYXRjaHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTFweDtyaWdodDowO2JhY2tncm91bmQtY29sb3I6I2VlZjFmNn0uZWwtdGFibGVfX2ZpeGVkLXJpZ2h0e3RvcDowO2xlZnQ6YXV0bztyaWdodDowO2JveC1zaGFkb3c6LTFweCAwIDhweCAjZDNkNGQ2fS5lbC10YWJsZV9fZml4ZWQtcmlnaHQgLmVsLXRhYmxlX19maXhlZC1ib2R5LXdyYXBwZXIsLmVsLXRhYmxlX19maXhlZC1yaWdodCAuZWwtdGFibGVfX2ZpeGVkLWZvb3Rlci13cmFwcGVyLC5lbC10YWJsZV9fZml4ZWQtcmlnaHQgLmVsLXRhYmxlX19maXhlZC1oZWFkZXItd3JhcHBlcntsZWZ0OmF1dG87cmlnaHQ6MH0uZWwtdGFibGVfX2ZpeGVkLWhlYWRlci13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt6LWluZGV4OjN9LmVsLXRhYmxlX19maXhlZC1oZWFkZXItd3JhcHBlciB0aGVhZCBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZWVmMWY2O2NvbG9yOiMxZjJkM2R9LmVsLXRhYmxlX19maXhlZC1mb290ZXItd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjA7ei1pbmRleDozfS5lbC10YWJsZV9fZml4ZWQtZm9vdGVyLXdyYXBwZXIgdGJvZHkgdGR7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RmZTZlYztiYWNrZ3JvdW5kLWNvbG9yOiNmYmZkZmY7Y29sb3I6IzFmMmQzZH0uZWwtdGFibGVfX2ZpeGVkLWJvZHktd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjM3cHg7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6M30uZWwtdGFibGVfX2JvZHktd3JhcHBlciwuZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyLC5lbC10YWJsZV9faGVhZGVyLXdyYXBwZXJ7d2lkdGg6MTAwJX0uZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVye21hcmdpbi10b3A6LTFweH0uZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyIHRke2JvcmRlci10b3A6MXB4IHNvbGlkICNkZmU2ZWN9LmVsLXRhYmxlX19ib2R5LC5lbC10YWJsZV9fZm9vdGVyLC5lbC10YWJsZV9faGVhZGVye3RhYmxlLWxheW91dDpmaXhlZH0uZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyIHRoZWFkIGRpdiwuZWwtdGFibGVfX2hlYWRlci13cmFwcGVyIHRoZWFkIGRpdntiYWNrZ3JvdW5kLWNvbG9yOiNlZWYxZjY7Y29sb3I6IzFmMmQzZH0uZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyIHRib2R5IHRkLC5lbC10YWJsZV9faGVhZGVyLXdyYXBwZXIgdGJvZHkgdGR7YmFja2dyb3VuZC1jb2xvcjojZmJmZGZmO2NvbG9yOiMxZjJkM2R9LmVsLXRhYmxlX19ib2R5LXdyYXBwZXJ7b3ZlcmZsb3c6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtdGFibGUtLXN0cmlwZWQgLmVsLXRhYmxlX19ib2R5IHRyLmVsLXRhYmxlX19yb3ctLXN0cmlwZWQgdGR7YmFja2dyb3VuZDojRkFGQUZBO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0uZWwtdGFibGUtLXN0cmlwZWQgLmVsLXRhYmxlX19ib2R5IHRyLmVsLXRhYmxlX19yb3ctLXN0cmlwZWQuY3VycmVudC1yb3cgdGR7YmFja2dyb3VuZDojZWRmN2ZmfS5lbC10YWJsZV9fYm9keSB0ci5ob3Zlci1yb3cuY3VycmVudC1yb3c+dGQsLmVsLXRhYmxlX19ib2R5IHRyLmhvdmVyLXJvdy5lbC10YWJsZV9fcm93LS1zdHJpcGVkLmN1cnJlbnQtcm93PnRkLC5lbC10YWJsZV9fYm9keSB0ci5ob3Zlci1yb3cuZWwtdGFibGVfX3Jvdy0tc3RyaXBlZD50ZCwuZWwtdGFibGVfX2JvZHkgdHIuaG92ZXItcm93PnRke2JhY2tncm91bmQtY29sb3I6I2VlZjFmNn0uZWwtdGFibGVfX2JvZHkgdHIuY3VycmVudC1yb3c+dGR7YmFja2dyb3VuZDojZWRmN2ZmfS5lbC10YWJsZV9fY29sdW1uLXJlc2l6ZS1wcm94eXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjIwMHB4O3RvcDowO2JvdHRvbTowO3dpZHRoOjA7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNkZmU2ZWM7ei1pbmRleDoxMH0uZWwtdGFibGVfX2NvbHVtbi1maWx0ZXItdHJpZ2dlcntkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDozNHB4O21hcmdpbi1sZWZ0OjVweDtjdXJzb3I6cG9pbnRlcn0uZWwtdGFibGVfX2NvbHVtbi1maWx0ZXItdHJpZ2dlciBpe2NvbG9yOiM5N2E4YmV9LmVsLXRhYmxlLS1lbmFibGUtcm93LXRyYW5zaXRpb24gLmVsLXRhYmxlX19ib2R5IHRke3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMjVzIGVhc2V9LmVsLWZhZGUtaW4tbGluZWFyLWVudGVyLWFjdGl2ZSwuZWwtZmFkZS1pbi1saW5lYXItbGVhdmUtYWN0aXZlLC5mYWRlLWluLWxpbmVhci1lbnRlci1hY3RpdmUsLmZhZGUtaW4tbGluZWFyLWxlYXZlLWFjdGl2ZXt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGxpbmVhcn0uZWwtdGFibGUtLWVuYWJsZS1yb3ctaG92ZXIgLmVsLXRhYmxlX19ib2R5IHRyOmhvdmVyPnRke2JhY2tncm91bmQtY29sb3I6I2VlZjFmNjtiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3h9LmVsLXRhYmxlLS1mbHVpZC1oZWlnaHQgLmVsLXRhYmxlX19maXhlZCwuZWwtdGFibGUtLWZsdWlkLWhlaWdodCAuZWwtdGFibGVfX2ZpeGVkLXJpZ2h0e2JvdHRvbTowO292ZXJmbG93OmhpZGRlbn0uZWwtdGFibGUtY29sdW1uLS1zZWxlY3Rpb24gLmNlbGx7cGFkZGluZy1sZWZ0OjE0cHg7cGFkZGluZy1yaWdodDoxNHB4fS5lbC10YWJsZS1maWx0ZXJ7Ym9yZGVyOjFweCBzb2xpZCAjZDFkYmU1O2JvcmRlci1yYWRpdXM6MnB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2hhZG93OjAgMnB4IDRweCByZ2JhKDAsMCwwLC4xMiksMCAwIDZweCByZ2JhKDAsMCwwLC4xMik7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjoycHggMH0uZWwtdGFibGUtZmlsdGVyX19saXN0e3BhZGRpbmc6NXB4IDA7bWFyZ2luOjA7bGlzdC1zdHlsZTpub25lO21pbi13aWR0aDoxMDBweH0uZWwtdGFibGUtZmlsdGVyX19saXN0LWl0ZW17bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTBweDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTRweH0uZWwtdGFibGUtZmlsdGVyX19saXN0LWl0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTRlOGYxO2NvbG9yOiM0ODU3NmF9LmVsLXRhYmxlLWZpbHRlcl9fbGlzdC1pdGVtLmlzLWFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMyMGEwZmY7Y29sb3I6I2ZmZn0uZWwtdGFibGUtZmlsdGVyX19jb250ZW50e21pbi13aWR0aDoxMDBweH0uZWwtdGFibGUtZmlsdGVyX19ib3R0b217Ym9yZGVyLXRvcDoxcHggc29saWQgI2QxZGJlNTtwYWRkaW5nOjhweH0uZWwtdGFibGUtZmlsdGVyX19ib3R0b20gYnV0dG9ue2JhY2tncm91bmQ6MCAwO2JvcmRlcjpub25lO2NvbG9yOiM4MzkxYTU7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjE0cHg7cGFkZGluZzowIDNweH0uZWwtdGFibGUtZmlsdGVyX19ib3R0b20gYnV0dG9uOmhvdmVye2NvbG9yOiMyMGEwZmZ9LmVsLXRhYmxlLWZpbHRlcl9fYm90dG9tIGJ1dHRvbjpmb2N1c3tvdXRsaW5lOjB9LmVsLXRhYmxlLWZpbHRlcl9fYm90dG9tIGJ1dHRvbi5pcy1kaXNhYmxlZHtjb2xvcjojYmZjYmQ5O2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtdGFibGUtZmlsdGVyX19jaGVja2JveC1ncm91cHtwYWRkaW5nOjEwcHh9LmVsLXRhYmxlLWZpbHRlcl9fY2hlY2tib3gtZ3JvdXAgbGFiZWwuZWwtY2hlY2tib3h7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjhweDttYXJnaW4tbGVmdDo1cHh9LmVsLXRhYmxlLWZpbHRlcl9fY2hlY2tib3gtZ3JvdXAgLmVsLWNoZWNrYm94Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5lbC1kYXRlLXRhYmxle2ZvbnQtc2l6ZToxMnB4O21pbi13aWR0aDoyMjRweDt1c2VyLXNlbGVjdDpub25lfS5lbC1kYXRlLXRhYmxlIHRke3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7Ym94LXNpemluZzpib3JkZXItYm94O3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyfS5lbC1kYXRlLXRhYmxlIHRkLm5leHQtbW9udGgsLmVsLWRhdGUtdGFibGUgdGQucHJldi1tb250aHtjb2xvcjojZGRkfS5lbC1kYXRlLXRhYmxlIHRkLnRvZGF5e2NvbG9yOiMyMGEwZmY7cG9zaXRpb246cmVsYXRpdmV9LmVsLWRhdGUtdGFibGUgdGQudG9kYXk6YmVmb3Jle2NvbnRlbnQ6XFxcIiBcXFwiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItdG9wOi41ZW0gc29saWQgIzIwYTBmZjtib3JkZXItbGVmdDouNWVtIHNvbGlkIHRyYW5zcGFyZW50fS5lbC1tb250aC10YWJsZSB0ZCAuY2VsbCwuZWwteWVhci10YWJsZSB0ZCAuY2VsbHt3aWR0aDo0OHB4O2hlaWdodDozMnB4O2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MzJweH0uZWwtZGF0ZS10YWJsZSB0ZC5hdmFpbGFibGU6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTRlOGYxfS5lbC1kYXRlLXRhYmxlIHRkLmluLXJhbmdle2JhY2tncm91bmQtY29sb3I6I2QyZWNmZn0uZWwtZGF0ZS10YWJsZSB0ZC5pbi1yYW5nZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNhZmRkZmZ9LmVsLWRhdGUtdGFibGUgdGQuY3VycmVudDpub3QoLmRpc2FibGVkKSwuZWwtZGF0ZS10YWJsZSB0ZC5lbmQtZGF0ZSwuZWwtZGF0ZS10YWJsZSB0ZC5zdGFydC1kYXRle2JhY2tncm91bmQtY29sb3I6IzIwYTBmZiFpbXBvcnRhbnQ7Y29sb3I6I2ZmZn0uZWwtZGF0ZS10YWJsZSB0ZC5kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjQ7b3BhY2l0eToxO2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojY2NjfS5lbC1mYWRlLWluLWVudGVyLC5lbC1mYWRlLWluLWxlYXZlLWFjdGl2ZSwuZWwtZmFkZS1pbi1saW5lYXItZW50ZXIsLmVsLWZhZGUtaW4tbGluZWFyLWxlYXZlLC5lbC1mYWRlLWluLWxpbmVhci1sZWF2ZS1hY3RpdmUsLmZhZGUtaW4tbGluZWFyLWVudGVyLC5mYWRlLWluLWxpbmVhci1sZWF2ZSwuZmFkZS1pbi1saW5lYXItbGVhdmUtYWN0aXZle29wYWNpdHk6MH0uZWwtZGF0ZS10YWJsZSB0ZC53ZWVre2ZvbnQtc2l6ZTo4MCU7Y29sb3I6IzgzOTFhNX0uZWwtbW9udGgtdGFibGUsLmVsLXllYXItdGFibGV7Zm9udC1zaXplOjEycHg7bWFyZ2luOi0xcHg7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfS5lbC1kYXRlLXRhYmxlIHRoe3BhZGRpbmc6NXB4O2NvbG9yOiM4MzkxYTU7Zm9udC13ZWlnaHQ6NDAwfS5lbC1kYXRlLXRhYmxlLmlzLXdlZWstbW9kZSAuZWwtZGF0ZS10YWJsZV9fcm93OmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U0ZThmMX0uZWwtZGF0ZS10YWJsZS5pcy13ZWVrLW1vZGUgLmVsLWRhdGUtdGFibGVfX3Jvdy5jdXJyZW50e2JhY2tncm91bmQtY29sb3I6I2QyZWNmZn0uZWwtbW9udGgtdGFibGUgdGR7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzoyMHB4IDNweDtjdXJzb3I6cG9pbnRlcn0uZWwtbW9udGgtdGFibGUgdGQgLmNlbGx7Y29sb3I6IzQ4NTc2YX0uZWwtbW9udGgtdGFibGUgdGQgLmNlbGw6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTRlOGYxfS5lbC1tb250aC10YWJsZSB0ZC5kaXNhYmxlZCAuY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjQ7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOiNjY2N9LmVsLW1vbnRoLXRhYmxlIHRkLmN1cnJlbnQ6bm90KC5kaXNhYmxlZCkgLmNlbGx7YmFja2dyb3VuZC1jb2xvcjojMjBhMGZmIWltcG9ydGFudDtjb2xvcjojZmZmfS5lbC15ZWFyLXRhYmxlIC5lbC1pY29ue2NvbG9yOiM5N2E4YmV9LmVsLXllYXItdGFibGUgdGR7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzoyMHB4IDNweDtjdXJzb3I6cG9pbnRlcn0uZWwteWVhci10YWJsZSB0ZCAuY2VsbHtjb2xvcjojNDg1NzZhfS5lbC15ZWFyLXRhYmxlIHRkIC5jZWxsOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U0ZThmMX0uZWwteWVhci10YWJsZSB0ZC5kaXNhYmxlZCAuY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjQ7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOiNjY2N9LmVsLXllYXItdGFibGUgdGQuY3VycmVudDpub3QoLmRpc2FibGVkKSAuY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOiMyMGEwZmYhaW1wb3J0YW50O2NvbG9yOiNmZmZ9LmVsLWRhdGUtcmFuZ2UtcGlja2Vye21pbi13aWR0aDo1MjBweH0uZWwtZGF0ZS1yYW5nZS1waWNrZXIgdGFibGV7dGFibGUtbGF5b3V0OmZpeGVkO3dpZHRoOjEwMCV9LmVsLWRhdGUtcmFuZ2UtcGlja2VyIC5lbC1waWNrZXItcGFuZWxfX2JvZHl7bWluLXdpZHRoOjUxM3B4fS5lbC1kYXRlLXJhbmdlLXBpY2tlciAuZWwtcGlja2VyLXBhbmVsX19jb250ZW50e21hcmdpbjowfS5lbC1kYXRlLXJhbmdlLXBpY2tlci5oYXMtc2lkZWJhci5oYXMtdGltZXttaW4td2lkdGg6NzY2cHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyLmhhcy1zaWRlYmFye21pbi13aWR0aDo2MjBweH0uZWwtZGF0ZS1yYW5nZS1waWNrZXIuaGFzLXRpbWV7bWluLXdpZHRoOjY2MHB4fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO2hlaWdodDoyOHB4fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVyIGJ1dHRvbntmbG9hdDpsZWZ0fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVyIGRpdntmb250LXNpemU6MTRweDttYXJnaW4tcmlnaHQ6NTBweH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2NvbnRlbnR7ZmxvYXQ6bGVmdDt3aWR0aDo1MCU7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6MTZweH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2NvbnRlbnQuaXMtcmlnaHQgLmVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXIgYnV0dG9ue2Zsb2F0OnJpZ2h0fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9fY29udGVudC5pcy1yaWdodCAuZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlciBkaXZ7bWFyZ2luLWxlZnQ6NTBweDttYXJnaW4tcmlnaHQ6NTBweH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2NvbnRlbnQuaXMtbGVmdHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlNGU0ZTR9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19lZGl0b3JzLXdyYXB7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6dGFibGUtY2VsbH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvcnMtd3JhcC5pcy1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9fdGltZS1oZWFkZXJ7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U0ZTRlNDtmb250LXNpemU6MTJweDtwYWRkaW5nOjhweCA1cHggNXB4O2Rpc3BsYXk6dGFibGU7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLWhlYWRlcj4uZWwtaWNvbi1hcnJvdy1yaWdodHtmb250LXNpemU6MjBweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTp0YWJsZS1jZWxsO2NvbG9yOiM5N2E4YmV9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLXBpY2tlci13cmFwe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6dGFibGUtY2VsbDtwYWRkaW5nOjAgNXB4fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9fdGltZS1waWNrZXItd3JhcCAuZWwtcGlja2VyLXBhbmVse3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxM3B4O3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZn0uZWwtdGltZS1yYW5nZS1waWNrZXJ7bWluLXdpZHRoOjM1NHB4O292ZXJmbG93OnZpc2libGV9LmVsLXRpbWUtcmFuZ2UtcGlja2VyX19jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MTBweH0uZWwtdGltZS1yYW5nZS1waWNrZXJfX2NlbGx7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6NHB4IDdweCA3cHg7d2lkdGg6NTAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC10aW1lLXJhbmdlLXBpY2tlcl9faGVhZGVye21hcmdpbi1ib3R0b206NXB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxNHB4fS5lbC10aW1lLXJhbmdlLXBpY2tlcl9fYm9keXtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4IHNvbGlkICNkMWRiZTV9LmVsLXBpY2tlci1wYW5lbHtjb2xvcjojNDg1NzZhO2JvcmRlcjoxcHggc29saWQgI2QxZGJlNTtib3gtc2hhZG93OjAgMnB4IDZweCAjY2NjO2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmFkaXVzOjJweDtsaW5lLWhlaWdodDoyMHB4O21hcmdpbjo1cHggMH0uZWwtcGlja2VyLXBhbmVsX19ib2R5LXdyYXBwZXI6OmFmdGVyLC5lbC1waWNrZXItcGFuZWxfX2JvZHk6OmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTp0YWJsZTtjbGVhcjpib3RofS5lbC1waWNrZXItcGFuZWxfX2NvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjE1cHh9LmVsLXBpY2tlci1wYW5lbF9fZm9vdGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNlNGU0ZTQ7cGFkZGluZzo0cHg7dGV4dC1hbGlnbjpyaWdodDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246cmVsYXRpdmV9LmVsLXBpY2tlci1wYW5lbF9fc2hvcnRjdXR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2JvcmRlcjowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7bGluZS1oZWlnaHQ6MjhweDtmb250LXNpemU6MTRweDtjb2xvcjojNDg1NzZhO3BhZGRpbmctbGVmdDoxMnB4O3RleHQtYWxpZ246bGVmdDtvdXRsaW5lOjA7Y3Vyc29yOnBvaW50ZXJ9LmVsLXBpY2tlci1wYW5lbF9fc2hvcnRjdXQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTRlOGYxfS5lbC1waWNrZXItcGFuZWxfX3Nob3J0Y3V0LmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNlNmYxZmU7Y29sb3I6IzIwYTBmZn0uZWwtcGlja2VyLXBhbmVsX19idG57Ym9yZGVyOjFweCBzb2xpZCAjZGNkY2RjO2NvbG9yOiMzMzM7bGluZS1oZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjAgMjBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O291dGxpbmU6MDtmb250LXNpemU6MTJweH0uZWwtcGlja2VyLXBhbmVsX19idG5bZGlzYWJsZWRde2NvbG9yOiNjY2M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1waWNrZXItcGFuZWxfX2ljb24tYnRue2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5N2E4YmU7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO21hcmdpbi10b3A6M3B4fS5lbC1kYXRlLXBpY2tlcl9faGVhZGVyLWxhYmVsLmFjdGl2ZSwuZWwtZGF0ZS1waWNrZXJfX2hlYWRlci1sYWJlbDpob3ZlciwuZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0bjpob3Zlcntjb2xvcjojMjBhMGZmfS5lbC1waWNrZXItcGFuZWxfX2xpbmstYnRue2N1cnNvcjpwb2ludGVyO2NvbG9yOiMyMGEwZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7cGFkZGluZzoxNXB4O2ZvbnQtc2l6ZToxMnB4fS5lbC1waWNrZXItcGFuZWwgW3Nsb3Q9c2lkZWJhcl0sLmVsLXBpY2tlci1wYW5lbF9fc2lkZWJhcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDt3aWR0aDoxMTBweDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlNGU0ZTQ7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctdG9wOjZweDtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZkZmY7b3ZlcmZsb3c6YXV0b30uZWwtcGlja2VyLXBhbmVsIFtzbG90PXNpZGViYXJdKy5lbC1waWNrZXItcGFuZWxfX2JvZHksLmVsLXBpY2tlci1wYW5lbF9fc2lkZWJhcisuZWwtcGlja2VyLXBhbmVsX19ib2R5e21hcmdpbi1sZWZ0OjExMHB4fS5lbC1kYXRlLXBpY2tlcnttaW4td2lkdGg6MjU0cHh9LmVsLWRhdGUtcGlja2VyIC5lbC1waWNrZXItcGFuZWxfX2NvbnRlbnR7bWluLXdpZHRoOjIyNHB4fS5lbC1kYXRlLXBpY2tlciB0YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MTAwJX0uZWwtZGF0ZS1waWNrZXIuaGFzLXNpZGViYXIuaGFzLXRpbWV7bWluLXdpZHRoOjQzNHB4fS5lbC1kYXRlLXBpY2tlci5oYXMtc2lkZWJhcnttaW4td2lkdGg6MzcwcHh9LmVsLWRhdGUtcGlja2VyLmhhcy10aW1le21pbi13aWR0aDozMjRweH0uZWwtZGF0ZS1waWNrZXJfX2VkaXRvci13cmFwe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6dGFibGUtY2VsbDtwYWRkaW5nOjAgNXB4fS5lbC1kYXRlLXBpY2tlcl9fdGltZS1oZWFkZXJ7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U0ZTRlNDtmb250LXNpemU6MTJweDtwYWRkaW5nOjhweCA1cHggNXB4O2Rpc3BsYXk6dGFibGU7d2lkdGg6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWRhdGUtcGlja2VyX19oZWFkZXJ7bWFyZ2luOjEycHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLWRhdGUtcGlja2VyX19oZWFkZXItbGFiZWx7Zm9udC1zaXplOjE0cHg7cGFkZGluZzowIDVweDtsaW5lLWhlaWdodDoyMnB4O3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyfS5lbC1kYXRlLXBpY2tlcl9fcHJldi1idG57ZmxvYXQ6bGVmdH0uZWwtZGF0ZS1waWNrZXJfX25leHQtYnRue2Zsb2F0OnJpZ2h0fS5lbC1kYXRlLXBpY2tlcl9fdGltZS13cmFwe3BhZGRpbmc6MTBweDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtZGF0ZS1waWNrZXJfX3RpbWUtbGFiZWx7ZmxvYXQ6bGVmdDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDozMHB4O21hcmdpbi1sZWZ0OjEwcHh9LnRpbWUtc2VsZWN0e21hcmdpbjo1cHggMDttaW4td2lkdGg6MH0udGltZS1zZWxlY3QgLmVsLXBpY2tlci1wYW5lbF9fY29udGVudHttYXgtaGVpZ2h0OjIwMHB4O21hcmdpbjowfS50aW1lLXNlbGVjdC1pdGVte3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjE0cHh9LnRpbWUtc2VsZWN0LWl0ZW0uc2VsZWN0ZWQ6bm90KC5kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjojMjBhMGZmO2NvbG9yOiNmZmZ9LnRpbWUtc2VsZWN0LWl0ZW0uc2VsZWN0ZWQ6bm90KC5kaXNhYmxlZCk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMjBhMGZmfS50aW1lLXNlbGVjdC1pdGVtLmRpc2FibGVke2NvbG9yOiNkMWRiZTU7Y3Vyc29yOm5vdC1hbGxvd2VkfS50aW1lLXNlbGVjdC1pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U0ZThmMTtjdXJzb3I6cG9pbnRlcn0uZWwtZmFkZS1pbi1lbnRlci1hY3RpdmUsLmVsLWZhZGUtaW4tbGVhdmUtYWN0aXZlLC5lbC16b29tLWluLWNlbnRlci1lbnRlci1hY3RpdmUsLmVsLXpvb20taW4tY2VudGVyLWxlYXZlLWFjdGl2ZXt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC41NSwwLC4xLDEpfS5lbC16b29tLWluLWJvdHRvbS1lbnRlci1hY3RpdmUsLmVsLXpvb20taW4tYm90dG9tLWxlYXZlLWFjdGl2ZSwuZWwtem9vbS1pbi1sZWZ0LWVudGVyLWFjdGl2ZSwuZWwtem9vbS1pbi1sZWZ0LWxlYXZlLWFjdGl2ZSwuZWwtem9vbS1pbi10b3AtZW50ZXItYWN0aXZlLC5lbC16b29tLWluLXRvcC1sZWF2ZS1hY3RpdmV7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSkgLjFzLG9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSkgLjFzfS5lbC16b29tLWluLWNlbnRlci1lbnRlciwuZWwtem9vbS1pbi1jZW50ZXItbGVhdmUtYWN0aXZle29wYWNpdHk6MDstbXMtdHJhbnNmb3JtOnNjYWxlWCgwKTt0cmFuc2Zvcm06c2NhbGVYKDApfS5lbC16b29tLWluLXRvcC1lbnRlci1hY3RpdmUsLmVsLXpvb20taW4tdG9wLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjE7LW1zLXRyYW5zZm9ybTpzY2FsZVkoMSk7dHJhbnNmb3JtOnNjYWxlWSgxKTstbXMtdHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgdG9wO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyIHRvcH0uZWwtem9vbS1pbi10b3AtZW50ZXIsLmVsLXpvb20taW4tdG9wLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjA7LW1zLXRyYW5zZm9ybTpzY2FsZVkoMCk7dHJhbnNmb3JtOnNjYWxlWSgwKX0uZWwtem9vbS1pbi1ib3R0b20tZW50ZXItYWN0aXZlLC5lbC16b29tLWluLWJvdHRvbS1sZWF2ZS1hY3RpdmV7b3BhY2l0eToxOy1tcy10cmFuc2Zvcm06c2NhbGVZKDEpO3RyYW5zZm9ybTpzY2FsZVkoMSk7LW1zLXRyYW5zZm9ybS1vcmlnaW46Y2VudGVyIGJvdHRvbTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBib3R0b219LmVsLXpvb20taW4tYm90dG9tLWVudGVyLC5lbC16b29tLWluLWJvdHRvbS1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowOy1tcy10cmFuc2Zvcm06c2NhbGVZKDApO3RyYW5zZm9ybTpzY2FsZVkoMCl9LmVsLXpvb20taW4tbGVmdC1lbnRlci1hY3RpdmUsLmVsLXpvb20taW4tbGVmdC1sZWF2ZS1hY3RpdmV7b3BhY2l0eToxOy1tcy10cmFuc2Zvcm06c2NhbGUoMSwxKTt0cmFuc2Zvcm06c2NhbGUoMSwxKTstbXMtdHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdDt0cmFuc2Zvcm0tb3JpZ2luOnRvcCBsZWZ0fS5lbC16b29tLWluLWxlZnQtZW50ZXIsLmVsLXpvb20taW4tbGVmdC1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowOy1tcy10cmFuc2Zvcm06c2NhbGUoLjQ1LC40NSk7dHJhbnNmb3JtOnNjYWxlKC40NSwuNDUpfS5jb2xsYXBzZS10cmFuc2l0aW9ue3RyYW5zaXRpb246LjNzIGhlaWdodCBlYXNlLWluLW91dCwuM3MgcGFkZGluZy10b3AgZWFzZS1pbi1vdXQsLjNzIHBhZGRpbmctYm90dG9tIGVhc2UtaW4tb3V0fS5ob3Jpem9udGFsLWNvbGxhcHNlLXRyYW5zaXRpb257dHJhbnNpdGlvbjouM3Mgd2lkdGggZWFzZS1pbi1vdXQsLjNzIHBhZGRpbmctbGVmdCBlYXNlLWluLW91dCwuM3MgcGFkZGluZy1yaWdodCBlYXNlLWluLW91dH0uZWwtbGlzdC1lbnRlci1hY3RpdmUsLmVsLWxpc3QtbGVhdmUtYWN0aXZle3RyYW5zaXRpb246YWxsIDFzfS5lbC1saXN0LWVudGVyLC5lbC1saXN0LWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjA7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0zMHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMzBweCl9LmVsLW9wYWNpdHktdHJhbnNpdGlvbnt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGN1YmljLWJlemllciguNTUsMCwuMSwxKX0uZWwtZGF0ZS1lZGl0b3J7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLWRhdGUtZWRpdG9yIC5lbC1waWNrZXItcGFuZWx7cG9zaXRpb246YWJzb2x1dGU7bWluLXdpZHRoOjE4MHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2hhZG93OjAgMnB4IDZweCAjY2NjO2JhY2tncm91bmQ6I2ZmZjt6LWluZGV4OjEwO3RvcDo0MXB4fS5lbC1kYXRlLWVkaXRvci5lbC1pbnB1dHt3aWR0aDoxOTNweH0uZWwtZGF0ZS1lZGl0b3ItLWRhdGVyYW5nZS5lbC1pbnB1dHt3aWR0aDoyMjBweH0uZWwtZGF0ZS1lZGl0b3ItLWRhdGV0aW1lcmFuZ2UuZWwtaW5wdXR7d2lkdGg6MzUwcHh9LmVsLXRpbWUtc3Bpbm5lci5oYXMtc2Vjb25kcyAuZWwtdGltZS1zcGlubmVyX193cmFwcGVye3dpZHRoOjMzJX0uZWwtdGltZS1zcGlubmVyLmhhcy1zZWNvbmRzIC5lbC10aW1lLXNwaW5uZXJfX3dyYXBwZXI6bnRoLWNoaWxkKDIpe21hcmdpbi1sZWZ0OjElfS5lbC10aW1lLXNwaW5uZXJfX3dyYXBwZXJ7bWF4LWhlaWdodDoxOTBweDtvdmVyZmxvdzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjUwJTt2ZXJ0aWNhbC1hbGlnbjp0b3A7cG9zaXRpb246cmVsYXRpdmV9LmVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlciAuZWwtc2Nyb2xsYmFyX193cmFwOm5vdCguZWwtc2Nyb2xsYmFyX193cmFwLS1oaWRkZW4tZGVmYXVsdCl7cGFkZGluZy1ib3R0b206MTVweH0uZWwtdGltZS1zcGlubmVyX19saXN0e3BhZGRpbmc6MDttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmU7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXRpbWUtc3Bpbm5lcl9fbGlzdDo6YWZ0ZXIsLmVsLXRpbWUtc3Bpbm5lcl9fbGlzdDo6YmVmb3Jle2NvbnRlbnQ6Jyc7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDo4MHB4fS5lbC10aW1lLXNwaW5uZXJfX2l0ZW17aGVpZ2h0OjMycHg7bGluZS1oZWlnaHQ6MzJweDtmb250LXNpemU6MTJweH0uZWwtdGltZS1zcGlubmVyX19pdGVtOmhvdmVyOm5vdCguZGlzYWJsZWQpOm5vdCguYWN0aXZlKXtiYWNrZ3JvdW5kOiNlNGU4ZjE7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRpbWUtc3Bpbm5lcl9faXRlbS5hY3RpdmU6bm90KC5kaXNhYmxlZCl7Y29sb3I6I2ZmZn0uZWwtdGltZS1zcGlubmVyX19pdGVtLmRpc2FibGVke2NvbG9yOiNkMWRiZTU7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC10aW1lLXBhbmVse21hcmdpbjo1cHggMDtib3JkZXI6MXB4IHNvbGlkICNkMWRiZTU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JveC1zaGFkb3c6MCAycHggNHB4IHJnYmEoMCwwLDAsLjEyKSwwIDAgNnB4IHJnYmEoMCwwLDAsLjA0KTtib3JkZXItcmFkaXVzOjJweDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxODBweDtsZWZ0OjA7ei1pbmRleDoxMDAwOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5lbC1wb3BvdmVyLC5lbC10YWJzLS1ib3JkZXItY2FyZHtib3gtc2hhZG93OjAgMnB4IDRweCAwIHJnYmEoMCwwLDAsLjEyKSwwIDAgNnB4IDAgcmdiYSgwLDAsMCwuMDQpfS5lbC1zbGlkZXJfX2J1dHRvbiwuZWwtc2xpZGVyX19idXR0b24td3JhcHBlcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lfS5lbC10aW1lLXBhbmVsX19jb250ZW50e2ZvbnQtc2l6ZTowO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0uZWwtdGltZS1wYW5lbF9fY29udGVudDo6YWZ0ZXIsLmVsLXRpbWUtcGFuZWxfX2NvbnRlbnQ6OmJlZm9yZXtjb250ZW50OlxcXCI6XFxcIjt0b3A6NTAlO2NvbG9yOiNmZmY7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjE0cHg7bWFyZ2luLXRvcDotMTVweDtsaW5lLWhlaWdodDoxNnB4O2JhY2tncm91bmQtY29sb3I6IzIwYTBmZjtoZWlnaHQ6MzJweDt6LWluZGV4Oi0xO2xlZnQ6MDtyaWdodDowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nLXRvcDo2cHg7dGV4dC1hbGlnbjpsZWZ0fS5lbC10aW1lLXBhbmVsX19jb250ZW50OjphZnRlcntsZWZ0OjUwJTttYXJnaW4tbGVmdDotMnB4fS5lbC10aW1lLXBhbmVsX19jb250ZW50OjpiZWZvcmV7cGFkZGluZy1sZWZ0OjUwJTttYXJnaW4tcmlnaHQ6LTJweH0uZWwtdGltZS1wYW5lbF9fY29udGVudC5oYXMtc2Vjb25kczo6YWZ0ZXJ7bGVmdDo2Ni42NjY2NyV9LmVsLXRpbWUtcGFuZWxfX2NvbnRlbnQuaGFzLXNlY29uZHM6OmJlZm9yZXtwYWRkaW5nLWxlZnQ6MzMuMzMzMzMlfS5lbC10aW1lLXBhbmVsX19mb290ZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U0ZTRlNDtwYWRkaW5nOjRweDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDoyNXB4O3RleHQtYWxpZ246cmlnaHQ7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC10aW1lLXBhbmVsX19idG57Ym9yZGVyOm5vbmU7bGluZS1oZWlnaHQ6MjhweDtwYWRkaW5nOjAgNXB4O21hcmdpbjowIDVweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O291dGxpbmU6MDtmb250LXNpemU6MTJweDtjb2xvcjojODM5MWE1fS5lbC10aW1lLXBhbmVsX19idG4uY29uZmlybXtmb250LXdlaWdodDo4MDA7Y29sb3I6IzIwYTBmZn0uZWwtcG9wb3Zlcntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiNmZmY7bWluLXdpZHRoOjE1MHB4O2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI2QxZGJlNTtwYWRkaW5nOjEwcHg7ei1pbmRleDoyMDAwO2ZvbnQtc2l6ZToxMnB4fS5lbC1wb3BvdmVyIC5wb3BwZXJfX2Fycm93LC5lbC1wb3BvdmVyIC5wb3BwZXJfX2Fycm93OjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZH0uZWwtcG9wb3ZlciAucG9wcGVyX19hcnJvd3tib3JkZXItd2lkdGg6NnB4fS5lbC1wb3BvdmVyIC5wb3BwZXJfX2Fycm93OjphZnRlcntjb250ZW50OlxcXCIgXFxcIjtib3JkZXItd2lkdGg6NnB4fS5lbC1wb3BvdmVyW3gtcGxhY2VtZW50Xj10b3Bde21hcmdpbi1ib3R0b206MTJweH0uZWwtcG9wb3Zlclt4LXBsYWNlbWVudF49dG9wXSAucG9wcGVyX19hcnJvd3tib3R0b206LTZweDtsZWZ0OjUwJTttYXJnaW4tcmlnaHQ6M3B4O2JvcmRlci10b3AtY29sb3I6I2QxZGJlNTtib3JkZXItYm90dG9tLXdpZHRoOjB9LmVsLXBvcG92ZXJbeC1wbGFjZW1lbnRePXRvcF0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye2JvdHRvbToxcHg7bWFyZ2luLWxlZnQ6LTZweDtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5lbC1wb3BvdmVyW3gtcGxhY2VtZW50Xj1ib3R0b21de21hcmdpbi10b3A6MTJweH0uZWwtcG9wb3Zlclt4LXBsYWNlbWVudF49Ym90dG9tXSAucG9wcGVyX19hcnJvd3t0b3A6LTZweDtsZWZ0OjUwJTttYXJnaW4tcmlnaHQ6M3B4O2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLWNvbG9yOiNkMWRiZTV9LmVsLXBvcG92ZXJbeC1wbGFjZW1lbnRePWJvdHRvbV0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye3RvcDoxcHg7bWFyZ2luLWxlZnQ6LTZweDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5lbC1wb3BvdmVyW3gtcGxhY2VtZW50Xj1yaWdodF17bWFyZ2luLWxlZnQ6MTJweH0uZWwtcG9wb3Zlclt4LXBsYWNlbWVudF49cmlnaHRdIC5wb3BwZXJfX2Fycm93e3RvcDo1MCU7bGVmdDotNnB4O21hcmdpbi1ib3R0b206M3B4O2JvcmRlci1yaWdodC1jb2xvcjojZDFkYmU1O2JvcmRlci1sZWZ0LXdpZHRoOjB9LmVsLXBvcG92ZXJbeC1wbGFjZW1lbnRePXJpZ2h0XSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7Ym90dG9tOi02cHg7bGVmdDoxcHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNmZmY7Ym9yZGVyLWxlZnQtd2lkdGg6MH0uZWwtcG9wb3Zlclt4LXBsYWNlbWVudF49bGVmdF17bWFyZ2luLXJpZ2h0OjEycHh9LmVsLXBvcG92ZXJbeC1wbGFjZW1lbnRePWxlZnRdIC5wb3BwZXJfX2Fycm93e3RvcDo1MCU7cmlnaHQ6LTZweDttYXJnaW4tYm90dG9tOjNweDtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC1jb2xvcjojZDFkYmU1fS5lbC1wb3BvdmVyW3gtcGxhY2VtZW50Xj1sZWZ0XSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7cmlnaHQ6MXB4O2JvdHRvbTotNnB4O21hcmdpbi1sZWZ0Oi02cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtY29sb3I6I2ZmZn0uZWwtcG9wb3Zlcl9fdGl0bGV7Y29sb3I6IzFmMmQzZDtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxO21hcmdpbi1ib3R0b206OXB4fS52LW1vZGFsLWVudGVye2FuaW1hdGlvbjp2LW1vZGFsLWluIC4ycyBlYXNlfS52LW1vZGFsLWxlYXZle2FuaW1hdGlvbjp2LW1vZGFsLW91dCAuMnMgZWFzZSBmb3J3YXJkc31Aa2V5ZnJhbWVzIHYtbW9kYWwtaW57MCV7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHYtbW9kYWwtb3V0ezEwMCV7b3BhY2l0eTowfX0udi1tb2RhbHtwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvcGFjaXR5Oi41O2JhY2tncm91bmQ6IzAwMH0uZWwtbWVzc2FnZS1ib3h7dGV4dC1hbGlnbjpsZWZ0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7d2lkdGg6NDIwcHg7Ym9yZGVyLXJhZGl1czozcHg7Zm9udC1zaXplOjE2cHg7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59LmVsLW1lc3NhZ2UtYm94X193cmFwcGVye3Bvc2l0aW9uOmZpeGVkO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3RleHQtYWxpZ246Y2VudGVyfS5lbC1tZXNzYWdlLWJveF9fd3JhcHBlcjo6YWZ0ZXJ7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtbWVzc2FnZS1ib3hfX2hlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjIwcHggMjBweCAwfS5lbC1tZXNzYWdlLWJveF9faGVhZGVyYnRue3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxOXB4O3JpZ2h0OjIwcHg7YmFja2dyb3VuZDowIDA7Ym9yZGVyOm5vbmU7b3V0bGluZTowO3BhZGRpbmc6MDtjdXJzb3I6cG9pbnRlcn0uZWwtbWVzc2FnZS1ib3hfX2hlYWRlcmJ0biAuZWwtbWVzc2FnZS1ib3hfX2Nsb3Nle2NvbG9yOiM5OTl9LmVsLW1lc3NhZ2UtYm94X19oZWFkZXJidG46Zm9jdXMgLmVsLW1lc3NhZ2UtYm94X19jbG9zZSwuZWwtbWVzc2FnZS1ib3hfX2hlYWRlcmJ0bjpob3ZlciAuZWwtbWVzc2FnZS1ib3hfX2Nsb3Nle2NvbG9yOiMyMGEwZmZ9LmVsLW1lc3NhZ2UtYm94X19jb250ZW50e3BhZGRpbmc6MzBweCAyMHB4O2NvbG9yOiM0ODU3NmE7Zm9udC1zaXplOjE0cHg7cG9zaXRpb246cmVsYXRpdmV9LmVsLW1lc3NhZ2UtYm94X19pbnB1dHtwYWRkaW5nLXRvcDoxNXB4fS5lbC1tZXNzYWdlLWJveF9faW5wdXQgaW5wdXQuaW52YWxpZCwuZWwtbWVzc2FnZS1ib3hfX2lucHV0IGlucHV0LmludmFsaWQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNmZjQ5NDl9LmVsLW1lc3NhZ2UtYm94X19lcnJvcm1zZ3tjb2xvcjojZmY0OTQ5O2ZvbnQtc2l6ZToxMnB4O21pbi1oZWlnaHQ6MThweDttYXJnaW4tdG9wOjJweH0uZWwtbWVzc2FnZS1ib3hfX3RpdGxle3BhZGRpbmctbGVmdDowO21hcmdpbi1ib3R0b206MDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7aGVpZ2h0OjE4cHg7Y29sb3I6IzMzM30uZWwtbWVzc2FnZS1ib3hfX21lc3NhZ2V7bWFyZ2luOjB9LmVsLW1lc3NhZ2UtYm94X19tZXNzYWdlIHB7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MS40fS5lbC1tZXNzYWdlLWJveF9fYnRuc3twYWRkaW5nOjEwcHggMjBweCAxNXB4O3RleHQtYWxpZ246cmlnaHR9LmVsLW1lc3NhZ2UtYm94X19idG5zIGJ1dHRvbjpudGgtY2hpbGQoMil7bWFyZ2luLWxlZnQ6MTBweH0uZWwtbWVzc2FnZS1ib3hfX2J0bnMtcmV2ZXJzZXstbXMtZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXN7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7Zm9udC1zaXplOjM2cHghaW1wb3J0YW50fS5lbC1tZXNzYWdlLWJveF9fc3RhdHVzLmVsLWljb24tY2lyY2xlLWNoZWNre2NvbG9yOiMxM2NlNjZ9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXMuZWwtaWNvbi1pbmZvcm1hdGlvbntjb2xvcjojNTBiZmZmfS5lbC1tZXNzYWdlLWJveF9fc3RhdHVzLmVsLWljb24td2FybmluZ3tjb2xvcjojZjdiYTJhfS5lbC1tZXNzYWdlLWJveF9fc3RhdHVzLmVsLWljb24tY2lyY2xlLWNyb3Nze2NvbG9yOiNmZjQ5NDl9Lm1zZ2JveC1mYWRlLWVudGVyLWFjdGl2ZXthbmltYXRpb246bXNnYm94LWZhZGUtaW4gLjNzfS5tc2dib3gtZmFkZS1sZWF2ZS1hY3RpdmV7YW5pbWF0aW9uOm1zZ2JveC1mYWRlLW91dCAuM3N9QGtleWZyYW1lcyBtc2dib3gtZmFkZS1pbnswJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO29wYWNpdHk6MX19QGtleWZyYW1lcyBtc2dib3gtZmFkZS1vdXR7MCV7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTtvcGFjaXR5OjF9MTAwJXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9fS5lbC1icmVhZGNydW1ie2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjF9LmVsLWJyZWFkY3J1bWJfX3NlcGFyYXRvcnttYXJnaW46MCA4cHg7Y29sb3I6I2JmY2JkOX0uZWwtYnJlYWRjcnVtYl9faXRlbXtmbG9hdDpsZWZ0fS5lbC1icmVhZGNydW1iX19pdGVtOmxhc3QtY2hpbGQgLmVsLWJyZWFkY3J1bWJfX2l0ZW1fX2lubmVyLC5lbC1icmVhZGNydW1iX19pdGVtOmxhc3QtY2hpbGQgLmVsLWJyZWFkY3J1bWJfX2l0ZW1fX2lubmVyIGEsLmVsLWJyZWFkY3J1bWJfX2l0ZW06bGFzdC1jaGlsZCAuZWwtYnJlYWRjcnVtYl9faXRlbV9faW5uZXIgYTpob3ZlciwuZWwtYnJlYWRjcnVtYl9faXRlbTpsYXN0LWNoaWxkIC5lbC1icmVhZGNydW1iX19pdGVtX19pbm5lcjpob3Zlcntjb2xvcjojOTdhOGJlO2N1cnNvcjp0ZXh0fS5lbC1icmVhZGNydW1iX19pdGVtOmxhc3QtY2hpbGQgLmVsLWJyZWFkY3J1bWJfX3NlcGFyYXRvcntkaXNwbGF5Om5vbmV9LmVsLWJyZWFkY3J1bWJfX2l0ZW1fX2lubmVyLC5lbC1icmVhZGNydW1iX19pdGVtX19pbm5lciBhe3RyYW5zaXRpb246Y29sb3IgLjE1cyBsaW5lYXI7Y29sb3I6IzQ4NTc2YX0uZWwtYnJlYWRjcnVtYl9faXRlbV9faW5uZXIgYTpob3ZlciwuZWwtYnJlYWRjcnVtYl9faXRlbV9faW5uZXI6aG92ZXJ7Y29sb3I6IzIwYTBmZjtjdXJzb3I6cG9pbnRlcn0uZWwtZm9ybS0tbGFiZWwtbGVmdCAuZWwtZm9ybS1pdGVtX19sYWJlbHt0ZXh0LWFsaWduOmxlZnR9LmVsLWZvcm0tLWxhYmVsLXRvcCAuZWwtZm9ybS1pdGVtX19sYWJlbHtmbG9hdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjAgMCAxMHB4fS5lbC1mb3JtLS1pbmxpbmUgLmVsLWZvcm0taXRlbXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTBweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmVsLWZvcm0tLWlubGluZSAuZWwtZm9ybS1pdGVtX19sYWJlbHtmbG9hdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1mb3JtLS1pbmxpbmUgLmVsLWZvcm0taXRlbV9fY29udGVudHtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmVsLWZvcm0tLWlubGluZS5lbC1mb3JtLS1sYWJlbC10b3AgLmVsLWZvcm0taXRlbV9fY29udGVudHtkaXNwbGF5OmJsb2NrfS5lbC1mb3JtLWl0ZW17bWFyZ2luLWJvdHRvbToyMnB4fS5lbC1mb3JtLWl0ZW0gLmVsLWZvcm0taXRlbXttYXJnaW4tYm90dG9tOjB9LmVsLWZvcm0taXRlbS5pcy1lcnJvciAuZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCAuZWwtaW5wdXRfX2lubmVyLC5lbC1mb3JtLWl0ZW0uaXMtZXJyb3IgLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIC5lbC1pbnB1dF9faW5uZXIsLmVsLWZvcm0taXRlbS5pcy1lcnJvciAuZWwtaW5wdXRfX2lubmVye2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uZWwtZm9ybS1pdGVtLmlzLWVycm9yIC5lbC1pbnB1dF9faW5uZXIsLmVsLWZvcm0taXRlbS5pcy1lcnJvciAuZWwtdGV4dGFyZWFfX2lubmVye2JvcmRlci1jb2xvcjojZmY0OTQ5fS5lbC1mb3JtLWl0ZW0uaXMtcmVxdWlyZWQgLmVsLWZvcm0taXRlbV9fbGFiZWw6YmVmb3Jle2NvbnRlbnQ6JyonO2NvbG9yOiNmZjQ5NDk7bWFyZ2luLXJpZ2h0OjRweH0uZWwtZm9ybS1pdGVtX19sYWJlbHt0ZXh0LWFsaWduOnJpZ2h0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmbG9hdDpsZWZ0O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM0ODU3NmE7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOjExcHggMTJweCAxMXB4IDA7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1mb3JtLWl0ZW1fX2NvbnRlbnR7bGluZS1oZWlnaHQ6MzZweDtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweH0uZWwtZm9ybS1pdGVtX19lcnJvcntjb2xvcjojZmY0OTQ5O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE7cGFkZGluZy10b3A6NHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MH0uZWwtdGFic19faGVhZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkMWRiZTU7cGFkZGluZzowO3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjowIDAgMTVweH0uZWwtdGFic19fYWN0aXZlLWJhcntwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7aGVpZ2h0OjNweDtiYWNrZ3JvdW5kLWNvbG9yOiMyMGEwZmY7ei1pbmRleDoxO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7bGlzdC1zdHlsZTpub25lfS5lbC10YWJzX19uZXctdGFie2Zsb2F0OnJpZ2h0O2JvcmRlcjoxcHggc29saWQgI2QzZGNlNjtoZWlnaHQ6MThweDt3aWR0aDoxOHB4O2xpbmUtaGVpZ2h0OjE4cHg7bWFyZ2luOjEycHggMCA5cHggMTBweDtib3JkZXItcmFkaXVzOjNweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTJweDtjb2xvcjojZDNkY2U2O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIC4xNXN9LmVsLXRhYnNfX25ldy10YWIgLmVsLWljb24tcGx1c3stbXMtdHJhbnNmb3JtOnNjYWxlKC44LC44KTt0cmFuc2Zvcm06c2NhbGUoLjgsLjgpfS5lbC10YWJzX19uZXctdGFiOmhvdmVye2NvbG9yOiMyMGEwZmZ9LmVsLXRhYnNfX25hdi13cmFwe292ZXJmbG93OmhpZGRlbjttYXJnaW4tYm90dG9tOi0xcHg7cG9zaXRpb246cmVsYXRpdmV9LmVsLXRhYnNfX25hdi13cmFwLmlzLXNjcm9sbGFibGV7cGFkZGluZzowIDE1cHh9LmVsLXRhYnNfX25hdi1zY3JvbGx7b3ZlcmZsb3c6aGlkZGVufS5lbC10YWJzX19uYXYtbmV4dCwuZWwtdGFic19fbmF2LXByZXZ7cG9zaXRpb246YWJzb2x1dGU7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6NDRweDtmb250LXNpemU6MTJweDtjb2xvcjojODM5MWE1fS5lbC10YWJzX19uYXYtbmV4dHtyaWdodDowfS5lbC10YWJzX19uYXYtcHJldntsZWZ0OjB9LmVsLXRhYnNfX25hdntwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3M7ZmxvYXQ6bGVmdH0uZWwtdGFic19faXRlbXtwYWRkaW5nOjAgMTZweDtoZWlnaHQ6NDJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bGluZS1oZWlnaHQ6NDJweDtkaXNwbGF5OmlubGluZS1ibG9jaztsaXN0LXN0eWxlOm5vbmU7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzgzOTFhNTtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtdGFic19faXRlbSAuZWwtaWNvbi1jbG9zZXtib3JkZXItcmFkaXVzOjUwJTt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO21hcmdpbi1sZWZ0OjVweH0uZWwtdGFic19faXRlbSAuZWwtaWNvbi1jbG9zZTpiZWZvcmV7LW1zLXRyYW5zZm9ybTpzY2FsZSguNywuNyk7dHJhbnNmb3JtOnNjYWxlKC43LC43KTtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtdGFic19faXRlbSAuZWwtaWNvbi1jbG9zZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5N2E4YmU7Y29sb3I6I2ZmZn0uZWwtdGFic19faXRlbTpob3Zlcntjb2xvcjojMWYyZDNkO2N1cnNvcjpwb2ludGVyfS5lbC10YWJzX19pdGVtLmlzLWRpc2FibGVke2NvbG9yOiNiYmI7Y3Vyc29yOmRlZmF1bHR9LmVsLXRhYnNfX2l0ZW0uaXMtYWN0aXZle2NvbG9yOiMyMGEwZmZ9LmVsLXRhYnNfX2NvbnRlbnR7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2FjdGl2ZS1iYXJ7ZGlzcGxheTpub25lfS5lbC10YWcsLnNsaWRlSW5MZWZ0LXRyYW5zaXRpb24sLnNsaWRlSW5SaWdodC10cmFuc2l0aW9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW0gLmVsLWljb24tY2xvc2V7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjEycHg7d2lkdGg6MDtoZWlnaHQ6MTRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGluZS1oZWlnaHQ6MTVweDtvdmVyZmxvdzpoaWRkZW47dG9wOi0xcHg7cmlnaHQ6LTJweDstbXMtdHJhbnNmb3JtLW9yaWdpbjoxMDAlIDUwJTt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgNTAlfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW0uaXMtYWN0aXZlLmlzLWNsb3NhYmxlIC5lbC1pY29uLWNsb3NlLC5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW0uaXMtY2xvc2FibGU6aG92ZXIgLmVsLWljb24tY2xvc2V7d2lkdGg6MTRweH0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVte2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKX0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWNsb3NhYmxlOmhvdmVye3BhZGRpbmctcmlnaHQ6OXB4O3BhZGRpbmctbGVmdDo5cHh9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbS5pcy1hY3RpdmV7Ym9yZGVyOjFweCBzb2xpZCAjZDFkYmU1O2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW0uaXMtYWN0aXZlLmlzLWNsb3NhYmxle3BhZGRpbmctcmlnaHQ6MTZweDtwYWRkaW5nLWxlZnQ6MTZweH0uZWwtdGFicy0tYm9yZGVyLWNhcmR7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2QxZGJlNX0uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2NvbnRlbnR7cGFkZGluZzoxNXB4fS5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVye2JhY2tncm91bmQtY29sb3I6I2VlZjFmNjttYXJnaW46MH0uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbXt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDowO21hcmdpbi1yaWdodDotMXB4O21hcmdpbi1sZWZ0Oi0xcHh9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW0uaXMtYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItcmlnaHQtY29sb3I6I2QxZGJlNTtib3JkZXItbGVmdC1jb2xvcjojZDFkYmU1fS5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWFjdGl2ZTpmaXJzdC1jaGlsZHtib3JkZXItbGVmdC1jb2xvcjojZDFkYmU1fS5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWFjdGl2ZTpsYXN0LWNoaWxke2JvcmRlci1yaWdodC1jb2xvcjojZDFkYmU1fS5zbGlkZUluUmlnaHQtZW50ZXJ7YW5pbWF0aW9uOnNsaWRlSW5SaWdodC1lbnRlciAuM3N9LnNsaWRlSW5SaWdodC1sZWF2ZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MDthbmltYXRpb246c2xpZGVJblJpZ2h0LWxlYXZlIC4zc30uc2xpZGVJbkxlZnQtZW50ZXJ7YW5pbWF0aW9uOnNsaWRlSW5MZWZ0LWVudGVyIC4zc30uc2xpZGVJbkxlZnQtbGVhdmV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3JpZ2h0OjA7YW5pbWF0aW9uOnNsaWRlSW5MZWZ0LWxlYXZlIC4zc31Aa2V5ZnJhbWVzIHNsaWRlSW5SaWdodC1lbnRlcnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApfX1Aa2V5ZnJhbWVzIHNsaWRlSW5SaWdodC1sZWF2ZXswJXt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTtvcGFjaXR5OjF9MTAwJXt0cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc2xpZGVJbkxlZnQtZW50ZXJ7MCV7b3BhY2l0eTowO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fUBrZXlmcmFtZXMgc2xpZGVJbkxlZnQtbGVhdmV7MCV7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7b3BhY2l0eToxfTEwMCV7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpO29wYWNpdHk6MH19LmVsLXRhZ3tiYWNrZ3JvdW5kLWNvbG9yOiM4MzkxYTU7cGFkZGluZzowIDVweDtoZWlnaHQ6MjRweDtsaW5lLWhlaWdodDoyMnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnR9LmVsLXRhZyAuZWwtaWNvbi1jbG9zZXtib3JkZXItcmFkaXVzOjUwJTt0ZXh0LWFsaWduOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTJweDstbXMtdHJhbnNmb3JtOnNjYWxlKC43NSwuNzUpO3RyYW5zZm9ybTpzY2FsZSguNzUsLjc1KTtoZWlnaHQ6MThweDt3aWR0aDoxOHB4O2xpbmUtaGVpZ2h0OjE4cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO3RvcDotMXB4O3JpZ2h0Oi0ycHh9LmVsLXRhZyAuZWwtaWNvbi1jbG9zZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzgzOTFhNX0uZWwtdGFnLS1ncmF5e2JhY2tncm91bmQtY29sb3I6I2U0ZThmMTtib3JkZXItY29sb3I6I2U0ZThmMTtjb2xvcjojNDg1NzZhfS5lbC10YWctLWdyYXkgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojNDg1NzZhO2NvbG9yOiNmZmZ9LmVsLXRhZy0tZ3JheS5pcy1oaXR7Ym9yZGVyLWNvbG9yOiM0ODU3NmF9LmVsLXRhZy0tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMzIsMTYwLDI1NSwuMSk7Ym9yZGVyLWNvbG9yOnJnYmEoMzIsMTYwLDI1NSwuMik7Y29sb3I6IzIwYTBmZn0uZWwtdGFnLS1wcmltYXJ5IC5lbC10YWdfX2Nsb3NlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzIwYTBmZjtjb2xvcjojZmZmfS5lbC10YWctLXByaW1hcnkuaXMtaGl0e2JvcmRlci1jb2xvcjojMjBhMGZmfS5lbC10YWctLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE4LDIwNiwxMDIsLjEpO2JvcmRlci1jb2xvcjpyZ2JhKDE4LDIwNiwxMDIsLjIpO2NvbG9yOiMxM2NlNjZ9LmVsLXRhZy0tc3VjY2VzcyAuZWwtdGFnX19jbG9zZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMxM2NlNjY7Y29sb3I6I2ZmZn0uZWwtdGFnLS1zdWNjZXNzLmlzLWhpdHtib3JkZXItY29sb3I6IzEzY2U2Nn0uZWwtdGFnLS13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDcsMTg2LDQxLC4xKTtib3JkZXItY29sb3I6cmdiYSgyNDcsMTg2LDQxLC4yKTtjb2xvcjojZjdiYTJhfS5lbC10YWctLXdhcm5pbmcgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjdiYTJhO2NvbG9yOiNmZmZ9LmVsLXRhZy0td2FybmluZy5pcy1oaXR7Ym9yZGVyLWNvbG9yOiNmN2JhMmF9LmVsLXRhZy0tZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsNzMsNzMsLjEpO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSw3Myw3MywuMik7Y29sb3I6I2ZmNDk0OX0uZWwtdGFnLS1kYW5nZXIgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmY0OTQ5O2NvbG9yOiNmZmZ9LmVsLXRhZy0tZGFuZ2VyLmlzLWhpdHtib3JkZXItY29sb3I6I2ZmNDk0OX0uZWwtdHJlZXtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZDFkYmU1fS5lbC10cmVlX19lbXB0eS1ibG9ja3twb3NpdGlvbjpyZWxhdGl2ZTttaW4taGVpZ2h0OjYwcHg7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uZWwtdHJlZV9fZW1wdHktdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTt0b3A6NTAlOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO2NvbG9yOiM1ZTczODJ9LmVsLXRyZWUtbm9kZT4uZWwtdHJlZS1ub2RlX19jaGlsZHJlbntvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZWwtdHJlZS1ub2RlLmlzLWV4cGFuZGVkPi5lbC10cmVlLW5vZGVfX2NoaWxkcmVue2Rpc3BsYXk6YmxvY2t9LmVsLXRyZWUtbm9kZV9fZXhwYW5kLWljb24sLmVsLXRyZWUtbm9kZV9fbGFiZWwsLmVsLXRyZWUtbm9kZV9fbG9hZGluZy1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtdHJlZS1ub2RlX19jb250ZW50e2xpbmUtaGVpZ2h0OjM2cHg7aGVpZ2h0OjM2cHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRyZWUtbm9kZV9fY29udGVudD4uZWwtY2hlY2tib3gsLmVsLXRyZWUtbm9kZV9fY29udGVudD4uZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbnttYXJnaW4tcmlnaHQ6OHB4fS5lbC10cmVlLW5vZGVfX2NvbnRlbnQ+LmVsLWNoZWNrYm94e3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtdHJlZS1ub2RlX19jb250ZW50OmhvdmVye2JhY2tncm91bmQ6I2U0ZThmMX0uZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbntjdXJzb3I6cG9pbnRlcjt3aWR0aDowO2hlaWdodDowO21hcmdpbi1sZWZ0OjEwcHg7Ym9yZGVyOjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC1jb2xvcjojOTdhOGJlO2JvcmRlci1sZWZ0LXdpZHRoOjdweDstbXMtdHJhbnNmb3JtOnJvdGF0ZSgwKTt0cmFuc2Zvcm06cm90YXRlKDApO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlLWluLW91dH0uZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbjpob3Zlcntib3JkZXItbGVmdC1jb2xvcjojOTk5fS5lbC10cmVlLW5vZGVfX2V4cGFuZC1pY29uLmV4cGFuZGVkey1tcy10cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbi5pcy1sZWFme2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjdXJzb3I6ZGVmYXVsdH0uZWwtdHJlZS1ub2RlX19sYWJlbHtmb250LXNpemU6MTRweH0uZWwtdHJlZS1ub2RlX19sb2FkaW5nLWljb257bWFyZ2luLXJpZ2h0OjRweDtmb250LXNpemU6MTRweDtjb2xvcjojOTdhOGJlfS5lbC10cmVlLS1oaWdobGlnaHQtY3VycmVudCAuZWwtdHJlZS1ub2RlLmlzLWN1cnJlbnQ+LmVsLXRyZWUtbm9kZV9fY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZGY3ZmZ9LmVsLWFsZXJ0e3dpZHRoOjEwMCU7cGFkZGluZzo4cHggMTZweDttYXJnaW46MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czo0cHg7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO292ZXJmbG93OmhpZGRlbjtjb2xvcjojZmZmO29wYWNpdHk6MTtkaXNwbGF5OnRhYmxlO3RyYW5zaXRpb246b3BhY2l0eSAuMnN9LmVsLWFsZXJ0IC5lbC1hbGVydF9fZGVzY3JpcHRpb257Y29sb3I6I2ZmZjtmb250LXNpemU6MTJweDttYXJnaW46NXB4IDAgMH0uZWwtYWxlcnQtLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojMTNjZTY2fS5lbC1hbGVydC0taW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiM1MGJmZmZ9LmVsLWFsZXJ0LS13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2Y3YmEyYX0uZWwtYWxlcnQtLWVycm9ye2JhY2tncm91bmQtY29sb3I6I2ZmNDk0OX0uZWwtYWxlcnRfX2NvbnRlbnR7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6MCA4cHh9LmVsLWFsZXJ0X19pY29ue2ZvbnQtc2l6ZToxNnB4O3dpZHRoOjE2cHg7ZGlzcGxheTp0YWJsZS1jZWxsO2NvbG9yOiNmZmY7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1hbGVydF9faWNvbi5pcy1iaWd7Zm9udC1zaXplOjI4cHg7d2lkdGg6MjhweH0uZWwtYWxlcnRfX3RpdGxle2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjE4cHh9LmVsLWFsZXJ0X190aXRsZS5pcy1ib2xke2ZvbnQtd2VpZ2h0OjcwMH0uZWwtYWxlcnRfX2Nsb3NlYnRue2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiNmZmY7b3BhY2l0eToxO3RvcDoxMnB4O3JpZ2h0OjE1cHg7cG9zaXRpb246YWJzb2x1dGU7Y3Vyc29yOnBvaW50ZXJ9LmVsLWFsZXJ0LWZhZGUtZW50ZXIsLmVsLWFsZXJ0LWZhZGUtbGVhdmUtYWN0aXZlLC5lbC1sb2FkaW5nLWZhZGUtZW50ZXIsLmVsLWxvYWRpbmctZmFkZS1sZWF2ZS1hY3RpdmUsLmVsLW5vdGlmaWNhdGlvbi1mYWRlLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjB9LmVsLWFsZXJ0X19jbG9zZWJ0bi5pcy1jdXN0b21lZHtmb250LXN0eWxlOm5vcm1hbDtmb250LXNpemU6MTNweDt0b3A6OXB4fS5lbC1ub3RpZmljYXRpb257d2lkdGg6MzMwcHg7cGFkZGluZzoyMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjJweDtwb3NpdGlvbjpmaXhlZDtyaWdodDoxNnB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2hhZG93OjAgMnB4IDRweCByZ2JhKDAsMCwwLC4xMiksMCAwIDZweCByZ2JhKDAsMCwwLC4wNCk7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyx0cmFuc2Zvcm0gLjNzLHJpZ2h0IC4zcyx0b3AgLjRzO292ZXJmbG93OmhpZGRlbn0uZWwtbm90aWZpY2F0aW9uIC5lbC1pY29uLWNpcmNsZS1jaGVja3tjb2xvcjojMTNjZTY2fS5lbC1ub3RpZmljYXRpb24gLmVsLWljb24tY2lyY2xlLWNyb3Nze2NvbG9yOiNmZjQ5NDl9LmVsLW5vdGlmaWNhdGlvbiAuZWwtaWNvbi1pbmZvcm1hdGlvbntjb2xvcjojNTBiZmZmfS5lbC1ub3RpZmljYXRpb24gLmVsLWljb24td2FybmluZ3tjb2xvcjojZjdiYTJhfS5lbC1ub3RpZmljYXRpb25fX2dyb3Vwe21hcmdpbi1sZWZ0OjB9LmVsLW5vdGlmaWNhdGlvbl9fZ3JvdXAuaXMtd2l0aC1pY29ue21hcmdpbi1sZWZ0OjU1cHh9LmVsLW5vdGlmaWNhdGlvbl9fdGl0bGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMxZjJkM2Q7bWFyZ2luOjB9LmVsLW5vdGlmaWNhdGlvbl9fY29udGVudHtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMXB4O21hcmdpbjoxMHB4IDAgMDtjb2xvcjojODM5MWE1O3RleHQtYWxpZ246anVzdGlmeX0uZWwtbm90aWZpY2F0aW9uX19pY29ue3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Zm9udC1zaXplOjQwcHg7ZmxvYXQ6bGVmdDtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6M3B4fS5lbC1ub3RpZmljYXRpb25fX2Nsb3NlQnRue3RvcDoyMHB4O3JpZ2h0OjIwcHg7cG9zaXRpb246YWJzb2x1dGU7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6I2JmY2JkOTtmb250LXNpemU6MTRweH0uZWwtbm90aWZpY2F0aW9uX19jbG9zZUJ0bjpob3Zlcntjb2xvcjojOTdhOGJlfS5lbC1ub3RpZmljYXRpb24tZmFkZS1lbnRlcnstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSk7cmlnaHQ6MH0uZWwtaW5wdXQtbnVtYmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjE4MHB4O3Bvc2l0aW9uOnJlbGF0aXZlO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZWwtaW5wdXQtbnVtYmVyIC5lbC1pbnB1dHtkaXNwbGF5OmJsb2NrfS5lbC1pbnB1dC1udW1iZXIgLmVsLWlucHV0X19pbm5lcnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7cGFkZGluZy1yaWdodDo4MnB4fS5lbC1pbnB1dC1udW1iZXIuaXMtd2l0aG91dC1jb250cm9scyAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmctcmlnaHQ6MTBweH0uZWwtaW5wdXQtbnVtYmVyLmlzLWRpc2FibGVkIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLC5lbC1pbnB1dC1udW1iZXIuaXMtZGlzYWJsZWQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7Ym9yZGVyLWNvbG9yOiNkMWRiZTU7Y29sb3I6I2QxZGJlNX0uZWwtaW5wdXQtbnVtYmVyLmlzLWRpc2FibGVkIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlOmhvdmVyLC5lbC1pbnB1dC1udW1iZXIuaXMtZGlzYWJsZWQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2U6aG92ZXJ7Y29sb3I6I2QxZGJlNTtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7aGVpZ2h0OmF1dG87Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNiZmNiZDk7d2lkdGg6MzZweDtsaW5lLWhlaWdodDozNHB4O3RvcDoxcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6Izk3YThiZTtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjF9LmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2U6aG92ZXIsLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2U6aG92ZXJ7Y29sb3I6IzIwYTBmZn0uZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZTpob3Zlcjpub3QoLmlzLWRpc2FibGVkKX4uZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcjpub3QoLmlzLWRpc2FibGVkKSwuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZTpob3Zlcjpub3QoLmlzLWRpc2FibGVkKX4uZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcjpub3QoLmlzLWRpc2FibGVkKXtib3JkZXItY29sb3I6IzIwYTBmZn0uZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZS5pcy1kaXNhYmxlZCwuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZS5pcy1kaXNhYmxlZHtjb2xvcjojZDFkYmU1O2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXtyaWdodDowfS5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNle3JpZ2h0OjM3cHh9LmVsLWlucHV0LW51bWJlci0tbGFyZ2V7d2lkdGg6MjAwcHh9LmVsLWlucHV0LW51bWJlci0tbGFyZ2UgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLWlucHV0LW51bWJlci0tbGFyZ2UgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7bGluZS1oZWlnaHQ6NDBweDt3aWR0aDo0MnB4O2ZvbnQtc2l6ZToxNnB4fS5lbC1pbnB1dC1udW1iZXItLWxhcmdlIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNle3JpZ2h0OjQzcHh9LmVsLWlucHV0LW51bWJlci0tbGFyZ2UgLmVsLWlucHV0X19pbm5lcntwYWRkaW5nLXJpZ2h0Ojk0cHh9LmVsLWlucHV0LW51bWJlci0tc21hbGx7d2lkdGg6MTMwcHh9LmVsLWlucHV0LW51bWJlci0tc21hbGwgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UsLmVsLWlucHV0LW51bWJlci0tc21hbGwgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7bGluZS1oZWlnaHQ6MjhweDt3aWR0aDozMHB4O2ZvbnQtc2l6ZToxM3B4fS5lbC1pbnB1dC1udW1iZXItLXNtYWxsIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNle3JpZ2h0OjMxcHh9LmVsLWlucHV0LW51bWJlci0tc21hbGwgLmVsLWlucHV0X19pbm5lcntwYWRkaW5nLXJpZ2h0OjcwcHh9LmVsLXRvb2x0aXBfX3BvcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjEwcHg7ei1pbmRleDoyMDAwO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEuMn0uZWwtdG9vbHRpcF9fcG9wcGVyIC5wb3BwZXJfX2Fycm93LC5lbC10b29sdGlwX19wb3BwZXIgLnBvcHBlcl9fYXJyb3c6OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOnNvbGlkfS5lbC10b29sdGlwX19wb3BwZXIgLnBvcHBlcl9fYXJyb3d7Ym9yZGVyLXdpZHRoOjZweH0uZWwtdG9vbHRpcF9fcG9wcGVyIC5wb3BwZXJfX2Fycm93OjphZnRlcntjb250ZW50OlxcXCIgXFxcIjtib3JkZXItd2lkdGg6NXB4fS5lbC1wcm9ncmVzcy1iYXJfX2lubmVyOmFmdGVyLC5lbC1yb3c6YWZ0ZXIsLmVsLXJvdzpiZWZvcmUsLmVsLXNsaWRlcjphZnRlciwuZWwtc2xpZGVyOmJlZm9yZSwuZWwtc2xpZGVyX19idXR0b24td3JhcHBlcjphZnRlciwuZWwtdXBsb2FkLWNvdmVyOmFmdGVye2NvbnRlbnQ6XFxcIlxcXCJ9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49dG9wXXttYXJnaW4tYm90dG9tOjEycHh9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49dG9wXSAucG9wcGVyX19hcnJvd3tib3R0b206LTZweDtib3JkZXItdG9wLWNvbG9yOiMxZjJkM2Q7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePXRvcF0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye2JvdHRvbToxcHg7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItdG9wLWNvbG9yOiMxZjJkM2Q7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePWJvdHRvbV17bWFyZ2luLXRvcDoxMnB4fS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePWJvdHRvbV0gLnBvcHBlcl9fYXJyb3d7dG9wOi02cHg7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20tY29sb3I6IzFmMmQzZH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1ib3R0b21dIC5wb3BwZXJfX2Fycm93OjphZnRlcnt0b3A6MXB4O21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20tY29sb3I6IzFmMmQzZH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1yaWdodF17bWFyZ2luLWxlZnQ6MTJweH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1yaWdodF0gLnBvcHBlcl9fYXJyb3d7bGVmdDotNnB4O2JvcmRlci1yaWdodC1jb2xvcjojMWYyZDNkO2JvcmRlci1sZWZ0LXdpZHRoOjB9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49cmlnaHRdIC5wb3BwZXJfX2Fycm93OjphZnRlcntib3R0b206LTVweDtsZWZ0OjFweDtib3JkZXItcmlnaHQtY29sb3I6IzFmMmQzZDtib3JkZXItbGVmdC13aWR0aDowfS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePWxlZnRde21hcmdpbi1yaWdodDoxMnB4fS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePWxlZnRdIC5wb3BwZXJfX2Fycm93e3JpZ2h0Oi02cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtY29sb3I6IzFmMmQzZH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1sZWZ0XSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7cmlnaHQ6MXB4O2JvdHRvbTotNXB4O21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtY29sb3I6IzFmMmQzZH0uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWxpZ2h0e2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICMxZjJkM2R9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1saWdodFt4LXBsYWNlbWVudF49dG9wXSAucG9wcGVyX19hcnJvd3tib3JkZXItdG9wLWNvbG9yOiMxZjJkM2R9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1saWdodFt4LXBsYWNlbWVudF49dG9wXSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7Ym9yZGVyLXRvcC1jb2xvcjojZmZmfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePWJvdHRvbV0gLnBvcHBlcl9fYXJyb3d7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMWYyZDNkfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePWJvdHRvbV0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6I2ZmZn0uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWxpZ2h0W3gtcGxhY2VtZW50Xj1sZWZ0XSAucG9wcGVyX19hcnJvd3tib3JkZXItbGVmdC1jb2xvcjojMWYyZDNkfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePWxlZnRdIC5wb3BwZXJfX2Fycm93OjphZnRlcntib3JkZXItbGVmdC1jb2xvcjojZmZmfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePXJpZ2h0XSAucG9wcGVyX19hcnJvd3tib3JkZXItcmlnaHQtY29sb3I6IzFmMmQzZH0uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWxpZ2h0W3gtcGxhY2VtZW50Xj1yaWdodF0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye2JvcmRlci1yaWdodC1jb2xvcjojZmZmfS5lbC10b29sdGlwX19wb3BwZXIuaXMtZGFya3tiYWNrZ3JvdW5kOiMxZjJkM2Q7Y29sb3I6I2ZmZn0uZWwtc2xpZGVyOmFmdGVyLC5lbC1zbGlkZXI6YmVmb3Jle2Rpc3BsYXk6dGFibGV9LmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXIgLmVsLXRvb2x0aXAsLmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXI6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1zbGlkZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZWwtc2xpZGVyLmlzLXZlcnRpY2Fse3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1zbGlkZXIuaXMtdmVydGljYWwgLmVsLXNsaWRlcl9fcnVud2F5e3dpZHRoOjRweDtoZWlnaHQ6MTAwJTttYXJnaW46MCAxNnB4fS5lbC1zbGlkZXIuaXMtdmVydGljYWwgLmVsLXNsaWRlcl9fYmFye3dpZHRoOjRweDtoZWlnaHQ6YXV0bztib3JkZXItcmFkaXVzOjAgMCAzcHggM3B4fS5lbC1zbGlkZXIuaXMtdmVydGljYWwgLmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXJ7dG9wOmF1dG87bGVmdDotMTZweDstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSg1MCUpfS5lbC1zbGlkZXIuaXMtdmVydGljYWwgLmVsLXNsaWRlcl9fc3RvcHstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSg1MCUpfS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0e3BhZGRpbmctYm90dG9tOjY0cHh9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXR7b3ZlcmZsb3c6dmlzaWJsZTtmbG9hdDpub25lO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbToyMnB4O3dpZHRoOjM2cHg7bWFyZ2luLXRvcDoxNXB4fS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0IC5lbC1pbnB1dF9faW5uZXJ7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OjVweH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dCAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSwuZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dCAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXt0b3A6MzBweDttYXJnaW4tdG9wOi0xcHg7Ym9yZGVyOjFweCBzb2xpZCAjYmZjYmQ5O2xpbmUtaGVpZ2h0OjIwcHg7Ym94LXNpemluZzpib3JkZXItYm94O3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSl9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2V7d2lkdGg6MThweDtyaWdodDoxOHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4fS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0IC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle3dpZHRoOjE5cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0IC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlfi5lbC1pbnB1dCAuZWwtaW5wdXRfX2lubmVye2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0OmhvdmVyIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLC5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0OmhvdmVyIC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle2JvcmRlci1jb2xvcjojODM5MWE1fS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0OmFjdGl2ZSAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSwuZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dDphY3RpdmUgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7Ym9yZGVyLWNvbG9yOiMyMGEwZmZ9LmVsLXNsaWRlcl9fcnVud2F5e3dpZHRoOjEwMCU7aGVpZ2h0OjRweDttYXJnaW46MTZweCAwO2JhY2tncm91bmQtY29sb3I6I2U0ZThmMTtib3JkZXItcmFkaXVzOjNweDtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXNsaWRlcl9fcnVud2F5LnNob3ctaW5wdXR7bWFyZ2luLXJpZ2h0OjE2MHB4O3dpZHRoOmF1dG99LmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZCAuZWwtc2xpZGVyX19iYXIsLmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVkIC5lbC1zbGlkZXJfX2J1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOiNiZmNiZDl9LmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVkIC5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyLmRyYWdnaW5nLC5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZCAuZWwtc2xpZGVyX19idXR0b24td3JhcHBlci5ob3ZlciwuZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWQgLmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXI6aG92ZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZCAuZWwtc2xpZGVyX19idXR0b24uZHJhZ2dpbmcsLmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVkIC5lbC1zbGlkZXJfX2J1dHRvbi5ob3ZlciwuZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWQgLmVsLXNsaWRlcl9fYnV0dG9uOmhvdmVyey1tcy10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtc2xpZGVyX19pbnB1dHtmbG9hdDpyaWdodDttYXJnaW4tdG9wOjNweH0uZWwtc2xpZGVyX19iYXJ7aGVpZ2h0OjRweDtiYWNrZ3JvdW5kLWNvbG9yOiMyMGEwZmY7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7cG9zaXRpb246YWJzb2x1dGV9LmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXJ7d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDE7dG9wOi0xNnB4Oy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3RleHQtYWxpZ246Y2VudGVyOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXI6YWZ0ZXJ7aGVpZ2h0OjEwMCV9LmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXIuaG92ZXIsLmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXI6aG92ZXJ7Y3Vyc29yOi13ZWJraXQtZ3JhYjtjdXJzb3I6Z3JhYn0uZWwtc2xpZGVyX19idXR0b24td3JhcHBlci5kcmFnZ2luZ3tjdXJzb3I6LXdlYmtpdC1ncmFiYmluZztjdXJzb3I6Z3JhYmJpbmd9LmVsLXNsaWRlcl9fYnV0dG9ue3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7YmFja2dyb3VuZC1jb2xvcjojMjBhMGZmO2JvcmRlci1yYWRpdXM6NTAlO3RyYW5zaXRpb246LjJzOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmVsLXNsaWRlcl9fYnV0dG9uLmRyYWdnaW5nLC5lbC1zbGlkZXJfX2J1dHRvbi5ob3ZlciwuZWwtc2xpZGVyX19idXR0b246aG92ZXJ7LW1zLXRyYW5zZm9ybTpzY2FsZSgxLjUpO3RyYW5zZm9ybTpzY2FsZSgxLjUpO2JhY2tncm91bmQtY29sb3I6IzFjOGRlMH0uZWwtc2xpZGVyX19idXR0b24uaG92ZXIsLmVsLXNsaWRlcl9fYnV0dG9uOmhvdmVye2N1cnNvcjotd2Via2l0LWdyYWI7Y3Vyc29yOmdyYWJ9LmVsLXNsaWRlcl9fYnV0dG9uLmRyYWdnaW5ne2N1cnNvcjotd2Via2l0LWdyYWJiaW5nO2N1cnNvcjpncmFiYmluZ30uZWwtc2xpZGVyX19zdG9we3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjRweDtoZWlnaHQ6NHB4O2JvcmRlci1yYWRpdXM6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNiZmNiZDk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfS5lbC1sb2FkaW5nLW1hc2t7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjkpO21hcmdpbjowO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO3RyYW5zaXRpb246b3BhY2l0eSAuM3N9LmVsLWxvYWRpbmctbWFzay5pcy1mdWxsc2NyZWVue3Bvc2l0aW9uOmZpeGVkfS5lbC1sb2FkaW5nLW1hc2suaXMtZnVsbHNjcmVlbiAuZWwtbG9hZGluZy1zcGlubmVye21hcmdpbi10b3A6LTI1cHh9LmVsLWxvYWRpbmctbWFzay5pcy1mdWxsc2NyZWVuIC5lbC1sb2FkaW5nLXNwaW5uZXIgLmNpcmN1bGFye3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHh9LmVsLWxvYWRpbmctc3Bpbm5lcnt0b3A6NTAlO21hcmdpbi10b3A6LTIxcHg7d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZX0uZWwtY29sLXB1bGwtMCwuZWwtY29sLXB1bGwtMSwuZWwtY29sLXB1bGwtMTAsLmVsLWNvbC1wdWxsLTExLC5lbC1jb2wtcHVsbC0xMywuZWwtY29sLXB1bGwtMTQsLmVsLWNvbC1wdWxsLTE1LC5lbC1jb2wtcHVsbC0xNiwuZWwtY29sLXB1bGwtMTcsLmVsLWNvbC1wdWxsLTE4LC5lbC1jb2wtcHVsbC0xOSwuZWwtY29sLXB1bGwtMiwuZWwtY29sLXB1bGwtMjAsLmVsLWNvbC1wdWxsLTIxLC5lbC1jb2wtcHVsbC0yMiwuZWwtY29sLXB1bGwtMjMsLmVsLWNvbC1wdWxsLTI0LC5lbC1jb2wtcHVsbC0zLC5lbC1jb2wtcHVsbC00LC5lbC1jb2wtcHVsbC01LC5lbC1jb2wtcHVsbC02LC5lbC1jb2wtcHVsbC03LC5lbC1jb2wtcHVsbC04LC5lbC1jb2wtcHVsbC05LC5lbC1jb2wtcHVzaC0wLC5lbC1jb2wtcHVzaC0xLC5lbC1jb2wtcHVzaC0xMCwuZWwtY29sLXB1c2gtMTEsLmVsLWNvbC1wdXNoLTEyLC5lbC1jb2wtcHVzaC0xMywuZWwtY29sLXB1c2gtMTQsLmVsLWNvbC1wdXNoLTE1LC5lbC1jb2wtcHVzaC0xNiwuZWwtY29sLXB1c2gtMTcsLmVsLWNvbC1wdXNoLTE4LC5lbC1jb2wtcHVzaC0xOSwuZWwtY29sLXB1c2gtMiwuZWwtY29sLXB1c2gtMjAsLmVsLWNvbC1wdXNoLTIxLC5lbC1jb2wtcHVzaC0yMiwuZWwtY29sLXB1c2gtMjMsLmVsLWNvbC1wdXNoLTI0LC5lbC1jb2wtcHVzaC0zLC5lbC1jb2wtcHVzaC00LC5lbC1jb2wtcHVzaC01LC5lbC1jb2wtcHVzaC02LC5lbC1jb2wtcHVzaC03LC5lbC1jb2wtcHVzaC04LC5lbC1jb2wtcHVzaC05LC5lbC1yb3d7cG9zaXRpb246cmVsYXRpdmV9LmVsLWxvYWRpbmctc3Bpbm5lciAuZWwtbG9hZGluZy10ZXh0e2NvbG9yOiMyMGEwZmY7bWFyZ2luOjNweCAwO2ZvbnQtc2l6ZToxNHB4fS5lbC1sb2FkaW5nLXNwaW5uZXIgLmNpcmN1bGFye3dpZHRoOjQycHg7aGVpZ2h0OjQycHg7YW5pbWF0aW9uOmxvYWRpbmctcm90YXRlIDJzIGxpbmVhciBpbmZpbml0ZX0uZWwtbG9hZGluZy1zcGlubmVyIC5wYXRoe2FuaW1hdGlvbjpsb2FkaW5nLWRhc2ggMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZTtzdHJva2UtZGFzaGFycmF5OjkwLDE1MDtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS13aWR0aDoyO3N0cm9rZTojMjBhMGZmO3N0cm9rZS1saW5lY2FwOnJvdW5kfUBrZXlmcmFtZXMgbG9hZGluZy1yb3RhdGV7MTAwJXt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUBrZXlmcmFtZXMgbG9hZGluZy1kYXNoezAle3N0cm9rZS1kYXNoYXJyYXk6MSwyMDA7c3Ryb2tlLWRhc2hvZmZzZXQ6MH01MCV7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTQwcHh9MTAwJXtzdHJva2UtZGFzaGFycmF5OjkwLDE1MDtzdHJva2UtZGFzaG9mZnNldDotMTIwcHh9fS5lbC1yb3d7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1yb3c6YWZ0ZXIsLmVsLXJvdzpiZWZvcmV7ZGlzcGxheTp0YWJsZX0uZWwtcm93OmFmdGVye2NsZWFyOmJvdGh9LmVsLXJvdy0tZmxleHtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleH0uZWwtcm93LS1mbGV4OmFmdGVyLC5lbC1yb3ctLWZsZXg6YmVmb3Jle2Rpc3BsYXk6bm9uZX0uZWwtcm93LS1mbGV4LmlzLWFsaWduLWJvdHRvbXstbXMtZmxleC1hbGlnbjplbmQ7YWxpZ24taXRlbXM6ZmxleC1lbmR9LmVsLXJvdy0tZmxleC5pcy1hbGlnbi1taWRkbGV7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtcm93LS1mbGV4LmlzLWp1c3RpZnktc3BhY2UtYXJvdW5key1tcy1mbGV4LXBhY2s6ZGlzdHJpYnV0ZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5lbC1yb3ctLWZsZXguaXMtanVzdGlmeS1zcGFjZS1iZXR3ZWVuey1tcy1mbGV4LXBhY2s6anVzdGlmeTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uZWwtcm93LS1mbGV4LmlzLWp1c3RpZnktZW5key1tcy1mbGV4LXBhY2s6ZW5kO2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZWwtcm93LS1mbGV4LmlzLWp1c3RpZnktY2VudGVyey1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmVsLWNvbC0xLC5lbC1jb2wtMTAsLmVsLWNvbC0xMSwuZWwtY29sLTEyLC5lbC1jb2wtMTMsLmVsLWNvbC0xNCwuZWwtY29sLTE1LC5lbC1jb2wtMTYsLmVsLWNvbC0xNywuZWwtY29sLTE4LC5lbC1jb2wtMTksLmVsLWNvbC0yLC5lbC1jb2wtMjAsLmVsLWNvbC0yMSwuZWwtY29sLTIyLC5lbC1jb2wtMjMsLmVsLWNvbC0yNCwuZWwtY29sLTMsLmVsLWNvbC00LC5lbC1jb2wtNSwuZWwtY29sLTYsLmVsLWNvbC03LC5lbC1jb2wtOCwuZWwtY29sLTl7ZmxvYXQ6bGVmdDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWNvbC0we3dpZHRoOjB9LmVsLWNvbC1vZmZzZXQtMHttYXJnaW4tbGVmdDowfS5lbC1jb2wtcHVsbC0we3JpZ2h0OjB9LmVsLWNvbC1wdXNoLTB7bGVmdDowfS5lbC1jb2wtMXt3aWR0aDo0LjE2NjY3JX0uZWwtY29sLW9mZnNldC0xe21hcmdpbi1sZWZ0OjQuMTY2NjclfS5lbC1jb2wtcHVsbC0xe3JpZ2h0OjQuMTY2NjclfS5lbC1jb2wtcHVzaC0xe2xlZnQ6NC4xNjY2NyV9LmVsLWNvbC0ye3dpZHRoOjguMzMzMzMlfS5lbC1jb2wtb2Zmc2V0LTJ7bWFyZ2luLWxlZnQ6OC4zMzMzMyV9LmVsLWNvbC1wdWxsLTJ7cmlnaHQ6OC4zMzMzMyV9LmVsLWNvbC1wdXNoLTJ7bGVmdDo4LjMzMzMzJX0uZWwtY29sLTN7d2lkdGg6MTIuNSV9LmVsLWNvbC1vZmZzZXQtM3ttYXJnaW4tbGVmdDoxMi41JX0uZWwtY29sLXB1bGwtM3tyaWdodDoxMi41JX0uZWwtY29sLXB1c2gtM3tsZWZ0OjEyLjUlfS5lbC1jb2wtNHt3aWR0aDoxNi42NjY2NyV9LmVsLWNvbC1vZmZzZXQtNHttYXJnaW4tbGVmdDoxNi42NjY2NyV9LmVsLWNvbC1wdWxsLTR7cmlnaHQ6MTYuNjY2NjclfS5lbC1jb2wtcHVzaC00e2xlZnQ6MTYuNjY2NjclfS5lbC1jb2wtNXt3aWR0aDoyMC44MzMzMyV9LmVsLWNvbC1vZmZzZXQtNXttYXJnaW4tbGVmdDoyMC44MzMzMyV9LmVsLWNvbC1wdWxsLTV7cmlnaHQ6MjAuODMzMzMlfS5lbC1jb2wtcHVzaC01e2xlZnQ6MjAuODMzMzMlfS5lbC1jb2wtNnt3aWR0aDoyNSV9LmVsLWNvbC1vZmZzZXQtNnttYXJnaW4tbGVmdDoyNSV9LmVsLWNvbC1wdWxsLTZ7cmlnaHQ6MjUlfS5lbC1jb2wtcHVzaC02e2xlZnQ6MjUlfS5lbC1jb2wtN3t3aWR0aDoyOS4xNjY2NyV9LmVsLWNvbC1vZmZzZXQtN3ttYXJnaW4tbGVmdDoyOS4xNjY2NyV9LmVsLWNvbC1wdWxsLTd7cmlnaHQ6MjkuMTY2NjclfS5lbC1jb2wtcHVzaC03e2xlZnQ6MjkuMTY2NjclfS5lbC1jb2wtOHt3aWR0aDozMy4zMzMzMyV9LmVsLWNvbC1vZmZzZXQtOHttYXJnaW4tbGVmdDozMy4zMzMzMyV9LmVsLWNvbC1wdWxsLTh7cmlnaHQ6MzMuMzMzMzMlfS5lbC1jb2wtcHVzaC04e2xlZnQ6MzMuMzMzMzMlfS5lbC1jb2wtOXt3aWR0aDozNy41JX0uZWwtY29sLW9mZnNldC05e21hcmdpbi1sZWZ0OjM3LjUlfS5lbC1jb2wtcHVsbC05e3JpZ2h0OjM3LjUlfS5lbC1jb2wtcHVzaC05e2xlZnQ6MzcuNSV9LmVsLWNvbC0xMHt3aWR0aDo0MS42NjY2NyV9LmVsLWNvbC1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6NDEuNjY2NjclfS5lbC1jb2wtcHVsbC0xMHtyaWdodDo0MS42NjY2NyV9LmVsLWNvbC1wdXNoLTEwe2xlZnQ6NDEuNjY2NjclfS5lbC1jb2wtMTF7d2lkdGg6NDUuODMzMzMlfS5lbC1jb2wtb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLXB1bGwtMTF7cmlnaHQ6NDUuODMzMzMlfS5lbC1jb2wtcHVzaC0xMXtsZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLTEye3dpZHRoOjUwJX0uZWwtY29sLW9mZnNldC0xMnttYXJnaW4tbGVmdDo1MCV9LmVsLWNvbC1wdWxsLTEye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjUwJX0uZWwtY29sLXB1c2gtMTJ7bGVmdDo1MCV9LmVsLWNvbC0xM3t3aWR0aDo1NC4xNjY2NyV9LmVsLWNvbC1vZmZzZXQtMTN7bWFyZ2luLWxlZnQ6NTQuMTY2NjclfS5lbC1jb2wtcHVsbC0xM3tyaWdodDo1NC4xNjY2NyV9LmVsLWNvbC1wdXNoLTEze2xlZnQ6NTQuMTY2NjclfS5lbC1jb2wtMTR7d2lkdGg6NTguMzMzMzMlfS5lbC1jb2wtb2Zmc2V0LTE0e21hcmdpbi1sZWZ0OjU4LjMzMzMzJX0uZWwtY29sLXB1bGwtMTR7cmlnaHQ6NTguMzMzMzMlfS5lbC1jb2wtcHVzaC0xNHtsZWZ0OjU4LjMzMzMzJX0uZWwtY29sLTE1e3dpZHRoOjYyLjUlfS5lbC1jb2wtb2Zmc2V0LTE1e21hcmdpbi1sZWZ0OjYyLjUlfS5lbC1jb2wtcHVsbC0xNXtyaWdodDo2Mi41JX0uZWwtY29sLXB1c2gtMTV7bGVmdDo2Mi41JX0uZWwtY29sLTE2e3dpZHRoOjY2LjY2NjY3JX0uZWwtY29sLW9mZnNldC0xNnttYXJnaW4tbGVmdDo2Ni42NjY2NyV9LmVsLWNvbC1wdWxsLTE2e3JpZ2h0OjY2LjY2NjY3JX0uZWwtY29sLXB1c2gtMTZ7bGVmdDo2Ni42NjY2NyV9LmVsLWNvbC0xN3t3aWR0aDo3MC44MzMzMyV9LmVsLWNvbC1vZmZzZXQtMTd7bWFyZ2luLWxlZnQ6NzAuODMzMzMlfS5lbC1jb2wtcHVsbC0xN3tyaWdodDo3MC44MzMzMyV9LmVsLWNvbC1wdXNoLTE3e2xlZnQ6NzAuODMzMzMlfS5lbC1jb2wtMTh7d2lkdGg6NzUlfS5lbC1jb2wtb2Zmc2V0LTE4e21hcmdpbi1sZWZ0Ojc1JX0uZWwtY29sLXB1bGwtMTh7cmlnaHQ6NzUlfS5lbC1jb2wtcHVzaC0xOHtsZWZ0Ojc1JX0uZWwtY29sLTE5e3dpZHRoOjc5LjE2NjY3JX0uZWwtY29sLW9mZnNldC0xOXttYXJnaW4tbGVmdDo3OS4xNjY2NyV9LmVsLWNvbC1wdWxsLTE5e3JpZ2h0Ojc5LjE2NjY3JX0uZWwtY29sLXB1c2gtMTl7bGVmdDo3OS4xNjY2NyV9LmVsLWNvbC0yMHt3aWR0aDo4My4zMzMzMyV9LmVsLWNvbC1vZmZzZXQtMjB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMlfS5lbC1jb2wtcHVsbC0yMHtyaWdodDo4My4zMzMzMyV9LmVsLWNvbC1wdXNoLTIwe2xlZnQ6ODMuMzMzMzMlfS5lbC1jb2wtMjF7d2lkdGg6ODcuNSV9LmVsLWNvbC1vZmZzZXQtMjF7bWFyZ2luLWxlZnQ6ODcuNSV9LmVsLWNvbC1wdWxsLTIxe3JpZ2h0Ojg3LjUlfS5lbC1jb2wtcHVzaC0yMXtsZWZ0Ojg3LjUlfS5lbC1jb2wtMjJ7d2lkdGg6OTEuNjY2NjclfS5lbC1jb2wtb2Zmc2V0LTIye21hcmdpbi1sZWZ0OjkxLjY2NjY3JX0uZWwtY29sLXB1bGwtMjJ7cmlnaHQ6OTEuNjY2NjclfS5lbC1jb2wtcHVzaC0yMntsZWZ0OjkxLjY2NjY3JX0uZWwtY29sLTIze3dpZHRoOjk1LjgzMzMzJX0uZWwtY29sLW9mZnNldC0yM3ttYXJnaW4tbGVmdDo5NS44MzMzMyV9LmVsLWNvbC1wdWxsLTIze3JpZ2h0Ojk1LjgzMzMzJX0uZWwtY29sLXB1c2gtMjN7bGVmdDo5NS44MzMzMyV9LmVsLWNvbC0yNHt3aWR0aDoxMDAlfS5lbC1jb2wtb2Zmc2V0LTI0e21hcmdpbi1sZWZ0OjEwMCV9LmVsLWNvbC1wdWxsLTI0e3JpZ2h0OjEwMCV9LmVsLWNvbC1wdXNoLTI0e2xlZnQ6MTAwJX1AbWVkaWEgKG1heC13aWR0aDo3NjhweCl7LmVsLWNvbC14cy0we3dpZHRoOjB9LmVsLWNvbC14cy1vZmZzZXQtMHttYXJnaW4tbGVmdDowfS5lbC1jb2wteHMtcHVsbC0we3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjB9LmVsLWNvbC14cy1wdXNoLTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowfS5lbC1jb2wteHMtMXt3aWR0aDo0LjE2NjY3JX0uZWwtY29sLXhzLW9mZnNldC0xe21hcmdpbi1sZWZ0OjQuMTY2NjclfS5lbC1jb2wteHMtcHVsbC0xe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQuMTY2NjclfS5lbC1jb2wteHMtcHVzaC0xe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NC4xNjY2NyV9LmVsLWNvbC14cy0ye3dpZHRoOjguMzMzMzMlfS5lbC1jb2wteHMtb2Zmc2V0LTJ7bWFyZ2luLWxlZnQ6OC4zMzMzMyV9LmVsLWNvbC14cy1wdWxsLTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OC4zMzMzMyV9LmVsLWNvbC14cy1wdXNoLTJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4LjMzMzMzJX0uZWwtY29sLXhzLTN7d2lkdGg6MTIuNSV9LmVsLWNvbC14cy1vZmZzZXQtM3ttYXJnaW4tbGVmdDoxMi41JX0uZWwtY29sLXhzLXB1bGwtM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMi41JX0uZWwtY29sLXhzLXB1c2gtM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEyLjUlfS5lbC1jb2wteHMtNHt3aWR0aDoxNi42NjY2NyV9LmVsLWNvbC14cy1vZmZzZXQtNHttYXJnaW4tbGVmdDoxNi42NjY2NyV9LmVsLWNvbC14cy1wdWxsLTR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTYuNjY2NjclfS5lbC1jb2wteHMtcHVzaC00e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTYuNjY2NjclfS5lbC1jb2wteHMtNXt3aWR0aDoyMC44MzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtNXttYXJnaW4tbGVmdDoyMC44MzMzMyV9LmVsLWNvbC14cy1wdWxsLTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjAuODMzMzMlfS5lbC1jb2wteHMtcHVzaC01e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjAuODMzMzMlfS5lbC1jb2wteHMtNnt3aWR0aDoyNSV9LmVsLWNvbC14cy1vZmZzZXQtNnttYXJnaW4tbGVmdDoyNSV9LmVsLWNvbC14cy1wdWxsLTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjUlfS5lbC1jb2wteHMtcHVzaC02e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjUlfS5lbC1jb2wteHMtN3t3aWR0aDoyOS4xNjY2NyV9LmVsLWNvbC14cy1vZmZzZXQtN3ttYXJnaW4tbGVmdDoyOS4xNjY2NyV9LmVsLWNvbC14cy1wdWxsLTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjkuMTY2NjclfS5lbC1jb2wteHMtcHVzaC03e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjkuMTY2NjclfS5lbC1jb2wteHMtOHt3aWR0aDozMy4zMzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtOHttYXJnaW4tbGVmdDozMy4zMzMzMyV9LmVsLWNvbC14cy1wdWxsLTh7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzMuMzMzMzMlfS5lbC1jb2wteHMtcHVzaC04e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzMuMzMzMzMlfS5lbC1jb2wteHMtOXt3aWR0aDozNy41JX0uZWwtY29sLXhzLW9mZnNldC05e21hcmdpbi1sZWZ0OjM3LjUlfS5lbC1jb2wteHMtcHVsbC05e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjM3LjUlfS5lbC1jb2wteHMtcHVzaC05e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzcuNSV9LmVsLWNvbC14cy0xMHt3aWR0aDo0MS42NjY2NyV9LmVsLWNvbC14cy1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6NDEuNjY2NjclfS5lbC1jb2wteHMtcHVsbC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0MS42NjY2NyV9LmVsLWNvbC14cy1wdXNoLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDEuNjY2NjclfS5lbC1jb2wteHMtMTF7d2lkdGg6NDUuODMzMzMlfS5lbC1jb2wteHMtb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLXhzLXB1bGwtMTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDUuODMzMzMlfS5lbC1jb2wteHMtcHVzaC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLXhzLTEye3dpZHRoOjUwJX0uZWwtY29sLXhzLW9mZnNldC0xMnttYXJnaW4tbGVmdDo1MCV9LmVsLWNvbC14cy1wdWxsLTEye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjUwJX0uZWwtY29sLXhzLXB1c2gtMTJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MCV9LmVsLWNvbC14cy0xM3t3aWR0aDo1NC4xNjY2NyV9LmVsLWNvbC14cy1vZmZzZXQtMTN7bWFyZ2luLWxlZnQ6NTQuMTY2NjclfS5lbC1jb2wteHMtcHVsbC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1NC4xNjY2NyV9LmVsLWNvbC14cy1wdXNoLTEze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTQuMTY2NjclfS5lbC1jb2wteHMtMTR7d2lkdGg6NTguMzMzMzMlfS5lbC1jb2wteHMtb2Zmc2V0LTE0e21hcmdpbi1sZWZ0OjU4LjMzMzMzJX0uZWwtY29sLXhzLXB1bGwtMTR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTguMzMzMzMlfS5lbC1jb2wteHMtcHVzaC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU4LjMzMzMzJX0uZWwtY29sLXhzLTE1e3dpZHRoOjYyLjUlfS5lbC1jb2wteHMtb2Zmc2V0LTE1e21hcmdpbi1sZWZ0OjYyLjUlfS5lbC1jb2wteHMtcHVsbC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Mi41JX0uZWwtY29sLXhzLXB1c2gtMTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo2Mi41JX0uZWwtY29sLXhzLTE2e3dpZHRoOjY2LjY2NjY3JX0uZWwtY29sLXhzLW9mZnNldC0xNnttYXJnaW4tbGVmdDo2Ni42NjY2NyV9LmVsLWNvbC14cy1wdWxsLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjY2LjY2NjY3JX0uZWwtY29sLXhzLXB1c2gtMTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo2Ni42NjY2NyV9LmVsLWNvbC14cy0xN3t3aWR0aDo3MC44MzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtMTd7bWFyZ2luLWxlZnQ6NzAuODMzMzMlfS5lbC1jb2wteHMtcHVsbC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3MC44MzMzMyV9LmVsLWNvbC14cy1wdXNoLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzAuODMzMzMlfS5lbC1jb2wteHMtMTh7d2lkdGg6NzUlfS5lbC1jb2wteHMtb2Zmc2V0LTE4e21hcmdpbi1sZWZ0Ojc1JX0uZWwtY29sLXhzLXB1bGwtMTh7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzUlfS5lbC1jb2wteHMtcHVzaC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc1JX0uZWwtY29sLXhzLTE5e3dpZHRoOjc5LjE2NjY3JX0uZWwtY29sLXhzLW9mZnNldC0xOXttYXJnaW4tbGVmdDo3OS4xNjY2NyV9LmVsLWNvbC14cy1wdWxsLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc5LjE2NjY3JX0uZWwtY29sLXhzLXB1c2gtMTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3OS4xNjY2NyV9LmVsLWNvbC14cy0yMHt3aWR0aDo4My4zMzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtMjB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMlfS5lbC1jb2wteHMtcHVsbC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4My4zMzMzMyV9LmVsLWNvbC14cy1wdXNoLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODMuMzMzMzMlfS5lbC1jb2wteHMtMjF7d2lkdGg6ODcuNSV9LmVsLWNvbC14cy1vZmZzZXQtMjF7bWFyZ2luLWxlZnQ6ODcuNSV9LmVsLWNvbC14cy1wdWxsLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojg3LjUlfS5lbC1jb2wteHMtcHVzaC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojg3LjUlfS5lbC1jb2wteHMtMjJ7d2lkdGg6OTEuNjY2NjclfS5lbC1jb2wteHMtb2Zmc2V0LTIye21hcmdpbi1sZWZ0OjkxLjY2NjY3JX0uZWwtY29sLXhzLXB1bGwtMjJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTEuNjY2NjclfS5lbC1jb2wteHMtcHVzaC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjkxLjY2NjY3JX0uZWwtY29sLXhzLTIze3dpZHRoOjk1LjgzMzMzJX0uZWwtY29sLXhzLW9mZnNldC0yM3ttYXJnaW4tbGVmdDo5NS44MzMzMyV9LmVsLWNvbC14cy1wdWxsLTIze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojk1LjgzMzMzJX0uZWwtY29sLXhzLXB1c2gtMjN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5NS44MzMzMyV9LmVsLWNvbC14cy0yNHt3aWR0aDoxMDAlfS5lbC1jb2wteHMtb2Zmc2V0LTI0e21hcmdpbi1sZWZ0OjEwMCV9LmVsLWNvbC14cy1wdWxsLTI0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEwMCV9LmVsLWNvbC14cy1wdXNoLTI0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTAwJX19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5lbC1jb2wtc20tMHt3aWR0aDowfS5lbC1jb2wtc20tb2Zmc2V0LTB7bWFyZ2luLWxlZnQ6MH0uZWwtY29sLXNtLXB1bGwtMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDowfS5lbC1jb2wtc20tcHVzaC0we3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MH0uZWwtY29sLXNtLTF7d2lkdGg6NC4xNjY2NyV9LmVsLWNvbC1zbS1vZmZzZXQtMXttYXJnaW4tbGVmdDo0LjE2NjY3JX0uZWwtY29sLXNtLXB1bGwtMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0LjE2NjY3JX0uZWwtY29sLXNtLXB1c2gtMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQuMTY2NjclfS5lbC1jb2wtc20tMnt3aWR0aDo4LjMzMzMzJX0uZWwtY29sLXNtLW9mZnNldC0ye21hcmdpbi1sZWZ0OjguMzMzMzMlfS5lbC1jb2wtc20tcHVsbC0ye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjguMzMzMzMlfS5lbC1jb2wtc20tcHVzaC0ye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OC4zMzMzMyV9LmVsLWNvbC1zbS0ze3dpZHRoOjEyLjUlfS5lbC1jb2wtc20tb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MTIuNSV9LmVsLWNvbC1zbS1wdWxsLTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTIuNSV9LmVsLWNvbC1zbS1wdXNoLTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMi41JX0uZWwtY29sLXNtLTR7d2lkdGg6MTYuNjY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MTYuNjY2NjclfS5lbC1jb2wtc20tcHVsbC00e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjE2LjY2NjY3JX0uZWwtY29sLXNtLXB1c2gtNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjE2LjY2NjY3JX0uZWwtY29sLXNtLTV7d2lkdGg6MjAuODMzMzMlfS5lbC1jb2wtc20tb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6MjAuODMzMzMlfS5lbC1jb2wtc20tcHVsbC01e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjIwLjgzMzMzJX0uZWwtY29sLXNtLXB1c2gtNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjIwLjgzMzMzJX0uZWwtY29sLXNtLTZ7d2lkdGg6MjUlfS5lbC1jb2wtc20tb2Zmc2V0LTZ7bWFyZ2luLWxlZnQ6MjUlfS5lbC1jb2wtc20tcHVsbC02e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI1JX0uZWwtY29sLXNtLXB1c2gtNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI1JX0uZWwtY29sLXNtLTd7d2lkdGg6MjkuMTY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTd7bWFyZ2luLWxlZnQ6MjkuMTY2NjclfS5lbC1jb2wtc20tcHVsbC03e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI5LjE2NjY3JX0uZWwtY29sLXNtLXB1c2gtN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI5LjE2NjY3JX0uZWwtY29sLXNtLTh7d2lkdGg6MzMuMzMzMzMlfS5lbC1jb2wtc20tb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6MzMuMzMzMzMlfS5lbC1jb2wtc20tcHVsbC04e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjMzLjMzMzMzJX0uZWwtY29sLXNtLXB1c2gtOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjMzLjMzMzMzJX0uZWwtY29sLXNtLTl7d2lkdGg6MzcuNSV9LmVsLWNvbC1zbS1vZmZzZXQtOXttYXJnaW4tbGVmdDozNy41JX0uZWwtY29sLXNtLXB1bGwtOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozNy41JX0uZWwtY29sLXNtLXB1c2gtOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjM3LjUlfS5lbC1jb2wtc20tMTB7d2lkdGg6NDEuNjY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTEwe21hcmdpbi1sZWZ0OjQxLjY2NjY3JX0uZWwtY29sLXNtLXB1bGwtMTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDEuNjY2NjclfS5lbC1jb2wtc20tcHVzaC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQxLjY2NjY3JX0uZWwtY29sLXNtLTExe3dpZHRoOjQ1LjgzMzMzJX0uZWwtY29sLXNtLW9mZnNldC0xMXttYXJnaW4tbGVmdDo0NS44MzMzMyV9LmVsLWNvbC1zbS1wdWxsLTExe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQ1LjgzMzMzJX0uZWwtY29sLXNtLXB1c2gtMTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0NS44MzMzMyV9LmVsLWNvbC1zbS0xMnt3aWR0aDo1MCV9LmVsLWNvbC1zbS1vZmZzZXQtMTJ7bWFyZ2luLWxlZnQ6NTAlfS5lbC1jb2wtc20tcHVsbC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1MCV9LmVsLWNvbC1zbS1wdXNoLTEye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTAlfS5lbC1jb2wtc20tMTN7d2lkdGg6NTQuMTY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTEze21hcmdpbi1sZWZ0OjU0LjE2NjY3JX0uZWwtY29sLXNtLXB1bGwtMTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTQuMTY2NjclfS5lbC1jb2wtc20tcHVzaC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU0LjE2NjY3JX0uZWwtY29sLXNtLTE0e3dpZHRoOjU4LjMzMzMzJX0uZWwtY29sLXNtLW9mZnNldC0xNHttYXJnaW4tbGVmdDo1OC4zMzMzMyV9LmVsLWNvbC1zbS1wdWxsLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU4LjMzMzMzJX0uZWwtY29sLXNtLXB1c2gtMTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1OC4zMzMzMyV9LmVsLWNvbC1zbS0xNXt3aWR0aDo2Mi41JX0uZWwtY29sLXNtLW9mZnNldC0xNXttYXJnaW4tbGVmdDo2Mi41JX0uZWwtY29sLXNtLXB1bGwtMTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjIuNSV9LmVsLWNvbC1zbS1wdXNoLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjIuNSV9LmVsLWNvbC1zbS0xNnt3aWR0aDo2Ni42NjY2NyV9LmVsLWNvbC1zbS1vZmZzZXQtMTZ7bWFyZ2luLWxlZnQ6NjYuNjY2NjclfS5lbC1jb2wtc20tcHVsbC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Ni42NjY2NyV9LmVsLWNvbC1zbS1wdXNoLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjYuNjY2NjclfS5lbC1jb2wtc20tMTd7d2lkdGg6NzAuODMzMzMlfS5lbC1jb2wtc20tb2Zmc2V0LTE3e21hcmdpbi1sZWZ0OjcwLjgzMzMzJX0uZWwtY29sLXNtLXB1bGwtMTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzAuODMzMzMlfS5lbC1jb2wtc20tcHVzaC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjcwLjgzMzMzJX0uZWwtY29sLXNtLTE4e3dpZHRoOjc1JX0uZWwtY29sLXNtLW9mZnNldC0xOHttYXJnaW4tbGVmdDo3NSV9LmVsLWNvbC1zbS1wdWxsLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc1JX0uZWwtY29sLXNtLXB1c2gtMTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3NSV9LmVsLWNvbC1zbS0xOXt3aWR0aDo3OS4xNjY2NyV9LmVsLWNvbC1zbS1vZmZzZXQtMTl7bWFyZ2luLWxlZnQ6NzkuMTY2NjclfS5lbC1jb2wtc20tcHVsbC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3OS4xNjY2NyV9LmVsLWNvbC1zbS1wdXNoLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzkuMTY2NjclfS5lbC1jb2wtc20tMjB7d2lkdGg6ODMuMzMzMzMlfS5lbC1jb2wtc20tb2Zmc2V0LTIwe21hcmdpbi1sZWZ0OjgzLjMzMzMzJX0uZWwtY29sLXNtLXB1bGwtMjB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODMuMzMzMzMlfS5lbC1jb2wtc20tcHVzaC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjgzLjMzMzMzJX0uZWwtY29sLXNtLTIxe3dpZHRoOjg3LjUlfS5lbC1jb2wtc20tb2Zmc2V0LTIxe21hcmdpbi1sZWZ0Ojg3LjUlfS5lbC1jb2wtc20tcHVsbC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4Ny41JX0uZWwtY29sLXNtLXB1c2gtMjF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4Ny41JX0uZWwtY29sLXNtLTIye3dpZHRoOjkxLjY2NjY3JX0uZWwtY29sLXNtLW9mZnNldC0yMnttYXJnaW4tbGVmdDo5MS42NjY2NyV9LmVsLWNvbC1zbS1wdWxsLTIye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjkxLjY2NjY3JX0uZWwtY29sLXNtLXB1c2gtMjJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5MS42NjY2NyV9LmVsLWNvbC1zbS0yM3t3aWR0aDo5NS44MzMzMyV9LmVsLWNvbC1zbS1vZmZzZXQtMjN7bWFyZ2luLWxlZnQ6OTUuODMzMzMlfS5lbC1jb2wtc20tcHVsbC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5NS44MzMzMyV9LmVsLWNvbC1zbS1wdXNoLTIze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTUuODMzMzMlfS5lbC1jb2wtc20tMjR7d2lkdGg6MTAwJX0uZWwtY29sLXNtLW9mZnNldC0yNHttYXJnaW4tbGVmdDoxMDAlfS5lbC1jb2wtc20tcHVsbC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMDAlfS5lbC1jb2wtc20tcHVzaC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEwMCV9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuZWwtY29sLW1kLTB7d2lkdGg6MH0uZWwtY29sLW1kLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9LmVsLWNvbC1tZC1wdWxsLTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MH0uZWwtY29sLW1kLXB1c2gtMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjB9LmVsLWNvbC1tZC0xe3dpZHRoOjQuMTY2NjclfS5lbC1jb2wtbWQtb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6NC4xNjY2NyV9LmVsLWNvbC1tZC1wdWxsLTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NC4xNjY2NyV9LmVsLWNvbC1tZC1wdXNoLTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0LjE2NjY3JX0uZWwtY29sLW1kLTJ7d2lkdGg6OC4zMzMzMyV9LmVsLWNvbC1tZC1vZmZzZXQtMnttYXJnaW4tbGVmdDo4LjMzMzMzJX0uZWwtY29sLW1kLXB1bGwtMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4LjMzMzMzJX0uZWwtY29sLW1kLXB1c2gtMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjguMzMzMzMlfS5lbC1jb2wtbWQtM3t3aWR0aDoxMi41JX0uZWwtY29sLW1kLW9mZnNldC0ze21hcmdpbi1sZWZ0OjEyLjUlfS5lbC1jb2wtbWQtcHVsbC0ze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEyLjUlfS5lbC1jb2wtbWQtcHVzaC0ze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTIuNSV9LmVsLWNvbC1tZC00e3dpZHRoOjE2LjY2NjY3JX0uZWwtY29sLW1kLW9mZnNldC00e21hcmdpbi1sZWZ0OjE2LjY2NjY3JX0uZWwtY29sLW1kLXB1bGwtNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxNi42NjY2NyV9LmVsLWNvbC1tZC1wdXNoLTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxNi42NjY2NyV9LmVsLWNvbC1tZC01e3dpZHRoOjIwLjgzMzMzJX0uZWwtY29sLW1kLW9mZnNldC01e21hcmdpbi1sZWZ0OjIwLjgzMzMzJX0uZWwtY29sLW1kLXB1bGwtNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyMC44MzMzMyV9LmVsLWNvbC1tZC1wdXNoLTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyMC44MzMzMyV9LmVsLWNvbC1tZC02e3dpZHRoOjI1JX0uZWwtY29sLW1kLW9mZnNldC02e21hcmdpbi1sZWZ0OjI1JX0uZWwtY29sLW1kLXB1bGwtNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyNSV9LmVsLWNvbC1tZC1wdXNoLTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyNSV9LmVsLWNvbC1tZC03e3dpZHRoOjI5LjE2NjY3JX0uZWwtY29sLW1kLW9mZnNldC03e21hcmdpbi1sZWZ0OjI5LjE2NjY3JX0uZWwtY29sLW1kLXB1bGwtN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyOS4xNjY2NyV9LmVsLWNvbC1tZC1wdXNoLTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyOS4xNjY2NyV9LmVsLWNvbC1tZC04e3dpZHRoOjMzLjMzMzMzJX0uZWwtY29sLW1kLW9mZnNldC04e21hcmdpbi1sZWZ0OjMzLjMzMzMzJX0uZWwtY29sLW1kLXB1bGwtOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozMy4zMzMzMyV9LmVsLWNvbC1tZC1wdXNoLTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozMy4zMzMzMyV9LmVsLWNvbC1tZC05e3dpZHRoOjM3LjUlfS5lbC1jb2wtbWQtb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6MzcuNSV9LmVsLWNvbC1tZC1wdWxsLTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzcuNSV9LmVsLWNvbC1tZC1wdXNoLTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozNy41JX0uZWwtY29sLW1kLTEwe3dpZHRoOjQxLjY2NjY3JX0uZWwtY29sLW1kLW9mZnNldC0xMHttYXJnaW4tbGVmdDo0MS42NjY2NyV9LmVsLWNvbC1tZC1wdWxsLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQxLjY2NjY3JX0uZWwtY29sLW1kLXB1c2gtMTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0MS42NjY2NyV9LmVsLWNvbC1tZC0xMXt3aWR0aDo0NS44MzMzMyV9LmVsLWNvbC1tZC1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6NDUuODMzMzMlfS5lbC1jb2wtbWQtcHVsbC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0NS44MzMzMyV9LmVsLWNvbC1tZC1wdXNoLTExe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDUuODMzMzMlfS5lbC1jb2wtbWQtMTJ7d2lkdGg6NTAlfS5lbC1jb2wtbWQtb2Zmc2V0LTEye21hcmdpbi1sZWZ0OjUwJX0uZWwtY29sLW1kLXB1bGwtMTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTAlfS5lbC1jb2wtbWQtcHVzaC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjUwJX0uZWwtY29sLW1kLTEze3dpZHRoOjU0LjE2NjY3JX0uZWwtY29sLW1kLW9mZnNldC0xM3ttYXJnaW4tbGVmdDo1NC4xNjY2NyV9LmVsLWNvbC1tZC1wdWxsLTEze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU0LjE2NjY3JX0uZWwtY29sLW1kLXB1c2gtMTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1NC4xNjY2NyV9LmVsLWNvbC1tZC0xNHt3aWR0aDo1OC4zMzMzMyV9LmVsLWNvbC1tZC1vZmZzZXQtMTR7bWFyZ2luLWxlZnQ6NTguMzMzMzMlfS5lbC1jb2wtbWQtcHVsbC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1OC4zMzMzMyV9LmVsLWNvbC1tZC1wdXNoLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTguMzMzMzMlfS5lbC1jb2wtbWQtMTV7d2lkdGg6NjIuNSV9LmVsLWNvbC1tZC1vZmZzZXQtMTV7bWFyZ2luLWxlZnQ6NjIuNSV9LmVsLWNvbC1tZC1wdWxsLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjYyLjUlfS5lbC1jb2wtbWQtcHVzaC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjYyLjUlfS5lbC1jb2wtbWQtMTZ7d2lkdGg6NjYuNjY2NjclfS5lbC1jb2wtbWQtb2Zmc2V0LTE2e21hcmdpbi1sZWZ0OjY2LjY2NjY3JX0uZWwtY29sLW1kLXB1bGwtMTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjYuNjY2NjclfS5lbC1jb2wtbWQtcHVzaC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjY2LjY2NjY3JX0uZWwtY29sLW1kLTE3e3dpZHRoOjcwLjgzMzMzJX0uZWwtY29sLW1kLW9mZnNldC0xN3ttYXJnaW4tbGVmdDo3MC44MzMzMyV9LmVsLWNvbC1tZC1wdWxsLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjcwLjgzMzMzJX0uZWwtY29sLW1kLXB1c2gtMTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3MC44MzMzMyV9LmVsLWNvbC1tZC0xOHt3aWR0aDo3NSV9LmVsLWNvbC1tZC1vZmZzZXQtMTh7bWFyZ2luLWxlZnQ6NzUlfS5lbC1jb2wtbWQtcHVsbC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3NSV9LmVsLWNvbC1tZC1wdXNoLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzUlfS5lbC1jb2wtbWQtMTl7d2lkdGg6NzkuMTY2NjclfS5lbC1jb2wtbWQtb2Zmc2V0LTE5e21hcmdpbi1sZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLW1kLXB1bGwtMTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzkuMTY2NjclfS5lbC1jb2wtbWQtcHVzaC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLW1kLTIwe3dpZHRoOjgzLjMzMzMzJX0uZWwtY29sLW1kLW9mZnNldC0yMHttYXJnaW4tbGVmdDo4My4zMzMzMyV9LmVsLWNvbC1tZC1wdWxsLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjgzLjMzMzMzJX0uZWwtY29sLW1kLXB1c2gtMjB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4My4zMzMzMyV9LmVsLWNvbC1tZC0yMXt3aWR0aDo4Ny41JX0uZWwtY29sLW1kLW9mZnNldC0yMXttYXJnaW4tbGVmdDo4Ny41JX0uZWwtY29sLW1kLXB1bGwtMjF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODcuNSV9LmVsLWNvbC1tZC1wdXNoLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODcuNSV9LmVsLWNvbC1tZC0yMnt3aWR0aDo5MS42NjY2NyV9LmVsLWNvbC1tZC1vZmZzZXQtMjJ7bWFyZ2luLWxlZnQ6OTEuNjY2NjclfS5lbC1jb2wtbWQtcHVsbC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5MS42NjY2NyV9LmVsLWNvbC1tZC1wdXNoLTIye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTEuNjY2NjclfS5lbC1jb2wtbWQtMjN7d2lkdGg6OTUuODMzMzMlfS5lbC1jb2wtbWQtb2Zmc2V0LTIze21hcmdpbi1sZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLW1kLXB1bGwtMjN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTUuODMzMzMlfS5lbC1jb2wtbWQtcHVzaC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLW1kLTI0e3dpZHRoOjEwMCV9LmVsLWNvbC1tZC1vZmZzZXQtMjR7bWFyZ2luLWxlZnQ6MTAwJX0uZWwtY29sLW1kLXB1bGwtMjR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTAwJX0uZWwtY29sLW1kLXB1c2gtMjR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMDAlfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5lbC1jb2wtbGctMHt3aWR0aDowfS5lbC1jb2wtbGctb2Zmc2V0LTB7bWFyZ2luLWxlZnQ6MH0uZWwtY29sLWxnLXB1bGwtMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDowfS5lbC1jb2wtbGctcHVzaC0we3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MH0uZWwtY29sLWxnLTF7d2lkdGg6NC4xNjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtMXttYXJnaW4tbGVmdDo0LjE2NjY3JX0uZWwtY29sLWxnLXB1bGwtMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0LjE2NjY3JX0uZWwtY29sLWxnLXB1c2gtMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQuMTY2NjclfS5lbC1jb2wtbGctMnt3aWR0aDo4LjMzMzMzJX0uZWwtY29sLWxnLW9mZnNldC0ye21hcmdpbi1sZWZ0OjguMzMzMzMlfS5lbC1jb2wtbGctcHVsbC0ye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjguMzMzMzMlfS5lbC1jb2wtbGctcHVzaC0ye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OC4zMzMzMyV9LmVsLWNvbC1sZy0ze3dpZHRoOjEyLjUlfS5lbC1jb2wtbGctb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MTIuNSV9LmVsLWNvbC1sZy1wdWxsLTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTIuNSV9LmVsLWNvbC1sZy1wdXNoLTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMi41JX0uZWwtY29sLWxnLTR7d2lkdGg6MTYuNjY2NjclfS5lbC1jb2wtbGctb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MTYuNjY2NjclfS5lbC1jb2wtbGctcHVsbC00e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjE2LjY2NjY3JX0uZWwtY29sLWxnLXB1c2gtNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjE2LjY2NjY3JX0uZWwtY29sLWxnLTV7d2lkdGg6MjAuODMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6MjAuODMzMzMlfS5lbC1jb2wtbGctcHVsbC01e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjIwLjgzMzMzJX0uZWwtY29sLWxnLXB1c2gtNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjIwLjgzMzMzJX0uZWwtY29sLWxnLTZ7d2lkdGg6MjUlfS5lbC1jb2wtbGctb2Zmc2V0LTZ7bWFyZ2luLWxlZnQ6MjUlfS5lbC1jb2wtbGctcHVsbC02e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI1JX0uZWwtY29sLWxnLXB1c2gtNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI1JX0uZWwtY29sLWxnLTd7d2lkdGg6MjkuMTY2NjclfS5lbC1jb2wtbGctb2Zmc2V0LTd7bWFyZ2luLWxlZnQ6MjkuMTY2NjclfS5lbC1jb2wtbGctcHVsbC03e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI5LjE2NjY3JX0uZWwtY29sLWxnLXB1c2gtN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI5LjE2NjY3JX0uZWwtY29sLWxnLTh7d2lkdGg6MzMuMzMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6MzMuMzMzMzMlfS5lbC1jb2wtbGctcHVsbC04e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjMzLjMzMzMzJX0uZWwtY29sLWxnLXB1c2gtOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjMzLjMzMzMzJX0uZWwtY29sLWxnLTl7d2lkdGg6MzcuNSV9LmVsLWNvbC1sZy1vZmZzZXQtOXttYXJnaW4tbGVmdDozNy41JX0uZWwtY29sLWxnLXB1bGwtOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozNy41JX0uZWwtY29sLWxnLXB1c2gtOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjM3LjUlfS5lbC1jb2wtbGctMTB7d2lkdGg6NDEuNjY2NjclfS5lbC1jb2wtbGctb2Zmc2V0LTEwe21hcmdpbi1sZWZ0OjQxLjY2NjY3JX0uZWwtY29sLWxnLXB1bGwtMTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDEuNjY2NjclfS5lbC1jb2wtbGctcHVzaC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQxLjY2NjY3JX0uZWwtY29sLWxnLTExe3dpZHRoOjQ1LjgzMzMzJX0uZWwtY29sLWxnLW9mZnNldC0xMXttYXJnaW4tbGVmdDo0NS44MzMzMyV9LmVsLWNvbC1sZy1wdWxsLTExe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQ1LjgzMzMzJX0uZWwtY29sLWxnLXB1c2gtMTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0NS44MzMzMyV9LmVsLWNvbC1sZy0xMnt3aWR0aDo1MCV9LmVsLWNvbC1sZy1vZmZzZXQtMTJ7bWFyZ2luLWxlZnQ6NTAlfS5lbC1jb2wtbGctcHVsbC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1MCV9LmVsLWNvbC1sZy1wdXNoLTEye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTAlfS5lbC1jb2wtbGctMTN7d2lkdGg6NTQuMTY2NjclfS5lbC1jb2wtbGctb2Zmc2V0LTEze21hcmdpbi1sZWZ0OjU0LjE2NjY3JX0uZWwtY29sLWxnLXB1bGwtMTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTQuMTY2NjclfS5lbC1jb2wtbGctcHVzaC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU0LjE2NjY3JX0uZWwtY29sLWxnLTE0e3dpZHRoOjU4LjMzMzMzJX0uZWwtY29sLWxnLW9mZnNldC0xNHttYXJnaW4tbGVmdDo1OC4zMzMzMyV9LmVsLWNvbC1sZy1wdWxsLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU4LjMzMzMzJX0uZWwtY29sLWxnLXB1c2gtMTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1OC4zMzMzMyV9LmVsLWNvbC1sZy0xNXt3aWR0aDo2Mi41JX0uZWwtY29sLWxnLW9mZnNldC0xNXttYXJnaW4tbGVmdDo2Mi41JX0uZWwtY29sLWxnLXB1bGwtMTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjIuNSV9LmVsLWNvbC1sZy1wdXNoLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjIuNSV9LmVsLWNvbC1sZy0xNnt3aWR0aDo2Ni42NjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtMTZ7bWFyZ2luLWxlZnQ6NjYuNjY2NjclfS5lbC1jb2wtbGctcHVsbC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Ni42NjY2NyV9LmVsLWNvbC1sZy1wdXNoLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjYuNjY2NjclfS5lbC1jb2wtbGctMTd7d2lkdGg6NzAuODMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTE3e21hcmdpbi1sZWZ0OjcwLjgzMzMzJX0uZWwtY29sLWxnLXB1bGwtMTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzAuODMzMzMlfS5lbC1jb2wtbGctcHVzaC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjcwLjgzMzMzJX0uZWwtY29sLWxnLTE4e3dpZHRoOjc1JX0uZWwtY29sLWxnLW9mZnNldC0xOHttYXJnaW4tbGVmdDo3NSV9LmVsLWNvbC1sZy1wdWxsLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc1JX0uZWwtY29sLWxnLXB1c2gtMTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3NSV9LmVsLWNvbC1sZy0xOXt3aWR0aDo3OS4xNjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtMTl7bWFyZ2luLWxlZnQ6NzkuMTY2NjclfS5lbC1jb2wtbGctcHVsbC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3OS4xNjY2NyV9LmVsLWNvbC1sZy1wdXNoLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzkuMTY2NjclfS5lbC1jb2wtbGctMjB7d2lkdGg6ODMuMzMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTIwe21hcmdpbi1sZWZ0OjgzLjMzMzMzJX0uZWwtY29sLWxnLXB1bGwtMjB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODMuMzMzMzMlfS5lbC1jb2wtbGctcHVzaC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjgzLjMzMzMzJX0uZWwtY29sLWxnLTIxe3dpZHRoOjg3LjUlfS5lbC1jb2wtbGctb2Zmc2V0LTIxe21hcmdpbi1sZWZ0Ojg3LjUlfS5lbC1jb2wtbGctcHVsbC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4Ny41JX0uZWwtY29sLWxnLXB1c2gtMjF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4Ny41JX0uZWwtY29sLWxnLTIye3dpZHRoOjkxLjY2NjY3JX0uZWwtY29sLWxnLW9mZnNldC0yMnttYXJnaW4tbGVmdDo5MS42NjY2NyV9LmVsLWNvbC1sZy1wdWxsLTIye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjkxLjY2NjY3JX0uZWwtY29sLWxnLXB1c2gtMjJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5MS42NjY2NyV9LmVsLWNvbC1sZy0yM3t3aWR0aDo5NS44MzMzMyV9LmVsLWNvbC1sZy1vZmZzZXQtMjN7bWFyZ2luLWxlZnQ6OTUuODMzMzMlfS5lbC1jb2wtbGctcHVsbC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5NS44MzMzMyV9LmVsLWNvbC1sZy1wdXNoLTIze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTUuODMzMzMlfS5lbC1jb2wtbGctMjR7d2lkdGg6MTAwJX0uZWwtY29sLWxnLW9mZnNldC0yNHttYXJnaW4tbGVmdDoxMDAlfS5lbC1jb2wtbGctcHVsbC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMDAlfS5lbC1jb2wtbGctcHVzaC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEwMCV9fS5lbC1wcm9ncmVzcy1iYXJfX2lubmVyOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtdXBsb2Fke2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyfS5lbC11cGxvYWQgaWZyYW1le3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTE7dG9wOjA7bGVmdDowO29wYWNpdHk6MDtmaWx0ZXI6YWxwaGEob3BhY2l0eT0wKX0uZWwtdXBsb2FkX19pbnB1dHtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZF9fdGlwe2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM4MzkxYTU7bWFyZ2luLXRvcDo3cHh9LmVsLXVwbG9hZC0tcGljdHVyZS1jYXJke2JhY2tncm91bmQtY29sb3I6I2ZiZmRmZjtib3JkZXI6MXB4IGRhc2hlZCAjYzBjY2RhO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxNDhweDtoZWlnaHQ6MTQ4cHg7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6MTQ2cHg7dmVydGljYWwtYWxpZ246dG9wfS5lbC11cGxvYWQtLXBpY3R1cmUtY2FyZCBpe2ZvbnQtc2l6ZToyOHB4O2NvbG9yOiM4YzkzOWR9LmVsLXVwbG9hZC0tcGljdHVyZS1jYXJkOmhvdmVye2JvcmRlci1jb2xvcjojMjBhMGZmO2NvbG9yOiMyMGEwZmZ9LmVsLXVwbG9hZC1kcmFnZ2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IGRhc2hlZCAjZDlkOWQ5O2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDozNjBweDtoZWlnaHQ6MTgwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufS5lbC11cGxvYWQtZHJhZ2dlciAuZWwtdXBsb2FkX190ZXh0e2NvbG9yOiM5N2E4YmU7Zm9udC1zaXplOjE0cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXVwbG9hZC1kcmFnZ2VyIC5lbC11cGxvYWRfX3RleHQgZW17Y29sb3I6IzIwYTBmZjtmb250LXN0eWxlOm5vcm1hbH0uZWwtdXBsb2FkLWRyYWdnZXIgLmVsLWljb24tdXBsb2Fke2ZvbnQtc2l6ZTo2N3B4O2NvbG9yOiM5N2E4YmU7bWFyZ2luOjQwcHggMCAxNnB4O2xpbmUtaGVpZ2h0OjUwcHh9LmVsLXVwbG9hZC1kcmFnZ2VyKy5lbC11cGxvYWRfX3RpcHt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtdXBsb2FkLWRyYWdnZXJ+LmVsLXVwbG9hZF9fZmlsZXN7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgxOTEsMjAzLDIxNywuMik7bWFyZ2luLXRvcDo3cHg7cGFkZGluZy10b3A6NXB4fS5lbC11cGxvYWQtZHJhZ2dlcjpob3Zlcntib3JkZXItY29sb3I6IzIwYTBmZn0uZWwtdXBsb2FkLWRyYWdnZXIuaXMtZHJhZ292ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDMyLDE1OSwyNTUsLjA2KTtib3JkZXI6MnB4IGRhc2hlZCAjMjBhMGZmfS5lbC11cGxvYWQtbGlzdHttYXJnaW46MDtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lfS5lbC11cGxvYWQtbGlzdC5pcy1kaXNhYmxlZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW06aG92ZXIgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtkaXNwbGF5OmJsb2NrfS5lbC11cGxvYWQtbGlzdF9faXRlbXt0cmFuc2l0aW9uOmFsbCAuNXMgY3ViaWMtYmV6aWVyKC41NSwwLC4xLDEpO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM0ODU3NmE7bGluZS1oZWlnaHQ6MS44O21hcmdpbi10b3A6NXB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjRweDt3aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtcHJvZ3Jlc3MtYmFye21hcmdpbi1yaWdodDowO3BhZGRpbmctcmlnaHQ6MH0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLXByb2dyZXNze3Bvc2l0aW9uOmFic29sdXRlO3RvcDoyMHB4O3dpZHRoOjEwMCV9LmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1wcm9ncmVzc19fdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTEzcHg7cmlnaHQ6MH0uZWwtdXBsb2FkLWxpc3RfX2l0ZW06Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDoxMHB4fS5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi11cGxvYWQtc3VjY2Vzc3tjb2xvcjojMTNjZTY2fS5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jbG9zZXtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjVweDtyaWdodDo1cHg7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTouNzU7Y29sb3I6IzQ4NTc2YTstbXMtdHJhbnNmb3JtOnNjYWxlKC43KTt0cmFuc2Zvcm06c2NhbGUoLjcpfS5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jbG9zZTpob3ZlcntvcGFjaXR5OjF9LmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2VlZjFmNn0uZWwtdXBsb2FkLWxpc3RfX2l0ZW06aG92ZXIgLmVsLWljb24tY2xvc2V7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVyIC5lbC1wcm9ncmVzc19fdGV4dHtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3MgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtkaXNwbGF5OmJsb2NrfS5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1lOmhvdmVye2NvbG9yOiMyMGEwZmY7Y3Vyc29yOnBvaW50ZXJ9LmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3M6aG92ZXIgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWV7Y29sb3I6IzQ4NTc2YTtkaXNwbGF5OmJsb2NrO21hcmdpbi1yaWdodDo0MHB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6NHB4O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7dHJhbnNpdGlvbjpjb2xvciAuM3N9LmVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWUgW2NsYXNzXj1lbC1pY29uXXtjb2xvcjojOTdhOGJlO21hcmdpbi1yaWdodDo3cHg7aGVpZ2h0OjEwMCU7bGluZS1oZWlnaHQ6aW5oZXJpdH0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVse3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjVweDt0b3A6MDtsaW5lLWhlaWdodDppbmhlcml0O2Rpc3BsYXk6bm9uZX0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0tZGVsZXRle3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjA7Zm9udC1zaXplOjEycHg7Y29sb3I6IzQ4NTc2YTtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZC1saXN0X19pdGVtLWRlbGV0ZTpob3Zlcntjb2xvcjojMjBhMGZmfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJke21hcmdpbjowO2Rpc3BsYXk6aW5saW5lO3ZlcnRpY2FsLWFsaWduOnRvcH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW17b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjMGNjZGE7Ym9yZGVyLXJhZGl1czo2cHg7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjE0OHB4O2hlaWdodDoxNDhweDttYXJnaW46MCA4cHggOHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1pY29uLWNoZWNrLC5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jaXJjbGUtY2hlY2t7Y29sb3I6I2ZmZn0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLWljb24tY2xvc2UsLmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVyIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7ZGlzcGxheTpub25lfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbTpob3ZlciAuZWwtcHJvZ3Jlc3NfX3RleHR7ZGlzcGxheTpibG9ja30uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZXtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtLXRodW1ibmFpbHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTE1cHg7dG9wOi02cHg7d2lkdGg6NDBweDtoZWlnaHQ6MjRweDtiYWNrZ3JvdW5kOiMxM2NlNjY7dGV4dC1hbGlnbjpjZW50ZXI7LW1zLXRyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO2JveC1zaGFkb3c6MCAwIDFwYyAxcHggcmdiYSgwLDAsMCwuMil9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbCBpe2ZvbnQtc2l6ZToxMnB4O21hcmdpbi10b3A6MTFweDstbXMtdHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpIHNjYWxlKC44KTt0cmFuc2Zvcm06cm90YXRlKC00NWRlZykgc2NhbGUoLjgpfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1hY3Rpb25ze3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7bGVmdDowO3RvcDowO2N1cnNvcjpkZWZhdWx0O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiNmZmY7b3BhY2l0eTowO2ZvbnQtc2l6ZToyMHB4O2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4zc30uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9uczphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OlxcXCJcXFwiO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9ucyBzcGFue2Rpc3BsYXk6bm9uZTtjdXJzb3I6cG9pbnRlcn0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9ucyBzcGFuK3NwYW57bWFyZ2luLWxlZnQ6MTVweH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9ucyAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tZGVsZXRle3Bvc2l0aW9uOnN0YXRpYztmb250LXNpemU6aW5oZXJpdDtjb2xvcjppbmhlcml0fS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1hY3Rpb25zOmhvdmVye29wYWNpdHk6MX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9uczpob3ZlciBzcGFue2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC1wcm9ncmVzc3t0b3A6NTAlO2xlZnQ6NTAlOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO2JvdHRvbTphdXRvO3dpZHRoOjEyNnB4fS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC1wcm9ncmVzcyAuZWwtcHJvZ3Jlc3NfX3RleHR7dG9wOjUwJX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVte292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjYzBjY2RhO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW4tdG9wOjEwcHg7cGFkZGluZzoxMHB4IDEwcHggMTBweCA5MHB4O2hlaWdodDo5MnB4fS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLWljb24tY2hlY2ssLmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jaXJjbGUtY2hlY2t7Y29sb3I6I2ZmZn0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVyIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7YmFja2dyb3VuZDowIDA7Ym94LXNoYWRvdzpub25lO3RvcDotMnB4O3JpZ2h0Oi0xMnB4fS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW06aG92ZXIgLmVsLXByb2dyZXNzX190ZXh0e2Rpc3BsYXk6YmxvY2t9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1le2xpbmUtaGVpZ2h0OjcwcHg7bWFyZ2luLXRvcDowfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2VzcyAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZSBpe2Rpc3BsYXk6bm9uZX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLXRodW1ibmFpbHt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6NzBweDtoZWlnaHQ6NzBweDtmbG9hdDpsZWZ0O3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTttYXJnaW4tbGVmdDotODBweH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWV7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjIwcHh9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1lIGl7Zm9udC1zaXplOjcwcHg7bGluZS1oZWlnaHQ6MTtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjlweDt0b3A6MTBweH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbHtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTdweDt0b3A6LTdweDt3aWR0aDo0NnB4O2hlaWdodDoyNnB4O2JhY2tncm91bmQ6IzEzY2U2Njt0ZXh0LWFsaWduOmNlbnRlcjstbXMtdHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7Ym94LXNoYWRvdzowIDFweCAxcHggI2NjY30uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbCBpe2ZvbnQtc2l6ZToxMnB4O21hcmdpbi10b3A6MTJweDstbXMtdHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpIHNjYWxlKC44KTt0cmFuc2Zvcm06cm90YXRlKC00NWRlZykgc2NhbGUoLjgpfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtcHJvZ3Jlc3N7cG9zaXRpb246cmVsYXRpdmU7dG9wOi03cHh9LmVsLXVwbG9hZC1jb3Zlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47ei1pbmRleDoxMDtjdXJzb3I6ZGVmYXVsdH0uZWwtdXBsb2FkLWNvdmVyOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtdXBsb2FkLWNvdmVyIGltZ3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmVsLXVwbG9hZC1jb3ZlcisuZWwtdXBsb2FkX19pbm5lcntvcGFjaXR5OjA7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxfS5lbC11cGxvYWQtY292ZXJfX2xhYmVse3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xNXB4O3RvcDotNnB4O3dpZHRoOjQwcHg7aGVpZ2h0OjI0cHg7YmFja2dyb3VuZDojMTNjZTY2O3RleHQtYWxpZ246Y2VudGVyOy1tcy10cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTtib3gtc2hhZG93OjAgMCAxcGMgMXB4IHJnYmEoMCwwLDAsLjIpfS5lbC11cGxvYWQtY292ZXJfX2xhYmVsIGl7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDoxMXB4Oy1tcy10cmFuc2Zvcm06cm90YXRlKC00NWRlZykgc2NhbGUoLjgpO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKSBzY2FsZSguOCk7Y29sb3I6I2ZmZn0uZWwtdXBsb2FkLWNvdmVyX19wcm9ncmVzc3tkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7cG9zaXRpb246c3RhdGljO3dpZHRoOjI0M3B4fS5lbC11cGxvYWQtY292ZXJfX3Byb2dyZXNzKy5lbC11cGxvYWRfX2lubmVye29wYWNpdHk6MH0uZWwtdXBsb2FkLWNvdmVyX19jb250ZW50e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5lbC11cGxvYWQtY292ZXJfX2ludGVyYWN0e3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNzIpO3RleHQtYWxpZ246Y2VudGVyfS5lbC11cGxvYWQtY292ZXJfX2ludGVyYWN0IC5idG57ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6I2ZmZjtmb250LXNpemU6MTRweDtjdXJzb3I6cG9pbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSkgLjFzLG9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSkgLjFzO21hcmdpbi10b3A6NjBweH0uZWwtdXBsb2FkLWNvdmVyX19pbnRlcmFjdCAuYnRuIHNwYW57b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcn0uZWwtdXBsb2FkLWNvdmVyX19pbnRlcmFjdCAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpe21hcmdpbi1sZWZ0OjM1cHh9LmVsLXVwbG9hZC1jb3Zlcl9faW50ZXJhY3QgLmJ0bjpob3ZlcnstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEzcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xM3B4KX0uZWwtdXBsb2FkLWNvdmVyX19pbnRlcmFjdCAuYnRuOmhvdmVyIHNwYW57b3BhY2l0eToxfS5lbC11cGxvYWQtY292ZXJfX2ludGVyYWN0IC5idG4gaXtjb2xvcjojZmZmO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjI0cHg7bGluZS1oZWlnaHQ6aW5oZXJpdDttYXJnaW46MCBhdXRvIDVweH0uZWwtdXBsb2FkLWNvdmVyX190aXRsZXtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206MDtsZWZ0OjA7YmFja2dyb3VuZC1jb2xvcjojZmZmO2hlaWdodDozNnB4O3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtd2VpZ2h0OjQwMDt0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZzowIDEwcHg7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MzZweDtmb250LXNpemU6MTRweDtjb2xvcjojNDg1NzZhfS5lbC1wcm9ncmVzc3twb3NpdGlvbjpyZWxhdGl2ZTtsaW5lLWhlaWdodDoxfS5lbC1wcm9ncmVzcy5pcy1leGNlcHRpb24gLmVsLXByb2dyZXNzLWJhcl9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojZmY0OTQ5fS5lbC1wcm9ncmVzcy5pcy1leGNlcHRpb24gLmVsLXByb2dyZXNzX190ZXh0e2NvbG9yOiNmZjQ5NDl9LmVsLXByb2dyZXNzLmlzLXN1Y2Nlc3MgLmVsLXByb2dyZXNzLWJhcl9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojMTNjZTY2fS5lbC1wcm9ncmVzcy5pcy1zdWNjZXNzIC5lbC1wcm9ncmVzc19fdGV4dHtjb2xvcjojMTNjZTY2fS5lbC1wcm9ncmVzc19fdGV4dHtmb250LXNpemU6MTRweDtjb2xvcjojNDg1NzZhO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tbGVmdDoxMHB4O2xpbmUtaGVpZ2h0OjF9LmVsLXByb2dyZXNzX190ZXh0IGl7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6YmxvY2t9LmVsLXByb2dyZXNzLS1jaXJjbGV7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXByb2dyZXNzLS1jaXJjbGUgLmVsLXByb2dyZXNzX190ZXh0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDowO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsLTUwJSl9LmVsLXByb2dyZXNzLS1jaXJjbGUgLmVsLXByb2dyZXNzX190ZXh0IGl7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1wcm9ncmVzcy0td2l0aG91dC10ZXh0IC5lbC1wcm9ncmVzc19fdGV4dHtkaXNwbGF5Om5vbmV9LmVsLXByb2dyZXNzLS13aXRob3V0LXRleHQgLmVsLXByb2dyZXNzLWJhcntwYWRkaW5nLXJpZ2h0OjA7bWFyZ2luLXJpZ2h0OjA7ZGlzcGxheTpibG9ja30uZWwtcHJvZ3Jlc3MtYmFyLC5lbC1wcm9ncmVzcy1iYXJfX2lubmVyVGV4dCwuZWwtc3Bpbm5lcntkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXByb2dyZXNzLS10ZXh0LWluc2lkZSAuZWwtcHJvZ3Jlc3MtYmFye3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tcmlnaHQ6MH0uZWwtcHJvZ3Jlc3MtYmFye3BhZGRpbmctcmlnaHQ6NTBweDt3aWR0aDoxMDAlO21hcmdpbi1yaWdodDotNTVweDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXByb2dyZXNzLWJhcl9fb3V0ZXJ7aGVpZ2h0OjZweDtib3JkZXItcmFkaXVzOjEwMHB4O2JhY2tncm91bmQtY29sb3I6I2U0ZThmMTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1wcm9ncmVzcy1iYXJfX2lubmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiMyMGEwZmY7dGV4dC1hbGlnbjpyaWdodDtib3JkZXItcmFkaXVzOjEwMHB4O2xpbmUtaGVpZ2h0OjF9LmVsLXByb2dyZXNzLWJhcl9faW5uZXJUZXh0e2NvbG9yOiNmZmY7Zm9udC1zaXplOjEycHg7bWFyZ2luOjAgNXB4fUBrZXlmcmFtZXMgcHJvZ3Jlc3N7MCV7YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9MTAwJXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjMycHggMH19LmVsLXRpbWUtc3Bpbm5lcnt3aWR0aDoxMDAlfS5lbC1zcGlubmVyLWlubmVye2FuaW1hdGlvbjpyb3RhdGUgMnMgbGluZWFyIGluZmluaXRlO3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHh9LmVsLXNwaW5uZXItaW5uZXIgLnBhdGh7c3Ryb2tlOiNlY2VjZWM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7YW5pbWF0aW9uOmRhc2ggMS41cyBlYXNlLWluLW91dCBpbmZpbml0ZX1Aa2V5ZnJhbWVzIHJvdGF0ZXsxMDAle3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBkYXNoezAle3N0cm9rZS1kYXNoYXJyYXk6MSwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6MH01MCV7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTM1fTEwMCV7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTEyNH19LmVsLW1lc3NhZ2V7Ym94LXNoYWRvdzowIDJweCA0cHggcmdiYSgwLDAsMCwuMTIpLDAgMCA2cHggcmdiYSgwLDAsMCwuMDQpO21pbi13aWR0aDozMDBweDtwYWRkaW5nOjEwcHggMTJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czoycHg7cG9zaXRpb246Zml4ZWQ7bGVmdDo1MCU7dG9wOjIwcHg7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO2JhY2tncm91bmQtY29sb3I6I2ZmZjt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzLHRyYW5zZm9ybSAuNHM7b3ZlcmZsb3c6aGlkZGVufS5lbC1tZXNzYWdlIC5lbC1pY29uLWNpcmNsZS1jaGVja3tjb2xvcjojMTNjZTY2fS5lbC1tZXNzYWdlIC5lbC1pY29uLWNpcmNsZS1jcm9zc3tjb2xvcjojZmY0OTQ5fS5lbC1tZXNzYWdlIC5lbC1pY29uLWluZm9ybWF0aW9ue2NvbG9yOiM1MGJmZmZ9LmVsLW1lc3NhZ2UgLmVsLWljb24td2FybmluZ3tjb2xvcjojZjdiYTJhfS5lbC1tZXNzYWdlX19ncm91cHttYXJnaW4tbGVmdDozOHB4O3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDoyMHB4O2xpbmUtaGVpZ2h0OjIwcHg7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtbWVzc2FnZV9fZ3JvdXAgcHtmb250LXNpemU6MTRweDttYXJnaW46MCAzNHB4IDAgMDtjb2xvcjojODM5MWE1O3RleHQtYWxpZ246anVzdGlmeX0uZWwtc3RlcF9faGVhZCwuZWwtc3RlcHMuaXMtaG9yaXpvbnRhbC5pcy1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLW1lc3NhZ2VfX2dyb3VwLmlzLXdpdGgtaWNvbnttYXJnaW4tbGVmdDowfS5lbC1tZXNzYWdlX19pbWd7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjB9LmVsLW1lc3NhZ2VfX2ljb257dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1yaWdodDo4cHh9LmVsLW1lc3NhZ2VfX2Nsb3NlQnRue3RvcDozcHg7cmlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojYmZjYmQ5O2ZvbnQtc2l6ZToxNHB4fS5lbC1tZXNzYWdlX19jbG9zZUJ0bjpob3Zlcntjb2xvcjojOTdhOGJlfS5lbC1tZXNzYWdlLWZhZGUtZW50ZXIsLmVsLW1lc3NhZ2UtZmFkZS1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtMTAwJSl9LmVsLWJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtYmFkZ2VfX2NvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY0OTQ5O2JvcmRlci1yYWRpdXM6MTBweDtjb2xvcjojZmZmO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZToxMnB4O2hlaWdodDoxOHB4O2xpbmUtaGVpZ2h0OjE4cHg7cGFkZGluZzowIDZweDt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXI6MXB4IHNvbGlkICNmZmZ9LmVsLWJhZGdlX19jb250ZW50LmlzLWRvdHt3aWR0aDo4cHg7aGVpZ2h0OjhweDtwYWRkaW5nOjA7cmlnaHQ6MDtib3JkZXItcmFkaXVzOjUwJX0uZWwtYmFkZ2VfX2NvbnRlbnQuaXMtZml4ZWR7dG9wOjA7cmlnaHQ6MTBweDtwb3NpdGlvbjphYnNvbHV0ZTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgdHJhbnNsYXRlWCgxMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKDEwMCUpfS5lbC1yYXRlX19pY29uLC5lbC1yYXRlX19pdGVte3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1iYWRnZV9fY29udGVudC5pcy1maXhlZC5pcy1kb3R7cmlnaHQ6NXB4fS5lbC1jYXJke2JvcmRlcjoxcHggc29saWQgI2QxZGJlNTtib3JkZXItcmFkaXVzOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6MCAycHggNHB4IDAgcmdiYSgwLDAsMCwuMTIpLDAgMCA2cHggMCByZ2JhKDAsMCwwLC4wNCl9LmVsLWNhcmRfX2hlYWRlcntwYWRkaW5nOjE4cHggMjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZDFkYmU1O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtY2FyZF9fYm9keXtwYWRkaW5nOjIwcHh9LmVsLXJhdGV7aGVpZ2h0OjIwcHg7bGluZS1oZWlnaHQ6MX0uZWwtcmF0ZV9faXRlbXtmb250LXNpemU6MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXJhdGVfX2ljb257Zm9udC1zaXplOjE4cHg7bWFyZ2luLXJpZ2h0OjZweDtjb2xvcjojYmZjYmQ5O3RyYW5zaXRpb246LjNzfS5lbC1yYXRlX19kZWNpbWFsLC5lbC1yYXRlX19pY29uIC5wYXRoMntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9LmVsLXJhdGVfX2ljb24uaG92ZXJ7LW1zLXRyYW5zZm9ybTpzY2FsZSgxLjE1KTt0cmFuc2Zvcm06c2NhbGUoMS4xNSl9LmVsLXJhdGVfX2RlY2ltYWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6aGlkZGVufS5lbC1yYXRlX190ZXh0e2ZvbnQtc2l6ZToxNHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtc3RlcHN7Zm9udC1zaXplOjB9LmVsLXN0ZXBzPjpsYXN0LWNoaWxkIC5lbC1zdGVwX19saW5le2Rpc3BsYXk6bm9uZX0uZWwtc3RlcC5pcy1ob3Jpem9udGFsLC5lbC1zdGVwLmlzLXZlcnRpY2FsIC5lbC1zdGVwX19oZWFkLC5lbC1zdGVwLmlzLXZlcnRpY2FsIC5lbC1zdGVwX19tYWluLC5lbC1zdGVwX19saW5le2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1zdGVwe3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOnRvcH0uZWwtc3RlcDpsYXN0LWNoaWxkIC5lbC1zdGVwX19tYWlue3BhZGRpbmctcmlnaHQ6MH0uZWwtc3RlcC5pcy12ZXJ0aWNhbCAuZWwtc3RlcF9fbWFpbntwYWRkaW5nLWxlZnQ6MTBweH0uZWwtc3RlcF9fbGluZXtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItY29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOiNiZmNiZDl9LmVsLXN0ZXBfX2xpbmUuaXMtdmVydGljYWx7d2lkdGg6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDt0b3A6MzJweDtib3R0b206MDtsZWZ0OjE1cHh9LmVsLXN0ZXBfX2xpbmUuaXMtaG9yaXpvbnRhbHt0b3A6MTVweDtoZWlnaHQ6MnB4O2xlZnQ6MzJweDtyaWdodDowfS5lbC1zdGVwX19saW5lLmlzLWljb24uaXMtaG9yaXpvbnRhbHtyaWdodDo0cHh9LmVsLXN0ZXBfX2xpbmUtaW5uZXJ7ZGlzcGxheTpibG9jaztib3JkZXItd2lkdGg6MXB4O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6aW5oZXJpdDt0cmFuc2l0aW9uOmFsbCAxNTBtcztib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MDtoZWlnaHQ6MH0uZWwtc3RlcF9faWNvbntkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjI4cHh9LmVsLXN0ZXBfX2ljb24+KntsaW5lLWhlaWdodDppbmhlcml0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtc3RlcF9faGVhZHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7bGluZS1oZWlnaHQ6MjhweDtmb250LXNpemU6MjhweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7dHJhbnNpdGlvbjphbGwgMTUwbXN9LmVsLWNhcm91c2VsX19hcnJvdywuZWwtY2Fyb3VzZWxfX2J1dHRvbnttYXJnaW46MDt0cmFuc2l0aW9uOi4zcztjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9LmVsLXN0ZXBfX2hlYWQuaXMtZmluaXNoe2NvbG9yOiMyMGEwZmY7Ym9yZGVyLWNvbG9yOiMyMGEwZmZ9LmVsLXN0ZXBfX2hlYWQuaXMtZXJyb3J7Y29sb3I6I2ZmNDk0OTtib3JkZXItY29sb3I6I2ZmNDk0OX0uZWwtc3RlcF9faGVhZC5pcy1zdWNjZXNze2NvbG9yOiMxM2NlNjY7Ym9yZGVyLWNvbG9yOiMxM2NlNjZ9LmVsLXN0ZXBfX2hlYWQuaXMtcHJvY2VzcywuZWwtc3RlcF9faGVhZC5pcy13YWl0e2NvbG9yOiNiZmNiZDk7Ym9yZGVyLWNvbG9yOiNiZmNiZDl9LmVsLXN0ZXBfX2hlYWQuaXMtdGV4dHtmb250LXNpemU6MTRweDtib3JkZXItd2lkdGg6MnB4O2JvcmRlci1zdHlsZTpzb2xpZH0uZWwtc3RlcF9faGVhZC5pcy10ZXh0LmlzLWZpbmlzaHtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIwYTBmZjtib3JkZXItY29sb3I6IzIwYTBmZn0uZWwtc3RlcF9faGVhZC5pcy10ZXh0LmlzLWVycm9ye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZmY0OTQ5O2JvcmRlci1jb2xvcjojZmY0OTQ5fS5lbC1zdGVwX19oZWFkLmlzLXRleHQuaXMtc3VjY2Vzc3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzEzY2U2Njtib3JkZXItY29sb3I6IzEzY2U2Nn0uZWwtc3RlcF9faGVhZC5pcy10ZXh0LmlzLXdhaXR7Y29sb3I6I2JmY2JkOTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiNiZmNiZDl9LmVsLXN0ZXBfX2hlYWQuaXMtdGV4dC5pcy1wcm9jZXNze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojYmZjYmQ5O2JvcmRlci1jb2xvcjojYmZjYmQ5fS5lbC1zdGVwX19tYWlue3doaXRlLXNwYWNlOm5vcm1hbDtwYWRkaW5nLXJpZ2h0OjEwcHg7dGV4dC1hbGlnbjpsZWZ0fS5lbC1zdGVwX190aXRsZXtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDozMnB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1zdGVwX190aXRsZS5pcy1maW5pc2h7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMyMGEwZmZ9LmVsLXN0ZXBfX3RpdGxlLmlzLWVycm9ye2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojZmY0OTQ5fS5lbC1zdGVwX190aXRsZS5pcy1zdWNjZXNze2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMTNjZTY2fS5lbC1zdGVwX190aXRsZS5pcy13YWl0e2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojOTdhOGJlfS5lbC1zdGVwX190aXRsZS5pcy1wcm9jZXNze2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojNDg1NzZhfS5lbC1zdGVwX19kZXNjcmlwdGlvbntmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MTRweH0uZWwtc3RlcF9fZGVzY3JpcHRpb24uaXMtZmluaXNoe2NvbG9yOiMyMGEwZmZ9LmVsLXN0ZXBfX2Rlc2NyaXB0aW9uLmlzLWVycm9ye2NvbG9yOiNmZjQ5NDl9LmVsLXN0ZXBfX2Rlc2NyaXB0aW9uLmlzLXN1Y2Nlc3N7Y29sb3I6IzEzY2U2Nn0uZWwtc3RlcF9fZGVzY3JpcHRpb24uaXMtd2FpdHtjb2xvcjojYmZjYmQ5fS5lbC1zdGVwX19kZXNjcmlwdGlvbi5pcy1wcm9jZXNze2NvbG9yOiM4MzkxYTV9LmVsLWNhcm91c2Vse292ZXJmbG93LXg6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1jYXJvdXNlbF9fY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDozMDBweH0uZWwtY2Fyb3VzZWxfX2Fycm93e2JvcmRlcjpub25lO3BhZGRpbmc6MDt3aWR0aDozNnB4O2hlaWdodDozNnB4O2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6cmdiYSgzMSw0NSw2MSwuMTEpO2NvbG9yOiNmZmY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt6LWluZGV4OjEwOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTJweH0uZWwtY2Fyb3VzZWxfX2Fycm93OmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgzMSw0NSw2MSwuMjMpfS5lbC1jYXJvdXNlbF9fYXJyb3cgaXtjdXJzb3I6cG9pbnRlcn0uZWwtY2Fyb3VzZWxfX2Fycm93LS1sZWZ0e2xlZnQ6MTZweH0uZWwtY2Fyb3VzZWxfX2Fycm93LS1yaWdodHtyaWdodDoxNnB4fS5lbC1jYXJvdXNlbF9faW5kaWNhdG9yc3twb3NpdGlvbjphYnNvbHV0ZTtsaXN0LXN0eWxlOm5vbmU7Ym90dG9tOjA7bGVmdDo1MCU7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO21hcmdpbjowO3BhZGRpbmc6MDt6LWluZGV4OjJ9LmVsLWNhcm91c2VsX19pbmRpY2F0b3JzLS1vdXRzaWRle2JvdHRvbToyNnB4O3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOnN0YXRpYzstbXMtdHJhbnNmb3JtOm5vbmU7dHJhbnNmb3JtOm5vbmV9LmVsLWNhcm91c2VsX19pbmRpY2F0b3JzLS1vdXRzaWRlIC5lbC1jYXJvdXNlbF9faW5kaWNhdG9yOmhvdmVyIGJ1dHRvbntvcGFjaXR5Oi42NH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLW91dHNpZGUgYnV0dG9ue2JhY2tncm91bmQtY29sb3I6IzgzOTFhNTtvcGFjaXR5Oi4yNH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLWxhYmVsc3tsZWZ0OjA7cmlnaHQ6MDstbXMtdHJhbnNmb3JtOm5vbmU7dHJhbnNmb3JtOm5vbmU7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLWNhcm91c2VsX19pbmRpY2F0b3JzLS1sYWJlbHMgLmVsLWNhcm91c2VsX19idXR0b257d2lkdGg6YXV0bztoZWlnaHQ6YXV0bztwYWRkaW5nOjJweCAxOHB4O2ZvbnQtc2l6ZToxMnB4fS5lbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tbGFiZWxzIC5lbC1jYXJvdXNlbF9faW5kaWNhdG9ye3BhZGRpbmc6NnB4IDRweH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcntkaXNwbGF5OmlubGluZS1ibG9jaztiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3BhZGRpbmc6MTJweCA0cHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLWNhcm91c2VsX19pbmRpY2F0b3I6aG92ZXIgYnV0dG9ue29wYWNpdHk6LjcyfS5lbC1jYXJvdXNlbF9faW5kaWNhdG9yLmlzLWFjdGl2ZSBidXR0b257b3BhY2l0eToxfS5lbC1jYXJvdXNlbF9fYnV0dG9ue2Rpc3BsYXk6YmxvY2s7b3BhY2l0eTouNDg7d2lkdGg6MzBweDtoZWlnaHQ6MnB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6bm9uZTtwYWRkaW5nOjB9LmNhcm91c2VsLWFycm93LWxlZnQtZW50ZXIsLmNhcm91c2VsLWFycm93LWxlZnQtbGVhdmUtYWN0aXZley1tcy10cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKC0xMHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKC0xMHB4KTtvcGFjaXR5OjB9LmNhcm91c2VsLWFycm93LXJpZ2h0LWVudGVyLC5jYXJvdXNlbC1hcnJvdy1yaWdodC1sZWF2ZS1hY3RpdmV7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpIHRyYW5zbGF0ZVgoMTBweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgdHJhbnNsYXRlWCgxMHB4KTtvcGFjaXR5OjB9LmVsLXNjcm9sbGJhcntvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LmVsLXNjcm9sbGJhcjphY3RpdmUgLmVsLXNjcm9sbGJhcl9fYmFyLC5lbC1zY3JvbGxiYXI6Zm9jdXMgLmVsLXNjcm9sbGJhcl9fYmFyLC5lbC1zY3JvbGxiYXI6aG92ZXIgLmVsLXNjcm9sbGJhcl9fYmFye29wYWNpdHk6MTt0cmFuc2l0aW9uOm9wYWNpdHkgMzQwbXMgZWFzZS1vdXR9LmVsLXNjcm9sbGJhcl9fd3JhcHtvdmVyZmxvdzpzY3JvbGx9LmVsLXNjcm9sbGJhcl9fd3JhcC0taGlkZGVuLWRlZmF1bHQ6Oi13ZWJraXQtc2Nyb2xsYmFye3dpZHRoOjA7aGVpZ2h0OjB9LmVsLXNjcm9sbGJhcl9fdGh1bWJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jazt3aWR0aDowO2hlaWdodDowO2N1cnNvcjpwb2ludGVyO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUxLDE2OCwxOTAsLjMpO3RyYW5zaXRpb246LjNzIGJhY2tncm91bmQtY29sb3J9LmVsLXNjcm9sbGJhcl9fdGh1bWI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MSwxNjgsMTkwLC41KX0uZWwtc2Nyb2xsYmFyX19iYXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MnB4O2JvdHRvbToycHg7ei1pbmRleDoxO2JvcmRlci1yYWRpdXM6NHB4O29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMTIwbXMgZWFzZS1vdXR9LmVsLWNhcm91c2VsX19pdGVtLS1jYXJkLC5lbC1jYXJvdXNlbF9faXRlbS5pcy1hbmltYXRpbmd7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzIGVhc2UtaW4tb3V0fS5lbC1zY3JvbGxiYXJfX2Jhci5pcy1ob3Jpem9udGFse2hlaWdodDo2cHg7bGVmdDoycHh9LmVsLXNjcm9sbGJhcl9fYmFyLmlzLWhvcml6b250YWw+ZGl2e2hlaWdodDoxMDAlfS5lbC1zY3JvbGxiYXJfX2Jhci5pcy12ZXJ0aWNhbHt3aWR0aDo2cHg7dG9wOjJweH0uZWwtc2Nyb2xsYmFyX19iYXIuaXMtdmVydGljYWw+ZGl2e3dpZHRoOjEwMCV9LmVsLWNhcm91c2VsX19pdGVte3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjB9LmVsLWNhcm91c2VsX19pdGVtLmlzLWFjdGl2ZXt6LWluZGV4OjJ9LmVsLWNhcm91c2VsX19pdGVtLS1jYXJke3dpZHRoOjUwJX0uZWwtY2Fyb3VzZWxfX2l0ZW0tLWNhcmQuaXMtaW4tc3RhZ2V7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxfS5lbC1jYXJvdXNlbF9faXRlbS0tY2FyZC5pcy1hY3RpdmUsLmVsLWNhc2NhZGVyIC5lbC1pY29uLWNpcmNsZS1jbG9zZSwuZWwtY2FzY2FkZXItbWVudXN7ei1pbmRleDoyfS5lbC1jYXJvdXNlbF9faXRlbS0tY2FyZC5pcy1pbi1zdGFnZS5pcy1ob3ZlciAuZWwtY2Fyb3VzZWxfX21hc2ssLmVsLWNhcm91c2VsX19pdGVtLS1jYXJkLmlzLWluLXN0YWdlOmhvdmVyIC5lbC1jYXJvdXNlbF9fbWFza3tvcGFjaXR5Oi4xMn0uZWwtY2Fyb3VzZWxfX21hc2t7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MDtsZWZ0OjA7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjI0O3RyYW5zaXRpb246LjJzfS5lbC1jb2xsYXBzZXtib3JkZXI6MXB4IHNvbGlkICNkZmU2ZWM7Ym9yZGVyLXJhZGl1czowfS5lbC1jb2xsYXBzZS1pdGVtOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTotMXB4fS5lbC1jb2xsYXBzZS1pdGVtLmlzLWFjdGl2ZT4uZWwtY29sbGFwc2UtaXRlbV9faGVhZGVyIC5lbC1jb2xsYXBzZS1pdGVtX19oZWFkZXJfX2Fycm93ey1tcy10cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uZWwtY29sbGFwc2UtaXRlbV9faGVhZGVye2hlaWdodDo0M3B4O2xpbmUtaGVpZ2h0OjQzcHg7cGFkZGluZy1sZWZ0OjE1cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM0ODU3NmE7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RmZTZlYztmb250LXNpemU6MTNweH0uZWwtY29sbGFwc2UtaXRlbV9faGVhZGVyX19hcnJvd3ttYXJnaW4tcmlnaHQ6OHB4O3RyYW5zaXRpb246dHJhbnNmb3JtIC4zc30uZWwtY29sbGFwc2UtaXRlbV9fd3JhcHt3aWxsLWNoYW5nZTpoZWlnaHQ7YmFja2dyb3VuZC1jb2xvcjojZmJmZGZmO292ZXJmbG93OmhpZGRlbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RmZTZlY30uZWwtY29sbGFwc2UtaXRlbV9fY29udGVudHtwYWRkaW5nOjEwcHggMTVweDtmb250LXNpemU6MTNweDtjb2xvcjojMWYyZDNkO2xpbmUtaGVpZ2h0OjEuNzY5MjMwNzY5MjMwNzY5fS5lbC1jYXNjYWRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtY2FzY2FkZXIgLmVsLWlucHV0LC5lbC1jYXNjYWRlciAuZWwtaW5wdXRfX2lubmVye2N1cnNvcjpwb2ludGVyfS5lbC1jYXNjYWRlciAuZWwtaW5wdXRfX2ljb257dHJhbnNpdGlvbjpub25lfS5lbC1jYXNjYWRlciAuZWwtaWNvbi1jYXJldC1ib3R0b217dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzfS5lbC1jYXNjYWRlciAuZWwtaWNvbi1jYXJldC1ib3R0b20uaXMtcmV2ZXJzZXstbXMtdHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpO3RyYW5zZm9ybTpyb3RhdGVaKDE4MGRlZyl9LmVsLWNhc2NhZGVyLmlzLWRpc2FibGVkIC5lbC1jYXNjYWRlcl9fbGFiZWx7ei1pbmRleDoyO2NvbG9yOiNiYmJ9LmVsLWNhc2NhZGVyX19sYWJlbHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7aGVpZ2h0OjEwMCU7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMjVweCAwIDEwcHg7Y29sb3I6IzFmMmQzZDt3aWR0aDoxMDAlO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjE0cHg7dGV4dC1hbGlnbjpsZWZ0fS5lbC1jYXNjYWRlcl9fbGFiZWwgc3Bhbntjb2xvcjojOTdhOGJlfS5lbC1jYXNjYWRlci0tbGFyZ2V7Zm9udC1zaXplOjE2cHh9LmVsLWNhc2NhZGVyLS1sYXJnZSAuZWwtY2FzY2FkZXJfX2xhYmVse2xpbmUtaGVpZ2h0OjQwcHh9LmVsLWNhc2NhZGVyLS1zbWFsbHtmb250LXNpemU6MTNweH0uZWwtY2FzY2FkZXItLXNtYWxsIC5lbC1jYXNjYWRlcl9fbGFiZWx7bGluZS1oZWlnaHQ6MjhweH0uZWwtY2FzY2FkZXItbWVudXN7d2hpdGUtc3BhY2U6bm93cmFwO2JhY2tncm91bmQ6I2ZmZjtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW46NXB4IDA7Ym9yZGVyOjFweCBzb2xpZCAjZDFkYmU1O2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaGFkb3c6MCAycHggNHB4IHJnYmEoMCwwLDAsLjEyKSwwIDAgNnB4IHJnYmEoMCwwLDAsLjA0KX0uZWwtY2FzY2FkZXItbWVudXtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7aGVpZ2h0OjIwNHB4O292ZXJmbG93OmF1dG87Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCAjZDFkYmU1O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzo2cHggMDttaW4td2lkdGg6MTYwcHh9LmVsLWNhc2NhZGVyLW1lbnU6bGFzdC1jaGlsZHtib3JkZXItcmlnaHQ6MH0uZWwtY2FzY2FkZXItbWVudV9faXRlbXtmb250LXNpemU6MTRweDtwYWRkaW5nOjhweCAzMHB4IDhweCAxMHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjb2xvcjojNDg1NzZhO2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjEuNTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y3Vyc29yOnBvaW50ZXJ9LmVsLWNhc2NhZGVyLW1lbnVfX2l0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTRlOGYxfS5lbC1jYXNjYWRlci1tZW51X19pdGVtLnNlbGVjdGVke2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjBhMGZmfS5lbC1jYXNjYWRlci1tZW51X19pdGVtLnNlbGVjdGVkLmhvdmVye2JhY2tncm91bmQtY29sb3I6IzFjOGRlMH0uZWwtY2FzY2FkZXItbWVudV9faXRlbS5pcy1hY3RpdmV7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMyMGEwZmZ9LmVsLWNhc2NhZGVyLW1lbnVfX2l0ZW0uaXMtYWN0aXZlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzFjOGRlMH0uZWwtY2FzY2FkZXItbWVudV9faXRlbS5pcy1kaXNhYmxlZHtjb2xvcjojYmZjYmQ5O2JhY2tncm91bmQtY29sb3I6I2ZmZjtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWNhc2NhZGVyLW1lbnVfX2l0ZW0uaXMtZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5lbC1jYXNjYWRlci1tZW51X19pdGVtX19rZXl3b3Jke2ZvbnQtd2VpZ2h0OjcwMH0uZWwtY2FzY2FkZXItbWVudV9faXRlbS0tZXh0ZW5zaWJsZTphZnRlcntmb250LWZhbWlseTplbGVtZW50LWljb25zO2NvbnRlbnQ6XFxcIlxcXFxFNjA2XFxcIjtmb250LXNpemU6MTJweDstbXMtdHJhbnNmb3JtOnNjYWxlKC44KTt0cmFuc2Zvcm06c2NhbGUoLjgpO2NvbG9yOiNiZmNiZDk7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDttYXJnaW4tdG9wOjFweH0uZWwtY2FzY2FkZXItbWVudS0tZmxleGlibGV7aGVpZ2h0OmF1dG87bWF4LWhlaWdodDoxODBweDtvdmVyZmxvdzphdXRvfS5lbC1jYXNjYWRlci1tZW51LS1mbGV4aWJsZSAuZWwtY2FzY2FkZXItbWVudV9faXRlbXtvdmVyZmxvdzp2aXNpYmxlfS5lbC1jb2xvci1odWUtc2xpZGVye3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoyODBweDtoZWlnaHQ6MTJweDtiYWNrZ3JvdW5kLWNvbG9yOnJlZDtwYWRkaW5nOjAgMnB4fS5lbC1jb2xvci1odWUtc2xpZGVyLmlzLXZlcnRpY2Fse3dpZHRoOjEycHg7aGVpZ2h0OjE4MHB4O3BhZGRpbmc6MnB4IDB9LmVsLWNvbG9yLWh1ZS1zbGlkZXIuaXMtdmVydGljYWwgLmVsLWNvbG9yLWh1ZS1zbGlkZXJfX2JhcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20scmVkIDAsI2ZmMCAxNyUsIzBmMCAzMyUsIzBmZiA1MCUsIzAwZiA2NyUsI2YwZiA4MyUscmVkIDEwMCUpfS5lbC1jb2xvci1odWUtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1jb2xvci1odWUtc2xpZGVyX190aHVtYntsZWZ0OjA7dG9wOjA7d2lkdGg6MTAwJTtoZWlnaHQ6NHB4fS5lbC1jb2xvci1odWUtc2xpZGVyX19iYXJ7cG9zaXRpb246cmVsYXRpdmU7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQscmVkIDAsI2ZmMCAxNyUsIzBmMCAzMyUsIzBmZiA1MCUsIzAwZiA2NyUsI2YwZiA4MyUscmVkIDEwMCUpO2hlaWdodDoxMDAlfS5lbC1jb2xvci1odWUtc2xpZGVyX190aHVtYntwb3NpdGlvbjphYnNvbHV0ZTtjdXJzb3I6cG9pbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7bGVmdDowO3RvcDowO3dpZHRoOjRweDtoZWlnaHQ6MTAwJTtib3JkZXItcmFkaXVzOjFweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZjBmMGYwO2JveC1zaGFkb3c6MCAwIDJweCByZ2JhKDAsMCwwLC42KTt6LWluZGV4OjF9LmVsLWNvbG9yLXN2cGFuZWx7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MjgwcHg7aGVpZ2h0OjE4MHB4fS5lbC1jb2xvci1zdnBhbmVsX19ibGFjaywuZWwtY29sb3Itc3ZwYW5lbF9fd2hpdGV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjB9LmVsLWNvbG9yLXN2cGFuZWxfX3doaXRle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCNmZmYscmdiYSgyNTUsMjU1LDI1NSwwKSl9LmVsLWNvbG9yLXN2cGFuZWxfX2JsYWNre2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHRvcCwjMDAwLHJnYmEoMCwwLDAsMCkpfS5lbC1jb2xvci1zdnBhbmVsX19jdXJzb3J7cG9zaXRpb246YWJzb2x1dGV9LmVsLWNvbG9yLXN2cGFuZWxfX2N1cnNvcj5kaXZ7Y3Vyc29yOmhlYWQ7d2lkdGg6NHB4O2hlaWdodDo0cHg7Ym94LXNoYWRvdzowIDAgMCAxLjVweCAjZmZmLGluc2V0IDAgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjMpLDAgMCAxcHggMnB4IHJnYmEoMCwwLDAsLjQpO2JvcmRlci1yYWRpdXM6NTAlOy1tcy10cmFuc2Zvcm06dHJhbnNsYXRlKC0ycHgsLTJweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMnB4LC0ycHgpfS5lbC1jb2xvci1hbHBoYS1zbGlkZXJ7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjI4MHB4O2hlaWdodDoxMnB4O2JhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXdBQUFBTUNBSUFBQURaRjh1d0FBQUFHVWxFUVZRWVYyTTRnd0grWXdDR0lhc0lVd2hUMjVCVkJBRHR6WU5Zckh2djRnQUFBQUJKUlU1RXJrSmdnZz09KX0uZWwtY29sb3ItYWxwaGEtc2xpZGVyLmlzLXZlcnRpY2Fse3dpZHRoOjIwcHg7aGVpZ2h0OjE4MHB4fS5lbC1jb2xvci1hbHBoYS1zbGlkZXIuaXMtdmVydGljYWwgLmVsLWNvbG9yLWFscGhhLXNsaWRlcl9fYmFye2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSxyZ2JhKDI1NSwyNTUsMjU1LDApIDAscmdiYSgyNTUsMjU1LDI1NSwxKSAxMDAlKX0uZWwtY29sb3ItYWxwaGEtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1jb2xvci1hbHBoYS1zbGlkZXJfX3RodW1ie2xlZnQ6MDt0b3A6MDt3aWR0aDoxMDAlO2hlaWdodDo0cHh9LmVsLWNvbG9yLWFscGhhLXNsaWRlcl9fYmFye3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHJnYmEoMjU1LDI1NSwyNTUsMCkgMCxyZ2JhKDI1NSwyNTUsMjU1LDEpIDEwMCUpO2hlaWdodDoxMDAlfS5lbC1jb2xvci1hbHBoYS1zbGlkZXJfX3RodW1ie3Bvc2l0aW9uOmFic29sdXRlO2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtsZWZ0OjA7dG9wOjA7d2lkdGg6NHB4O2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6MXB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNmMGYwZjA7Ym94LXNoYWRvdzowIDAgMnB4IHJnYmEoMCwwLDAsLjYpO3otaW5kZXg6MX0uZWwtY29sb3ItZHJvcGRvd257d2lkdGg6MzAwcHh9LmVsLWNvbG9yLWRyb3Bkb3duX19tYWluLXdyYXBwZXJ7bWFyZ2luLWJvdHRvbTo2cHh9LmVsLWNvbG9yLWRyb3Bkb3duX19tYWluLXdyYXBwZXI6OmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTp0YWJsZTtjbGVhcjpib3RofS5lbC1jb2xvci1kcm9wZG93bl9fYnRuc3ttYXJnaW4tdG9wOjZweDt0ZXh0LWFsaWduOnJpZ2h0fS5lbC1jb2xvci1kcm9wZG93bl9fdmFsdWV7ZmxvYXQ6bGVmdDtsaW5lLWhlaWdodDoyNnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMxZjJkM2R9LmVsLWNvbG9yLWRyb3Bkb3duX19idG57Ym9yZGVyOjFweCBzb2xpZCAjZGNkY2RjO2NvbG9yOiMzMzM7bGluZS1oZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjAgMjBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O291dGxpbmU6MDtmb250LXNpemU6MTJweH0uZWwtY29sb3ItZHJvcGRvd25fX2J0bltkaXNhYmxlZF17Y29sb3I6I2NjYztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWNvbG9yLWRyb3Bkb3duX19idG46aG92ZXJ7Y29sb3I6IzIwYTBmZjtib3JkZXItY29sb3I6IzIwYTBmZn0uZWwtY29sb3ItZHJvcGRvd25fX2xpbmstYnRue2N1cnNvcjpwb2ludGVyO2NvbG9yOiMyMGEwZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7cGFkZGluZzoxNXB4O2ZvbnQtc2l6ZToxMnB4fS5lbC1jb2xvci1kcm9wZG93bl9fbGluay1idG46aG92ZXJ7Y29sb3I6IzRkYjNmZn0uZWwtY29sb3ItcGlja2Vye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZWwtY29sb3ItcGlja2VyX190cmlnZ2Vye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MzZweDtwYWRkaW5nOjZweDtib3JkZXI6MXB4IHNvbGlkICNiZmNiZDk7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjB9LmVsLWNvbG9yLXBpY2tlcl9fY29sb3J7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjoxcHggc29saWQgIzY2Njt3aWR0aDoyMnB4O2hlaWdodDoyMnB4O3RleHQtYWxpZ246Y2VudGVyfS5lbC1jb2xvci1waWNrZXJfX2NvbG9yLmlzLWFscGhhe2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXdBQUFBTUNBSUFBQURaRjh1d0FBQUFHVWxFUVZRWVYyTTRnd0grWXdDR0lhc0lVd2hUMjVCVkJBRHR6WU5Zckh2djRnQUFBQUJKUlU1RXJrSmdnZz09KX0uZWwtY29sb3ItcGlja2VyX19jb2xvci1pbm5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7cmlnaHQ6MDtib3R0b206MH0uZWwtY29sb3ItcGlja2VyX19lbXB0eXtmb250LXNpemU6MTJweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y29sb3I6IzY2Njtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NHB4O2xlZnQ6NHB4fS5lbC1jb2xvci1waWNrZXJfX2ljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dG9wOi02cHg7bWFyZ2luLWxlZnQ6OHB4O3dpZHRoOjEycHg7Y29sb3I6Izg4ODtmb250LXNpemU6MTJweH0uZWwtaW5wdXQsLmVsLWlucHV0X19pbm5lcnt3aWR0aDoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1jb2xvci1waWNrZXJfX3BhbmVse3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTA7cGFkZGluZzo2cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2QxZGJlNTtib3gtc2hhZG93OjAgMnB4IDRweCByZ2JhKDAsMCwwLC4xMiksMCAwIDZweCByZ2JhKDAsMCwwLC4xMil9LmVsLWlucHV0e3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNHB4fS5lbC1pbnB1dC5pcy1kaXNhYmxlZCAuZWwtaW5wdXRfX2lubmVye2JhY2tncm91bmQtY29sb3I6I2VlZjFmNjtib3JkZXItY29sb3I6I2QxZGJlNTtjb2xvcjojYmJiO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtaW5wdXQuaXMtZGlzYWJsZWQgLmVsLWlucHV0X19pbm5lcjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojYmZjYmQ5fS5lbC1pbnB1dC5pcy1kaXNhYmxlZCAuZWwtaW5wdXRfX2lubmVyOjotbW96LXBsYWNlaG9sZGVye2NvbG9yOiNiZmNiZDl9LmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNiZmNiZDl9LmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXI6OnBsYWNlaG9sZGVye2NvbG9yOiNiZmNiZDl9LmVsLWlucHV0LmlzLWFjdGl2ZSAuZWwtaW5wdXRfX2lubmVye291dGxpbmU6MDtib3JkZXItY29sb3I6IzIwYTBmZn0uZWwtaW5wdXRfX2lubmVyey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1pbWFnZTpub25lO2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgI2JmY2JkOTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6IzFmMmQzZDtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDoxO291dGxpbmU6MDtwYWRkaW5nOjNweCAxMHB4O3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSl9LmVsLWJ1dHRvbiwuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO291dGxpbmU6MDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtaW5wdXRfX2lubmVyOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5N2E4YmV9LmVsLWlucHV0X19pbm5lcjo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojOTdhOGJlfS5lbC1pbnB1dF9faW5uZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5N2E4YmV9LmVsLWlucHV0X19pbm5lcjo6cGxhY2Vob2xkZXJ7Y29sb3I6Izk3YThiZX0uZWwtaW5wdXRfX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojODM5MWE1fS5lbC1pbnB1dF9faW5uZXI6Zm9jdXN7b3V0bGluZTowO2JvcmRlci1jb2xvcjojMjBhMGZmfS5lbC1pbnB1dF9faWNvbntwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozNXB4O2hlaWdodDoxMDAlO3JpZ2h0OjA7dG9wOjA7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6I2JmY2JkOTt0cmFuc2l0aW9uOmFsbCAuM3N9LmVsLWlucHV0X19pY29uOmFmdGVye2NvbnRlbnQ6Jyc7aGVpZ2h0OjEwMCU7d2lkdGg6MDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLWlucHV0X19pY29uKy5lbC1pbnB1dF9faW5uZXJ7cGFkZGluZy1yaWdodDozNXB4fS5lbC1pbnB1dF9faWNvbi5pcy1jbGlja2FibGU6aG92ZXJ7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzgzOTFhNX0uZWwtaW5wdXRfX2ljb24uaXMtY2xpY2thYmxlOmhvdmVyKy5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWNvbG9yOiM4MzkxYTV9LmVsLWlucHV0LS1sYXJnZXtmb250LXNpemU6MTZweH0uZWwtaW5wdXQtLWxhcmdlIC5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjQycHh9LmVsLWlucHV0LS1zbWFsbHtmb250LXNpemU6MTNweH0uZWwtaW5wdXQtLXNtYWxsIC5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjMwcHh9LmVsLWlucHV0LS1taW5pe2ZvbnQtc2l6ZToxMnB4fS5lbC1pbnB1dC0tbWluaSAuZWwtaW5wdXRfX2lubmVye2hlaWdodDoyMnB4fS5lbC1pbnB1dC1ncm91cHtsaW5lLWhlaWdodDpub3JtYWw7ZGlzcGxheTppbmxpbmUtdGFibGU7d2lkdGg6MTAwJTtib3JkZXItY29sbGFwc2U6c2VwYXJhdGV9LmVsLWlucHV0LWdyb3VwPi5lbC1pbnB1dF9faW5uZXJ7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6dGFibGUtY2VsbH0uZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCwuZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmR7YmFja2dyb3VuZC1jb2xvcjojZmJmZGZmO2NvbG9yOiM5N2E4YmU7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6dGFibGUtY2VsbDtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6MXB4IHNvbGlkICNiZmNiZDk7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzowIDEwcHg7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtaW5wdXQtZ3JvdXAtLXByZXBlbmQgLmVsLWlucHV0X19pbm5lciwuZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5lbC1pbnB1dC1ncm91cC0tYXBwZW5kIC5lbC1pbnB1dF9faW5uZXIsLmVsLWlucHV0LWdyb3VwX19wcmVwZW5ke2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCAuZWwtYnV0dG9uLC5lbC1pbnB1dC1ncm91cF9fYXBwZW5kIC5lbC1zZWxlY3QsLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIC5lbC1idXR0b24sLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIC5lbC1zZWxlY3R7ZGlzcGxheTpibG9jazttYXJnaW46LTEwcHh9LmVsLWlucHV0LWdyb3VwX19hcHBlbmQgYnV0dG9uLmVsLWJ1dHRvbiwuZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCBkaXYuZWwtc2VsZWN0IC5lbC1pbnB1dF9faW5uZXIsLmVsLWlucHV0LWdyb3VwX19hcHBlbmQgZGl2LmVsLXNlbGVjdDpob3ZlciAuZWwtaW5wdXRfX2lubmVyLC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCBidXR0b24uZWwtYnV0dG9uLC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCBkaXYuZWwtc2VsZWN0IC5lbC1pbnB1dF9faW5uZXIsLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIGRpdi5lbC1zZWxlY3Q6aG92ZXIgLmVsLWlucHV0X19pbm5lcntib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjppbmhlcml0O2JvcmRlci10b3A6MDtib3JkZXItYm90dG9tOjB9LmVsLWlucHV0LWdyb3VwX19hcHBlbmQgLmVsLWJ1dHRvbiwuZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCAuZWwtaW5wdXQsLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIC5lbC1idXR0b24sLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIC5lbC1pbnB1dHtmb250LXNpemU6aW5oZXJpdH0uZWwtYnV0dG9uLC5lbC10ZXh0YXJlYV9faW5uZXJ7Zm9udC1zaXplOjE0cHg7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZHtib3JkZXItcmlnaHQ6MH0uZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZHtib3JkZXItbGVmdDowfS5lbC10ZXh0YXJlYXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMDAlO3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uZWwtdGV4dGFyZWEuaXMtZGlzYWJsZWQgLmVsLXRleHRhcmVhX19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNlZWYxZjY7Ym9yZGVyLWNvbG9yOiNkMWRiZTU7Y29sb3I6I2JiYjtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXRleHRhcmVhLmlzLWRpc2FibGVkIC5lbC10ZXh0YXJlYV9faW5uZXI6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I2JmY2JkOX0uZWwtdGV4dGFyZWEuaXMtZGlzYWJsZWQgLmVsLXRleHRhcmVhX19pbm5lcjo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojYmZjYmQ5fS5lbC10ZXh0YXJlYS5pcy1kaXNhYmxlZCAuZWwtdGV4dGFyZWFfX2lubmVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojYmZjYmQ5fS5lbC10ZXh0YXJlYS5pcy1kaXNhYmxlZCAuZWwtdGV4dGFyZWFfX2lubmVyOjpwbGFjZWhvbGRlcntjb2xvcjojYmZjYmQ5fS5lbC10ZXh0YXJlYV9faW5uZXJ7ZGlzcGxheTpibG9jaztyZXNpemU6dmVydGljYWw7cGFkZGluZzo1cHggN3B4O2xpbmUtaGVpZ2h0OjEuNTt3aWR0aDoxMDAlO2NvbG9yOiMxZjJkM2Q7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtaW1hZ2U6bm9uZTtib3JkZXI6MXB4IHNvbGlkICNiZmNiZDk7Ym9yZGVyLXJhZGl1czo0cHg7dHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKX0uZWwtdGV4dGFyZWFfX2lubmVyOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5N2E4YmV9LmVsLXRleHRhcmVhX19pbm5lcjo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojOTdhOGJlfS5lbC10ZXh0YXJlYV9faW5uZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5N2E4YmV9LmVsLXRleHRhcmVhX19pbm5lcjo6cGxhY2Vob2xkZXJ7Y29sb3I6Izk3YThiZX0uZWwtdGV4dGFyZWFfX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojODM5MWE1fS5lbC10ZXh0YXJlYV9faW5uZXI6Zm9jdXN7b3V0bGluZTowO2JvcmRlci1jb2xvcjojMjBhMGZmfS5lbC1idXR0b257ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MTt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2M0YzRjNDtjb2xvcjojMWYyZDNkO21hcmdpbjowO3BhZGRpbmc6MTBweCAxNXB4O2JvcmRlci1yYWRpdXM6NHB4fS5lbC1idXR0b24rLmVsLWJ1dHRvbnttYXJnaW4tbGVmdDoxMHB4fS5lbC1idXR0b246Zm9jdXMsLmVsLWJ1dHRvbjpob3Zlcntjb2xvcjojMjBhMGZmO2JvcmRlci1jb2xvcjojMjBhMGZmfS5lbC1idXR0b246YWN0aXZle2NvbG9yOiMxZDkwZTY7Ym9yZGVyLWNvbG9yOiMxZDkwZTY7b3V0bGluZTowfS5lbC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9LmVsLWJ1dHRvbiBbY2xhc3MqPWVsLWljb24tXStzcGFue21hcmdpbi1sZWZ0OjVweH0uZWwtYnV0dG9uLmlzLWxvYWRpbmd7cG9zaXRpb246cmVsYXRpdmU7cG9pbnRlci1ldmVudHM6bm9uZX0uZWwtYnV0dG9uLmlzLWxvYWRpbmc6YmVmb3Jle3BvaW50ZXItZXZlbnRzOm5vbmU7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xcHg7dG9wOi0xcHg7cmlnaHQ6LTFweDtib3R0b206LTFweDtib3JkZXItcmFkaXVzOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zNSl9LmVsLWJ1dHRvbi5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24uaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I2JmY2JkOTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1pbWFnZTpub25lO2JhY2tncm91bmQtY29sb3I6I2VlZjFmNjtib3JkZXItY29sb3I6I2QxZGJlNX0uZWwtY2hlY2tib3gsLmVsLWNoZWNrYm94X19pbnB1dHtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLWJ1dHRvbi5pcy1kaXNhYmxlZC5lbC1idXR0b24tLXRleHR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZWwtYnV0dG9uLmlzLWRpc2FibGVkLmlzLXBsYWluLC5lbC1idXR0b24uaXMtZGlzYWJsZWQuaXMtcGxhaW46Zm9jdXMsLmVsLWJ1dHRvbi5pcy1kaXNhYmxlZC5pcy1wbGFpbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiNkMWRiZTU7Y29sb3I6I2JmY2JkOX0uZWwtYnV0dG9uLmlzLWFjdGl2ZXtjb2xvcjojMWQ5MGU2O2JvcmRlci1jb2xvcjojMWQ5MGU2fS5lbC1idXR0b24uaXMtcGxhaW46Zm9jdXMsLmVsLWJ1dHRvbi5pcy1wbGFpbjpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLWNvbG9yOiMyMGEwZmY7Y29sb3I6IzIwYTBmZn0uZWwtYnV0dG9uLmlzLXBsYWluOmFjdGl2ZXtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLWNvbG9yOiMxZDkwZTY7Y29sb3I6IzFkOTBlNjtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0tcHJpbWFyeXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIwYTBmZjtib3JkZXItY29sb3I6IzIwYTBmZn0uZWwtYnV0dG9uLS1wcmltYXJ5OmZvY3VzLC5lbC1idXR0b24tLXByaW1hcnk6aG92ZXJ7YmFja2dyb3VuZDojNGRiM2ZmO2JvcmRlci1jb2xvcjojNGRiM2ZmO2NvbG9yOiNmZmZ9LmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1hY3RpdmUsLmVsLWJ1dHRvbi0tcHJpbWFyeTphY3RpdmV7YmFja2dyb3VuZDojMWQ5MGU2O2JvcmRlci1jb2xvcjojMWQ5MGU2O2NvbG9yOiNmZmZ9LmVsLWJ1dHRvbi0tcHJpbWFyeTphY3RpdmV7b3V0bGluZTowfS5lbC1idXR0b24tLXByaW1hcnkuaXMtcGxhaW57YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2JmY2JkOTtjb2xvcjojMWYyZDNkfS5lbC1idXR0b24tLXByaW1hcnkuaXMtcGxhaW46Zm9jdXMsLmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1wbGFpbjpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLWNvbG9yOiMyMGEwZmY7Y29sb3I6IzIwYTBmZn0uZWwtYnV0dG9uLS1wcmltYXJ5LmlzLXBsYWluOmFjdGl2ZXtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLWNvbG9yOiMxZDkwZTY7Y29sb3I6IzFkOTBlNjtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0tc3VjY2Vzc3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzEzY2U2Njtib3JkZXItY29sb3I6IzEzY2U2Nn0uZWwtYnV0dG9uLS1zdWNjZXNzOmZvY3VzLC5lbC1idXR0b24tLXN1Y2Nlc3M6aG92ZXJ7YmFja2dyb3VuZDojNDJkODg1O2JvcmRlci1jb2xvcjojNDJkODg1O2NvbG9yOiNmZmZ9LmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1hY3RpdmUsLmVsLWJ1dHRvbi0tc3VjY2VzczphY3RpdmV7YmFja2dyb3VuZDojMTFiOTVjO2JvcmRlci1jb2xvcjojMTFiOTVjO2NvbG9yOiNmZmZ9LmVsLWJ1dHRvbi0tc3VjY2VzczphY3RpdmV7b3V0bGluZTowfS5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtcGxhaW57YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2JmY2JkOTtjb2xvcjojMWYyZDNkfS5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtcGxhaW46Zm9jdXMsLmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1wbGFpbjpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLWNvbG9yOiMxM2NlNjY7Y29sb3I6IzEzY2U2Nn0uZWwtYnV0dG9uLS1zdWNjZXNzLmlzLXBsYWluOmFjdGl2ZXtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLWNvbG9yOiMxMWI5NWM7Y29sb3I6IzExYjk1YztvdXRsaW5lOjB9LmVsLWJ1dHRvbi0td2FybmluZ3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2Y3YmEyYTtib3JkZXItY29sb3I6I2Y3YmEyYX0uZWwtYnV0dG9uLS13YXJuaW5nOmZvY3VzLC5lbC1idXR0b24tLXdhcm5pbmc6aG92ZXJ7YmFja2dyb3VuZDojZjljODU1O2JvcmRlci1jb2xvcjojZjljODU1O2NvbG9yOiNmZmZ9LmVsLWJ1dHRvbi0td2FybmluZy5pcy1hY3RpdmUsLmVsLWJ1dHRvbi0td2FybmluZzphY3RpdmV7YmFja2dyb3VuZDojZGVhNzI2O2JvcmRlci1jb2xvcjojZGVhNzI2O2NvbG9yOiNmZmZ9LmVsLWJ1dHRvbi0td2FybmluZzphY3RpdmV7b3V0bGluZTowfS5lbC1idXR0b24tLXdhcm5pbmcuaXMtcGxhaW57YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2JmY2JkOTtjb2xvcjojMWYyZDNkfS5lbC1idXR0b24tLXdhcm5pbmcuaXMtcGxhaW46Zm9jdXMsLmVsLWJ1dHRvbi0td2FybmluZy5pcy1wbGFpbjpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLWNvbG9yOiNmN2JhMmE7Y29sb3I6I2Y3YmEyYX0uZWwtYnV0dG9uLS13YXJuaW5nLmlzLXBsYWluOmFjdGl2ZXtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLWNvbG9yOiNkZWE3MjY7Y29sb3I6I2RlYTcyNjtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0tZGFuZ2Vye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZmY0OTQ5O2JvcmRlci1jb2xvcjojZmY0OTQ5fS5lbC1idXR0b24tLWRhbmdlcjpmb2N1cywuZWwtYnV0dG9uLS1kYW5nZXI6aG92ZXJ7YmFja2dyb3VuZDojZmY2ZDZkO2JvcmRlci1jb2xvcjojZmY2ZDZkO2NvbG9yOiNmZmZ9LmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLWFjdGl2ZSwuZWwtYnV0dG9uLS1kYW5nZXI6YWN0aXZle2JhY2tncm91bmQ6I2U2NDI0Mjtib3JkZXItY29sb3I6I2U2NDI0Mjtjb2xvcjojZmZmfS5lbC1idXR0b24tLWRhbmdlcjphY3RpdmV7b3V0bGluZTowfS5lbC1idXR0b24tLWRhbmdlci5pcy1wbGFpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjYmZjYmQ5O2NvbG9yOiMxZjJkM2R9LmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLXBsYWluOmZvY3VzLC5lbC1idXR0b24tLWRhbmdlci5pcy1wbGFpbjpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLWNvbG9yOiNmZjQ5NDk7Y29sb3I6I2ZmNDk0OX0uZWwtYnV0dG9uLS1kYW5nZXIuaXMtcGxhaW46YWN0aXZle2JhY2tncm91bmQ6I2ZmZjtib3JkZXItY29sb3I6I2U2NDI0Mjtjb2xvcjojZTY0MjQyO291dGxpbmU6MH0uZWwtYnV0dG9uLS1pbmZve2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNTBiZmZmO2JvcmRlci1jb2xvcjojNTBiZmZmfS5lbC1idXR0b24tLWluZm86Zm9jdXMsLmVsLWJ1dHRvbi0taW5mbzpob3ZlcntiYWNrZ3JvdW5kOiM3M2NjZmY7Ym9yZGVyLWNvbG9yOiM3M2NjZmY7Y29sb3I6I2ZmZn0uZWwtYnV0dG9uLS1pbmZvLmlzLWFjdGl2ZSwuZWwtYnV0dG9uLS1pbmZvOmFjdGl2ZXtiYWNrZ3JvdW5kOiM0OGFjZTY7Ym9yZGVyLWNvbG9yOiM0OGFjZTY7Y29sb3I6I2ZmZn0uZWwtYnV0dG9uLS1pbmZvOmFjdGl2ZXtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0taW5mby5pcy1wbGFpbntiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjYmZjYmQ5O2NvbG9yOiMxZjJkM2R9LmVsLWJ1dHRvbi0taW5mby5pcy1wbGFpbjpmb2N1cywuZWwtYnV0dG9uLS1pbmZvLmlzLXBsYWluOmhvdmVye2JhY2tncm91bmQ6I2ZmZjtib3JkZXItY29sb3I6IzUwYmZmZjtjb2xvcjojNTBiZmZmfS5lbC1idXR0b24tLWluZm8uaXMtcGxhaW46YWN0aXZle2JhY2tncm91bmQ6I2ZmZjtib3JkZXItY29sb3I6IzQ4YWNlNjtjb2xvcjojNDhhY2U2O291dGxpbmU6MH0uZWwtYnV0dG9uLS1sYXJnZXtwYWRkaW5nOjExcHggMTlweDtmb250LXNpemU6MTZweDtib3JkZXItcmFkaXVzOjRweH0uZWwtYnV0dG9uLS1zbWFsbHtwYWRkaW5nOjdweCA5cHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLWJ1dHRvbi0tbWluaXtwYWRkaW5nOjRweDtmb250LXNpemU6MTJweDtib3JkZXItcmFkaXVzOjRweH0uZWwtYnV0dG9uLS10ZXh0e2JvcmRlcjpub25lO2NvbG9yOiMyMGEwZmY7YmFja2dyb3VuZDowIDA7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowfS5lbC1idXR0b24tLXRleHQ6Zm9jdXMsLmVsLWJ1dHRvbi0tdGV4dDpob3Zlcntjb2xvcjojNGRiM2ZmfS5lbC1idXR0b24tLXRleHQ6YWN0aXZle2NvbG9yOiMxZDkwZTZ9LmVsLWJ1dHRvbi1ncm91cHtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1wcmltYXJ5OmZpcnN0LWNoaWxke2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXByaW1hcnk6bGFzdC1jaGlsZHtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXByaW1hcnk6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KTtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1zdWNjZXNzOmZpcnN0LWNoaWxke2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXN1Y2Nlc3M6bGFzdC1jaGlsZHtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXN1Y2Nlc3M6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KTtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS13YXJuaW5nOmZpcnN0LWNoaWxke2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXdhcm5pbmc6bGFzdC1jaGlsZHtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXdhcm5pbmc6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KTtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1kYW5nZXI6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tZGFuZ2VyOmxhc3QtY2hpbGR7Ym9yZGVyLWxlZnQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1kYW5nZXI6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KTtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1pbmZvOmZpcnN0LWNoaWxke2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLWluZm86bGFzdC1jaGlsZHtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLWluZm86bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KTtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9ue2Zsb2F0OmxlZnQ7cG9zaXRpb246cmVsYXRpdmV9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uKy5lbC1idXR0b257bWFyZ2luLWxlZnQ6MH0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b246Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbjpsYXN0LWNoaWxke2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCl7Ym9yZGVyLXJhZGl1czowfS5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDotMXB4fS5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi5pcy1hY3RpdmUsLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uOmFjdGl2ZSwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b246Zm9jdXMsLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uOmhvdmVye3otaW5kZXg6MX0uZWwtY2hlY2tib3h7Y29sb3I6IzFmMmQzZDstbW96LXVzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lfS5lbC1jaGVja2JveCsuZWwtY2hlY2tib3h7bWFyZ2luLWxlZnQ6MTVweH0uZWwtY2hlY2tib3hfX2lucHV0e291dGxpbmU6MDtsaW5lLWhlaWdodDoxO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWluZGV0ZXJtaW5hdGUgLmVsLWNoZWNrYm94X19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiMyMGEwZmY7Ym9yZGVyLWNvbG9yOiMwMTkwZmV9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1pbmRldGVybWluYXRlIC5lbC1jaGVja2JveF9faW5uZXI6OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7Ym9yZGVyOjFweCBzb2xpZCAjZmZmO21hcmdpbi10b3A6LTFweDtsZWZ0OjNweDtyaWdodDozcHg7dG9wOjUwJX0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWluZGV0ZXJtaW5hdGUgLmVsLWNoZWNrYm94X19pbm5lcjo6YWZ0ZXJ7ZGlzcGxheTpub25lfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZm9jdXMgLmVsLWNoZWNrYm94X19pbm5lcntib3JkZXItY29sb3I6IzIwYTBmZn0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWNoZWNrZWQgLmVsLWNoZWNrYm94X19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiMyMGEwZmY7Ym9yZGVyLWNvbG9yOiMwMTkwZmV9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1jaGVja2VkIC5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVyey1tcy10cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSBzY2FsZVkoMSk7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZykgc2NhbGVZKDEpfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQgLmVsLWNoZWNrYm94X19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNlZWYxZjY7Ym9yZGVyLWNvbG9yOiNkMWRiZTU7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQgLmVsLWNoZWNrYm94X19pbm5lcjo6YWZ0ZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkO2JvcmRlci1jb2xvcjojZWVmMWY2fS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQgLmVsLWNoZWNrYm94X19pbm5lcisuZWwtY2hlY2tib3hfX2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWRpc2FibGVkLmlzLWNoZWNrZWQgLmVsLWNoZWNrYm94X19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNkMWRiZTU7Ym9yZGVyLWNvbG9yOiNkMWRiZTV9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1kaXNhYmxlZC5pcy1jaGVja2VkIC5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVye2JvcmRlci1jb2xvcjojZmZmfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQuaXMtaW5kZXRlcm1pbmF0ZSAuZWwtY2hlY2tib3hfX2lubmVye2JhY2tncm91bmQtY29sb3I6I2QxZGJlNTtib3JkZXItY29sb3I6I2QxZGJlNX0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWRpc2FibGVkLmlzLWluZGV0ZXJtaW5hdGUgLmVsLWNoZWNrYm94X19pbm5lcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQrLmVsLWNoZWNrYm94X19sYWJlbHtjb2xvcjojYmJiO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY2hlY2tib3hfX2lubmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlcjoxcHggc29saWQgI2JmY2JkOTtib3JkZXItcmFkaXVzOjRweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MThweDtoZWlnaHQ6MThweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ei1pbmRleDoxO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4yNXMgY3ViaWMtYmV6aWVyKC43MSwtLjQ2LC4yOSwxLjQ2KSxiYWNrZ3JvdW5kLWNvbG9yIC4yNXMgY3ViaWMtYmV6aWVyKC43MSwtLjQ2LC4yOSwxLjQ2KX0uZWwtY2hlY2tib3hfX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojMjBhMGZmfS5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVye2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29udGVudDpcXFwiXFxcIjtib3JkZXI6MnB4IHNvbGlkICNmZmY7Ym9yZGVyLWxlZnQ6MDtib3JkZXItdG9wOjA7aGVpZ2h0OjhweDtsZWZ0OjVweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MXB4Oy1tcy10cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSBzY2FsZVkoMCk7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZykgc2NhbGVZKDApO3dpZHRoOjRweDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzIGN1YmljLWJlemllciguNzEsLS40NiwuODgsLjYpIC4wNXM7LW1zLXRyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyfS5lbC1jaGVja2JveF9fb3JpZ2luYWx7b3BhY2l0eTowO291dGxpbmU6MDtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW46MDt3aWR0aDowO2hlaWdodDowO2xlZnQ6LTk5OXB4fS5lbC1jaGVja2JveC1idXR0b24sLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLWNoZWNrYm94X19sYWJlbHtmb250LXNpemU6MTRweDtwYWRkaW5nLWxlZnQ6NXB4fS5lbC1jaGVja2JveC1idXR0b24uaXMtY2hlY2tlZCAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIwYTBmZjtib3JkZXItY29sb3I6IzIwYTBmZjtib3gtc2hhZG93Oi0xcHggMCAwIDAgIzIwYTBmZn0uZWwtY2hlY2tib3gtYnV0dG9uLmlzLWRpc2FibGVkIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2NvbG9yOiNiZmNiZDk7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtaW1hZ2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWYxZjY7Ym9yZGVyLWNvbG9yOiNkMWRiZTU7Ym94LXNoYWRvdzpub25lfS5lbC1jaGVja2JveC1idXR0b25fX2lubmVyLC5lbC10cmFuc2Zlci1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7dmVydGljYWwtYWxpZ246bWlkZGxlO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtY2hlY2tib3gtYnV0dG9uLmlzLWZvY3VzIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2JvcmRlci1jb2xvcjojMjBhMGZmfS5lbC1jaGVja2JveC1idXR0b246Zmlyc3QtY2hpbGQgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNiZmNiZDk7Ym9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fS5lbC1jaGVja2JveC1idXR0b246bGFzdC1jaGlsZCAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2xpbmUtaGVpZ2h0OjE7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlcjoxcHggc29saWQgI2JmY2JkOTtib3JkZXItbGVmdDowO2NvbG9yOiMxZjJkM2Q7bWFyZ2luOjA7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTtwYWRkaW5nOjEwcHggMTVweDtmb250LXNpemU6MTRweDtib3JkZXItcmFkaXVzOjB9LmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXI6aG92ZXJ7Y29sb3I6IzIwYTBmZn0uZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lciBbY2xhc3MqPWVsLWljb24tXXtsaW5lLWhlaWdodDouOX0uZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lciBbY2xhc3MqPWVsLWljb24tXStzcGFue21hcmdpbi1sZWZ0OjVweH0uZWwtY2hlY2tib3gtYnV0dG9uX19vcmlnaW5hbHtvcGFjaXR5OjA7b3V0bGluZTowO3Bvc2l0aW9uOmFic29sdXRlO21hcmdpbjowO2xlZnQ6LTk5OXB4fS5lbC1jaGVja2JveC1idXR0b24tLWxhcmdlIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye3BhZGRpbmc6MTFweCAxOXB4O2ZvbnQtc2l6ZToxNnB4O2JvcmRlci1yYWRpdXM6MH0uZWwtY2hlY2tib3gtYnV0dG9uLS1zbWFsbCAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntwYWRkaW5nOjdweCA5cHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czowfS5lbC1jaGVja2JveC1idXR0b24tLW1pbmkgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7cGFkZGluZzo0cHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czowfS5lbC10cmFuc2Zlcntmb250LXNpemU6MTRweH0uZWwtdHJhbnNmZXJfX2J1dHRvbnN7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlO3BhZGRpbmc6MCAxMHB4fS5lbC10cmFuc2Zlcl9fYnV0dG9ucyAuZWwtYnV0dG9ue2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjAgYXV0bztwYWRkaW5nOjhweCAxMnB4fS5lbC10cmFuc2Zlci1wYW5lbF9faXRlbSsuZWwtdHJhbnNmZXItcGFuZWxfX2l0ZW0sLmVsLXRyYW5zZmVyX19idXR0b25zIC5lbC1idXR0b24gW2NsYXNzKj1lbC1pY29uLV0rc3BhbnttYXJnaW4tbGVmdDowfS5lbC10cmFuc2Zlcl9fYnV0dG9ucyAuZWwtYnV0dG9uOmZpcnN0LWNoaWxke21hcmdpbi1ib3R0b206NnB4fS5lbC10cmFuc2Zlci1wYW5lbHtib3JkZXI6MXB4IHNvbGlkICNkMWRiZTU7Ym94LXNoYWRvdzowIDJweCA0cHggcmdiYSgwLDAsMCwuMTIpLDAgMCA2cHggcmdiYSgwLDAsMCwuMDQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjIwMHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtdHJhbnNmZXItcGFuZWxfX2hlYWRlcntoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4O2JhY2tncm91bmQ6I2ZiZmRmZjttYXJnaW46MDtwYWRkaW5nLWxlZnQ6MjBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZDFkYmU1O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjojMWYyZDNkfS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtdHJhbnNmZXItcGFuZWxfX2Zvb3RlcntoZWlnaHQ6MzZweDtiYWNrZ3JvdW5kOiNmZmY7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlci10b3A6MXB4IHNvbGlkICNkMWRiZTU7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3dpZHRoOjEwMCU7ei1pbmRleDoxfS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtdHJhbnNmZXItcGFuZWxfX2Zvb3RlcjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OlxcXCJcXFwiO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLXRyYW5zZmVyLXBhbmVsX19mb290ZXIgLmVsLWNoZWNrYm94e3BhZGRpbmctbGVmdDoyMHB4O2NvbG9yOiM4MzkxYTV9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9fZW1wdHl7bWFyZ2luOjA7aGVpZ2h0OjMycHg7bGluZS1oZWlnaHQ6MzJweDtwYWRkaW5nOjZweCAyMHB4IDA7Y29sb3I6IzgzOTFhNX0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLWNoZWNrYm94X19sYWJlbHtwYWRkaW5nLWxlZnQ6MTRweH0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLWNoZWNrYm94X19pbm5lcnt3aWR0aDoxNHB4O2hlaWdodDoxNHB4O2JvcmRlci1yYWRpdXM6M3B4fS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtY2hlY2tib3hfX2lubmVyOjphZnRlcntoZWlnaHQ6NnB4O3dpZHRoOjNweDtsZWZ0OjRweH0uZWwtdHJhbnNmZXItcGFuZWxfX2JvZHl7cGFkZGluZy1ib3R0b206MzZweDtoZWlnaHQ6MjQ2cHh9LmVsLXRyYW5zZmVyLXBhbmVsX19saXN0e21hcmdpbjowO3BhZGRpbmc6NnB4IDA7bGlzdC1zdHlsZTpub25lO2hlaWdodDoyNDZweDtvdmVyZmxvdzphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtdHJhbnNmZXItcGFuZWxfX2xpc3QuaXMtZmlsdGVyYWJsZXtoZWlnaHQ6MjE0cHh9LmVsLXRyYW5zZmVyLXBhbmVsX19pdGVte2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHg7cGFkZGluZy1sZWZ0OjIwcHg7ZGlzcGxheTpibG9ja30uZWwtdHJhbnNmZXItcGFuZWxfX2l0ZW0gLmVsLWNoZWNrYm94X19sYWJlbHt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nLWxlZnQ6MjhweH0uZWwtdHJhbnNmZXItcGFuZWxfX2l0ZW0gLmVsLWNoZWNrYm94X19pbnB1dHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6OXB4fS5lbC10cmFuc2Zlci1wYW5lbF9faXRlbS5lbC1jaGVja2JveHtjb2xvcjojNDg1NzZhfS5lbC10cmFuc2Zlci1wYW5lbF9faXRlbTpob3ZlcntiYWNrZ3JvdW5kOiNlNGU4ZjF9LmVsLXRyYW5zZmVyLXBhbmVsX19maWx0ZXJ7bWFyZ2luLXRvcDoxMHB4O3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MCAxMHB4O3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC10cmFuc2Zlci1wYW5lbF9fZmlsdGVyIC5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjIycHg7d2lkdGg6MTAwJTtkaXNwbGF5OmlubGluZS1ibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXRyYW5zZmVyLXBhbmVsX19maWx0ZXIgLmVsLWlucHV0X19pY29ue3JpZ2h0OjEwcHh9LmVsLXRyYW5zZmVyLXBhbmVsX19maWx0ZXIgLmVsLWljb24tY2lyY2xlLWNsb3Nle2N1cnNvcjpwb2ludGVyfVwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIhLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtZGVmYXVsdC9pbmRleC5jc3Ncbi8vIG1vZHVsZSBpZCA9IDcxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///71\n')},function(module,exports){eval('module.exports = "data:application/font-woff;base64,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"\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtZGVmYXVsdC9mb250cy9lbGVtZW50LWljb25zLndvZmY/NjU4NCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2Q0FBNkMiLCJmaWxlIjoiNzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7YmFzZTY0LGQwOUdSZ0FCQUFBQUFCOUVBQkFBQUFBQU5BQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCR1JsUk5BQUFCYkFBQUFCb0FBQUFjZENXSjNrZEVSVVlBQUFHSUFBQUFIUUFBQUNBQVdBQUVUMU12TWdBQUFhZ0FBQUJOQUFBQVlGZHZYT0JqYldGd0FBQUIrQUFBQUZBQUFBRlM1bUh0YzJOMmRDQUFBQUpJQUFBQUdBQUFBQ1FOWmY3MFpuQm5iUUFBQW1BQUFBVDhBQUFKbGpEM25wVm5ZWE53QUFBSFhBQUFBQWdBQUFBSUFBQUFFR2RzZVdZQUFBZGtBQUFVUEFBQUlVdzRSUHF3YUdWaFpBQUFHNkFBQUFBdkFBQUFOZ3hKS3d0b2FHVmhBQUFiMEFBQUFCNEFBQUFrQ1F3RkRHaHRkSGdBQUJ2d0FBQUFWZ0FBQUt5azVBYVNiRzlqWVFBQUhFZ0FBQUJZQUFBQVdKd1FwQXh0WVhod0FBQWNvQUFBQUNBQUFBQWdBVTRDSkc1aGJXVUFBQnpBQUFBQk5RQUFBaXQvdVgzUGNHOXpkQUFBSGZnQUFBQ3lBQUFCc01MQVhvSndjbVZ3QUFBZXJBQUFBSlVBQUFDVnBibStabmljWTJCZ1lHUUFnak8yaTg2RDZNdWZQN2ZEYUFCWTh3ajhBQUI0bkdOZ1pHQmc0QU5pQ1FZUVlHSmdCRUl0SUdZQjh4Z0FCaGdBWFFBQUFIaWNZMkJoNFdYOHdzREt3TUEwaytrTUF3TkRQNFJtZk0xZ3pNZ0pGR1ZnWTJhQUFVWUJCZ1FJU0hOTllUakFVUEZNbmJuaGZ3TkRESE1EUXdOSURVaU9XUUtzUklHQkVRQ1Evd3o0QUFBQWVKeGpZR0JnWm9CZ0dRWkdCaER3QWZJWXdYd1dCZ01nelFHRVRFQzY0cG5LTS9YLy84RXNobWRxLy8vLzc1WmlrV0tHNmdJRFJqWUdPSmNScEllSkFSVXdNdEFNTU5QT2FKSUFBQXIxQzZKNG5HTmdRQU5HREViTUV2OGZNamY4YjREUkFFVm1DRjk0bkoxVmFYZlRSaFNWdkdSUDJwTEVVRVRiTVJPbk5CcVpzQVVETGdRcHNndnA0a0JvSmVnaUp6RmQrQU44N0dmOW1xZlFudE9QL0xUZU8xNFNXbnBPMnh4TDc3NlpPMi9UZXhOeGpLanNlU0N1VVVkS1h2ZWtzdjVVS3ZHenBLN3JYcDRvNmZXU3VteW5ucElXVVN0TmxjekYvU081UkhVdVZySkpzRW5HNjE2aW5xczg3NFBTU3pLc0tFc2kyaUxheXJ3c1RWTlBIRDlOdFRpOVpKQ21nWlNNZ3AxS280OFFxbEV2a2FvT1pVcUhYcjJlaXBzRlVqWWE4YWlqb25vUUt1NGN6em1salRwZ3BIS1Z3MXl4V1cza2Uwblc4L3FQMGtTbjJOdCtuR0REWS9RalY0RlVqTXpBOWpRZWgwOGswOUZlSWpPUmYreTRUcFNGVWh0Y0FLOXFzTWVnU3ZHaHVQRkJ0aFBJMUhqTjhYVlJxVFF5RmVlNno3TFpMQjJQbFJEbHdkL1lvWlFidXIrRHM5T21xRlpqY2Z2QU13WTVLWlFvZWtnV2dBNVRtYWYyQ05vOHRFQm1qZnFqNGh6d2RRZ3ZzaEJsS3MrVUxPaFFCekpuZHZlVFl0cmRTZGRrY2FCZkJqSnZkdmVTM2NmRFJhK085V1c3dm1BS1p6RjZraFNMaXhIY2h6THJwMHk3MUFoSEdSZHp3TVU4WHVMV3RFTEl5QUtNU2lQTVVWdjRudG1vYTV3ZFkyOTBIby9WVTJUU1JmemRUSDQ5T0tsWTRUakxla2ZjU0p5N3g2N3J3bFVnaXdpbkd1OG5qaXpxVUdXdyt2dlNrdXNzT0dHWVo4VkN4WmNYdm5jUitTOHhiaitRZDB6aFVyNXJpaExsZTZZb1U1NHhSWVZ5R1lXbFhESEZGT1dxS2FZcGE2YVlvVHhyaWxuS2MwYW0vWC9wKzMzNFBvY3o1K0diMG9OdnlndndUZmtCZkZOK0NOK1VIOEUzcFlKdnlqcDhVMTZFYjBwdDRHMHBVeEdxbUxGMCtPMGxXcldoYWprenVNQStEMlROaVBaRmJ3VFNNRXAxMVVrcGRiK2xWZjRrK2V1aXgyUHJrNUs2Tldsc2lMdTZhYlA0K0hUR2IyNWRNdXFHbmF0UGpDUGxvVDEwOWRnMG9WUDd6ZUhmemwzZEtpNjVxNGhxdzZnMklwZ0VnRGJvdHdMeFRmTnNPeER6bGwxOC9FTXdBdFRQcVRWVVUzWHQxSlVhRC9LOHE3c1ludVRBNDRoam9JM3JycTdBU3hOVFZrUHo0V2NwTWhYN2c3eXBsV3Juc0hYNVpGczFoemFrd3RzaTlwVmtuS2J0dmVSVlNaV1Y5NnEwWGo2ZmhpRjZlaGJYaExaczNjbWtFcUZSTTg3eDhLNHFSZG1SbG5MVVAwTG5sNksrQjV4eGRrSHJ3ekh1Uk4xQnRUWHNkUGo1WmlOckN5YUdwclM5RTZCa0xGMFZZMUhsV1p4amRBMXJIVy9jRXA2dXB5Y1c4U2sybVkvQ1NuVjlsSTl1STgwcmRsbG0wYWhLZFhTWDlsbnNxemI5TWp0b1dCMW5QMm1xTnU3cVlWdU5LbEk5VmI0R3RBZDJWdDM0VUE4clB1cWdVVlUxMitqYXlHTTBMbXZHZnd6SVlsejU2MGFySnRQdjRKWnFwODFpelYxQmM5K1lMUGRPTDIrOXlYNHI1NmFScHY5V295MGpsLzBjanZsdEVlRGZPU2gyVTlaQXZUVnBpSEVCMlFzWUx0VkU1dzdOM2NZZzRqcjdINTNUL1cvTndpQTVxMjJOMlR6MTRlcnBLSkk3VEhtY1padFoxdlVvelZHMGs4UStSV0tydzRuQlRZM2hXRzdLQmdiazdqK3MzOE05NEs0c2l3KzhiU1NBdU0vYXhLaWU2dUR1SGxjak5Pd3J1UThZbVdQSHVRMndBK0FTeE9iWXRTc2RBTHZTSmVjT3dHZmtFRHdnaCtBaE9RUzc1TndFK0p3Y2dpL0lJZmlTSElLdnlMa0YwQ09IWUk4Y2drZmtFRHdtcHcyd1R3N0JFM0lJdmlhSDRCdHlXZ0FKT1FRcE9RUlB5U0Y0Wm1SelV1WnZxY2gxb084c3VnSDB2ZTBhS0Z0UWZqQnlaY0xPcUZoMjN5S3lEeXdpOWRESTFRbjFpSXFsRGl3aTlibEZwUDVvNU5xRStoTVZTLzNaSWxKL3NZalVGOGFYbVlHVTEzb3ZlVWNIZndJcnZxeCtBQUVBQWYvL0FBOTRuS1ZhQzNCYzFYaysvem4zdVhlMWUzZnZhNlY5YVhlMXU1SldYcTMyYVVsSXVuN0lHR1RabHNBUEdUQUJIRVVPSVFrVWNBZ01FU1VFS01uUUl0bDBTSWQybUV3eXpXTmlwcVY1a3BCMENoTkRRekxCdEJQYXp0UUpNMjNpYVdkbytnaTFydnVmdTdJdE9XQ2NablgzbkhQUDh6L25mMzMvV1JGS3NvUkFsWDZSTUNLVFByZEFDR0dVc0gyRUF0QXBRaW5zRXJBRVd3aVJKVkhBYml3aWhrdTFTQ1pTckVWeVdkRC83WlZYNkJkWDltYnBQSTRWeWNEWmYyYmZaakZpa3dvWkliUGtJQnlaT203czN1OWVUWUYwaERwSWFKNndFSVRZUVFLS0F0ZnJvQ29CU1QwWWdhQWtTTUdEUkJPMHcyRlFpQlJVcFAwa0lJdFUwQUxDWEJSQ29ZNFowdEVSQ0cyT1R4MTNjTWFwUzh5b3FJSDUzM0xLR0U2NTQvS21GT1l2YTA1MzUwWFR3VHpPRndMbDBQOXZ3cm01T2JmM21tdEdSNnREam5QTndXc09YcmQvZEhaMGRtcExxekUwVWgxeEtrNWxKaklVaS9SYXJtR1hRQ3BCTmtTVGtHblVDNDE2bVpiQXlvaVdhWnNobXBNS0pTaG1aT3hSekpicEdEaFp5YlJyMVdhOTRFaHlpS1ZnVktvMmkyVW9Gb3JRcUkvVFVhamFTWURPZU5jMTBYd2l5djRRQXJGaTZpSHZhdm9NV09sY0tKUU9kVy93cmhwSVpzM096bTVET1JLTVJvTWQwZWluRlVuVUJDcUVRL2t0TTd2ZEhzZFdSVlVVSmU5ellyakwrbmE2ajZZaDJGbnMydEduSjRTTzduajBwa2ZxenNoSTNsRUJGaGZCaUhlSHZqQVI2WXJnYzErWGJmU0U5QTRsMXRXUml4Z21IUG01RmpPQ3ljTFBVSVJSOWg0UUNGMGtTZEx2RmdOQWlRTUNwUzRBb1dTQkFSWG9nZ2lDY0NOMlRKS2s0WmlPRkMzbDdXWUxtbVdRWkJYS0lFdVc2VUNsWmpzMi96cndMOUgrRUR3ZnBZVkcxTHZkdTlXb0cyWVV2Z2Y4UXdNQW4xS2tEbGpTTjNSVDNUc0dDeEhROVppdGU3ZnpaaEU0U1FTTFp4ZFJaemhkV1RlZDdIU3NBSkdBZ012YnlEVHZNb1BVdzJTZlJmVVNGRGc5S1orZUZOS1R5eGFoMGlnVUMveGJCT25TQzhMQ3BlbjE2U0ZuRituWnk2YW5pYXNXUW1Bak8wS0F4MUp0SVQzTlZwTi9XL1J0cE1lN3phY0hQdWo5OFNvOThQaHZRUTkrRjVGdm4yanp6VUUrQlpCajFFVmVVWUh6amRBRjNuTTkzNkFneVNDbG9Obmk1NFRrMVBHY2NuaEcvRnVrTVZ6WDIrS3ZpOFFjOWRmMUpzNnZTejkrYWJwOXVoZzV5cjVPbnlRYWNWeVQwd25UL0lSbWVOdGtQWUtIMHhhZVFpNlRsUng0S3JFckFSOXBwYWRYeE9sMDY5a0V4T0g5alIwN0d2NlphMmMvd3pyWVpoSWswbDhFUkVEVks5UnhxRzFGVEtrSVVJaGo1K2FPSFUzdnM1Q1A3NDVmbUFjKzhpN2ptN2poZ29UajdSYlF0K0p4N3ltK0dNeS80M2pjeTdFMWU3bUkwZjVlb0ZsMXdKWndMNFhXUlh1aDkrSDBuMjFPVFRYOXVjYlAvcnRZWmdkSWxJdzhwK0o0Y0tlTzk2RGxqS0RIb0F0OFJ1UWF3YVhRL0lYWDE5MDQ5NXhsV3JvUUxZa28xNFU2cnFuaXdyYUp2TXpSbnQ2RWQyOXllQ1lCTGoyVTNEMmNXTm1YNklzazRDRmU5bDZnaHhMRHU1TlloL3FNTWl4d25RcVRBaGwxTjZhQU1pN0FBbGtnZ2lnc1NDQXljUUg5R0Z2dzNkZzBkMk96QkwzWU5sM1hDM3JCakhVNnVteVVDSnBITTBXcjQ3UmVCZ1pTZHBBVzZoTklVaHI4QkNtakgzenRXNC90M3YzWXQ5cVo3RDJtR0lyOFExbXV5YWI4UjFERnRLb29iUEY4RDU1NTMvTWVrMlhsaDRyZitBUU1LVW9WaCtINVhhQTlUVXFrNFZaanVrSUVybjk0UUNLSUJPYVJZZ0dsL3hENlVrR2NKcUlvelBCZFRWclJMck1yS3BrbGxQZXFZNXRoMUVkSlJwclJUbVNMbk80aVdnOXNpbmFQZzE2RzdoRG9OZzJjMEZLYXBwMDRvVUVBUzVpbkF4ZGVHMkNmZnZUUjA5NHZNSVd2bk5DMFFKcTNwYlJBNE9XWEEyc0dyS2lQbmo3ZmQ5MCt3cVRHOTFIcno4UUVnZko5VUJCUWplZHhEd1NmUTNqdTYzVEhUSmdKUjhkOUNPaDQwTE5VVTlRTUFXdldCNkdRRGVNbU1KSE1OTzRLRTdzNmdkdkVoRGRmeElzUldXN2c4UzhmeGFRaFNVZVBTaEovUDdyTTMyWDU2SHFlMEVuWlVtcUtzclNrWUdiSnkwdVkxR1Y1ZVZuR3pGS1d1STZmNTAzZXphN2xETmNZTHNFd2c5eEJuZUdjUURGV2tXSVo3YUtLQkNPVmFJd3dRZFZVdVg2aVA2SEV1OGNhTlUydzRHRXNXZVlvRnVCaHJMSXM3eDRzK0RVL1h5MTQ5L2k5cmQvb2pPUEpxcTBrSElHUlB2S2txK21BSXV0RzBXWk5UQjNYVUFQejZPK0F5UXprZVk3bUpDYlBLU0FSSWsxakpwRlpFWWhFdGlIUXNiRno2a0puYlBXYjloSlpaak9Fc1lDTXVudDVzeUVnMFhyTVRFL2VqSmpkcWxQSzFNWVJMaFJ5bFZ3RnM2eGtWYXhLRGpQVGRtcU5YTGJRVmk0YmtRbHRucHgvZkhsQldmcnhzckt3L1BqOG13Zk1vUFpwMlpBL0V3Z2FCOWp5L09Hanl1SGw1Y1BLMGNQenkrekx0djU2SVBDNmJ2dXlCNnQ4U3BKUk11Z09qTFlhdGQ1VTI1Y0ZPY2RvbTJQVTV4anpPVGE0b1NmWFp3bDZ5YmlraTgxZnN2VTkvQzhsdjV0L3B1L3BMdGZvWFFMUmRjWGRNTnlvRFZXS3lVU01iNzdqWFRaZkhzaGwvYzIvaXorZmdBcTY4L3c3Tko3MzlSWDJ0aUtHM3RscFVnbkFJKy9hL0I1N3A4SEwyRGtsN3ovN0VIc1k5NDArakdzbkFVUlZRSGpNOFFGQ0dmT05QSmRleWliclpqM0NuUXdxNDNuL3ZOYS9mYjFyZXhjTTFPUGJWajYxTFY2RERldGViNG5GSUZIWnVyVkN2eHFMZVc4T2JkMDZ4R01pVWtJY2R4TFhkMGdjN2NNenF5cm5vd1c0WGdPVktMS3E3QXVBVEZCcDloSlVrUm5VSUVJQ0VvOHRxdGk1aDNlR2hmZm82NWJhM2Z3S1NTWFMvclVER0pPbk1KUFpMQi9LMWM5SkpHS3hSRHFSVGlWajhWZzhHc2szTWhFOWFKVVE5dWNzcm5zSUVtcVphck1ScVNOd2FPUUFRemYrcFQvd1B2eGtOVkVzSkZnaFVTakdhMCt1L0IxOXdYc1o0VUxvamp1S2lUUC9reWdXRTB4SkZPODQ4MkU2dHZMWE1IYld0MEVTV2NTendEL1NpZEhqQU5sSXRwTGQ1QWIzQURkUFFJUzVzQmhpV0tBeTBEa2lCd05VVVdWbHJrT2pxaVNwMHp4WHBSa2RKRldhek9lNnVnalpPYjM5eXMyYnJoaHROaXFEZmIyNWdmeEFWN1lybTA3aUFwMU5veGFKbExoUndWaEZTa0xPNURDOXZhTjZZUkRFUnIxWjgyTVRmNDhaM0MwZ3N2Q3hWYmJRWU85U3ByK2ZpVDNTMmZjS0hjckY2Qi9FY3FsUTJMdTNKNUhNNFI0WEcxTXJpMU53VDlqV2RUdjhkTmdPaDg5bjlQdjN4L09GcnZzQjdQNnVRcUVybGhFRjZuYmp4ejN6d2xRRExUNXBUTUhQdFVoRTg3NFkxUFVnN0gzbk1wZnBQWGlPWDhKejdFQ0pHbmFiYU5BRnhERU1rUytqODF3TUJBYkNIRmQ2WDd5NUE2VmtFb0Z3UEdZYk9nNEwxcVV3ZXFFMUhNNFpwaS9salVpTlYrREpXUEFONzA5bVIrajR5T3pzU0tZLzZZVlNmYjlPOXVQREZyMG5WbjQ5UERzN1RIOHhQSHZtdVdSL1h3cVcrMU1BL2NsMXRrWkE1QmwxdzdLRTlJaGtETnR1akVPNDFHSjVLTFprQjExZUlYdnR0VkNETjA4OWY4L1A3aXBmLytCZmVxL3NnVGZmZVA2ZU4rNHFQM2c5MTU4TGVDRkdla2pkSFNJZ2NkeUdJc0lRM3pEY3AwaUlEM2o0UGtVeUdkR3ptVVRjTXZWWUpJWndUVjhQR0lBSHJEeGVOWHcvRStFdmpZc1FndmRHdXI4MDFsOUtacXRaZkM0Q0JDZExZeVY4dk5OT0p1TjQveHZyN282dHdRQitQRUlFeXBBWkdMVVRLclJKSld3YVhTUW5rWkZKeThybERkRW9SY3dVdEZGWHJoMUhwd0JKekpiQmQ0TG5vTk5qdXVQb2Q3OTA1NTB2blg3cFRpZmp3T0pqdkpvMzRwdGZlK2RMZDJNbjd1WXZuRmVhREpJSnN0MmQxQ1NWb1ZJeHRIZHpBVUZodnAzM0MyanBmYXN4V2Exa3U2TTZKU090eWtSMW9yL1lQWmdkN0hMMGREUWRrRW1ZaG9PaEVpY3hDYWFORVgxekRPMGp1K2g5Zlh2OW92WjZBZVovTmJobHkrQ3ZLcHZwbHFFTFJmaHZ6RFpYemxXMFMzRGRsc0gvckd6Rm1xR3ROSCtoWWVVTnJPYzkzMXBmNzh2Y1NkeDNpWmlrUWo3cWhub3NYVVJia3JNcHFnV0dHbkUwcExZUEpybURDMndpZ3NCdElkTVlON1A5MkdyNm5nK3g1OXphTnJkelRUVmp3dlJxbzhDTjZGK1ZXckZZTi9JUk1ueXZLYUU2emxvY3hrQWtKYUJtamRNSmlJU0VITXJmSUxERkZkSzNMenI2OUFQM0Q5ei93Tk9qMFgxOVp4YXAzSmtvT1l4WXBhUWpTZUhhWis3N2RGL2ZJdy9mV3l5dzBraFBORnhkdkhuM3Jwcy9VUXNiUFNQZTJ5dHZNZFdPaGtLR0ljdFVEMjM0dmYzYkoyKzZPWnYxTVI0TUlaR3ZvcDlMdTRsMXZ0eVAxaEJqaUVTakdndVZqQXlHVHI2eTE1dTcyTTJaY2psejVtbE00ZFh5NWpJK3hQZGJCQUk0MzM4UlpELzZyb3liRXBrLzNUVFBvZTE0RUpVYi9NTlJlWlRyRkFxeGNGRStlZk1rUHZEcXVpelFybDN6dE5kYzVXR1lESkZSME4zZ2FKVlNlYWgzbFlkQjVGS1Z5Q0lWNVlPRVNpS1ZEaEZKRUNXTWVRUW1DdXlRYndPVU5uOFo0NkViYU1ENXk3bGZhNCtrODcvZFVDNGFRNWNjeWtlSk1oSG4xZzUwbTVjN0JxMzM5T3BJQnR2NFZaME5aSGhqbzE0dTllUVNYWmFoU2lRTUlSVVp0OTRwNTFpWm9vNkZnU0hjTEF6U01zVVhHa0czbHVIdUNyaS84ajNYMHRqZXZXUDBweno5RkVoeHcweUo0dkdBbzBVRmRnTU5KT01KV2Q3ZW42WkxxWDd2S3ZjNkZ4OVcyanUyOGlOL1dHVnNyL2RKcWdRMVVmVCsxUWdJNG0xTWkwWlZkUis4a2lxVlV0NCtTRzRZbjlnL1BqNndHbXVzMnArNGo3WkVRc1ZwMUVQR1VTNnFrQ2pTR2F5aWswWXVaK1M2ZVZTYThTMWZwbTJJSXhrdU5ybE14RGZPOERWdktWMHFwZUcyMGhVbHVJMFh2U1ZlL0FFbXY5SFV4cm5Gczk5bno3TVJsTnNrS2JvOU5zcXFncUVsNVJkVi9FSVB5eGpkMHhzSlNjU3hrMndJNFZKUFcxUnRNUVFGakwvR3FlM1lVUmxqWlI0aFUrSFlzZGVPSFlNRFU5LzQydGFyNi9XbEYxKzgrbjJKSzE4MmpHakRmSWszdlhaczRJcWUxdVRWTC83TmNyMSs5ZnU4Ly9qSUNhT0JhckhxQzcrTTUzRXQrUkM1bTl6dXFoKzY5WU4xZ1Y4N3RPK043VldmZ0dLSGZvSnlaVjJWTzM0M1lnajgxQ2pzT2QrTFc2U3UxYnYyT1d6bHR4VG5CbEtZUk9FSjNuM1hIYmQvK0xhZE8yS09pRWE3REJnZUYzbjh4QU1SL3cwbGhrZi8vTjRTZzFBVUxjRElTcFo0d1lkSWFZeGdzTWF4c1IrL3p2VGZFT3NqWEVyN3QyYXRjWmlBY1Q1VnE4a0xyVGFpR29LMnZLRnRZV2RZSXFKUFpESmhVZFE2OUFHalc1TDBZakE0K0ZCRkN4WjFjOEJBRWV3SWltSTRrNW5RSXduVWIxU0RSQ1RzK2tPQ0hlRUJzejFFcTJ6ZVV0RzBYdDBZNEdMYm9ZbUNuc200dXA0UXVCM3loR3MvOXJFL1AzSmtEN3lvSndWbWJOdzRFZGFMV2tlbkZtWlVVanVDQXdQQkRsV1NZMEZERUFLRlNIaGk0M0NVQ1VuZHJObzVTWDdITWRxR0Raby9Sak1GcGhWMGZXTGpSdVBDR08rdHV6NS9GejRvVGpYRVlYK0xzbjRMMmV4TzFJYlE0Ky9maTZFVGpZUXBFWm5MQVFwbFBoQURrY0p2QUpWYmJ0cSs3WXJSM2tLaXkwRTRsdWZ3aFBxWDZ2VVd2eXpOYzM3d1VKTHpEZEVxSG51dDZ2UER5Zk80a2wvTzg4b3FyN0pNenN4MjM2S0lYVXprZ3lYSnBpeHlCcldRZWV5MmVKL2o5RFhIbTMwT1A3b2x6UTUxaEVKNmV0aTBZekhiSEU2SHcxaGhhM0NZQjFBeHk5bzRmcUVweVZ1OEorSGM1ME9CV0JCSGg5Si9xdlUxSjVyK3pHbFZaUGljVkhWUm9xelR0RnNaZjNMR0pGRlhYMk9pS0lpcWlGVldaNmVGazJZMldtWk1rQVU5OEJOUkZVUWxFQkRST2dxdnF5RTBtYXl0ei9Uc0k4SW9udkVWNUJEWjRycXBMZ3BDZnhHOUtwNnpXeE1wd2tvQmhBVnVQQmZRUVlua01NRjFmSk1xemlJWHhHMkhidG05YTNTazJVakdvM2pNb3Uxa0pibUp3c3RGdW9VU1hoaGMxUklldWZwcWdJSXZqMFBSMXdRc08yaVJlT2VxZ3krK0tyVkhjelZvVnR2cWtqcW5TQksvam1MRDRRRFRnQXAxTlpFK0hrSUNtV0w4c25lN2ZnTTZibG5HUU93R2ZYdnZMdzBGZ2JzUWVqYVZVR3NDQkttcW44Z2R5RDV3b2prY3FvdlI2TE9EOXZocHA2emUwSGxsNXcxcTJUazliZzgrRzQySzlkQnc4NFExUEtLQ3d0VG9xZDQ5WFU4RkZSWUNnZHFzMFhNeUlxUFRqSnpzYVRBYndXY1liZmRUWFh0NlQwVlZwb0I2eExKcVI3cjd4MDQ1emZCVGZac2xpMmF0a3lNako2MHN0YVROZlUrRm04NnBzZjd1STBGdUxzK2RmWkhFWE92aXUyeDBNUlNsMXI5MmU4OURLZExkMXJCMU9Sc0xCSU9YUWQ4cVJsbjFOVHBKa0ExazB0MU0wTk5TVWZKeHQ4aHh0NlRnMFV2Q2dUVUFYT2IzMnBPcEpKQytZazh1dVNFMUVIT2lFVlVoT3Vqb1pFVWZmYTlHQ3pTYURRRmk5T280QjdEWndwZ2ZJaVpSRDdtVm93UngrTXlqMy9uUmR4NmR3VXo4NlRkdnZmV2JQUEYrYWlZU3ZZay93OVJjUlB5KzBPN0ErN0VuMmwwdzhZNG1qVGVOWk5KNExsRk1rdld4amtOeXBPVDI4bDlHQlk0U3NCcXR5OXlGYSttMnZiY3N3L0h2Uk5mZFNKTlZPOXp3STlhSWp3RXVqbkIrNVVjMjdlZWlXK2lWY25Zb2x4djZwODVjcmhPTXpteTJrOGZ1ZWJSMWI1eVBLMGJKRnZJQnNzTzlpb1NJcW9UVWZlRU9sTE1BbFVDUjVqaEM1UEFRVHhyamVFMlRwNGtzYXpORWs3WEorVU0zSGJ4dTd0clpYVHV1dW5LVGE5U05Cdi9VZEtlRTBTai80ZEVubVA5cTZMekh1OEZqOWhSd21JMHhQRG8zdE0yaXhmdEV6b1d5dVRiSFJnR3RKQitTNW95RCs0TnFDYVVzVUZLRFh3bXFBMnJRVDc3aVYvaE4rMWFlQ1FRb3JkSkF3QnVCY3Jjb3Y0NzJhQ2FvYnByWXNQTEREUk9iZUw4ZkR3WWE4YitQTndLRFAxYUQ4RXR2a1U4Smk3enBYY3FlU1QrMjhrZzRGZ3pHNkQvc2xDaVZic0VWVng1cHpleHMwWHR4WlRYNDBWZ3VGL3RvY0swc3hFbU51RnkyeTBrcTh6QmZBbW1CeUlKOEdJVmNnR21xb0s4QmhuMFBvRzd5TzM4UUpvRU1WWHB5R094SHd4MEJCVVVvRG5HVmgzQitYSmxzUjV1ajZEUnNIcHY1UDk5Q2Nkd0hQMXlRdUVOcHRod2VKcVArbHVrNFRhRmVmZnlKWkcveUNTN1Q3VUl5Q2JlYzJsS2MyRG54dWM5Lzd2NU5teVoydmZyYW5sUGgvcFQzaFUzSGp6OVlMai9vcC9EMkVoK3psT2hMbkMrcy9PUFA5dnprMVozdXBrMmZ3TEU0USsrV1UrRlVQMFF3QVBua1Y0OC9PRGo0NFBHdlhyaTMzSVhuWUdGTXNNdmQwZDFKQlJsY1NlVVpuc2M4SWpwUkJ2RVFZam1SeW1MNzFvUC9Bd0taVmZodnVOc2NtNUpTZjA4Mm1iQ0huQ0U5SE5RVW1WalVDcUN1Wjg3ckJ3clR1VnNlUUhEVXZ1eUorTjYzc2ZyVGpvM0NKWVRQRE1YeitVYWV6ZVRyaGJ6MzdZU3hHOTkyRzRsNFh2K3VNV3g4Vjg4dkZyckF4VTV4ZnUzRmMrK0ZyZ0w5a2pYbjNjZHZmdUNUYzFZK0hvdStibG12UjJQeC9QOEJFcHhkY0hpY1kyQmtZR0FBNGlVWEZUTGorVzIrTXNpek1JREE1YytmMnhIMC93WldQZVlHSUplRGdRa2tDZ0JmMUF5Q0FIaWNZMkJrWUdCdStOL0FFTU9hd0FBRXJIb01qQXlvUUJzQVZDa0RKQUFBZUp4akxHTlFZZ0FDeGxBR0J1YVhERG9zUURZTEF5TWpFRE9BMll3TXpFQTJOeGdEMmF3SkRIWVFOV2lZa1lFUmlFSHNWQ0RXQnVJR0lBN0ZxaFlUcTBQMUdyUFlNVENCTVVKT0ZVejdNekFBQUdpMEJoMEFBQUFBQUNnQUtBQW9BV1FCc0FINEFrQUNqQUt5QXRJQzhnTVlBMW9EdUFRY0JJWUUxZ1ZhQmRnR1ZBYVVCeG9IdmdnT0NEUUlpQWpNQ1VnSnlBbndDaW9MREF0TUM1UU1nZzAwRGZJT1FnNnFEdmdQc0JBMEVLWUFBUUFBQUNzQWR3QUdBQUFBQUFBQ0FDWUFOQUJzQUFBQWlnRjNBQUFBQUhpY2RZOU5hOEpBRUliZmFOUVdpdlRZNDVCTDliQmhFNkw0Y1pYNEQzb1hTVFNRR2tqV2owdi9RUXM5OWR4amYyWmZOMHVoQnhObTU1bVpkMmRuQUR6Z0N4NnVuNGNCSGgxMzRDTnczQ1c5T3ZhcCtYYmNRK3BOSGZjeDhENm85UHg3Wm9iMjFwVTd1TU9UNHk1V2VIYnNVL1BwdUlkMy9EanVZK2k5SVVNSmhRSmJWRGdBV2FtS2JVWDR5N1JoYWdOamZZMGRyd2xpaE5EMEM5ci9ObTF1eXN5Y0ZsTVZNVUphSFV4YTFidE00bERMUXR4anBLbWFxMWhIMU55YTU0V1ZHZzByN1FPUmUzeEpNL3h6YkhDa3I3Q241anFxWUlRVE5TR0hTREJtck5oYk1MTlU4NXpZRGdwcnU0eDIwY1YyVHl5ZmVRYXNCemJLN2Rsd21LeHVDZzRlY1kybEdKTnZqcWJhRndjam81TU81OGxZVkNrelViVk10S2kxeEpydUlsRWk2aXpCT2hDVmkycHVMdnNMVGpCUlJRQUFBSGljYmMzTE5zSnhHRWJoMy80N0pIS0lRb21jd2xvbWZWOFV3NUNiNkFwTXpMb0NGNDZsUGZTdTlhNDlmRXBWL3ZiOVZiTDh0L3ZmVTZveXAyS0ZWZFpZcDhZR2RUYlpvc0UyTyt5eVI1TjlEbWpSNXBBamp1blE1WVFlcDV6UjU1d0xMcm5pbWdFMzNISlhXM3grek1iRG9RMmJkbVFmN0tNZDI0bDlzczkyYWwvc3EzMnpNL3UrYk9pSGZ1aUhmdWlIZnVpSGZ1aUhmdWlIZnVpSGZ1aUhmdXFuZnVxbmZ1cW5iazUrQVBhU1hCVUFBRXU0QU1oU1dMRUJBWTVadVFnQUNBQmpJTEFCSTBRZ3NBTWpjTEFPUlNBZ1M3Z0FEbEZMc0FaVFdsaXdOQnV3S0ZsZ1ppQ0tWVml3QWlWaHNBRkZZeU5pc0FJalJMTUtDUVVFSzdNS0N3VUVLN01PRHdVRUsxbXlCQ2dKUlZKRXN3b05CZ1Fyc1FZQlJMRWtBWWhSV0xCQWlGaXhCZ05Fc1NZQmlGRll1QVFBaUZpeEJnRkVXVmxaV2JnQi80V3dCSTJ4QlFCRUFBQUFcIlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3RoZW1lLWRlZmF1bHQvZm9udHMvZWxlbWVudC1pY29ucy53b2ZmP3Q9MTQ3MjQ0MDc0MVxuLy8gbW9kdWxlIGlkID0gNzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///72\n')},function(module,exports,__webpack_require__){eval('module.exports = __webpack_require__.p + "b02bdc1b846fd65473922f5f62832108.ttf";\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtZGVmYXVsdC9mb250cy9lbGVtZW50LWljb25zLnR0Zj8yM2Y5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjczLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiYjAyYmRjMWI4NDZmZDY1NDczOTIyZjVmNjI4MzIxMDgudHRmXCI7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtZGVmYXVsdC9mb250cy9lbGVtZW50LWljb25zLnR0Zj90PTE0NzI0NDA3NDFcbi8vIG1vZHVsZSBpZCA9IDczXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///73\n')},function(module,exports,__webpack_require__){eval('/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === "undefined") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(selector) {\n\t\tif (typeof memo[selector] === "undefined") {\n\t\t\tvar styleTarget = fn.call(this, selector);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[selector] = styleTarget;\n\t\t}\n\t\treturn memo[selector]\n\t};\n})(function (target) {\n\treturn document.querySelector(target)\n});\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = __webpack_require__(75);\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== "undefined" && DEBUG) {\n\t\tif (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === "object" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton) options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n\tif (!options.insertInto) options.insertInto = "head";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = "bottom";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error("Couldn\'t find a style target. This probably means that the value for the \'insertInto\' parameter is invalid.");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === "top") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === "bottom") {\n\t\ttarget.appendChild(style);\n\t} else if (typeof options.insertAt === "object" && options.insertAt.before) {\n\t\tvar nextSibling = getElement(options.insertInto + " " + options.insertAt.before);\n\t\ttarget.insertBefore(style, nextSibling);\n\t} else {\n\t\tthrow new Error("[Style Loader]\\n\\n Invalid value for parameter \'insertAt\' (\'options.insertAt\') found.\\n Must be \'top\', \'bottom\', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement("style");\n\n\toptions.attrs.type = "text/css";\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement("link");\n\n\toptions.attrs.type = "text/css";\n\toptions.attrs.rel = "stylesheet";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t result = options.transform(obj.css);\n\n\t if (result) {\n\t \t// If transform returns a value, use that instead of the original css.\n\t \t// This allows running runtime transformations on the css.\n\t \tobj.css = result;\n\t } else {\n\t \t// If the transform function returns a falsy value, don\'t add this css.\n\t \t// This allows conditional loading of css\n\t \treturn function() {\n\t \t\t// noop\n\t \t};\n\t }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === "function" &&\n\t\ttypeof URL.createObjectURL === "function" &&\n\t\ttypeof URL.revokeObjectURL === "function" &&\n\t\ttypeof Blob === "function" &&\n\t\ttypeof btoa === "function"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join(\'\\n\');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? "" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute("media", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn\'t defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default. Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += "\\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";\n\t}\n\n\tvar blob = new Blob([css], { type: "text/css" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanM/MzEzMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBbUI7QUFDcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHNCQUFzQjtBQUN2Qzs7QUFFQTtBQUNBLG1CQUFtQiwyQkFBMkI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQkFBZ0IsbUJBQW1CO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsMkJBQTJCO0FBQzVDO0FBQ0E7O0FBRUEsUUFBUSx1QkFBdUI7QUFDL0I7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSxpQkFBaUIsdUJBQXVCO0FBQ3hDO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYzs7QUFFZCxrREFBa0Qsc0JBQXNCO0FBQ3hFO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEOztBQUVBLDZCQUE2QixtQkFBbUI7O0FBRWhEOztBQUVBOztBQUVBO0FBQ0EiLCJmaWxlIjoiNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuXHRNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuXHRBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuXG52YXIgc3R5bGVzSW5Eb20gPSB7fTtcblxudmFyXHRtZW1vaXplID0gZnVuY3Rpb24gKGZuKSB7XG5cdHZhciBtZW1vO1xuXG5cdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKHR5cGVvZiBtZW1vID09PSBcInVuZGVmaW5lZFwiKSBtZW1vID0gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHRyZXR1cm4gbWVtbztcblx0fTtcbn07XG5cbnZhciBpc09sZElFID0gbWVtb2l6ZShmdW5jdGlvbiAoKSB7XG5cdC8vIFRlc3QgZm9yIElFIDw9IDkgYXMgcHJvcG9zZWQgYnkgQnJvd3NlcmhhY2tzXG5cdC8vIEBzZWUgaHR0cDovL2Jyb3dzZXJoYWNrcy5jb20vI2hhY2stZTcxZDg2OTJmNjUzMzQxNzNmZWU3MTVjMjIyY2I4MDVcblx0Ly8gVGVzdHMgZm9yIGV4aXN0ZW5jZSBvZiBzdGFuZGFyZCBnbG9iYWxzIGlzIHRvIGFsbG93IHN0eWxlLWxvYWRlclxuXHQvLyB0byBvcGVyYXRlIGNvcnJlY3RseSBpbnRvIG5vbi1zdGFuZGFyZCBlbnZpcm9ubWVudHNcblx0Ly8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlci9pc3N1ZXMvMTc3XG5cdHJldHVybiB3aW5kb3cgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cuYXRvYjtcbn0pO1xuXG52YXIgZ2V0RWxlbWVudCA9IChmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW8gPSB7fTtcblxuXHRyZXR1cm4gZnVuY3Rpb24oc2VsZWN0b3IpIHtcblx0XHRpZiAodHlwZW9mIG1lbW9bc2VsZWN0b3JdID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR2YXIgc3R5bGVUYXJnZXQgPSBmbi5jYWxsKHRoaXMsIHNlbGVjdG9yKTtcblx0XHRcdC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cdFx0XHRpZiAoc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuXHRcdFx0XHRcdC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcblx0XHRcdFx0fSBjYXRjaChlKSB7XG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZW1vW3NlbGVjdG9yXSA9IHN0eWxlVGFyZ2V0O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtb1tzZWxlY3Rvcl1cblx0fTtcbn0pKGZ1bmN0aW9uICh0YXJnZXQpIHtcblx0cmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KVxufSk7XG5cbnZhciBzaW5nbGV0b24gPSBudWxsO1xudmFyXHRzaW5nbGV0b25Db3VudGVyID0gMDtcbnZhclx0c3R5bGVzSW5zZXJ0ZWRBdFRvcCA9IFtdO1xuXG52YXJcdGZpeFVybHMgPSByZXF1aXJlKFwiLi91cmxzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGxpc3QsIG9wdGlvbnMpIHtcblx0aWYgKHR5cGVvZiBERUJVRyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBERUJVRykge1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBFcnJvcihcIlRoZSBzdHlsZS1sb2FkZXIgY2Fubm90IGJlIHVzZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudFwiKTtcblx0fVxuXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdG9wdGlvbnMuYXR0cnMgPSB0eXBlb2Ygb3B0aW9ucy5hdHRycyA9PT0gXCJvYmplY3RcIiA/IG9wdGlvbnMuYXR0cnMgOiB7fTtcblxuXHQvLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cblx0Ly8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxuXHRpZiAoIW9wdGlvbnMuc2luZ2xldG9uKSBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSA8aGVhZD4gZWxlbWVudFxuXHRpZiAoIW9wdGlvbnMuaW5zZXJ0SW50bykgb3B0aW9ucy5pbnNlcnRJbnRvID0gXCJoZWFkXCI7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXRcblx0aWYgKCFvcHRpb25zLmluc2VydEF0KSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcblxuXHR2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuXG5cdGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucyk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XG5cdFx0XHRtYXlSZW1vdmUucHVzaChkb21TdHlsZSk7XG5cdFx0fVxuXG5cdFx0aWYobmV3TGlzdCkge1xuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0LCBvcHRpb25zKTtcblx0XHRcdGFkZFN0eWxlc1RvRG9tKG5ld1N0eWxlcywgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXTtcblxuXHRcdFx0aWYoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSBkb21TdHlsZS5wYXJ0c1tqXSgpO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufTtcblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcywgb3B0aW9ucykge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0aWYoZG9tU3R5bGUpIHtcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHBhcnRzID0gW107XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHtpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzfTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChsaXN0LCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZXMgPSBbXTtcblx0dmFyIG5ld1N0eWxlcyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcblx0XHR2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcblx0XHR2YXIgbWVkaWEgPSBpdGVtWzJdO1xuXHRcdHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdO1xuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcblxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKSBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xuXHRcdGVsc2UgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50IChvcHRpb25zLCBzdHlsZSkge1xuXHR2YXIgdGFyZ2V0ID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8pXG5cblx0aWYgKCF0YXJnZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydEludG8nIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcblx0fVxuXG5cdHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlc0luc2VydGVkQXRUb3Bbc3R5bGVzSW5zZXJ0ZWRBdFRvcC5sZW5ndGggLSAxXTtcblxuXHRpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICghbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3ApIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIHRhcmdldC5maXJzdENoaWxkKTtcblx0XHR9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdFx0fVxuXHRcdHN0eWxlc0luc2VydGVkQXRUb3AucHVzaChzdHlsZSk7XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJib3R0b21cIikge1xuXHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpIHtcblx0XHR2YXIgbmV4dFNpYmxpbmcgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0SW50byArIFwiIFwiICsgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpO1xuXHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbU3R5bGUgTG9hZGVyXVxcblxcbiBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ2luc2VydEF0JyAoJ29wdGlvbnMuaW5zZXJ0QXQnKSBmb3VuZC5cXG4gTXVzdCBiZSAndG9wJywgJ2JvdHRvbScsIG9yIE9iamVjdC5cXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxcblwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQgKHN0eWxlKSB7XG5cdGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xuXG5cdHZhciBpZHggPSBzdHlsZXNJbnNlcnRlZEF0VG9wLmluZGV4T2Yoc3R5bGUpO1xuXHRpZihpZHggPj0gMCkge1xuXHRcdHN0eWxlc0luc2VydGVkQXRUb3Auc3BsaWNlKGlkeCwgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cblx0YWRkQXR0cnMoc3R5bGUsIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgc3R5bGUpO1xuXG5cdHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuXHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdG9wdGlvbnMuYXR0cnMucmVsID0gXCJzdHlsZXNoZWV0XCI7XG5cblx0YWRkQXR0cnMobGluaywgb3B0aW9ucy5hdHRycyk7XG5cdGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zLCBsaW5rKTtcblxuXHRyZXR1cm4gbGluaztcbn1cblxuZnVuY3Rpb24gYWRkQXR0cnMgKGVsLCBhdHRycykge1xuXHRPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0ZWwuc2V0QXR0cmlidXRlKGtleSwgYXR0cnNba2V5XSk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqLCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZSwgdXBkYXRlLCByZW1vdmUsIHJlc3VsdDtcblxuXHQvLyBJZiBhIHRyYW5zZm9ybSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwgcnVuIGl0IG9uIHRoZSBjc3Ncblx0aWYgKG9wdGlvbnMudHJhbnNmb3JtICYmIG9iai5jc3MpIHtcblx0ICAgIHJlc3VsdCA9IG9wdGlvbnMudHJhbnNmb3JtKG9iai5jc3MpO1xuXG5cdCAgICBpZiAocmVzdWx0KSB7XG5cdCAgICBcdC8vIElmIHRyYW5zZm9ybSByZXR1cm5zIGEgdmFsdWUsIHVzZSB0aGF0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgcnVubmluZyBydW50aW1lIHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgY3NzLlxuXHQgICAgXHRvYmouY3NzID0gcmVzdWx0O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0Ly8gSWYgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbiByZXR1cm5zIGEgZmFsc3kgdmFsdWUsIGRvbid0IGFkZCB0aGlzIGNzcy5cblx0ICAgIFx0Ly8gVGhpcyBhbGxvd3MgY29uZGl0aW9uYWwgbG9hZGluZyBvZiBjc3Ncblx0ICAgIFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHQgICAgXHRcdC8vIG5vb3Bcblx0ICAgIFx0fTtcblx0ICAgIH1cblx0fVxuXG5cdGlmIChvcHRpb25zLnNpbmdsZXRvbikge1xuXHRcdHZhciBzdHlsZUluZGV4ID0gc2luZ2xldG9uQ291bnRlcisrO1xuXG5cdFx0c3R5bGUgPSBzaW5nbGV0b24gfHwgKHNpbmdsZXRvbiA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKSk7XG5cblx0XHR1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcblx0XHRyZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuXG5cdH0gZWxzZSBpZiAoXG5cdFx0b2JqLnNvdXJjZU1hcCAmJlxuXHRcdHR5cGVvZiBVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBVUkwuY3JlYXRlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLnJldm9rZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIEJsb2IgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCJcblx0KSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVMaW5rRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSB1cGRhdGVMaW5rLmJpbmQobnVsbCwgc3R5bGUsIG9wdGlvbnMpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cblx0XHRcdGlmKHN0eWxlLmhyZWYpIFVSTC5yZXZva2VPYmplY3RVUkwoc3R5bGUuaHJlZik7XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRzdHlsZSA9IGNyZWF0ZVN0eWxlRWxlbWVudChvcHRpb25zKTtcblx0XHR1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGUpO1xuXHRcdHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZSk7XG5cdFx0fTtcblx0fVxuXG5cdHVwZGF0ZShvYmopO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZSAobmV3T2JqKSB7XG5cdFx0aWYgKG5ld09iaikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRuZXdPYmouY3NzID09PSBvYmouY3NzICYmXG5cdFx0XHRcdG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmXG5cdFx0XHRcdG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXBcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHVwZGF0ZShvYmogPSBuZXdPYmopO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZW1vdmUoKTtcblx0XHR9XG5cdH07XG59XG5cbnZhciByZXBsYWNlVGV4dCA9IChmdW5jdGlvbiAoKSB7XG5cdHZhciB0ZXh0U3RvcmUgPSBbXTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCkge1xuXHRcdHRleHRTdG9yZVtpbmRleF0gPSByZXBsYWNlbWVudDtcblxuXHRcdHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuXHR9O1xufSkoKTtcblxuZnVuY3Rpb24gYXBwbHlUb1NpbmdsZXRvblRhZyAoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuXHR2YXIgY3NzID0gcmVtb3ZlID8gXCJcIiA6IG9iai5jc3M7XG5cblx0aWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSByZXBsYWNlVGV4dChpbmRleCwgY3NzKTtcblx0fSBlbHNlIHtcblx0XHR2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcyk7XG5cdFx0dmFyIGNoaWxkTm9kZXMgPSBzdHlsZS5jaGlsZE5vZGVzO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZS5yZW1vdmVDaGlsZChjaGlsZE5vZGVzW2luZGV4XSk7XG5cblx0XHRpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcblx0XHRcdHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnIChzdHlsZSwgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgbWVkaWEgPSBvYmoubWVkaWE7XG5cblx0aWYobWVkaWEpIHtcblx0XHRzdHlsZS5zZXRBdHRyaWJ1dGUoXCJtZWRpYVwiLCBtZWRpYSlcblx0fVxuXG5cdGlmKHN0eWxlLnN0eWxlU2hlZXQpIHtcblx0XHRzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG5cdH0gZWxzZSB7XG5cdFx0d2hpbGUoc3R5bGUuZmlyc3RDaGlsZCkge1xuXHRcdFx0c3R5bGUucmVtb3ZlQ2hpbGQoc3R5bGUuZmlyc3RDaGlsZCk7XG5cdFx0fVxuXG5cdFx0c3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlTGluayAobGluaywgb3B0aW9ucywgb2JqKSB7XG5cdHZhciBjc3MgPSBvYmouY3NzO1xuXHR2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuXHQvKlxuXHRcdElmIGNvbnZlcnRUb0Fic29sdXRlVXJscyBpc24ndCBkZWZpbmVkLCBidXQgc291cmNlbWFwcyBhcmUgZW5hYmxlZFxuXHRcdGFuZCB0aGVyZSBpcyBubyBwdWJsaWNQYXRoIGRlZmluZWQgdGhlbiBsZXRzIHR1cm4gY29udmVydFRvQWJzb2x1dGVVcmxzXG5cdFx0b24gYnkgZGVmYXVsdC4gIE90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgb3B0aW9uXG5cdFx0ZGlyZWN0bHlcblx0Ki9cblx0dmFyIGF1dG9GaXhVcmxzID0gb3B0aW9ucy5jb252ZXJ0VG9BYnNvbHV0ZVVybHMgPT09IHVuZGVmaW5lZCAmJiBzb3VyY2VNYXA7XG5cblx0aWYgKG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzIHx8IGF1dG9GaXhVcmxzKSB7XG5cdFx0Y3NzID0gZml4VXJscyhjc3MpO1xuXHR9XG5cblx0aWYgKHNvdXJjZU1hcCkge1xuXHRcdC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI2NjAzODc1XG5cdFx0Y3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIiArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSkgKyBcIiAqL1wiO1xuXHR9XG5cblx0dmFyIGJsb2IgPSBuZXcgQmxvYihbY3NzXSwgeyB0eXBlOiBcInRleHQvY3NzXCIgfSk7XG5cblx0dmFyIG9sZFNyYyA9IGxpbmsuaHJlZjtcblxuXHRsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXG5cdGlmKG9sZFNyYykgVVJMLnJldm9rZU9iamVjdFVSTChvbGRTcmMpO1xufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcbi8vIG1vZHVsZSBpZCA9IDc0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///74\n')},function(module,exports){eval('\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function "fixes" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n // get current location\n var location = typeof window !== "undefined" && window.location;\n\n if (!location) {\n throw new Error("fixUrls requires window.location");\n }\n\n\t// blank or null?\n\tif (!css || typeof css !== "string") {\n\t return css;\n }\n\n var baseUrl = location.protocol + "//" + location.host;\n var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, "/");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\( = Match on the word "url" with any whitespace after it and then a parens\n\t ( = Start a capturing group\n\t (?: = Start a non-capturing group\n\t [^)(] = Match anything that isn\'t a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t (?: = Start another non-capturing groups\n\t [^)(]+ = Match anything that isn\'t a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t [^)(]* = Match anything that isn\'t a parentheses\n\t \\) = Match a end parentheses\n\t ) = End Group\n *\\) = Match anything and then a close parens\n ) = Close non-capturing group\n * = Match anything\n ) = Close capturing group\n\t \\) = Match a close parens\n\n\t /gi = Get all matches, not the first. Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^"(.*)"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^\'(.*)\'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/)/i.test(unquotedOrigUrl)) {\n\t\t return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf("//") === 0) {\n\t\t \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf("/") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with \'/\'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, ""); // Strip leading \'./\'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn "url(" + JSON.stringify(newUrl) + ")";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzPzk4OTMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxXQUFXLEVBQUU7QUFDckQsd0NBQXdDLFdBQVcsRUFBRTs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxzQ0FBc0M7QUFDdEMsR0FBRztBQUNIO0FBQ0EsOERBQThEO0FBQzlEOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQSIsImZpbGUiOiI3NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuLyoqXG4gKiBXaGVuIHNvdXJjZSBtYXBzIGFyZSBlbmFibGVkLCBgc3R5bGUtbG9hZGVyYCB1c2VzIGEgbGluayBlbGVtZW50IHdpdGggYSBkYXRhLXVyaSB0b1xuICogZW1iZWQgdGhlIGNzcyBvbiB0aGUgcGFnZS4gVGhpcyBicmVha3MgYWxsIHJlbGF0aXZlIHVybHMgYmVjYXVzZSBub3cgdGhleSBhcmUgcmVsYXRpdmUgdG8gYVxuICogYnVuZGxlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgcGFnZS5cbiAqXG4gKiBPbmUgc29sdXRpb24gaXMgdG8gb25seSB1c2UgZnVsbCB1cmxzLCBidXQgdGhhdCBtYXkgYmUgaW1wb3NzaWJsZS5cbiAqXG4gKiBJbnN0ZWFkLCB0aGlzIGZ1bmN0aW9uIFwiZml4ZXNcIiB0aGUgcmVsYXRpdmUgdXJscyB0byBiZSBhYnNvbHV0ZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFnZSBsb2NhdGlvbi5cbiAqXG4gKiBBIHJ1ZGltZW50YXJ5IHRlc3Qgc3VpdGUgaXMgbG9jYXRlZCBhdCBgdGVzdC9maXhVcmxzLmpzYCBhbmQgY2FuIGJlIHJ1biB2aWEgdGhlIGBucG0gdGVzdGAgY29tbWFuZC5cbiAqXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzKSB7XG4gIC8vIGdldCBjdXJyZW50IGxvY2F0aW9uXG4gIHZhciBsb2NhdGlvbiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmxvY2F0aW9uO1xuXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaXhVcmxzIHJlcXVpcmVzIHdpbmRvdy5sb2NhdGlvblwiKTtcbiAgfVxuXG5cdC8vIGJsYW5rIG9yIG51bGw/XG5cdGlmICghY3NzIHx8IHR5cGVvZiBjc3MgIT09IFwic3RyaW5nXCIpIHtcblx0ICByZXR1cm4gY3NzO1xuICB9XG5cbiAgdmFyIGJhc2VVcmwgPSBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XG4gIHZhciBjdXJyZW50RGlyID0gYmFzZVVybCArIGxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1xcL1teXFwvXSokLywgXCIvXCIpO1xuXG5cdC8vIGNvbnZlcnQgZWFjaCB1cmwoLi4uKVxuXHQvKlxuXHRUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBqdXN0IGEgd2F5IHRvIHJlY3Vyc2l2ZWx5IG1hdGNoIGJyYWNrZXRzIHdpdGhpblxuXHRhIHN0cmluZy5cblxuXHQgL3VybFxccypcXCggID0gTWF0Y2ggb24gdGhlIHdvcmQgXCJ1cmxcIiB3aXRoIGFueSB3aGl0ZXNwYWNlIGFmdGVyIGl0IGFuZCB0aGVuIGEgcGFyZW5zXG5cdCAgICggID0gU3RhcnQgYSBjYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAoPzogID0gU3RhcnQgYSBub24tY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgICAgIFteKShdICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAoPzogID0gU3RhcnQgYW5vdGhlciBub24tY2FwdHVyaW5nIGdyb3Vwc1xuXHQgICAgICAgICAgICAgICAgIFteKShdKyAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICAgICAgW14pKF0qICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIFxcKSAgPSBNYXRjaCBhIGVuZCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKSAgPSBFbmQgR3JvdXBcbiAgICAgICAgICAgICAgKlxcKSA9IE1hdGNoIGFueXRoaW5nIGFuZCB0aGVuIGEgY2xvc2UgcGFyZW5zXG4gICAgICAgICAgKSAgPSBDbG9zZSBub24tY2FwdHVyaW5nIGdyb3VwXG4gICAgICAgICAgKiAgPSBNYXRjaCBhbnl0aGluZ1xuICAgICAgICkgID0gQ2xvc2UgY2FwdHVyaW5nIGdyb3VwXG5cdCBcXCkgID0gTWF0Y2ggYSBjbG9zZSBwYXJlbnNcblxuXHQgL2dpICA9IEdldCBhbGwgbWF0Y2hlcywgbm90IHRoZSBmaXJzdC4gIEJlIGNhc2UgaW5zZW5zaXRpdmUuXG5cdCAqL1xuXHR2YXIgZml4ZWRDc3MgPSBjc3MucmVwbGFjZSgvdXJsXFxzKlxcKCgoPzpbXikoXXxcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKilcXCkvZ2ksIGZ1bmN0aW9uKGZ1bGxNYXRjaCwgb3JpZ1VybCkge1xuXHRcdC8vIHN0cmlwIHF1b3RlcyAoaWYgdGhleSBleGlzdClcblx0XHR2YXIgdW5xdW90ZWRPcmlnVXJsID0gb3JpZ1VybFxuXHRcdFx0LnRyaW0oKVxuXHRcdFx0LnJlcGxhY2UoL15cIiguKilcIiQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSlcblx0XHRcdC5yZXBsYWNlKC9eJyguKiknJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KTtcblxuXHRcdC8vIGFscmVhZHkgYSBmdWxsIHVybD8gbm8gY2hhbmdlXG5cdFx0aWYgKC9eKCN8ZGF0YTp8aHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvfGZpbGU6XFwvXFwvXFwvKS9pLnRlc3QodW5xdW90ZWRPcmlnVXJsKSkge1xuXHRcdCAgcmV0dXJuIGZ1bGxNYXRjaDtcblx0XHR9XG5cblx0XHQvLyBjb252ZXJ0IHRoZSB1cmwgdG8gYSBmdWxsIHVybFxuXHRcdHZhciBuZXdVcmw7XG5cblx0XHRpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvL1wiKSA9PT0gMCkge1xuXHRcdCAgXHQvL1RPRE86IHNob3VsZCB3ZSBhZGQgcHJvdG9jb2w/XG5cdFx0XHRuZXdVcmwgPSB1bnF1b3RlZE9yaWdVcmw7XG5cdFx0fSBlbHNlIGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIHVybFxuXHRcdFx0bmV3VXJsID0gYmFzZVVybCArIHVucXVvdGVkT3JpZ1VybDsgLy8gYWxyZWFkeSBzdGFydHMgd2l0aCAnLydcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3Rvcnlcblx0XHRcdG5ld1VybCA9IGN1cnJlbnREaXIgKyB1bnF1b3RlZE9yaWdVcmwucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpOyAvLyBTdHJpcCBsZWFkaW5nICcuLydcblx0XHR9XG5cblx0XHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIHVybCguLi4pXG5cdFx0cmV0dXJuIFwidXJsKFwiICsgSlNPTi5zdHJpbmdpZnkobmV3VXJsKSArIFwiKVwiO1xuXHR9KTtcblxuXHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIGNzc1xuXHRyZXR1cm4gZml4ZWRDc3M7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzXG4vLyBtb2R1bGUgaWQgPSA3NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///75\n')},function(module,__webpack_exports__,__webpack_require__){"use strict";eval('/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_bustCache_App_vue__ = __webpack_require__(82);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0b43b24c_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_bustCache_App_vue__ = __webpack_require__(85);\nvar disposed = false\nfunction injectStyle (ssrContext) {\n if (disposed) return\n __webpack_require__(77)\n}\nvar normalizeComponent = __webpack_require__(81)\n/* script */\n\n/* template */\n\n/* template functional */\n var __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_bustCache_App_vue__["a" /* default */],\n __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_0b43b24c_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_bustCache_App_vue__["a" /* default */],\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = "src/App.vue"\nif (Component.esModule && Object.keys(Component.esModule).some(function (key) { return key !== "default" && key.substr(0, 2) !== "__"})) { console.error("named exports are not supported in *.vue files.")}\n\n/* hot reload */\nif (false) {(function () {\n var hotAPI = require("vue-hot-reload-api")\n hotAPI.install(require("vue"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord("data-v-0b43b24c", Component.options)\n } else {\n hotAPI.reload("data-v-0b43b24c", Component.options)\n\' + \' }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\n/* harmony default export */ __webpack_exports__["a"] = (Component.exports);\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT9mYmFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBLHdCQUEyTDtBQUMzTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ3FLO0FBQ3JLO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRUFBK0Usd0RBQXdELElBQUk7O0FBRTNJO0FBQ0EsWUFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQiLCJmaWxlIjoiNzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZGlzcG9zZWQgPSBmYWxzZVxuZnVuY3Rpb24gaW5qZWN0U3R5bGUgKHNzckNvbnRleHQpIHtcbiAgaWYgKGRpc3Bvc2VkKSByZXR1cm5cbiAgcmVxdWlyZShcIiEhdnVlLXN0eWxlLWxvYWRlciFjc3MtbG9hZGVyP3NvdXJjZU1hcCEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc3R5bGUtY29tcGlsZXIvaW5kZXg/e1xcXCJ2dWVcXFwiOnRydWUsXFxcImlkXFxcIjpcXFwiZGF0YS12LTBiNDNiMjRjXFxcIixcXFwic2NvcGVkXFxcIjpmYWxzZSxcXFwiaGFzSW5saW5lQ29uZmlnXFxcIjpmYWxzZX0hLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c3R5bGVzJmluZGV4PTAmYnVzdENhY2hlIS4vQXBwLnZ1ZVwiKVxufVxudmFyIG5vcm1hbGl6ZUNvbXBvbmVudCA9IHJlcXVpcmUoXCIhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2NvbXBvbmVudC1ub3JtYWxpemVyXCIpXG4vKiBzY3JpcHQgKi9cbmltcG9ydCBfX3Z1ZV9zY3JpcHRfXyBmcm9tIFwiISFiYWJlbC1sb2FkZXIhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yP3R5cGU9c2NyaXB0JmluZGV4PTAmYnVzdENhY2hlIS4vQXBwLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSAqL1xuaW1wb3J0IF9fdnVlX3RlbXBsYXRlX18gZnJvbSBcIiEhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyL2luZGV4P3tcXFwiaWRcXFwiOlxcXCJkYXRhLXYtMGI0M2IyNGNcXFwiLFxcXCJoYXNTY29wZWRcXFwiOmZhbHNlLFxcXCJidWJsZVxcXCI6e1xcXCJ0cmFuc2Zvcm1zXFxcIjp7fX19IS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvcj90eXBlPXRlbXBsYXRlJmluZGV4PTAmYnVzdENhY2hlIS4vQXBwLnZ1ZVwiXG4vKiB0ZW1wbGF0ZSBmdW5jdGlvbmFsICovXG4gIHZhciBfX3Z1ZV90ZW1wbGF0ZV9mdW5jdGlvbmFsX18gPSBmYWxzZVxuLyogc3R5bGVzICovXG52YXIgX192dWVfc3R5bGVzX18gPSBpbmplY3RTdHlsZVxuLyogc2NvcGVJZCAqL1xudmFyIF9fdnVlX3Njb3BlSWRfXyA9IG51bGxcbi8qIG1vZHVsZUlkZW50aWZpZXIgKHNlcnZlciBvbmx5KSAqL1xudmFyIF9fdnVlX21vZHVsZV9pZGVudGlmaWVyX18gPSBudWxsXG52YXIgQ29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBfX3Z1ZV9zY3JpcHRfXyxcbiAgX192dWVfdGVtcGxhdGVfXyxcbiAgX192dWVfdGVtcGxhdGVfZnVuY3Rpb25hbF9fLFxuICBfX3Z1ZV9zdHlsZXNfXyxcbiAgX192dWVfc2NvcGVJZF9fLFxuICBfX3Z1ZV9tb2R1bGVfaWRlbnRpZmllcl9fXG4pXG5Db21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInNyYy9BcHAudnVlXCJcbmlmIChDb21wb25lbnQuZXNNb2R1bGUgJiYgT2JqZWN0LmtleXMoQ29tcG9uZW50LmVzTW9kdWxlKS5zb21lKGZ1bmN0aW9uIChrZXkpIHsgIHJldHVybiBrZXkgIT09IFwiZGVmYXVsdFwiICYmIGtleS5zdWJzdHIoMCwgMikgIT09IFwiX19cIn0pKSB7ICBjb25zb2xlLmVycm9yKFwibmFtZWQgZXhwb3J0cyBhcmUgbm90IHN1cHBvcnRlZCBpbiAqLnZ1ZSBmaWxlcy5cIil9XG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvdEFQSSA9IHJlcXVpcmUoXCJ2dWUtaG90LXJlbG9hZC1hcGlcIilcbiAgaG90QVBJLmluc3RhbGwocmVxdWlyZShcInZ1ZVwiKSwgZmFsc2UpXG4gIGlmICghaG90QVBJLmNvbXBhdGlibGUpIHJldHVyblxuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmICghbW9kdWxlLmhvdC5kYXRhKSB7XG4gICAgaG90QVBJLmNyZWF0ZVJlY29yZChcImRhdGEtdi0wYjQzYjI0Y1wiLCBDb21wb25lbnQub3B0aW9ucylcbiAgfSBlbHNlIHtcbiAgICBob3RBUEkucmVsb2FkKFwiZGF0YS12LTBiNDNiMjRjXCIsIENvbXBvbmVudC5vcHRpb25zKVxuJyArICcgIH1cbiAgbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgZGlzcG9zZWQgPSB0cnVlXG4gIH0pXG59KSgpfVxuXG5leHBvcnQgZGVmYXVsdCBDb21wb25lbnQuZXhwb3J0c1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvQXBwLnZ1ZVxuLy8gbW9kdWxlIGlkID0gNzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///76\n')},function(module,exports,__webpack_require__){eval('// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(78);\nif(typeof content === \'string\') content = [[module.i, content, \'\']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar update = __webpack_require__(79)("1188e913", content, false);\n// Hot Module Replacement\nif(false) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept("!!../node_modules/css-loader/index.js?sourceMap!../node_modules/vue-loader/lib/style-compiler/index.js?{\\"vue\\":true,\\"id\\":\\"data-v-0b43b24c\\",\\"scoped\\":false,\\"hasInlineConfig\\":false}!../node_modules/vue-loader/lib/selector.js?type=styles&index=0&bustCache!./App.vue", function() {\n var newContent = require("!!../node_modules/css-loader/index.js?sourceMap!../node_modules/vue-loader/lib/style-compiler/index.js?{\\"vue\\":true,\\"id\\":\\"data-v-0b43b24c\\",\\"scoped\\":false,\\"hasInlineConfig\\":false}!../node_modules/vue-loader/lib/selector.js?type=styles&index=0&bustCache!./App.vue");\n if(typeof newContent === \'string\') newContent = [[module.id, newContent, \'\']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT9hYzBmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0Esb0NBQWtOO0FBQ2xOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4SEFBOEgsbUZBQW1GO0FBQ2pOLHVJQUF1SSxtRkFBbUY7QUFDMU47QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsZ0NBQWdDLFVBQVUsRUFBRTtBQUM1QyIsImZpbGUiOiI3Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz9zb3VyY2VNYXAhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3N0eWxlLWNvbXBpbGVyL2luZGV4LmpzP3tcXFwidnVlXFxcIjp0cnVlLFxcXCJpZFxcXCI6XFxcImRhdGEtdi0wYjQzYjI0Y1xcXCIsXFxcInNjb3BlZFxcXCI6ZmFsc2UsXFxcImhhc0lubGluZUNvbmZpZ1xcXCI6ZmFsc2V9IS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXN0eWxlcyZpbmRleD0wJmJ1c3RDYWNoZSEuL0FwcC52dWVcIik7XG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuLy8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIERPTVxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIvbGliL2FkZFN0eWxlc0NsaWVudC5qc1wiKShcIjExODhlOTEzXCIsIGNvbnRlbnQsIGZhbHNlKTtcbi8vIEhvdCBNb2R1bGUgUmVwbGFjZW1lbnRcbmlmKG1vZHVsZS5ob3QpIHtcbiAvLyBXaGVuIHRoZSBzdHlsZXMgY2hhbmdlLCB1cGRhdGUgdGhlIDxzdHlsZT4gdGFnc1xuIGlmKCFjb250ZW50LmxvY2Fscykge1xuICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzP3NvdXJjZU1hcCEuLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc3R5bGUtY29tcGlsZXIvaW5kZXguanM/e1xcXCJ2dWVcXFwiOnRydWUsXFxcImlkXFxcIjpcXFwiZGF0YS12LTBiNDNiMjRjXFxcIixcXFwic2NvcGVkXFxcIjpmYWxzZSxcXFwiaGFzSW5saW5lQ29uZmlnXFxcIjpmYWxzZX0hLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c3R5bGVzJmluZGV4PTAmYnVzdENhY2hlIS4vQXBwLnZ1ZVwiLCBmdW5jdGlvbigpIHtcbiAgICAgdmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz9zb3VyY2VNYXAhLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3N0eWxlLWNvbXBpbGVyL2luZGV4LmpzP3tcXFwidnVlXFxcIjp0cnVlLFxcXCJpZFxcXCI6XFxcImRhdGEtdi0wYjQzYjI0Y1xcXCIsXFxcInNjb3BlZFxcXCI6ZmFsc2UsXFxcImhhc0lubGluZUNvbmZpZ1xcXCI6ZmFsc2V9IS4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXN0eWxlcyZpbmRleD0wJmJ1c3RDYWNoZSEuL0FwcC52dWVcIik7XG4gICAgIGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuICAgICB1cGRhdGUobmV3Q29udGVudCk7XG4gICB9KTtcbiB9XG4gLy8gV2hlbiB0aGUgbW9kdWxlIGlzIGRpc3Bvc2VkLCByZW1vdmUgdGhlIDxzdHlsZT4gdGFnc1xuIG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3Z1ZS1zdHlsZS1sb2FkZXIhLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlcj9zb3VyY2VNYXAhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc3R5bGUtY29tcGlsZXI/e1widnVlXCI6dHJ1ZSxcImlkXCI6XCJkYXRhLXYtMGI0M2IyNGNcIixcInNjb3BlZFwiOmZhbHNlLFwiaGFzSW5saW5lQ29uZmlnXCI6ZmFsc2V9IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3NlbGVjdG9yLmpzP3R5cGU9c3R5bGVzJmluZGV4PTAmYnVzdENhY2hlIS4vc3JjL0FwcC52dWVcbi8vIG1vZHVsZSBpZCA9IDc3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///77\n')},function(module,exports,__webpack_require__){eval('exports = module.exports = __webpack_require__(25)(true);\n// imports\n\n\n// module\nexports.push([module.i, "\\n.long {\\n width: 250px;\\n}\\n.area {\\n padding-top: 50px;\\n margin: 0 auto;\\n width: 800px;\\n}\\n.three {\\n margin-top: 100px;\\n}\\n.bind {\\n margin-top: 20px;\\n}\\n", "", {"version":3,"sources":["/Users/wxy/element-china-area-data/src/src/App.vue?b7b3230a"],"names":[],"mappings":";AAmHA;EACA,aAAA;CACA;AACA;EACA,kBAAA;EACA,eAAA;EACA,aAAA;CACA;AACA;EACA,kBAAA;CACA;AACA;EACA,iBAAA;CACA","file":"App.vue","sourcesContent":["<template>\\n <div class=\\"area\\">\\n <div>\\n 二级联动(不带“全部”选项)\\n <el-cascader\\n size=\\"large\\"\\n :options=\\"provinceAndCityData\\"\\n v-model=\\"selectedOptions1\\"\\n @change=\\"handleChange\\">\\n </el-cascader>\\n </div>\\n <div class=\\"bind\\">\\n <div>绑定值:{{selectedOptions1}}</div>\\n <div>区域码转汉字:{{CodeToText[selectedOptions1[0]]}},{{CodeToText[selectedOptions1[1]]}}</div>\\n <div>汉字转区域码:{{convertTextToCode(CodeToText[selectedOptions1[0]], CodeToText[selectedOptions1[1]])}}</div>\\n </div>\\n <div class=\\"three\\">\\n 二级联动(带有“全部”选项)\\n <el-cascader\\n size=\\"large\\"\\n :options=\\"provinceAndCityDataPlus\\"\\n v-model=\\"selectedOptions3\\"\\n @change=\\"handleChange\\">\\n </el-cascader>\\n </div>\\n <div class=\\"bind\\">\\n <div>绑定值:{{selectedOptions3}}</div>\\n <div>区域码转汉字:{{CodeToText[selectedOptions3[0]]}},{{CodeToText[selectedOptions3[1]]}}</div>\\n <div>汉字转区域码:{{convertTextToCode(CodeToText[selectedOptions3[0]], CodeToText[selectedOptions3[1]])}}</div>\\n </div>\\n <div class=\\"three\\">\\n 三级联动(不带“全部”选项)\\n <el-cascader\\n class=\\"long\\"\\n size=\\"large\\"\\n :options=\\"regionData\\"\\n v-model=\\"selectedOptions2\\"\\n @change=\\"handleChange\\">\\n </el-cascader>\\n </div>\\n <div class=\\"bind\\">\\n <div>绑定值:{{selectedOptions2}}</div>\\n <div>区域码转汉字:{{CodeToText[selectedOptions2[0]]}},{{CodeToText[selectedOptions2[1]]}},{{CodeToText[selectedOptions2[2]]}}</div>\\n <div>汉字转区域码:{{convertTextToCode(CodeToText[selectedOptions2[0]], CodeToText[selectedOptions2[1]], CodeToText[selectedOptions2[2]])}}</div>\\n </div>\\n <div class=\\"three\\">\\n 三级联动(带\\"全部选项\\")\\n <el-cascader\\n size=\\"large\\"\\n class=\\"long\\"\\n :options=\\"regionDataPlus\\"\\n v-model=\\"selectedOptions4\\"\\n @change=\\"handleChange\\">\\n </el-cascader>\\n </div>\\n <div class=\\"bind\\">\\n <div>绑定值:{{selectedOptions4}}</div>\\n <div>区域码转汉字:{{CodeToText[selectedOptions4[0]]}},{{CodeToText[selectedOptions4[1]]}},{{CodeToText[selectedOptions4[2]]}}</div>\\n <div>汉字转区域码:{{convertTextToCode(CodeToText[selectedOptions4[0]], CodeToText[selectedOptions4[1]], CodeToText[selectedOptions4[2]])}}</div>\\n </div>\\n </div>\\n </div>\\n</template>\\n\\n<script>\\n import { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, CodeToText, TextToCode } from \'../dist/app.js\'\\n // import { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, CodeToText, TextToCode } from \'./app.js\'\\n\\n export default {\\n data () {\\n return {\\n CodeToText,\\n TextToCode,\\n BeiJing: CodeToText[\'110000\'],\\n provinceAndCityData,\\n provinceAndCityDataPlus,\\n regionData,\\n regionDataPlus,\\n selectedOptions1: [\'110000\', \'110100\'],\\n selectedOptions2: [\'120000\', \'120100\', \'120101\'],\\n selectedOptions3: [\'130000\', \'\'],\\n selectedOptions4: [\'120000\', \'120100\', \'\']\\n }\\n },\\n\\n methods: {\\n handleChange (value) {\\n console.log(value)\\n },\\n convertTextToCode (provinceText, cityText, regionText) {\\n let code = \'\'\\n if (provinceText && this.TextToCode[provinceText]) {\\n const province = this.TextToCode[provinceText]\\n code += province.code + \', \'\\n if (cityText && province[cityText]) {\\n const city = province[cityText]\\n code += city.code + \', \'\\n if (regionText && city[regionText]) {\\n code += city[regionText].code\\n }\\n }\\n }\\n return code\\n }\\n },\\n\\n mounted () {\\n console.log(this.TextToCode[\'北京市\'].code)\\n console.log(this.TextToCode[\'北京市\'][\'市辖区\'].code)\\n console.log(this.TextToCode[\'北京市\'][\'市辖区\'][\'朝阳区\'].code)\\n }\\n }\\n<\/script>\\n\\n<style>\\n .long {\\n width: 250px;\\n }\\n .area {\\n padding-top: 50px;\\n margin: 0 auto;\\n width: 800px;\\n }\\n .three {\\n margin-top: 100px;\\n }\\n .bind {\\n margin-top: 20px;\\n }\\n</style>\\n"],"sourceRoot":""}]);\n\n// exports\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT8xNWEzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7OztBQUdBO0FBQ0Esa0NBQW1DLGlCQUFpQixHQUFHLFNBQVMsc0JBQXNCLG1CQUFtQixpQkFBaUIsR0FBRyxVQUFVLHNCQUFzQixHQUFHLFNBQVMscUJBQXFCLEdBQUcsVUFBVSw4R0FBOEcsTUFBTSxVQUFVLEtBQUssS0FBSyxXQUFXLFVBQVUsVUFBVSxLQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssV0FBVywyVkFBMlYsa0JBQWtCLDRCQUE0QixpQ0FBaUMsR0FBRyxpQ0FBaUMsNEJBQTRCLHFGQUFxRixxVEFBcVQsa0JBQWtCLDRCQUE0QixpQ0FBaUMsR0FBRyxpQ0FBaUMsNEJBQTRCLHFGQUFxRixnVUFBZ1Usa0JBQWtCLDRCQUE0QixpQ0FBaUMsR0FBRyxpQ0FBaUMsR0FBRyxpQ0FBaUMsNEJBQTRCLHNIQUFzSCxxVUFBcVUsa0JBQWtCLDRCQUE0QixpQ0FBaUMsR0FBRyxpQ0FBaUMsR0FBRyxpQ0FBaUMsNEJBQTRCLHNIQUFzSCw2RUFBNkUsbUdBQW1HLHFDQUFxQyxtR0FBbUcsc0NBQXNDLGVBQWUsZ0JBQWdCLG9aQUFvWixPQUFPLG1CQUFtQiw4QkFBOEIscUNBQXFDLGlFQUFpRSxxRkFBcUYsbUpBQW1KLHNJQUFzSSw0REFBNEQsYUFBYSxXQUFXLDhCQUE4QixPQUFPLHFCQUFxQiw0S0FBNEssS0FBSyxpQ0FBaUMsbUJBQW1CLEtBQUssV0FBVyx3QkFBd0IscUJBQXFCLG1CQUFtQixLQUFLLFlBQVksd0JBQXdCLEtBQUssV0FBVyx1QkFBdUIsS0FBSywrQkFBK0I7O0FBRS9oSiIsImZpbGUiOiI3OC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanNcIikodHJ1ZSk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCJcXG4ubG9uZyB7XFxuICB3aWR0aDogMjUwcHg7XFxufVxcbi5hcmVhIHtcXG4gIHBhZGRpbmctdG9wOiA1MHB4O1xcbiAgbWFyZ2luOiAwIGF1dG87XFxuICB3aWR0aDogODAwcHg7XFxufVxcbi50aHJlZSB7XFxuICBtYXJnaW4tdG9wOiAxMDBweDtcXG59XFxuLmJpbmQge1xcbiAgbWFyZ2luLXRvcDogMjBweDtcXG59XFxuXCIsIFwiXCIsIHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIi9Vc2Vycy93eHkvZWxlbWVudC1jaGluYS1hcmVhLWRhdGEvc3JjL3NyYy9BcHAudnVlP2I3YjMyMzBhXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCI7QUFtSEE7RUFDQSxhQUFBO0NBQ0E7QUFDQTtFQUNBLGtCQUFBO0VBQ0EsZUFBQTtFQUNBLGFBQUE7Q0FDQTtBQUNBO0VBQ0Esa0JBQUE7Q0FDQTtBQUNBO0VBQ0EsaUJBQUE7Q0FDQVwiLFwiZmlsZVwiOlwiQXBwLnZ1ZVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCI8dGVtcGxhdGU+XFxuICA8ZGl2IGNsYXNzPVxcXCJhcmVhXFxcIj5cXG4gICAgPGRpdj5cXG4gICAgICDkuoznuqfogZTliqjvvIjkuI3luKbigJzlhajpg6jigJ3pgInpobnvvIlcXG4gICAgICA8ZWwtY2FzY2FkZXJcXG4gICAgICAgIHNpemU9XFxcImxhcmdlXFxcIlxcbiAgICAgICAgOm9wdGlvbnM9XFxcInByb3ZpbmNlQW5kQ2l0eURhdGFcXFwiXFxuICAgICAgICB2LW1vZGVsPVxcXCJzZWxlY3RlZE9wdGlvbnMxXFxcIlxcbiAgICAgICAgQGNoYW5nZT1cXFwiaGFuZGxlQ2hhbmdlXFxcIj5cXG4gICAgICA8L2VsLWNhc2NhZGVyPlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYmluZFxcXCI+XFxuICAgICAgPGRpdj7nu5HlrprlgLzvvJp7e3NlbGVjdGVkT3B0aW9uczF9fTwvZGl2PlxcbiAgICAgIDxkaXY+5Yy65Z+f56CB6L2s5rGJ5a2X77yae3tDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczFbMF1dfX0se3tDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczFbMV1dfX08L2Rpdj5cXG4gICAgICA8ZGl2PuaxieWtl+i9rOWMuuWfn+egge+8mnt7Y29udmVydFRleHRUb0NvZGUoQ29kZVRvVGV4dFtzZWxlY3RlZE9wdGlvbnMxWzBdXSwgQ29kZVRvVGV4dFtzZWxlY3RlZE9wdGlvbnMxWzFdXSl9fTwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwidGhyZWVcXFwiPlxcbiAgICAgIOS6jOe6p+iBlOWKqCjluKbmnInigJzlhajpg6jigJ3pgInpobkpXFxuICAgICAgPGVsLWNhc2NhZGVyXFxuICAgICAgICBzaXplPVxcXCJsYXJnZVxcXCJcXG4gICAgICAgIDpvcHRpb25zPVxcXCJwcm92aW5jZUFuZENpdHlEYXRhUGx1c1xcXCJcXG4gICAgICAgIHYtbW9kZWw9XFxcInNlbGVjdGVkT3B0aW9uczNcXFwiXFxuICAgICAgICBAY2hhbmdlPVxcXCJoYW5kbGVDaGFuZ2VcXFwiPlxcbiAgICAgIDwvZWwtY2FzY2FkZXI+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJiaW5kXFxcIj5cXG4gICAgICA8ZGl2Pue7keWumuWAvO+8mnt7c2VsZWN0ZWRPcHRpb25zM319PC9kaXY+XFxuICAgICAgPGRpdj7ljLrln5/noIHovazmsYnlrZfvvJp7e0NvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zM1swXV19fSx7e0NvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zM1sxXV19fTwvZGl2PlxcbiAgICAgIDxkaXY+5rGJ5a2X6L2s5Yy65Z+f56CB77yae3tjb252ZXJ0VGV4dFRvQ29kZShDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczNbMF1dLCBDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczNbMV1dKX19PC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJ0aHJlZVxcXCI+XFxuICAgICAg5LiJ57qn6IGU5Yqo77yI5LiN5bim4oCc5YWo6YOo4oCd6YCJ6aG577yJXFxuICAgICAgPGVsLWNhc2NhZGVyXFxuICAgICAgICBjbGFzcz1cXFwibG9uZ1xcXCJcXG4gICAgICAgIHNpemU9XFxcImxhcmdlXFxcIlxcbiAgICAgICAgOm9wdGlvbnM9XFxcInJlZ2lvbkRhdGFcXFwiXFxuICAgICAgICB2LW1vZGVsPVxcXCJzZWxlY3RlZE9wdGlvbnMyXFxcIlxcbiAgICAgICAgQGNoYW5nZT1cXFwiaGFuZGxlQ2hhbmdlXFxcIj5cXG4gICAgICA8L2VsLWNhc2NhZGVyPlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYmluZFxcXCI+XFxuICAgICAgPGRpdj7nu5HlrprlgLzvvJp7e3NlbGVjdGVkT3B0aW9uczJ9fTwvZGl2PlxcbiAgICAgIDxkaXY+5Yy65Z+f56CB6L2s5rGJ5a2X77yae3tDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczJbMF1dfX0se3tDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczJbMV1dfX0se3tDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczJbMl1dfX08L2Rpdj5cXG4gICAgICA8ZGl2PuaxieWtl+i9rOWMuuWfn+egge+8mnt7Y29udmVydFRleHRUb0NvZGUoQ29kZVRvVGV4dFtzZWxlY3RlZE9wdGlvbnMyWzBdXSwgQ29kZVRvVGV4dFtzZWxlY3RlZE9wdGlvbnMyWzFdXSwgQ29kZVRvVGV4dFtzZWxlY3RlZE9wdGlvbnMyWzJdXSl9fTwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwidGhyZWVcXFwiPlxcbiAgICAgIOS4iee6p+iBlOWKqCjluKZcXFwi5YWo6YOo6YCJ6aG5XFxcIilcXG4gICAgICA8ZWwtY2FzY2FkZXJcXG4gICAgICAgIHNpemU9XFxcImxhcmdlXFxcIlxcbiAgICAgICAgY2xhc3M9XFxcImxvbmdcXFwiXFxuICAgICAgICA6b3B0aW9ucz1cXFwicmVnaW9uRGF0YVBsdXNcXFwiXFxuICAgICAgICB2LW1vZGVsPVxcXCJzZWxlY3RlZE9wdGlvbnM0XFxcIlxcbiAgICAgICAgQGNoYW5nZT1cXFwiaGFuZGxlQ2hhbmdlXFxcIj5cXG4gICAgICA8L2VsLWNhc2NhZGVyPlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYmluZFxcXCI+XFxuICAgICAgPGRpdj7nu5HlrprlgLzvvJp7e3NlbGVjdGVkT3B0aW9uczR9fTwvZGl2PlxcbiAgICAgIDxkaXY+5Yy65Z+f56CB6L2s5rGJ5a2X77yae3tDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczRbMF1dfX0se3tDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczRbMV1dfX0se3tDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczRbMl1dfX08L2Rpdj5cXG4gICAgICA8ZGl2PuaxieWtl+i9rOWMuuWfn+egge+8mnt7Y29udmVydFRleHRUb0NvZGUoQ29kZVRvVGV4dFtzZWxlY3RlZE9wdGlvbnM0WzBdXSwgQ29kZVRvVGV4dFtzZWxlY3RlZE9wdGlvbnM0WzFdXSwgQ29kZVRvVGV4dFtzZWxlY3RlZE9wdGlvbnM0WzJdXSl9fTwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICA8L2Rpdj5cXG48L3RlbXBsYXRlPlxcblxcbjxzY3JpcHQ+XFxuICBpbXBvcnQgeyBwcm92aW5jZUFuZENpdHlEYXRhLCByZWdpb25EYXRhLCBwcm92aW5jZUFuZENpdHlEYXRhUGx1cywgcmVnaW9uRGF0YVBsdXMsIENvZGVUb1RleHQsIFRleHRUb0NvZGUgfSBmcm9tICcuLi9kaXN0L2FwcC5qcydcXG4gIC8vIGltcG9ydCB7IHByb3ZpbmNlQW5kQ2l0eURhdGEsIHJlZ2lvbkRhdGEsIHByb3ZpbmNlQW5kQ2l0eURhdGFQbHVzLCByZWdpb25EYXRhUGx1cywgQ29kZVRvVGV4dCwgVGV4dFRvQ29kZSB9IGZyb20gJy4vYXBwLmpzJ1xcblxcbiAgZXhwb3J0IGRlZmF1bHQge1xcbiAgICBkYXRhICgpIHtcXG4gICAgICByZXR1cm4ge1xcbiAgICAgICAgQ29kZVRvVGV4dCxcXG4gICAgICAgIFRleHRUb0NvZGUsXFxuICAgICAgICBCZWlKaW5nOiBDb2RlVG9UZXh0WycxMTAwMDAnXSxcXG4gICAgICAgIHByb3ZpbmNlQW5kQ2l0eURhdGEsXFxuICAgICAgICBwcm92aW5jZUFuZENpdHlEYXRhUGx1cyxcXG4gICAgICAgIHJlZ2lvbkRhdGEsXFxuICAgICAgICByZWdpb25EYXRhUGx1cyxcXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczE6IFsnMTEwMDAwJywgJzExMDEwMCddLFxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zMjogWycxMjAwMDAnLCAnMTIwMTAwJywgJzEyMDEwMSddLFxcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zMzogWycxMzAwMDAnLCAnJ10sXFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnM0OiBbJzEyMDAwMCcsICcxMjAxMDAnLCAnJ11cXG4gICAgICB9XFxuICAgIH0sXFxuXFxuICAgIG1ldGhvZHM6IHtcXG4gICAgICBoYW5kbGVDaGFuZ2UgKHZhbHVlKSB7XFxuICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSlcXG4gICAgICB9LFxcbiAgICAgIGNvbnZlcnRUZXh0VG9Db2RlIChwcm92aW5jZVRleHQsIGNpdHlUZXh0LCByZWdpb25UZXh0KSB7XFxuICAgICAgICBsZXQgY29kZSA9ICcnXFxuICAgICAgICBpZiAocHJvdmluY2VUZXh0ICYmIHRoaXMuVGV4dFRvQ29kZVtwcm92aW5jZVRleHRdKSB7XFxuICAgICAgICAgIGNvbnN0IHByb3ZpbmNlID0gdGhpcy5UZXh0VG9Db2RlW3Byb3ZpbmNlVGV4dF1cXG4gICAgICAgICAgY29kZSArPSBwcm92aW5jZS5jb2RlICsgJywgJ1xcbiAgICAgICAgICBpZiAoY2l0eVRleHQgJiYgcHJvdmluY2VbY2l0eVRleHRdKSB7XFxuICAgICAgICAgICAgY29uc3QgY2l0eSA9IHByb3ZpbmNlW2NpdHlUZXh0XVxcbiAgICAgICAgICAgIGNvZGUgKz0gY2l0eS5jb2RlICsgJywgJ1xcbiAgICAgICAgICAgIGlmIChyZWdpb25UZXh0ICYmIGNpdHlbcmVnaW9uVGV4dF0pIHtcXG4gICAgICAgICAgICAgIGNvZGUgKz0gY2l0eVtyZWdpb25UZXh0XS5jb2RlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gY29kZVxcbiAgICAgIH1cXG4gICAgfSxcXG5cXG4gICAgbW91bnRlZCAoKSB7XFxuICAgICAgY29uc29sZS5sb2codGhpcy5UZXh0VG9Db2RlWyfljJfkuqzluIInXS5jb2RlKVxcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuVGV4dFRvQ29kZVsn5YyX5Lqs5biCJ11bJ+W4gui+luWMuiddLmNvZGUpXFxuICAgICAgY29uc29sZS5sb2codGhpcy5UZXh0VG9Db2RlWyfljJfkuqzluIInXVsn5biC6L6W5Yy6J11bJ+acnemYs+WMuiddLmNvZGUpXFxuICAgIH1cXG4gIH1cXG48L3NjcmlwdD5cXG5cXG48c3R5bGU+XFxuICAubG9uZyB7XFxuICAgIHdpZHRoOiAyNTBweDtcXG4gIH1cXG4gIC5hcmVhIHtcXG4gICAgcGFkZGluZy10b3A6IDUwcHg7XFxuICAgIG1hcmdpbjogMCBhdXRvO1xcbiAgICB3aWR0aDogODAwcHg7XFxuICB9XFxuICAudGhyZWUge1xcbiAgICBtYXJnaW4tdG9wOiAxMDBweDtcXG4gIH1cXG4gIC5iaW5kIHtcXG4gICAgbWFyZ2luLXRvcDogMjBweDtcXG4gIH1cXG48L3N0eWxlPlxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuXG4vLyBleHBvcnRzXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyP3NvdXJjZU1hcCEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zdHlsZS1jb21waWxlcj97XCJ2dWVcIjp0cnVlLFwiaWRcIjpcImRhdGEtdi0wYjQzYjI0Y1wiLFwic2NvcGVkXCI6ZmFsc2UsXCJoYXNJbmxpbmVDb25maWdcIjpmYWxzZX0hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvc2VsZWN0b3IuanM/dHlwZT1zdHlsZXMmaW5kZXg9MCZidXN0Q2FjaGUhLi9zcmMvQXBwLnZ1ZVxuLy8gbW9kdWxlIGlkID0gNzhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///78\n')},function(module,exports,__webpack_require__){eval("/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n Modified by Evan You @yyx990803\n*/\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n if (!hasDocument) {\n throw new Error(\n 'vue-style-loader cannot be used in a non-browser environment. ' +\n \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n ) }\n}\n\nvar listToStyles = __webpack_require__(80)\n\n/*\ntype StyleObject = {\n id: number;\n parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n css: string;\n media: string;\n sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n [id: number]: {\n id: number,\n refs: number,\n parts: Array<(obj?: StyleObjectPart) => void>\n }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nmodule.exports = function (parentId, list, _isProduction) {\n isProduction = _isProduction\n\n var styles = listToStyles(parentId, list)\n addStylesToDom(styles)\n\n return function update (newList) {\n var mayRemove = []\n for (var i = 0; i < styles.length; i++) {\n var item = styles[i]\n var domStyle = stylesInDom[item.id]\n domStyle.refs--\n mayRemove.push(domStyle)\n }\n if (newList) {\n styles = listToStyles(parentId, newList)\n addStylesToDom(styles)\n } else {\n styles = []\n }\n for (var i = 0; i < mayRemove.length; i++) {\n var domStyle = mayRemove[i]\n if (domStyle.refs === 0) {\n for (var j = 0; j < domStyle.parts.length; j++) {\n domStyle.parts[j]()\n }\n delete stylesInDom[domStyle.id]\n }\n }\n }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n for (var i = 0; i < styles.length; i++) {\n var item = styles[i]\n var domStyle = stylesInDom[item.id]\n if (domStyle) {\n domStyle.refs++\n for (var j = 0; j < domStyle.parts.length; j++) {\n domStyle.parts[j](item.parts[j])\n }\n for (; j < item.parts.length; j++) {\n domStyle.parts.push(addStyle(item.parts[j]))\n }\n if (domStyle.parts.length > item.parts.length) {\n domStyle.parts.length = item.parts.length\n }\n } else {\n var parts = []\n for (var j = 0; j < item.parts.length; j++) {\n parts.push(addStyle(item.parts[j]))\n }\n stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n }\n }\n}\n\nfunction createStyleElement () {\n var styleElement = document.createElement('style')\n styleElement.type = 'text/css'\n head.appendChild(styleElement)\n return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n var update, remove\n var styleElement = document.querySelector('style[data-vue-ssr-id~=\"' + obj.id + '\"]')\n\n if (styleElement) {\n if (isProduction) {\n // has SSR styles and in production mode.\n // simply do nothing.\n return noop\n } else {\n // has SSR styles but in dev mode.\n // for some reason Chrome can't handle source map in server-rendered\n // style tags - source maps in <style> only works if the style tag is\n // created and inserted dynamically. So we remove the server rendered\n // styles and inject new ones.\n styleElement.parentNode.removeChild(styleElement)\n }\n }\n\n if (isOldIE) {\n // use singleton mode for IE9.\n var styleIndex = singletonCounter++\n styleElement = singletonElement || (singletonElement = createStyleElement())\n update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n } else {\n // use multi-style-tag mode in all other cases\n styleElement = createStyleElement()\n update = applyToTag.bind(null, styleElement)\n remove = function () {\n styleElement.parentNode.removeChild(styleElement)\n }\n }\n\n update(obj)\n\n return function updateStyle (newObj /* StyleObjectPart */) {\n if (newObj) {\n if (newObj.css === obj.css &&\n newObj.media === obj.media &&\n newObj.sourceMap === obj.sourceMap) {\n return\n }\n update(obj = newObj)\n } else {\n remove()\n }\n }\n}\n\nvar replaceText = (function () {\n var textStore = []\n\n return function (index, replacement) {\n textStore[index] = replacement\n return textStore.filter(Boolean).join('\\n')\n }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n var css = remove ? '' : obj.css\n\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = replaceText(index, css)\n } else {\n var cssNode = document.createTextNode(css)\n var childNodes = styleElement.childNodes\n if (childNodes[index]) styleElement.removeChild(childNodes[index])\n if (childNodes.length) {\n styleElement.insertBefore(cssNode, childNodes[index])\n } else {\n styleElement.appendChild(cssNode)\n }\n }\n}\n\nfunction applyToTag (styleElement, obj) {\n var css = obj.css\n var media = obj.media\n var sourceMap = obj.sourceMap\n\n if (media) {\n styleElement.setAttribute('media', media)\n }\n\n if (sourceMap) {\n // https://developer.chrome.com/devtools/docs/javascript-debugging\n // this makes source maps inside style tags work properly in Chrome\n css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n // http://stackoverflow.com/a/26603875\n css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n }\n\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild)\n }\n styleElement.appendChild(document.createTextNode(css))\n }\n}\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzP2FlMzgiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsaUJBQWlCO0FBQzNCO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQixtQkFBbUI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBO0FBQ0EsdUJBQXVCLDJCQUEyQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixtQkFBbUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsMkJBQTJCO0FBQ2hEO0FBQ0E7QUFDQSxZQUFZLHVCQUF1QjtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EscUJBQXFCLHVCQUF1QjtBQUM1QztBQUNBO0FBQ0EsOEJBQThCO0FBQzlCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI3OS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiAgTW9kaWZpZWQgYnkgRXZhbiBZb3UgQHl5eDk5MDgwM1xuKi9cblxudmFyIGhhc0RvY3VtZW50ID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuXG5pZiAodHlwZW9mIERFQlVHICE9PSAndW5kZWZpbmVkJyAmJiBERUJVRykge1xuICBpZiAoIWhhc0RvY3VtZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2dWUtc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQuICcgK1xuICAgIFwiVXNlIHsgdGFyZ2V0OiAnbm9kZScgfSBpbiB5b3VyIFdlYnBhY2sgY29uZmlnIHRvIGluZGljYXRlIGEgc2VydmVyLXJlbmRlcmluZyBlbnZpcm9ubWVudC5cIlxuICApIH1cbn1cblxudmFyIGxpc3RUb1N0eWxlcyA9IHJlcXVpcmUoJy4vbGlzdFRvU3R5bGVzJylcblxuLypcbnR5cGUgU3R5bGVPYmplY3QgPSB7XG4gIGlkOiBudW1iZXI7XG4gIHBhcnRzOiBBcnJheTxTdHlsZU9iamVjdFBhcnQ+XG59XG5cbnR5cGUgU3R5bGVPYmplY3RQYXJ0ID0ge1xuICBjc3M6IHN0cmluZztcbiAgbWVkaWE6IHN0cmluZztcbiAgc291cmNlTWFwOiA/c3RyaW5nXG59XG4qL1xuXG52YXIgc3R5bGVzSW5Eb20gPSB7LypcbiAgW2lkOiBudW1iZXJdOiB7XG4gICAgaWQ6IG51bWJlcixcbiAgICByZWZzOiBudW1iZXIsXG4gICAgcGFydHM6IEFycmF5PChvYmo/OiBTdHlsZU9iamVjdFBhcnQpID0+IHZvaWQ+XG4gIH1cbiovfVxuXG52YXIgaGVhZCA9IGhhc0RvY3VtZW50ICYmIChkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0pXG52YXIgc2luZ2xldG9uRWxlbWVudCA9IG51bGxcbnZhciBzaW5nbGV0b25Db3VudGVyID0gMFxudmFyIGlzUHJvZHVjdGlvbiA9IGZhbHNlXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHt9XG5cbi8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuLy8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxudmFyIGlzT2xkSUUgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiAvbXNpZSBbNi05XVxcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhcmVudElkLCBsaXN0LCBfaXNQcm9kdWN0aW9uKSB7XG4gIGlzUHJvZHVjdGlvbiA9IF9pc1Byb2R1Y3Rpb25cblxuICB2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKHBhcmVudElkLCBsaXN0KVxuICBhZGRTdHlsZXNUb0RvbShzdHlsZXMpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuICAgIHZhciBtYXlSZW1vdmUgPSBbXVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IHN0eWxlc1tpXVxuICAgICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF1cbiAgICAgIGRvbVN0eWxlLnJlZnMtLVxuICAgICAgbWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpXG4gICAgfVxuICAgIGlmIChuZXdMaXN0KSB7XG4gICAgICBzdHlsZXMgPSBsaXN0VG9TdHlsZXMocGFyZW50SWQsIG5ld0xpc3QpXG4gICAgICBhZGRTdHlsZXNUb0RvbShzdHlsZXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlcyA9IFtdXG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV1cbiAgICAgIGlmIChkb21TdHlsZS5yZWZzID09PSAwKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZG9tU3R5bGUucGFydHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBkb21TdHlsZS5wYXJ0c1tqXSgpXG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHN0eWxlc0luRG9tW2RvbVN0eWxlLmlkXVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRTdHlsZXNUb0RvbSAoc3R5bGVzIC8qIEFycmF5PFN0eWxlT2JqZWN0PiAqLykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gc3R5bGVzW2ldXG4gICAgdmFyIGRvbVN0eWxlID0gc3R5bGVzSW5Eb21baXRlbS5pZF1cbiAgICBpZiAoZG9tU3R5bGUpIHtcbiAgICAgIGRvbVN0eWxlLnJlZnMrK1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKVxuICAgICAgfVxuICAgICAgZm9yICg7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGRvbVN0eWxlLnBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSkpXG4gICAgICB9XG4gICAgICBpZiAoZG9tU3R5bGUucGFydHMubGVuZ3RoID4gaXRlbS5wYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgZG9tU3R5bGUucGFydHMubGVuZ3RoID0gaXRlbS5wYXJ0cy5sZW5ndGhcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHBhcnRzID0gW11cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuICAgICAgICBwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0pKVxuICAgICAgfVxuICAgICAgc3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7IGlkOiBpdGVtLmlkLCByZWZzOiAxLCBwYXJ0czogcGFydHMgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQgKCkge1xuICB2YXIgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKVxuICBzdHlsZUVsZW1lbnQudHlwZSA9ICd0ZXh0L2NzcydcbiAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpXG4gIHJldHVybiBzdHlsZUVsZW1lbnRcbn1cblxuZnVuY3Rpb24gYWRkU3R5bGUgKG9iaiAvKiBTdHlsZU9iamVjdFBhcnQgKi8pIHtcbiAgdmFyIHVwZGF0ZSwgcmVtb3ZlXG4gIHZhciBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzdHlsZVtkYXRhLXZ1ZS1zc3ItaWR+PVwiJyArIG9iai5pZCArICdcIl0nKVxuXG4gIGlmIChzdHlsZUVsZW1lbnQpIHtcbiAgICBpZiAoaXNQcm9kdWN0aW9uKSB7XG4gICAgICAvLyBoYXMgU1NSIHN0eWxlcyBhbmQgaW4gcHJvZHVjdGlvbiBtb2RlLlxuICAgICAgLy8gc2ltcGx5IGRvIG5vdGhpbmcuXG4gICAgICByZXR1cm4gbm9vcFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBoYXMgU1NSIHN0eWxlcyBidXQgaW4gZGV2IG1vZGUuXG4gICAgICAvLyBmb3Igc29tZSByZWFzb24gQ2hyb21lIGNhbid0IGhhbmRsZSBzb3VyY2UgbWFwIGluIHNlcnZlci1yZW5kZXJlZFxuICAgICAgLy8gc3R5bGUgdGFncyAtIHNvdXJjZSBtYXBzIGluIDxzdHlsZT4gb25seSB3b3JrcyBpZiB0aGUgc3R5bGUgdGFnIGlzXG4gICAgICAvLyBjcmVhdGVkIGFuZCBpbnNlcnRlZCBkeW5hbWljYWxseS4gU28gd2UgcmVtb3ZlIHRoZSBzZXJ2ZXIgcmVuZGVyZWRcbiAgICAgIC8vIHN0eWxlcyBhbmQgaW5qZWN0IG5ldyBvbmVzLlxuICAgICAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIGlmIChpc09sZElFKSB7XG4gICAgLy8gdXNlIHNpbmdsZXRvbiBtb2RlIGZvciBJRTkuXG4gICAgdmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKytcbiAgICBzdHlsZUVsZW1lbnQgPSBzaW5nbGV0b25FbGVtZW50IHx8IChzaW5nbGV0b25FbGVtZW50ID0gY3JlYXRlU3R5bGVFbGVtZW50KCkpXG4gICAgdXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudCwgc3R5bGVJbmRleCwgZmFsc2UpXG4gICAgcmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlRWxlbWVudCwgc3R5bGVJbmRleCwgdHJ1ZSlcbiAgfSBlbHNlIHtcbiAgICAvLyB1c2UgbXVsdGktc3R5bGUtdGFnIG1vZGUgaW4gYWxsIG90aGVyIGNhc2VzXG4gICAgc3R5bGVFbGVtZW50ID0gY3JlYXRlU3R5bGVFbGVtZW50KClcbiAgICB1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGVFbGVtZW50KVxuICAgIHJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudClcbiAgICB9XG4gIH1cblxuICB1cGRhdGUob2JqKVxuXG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZSAobmV3T2JqIC8qIFN0eWxlT2JqZWN0UGFydCAqLykge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmXG4gICAgICAgICAgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiZcbiAgICAgICAgICBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdXBkYXRlKG9iaiA9IG5ld09iailcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cblxudmFyIHJlcGxhY2VUZXh0ID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRleHRTdG9yZSA9IFtdXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICB0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnRcbiAgICByZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKVxuICB9XG59KSgpXG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlRWxlbWVudCwgaW5kZXgsIHJlbW92ZSwgb2JqKSB7XG4gIHZhciBjc3MgPSByZW1vdmUgPyAnJyA6IG9iai5jc3NcblxuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcylcbiAgfSBlbHNlIHtcbiAgICB2YXIgY3NzTm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcylcbiAgICB2YXIgY2hpbGROb2RlcyA9IHN0eWxlRWxlbWVudC5jaGlsZE5vZGVzXG4gICAgaWYgKGNoaWxkTm9kZXNbaW5kZXhdKSBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pXG4gICAgaWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICBzdHlsZUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoY3NzTm9kZSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGVFbGVtZW50LCBvYmopIHtcbiAgdmFyIGNzcyA9IG9iai5jc3NcbiAgdmFyIG1lZGlhID0gb2JqLm1lZGlhXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwXG5cbiAgaWYgKG1lZGlhKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnbWVkaWEnLCBtZWRpYSlcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXApIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2RldnRvb2xzL2RvY3MvamF2YXNjcmlwdC1kZWJ1Z2dpbmdcbiAgICAvLyB0aGlzIG1ha2VzIHNvdXJjZSBtYXBzIGluc2lkZSBzdHlsZSB0YWdzIHdvcmsgcHJvcGVybHkgaW4gQ2hyb21lXG4gICAgY3NzICs9ICdcXG4vKiMgc291cmNlVVJMPScgKyBzb3VyY2VNYXAuc291cmNlc1swXSArICcgKi8nXG4gICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjY2MDM4NzVcbiAgICBjc3MgKz0gJ1xcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsJyArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSkgKyAnICovJ1xuICB9XG5cbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzc1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKVxuICAgIH1cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSlcbiAgfVxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzQ2xpZW50LmpzXG4vLyBtb2R1bGUgaWQgPSA3OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///79\n")},function(module,exports){eval("/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nmodule.exports = function listToStyles (parentId, list) {\n var styles = []\n var newStyles = {}\n for (var i = 0; i < list.length; i++) {\n var item = list[i]\n var id = item[0]\n var css = item[1]\n var media = item[2]\n var sourceMap = item[3]\n var part = {\n id: parentId + ':' + i,\n css: css,\n media: media,\n sourceMap: sourceMap\n }\n if (!newStyles[id]) {\n styles.push(newStyles[id] = { id: id, parts: [part] })\n } else {\n newStyles[id].parts.push(part)\n }\n }\n return styles\n}\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlLXN0eWxlLWxvYWRlci9saWIvbGlzdFRvU3R5bGVzLmpzP2I1MzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyx3QkFBd0I7QUFDM0QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRyYW5zbGF0ZXMgdGhlIGxpc3QgZm9ybWF0IHByb2R1Y2VkIGJ5IGNzcy1sb2FkZXIgaW50byBzb21ldGhpbmdcbiAqIGVhc2llciB0byBtYW5pcHVsYXRlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGxpc3RUb1N0eWxlcyAocGFyZW50SWQsIGxpc3QpIHtcbiAgdmFyIHN0eWxlcyA9IFtdXG4gIHZhciBuZXdTdHlsZXMgPSB7fVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV1cbiAgICB2YXIgaWQgPSBpdGVtWzBdXG4gICAgdmFyIGNzcyA9IGl0ZW1bMV1cbiAgICB2YXIgbWVkaWEgPSBpdGVtWzJdXG4gICAgdmFyIHNvdXJjZU1hcCA9IGl0ZW1bM11cbiAgICB2YXIgcGFydCA9IHtcbiAgICAgIGlkOiBwYXJlbnRJZCArICc6JyArIGksXG4gICAgICBjc3M6IGNzcyxcbiAgICAgIG1lZGlhOiBtZWRpYSxcbiAgICAgIHNvdXJjZU1hcDogc291cmNlTWFwXG4gICAgfVxuICAgIGlmICghbmV3U3R5bGVzW2lkXSkge1xuICAgICAgc3R5bGVzLnB1c2gobmV3U3R5bGVzW2lkXSA9IHsgaWQ6IGlkLCBwYXJ0czogW3BhcnRdIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1N0eWxlc1tpZF0ucGFydHMucHVzaChwYXJ0KVxuICAgIH1cbiAgfVxuICByZXR1cm4gc3R5bGVzXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL25vZGVfbW9kdWxlcy92dWUtc3R5bGUtbG9hZGVyL2xpYi9saXN0VG9TdHlsZXMuanNcbi8vIG1vZHVsZSBpZCA9IDgwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///80\n")},function(module,exports){eval("/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file.\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nmodule.exports = function normalizeComponent (\n rawScriptExports,\n compiledTemplate,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */\n) {\n var esModule\n var scriptExports = rawScriptExports = rawScriptExports || {}\n\n // ES6 modules interop\n var type = typeof rawScriptExports.default\n if (type === 'object' || type === 'function') {\n esModule = rawScriptExports\n scriptExports = rawScriptExports.default\n }\n\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (compiledTemplate) {\n options.render = compiledTemplate.render\n options.staticRenderFns = compiledTemplate.staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = injectStyles\n }\n\n if (hook) {\n var functional = options.functional\n var existing = functional\n ? options.render\n : options.beforeCreate\n\n if (!functional) {\n // inject component registration as beforeCreate hook\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n } else {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return existing(h, context)\n }\n }\n }\n\n return {\n esModule: esModule,\n exports: scriptExports,\n options: options\n }\n}\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvY29tcG9uZW50LW5vcm1hbGl6ZXIuanM/NTU0ZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiODEuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgcmF3U2NyaXB0RXhwb3J0cyxcbiAgY29tcGlsZWRUZW1wbGF0ZSxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIgLyogc2VydmVyIG9ubHkgKi9cbikge1xuICB2YXIgZXNNb2R1bGVcbiAgdmFyIHNjcmlwdEV4cG9ydHMgPSByYXdTY3JpcHRFeHBvcnRzID0gcmF3U2NyaXB0RXhwb3J0cyB8fCB7fVxuXG4gIC8vIEVTNiBtb2R1bGVzIGludGVyb3BcbiAgdmFyIHR5cGUgPSB0eXBlb2YgcmF3U2NyaXB0RXhwb3J0cy5kZWZhdWx0XG4gIGlmICh0eXBlID09PSAnb2JqZWN0JyB8fCB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXNNb2R1bGUgPSByYXdTY3JpcHRFeHBvcnRzXG4gICAgc2NyaXB0RXhwb3J0cyA9IHJhd1NjcmlwdEV4cG9ydHMuZGVmYXVsdFxuICB9XG5cbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChjb21waWxlZFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSBjb21waWxlZFRlbXBsYXRlLnJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gY29tcGlsZWRUZW1wbGF0ZS5zdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9IHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIHZhciBmdW5jdGlvbmFsID0gb3B0aW9ucy5mdW5jdGlvbmFsXG4gICAgdmFyIGV4aXN0aW5nID0gZnVuY3Rpb25hbFxuICAgICAgPyBvcHRpb25zLnJlbmRlclxuICAgICAgOiBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuXG4gICAgaWYgKCFmdW5jdGlvbmFsKSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlc01vZHVsZTogZXNNb2R1bGUsXG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2NvbXBvbmVudC1ub3JtYWxpemVyLmpzXG4vLyBtb2R1bGUgaWQgPSA4MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///81\n")},function(module,__webpack_exports__,__webpack_require__){"use strict";eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dist_app_js__ = __webpack_require__(83);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dist_app_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__dist_app_js__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n// import { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, CodeToText, TextToCode } from './app.js'\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n data: function data() {\n return {\n CodeToText: __WEBPACK_IMPORTED_MODULE_0__dist_app_js__[\"CodeToText\"],\n TextToCode: __WEBPACK_IMPORTED_MODULE_0__dist_app_js__[\"TextToCode\"],\n BeiJing: __WEBPACK_IMPORTED_MODULE_0__dist_app_js__[\"CodeToText\"]['110000'],\n provinceAndCityData: __WEBPACK_IMPORTED_MODULE_0__dist_app_js__[\"provinceAndCityData\"],\n provinceAndCityDataPlus: __WEBPACK_IMPORTED_MODULE_0__dist_app_js__[\"provinceAndCityDataPlus\"],\n regionData: __WEBPACK_IMPORTED_MODULE_0__dist_app_js__[\"regionData\"],\n regionDataPlus: __WEBPACK_IMPORTED_MODULE_0__dist_app_js__[\"regionDataPlus\"],\n selectedOptions1: ['110000', '110100'],\n selectedOptions2: ['120000', '120100', '120101'],\n selectedOptions3: ['130000', ''],\n selectedOptions4: ['120000', '120100', '']\n };\n },\n\n\n methods: {\n handleChange: function handleChange(value) {\n console.log(value);\n },\n convertTextToCode: function convertTextToCode(provinceText, cityText, regionText) {\n var code = '';\n if (provinceText && this.TextToCode[provinceText]) {\n var province = this.TextToCode[provinceText];\n code += province.code + ', ';\n if (cityText && province[cityText]) {\n var city = province[cityText];\n code += city.code + ', ';\n if (regionText && city[regionText]) {\n code += city[regionText].code;\n }\n }\n }\n return code;\n }\n },\n\n mounted: function mounted() {\n console.log(this.TextToCode['北京市'].code);\n console.log(this.TextToCode['北京市']['市辖区'].code);\n console.log(this.TextToCode['北京市']['市辖区']['朝阳区'].code);\n }\n});\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL0FwcC52dWU/NjMzZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUVBO0FBQ0E7O0FBRUE7d0JBRUE7O0FBRUE7QUFDQTt3RUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO21DQUNBOzZDQUNBO21DQUNBOzZDQUVBO0FBWkE7QUFjQTs7OzsrQ0FFQTtrQkFDQTtBQUNBO3NGQUNBO2lCQUNBO3lEQUNBO3VDQUNBO2dDQUNBOzRDQUNBOzhCQUNBOzhCQUNBOzhDQUNBO3FDQUNBO0FBQ0E7QUFDQTtBQUNBO2FBQ0E7QUFHQTtBQXBCQTs7OEJBcUJBO3VDQUNBOzhDQUNBO3FEQUNBO0FBQ0E7QUExQ0EiLCJmaWxlIjoiODIuanMiLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJhcmVhXCI+XG4gICAgPGRpdj5cbiAgICAgIOS6jOe6p+iBlOWKqO+8iOS4jeW4puKAnOWFqOmDqOKAnemAiemhue+8iVxuICAgICAgPGVsLWNhc2NhZGVyXG4gICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgIDpvcHRpb25zPVwicHJvdmluY2VBbmRDaXR5RGF0YVwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnMxXCJcbiAgICAgICAgQGNoYW5nZT1cImhhbmRsZUNoYW5nZVwiPlxuICAgICAgPC9lbC1jYXNjYWRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYmluZFwiPlxuICAgICAgPGRpdj7nu5HlrprlgLzvvJp7e3NlbGVjdGVkT3B0aW9uczF9fTwvZGl2PlxuICAgICAgPGRpdj7ljLrln5/noIHovazmsYnlrZfvvJp7e0NvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zMVswXV19fSx7e0NvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zMVsxXV19fTwvZGl2PlxuICAgICAgPGRpdj7msYnlrZfovazljLrln5/noIHvvJp7e2NvbnZlcnRUZXh0VG9Db2RlKENvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zMVswXV0sIENvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zMVsxXV0pfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidGhyZWVcIj5cbiAgICAgIOS6jOe6p+iBlOWKqCjluKbmnInigJzlhajpg6jigJ3pgInpobkpXG4gICAgICA8ZWwtY2FzY2FkZXJcbiAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgOm9wdGlvbnM9XCJwcm92aW5jZUFuZENpdHlEYXRhUGx1c1wiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnMzXCJcbiAgICAgICAgQGNoYW5nZT1cImhhbmRsZUNoYW5nZVwiPlxuICAgICAgPC9lbC1jYXNjYWRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYmluZFwiPlxuICAgICAgPGRpdj7nu5HlrprlgLzvvJp7e3NlbGVjdGVkT3B0aW9uczN9fTwvZGl2PlxuICAgICAgPGRpdj7ljLrln5/noIHovazmsYnlrZfvvJp7e0NvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zM1swXV19fSx7e0NvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zM1sxXV19fTwvZGl2PlxuICAgICAgPGRpdj7msYnlrZfovazljLrln5/noIHvvJp7e2NvbnZlcnRUZXh0VG9Db2RlKENvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zM1swXV0sIENvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zM1sxXV0pfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidGhyZWVcIj5cbiAgICAgIOS4iee6p+iBlOWKqO+8iOS4jeW4puKAnOWFqOmDqOKAnemAiemhue+8iVxuICAgICAgPGVsLWNhc2NhZGVyXG4gICAgICAgIGNsYXNzPVwibG9uZ1wiXG4gICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgIDpvcHRpb25zPVwicmVnaW9uRGF0YVwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnMyXCJcbiAgICAgICAgQGNoYW5nZT1cImhhbmRsZUNoYW5nZVwiPlxuICAgICAgPC9lbC1jYXNjYWRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYmluZFwiPlxuICAgICAgPGRpdj7nu5HlrprlgLzvvJp7e3NlbGVjdGVkT3B0aW9uczJ9fTwvZGl2PlxuICAgICAgPGRpdj7ljLrln5/noIHovazmsYnlrZfvvJp7e0NvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zMlswXV19fSx7e0NvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zMlsxXV19fSx7e0NvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zMlsyXV19fTwvZGl2PlxuICAgICAgPGRpdj7msYnlrZfovazljLrln5/noIHvvJp7e2NvbnZlcnRUZXh0VG9Db2RlKENvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zMlswXV0sIENvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zMlsxXV0sIENvZGVUb1RleHRbc2VsZWN0ZWRPcHRpb25zMlsyXV0pfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidGhyZWVcIj5cbiAgICAgIOS4iee6p+iBlOWKqCjluKZcIuWFqOmDqOmAiemhuVwiKVxuICAgICAgPGVsLWNhc2NhZGVyXG4gICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgIGNsYXNzPVwibG9uZ1wiXG4gICAgICAgIDpvcHRpb25zPVwicmVnaW9uRGF0YVBsdXNcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zNFwiXG4gICAgICAgIEBjaGFuZ2U9XCJoYW5kbGVDaGFuZ2VcIj5cbiAgICAgIDwvZWwtY2FzY2FkZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImJpbmRcIj5cbiAgICAgIDxkaXY+57uR5a6a5YC877yae3tzZWxlY3RlZE9wdGlvbnM0fX08L2Rpdj5cbiAgICAgIDxkaXY+5Yy65Z+f56CB6L2s5rGJ5a2X77yae3tDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczRbMF1dfX0se3tDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczRbMV1dfX0se3tDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczRbMl1dfX08L2Rpdj5cbiAgICAgIDxkaXY+5rGJ5a2X6L2s5Yy65Z+f56CB77yae3tjb252ZXJ0VGV4dFRvQ29kZShDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczRbMF1dLCBDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczRbMV1dLCBDb2RlVG9UZXh0W3NlbGVjdGVkT3B0aW9uczRbMl1dKX19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgaW1wb3J0IHsgcHJvdmluY2VBbmRDaXR5RGF0YSwgcmVnaW9uRGF0YSwgcHJvdmluY2VBbmRDaXR5RGF0YVBsdXMsIHJlZ2lvbkRhdGFQbHVzLCBDb2RlVG9UZXh0LCBUZXh0VG9Db2RlIH0gZnJvbSAnLi4vZGlzdC9hcHAuanMnXG4gIC8vIGltcG9ydCB7IHByb3ZpbmNlQW5kQ2l0eURhdGEsIHJlZ2lvbkRhdGEsIHByb3ZpbmNlQW5kQ2l0eURhdGFQbHVzLCByZWdpb25EYXRhUGx1cywgQ29kZVRvVGV4dCwgVGV4dFRvQ29kZSB9IGZyb20gJy4vYXBwLmpzJ1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBkYXRhICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIENvZGVUb1RleHQsXG4gICAgICAgIFRleHRUb0NvZGUsXG4gICAgICAgIEJlaUppbmc6IENvZGVUb1RleHRbJzExMDAwMCddLFxuICAgICAgICBwcm92aW5jZUFuZENpdHlEYXRhLFxuICAgICAgICBwcm92aW5jZUFuZENpdHlEYXRhUGx1cyxcbiAgICAgICAgcmVnaW9uRGF0YSxcbiAgICAgICAgcmVnaW9uRGF0YVBsdXMsXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczE6IFsnMTEwMDAwJywgJzExMDEwMCddLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMyOiBbJzEyMDAwMCcsICcxMjAxMDAnLCAnMTIwMTAxJ10sXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uczM6IFsnMTMwMDAwJywgJyddLFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnM0OiBbJzEyMDAwMCcsICcxMjAxMDAnLCAnJ11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgaGFuZGxlQ2hhbmdlICh2YWx1ZSkge1xuICAgICAgICBjb25zb2xlLmxvZyh2YWx1ZSlcbiAgICAgIH0sXG4gICAgICBjb252ZXJ0VGV4dFRvQ29kZSAocHJvdmluY2VUZXh0LCBjaXR5VGV4dCwgcmVnaW9uVGV4dCkge1xuICAgICAgICBsZXQgY29kZSA9ICcnXG4gICAgICAgIGlmIChwcm92aW5jZVRleHQgJiYgdGhpcy5UZXh0VG9Db2RlW3Byb3ZpbmNlVGV4dF0pIHtcbiAgICAgICAgICBjb25zdCBwcm92aW5jZSA9IHRoaXMuVGV4dFRvQ29kZVtwcm92aW5jZVRleHRdXG4gICAgICAgICAgY29kZSArPSBwcm92aW5jZS5jb2RlICsgJywgJ1xuICAgICAgICAgIGlmIChjaXR5VGV4dCAmJiBwcm92aW5jZVtjaXR5VGV4dF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNpdHkgPSBwcm92aW5jZVtjaXR5VGV4dF1cbiAgICAgICAgICAgIGNvZGUgKz0gY2l0eS5jb2RlICsgJywgJ1xuICAgICAgICAgICAgaWYgKHJlZ2lvblRleHQgJiYgY2l0eVtyZWdpb25UZXh0XSkge1xuICAgICAgICAgICAgICBjb2RlICs9IGNpdHlbcmVnaW9uVGV4dF0uY29kZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29kZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtb3VudGVkICgpIHtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuVGV4dFRvQ29kZVsn5YyX5Lqs5biCJ10uY29kZSlcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuVGV4dFRvQ29kZVsn5YyX5Lqs5biCJ11bJ+W4gui+luWMuiddLmNvZGUpXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLlRleHRUb0NvZGVbJ+WMl+S6rOW4giddWyfluILovpbljLonXVsn5pyd6Ziz5Yy6J10uY29kZSlcbiAgICB9XG4gIH1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4gIC5sb25nIHtcbiAgICB3aWR0aDogMjUwcHg7XG4gIH1cbiAgLmFyZWEge1xuICAgIHBhZGRpbmctdG9wOiA1MHB4O1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHdpZHRoOiA4MDBweDtcbiAgfVxuICAudGhyZWUge1xuICAgIG1hcmdpbi10b3A6IDEwMHB4O1xuICB9XG4gIC5iaW5kIHtcbiAgICBtYXJnaW4tdG9wOiAyMHB4O1xuICB9XG48L3N0eWxlPlxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9BcHAudnVlP2I3YjMyMzBhIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///82\n")},function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };\n\n!function (e, n) {\n if ("object" == ( false ? "undefined" : _typeof(exports)) && "object" == ( false ? "undefined" : _typeof(module))) module.exports = n();else if (true) !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (n),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === \'function\' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else {\n var r = n();for (var t in r) {\n ("object" == (typeof exports === "undefined" ? "undefined" : _typeof(exports)) ? exports : e)[t] = r[t];\n }\n }\n}(this, function () {\n return function (e) {\n function n(t) {\n if (r[t]) return r[t].exports;var o = r[t] = { i: t, l: !1, exports: {} };return e[t].call(o.exports, o, o.exports, n), o.l = !0, o.exports;\n }var r = {};return n.m = e, n.c = r, n.d = function (e, r, t) {\n n.o(e, r) || Object.defineProperty(e, r, { configurable: !1, enumerable: !0, get: t });\n }, n.n = function (e) {\n var r = e && e.__esModule ? function () {\n return e.default;\n } : function () {\n return e;\n };return n.d(r, "a", r), r;\n }, n.o = function (e, n) {\n return Object.prototype.hasOwnProperty.call(e, n);\n }, n.p = "", n(n.s = 0);\n }([function (e, n, r) {\n "use strict";\n Object.defineProperty(n, "__esModule", { value: !0 }), r.d(n, "provinceAndCityData", function () {\n return c;\n }), r.d(n, "regionData", function () {\n return i;\n }), r.d(n, "provinceAndCityDataPlus", function () {\n return _;\n }), r.d(n, "regionDataPlus", function () {\n return B;\n }), r.d(n, "CodeToText", function () {\n return u;\n }), r.d(n, "TextToCode", function () {\n return f;\n });var t = r(1),\n o = r.n(t),\n a = "function" == typeof Symbol && "symbol" == _typeof(Symbol.iterator) ? function (e) {\n return typeof e === "undefined" ? "undefined" : _typeof(e);\n } : function (e) {\n return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e === "undefined" ? "undefined" : _typeof(e);\n },\n l = function e(n) {\n var r = [];for (var t in n) {\n r[t] = "object" === a(n[t]) ? e(n[t]) : n[t];\n }return r;\n },\n u = {},\n f = {},\n i = [],\n c = [];u[""] = "全部";for (var v in o.a[86]) {\n i.push({ value: v, label: o.a[86][v] }), u[v] = o.a[86][v], f[o.a[86][v]] = { code: v }, f[o.a[86][v]]["全部"] = { code: "" };\n }for (var d = 0, s = i.length; d < s; d++) {\n var p = i[d].value,\n h = i[d].label,\n b = [];for (var y in o.a[p]) {\n b.push({ value: y, label: o.a[p][y] }), u[y] = o.a[p][y], f[h][o.a[p][y]] = { code: y }, f[h][o.a[p][y]]["全部"] = { code: "" };\n }b.length && (i[d].children = b);\n }c = l(i);for (var g = 0, m = i.length; g < m; g++) {\n var x = i[g].children,\n j = i[g].label;if (x) for (var P = 0, S = x.length; P < S; P++) {\n var C = x[P].value,\n D = x[P].label,\n O = [];for (var T in o.a[C]) {\n O.push({ value: T, label: o.a[C][T] }), u[T] = o.a[C][T], f[j][D][o.a[C][T]] = { code: T };\n }O.length && (x[P].children = O);\n }\n }var _ = l(c);_.unshift({ value: "", label: "全部" });for (var A = 0, M = _.length; A < M; A++) {\n var w = _[A].children;if (w && w.length) {\n w.unshift({ value: "", label: "全部" });for (var k = 0, q = w.length; k < q; k++) {\n var z = w[k].children;z && z.length && z.unshift({ value: "", label: "全部" });\n }\n }\n }var B = l(i);B.unshift({ value: "", label: "全部" });for (var E = 0, F = B.length; E < F; E++) {\n var G = B[E].children;if (G && G.length) {\n G.unshift({ value: "", label: "全部" });for (var H = 0, I = G.length; H < I; H++) {\n var J = G[H].children;J && J.length && J.unshift({ value: "", label: "全部" });\n }\n }\n }\n }, function (e, n) {\n e.exports = { 86: { 110000: "北京市", 120000: "天津市", 130000: "河北省", 140000: "山西省", 150000: "内蒙古自治区", 210000: "辽宁省", 220000: "吉林省", 230000: "黑龙江省", 310000: "上海市", 320000: "江苏省", 330000: "浙江省", 340000: "安徽省", 350000: "福建省", 360000: "江西省", 370000: "山东省", 410000: "河南省", 420000: "湖北省", 430000: "湖南省", 440000: "广东省", 450000: "广西壮族自治区", 460000: "海南省", 500000: "重庆市", 510000: "四川省", 520000: "贵州省", 530000: "云南省", 540000: "西藏自治区", 610000: "陕西省", 620000: "甘肃省", 630000: "青海省", 640000: "宁夏回族自治区", 650000: "新疆维吾尔自治区", 710000: "台湾省", 810000: "香港特别行政区", 820000: "澳门特别行政区" }, 110000: { 110100: "市辖区" }, 110100: { 110101: "东城区", 110102: "西城区", 110105: "朝阳区", 110106: "丰台区", 110107: "石景山区", 110108: "海淀区", 110109: "门头沟区", 110111: "房山区", 110112: "通州区", 110113: "顺义区", 110114: "昌平区", 110115: "大兴区", 110116: "怀柔区", 110117: "平谷区", 110118: "密云区", 110119: "延庆区" }, 120000: { 120100: "市辖区" }, 120100: { 120101: "和平区", 120102: "河东区", 120103: "河西区", 120104: "南开区", 120105: "河北区", 120106: "红桥区", 120110: "东丽区", 120111: "西青区", 120112: "津南区", 120113: "北辰区", 120114: "武清区", 120115: "宝坻区", 120116: "滨海新区", 120117: "宁河区", 120118: "静海区", 120119: "蓟州区" }, 130000: { 130100: "石家庄市", 130200: "唐山市", 130300: "秦皇岛市", 130400: "邯郸市", 130500: "邢台市", 130600: "保定市", 130700: "张家口市", 130800: "承德市", 130900: "沧州市", 131000: "廊坊市", 131100: "衡水市", 139001: "定州市", 139002: "辛集市" }, 130100: { 130102: "长安区", 130104: "桥西区", 130105: "新华区", 130107: "井陉矿区", 130108: "裕华区", 130109: "藁城区", 130110: "鹿泉区", 130111: "栾城区", 130121: "井陉县", 130123: "正定县", 130125: "行唐县", 130126: "灵寿县", 130127: "高邑县", 130128: "深泽县", 130129: "赞皇县", 130130: "无极县", 130131: "平山县", 130132: "元氏县", 130133: "赵县", 130183: "晋州市", 130184: "新乐市" }, 130200: { 130202: "路南区", 130203: "路北区", 130204: "古冶区", 130205: "开平区", 130207: "丰南区", 130208: "丰润区", 130209: "曹妃甸区", 130223: "滦县", 130224: "滦南县", 130225: "乐亭县", 130227: "迁西县", 130229: "玉田县", 130281: "遵化市", 130283: "迁安市" }, 130300: { 130302: "海港区", 130303: "山海关区", 130304: "北戴河区", 130306: "抚宁区", 130321: "青龙满族自治县", 130322: "昌黎县", 130324: "卢龙县" }, 130400: { 130402: "邯山区", 130403: "丛台区", 130404: "复兴区", 130406: "峰峰矿区", 130421: "邯郸县", 130423: "临漳县", 130424: "成安县", 130425: "大名县", 130426: "涉县", 130427: "磁县", 130428: "肥乡县", 130429: "永年县", 130430: "邱县", 130431: "鸡泽县", 130432: "广平县", 130433: "馆陶县", 130434: "魏县", 130435: "曲周县", 130481: "武安市" }, 130500: { 130502: "桥东区", 130503: "桥西区", 130521: "邢台县", 130522: "临城县", 130523: "内丘县", 130524: "柏乡县", 130525: "隆尧县", 130526: "任县", 130527: "南和县", 130528: "宁晋县", 130529: "巨鹿县", 130530: "新河县", 130531: "广宗县", 130532: "平乡县", 130533: "威县", 130534: "清河县", 130535: "临西县", 130581: "南宫市", 130582: "沙河市" }, 130600: { 130602: "竞秀区", 130606: "莲池区", 130607: "满城区", 130608: "清苑区", 130609: "徐水区", 130623: "涞水县", 130624: "阜平县", 130626: "定兴县", 130627: "唐县", 130628: "高阳县", 130629: "容城县", 130630: "涞源县", 130631: "望都县", 130632: "安新县", 130633: "易县", 130634: "曲阳县", 130635: "蠡县", 130636: "顺平县", 130637: "博野县", 130638: "雄县", 130681: "涿州市", 130683: "安国市", 130684: "高碑店市" }, 130700: { 130702: "桥东区", 130703: "桥西区", 130705: "宣化区", 130706: "下花园区", 130708: "万全区", 130709: "崇礼区", 130722: "张北县", 130723: "康保县", 130724: "沽源县", 130725: "尚义县", 130726: "蔚县", 130727: "阳原县", 130728: "怀安县", 130730: "怀来县", 130731: "涿鹿县", 130732: "赤城县" }, 130800: { 130802: "双桥区", 130803: "双滦区", 130804: "鹰手营子矿区", 130821: "承德县", 130822: "兴隆县", 130823: "平泉县", 130824: "滦平县", 130825: "隆化县", 130826: "丰宁满族自治县", 130827: "宽城满族自治县", 130828: "围场满族蒙古族自治县" }, 130900: { 130902: "新华区", 130903: "运河区", 130921: "沧县", 130922: "青县", 130923: "东光县", 130924: "海兴县", 130925: "盐山县", 130926: "肃宁县", 130927: "南皮县", 130928: "吴桥县", 130929: "献县", 130930: "孟村回族自治县", 130981: "泊头市", 130982: "任丘市", 130983: "黄骅市", 130984: "河间市" }, 131000: { 131002: "安次区", 131003: "广阳区", 131022: "固安县", 131023: "永清县", 131024: "香河县", 131025: "大城县", 131026: "文安县", 131028: "大厂回族自治县", 131081: "霸州市", 131082: "三河市" }, 131100: { 131102: "桃城区", 131103: "冀州区", 131121: "枣强县", 131122: "武邑县", 131123: "武强县", 131124: "饶阳县", 131125: "安平县", 131126: "故城县", 131127: "景县", 131128: "阜城县", 131182: "深州市" }, 140000: { 140100: "太原市", 140200: "大同市", 140300: "阳泉市", 140400: "长治市", 140500: "晋城市", 140600: "朔州市", 140700: "晋中市", 140800: "运城市", 140900: "忻州市", 141000: "临汾市", 141100: "吕梁市" }, 140100: { 140105: "小店区", 140106: "迎泽区", 140107: "杏花岭区", 140108: "尖草坪区", 140109: "万柏林区", 140110: "晋源区", 140121: "清徐县", 140122: "阳曲县", 140123: "娄烦县", 140181: "古交市" }, 140200: { 140202: "城区", 140203: "矿区", 140211: "南郊区", 140212: "新荣区", 140221: "阳高县", 140222: "天镇县", 140223: "广灵县", 140224: "灵丘县", 140225: "浑源县", 140226: "左云县", 140227: "大同县" }, 140300: { 140302: "城区", 140303: "矿区", 140311: "郊区", 140321: "平定县", 140322: "盂县" }, 140400: { 140402: "城区", 140411: "郊区", 140421: "长治县", 140423: "襄垣县", 140424: "屯留县", 140425: "平顺县", 140426: "黎城县", 140427: "壶关县", 140428: "长子县", 140429: "武乡县", 140430: "沁县", 140431: "沁源县", 140481: "潞城市" }, 140500: { 140502: "城区", 140521: "沁水县", 140522: "阳城县", 140524: "陵川县", 140525: "泽州县", 140581: "高平市" }, 140600: { 140602: "朔城区", 140603: "平鲁区", 140621: "山阴县", 140622: "应县", 140623: "右玉县", 140624: "怀仁县" }, 140700: { 140702: "榆次区", 140721: "榆社县", 140722: "左权县", 140723: "和顺县", 140724: "昔阳县", 140725: "寿阳县", 140726: "太谷县", 140727: "祁县", 140728: "平遥县", 140729: "灵石县", 140781: "介休市" }, 140800: { 140802: "盐湖区", 140821: "临猗县", 140822: "万荣县", 140823: "闻喜县", 140824: "稷山县", 140825: "新绛县", 140826: "绛县", 140827: "垣曲县", 140828: "夏县", 140829: "平陆县", 140830: "芮城县", 140881: "永济市", 140882: "河津市" }, 140900: { 140902: "忻府区", 140921: "定襄县", 140922: "五台县", 140923: "代县", 140924: "繁峙县", 140925: "宁武县", 140926: "静乐县", 140927: "神池县", 140928: "五寨县", 140929: "岢岚县", 140930: "河曲县", 140931: "保德县", 140932: "偏关县", 140981: "原平市" }, 141000: { 141002: "尧都区", 141021: "曲沃县", 141022: "翼城县", 141023: "襄汾县", 141024: "洪洞县", 141025: "古县", 141026: "安泽县", 141027: "浮山县", 141028: "吉县", 141029: "乡宁县", 141030: "大宁县", 141031: "隰县", 141032: "永和县", 141033: "蒲县", 141034: "汾西县", 141081: "侯马市", 141082: "霍州市" }, 141100: { 141102: "离石区", 141121: "文水县", 141122: "交城县", 141123: "兴县", 141124: "临县", 141125: "柳林县", 141126: "石楼县", 141127: "岚县", 141128: "方山县", 141129: "中阳县", 141130: "交口县", 141181: "孝义市", 141182: "汾阳市" }, 150000: { 150100: "呼和浩特市", 150200: "包头市", 150300: "乌海市", 150400: "赤峰市", 150500: "通辽市", 150600: "鄂尔多斯市", 150700: "呼伦贝尔市", 150800: "巴彦淖尔市", 150900: "乌兰察布市", 152200: "兴安盟", 152500: "锡林郭勒盟", 152900: "阿拉善盟" }, 150100: { 150102: "新城区", 150103: "回民区", 150104: "玉泉区", 150105: "赛罕区", 150121: "土默特左旗", 150122: "托克托县", 150123: "和林格尔县", 150124: "清水河县", 150125: "武川县" }, 150200: { 150202: "东河区", 150203: "昆都仑区", 150204: "青山区", 150205: "石拐区", 150206: "白云鄂博矿区", 150207: "九原区", 150221: "土默特右旗", 150222: "固阳县", 150223: "达尔罕茂明安联合旗" }, 150300: { 150302: "海勃湾区", 150303: "海南区", 150304: "乌达区" }, 150400: { 150402: "红山区", 150403: "元宝山区", 150404: "松山区", 150421: "阿鲁科尔沁旗", 150422: "巴林左旗", 150423: "巴林右旗", 150424: "林西县", 150425: "克什克腾旗", 150426: "翁牛特旗", 150428: "喀喇沁旗", 150429: "宁城县", 150430: "敖汉旗" }, 150500: { 150502: "科尔沁区", 150521: "科尔沁左翼中旗", 150522: "科尔沁左翼后旗", 150523: "开鲁县", 150524: "库伦旗", 150525: "奈曼旗", 150526: "扎鲁特旗", 150581: "霍林郭勒市" }, 150600: { 150602: "东胜区", 150603: "康巴什区", 150621: "达拉特旗", 150622: "准格尔旗", 150623: "鄂托克前旗", 150624: "鄂托克旗", 150625: "杭锦旗", 150626: "乌审旗", 150627: "伊金霍洛旗" }, 150700: { 150702: "海拉尔区", 150703: "扎赉诺尔区", 150721: "阿荣旗", 150722: "莫力达瓦达斡尔族自治旗", 150723: "鄂伦春自治旗", 150724: "鄂温克族自治旗", 150725: "陈巴尔虎旗", 150726: "新巴尔虎左旗", 150727: "新巴尔虎右旗", 150781: "满洲里市", 150782: "牙克石市", 150783: "扎兰屯市", 150784: "额尔古纳市", 150785: "根河市" }, 150800: { 150802: "临河区", 150821: "五原县", 150822: "磴口县", 150823: "乌拉特前旗", 150824: "乌拉特中旗", 150825: "乌拉特后旗", 150826: "杭锦后旗" }, 150900: { 150902: "集宁区", 150921: "卓资县", 150922: "化德县", 150923: "商都县", 150924: "兴和县", 150925: "凉城县", 150926: "察哈尔右翼前旗", 150927: "察哈尔右翼中旗", 150928: "察哈尔右翼后旗", 150929: "四子王旗", 150981: "丰镇市" }, 152200: { 152201: "乌兰浩特市", 152202: "阿尔山市", 152221: "科尔沁右翼前旗", 152222: "科尔沁右翼中旗", 152223: "扎赉特旗", 152224: "突泉县" }, 152500: { 152501: "二连浩特市", 152502: "锡林浩特市", 152522: "阿巴嘎旗", 152523: "苏尼特左旗", 152524: "苏尼特右旗", 152525: "东乌珠穆沁旗", 152526: "西乌珠穆沁旗", 152527: "太仆寺旗", 152528: "镶黄旗", 152529: "正镶白旗", 152530: "正蓝旗", 152531: "多伦县" }, 152900: { 152921: "阿拉善左旗", 152922: "阿拉善右旗", 152923: "额济纳旗" }, 210000: { 210100: "沈阳市", 210200: "大连市", 210300: "鞍山市", 210400: "抚顺市", 210500: "本溪市", 210600: "丹东市", 210700: "锦州市", 210800: "营口市", 210900: "阜新市", 211000: "辽阳市", 211100: "盘锦市", 211200: "铁岭市", 211300: "朝阳市", 211400: "葫芦岛市" }, 210100: { 210102: "和平区", 210103: "沈河区", 210104: "大东区", 210105: "皇姑区", 210106: "铁西区", 210111: "苏家屯区", 210112: "浑南区", 210113: "沈北新区", 210114: "于洪区", 210115: "辽中区", 210123: "康平县", 210124: "法库县", 210181: "新民市" }, 210200: { 210202: "中山区", 210203: "西岗区", 210204: "沙河口区", 210211: "甘井子区", 210212: "旅顺口区", 210213: "金州区", 210214: "普兰店区", 210224: "长海县", 210281: "瓦房店市", 210283: "庄河市" }, 210300: { 210302: "铁东区", 210303: "铁西区", 210304: "立山区", 210311: "千山区", 210321: "台安县", 210323: "岫岩满族自治县", 210381: "海城市" }, 210400: { 210402: "新抚区", 210403: "东洲区", 210404: "望花区", 210411: "顺城区", 210421: "抚顺县", 210422: "新宾满族自治县", 210423: "清原满族自治县" }, 210500: { 210502: "平山区", 210503: "溪湖区", 210504: "明山区", 210505: "南芬区", 210521: "本溪满族自治县", 210522: "桓仁满族自治县" }, 210600: { 210602: "元宝区", 210603: "振兴区", 210604: "振安区", 210624: "宽甸满族自治县", 210681: "东港市", 210682: "凤城市" }, 210700: { 210702: "古塔区", 210703: "凌河区", 210711: "太和区", 210726: "黑山县", 210727: "义县", 210781: "凌海市", 210782: "北镇市" }, 210800: { 210802: "站前区", 210803: "西市区", 210804: "鲅鱼圈区", 210811: "老边区", 210881: "盖州市", 210882: "大石桥市" }, 210900: { 210902: "海州区", 210903: "新邱区", 210904: "太平区", 210905: "清河门区", 210911: "细河区", 210921: "阜新蒙古族自治县", 210922: "彰武县" }, 211000: { 211002: "白塔区", 211003: "文圣区", 211004: "宏伟区", 211005: "弓长岭区", 211011: "太子河区", 211021: "辽阳县", 211081: "灯塔市" }, 211100: { 211102: "双台子区", 211103: "兴隆台区", 211104: "大洼区", 211122: "盘山县" }, 211200: { 211202: "银州区", 211204: "清河区", 211221: "铁岭县", 211223: "西丰县", 211224: "昌图县", 211281: "调兵山市", 211282: "开原市" }, 211300: { 211302: "双塔区", 211303: "龙城区", 211321: "朝阳县", 211322: "建平县", 211324: "喀喇沁左翼蒙古族自治县", 211381: "北票市", 211382: "凌源市" }, 211400: { 211402: "连山区", 211403: "龙港区", 211404: "南票区", 211421: "绥中县", 211422: "建昌县", 211481: "兴城市" }, 220000: { 220100: "长春市", 220200: "吉林市", 220300: "四平市", 220400: "辽源市", 220500: "通化市", 220600: "白山市", 220700: "松原市", 220800: "白城市", 222400: "延边朝鲜族自治州" }, 220100: { 220102: "南关区", 220103: "宽城区", 220104: "朝阳区", 220105: "二道区", 220106: "绿园区", 220112: "双阳区", 220113: "九台区", 220122: "农安县", 220182: "榆树市", 220183: "德惠市" }, 220200: { 220202: "昌邑区", 220203: "龙潭区", 220204: "船营区", 220211: "丰满区", 220221: "永吉县", 220281: "蛟河市", 220282: "桦甸市", 220283: "舒兰市", 220284: "磐石市" }, 220300: { 220302: "铁西区", 220303: "铁东区", 220322: "梨树县", 220323: "伊通满族自治县", 220381: "公主岭市", 220382: "双辽市" }, 220400: { 220402: "龙山区", 220403: "西安区", 220421: "东丰县", 220422: "东辽县" }, 220500: { 220502: "东昌区", 220503: "二道江区", 220521: "通化县", 220523: "辉南县", 220524: "柳河县", 220581: "梅河口市", 220582: "集安市" }, 220600: { 220602: "浑江区", 220605: "江源区", 220621: "抚松县", 220622: "靖宇县", 220623: "长白朝鲜族自治县", 220681: "临江市" }, 220700: { 220702: "宁江区", 220721: "前郭尔罗斯蒙古族自治县", 220722: "长岭县", 220723: "乾安县", 220781: "扶余市" }, 220800: { 220802: "洮北区", 220821: "镇赉县", 220822: "通榆县", 220881: "洮南市", 220882: "大安市" }, 222400: { 222401: "延吉市", 222402: "图们市", 222403: "敦化市", 222404: "珲春市", 222405: "龙井市", 222406: "和龙市", 222424: "汪清县", 222426: "安图县" }, 230000: { 230100: "哈尔滨市", 230200: "齐齐哈尔市", 230300: "鸡西市", 230400: "鹤岗市", 230500: "双鸭山市", 230600: "大庆市", 230700: "伊春市", 230800: "佳木斯市", 230900: "七台河市", 231000: "牡丹江市", 231100: "黑河市", 231200: "绥化市", 232700: "大兴安岭地区" }, 230100: { 230102: "道里区", 230103: "南岗区", 230104: "道外区", 230108: "平房区", 230109: "松北区", 230110: "香坊区", 230111: "呼兰区", 230112: "阿城区", 230113: "双城区", 230123: "依兰县", 230124: "方正县", 230125: "宾县", 230126: "巴彦县", 230127: "木兰县", 230128: "通河县", 230129: "延寿县", 230183: "尚志市", 230184: "五常市" }, 230200: { 230202: "龙沙区", 230203: "建华区", 230204: "铁锋区", 230205: "昂昂溪区", 230206: "富拉尔基区", 230207: "碾子山区", 230208: "梅里斯达斡尔族区", 230221: "龙江县", 230223: "依安县", 230224: "泰来县", 230225: "甘南县", 230227: "富裕县", 230229: "克山县", 230230: "克东县", 230231: "拜泉县", 230281: "讷河市" }, 230300: { 230302: "鸡冠区", 230303: "恒山区", 230304: "滴道区", 230305: "梨树区", 230306: "城子河区", 230307: "麻山区", 230321: "鸡东县", 230381: "虎林市", 230382: "密山市" }, 230400: { 230402: "向阳区", 230403: "工农区", 230404: "南山区", 230405: "兴安区", 230406: "东山区", 230407: "兴山区", 230421: "萝北县", 230422: "绥滨县" }, 230500: { 230502: "尖山区", 230503: "岭东区", 230505: "四方台区", 230506: "宝山区", 230521: "集贤县", 230522: "友谊县", 230523: "宝清县", 230524: "饶河县" }, 230600: { 230602: "萨尔图区", 230603: "龙凤区", 230604: "让胡路区", 230605: "红岗区", 230606: "大同区", 230621: "肇州县", 230622: "肇源县", 230623: "林甸县", 230624: "杜尔伯特蒙古族自治县" }, 230700: { 230702: "伊春区", 230703: "南岔区", 230704: "友好区", 230705: "西林区", 230706: "翠峦区", 230707: "新青区", 230708: "美溪区", 230709: "金山屯区", 230710: "五营区", 230711: "乌马河区", 230712: "汤旺河区", 230713: "带岭区", 230714: "乌伊岭区", 230715: "红星区", 230716: "上甘岭区", 230722: "嘉荫县", 230781: "铁力市" }, 230800: { 230803: "向阳区", 230804: "前进区", 230805: "东风区", 230811: "郊区", 230822: "桦南县", 230826: "桦川县", 230828: "汤原县", 230881: "同江市", 230882: "富锦市", 230883: "抚远市" }, 230900: { 230902: "新兴区", 230903: "桃山区", 230904: "茄子河区", 230921: "勃利县" }, 231000: { 231002: "东安区", 231003: "阳明区", 231004: "爱民区", 231005: "西安区", 231025: "林口县", 231081: "绥芬河市", 231083: "海林市", 231084: "宁安市", 231085: "穆棱市", 231086: "东宁市" }, 231100: { 231102: "爱辉区", 231121: "嫩江县", 231123: "逊克县", 231124: "孙吴县", 231181: "北安市", 231182: "五大连池市" }, 231200: { 231202: "北林区", 231221: "望奎县", 231222: "兰西县", 231223: "青冈县", 231224: "庆安县", 231225: "明水县", 231226: "绥棱县", 231281: "安达市", 231282: "肇东市", 231283: "海伦市" }, 232700: { 232721: "呼玛县", 232722: "塔河县", 232723: "漠河县" }, 310000: { 310100: "市辖区" }, 310100: { 310101: "黄浦区", 310104: "徐汇区", 310105: "长宁区", 310106: "静安区", 310107: "普陀区", 310109: "虹口区", 310110: "杨浦区", 310112: "闵行区", 310113: "宝山区", 310114: "嘉定区", 310115: "浦东新区", 310116: "金山区", 310117: "松江区", 310118: "青浦区", 310120: "奉贤区", 310151: "崇明区" }, 320000: { 320100: "南京市", 320200: "无锡市", 320300: "徐州市", 320400: "常州市", 320500: "苏州市", 320600: "南通市", 320700: "连云港市", 320800: "淮安市", 320900: "盐城市", 321000: "扬州市", 321100: "镇江市", 321200: "泰州市", 321300: "宿迁市" }, 320100: { 320102: "玄武区", 320104: "秦淮区", 320105: "建邺区", 320106: "鼓楼区", 320111: "浦口区", 320113: "栖霞区", 320114: "雨花台区", 320115: "江宁区", 320116: "六合区", 320117: "溧水区", 320118: "高淳区" }, 320200: { 320205: "锡山区", 320206: "惠山区", 320211: "滨湖区", 320213: "梁溪区", 320214: "新吴区", 320281: "江阴市", 320282: "宜兴市" }, 320300: { 320302: "鼓楼区", 320303: "云龙区", 320305: "贾汪区", 320311: "泉山区", 320312: "铜山区", 320321: "丰县", 320322: "沛县", 320324: "睢宁县", 320381: "新沂市", 320382: "邳州市" }, 320400: { 320402: "天宁区", 320404: "钟楼区", 320411: "新北区", 320412: "武进区", 320413: "金坛区", 320481: "溧阳市" }, 320500: { 320505: "虎丘区", 320506: "吴中区", 320507: "相城区", 320508: "姑苏区", 320509: "吴江区", 320581: "常熟市", 320582: "张家港市", 320583: "昆山市", 320585: "太仓市" }, 320600: { 320602: "崇川区", 320611: "港闸区", 320612: "通州区", 320621: "海安县", 320623: "如东县", 320681: "启东市", 320682: "如皋市", 320684: "海门市" }, 320700: { 320703: "连云区", 320706: "海州区", 320707: "赣榆区", 320722: "东海县", 320723: "灌云县", 320724: "灌南县" }, 320800: { 320803: "淮安区", 320804: "淮阴区", 320812: "清江浦区", 320813: "洪泽区", 320826: "涟水县", 320830: "盱眙县", 320831: "金湖县" }, 320900: { 320902: "亭湖区", 320903: "盐都区", 320904: "大丰区", 320921: "响水县", 320922: "滨海县", 320923: "阜宁县", 320924: "射阳县", 320925: "建湖县", 320981: "东台市" }, 321000: { 321002: "广陵区", 321003: "邗江区", 321012: "江都区", 321023: "宝应县", 321081: "仪征市", 321084: "高邮市" }, 321100: { 321102: "京口区", 321111: "润州区", 321112: "丹徒区", 321181: "丹阳市", 321182: "扬中市", 321183: "句容市" }, 321200: { 321202: "海陵区", 321203: "高港区", 321204: "姜堰区", 321281: "兴化市", 321282: "靖江市", 321283: "泰兴市" }, 321300: { 321302: "宿城区", 321311: "宿豫区", 321322: "沭阳县", 321323: "泗阳县", 321324: "泗洪县" }, 330000: { 330100: "杭州市", 330200: "宁波市", 330300: "温州市", 330400: "嘉兴市", 330500: "湖州市", 330600: "绍兴市", 330700: "金华市", 330800: "衢州市", 330900: "舟山市", 331000: "台州市", 331100: "丽水市" }, 330100: { 330102: "上城区", 330103: "下城区", 330104: "江干区", 330105: "拱墅区", 330106: "西湖区", 330108: "滨江区", 330109: "萧山区", 330110: "余杭区", 330111: "富阳区", 330122: "桐庐县", 330127: "淳安县", 330182: "建德市", 330185: "临安市" }, 330200: { 330203: "海曙区", 330204: "江东区", 330205: "江北区", 330206: "北仑区", 330211: "镇海区", 330212: "鄞州区", 330225: "象山县", 330226: "宁海县", 330281: "余姚市", 330282: "慈溪市", 330283: "奉化市" }, 330300: { 330302: "鹿城区", 330303: "龙湾区", 330304: "瓯海区", 330305: "洞头区", 330324: "永嘉县", 330326: "平阳县", 330327: "苍南县", 330328: "文成县", 330329: "泰顺县", 330381: "瑞安市", 330382: "乐清市" }, 330400: { 330402: "南湖区", 330411: "秀洲区", 330421: "嘉善县", 330424: "海盐县", 330481: "海宁市", 330482: "平湖市", 330483: "桐乡市" }, 330500: { 330502: "吴兴区", 330503: "南浔区", 330521: "德清县", 330522: "长兴县", 330523: "安吉县" }, 330600: { 330602: "越城区", 330603: "柯桥区", 330604: "上虞区", 330624: "新昌县", 330681: "诸暨市", 330683: "嵊州市" }, 330700: { 330702: "婺城区", 330703: "金东区", 330723: "武义县", 330726: "浦江县", 330727: "磐安县", 330781: "兰溪市", 330782: "义乌市", 330783: "东阳市", 330784: "永康市" }, 330800: { 330802: "柯城区", 330803: "衢江区", 330822: "常山县", 330824: "开化县", 330825: "龙游县", 330881: "江山市" }, 330900: { 330902: "定海区", 330903: "普陀区", 330921: "岱山县", 330922: "嵊泗县" }, 331000: { 331002: "椒江区", 331003: "黄岩区", 331004: "路桥区", 331021: "玉环县", 331022: "三门县", 331023: "天台县", 331024: "仙居县", 331081: "温岭市", 331082: "临海市" }, 331100: { 331102: "莲都区", 331121: "青田县", 331122: "缙云县", 331123: "遂昌县", 331124: "松阳县", 331125: "云和县", 331126: "庆元县", 331127: "景宁畲族自治县", 331181: "龙泉市" }, 340000: { 340100: "合肥市", 340200: "芜湖市", 340300: "蚌埠市", 340400: "淮南市", 340500: "马鞍山市", 340600: "淮北市", 340700: "铜陵市", 340800: "安庆市", 341000: "黄山市", 341100: "滁州市", 341200: "阜阳市", 341300: "宿州市", 341500: "六安市", 341600: "亳州市", 341700: "池州市", 341800: "宣城市" }, 340100: { 340102: "瑶海区", 340103: "庐阳区", 340104: "蜀山区", 340111: "包河区", 340121: "长丰县", 340122: "肥东县", 340123: "肥西县", 340124: "庐江县", 340181: "巢湖市" }, 340200: { 340202: "镜湖区", 340203: "弋江区", 340207: "鸠江区", 340208: "三山区", 340221: "芜湖县", 340222: "繁昌县", 340223: "南陵县", 340225: "无为县" }, 340300: { 340302: "龙子湖区", 340303: "蚌山区", 340304: "禹会区", 340311: "淮上区", 340321: "怀远县", 340322: "五河县", 340323: "固镇县" }, 340400: { 340402: "大通区", 340403: "田家庵区", 340404: "谢家集区", 340405: "八公山区", 340406: "潘集区", 340421: "凤台县", 340422: "寿县" }, 340500: { 340503: "花山区", 340504: "雨山区", 340506: "博望区", 340521: "当涂县", 340522: "含山县", 340523: "和县" }, 340600: { 340602: "杜集区", 340603: "相山区", 340604: "烈山区", 340621: "濉溪县" }, 340700: { 340705: "铜官区", 340706: "义安区", 340711: "郊区", 340722: "枞阳县" }, 340800: { 340802: "迎江区", 340803: "大观区", 340811: "宜秀区", 340822: "怀宁县", 340824: "潜山县", 340825: "太湖县", 340826: "宿松县", 340827: "望江县", 340828: "岳西县", 340881: "桐城市" }, 341000: { 341002: "屯溪区", 341003: "黄山区", 341004: "徽州区", 341021: "歙县", 341022: "休宁县", 341023: "黟县", 341024: "祁门县" }, 341100: { 341102: "琅琊区", 341103: "南谯区", 341122: "来安县", 341124: "全椒县", 341125: "定远县", 341126: "凤阳县", 341181: "天长市", 341182: "明光市" }, 341200: { 341202: "颍州区", 341203: "颍东区", 341204: "颍泉区", 341221: "临泉县", 341222: "太和县", 341225: "阜南县", 341226: "颍上县", 341282: "界首市" }, 341300: { 341302: "埇桥区", 341321: "砀山县", 341322: "萧县", 341323: "灵璧县", 341324: "泗县" }, 341500: { 341502: "金安区", 341503: "裕安区", 341504: "叶集区", 341522: "霍邱县", 341523: "舒城县", 341524: "金寨县", 341525: "霍山县" }, 341600: { 341602: "谯城区", 341621: "涡阳县", 341622: "蒙城县", 341623: "利辛县" }, 341700: { 341702: "贵池区", 341721: "东至县", 341722: "石台县", 341723: "青阳县" }, 341800: { 341802: "宣州区", 341821: "郎溪县", 341822: "广德县", 341823: "泾县", 341824: "绩溪县", 341825: "旌德县", 341881: "宁国市" }, 350000: { 350100: "福州市", 350200: "厦门市", 350300: "莆田市", 350400: "三明市", 350500: "泉州市", 350600: "漳州市", 350700: "南平市", 350800: "龙岩市", 350900: "宁德市" }, 350100: { 350102: "鼓楼区", 350103: "台江区", 350104: "仓山区", 350105: "马尾区", 350111: "晋安区", 350121: "闽侯县", 350122: "连江县", 350123: "罗源县", 350124: "闽清县", 350125: "永泰县", 350128: "平潭县", 350181: "福清市", 350182: "长乐市" }, 350200: { 350203: "思明区", 350205: "海沧区", 350206: "湖里区", 350211: "集美区", 350212: "同安区", 350213: "翔安区" }, 350300: { 350302: "城厢区", 350303: "涵江区", 350304: "荔城区", 350305: "秀屿区", 350322: "仙游县" }, 350400: { 350402: "梅列区", 350403: "三元区", 350421: "明溪县", 350423: "清流县", 350424: "宁化县", 350425: "大田县", 350426: "尤溪县", 350427: "沙县", 350428: "将乐县", 350429: "泰宁县", 350430: "建宁县", 350481: "永安市" }, 350500: { 350502: "鲤城区", 350503: "丰泽区", 350504: "洛江区", 350505: "泉港区", 350521: "惠安县", 350524: "安溪县", 350525: "永春县", 350526: "德化县", 350527: "金门县", 350581: "石狮市", 350582: "晋江市", 350583: "南安市" }, 350600: { 350602: "芗城区", 350603: "龙文区", 350622: "云霄县", 350623: "漳浦县", 350624: "诏安县", 350625: "长泰县", 350626: "东山县", 350627: "南靖县", 350628: "平和县", 350629: "华安县", 350681: "龙海市" }, 350700: { 350702: "延平区", 350703: "建阳区", 350721: "顺昌县", 350722: "浦城县", 350723: "光泽县", 350724: "松溪县", 350725: "政和县", 350781: "邵武市", 350782: "武夷山市", 350783: "建瓯市" }, 350800: { 350802: "新罗区", 350803: "永定区", 350821: "长汀县", 350823: "上杭县", 350824: "武平县", 350825: "连城县", 350881: "漳平市" }, 350900: { 350902: "蕉城区", 350921: "霞浦县", 350922: "古田县", 350923: "屏南县", 350924: "寿宁县", 350925: "周宁县", 350926: "柘荣县", 350981: "福安市", 350982: "福鼎市" }, 360000: { 360100: "南昌市", 360200: "景德镇市", 360300: "萍乡市", 360400: "九江市", 360500: "新余市", 360600: "鹰潭市", 360700: "赣州市", 360800: "吉安市", 360900: "宜春市", 361000: "抚州市", 361100: "上饶市" }, 360100: { 360102: "东湖区", 360103: "西湖区", 360104: "青云谱区", 360105: "湾里区", 360111: "青山湖区", 360112: "新建区", 360121: "南昌县", 360123: "安义县", 360124: "进贤县" }, 360200: { 360202: "昌江区", 360203: "珠山区", 360222: "浮梁县", 360281: "乐平市" }, 360300: { 360302: "安源区", 360313: "湘东区", 360321: "莲花县", 360322: "上栗县", 360323: "芦溪县" }, 360400: { 360402: "濂溪区", 360403: "浔阳区", 360421: "九江县", 360423: "武宁县", 360424: "修水县", 360425: "永修县", 360426: "德安县", 360428: "都昌县", 360429: "湖口县", 360430: "彭泽县", 360481: "瑞昌市", 360482: "共青城市", 360483: "庐山市" }, 360500: { 360502: "渝水区", 360521: "分宜县" }, 360600: { 360602: "月湖区", 360622: "余江县", 360681: "贵溪市" }, 360700: { 360702: "章贡区", 360703: "南康区", 360721: "赣县", 360722: "信丰县", 360723: "大余县", 360724: "上犹县", 360725: "崇义县", 360726: "安远县", 360727: "龙南县", 360728: "定南县", 360729: "全南县", 360730: "宁都县", 360731: "于都县", 360732: "兴国县", 360733: "会昌县", 360734: "寻乌县", 360735: "石城县", 360781: "瑞金市" }, 360800: { 360802: "吉州区", 360803: "青原区", 360821: "吉安县", 360822: "吉水县", 360823: "峡江县", 360824: "新干县", 360825: "永丰县", 360826: "泰和县", 360827: "遂川县", 360828: "万安县", 360829: "安福县", 360830: "永新县", 360881: "井冈山市" }, 360900: { 360902: "袁州区", 360921: "奉新县", 360922: "万载县", 360923: "上高县", 360924: "宜丰县", 360925: "靖安县", 360926: "铜鼓县", 360981: "丰城市", 360982: "樟树市", 360983: "高安市" }, 361000: { 361002: "临川区", 361021: "南城县", 361022: "黎川县", 361023: "南丰县", 361024: "崇仁县", 361025: "乐安县", 361026: "宜黄县", 361027: "金溪县", 361028: "资溪县", 361029: "东乡县", 361030: "广昌县" }, 361100: { 361102: "信州区", 361103: "广丰区", 361121: "上饶县", 361123: "玉山县", 361124: "铅山县", 361125: "横峰县", 361126: "弋阳县", 361127: "余干县", 361128: "鄱阳县", 361129: "万年县", 361130: "婺源县", 361181: "德兴市" }, 370000: { 370100: "济南市", 370200: "青岛市", 370300: "淄博市", 370400: "枣庄市", 370500: "东营市", 370600: "烟台市", 370700: "潍坊市", 370800: "济宁市", 370900: "泰安市", 371000: "威海市", 371100: "日照市", 371200: "莱芜市", 371300: "临沂市", 371400: "德州市", 371500: "聊城市", 371600: "滨州市", 371700: "菏泽市" }, 370100: { 370102: "历下区", 370103: "市中区", 370104: "槐荫区", 370105: "天桥区", 370112: "历城区", 370113: "长清区", 370124: "平阴县", 370125: "济阳县", 370126: "商河县", 370181: "章丘市" }, 370200: { 370202: "市南区", 370203: "市北区", 370211: "黄岛区", 370212: "崂山区", 370213: "李沧区", 370214: "城阳区", 370281: "胶州市", 370282: "即墨市", 370283: "平度市", 370285: "莱西市" }, 370300: { 370302: "淄川区", 370303: "张店区", 370304: "博山区", 370305: "临淄区", 370306: "周村区", 370321: "桓台县", 370322: "高青县", 370323: "沂源县" }, 370400: { 370402: "市中区", 370403: "薛城区", 370404: "峄城区", 370405: "台儿庄区", 370406: "山亭区", 370481: "滕州市" }, 370500: { 370502: "东营区", 370503: "河口区", 370505: "垦利区", 370522: "利津县", 370523: "广饶县" }, 370600: { 370602: "芝罘区", 370611: "福山区", 370612: "牟平区", 370613: "莱山区", 370634: "长岛县", 370681: "龙口市", 370682: "莱阳市", 370683: "莱州市", 370684: "蓬莱市", 370685: "招远市", 370686: "栖霞市", 370687: "海阳市" }, 370700: { 370702: "潍城区", 370703: "寒亭区", 370704: "坊子区", 370705: "奎文区", 370724: "临朐县", 370725: "昌乐县", 370781: "青州市", 370782: "诸城市", 370783: "寿光市", 370784: "安丘市", 370785: "高密市", 370786: "昌邑市" }, 370800: { 370811: "任城区", 370812: "兖州区", 370826: "微山县", 370827: "鱼台县", 370828: "金乡县", 370829: "嘉祥县", 370830: "汶上县", 370831: "泗水县", 370832: "梁山县", 370881: "曲阜市", 370883: "邹城市" }, 370900: { 370902: "泰山区", 370911: "岱岳区", 370921: "宁阳县", 370923: "东平县", 370982: "新泰市", 370983: "肥城市" }, 371000: { 371002: "环翠区", 371003: "文登区", 371082: "荣成市", 371083: "乳山市" }, 371100: { 371102: "东港区", 371103: "岚山区", 371121: "五莲县", 371122: "莒县" }, 371200: { 371202: "莱城区", 371203: "钢城区" }, 371300: { 371302: "兰山区", 371311: "罗庄区", 371312: "河东区", 371321: "沂南县", 371322: "郯城县", 371323: "沂水县", 371324: "兰陵县", 371325: "费县", 371326: "平邑县", 371327: "莒南县", 371328: "蒙阴县", 371329: "临沭县" }, 371400: { 371402: "德城区", 371403: "陵城区", 371422: "宁津县", 371423: "庆云县", 371424: "临邑县", 371425: "齐河县", 371426: "平原县", 371427: "夏津县", 371428: "武城县", 371481: "乐陵市", 371482: "禹城市" }, 371500: { 371502: "东昌府区", 371521: "阳谷县", 371522: "莘县", 371523: "茌平县", 371524: "东阿县", 371525: "冠县", 371526: "高唐县", 371581: "临清市" }, 371600: { 371602: "滨城区", 371603: "沾化区", 371621: "惠民县", 371622: "阳信县", 371623: "无棣县", 371625: "博兴县", 371626: "邹平县" }, 371700: { 371702: "牡丹区", 371703: "定陶区", 371721: "曹县", 371722: "单县", 371723: "成武县", 371724: "巨野县", 371725: "郓城县", 371726: "鄄城县", 371728: "东明县" }, 410000: { 410100: "郑州市", 410200: "开封市", 410300: "洛阳市", 410400: "平顶山市", 410500: "安阳市", 410600: "鹤壁市", 410700: "新乡市", 410800: "焦作市", 410900: "濮阳市", 411000: "许昌市", 411100: "漯河市", 411200: "三门峡市", 411300: "南阳市", 411400: "商丘市", 411500: "信阳市", 411600: "周口市", 411700: "驻马店市", 419001: "济源市" }, 410100: { 410102: "中原区", 410103: "二七区", 410104: "管城回族区", 410105: "金水区", 410106: "上街区", 410108: "惠济区", 410122: "中牟县", 410181: "巩义市", 410182: "荥阳市", 410183: "新密市", 410184: "新郑市", 410185: "登封市" }, 410200: { 410202: "龙亭区", 410203: "顺河回族区", 410204: "鼓楼区", 410205: "禹王台区", 410211: "金明区", 410212: "祥符区", 410221: "杞县", 410222: "通许县", 410223: "尉氏县", 410225: "兰考县" }, 410300: { 410302: "老城区", 410303: "西工区", 410304: "瀍河回族区", 410305: "涧西区", 410306: "吉利区", 410311: "洛龙区", 410322: "孟津县", 410323: "新安县", 410324: "栾川县", 410325: "嵩县", 410326: "汝阳县", 410327: "宜阳县", 410328: "洛宁县", 410329: "伊川县", 410381: "偃师市" }, 410400: { 410402: "新华区", 410403: "卫东区", 410404: "石龙区", 410411: "湛河区", 410421: "宝丰县", 410422: "叶县", 410423: "鲁山县", 410425: "郏县", 410481: "舞钢市", 410482: "汝州市" }, 410500: { 410502: "文峰区", 410503: "北关区", 410505: "殷都区", 410506: "龙安区", 410522: "安阳县", 410523: "汤阴县", 410526: "滑县", 410527: "内黄县", 410581: "林州市" }, 410600: { 410602: "鹤山区", 410603: "山城区", 410611: "淇滨区", 410621: "浚县", 410622: "淇县" }, 410700: { 410702: "红旗区", 410703: "卫滨区", 410704: "凤泉区", 410711: "牧野区", 410721: "新乡县", 410724: "获嘉县", 410725: "原阳县", 410726: "延津县", 410727: "封丘县", 410728: "长垣县", 410781: "卫辉市", 410782: "辉县市" }, 410800: { 410802: "解放区", 410803: "中站区", 410804: "马村区", 410811: "山阳区", 410821: "修武县", 410822: "博爱县", 410823: "武陟县", 410825: "温县", 410882: "沁阳市", 410883: "孟州市" }, 410900: { 410902: "华龙区", 410922: "清丰县", 410923: "南乐县", 410926: "范县", 410927: "台前县", 410928: "濮阳县" }, 411000: { 411002: "魏都区", 411023: "许昌县", 411024: "鄢陵县", 411025: "襄城县", 411081: "禹州市", 411082: "长葛市" }, 411100: { 411102: "源汇区", 411103: "郾城区", 411104: "召陵区", 411121: "舞阳县", 411122: "临颍县" }, 411200: { 411202: "湖滨区", 411203: "陕州区", 411221: "渑池县", 411224: "卢氏县", 411281: "义马市", 411282: "灵宝市" }, 411300: { 411302: "宛城区", 411303: "卧龙区", 411321: "南召县", 411322: "方城县", 411323: "西峡县", 411324: "镇平县", 411325: "内乡县", 411326: "淅川县", 411327: "社旗县", 411328: "唐河县", 411329: "新野县", 411330: "桐柏县", 411381: "邓州市" }, 411400: { 411402: "梁园区", 411403: "睢阳区", 411421: "民权县", 411422: "睢县", 411423: "宁陵县", 411424: "柘城县", 411425: "虞城县", 411426: "夏邑县", 411481: "永城市" }, 411500: { 411502: "浉河区", 411503: "平桥区", 411521: "罗山县", 411522: "光山县", 411523: "新县", 411524: "商城县", 411525: "固始县", 411526: "潢川县", 411527: "淮滨县", 411528: "息县" }, 411600: { 411602: "川汇区", 411621: "扶沟县", 411622: "西华县", 411623: "商水县", 411624: "沈丘县", 411625: "郸城县", 411626: "淮阳县", 411627: "太康县", 411628: "鹿邑县", 411681: "项城市" }, 411700: { 411702: "驿城区", 411721: "西平县", 411722: "上蔡县", 411723: "平舆县", 411724: "正阳县", 411725: "确山县", 411726: "泌阳县", 411727: "汝南县", 411728: "遂平县", 411729: "新蔡县" }, 420000: { 420100: "武汉市", 420200: "黄石市", 420300: "十堰市", 420500: "宜昌市", 420600: "襄阳市", 420700: "鄂州市", 420800: "荆门市", 420900: "孝感市", 421000: "荆州市", 421100: "黄冈市", 421200: "咸宁市", 421300: "随州市", 422800: "恩施土家族苗族自治州", 429004: "仙桃市", 429005: "潜江市", 429006: "天门市", 429021: "神农架林区" }, 420100: { 420102: "江岸区", 420103: "江汉区", 420104: "硚口区", 420105: "汉阳区", 420106: "武昌区", 420107: "青山区", 420111: "洪山区", 420112: "东西湖区", 420113: "汉南区", 420114: "蔡甸区", 420115: "江夏区", 420116: "黄陂区", 420117: "新洲区" }, 420200: { 420202: "黄石港区", 420203: "西塞山区", 420204: "下陆区", 420205: "铁山区", 420222: "阳新县", 420281: "大冶市" }, 420300: { 420302: "茅箭区", 420303: "张湾区", 420304: "郧阳区", 420322: "郧西县", 420323: "竹山县", 420324: "竹溪县", 420325: "房县", 420381: "丹江口市" }, 420500: { 420502: "西陵区", 420503: "伍家岗区", 420504: "点军区", 420505: "猇亭区", 420506: "夷陵区", 420525: "远安县", 420526: "兴山县", 420527: "秭归县", 420528: "长阳土家族自治县", 420529: "五峰土家族自治县", 420581: "宜都市", 420582: "当阳市", 420583: "枝江市" }, 420600: { 420602: "襄城区", 420606: "樊城区", 420607: "襄州区", 420624: "南漳县", 420625: "谷城县", 420626: "保康县", 420682: "老河口市", 420683: "枣阳市", 420684: "宜城市" }, 420700: { 420702: "梁子湖区", 420703: "华容区", 420704: "鄂城区" }, 420800: { 420802: "东宝区", 420804: "掇刀区", 420821: "京山县", 420822: "沙洋县", 420881: "钟祥市" }, 420900: { 420902: "孝南区", 420921: "孝昌县", 420922: "大悟县", 420923: "云梦县", 420981: "应城市", 420982: "安陆市", 420984: "汉川市" }, 421000: { 421002: "沙市区", 421003: "荆州区", 421022: "公安县", 421023: "监利县", 421024: "江陵县", 421081: "石首市", 421083: "洪湖市", 421087: "松滋市" }, 421100: { 421102: "黄州区", 421121: "团风县", 421122: "红安县", 421123: "罗田县", 421124: "英山县", 421125: "浠水县", 421126: "蕲春县", 421127: "黄梅县", 421181: "麻城市", 421182: "武穴市" }, 421200: { 421202: "咸安区", 421221: "嘉鱼县", 421222: "通城县", 421223: "崇阳县", 421224: "通山县", 421281: "赤壁市" }, 421300: { 421303: "曾都区", 421321: "随县", 421381: "广水市" }, 422800: { 422801: "恩施市", 422802: "利川市", 422822: "建始县", 422823: "巴东县", 422825: "宣恩县", 422826: "咸丰县", 422827: "来凤县", 422828: "鹤峰县" }, 430000: { 430100: "长沙市", 430200: "株洲市", 430300: "湘潭市", 430400: "衡阳市", 430500: "邵阳市", 430600: "岳阳市", 430700: "常德市", 430800: "张家界市", 430900: "益阳市", 431000: "郴州市", 431100: "永州市", 431200: "怀化市", 431300: "娄底市", 433100: "湘西土家族苗族自治州" }, 430100: { 430102: "芙蓉区", 430103: "天心区", 430104: "岳麓区", 430105: "开福区", 430111: "雨花区", 430112: "望城区", 430121: "长沙县", 430124: "宁乡县", 430181: "浏阳市" }, 430200: { 430202: "荷塘区", 430203: "芦淞区", 430204: "石峰区", 430211: "天元区", 430221: "株洲县", 430223: "攸县", 430224: "茶陵县", 430225: "炎陵县", 430281: "醴陵市" }, 430300: { 430302: "雨湖区", 430304: "岳塘区", 430321: "湘潭县", 430381: "湘乡市", 430382: "韶山市" }, 430400: { 430405: "珠晖区", 430406: "雁峰区", 430407: "石鼓区", 430408: "蒸湘区", 430412: "南岳区", 430421: "衡阳县", 430422: "衡南县", 430423: "衡山县", 430424: "衡东县", 430426: "祁东县", 430481: "耒阳市", 430482: "常宁市" }, 430500: { 430502: "双清区", 430503: "大祥区", 430511: "北塔区", 430521: "邵东县", 430522: "新邵县", 430523: "邵阳县", 430524: "隆回县", 430525: "洞口县", 430527: "绥宁县", 430528: "新宁县", 430529: "城步苗族自治县", 430581: "武冈市" }, 430600: { 430602: "岳阳楼区", 430603: "云溪区", 430611: "君山区", 430621: "岳阳县", 430623: "华容县", 430624: "湘阴县", 430626: "平江县", 430681: "汨罗市", 430682: "临湘市" }, 430700: { 430702: "武陵区", 430703: "鼎城区", 430721: "安乡县", 430722: "汉寿县", 430723: "澧县", 430724: "临澧县", 430725: "桃源县", 430726: "石门县", 430781: "津市市" }, 430800: { 430802: "永定区", 430811: "武陵源区", 430821: "慈利县", 430822: "桑植县" }, 430900: { 430902: "资阳区", 430903: "赫山区", 430921: "南县", 430922: "桃江县", 430923: "安化县", 430981: "沅江市" }, 431000: { 431002: "北湖区", 431003: "苏仙区", 431021: "桂阳县", 431022: "宜章县", 431023: "永兴县", 431024: "嘉禾县", 431025: "临武县", 431026: "汝城县", 431027: "桂东县", 431028: "安仁县", 431081: "资兴市" }, 431100: { 431102: "零陵区", 431103: "冷水滩区", 431121: "祁阳县", 431122: "东安县", 431123: "双牌县", 431124: "道县", 431125: "江永县", 431126: "宁远县", 431127: "蓝山县", 431128: "新田县", 431129: "江华瑶族自治县" }, 431200: { 431202: "鹤城区", 431221: "中方县", 431222: "沅陵县", 431223: "辰溪县", 431224: "溆浦县", 431225: "会同县", 431226: "麻阳苗族自治县", 431227: "新晃侗族自治县", 431228: "芷江侗族自治县", 431229: "靖州苗族侗族自治县", 431230: "通道侗族自治县", 431281: "洪江市" }, 431300: { 431302: "娄星区", 431321: "双峰县", 431322: "新化县", 431381: "冷水江市", 431382: "涟源市" }, 433100: { 433101: "吉首市", 433122: "泸溪县", 433123: "凤凰县", 433124: "花垣县", 433125: "保靖县", 433126: "古丈县", 433127: "永顺县", 433130: "龙山县" }, 440000: { 440100: "广州市", 440200: "韶关市", 440300: "深圳市", 440400: "珠海市", 440500: "汕头市", 440600: "佛山市", 440700: "江门市", 440800: "湛江市", 440900: "茂名市", 441200: "肇庆市", 441300: "惠州市", 441400: "梅州市", 441500: "汕尾市", 441600: "河源市", 441700: "阳江市", 441800: "清远市", 441900: "东莞市", 442000: "中山市", 445100: "潮州市", 445200: "揭阳市", 445300: "云浮市" }, 440100: { 440103: "荔湾区", 440104: "越秀区", 440105: "海珠区", 440106: "天河区", 440111: "白云区", 440112: "黄埔区", 440113: "番禺区", 440114: "花都区", 440115: "南沙区", 440117: "从化区", 440118: "增城区" }, 440200: { 440203: "武江区", 440204: "浈江区", 440205: "曲江区", 440222: "始兴县", 440224: "仁化县", 440229: "翁源县", 440232: "乳源瑶族自治县", 440233: "新丰县", 440281: "乐昌市", 440282: "南雄市" }, 440300: { 440303: "罗湖区", 440304: "福田区", 440305: "南山区", 440306: "宝安区", 440307: "龙岗区", 440308: "盐田区" }, 440400: { 440402: "香洲区", 440403: "斗门区", 440404: "金湾区" }, 440500: { 440507: "龙湖区", 440511: "金平区", 440512: "濠江区", 440513: "潮阳区", 440514: "潮南区", 440515: "澄海区", 440523: "南澳县" }, 440600: { 440604: "禅城区", 440605: "南海区", 440606: "顺德区", 440607: "三水区", 440608: "高明区" }, 440700: { 440703: "蓬江区", 440704: "江海区", 440705: "新会区", 440781: "台山市", 440783: "开平市", 440784: "鹤山市", 440785: "恩平市" }, 440800: { 440802: "赤坎区", 440803: "霞山区", 440804: "坡头区", 440811: "麻章区", 440823: "遂溪县", 440825: "徐闻县", 440881: "廉江市", 440882: "雷州市", 440883: "吴川市" }, 440900: { 440902: "茂南区", 440904: "电白区", 440981: "高州市", 440982: "化州市", 440983: "信宜市" }, 441200: { 441202: "端州区", 441203: "鼎湖区", 441204: "高要区", 441223: "广宁县", 441224: "怀集县", 441225: "封开县", 441226: "德庆县", 441284: "四会市" }, 441300: { 441302: "惠城区", 441303: "惠阳区", 441322: "博罗县", 441323: "惠东县", 441324: "龙门县" }, 441400: { 441402: "梅江区", 441403: "梅县区", 441422: "大埔县", 441423: "丰顺县", 441424: "五华县", 441426: "平远县", 441427: "蕉岭县", 441481: "兴宁市" }, 441500: { 441502: "城区", 441521: "海丰县", 441523: "陆河县", 441581: "陆丰市" }, 441600: { 441602: "源城区", 441621: "紫金县", 441622: "龙川县", 441623: "连平县", 441624: "和平县", 441625: "东源县" }, 441700: { 441702: "江城区", 441704: "阳东区", 441721: "阳西县", 441781: "阳春市" }, 441800: { 441802: "清城区", 441803: "清新区", 441821: "佛冈县", 441823: "阳山县", 441825: "连山壮族瑶族自治县", 441826: "连南瑶族自治县", 441881: "英德市", 441882: "连州市" }, 445100: { 445102: "湘桥区", 445103: "潮安区", 445122: "饶平县" }, 445200: { 445202: "榕城区", 445203: "揭东区", 445222: "揭西县", 445224: "惠来县", 445281: "普宁市" }, 445300: { 445302: "云城区", 445303: "云安区", 445321: "新兴县", 445322: "郁南县", 445381: "罗定市" }, 450000: { 450100: "南宁市", 450200: "柳州市", 450300: "桂林市", 450400: "梧州市", 450500: "北海市", 450600: "防城港市", 450700: "钦州市", 450800: "贵港市", 450900: "玉林市", 451000: "百色市", 451100: "贺州市", 451200: "河池市", 451300: "来宾市", 451400: "崇左市" }, 450100: { 450102: "兴宁区", 450103: "青秀区", 450105: "江南区", 450107: "西乡塘区", 450108: "良庆区", 450109: "邕宁区", 450110: "武鸣区", 450123: "隆安县", 450124: "马山县", 450125: "上林县", 450126: "宾阳县", 450127: "横县" }, 450200: { 450202: "城中区", 450203: "鱼峰区", 450204: "柳南区", 450205: "柳北区", 450206: "柳江区", 450222: "柳城县", 450223: "鹿寨县", 450224: "融安县", 450225: "融水苗族自治县", 450226: "三江侗族自治县" }, 450300: { 450302: "秀峰区", 450303: "叠彩区", 450304: "象山区", 450305: "七星区", 450311: "雁山区", 450312: "临桂区", 450321: "阳朔县", 450323: "灵川县", 450324: "全州县", 450325: "兴安县", 450326: "永福县", 450327: "灌阳县", 450328: "龙胜各族自治县", 450329: "资源县", 450330: "平乐县", 450331: "荔浦县", 450332: "恭城瑶族自治县" }, 450400: { 450403: "万秀区", 450405: "长洲区", 450406: "龙圩区", 450421: "苍梧县", 450422: "藤县", 450423: "蒙山县", 450481: "岑溪市" }, 450500: { 450502: "海城区", 450503: "银海区", 450512: "铁山港区", 450521: "合浦县" }, 450600: { 450602: "港口区", 450603: "防城区", 450621: "上思县", 450681: "东兴市" }, 450700: { 450702: "钦南区", 450703: "钦北区", 450721: "灵山县", 450722: "浦北县" }, 450800: { 450802: "港北区", 450803: "港南区", 450804: "覃塘区", 450821: "平南县", 450881: "桂平市" }, 450900: { 450902: "玉州区", 450903: "福绵区", 450921: "容县", 450922: "陆川县", 450923: "博白县", 450924: "兴业县", 450981: "北流市" }, 451000: { 451002: "右江区", 451021: "田阳县", 451022: "田东县", 451023: "平果县", 451024: "德保县", 451026: "那坡县", 451027: "凌云县", 451028: "乐业县", 451029: "田林县", 451030: "西林县", 451031: "隆林各族自治县", 451081: "靖西市" }, 451100: { 451102: "八步区", 451103: "平桂区", 451121: "昭平县", 451122: "钟山县", 451123: "富川瑶族自治县" }, 451200: { 451202: "金城江区", 451221: "南丹县", 451222: "天峨县", 451223: "凤山县", 451224: "东兰县", 451225: "罗城仫佬族自治县", 451226: "环江毛南族自治县", 451227: "巴马瑶族自治县", 451228: "都安瑶族自治县", 451229: "大化瑶族自治县", 451281: "宜州市" }, 451300: { 451302: "兴宾区", 451321: "忻城县", 451322: "象州县", 451323: "武宣县", 451324: "金秀瑶族自治县", 451381: "合山市" }, 451400: { 451402: "江州区", 451421: "扶绥县", 451422: "宁明县", 451423: "龙州县", 451424: "大新县", 451425: "天等县", 451481: "凭祥市" }, 460000: { 460100: "海口市", 460200: "三亚市", 460300: "三沙市", 460400: "儋州市", 469001: "五指山市", 469002: "琼海市", 469005: "文昌市", 469006: "万宁市", 469007: "东方市", 469021: "定安县", 469022: "屯昌县", 469023: "澄迈县", 469024: "临高县", 469025: "白沙黎族自治县", 469026: "昌江黎族自治县", 469027: "乐东黎族自治县", 469028: "陵水黎族自治县", 469029: "保亭黎族苗族自治县", 469030: "琼中黎族苗族自治县" }, 460100: { 460105: "秀英区", 460106: "龙华区", 460107: "琼山区", 460108: "美兰区" }, 460200: { 460202: "海棠区", 460203: "吉阳区", 460204: "天涯区", 460205: "崖州区" }, 500000: { 500100: "市辖区", 500200: "县" }, 500100: { 500101: "万州区", 500102: "涪陵区", 500103: "渝中区", 500104: "大渡口区", 500105: "江北区", 500106: "沙坪坝区", 500107: "九龙坡区", 500108: "南岸区", 500109: "北碚区", 500110: "綦江区", 500111: "大足区", 500112: "渝北区", 500113: "巴南区", 500114: "黔江区", 500115: "长寿区", 500116: "江津区", 500117: "合川区", 500118: "永川区", 500119: "南川区", 500120: "璧山区", 500151: "铜梁区", 500152: "潼南区", 500153: "荣昌区", 500154: "开州区" }, 500200: { 500228: "梁平县", 500229: "城口县", 500230: "丰都县", 500231: "垫江县", 500232: "武隆县", 500233: "忠县", 500235: "云阳县", 500236: "奉节县", 500237: "巫山县", 500238: "巫溪县", 500240: "石柱土家族自治县", 500241: "秀山土家族苗族自治县", 500242: "酉阳土家族苗族自治县", 500243: "彭水苗族土家族自治县" }, 510000: { 510100: "成都市", 510300: "自贡市", 510400: "攀枝花市", 510500: "泸州市", 510600: "德阳市", 510700: "绵阳市", 510800: "广元市", 510900: "遂宁市", 511000: "内江市", 511100: "乐山市", 511300: "南充市", 511400: "眉山市", 511500: "宜宾市", 511600: "广安市", 511700: "达州市", 511800: "雅安市", 511900: "巴中市", 512000: "资阳市", 513200: "阿坝藏族羌族自治州", 513300: "甘孜藏族自治州", 513400: "凉山彝族自治州" }, 510100: { 510104: "锦江区", 510105: "青羊区", 510106: "金牛区", 510107: "武侯区", 510108: "成华区", 510112: "龙泉驿区", 510113: "青白江区", 510114: "新都区", 510115: "温江区", 510116: "双流区", 510121: "金堂县", 510124: "郫县", 510129: "大邑县", 510131: "蒲江县", 510132: "新津县", 510181: "都江堰市", 510182: "彭州市", 510183: "邛崃市", 510184: "崇州市", 510185: "简阳市" }, 510300: { 510302: "自流井区", 510303: "贡井区", 510304: "大安区", 510311: "沿滩区", 510321: "荣县", 510322: "富顺县" }, 510400: { 510402: "东区", 510403: "西区", 510411: "仁和区", 510421: "米易县", 510422: "盐边县" }, 510500: { 510502: "江阳区", 510503: "纳溪区", 510504: "龙马潭区", 510521: "泸县", 510522: "合江县", 510524: "叙永县", 510525: "古蔺县" }, 510600: { 510603: "旌阳区", 510623: "中江县", 510626: "罗江县", 510681: "广汉市", 510682: "什邡市", 510683: "绵竹市" }, 510700: { 510703: "涪城区", 510704: "游仙区", 510705: "安州区", 510722: "三台县", 510723: "盐亭县", 510725: "梓潼县", 510726: "北川羌族自治县", 510727: "平武县", 510781: "江油市" }, 510800: { 510802: "利州区", 510811: "昭化区", 510812: "朝天区", 510821: "旺苍县", 510822: "青川县", 510823: "剑阁县", 510824: "苍溪县" }, 510900: { 510903: "船山区", 510904: "安居区", 510921: "蓬溪县", 510922: "射洪县", 510923: "大英县" }, 511000: { 511002: "市中区", 511011: "东兴区", 511024: "威远县", 511025: "资中县", 511028: "隆昌县" }, 511100: { 511102: "市中区", 511111: "沙湾区", 511112: "五通桥区", 511113: "金口河区", 511123: "犍为县", 511124: "井研县", 511126: "夹江县", 511129: "沐川县", 511132: "峨边彝族自治县", 511133: "马边彝族自治县", 511181: "峨眉山市" }, 511300: { 511302: "顺庆区", 511303: "高坪区", 511304: "嘉陵区", 511321: "南部县", 511322: "营山县", 511323: "蓬安县", 511324: "仪陇县", 511325: "西充县", 511381: "阆中市" }, 511400: { 511402: "东坡区", 511403: "彭山区", 511421: "仁寿县", 511423: "洪雅县", 511424: "丹棱县", 511425: "青神县" }, 511500: { 511502: "翠屏区", 511503: "南溪区", 511521: "宜宾县", 511523: "江安县", 511524: "长宁县", 511525: "高县", 511526: "珙县", 511527: "筠连县", 511528: "兴文县", 511529: "屏山县" }, 511600: { 511602: "广安区", 511603: "前锋区", 511621: "岳池县", 511622: "武胜县", 511623: "邻水县", 511681: "华蓥市" }, 511700: { 511702: "通川区", 511703: "达川区", 511722: "宣汉县", 511723: "开江县", 511724: "大竹县", 511725: "渠县", 511781: "万源市" }, 511800: { 511802: "雨城区", 511803: "名山区", 511822: "荥经县", 511823: "汉源县", 511824: "石棉县", 511825: "天全县", 511826: "芦山县", 511827: "宝兴县" }, 511900: { 511902: "巴州区", 511903: "恩阳区", 511921: "通江县", 511922: "南江县", 511923: "平昌县" }, 512000: { 512002: "雁江区", 512021: "安岳县", 512022: "乐至县" }, 513200: { 513201: "马尔康市", 513221: "汶川县", 513222: "理县", 513223: "茂县", 513224: "松潘县", 513225: "九寨沟县", 513226: "金川县", 513227: "小金县", 513228: "黑水县", 513230: "壤塘县", 513231: "阿坝县", 513232: "若尔盖县", 513233: "红原县" }, 513300: { 513301: "康定市", 513322: "泸定县", 513323: "丹巴县", 513324: "九龙县", 513325: "雅江县", 513326: "道孚县", 513327: "炉霍县", 513328: "甘孜县", 513329: "新龙县", 513330: "德格县", 513331: "白玉县", 513332: "石渠县", 513333: "色达县", 513334: "理塘县", 513335: "巴塘县", 513336: "乡城县", 513337: "稻城县", 513338: "得荣县" }, 513400: { 513401: "西昌市", 513422: "木里藏族自治县", 513423: "盐源县", 513424: "德昌县", 513425: "会理县", 513426: "会东县", 513427: "宁南县", 513428: "普格县", 513429: "布拖县", 513430: "金阳县", 513431: "昭觉县", 513432: "喜德县", 513433: "冕宁县", 513434: "越西县", 513435: "甘洛县", 513436: "美姑县", 513437: "雷波县" }, 520000: { 520100: "贵阳市", 520200: "六盘水市", 520300: "遵义市", 520400: "安顺市", 520500: "毕节市", 520600: "铜仁市", 522300: "黔西南布依族苗族自治州", 522600: "黔东南苗族侗族自治州", 522700: "黔南布依族苗族自治州" }, 520100: { 520102: "南明区", 520103: "云岩区", 520111: "花溪区", 520112: "乌当区", 520113: "白云区", 520115: "观山湖区", 520121: "开阳县", 520122: "息烽县", 520123: "修文县", 520181: "清镇市" }, 520200: { 520201: "钟山区", 520203: "六枝特区", 520221: "水城县", 520222: "盘县" }, 520300: { 520302: "红花岗区", 520303: "汇川区", 520304: "播州区", 520322: "桐梓县", 520323: "绥阳县", 520324: "正安县", 520325: "道真仡佬族苗族自治县", 520326: "务川仡佬族苗族自治县", 520327: "凤冈县", 520328: "湄潭县", 520329: "余庆县", 520330: "习水县", 520381: "赤水市", 520382: "仁怀市" }, 520400: { 520402: "西秀区", 520403: "平坝区", 520422: "普定县", 520423: "镇宁布依族苗族自治县", 520424: "关岭布依族苗族自治县", 520425: "紫云苗族布依族自治县" }, 520500: { 520502: "七星关区", 520521: "大方县", 520522: "黔西县", 520523: "金沙县", 520524: "织金县", 520525: "纳雍县", 520526: "威宁彝族回族苗族自治县", 520527: "赫章县" }, 520600: { 520602: "碧江区", 520603: "万山区", 520621: "江口县", 520622: "玉屏侗族自治县", 520623: "石阡县", 520624: "思南县", 520625: "印江土家族苗族自治县", 520626: "德江县", 520627: "沿河土家族自治县", 520628: "松桃苗族自治县" }, 522300: { 522301: "兴义市", 522322: "兴仁县", 522323: "普安县", 522324: "晴隆县", 522325: "贞丰县", 522326: "望谟县", 522327: "册亨县", 522328: "安龙县" }, 522600: { 522601: "凯里市", 522622: "黄平县", 522623: "施秉县", 522624: "三穗县", 522625: "镇远县", 522626: "岑巩县", 522627: "天柱县", 522628: "锦屏县", 522629: "剑河县", 522630: "台江县", 522631: "黎平县", 522632: "榕江县", 522633: "从江县", 522634: "雷山县", 522635: "麻江县", 522636: "丹寨县" }, 522700: { 522701: "都匀市", 522702: "福泉市", 522722: "荔波县", 522723: "贵定县", 522725: "瓮安县", 522726: "独山县", 522727: "平塘县", 522728: "罗甸县", 522729: "长顺县", 522730: "龙里县", 522731: "惠水县", 522732: "三都水族自治县" }, 530000: { 530100: "昆明市", 530300: "曲靖市", 530400: "玉溪市", 530500: "保山市", 530600: "昭通市", 530700: "丽江市", 530800: "普洱市", 530900: "临沧市", 532300: "楚雄彝族自治州", 532500: "红河哈尼族彝族自治州", 532600: "文山壮族苗族自治州", 532800: "西双版纳傣族自治州", 532900: "大理白族自治州", 533100: "德宏傣族景颇族自治州", 533300: "怒江傈僳族自治州", 533400: "迪庆藏族自治州" }, 530100: { 530102: "五华区", 530103: "盘龙区", 530111: "官渡区", 530112: "西山区", 530113: "东川区", 530114: "呈贡区", 530122: "晋宁县", 530124: "富民县", 530125: "宜良县", 530126: "石林彝族自治县", 530127: "嵩明县", 530128: "禄劝彝族苗族自治县", 530129: "寻甸回族彝族自治县", 530181: "安宁市" }, 530300: { 530302: "麒麟区", 530303: "沾益区", 530321: "马龙县", 530322: "陆良县", 530323: "师宗县", 530324: "罗平县", 530325: "富源县", 530326: "会泽县", 530381: "宣威市" }, 530400: { 530402: "红塔区", 530403: "江川区", 530422: "澄江县", 530423: "通海县", 530424: "华宁县", 530425: "易门县", 530426: "峨山彝族自治县", 530427: "新平彝族傣族自治县", 530428: "元江哈尼族彝族傣族自治县" }, 530500: { 530502: "隆阳区", 530521: "施甸县", 530523: "龙陵县", 530524: "昌宁县", 530581: "腾冲市" }, 530600: { 530602: "昭阳区", 530621: "鲁甸县", 530622: "巧家县", 530623: "盐津县", 530624: "大关县", 530625: "永善县", 530626: "绥江县", 530627: "镇雄县", 530628: "彝良县", 530629: "威信县", 530630: "水富县" }, 530700: { 530702: "古城区", 530721: "玉龙纳西族自治县", 530722: "永胜县", 530723: "华坪县", 530724: "宁蒗彝族自治县" }, 530800: { 530802: "思茅区", 530821: "宁洱哈尼族彝族自治县", 530822: "墨江哈尼族自治县", 530823: "景东彝族自治县", 530824: "景谷傣族彝族自治县", 530825: "镇沅彝族哈尼族拉祜族自治县", 530826: "江城哈尼族彝族自治县", 530827: "孟连傣族拉祜族佤族自治县", 530828: "澜沧拉祜族自治县", 530829: "西盟佤族自治县" }, 530900: { 530902: "临翔区", 530921: "凤庆县", 530922: "云县", 530923: "永德县", 530924: "镇康县", 530925: "双江拉祜族佤族布朗族傣族自治县", 530926: "耿马傣族佤族自治县", 530927: "沧源佤族自治县" }, 532300: { 532301: "楚雄市", 532322: "双柏县", 532323: "牟定县", 532324: "南华县", 532325: "姚安县", 532326: "大姚县", 532327: "永仁县", 532328: "元谋县", 532329: "武定县", 532331: "禄丰县" }, 532500: { 532501: "个旧市", 532502: "开远市", 532503: "蒙自市", 532504: "弥勒市", 532523: "屏边苗族自治县", 532524: "建水县", 532525: "石屏县", 532527: "泸西县", 532528: "元阳县", 532529: "红河县", 532530: "金平苗族瑶族傣族自治县", 532531: "绿春县", 532532: "河口瑶族自治县" }, 532600: { 532601: "文山市", 532622: "砚山县", 532623: "西畴县", 532624: "麻栗坡县", 532625: "马关县", 532626: "丘北县", 532627: "广南县", 532628: "富宁县" }, 532800: { 532801: "景洪市", 532822: "勐海县", 532823: "勐腊县" }, 532900: { 532901: "大理市", 532922: "漾濞彝族自治县", 532923: "祥云县", 532924: "宾川县", 532925: "弥渡县", 532926: "南涧彝族自治县", 532927: "巍山彝族回族自治县", 532928: "永平县", 532929: "云龙县", 532930: "洱源县", 532931: "剑川县", 532932: "鹤庆县" }, 533100: { 533102: "瑞丽市", 533103: "芒市", 533122: "梁河县", 533123: "盈江县", 533124: "陇川县" }, 533300: { 533301: "泸水市", 533323: "福贡县", 533324: "贡山独龙族怒族自治县", 533325: "兰坪白族普米族自治县" }, 533400: { 533401: "香格里拉市", 533422: "德钦县", 533423: "维西傈僳族自治县" }, 540000: { 540100: "拉萨市", 540200: "日喀则市", 540300: "昌都市", 540400: "林芝市", 540500: "山南市", 542400: "那曲地区", 542500: "阿里地区" }, 540100: { 540102: "城关区", 540103: "堆龙德庆区", 540121: "林周县", 540122: "当雄县", 540123: "尼木县", 540124: "曲水县", 540126: "达孜县", 540127: "墨竹工卡县" }, 540200: { 540202: "桑珠孜区", 540221: "南木林县", 540222: "江孜县", 540223: "定日县", 540224: "萨迦县", 540225: "拉孜县", 540226: "昂仁县", 540227: "谢通门县", 540228: "白朗县", 540229: "仁布县", 540230: "康马县", 540231: "定结县", 540232: "仲巴县", 540233: "亚东县", 540234: "吉隆县", 540235: "聂拉木县", 540236: "萨嘎县", 540237: "岗巴县" }, 540300: { 540302: "卡若区", 540321: "江达县", 540322: "贡觉县", 540323: "类乌齐县", 540324: "丁青县", 540325: "察雅县", 540326: "八宿县", 540327: "左贡县", 540328: "芒康县", 540329: "洛隆县", 540330: "边坝县" }, 540400: { 540402: "巴宜区", 540421: "工布江达县", 540422: "米林县", 540423: "墨脱县", 540424: "波密县", 540425: "察隅县", 540426: "朗县" }, 540500: { 540502: "乃东区", 540521: "扎囊县", 540522: "贡嘎县", 540523: "桑日县", 540524: "琼结县", 540525: "曲松县", 540526: "措美县", 540527: "洛扎县", 540528: "加查县", 540529: "隆子县", 540530: "错那县", 540531: "浪卡子县" }, 542400: { 542421: "那曲县", 542422: "嘉黎县", 542423: "比如县", 542424: "聂荣县", 542425: "安多县", 542426: "申扎县", 542427: "索县", 542428: "班戈县", 542429: "巴青县", 542430: "尼玛县", 542431: "双湖县" }, 542500: { 542521: "普兰县", 542522: "札达县", 542523: "噶尔县", 542524: "日土县", 542525: "革吉县", 542526: "改则县", 542527: "措勤县" }, 610000: { 610100: "西安市", 610200: "铜川市", 610300: "宝鸡市", 610400: "咸阳市", 610500: "渭南市", 610600: "延安市", 610700: "汉中市", 610800: "榆林市", 610900: "安康市", 611000: "商洛市" }, 610100: { 610102: "新城区", 610103: "碑林区", 610104: "莲湖区", 610111: "灞桥区", 610112: "未央区", 610113: "雁塔区", 610114: "阎良区", 610115: "临潼区", 610116: "长安区", 610117: "高陵区", 610122: "蓝田县", 610124: "周至县", 610125: "户县" }, 610200: { 610202: "王益区", 610203: "印台区", 610204: "耀州区", 610222: "宜君县" }, 610300: { 610302: "渭滨区", 610303: "金台区", 610304: "陈仓区", 610322: "凤翔县", 610323: "岐山县", 610324: "扶风县", 610326: "眉县", 610327: "陇县", 610328: "千阳县", 610329: "麟游县", 610330: "凤县", 610331: "太白县" }, 610400: { 610402: "秦都区", 610403: "杨陵区", 610404: "渭城区", 610422: "三原县", 610423: "泾阳县", 610424: "乾县", 610425: "礼泉县", 610426: "永寿县", 610427: "彬县", 610428: "长武县", 610429: "旬邑县", 610430: "淳化县", 610431: "武功县", 610481: "兴平市" }, 610500: { 610502: "临渭区", 610503: "华州区", 610522: "潼关县", 610523: "大荔县", 610524: "合阳县", 610525: "澄城县", 610526: "蒲城县", 610527: "白水县", 610528: "富平县", 610581: "韩城市", 610582: "华阴市" }, 610600: { 610602: "宝塔区", 610603: "安塞区", 610621: "延长县", 610622: "延川县", 610623: "子长县", 610625: "志丹县", 610626: "吴起县", 610627: "甘泉县", 610628: "富县", 610629: "洛川县", 610630: "宜川县", 610631: "黄龙县", 610632: "黄陵县" }, 610700: { 610702: "汉台区", 610721: "南郑县", 610722: "城固县", 610723: "洋县", 610724: "西乡县", 610725: "勉县", 610726: "宁强县", 610727: "略阳县", 610728: "镇巴县", 610729: "留坝县", 610730: "佛坪县" }, 610800: { 610802: "榆阳区", 610803: "横山区", 610821: "神木县", 610822: "府谷县", 610824: "靖边县", 610825: "定边县", 610826: "绥德县", 610827: "米脂县", 610828: "佳县", 610829: "吴堡县", 610830: "清涧县", 610831: "子洲县" }, 610900: { 610902: "汉滨区", 610921: "汉阴县", 610922: "石泉县", 610923: "宁陕县", 610924: "紫阳县", 610925: "岚皋县", 610926: "平利县", 610927: "镇坪县", 610928: "旬阳县", 610929: "白河县" }, 611000: { 611002: "商州区", 611021: "洛南县", 611022: "丹凤县", 611023: "商南县", 611024: "山阳县", 611025: "镇安县", 611026: "柞水县" }, 620000: { 620100: "兰州市", 620200: "嘉峪关市", 620300: "金昌市", 620400: "白银市", 620500: "天水市", 620600: "武威市", 620700: "张掖市", 620800: "平凉市", 620900: "酒泉市", 621000: "庆阳市", 621100: "定西市", 621200: "陇南市", 622900: "临夏回族自治州", 623000: "甘南藏族自治州" }, 620100: { 620102: "城关区", 620103: "七里河区", 620104: "西固区", 620105: "安宁区", 620111: "红古区", 620121: "永登县", 620122: "皋兰县", 620123: "榆中县" }, 620300: { 620302: "金川区", 620321: "永昌县" }, 620400: { 620402: "白银区", 620403: "平川区", 620421: "靖远县", 620422: "会宁县", 620423: "景泰县" }, 620500: { 620502: "秦州区", 620503: "麦积区", 620521: "清水县", 620522: "秦安县", 620523: "甘谷县", 620524: "武山县", 620525: "张家川回族自治县" }, 620600: { 620602: "凉州区", 620621: "民勤县", 620622: "古浪县", 620623: "天祝藏族自治县" }, 620700: { 620702: "甘州区", 620721: "肃南裕固族自治县", 620722: "民乐县", 620723: "临泽县", 620724: "高台县", 620725: "山丹县" }, 620800: { 620802: "崆峒区", 620821: "泾川县", 620822: "灵台县", 620823: "崇信县", 620824: "华亭县", 620825: "庄浪县", 620826: "静宁县" }, 620900: { 620902: "肃州区", 620921: "金塔县", 620922: "瓜州县", 620923: "肃北蒙古族自治县", 620924: "阿克塞哈萨克族自治县", 620981: "玉门市", 620982: "敦煌市" }, 621000: { 621002: "西峰区", 621021: "庆城县", 621022: "环县", 621023: "华池县", 621024: "合水县", 621025: "正宁县", 621026: "宁县", 621027: "镇原县" }, 621100: { 621102: "安定区", 621121: "通渭县", 621122: "陇西县", 621123: "渭源县", 621124: "临洮县", 621125: "漳县", 621126: "岷县" }, 621200: { 621202: "武都区", 621221: "成县", 621222: "文县", 621223: "宕昌县", 621224: "康县", 621225: "西和县", 621226: "礼县", 621227: "徽县", 621228: "两当县" }, 622900: { 622901: "临夏市", 622921: "临夏县", 622922: "康乐县", 622923: "永靖县", 622924: "广河县", 622925: "和政县", 622926: "东乡族自治县", 622927: "积石山保安族东乡族撒拉族自治县" }, 623000: { 623001: "合作市", 623021: "临潭县", 623022: "卓尼县", 623023: "舟曲县", 623024: "迭部县", 623025: "玛曲县", 623026: "碌曲县", 623027: "夏河县" }, 630000: { 630100: "西宁市", 630200: "海东市", 632200: "海北藏族自治州", 632300: "黄南藏族自治州", 632500: "海南藏族自治州", 632600: "果洛藏族自治州", 632700: "玉树藏族自治州", 632800: "海西蒙古族藏族自治州" }, 630100: { 630102: "城东区", 630103: "城中区", 630104: "城西区", 630105: "城北区", 630121: "大通回族土族自治县", 630122: "湟中县", 630123: "湟源县" }, 630200: { 630202: "乐都区", 630203: "平安区", 630222: "民和回族土族自治县", 630223: "互助土族自治县", 630224: "化隆回族自治县", 630225: "循化撒拉族自治县" }, 632200: { 632221: "门源回族自治县", 632222: "祁连县", 632223: "海晏县", 632224: "刚察县" }, 632300: { 632321: "同仁县", 632322: "尖扎县", 632323: "泽库县", 632324: "河南蒙古族自治县" }, 632500: { 632521: "共和县", 632522: "同德县", 632523: "贵德县", 632524: "兴海县", 632525: "贵南县" }, 632600: { 632621: "玛沁县", 632622: "班玛县", 632623: "甘德县", 632624: "达日县", 632625: "久治县", 632626: "玛多县" }, 632700: { 632701: "玉树市", 632722: "杂多县", 632723: "称多县", 632724: "治多县", 632725: "囊谦县", 632726: "曲麻莱县" }, 632800: { 632801: "格尔木市", 632802: "德令哈市", 632821: "乌兰县", 632822: "都兰县", 632823: "天峻县" }, 640000: { 640100: "银川市", 640200: "石嘴山市", 640300: "吴忠市", 640400: "固原市", 640500: "中卫市" }, 640100: { 640104: "兴庆区", 640105: "西夏区", 640106: "金凤区", 640121: "永宁县", 640122: "贺兰县", 640181: "灵武市" }, 640200: { 640202: "大武口区", 640205: "惠农区", 640221: "平罗县" }, 640300: { 640302: "利通区", 640303: "红寺堡区", 640323: "盐池县", 640324: "同心县", 640381: "青铜峡市" }, 640400: { 640402: "原州区", 640422: "西吉县", 640423: "隆德县", 640424: "泾源县", 640425: "彭阳县" }, 640500: { 640502: "沙坡头区", 640521: "中宁县", 640522: "海原县" }, 650000: { 650100: "乌鲁木齐市", 650200: "克拉玛依市", 650400: "吐鲁番市", 650500: "哈密市", 652300: "昌吉回族自治州", 652700: "博尔塔拉蒙古自治州", 652800: "巴音郭楞蒙古自治州", 652900: "阿克苏地区", 653000: "克孜勒苏柯尔克孜自治州", 653100: "喀什地区", 653200: "和田地区", 654000: "伊犁哈萨克自治州", 654200: "塔城地区", 654300: "阿勒泰地区", 659001: "石河子市", 659002: "阿拉尔市", 659003: "图木舒克市", 659004: "五家渠市", 659006: "铁门关市" }, 650100: { 650102: "天山区", 650103: "沙依巴克区", 650104: "新市区", 650105: "水磨沟区", 650106: "头屯河区", 650107: "达坂城区", 650109: "米东区", 650121: "乌鲁木齐县" }, 650200: { 650202: "独山子区", 650203: "克拉玛依区", 650204: "白碱滩区", 650205: "乌尔禾区" }, 650400: { 650402: "高昌区", 650421: "鄯善县", 650422: "托克逊县" }, 650500: { 650502: "伊州区", 650521: "巴里坤哈萨克自治县", 650522: "伊吾县" }, 652300: { 652301: "昌吉市", 652302: "阜康市", 652323: "呼图壁县", 652324: "玛纳斯县", 652325: "奇台县", 652327: "吉木萨尔县", 652328: "木垒哈萨克自治县" }, 652700: { 652701: "博乐市", 652702: "阿拉山口市", 652722: "精河县", 652723: "温泉县" }, 652800: { 652801: "库尔勒市", 652822: "轮台县", 652823: "尉犁县", 652824: "若羌县", 652825: "且末县", 652826: "焉耆回族自治县", 652827: "和静县", 652828: "和硕县", 652829: "博湖县" }, 652900: { 652901: "阿克苏市", 652922: "温宿县", 652923: "库车县", 652924: "沙雅县", 652925: "新和县", 652926: "拜城县", 652927: "乌什县", 652928: "阿瓦提县", 652929: "柯坪县" }, 653000: { 653001: "阿图什市", 653022: "阿克陶县", 653023: "阿合奇县", 653024: "乌恰县" }, 653100: { 653101: "喀什市", 653121: "疏附县", 653122: "疏勒县", 653123: "英吉沙县", 653124: "泽普县", 653125: "莎车县", 653126: "叶城县", 653127: "麦盖提县", 653128: "岳普湖县", 653129: "伽师县", 653130: "巴楚县", 653131: "塔什库尔干塔吉克自治县" }, 653200: { 653201: "和田市", 653221: "和田县", 653222: "墨玉县", 653223: "皮山县", 653224: "洛浦县", 653225: "策勒县", 653226: "于田县", 653227: "民丰县" }, 654000: { 654002: "伊宁市", 654003: "奎屯市", 654004: "霍尔果斯市", 654021: "伊宁县", 654022: "察布查尔锡伯自治县", 654023: "霍城县", 654024: "巩留县", 654025: "新源县", 654026: "昭苏县", 654027: "特克斯县", 654028: "尼勒克县" }, 654200: { 654201: "塔城市", 654202: "乌苏市", 654221: "额敏县", 654223: "沙湾县", 654224: "托里县", 654225: "裕民县", 654226: "和布克赛尔蒙古自治县" }, 654300: { 654301: "阿勒泰市", 654321: "布尔津县", 654322: "富蕴县", 654323: "福海县", 654324: "哈巴河县", 654325: "青河县", 654326: "吉木乃县" }, 810000: { 810001: "中西區", 810002: "灣仔區", 810003: "東區", 810004: "南區", 810005: "油尖旺區", 810006: "深水埗區", 810007: "九龍城區", 810008: "黃大仙區", 810009: "觀塘區", 810010: "荃灣區", 810011: "屯門區", 810012: "元朗區", 810013: "北區", 810014: "大埔區", 810015: "西貢區", 810016: "沙田區", 810017: "葵青區", 810018: "離島區" }, 820000: { 820001: "花地瑪堂區", 820002: "花王堂區", 820003: "望德堂區", 820004: "大堂區", 820005: "風順堂區", 820006: "嘉模堂區", 820007: "路氹填海區", 820008: "聖方濟各堂區" } };\n }]);\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(84)(module)))\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9kaXN0L2FwcC5qcz85MTA2Il0sIm5hbWVzIjpbImUiLCJuIiwiZXhwb3J0cyIsIm1vZHVsZSIsInIiLCJ0IiwibyIsImkiLCJsIiwiY2FsbCIsIm0iLCJjIiwiZCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImdldCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsInZhbHVlIiwiXyIsIkIiLCJ1IiwiZiIsImEiLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwidiIsInB1c2giLCJsYWJlbCIsImNvZGUiLCJsZW5ndGgiLCJoIiwiYiIsInkiLCJjaGlsZHJlbiIsImciLCJ4IiwiaiIsIlAiLCJTIiwiQyIsIkQiLCJPIiwiVCIsInVuc2hpZnQiLCJBIiwiTSIsInciLCJrIiwicSIsInoiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiXSwibWFwcGluZ3MiOiI7O0FBQUEsQ0FBQyxVQUFTQSxDQUFULEVBQVdDLENBQVgsRUFBYTtBQUFDLE1BQUcsNENBQWlCQyxPQUFqQixNQUEwQiw0Q0FBaUJDLE1BQWpCLEVBQTdCLEVBQXFEQSxPQUFPRCxPQUFQLEdBQWVELEdBQWYsQ0FBckQsS0FBNkUsSUFBRyxJQUFILEVBQXlDLGlDQUFPLEVBQVAsb0NBQVVBLENBQVY7QUFBQTtBQUFBO0FBQUEscUdBQXpDLEtBQTBEO0FBQUMsUUFBSUcsSUFBRUgsR0FBTixDQUFVLEtBQUksSUFBSUksQ0FBUixJQUFhRCxDQUFiO0FBQWUsT0FBQyxvQkFBaUJGLE9BQWpCLHlDQUFpQkEsT0FBakIsS0FBeUJBLE9BQXpCLEdBQWlDRixDQUFsQyxFQUFxQ0ssQ0FBckMsSUFBd0NELEVBQUVDLENBQUYsQ0FBeEM7QUFBZjtBQUE0RDtBQUFDLENBQTdOLENBQThOLElBQTlOLEVBQW1PLFlBQVU7QUFBQyxTQUFPLFVBQVNMLENBQVQsRUFB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ZSxRQUFPLE1BQXRCLEVBQTZCLFFBQU8sS0FBcEMsRUFBMEMsUUFBTyxLQUFqRCxFQUF1RCxRQUFPLE1BQTlELEVBQXFFLFFBQU8sS0FBNUUsRUFBa0YsUUFBTyxNQUF6RixFQUF2aTZDLEVBQXdvNkMsUUFBTyxFQUFDLFFBQU8sS0FBUixFQUFjLFFBQU8sS0FBckIsRUFBMkIsUUFBTyxJQUFsQyxFQUF1QyxRQUFPLElBQTlDLEVBQW1ELFFBQU8sTUFBMUQsRUFBaUUsUUFBTyxNQUF4RSxFQUErRSxRQUFPLE1BQXRGLEVBQTZGLFFBQU8sTUFBcEcsRUFBMkcsUUFBTyxLQUFsSCxFQUF3SCxRQUFPLEtBQS9ILEVBQXFJLFFBQU8sS0FBNUksRUFBa0osUUFBTyxLQUF6SixFQUErSixRQUFPLElBQXRLLEVBQTJLLFFBQU8sS0FBbEwsRUFBd0wsUUFBTyxLQUEvTCxFQUFxTSxRQUFPLEtBQTVNLEVBQWtOLFFBQU8sS0FBek4sRUFBK04sUUFBTyxLQUF0TyxFQUEvbzZDLEVBQTQzNkMsUUFBTyxFQUFDLFFBQU8sT0FBUixFQUFnQixRQUFPLE1BQXZCLEVBQThCLFFBQU8sTUFBckMsRUFBNEMsUUFBTyxLQUFuRCxFQUF5RCxRQUFPLE1BQWhFLEVBQXVFLFFBQU8sTUFBOUUsRUFBcUYsUUFBTyxPQUE1RixFQUFvRyxRQUFPLFFBQTNHLEVBQW40NkMsRUFBVjtBQUFtZzdDLEdBQTF4K0MsQ0FBbGQsQ0FBUDtBQUFzdi9DLENBQXArL0MsQ0FBRCxDIiwiZmlsZSI6IjgzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsbil7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9bigpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxuKTtlbHNle3ZhciByPW4oKTtmb3IodmFyIHQgaW4gcikoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0czplKVt0XT1yW3RdfX0odGhpcyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2lmKHJbdF0pcmV0dXJuIHJbdF0uZXhwb3J0czt2YXIgbz1yW3RdPXtpOnQsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVt0XS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxuKSxvLmw9ITAsby5leHBvcnRzfXZhciByPXt9O3JldHVybiBuLm09ZSxuLmM9cixuLmQ9ZnVuY3Rpb24oZSxyLHQpe24ubyhlLHIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6dH0pfSxuLm49ZnVuY3Rpb24oZSl7dmFyIHI9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIG4uZChyLFwiYVwiLHIpLHJ9LG4ubz1mdW5jdGlvbihlLG4pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKX0sbi5wPVwiXCIsbihuLnM9MCl9KFtmdW5jdGlvbihlLG4scil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5kKG4sXCJwcm92aW5jZUFuZENpdHlEYXRhXCIsZnVuY3Rpb24oKXtyZXR1cm4gY30pLHIuZChuLFwicmVnaW9uRGF0YVwiLGZ1bmN0aW9uKCl7cmV0dXJuIGl9KSxyLmQobixcInByb3ZpbmNlQW5kQ2l0eURhdGFQbHVzXCIsZnVuY3Rpb24oKXtyZXR1cm4gX30pLHIuZChuLFwicmVnaW9uRGF0YVBsdXNcIixmdW5jdGlvbigpe3JldHVybiBCfSksci5kKG4sXCJDb2RlVG9UZXh0XCIsZnVuY3Rpb24oKXtyZXR1cm4gdX0pLHIuZChuLFwiVGV4dFRvQ29kZVwiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ9KTt2YXIgdD1yKDEpLG89ci5uKHQpLGE9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0sbD1mdW5jdGlvbiBlKG4pe3ZhciByPVtdO2Zvcih2YXIgdCBpbiBuKXJbdF09XCJvYmplY3RcIj09PWEoblt0XSk/ZShuW3RdKTpuW3RdO3JldHVybiByfSx1PXt9LGY9e30saT1bXSxjPVtdO3VbXCJcIl09XCLlhajpg6hcIjtmb3IodmFyIHYgaW4gby5hWzg2XSlpLnB1c2goe3ZhbHVlOnYsbGFiZWw6by5hWzg2XVt2XX0pLHVbdl09by5hWzg2XVt2XSxmW28uYVs4Nl1bdl1dPXtjb2RlOnZ9LGZbby5hWzg2XVt2XV1bXCLlhajpg6hcIl09e2NvZGU6XCJcIn07Zm9yKHZhciBkPTAscz1pLmxlbmd0aDtkPHM7ZCsrKXt2YXIgcD1pW2RdLnZhbHVlLGg9aVtkXS5sYWJlbCxiPVtdO2Zvcih2YXIgeSBpbiBvLmFbcF0pYi5wdXNoKHt2YWx1ZTp5LGxhYmVsOm8uYVtwXVt5XX0pLHVbeV09by5hW3BdW3ldLGZbaF1bby5hW3BdW3ldXT17Y29kZTp5fSxmW2hdW28uYVtwXVt5XV1bXCLlhajpg6hcIl09e2NvZGU6XCJcIn07Yi5sZW5ndGgmJihpW2RdLmNoaWxkcmVuPWIpfWM9bChpKTtmb3IodmFyIGc9MCxtPWkubGVuZ3RoO2c8bTtnKyspe3ZhciB4PWlbZ10uY2hpbGRyZW4saj1pW2ddLmxhYmVsO2lmKHgpZm9yKHZhciBQPTAsUz14Lmxlbmd0aDtQPFM7UCsrKXt2YXIgQz14W1BdLnZhbHVlLEQ9eFtQXS5sYWJlbCxPPVtdO2Zvcih2YXIgVCBpbiBvLmFbQ10pTy5wdXNoKHt2YWx1ZTpULGxhYmVsOm8uYVtDXVtUXX0pLHVbVF09by5hW0NdW1RdLGZbal1bRF1bby5hW0NdW1RdXT17Y29kZTpUfTtPLmxlbmd0aCYmKHhbUF0uY2hpbGRyZW49Tyl9fXZhciBfPWwoYyk7Xy51bnNoaWZ0KHt2YWx1ZTpcIlwiLGxhYmVsOlwi5YWo6YOoXCJ9KTtmb3IodmFyIEE9MCxNPV8ubGVuZ3RoO0E8TTtBKyspe3ZhciB3PV9bQV0uY2hpbGRyZW47aWYodyYmdy5sZW5ndGgpe3cudW5zaGlmdCh7dmFsdWU6XCJcIixsYWJlbDpcIuWFqOmDqFwifSk7Zm9yKHZhciBrPTAscT13Lmxlbmd0aDtrPHE7aysrKXt2YXIgej13W2tdLmNoaWxkcmVuO3omJnoubGVuZ3RoJiZ6LnVuc2hpZnQoe3ZhbHVlOlwiXCIsbGFiZWw6XCLlhajpg6hcIn0pfX19dmFyIEI9bChpKTtCLnVuc2hpZnQoe3ZhbHVlOlwiXCIsbGFiZWw6XCLlhajpg6hcIn0pO2Zvcih2YXIgRT0wLEY9Qi5sZW5ndGg7RTxGO0UrKyl7dmFyIEc9QltFXS5jaGlsZHJlbjtpZihHJiZHLmxlbmd0aCl7Ry51bnNoaWZ0KHt2YWx1ZTpcIlwiLGxhYmVsOlwi5YWo6YOoXCJ9KTtmb3IodmFyIEg9MCxJPUcubGVuZ3RoO0g8STtIKyspe3ZhciBKPUdbSF0uY2hpbGRyZW47SiYmSi5sZW5ndGgmJkoudW5zaGlmdCh7dmFsdWU6XCJcIixsYWJlbDpcIuWFqOmDqFwifSl9fX19LGZ1bmN0aW9uKGUsbil7ZS5leHBvcnRzPXs4Njp7MTEwMDAwOlwi5YyX5Lqs5biCXCIsMTIwMDAwOlwi5aSp5rSl5biCXCIsMTMwMDAwOlwi5rKz5YyX55yBXCIsMTQwMDAwOlwi5bGx6KW/55yBXCIsMTUwMDAwOlwi5YaF6JKZ5Y+k6Ieq5rK75Yy6XCIsMjEwMDAwOlwi6L695a6B55yBXCIsMjIwMDAwOlwi5ZCJ5p6X55yBXCIsMjMwMDAwOlwi6buR6b6Z5rGf55yBXCIsMzEwMDAwOlwi5LiK5rW35biCXCIsMzIwMDAwOlwi5rGf6IuP55yBXCIsMzMwMDAwOlwi5rWZ5rGf55yBXCIsMzQwMDAwOlwi5a6J5b6955yBXCIsMzUwMDAwOlwi56aP5bu655yBXCIsMzYwMDAwOlwi5rGf6KW/55yBXCIsMzcwMDAwOlwi5bGx5Lic55yBXCIsNDEwMDAwOlwi5rKz5Y2X55yBXCIsNDIwMDAwOlwi5rmW5YyX55yBXCIsNDMwMDAwOlwi5rmW5Y2X55yBXCIsNDQwMDAwOlwi5bm/5Lic55yBXCIsNDUwMDAwOlwi5bm/6KW/5aOu5peP6Ieq5rK75Yy6XCIsNDYwMDAwOlwi5rW35Y2X55yBXCIsNTAwMDAwOlwi6YeN5bqG5biCXCIsNTEwMDAwOlwi5Zub5bed55yBXCIsNTIwMDAwOlwi6LS15bee55yBXCIsNTMwMDAwOlwi5LqR5Y2X55yBXCIsNTQwMDAwOlwi6KW/6JeP6Ieq5rK75Yy6XCIsNjEwMDAwOlwi6ZmV6KW/55yBXCIsNjIwMDAwOlwi55SY6IKD55yBXCIsNjMwMDAwOlwi6Z2S5rW355yBXCIsNjQwMDAwOlwi5a6B5aSP5Zue5peP6Ieq5rK75Yy6XCIsNjUwMDAwOlwi5paw55aG57u05ZC+5bCU6Ieq5rK75Yy6XCIsNzEwMDAwOlwi5Y+w5rm+55yBXCIsODEwMDAwOlwi6aaZ5riv54m55Yir6KGM5pS/5Yy6XCIsODIwMDAwOlwi5r6z6Zeo54m55Yir6KGM5pS/5Yy6XCJ9LDExMDAwMDp7MTEwMTAwOlwi5biC6L6W5Yy6XCJ9LDExMDEwMDp7MTEwMTAxOlwi5Lic5Z+O5Yy6XCIsMTEwMTAyOlwi6KW/5Z+O5Yy6XCIsMTEwMTA1Olwi5pyd6Ziz5Yy6XCIsMTEwMTA2Olwi5Liw5Y+w5Yy6XCIsMTEwMTA3Olwi55+z5pmv5bGx5Yy6XCIsMTEwMTA4Olwi5rW35reA5Yy6XCIsMTEwMTA5Olwi6Zeo5aS05rKf5Yy6XCIsMTEwMTExOlwi5oi/5bGx5Yy6XCIsMTEwMTEyOlwi6YCa5bee5Yy6XCIsMTEwMTEzOlwi6aG65LmJ5Yy6XCIsMTEwMTE0Olwi5piM5bmz5Yy6XCIsMTEwMTE1Olwi5aSn5YW05Yy6XCIsMTEwMTE2Olwi5oCA5p+U5Yy6XCIsMTEwMTE3Olwi5bmz6LC35Yy6XCIsMTEwMTE4Olwi5a+G5LqR5Yy6XCIsMTEwMTE5Olwi5bu25bqG5Yy6XCJ9LDEyMDAwMDp7MTIwMTAwOlwi5biC6L6W5Yy6XCJ9LDEyMDEwMDp7MTIwMTAxOlwi5ZKM5bmz5Yy6XCIsMTIwMTAyOlwi5rKz5Lic5Yy6XCIsMTIwMTAzOlwi5rKz6KW/5Yy6XCIsMTIwMTA0Olwi5Y2X5byA5Yy6XCIsMTIwMTA1Olwi5rKz5YyX5Yy6XCIsMTIwMTA2Olwi57qi5qGl5Yy6XCIsMTIwMTEwOlwi5Lic5Li95Yy6XCIsMTIwMTExOlwi6KW/6Z2S5Yy6XCIsMTIwMTEyOlwi5rSl5Y2X5Yy6XCIsMTIwMTEzOlwi5YyX6L6w5Yy6XCIsMTIwMTE0Olwi5q2m5riF5Yy6XCIsMTIwMTE1Olwi5a6d5Z275Yy6XCIsMTIwMTE2Olwi5ruo5rW35paw5Yy6XCIsMTIwMTE3Olwi5a6B5rKz5Yy6XCIsMTIwMTE4Olwi6Z2Z5rW35Yy6XCIsMTIwMTE5Olwi6JOf5bee5Yy6XCJ9LDEzMDAwMDp7MTMwMTAwOlwi55+z5a625bqE5biCXCIsMTMwMjAwOlwi5ZSQ5bGx5biCXCIsMTMwMzAwOlwi56em55qH5bKb5biCXCIsMTMwNDAwOlwi6YKv6YO45biCXCIsMTMwNTAwOlwi6YKi5Y+w5biCXCIsMTMwNjAwOlwi5L+d5a6a5biCXCIsMTMwNzAwOlwi5byg5a625Y+j5biCXCIsMTMwODAwOlwi5om/5b635biCXCIsMTMwOTAwOlwi5rKn5bee5biCXCIsMTMxMDAwOlwi5buK5Z2K5biCXCIsMTMxMTAwOlwi6KGh5rC05biCXCIsMTM5MDAxOlwi5a6a5bee5biCXCIsMTM5MDAyOlwi6L6b6ZuG5biCXCJ9LDEzMDEwMDp7MTMwMTAyOlwi6ZW/5a6J5Yy6XCIsMTMwMTA0Olwi5qGl6KW/5Yy6XCIsMTMwMTA1Olwi5paw5Y2O5Yy6XCIsMTMwMTA3Olwi5LqV6ZmJ55+/5Yy6XCIsMTMwMTA4Olwi6KOV5Y2O5Yy6XCIsMTMwMTA5Olwi6JeB5Z+O5Yy6XCIsMTMwMTEwOlwi6bm/5rOJ5Yy6XCIsMTMwMTExOlwi5qC+5Z+O5Yy6XCIsMTMwMTIxOlwi5LqV6ZmJ5Y6/XCIsMTMwMTIzOlwi5q2j5a6a5Y6/XCIsMTMwMTI1Olwi6KGM5ZSQ5Y6/XCIsMTMwMTI2Olwi54G15a+/5Y6/XCIsMTMwMTI3Olwi6auY6YKR5Y6/XCIsMTMwMTI4Olwi5rex5rO95Y6/XCIsMTMwMTI5Olwi6LWe55qH5Y6/XCIsMTMwMTMwOlwi5peg5p6B5Y6/XCIsMTMwMTMxOlwi5bmz5bGx5Y6/XCIsMTMwMTMyOlwi5YWD5rCP5Y6/XCIsMTMwMTMzOlwi6LW15Y6/XCIsMTMwMTgzOlwi5pmL5bee5biCXCIsMTMwMTg0Olwi5paw5LmQ5biCXCJ9LDEzMDIwMDp7MTMwMjAyOlwi6Lev5Y2X5Yy6XCIsMTMwMjAzOlwi6Lev5YyX5Yy6XCIsMTMwMjA0Olwi5Y+k5Ya25Yy6XCIsMTMwMjA1Olwi5byA5bmz5Yy6XCIsMTMwMjA3Olwi5Liw5Y2X5Yy6XCIsMTMwMjA4Olwi5Liw5ram5Yy6XCIsMTMwMjA5Olwi5pu55aaD55S45Yy6XCIsMTMwMjIzOlwi5rum5Y6/XCIsMTMwMjI0Olwi5rum5Y2X5Y6/XCIsMTMwMjI1Olwi5LmQ5Lqt5Y6/XCIsMTMwMjI3Olwi6L+B6KW/5Y6/XCIsMTMwMjI5Olwi546J55Sw5Y6/XCIsMTMwMjgxOlwi6YG15YyW5biCXCIsMTMwMjgzOlwi6L+B5a6J5biCXCJ9LDEzMDMwMDp7MTMwMzAyOlwi5rW35riv5Yy6XCIsMTMwMzAzOlwi5bGx5rW35YWz5Yy6XCIsMTMwMzA0Olwi5YyX5oi05rKz5Yy6XCIsMTMwMzA2Olwi5oqa5a6B5Yy6XCIsMTMwMzIxOlwi6Z2S6b6Z5ruh5peP6Ieq5rK75Y6/XCIsMTMwMzIyOlwi5piM6buO5Y6/XCIsMTMwMzI0Olwi5Y2i6b6Z5Y6/XCJ9LDEzMDQwMDp7MTMwNDAyOlwi6YKv5bGx5Yy6XCIsMTMwNDAzOlwi5Lib5Y+w5Yy6XCIsMTMwNDA0Olwi5aSN5YW05Yy6XCIsMTMwNDA2Olwi5bOw5bOw55+/5Yy6XCIsMTMwNDIxOlwi6YKv6YO45Y6/XCIsMTMwNDIzOlwi5Li05ryz5Y6/XCIsMTMwNDI0Olwi5oiQ5a6J5Y6/XCIsMTMwNDI1Olwi5aSn5ZCN5Y6/XCIsMTMwNDI2Olwi5raJ5Y6/XCIsMTMwNDI3Olwi56OB5Y6/XCIsMTMwNDI4Olwi6IKl5Lmh5Y6/XCIsMTMwNDI5Olwi5rC45bm05Y6/XCIsMTMwNDMwOlwi6YKx5Y6/XCIsMTMwNDMxOlwi6bih5rO95Y6/XCIsMTMwNDMyOlwi5bm/5bmz5Y6/XCIsMTMwNDMzOlwi6aaG6Zm25Y6/XCIsMTMwNDM0Olwi6a2P5Y6/XCIsMTMwNDM1Olwi5puy5ZGo5Y6/XCIsMTMwNDgxOlwi5q2m5a6J5biCXCJ9LDEzMDUwMDp7MTMwNTAyOlwi5qGl5Lic5Yy6XCIsMTMwNTAzOlwi5qGl6KW/5Yy6XCIsMTMwNTIxOlwi6YKi5Y+w5Y6/XCIsMTMwNTIyOlwi5Li05Z+O5Y6/XCIsMTMwNTIzOlwi5YaF5LiY5Y6/XCIsMTMwNTI0Olwi5p+P5Lmh5Y6/XCIsMTMwNTI1Olwi6ZqG5bCn5Y6/XCIsMTMwNTI2Olwi5Lu75Y6/XCIsMTMwNTI3Olwi5Y2X5ZKM5Y6/XCIsMTMwNTI4Olwi5a6B5pmL5Y6/XCIsMTMwNTI5Olwi5beo6bm/5Y6/XCIsMTMwNTMwOlwi5paw5rKz5Y6/XCIsMTMwNTMxOlwi5bm/5a6X5Y6/XCIsMTMwNTMyOlwi5bmz5Lmh5Y6/XCIsMTMwNTMzOlwi5aiB5Y6/XCIsMTMwNTM0Olwi5riF5rKz5Y6/XCIsMTMwNTM1Olwi5Li06KW/5Y6/XCIsMTMwNTgxOlwi5Y2X5a6r5biCXCIsMTMwNTgyOlwi5rKZ5rKz5biCXCJ9LDEzMDYwMDp7MTMwNjAyOlwi56ue56eA5Yy6XCIsMTMwNjA2Olwi6I6y5rGg5Yy6XCIsMTMwNjA3Olwi5ruh5Z+O5Yy6XCIsMTMwNjA4Olwi5riF6IuR5Yy6XCIsMTMwNjA5Olwi5b6Q5rC05Yy6XCIsMTMwNjIzOlwi5rae5rC05Y6/XCIsMTMwNjI0Olwi6Zic5bmz5Y6/XCIsMTMwNjI2Olwi5a6a5YW05Y6/XCIsMTMwNjI3Olwi5ZSQ5Y6/XCIsMTMwNjI4Olwi6auY6Ziz5Y6/XCIsMTMwNjI5Olwi5a655Z+O5Y6/XCIsMTMwNjMwOlwi5rae5rqQ5Y6/XCIsMTMwNjMxOlwi5pyb6YO95Y6/XCIsMTMwNjMyOlwi5a6J5paw5Y6/XCIsMTMwNjMzOlwi5piT5Y6/XCIsMTMwNjM0Olwi5puy6Ziz5Y6/XCIsMTMwNjM1Olwi6KCh5Y6/XCIsMTMwNjM2Olwi6aG65bmz5Y6/XCIsMTMwNjM3Olwi5Y2a6YeO5Y6/XCIsMTMwNjM4Olwi6ZuE5Y6/XCIsMTMwNjgxOlwi5ra/5bee5biCXCIsMTMwNjgzOlwi5a6J5Zu95biCXCIsMTMwNjg0Olwi6auY56KR5bqX5biCXCJ9LDEzMDcwMDp7MTMwNzAyOlwi5qGl5Lic5Yy6XCIsMTMwNzAzOlwi5qGl6KW/5Yy6XCIsMTMwNzA1Olwi5a6j5YyW5Yy6XCIsMTMwNzA2Olwi5LiL6Iqx5Zut5Yy6XCIsMTMwNzA4Olwi5LiH5YWo5Yy6XCIsMTMwNzA5Olwi5bSH56S85Yy6XCIsMTMwNzIyOlwi5byg5YyX5Y6/XCIsMTMwNzIzOlwi5bq35L+d5Y6/XCIsMTMwNzI0Olwi5rK95rqQ5Y6/XCIsMTMwNzI1Olwi5bCa5LmJ5Y6/XCIsMTMwNzI2Olwi6JSa5Y6/XCIsMTMwNzI3Olwi6Ziz5Y6f5Y6/XCIsMTMwNzI4Olwi5oCA5a6J5Y6/XCIsMTMwNzMwOlwi5oCA5p2l5Y6/XCIsMTMwNzMxOlwi5ra/6bm/5Y6/XCIsMTMwNzMyOlwi6LWk5Z+O5Y6/XCJ9LDEzMDgwMDp7MTMwODAyOlwi5Y+M5qGl5Yy6XCIsMTMwODAzOlwi5Y+M5rum5Yy6XCIsMTMwODA0Olwi6bmw5omL6JCl5a2Q55+/5Yy6XCIsMTMwODIxOlwi5om/5b635Y6/XCIsMTMwODIyOlwi5YW06ZqG5Y6/XCIsMTMwODIzOlwi5bmz5rOJ5Y6/XCIsMTMwODI0Olwi5rum5bmz5Y6/XCIsMTMwODI1Olwi6ZqG5YyW5Y6/XCIsMTMwODI2Olwi5Liw5a6B5ruh5peP6Ieq5rK75Y6/XCIsMTMwODI3Olwi5a695Z+O5ruh5peP6Ieq5rK75Y6/XCIsMTMwODI4Olwi5Zu05Zy65ruh5peP6JKZ5Y+k5peP6Ieq5rK75Y6/XCJ9LDEzMDkwMDp7MTMwOTAyOlwi5paw5Y2O5Yy6XCIsMTMwOTAzOlwi6L+Q5rKz5Yy6XCIsMTMwOTIxOlwi5rKn5Y6/XCIsMTMwOTIyOlwi6Z2S5Y6/XCIsMTMwOTIzOlwi5Lic5YWJ5Y6/XCIsMTMwOTI0Olwi5rW35YW05Y6/XCIsMTMwOTI1Olwi55uQ5bGx5Y6/XCIsMTMwOTI2Olwi6IKD5a6B5Y6/XCIsMTMwOTI3Olwi5Y2X55qu5Y6/XCIsMTMwOTI4Olwi5ZC05qGl5Y6/XCIsMTMwOTI5Olwi54yu5Y6/XCIsMTMwOTMwOlwi5a2f5p2R5Zue5peP6Ieq5rK75Y6/XCIsMTMwOTgxOlwi5rOK5aS05biCXCIsMTMwOTgyOlwi5Lu75LiY5biCXCIsMTMwOTgzOlwi6buE6aqF5biCXCIsMTMwOTg0Olwi5rKz6Ze05biCXCJ9LDEzMTAwMDp7MTMxMDAyOlwi5a6J5qyh5Yy6XCIsMTMxMDAzOlwi5bm/6Ziz5Yy6XCIsMTMxMDIyOlwi5Zu65a6J5Y6/XCIsMTMxMDIzOlwi5rC45riF5Y6/XCIsMTMxMDI0Olwi6aaZ5rKz5Y6/XCIsMTMxMDI1Olwi5aSn5Z+O5Y6/XCIsMTMxMDI2Olwi5paH5a6J5Y6/XCIsMTMxMDI4Olwi5aSn5Y6C5Zue5peP6Ieq5rK75Y6/XCIsMTMxMDgxOlwi6Zy45bee5biCXCIsMTMxMDgyOlwi5LiJ5rKz5biCXCJ9LDEzMTEwMDp7MTMxMTAyOlwi5qGD5Z+O5Yy6XCIsMTMxMTAzOlwi5YaA5bee5Yy6XCIsMTMxMTIxOlwi5p6j5by65Y6/XCIsMTMxMTIyOlwi5q2m6YKR5Y6/XCIsMTMxMTIzOlwi5q2m5by65Y6/XCIsMTMxMTI0Olwi6aW26Ziz5Y6/XCIsMTMxMTI1Olwi5a6J5bmz5Y6/XCIsMTMxMTI2Olwi5pWF5Z+O5Y6/XCIsMTMxMTI3Olwi5pmv5Y6/XCIsMTMxMTI4Olwi6Zic5Z+O5Y6/XCIsMTMxMTgyOlwi5rex5bee5biCXCJ9LDE0MDAwMDp7MTQwMTAwOlwi5aSq5Y6f5biCXCIsMTQwMjAwOlwi5aSn5ZCM5biCXCIsMTQwMzAwOlwi6Ziz5rOJ5biCXCIsMTQwNDAwOlwi6ZW/5rK75biCXCIsMTQwNTAwOlwi5pmL5Z+O5biCXCIsMTQwNjAwOlwi5pyU5bee5biCXCIsMTQwNzAwOlwi5pmL5Lit5biCXCIsMTQwODAwOlwi6L+Q5Z+O5biCXCIsMTQwOTAwOlwi5b+75bee5biCXCIsMTQxMDAwOlwi5Li05rG+5biCXCIsMTQxMTAwOlwi5ZCV5qKB5biCXCJ9LDE0MDEwMDp7MTQwMTA1Olwi5bCP5bqX5Yy6XCIsMTQwMTA2Olwi6L+O5rO95Yy6XCIsMTQwMTA3Olwi5p2P6Iqx5bKt5Yy6XCIsMTQwMTA4Olwi5bCW6I2J5Z2q5Yy6XCIsMTQwMTA5Olwi5LiH5p+P5p6X5Yy6XCIsMTQwMTEwOlwi5pmL5rqQ5Yy6XCIsMTQwMTIxOlwi5riF5b6Q5Y6/XCIsMTQwMTIyOlwi6Ziz5puy5Y6/XCIsMTQwMTIzOlwi5aiE54Om5Y6/XCIsMTQwMTgxOlwi5Y+k5Lqk5biCXCJ9LDE0MDIwMDp7MTQwMjAyOlwi5Z+O5Yy6XCIsMTQwMjAzOlwi55+/5Yy6XCIsMTQwMjExOlwi5Y2X6YOK5Yy6XCIsMTQwMjEyOlwi5paw6I2j5Yy6XCIsMTQwMjIxOlwi6Ziz6auY5Y6/XCIsMTQwMjIyOlwi5aSp6ZWH5Y6/XCIsMTQwMjIzOlwi5bm/54G15Y6/XCIsMTQwMjI0Olwi54G15LiY5Y6/XCIsMTQwMjI1Olwi5rWR5rqQ5Y6/XCIsMTQwMjI2Olwi5bem5LqR5Y6/XCIsMTQwMjI3Olwi5aSn5ZCM5Y6/XCJ9LDE0MDMwMDp7MTQwMzAyOlwi5Z+O5Yy6XCIsMTQwMzAzOlwi55+/5Yy6XCIsMTQwMzExOlwi6YOK5Yy6XCIsMTQwMzIxOlwi5bmz5a6a5Y6/XCIsMTQwMzIyOlwi55uC5Y6/XCJ9LDE0MDQwMDp7MTQwNDAyOlwi5Z+O5Yy6XCIsMTQwNDExOlwi6YOK5Yy6XCIsMTQwNDIxOlwi6ZW/5rK75Y6/XCIsMTQwNDIzOlwi6KWE5Z6j5Y6/XCIsMTQwNDI0Olwi5bGv55WZ5Y6/XCIsMTQwNDI1Olwi5bmz6aG65Y6/XCIsMTQwNDI2Olwi6buO5Z+O5Y6/XCIsMTQwNDI3Olwi5aO25YWz5Y6/XCIsMTQwNDI4Olwi6ZW/5a2Q5Y6/XCIsMTQwNDI5Olwi5q2m5Lmh5Y6/XCIsMTQwNDMwOlwi5rKB5Y6/XCIsMTQwNDMxOlwi5rKB5rqQ5Y6/XCIsMTQwNDgxOlwi5r2e5Z+O5biCXCJ9LDE0MDUwMDp7MTQwNTAyOlwi5Z+O5Yy6XCIsMTQwNTIxOlwi5rKB5rC05Y6/XCIsMTQwNTIyOlwi6Ziz5Z+O5Y6/XCIsMTQwNTI0Olwi6Zm15bed5Y6/XCIsMTQwNTI1Olwi5rO95bee5Y6/XCIsMTQwNTgxOlwi6auY5bmz5biCXCJ9LDE0MDYwMDp7MTQwNjAyOlwi5pyU5Z+O5Yy6XCIsMTQwNjAzOlwi5bmz6bKB5Yy6XCIsMTQwNjIxOlwi5bGx6Zi05Y6/XCIsMTQwNjIyOlwi5bqU5Y6/XCIsMTQwNjIzOlwi5Y+z546J5Y6/XCIsMTQwNjI0Olwi5oCA5LuB5Y6/XCJ9LDE0MDcwMDp7MTQwNzAyOlwi5qaG5qyh5Yy6XCIsMTQwNzIxOlwi5qaG56S+5Y6/XCIsMTQwNzIyOlwi5bem5p2D5Y6/XCIsMTQwNzIzOlwi5ZKM6aG65Y6/XCIsMTQwNzI0Olwi5piU6Ziz5Y6/XCIsMTQwNzI1Olwi5a+/6Ziz5Y6/XCIsMTQwNzI2Olwi5aSq6LC35Y6/XCIsMTQwNzI3Olwi56WB5Y6/XCIsMTQwNzI4Olwi5bmz6YGl5Y6/XCIsMTQwNzI5Olwi54G155+z5Y6/XCIsMTQwNzgxOlwi5LuL5LyR5biCXCJ9LDE0MDgwMDp7MTQwODAyOlwi55uQ5rmW5Yy6XCIsMTQwODIxOlwi5Li054yX5Y6/XCIsMTQwODIyOlwi5LiH6I2j5Y6/XCIsMTQwODIzOlwi6Ze75Zac5Y6/XCIsMTQwODI0Olwi56i35bGx5Y6/XCIsMTQwODI1Olwi5paw57ub5Y6/XCIsMTQwODI2Olwi57ub5Y6/XCIsMTQwODI3Olwi5Z6j5puy5Y6/XCIsMTQwODI4Olwi5aSP5Y6/XCIsMTQwODI5Olwi5bmz6ZmG5Y6/XCIsMTQwODMwOlwi6Iqu5Z+O5Y6/XCIsMTQwODgxOlwi5rC45rWO5biCXCIsMTQwODgyOlwi5rKz5rSl5biCXCJ9LDE0MDkwMDp7MTQwOTAyOlwi5b+75bqc5Yy6XCIsMTQwOTIxOlwi5a6a6KWE5Y6/XCIsMTQwOTIyOlwi5LqU5Y+w5Y6/XCIsMTQwOTIzOlwi5Luj5Y6/XCIsMTQwOTI0Olwi57mB5bOZ5Y6/XCIsMTQwOTI1Olwi5a6B5q2m5Y6/XCIsMTQwOTI2Olwi6Z2Z5LmQ5Y6/XCIsMTQwOTI3Olwi56We5rGg5Y6/XCIsMTQwOTI4Olwi5LqU5a+o5Y6/XCIsMTQwOTI5Olwi5bKi5bKa5Y6/XCIsMTQwOTMwOlwi5rKz5puy5Y6/XCIsMTQwOTMxOlwi5L+d5b635Y6/XCIsMTQwOTMyOlwi5YGP5YWz5Y6/XCIsMTQwOTgxOlwi5Y6f5bmz5biCXCJ9LDE0MTAwMDp7MTQxMDAyOlwi5bCn6YO95Yy6XCIsMTQxMDIxOlwi5puy5rKD5Y6/XCIsMTQxMDIyOlwi57+85Z+O5Y6/XCIsMTQxMDIzOlwi6KWE5rG+5Y6/XCIsMTQxMDI0Olwi5rSq5rSe5Y6/XCIsMTQxMDI1Olwi5Y+k5Y6/XCIsMTQxMDI2Olwi5a6J5rO95Y6/XCIsMTQxMDI3Olwi5rWu5bGx5Y6/XCIsMTQxMDI4Olwi5ZCJ5Y6/XCIsMTQxMDI5Olwi5Lmh5a6B5Y6/XCIsMTQxMDMwOlwi5aSn5a6B5Y6/XCIsMTQxMDMxOlwi6Zqw5Y6/XCIsMTQxMDMyOlwi5rC45ZKM5Y6/XCIsMTQxMDMzOlwi6JKy5Y6/XCIsMTQxMDM0Olwi5rG+6KW/5Y6/XCIsMTQxMDgxOlwi5L6v6ams5biCXCIsMTQxMDgyOlwi6ZyN5bee5biCXCJ9LDE0MTEwMDp7MTQxMTAyOlwi56a755+z5Yy6XCIsMTQxMTIxOlwi5paH5rC05Y6/XCIsMTQxMTIyOlwi5Lqk5Z+O5Y6/XCIsMTQxMTIzOlwi5YW05Y6/XCIsMTQxMTI0Olwi5Li05Y6/XCIsMTQxMTI1Olwi5p+z5p6X5Y6/XCIsMTQxMTI2Olwi55+z5qW85Y6/XCIsMTQxMTI3Olwi5bKa5Y6/XCIsMTQxMTI4Olwi5pa55bGx5Y6/XCIsMTQxMTI5Olwi5Lit6Ziz5Y6/XCIsMTQxMTMwOlwi5Lqk5Y+j5Y6/XCIsMTQxMTgxOlwi5a2d5LmJ5biCXCIsMTQxMTgyOlwi5rG+6Ziz5biCXCJ9LDE1MDAwMDp7MTUwMTAwOlwi5ZG85ZKM5rWp54m55biCXCIsMTUwMjAwOlwi5YyF5aS05biCXCIsMTUwMzAwOlwi5LmM5rW35biCXCIsMTUwNDAwOlwi6LWk5bOw5biCXCIsMTUwNTAwOlwi6YCa6L695biCXCIsMTUwNjAwOlwi6YSC5bCU5aSa5pav5biCXCIsMTUwNzAwOlwi5ZG85Lym6LSd5bCU5biCXCIsMTUwODAwOlwi5be05b2m5reW5bCU5biCXCIsMTUwOTAwOlwi5LmM5YWw5a+f5biD5biCXCIsMTUyMjAwOlwi5YW05a6J55ufXCIsMTUyNTAwOlwi6ZSh5p6X6YOt5YuS55ufXCIsMTUyOTAwOlwi6Zi/5ouJ5ZaE55ufXCJ9LDE1MDEwMDp7MTUwMTAyOlwi5paw5Z+O5Yy6XCIsMTUwMTAzOlwi5Zue5rCR5Yy6XCIsMTUwMTA0Olwi546J5rOJ5Yy6XCIsMTUwMTA1Olwi6LWb572V5Yy6XCIsMTUwMTIxOlwi5Zyf6buY54m55bem5peXXCIsMTUwMTIyOlwi5omY5YWL5omY5Y6/XCIsMTUwMTIzOlwi5ZKM5p6X5qC85bCU5Y6/XCIsMTUwMTI0Olwi5riF5rC05rKz5Y6/XCIsMTUwMTI1Olwi5q2m5bed5Y6/XCJ9LDE1MDIwMDp7MTUwMjAyOlwi5Lic5rKz5Yy6XCIsMTUwMjAzOlwi5piG6YO95LuR5Yy6XCIsMTUwMjA0Olwi6Z2S5bGx5Yy6XCIsMTUwMjA1Olwi55+z5ouQ5Yy6XCIsMTUwMjA2Olwi55m95LqR6YSC5Y2a55+/5Yy6XCIsMTUwMjA3Olwi5Lmd5Y6f5Yy6XCIsMTUwMjIxOlwi5Zyf6buY54m55Y+z5peXXCIsMTUwMjIyOlwi5Zu66Ziz5Y6/XCIsMTUwMjIzOlwi6L6+5bCU572V6IyC5piO5a6J6IGU5ZCI5peXXCJ9LDE1MDMwMDp7MTUwMzAyOlwi5rW35YuD5rm+5Yy6XCIsMTUwMzAzOlwi5rW35Y2X5Yy6XCIsMTUwMzA0Olwi5LmM6L6+5Yy6XCJ9LDE1MDQwMDp7MTUwNDAyOlwi57qi5bGx5Yy6XCIsMTUwNDAzOlwi5YWD5a6d5bGx5Yy6XCIsMTUwNDA0Olwi5p2+5bGx5Yy6XCIsMTUwNDIxOlwi6Zi/6bKB56eR5bCU5rKB5peXXCIsMTUwNDIyOlwi5be05p6X5bem5peXXCIsMTUwNDIzOlwi5be05p6X5Y+z5peXXCIsMTUwNDI0Olwi5p6X6KW/5Y6/XCIsMTUwNDI1Olwi5YWL5LuA5YWL6IW+5peXXCIsMTUwNDI2Olwi57+B54mb54m55peXXCIsMTUwNDI4Olwi5ZaA5ZaH5rKB5peXXCIsMTUwNDI5Olwi5a6B5Z+O5Y6/XCIsMTUwNDMwOlwi5pWW5rGJ5peXXCJ9LDE1MDUwMDp7MTUwNTAyOlwi56eR5bCU5rKB5Yy6XCIsMTUwNTIxOlwi56eR5bCU5rKB5bem57+85Lit5peXXCIsMTUwNTIyOlwi56eR5bCU5rKB5bem57+85ZCO5peXXCIsMTUwNTIzOlwi5byA6bKB5Y6/XCIsMTUwNTI0Olwi5bqT5Lym5peXXCIsMTUwNTI1Olwi5aWI5pu85peXXCIsMTUwNTI2Olwi5omO6bKB54m55peXXCIsMTUwNTgxOlwi6ZyN5p6X6YOt5YuS5biCXCJ9LDE1MDYwMDp7MTUwNjAyOlwi5Lic6IOc5Yy6XCIsMTUwNjAzOlwi5bq35be05LuA5Yy6XCIsMTUwNjIxOlwi6L6+5ouJ54m55peXXCIsMTUwNjIyOlwi5YeG5qC85bCU5peXXCIsMTUwNjIzOlwi6YSC5omY5YWL5YmN5peXXCIsMTUwNjI0Olwi6YSC5omY5YWL5peXXCIsMTUwNjI1Olwi5p2t6ZSm5peXXCIsMTUwNjI2Olwi5LmM5a6h5peXXCIsMTUwNjI3Olwi5LyK6YeR6ZyN5rSb5peXXCJ9LDE1MDcwMDp7MTUwNzAyOlwi5rW35ouJ5bCU5Yy6XCIsMTUwNzAzOlwi5omO6LWJ6K+65bCU5Yy6XCIsMTUwNzIxOlwi6Zi/6I2j5peXXCIsMTUwNzIyOlwi6I6r5Yqb6L6+55Om6L6+5pah5bCU5peP6Ieq5rK75peXXCIsMTUwNzIzOlwi6YSC5Lym5pil6Ieq5rK75peXXCIsMTUwNzI0Olwi6YSC5rip5YWL5peP6Ieq5rK75peXXCIsMTUwNzI1Olwi6ZmI5be05bCU6JmO5peXXCIsMTUwNzI2Olwi5paw5be05bCU6JmO5bem5peXXCIsMTUwNzI3Olwi5paw5be05bCU6JmO5Y+z5peXXCIsMTUwNzgxOlwi5ruh5rSy6YeM5biCXCIsMTUwNzgyOlwi54mZ5YWL55+z5biCXCIsMTUwNzgzOlwi5omO5YWw5bGv5biCXCIsMTUwNzg0Olwi6aKd5bCU5Y+k57qz5biCXCIsMTUwNzg1Olwi5qC55rKz5biCXCJ9LDE1MDgwMDp7MTUwODAyOlwi5Li05rKz5Yy6XCIsMTUwODIxOlwi5LqU5Y6f5Y6/XCIsMTUwODIyOlwi56O05Y+j5Y6/XCIsMTUwODIzOlwi5LmM5ouJ54m55YmN5peXXCIsMTUwODI0Olwi5LmM5ouJ54m55Lit5peXXCIsMTUwODI1Olwi5LmM5ouJ54m55ZCO5peXXCIsMTUwODI2Olwi5p2t6ZSm5ZCO5peXXCJ9LDE1MDkwMDp7MTUwOTAyOlwi6ZuG5a6B5Yy6XCIsMTUwOTIxOlwi5Y2T6LWE5Y6/XCIsMTUwOTIyOlwi5YyW5b635Y6/XCIsMTUwOTIzOlwi5ZWG6YO95Y6/XCIsMTUwOTI0Olwi5YW05ZKM5Y6/XCIsMTUwOTI1Olwi5YeJ5Z+O5Y6/XCIsMTUwOTI2Olwi5a+f5ZOI5bCU5Y+z57+85YmN5peXXCIsMTUwOTI3Olwi5a+f5ZOI5bCU5Y+z57+85Lit5peXXCIsMTUwOTI4Olwi5a+f5ZOI5bCU5Y+z57+85ZCO5peXXCIsMTUwOTI5Olwi5Zub5a2Q546L5peXXCIsMTUwOTgxOlwi5Liw6ZWH5biCXCJ9LDE1MjIwMDp7MTUyMjAxOlwi5LmM5YWw5rWp54m55biCXCIsMTUyMjAyOlwi6Zi/5bCU5bGx5biCXCIsMTUyMjIxOlwi56eR5bCU5rKB5Y+z57+85YmN5peXXCIsMTUyMjIyOlwi56eR5bCU5rKB5Y+z57+85Lit5peXXCIsMTUyMjIzOlwi5omO6LWJ54m55peXXCIsMTUyMjI0Olwi56qB5rOJ5Y6/XCJ9LDE1MjUwMDp7MTUyNTAxOlwi5LqM6L+e5rWp54m55biCXCIsMTUyNTAyOlwi6ZSh5p6X5rWp54m55biCXCIsMTUyNTIyOlwi6Zi/5be05ZiO5peXXCIsMTUyNTIzOlwi6IuP5bC854m55bem5peXXCIsMTUyNTI0Olwi6IuP5bC854m55Y+z5peXXCIsMTUyNTI1Olwi5Lic5LmM54+g56mG5rKB5peXXCIsMTUyNTI2Olwi6KW/5LmM54+g56mG5rKB5peXXCIsMTUyNTI3Olwi5aSq5LuG5a+65peXXCIsMTUyNTI4Olwi6ZW26buE5peXXCIsMTUyNTI5Olwi5q2j6ZW255m95peXXCIsMTUyNTMwOlwi5q2j6JOd5peXXCIsMTUyNTMxOlwi5aSa5Lym5Y6/XCJ9LDE1MjkwMDp7MTUyOTIxOlwi6Zi/5ouJ5ZaE5bem5peXXCIsMTUyOTIyOlwi6Zi/5ouJ5ZaE5Y+z5peXXCIsMTUyOTIzOlwi6aKd5rWO57qz5peXXCJ9LDIxMDAwMDp7MjEwMTAwOlwi5rKI6Ziz5biCXCIsMjEwMjAwOlwi5aSn6L+e5biCXCIsMjEwMzAwOlwi6Z6N5bGx5biCXCIsMjEwNDAwOlwi5oqa6aG65biCXCIsMjEwNTAwOlwi5pys5rqq5biCXCIsMjEwNjAwOlwi5Li55Lic5biCXCIsMjEwNzAwOlwi6ZSm5bee5biCXCIsMjEwODAwOlwi6JCl5Y+j5biCXCIsMjEwOTAwOlwi6Zic5paw5biCXCIsMjExMDAwOlwi6L696Ziz5biCXCIsMjExMTAwOlwi55uY6ZSm5biCXCIsMjExMjAwOlwi6ZOB5bKt5biCXCIsMjExMzAwOlwi5pyd6Ziz5biCXCIsMjExNDAwOlwi6JGr6Iqm5bKb5biCXCJ9LDIxMDEwMDp7MjEwMTAyOlwi5ZKM5bmz5Yy6XCIsMjEwMTAzOlwi5rKI5rKz5Yy6XCIsMjEwMTA0Olwi5aSn5Lic5Yy6XCIsMjEwMTA1Olwi55qH5aeR5Yy6XCIsMjEwMTA2Olwi6ZOB6KW/5Yy6XCIsMjEwMTExOlwi6IuP5a625bGv5Yy6XCIsMjEwMTEyOlwi5rWR5Y2X5Yy6XCIsMjEwMTEzOlwi5rKI5YyX5paw5Yy6XCIsMjEwMTE0Olwi5LqO5rSq5Yy6XCIsMjEwMTE1Olwi6L695Lit5Yy6XCIsMjEwMTIzOlwi5bq35bmz5Y6/XCIsMjEwMTI0Olwi5rOV5bqT5Y6/XCIsMjEwMTgxOlwi5paw5rCR5biCXCJ9LDIxMDIwMDp7MjEwMjAyOlwi5Lit5bGx5Yy6XCIsMjEwMjAzOlwi6KW/5bKX5Yy6XCIsMjEwMjA0Olwi5rKZ5rKz5Y+j5Yy6XCIsMjEwMjExOlwi55SY5LqV5a2Q5Yy6XCIsMjEwMjEyOlwi5peF6aG65Y+j5Yy6XCIsMjEwMjEzOlwi6YeR5bee5Yy6XCIsMjEwMjE0Olwi5pmu5YWw5bqX5Yy6XCIsMjEwMjI0Olwi6ZW/5rW35Y6/XCIsMjEwMjgxOlwi55Om5oi/5bqX5biCXCIsMjEwMjgzOlwi5bqE5rKz5biCXCJ9LDIxMDMwMDp7MjEwMzAyOlwi6ZOB5Lic5Yy6XCIsMjEwMzAzOlwi6ZOB6KW/5Yy6XCIsMjEwMzA0Olwi56uL5bGx5Yy6XCIsMjEwMzExOlwi5Y2D5bGx5Yy6XCIsMjEwMzIxOlwi5Y+w5a6J5Y6/XCIsMjEwMzIzOlwi5bKr5bKp5ruh5peP6Ieq5rK75Y6/XCIsMjEwMzgxOlwi5rW35Z+O5biCXCJ9LDIxMDQwMDp7MjEwNDAyOlwi5paw5oqa5Yy6XCIsMjEwNDAzOlwi5Lic5rSy5Yy6XCIsMjEwNDA0Olwi5pyb6Iqx5Yy6XCIsMjEwNDExOlwi6aG65Z+O5Yy6XCIsMjEwNDIxOlwi5oqa6aG65Y6/XCIsMjEwNDIyOlwi5paw5a6+5ruh5peP6Ieq5rK75Y6/XCIsMjEwNDIzOlwi5riF5Y6f5ruh5peP6Ieq5rK75Y6/XCJ9LDIxMDUwMDp7MjEwNTAyOlwi5bmz5bGx5Yy6XCIsMjEwNTAzOlwi5rqq5rmW5Yy6XCIsMjEwNTA0Olwi5piO5bGx5Yy6XCIsMjEwNTA1Olwi5Y2X6Iqs5Yy6XCIsMjEwNTIxOlwi5pys5rqq5ruh5peP6Ieq5rK75Y6/XCIsMjEwNTIyOlwi5qGT5LuB5ruh5peP6Ieq5rK75Y6/XCJ9LDIxMDYwMDp7MjEwNjAyOlwi5YWD5a6d5Yy6XCIsMjEwNjAzOlwi5oyv5YW05Yy6XCIsMjEwNjA0Olwi5oyv5a6J5Yy6XCIsMjEwNjI0Olwi5a6955S45ruh5peP6Ieq5rK75Y6/XCIsMjEwNjgxOlwi5Lic5riv5biCXCIsMjEwNjgyOlwi5Yek5Z+O5biCXCJ9LDIxMDcwMDp7MjEwNzAyOlwi5Y+k5aGU5Yy6XCIsMjEwNzAzOlwi5YeM5rKz5Yy6XCIsMjEwNzExOlwi5aSq5ZKM5Yy6XCIsMjEwNzI2Olwi6buR5bGx5Y6/XCIsMjEwNzI3Olwi5LmJ5Y6/XCIsMjEwNzgxOlwi5YeM5rW35biCXCIsMjEwNzgyOlwi5YyX6ZWH5biCXCJ9LDIxMDgwMDp7MjEwODAyOlwi56uZ5YmN5Yy6XCIsMjEwODAzOlwi6KW/5biC5Yy6XCIsMjEwODA0Olwi6bKF6bG85ZyI5Yy6XCIsMjEwODExOlwi6ICB6L655Yy6XCIsMjEwODgxOlwi55uW5bee5biCXCIsMjEwODgyOlwi5aSn55+z5qGl5biCXCJ9LDIxMDkwMDp7MjEwOTAyOlwi5rW35bee5Yy6XCIsMjEwOTAzOlwi5paw6YKx5Yy6XCIsMjEwOTA0Olwi5aSq5bmz5Yy6XCIsMjEwOTA1Olwi5riF5rKz6Zeo5Yy6XCIsMjEwOTExOlwi57uG5rKz5Yy6XCIsMjEwOTIxOlwi6Zic5paw6JKZ5Y+k5peP6Ieq5rK75Y6/XCIsMjEwOTIyOlwi5b2w5q2m5Y6/XCJ9LDIxMTAwMDp7MjExMDAyOlwi55m95aGU5Yy6XCIsMjExMDAzOlwi5paH5Zyj5Yy6XCIsMjExMDA0Olwi5a6P5Lyf5Yy6XCIsMjExMDA1Olwi5byT6ZW/5bKt5Yy6XCIsMjExMDExOlwi5aSq5a2Q5rKz5Yy6XCIsMjExMDIxOlwi6L696Ziz5Y6/XCIsMjExMDgxOlwi54Gv5aGU5biCXCJ9LDIxMTEwMDp7MjExMTAyOlwi5Y+M5Y+w5a2Q5Yy6XCIsMjExMTAzOlwi5YW06ZqG5Y+w5Yy6XCIsMjExMTA0Olwi5aSn5rS85Yy6XCIsMjExMTIyOlwi55uY5bGx5Y6/XCJ9LDIxMTIwMDp7MjExMjAyOlwi6ZO25bee5Yy6XCIsMjExMjA0Olwi5riF5rKz5Yy6XCIsMjExMjIxOlwi6ZOB5bKt5Y6/XCIsMjExMjIzOlwi6KW/5Liw5Y6/XCIsMjExMjI0Olwi5piM5Zu+5Y6/XCIsMjExMjgxOlwi6LCD5YW15bGx5biCXCIsMjExMjgyOlwi5byA5Y6f5biCXCJ9LDIxMTMwMDp7MjExMzAyOlwi5Y+M5aGU5Yy6XCIsMjExMzAzOlwi6b6Z5Z+O5Yy6XCIsMjExMzIxOlwi5pyd6Ziz5Y6/XCIsMjExMzIyOlwi5bu65bmz5Y6/XCIsMjExMzI0Olwi5ZaA5ZaH5rKB5bem57+86JKZ5Y+k5peP6Ieq5rK75Y6/XCIsMjExMzgxOlwi5YyX56Wo5biCXCIsMjExMzgyOlwi5YeM5rqQ5biCXCJ9LDIxMTQwMDp7MjExNDAyOlwi6L+e5bGx5Yy6XCIsMjExNDAzOlwi6b6Z5riv5Yy6XCIsMjExNDA0Olwi5Y2X56Wo5Yy6XCIsMjExNDIxOlwi57ul5Lit5Y6/XCIsMjExNDIyOlwi5bu65piM5Y6/XCIsMjExNDgxOlwi5YW05Z+O5biCXCJ9LDIyMDAwMDp7MjIwMTAwOlwi6ZW/5pil5biCXCIsMjIwMjAwOlwi5ZCJ5p6X5biCXCIsMjIwMzAwOlwi5Zub5bmz5biCXCIsMjIwNDAwOlwi6L695rqQ5biCXCIsMjIwNTAwOlwi6YCa5YyW5biCXCIsMjIwNjAwOlwi55m95bGx5biCXCIsMjIwNzAwOlwi5p2+5Y6f5biCXCIsMjIwODAwOlwi55m95Z+O5biCXCIsMjIyNDAwOlwi5bu26L655pyd6bKc5peP6Ieq5rK75beeXCJ9LDIyMDEwMDp7MjIwMTAyOlwi5Y2X5YWz5Yy6XCIsMjIwMTAzOlwi5a695Z+O5Yy6XCIsMjIwMTA0Olwi5pyd6Ziz5Yy6XCIsMjIwMTA1Olwi5LqM6YGT5Yy6XCIsMjIwMTA2Olwi57u/5Zut5Yy6XCIsMjIwMTEyOlwi5Y+M6Ziz5Yy6XCIsMjIwMTEzOlwi5Lmd5Y+w5Yy6XCIsMjIwMTIyOlwi5Yac5a6J5Y6/XCIsMjIwMTgyOlwi5qaG5qCR5biCXCIsMjIwMTgzOlwi5b635oOg5biCXCJ9LDIyMDIwMDp7MjIwMjAyOlwi5piM6YKR5Yy6XCIsMjIwMjAzOlwi6b6Z5r2t5Yy6XCIsMjIwMjA0Olwi6Ii56JCl5Yy6XCIsMjIwMjExOlwi5Liw5ruh5Yy6XCIsMjIwMjIxOlwi5rC45ZCJ5Y6/XCIsMjIwMjgxOlwi6Juf5rKz5biCXCIsMjIwMjgyOlwi5qGm55S45biCXCIsMjIwMjgzOlwi6IiS5YWw5biCXCIsMjIwMjg0Olwi56OQ55+z5biCXCJ9LDIyMDMwMDp7MjIwMzAyOlwi6ZOB6KW/5Yy6XCIsMjIwMzAzOlwi6ZOB5Lic5Yy6XCIsMjIwMzIyOlwi5qKo5qCR5Y6/XCIsMjIwMzIzOlwi5LyK6YCa5ruh5peP6Ieq5rK75Y6/XCIsMjIwMzgxOlwi5YWs5Li75bKt5biCXCIsMjIwMzgyOlwi5Y+M6L695biCXCJ9LDIyMDQwMDp7MjIwNDAyOlwi6b6Z5bGx5Yy6XCIsMjIwNDAzOlwi6KW/5a6J5Yy6XCIsMjIwNDIxOlwi5Lic5Liw5Y6/XCIsMjIwNDIyOlwi5Lic6L695Y6/XCJ9LDIyMDUwMDp7MjIwNTAyOlwi5Lic5piM5Yy6XCIsMjIwNTAzOlwi5LqM6YGT5rGf5Yy6XCIsMjIwNTIxOlwi6YCa5YyW5Y6/XCIsMjIwNTIzOlwi6L6J5Y2X5Y6/XCIsMjIwNTI0Olwi5p+z5rKz5Y6/XCIsMjIwNTgxOlwi5qKF5rKz5Y+j5biCXCIsMjIwNTgyOlwi6ZuG5a6J5biCXCJ9LDIyMDYwMDp7MjIwNjAyOlwi5rWR5rGf5Yy6XCIsMjIwNjA1Olwi5rGf5rqQ5Yy6XCIsMjIwNjIxOlwi5oqa5p2+5Y6/XCIsMjIwNjIyOlwi6Z2W5a6H5Y6/XCIsMjIwNjIzOlwi6ZW/55m95pyd6bKc5peP6Ieq5rK75Y6/XCIsMjIwNjgxOlwi5Li05rGf5biCXCJ9LDIyMDcwMDp7MjIwNzAyOlwi5a6B5rGf5Yy6XCIsMjIwNzIxOlwi5YmN6YOt5bCU572X5pav6JKZ5Y+k5peP6Ieq5rK75Y6/XCIsMjIwNzIyOlwi6ZW/5bKt5Y6/XCIsMjIwNzIzOlwi5Lm+5a6J5Y6/XCIsMjIwNzgxOlwi5om25L2Z5biCXCJ9LDIyMDgwMDp7MjIwODAyOlwi5rSu5YyX5Yy6XCIsMjIwODIxOlwi6ZWH6LWJ5Y6/XCIsMjIwODIyOlwi6YCa5qaG5Y6/XCIsMjIwODgxOlwi5rSu5Y2X5biCXCIsMjIwODgyOlwi5aSn5a6J5biCXCJ9LDIyMjQwMDp7MjIyNDAxOlwi5bu25ZCJ5biCXCIsMjIyNDAyOlwi5Zu+5Lus5biCXCIsMjIyNDAzOlwi5pWm5YyW5biCXCIsMjIyNDA0Olwi54+y5pil5biCXCIsMjIyNDA1Olwi6b6Z5LqV5biCXCIsMjIyNDA2Olwi5ZKM6b6Z5biCXCIsMjIyNDI0Olwi5rGq5riF5Y6/XCIsMjIyNDI2Olwi5a6J5Zu+5Y6/XCJ9LDIzMDAwMDp7MjMwMTAwOlwi5ZOI5bCU5ruo5biCXCIsMjMwMjAwOlwi6b2Q6b2Q5ZOI5bCU5biCXCIsMjMwMzAwOlwi6bih6KW/5biCXCIsMjMwNDAwOlwi6bmk5bKX5biCXCIsMjMwNTAwOlwi5Y+M6bit5bGx5biCXCIsMjMwNjAwOlwi5aSn5bqG5biCXCIsMjMwNzAwOlwi5LyK5pil5biCXCIsMjMwODAwOlwi5L2z5pyo5pav5biCXCIsMjMwOTAwOlwi5LiD5Y+w5rKz5biCXCIsMjMxMDAwOlwi54mh5Li55rGf5biCXCIsMjMxMTAwOlwi6buR5rKz5biCXCIsMjMxMjAwOlwi57ul5YyW5biCXCIsMjMyNzAwOlwi5aSn5YW05a6J5bKt5Zyw5Yy6XCJ9LDIzMDEwMDp7MjMwMTAyOlwi6YGT6YeM5Yy6XCIsMjMwMTAzOlwi5Y2X5bKX5Yy6XCIsMjMwMTA0Olwi6YGT5aSW5Yy6XCIsMjMwMTA4Olwi5bmz5oi/5Yy6XCIsMjMwMTA5Olwi5p2+5YyX5Yy6XCIsMjMwMTEwOlwi6aaZ5Z2K5Yy6XCIsMjMwMTExOlwi5ZG85YWw5Yy6XCIsMjMwMTEyOlwi6Zi/5Z+O5Yy6XCIsMjMwMTEzOlwi5Y+M5Z+O5Yy6XCIsMjMwMTIzOlwi5L6d5YWw5Y6/XCIsMjMwMTI0Olwi5pa55q2j5Y6/XCIsMjMwMTI1Olwi5a6+5Y6/XCIsMjMwMTI2Olwi5be05b2m5Y6/XCIsMjMwMTI3Olwi5pyo5YWw5Y6/XCIsMjMwMTI4Olwi6YCa5rKz5Y6/XCIsMjMwMTI5Olwi5bu25a+/5Y6/XCIsMjMwMTgzOlwi5bCa5b+X5biCXCIsMjMwMTg0Olwi5LqU5bi45biCXCJ9LDIzMDIwMDp7MjMwMjAyOlwi6b6Z5rKZ5Yy6XCIsMjMwMjAzOlwi5bu65Y2O5Yy6XCIsMjMwMjA0Olwi6ZOB6ZSL5Yy6XCIsMjMwMjA1Olwi5piC5piC5rqq5Yy6XCIsMjMwMjA2Olwi5a+M5ouJ5bCU5Z+65Yy6XCIsMjMwMjA3Olwi56K+5a2Q5bGx5Yy6XCIsMjMwMjA4Olwi5qKF6YeM5pav6L6+5pah5bCU5peP5Yy6XCIsMjMwMjIxOlwi6b6Z5rGf5Y6/XCIsMjMwMjIzOlwi5L6d5a6J5Y6/XCIsMjMwMjI0Olwi5rOw5p2l5Y6/XCIsMjMwMjI1Olwi55SY5Y2X5Y6/XCIsMjMwMjI3Olwi5a+M6KOV5Y6/XCIsMjMwMjI5Olwi5YWL5bGx5Y6/XCIsMjMwMjMwOlwi5YWL5Lic5Y6/XCIsMjMwMjMxOlwi5ouc5rOJ5Y6/XCIsMjMwMjgxOlwi6K635rKz5biCXCJ9LDIzMDMwMDp7MjMwMzAyOlwi6bih5Yag5Yy6XCIsMjMwMzAzOlwi5oGS5bGx5Yy6XCIsMjMwMzA0Olwi5ru06YGT5Yy6XCIsMjMwMzA1Olwi5qKo5qCR5Yy6XCIsMjMwMzA2Olwi5Z+O5a2Q5rKz5Yy6XCIsMjMwMzA3Olwi6bq75bGx5Yy6XCIsMjMwMzIxOlwi6bih5Lic5Y6/XCIsMjMwMzgxOlwi6JmO5p6X5biCXCIsMjMwMzgyOlwi5a+G5bGx5biCXCJ9LDIzMDQwMDp7MjMwNDAyOlwi5ZCR6Ziz5Yy6XCIsMjMwNDAzOlwi5bel5Yac5Yy6XCIsMjMwNDA0Olwi5Y2X5bGx5Yy6XCIsMjMwNDA1Olwi5YW05a6J5Yy6XCIsMjMwNDA2Olwi5Lic5bGx5Yy6XCIsMjMwNDA3Olwi5YW05bGx5Yy6XCIsMjMwNDIxOlwi6JCd5YyX5Y6/XCIsMjMwNDIyOlwi57ul5ruo5Y6/XCJ9LDIzMDUwMDp7MjMwNTAyOlwi5bCW5bGx5Yy6XCIsMjMwNTAzOlwi5bKt5Lic5Yy6XCIsMjMwNTA1Olwi5Zub5pa55Y+w5Yy6XCIsMjMwNTA2Olwi5a6d5bGx5Yy6XCIsMjMwNTIxOlwi6ZuG6LSk5Y6/XCIsMjMwNTIyOlwi5Y+L6LCK5Y6/XCIsMjMwNTIzOlwi5a6d5riF5Y6/XCIsMjMwNTI0Olwi6aW25rKz5Y6/XCJ9LDIzMDYwMDp7MjMwNjAyOlwi6JCo5bCU5Zu+5Yy6XCIsMjMwNjAzOlwi6b6Z5Yek5Yy6XCIsMjMwNjA0Olwi6K6p6IOh6Lev5Yy6XCIsMjMwNjA1Olwi57qi5bKX5Yy6XCIsMjMwNjA2Olwi5aSn5ZCM5Yy6XCIsMjMwNjIxOlwi6IKH5bee5Y6/XCIsMjMwNjIyOlwi6IKH5rqQ5Y6/XCIsMjMwNjIzOlwi5p6X55S45Y6/XCIsMjMwNjI0Olwi5p2c5bCU5Lyv54m56JKZ5Y+k5peP6Ieq5rK75Y6/XCJ9LDIzMDcwMDp7MjMwNzAyOlwi5LyK5pil5Yy6XCIsMjMwNzAzOlwi5Y2X5bKU5Yy6XCIsMjMwNzA0Olwi5Y+L5aW95Yy6XCIsMjMwNzA1Olwi6KW/5p6X5Yy6XCIsMjMwNzA2Olwi57+g5bOm5Yy6XCIsMjMwNzA3Olwi5paw6Z2S5Yy6XCIsMjMwNzA4Olwi576O5rqq5Yy6XCIsMjMwNzA5Olwi6YeR5bGx5bGv5Yy6XCIsMjMwNzEwOlwi5LqU6JCl5Yy6XCIsMjMwNzExOlwi5LmM6ams5rKz5Yy6XCIsMjMwNzEyOlwi5rGk5pe65rKz5Yy6XCIsMjMwNzEzOlwi5bim5bKt5Yy6XCIsMjMwNzE0Olwi5LmM5LyK5bKt5Yy6XCIsMjMwNzE1Olwi57qi5pif5Yy6XCIsMjMwNzE2Olwi5LiK55SY5bKt5Yy6XCIsMjMwNzIyOlwi5ZiJ6I2r5Y6/XCIsMjMwNzgxOlwi6ZOB5Yqb5biCXCJ9LDIzMDgwMDp7MjMwODAzOlwi5ZCR6Ziz5Yy6XCIsMjMwODA0Olwi5YmN6L+b5Yy6XCIsMjMwODA1Olwi5Lic6aOO5Yy6XCIsMjMwODExOlwi6YOK5Yy6XCIsMjMwODIyOlwi5qGm5Y2X5Y6/XCIsMjMwODI2Olwi5qGm5bed5Y6/XCIsMjMwODI4Olwi5rGk5Y6f5Y6/XCIsMjMwODgxOlwi5ZCM5rGf5biCXCIsMjMwODgyOlwi5a+M6ZSm5biCXCIsMjMwODgzOlwi5oqa6L+c5biCXCJ9LDIzMDkwMDp7MjMwOTAyOlwi5paw5YW05Yy6XCIsMjMwOTAzOlwi5qGD5bGx5Yy6XCIsMjMwOTA0Olwi6IyE5a2Q5rKz5Yy6XCIsMjMwOTIxOlwi5YuD5Yip5Y6/XCJ9LDIzMTAwMDp7MjMxMDAyOlwi5Lic5a6J5Yy6XCIsMjMxMDAzOlwi6Ziz5piO5Yy6XCIsMjMxMDA0Olwi54ix5rCR5Yy6XCIsMjMxMDA1Olwi6KW/5a6J5Yy6XCIsMjMxMDI1Olwi5p6X5Y+j5Y6/XCIsMjMxMDgxOlwi57ul6Iqs5rKz5biCXCIsMjMxMDgzOlwi5rW35p6X5biCXCIsMjMxMDg0Olwi5a6B5a6J5biCXCIsMjMxMDg1Olwi56mG5qOx5biCXCIsMjMxMDg2Olwi5Lic5a6B5biCXCJ9LDIzMTEwMDp7MjMxMTAyOlwi54ix6L6J5Yy6XCIsMjMxMTIxOlwi5aup5rGf5Y6/XCIsMjMxMTIzOlwi6YCK5YWL5Y6/XCIsMjMxMTI0Olwi5a2Z5ZC05Y6/XCIsMjMxMTgxOlwi5YyX5a6J5biCXCIsMjMxMTgyOlwi5LqU5aSn6L+e5rGg5biCXCJ9LDIzMTIwMDp7MjMxMjAyOlwi5YyX5p6X5Yy6XCIsMjMxMjIxOlwi5pyb5aWO5Y6/XCIsMjMxMjIyOlwi5YWw6KW/5Y6/XCIsMjMxMjIzOlwi6Z2S5YaI5Y6/XCIsMjMxMjI0Olwi5bqG5a6J5Y6/XCIsMjMxMjI1Olwi5piO5rC05Y6/XCIsMjMxMjI2Olwi57ul5qOx5Y6/XCIsMjMxMjgxOlwi5a6J6L6+5biCXCIsMjMxMjgyOlwi6IKH5Lic5biCXCIsMjMxMjgzOlwi5rW35Lym5biCXCJ9LDIzMjcwMDp7MjMyNzIxOlwi5ZG8546b5Y6/XCIsMjMyNzIyOlwi5aGU5rKz5Y6/XCIsMjMyNzIzOlwi5ryg5rKz5Y6/XCJ9LDMxMDAwMDp7MzEwMTAwOlwi5biC6L6W5Yy6XCJ9LDMxMDEwMDp7MzEwMTAxOlwi6buE5rWm5Yy6XCIsMzEwMTA0Olwi5b6Q5rGH5Yy6XCIsMzEwMTA1Olwi6ZW/5a6B5Yy6XCIsMzEwMTA2Olwi6Z2Z5a6J5Yy6XCIsMzEwMTA3Olwi5pmu6ZmA5Yy6XCIsMzEwMTA5Olwi6Jm55Y+j5Yy6XCIsMzEwMTEwOlwi5p2o5rWm5Yy6XCIsMzEwMTEyOlwi6Ze16KGM5Yy6XCIsMzEwMTEzOlwi5a6d5bGx5Yy6XCIsMzEwMTE0Olwi5ZiJ5a6a5Yy6XCIsMzEwMTE1Olwi5rWm5Lic5paw5Yy6XCIsMzEwMTE2Olwi6YeR5bGx5Yy6XCIsMzEwMTE3Olwi5p2+5rGf5Yy6XCIsMzEwMTE4Olwi6Z2S5rWm5Yy6XCIsMzEwMTIwOlwi5aWJ6LSk5Yy6XCIsMzEwMTUxOlwi5bSH5piO5Yy6XCJ9LDMyMDAwMDp7MzIwMTAwOlwi5Y2X5Lqs5biCXCIsMzIwMjAwOlwi5peg6ZSh5biCXCIsMzIwMzAwOlwi5b6Q5bee5biCXCIsMzIwNDAwOlwi5bi45bee5biCXCIsMzIwNTAwOlwi6IuP5bee5biCXCIsMzIwNjAwOlwi5Y2X6YCa5biCXCIsMzIwNzAwOlwi6L+e5LqR5riv5biCXCIsMzIwODAwOlwi5reu5a6J5biCXCIsMzIwOTAwOlwi55uQ5Z+O5biCXCIsMzIxMDAwOlwi5oms5bee5biCXCIsMzIxMTAwOlwi6ZWH5rGf5biCXCIsMzIxMjAwOlwi5rOw5bee5biCXCIsMzIxMzAwOlwi5a6/6L+B5biCXCJ9LDMyMDEwMDp7MzIwMTAyOlwi546E5q2m5Yy6XCIsMzIwMTA0Olwi56em5reu5Yy6XCIsMzIwMTA1Olwi5bu66YK65Yy6XCIsMzIwMTA2Olwi6byT5qW85Yy6XCIsMzIwMTExOlwi5rWm5Y+j5Yy6XCIsMzIwMTEzOlwi5qCW6Zye5Yy6XCIsMzIwMTE0Olwi6Zuo6Iqx5Y+w5Yy6XCIsMzIwMTE1Olwi5rGf5a6B5Yy6XCIsMzIwMTE2Olwi5YWt5ZCI5Yy6XCIsMzIwMTE3Olwi5rqn5rC05Yy6XCIsMzIwMTE4Olwi6auY5rez5Yy6XCJ9LDMyMDIwMDp7MzIwMjA1Olwi6ZSh5bGx5Yy6XCIsMzIwMjA2Olwi5oOg5bGx5Yy6XCIsMzIwMjExOlwi5ruo5rmW5Yy6XCIsMzIwMjEzOlwi5qKB5rqq5Yy6XCIsMzIwMjE0Olwi5paw5ZC05Yy6XCIsMzIwMjgxOlwi5rGf6Zi05biCXCIsMzIwMjgyOlwi5a6c5YW05biCXCJ9LDMyMDMwMDp7MzIwMzAyOlwi6byT5qW85Yy6XCIsMzIwMzAzOlwi5LqR6b6Z5Yy6XCIsMzIwMzA1Olwi6LS+5rGq5Yy6XCIsMzIwMzExOlwi5rOJ5bGx5Yy6XCIsMzIwMzEyOlwi6ZOc5bGx5Yy6XCIsMzIwMzIxOlwi5Liw5Y6/XCIsMzIwMzIyOlwi5rKb5Y6/XCIsMzIwMzI0Olwi552i5a6B5Y6/XCIsMzIwMzgxOlwi5paw5rKC5biCXCIsMzIwMzgyOlwi6YKz5bee5biCXCJ9LDMyMDQwMDp7MzIwNDAyOlwi5aSp5a6B5Yy6XCIsMzIwNDA0Olwi6ZKf5qW85Yy6XCIsMzIwNDExOlwi5paw5YyX5Yy6XCIsMzIwNDEyOlwi5q2m6L+b5Yy6XCIsMzIwNDEzOlwi6YeR5Z2b5Yy6XCIsMzIwNDgxOlwi5rqn6Ziz5biCXCJ9LDMyMDUwMDp7MzIwNTA1Olwi6JmO5LiY5Yy6XCIsMzIwNTA2Olwi5ZC05Lit5Yy6XCIsMzIwNTA3Olwi55u45Z+O5Yy6XCIsMzIwNTA4Olwi5aeR6IuP5Yy6XCIsMzIwNTA5Olwi5ZC05rGf5Yy6XCIsMzIwNTgxOlwi5bi454af5biCXCIsMzIwNTgyOlwi5byg5a625riv5biCXCIsMzIwNTgzOlwi5piG5bGx5biCXCIsMzIwNTg1Olwi5aSq5LuT5biCXCJ9LDMyMDYwMDp7MzIwNjAyOlwi5bSH5bed5Yy6XCIsMzIwNjExOlwi5riv6Ze45Yy6XCIsMzIwNjEyOlwi6YCa5bee5Yy6XCIsMzIwNjIxOlwi5rW35a6J5Y6/XCIsMzIwNjIzOlwi5aaC5Lic5Y6/XCIsMzIwNjgxOlwi5ZCv5Lic5biCXCIsMzIwNjgyOlwi5aaC55qL5biCXCIsMzIwNjg0Olwi5rW36Zeo5biCXCJ9LDMyMDcwMDp7MzIwNzAzOlwi6L+e5LqR5Yy6XCIsMzIwNzA2Olwi5rW35bee5Yy6XCIsMzIwNzA3Olwi6LWj5qaG5Yy6XCIsMzIwNzIyOlwi5Lic5rW35Y6/XCIsMzIwNzIzOlwi54GM5LqR5Y6/XCIsMzIwNzI0Olwi54GM5Y2X5Y6/XCJ9LDMyMDgwMDp7MzIwODAzOlwi5reu5a6J5Yy6XCIsMzIwODA0Olwi5reu6Zi05Yy6XCIsMzIwODEyOlwi5riF5rGf5rWm5Yy6XCIsMzIwODEzOlwi5rSq5rO95Yy6XCIsMzIwODI2Olwi5raf5rC05Y6/XCIsMzIwODMwOlwi55ux55yZ5Y6/XCIsMzIwODMxOlwi6YeR5rmW5Y6/XCJ9LDMyMDkwMDp7MzIwOTAyOlwi5Lqt5rmW5Yy6XCIsMzIwOTAzOlwi55uQ6YO95Yy6XCIsMzIwOTA0Olwi5aSn5Liw5Yy6XCIsMzIwOTIxOlwi5ZON5rC05Y6/XCIsMzIwOTIyOlwi5ruo5rW35Y6/XCIsMzIwOTIzOlwi6Zic5a6B5Y6/XCIsMzIwOTI0Olwi5bCE6Ziz5Y6/XCIsMzIwOTI1Olwi5bu65rmW5Y6/XCIsMzIwOTgxOlwi5Lic5Y+w5biCXCJ9LDMyMTAwMDp7MzIxMDAyOlwi5bm/6Zm15Yy6XCIsMzIxMDAzOlwi6YKX5rGf5Yy6XCIsMzIxMDEyOlwi5rGf6YO95Yy6XCIsMzIxMDIzOlwi5a6d5bqU5Y6/XCIsMzIxMDgxOlwi5Luq5b6B5biCXCIsMzIxMDg0Olwi6auY6YKu5biCXCJ9LDMyMTEwMDp7MzIxMTAyOlwi5Lqs5Y+j5Yy6XCIsMzIxMTExOlwi5ram5bee5Yy6XCIsMzIxMTEyOlwi5Li55b6S5Yy6XCIsMzIxMTgxOlwi5Li56Ziz5biCXCIsMzIxMTgyOlwi5oms5Lit5biCXCIsMzIxMTgzOlwi5Y+l5a655biCXCJ9LDMyMTIwMDp7MzIxMjAyOlwi5rW36Zm15Yy6XCIsMzIxMjAzOlwi6auY5riv5Yy6XCIsMzIxMjA0Olwi5aec5aCw5Yy6XCIsMzIxMjgxOlwi5YW05YyW5biCXCIsMzIxMjgyOlwi6Z2W5rGf5biCXCIsMzIxMjgzOlwi5rOw5YW05biCXCJ9LDMyMTMwMDp7MzIxMzAyOlwi5a6/5Z+O5Yy6XCIsMzIxMzExOlwi5a6/6LGr5Yy6XCIsMzIxMzIyOlwi5rKt6Ziz5Y6/XCIsMzIxMzIzOlwi5rOX6Ziz5Y6/XCIsMzIxMzI0Olwi5rOX5rSq5Y6/XCJ9LDMzMDAwMDp7MzMwMTAwOlwi5p2t5bee5biCXCIsMzMwMjAwOlwi5a6B5rOi5biCXCIsMzMwMzAwOlwi5rip5bee5biCXCIsMzMwNDAwOlwi5ZiJ5YW05biCXCIsMzMwNTAwOlwi5rmW5bee5biCXCIsMzMwNjAwOlwi57uN5YW05biCXCIsMzMwNzAwOlwi6YeR5Y2O5biCXCIsMzMwODAwOlwi6KGi5bee5biCXCIsMzMwOTAwOlwi6Iif5bGx5biCXCIsMzMxMDAwOlwi5Y+w5bee5biCXCIsMzMxMTAwOlwi5Li95rC05biCXCJ9LDMzMDEwMDp7MzMwMTAyOlwi5LiK5Z+O5Yy6XCIsMzMwMTAzOlwi5LiL5Z+O5Yy6XCIsMzMwMTA0Olwi5rGf5bmy5Yy6XCIsMzMwMTA1Olwi5oux5aKF5Yy6XCIsMzMwMTA2Olwi6KW/5rmW5Yy6XCIsMzMwMTA4Olwi5ruo5rGf5Yy6XCIsMzMwMTA5Olwi6JCn5bGx5Yy6XCIsMzMwMTEwOlwi5L2Z5p2t5Yy6XCIsMzMwMTExOlwi5a+M6Ziz5Yy6XCIsMzMwMTIyOlwi5qGQ5bqQ5Y6/XCIsMzMwMTI3Olwi5rez5a6J5Y6/XCIsMzMwMTgyOlwi5bu65b635biCXCIsMzMwMTg1Olwi5Li05a6J5biCXCJ9LDMzMDIwMDp7MzMwMjAzOlwi5rW35puZ5Yy6XCIsMzMwMjA0Olwi5rGf5Lic5Yy6XCIsMzMwMjA1Olwi5rGf5YyX5Yy6XCIsMzMwMjA2Olwi5YyX5LuR5Yy6XCIsMzMwMjExOlwi6ZWH5rW35Yy6XCIsMzMwMjEyOlwi6YSe5bee5Yy6XCIsMzMwMjI1Olwi6LGh5bGx5Y6/XCIsMzMwMjI2Olwi5a6B5rW35Y6/XCIsMzMwMjgxOlwi5L2Z5aea5biCXCIsMzMwMjgyOlwi5oWI5rqq5biCXCIsMzMwMjgzOlwi5aWJ5YyW5biCXCJ9LDMzMDMwMDp7MzMwMzAyOlwi6bm/5Z+O5Yy6XCIsMzMwMzAzOlwi6b6Z5rm+5Yy6XCIsMzMwMzA0Olwi55Ov5rW35Yy6XCIsMzMwMzA1Olwi5rSe5aS05Yy6XCIsMzMwMzI0Olwi5rC45ZiJ5Y6/XCIsMzMwMzI2Olwi5bmz6Ziz5Y6/XCIsMzMwMzI3Olwi6IuN5Y2X5Y6/XCIsMzMwMzI4Olwi5paH5oiQ5Y6/XCIsMzMwMzI5Olwi5rOw6aG65Y6/XCIsMzMwMzgxOlwi55Ge5a6J5biCXCIsMzMwMzgyOlwi5LmQ5riF5biCXCJ9LDMzMDQwMDp7MzMwNDAyOlwi5Y2X5rmW5Yy6XCIsMzMwNDExOlwi56eA5rSy5Yy6XCIsMzMwNDIxOlwi5ZiJ5ZaE5Y6/XCIsMzMwNDI0Olwi5rW355uQ5Y6/XCIsMzMwNDgxOlwi5rW35a6B5biCXCIsMzMwNDgyOlwi5bmz5rmW5biCXCIsMzMwNDgzOlwi5qGQ5Lmh5biCXCJ9LDMzMDUwMDp7MzMwNTAyOlwi5ZC05YW05Yy6XCIsMzMwNTAzOlwi5Y2X5rWU5Yy6XCIsMzMwNTIxOlwi5b635riF5Y6/XCIsMzMwNTIyOlwi6ZW/5YW05Y6/XCIsMzMwNTIzOlwi5a6J5ZCJ5Y6/XCJ9LDMzMDYwMDp7MzMwNjAyOlwi6LaK5Z+O5Yy6XCIsMzMwNjAzOlwi5p+v5qGl5Yy6XCIsMzMwNjA0Olwi5LiK6Jme5Yy6XCIsMzMwNjI0Olwi5paw5piM5Y6/XCIsMzMwNjgxOlwi6K+45pqo5biCXCIsMzMwNjgzOlwi5bWK5bee5biCXCJ9LDMzMDcwMDp7MzMwNzAyOlwi5am65Z+O5Yy6XCIsMzMwNzAzOlwi6YeR5Lic5Yy6XCIsMzMwNzIzOlwi5q2m5LmJ5Y6/XCIsMzMwNzI2Olwi5rWm5rGf5Y6/XCIsMzMwNzI3Olwi56OQ5a6J5Y6/XCIsMzMwNzgxOlwi5YWw5rqq5biCXCIsMzMwNzgyOlwi5LmJ5LmM5biCXCIsMzMwNzgzOlwi5Lic6Ziz5biCXCIsMzMwNzg0Olwi5rC45bq35biCXCJ9LDMzMDgwMDp7MzMwODAyOlwi5p+v5Z+O5Yy6XCIsMzMwODAzOlwi6KGi5rGf5Yy6XCIsMzMwODIyOlwi5bi45bGx5Y6/XCIsMzMwODI0Olwi5byA5YyW5Y6/XCIsMzMwODI1Olwi6b6Z5ri45Y6/XCIsMzMwODgxOlwi5rGf5bGx5biCXCJ9LDMzMDkwMDp7MzMwOTAyOlwi5a6a5rW35Yy6XCIsMzMwOTAzOlwi5pmu6ZmA5Yy6XCIsMzMwOTIxOlwi5bKx5bGx5Y6/XCIsMzMwOTIyOlwi5bWK5rOX5Y6/XCJ9LDMzMTAwMDp7MzMxMDAyOlwi5qSS5rGf5Yy6XCIsMzMxMDAzOlwi6buE5bKp5Yy6XCIsMzMxMDA0Olwi6Lev5qGl5Yy6XCIsMzMxMDIxOlwi546J546v5Y6/XCIsMzMxMDIyOlwi5LiJ6Zeo5Y6/XCIsMzMxMDIzOlwi5aSp5Y+w5Y6/XCIsMzMxMDI0Olwi5LuZ5bGF5Y6/XCIsMzMxMDgxOlwi5rip5bKt5biCXCIsMzMxMDgyOlwi5Li05rW35biCXCJ9LDMzMTEwMDp7MzMxMTAyOlwi6I6y6YO95Yy6XCIsMzMxMTIxOlwi6Z2S55Sw5Y6/XCIsMzMxMTIyOlwi57yZ5LqR5Y6/XCIsMzMxMTIzOlwi6YGC5piM5Y6/XCIsMzMxMTI0Olwi5p2+6Ziz5Y6/XCIsMzMxMTI1Olwi5LqR5ZKM5Y6/XCIsMzMxMTI2Olwi5bqG5YWD5Y6/XCIsMzMxMTI3Olwi5pmv5a6B55Wy5peP6Ieq5rK75Y6/XCIsMzMxMTgxOlwi6b6Z5rOJ5biCXCJ9LDM0MDAwMDp7MzQwMTAwOlwi5ZCI6IKl5biCXCIsMzQwMjAwOlwi6Iqc5rmW5biCXCIsMzQwMzAwOlwi6JqM5Z+g5biCXCIsMzQwNDAwOlwi5reu5Y2X5biCXCIsMzQwNTAwOlwi6ams6Z6N5bGx5biCXCIsMzQwNjAwOlwi5reu5YyX5biCXCIsMzQwNzAwOlwi6ZOc6Zm15biCXCIsMzQwODAwOlwi5a6J5bqG5biCXCIsMzQxMDAwOlwi6buE5bGx5biCXCIsMzQxMTAwOlwi5ruB5bee5biCXCIsMzQxMjAwOlwi6Zic6Ziz5biCXCIsMzQxMzAwOlwi5a6/5bee5biCXCIsMzQxNTAwOlwi5YWt5a6J5biCXCIsMzQxNjAwOlwi5Lqz5bee5biCXCIsMzQxNzAwOlwi5rGg5bee5biCXCIsMzQxODAwOlwi5a6j5Z+O5biCXCJ9LDM0MDEwMDp7MzQwMTAyOlwi55G25rW35Yy6XCIsMzQwMTAzOlwi5bqQ6Ziz5Yy6XCIsMzQwMTA0Olwi6JyA5bGx5Yy6XCIsMzQwMTExOlwi5YyF5rKz5Yy6XCIsMzQwMTIxOlwi6ZW/5Liw5Y6/XCIsMzQwMTIyOlwi6IKl5Lic5Y6/XCIsMzQwMTIzOlwi6IKl6KW/5Y6/XCIsMzQwMTI0Olwi5bqQ5rGf5Y6/XCIsMzQwMTgxOlwi5bei5rmW5biCXCJ9LDM0MDIwMDp7MzQwMjAyOlwi6ZWc5rmW5Yy6XCIsMzQwMjAzOlwi5byL5rGf5Yy6XCIsMzQwMjA3Olwi6big5rGf5Yy6XCIsMzQwMjA4Olwi5LiJ5bGx5Yy6XCIsMzQwMjIxOlwi6Iqc5rmW5Y6/XCIsMzQwMjIyOlwi57mB5piM5Y6/XCIsMzQwMjIzOlwi5Y2X6Zm15Y6/XCIsMzQwMjI1Olwi5peg5Li65Y6/XCJ9LDM0MDMwMDp7MzQwMzAyOlwi6b6Z5a2Q5rmW5Yy6XCIsMzQwMzAzOlwi6JqM5bGx5Yy6XCIsMzQwMzA0Olwi56a55Lya5Yy6XCIsMzQwMzExOlwi5reu5LiK5Yy6XCIsMzQwMzIxOlwi5oCA6L+c5Y6/XCIsMzQwMzIyOlwi5LqU5rKz5Y6/XCIsMzQwMzIzOlwi5Zu66ZWH5Y6/XCJ9LDM0MDQwMDp7MzQwNDAyOlwi5aSn6YCa5Yy6XCIsMzQwNDAzOlwi55Sw5a625bq15Yy6XCIsMzQwNDA0Olwi6LCi5a626ZuG5Yy6XCIsMzQwNDA1Olwi5YWr5YWs5bGx5Yy6XCIsMzQwNDA2Olwi5r2Y6ZuG5Yy6XCIsMzQwNDIxOlwi5Yek5Y+w5Y6/XCIsMzQwNDIyOlwi5a+/5Y6/XCJ9LDM0MDUwMDp7MzQwNTAzOlwi6Iqx5bGx5Yy6XCIsMzQwNTA0Olwi6Zuo5bGx5Yy6XCIsMzQwNTA2Olwi5Y2a5pyb5Yy6XCIsMzQwNTIxOlwi5b2T5raC5Y6/XCIsMzQwNTIyOlwi5ZCr5bGx5Y6/XCIsMzQwNTIzOlwi5ZKM5Y6/XCJ9LDM0MDYwMDp7MzQwNjAyOlwi5p2c6ZuG5Yy6XCIsMzQwNjAzOlwi55u45bGx5Yy6XCIsMzQwNjA0Olwi54OI5bGx5Yy6XCIsMzQwNjIxOlwi5r+J5rqq5Y6/XCJ9LDM0MDcwMDp7MzQwNzA1Olwi6ZOc5a6Y5Yy6XCIsMzQwNzA2Olwi5LmJ5a6J5Yy6XCIsMzQwNzExOlwi6YOK5Yy6XCIsMzQwNzIyOlwi5p6e6Ziz5Y6/XCJ9LDM0MDgwMDp7MzQwODAyOlwi6L+O5rGf5Yy6XCIsMzQwODAzOlwi5aSn6KeC5Yy6XCIsMzQwODExOlwi5a6c56eA5Yy6XCIsMzQwODIyOlwi5oCA5a6B5Y6/XCIsMzQwODI0Olwi5r2c5bGx5Y6/XCIsMzQwODI1Olwi5aSq5rmW5Y6/XCIsMzQwODI2Olwi5a6/5p2+5Y6/XCIsMzQwODI3Olwi5pyb5rGf5Y6/XCIsMzQwODI4Olwi5bKz6KW/5Y6/XCIsMzQwODgxOlwi5qGQ5Z+O5biCXCJ9LDM0MTAwMDp7MzQxMDAyOlwi5bGv5rqq5Yy6XCIsMzQxMDAzOlwi6buE5bGx5Yy6XCIsMzQxMDA0Olwi5b695bee5Yy6XCIsMzQxMDIxOlwi5q2Z5Y6/XCIsMzQxMDIyOlwi5LyR5a6B5Y6/XCIsMzQxMDIzOlwi6buf5Y6/XCIsMzQxMDI0Olwi56WB6Zeo5Y6/XCJ9LDM0MTEwMDp7MzQxMTAyOlwi55CF55CK5Yy6XCIsMzQxMTAzOlwi5Y2X6LCv5Yy6XCIsMzQxMTIyOlwi5p2l5a6J5Y6/XCIsMzQxMTI0Olwi5YWo5qSS5Y6/XCIsMzQxMTI1Olwi5a6a6L+c5Y6/XCIsMzQxMTI2Olwi5Yek6Ziz5Y6/XCIsMzQxMTgxOlwi5aSp6ZW/5biCXCIsMzQxMTgyOlwi5piO5YWJ5biCXCJ9LDM0MTIwMDp7MzQxMjAyOlwi6aKN5bee5Yy6XCIsMzQxMjAzOlwi6aKN5Lic5Yy6XCIsMzQxMjA0Olwi6aKN5rOJ5Yy6XCIsMzQxMjIxOlwi5Li05rOJ5Y6/XCIsMzQxMjIyOlwi5aSq5ZKM5Y6/XCIsMzQxMjI1Olwi6Zic5Y2X5Y6/XCIsMzQxMjI2Olwi6aKN5LiK5Y6/XCIsMzQxMjgyOlwi55WM6aaW5biCXCJ9LDM0MTMwMDp7MzQxMzAyOlwi5Z+H5qGl5Yy6XCIsMzQxMzIxOlwi56CA5bGx5Y6/XCIsMzQxMzIyOlwi6JCn5Y6/XCIsMzQxMzIzOlwi54G155Kn5Y6/XCIsMzQxMzI0Olwi5rOX5Y6/XCJ9LDM0MTUwMDp7MzQxNTAyOlwi6YeR5a6J5Yy6XCIsMzQxNTAzOlwi6KOV5a6J5Yy6XCIsMzQxNTA0Olwi5Y+26ZuG5Yy6XCIsMzQxNTIyOlwi6ZyN6YKx5Y6/XCIsMzQxNTIzOlwi6IiS5Z+O5Y6/XCIsMzQxNTI0Olwi6YeR5a+o5Y6/XCIsMzQxNTI1Olwi6ZyN5bGx5Y6/XCJ9LDM0MTYwMDp7MzQxNjAyOlwi6LCv5Z+O5Yy6XCIsMzQxNjIxOlwi5rah6Ziz5Y6/XCIsMzQxNjIyOlwi6JKZ5Z+O5Y6/XCIsMzQxNjIzOlwi5Yip6L6b5Y6/XCJ9LDM0MTcwMDp7MzQxNzAyOlwi6LS15rGg5Yy6XCIsMzQxNzIxOlwi5Lic6Iez5Y6/XCIsMzQxNzIyOlwi55+z5Y+w5Y6/XCIsMzQxNzIzOlwi6Z2S6Ziz5Y6/XCJ9LDM0MTgwMDp7MzQxODAyOlwi5a6j5bee5Yy6XCIsMzQxODIxOlwi6YOO5rqq5Y6/XCIsMzQxODIyOlwi5bm/5b635Y6/XCIsMzQxODIzOlwi5rO+5Y6/XCIsMzQxODI0Olwi57up5rqq5Y6/XCIsMzQxODI1Olwi5peM5b635Y6/XCIsMzQxODgxOlwi5a6B5Zu95biCXCJ9LDM1MDAwMDp7MzUwMTAwOlwi56aP5bee5biCXCIsMzUwMjAwOlwi5Y6m6Zeo5biCXCIsMzUwMzAwOlwi6I6G55Sw5biCXCIsMzUwNDAwOlwi5LiJ5piO5biCXCIsMzUwNTAwOlwi5rOJ5bee5biCXCIsMzUwNjAwOlwi5ryz5bee5biCXCIsMzUwNzAwOlwi5Y2X5bmz5biCXCIsMzUwODAwOlwi6b6Z5bKp5biCXCIsMzUwOTAwOlwi5a6B5b635biCXCJ9LDM1MDEwMDp7MzUwMTAyOlwi6byT5qW85Yy6XCIsMzUwMTAzOlwi5Y+w5rGf5Yy6XCIsMzUwMTA0Olwi5LuT5bGx5Yy6XCIsMzUwMTA1Olwi6ams5bC+5Yy6XCIsMzUwMTExOlwi5pmL5a6J5Yy6XCIsMzUwMTIxOlwi6Ze95L6v5Y6/XCIsMzUwMTIyOlwi6L+e5rGf5Y6/XCIsMzUwMTIzOlwi572X5rqQ5Y6/XCIsMzUwMTI0Olwi6Ze95riF5Y6/XCIsMzUwMTI1Olwi5rC45rOw5Y6/XCIsMzUwMTI4Olwi5bmz5r2t5Y6/XCIsMzUwMTgxOlwi56aP5riF5biCXCIsMzUwMTgyOlwi6ZW/5LmQ5biCXCJ9LDM1MDIwMDp7MzUwMjAzOlwi5oCd5piO5Yy6XCIsMzUwMjA1Olwi5rW35rKn5Yy6XCIsMzUwMjA2Olwi5rmW6YeM5Yy6XCIsMzUwMjExOlwi6ZuG576O5Yy6XCIsMzUwMjEyOlwi5ZCM5a6J5Yy6XCIsMzUwMjEzOlwi57+U5a6J5Yy6XCJ9LDM1MDMwMDp7MzUwMzAyOlwi5Z+O5Y6i5Yy6XCIsMzUwMzAzOlwi5ra15rGf5Yy6XCIsMzUwMzA0Olwi6I2U5Z+O5Yy6XCIsMzUwMzA1Olwi56eA5bG/5Yy6XCIsMzUwMzIyOlwi5LuZ5ri45Y6/XCJ9LDM1MDQwMDp7MzUwNDAyOlwi5qKF5YiX5Yy6XCIsMzUwNDAzOlwi5LiJ5YWD5Yy6XCIsMzUwNDIxOlwi5piO5rqq5Y6/XCIsMzUwNDIzOlwi5riF5rWB5Y6/XCIsMzUwNDI0Olwi5a6B5YyW5Y6/XCIsMzUwNDI1Olwi5aSn55Sw5Y6/XCIsMzUwNDI2Olwi5bCk5rqq5Y6/XCIsMzUwNDI3Olwi5rKZ5Y6/XCIsMzUwNDI4Olwi5bCG5LmQ5Y6/XCIsMzUwNDI5Olwi5rOw5a6B5Y6/XCIsMzUwNDMwOlwi5bu65a6B5Y6/XCIsMzUwNDgxOlwi5rC45a6J5biCXCJ9LDM1MDUwMDp7MzUwNTAyOlwi6bKk5Z+O5Yy6XCIsMzUwNTAzOlwi5Liw5rO95Yy6XCIsMzUwNTA0Olwi5rSb5rGf5Yy6XCIsMzUwNTA1Olwi5rOJ5riv5Yy6XCIsMzUwNTIxOlwi5oOg5a6J5Y6/XCIsMzUwNTI0Olwi5a6J5rqq5Y6/XCIsMzUwNTI1Olwi5rC45pil5Y6/XCIsMzUwNTI2Olwi5b635YyW5Y6/XCIsMzUwNTI3Olwi6YeR6Zeo5Y6/XCIsMzUwNTgxOlwi55+z54uu5biCXCIsMzUwNTgyOlwi5pmL5rGf5biCXCIsMzUwNTgzOlwi5Y2X5a6J5biCXCJ9LDM1MDYwMDp7MzUwNjAyOlwi6IqX5Z+O5Yy6XCIsMzUwNjAzOlwi6b6Z5paH5Yy6XCIsMzUwNjIyOlwi5LqR6ZyE5Y6/XCIsMzUwNjIzOlwi5ryz5rWm5Y6/XCIsMzUwNjI0Olwi6K+P5a6J5Y6/XCIsMzUwNjI1Olwi6ZW/5rOw5Y6/XCIsMzUwNjI2Olwi5Lic5bGx5Y6/XCIsMzUwNjI3Olwi5Y2X6Z2W5Y6/XCIsMzUwNjI4Olwi5bmz5ZKM5Y6/XCIsMzUwNjI5Olwi5Y2O5a6J5Y6/XCIsMzUwNjgxOlwi6b6Z5rW35biCXCJ9LDM1MDcwMDp7MzUwNzAyOlwi5bu25bmz5Yy6XCIsMzUwNzAzOlwi5bu66Ziz5Yy6XCIsMzUwNzIxOlwi6aG65piM5Y6/XCIsMzUwNzIyOlwi5rWm5Z+O5Y6/XCIsMzUwNzIzOlwi5YWJ5rO95Y6/XCIsMzUwNzI0Olwi5p2+5rqq5Y6/XCIsMzUwNzI1Olwi5pS/5ZKM5Y6/XCIsMzUwNzgxOlwi6YK15q2m5biCXCIsMzUwNzgyOlwi5q2m5aS35bGx5biCXCIsMzUwNzgzOlwi5bu655Ov5biCXCJ9LDM1MDgwMDp7MzUwODAyOlwi5paw572X5Yy6XCIsMzUwODAzOlwi5rC45a6a5Yy6XCIsMzUwODIxOlwi6ZW/5rGA5Y6/XCIsMzUwODIzOlwi5LiK5p2t5Y6/XCIsMzUwODI0Olwi5q2m5bmz5Y6/XCIsMzUwODI1Olwi6L+e5Z+O5Y6/XCIsMzUwODgxOlwi5ryz5bmz5biCXCJ9LDM1MDkwMDp7MzUwOTAyOlwi6JWJ5Z+O5Yy6XCIsMzUwOTIxOlwi6Zye5rWm5Y6/XCIsMzUwOTIyOlwi5Y+k55Sw5Y6/XCIsMzUwOTIzOlwi5bGP5Y2X5Y6/XCIsMzUwOTI0Olwi5a+/5a6B5Y6/XCIsMzUwOTI1Olwi5ZGo5a6B5Y6/XCIsMzUwOTI2Olwi5p+Y6I2j5Y6/XCIsMzUwOTgxOlwi56aP5a6J5biCXCIsMzUwOTgyOlwi56aP6byO5biCXCJ9LDM2MDAwMDp7MzYwMTAwOlwi5Y2X5piM5biCXCIsMzYwMjAwOlwi5pmv5b636ZWH5biCXCIsMzYwMzAwOlwi6JCN5Lmh5biCXCIsMzYwNDAwOlwi5Lmd5rGf5biCXCIsMzYwNTAwOlwi5paw5L2Z5biCXCIsMzYwNjAwOlwi6bmw5r2t5biCXCIsMzYwNzAwOlwi6LWj5bee5biCXCIsMzYwODAwOlwi5ZCJ5a6J5biCXCIsMzYwOTAwOlwi5a6c5pil5biCXCIsMzYxMDAwOlwi5oqa5bee5biCXCIsMzYxMTAwOlwi5LiK6aW25biCXCJ9LDM2MDEwMDp7MzYwMTAyOlwi5Lic5rmW5Yy6XCIsMzYwMTAzOlwi6KW/5rmW5Yy6XCIsMzYwMTA0Olwi6Z2S5LqR6LCx5Yy6XCIsMzYwMTA1Olwi5rm+6YeM5Yy6XCIsMzYwMTExOlwi6Z2S5bGx5rmW5Yy6XCIsMzYwMTEyOlwi5paw5bu65Yy6XCIsMzYwMTIxOlwi5Y2X5piM5Y6/XCIsMzYwMTIzOlwi5a6J5LmJ5Y6/XCIsMzYwMTI0Olwi6L+b6LSk5Y6/XCJ9LDM2MDIwMDp7MzYwMjAyOlwi5piM5rGf5Yy6XCIsMzYwMjAzOlwi54+g5bGx5Yy6XCIsMzYwMjIyOlwi5rWu5qKB5Y6/XCIsMzYwMjgxOlwi5LmQ5bmz5biCXCJ9LDM2MDMwMDp7MzYwMzAyOlwi5a6J5rqQ5Yy6XCIsMzYwMzEzOlwi5rmY5Lic5Yy6XCIsMzYwMzIxOlwi6I6y6Iqx5Y6/XCIsMzYwMzIyOlwi5LiK5qCX5Y6/XCIsMzYwMzIzOlwi6Iqm5rqq5Y6/XCJ9LDM2MDQwMDp7MzYwNDAyOlwi5r+C5rqq5Yy6XCIsMzYwNDAzOlwi5rWU6Ziz5Yy6XCIsMzYwNDIxOlwi5Lmd5rGf5Y6/XCIsMzYwNDIzOlwi5q2m5a6B5Y6/XCIsMzYwNDI0Olwi5L+u5rC05Y6/XCIsMzYwNDI1Olwi5rC45L+u5Y6/XCIsMzYwNDI2Olwi5b635a6J5Y6/XCIsMzYwNDI4Olwi6YO95piM5Y6/XCIsMzYwNDI5Olwi5rmW5Y+j5Y6/XCIsMzYwNDMwOlwi5b2t5rO95Y6/XCIsMzYwNDgxOlwi55Ge5piM5biCXCIsMzYwNDgyOlwi5YWx6Z2S5Z+O5biCXCIsMzYwNDgzOlwi5bqQ5bGx5biCXCJ9LDM2MDUwMDp7MzYwNTAyOlwi5rid5rC05Yy6XCIsMzYwNTIxOlwi5YiG5a6c5Y6/XCJ9LDM2MDYwMDp7MzYwNjAyOlwi5pyI5rmW5Yy6XCIsMzYwNjIyOlwi5L2Z5rGf5Y6/XCIsMzYwNjgxOlwi6LS15rqq5biCXCJ9LDM2MDcwMDp7MzYwNzAyOlwi56ug6LSh5Yy6XCIsMzYwNzAzOlwi5Y2X5bq35Yy6XCIsMzYwNzIxOlwi6LWj5Y6/XCIsMzYwNzIyOlwi5L+h5Liw5Y6/XCIsMzYwNzIzOlwi5aSn5L2Z5Y6/XCIsMzYwNzI0Olwi5LiK54q55Y6/XCIsMzYwNzI1Olwi5bSH5LmJ5Y6/XCIsMzYwNzI2Olwi5a6J6L+c5Y6/XCIsMzYwNzI3Olwi6b6Z5Y2X5Y6/XCIsMzYwNzI4Olwi5a6a5Y2X5Y6/XCIsMzYwNzI5Olwi5YWo5Y2X5Y6/XCIsMzYwNzMwOlwi5a6B6YO95Y6/XCIsMzYwNzMxOlwi5LqO6YO95Y6/XCIsMzYwNzMyOlwi5YW05Zu95Y6/XCIsMzYwNzMzOlwi5Lya5piM5Y6/XCIsMzYwNzM0Olwi5a+75LmM5Y6/XCIsMzYwNzM1Olwi55+z5Z+O5Y6/XCIsMzYwNzgxOlwi55Ge6YeR5biCXCJ9LDM2MDgwMDp7MzYwODAyOlwi5ZCJ5bee5Yy6XCIsMzYwODAzOlwi6Z2S5Y6f5Yy6XCIsMzYwODIxOlwi5ZCJ5a6J5Y6/XCIsMzYwODIyOlwi5ZCJ5rC05Y6/XCIsMzYwODIzOlwi5bOh5rGf5Y6/XCIsMzYwODI0Olwi5paw5bmy5Y6/XCIsMzYwODI1Olwi5rC45Liw5Y6/XCIsMzYwODI2Olwi5rOw5ZKM5Y6/XCIsMzYwODI3Olwi6YGC5bed5Y6/XCIsMzYwODI4Olwi5LiH5a6J5Y6/XCIsMzYwODI5Olwi5a6J56aP5Y6/XCIsMzYwODMwOlwi5rC45paw5Y6/XCIsMzYwODgxOlwi5LqV5YaI5bGx5biCXCJ9LDM2MDkwMDp7MzYwOTAyOlwi6KKB5bee5Yy6XCIsMzYwOTIxOlwi5aWJ5paw5Y6/XCIsMzYwOTIyOlwi5LiH6L295Y6/XCIsMzYwOTIzOlwi5LiK6auY5Y6/XCIsMzYwOTI0Olwi5a6c5Liw5Y6/XCIsMzYwOTI1Olwi6Z2W5a6J5Y6/XCIsMzYwOTI2Olwi6ZOc6byT5Y6/XCIsMzYwOTgxOlwi5Liw5Z+O5biCXCIsMzYwOTgyOlwi5qif5qCR5biCXCIsMzYwOTgzOlwi6auY5a6J5biCXCJ9LDM2MTAwMDp7MzYxMDAyOlwi5Li05bed5Yy6XCIsMzYxMDIxOlwi5Y2X5Z+O5Y6/XCIsMzYxMDIyOlwi6buO5bed5Y6/XCIsMzYxMDIzOlwi5Y2X5Liw5Y6/XCIsMzYxMDI0Olwi5bSH5LuB5Y6/XCIsMzYxMDI1Olwi5LmQ5a6J5Y6/XCIsMzYxMDI2Olwi5a6c6buE5Y6/XCIsMzYxMDI3Olwi6YeR5rqq5Y6/XCIsMzYxMDI4Olwi6LWE5rqq5Y6/XCIsMzYxMDI5Olwi5Lic5Lmh5Y6/XCIsMzYxMDMwOlwi5bm/5piM5Y6/XCJ9LDM2MTEwMDp7MzYxMTAyOlwi5L+h5bee5Yy6XCIsMzYxMTAzOlwi5bm/5Liw5Yy6XCIsMzYxMTIxOlwi5LiK6aW25Y6/XCIsMzYxMTIzOlwi546J5bGx5Y6/XCIsMzYxMTI0Olwi6ZOF5bGx5Y6/XCIsMzYxMTI1Olwi5qiq5bOw5Y6/XCIsMzYxMTI2Olwi5byL6Ziz5Y6/XCIsMzYxMTI3Olwi5L2Z5bmy5Y6/XCIsMzYxMTI4Olwi6YSx6Ziz5Y6/XCIsMzYxMTI5Olwi5LiH5bm05Y6/XCIsMzYxMTMwOlwi5am65rqQ5Y6/XCIsMzYxMTgxOlwi5b635YW05biCXCJ9LDM3MDAwMDp7MzcwMTAwOlwi5rWO5Y2X5biCXCIsMzcwMjAwOlwi6Z2S5bKb5biCXCIsMzcwMzAwOlwi5reE5Y2a5biCXCIsMzcwNDAwOlwi5p6j5bqE5biCXCIsMzcwNTAwOlwi5Lic6JCl5biCXCIsMzcwNjAwOlwi54Of5Y+w5biCXCIsMzcwNzAwOlwi5r2N5Z2K5biCXCIsMzcwODAwOlwi5rWO5a6B5biCXCIsMzcwOTAwOlwi5rOw5a6J5biCXCIsMzcxMDAwOlwi5aiB5rW35biCXCIsMzcxMTAwOlwi5pel54Wn5biCXCIsMzcxMjAwOlwi6I6x6Iqc5biCXCIsMzcxMzAwOlwi5Li05rKC5biCXCIsMzcxNDAwOlwi5b635bee5biCXCIsMzcxNTAwOlwi6IGK5Z+O5biCXCIsMzcxNjAwOlwi5ruo5bee5biCXCIsMzcxNzAwOlwi6I+P5rO95biCXCJ9LDM3MDEwMDp7MzcwMTAyOlwi5Y6G5LiL5Yy6XCIsMzcwMTAzOlwi5biC5Lit5Yy6XCIsMzcwMTA0Olwi5qeQ6I2r5Yy6XCIsMzcwMTA1Olwi5aSp5qGl5Yy6XCIsMzcwMTEyOlwi5Y6G5Z+O5Yy6XCIsMzcwMTEzOlwi6ZW/5riF5Yy6XCIsMzcwMTI0Olwi5bmz6Zi05Y6/XCIsMzcwMTI1Olwi5rWO6Ziz5Y6/XCIsMzcwMTI2Olwi5ZWG5rKz5Y6/XCIsMzcwMTgxOlwi56ug5LiY5biCXCJ9LDM3MDIwMDp7MzcwMjAyOlwi5biC5Y2X5Yy6XCIsMzcwMjAzOlwi5biC5YyX5Yy6XCIsMzcwMjExOlwi6buE5bKb5Yy6XCIsMzcwMjEyOlwi5bSC5bGx5Yy6XCIsMzcwMjEzOlwi5p2O5rKn5Yy6XCIsMzcwMjE0Olwi5Z+O6Ziz5Yy6XCIsMzcwMjgxOlwi6IO25bee5biCXCIsMzcwMjgyOlwi5Y2z5aKo5biCXCIsMzcwMjgzOlwi5bmz5bqm5biCXCIsMzcwMjg1Olwi6I6x6KW/5biCXCJ9LDM3MDMwMDp7MzcwMzAyOlwi5reE5bed5Yy6XCIsMzcwMzAzOlwi5byg5bqX5Yy6XCIsMzcwMzA0Olwi5Y2a5bGx5Yy6XCIsMzcwMzA1Olwi5Li05reE5Yy6XCIsMzcwMzA2Olwi5ZGo5p2R5Yy6XCIsMzcwMzIxOlwi5qGT5Y+w5Y6/XCIsMzcwMzIyOlwi6auY6Z2S5Y6/XCIsMzcwMzIzOlwi5rKC5rqQ5Y6/XCJ9LDM3MDQwMDp7MzcwNDAyOlwi5biC5Lit5Yy6XCIsMzcwNDAzOlwi6Jab5Z+O5Yy6XCIsMzcwNDA0Olwi5bOE5Z+O5Yy6XCIsMzcwNDA1Olwi5Y+w5YS/5bqE5Yy6XCIsMzcwNDA2Olwi5bGx5Lqt5Yy6XCIsMzcwNDgxOlwi5ruV5bee5biCXCJ9LDM3MDUwMDp7MzcwNTAyOlwi5Lic6JCl5Yy6XCIsMzcwNTAzOlwi5rKz5Y+j5Yy6XCIsMzcwNTA1Olwi5Z6m5Yip5Yy6XCIsMzcwNTIyOlwi5Yip5rSl5Y6/XCIsMzcwNTIzOlwi5bm/6aW25Y6/XCJ9LDM3MDYwMDp7MzcwNjAyOlwi6Iqd572Y5Yy6XCIsMzcwNjExOlwi56aP5bGx5Yy6XCIsMzcwNjEyOlwi54mf5bmz5Yy6XCIsMzcwNjEzOlwi6I6x5bGx5Yy6XCIsMzcwNjM0Olwi6ZW/5bKb5Y6/XCIsMzcwNjgxOlwi6b6Z5Y+j5biCXCIsMzcwNjgyOlwi6I6x6Ziz5biCXCIsMzcwNjgzOlwi6I6x5bee5biCXCIsMzcwNjg0Olwi6JOs6I6x5biCXCIsMzcwNjg1Olwi5oub6L+c5biCXCIsMzcwNjg2Olwi5qCW6Zye5biCXCIsMzcwNjg3Olwi5rW36Ziz5biCXCJ9LDM3MDcwMDp7MzcwNzAyOlwi5r2N5Z+O5Yy6XCIsMzcwNzAzOlwi5a+S5Lqt5Yy6XCIsMzcwNzA0Olwi5Z2K5a2Q5Yy6XCIsMzcwNzA1Olwi5aWO5paH5Yy6XCIsMzcwNzI0Olwi5Li05pyQ5Y6/XCIsMzcwNzI1Olwi5piM5LmQ5Y6/XCIsMzcwNzgxOlwi6Z2S5bee5biCXCIsMzcwNzgyOlwi6K+45Z+O5biCXCIsMzcwNzgzOlwi5a+/5YWJ5biCXCIsMzcwNzg0Olwi5a6J5LiY5biCXCIsMzcwNzg1Olwi6auY5a+G5biCXCIsMzcwNzg2Olwi5piM6YKR5biCXCJ9LDM3MDgwMDp7MzcwODExOlwi5Lu75Z+O5Yy6XCIsMzcwODEyOlwi5YWW5bee5Yy6XCIsMzcwODI2Olwi5b6u5bGx5Y6/XCIsMzcwODI3Olwi6bG85Y+w5Y6/XCIsMzcwODI4Olwi6YeR5Lmh5Y6/XCIsMzcwODI5Olwi5ZiJ56Wl5Y6/XCIsMzcwODMwOlwi5rG25LiK5Y6/XCIsMzcwODMxOlwi5rOX5rC05Y6/XCIsMzcwODMyOlwi5qKB5bGx5Y6/XCIsMzcwODgxOlwi5puy6Zic5biCXCIsMzcwODgzOlwi6YK55Z+O5biCXCJ9LDM3MDkwMDp7MzcwOTAyOlwi5rOw5bGx5Yy6XCIsMzcwOTExOlwi5bKx5bKz5Yy6XCIsMzcwOTIxOlwi5a6B6Ziz5Y6/XCIsMzcwOTIzOlwi5Lic5bmz5Y6/XCIsMzcwOTgyOlwi5paw5rOw5biCXCIsMzcwOTgzOlwi6IKl5Z+O5biCXCJ9LDM3MTAwMDp7MzcxMDAyOlwi546v57+g5Yy6XCIsMzcxMDAzOlwi5paH55m75Yy6XCIsMzcxMDgyOlwi6I2j5oiQ5biCXCIsMzcxMDgzOlwi5Lmz5bGx5biCXCJ9LDM3MTEwMDp7MzcxMTAyOlwi5Lic5riv5Yy6XCIsMzcxMTAzOlwi5bKa5bGx5Yy6XCIsMzcxMTIxOlwi5LqU6I6y5Y6/XCIsMzcxMTIyOlwi6I6S5Y6/XCJ9LDM3MTIwMDp7MzcxMjAyOlwi6I6x5Z+O5Yy6XCIsMzcxMjAzOlwi6ZKi5Z+O5Yy6XCJ9LDM3MTMwMDp7MzcxMzAyOlwi5YWw5bGx5Yy6XCIsMzcxMzExOlwi572X5bqE5Yy6XCIsMzcxMzEyOlwi5rKz5Lic5Yy6XCIsMzcxMzIxOlwi5rKC5Y2X5Y6/XCIsMzcxMzIyOlwi6YOv5Z+O5Y6/XCIsMzcxMzIzOlwi5rKC5rC05Y6/XCIsMzcxMzI0Olwi5YWw6Zm15Y6/XCIsMzcxMzI1Olwi6LS55Y6/XCIsMzcxMzI2Olwi5bmz6YKR5Y6/XCIsMzcxMzI3Olwi6I6S5Y2X5Y6/XCIsMzcxMzI4Olwi6JKZ6Zi05Y6/XCIsMzcxMzI5Olwi5Li05rKt5Y6/XCJ9LDM3MTQwMDp7MzcxNDAyOlwi5b635Z+O5Yy6XCIsMzcxNDAzOlwi6Zm15Z+O5Yy6XCIsMzcxNDIyOlwi5a6B5rSl5Y6/XCIsMzcxNDIzOlwi5bqG5LqR5Y6/XCIsMzcxNDI0Olwi5Li06YKR5Y6/XCIsMzcxNDI1Olwi6b2Q5rKz5Y6/XCIsMzcxNDI2Olwi5bmz5Y6f5Y6/XCIsMzcxNDI3Olwi5aSP5rSl5Y6/XCIsMzcxNDI4Olwi5q2m5Z+O5Y6/XCIsMzcxNDgxOlwi5LmQ6Zm15biCXCIsMzcxNDgyOlwi56a55Z+O5biCXCJ9LDM3MTUwMDp7MzcxNTAyOlwi5Lic5piM5bqc5Yy6XCIsMzcxNTIxOlwi6Ziz6LC35Y6/XCIsMzcxNTIyOlwi6I6Y5Y6/XCIsMzcxNTIzOlwi6IyM5bmz5Y6/XCIsMzcxNTI0Olwi5Lic6Zi/5Y6/XCIsMzcxNTI1Olwi5Yag5Y6/XCIsMzcxNTI2Olwi6auY5ZSQ5Y6/XCIsMzcxNTgxOlwi5Li05riF5biCXCJ9LDM3MTYwMDp7MzcxNjAyOlwi5ruo5Z+O5Yy6XCIsMzcxNjAzOlwi5rK+5YyW5Yy6XCIsMzcxNjIxOlwi5oOg5rCR5Y6/XCIsMzcxNjIyOlwi6Ziz5L+h5Y6/XCIsMzcxNjIzOlwi5peg5qOj5Y6/XCIsMzcxNjI1Olwi5Y2a5YW05Y6/XCIsMzcxNjI2Olwi6YK55bmz5Y6/XCJ9LDM3MTcwMDp7MzcxNzAyOlwi54mh5Li55Yy6XCIsMzcxNzAzOlwi5a6a6Zm25Yy6XCIsMzcxNzIxOlwi5pu55Y6/XCIsMzcxNzIyOlwi5Y2V5Y6/XCIsMzcxNzIzOlwi5oiQ5q2m5Y6/XCIsMzcxNzI0Olwi5beo6YeO5Y6/XCIsMzcxNzI1Olwi6YOT5Z+O5Y6/XCIsMzcxNzI2Olwi6YSE5Z+O5Y6/XCIsMzcxNzI4Olwi5Lic5piO5Y6/XCJ9LDQxMDAwMDp7NDEwMTAwOlwi6YOR5bee5biCXCIsNDEwMjAwOlwi5byA5bCB5biCXCIsNDEwMzAwOlwi5rSb6Ziz5biCXCIsNDEwNDAwOlwi5bmz6aG25bGx5biCXCIsNDEwNTAwOlwi5a6J6Ziz5biCXCIsNDEwNjAwOlwi6bmk5aOB5biCXCIsNDEwNzAwOlwi5paw5Lmh5biCXCIsNDEwODAwOlwi54Sm5L2c5biCXCIsNDEwOTAwOlwi5r+u6Ziz5biCXCIsNDExMDAwOlwi6K645piM5biCXCIsNDExMTAwOlwi5ryv5rKz5biCXCIsNDExMjAwOlwi5LiJ6Zeo5bOh5biCXCIsNDExMzAwOlwi5Y2X6Ziz5biCXCIsNDExNDAwOlwi5ZWG5LiY5biCXCIsNDExNTAwOlwi5L+h6Ziz5biCXCIsNDExNjAwOlwi5ZGo5Y+j5biCXCIsNDExNzAwOlwi6am76ams5bqX5biCXCIsNDE5MDAxOlwi5rWO5rqQ5biCXCJ9LDQxMDEwMDp7NDEwMTAyOlwi5Lit5Y6f5Yy6XCIsNDEwMTAzOlwi5LqM5LiD5Yy6XCIsNDEwMTA0Olwi566h5Z+O5Zue5peP5Yy6XCIsNDEwMTA1Olwi6YeR5rC05Yy6XCIsNDEwMTA2Olwi5LiK6KGX5Yy6XCIsNDEwMTA4Olwi5oOg5rWO5Yy6XCIsNDEwMTIyOlwi5Lit54mf5Y6/XCIsNDEwMTgxOlwi5bep5LmJ5biCXCIsNDEwMTgyOlwi6I2l6Ziz5biCXCIsNDEwMTgzOlwi5paw5a+G5biCXCIsNDEwMTg0Olwi5paw6YOR5biCXCIsNDEwMTg1Olwi55m75bCB5biCXCJ9LDQxMDIwMDp7NDEwMjAyOlwi6b6Z5Lqt5Yy6XCIsNDEwMjAzOlwi6aG65rKz5Zue5peP5Yy6XCIsNDEwMjA0Olwi6byT5qW85Yy6XCIsNDEwMjA1Olwi56a5546L5Y+w5Yy6XCIsNDEwMjExOlwi6YeR5piO5Yy6XCIsNDEwMjEyOlwi56Wl56ym5Yy6XCIsNDEwMjIxOlwi5p2e5Y6/XCIsNDEwMjIyOlwi6YCa6K645Y6/XCIsNDEwMjIzOlwi5bCJ5rCP5Y6/XCIsNDEwMjI1Olwi5YWw6ICD5Y6/XCJ9LDQxMDMwMDp7NDEwMzAyOlwi6ICB5Z+O5Yy6XCIsNDEwMzAzOlwi6KW/5bel5Yy6XCIsNDEwMzA0Olwi54CN5rKz5Zue5peP5Yy6XCIsNDEwMzA1Olwi5ran6KW/5Yy6XCIsNDEwMzA2Olwi5ZCJ5Yip5Yy6XCIsNDEwMzExOlwi5rSb6b6Z5Yy6XCIsNDEwMzIyOlwi5a2f5rSl5Y6/XCIsNDEwMzIzOlwi5paw5a6J5Y6/XCIsNDEwMzI0Olwi5qC+5bed5Y6/XCIsNDEwMzI1Olwi5bWp5Y6/XCIsNDEwMzI2Olwi5rGd6Ziz5Y6/XCIsNDEwMzI3Olwi5a6c6Ziz5Y6/XCIsNDEwMzI4Olwi5rSb5a6B5Y6/XCIsNDEwMzI5Olwi5LyK5bed5Y6/XCIsNDEwMzgxOlwi5YGD5biI5biCXCJ9LDQxMDQwMDp7NDEwNDAyOlwi5paw5Y2O5Yy6XCIsNDEwNDAzOlwi5Y2r5Lic5Yy6XCIsNDEwNDA0Olwi55+z6b6Z5Yy6XCIsNDEwNDExOlwi5rmb5rKz5Yy6XCIsNDEwNDIxOlwi5a6d5Liw5Y6/XCIsNDEwNDIyOlwi5Y+25Y6/XCIsNDEwNDIzOlwi6bKB5bGx5Y6/XCIsNDEwNDI1Olwi6YOP5Y6/XCIsNDEwNDgxOlwi6Iie6ZKi5biCXCIsNDEwNDgyOlwi5rGd5bee5biCXCJ9LDQxMDUwMDp7NDEwNTAyOlwi5paH5bOw5Yy6XCIsNDEwNTAzOlwi5YyX5YWz5Yy6XCIsNDEwNTA1Olwi5q636YO95Yy6XCIsNDEwNTA2Olwi6b6Z5a6J5Yy6XCIsNDEwNTIyOlwi5a6J6Ziz5Y6/XCIsNDEwNTIzOlwi5rGk6Zi05Y6/XCIsNDEwNTI2Olwi5ruR5Y6/XCIsNDEwNTI3Olwi5YaF6buE5Y6/XCIsNDEwNTgxOlwi5p6X5bee5biCXCJ9LDQxMDYwMDp7NDEwNjAyOlwi6bmk5bGx5Yy6XCIsNDEwNjAzOlwi5bGx5Z+O5Yy6XCIsNDEwNjExOlwi5reH5ruo5Yy6XCIsNDEwNjIxOlwi5rWa5Y6/XCIsNDEwNjIyOlwi5reH5Y6/XCJ9LDQxMDcwMDp7NDEwNzAyOlwi57qi5peX5Yy6XCIsNDEwNzAzOlwi5Y2r5ruo5Yy6XCIsNDEwNzA0Olwi5Yek5rOJ5Yy6XCIsNDEwNzExOlwi54mn6YeO5Yy6XCIsNDEwNzIxOlwi5paw5Lmh5Y6/XCIsNDEwNzI0Olwi6I635ZiJ5Y6/XCIsNDEwNzI1Olwi5Y6f6Ziz5Y6/XCIsNDEwNzI2Olwi5bu25rSl5Y6/XCIsNDEwNzI3Olwi5bCB5LiY5Y6/XCIsNDEwNzI4Olwi6ZW/5Z6j5Y6/XCIsNDEwNzgxOlwi5Y2r6L6J5biCXCIsNDEwNzgyOlwi6L6J5Y6/5biCXCJ9LDQxMDgwMDp7NDEwODAyOlwi6Kej5pS+5Yy6XCIsNDEwODAzOlwi5Lit56uZ5Yy6XCIsNDEwODA0Olwi6ams5p2R5Yy6XCIsNDEwODExOlwi5bGx6Ziz5Yy6XCIsNDEwODIxOlwi5L+u5q2m5Y6/XCIsNDEwODIyOlwi5Y2a54ix5Y6/XCIsNDEwODIzOlwi5q2m6Zmf5Y6/XCIsNDEwODI1Olwi5rip5Y6/XCIsNDEwODgyOlwi5rKB6Ziz5biCXCIsNDEwODgzOlwi5a2f5bee5biCXCJ9LDQxMDkwMDp7NDEwOTAyOlwi5Y2O6b6Z5Yy6XCIsNDEwOTIyOlwi5riF5Liw5Y6/XCIsNDEwOTIzOlwi5Y2X5LmQ5Y6/XCIsNDEwOTI2Olwi6IyD5Y6/XCIsNDEwOTI3Olwi5Y+w5YmN5Y6/XCIsNDEwOTI4Olwi5r+u6Ziz5Y6/XCJ9LDQxMTAwMDp7NDExMDAyOlwi6a2P6YO95Yy6XCIsNDExMDIzOlwi6K645piM5Y6/XCIsNDExMDI0Olwi6YSi6Zm15Y6/XCIsNDExMDI1Olwi6KWE5Z+O5Y6/XCIsNDExMDgxOlwi56a55bee5biCXCIsNDExMDgyOlwi6ZW/6JGb5biCXCJ9LDQxMTEwMDp7NDExMTAyOlwi5rqQ5rGH5Yy6XCIsNDExMTAzOlwi6YO+5Z+O5Yy6XCIsNDExMTA0Olwi5Y+s6Zm15Yy6XCIsNDExMTIxOlwi6Iie6Ziz5Y6/XCIsNDExMTIyOlwi5Li06aKN5Y6/XCJ9LDQxMTIwMDp7NDExMjAyOlwi5rmW5ruo5Yy6XCIsNDExMjAzOlwi6ZmV5bee5Yy6XCIsNDExMjIxOlwi5riR5rGg5Y6/XCIsNDExMjI0Olwi5Y2i5rCP5Y6/XCIsNDExMjgxOlwi5LmJ6ams5biCXCIsNDExMjgyOlwi54G15a6d5biCXCJ9LDQxMTMwMDp7NDExMzAyOlwi5a6b5Z+O5Yy6XCIsNDExMzAzOlwi5Y2n6b6Z5Yy6XCIsNDExMzIxOlwi5Y2X5Y+s5Y6/XCIsNDExMzIyOlwi5pa55Z+O5Y6/XCIsNDExMzIzOlwi6KW/5bOh5Y6/XCIsNDExMzI0Olwi6ZWH5bmz5Y6/XCIsNDExMzI1Olwi5YaF5Lmh5Y6/XCIsNDExMzI2Olwi5reF5bed5Y6/XCIsNDExMzI3Olwi56S+5peX5Y6/XCIsNDExMzI4Olwi5ZSQ5rKz5Y6/XCIsNDExMzI5Olwi5paw6YeO5Y6/XCIsNDExMzMwOlwi5qGQ5p+P5Y6/XCIsNDExMzgxOlwi6YKT5bee5biCXCJ9LDQxMTQwMDp7NDExNDAyOlwi5qKB5Zut5Yy6XCIsNDExNDAzOlwi552i6Ziz5Yy6XCIsNDExNDIxOlwi5rCR5p2D5Y6/XCIsNDExNDIyOlwi552i5Y6/XCIsNDExNDIzOlwi5a6B6Zm15Y6/XCIsNDExNDI0Olwi5p+Y5Z+O5Y6/XCIsNDExNDI1Olwi6Jme5Z+O5Y6/XCIsNDExNDI2Olwi5aSP6YKR5Y6/XCIsNDExNDgxOlwi5rC45Z+O5biCXCJ9LDQxMTUwMDp7NDExNTAyOlwi5rWJ5rKz5Yy6XCIsNDExNTAzOlwi5bmz5qGl5Yy6XCIsNDExNTIxOlwi572X5bGx5Y6/XCIsNDExNTIyOlwi5YWJ5bGx5Y6/XCIsNDExNTIzOlwi5paw5Y6/XCIsNDExNTI0Olwi5ZWG5Z+O5Y6/XCIsNDExNTI1Olwi5Zu65aeL5Y6/XCIsNDExNTI2Olwi5r2i5bed5Y6/XCIsNDExNTI3Olwi5reu5ruo5Y6/XCIsNDExNTI4Olwi5oGv5Y6/XCJ9LDQxMTYwMDp7NDExNjAyOlwi5bed5rGH5Yy6XCIsNDExNjIxOlwi5om25rKf5Y6/XCIsNDExNjIyOlwi6KW/5Y2O5Y6/XCIsNDExNjIzOlwi5ZWG5rC05Y6/XCIsNDExNjI0Olwi5rKI5LiY5Y6/XCIsNDExNjI1Olwi6YO45Z+O5Y6/XCIsNDExNjI2Olwi5reu6Ziz5Y6/XCIsNDExNjI3Olwi5aSq5bq35Y6/XCIsNDExNjI4Olwi6bm/6YKR5Y6/XCIsNDExNjgxOlwi6aG55Z+O5biCXCJ9LDQxMTcwMDp7NDExNzAyOlwi6am/5Z+O5Yy6XCIsNDExNzIxOlwi6KW/5bmz5Y6/XCIsNDExNzIyOlwi5LiK6JSh5Y6/XCIsNDExNzIzOlwi5bmz6IiG5Y6/XCIsNDExNzI0Olwi5q2j6Ziz5Y6/XCIsNDExNzI1Olwi56Gu5bGx5Y6/XCIsNDExNzI2Olwi5rOM6Ziz5Y6/XCIsNDExNzI3Olwi5rGd5Y2X5Y6/XCIsNDExNzI4Olwi6YGC5bmz5Y6/XCIsNDExNzI5Olwi5paw6JSh5Y6/XCJ9LDQyMDAwMDp7NDIwMTAwOlwi5q2m5rGJ5biCXCIsNDIwMjAwOlwi6buE55+z5biCXCIsNDIwMzAwOlwi5Y2B5aCw5biCXCIsNDIwNTAwOlwi5a6c5piM5biCXCIsNDIwNjAwOlwi6KWE6Ziz5biCXCIsNDIwNzAwOlwi6YSC5bee5biCXCIsNDIwODAwOlwi6I2G6Zeo5biCXCIsNDIwOTAwOlwi5a2d5oSf5biCXCIsNDIxMDAwOlwi6I2G5bee5biCXCIsNDIxMTAwOlwi6buE5YaI5biCXCIsNDIxMjAwOlwi5ZK45a6B5biCXCIsNDIxMzAwOlwi6ZqP5bee5biCXCIsNDIyODAwOlwi5oGp5pa95Zyf5a625peP6IuX5peP6Ieq5rK75beeXCIsNDI5MDA0Olwi5LuZ5qGD5biCXCIsNDI5MDA1Olwi5r2c5rGf5biCXCIsNDI5MDA2Olwi5aSp6Zeo5biCXCIsNDI5MDIxOlwi56We5Yac5p625p6X5Yy6XCJ9LDQyMDEwMDp7NDIwMTAyOlwi5rGf5bK45Yy6XCIsNDIwMTAzOlwi5rGf5rGJ5Yy6XCIsNDIwMTA0Olwi56Ga5Y+j5Yy6XCIsNDIwMTA1Olwi5rGJ6Ziz5Yy6XCIsNDIwMTA2Olwi5q2m5piM5Yy6XCIsNDIwMTA3Olwi6Z2S5bGx5Yy6XCIsNDIwMTExOlwi5rSq5bGx5Yy6XCIsNDIwMTEyOlwi5Lic6KW/5rmW5Yy6XCIsNDIwMTEzOlwi5rGJ5Y2X5Yy6XCIsNDIwMTE0Olwi6JSh55S45Yy6XCIsNDIwMTE1Olwi5rGf5aSP5Yy6XCIsNDIwMTE2Olwi6buE6ZmC5Yy6XCIsNDIwMTE3Olwi5paw5rSy5Yy6XCJ9LDQyMDIwMDp7NDIwMjAyOlwi6buE55+z5riv5Yy6XCIsNDIwMjAzOlwi6KW/5aGe5bGx5Yy6XCIsNDIwMjA0Olwi5LiL6ZmG5Yy6XCIsNDIwMjA1Olwi6ZOB5bGx5Yy6XCIsNDIwMjIyOlwi6Ziz5paw5Y6/XCIsNDIwMjgxOlwi5aSn5Ya25biCXCJ9LDQyMDMwMDp7NDIwMzAyOlwi6IyF566t5Yy6XCIsNDIwMzAzOlwi5byg5rm+5Yy6XCIsNDIwMzA0Olwi6YOn6Ziz5Yy6XCIsNDIwMzIyOlwi6YOn6KW/5Y6/XCIsNDIwMzIzOlwi56u55bGx5Y6/XCIsNDIwMzI0Olwi56u55rqq5Y6/XCIsNDIwMzI1Olwi5oi/5Y6/XCIsNDIwMzgxOlwi5Li55rGf5Y+j5biCXCJ9LDQyMDUwMDp7NDIwNTAyOlwi6KW/6Zm15Yy6XCIsNDIwNTAzOlwi5LyN5a625bKX5Yy6XCIsNDIwNTA0Olwi54K55Yab5Yy6XCIsNDIwNTA1Olwi54yH5Lqt5Yy6XCIsNDIwNTA2Olwi5aS36Zm15Yy6XCIsNDIwNTI1Olwi6L+c5a6J5Y6/XCIsNDIwNTI2Olwi5YW05bGx5Y6/XCIsNDIwNTI3Olwi56et5b2S5Y6/XCIsNDIwNTI4Olwi6ZW/6Ziz5Zyf5a625peP6Ieq5rK75Y6/XCIsNDIwNTI5Olwi5LqU5bOw5Zyf5a625peP6Ieq5rK75Y6/XCIsNDIwNTgxOlwi5a6c6YO95biCXCIsNDIwNTgyOlwi5b2T6Ziz5biCXCIsNDIwNTgzOlwi5p6d5rGf5biCXCJ9LDQyMDYwMDp7NDIwNjAyOlwi6KWE5Z+O5Yy6XCIsNDIwNjA2Olwi5qiK5Z+O5Yy6XCIsNDIwNjA3Olwi6KWE5bee5Yy6XCIsNDIwNjI0Olwi5Y2X5ryz5Y6/XCIsNDIwNjI1Olwi6LC35Z+O5Y6/XCIsNDIwNjI2Olwi5L+d5bq35Y6/XCIsNDIwNjgyOlwi6ICB5rKz5Y+j5biCXCIsNDIwNjgzOlwi5p6j6Ziz5biCXCIsNDIwNjg0Olwi5a6c5Z+O5biCXCJ9LDQyMDcwMDp7NDIwNzAyOlwi5qKB5a2Q5rmW5Yy6XCIsNDIwNzAzOlwi5Y2O5a655Yy6XCIsNDIwNzA0Olwi6YSC5Z+O5Yy6XCJ9LDQyMDgwMDp7NDIwODAyOlwi5Lic5a6d5Yy6XCIsNDIwODA0Olwi5o6H5YiA5Yy6XCIsNDIwODIxOlwi5Lqs5bGx5Y6/XCIsNDIwODIyOlwi5rKZ5rSL5Y6/XCIsNDIwODgxOlwi6ZKf56Wl5biCXCJ9LDQyMDkwMDp7NDIwOTAyOlwi5a2d5Y2X5Yy6XCIsNDIwOTIxOlwi5a2d5piM5Y6/XCIsNDIwOTIyOlwi5aSn5oKf5Y6/XCIsNDIwOTIzOlwi5LqR5qKm5Y6/XCIsNDIwOTgxOlwi5bqU5Z+O5biCXCIsNDIwOTgyOlwi5a6J6ZmG5biCXCIsNDIwOTg0Olwi5rGJ5bed5biCXCJ9LDQyMTAwMDp7NDIxMDAyOlwi5rKZ5biC5Yy6XCIsNDIxMDAzOlwi6I2G5bee5Yy6XCIsNDIxMDIyOlwi5YWs5a6J5Y6/XCIsNDIxMDIzOlwi55uR5Yip5Y6/XCIsNDIxMDI0Olwi5rGf6Zm15Y6/XCIsNDIxMDgxOlwi55+z6aaW5biCXCIsNDIxMDgzOlwi5rSq5rmW5biCXCIsNDIxMDg3Olwi5p2+5ruL5biCXCJ9LDQyMTEwMDp7NDIxMTAyOlwi6buE5bee5Yy6XCIsNDIxMTIxOlwi5Zui6aOO5Y6/XCIsNDIxMTIyOlwi57qi5a6J5Y6/XCIsNDIxMTIzOlwi572X55Sw5Y6/XCIsNDIxMTI0Olwi6Iux5bGx5Y6/XCIsNDIxMTI1Olwi5rWg5rC05Y6/XCIsNDIxMTI2Olwi6JWy5pil5Y6/XCIsNDIxMTI3Olwi6buE5qKF5Y6/XCIsNDIxMTgxOlwi6bq75Z+O5biCXCIsNDIxMTgyOlwi5q2m56m05biCXCJ9LDQyMTIwMDp7NDIxMjAyOlwi5ZK45a6J5Yy6XCIsNDIxMjIxOlwi5ZiJ6bG85Y6/XCIsNDIxMjIyOlwi6YCa5Z+O5Y6/XCIsNDIxMjIzOlwi5bSH6Ziz5Y6/XCIsNDIxMjI0Olwi6YCa5bGx5Y6/XCIsNDIxMjgxOlwi6LWk5aOB5biCXCJ9LDQyMTMwMDp7NDIxMzAzOlwi5pu+6YO95Yy6XCIsNDIxMzIxOlwi6ZqP5Y6/XCIsNDIxMzgxOlwi5bm/5rC05biCXCJ9LDQyMjgwMDp7NDIyODAxOlwi5oGp5pa95biCXCIsNDIyODAyOlwi5Yip5bed5biCXCIsNDIyODIyOlwi5bu65aeL5Y6/XCIsNDIyODIzOlwi5be05Lic5Y6/XCIsNDIyODI1Olwi5a6j5oGp5Y6/XCIsNDIyODI2Olwi5ZK45Liw5Y6/XCIsNDIyODI3Olwi5p2l5Yek5Y6/XCIsNDIyODI4Olwi6bmk5bOw5Y6/XCJ9LDQzMDAwMDp7NDMwMTAwOlwi6ZW/5rKZ5biCXCIsNDMwMjAwOlwi5qCq5rSy5biCXCIsNDMwMzAwOlwi5rmY5r2t5biCXCIsNDMwNDAwOlwi6KGh6Ziz5biCXCIsNDMwNTAwOlwi6YK16Ziz5biCXCIsNDMwNjAwOlwi5bKz6Ziz5biCXCIsNDMwNzAwOlwi5bi45b635biCXCIsNDMwODAwOlwi5byg5a6255WM5biCXCIsNDMwOTAwOlwi55uK6Ziz5biCXCIsNDMxMDAwOlwi6YO05bee5biCXCIsNDMxMTAwOlwi5rC45bee5biCXCIsNDMxMjAwOlwi5oCA5YyW5biCXCIsNDMxMzAwOlwi5aiE5bqV5biCXCIsNDMzMTAwOlwi5rmY6KW/5Zyf5a625peP6IuX5peP6Ieq5rK75beeXCJ9LDQzMDEwMDp7NDMwMTAyOlwi6IqZ6JOJ5Yy6XCIsNDMwMTAzOlwi5aSp5b+D5Yy6XCIsNDMwMTA0Olwi5bKz6bqT5Yy6XCIsNDMwMTA1Olwi5byA56aP5Yy6XCIsNDMwMTExOlwi6Zuo6Iqx5Yy6XCIsNDMwMTEyOlwi5pyb5Z+O5Yy6XCIsNDMwMTIxOlwi6ZW/5rKZ5Y6/XCIsNDMwMTI0Olwi5a6B5Lmh5Y6/XCIsNDMwMTgxOlwi5rWP6Ziz5biCXCJ9LDQzMDIwMDp7NDMwMjAyOlwi6I235aGY5Yy6XCIsNDMwMjAzOlwi6Iqm5ree5Yy6XCIsNDMwMjA0Olwi55+z5bOw5Yy6XCIsNDMwMjExOlwi5aSp5YWD5Yy6XCIsNDMwMjIxOlwi5qCq5rSy5Y6/XCIsNDMwMjIzOlwi5pS45Y6/XCIsNDMwMjI0Olwi6Iy26Zm15Y6/XCIsNDMwMjI1Olwi54KO6Zm15Y6/XCIsNDMwMjgxOlwi6Ya06Zm15biCXCJ9LDQzMDMwMDp7NDMwMzAyOlwi6Zuo5rmW5Yy6XCIsNDMwMzA0Olwi5bKz5aGY5Yy6XCIsNDMwMzIxOlwi5rmY5r2t5Y6/XCIsNDMwMzgxOlwi5rmY5Lmh5biCXCIsNDMwMzgyOlwi6Z+25bGx5biCXCJ9LDQzMDQwMDp7NDMwNDA1Olwi54+g5pmW5Yy6XCIsNDMwNDA2Olwi6ZuB5bOw5Yy6XCIsNDMwNDA3Olwi55+z6byT5Yy6XCIsNDMwNDA4Olwi6JK45rmY5Yy6XCIsNDMwNDEyOlwi5Y2X5bKz5Yy6XCIsNDMwNDIxOlwi6KGh6Ziz5Y6/XCIsNDMwNDIyOlwi6KGh5Y2X5Y6/XCIsNDMwNDIzOlwi6KGh5bGx5Y6/XCIsNDMwNDI0Olwi6KGh5Lic5Y6/XCIsNDMwNDI2Olwi56WB5Lic5Y6/XCIsNDMwNDgxOlwi6ICS6Ziz5biCXCIsNDMwNDgyOlwi5bi45a6B5biCXCJ9LDQzMDUwMDp7NDMwNTAyOlwi5Y+M5riF5Yy6XCIsNDMwNTAzOlwi5aSn56Wl5Yy6XCIsNDMwNTExOlwi5YyX5aGU5Yy6XCIsNDMwNTIxOlwi6YK15Lic5Y6/XCIsNDMwNTIyOlwi5paw6YK15Y6/XCIsNDMwNTIzOlwi6YK16Ziz5Y6/XCIsNDMwNTI0Olwi6ZqG5Zue5Y6/XCIsNDMwNTI1Olwi5rSe5Y+j5Y6/XCIsNDMwNTI3Olwi57ul5a6B5Y6/XCIsNDMwNTI4Olwi5paw5a6B5Y6/XCIsNDMwNTI5Olwi5Z+O5q2l6IuX5peP6Ieq5rK75Y6/XCIsNDMwNTgxOlwi5q2m5YaI5biCXCJ9LDQzMDYwMDp7NDMwNjAyOlwi5bKz6Ziz5qW85Yy6XCIsNDMwNjAzOlwi5LqR5rqq5Yy6XCIsNDMwNjExOlwi5ZCb5bGx5Yy6XCIsNDMwNjIxOlwi5bKz6Ziz5Y6/XCIsNDMwNjIzOlwi5Y2O5a655Y6/XCIsNDMwNjI0Olwi5rmY6Zi05Y6/XCIsNDMwNjI2Olwi5bmz5rGf5Y6/XCIsNDMwNjgxOlwi5rGo572X5biCXCIsNDMwNjgyOlwi5Li05rmY5biCXCJ9LDQzMDcwMDp7NDMwNzAyOlwi5q2m6Zm15Yy6XCIsNDMwNzAzOlwi6byO5Z+O5Yy6XCIsNDMwNzIxOlwi5a6J5Lmh5Y6/XCIsNDMwNzIyOlwi5rGJ5a+/5Y6/XCIsNDMwNzIzOlwi5r6n5Y6/XCIsNDMwNzI0Olwi5Li05r6n5Y6/XCIsNDMwNzI1Olwi5qGD5rqQ5Y6/XCIsNDMwNzI2Olwi55+z6Zeo5Y6/XCIsNDMwNzgxOlwi5rSl5biC5biCXCJ9LDQzMDgwMDp7NDMwODAyOlwi5rC45a6a5Yy6XCIsNDMwODExOlwi5q2m6Zm15rqQ5Yy6XCIsNDMwODIxOlwi5oWI5Yip5Y6/XCIsNDMwODIyOlwi5qGR5qSN5Y6/XCJ9LDQzMDkwMDp7NDMwOTAyOlwi6LWE6Ziz5Yy6XCIsNDMwOTAzOlwi6LWr5bGx5Yy6XCIsNDMwOTIxOlwi5Y2X5Y6/XCIsNDMwOTIyOlwi5qGD5rGf5Y6/XCIsNDMwOTIzOlwi5a6J5YyW5Y6/XCIsNDMwOTgxOlwi5rKF5rGf5biCXCJ9LDQzMTAwMDp7NDMxMDAyOlwi5YyX5rmW5Yy6XCIsNDMxMDAzOlwi6IuP5LuZ5Yy6XCIsNDMxMDIxOlwi5qGC6Ziz5Y6/XCIsNDMxMDIyOlwi5a6c56ug5Y6/XCIsNDMxMDIzOlwi5rC45YW05Y6/XCIsNDMxMDI0Olwi5ZiJ56a+5Y6/XCIsNDMxMDI1Olwi5Li05q2m5Y6/XCIsNDMxMDI2Olwi5rGd5Z+O5Y6/XCIsNDMxMDI3Olwi5qGC5Lic5Y6/XCIsNDMxMDI4Olwi5a6J5LuB5Y6/XCIsNDMxMDgxOlwi6LWE5YW05biCXCJ9LDQzMTEwMDp7NDMxMTAyOlwi6Zu26Zm15Yy6XCIsNDMxMTAzOlwi5Ya35rC05rup5Yy6XCIsNDMxMTIxOlwi56WB6Ziz5Y6/XCIsNDMxMTIyOlwi5Lic5a6J5Y6/XCIsNDMxMTIzOlwi5Y+M54mM5Y6/XCIsNDMxMTI0Olwi6YGT5Y6/XCIsNDMxMTI1Olwi5rGf5rC45Y6/XCIsNDMxMTI2Olwi5a6B6L+c5Y6/XCIsNDMxMTI3Olwi6JOd5bGx5Y6/XCIsNDMxMTI4Olwi5paw55Sw5Y6/XCIsNDMxMTI5Olwi5rGf5Y2O55G25peP6Ieq5rK75Y6/XCJ9LDQzMTIwMDp7NDMxMjAyOlwi6bmk5Z+O5Yy6XCIsNDMxMjIxOlwi5Lit5pa55Y6/XCIsNDMxMjIyOlwi5rKF6Zm15Y6/XCIsNDMxMjIzOlwi6L6w5rqq5Y6/XCIsNDMxMjI0Olwi5rqG5rWm5Y6/XCIsNDMxMjI1Olwi5Lya5ZCM5Y6/XCIsNDMxMjI2Olwi6bq76Ziz6IuX5peP6Ieq5rK75Y6/XCIsNDMxMjI3Olwi5paw5pmD5L6X5peP6Ieq5rK75Y6/XCIsNDMxMjI4Olwi6Iq35rGf5L6X5peP6Ieq5rK75Y6/XCIsNDMxMjI5Olwi6Z2W5bee6IuX5peP5L6X5peP6Ieq5rK75Y6/XCIsNDMxMjMwOlwi6YCa6YGT5L6X5peP6Ieq5rK75Y6/XCIsNDMxMjgxOlwi5rSq5rGf5biCXCJ9LDQzMTMwMDp7NDMxMzAyOlwi5aiE5pif5Yy6XCIsNDMxMzIxOlwi5Y+M5bOw5Y6/XCIsNDMxMzIyOlwi5paw5YyW5Y6/XCIsNDMxMzgxOlwi5Ya35rC05rGf5biCXCIsNDMxMzgyOlwi5raf5rqQ5biCXCJ9LDQzMzEwMDp7NDMzMTAxOlwi5ZCJ6aaW5biCXCIsNDMzMTIyOlwi5rO45rqq5Y6/XCIsNDMzMTIzOlwi5Yek5Yew5Y6/XCIsNDMzMTI0Olwi6Iqx5Z6j5Y6/XCIsNDMzMTI1Olwi5L+d6Z2W5Y6/XCIsNDMzMTI2Olwi5Y+k5LiI5Y6/XCIsNDMzMTI3Olwi5rC46aG65Y6/XCIsNDMzMTMwOlwi6b6Z5bGx5Y6/XCJ9LDQ0MDAwMDp7NDQwMTAwOlwi5bm/5bee5biCXCIsNDQwMjAwOlwi6Z+25YWz5biCXCIsNDQwMzAwOlwi5rex5Zyz5biCXCIsNDQwNDAwOlwi54+g5rW35biCXCIsNDQwNTAwOlwi5rGV5aS05biCXCIsNDQwNjAwOlwi5L2b5bGx5biCXCIsNDQwNzAwOlwi5rGf6Zeo5biCXCIsNDQwODAwOlwi5rmb5rGf5biCXCIsNDQwOTAwOlwi6IyC5ZCN5biCXCIsNDQxMjAwOlwi6IKH5bqG5biCXCIsNDQxMzAwOlwi5oOg5bee5biCXCIsNDQxNDAwOlwi5qKF5bee5biCXCIsNDQxNTAwOlwi5rGV5bC+5biCXCIsNDQxNjAwOlwi5rKz5rqQ5biCXCIsNDQxNzAwOlwi6Ziz5rGf5biCXCIsNDQxODAwOlwi5riF6L+c5biCXCIsNDQxOTAwOlwi5Lic6I6e5biCXCIsNDQyMDAwOlwi5Lit5bGx5biCXCIsNDQ1MTAwOlwi5r2u5bee5biCXCIsNDQ1MjAwOlwi5o+t6Ziz5biCXCIsNDQ1MzAwOlwi5LqR5rWu5biCXCJ9LDQ0MDEwMDp7NDQwMTAzOlwi6I2U5rm+5Yy6XCIsNDQwMTA0Olwi6LaK56eA5Yy6XCIsNDQwMTA1Olwi5rW354+g5Yy6XCIsNDQwMTA2Olwi5aSp5rKz5Yy6XCIsNDQwMTExOlwi55m95LqR5Yy6XCIsNDQwMTEyOlwi6buE5Z+U5Yy6XCIsNDQwMTEzOlwi55Wq56a65Yy6XCIsNDQwMTE0Olwi6Iqx6YO95Yy6XCIsNDQwMTE1Olwi5Y2X5rKZ5Yy6XCIsNDQwMTE3Olwi5LuO5YyW5Yy6XCIsNDQwMTE4Olwi5aKe5Z+O5Yy6XCJ9LDQ0MDIwMDp7NDQwMjAzOlwi5q2m5rGf5Yy6XCIsNDQwMjA0Olwi5rWI5rGf5Yy6XCIsNDQwMjA1Olwi5puy5rGf5Yy6XCIsNDQwMjIyOlwi5aeL5YW05Y6/XCIsNDQwMjI0Olwi5LuB5YyW5Y6/XCIsNDQwMjI5Olwi57+B5rqQ5Y6/XCIsNDQwMjMyOlwi5Lmz5rqQ55G25peP6Ieq5rK75Y6/XCIsNDQwMjMzOlwi5paw5Liw5Y6/XCIsNDQwMjgxOlwi5LmQ5piM5biCXCIsNDQwMjgyOlwi5Y2X6ZuE5biCXCJ9LDQ0MDMwMDp7NDQwMzAzOlwi572X5rmW5Yy6XCIsNDQwMzA0Olwi56aP55Sw5Yy6XCIsNDQwMzA1Olwi5Y2X5bGx5Yy6XCIsNDQwMzA2Olwi5a6d5a6J5Yy6XCIsNDQwMzA3Olwi6b6Z5bKX5Yy6XCIsNDQwMzA4Olwi55uQ55Sw5Yy6XCJ9LDQ0MDQwMDp7NDQwNDAyOlwi6aaZ5rSy5Yy6XCIsNDQwNDAzOlwi5paX6Zeo5Yy6XCIsNDQwNDA0Olwi6YeR5rm+5Yy6XCJ9LDQ0MDUwMDp7NDQwNTA3Olwi6b6Z5rmW5Yy6XCIsNDQwNTExOlwi6YeR5bmz5Yy6XCIsNDQwNTEyOlwi5r+g5rGf5Yy6XCIsNDQwNTEzOlwi5r2u6Ziz5Yy6XCIsNDQwNTE0Olwi5r2u5Y2X5Yy6XCIsNDQwNTE1Olwi5r6E5rW35Yy6XCIsNDQwNTIzOlwi5Y2X5r6z5Y6/XCJ9LDQ0MDYwMDp7NDQwNjA0Olwi56aF5Z+O5Yy6XCIsNDQwNjA1Olwi5Y2X5rW35Yy6XCIsNDQwNjA2Olwi6aG65b635Yy6XCIsNDQwNjA3Olwi5LiJ5rC05Yy6XCIsNDQwNjA4Olwi6auY5piO5Yy6XCJ9LDQ0MDcwMDp7NDQwNzAzOlwi6JOs5rGf5Yy6XCIsNDQwNzA0Olwi5rGf5rW35Yy6XCIsNDQwNzA1Olwi5paw5Lya5Yy6XCIsNDQwNzgxOlwi5Y+w5bGx5biCXCIsNDQwNzgzOlwi5byA5bmz5biCXCIsNDQwNzg0Olwi6bmk5bGx5biCXCIsNDQwNzg1Olwi5oGp5bmz5biCXCJ9LDQ0MDgwMDp7NDQwODAyOlwi6LWk5Z2O5Yy6XCIsNDQwODAzOlwi6Zye5bGx5Yy6XCIsNDQwODA0Olwi5Z2h5aS05Yy6XCIsNDQwODExOlwi6bq756ug5Yy6XCIsNDQwODIzOlwi6YGC5rqq5Y6/XCIsNDQwODI1Olwi5b6Q6Ze75Y6/XCIsNDQwODgxOlwi5buJ5rGf5biCXCIsNDQwODgyOlwi6Zu35bee5biCXCIsNDQwODgzOlwi5ZC05bed5biCXCJ9LDQ0MDkwMDp7NDQwOTAyOlwi6IyC5Y2X5Yy6XCIsNDQwOTA0Olwi55S155m95Yy6XCIsNDQwOTgxOlwi6auY5bee5biCXCIsNDQwOTgyOlwi5YyW5bee5biCXCIsNDQwOTgzOlwi5L+h5a6c5biCXCJ9LDQ0MTIwMDp7NDQxMjAyOlwi56uv5bee5Yy6XCIsNDQxMjAzOlwi6byO5rmW5Yy6XCIsNDQxMjA0Olwi6auY6KaB5Yy6XCIsNDQxMjIzOlwi5bm/5a6B5Y6/XCIsNDQxMjI0Olwi5oCA6ZuG5Y6/XCIsNDQxMjI1Olwi5bCB5byA5Y6/XCIsNDQxMjI2Olwi5b635bqG5Y6/XCIsNDQxMjg0Olwi5Zub5Lya5biCXCJ9LDQ0MTMwMDp7NDQxMzAyOlwi5oOg5Z+O5Yy6XCIsNDQxMzAzOlwi5oOg6Ziz5Yy6XCIsNDQxMzIyOlwi5Y2a572X5Y6/XCIsNDQxMzIzOlwi5oOg5Lic5Y6/XCIsNDQxMzI0Olwi6b6Z6Zeo5Y6/XCJ9LDQ0MTQwMDp7NDQxNDAyOlwi5qKF5rGf5Yy6XCIsNDQxNDAzOlwi5qKF5Y6/5Yy6XCIsNDQxNDIyOlwi5aSn5Z+U5Y6/XCIsNDQxNDIzOlwi5Liw6aG65Y6/XCIsNDQxNDI0Olwi5LqU5Y2O5Y6/XCIsNDQxNDI2Olwi5bmz6L+c5Y6/XCIsNDQxNDI3Olwi6JWJ5bKt5Y6/XCIsNDQxNDgxOlwi5YW05a6B5biCXCJ9LDQ0MTUwMDp7NDQxNTAyOlwi5Z+O5Yy6XCIsNDQxNTIxOlwi5rW35Liw5Y6/XCIsNDQxNTIzOlwi6ZmG5rKz5Y6/XCIsNDQxNTgxOlwi6ZmG5Liw5biCXCJ9LDQ0MTYwMDp7NDQxNjAyOlwi5rqQ5Z+O5Yy6XCIsNDQxNjIxOlwi57Sr6YeR5Y6/XCIsNDQxNjIyOlwi6b6Z5bed5Y6/XCIsNDQxNjIzOlwi6L+e5bmz5Y6/XCIsNDQxNjI0Olwi5ZKM5bmz5Y6/XCIsNDQxNjI1Olwi5Lic5rqQ5Y6/XCJ9LDQ0MTcwMDp7NDQxNzAyOlwi5rGf5Z+O5Yy6XCIsNDQxNzA0Olwi6Ziz5Lic5Yy6XCIsNDQxNzIxOlwi6Ziz6KW/5Y6/XCIsNDQxNzgxOlwi6Ziz5pil5biCXCJ9LDQ0MTgwMDp7NDQxODAyOlwi5riF5Z+O5Yy6XCIsNDQxODAzOlwi5riF5paw5Yy6XCIsNDQxODIxOlwi5L2b5YaI5Y6/XCIsNDQxODIzOlwi6Ziz5bGx5Y6/XCIsNDQxODI1Olwi6L+e5bGx5aOu5peP55G25peP6Ieq5rK75Y6/XCIsNDQxODI2Olwi6L+e5Y2X55G25peP6Ieq5rK75Y6/XCIsNDQxODgxOlwi6Iux5b635biCXCIsNDQxODgyOlwi6L+e5bee5biCXCJ9LDQ0NTEwMDp7NDQ1MTAyOlwi5rmY5qGl5Yy6XCIsNDQ1MTAzOlwi5r2u5a6J5Yy6XCIsNDQ1MTIyOlwi6aW25bmz5Y6/XCJ9LDQ0NTIwMDp7NDQ1MjAyOlwi5qaV5Z+O5Yy6XCIsNDQ1MjAzOlwi5o+t5Lic5Yy6XCIsNDQ1MjIyOlwi5o+t6KW/5Y6/XCIsNDQ1MjI0Olwi5oOg5p2l5Y6/XCIsNDQ1MjgxOlwi5pmu5a6B5biCXCJ9LDQ0NTMwMDp7NDQ1MzAyOlwi5LqR5Z+O5Yy6XCIsNDQ1MzAzOlwi5LqR5a6J5Yy6XCIsNDQ1MzIxOlwi5paw5YW05Y6/XCIsNDQ1MzIyOlwi6YOB5Y2X5Y6/XCIsNDQ1MzgxOlwi572X5a6a5biCXCJ9LDQ1MDAwMDp7NDUwMTAwOlwi5Y2X5a6B5biCXCIsNDUwMjAwOlwi5p+z5bee5biCXCIsNDUwMzAwOlwi5qGC5p6X5biCXCIsNDUwNDAwOlwi5qKn5bee5biCXCIsNDUwNTAwOlwi5YyX5rW35biCXCIsNDUwNjAwOlwi6Ziy5Z+O5riv5biCXCIsNDUwNzAwOlwi6ZKm5bee5biCXCIsNDUwODAwOlwi6LS15riv5biCXCIsNDUwOTAwOlwi546J5p6X5biCXCIsNDUxMDAwOlwi55m+6Imy5biCXCIsNDUxMTAwOlwi6LS65bee5biCXCIsNDUxMjAwOlwi5rKz5rGg5biCXCIsNDUxMzAwOlwi5p2l5a6+5biCXCIsNDUxNDAwOlwi5bSH5bem5biCXCJ9LDQ1MDEwMDp7NDUwMTAyOlwi5YW05a6B5Yy6XCIsNDUwMTAzOlwi6Z2S56eA5Yy6XCIsNDUwMTA1Olwi5rGf5Y2X5Yy6XCIsNDUwMTA3Olwi6KW/5Lmh5aGY5Yy6XCIsNDUwMTA4Olwi6Imv5bqG5Yy6XCIsNDUwMTA5Olwi6YKV5a6B5Yy6XCIsNDUwMTEwOlwi5q2m6bij5Yy6XCIsNDUwMTIzOlwi6ZqG5a6J5Y6/XCIsNDUwMTI0Olwi6ams5bGx5Y6/XCIsNDUwMTI1Olwi5LiK5p6X5Y6/XCIsNDUwMTI2Olwi5a6+6Ziz5Y6/XCIsNDUwMTI3Olwi5qiq5Y6/XCJ9LDQ1MDIwMDp7NDUwMjAyOlwi5Z+O5Lit5Yy6XCIsNDUwMjAzOlwi6bG85bOw5Yy6XCIsNDUwMjA0Olwi5p+z5Y2X5Yy6XCIsNDUwMjA1Olwi5p+z5YyX5Yy6XCIsNDUwMjA2Olwi5p+z5rGf5Yy6XCIsNDUwMjIyOlwi5p+z5Z+O5Y6/XCIsNDUwMjIzOlwi6bm/5a+o5Y6/XCIsNDUwMjI0Olwi6J6N5a6J5Y6/XCIsNDUwMjI1Olwi6J6N5rC06IuX5peP6Ieq5rK75Y6/XCIsNDUwMjI2Olwi5LiJ5rGf5L6X5peP6Ieq5rK75Y6/XCJ9LDQ1MDMwMDp7NDUwMzAyOlwi56eA5bOw5Yy6XCIsNDUwMzAzOlwi5Y+g5b2p5Yy6XCIsNDUwMzA0Olwi6LGh5bGx5Yy6XCIsNDUwMzA1Olwi5LiD5pif5Yy6XCIsNDUwMzExOlwi6ZuB5bGx5Yy6XCIsNDUwMzEyOlwi5Li05qGC5Yy6XCIsNDUwMzIxOlwi6Ziz5pyU5Y6/XCIsNDUwMzIzOlwi54G15bed5Y6/XCIsNDUwMzI0Olwi5YWo5bee5Y6/XCIsNDUwMzI1Olwi5YW05a6J5Y6/XCIsNDUwMzI2Olwi5rC456aP5Y6/XCIsNDUwMzI3Olwi54GM6Ziz5Y6/XCIsNDUwMzI4Olwi6b6Z6IOc5ZCE5peP6Ieq5rK75Y6/XCIsNDUwMzI5Olwi6LWE5rqQ5Y6/XCIsNDUwMzMwOlwi5bmz5LmQ5Y6/XCIsNDUwMzMxOlwi6I2U5rWm5Y6/XCIsNDUwMzMyOlwi5oGt5Z+O55G25peP6Ieq5rK75Y6/XCJ9LDQ1MDQwMDp7NDUwNDAzOlwi5LiH56eA5Yy6XCIsNDUwNDA1Olwi6ZW/5rSy5Yy6XCIsNDUwNDA2Olwi6b6Z5Zyp5Yy6XCIsNDUwNDIxOlwi6IuN5qKn5Y6/XCIsNDUwNDIyOlwi6Jek5Y6/XCIsNDUwNDIzOlwi6JKZ5bGx5Y6/XCIsNDUwNDgxOlwi5bKR5rqq5biCXCJ9LDQ1MDUwMDp7NDUwNTAyOlwi5rW35Z+O5Yy6XCIsNDUwNTAzOlwi6ZO25rW35Yy6XCIsNDUwNTEyOlwi6ZOB5bGx5riv5Yy6XCIsNDUwNTIxOlwi5ZCI5rWm5Y6/XCJ9LDQ1MDYwMDp7NDUwNjAyOlwi5riv5Y+j5Yy6XCIsNDUwNjAzOlwi6Ziy5Z+O5Yy6XCIsNDUwNjIxOlwi5LiK5oCd5Y6/XCIsNDUwNjgxOlwi5Lic5YW05biCXCJ9LDQ1MDcwMDp7NDUwNzAyOlwi6ZKm5Y2X5Yy6XCIsNDUwNzAzOlwi6ZKm5YyX5Yy6XCIsNDUwNzIxOlwi54G15bGx5Y6/XCIsNDUwNzIyOlwi5rWm5YyX5Y6/XCJ9LDQ1MDgwMDp7NDUwODAyOlwi5riv5YyX5Yy6XCIsNDUwODAzOlwi5riv5Y2X5Yy6XCIsNDUwODA0Olwi6KaD5aGY5Yy6XCIsNDUwODIxOlwi5bmz5Y2X5Y6/XCIsNDUwODgxOlwi5qGC5bmz5biCXCJ9LDQ1MDkwMDp7NDUwOTAyOlwi546J5bee5Yy6XCIsNDUwOTAzOlwi56aP57u15Yy6XCIsNDUwOTIxOlwi5a655Y6/XCIsNDUwOTIyOlwi6ZmG5bed5Y6/XCIsNDUwOTIzOlwi5Y2a55m95Y6/XCIsNDUwOTI0Olwi5YW05Lia5Y6/XCIsNDUwOTgxOlwi5YyX5rWB5biCXCJ9LDQ1MTAwMDp7NDUxMDAyOlwi5Y+z5rGf5Yy6XCIsNDUxMDIxOlwi55Sw6Ziz5Y6/XCIsNDUxMDIyOlwi55Sw5Lic5Y6/XCIsNDUxMDIzOlwi5bmz5p6c5Y6/XCIsNDUxMDI0Olwi5b635L+d5Y6/XCIsNDUxMDI2Olwi6YKj5Z2h5Y6/XCIsNDUxMDI3Olwi5YeM5LqR5Y6/XCIsNDUxMDI4Olwi5LmQ5Lia5Y6/XCIsNDUxMDI5Olwi55Sw5p6X5Y6/XCIsNDUxMDMwOlwi6KW/5p6X5Y6/XCIsNDUxMDMxOlwi6ZqG5p6X5ZCE5peP6Ieq5rK75Y6/XCIsNDUxMDgxOlwi6Z2W6KW/5biCXCJ9LDQ1MTEwMDp7NDUxMTAyOlwi5YWr5q2l5Yy6XCIsNDUxMTAzOlwi5bmz5qGC5Yy6XCIsNDUxMTIxOlwi5pit5bmz5Y6/XCIsNDUxMTIyOlwi6ZKf5bGx5Y6/XCIsNDUxMTIzOlwi5a+M5bed55G25peP6Ieq5rK75Y6/XCJ9LDQ1MTIwMDp7NDUxMjAyOlwi6YeR5Z+O5rGf5Yy6XCIsNDUxMjIxOlwi5Y2X5Li55Y6/XCIsNDUxMjIyOlwi5aSp5bOo5Y6/XCIsNDUxMjIzOlwi5Yek5bGx5Y6/XCIsNDUxMjI0Olwi5Lic5YWw5Y6/XCIsNDUxMjI1Olwi572X5Z+O5Lur5L2s5peP6Ieq5rK75Y6/XCIsNDUxMjI2Olwi546v5rGf5q+b5Y2X5peP6Ieq5rK75Y6/XCIsNDUxMjI3Olwi5be06ams55G25peP6Ieq5rK75Y6/XCIsNDUxMjI4Olwi6YO95a6J55G25peP6Ieq5rK75Y6/XCIsNDUxMjI5Olwi5aSn5YyW55G25peP6Ieq5rK75Y6/XCIsNDUxMjgxOlwi5a6c5bee5biCXCJ9LDQ1MTMwMDp7NDUxMzAyOlwi5YW05a6+5Yy6XCIsNDUxMzIxOlwi5b+75Z+O5Y6/XCIsNDUxMzIyOlwi6LGh5bee5Y6/XCIsNDUxMzIzOlwi5q2m5a6j5Y6/XCIsNDUxMzI0Olwi6YeR56eA55G25peP6Ieq5rK75Y6/XCIsNDUxMzgxOlwi5ZCI5bGx5biCXCJ9LDQ1MTQwMDp7NDUxNDAyOlwi5rGf5bee5Yy6XCIsNDUxNDIxOlwi5om257ul5Y6/XCIsNDUxNDIyOlwi5a6B5piO5Y6/XCIsNDUxNDIzOlwi6b6Z5bee5Y6/XCIsNDUxNDI0Olwi5aSn5paw5Y6/XCIsNDUxNDI1Olwi5aSp562J5Y6/XCIsNDUxNDgxOlwi5Yet56Wl5biCXCJ9LDQ2MDAwMDp7NDYwMTAwOlwi5rW35Y+j5biCXCIsNDYwMjAwOlwi5LiJ5Lqa5biCXCIsNDYwMzAwOlwi5LiJ5rKZ5biCXCIsNDYwNDAwOlwi5YSL5bee5biCXCIsNDY5MDAxOlwi5LqU5oyH5bGx5biCXCIsNDY5MDAyOlwi55C85rW35biCXCIsNDY5MDA1Olwi5paH5piM5biCXCIsNDY5MDA2Olwi5LiH5a6B5biCXCIsNDY5MDA3Olwi5Lic5pa55biCXCIsNDY5MDIxOlwi5a6a5a6J5Y6/XCIsNDY5MDIyOlwi5bGv5piM5Y6/XCIsNDY5MDIzOlwi5r6E6L+I5Y6/XCIsNDY5MDI0Olwi5Li06auY5Y6/XCIsNDY5MDI1Olwi55m95rKZ6buO5peP6Ieq5rK75Y6/XCIsNDY5MDI2Olwi5piM5rGf6buO5peP6Ieq5rK75Y6/XCIsNDY5MDI3Olwi5LmQ5Lic6buO5peP6Ieq5rK75Y6/XCIsNDY5MDI4Olwi6Zm15rC06buO5peP6Ieq5rK75Y6/XCIsNDY5MDI5Olwi5L+d5Lqt6buO5peP6IuX5peP6Ieq5rK75Y6/XCIsNDY5MDMwOlwi55C85Lit6buO5peP6IuX5peP6Ieq5rK75Y6/XCJ9LDQ2MDEwMDp7NDYwMTA1Olwi56eA6Iux5Yy6XCIsNDYwMTA2Olwi6b6Z5Y2O5Yy6XCIsNDYwMTA3Olwi55C85bGx5Yy6XCIsNDYwMTA4Olwi576O5YWw5Yy6XCJ9LDQ2MDIwMDp7NDYwMjAyOlwi5rW35qOg5Yy6XCIsNDYwMjAzOlwi5ZCJ6Ziz5Yy6XCIsNDYwMjA0Olwi5aSp5rav5Yy6XCIsNDYwMjA1Olwi5bSW5bee5Yy6XCJ9LDUwMDAwMDp7NTAwMTAwOlwi5biC6L6W5Yy6XCIsNTAwMjAwOlwi5Y6/XCJ9LDUwMDEwMDp7NTAwMTAxOlwi5LiH5bee5Yy6XCIsNTAwMTAyOlwi5raq6Zm15Yy6XCIsNTAwMTAzOlwi5rid5Lit5Yy6XCIsNTAwMTA0Olwi5aSn5rih5Y+j5Yy6XCIsNTAwMTA1Olwi5rGf5YyX5Yy6XCIsNTAwMTA2Olwi5rKZ5Z2q5Z2d5Yy6XCIsNTAwMTA3Olwi5Lmd6b6Z5Z2h5Yy6XCIsNTAwMTA4Olwi5Y2X5bK45Yy6XCIsNTAwMTA5Olwi5YyX56Ka5Yy6XCIsNTAwMTEwOlwi57am5rGf5Yy6XCIsNTAwMTExOlwi5aSn6Laz5Yy6XCIsNTAwMTEyOlwi5rid5YyX5Yy6XCIsNTAwMTEzOlwi5be05Y2X5Yy6XCIsNTAwMTE0Olwi6buU5rGf5Yy6XCIsNTAwMTE1Olwi6ZW/5a+/5Yy6XCIsNTAwMTE2Olwi5rGf5rSl5Yy6XCIsNTAwMTE3Olwi5ZCI5bed5Yy6XCIsNTAwMTE4Olwi5rC45bed5Yy6XCIsNTAwMTE5Olwi5Y2X5bed5Yy6XCIsNTAwMTIwOlwi55Kn5bGx5Yy6XCIsNTAwMTUxOlwi6ZOc5qKB5Yy6XCIsNTAwMTUyOlwi5r285Y2X5Yy6XCIsNTAwMTUzOlwi6I2j5piM5Yy6XCIsNTAwMTU0Olwi5byA5bee5Yy6XCJ9LDUwMDIwMDp7NTAwMjI4Olwi5qKB5bmz5Y6/XCIsNTAwMjI5Olwi5Z+O5Y+j5Y6/XCIsNTAwMjMwOlwi5Liw6YO95Y6/XCIsNTAwMjMxOlwi5Z6r5rGf5Y6/XCIsNTAwMjMyOlwi5q2m6ZqG5Y6/XCIsNTAwMjMzOlwi5b+g5Y6/XCIsNTAwMjM1Olwi5LqR6Ziz5Y6/XCIsNTAwMjM2Olwi5aWJ6IqC5Y6/XCIsNTAwMjM3Olwi5ber5bGx5Y6/XCIsNTAwMjM4Olwi5ber5rqq5Y6/XCIsNTAwMjQwOlwi55+z5p+x5Zyf5a625peP6Ieq5rK75Y6/XCIsNTAwMjQxOlwi56eA5bGx5Zyf5a625peP6IuX5peP6Ieq5rK75Y6/XCIsNTAwMjQyOlwi6YWJ6Ziz5Zyf5a625peP6IuX5peP6Ieq5rK75Y6/XCIsNTAwMjQzOlwi5b2t5rC06IuX5peP5Zyf5a625peP6Ieq5rK75Y6/XCJ9LDUxMDAwMDp7NTEwMTAwOlwi5oiQ6YO95biCXCIsNTEwMzAwOlwi6Ieq6LSh5biCXCIsNTEwNDAwOlwi5pSA5p6d6Iqx5biCXCIsNTEwNTAwOlwi5rO45bee5biCXCIsNTEwNjAwOlwi5b636Ziz5biCXCIsNTEwNzAwOlwi57u16Ziz5biCXCIsNTEwODAwOlwi5bm/5YWD5biCXCIsNTEwOTAwOlwi6YGC5a6B5biCXCIsNTExMDAwOlwi5YaF5rGf5biCXCIsNTExMTAwOlwi5LmQ5bGx5biCXCIsNTExMzAwOlwi5Y2X5YWF5biCXCIsNTExNDAwOlwi55yJ5bGx5biCXCIsNTExNTAwOlwi5a6c5a6+5biCXCIsNTExNjAwOlwi5bm/5a6J5biCXCIsNTExNzAwOlwi6L6+5bee5biCXCIsNTExODAwOlwi6ZuF5a6J5biCXCIsNTExOTAwOlwi5be05Lit5biCXCIsNTEyMDAwOlwi6LWE6Ziz5biCXCIsNTEzMjAwOlwi6Zi/5Z2d6JeP5peP576M5peP6Ieq5rK75beeXCIsNTEzMzAwOlwi55SY5a2c6JeP5peP6Ieq5rK75beeXCIsNTEzNDAwOlwi5YeJ5bGx5b2d5peP6Ieq5rK75beeXCJ9LDUxMDEwMDp7NTEwMTA0Olwi6ZSm5rGf5Yy6XCIsNTEwMTA1Olwi6Z2S576K5Yy6XCIsNTEwMTA2Olwi6YeR54mb5Yy6XCIsNTEwMTA3Olwi5q2m5L6v5Yy6XCIsNTEwMTA4Olwi5oiQ5Y2O5Yy6XCIsNTEwMTEyOlwi6b6Z5rOJ6am/5Yy6XCIsNTEwMTEzOlwi6Z2S55m95rGf5Yy6XCIsNTEwMTE0Olwi5paw6YO95Yy6XCIsNTEwMTE1Olwi5rip5rGf5Yy6XCIsNTEwMTE2Olwi5Y+M5rWB5Yy6XCIsNTEwMTIxOlwi6YeR5aCC5Y6/XCIsNTEwMTI0Olwi6YOr5Y6/XCIsNTEwMTI5Olwi5aSn6YKR5Y6/XCIsNTEwMTMxOlwi6JKy5rGf5Y6/XCIsNTEwMTMyOlwi5paw5rSl5Y6/XCIsNTEwMTgxOlwi6YO95rGf5aCw5biCXCIsNTEwMTgyOlwi5b2t5bee5biCXCIsNTEwMTgzOlwi6YKb5bSD5biCXCIsNTEwMTg0Olwi5bSH5bee5biCXCIsNTEwMTg1Olwi566A6Ziz5biCXCJ9LDUxMDMwMDp7NTEwMzAyOlwi6Ieq5rWB5LqV5Yy6XCIsNTEwMzAzOlwi6LSh5LqV5Yy6XCIsNTEwMzA0Olwi5aSn5a6J5Yy6XCIsNTEwMzExOlwi5rK/5rup5Yy6XCIsNTEwMzIxOlwi6I2j5Y6/XCIsNTEwMzIyOlwi5a+M6aG65Y6/XCJ9LDUxMDQwMDp7NTEwNDAyOlwi5Lic5Yy6XCIsNTEwNDAzOlwi6KW/5Yy6XCIsNTEwNDExOlwi5LuB5ZKM5Yy6XCIsNTEwNDIxOlwi57Gz5piT5Y6/XCIsNTEwNDIyOlwi55uQ6L655Y6/XCJ9LDUxMDUwMDp7NTEwNTAyOlwi5rGf6Ziz5Yy6XCIsNTEwNTAzOlwi57qz5rqq5Yy6XCIsNTEwNTA0Olwi6b6Z6ams5r2t5Yy6XCIsNTEwNTIxOlwi5rO45Y6/XCIsNTEwNTIyOlwi5ZCI5rGf5Y6/XCIsNTEwNTI0Olwi5Y+Z5rC45Y6/XCIsNTEwNTI1Olwi5Y+k6JS65Y6/XCJ9LDUxMDYwMDp7NTEwNjAzOlwi5peM6Ziz5Yy6XCIsNTEwNjIzOlwi5Lit5rGf5Y6/XCIsNTEwNjI2Olwi572X5rGf5Y6/XCIsNTEwNjgxOlwi5bm/5rGJ5biCXCIsNTEwNjgyOlwi5LuA6YKh5biCXCIsNTEwNjgzOlwi57u156u55biCXCJ9LDUxMDcwMDp7NTEwNzAzOlwi5raq5Z+O5Yy6XCIsNTEwNzA0Olwi5ri45LuZ5Yy6XCIsNTEwNzA1Olwi5a6J5bee5Yy6XCIsNTEwNzIyOlwi5LiJ5Y+w5Y6/XCIsNTEwNzIzOlwi55uQ5Lqt5Y6/XCIsNTEwNzI1Olwi5qKT5r285Y6/XCIsNTEwNzI2Olwi5YyX5bed576M5peP6Ieq5rK75Y6/XCIsNTEwNzI3Olwi5bmz5q2m5Y6/XCIsNTEwNzgxOlwi5rGf5rK55biCXCJ9LDUxMDgwMDp7NTEwODAyOlwi5Yip5bee5Yy6XCIsNTEwODExOlwi5pit5YyW5Yy6XCIsNTEwODEyOlwi5pyd5aSp5Yy6XCIsNTEwODIxOlwi5pe66IuN5Y6/XCIsNTEwODIyOlwi6Z2S5bed5Y6/XCIsNTEwODIzOlwi5YmR6ZiB5Y6/XCIsNTEwODI0Olwi6IuN5rqq5Y6/XCJ9LDUxMDkwMDp7NTEwOTAzOlwi6Ii55bGx5Yy6XCIsNTEwOTA0Olwi5a6J5bGF5Yy6XCIsNTEwOTIxOlwi6JOs5rqq5Y6/XCIsNTEwOTIyOlwi5bCE5rSq5Y6/XCIsNTEwOTIzOlwi5aSn6Iux5Y6/XCJ9LDUxMTAwMDp7NTExMDAyOlwi5biC5Lit5Yy6XCIsNTExMDExOlwi5Lic5YW05Yy6XCIsNTExMDI0Olwi5aiB6L+c5Y6/XCIsNTExMDI1Olwi6LWE5Lit5Y6/XCIsNTExMDI4Olwi6ZqG5piM5Y6/XCJ9LDUxMTEwMDp7NTExMTAyOlwi5biC5Lit5Yy6XCIsNTExMTExOlwi5rKZ5rm+5Yy6XCIsNTExMTEyOlwi5LqU6YCa5qGl5Yy6XCIsNTExMTEzOlwi6YeR5Y+j5rKz5Yy6XCIsNTExMTIzOlwi54qN5Li65Y6/XCIsNTExMTI0Olwi5LqV56CU5Y6/XCIsNTExMTI2Olwi5aS55rGf5Y6/XCIsNTExMTI5Olwi5rKQ5bed5Y6/XCIsNTExMTMyOlwi5bOo6L655b2d5peP6Ieq5rK75Y6/XCIsNTExMTMzOlwi6ams6L655b2d5peP6Ieq5rK75Y6/XCIsNTExMTgxOlwi5bOo55yJ5bGx5biCXCJ9LDUxMTMwMDp7NTExMzAyOlwi6aG65bqG5Yy6XCIsNTExMzAzOlwi6auY5Z2q5Yy6XCIsNTExMzA0Olwi5ZiJ6Zm15Yy6XCIsNTExMzIxOlwi5Y2X6YOo5Y6/XCIsNTExMzIyOlwi6JCl5bGx5Y6/XCIsNTExMzIzOlwi6JOs5a6J5Y6/XCIsNTExMzI0Olwi5Luq6ZmH5Y6/XCIsNTExMzI1Olwi6KW/5YWF5Y6/XCIsNTExMzgxOlwi6ZiG5Lit5biCXCJ9LDUxMTQwMDp7NTExNDAyOlwi5Lic5Z2h5Yy6XCIsNTExNDAzOlwi5b2t5bGx5Yy6XCIsNTExNDIxOlwi5LuB5a+/5Y6/XCIsNTExNDIzOlwi5rSq6ZuF5Y6/XCIsNTExNDI0Olwi5Li55qOx5Y6/XCIsNTExNDI1Olwi6Z2S56We5Y6/XCJ9LDUxMTUwMDp7NTExNTAyOlwi57+g5bGP5Yy6XCIsNTExNTAzOlwi5Y2X5rqq5Yy6XCIsNTExNTIxOlwi5a6c5a6+5Y6/XCIsNTExNTIzOlwi5rGf5a6J5Y6/XCIsNTExNTI0Olwi6ZW/5a6B5Y6/XCIsNTExNTI1Olwi6auY5Y6/XCIsNTExNTI2Olwi54+Z5Y6/XCIsNTExNTI3Olwi562g6L+e5Y6/XCIsNTExNTI4Olwi5YW05paH5Y6/XCIsNTExNTI5Olwi5bGP5bGx5Y6/XCJ9LDUxMTYwMDp7NTExNjAyOlwi5bm/5a6J5Yy6XCIsNTExNjAzOlwi5YmN6ZSL5Yy6XCIsNTExNjIxOlwi5bKz5rGg5Y6/XCIsNTExNjIyOlwi5q2m6IOc5Y6/XCIsNTExNjIzOlwi6YK75rC05Y6/XCIsNTExNjgxOlwi5Y2O6JOl5biCXCJ9LDUxMTcwMDp7NTExNzAyOlwi6YCa5bed5Yy6XCIsNTExNzAzOlwi6L6+5bed5Yy6XCIsNTExNzIyOlwi5a6j5rGJ5Y6/XCIsNTExNzIzOlwi5byA5rGf5Y6/XCIsNTExNzI0Olwi5aSn56u55Y6/XCIsNTExNzI1Olwi5rig5Y6/XCIsNTExNzgxOlwi5LiH5rqQ5biCXCJ9LDUxMTgwMDp7NTExODAyOlwi6Zuo5Z+O5Yy6XCIsNTExODAzOlwi5ZCN5bGx5Yy6XCIsNTExODIyOlwi6I2l57uP5Y6/XCIsNTExODIzOlwi5rGJ5rqQ5Y6/XCIsNTExODI0Olwi55+z5qOJ5Y6/XCIsNTExODI1Olwi5aSp5YWo5Y6/XCIsNTExODI2Olwi6Iqm5bGx5Y6/XCIsNTExODI3Olwi5a6d5YW05Y6/XCJ9LDUxMTkwMDp7NTExOTAyOlwi5be05bee5Yy6XCIsNTExOTAzOlwi5oGp6Ziz5Yy6XCIsNTExOTIxOlwi6YCa5rGf5Y6/XCIsNTExOTIyOlwi5Y2X5rGf5Y6/XCIsNTExOTIzOlwi5bmz5piM5Y6/XCJ9LDUxMjAwMDp7NTEyMDAyOlwi6ZuB5rGf5Yy6XCIsNTEyMDIxOlwi5a6J5bKz5Y6/XCIsNTEyMDIyOlwi5LmQ6Iez5Y6/XCJ9LDUxMzIwMDp7NTEzMjAxOlwi6ams5bCU5bq35biCXCIsNTEzMjIxOlwi5rG25bed5Y6/XCIsNTEzMjIyOlwi55CG5Y6/XCIsNTEzMjIzOlwi6IyC5Y6/XCIsNTEzMjI0Olwi5p2+5r2Y5Y6/XCIsNTEzMjI1Olwi5Lmd5a+o5rKf5Y6/XCIsNTEzMjI2Olwi6YeR5bed5Y6/XCIsNTEzMjI3Olwi5bCP6YeR5Y6/XCIsNTEzMjI4Olwi6buR5rC05Y6/XCIsNTEzMjMwOlwi5aOk5aGY5Y6/XCIsNTEzMjMxOlwi6Zi/5Z2d5Y6/XCIsNTEzMjMyOlwi6Iul5bCU55uW5Y6/XCIsNTEzMjMzOlwi57qi5Y6f5Y6/XCJ9LDUxMzMwMDp7NTEzMzAxOlwi5bq35a6a5biCXCIsNTEzMzIyOlwi5rO45a6a5Y6/XCIsNTEzMzIzOlwi5Li55be05Y6/XCIsNTEzMzI0Olwi5Lmd6b6Z5Y6/XCIsNTEzMzI1Olwi6ZuF5rGf5Y6/XCIsNTEzMzI2Olwi6YGT5a2a5Y6/XCIsNTEzMzI3Olwi54KJ6ZyN5Y6/XCIsNTEzMzI4Olwi55SY5a2c5Y6/XCIsNTEzMzI5Olwi5paw6b6Z5Y6/XCIsNTEzMzMwOlwi5b635qC85Y6/XCIsNTEzMzMxOlwi55m9546J5Y6/XCIsNTEzMzMyOlwi55+z5rig5Y6/XCIsNTEzMzMzOlwi6Imy6L6+5Y6/XCIsNTEzMzM0Olwi55CG5aGY5Y6/XCIsNTEzMzM1Olwi5be05aGY5Y6/XCIsNTEzMzM2Olwi5Lmh5Z+O5Y6/XCIsNTEzMzM3Olwi56i75Z+O5Y6/XCIsNTEzMzM4Olwi5b6X6I2j5Y6/XCJ9LDUxMzQwMDp7NTEzNDAxOlwi6KW/5piM5biCXCIsNTEzNDIyOlwi5pyo6YeM6JeP5peP6Ieq5rK75Y6/XCIsNTEzNDIzOlwi55uQ5rqQ5Y6/XCIsNTEzNDI0Olwi5b635piM5Y6/XCIsNTEzNDI1Olwi5Lya55CG5Y6/XCIsNTEzNDI2Olwi5Lya5Lic5Y6/XCIsNTEzNDI3Olwi5a6B5Y2X5Y6/XCIsNTEzNDI4Olwi5pmu5qC85Y6/XCIsNTEzNDI5Olwi5biD5ouW5Y6/XCIsNTEzNDMwOlwi6YeR6Ziz5Y6/XCIsNTEzNDMxOlwi5pit6KeJ5Y6/XCIsNTEzNDMyOlwi5Zac5b635Y6/XCIsNTEzNDMzOlwi5YaV5a6B5Y6/XCIsNTEzNDM0Olwi6LaK6KW/5Y6/XCIsNTEzNDM1Olwi55SY5rSb5Y6/XCIsNTEzNDM2Olwi576O5aeR5Y6/XCIsNTEzNDM3Olwi6Zu35rOi5Y6/XCJ9LDUyMDAwMDp7NTIwMTAwOlwi6LS16Ziz5biCXCIsNTIwMjAwOlwi5YWt55uY5rC05biCXCIsNTIwMzAwOlwi6YG15LmJ5biCXCIsNTIwNDAwOlwi5a6J6aG65biCXCIsNTIwNTAwOlwi5q+V6IqC5biCXCIsNTIwNjAwOlwi6ZOc5LuB5biCXCIsNTIyMzAwOlwi6buU6KW/5Y2X5biD5L6d5peP6IuX5peP6Ieq5rK75beeXCIsNTIyNjAwOlwi6buU5Lic5Y2X6IuX5peP5L6X5peP6Ieq5rK75beeXCIsNTIyNzAwOlwi6buU5Y2X5biD5L6d5peP6IuX5peP6Ieq5rK75beeXCJ9LDUyMDEwMDp7NTIwMTAyOlwi5Y2X5piO5Yy6XCIsNTIwMTAzOlwi5LqR5bKp5Yy6XCIsNTIwMTExOlwi6Iqx5rqq5Yy6XCIsNTIwMTEyOlwi5LmM5b2T5Yy6XCIsNTIwMTEzOlwi55m95LqR5Yy6XCIsNTIwMTE1Olwi6KeC5bGx5rmW5Yy6XCIsNTIwMTIxOlwi5byA6Ziz5Y6/XCIsNTIwMTIyOlwi5oGv54O95Y6/XCIsNTIwMTIzOlwi5L+u5paH5Y6/XCIsNTIwMTgxOlwi5riF6ZWH5biCXCJ9LDUyMDIwMDp7NTIwMjAxOlwi6ZKf5bGx5Yy6XCIsNTIwMjAzOlwi5YWt5p6d54m55Yy6XCIsNTIwMjIxOlwi5rC05Z+O5Y6/XCIsNTIwMjIyOlwi55uY5Y6/XCJ9LDUyMDMwMDp7NTIwMzAyOlwi57qi6Iqx5bKX5Yy6XCIsNTIwMzAzOlwi5rGH5bed5Yy6XCIsNTIwMzA0Olwi5pKt5bee5Yy6XCIsNTIwMzIyOlwi5qGQ5qKT5Y6/XCIsNTIwMzIzOlwi57ul6Ziz5Y6/XCIsNTIwMzI0Olwi5q2j5a6J5Y6/XCIsNTIwMzI1Olwi6YGT55yf5Luh5L2s5peP6IuX5peP6Ieq5rK75Y6/XCIsNTIwMzI2Olwi5Yqh5bed5Luh5L2s5peP6IuX5peP6Ieq5rK75Y6/XCIsNTIwMzI3Olwi5Yek5YaI5Y6/XCIsNTIwMzI4Olwi5rmE5r2t5Y6/XCIsNTIwMzI5Olwi5L2Z5bqG5Y6/XCIsNTIwMzMwOlwi5Lmg5rC05Y6/XCIsNTIwMzgxOlwi6LWk5rC05biCXCIsNTIwMzgyOlwi5LuB5oCA5biCXCJ9LDUyMDQwMDp7NTIwNDAyOlwi6KW/56eA5Yy6XCIsNTIwNDAzOlwi5bmz5Z2d5Yy6XCIsNTIwNDIyOlwi5pmu5a6a5Y6/XCIsNTIwNDIzOlwi6ZWH5a6B5biD5L6d5peP6IuX5peP6Ieq5rK75Y6/XCIsNTIwNDI0Olwi5YWz5bKt5biD5L6d5peP6IuX5peP6Ieq5rK75Y6/XCIsNTIwNDI1Olwi57Sr5LqR6IuX5peP5biD5L6d5peP6Ieq5rK75Y6/XCJ9LDUyMDUwMDp7NTIwNTAyOlwi5LiD5pif5YWz5Yy6XCIsNTIwNTIxOlwi5aSn5pa55Y6/XCIsNTIwNTIyOlwi6buU6KW/5Y6/XCIsNTIwNTIzOlwi6YeR5rKZ5Y6/XCIsNTIwNTI0Olwi57uH6YeR5Y6/XCIsNTIwNTI1Olwi57qz6ZuN5Y6/XCIsNTIwNTI2Olwi5aiB5a6B5b2d5peP5Zue5peP6IuX5peP6Ieq5rK75Y6/XCIsNTIwNTI3Olwi6LWr56ug5Y6/XCJ9LDUyMDYwMDp7NTIwNjAyOlwi56Kn5rGf5Yy6XCIsNTIwNjAzOlwi5LiH5bGx5Yy6XCIsNTIwNjIxOlwi5rGf5Y+j5Y6/XCIsNTIwNjIyOlwi546J5bGP5L6X5peP6Ieq5rK75Y6/XCIsNTIwNjIzOlwi55+z6Zih5Y6/XCIsNTIwNjI0Olwi5oCd5Y2X5Y6/XCIsNTIwNjI1Olwi5Y2w5rGf5Zyf5a625peP6IuX5peP6Ieq5rK75Y6/XCIsNTIwNjI2Olwi5b635rGf5Y6/XCIsNTIwNjI3Olwi5rK/5rKz5Zyf5a625peP6Ieq5rK75Y6/XCIsNTIwNjI4Olwi5p2+5qGD6IuX5peP6Ieq5rK75Y6/XCJ9LDUyMjMwMDp7NTIyMzAxOlwi5YW05LmJ5biCXCIsNTIyMzIyOlwi5YW05LuB5Y6/XCIsNTIyMzIzOlwi5pmu5a6J5Y6/XCIsNTIyMzI0Olwi5pm06ZqG5Y6/XCIsNTIyMzI1Olwi6LSe5Liw5Y6/XCIsNTIyMzI2Olwi5pyb6LCf5Y6/XCIsNTIyMzI3Olwi5YaM5Lqo5Y6/XCIsNTIyMzI4Olwi5a6J6b6Z5Y6/XCJ9LDUyMjYwMDp7NTIyNjAxOlwi5Yev6YeM5biCXCIsNTIyNjIyOlwi6buE5bmz5Y6/XCIsNTIyNjIzOlwi5pa956eJ5Y6/XCIsNTIyNjI0Olwi5LiJ56mX5Y6/XCIsNTIyNjI1Olwi6ZWH6L+c5Y6/XCIsNTIyNjI2Olwi5bKR5bep5Y6/XCIsNTIyNjI3Olwi5aSp5p+x5Y6/XCIsNTIyNjI4Olwi6ZSm5bGP5Y6/XCIsNTIyNjI5Olwi5YmR5rKz5Y6/XCIsNTIyNjMwOlwi5Y+w5rGf5Y6/XCIsNTIyNjMxOlwi6buO5bmz5Y6/XCIsNTIyNjMyOlwi5qaV5rGf5Y6/XCIsNTIyNjMzOlwi5LuO5rGf5Y6/XCIsNTIyNjM0Olwi6Zu35bGx5Y6/XCIsNTIyNjM1Olwi6bq75rGf5Y6/XCIsNTIyNjM2Olwi5Li55a+o5Y6/XCJ9LDUyMjcwMDp7NTIyNzAxOlwi6YO95YyA5biCXCIsNTIyNzAyOlwi56aP5rOJ5biCXCIsNTIyNzIyOlwi6I2U5rOi5Y6/XCIsNTIyNzIzOlwi6LS15a6a5Y6/XCIsNTIyNzI1Olwi55Ou5a6J5Y6/XCIsNTIyNzI2Olwi54us5bGx5Y6/XCIsNTIyNzI3Olwi5bmz5aGY5Y6/XCIsNTIyNzI4Olwi572X55S45Y6/XCIsNTIyNzI5Olwi6ZW/6aG65Y6/XCIsNTIyNzMwOlwi6b6Z6YeM5Y6/XCIsNTIyNzMxOlwi5oOg5rC05Y6/XCIsNTIyNzMyOlwi5LiJ6YO95rC05peP6Ieq5rK75Y6/XCJ9LDUzMDAwMDp7NTMwMTAwOlwi5piG5piO5biCXCIsNTMwMzAwOlwi5puy6Z2W5biCXCIsNTMwNDAwOlwi546J5rqq5biCXCIsNTMwNTAwOlwi5L+d5bGx5biCXCIsNTMwNjAwOlwi5pit6YCa5biCXCIsNTMwNzAwOlwi5Li95rGf5biCXCIsNTMwODAwOlwi5pmu5rSx5biCXCIsNTMwOTAwOlwi5Li05rKn5biCXCIsNTMyMzAwOlwi5qWa6ZuE5b2d5peP6Ieq5rK75beeXCIsNTMyNTAwOlwi57qi5rKz5ZOI5bC85peP5b2d5peP6Ieq5rK75beeXCIsNTMyNjAwOlwi5paH5bGx5aOu5peP6IuX5peP6Ieq5rK75beeXCIsNTMyODAwOlwi6KW/5Y+M54mI57qz5YKj5peP6Ieq5rK75beeXCIsNTMyOTAwOlwi5aSn55CG55m95peP6Ieq5rK75beeXCIsNTMzMTAwOlwi5b635a6P5YKj5peP5pmv6aKH5peP6Ieq5rK75beeXCIsNTMzMzAwOlwi5oCS5rGf5YKI5YOz5peP6Ieq5rK75beeXCIsNTMzNDAwOlwi6L+q5bqG6JeP5peP6Ieq5rK75beeXCJ9LDUzMDEwMDp7NTMwMTAyOlwi5LqU5Y2O5Yy6XCIsNTMwMTAzOlwi55uY6b6Z5Yy6XCIsNTMwMTExOlwi5a6Y5rih5Yy6XCIsNTMwMTEyOlwi6KW/5bGx5Yy6XCIsNTMwMTEzOlwi5Lic5bed5Yy6XCIsNTMwMTE0Olwi5ZGI6LSh5Yy6XCIsNTMwMTIyOlwi5pmL5a6B5Y6/XCIsNTMwMTI0Olwi5a+M5rCR5Y6/XCIsNTMwMTI1Olwi5a6c6Imv5Y6/XCIsNTMwMTI2Olwi55+z5p6X5b2d5peP6Ieq5rK75Y6/XCIsNTMwMTI3Olwi5bWp5piO5Y6/XCIsNTMwMTI4Olwi56aE5Yqd5b2d5peP6IuX5peP6Ieq5rK75Y6/XCIsNTMwMTI5Olwi5a+755S45Zue5peP5b2d5peP6Ieq5rK75Y6/XCIsNTMwMTgxOlwi5a6J5a6B5biCXCJ9LDUzMDMwMDp7NTMwMzAyOlwi6bqS6bqf5Yy6XCIsNTMwMzAzOlwi5rK+55uK5Yy6XCIsNTMwMzIxOlwi6ams6b6Z5Y6/XCIsNTMwMzIyOlwi6ZmG6Imv5Y6/XCIsNTMwMzIzOlwi5biI5a6X5Y6/XCIsNTMwMzI0Olwi572X5bmz5Y6/XCIsNTMwMzI1Olwi5a+M5rqQ5Y6/XCIsNTMwMzI2Olwi5Lya5rO95Y6/XCIsNTMwMzgxOlwi5a6j5aiB5biCXCJ9LDUzMDQwMDp7NTMwNDAyOlwi57qi5aGU5Yy6XCIsNTMwNDAzOlwi5rGf5bed5Yy6XCIsNTMwNDIyOlwi5r6E5rGf5Y6/XCIsNTMwNDIzOlwi6YCa5rW35Y6/XCIsNTMwNDI0Olwi5Y2O5a6B5Y6/XCIsNTMwNDI1Olwi5piT6Zeo5Y6/XCIsNTMwNDI2Olwi5bOo5bGx5b2d5peP6Ieq5rK75Y6/XCIsNTMwNDI3Olwi5paw5bmz5b2d5peP5YKj5peP6Ieq5rK75Y6/XCIsNTMwNDI4Olwi5YWD5rGf5ZOI5bC85peP5b2d5peP5YKj5peP6Ieq5rK75Y6/XCJ9LDUzMDUwMDp7NTMwNTAyOlwi6ZqG6Ziz5Yy6XCIsNTMwNTIxOlwi5pa955S45Y6/XCIsNTMwNTIzOlwi6b6Z6Zm15Y6/XCIsNTMwNTI0Olwi5piM5a6B5Y6/XCIsNTMwNTgxOlwi6IW+5Yay5biCXCJ9LDUzMDYwMDp7NTMwNjAyOlwi5pit6Ziz5Yy6XCIsNTMwNjIxOlwi6bKB55S45Y6/XCIsNTMwNjIyOlwi5ben5a625Y6/XCIsNTMwNjIzOlwi55uQ5rSl5Y6/XCIsNTMwNjI0Olwi5aSn5YWz5Y6/XCIsNTMwNjI1Olwi5rC45ZaE5Y6/XCIsNTMwNjI2Olwi57ul5rGf5Y6/XCIsNTMwNjI3Olwi6ZWH6ZuE5Y6/XCIsNTMwNjI4Olwi5b2d6Imv5Y6/XCIsNTMwNjI5Olwi5aiB5L+h5Y6/XCIsNTMwNjMwOlwi5rC05a+M5Y6/XCJ9LDUzMDcwMDp7NTMwNzAyOlwi5Y+k5Z+O5Yy6XCIsNTMwNzIxOlwi546J6b6Z57qz6KW/5peP6Ieq5rK75Y6/XCIsNTMwNzIyOlwi5rC46IOc5Y6/XCIsNTMwNzIzOlwi5Y2O5Z2q5Y6/XCIsNTMwNzI0Olwi5a6B6JKX5b2d5peP6Ieq5rK75Y6/XCJ9LDUzMDgwMDp7NTMwODAyOlwi5oCd6IyF5Yy6XCIsNTMwODIxOlwi5a6B5rSx5ZOI5bC85peP5b2d5peP6Ieq5rK75Y6/XCIsNTMwODIyOlwi5aKo5rGf5ZOI5bC85peP6Ieq5rK75Y6/XCIsNTMwODIzOlwi5pmv5Lic5b2d5peP6Ieq5rK75Y6/XCIsNTMwODI0Olwi5pmv6LC35YKj5peP5b2d5peP6Ieq5rK75Y6/XCIsNTMwODI1Olwi6ZWH5rKF5b2d5peP5ZOI5bC85peP5ouJ56Wc5peP6Ieq5rK75Y6/XCIsNTMwODI2Olwi5rGf5Z+O5ZOI5bC85peP5b2d5peP6Ieq5rK75Y6/XCIsNTMwODI3Olwi5a2f6L+e5YKj5peP5ouJ56Wc5peP5L2k5peP6Ieq5rK75Y6/XCIsNTMwODI4Olwi5r6c5rKn5ouJ56Wc5peP6Ieq5rK75Y6/XCIsNTMwODI5Olwi6KW/55uf5L2k5peP6Ieq5rK75Y6/XCJ9LDUzMDkwMDp7NTMwOTAyOlwi5Li057+U5Yy6XCIsNTMwOTIxOlwi5Yek5bqG5Y6/XCIsNTMwOTIyOlwi5LqR5Y6/XCIsNTMwOTIzOlwi5rC45b635Y6/XCIsNTMwOTI0Olwi6ZWH5bq35Y6/XCIsNTMwOTI1Olwi5Y+M5rGf5ouJ56Wc5peP5L2k5peP5biD5pyX5peP5YKj5peP6Ieq5rK75Y6/XCIsNTMwOTI2Olwi6IC/6ams5YKj5peP5L2k5peP6Ieq5rK75Y6/XCIsNTMwOTI3Olwi5rKn5rqQ5L2k5peP6Ieq5rK75Y6/XCJ9LDUzMjMwMDp7NTMyMzAxOlwi5qWa6ZuE5biCXCIsNTMyMzIyOlwi5Y+M5p+P5Y6/XCIsNTMyMzIzOlwi54mf5a6a5Y6/XCIsNTMyMzI0Olwi5Y2X5Y2O5Y6/XCIsNTMyMzI1Olwi5aea5a6J5Y6/XCIsNTMyMzI2Olwi5aSn5aea5Y6/XCIsNTMyMzI3Olwi5rC45LuB5Y6/XCIsNTMyMzI4Olwi5YWD6LCL5Y6/XCIsNTMyMzI5Olwi5q2m5a6a5Y6/XCIsNTMyMzMxOlwi56aE5Liw5Y6/XCJ9LDUzMjUwMDp7NTMyNTAxOlwi5Liq5pen5biCXCIsNTMyNTAyOlwi5byA6L+c5biCXCIsNTMyNTAzOlwi6JKZ6Ieq5biCXCIsNTMyNTA0Olwi5byl5YuS5biCXCIsNTMyNTIzOlwi5bGP6L656IuX5peP6Ieq5rK75Y6/XCIsNTMyNTI0Olwi5bu65rC05Y6/XCIsNTMyNTI1Olwi55+z5bGP5Y6/XCIsNTMyNTI3Olwi5rO46KW/5Y6/XCIsNTMyNTI4Olwi5YWD6Ziz5Y6/XCIsNTMyNTI5Olwi57qi5rKz5Y6/XCIsNTMyNTMwOlwi6YeR5bmz6IuX5peP55G25peP5YKj5peP6Ieq5rK75Y6/XCIsNTMyNTMxOlwi57u/5pil5Y6/XCIsNTMyNTMyOlwi5rKz5Y+j55G25peP6Ieq5rK75Y6/XCJ9LDUzMjYwMDp7NTMyNjAxOlwi5paH5bGx5biCXCIsNTMyNjIyOlwi56Ca5bGx5Y6/XCIsNTMyNjIzOlwi6KW/55W05Y6/XCIsNTMyNjI0Olwi6bq75qCX5Z2h5Y6/XCIsNTMyNjI1Olwi6ams5YWz5Y6/XCIsNTMyNjI2Olwi5LiY5YyX5Y6/XCIsNTMyNjI3Olwi5bm/5Y2X5Y6/XCIsNTMyNjI4Olwi5a+M5a6B5Y6/XCJ9LDUzMjgwMDp7NTMyODAxOlwi5pmv5rSq5biCXCIsNTMyODIyOlwi5YuQ5rW35Y6/XCIsNTMyODIzOlwi5YuQ6IWK5Y6/XCJ9LDUzMjkwMDp7NTMyOTAxOlwi5aSn55CG5biCXCIsNTMyOTIyOlwi5ry+5r+e5b2d5peP6Ieq5rK75Y6/XCIsNTMyOTIzOlwi56Wl5LqR5Y6/XCIsNTMyOTI0Olwi5a6+5bed5Y6/XCIsNTMyOTI1Olwi5byl5rih5Y6/XCIsNTMyOTI2Olwi5Y2X5ran5b2d5peP6Ieq5rK75Y6/XCIsNTMyOTI3Olwi5beN5bGx5b2d5peP5Zue5peP6Ieq5rK75Y6/XCIsNTMyOTI4Olwi5rC45bmz5Y6/XCIsNTMyOTI5Olwi5LqR6b6Z5Y6/XCIsNTMyOTMwOlwi5rSx5rqQ5Y6/XCIsNTMyOTMxOlwi5YmR5bed5Y6/XCIsNTMyOTMyOlwi6bmk5bqG5Y6/XCJ9LDUzMzEwMDp7NTMzMTAyOlwi55Ge5Li95biCXCIsNTMzMTAzOlwi6IqS5biCXCIsNTMzMTIyOlwi5qKB5rKz5Y6/XCIsNTMzMTIzOlwi55uI5rGf5Y6/XCIsNTMzMTI0Olwi6ZmH5bed5Y6/XCJ9LDUzMzMwMDp7NTMzMzAxOlwi5rO45rC05biCXCIsNTMzMzIzOlwi56aP6LSh5Y6/XCIsNTMzMzI0Olwi6LSh5bGx54us6b6Z5peP5oCS5peP6Ieq5rK75Y6/XCIsNTMzMzI1Olwi5YWw5Z2q55m95peP5pmu57Gz5peP6Ieq5rK75Y6/XCJ9LDUzMzQwMDp7NTMzNDAxOlwi6aaZ5qC86YeM5ouJ5biCXCIsNTMzNDIyOlwi5b636ZKm5Y6/XCIsNTMzNDIzOlwi57u06KW/5YKI5YOz5peP6Ieq5rK75Y6/XCJ9LDU0MDAwMDp7NTQwMTAwOlwi5ouJ6JCo5biCXCIsNTQwMjAwOlwi5pel5ZaA5YiZ5biCXCIsNTQwMzAwOlwi5piM6YO95biCXCIsNTQwNDAwOlwi5p6X6Iqd5biCXCIsNTQwNTAwOlwi5bGx5Y2X5biCXCIsNTQyNDAwOlwi6YKj5puy5Zyw5Yy6XCIsNTQyNTAwOlwi6Zi/6YeM5Zyw5Yy6XCJ9LDU0MDEwMDp7NTQwMTAyOlwi5Z+O5YWz5Yy6XCIsNTQwMTAzOlwi5aCG6b6Z5b635bqG5Yy6XCIsNTQwMTIxOlwi5p6X5ZGo5Y6/XCIsNTQwMTIyOlwi5b2T6ZuE5Y6/XCIsNTQwMTIzOlwi5bC85pyo5Y6/XCIsNTQwMTI0Olwi5puy5rC05Y6/XCIsNTQwMTI2Olwi6L6+5a2c5Y6/XCIsNTQwMTI3Olwi5aKo56u55bel5Y2h5Y6/XCJ9LDU0MDIwMDp7NTQwMjAyOlwi5qGR54+g5a2c5Yy6XCIsNTQwMjIxOlwi5Y2X5pyo5p6X5Y6/XCIsNTQwMjIyOlwi5rGf5a2c5Y6/XCIsNTQwMjIzOlwi5a6a5pel5Y6/XCIsNTQwMjI0Olwi6JCo6L+m5Y6/XCIsNTQwMjI1Olwi5ouJ5a2c5Y6/XCIsNTQwMjI2Olwi5piC5LuB5Y6/XCIsNTQwMjI3Olwi6LCi6YCa6Zeo5Y6/XCIsNTQwMjI4Olwi55m95pyX5Y6/XCIsNTQwMjI5Olwi5LuB5biD5Y6/XCIsNTQwMjMwOlwi5bq36ams5Y6/XCIsNTQwMjMxOlwi5a6a57uT5Y6/XCIsNTQwMjMyOlwi5Luy5be05Y6/XCIsNTQwMjMzOlwi5Lqa5Lic5Y6/XCIsNTQwMjM0Olwi5ZCJ6ZqG5Y6/XCIsNTQwMjM1Olwi6IGC5ouJ5pyo5Y6/XCIsNTQwMjM2Olwi6JCo5ZiO5Y6/XCIsNTQwMjM3Olwi5bKX5be05Y6/XCJ9LDU0MDMwMDp7NTQwMzAyOlwi5Y2h6Iul5Yy6XCIsNTQwMzIxOlwi5rGf6L6+5Y6/XCIsNTQwMzIyOlwi6LSh6KeJ5Y6/XCIsNTQwMzIzOlwi57G75LmM6b2Q5Y6/XCIsNTQwMzI0Olwi5LiB6Z2S5Y6/XCIsNTQwMzI1Olwi5a+f6ZuF5Y6/XCIsNTQwMzI2Olwi5YWr5a6/5Y6/XCIsNTQwMzI3Olwi5bem6LSh5Y6/XCIsNTQwMzI4Olwi6IqS5bq35Y6/XCIsNTQwMzI5Olwi5rSb6ZqG5Y6/XCIsNTQwMzMwOlwi6L655Z2d5Y6/XCJ9LDU0MDQwMDp7NTQwNDAyOlwi5be05a6c5Yy6XCIsNTQwNDIxOlwi5bel5biD5rGf6L6+5Y6/XCIsNTQwNDIyOlwi57Gz5p6X5Y6/XCIsNTQwNDIzOlwi5aKo6ISx5Y6/XCIsNTQwNDI0Olwi5rOi5a+G5Y6/XCIsNTQwNDI1Olwi5a+f6ZqF5Y6/XCIsNTQwNDI2Olwi5pyX5Y6/XCJ9LDU0MDUwMDp7NTQwNTAyOlwi5LmD5Lic5Yy6XCIsNTQwNTIxOlwi5omO5ZuK5Y6/XCIsNTQwNTIyOlwi6LSh5ZiO5Y6/XCIsNTQwNTIzOlwi5qGR5pel5Y6/XCIsNTQwNTI0Olwi55C857uT5Y6/XCIsNTQwNTI1Olwi5puy5p2+5Y6/XCIsNTQwNTI2Olwi5o6q576O5Y6/XCIsNTQwNTI3Olwi5rSb5omO5Y6/XCIsNTQwNTI4Olwi5Yqg5p+l5Y6/XCIsNTQwNTI5Olwi6ZqG5a2Q5Y6/XCIsNTQwNTMwOlwi6ZSZ6YKj5Y6/XCIsNTQwNTMxOlwi5rWq5Y2h5a2Q5Y6/XCJ9LDU0MjQwMDp7NTQyNDIxOlwi6YKj5puy5Y6/XCIsNTQyNDIyOlwi5ZiJ6buO5Y6/XCIsNTQyNDIzOlwi5q+U5aaC5Y6/XCIsNTQyNDI0Olwi6IGC6I2j5Y6/XCIsNTQyNDI1Olwi5a6J5aSa5Y6/XCIsNTQyNDI2Olwi55Sz5omO5Y6/XCIsNTQyNDI3Olwi57Si5Y6/XCIsNTQyNDI4Olwi54+t5oiI5Y6/XCIsNTQyNDI5Olwi5be06Z2S5Y6/XCIsNTQyNDMwOlwi5bC8546b5Y6/XCIsNTQyNDMxOlwi5Y+M5rmW5Y6/XCJ9LDU0MjUwMDp7NTQyNTIxOlwi5pmu5YWw5Y6/XCIsNTQyNTIyOlwi5pyt6L6+5Y6/XCIsNTQyNTIzOlwi5Zm25bCU5Y6/XCIsNTQyNTI0Olwi5pel5Zyf5Y6/XCIsNTQyNTI1Olwi6Z2p5ZCJ5Y6/XCIsNTQyNTI2Olwi5pS55YiZ5Y6/XCIsNTQyNTI3Olwi5o6q5Yuk5Y6/XCJ9LDYxMDAwMDp7NjEwMTAwOlwi6KW/5a6J5biCXCIsNjEwMjAwOlwi6ZOc5bed5biCXCIsNjEwMzAwOlwi5a6d6bih5biCXCIsNjEwNDAwOlwi5ZK46Ziz5biCXCIsNjEwNTAwOlwi5rit5Y2X5biCXCIsNjEwNjAwOlwi5bu25a6J5biCXCIsNjEwNzAwOlwi5rGJ5Lit5biCXCIsNjEwODAwOlwi5qaG5p6X5biCXCIsNjEwOTAwOlwi5a6J5bq35biCXCIsNjExMDAwOlwi5ZWG5rSb5biCXCJ9LDYxMDEwMDp7NjEwMTAyOlwi5paw5Z+O5Yy6XCIsNjEwMTAzOlwi56KR5p6X5Yy6XCIsNjEwMTA0Olwi6I6y5rmW5Yy6XCIsNjEwMTExOlwi54Ge5qGl5Yy6XCIsNjEwMTEyOlwi5pyq5aSu5Yy6XCIsNjEwMTEzOlwi6ZuB5aGU5Yy6XCIsNjEwMTE0Olwi6ZiO6Imv5Yy6XCIsNjEwMTE1Olwi5Li05r285Yy6XCIsNjEwMTE2Olwi6ZW/5a6J5Yy6XCIsNjEwMTE3Olwi6auY6Zm15Yy6XCIsNjEwMTIyOlwi6JOd55Sw5Y6/XCIsNjEwMTI0Olwi5ZGo6Iez5Y6/XCIsNjEwMTI1Olwi5oi35Y6/XCJ9LDYxMDIwMDp7NjEwMjAyOlwi546L55uK5Yy6XCIsNjEwMjAzOlwi5Y2w5Y+w5Yy6XCIsNjEwMjA0Olwi6ICA5bee5Yy6XCIsNjEwMjIyOlwi5a6c5ZCb5Y6/XCJ9LDYxMDMwMDp7NjEwMzAyOlwi5rit5ruo5Yy6XCIsNjEwMzAzOlwi6YeR5Y+w5Yy6XCIsNjEwMzA0Olwi6ZmI5LuT5Yy6XCIsNjEwMzIyOlwi5Yek57+U5Y6/XCIsNjEwMzIzOlwi5bKQ5bGx5Y6/XCIsNjEwMzI0Olwi5om26aOO5Y6/XCIsNjEwMzI2Olwi55yJ5Y6/XCIsNjEwMzI3Olwi6ZmH5Y6/XCIsNjEwMzI4Olwi5Y2D6Ziz5Y6/XCIsNjEwMzI5Olwi6bqf5ri45Y6/XCIsNjEwMzMwOlwi5Yek5Y6/XCIsNjEwMzMxOlwi5aSq55m95Y6/XCJ9LDYxMDQwMDp7NjEwNDAyOlwi56em6YO95Yy6XCIsNjEwNDAzOlwi5p2o6Zm15Yy6XCIsNjEwNDA0Olwi5rit5Z+O5Yy6XCIsNjEwNDIyOlwi5LiJ5Y6f5Y6/XCIsNjEwNDIzOlwi5rO+6Ziz5Y6/XCIsNjEwNDI0Olwi5Lm+5Y6/XCIsNjEwNDI1Olwi56S85rOJ5Y6/XCIsNjEwNDI2Olwi5rC45a+/5Y6/XCIsNjEwNDI3Olwi5b2s5Y6/XCIsNjEwNDI4Olwi6ZW/5q2m5Y6/XCIsNjEwNDI5Olwi5pes6YKR5Y6/XCIsNjEwNDMwOlwi5rez5YyW5Y6/XCIsNjEwNDMxOlwi5q2m5Yqf5Y6/XCIsNjEwNDgxOlwi5YW05bmz5biCXCJ9LDYxMDUwMDp7NjEwNTAyOlwi5Li05rit5Yy6XCIsNjEwNTAzOlwi5Y2O5bee5Yy6XCIsNjEwNTIyOlwi5r285YWz5Y6/XCIsNjEwNTIzOlwi5aSn6I2U5Y6/XCIsNjEwNTI0Olwi5ZCI6Ziz5Y6/XCIsNjEwNTI1Olwi5r6E5Z+O5Y6/XCIsNjEwNTI2Olwi6JKy5Z+O5Y6/XCIsNjEwNTI3Olwi55m95rC05Y6/XCIsNjEwNTI4Olwi5a+M5bmz5Y6/XCIsNjEwNTgxOlwi6Z+p5Z+O5biCXCIsNjEwNTgyOlwi5Y2O6Zi05biCXCJ9LDYxMDYwMDp7NjEwNjAyOlwi5a6d5aGU5Yy6XCIsNjEwNjAzOlwi5a6J5aGe5Yy6XCIsNjEwNjIxOlwi5bu26ZW/5Y6/XCIsNjEwNjIyOlwi5bu25bed5Y6/XCIsNjEwNjIzOlwi5a2Q6ZW/5Y6/XCIsNjEwNjI1Olwi5b+X5Li55Y6/XCIsNjEwNjI2Olwi5ZC06LW35Y6/XCIsNjEwNjI3Olwi55SY5rOJ5Y6/XCIsNjEwNjI4Olwi5a+M5Y6/XCIsNjEwNjI5Olwi5rSb5bed5Y6/XCIsNjEwNjMwOlwi5a6c5bed5Y6/XCIsNjEwNjMxOlwi6buE6b6Z5Y6/XCIsNjEwNjMyOlwi6buE6Zm15Y6/XCJ9LDYxMDcwMDp7NjEwNzAyOlwi5rGJ5Y+w5Yy6XCIsNjEwNzIxOlwi5Y2X6YOR5Y6/XCIsNjEwNzIyOlwi5Z+O5Zu65Y6/XCIsNjEwNzIzOlwi5rSL5Y6/XCIsNjEwNzI0Olwi6KW/5Lmh5Y6/XCIsNjEwNzI1Olwi5YuJ5Y6/XCIsNjEwNzI2Olwi5a6B5by65Y6/XCIsNjEwNzI3Olwi55Wl6Ziz5Y6/XCIsNjEwNzI4Olwi6ZWH5be05Y6/XCIsNjEwNzI5Olwi55WZ5Z2d5Y6/XCIsNjEwNzMwOlwi5L2b5Z2q5Y6/XCJ9LDYxMDgwMDp7NjEwODAyOlwi5qaG6Ziz5Yy6XCIsNjEwODAzOlwi5qiq5bGx5Yy6XCIsNjEwODIxOlwi56We5pyo5Y6/XCIsNjEwODIyOlwi5bqc6LC35Y6/XCIsNjEwODI0Olwi6Z2W6L655Y6/XCIsNjEwODI1Olwi5a6a6L655Y6/XCIsNjEwODI2Olwi57ul5b635Y6/XCIsNjEwODI3Olwi57Gz6ISC5Y6/XCIsNjEwODI4Olwi5L2z5Y6/XCIsNjEwODI5Olwi5ZC05aCh5Y6/XCIsNjEwODMwOlwi5riF5ran5Y6/XCIsNjEwODMxOlwi5a2Q5rSy5Y6/XCJ9LDYxMDkwMDp7NjEwOTAyOlwi5rGJ5ruo5Yy6XCIsNjEwOTIxOlwi5rGJ6Zi05Y6/XCIsNjEwOTIyOlwi55+z5rOJ5Y6/XCIsNjEwOTIzOlwi5a6B6ZmV5Y6/XCIsNjEwOTI0Olwi57Sr6Ziz5Y6/XCIsNjEwOTI1Olwi5bKa55qL5Y6/XCIsNjEwOTI2Olwi5bmz5Yip5Y6/XCIsNjEwOTI3Olwi6ZWH5Z2q5Y6/XCIsNjEwOTI4Olwi5pes6Ziz5Y6/XCIsNjEwOTI5Olwi55m95rKz5Y6/XCJ9LDYxMTAwMDp7NjExMDAyOlwi5ZWG5bee5Yy6XCIsNjExMDIxOlwi5rSb5Y2X5Y6/XCIsNjExMDIyOlwi5Li55Yek5Y6/XCIsNjExMDIzOlwi5ZWG5Y2X5Y6/XCIsNjExMDI0Olwi5bGx6Ziz5Y6/XCIsNjExMDI1Olwi6ZWH5a6J5Y6/XCIsNjExMDI2Olwi5p+e5rC05Y6/XCJ9LDYyMDAwMDp7NjIwMTAwOlwi5YWw5bee5biCXCIsNjIwMjAwOlwi5ZiJ5bOq5YWz5biCXCIsNjIwMzAwOlwi6YeR5piM5biCXCIsNjIwNDAwOlwi55m96ZO25biCXCIsNjIwNTAwOlwi5aSp5rC05biCXCIsNjIwNjAwOlwi5q2m5aiB5biCXCIsNjIwNzAwOlwi5byg5o6W5biCXCIsNjIwODAwOlwi5bmz5YeJ5biCXCIsNjIwOTAwOlwi6YWS5rOJ5biCXCIsNjIxMDAwOlwi5bqG6Ziz5biCXCIsNjIxMTAwOlwi5a6a6KW/5biCXCIsNjIxMjAwOlwi6ZmH5Y2X5biCXCIsNjIyOTAwOlwi5Li05aSP5Zue5peP6Ieq5rK75beeXCIsNjIzMDAwOlwi55SY5Y2X6JeP5peP6Ieq5rK75beeXCJ9LDYyMDEwMDp7NjIwMTAyOlwi5Z+O5YWz5Yy6XCIsNjIwMTAzOlwi5LiD6YeM5rKz5Yy6XCIsNjIwMTA0Olwi6KW/5Zu65Yy6XCIsNjIwMTA1Olwi5a6J5a6B5Yy6XCIsNjIwMTExOlwi57qi5Y+k5Yy6XCIsNjIwMTIxOlwi5rC455m75Y6/XCIsNjIwMTIyOlwi55qL5YWw5Y6/XCIsNjIwMTIzOlwi5qaG5Lit5Y6/XCJ9LDYyMDMwMDp7NjIwMzAyOlwi6YeR5bed5Yy6XCIsNjIwMzIxOlwi5rC45piM5Y6/XCJ9LDYyMDQwMDp7NjIwNDAyOlwi55m96ZO25Yy6XCIsNjIwNDAzOlwi5bmz5bed5Yy6XCIsNjIwNDIxOlwi6Z2W6L+c5Y6/XCIsNjIwNDIyOlwi5Lya5a6B5Y6/XCIsNjIwNDIzOlwi5pmv5rOw5Y6/XCJ9LDYyMDUwMDp7NjIwNTAyOlwi56em5bee5Yy6XCIsNjIwNTAzOlwi6bqm56ev5Yy6XCIsNjIwNTIxOlwi5riF5rC05Y6/XCIsNjIwNTIyOlwi56em5a6J5Y6/XCIsNjIwNTIzOlwi55SY6LC35Y6/XCIsNjIwNTI0Olwi5q2m5bGx5Y6/XCIsNjIwNTI1Olwi5byg5a625bed5Zue5peP6Ieq5rK75Y6/XCJ9LDYyMDYwMDp7NjIwNjAyOlwi5YeJ5bee5Yy6XCIsNjIwNjIxOlwi5rCR5Yuk5Y6/XCIsNjIwNjIyOlwi5Y+k5rWq5Y6/XCIsNjIwNjIzOlwi5aSp56Wd6JeP5peP6Ieq5rK75Y6/XCJ9LDYyMDcwMDp7NjIwNzAyOlwi55SY5bee5Yy6XCIsNjIwNzIxOlwi6IKD5Y2X6KOV5Zu65peP6Ieq5rK75Y6/XCIsNjIwNzIyOlwi5rCR5LmQ5Y6/XCIsNjIwNzIzOlwi5Li05rO95Y6/XCIsNjIwNzI0Olwi6auY5Y+w5Y6/XCIsNjIwNzI1Olwi5bGx5Li55Y6/XCJ9LDYyMDgwMDp7NjIwODAyOlwi5bSG5bOS5Yy6XCIsNjIwODIxOlwi5rO+5bed5Y6/XCIsNjIwODIyOlwi54G15Y+w5Y6/XCIsNjIwODIzOlwi5bSH5L+h5Y6/XCIsNjIwODI0Olwi5Y2O5Lqt5Y6/XCIsNjIwODI1Olwi5bqE5rWq5Y6/XCIsNjIwODI2Olwi6Z2Z5a6B5Y6/XCJ9LDYyMDkwMDp7NjIwOTAyOlwi6IKD5bee5Yy6XCIsNjIwOTIxOlwi6YeR5aGU5Y6/XCIsNjIwOTIyOlwi55Oc5bee5Y6/XCIsNjIwOTIzOlwi6IKD5YyX6JKZ5Y+k5peP6Ieq5rK75Y6/XCIsNjIwOTI0Olwi6Zi/5YWL5aGe5ZOI6JCo5YWL5peP6Ieq5rK75Y6/XCIsNjIwOTgxOlwi546J6Zeo5biCXCIsNjIwOTgyOlwi5pWm54WM5biCXCJ9LDYyMTAwMDp7NjIxMDAyOlwi6KW/5bOw5Yy6XCIsNjIxMDIxOlwi5bqG5Z+O5Y6/XCIsNjIxMDIyOlwi546v5Y6/XCIsNjIxMDIzOlwi5Y2O5rGg5Y6/XCIsNjIxMDI0Olwi5ZCI5rC05Y6/XCIsNjIxMDI1Olwi5q2j5a6B5Y6/XCIsNjIxMDI2Olwi5a6B5Y6/XCIsNjIxMDI3Olwi6ZWH5Y6f5Y6/XCJ9LDYyMTEwMDp7NjIxMTAyOlwi5a6J5a6a5Yy6XCIsNjIxMTIxOlwi6YCa5rit5Y6/XCIsNjIxMTIyOlwi6ZmH6KW/5Y6/XCIsNjIxMTIzOlwi5rit5rqQ5Y6/XCIsNjIxMTI0Olwi5Li05rSu5Y6/XCIsNjIxMTI1Olwi5ryz5Y6/XCIsNjIxMTI2Olwi5bK35Y6/XCJ9LDYyMTIwMDp7NjIxMjAyOlwi5q2m6YO95Yy6XCIsNjIxMjIxOlwi5oiQ5Y6/XCIsNjIxMjIyOlwi5paH5Y6/XCIsNjIxMjIzOlwi5a6V5piM5Y6/XCIsNjIxMjI0Olwi5bq35Y6/XCIsNjIxMjI1Olwi6KW/5ZKM5Y6/XCIsNjIxMjI2Olwi56S85Y6/XCIsNjIxMjI3Olwi5b695Y6/XCIsNjIxMjI4Olwi5Lik5b2T5Y6/XCJ9LDYyMjkwMDp7NjIyOTAxOlwi5Li05aSP5biCXCIsNjIyOTIxOlwi5Li05aSP5Y6/XCIsNjIyOTIyOlwi5bq35LmQ5Y6/XCIsNjIyOTIzOlwi5rC46Z2W5Y6/XCIsNjIyOTI0Olwi5bm/5rKz5Y6/XCIsNjIyOTI1Olwi5ZKM5pS/5Y6/XCIsNjIyOTI2Olwi5Lic5Lmh5peP6Ieq5rK75Y6/XCIsNjIyOTI3Olwi56ev55+z5bGx5L+d5a6J5peP5Lic5Lmh5peP5pKS5ouJ5peP6Ieq5rK75Y6/XCJ9LDYyMzAwMDp7NjIzMDAxOlwi5ZCI5L2c5biCXCIsNjIzMDIxOlwi5Li05r2t5Y6/XCIsNjIzMDIyOlwi5Y2T5bC85Y6/XCIsNjIzMDIzOlwi6Iif5puy5Y6/XCIsNjIzMDI0Olwi6L+t6YOo5Y6/XCIsNjIzMDI1Olwi546b5puy5Y6/XCIsNjIzMDI2Olwi56KM5puy5Y6/XCIsNjIzMDI3Olwi5aSP5rKz5Y6/XCJ9LDYzMDAwMDp7NjMwMTAwOlwi6KW/5a6B5biCXCIsNjMwMjAwOlwi5rW35Lic5biCXCIsNjMyMjAwOlwi5rW35YyX6JeP5peP6Ieq5rK75beeXCIsNjMyMzAwOlwi6buE5Y2X6JeP5peP6Ieq5rK75beeXCIsNjMyNTAwOlwi5rW35Y2X6JeP5peP6Ieq5rK75beeXCIsNjMyNjAwOlwi5p6c5rSb6JeP5peP6Ieq5rK75beeXCIsNjMyNzAwOlwi546J5qCR6JeP5peP6Ieq5rK75beeXCIsNjMyODAwOlwi5rW36KW/6JKZ5Y+k5peP6JeP5peP6Ieq5rK75beeXCJ9LDYzMDEwMDp7NjMwMTAyOlwi5Z+O5Lic5Yy6XCIsNjMwMTAzOlwi5Z+O5Lit5Yy6XCIsNjMwMTA0Olwi5Z+O6KW/5Yy6XCIsNjMwMTA1Olwi5Z+O5YyX5Yy6XCIsNjMwMTIxOlwi5aSn6YCa5Zue5peP5Zyf5peP6Ieq5rK75Y6/XCIsNjMwMTIyOlwi5rmf5Lit5Y6/XCIsNjMwMTIzOlwi5rmf5rqQ5Y6/XCJ9LDYzMDIwMDp7NjMwMjAyOlwi5LmQ6YO95Yy6XCIsNjMwMjAzOlwi5bmz5a6J5Yy6XCIsNjMwMjIyOlwi5rCR5ZKM5Zue5peP5Zyf5peP6Ieq5rK75Y6/XCIsNjMwMjIzOlwi5LqS5Yqp5Zyf5peP6Ieq5rK75Y6/XCIsNjMwMjI0Olwi5YyW6ZqG5Zue5peP6Ieq5rK75Y6/XCIsNjMwMjI1Olwi5b6q5YyW5pKS5ouJ5peP6Ieq5rK75Y6/XCJ9LDYzMjIwMDp7NjMyMjIxOlwi6Zeo5rqQ5Zue5peP6Ieq5rK75Y6/XCIsNjMyMjIyOlwi56WB6L+e5Y6/XCIsNjMyMjIzOlwi5rW35pmP5Y6/XCIsNjMyMjI0Olwi5Yia5a+f5Y6/XCJ9LDYzMjMwMDp7NjMyMzIxOlwi5ZCM5LuB5Y6/XCIsNjMyMzIyOlwi5bCW5omO5Y6/XCIsNjMyMzIzOlwi5rO95bqT5Y6/XCIsNjMyMzI0Olwi5rKz5Y2X6JKZ5Y+k5peP6Ieq5rK75Y6/XCJ9LDYzMjUwMDp7NjMyNTIxOlwi5YWx5ZKM5Y6/XCIsNjMyNTIyOlwi5ZCM5b635Y6/XCIsNjMyNTIzOlwi6LS15b635Y6/XCIsNjMyNTI0Olwi5YW05rW35Y6/XCIsNjMyNTI1Olwi6LS15Y2X5Y6/XCJ9LDYzMjYwMDp7NjMyNjIxOlwi546b5rKB5Y6/XCIsNjMyNjIyOlwi54+t546b5Y6/XCIsNjMyNjIzOlwi55SY5b635Y6/XCIsNjMyNjI0Olwi6L6+5pel5Y6/XCIsNjMyNjI1Olwi5LmF5rK75Y6/XCIsNjMyNjI2Olwi546b5aSa5Y6/XCJ9LDYzMjcwMDp7NjMyNzAxOlwi546J5qCR5biCXCIsNjMyNzIyOlwi5p2C5aSa5Y6/XCIsNjMyNzIzOlwi56ew5aSa5Y6/XCIsNjMyNzI0Olwi5rK75aSa5Y6/XCIsNjMyNzI1Olwi5ZuK6LCm5Y6/XCIsNjMyNzI2Olwi5puy6bq76I6x5Y6/XCJ9LDYzMjgwMDp7NjMyODAxOlwi5qC85bCU5pyo5biCXCIsNjMyODAyOlwi5b635Luk5ZOI5biCXCIsNjMyODIxOlwi5LmM5YWw5Y6/XCIsNjMyODIyOlwi6YO95YWw5Y6/XCIsNjMyODIzOlwi5aSp5bO75Y6/XCJ9LDY0MDAwMDp7NjQwMTAwOlwi6ZO25bed5biCXCIsNjQwMjAwOlwi55+z5Zi05bGx5biCXCIsNjQwMzAwOlwi5ZC05b+g5biCXCIsNjQwNDAwOlwi5Zu65Y6f5biCXCIsNjQwNTAwOlwi5Lit5Y2r5biCXCJ9LDY0MDEwMDp7NjQwMTA0Olwi5YW05bqG5Yy6XCIsNjQwMTA1Olwi6KW/5aSP5Yy6XCIsNjQwMTA2Olwi6YeR5Yek5Yy6XCIsNjQwMTIxOlwi5rC45a6B5Y6/XCIsNjQwMTIyOlwi6LS65YWw5Y6/XCIsNjQwMTgxOlwi54G15q2m5biCXCJ9LDY0MDIwMDp7NjQwMjAyOlwi5aSn5q2m5Y+j5Yy6XCIsNjQwMjA1Olwi5oOg5Yac5Yy6XCIsNjQwMjIxOlwi5bmz572X5Y6/XCJ9LDY0MDMwMDp7NjQwMzAyOlwi5Yip6YCa5Yy6XCIsNjQwMzAzOlwi57qi5a+65aCh5Yy6XCIsNjQwMzIzOlwi55uQ5rGg5Y6/XCIsNjQwMzI0Olwi5ZCM5b+D5Y6/XCIsNjQwMzgxOlwi6Z2S6ZOc5bOh5biCXCJ9LDY0MDQwMDp7NjQwNDAyOlwi5Y6f5bee5Yy6XCIsNjQwNDIyOlwi6KW/5ZCJ5Y6/XCIsNjQwNDIzOlwi6ZqG5b635Y6/XCIsNjQwNDI0Olwi5rO+5rqQ5Y6/XCIsNjQwNDI1Olwi5b2t6Ziz5Y6/XCJ9LDY0MDUwMDp7NjQwNTAyOlwi5rKZ5Z2h5aS05Yy6XCIsNjQwNTIxOlwi5Lit5a6B5Y6/XCIsNjQwNTIyOlwi5rW35Y6f5Y6/XCJ9LDY1MDAwMDp7NjUwMTAwOlwi5LmM6bKB5pyo6b2Q5biCXCIsNjUwMjAwOlwi5YWL5ouJ546b5L6d5biCXCIsNjUwNDAwOlwi5ZCQ6bKB55Wq5biCXCIsNjUwNTAwOlwi5ZOI5a+G5biCXCIsNjUyMzAwOlwi5piM5ZCJ5Zue5peP6Ieq5rK75beeXCIsNjUyNzAwOlwi5Y2a5bCU5aGU5ouJ6JKZ5Y+k6Ieq5rK75beeXCIsNjUyODAwOlwi5be06Z+z6YOt5qWe6JKZ5Y+k6Ieq5rK75beeXCIsNjUyOTAwOlwi6Zi/5YWL6IuP5Zyw5Yy6XCIsNjUzMDAwOlwi5YWL5a2c5YuS6IuP5p+v5bCU5YWL5a2c6Ieq5rK75beeXCIsNjUzMTAwOlwi5ZaA5LuA5Zyw5Yy6XCIsNjUzMjAwOlwi5ZKM55Sw5Zyw5Yy6XCIsNjU0MDAwOlwi5LyK54qB5ZOI6JCo5YWL6Ieq5rK75beeXCIsNjU0MjAwOlwi5aGU5Z+O5Zyw5Yy6XCIsNjU0MzAwOlwi6Zi/5YuS5rOw5Zyw5Yy6XCIsNjU5MDAxOlwi55+z5rKz5a2Q5biCXCIsNjU5MDAyOlwi6Zi/5ouJ5bCU5biCXCIsNjU5MDAzOlwi5Zu+5pyo6IiS5YWL5biCXCIsNjU5MDA0Olwi5LqU5a625rig5biCXCIsNjU5MDA2Olwi6ZOB6Zeo5YWz5biCXCJ9LDY1MDEwMDp7NjUwMTAyOlwi5aSp5bGx5Yy6XCIsNjUwMTAzOlwi5rKZ5L6d5be05YWL5Yy6XCIsNjUwMTA0Olwi5paw5biC5Yy6XCIsNjUwMTA1Olwi5rC056Oo5rKf5Yy6XCIsNjUwMTA2Olwi5aS05bGv5rKz5Yy6XCIsNjUwMTA3Olwi6L6+5Z2C5Z+O5Yy6XCIsNjUwMTA5Olwi57Gz5Lic5Yy6XCIsNjUwMTIxOlwi5LmM6bKB5pyo6b2Q5Y6/XCJ9LDY1MDIwMDp7NjUwMjAyOlwi54us5bGx5a2Q5Yy6XCIsNjUwMjAzOlwi5YWL5ouJ546b5L6d5Yy6XCIsNjUwMjA0Olwi55m956Kx5rup5Yy6XCIsNjUwMjA1Olwi5LmM5bCU56a+5Yy6XCJ9LDY1MDQwMDp7NjUwNDAyOlwi6auY5piM5Yy6XCIsNjUwNDIxOlwi6YSv5ZaE5Y6/XCIsNjUwNDIyOlwi5omY5YWL6YCK5Y6/XCJ9LDY1MDUwMDp7NjUwNTAyOlwi5LyK5bee5Yy6XCIsNjUwNTIxOlwi5be06YeM5Z2k5ZOI6JCo5YWL6Ieq5rK75Y6/XCIsNjUwNTIyOlwi5LyK5ZC+5Y6/XCJ9LDY1MjMwMDp7NjUyMzAxOlwi5piM5ZCJ5biCXCIsNjUyMzAyOlwi6Zic5bq35biCXCIsNjUyMzIzOlwi5ZG85Zu+5aOB5Y6/XCIsNjUyMzI0Olwi546b57qz5pav5Y6/XCIsNjUyMzI1Olwi5aWH5Y+w5Y6/XCIsNjUyMzI3Olwi5ZCJ5pyo6JCo5bCU5Y6/XCIsNjUyMzI4Olwi5pyo5Z6S5ZOI6JCo5YWL6Ieq5rK75Y6/XCJ9LDY1MjcwMDp7NjUyNzAxOlwi5Y2a5LmQ5biCXCIsNjUyNzAyOlwi6Zi/5ouJ5bGx5Y+j5biCXCIsNjUyNzIyOlwi57K+5rKz5Y6/XCIsNjUyNzIzOlwi5rip5rOJ5Y6/XCJ9LDY1MjgwMDp7NjUyODAxOlwi5bqT5bCU5YuS5biCXCIsNjUyODIyOlwi6L2u5Y+w5Y6/XCIsNjUyODIzOlwi5bCJ54qB5Y6/XCIsNjUyODI0Olwi6Iul576M5Y6/XCIsNjUyODI1Olwi5LiU5pyr5Y6/XCIsNjUyODI2Olwi54SJ6ICG5Zue5peP6Ieq5rK75Y6/XCIsNjUyODI3Olwi5ZKM6Z2Z5Y6/XCIsNjUyODI4Olwi5ZKM56GV5Y6/XCIsNjUyODI5Olwi5Y2a5rmW5Y6/XCJ9LDY1MjkwMDp7NjUyOTAxOlwi6Zi/5YWL6IuP5biCXCIsNjUyOTIyOlwi5rip5a6/5Y6/XCIsNjUyOTIzOlwi5bqT6L2m5Y6/XCIsNjUyOTI0Olwi5rKZ6ZuF5Y6/XCIsNjUyOTI1Olwi5paw5ZKM5Y6/XCIsNjUyOTI2Olwi5ouc5Z+O5Y6/XCIsNjUyOTI3Olwi5LmM5LuA5Y6/XCIsNjUyOTI4Olwi6Zi/55Om5o+Q5Y6/XCIsNjUyOTI5Olwi5p+v5Z2q5Y6/XCJ9LDY1MzAwMDp7NjUzMDAxOlwi6Zi/5Zu+5LuA5biCXCIsNjUzMDIyOlwi6Zi/5YWL6Zm25Y6/XCIsNjUzMDIzOlwi6Zi/5ZCI5aWH5Y6/XCIsNjUzMDI0Olwi5LmM5oGw5Y6/XCJ9LDY1MzEwMDp7NjUzMTAxOlwi5ZaA5LuA5biCXCIsNjUzMTIxOlwi55aP6ZmE5Y6/XCIsNjUzMTIyOlwi55aP5YuS5Y6/XCIsNjUzMTIzOlwi6Iux5ZCJ5rKZ5Y6/XCIsNjUzMTI0Olwi5rO95pmu5Y6/XCIsNjUzMTI1Olwi6I6O6L2m5Y6/XCIsNjUzMTI2Olwi5Y+25Z+O5Y6/XCIsNjUzMTI3Olwi6bqm55uW5o+Q5Y6/XCIsNjUzMTI4Olwi5bKz5pmu5rmW5Y6/XCIsNjUzMTI5Olwi5Ly95biI5Y6/XCIsNjUzMTMwOlwi5be05qWa5Y6/XCIsNjUzMTMxOlwi5aGU5LuA5bqT5bCU5bmy5aGU5ZCJ5YWL6Ieq5rK75Y6/XCJ9LDY1MzIwMDp7NjUzMjAxOlwi5ZKM55Sw5biCXCIsNjUzMjIxOlwi5ZKM55Sw5Y6/XCIsNjUzMjIyOlwi5aKo546J5Y6/XCIsNjUzMjIzOlwi55qu5bGx5Y6/XCIsNjUzMjI0Olwi5rSb5rWm5Y6/XCIsNjUzMjI1Olwi562W5YuS5Y6/XCIsNjUzMjI2Olwi5LqO55Sw5Y6/XCIsNjUzMjI3Olwi5rCR5Liw5Y6/XCJ9LDY1NDAwMDp7NjU0MDAyOlwi5LyK5a6B5biCXCIsNjU0MDAzOlwi5aWO5bGv5biCXCIsNjU0MDA0Olwi6ZyN5bCU5p6c5pav5biCXCIsNjU0MDIxOlwi5LyK5a6B5Y6/XCIsNjU0MDIyOlwi5a+f5biD5p+l5bCU6ZSh5Lyv6Ieq5rK75Y6/XCIsNjU0MDIzOlwi6ZyN5Z+O5Y6/XCIsNjU0MDI0Olwi5bep55WZ5Y6/XCIsNjU0MDI1Olwi5paw5rqQ5Y6/XCIsNjU0MDI2Olwi5pit6IuP5Y6/XCIsNjU0MDI3Olwi54m55YWL5pav5Y6/XCIsNjU0MDI4Olwi5bC85YuS5YWL5Y6/XCJ9LDY1NDIwMDp7NjU0MjAxOlwi5aGU5Z+O5biCXCIsNjU0MjAyOlwi5LmM6IuP5biCXCIsNjU0MjIxOlwi6aKd5pWP5Y6/XCIsNjU0MjIzOlwi5rKZ5rm+5Y6/XCIsNjU0MjI0Olwi5omY6YeM5Y6/XCIsNjU0MjI1Olwi6KOV5rCR5Y6/XCIsNjU0MjI2Olwi5ZKM5biD5YWL6LWb5bCU6JKZ5Y+k6Ieq5rK75Y6/XCJ9LDY1NDMwMDp7NjU0MzAxOlwi6Zi/5YuS5rOw5biCXCIsNjU0MzIxOlwi5biD5bCU5rSl5Y6/XCIsNjU0MzIyOlwi5a+M6JW05Y6/XCIsNjU0MzIzOlwi56aP5rW35Y6/XCIsNjU0MzI0Olwi5ZOI5be05rKz5Y6/XCIsNjU0MzI1Olwi6Z2S5rKz5Y6/XCIsNjU0MzI2Olwi5ZCJ5pyo5LmD5Y6/XCJ9LDgxMDAwMDp7ODEwMDAxOlwi5Lit6KW/5Y2AXCIsODEwMDAyOlwi54Gj5LuU5Y2AXCIsODEwMDAzOlwi5p2x5Y2AXCIsODEwMDA0Olwi5Y2X5Y2AXCIsODEwMDA1Olwi5rK55bCW5pe65Y2AXCIsODEwMDA2Olwi5rex5rC05Z+X5Y2AXCIsODEwMDA3Olwi5Lmd6b6N5Z+O5Y2AXCIsODEwMDA4Olwi6buD5aSn5LuZ5Y2AXCIsODEwMDA5Olwi6KeA5aGY5Y2AXCIsODEwMDEwOlwi6I2D54Gj5Y2AXCIsODEwMDExOlwi5bGv6ZaA5Y2AXCIsODEwMDEyOlwi5YWD5pyX5Y2AXCIsODEwMDEzOlwi5YyX5Y2AXCIsODEwMDE0Olwi5aSn5Z+U5Y2AXCIsODEwMDE1Olwi6KW/6LKi5Y2AXCIsODEwMDE2Olwi5rKZ55Sw5Y2AXCIsODEwMDE3Olwi6JG16Z2S5Y2AXCIsODEwMDE4Olwi6Zui5bO25Y2AXCJ9LDgyMDAwMDp7ODIwMDAxOlwi6Iqx5Zyw55Gq5aCC5Y2AXCIsODIwMDAyOlwi6Iqx546L5aCC5Y2AXCIsODIwMDAzOlwi5pyb5b635aCC5Y2AXCIsODIwMDA0Olwi5aSn5aCC5Y2AXCIsODIwMDA1Olwi6aKo6aCG5aCC5Y2AXCIsODIwMDA2Olwi5ZiJ5qih5aCC5Y2AXCIsODIwMDA3Olwi6Lev5rC55aGr5rW35Y2AXCIsODIwMDA4Olwi6IGW5pa55r+f5ZCE5aCC5Y2AXCJ9fX1dKX0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2Rpc3QvYXBwLmpzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///83\n')},function(module,exports){eval('module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, "loaded", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, "id", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzP2MzYzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ijg0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcclxuXHRpZighbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xyXG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XHJcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcclxuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxyXG5cdFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XHJcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xyXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxyXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcclxuXHR9XHJcblx0cmV0dXJuIG1vZHVsZTtcclxufTtcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gKHdlYnBhY2spL2J1aWxkaW4vbW9kdWxlLmpzXG4vLyBtb2R1bGUgaWQgPSA4NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///84\n')},function(module,__webpack_exports__,__webpack_require__){"use strict";eval('var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c("div", { staticClass: "area" }, [\n _c(\n "div",\n [\n _vm._v("\\n 二级联动(不带“全部”选项)\\n "),\n _c("el-cascader", {\n attrs: { size: "large", options: _vm.provinceAndCityData },\n on: { change: _vm.handleChange },\n model: {\n value: _vm.selectedOptions1,\n callback: function($$v) {\n _vm.selectedOptions1 = $$v\n },\n expression: "selectedOptions1"\n }\n })\n ],\n 1\n ),\n _vm._v(" "),\n _c("div", { staticClass: "bind" }, [\n _c("div", [_vm._v("绑定值:" + _vm._s(_vm.selectedOptions1))]),\n _vm._v(" "),\n _c("div", [\n _vm._v(\n "区域码转汉字:" +\n _vm._s(_vm.CodeToText[_vm.selectedOptions1[0]]) +\n "," +\n _vm._s(_vm.CodeToText[_vm.selectedOptions1[1]])\n )\n ]),\n _vm._v(" "),\n _c("div", [\n _vm._v(\n "汉字转区域码:" +\n _vm._s(\n _vm.convertTextToCode(\n _vm.CodeToText[_vm.selectedOptions1[0]],\n _vm.CodeToText[_vm.selectedOptions1[1]]\n )\n )\n )\n ])\n ]),\n _vm._v(" "),\n _c(\n "div",\n { staticClass: "three" },\n [\n _vm._v("\\n 二级联动(带有“全部”选项)\\n "),\n _c("el-cascader", {\n attrs: { size: "large", options: _vm.provinceAndCityDataPlus },\n on: { change: _vm.handleChange },\n model: {\n value: _vm.selectedOptions3,\n callback: function($$v) {\n _vm.selectedOptions3 = $$v\n },\n expression: "selectedOptions3"\n }\n })\n ],\n 1\n ),\n _vm._v(" "),\n _c("div", { staticClass: "bind" }, [\n _c("div", [_vm._v("绑定值:" + _vm._s(_vm.selectedOptions3))]),\n _vm._v(" "),\n _c("div", [\n _vm._v(\n "区域码转汉字:" +\n _vm._s(_vm.CodeToText[_vm.selectedOptions3[0]]) +\n "," +\n _vm._s(_vm.CodeToText[_vm.selectedOptions3[1]])\n )\n ]),\n _vm._v(" "),\n _c("div", [\n _vm._v(\n "汉字转区域码:" +\n _vm._s(\n _vm.convertTextToCode(\n _vm.CodeToText[_vm.selectedOptions3[0]],\n _vm.CodeToText[_vm.selectedOptions3[1]]\n )\n )\n )\n ])\n ]),\n _vm._v(" "),\n _c(\n "div",\n { staticClass: "three" },\n [\n _vm._v("\\n 三级联动(不带“全部”选项)\\n "),\n _c("el-cascader", {\n staticClass: "long",\n attrs: { size: "large", options: _vm.regionData },\n on: { change: _vm.handleChange },\n model: {\n value: _vm.selectedOptions2,\n callback: function($$v) {\n _vm.selectedOptions2 = $$v\n },\n expression: "selectedOptions2"\n }\n })\n ],\n 1\n ),\n _vm._v(" "),\n _c("div", { staticClass: "bind" }, [\n _c("div", [_vm._v("绑定值:" + _vm._s(_vm.selectedOptions2))]),\n _vm._v(" "),\n _c("div", [\n _vm._v(\n "区域码转汉字:" +\n _vm._s(_vm.CodeToText[_vm.selectedOptions2[0]]) +\n "," +\n _vm._s(_vm.CodeToText[_vm.selectedOptions2[1]]) +\n "," +\n _vm._s(_vm.CodeToText[_vm.selectedOptions2[2]])\n )\n ]),\n _vm._v(" "),\n _c("div", [\n _vm._v(\n "汉字转区域码:" +\n _vm._s(\n _vm.convertTextToCode(\n _vm.CodeToText[_vm.selectedOptions2[0]],\n _vm.CodeToText[_vm.selectedOptions2[1]],\n _vm.CodeToText[_vm.selectedOptions2[2]]\n )\n )\n )\n ])\n ]),\n _vm._v(" "),\n _c(\n "div",\n { staticClass: "three" },\n [\n _vm._v(\'\\n 三级联动(带"全部选项")\\n \'),\n _c("el-cascader", {\n staticClass: "long",\n attrs: { size: "large", options: _vm.regionDataPlus },\n on: { change: _vm.handleChange },\n model: {\n value: _vm.selectedOptions4,\n callback: function($$v) {\n _vm.selectedOptions4 = $$v\n },\n expression: "selectedOptions4"\n }\n })\n ],\n 1\n ),\n _vm._v(" "),\n _c("div", { staticClass: "bind" }, [\n _c("div", [_vm._v("绑定值:" + _vm._s(_vm.selectedOptions4))]),\n _vm._v(" "),\n _c("div", [\n _vm._v(\n "区域码转汉字:" +\n _vm._s(_vm.CodeToText[_vm.selectedOptions4[0]]) +\n "," +\n _vm._s(_vm.CodeToText[_vm.selectedOptions4[1]]) +\n "," +\n _vm._s(_vm.CodeToText[_vm.selectedOptions4[2]])\n )\n ]),\n _vm._v(" "),\n _c("div", [\n _vm._v(\n "汉字转区域码:" +\n _vm._s(\n _vm.convertTextToCode(\n _vm.CodeToText[_vm.selectedOptions4[0]],\n _vm.CodeToText[_vm.selectedOptions4[1]],\n _vm.CodeToText[_vm.selectedOptions4[2]]\n )\n )\n )\n ])\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ __webpack_exports__["a"] = (esExports);\nif (false) {\n module.hot.accept()\n if (module.hot.data) {\n require("vue-hot-reload-api") .rerender("data-v-0b43b24c", esExports)\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvQXBwLnZ1ZT85YjhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHNCQUFzQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGtEQUFrRDtBQUNwRSxlQUFlLDJCQUEyQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxzQkFBc0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sdUJBQXVCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixzREFBc0Q7QUFDeEUsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0JBQXNCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLHVCQUF1QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQix5Q0FBeUM7QUFDM0QsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0JBQXNCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLHVCQUF1QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiw2Q0FBNkM7QUFDL0QsZUFBZSwyQkFBMkI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsc0JBQXNCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiI4NS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJhcmVhXCIgfSwgW1xuICAgIF9jKFxuICAgICAgXCJkaXZcIixcbiAgICAgIFtcbiAgICAgICAgX3ZtLl92KFwiXFxuICAgIOS6jOe6p+iBlOWKqO+8iOS4jeW4puKAnOWFqOmDqOKAnemAiemhue+8iVxcbiAgICBcIiksXG4gICAgICAgIF9jKFwiZWwtY2FzY2FkZXJcIiwge1xuICAgICAgICAgIGF0dHJzOiB7IHNpemU6IFwibGFyZ2VcIiwgb3B0aW9uczogX3ZtLnByb3ZpbmNlQW5kQ2l0eURhdGEgfSxcbiAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5oYW5kbGVDaGFuZ2UgfSxcbiAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgdmFsdWU6IF92bS5zZWxlY3RlZE9wdGlvbnMxLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICBfdm0uc2VsZWN0ZWRPcHRpb25zMSA9ICQkdlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2VsZWN0ZWRPcHRpb25zMVwiXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXSxcbiAgICAgIDFcbiAgICApLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJiaW5kXCIgfSwgW1xuICAgICAgX2MoXCJkaXZcIiwgW192bS5fdihcIue7keWumuWAvO+8mlwiICsgX3ZtLl9zKF92bS5zZWxlY3RlZE9wdGlvbnMxKSldKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCBbXG4gICAgICAgIF92bS5fdihcbiAgICAgICAgICBcIuWMuuWfn+eggei9rOaxieWtl++8mlwiICtcbiAgICAgICAgICAgIF92bS5fcyhfdm0uQ29kZVRvVGV4dFtfdm0uc2VsZWN0ZWRPcHRpb25zMVswXV0pICtcbiAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgIF92bS5fcyhfdm0uQ29kZVRvVGV4dFtfdm0uc2VsZWN0ZWRPcHRpb25zMVsxXV0pXG4gICAgICAgIClcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIFtcbiAgICAgICAgX3ZtLl92KFxuICAgICAgICAgIFwi5rGJ5a2X6L2s5Yy65Z+f56CB77yaXCIgK1xuICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICBfdm0uY29udmVydFRleHRUb0NvZGUoXG4gICAgICAgICAgICAgICAgX3ZtLkNvZGVUb1RleHRbX3ZtLnNlbGVjdGVkT3B0aW9uczFbMF1dLFxuICAgICAgICAgICAgICAgIF92bS5Db2RlVG9UZXh0W192bS5zZWxlY3RlZE9wdGlvbnMxWzFdXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IHN0YXRpY0NsYXNzOiBcInRocmVlXCIgfSxcbiAgICAgIFtcbiAgICAgICAgX3ZtLl92KFwiXFxuICAgIOS6jOe6p+iBlOWKqCjluKbmnInigJzlhajpg6jigJ3pgInpobkpXFxuICAgIFwiKSxcbiAgICAgICAgX2MoXCJlbC1jYXNjYWRlclwiLCB7XG4gICAgICAgICAgYXR0cnM6IHsgc2l6ZTogXCJsYXJnZVwiLCBvcHRpb25zOiBfdm0ucHJvdmluY2VBbmRDaXR5RGF0YVBsdXMgfSxcbiAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5oYW5kbGVDaGFuZ2UgfSxcbiAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgdmFsdWU6IF92bS5zZWxlY3RlZE9wdGlvbnMzLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICBfdm0uc2VsZWN0ZWRPcHRpb25zMyA9ICQkdlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2VsZWN0ZWRPcHRpb25zM1wiXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXSxcbiAgICAgIDFcbiAgICApLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJiaW5kXCIgfSwgW1xuICAgICAgX2MoXCJkaXZcIiwgW192bS5fdihcIue7keWumuWAvO+8mlwiICsgX3ZtLl9zKF92bS5zZWxlY3RlZE9wdGlvbnMzKSldKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCBbXG4gICAgICAgIF92bS5fdihcbiAgICAgICAgICBcIuWMuuWfn+eggei9rOaxieWtl++8mlwiICtcbiAgICAgICAgICAgIF92bS5fcyhfdm0uQ29kZVRvVGV4dFtfdm0uc2VsZWN0ZWRPcHRpb25zM1swXV0pICtcbiAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgIF92bS5fcyhfdm0uQ29kZVRvVGV4dFtfdm0uc2VsZWN0ZWRPcHRpb25zM1sxXV0pXG4gICAgICAgIClcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIFtcbiAgICAgICAgX3ZtLl92KFxuICAgICAgICAgIFwi5rGJ5a2X6L2s5Yy65Z+f56CB77yaXCIgK1xuICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICBfdm0uY29udmVydFRleHRUb0NvZGUoXG4gICAgICAgICAgICAgICAgX3ZtLkNvZGVUb1RleHRbX3ZtLnNlbGVjdGVkT3B0aW9uczNbMF1dLFxuICAgICAgICAgICAgICAgIF92bS5Db2RlVG9UZXh0W192bS5zZWxlY3RlZE9wdGlvbnMzWzFdXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IHN0YXRpY0NsYXNzOiBcInRocmVlXCIgfSxcbiAgICAgIFtcbiAgICAgICAgX3ZtLl92KFwiXFxuICAgIOS4iee6p+iBlOWKqO+8iOS4jeW4puKAnOWFqOmDqOKAnemAiemhue+8iVxcbiAgICBcIiksXG4gICAgICAgIF9jKFwiZWwtY2FzY2FkZXJcIiwge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImxvbmdcIixcbiAgICAgICAgICBhdHRyczogeyBzaXplOiBcImxhcmdlXCIsIG9wdGlvbnM6IF92bS5yZWdpb25EYXRhIH0sXG4gICAgICAgICAgb246IHsgY2hhbmdlOiBfdm0uaGFuZGxlQ2hhbmdlIH0sXG4gICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgIHZhbHVlOiBfdm0uc2VsZWN0ZWRPcHRpb25zMixcbiAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcbiAgICAgICAgICAgICAgX3ZtLnNlbGVjdGVkT3B0aW9uczIgPSAkJHZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcInNlbGVjdGVkT3B0aW9uczJcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIF0sXG4gICAgICAxXG4gICAgKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiYmluZFwiIH0sIFtcbiAgICAgIF9jKFwiZGl2XCIsIFtfdm0uX3YoXCLnu5HlrprlgLzvvJpcIiArIF92bS5fcyhfdm0uc2VsZWN0ZWRPcHRpb25zMikpXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgW1xuICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgXCLljLrln5/noIHovazmsYnlrZfvvJpcIiArXG4gICAgICAgICAgICBfdm0uX3MoX3ZtLkNvZGVUb1RleHRbX3ZtLnNlbGVjdGVkT3B0aW9uczJbMF1dKSArXG4gICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICBfdm0uX3MoX3ZtLkNvZGVUb1RleHRbX3ZtLnNlbGVjdGVkT3B0aW9uczJbMV1dKSArXG4gICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICBfdm0uX3MoX3ZtLkNvZGVUb1RleHRbX3ZtLnNlbGVjdGVkT3B0aW9uczJbMl1dKVxuICAgICAgICApXG4gICAgICBdKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCBbXG4gICAgICAgIF92bS5fdihcbiAgICAgICAgICBcIuaxieWtl+i9rOWMuuWfn+egge+8mlwiICtcbiAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgX3ZtLmNvbnZlcnRUZXh0VG9Db2RlKFxuICAgICAgICAgICAgICAgIF92bS5Db2RlVG9UZXh0W192bS5zZWxlY3RlZE9wdGlvbnMyWzBdXSxcbiAgICAgICAgICAgICAgICBfdm0uQ29kZVRvVGV4dFtfdm0uc2VsZWN0ZWRPcHRpb25zMlsxXV0sXG4gICAgICAgICAgICAgICAgX3ZtLkNvZGVUb1RleHRbX3ZtLnNlbGVjdGVkT3B0aW9uczJbMl1dXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgXSlcbiAgICBdKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFxuICAgICAgXCJkaXZcIixcbiAgICAgIHsgc3RhdGljQ2xhc3M6IFwidGhyZWVcIiB9LFxuICAgICAgW1xuICAgICAgICBfdm0uX3YoJ1xcbiAgICDkuInnuqfogZTliqgo5bimXCLlhajpg6jpgInpoblcIilcXG4gICAgJyksXG4gICAgICAgIF9jKFwiZWwtY2FzY2FkZXJcIiwge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImxvbmdcIixcbiAgICAgICAgICBhdHRyczogeyBzaXplOiBcImxhcmdlXCIsIG9wdGlvbnM6IF92bS5yZWdpb25EYXRhUGx1cyB9LFxuICAgICAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLmhhbmRsZUNoYW5nZSB9LFxuICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnNlbGVjdGVkT3B0aW9uczQsXG4gICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG4gICAgICAgICAgICAgIF92bS5zZWxlY3RlZE9wdGlvbnM0ID0gJCR2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzZWxlY3RlZE9wdGlvbnM0XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICBdLFxuICAgICAgMVxuICAgICksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImJpbmRcIiB9LCBbXG4gICAgICBfYyhcImRpdlwiLCBbX3ZtLl92KFwi57uR5a6a5YC877yaXCIgKyBfdm0uX3MoX3ZtLnNlbGVjdGVkT3B0aW9uczQpKV0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFwiZGl2XCIsIFtcbiAgICAgICAgX3ZtLl92KFxuICAgICAgICAgIFwi5Yy65Z+f56CB6L2s5rGJ5a2X77yaXCIgK1xuICAgICAgICAgICAgX3ZtLl9zKF92bS5Db2RlVG9UZXh0W192bS5zZWxlY3RlZE9wdGlvbnM0WzBdXSkgK1xuICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgX3ZtLl9zKF92bS5Db2RlVG9UZXh0W192bS5zZWxlY3RlZE9wdGlvbnM0WzFdXSkgK1xuICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgX3ZtLl9zKF92bS5Db2RlVG9UZXh0W192bS5zZWxlY3RlZE9wdGlvbnM0WzJdXSlcbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgX2MoXCJkaXZcIiwgW1xuICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgXCLmsYnlrZfovazljLrln5/noIHvvJpcIiArXG4gICAgICAgICAgICBfdm0uX3MoXG4gICAgICAgICAgICAgIF92bS5jb252ZXJ0VGV4dFRvQ29kZShcbiAgICAgICAgICAgICAgICBfdm0uQ29kZVRvVGV4dFtfdm0uc2VsZWN0ZWRPcHRpb25zNFswXV0sXG4gICAgICAgICAgICAgICAgX3ZtLkNvZGVUb1RleHRbX3ZtLnNlbGVjdGVkT3B0aW9uczRbMV1dLFxuICAgICAgICAgICAgICAgIF92bS5Db2RlVG9UZXh0W192bS5zZWxlY3RlZE9wdGlvbnM0WzJdXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG52YXIgZXNFeHBvcnRzID0geyByZW5kZXI6IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnMgfVxuZXhwb3J0IGRlZmF1bHQgZXNFeHBvcnRzXG5pZiAobW9kdWxlLmhvdCkge1xuICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gIGlmIChtb2R1bGUuaG90LmRhdGEpIHtcbiAgICByZXF1aXJlKFwidnVlLWhvdC1yZWxvYWQtYXBpXCIpICAgICAgLnJlcmVuZGVyKFwiZGF0YS12LTBiNDNiMjRjXCIsIGVzRXhwb3J0cylcbiAgfVxufVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3RlbXBsYXRlLWNvbXBpbGVyP3tcImlkXCI6XCJkYXRhLXYtMGI0M2IyNGNcIixcImhhc1Njb3BlZFwiOmZhbHNlLFwiYnVibGVcIjp7XCJ0cmFuc2Zvcm1zXCI6e319fSEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9zZWxlY3Rvci5qcz90eXBlPXRlbXBsYXRlJmluZGV4PTAmYnVzdENhY2hlIS4vc3JjL0FwcC52dWVcbi8vIG1vZHVsZSBpZCA9IDg1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///85\n')}]); |