(global["webpackJsonp"] = global["webpackJsonp"] || []).push([["common/vendor"],[ /* 0 */ /*!*******************************************************!*\ !*** /Users/liujing/work/svn/ukeer-store-pay/main.js ***! \*******************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("/* WEBPACK VAR INJECTION */(function(createApp) {__webpack_require__(/*! uni-pages */ 4);\nvar _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 3));\nvar _App = _interopRequireDefault(__webpack_require__(/*! ./App */ 5));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function _objectSpread(target) {for (var i = 1; i < arguments.length; i++) {var source = arguments[i] != null ? arguments[i] : {};var ownKeys = Object.keys(source);if (typeof Object.getOwnPropertySymbols === 'function') {ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {return Object.getOwnPropertyDescriptor(source, sym).enumerable;}));}ownKeys.forEach(function (key) {_defineProperty(target, key, source[key]);});}return target;}function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}\n\n_vue.default.config.productionTip = false;\n\n_App.default.mpType = 'app';\n\nvar app = new _vue.default(_objectSpread({},\n_App.default));\n\ncreateApp(app).$mount();\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-app-plus/dist/index.js */ 1)[\"createApp\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbIlZ1ZSIsImNvbmZpZyIsInByb2R1Y3Rpb25UaXAiLCJBcHAiLCJtcFR5cGUiLCJhcHAiLCIkbW91bnQiXSwibWFwcGluZ3MiOiJpREFBQTtBQUNBO0FBQ0EsdUU7O0FBRUFBLGFBQUlDLE1BQUosQ0FBV0MsYUFBWCxHQUEyQixLQUEzQjs7QUFFQUMsYUFBSUMsTUFBSixHQUFhLEtBQWI7O0FBRUEsSUFBTUMsR0FBRyxHQUFHLElBQUlMLFlBQUo7QUFDTEcsWUFESyxFQUFaOztBQUdBLFVBQUFFLEdBQUcsRUFBQ0MsTUFBSixHIiwiZmlsZSI6IjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3VuaS1wYWdlcyc7XG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBBcHAgZnJvbSAnLi9BcHAnXG5cblZ1ZS5jb25maWcucHJvZHVjdGlvblRpcCA9IGZhbHNlXG5cbkFwcC5tcFR5cGUgPSAnYXBwJ1xuXG5jb25zdCBhcHAgPSBuZXcgVnVlKHtcbiAgICAuLi5BcHBcbn0pXG5hcHAuJG1vdW50KCkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///0\n"); /***/ }), /* 1 */ /*!***********************************************************!*\ !*** ./node_modules/@dcloudio/uni-app-plus/dist/index.js ***! \***********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { "use strict"; eval("/* WEBPACK VAR INJECTION */(function(global) {Object.defineProperty(exports, \"__esModule\", { value: true });exports.createApp = createApp;exports.createComponent = createComponent;exports.createPage = createPage;exports.default = void 0;var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 3));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function _slicedToArray(arr, i) {return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();}function _nonIterableRest() {throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");}function _iterableToArrayLimit(arr, i) {var _arr = [];var _n = true;var _d = false;var _e = undefined;try {for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {_arr.push(_s.value);if (i && _arr.length === i) break;}} catch (err) {_d = true;_e = err;} finally {try {if (!_n && _i[\"return\"] != null) _i[\"return\"]();} finally {if (_d) throw _e;}}return _arr;}function _arrayWithHoles(arr) {if (Array.isArray(arr)) return arr;}function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}function _toConsumableArray(arr) {return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();}function _nonIterableSpread() {throw new TypeError(\"Invalid attempt to spread non-iterable instance\");}function _iterableToArray(iter) {if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);}function _arrayWithoutHoles(arr) {if (Array.isArray(arr)) {for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {arr2[i] = arr[i];}return arr2;}}\n\nvar _toString = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isFn(fn) {\n return typeof fn === 'function';\n}\n\nfunction isStr(str) {\n return typeof str === 'string';\n}\n\nfunction isPlainObject(obj) {\n return _toString.call(obj) === '[object Object]';\n}\n\nfunction hasOwn(obj, key) {\n return hasOwnProperty.call(obj, key);\n}\n\nfunction noop() {}\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\nvar HOOKS = [\n'invoke',\n'success',\n'fail',\n'complete',\n'returnValue'];\n\n\nvar globalInterceptors = {};\nvar scopedInterceptors = {};\n\nfunction mergeHook(parentVal, childVal) {\n var res = childVal ?\n parentVal ?\n parentVal.concat(childVal) :\n Array.isArray(childVal) ?\n childVal : [childVal] :\n parentVal;\n return res ?\n dedupeHooks(res) :\n res;\n}\n\nfunction dedupeHooks(hooks) {\n var res = [];\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n return res;\n}\n\nfunction removeHook(hooks, hook) {\n var index = hooks.indexOf(hook);\n if (index !== -1) {\n hooks.splice(index, 1);\n }\n}\n\nfunction mergeInterceptorHook(interceptor, option) {\n Object.keys(option).forEach(function (hook) {\n if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {\n interceptor[hook] = mergeHook(interceptor[hook], option[hook]);\n }\n });\n}\n\nfunction removeInterceptorHook(interceptor, option) {\n if (!interceptor || !option) {\n return;\n }\n Object.keys(option).forEach(function (hook) {\n if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {\n removeHook(interceptor[hook], option[hook]);\n }\n });\n}\n\nfunction addInterceptor(method, option) {\n if (typeof method === 'string' && isPlainObject(option)) {\n mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);\n } else if (isPlainObject(method)) {\n mergeInterceptorHook(globalInterceptors, method);\n }\n}\n\nfunction removeInterceptor(method, option) {\n if (typeof method === 'string') {\n if (isPlainObject(option)) {\n removeInterceptorHook(scopedInterceptors[method], option);\n } else {\n delete scopedInterceptors[method];\n }\n } else if (isPlainObject(method)) {\n removeInterceptorHook(globalInterceptors, method);\n }\n}\n\nfunction wrapperHook(hook) {\n return function (data) {\n return hook(data) || data;\n };\n}\n\nfunction isPromise(obj) {\n return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n\nfunction queue(hooks, data) {\n var promise = false;\n for (var i = 0; i < hooks.length; i++) {\n var hook = hooks[i];\n if (promise) {\n promise = Promise.then(wrapperHook(hook));\n } else {\n var res = hook(data);\n if (isPromise(res)) {\n promise = Promise.resolve(res);\n }\n if (res === false) {\n return {\n then: function then() {} };\n\n }\n }\n }\n return promise || {\n then: function then(callback) {\n return callback(data);\n } };\n\n}\n\nfunction wrapperOptions(interceptor) {var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n ['success', 'fail', 'complete'].forEach(function (name) {\n if (Array.isArray(interceptor[name])) {\n var oldCallback = options[name];\n options[name] = function callbackInterceptor(res) {\n queue(interceptor[name], res).then(function (res) {\n /* eslint-disable no-mixed-operators */\n return isFn(oldCallback) && oldCallback(res) || res;\n });\n };\n }\n });\n return options;\n}\n\nfunction wrapperReturnValue(method, returnValue) {\n var returnValueHooks = [];\n if (Array.isArray(globalInterceptors.returnValue)) {\n returnValueHooks.push.apply(returnValueHooks, _toConsumableArray(globalInterceptors.returnValue));\n }\n var interceptor = scopedInterceptors[method];\n if (interceptor && Array.isArray(interceptor.returnValue)) {\n returnValueHooks.push.apply(returnValueHooks, _toConsumableArray(interceptor.returnValue));\n }\n returnValueHooks.forEach(function (hook) {\n returnValue = hook(returnValue) || returnValue;\n });\n return returnValue;\n}\n\nfunction getApiInterceptorHooks(method) {\n var interceptor = Object.create(null);\n Object.keys(globalInterceptors).forEach(function (hook) {\n if (hook !== 'returnValue') {\n interceptor[hook] = globalInterceptors[hook].slice();\n }\n });\n var scopedInterceptor = scopedInterceptors[method];\n if (scopedInterceptor) {\n Object.keys(scopedInterceptor).forEach(function (hook) {\n if (hook !== 'returnValue') {\n interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);\n }\n });\n }\n return interceptor;\n}\n\nfunction invokeApi(method, api, options) {for (var _len = arguments.length, params = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {params[_key - 3] = arguments[_key];}\n var interceptor = getApiInterceptorHooks(method);\n if (interceptor && Object.keys(interceptor).length) {\n if (Array.isArray(interceptor.invoke)) {\n var res = queue(interceptor.invoke, options);\n return res.then(function (options) {\n return api.apply(void 0, [wrapperOptions(interceptor, options)].concat(params));\n });\n } else {\n return api.apply(void 0, [wrapperOptions(interceptor, options)].concat(params));\n }\n }\n return api.apply(void 0, [options].concat(params));\n}\n\nvar promiseInterceptor = {\n returnValue: function returnValue(res) {\n if (!isPromise(res)) {\n return res;\n }\n return res.then(function (res) {\n return res[1];\n }).catch(function (res) {\n return res[0];\n });\n } };\n\n\nvar SYNC_API_RE =\n/^\\$|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/;\n\nvar CONTEXT_API_RE = /^create|Manager$/;\n\nvar CALLBACK_API_RE = /^on/;\n\nfunction isContextApi(name) {\n return CONTEXT_API_RE.test(name);\n}\nfunction isSyncApi(name) {\n return SYNC_API_RE.test(name);\n}\n\nfunction isCallbackApi(name) {\n return CALLBACK_API_RE.test(name);\n}\n\nfunction handlePromise(promise) {\n return promise.then(function (data) {\n return [null, data];\n }).\n catch(function (err) {return [err];});\n}\n\nfunction shouldPromise(name) {\n if (\n isContextApi(name) ||\n isSyncApi(name) ||\n isCallbackApi(name))\n {\n return false;\n }\n return true;\n}\n\nfunction promisify(name, api) {\n if (!shouldPromise(name)) {\n return api;\n }\n return function promiseApi() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {params[_key2 - 1] = arguments[_key2];}\n if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {\n return wrapperReturnValue(name, invokeApi.apply(void 0, [name, api, options].concat(params)));\n }\n return wrapperReturnValue(name, handlePromise(new Promise(function (resolve, reject) {\n invokeApi.apply(void 0, [name, api, Object.assign({}, options, {\n success: resolve,\n fail: reject })].concat(\n params));\n /* eslint-disable no-extend-native */\n if (!Promise.prototype.finally) {\n Promise.prototype.finally = function (callback) {\n var promise = this.constructor;\n return this.then(\n function (value) {return promise.resolve(callback()).then(function () {return value;});},\n function (reason) {return promise.resolve(callback()).then(function () {\n throw reason;\n });});\n\n };\n }\n })));\n };\n}\n\nvar EPS = 1e-4;\nvar BASE_DEVICE_WIDTH = 750;\nvar isIOS = false;\nvar deviceWidth = 0;\nvar deviceDPR = 0;\n\nfunction checkDeviceWidth() {var _wx$getSystemInfoSync =\n\n\n\n\n wx.getSystemInfoSync(),platform = _wx$getSystemInfoSync.platform,pixelRatio = _wx$getSystemInfoSync.pixelRatio,windowWidth = _wx$getSystemInfoSync.windowWidth; // uni=>wx runtime 编译目标是 uni 对象,内部不允许直接使用 uni\n\n deviceWidth = windowWidth;\n deviceDPR = pixelRatio;\n isIOS = platform === 'ios';\n}\n\nfunction upx2px(number, newDeviceWidth) {\n if (deviceWidth === 0) {\n checkDeviceWidth();\n }\n\n number = Number(number);\n if (number === 0) {\n return 0;\n }\n var result = number / BASE_DEVICE_WIDTH * (newDeviceWidth || deviceWidth);\n if (result < 0) {\n result = -result;\n }\n result = Math.floor(result + EPS);\n if (result === 0) {\n if (deviceDPR === 1 || !isIOS) {\n return 1;\n } else {\n return 0.5;\n }\n }\n return number < 0 ? -result : result;\n}\n\nvar interceptors = {\n promiseInterceptor: promiseInterceptor };\n\n\n\n\nvar baseApi = /*#__PURE__*/Object.freeze({\n upx2px: upx2px,\n interceptors: interceptors,\n addInterceptor: addInterceptor,\n removeInterceptor: removeInterceptor });\n\n\nvar protocols = {};\nvar todos = [];\nvar canIUses = [];\n\nvar CALLBACKS = ['success', 'fail', 'cancel', 'complete'];\n\nfunction processCallback(methodName, method, returnValue) {\n return function (res) {\n return method(processReturnValue(methodName, res, returnValue));\n };\n}\n\nfunction processArgs(methodName, fromArgs) {var argsOption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};var returnValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};var keepFromArgs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n if (isPlainObject(fromArgs)) {// 一般 api 的参数解析\n var toArgs = keepFromArgs === true ? fromArgs : {}; // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值\n if (isFn(argsOption)) {\n argsOption = argsOption(fromArgs, toArgs) || {};\n }\n for (var key in fromArgs) {\n if (hasOwn(argsOption, key)) {\n var keyOption = argsOption[key];\n if (isFn(keyOption)) {\n keyOption = keyOption(fromArgs[key], fromArgs, toArgs);\n }\n if (!keyOption) {// 不支持的参数\n console.warn(\"app-plus \".concat(methodName, \"\\u6682\\u4E0D\\u652F\\u6301\").concat(key));\n } else if (isStr(keyOption)) {// 重写参数 key\n toArgs[keyOption] = fromArgs[key];\n } else if (isPlainObject(keyOption)) {// {name:newName,value:value}可重新指定参数 key:value\n toArgs[keyOption.name ? keyOption.name : key] = keyOption.value;\n }\n } else if (CALLBACKS.indexOf(key) !== -1) {\n toArgs[key] = processCallback(methodName, fromArgs[key], returnValue);\n } else {\n if (!keepFromArgs) {\n toArgs[key] = fromArgs[key];\n }\n }\n }\n return toArgs;\n } else if (isFn(fromArgs)) {\n fromArgs = processCallback(methodName, fromArgs, returnValue);\n }\n return fromArgs;\n}\n\nfunction processReturnValue(methodName, res, returnValue) {var keepReturnValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n if (isFn(protocols.returnValue)) {// 处理通用 returnValue\n res = protocols.returnValue(methodName, res);\n }\n return processArgs(methodName, res, returnValue, {}, keepReturnValue);\n}\n\nfunction wrapper(methodName, method) {\n if (hasOwn(protocols, methodName)) {\n var protocol = protocols[methodName];\n if (!protocol) {// 暂不支持的 api\n return function () {\n console.error(\"app-plus \\u6682\\u4E0D\\u652F\\u6301\".concat(methodName));\n };\n }\n return function (arg1, arg2) {// 目前 api 最多两个参数\n var options = protocol;\n if (isFn(protocol)) {\n options = protocol(arg1);\n }\n\n arg1 = processArgs(methodName, arg1, options.args, options.returnValue);\n\n var args = [arg1];\n if (typeof arg2 !== 'undefined') {\n args.push(arg2);\n }\n var returnValue = wx[options.name || methodName].apply(wx, args);\n if (isSyncApi(methodName)) {// 同步 api\n return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName));\n }\n return returnValue;\n };\n }\n return method;\n}\n\nvar todoApis = Object.create(null);\n\nvar TODOS = [\n'subscribePush',\n'unsubscribePush',\n'onPush',\n'offPush',\n'share'];\n\n\nfunction createTodoApi(name) {\n return function todoApi(_ref)\n\n\n {var fail = _ref.fail,complete = _ref.complete;\n var res = {\n errMsg: \"\".concat(name, \":fail:\\u6682\\u4E0D\\u652F\\u6301 \").concat(name, \" \\u65B9\\u6CD5\") };\n\n isFn(fail) && fail(res);\n isFn(complete) && complete(res);\n };\n}\n\nTODOS.forEach(function (name) {\n todoApis[name] = createTodoApi(name);\n});\n\nvar getEmitter = function () {\n if (typeof getUniEmitter === 'function') {\n /* eslint-disable no-undef */\n return getUniEmitter;\n }\n var Emitter;\n return function getUniEmitter() {\n if (!Emitter) {\n Emitter = new _vue.default();\n }\n return Emitter;\n };\n}();\n\nfunction apply(ctx, method, args) {\n return ctx[method].apply(ctx, args);\n}\n\nfunction $on() {\n return apply(getEmitter(), '$on', Array.prototype.slice.call(arguments));\n}\nfunction $off() {\n return apply(getEmitter(), '$off', Array.prototype.slice.call(arguments));\n}\nfunction $once() {\n return apply(getEmitter(), '$once', Array.prototype.slice.call(arguments));\n}\nfunction $emit() {\n return apply(getEmitter(), '$emit', Array.prototype.slice.call(arguments));\n}\n\nvar eventApi = /*#__PURE__*/Object.freeze({\n $on: $on,\n $off: $off,\n $once: $once,\n $emit: $emit });\n\n\nfunction wrapper$1(webview) {\n webview.$processed = true;\n\n webview.postMessage = function (data) {\n plus.webview.postMessageToUniNView({\n type: 'UniAppSubNVue',\n data: data },\n webview.id);\n };\n var callbacks = [];\n webview.onMessage = function (callback) {\n callbacks.push(callback);\n };\n webview.$consumeMessage = function (e) {\n callbacks.forEach(function (callback) {return callback(e);});\n };\n\n if (!webview.__uniapp_mask_id) {\n return;\n }\n var maskColor = webview.__uniapp_mask;\n var maskWebview = plus.webview.getWebviewById(webview.__uniapp_mask_id);\n maskWebview = maskWebview.parent() || maskWebview; // 再次检测父\n var oldShow = webview.show;\n var oldHide = webview.hide;\n var oldClose = webview.close;\n\n var showMask = function showMask() {\n maskWebview.setStyle({\n mask: maskColor });\n\n };\n var closeMask = function closeMask() {\n maskWebview.setStyle({\n mask: 'none' });\n\n };\n webview.show = function () {\n showMask();for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {args[_key3] = arguments[_key3];}\n return oldShow.apply(webview, args);\n };\n webview.hide = function () {\n closeMask();for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {args[_key4] = arguments[_key4];}\n return oldHide.apply(webview, args);\n };\n webview.close = function () {\n closeMask();\n callbacks = [];for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {args[_key5] = arguments[_key5];}\n return oldClose.apply(webview, args);\n };\n}\n\nfunction getSubNVueById(id) {\n var webview = plus.webview.getWebviewById(id);\n if (webview && !webview.$processed) {\n wrapper$1(webview);\n }\n return webview;\n}\n\nfunction requireNativePlugin(pluginName) {\n /* eslint-disable no-undef */\n if (typeof weex !== 'undefined') {\n return weex.requireModule(pluginName);\n }\n /* eslint-disable no-undef */\n return __requireNativePlugin__(pluginName);\n}\n\nvar api = /*#__PURE__*/Object.freeze({\n requireNativePlugin: requireNativePlugin,\n getSubNVueById: getSubNVueById });\n\n\nvar MPPage = Page;\nvar MPComponent = Component;\n\nvar customizeRE = /:/g;\n\nvar customize = cached(function (str) {\n return camelize(str.replace(customizeRE, '-'));\n});\n\nfunction initTriggerEvent(mpInstance) {\n {\n if (!wx.canIUse('nextTick')) {\n return;\n }\n }\n var oldTriggerEvent = mpInstance.triggerEvent;\n mpInstance.triggerEvent = function (event) {for (var _len6 = arguments.length, args = new Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {args[_key6 - 1] = arguments[_key6];}\n return oldTriggerEvent.apply(mpInstance, [customize(event)].concat(args));\n };\n}\n\nfunction initHook(name, options) {\n var oldHook = options[name];\n if (!oldHook) {\n options[name] = function () {\n initTriggerEvent(this);\n };\n } else {\n options[name] = function () {\n initTriggerEvent(this);for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {args[_key7] = arguments[_key7];}\n return oldHook.apply(this, args);\n };\n }\n}\n\nPage = function Page() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n initHook('onLoad', options);\n return MPPage(options);\n};\n\nComponent = function Component() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n initHook('created', options);\n return MPComponent(options);\n};\n\nvar PAGE_EVENT_HOOKS = [\n'onPullDownRefresh',\n'onReachBottom',\n'onShareAppMessage',\n'onPageScroll',\n'onResize',\n'onTabItemTap'];\n\n\nfunction initMocks(vm, mocks) {\n var mpInstance = vm.$mp[vm.mpType];\n mocks.forEach(function (mock) {\n if (hasOwn(mpInstance, mock)) {\n vm[mock] = mpInstance[mock];\n }\n });\n}\n\nfunction hasHook(hook, vueOptions) {\n if (!vueOptions) {\n return true;\n }\n\n if (_vue.default.options && Array.isArray(_vue.default.options[hook])) {\n return true;\n }\n\n vueOptions = vueOptions.default || vueOptions;\n\n if (isFn(vueOptions)) {\n if (isFn(vueOptions.extendOptions[hook])) {\n return true;\n }\n if (vueOptions.super &&\n vueOptions.super.options &&\n Array.isArray(vueOptions.super.options[hook])) {\n return true;\n }\n return false;\n }\n\n if (isFn(vueOptions[hook])) {\n return true;\n }\n var mixins = vueOptions.mixins;\n if (Array.isArray(mixins)) {\n return !!mixins.find(function (mixin) {return hasHook(hook, mixin);});\n }\n}\n\nfunction initHooks(mpOptions, hooks, vueOptions) {\n hooks.forEach(function (hook) {\n if (hasHook(hook, vueOptions)) {\n mpOptions[hook] = function (args) {\n return this.$vm && this.$vm.__call_hook(hook, args);\n };\n }\n });\n}\n\nfunction initVueComponent(Vue, vueOptions) {\n vueOptions = vueOptions.default || vueOptions;\n var VueComponent;\n if (isFn(vueOptions)) {\n VueComponent = vueOptions;\n vueOptions = VueComponent.extendOptions;\n } else {\n VueComponent = Vue.extend(vueOptions);\n }\n return [VueComponent, vueOptions];\n}\n\nfunction initSlots(vm, vueSlots) {\n if (Array.isArray(vueSlots) && vueSlots.length) {\n var $slots = Object.create(null);\n vueSlots.forEach(function (slotName) {\n $slots[slotName] = true;\n });\n vm.$scopedSlots = vm.$slots = $slots;\n }\n}\n\nfunction initVueIds(vueIds, mpInstance) {\n vueIds = (vueIds || '').split(',');\n var len = vueIds.length;\n\n if (len === 1) {\n mpInstance._$vueId = vueIds[0];\n } else if (len === 2) {\n mpInstance._$vueId = vueIds[0];\n mpInstance._$vuePid = vueIds[1];\n }\n}\n\nfunction initData(vueOptions, context) {\n var data = vueOptions.data || {};\n var methods = vueOptions.methods || {};\n\n if (typeof data === 'function') {\n try {\n data = data.call(context); // 支持 Vue.prototype 上挂的数据\n } catch (e) {\n if (Object({\"NODE_ENV\":\"development\",\"VUE_APP_PLATFORM\":\"app-plus\",\"BASE_URL\":\"/\"}).VUE_APP_DEBUG) {\n console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data);\n }\n }\n } else {\n try {\n // 对 data 格式化\n data = JSON.parse(JSON.stringify(data));\n } catch (e) {}\n }\n\n if (!isPlainObject(data)) {\n data = {};\n }\n\n Object.keys(methods).forEach(function (methodName) {\n if (context.__lifecycle_hooks__.indexOf(methodName) === -1 && !hasOwn(data, methodName)) {\n data[methodName] = methods[methodName];\n }\n });\n\n return data;\n}\n\nvar PROP_TYPES = [String, Number, Boolean, Object, Array, null];\n\nfunction createObserver(name) {\n return function observer(newVal, oldVal) {\n if (this.$vm) {\n this.$vm[name] = newVal; // 为了触发其他非 render watcher\n }\n };\n}\n\nfunction initBehaviors(vueOptions, initBehavior) {\n var vueBehaviors = vueOptions['behaviors'];\n var vueExtends = vueOptions['extends'];\n var vueMixins = vueOptions['mixins'];\n\n var vueProps = vueOptions['props'];\n\n if (!vueProps) {\n vueOptions['props'] = vueProps = [];\n }\n\n var behaviors = [];\n if (Array.isArray(vueBehaviors)) {\n vueBehaviors.forEach(function (behavior) {\n behaviors.push(behavior.replace('uni://', \"wx\".concat(\"://\")));\n if (behavior === 'uni://form-field') {\n if (Array.isArray(vueProps)) {\n vueProps.push('name');\n vueProps.push('value');\n } else {\n vueProps['name'] = {\n type: String,\n default: '' };\n\n vueProps['value'] = {\n type: [String, Number, Boolean, Array, Object, Date],\n default: '' };\n\n }\n }\n });\n }\n if (isPlainObject(vueExtends) && vueExtends.props) {\n behaviors.push(\n initBehavior({\n properties: initProperties(vueExtends.props, true) }));\n\n\n }\n if (Array.isArray(vueMixins)) {\n vueMixins.forEach(function (vueMixin) {\n if (isPlainObject(vueMixin) && vueMixin.props) {\n behaviors.push(\n initBehavior({\n properties: initProperties(vueMixin.props, true) }));\n\n\n }\n });\n }\n return behaviors;\n}\n\nfunction parsePropType(key, type, defaultValue, file) {\n // [String]=>String\n if (Array.isArray(type) && type.length === 1) {\n return type[0];\n }\n return type;\n}\n\nfunction initProperties(props) {var isBehavior = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;var file = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var properties = {};\n if (!isBehavior) {\n properties.vueId = {\n type: String,\n value: '' };\n\n properties.vueSlots = { // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots\n type: null,\n value: [],\n observer: function observer(newVal, oldVal) {\n var $slots = Object.create(null);\n newVal.forEach(function (slotName) {\n $slots[slotName] = true;\n });\n this.setData({\n $slots: $slots });\n\n } };\n\n }\n if (Array.isArray(props)) {// ['title']\n props.forEach(function (key) {\n properties[key] = {\n type: null,\n observer: createObserver(key) };\n\n });\n } else if (isPlainObject(props)) {// {title:{type:String,default:''},content:String}\n Object.keys(props).forEach(function (key) {\n var opts = props[key];\n if (isPlainObject(opts)) {// title:{type:String,default:''}\n var value = opts['default'];\n if (isFn(value)) {\n value = value();\n }\n\n opts.type = parsePropType(key, opts.type);\n\n properties[key] = {\n type: PROP_TYPES.indexOf(opts.type) !== -1 ? opts.type : null,\n value: value,\n observer: createObserver(key) };\n\n } else {// content:String\n var type = parsePropType(key, opts);\n properties[key] = {\n type: PROP_TYPES.indexOf(type) !== -1 ? type : null,\n observer: createObserver(key) };\n\n }\n });\n }\n return properties;\n}\n\nfunction wrapper$2(event) {\n // TODO 又得兼容 mpvue 的 mp 对象\n try {\n event.mp = JSON.parse(JSON.stringify(event));\n } catch (e) {}\n\n event.stopPropagation = noop;\n event.preventDefault = noop;\n\n event.target = event.target || {};\n\n if (!hasOwn(event, 'detail')) {\n event.detail = {};\n }\n\n if (isPlainObject(event.detail)) {\n event.target = Object.assign({}, event.target, event.detail);\n }\n\n return event;\n}\n\nfunction getExtraValue(vm, dataPathsArray) {\n var context = vm;\n dataPathsArray.forEach(function (dataPathArray) {\n var dataPath = dataPathArray[0];\n var value = dataPathArray[2];\n if (dataPath || typeof value !== 'undefined') {// ['','',index,'disable']\n var propPath = dataPathArray[1];\n var valuePath = dataPathArray[3];\n\n var vFor = dataPath ? vm.__get_value(dataPath, context) : context;\n\n if (Number.isInteger(vFor)) {\n context = value;\n } else if (!propPath) {\n context = vFor[value];\n } else {\n if (Array.isArray(vFor)) {\n context = vFor.find(function (vForItem) {\n return vm.__get_value(propPath, vForItem) === value;\n });\n } else if (isPlainObject(vFor)) {\n context = Object.keys(vFor).find(function (vForKey) {\n return vm.__get_value(propPath, vFor[vForKey]) === value;\n });\n } else {\n console.error('v-for 暂不支持循环数据:', vFor);\n }\n }\n\n if (valuePath) {\n context = vm.__get_value(valuePath, context);\n }\n }\n });\n return context;\n}\n\nfunction processEventExtra(vm, extra, event) {\n var extraObj = {};\n\n if (Array.isArray(extra) && extra.length) {\n /**\n *[\n * ['data.items', 'data.id', item.data.id],\n * ['metas', 'id', meta.id]\n *],\n *[\n * ['data.items', 'data.id', item.data.id],\n * ['metas', 'id', meta.id]\n *],\n *'test'\n */\n extra.forEach(function (dataPath, index) {\n if (typeof dataPath === 'string') {\n if (!dataPath) {// model,prop.sync\n extraObj['$' + index] = vm;\n } else {\n if (dataPath === '$event') {// $event\n extraObj['$' + index] = event;\n } else if (dataPath.indexOf('$event.') === 0) {// $event.target.value\n extraObj['$' + index] = vm.__get_value(dataPath.replace('$event.', ''), event);\n } else {\n extraObj['$' + index] = vm.__get_value(dataPath);\n }\n }\n } else {\n extraObj['$' + index] = getExtraValue(vm, dataPath);\n }\n });\n }\n\n return extraObj;\n}\n\nfunction getObjByArray(arr) {\n var obj = {};\n for (var i = 1; i < arr.length; i++) {\n var element = arr[i];\n obj[element[0]] = element[1];\n }\n return obj;\n}\n\nfunction processEventArgs(vm, event) {var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];var extra = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];var isCustom = arguments.length > 4 ? arguments[4] : undefined;var methodName = arguments.length > 5 ? arguments[5] : undefined;\n var isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象\n if (isCustom) {// 自定义事件\n isCustomMPEvent = event.currentTarget &&\n event.currentTarget.dataset &&\n event.currentTarget.dataset.comType === 'wx';\n if (!args.length) {// 无参数,直接传入 event 或 detail 数组\n if (isCustomMPEvent) {\n return [event];\n }\n return event.detail.__args__ || event.detail;\n }\n }\n\n var extraObj = processEventExtra(vm, extra, event);\n\n var ret = [];\n args.forEach(function (arg) {\n if (arg === '$event') {\n if (methodName === '__set_model' && !isCustom) {// input v-model value\n ret.push(event.target.value);\n } else {\n if (isCustom && !isCustomMPEvent) {\n ret.push(event.detail.__args__[0]);\n } else {// wxcomponent 组件或内置组件\n ret.push(event);\n }\n }\n } else {\n if (Array.isArray(arg) && arg[0] === 'o') {\n ret.push(getObjByArray(arg));\n } else if (typeof arg === 'string' && hasOwn(extraObj, arg)) {\n ret.push(extraObj[arg]);\n } else {\n ret.push(arg);\n }\n }\n });\n\n return ret;\n}\n\nvar ONCE = '~';\nvar CUSTOM = '^';\n\nfunction isMatchEventType(eventType, optType) {\n return eventType === optType ||\n\n optType === 'regionchange' && (\n\n eventType === 'begin' ||\n eventType === 'end');\n\n\n}\n\nfunction handleEvent(event) {var _this = this;\n event = wrapper$2(event);\n\n // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]]\n var dataset = (event.currentTarget || event.target).dataset;\n if (!dataset) {\n return console.warn(\"\\u4E8B\\u4EF6\\u4FE1\\u606F\\u4E0D\\u5B58\\u5728\");\n }\n var eventOpts = dataset.eventOpts || dataset['event-opts']; // 支付宝 web-view 组件 dataset 非驼峰\n if (!eventOpts) {\n return console.warn(\"\\u4E8B\\u4EF6\\u4FE1\\u606F\\u4E0D\\u5B58\\u5728\");\n }\n\n // [['handle',[1,2,a]],['handle1',[1,2,a]]]\n var eventType = event.type;\n\n var ret = [];\n\n eventOpts.forEach(function (eventOpt) {\n var type = eventOpt[0];\n var eventsArray = eventOpt[1];\n\n var isCustom = type.charAt(0) === CUSTOM;\n type = isCustom ? type.slice(1) : type;\n var isOnce = type.charAt(0) === ONCE;\n type = isOnce ? type.slice(1) : type;\n\n if (eventsArray && isMatchEventType(eventType, type)) {\n eventsArray.forEach(function (eventArray) {\n var methodName = eventArray[0];\n if (methodName) {\n var handlerCtx = _this.$vm;\n if (\n handlerCtx.$options.generic &&\n handlerCtx.$parent &&\n handlerCtx.$parent.$parent)\n {// mp-weixin,mp-toutiao 抽象节点模拟 scoped slots\n handlerCtx = handlerCtx.$parent.$parent;\n }\n var handler = handlerCtx[methodName];\n if (!isFn(handler)) {\n throw new Error(\" _vm.\".concat(methodName, \" is not a function\"));\n }\n if (isOnce) {\n if (handler.once) {\n return;\n }\n handler.once = true;\n }\n ret.push(handler.apply(handlerCtx, processEventArgs(\n _this.$vm,\n event,\n eventArray[1],\n eventArray[2],\n isCustom,\n methodName)));\n\n }\n });\n }\n });\n\n if (\n eventType === 'input' &&\n ret.length === 1 &&\n typeof ret[0] !== 'undefined')\n {\n return ret[0];\n }\n}\n\nvar hooks = [\n'onShow',\n'onHide',\n'onError',\n'onPageNotFound'];\n\n\nfunction parseBaseApp(vm, _ref2)\n\n\n{var mocks = _ref2.mocks,initRefs = _ref2.initRefs;\n _vue.default.prototype.mpHost = \"app-plus\";\n\n _vue.default.mixin({\n beforeCreate: function beforeCreate() {\n if (!this.$options.mpType) {\n return;\n }\n\n this.mpType = this.$options.mpType;\n\n this.$mp = _defineProperty({\n data: {} },\n this.mpType, this.$options.mpInstance);\n\n\n this.$scope = this.$options.mpInstance;\n\n delete this.$options.mpType;\n delete this.$options.mpInstance;\n\n if (this.mpType !== 'app') {\n initRefs(this);\n initMocks(this, mocks);\n }\n } });\n\n\n var appOptions = {\n onLaunch: function onLaunch(args) {\n if (this.$vm) {// 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前\n return;\n }\n\n this.$vm = vm;\n\n this.$vm.$mp = {\n app: this };\n\n\n this.$vm.$scope = this;\n\n this.$vm._isMounted = true;\n this.$vm.__call_hook('mounted', args);\n\n this.$vm.__call_hook('onLaunch', args);\n } };\n\n\n // 兼容旧版本 globalData\n appOptions.globalData = vm.$options.globalData || {};\n\n initHooks(appOptions, hooks);\n\n return appOptions;\n}\n\nvar mocks = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__'];\n\nfunction findVmByVueId(vm, vuePid) {\n var $children = vm.$children;\n // 优先查找直属\n var parentVm = $children.find(function (childVm) {return childVm.$scope._$vueId === vuePid;});\n if (parentVm) {\n return parentVm;\n }\n // 反向递归查找\n for (var i = $children.length - 1; i >= 0; i--) {\n parentVm = findVmByVueId($children[i], vuePid);\n if (parentVm) {\n return parentVm;\n }\n }\n}\n\nfunction initBehavior(options) {\n return Behavior(options);\n}\n\nfunction isPage() {\n return !!this.route;\n}\n\nfunction initRelation(detail) {\n this.triggerEvent('__l', detail);\n}\n\nfunction initRefs(vm) {\n var mpInstance = vm.$scope;\n Object.defineProperty(vm, '$refs', {\n get: function get() {\n var $refs = {};\n var components = mpInstance.selectAllComponents('.vue-ref');\n components.forEach(function (component) {\n var ref = component.dataset.ref;\n $refs[ref] = component.$vm || component;\n });\n var forComponents = mpInstance.selectAllComponents('.vue-ref-in-for');\n forComponents.forEach(function (component) {\n var ref = component.dataset.ref;\n if (!$refs[ref]) {\n $refs[ref] = [];\n }\n $refs[ref].push(component.$vm || component);\n });\n return $refs;\n } });\n\n}\n\nfunction handleLink(event) {var _ref3 =\n\n\n\n event.detail || event.value,vuePid = _ref3.vuePid,vueOptions = _ref3.vueOptions; // detail 是微信,value 是百度(dipatch)\n\n var parentVm;\n\n if (vuePid) {\n parentVm = findVmByVueId(this.$vm, vuePid);\n }\n\n if (!parentVm) {\n parentVm = this.$vm;\n }\n\n vueOptions.parent = parentVm;\n}\n\nfunction parseApp(vm) {\n return parseBaseApp(vm, {\n mocks: mocks,\n initRefs: initRefs });\n\n}\n\nvar hooks$1 = [\n'onUniNViewMessage'];\n\n\nfunction parseApp$1(vm) {\n var appOptions = parseApp(vm);\n\n initHooks(appOptions, hooks$1);\n\n return appOptions;\n}\n\nfunction createApp(vm) {\n App(parseApp$1(vm));\n return vm;\n}\n\nfunction parseBaseComponent(vueComponentOptions)\n\n\n{var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},isPage = _ref4.isPage,initRelation = _ref4.initRelation;var _initVueComponent =\n initVueComponent(_vue.default, vueComponentOptions),_initVueComponent2 = _slicedToArray(_initVueComponent, 2),VueComponent = _initVueComponent2[0],vueOptions = _initVueComponent2[1];\n\n var componentOptions = {\n options: {\n multipleSlots: true,\n addGlobalClass: true },\n\n data: initData(vueOptions, _vue.default.prototype),\n behaviors: initBehaviors(vueOptions, initBehavior),\n properties: initProperties(vueOptions.props, false, vueOptions.__file),\n lifetimes: {\n attached: function attached() {\n var properties = this.properties;\n\n var options = {\n mpType: isPage.call(this) ? 'page' : 'component',\n mpInstance: this,\n propsData: properties };\n\n\n initVueIds(properties.vueId, this);\n\n // 处理父子关系\n initRelation.call(this, {\n vuePid: this._$vuePid,\n vueOptions: options });\n\n\n // 初始化 vue 实例\n this.$vm = new VueComponent(options);\n\n // 处理$slots,$scopedSlots(暂不支持动态变化$slots)\n initSlots(this.$vm, properties.vueSlots);\n\n // 触发首次 setData\n this.$vm.$mount();\n },\n ready: function ready() {\n // 当组件 props 默认值为 true,初始化时传入 false 会导致 created,ready 触发, 但 attached 不触发\n // https://developers.weixin.qq.com/community/develop/doc/00066ae2844cc0f8eb883e2a557800\n if (this.$vm) {\n this.$vm._isMounted = true;\n this.$vm.__call_hook('mounted');\n this.$vm.__call_hook('onReady');\n }\n },\n detached: function detached() {\n this.$vm.$destroy();\n } },\n\n pageLifetimes: {\n show: function show(args) {\n this.$vm && this.$vm.__call_hook('onPageShow', args);\n },\n hide: function hide() {\n this.$vm && this.$vm.__call_hook('onPageHide');\n },\n resize: function resize(size) {\n this.$vm && this.$vm.__call_hook('onPageResize', size);\n } },\n\n methods: {\n __l: handleLink,\n __e: handleEvent } };\n\n\n\n if (isPage) {\n return componentOptions;\n }\n return [componentOptions, VueComponent];\n}\n\nfunction parseComponent(vueComponentOptions) {\n return parseBaseComponent(vueComponentOptions, {\n isPage: isPage,\n initRelation: initRelation });\n\n}\n\nfunction parseComponent$1(vueComponentOptions) {\n var componentOptions = parseComponent(vueComponentOptions);\n\n componentOptions.methods.$getAppWebview = function () {\n return plus.webview.getWebviewById(\"\".concat(this.__wxWebviewId__));\n };\n return componentOptions;\n}\n\nvar hooks$2 = [\n'onShow',\n'onHide',\n'onUnload'];\n\n\nhooks$2.push.apply(hooks$2, PAGE_EVENT_HOOKS);\n\nfunction parseBasePage(vuePageOptions, _ref5)\n\n\n{var isPage = _ref5.isPage,initRelation = _ref5.initRelation;\n var pageOptions = parseComponent$1(vuePageOptions);\n\n initHooks(pageOptions.methods, hooks$2, vuePageOptions);\n\n pageOptions.methods.onLoad = function (args) {\n this.$vm.$mp.query = args; // 兼容 mpvue\n this.$vm.__call_hook('onLoad', args);\n };\n\n return pageOptions;\n}\n\nfunction parsePage(vuePageOptions) {\n return parseBasePage(vuePageOptions, {\n isPage: isPage,\n initRelation: initRelation });\n\n}\n\nvar hooks$3 = [\n'onBackPress',\n'onNavigationBarButtonTap',\n'onNavigationBarSearchInputChanged',\n'onNavigationBarSearchInputConfirmed',\n'onNavigationBarSearchInputClicked'];\n\n\nfunction parsePage$1(vuePageOptions) {\n var pageOptions = parsePage(vuePageOptions);\n\n initHooks(pageOptions.methods, hooks$3);\n\n return pageOptions;\n}\n\nfunction createPage(vuePageOptions) {\n {\n return Component(parsePage$1(vuePageOptions));\n }\n}\n\nfunction createComponent(vueOptions) {\n {\n return Component(parseComponent$1(vueOptions));\n }\n}\n\ntodos.forEach(function (todoApi) {\n protocols[todoApi] = false;\n});\n\ncanIUses.forEach(function (canIUseApi) {\n var apiName = protocols[canIUseApi] && protocols[canIUseApi].name ? protocols[canIUseApi].name :\n canIUseApi;\n if (!wx.canIUse(apiName)) {\n protocols[canIUseApi] = false;\n }\n});\n\nvar uni = {};\n\nif (typeof Proxy !== 'undefined' && \"app-plus\" !== 'app-plus') {\n uni = new Proxy({}, {\n get: function get(target, name) {\n if (baseApi[name]) {\n return baseApi[name];\n }\n if (api[name]) {\n return promisify(name, api[name]);\n }\n if (eventApi[name]) {\n return eventApi[name];\n }\n if (!hasOwn(wx, name) && !hasOwn(protocols, name)) {\n return;\n }\n return promisify(name, wrapper(name, wx[name]));\n } });\n\n} else {\n Object.keys(baseApi).forEach(function (name) {\n uni[name] = baseApi[name];\n });\n\n Object.keys(eventApi).forEach(function (name) {\n uni[name] = eventApi[name];\n });\n\n Object.keys(api).forEach(function (name) {\n uni[name] = promisify(name, api[name]);\n });\n\n Object.keys(wx).forEach(function (name) {\n if (hasOwn(wx, name) || hasOwn(protocols, name)) {\n uni[name] = promisify(name, wrapper(name, wx[name]));\n }\n });\n}\n\n{\n if (typeof global !== 'undefined') {\n global.uni = uni;\n global.UniEmitter = eventApi;\n }\n}\n\nwx.createApp = createApp;\nwx.createPage = createPage;\nwx.createComponent = createComponent;\n\nvar uni$1 = uni;var _default =\n\nuni$1;exports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ 2)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbIl90b1N0cmluZyIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiaGFzT3duUHJvcGVydHkiLCJpc0ZuIiwiZm4iLCJpc1N0ciIsInN0ciIsImlzUGxhaW5PYmplY3QiLCJvYmoiLCJjYWxsIiwiaGFzT3duIiwia2V5Iiwibm9vcCIsImNhY2hlZCIsImNhY2hlIiwiY3JlYXRlIiwiY2FjaGVkRm4iLCJoaXQiLCJjYW1lbGl6ZVJFIiwiY2FtZWxpemUiLCJyZXBsYWNlIiwiXyIsImMiLCJ0b1VwcGVyQ2FzZSIsIkhPT0tTIiwiZ2xvYmFsSW50ZXJjZXB0b3JzIiwic2NvcGVkSW50ZXJjZXB0b3JzIiwibWVyZ2VIb29rIiwicGFyZW50VmFsIiwiY2hpbGRWYWwiLCJyZXMiLCJjb25jYXQiLCJBcnJheSIsImlzQXJyYXkiLCJkZWR1cGVIb29rcyIsImhvb2tzIiwiaSIsImxlbmd0aCIsImluZGV4T2YiLCJwdXNoIiwicmVtb3ZlSG9vayIsImhvb2siLCJpbmRleCIsInNwbGljZSIsIm1lcmdlSW50ZXJjZXB0b3JIb29rIiwiaW50ZXJjZXB0b3IiLCJvcHRpb24iLCJrZXlzIiwiZm9yRWFjaCIsInJlbW92ZUludGVyY2VwdG9ySG9vayIsImFkZEludGVyY2VwdG9yIiwibWV0aG9kIiwicmVtb3ZlSW50ZXJjZXB0b3IiLCJ3cmFwcGVySG9vayIsImRhdGEiLCJpc1Byb21pc2UiLCJ0aGVuIiwicXVldWUiLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjYWxsYmFjayIsIndyYXBwZXJPcHRpb25zIiwib3B0aW9ucyIsIm5hbWUiLCJvbGRDYWxsYmFjayIsImNhbGxiYWNrSW50ZXJjZXB0b3IiLCJ3cmFwcGVyUmV0dXJuVmFsdWUiLCJyZXR1cm5WYWx1ZSIsInJldHVyblZhbHVlSG9va3MiLCJnZXRBcGlJbnRlcmNlcHRvckhvb2tzIiwic2xpY2UiLCJzY29wZWRJbnRlcmNlcHRvciIsImludm9rZUFwaSIsImFwaSIsInBhcmFtcyIsImludm9rZSIsInByb21pc2VJbnRlcmNlcHRvciIsImNhdGNoIiwiU1lOQ19BUElfUkUiLCJDT05URVhUX0FQSV9SRSIsIkNBTExCQUNLX0FQSV9SRSIsImlzQ29udGV4dEFwaSIsInRlc3QiLCJpc1N5bmNBcGkiLCJpc0NhbGxiYWNrQXBpIiwiaGFuZGxlUHJvbWlzZSIsImVyciIsInNob3VsZFByb21pc2UiLCJwcm9taXNpZnkiLCJwcm9taXNlQXBpIiwic3VjY2VzcyIsImZhaWwiLCJjb21wbGV0ZSIsInJlamVjdCIsImFzc2lnbiIsImZpbmFsbHkiLCJjb25zdHJ1Y3RvciIsInZhbHVlIiwicmVhc29uIiwiRVBTIiwiQkFTRV9ERVZJQ0VfV0lEVEgiLCJpc0lPUyIsImRldmljZVdpZHRoIiwiZGV2aWNlRFBSIiwiY2hlY2tEZXZpY2VXaWR0aCIsInd4IiwiZ2V0U3lzdGVtSW5mb1N5bmMiLCJwbGF0Zm9ybSIsInBpeGVsUmF0aW8iLCJ3aW5kb3dXaWR0aCIsInVweDJweCIsIm51bWJlciIsIm5ld0RldmljZVdpZHRoIiwiTnVtYmVyIiwicmVzdWx0IiwiTWF0aCIsImZsb29yIiwiaW50ZXJjZXB0b3JzIiwiYmFzZUFwaSIsImZyZWV6ZSIsInByb3RvY29scyIsInRvZG9zIiwiY2FuSVVzZXMiLCJDQUxMQkFDS1MiLCJwcm9jZXNzQ2FsbGJhY2siLCJtZXRob2ROYW1lIiwicHJvY2Vzc1JldHVyblZhbHVlIiwicHJvY2Vzc0FyZ3MiLCJmcm9tQXJncyIsImFyZ3NPcHRpb24iLCJrZWVwRnJvbUFyZ3MiLCJ0b0FyZ3MiLCJrZXlPcHRpb24iLCJjb25zb2xlIiwid2FybiIsImtlZXBSZXR1cm5WYWx1ZSIsIndyYXBwZXIiLCJwcm90b2NvbCIsImVycm9yIiwiYXJnMSIsImFyZzIiLCJhcmdzIiwiYXBwbHkiLCJ0b2RvQXBpcyIsIlRPRE9TIiwiY3JlYXRlVG9kb0FwaSIsInRvZG9BcGkiLCJlcnJNc2ciLCJnZXRFbWl0dGVyIiwiZ2V0VW5pRW1pdHRlciIsIkVtaXR0ZXIiLCJWdWUiLCJjdHgiLCIkb24iLCJhcmd1bWVudHMiLCIkb2ZmIiwiJG9uY2UiLCIkZW1pdCIsImV2ZW50QXBpIiwid3JhcHBlciQxIiwid2VidmlldyIsIiRwcm9jZXNzZWQiLCJwb3N0TWVzc2FnZSIsInBsdXMiLCJwb3N0TWVzc2FnZVRvVW5pTlZpZXciLCJ0eXBlIiwiaWQiLCJjYWxsYmFja3MiLCJvbk1lc3NhZ2UiLCIkY29uc3VtZU1lc3NhZ2UiLCJlIiwiX191bmlhcHBfbWFza19pZCIsIm1hc2tDb2xvciIsIl9fdW5pYXBwX21hc2siLCJtYXNrV2VidmlldyIsImdldFdlYnZpZXdCeUlkIiwicGFyZW50Iiwib2xkU2hvdyIsInNob3ciLCJvbGRIaWRlIiwiaGlkZSIsIm9sZENsb3NlIiwiY2xvc2UiLCJzaG93TWFzayIsInNldFN0eWxlIiwibWFzayIsImNsb3NlTWFzayIsImdldFN1Yk5WdWVCeUlkIiwicmVxdWlyZU5hdGl2ZVBsdWdpbiIsInBsdWdpbk5hbWUiLCJ3ZWV4IiwicmVxdWlyZU1vZHVsZSIsIl9fcmVxdWlyZU5hdGl2ZVBsdWdpbl9fIiwiTVBQYWdlIiwiUGFnZSIsIk1QQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiY3VzdG9taXplUkUiLCJjdXN0b21pemUiLCJpbml0VHJpZ2dlckV2ZW50IiwibXBJbnN0YW5jZSIsImNhbklVc2UiLCJvbGRUcmlnZ2VyRXZlbnQiLCJ0cmlnZ2VyRXZlbnQiLCJldmVudCIsImluaXRIb29rIiwib2xkSG9vayIsIlBBR0VfRVZFTlRfSE9PS1MiLCJpbml0TW9ja3MiLCJ2bSIsIm1vY2tzIiwiJG1wIiwibXBUeXBlIiwibW9jayIsImhhc0hvb2siLCJ2dWVPcHRpb25zIiwiZGVmYXVsdCIsImV4dGVuZE9wdGlvbnMiLCJzdXBlciIsIm1peGlucyIsImZpbmQiLCJtaXhpbiIsImluaXRIb29rcyIsIm1wT3B0aW9ucyIsIiR2bSIsIl9fY2FsbF9ob29rIiwiaW5pdFZ1ZUNvbXBvbmVudCIsIlZ1ZUNvbXBvbmVudCIsImV4dGVuZCIsImluaXRTbG90cyIsInZ1ZVNsb3RzIiwiJHNsb3RzIiwic2xvdE5hbWUiLCIkc2NvcGVkU2xvdHMiLCJpbml0VnVlSWRzIiwidnVlSWRzIiwic3BsaXQiLCJsZW4iLCJfJHZ1ZUlkIiwiXyR2dWVQaWQiLCJpbml0RGF0YSIsImNvbnRleHQiLCJtZXRob2RzIiwicHJvY2VzcyIsIlZVRV9BUFBfREVCVUciLCJKU09OIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJfX2xpZmVjeWNsZV9ob29rc19fIiwiUFJPUF9UWVBFUyIsIlN0cmluZyIsIkJvb2xlYW4iLCJjcmVhdGVPYnNlcnZlciIsIm9ic2VydmVyIiwibmV3VmFsIiwib2xkVmFsIiwiaW5pdEJlaGF2aW9ycyIsImluaXRCZWhhdmlvciIsInZ1ZUJlaGF2aW9ycyIsInZ1ZUV4dGVuZHMiLCJ2dWVNaXhpbnMiLCJ2dWVQcm9wcyIsImJlaGF2aW9ycyIsImJlaGF2aW9yIiwiRGF0ZSIsInByb3BzIiwicHJvcGVydGllcyIsImluaXRQcm9wZXJ0aWVzIiwidnVlTWl4aW4iLCJwYXJzZVByb3BUeXBlIiwiZGVmYXVsdFZhbHVlIiwiZmlsZSIsImlzQmVoYXZpb3IiLCJ2dWVJZCIsInNldERhdGEiLCJvcHRzIiwid3JhcHBlciQyIiwibXAiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsInRhcmdldCIsImRldGFpbCIsImdldEV4dHJhVmFsdWUiLCJkYXRhUGF0aHNBcnJheSIsImRhdGFQYXRoQXJyYXkiLCJkYXRhUGF0aCIsInByb3BQYXRoIiwidmFsdWVQYXRoIiwidkZvciIsIl9fZ2V0X3ZhbHVlIiwiaXNJbnRlZ2VyIiwidkZvckl0ZW0iLCJ2Rm9yS2V5IiwicHJvY2Vzc0V2ZW50RXh0cmEiLCJleHRyYSIsImV4dHJhT2JqIiwiZ2V0T2JqQnlBcnJheSIsImFyciIsImVsZW1lbnQiLCJwcm9jZXNzRXZlbnRBcmdzIiwiaXNDdXN0b20iLCJpc0N1c3RvbU1QRXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwiZGF0YXNldCIsImNvbVR5cGUiLCJfX2FyZ3NfXyIsInJldCIsImFyZyIsIk9OQ0UiLCJDVVNUT00iLCJpc01hdGNoRXZlbnRUeXBlIiwiZXZlbnRUeXBlIiwib3B0VHlwZSIsImhhbmRsZUV2ZW50IiwiZXZlbnRPcHRzIiwiZXZlbnRPcHQiLCJldmVudHNBcnJheSIsImNoYXJBdCIsImlzT25jZSIsImV2ZW50QXJyYXkiLCJoYW5kbGVyQ3R4IiwiJG9wdGlvbnMiLCJnZW5lcmljIiwiJHBhcmVudCIsImhhbmRsZXIiLCJFcnJvciIsIm9uY2UiLCJwYXJzZUJhc2VBcHAiLCJpbml0UmVmcyIsIm1wSG9zdCIsImJlZm9yZUNyZWF0ZSIsIiRzY29wZSIsImFwcE9wdGlvbnMiLCJvbkxhdW5jaCIsImFwcCIsIl9pc01vdW50ZWQiLCJnbG9iYWxEYXRhIiwiZmluZFZtQnlWdWVJZCIsInZ1ZVBpZCIsIiRjaGlsZHJlbiIsInBhcmVudFZtIiwiY2hpbGRWbSIsIkJlaGF2aW9yIiwiaXNQYWdlIiwicm91dGUiLCJpbml0UmVsYXRpb24iLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsIiRyZWZzIiwiY29tcG9uZW50cyIsInNlbGVjdEFsbENvbXBvbmVudHMiLCJjb21wb25lbnQiLCJyZWYiLCJmb3JDb21wb25lbnRzIiwiaGFuZGxlTGluayIsInBhcnNlQXBwIiwiaG9va3MkMSIsInBhcnNlQXBwJDEiLCJjcmVhdGVBcHAiLCJBcHAiLCJwYXJzZUJhc2VDb21wb25lbnQiLCJ2dWVDb21wb25lbnRPcHRpb25zIiwiY29tcG9uZW50T3B0aW9ucyIsIm11bHRpcGxlU2xvdHMiLCJhZGRHbG9iYWxDbGFzcyIsIl9fZmlsZSIsImxpZmV0aW1lcyIsImF0dGFjaGVkIiwicHJvcHNEYXRhIiwiJG1vdW50IiwicmVhZHkiLCJkZXRhY2hlZCIsIiRkZXN0cm95IiwicGFnZUxpZmV0aW1lcyIsInJlc2l6ZSIsInNpemUiLCJfX2wiLCJfX2UiLCJwYXJzZUNvbXBvbmVudCIsInBhcnNlQ29tcG9uZW50JDEiLCIkZ2V0QXBwV2VidmlldyIsIl9fd3hXZWJ2aWV3SWRfXyIsImhvb2tzJDIiLCJwYXJzZUJhc2VQYWdlIiwidnVlUGFnZU9wdGlvbnMiLCJwYWdlT3B0aW9ucyIsIm9uTG9hZCIsInF1ZXJ5IiwicGFyc2VQYWdlIiwiaG9va3MkMyIsInBhcnNlUGFnZSQxIiwiY3JlYXRlUGFnZSIsImNyZWF0ZUNvbXBvbmVudCIsImNhbklVc2VBcGkiLCJhcGlOYW1lIiwidW5pIiwiUHJveHkiLCJnbG9iYWwiLCJVbmlFbWl0dGVyIiwidW5pJDEiXSwibWFwcGluZ3MiOiI2T0FBQSxxRTs7QUFFQSxJQUFNQSxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsUUFBbkM7QUFDQSxJQUFNQyxjQUFjLEdBQUdILE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkUsY0FBeEM7O0FBRUEsU0FBU0MsSUFBVCxDQUFlQyxFQUFmLEVBQW1CO0FBQ2pCLFNBQU8sT0FBT0EsRUFBUCxLQUFjLFVBQXJCO0FBQ0Q7O0FBRUQsU0FBU0MsS0FBVCxDQUFnQkMsR0FBaEIsRUFBcUI7QUFDbkIsU0FBTyxPQUFPQSxHQUFQLEtBQWUsUUFBdEI7QUFDRDs7QUFFRCxTQUFTQyxhQUFULENBQXdCQyxHQUF4QixFQUE2QjtBQUMzQixTQUFPVixTQUFTLENBQUNXLElBQVYsQ0FBZUQsR0FBZixNQUF3QixpQkFBL0I7QUFDRDs7QUFFRCxTQUFTRSxNQUFULENBQWlCRixHQUFqQixFQUFzQkcsR0FBdEIsRUFBMkI7QUFDekIsU0FBT1QsY0FBYyxDQUFDTyxJQUFmLENBQW9CRCxHQUFwQixFQUF5QkcsR0FBekIsQ0FBUDtBQUNEOztBQUVELFNBQVNDLElBQVQsR0FBaUIsQ0FBRTs7QUFFbkI7OztBQUdBLFNBQVNDLE1BQVQsQ0FBaUJULEVBQWpCLEVBQXFCO0FBQ25CLE1BQU1VLEtBQUssR0FBR2YsTUFBTSxDQUFDZ0IsTUFBUCxDQUFjLElBQWQsQ0FBZDtBQUNBLFNBQU8sU0FBU0MsUUFBVCxDQUFtQlYsR0FBbkIsRUFBd0I7QUFDN0IsUUFBTVcsR0FBRyxHQUFHSCxLQUFLLENBQUNSLEdBQUQsQ0FBakI7QUFDQSxXQUFPVyxHQUFHLEtBQUtILEtBQUssQ0FBQ1IsR0FBRCxDQUFMLEdBQWFGLEVBQUUsQ0FBQ0UsR0FBRCxDQUFwQixDQUFWO0FBQ0QsR0FIRDtBQUlEOztBQUVEOzs7QUFHQSxJQUFNWSxVQUFVLEdBQUcsUUFBbkI7QUFDQSxJQUFNQyxRQUFRLEdBQUdOLE1BQU0sQ0FBQyxVQUFDUCxHQUFELEVBQVM7QUFDL0IsU0FBT0EsR0FBRyxDQUFDYyxPQUFKLENBQVlGLFVBQVosRUFBd0IsVUFBQ0csQ0FBRCxFQUFJQyxDQUFKLFVBQVVBLENBQUMsR0FBR0EsQ0FBQyxDQUFDQyxXQUFGLEVBQUgsR0FBcUIsRUFBaEMsRUFBeEIsQ0FBUDtBQUNELENBRnNCLENBQXZCOztBQUlBLElBQU1DLEtBQUssR0FBRztBQUNaLFFBRFk7QUFFWixTQUZZO0FBR1osTUFIWTtBQUlaLFVBSlk7QUFLWixhQUxZLENBQWQ7OztBQVFBLElBQU1DLGtCQUFrQixHQUFHLEVBQTNCO0FBQ0EsSUFBTUMsa0JBQWtCLEdBQUcsRUFBM0I7O0FBRUEsU0FBU0MsU0FBVCxDQUFvQkMsU0FBcEIsRUFBK0JDLFFBQS9CLEVBQXlDO0FBQ3ZDLE1BQU1DLEdBQUcsR0FBR0QsUUFBUTtBQUNoQkQsV0FBUztBQUNQQSxXQUFTLENBQUNHLE1BQVYsQ0FBaUJGLFFBQWpCLENBRE87QUFFUEcsT0FBSyxDQUFDQyxPQUFOLENBQWNKLFFBQWQ7QUFDRUEsVUFERixHQUNhLENBQUNBLFFBQUQsQ0FKQztBQUtoQkQsV0FMSjtBQU1BLFNBQU9FLEdBQUc7QUFDTkksYUFBVyxDQUFDSixHQUFELENBREw7QUFFTkEsS0FGSjtBQUdEOztBQUVELFNBQVNJLFdBQVQsQ0FBc0JDLEtBQXRCLEVBQTZCO0FBQzNCLE1BQU1MLEdBQUcsR0FBRyxFQUFaO0FBQ0EsT0FBSyxJQUFJTSxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRCxLQUFLLENBQUNFLE1BQTFCLEVBQWtDRCxDQUFDLEVBQW5DLEVBQXVDO0FBQ3JDLFFBQUlOLEdBQUcsQ0FBQ1EsT0FBSixDQUFZSCxLQUFLLENBQUNDLENBQUQsQ0FBakIsTUFBMEIsQ0FBQyxDQUEvQixFQUFrQztBQUNoQ04sU0FBRyxDQUFDUyxJQUFKLENBQVNKLEtBQUssQ0FBQ0MsQ0FBRCxDQUFkO0FBQ0Q7QUFDRjtBQUNELFNBQU9OLEdBQVA7QUFDRDs7QUFFRCxTQUFTVSxVQUFULENBQXFCTCxLQUFyQixFQUE0Qk0sSUFBNUIsRUFBa0M7QUFDaEMsTUFBTUMsS0FBSyxHQUFHUCxLQUFLLENBQUNHLE9BQU4sQ0FBY0csSUFBZCxDQUFkO0FBQ0EsTUFBSUMsS0FBSyxLQUFLLENBQUMsQ0FBZixFQUFrQjtBQUNoQlAsU0FBSyxDQUFDUSxNQUFOLENBQWFELEtBQWIsRUFBb0IsQ0FBcEI7QUFDRDtBQUNGOztBQUVELFNBQVNFLG9CQUFULENBQStCQyxXQUEvQixFQUE0Q0MsTUFBNUMsRUFBb0Q7QUFDbEQvQyxRQUFNLENBQUNnRCxJQUFQLENBQVlELE1BQVosRUFBb0JFLE9BQXBCLENBQTRCLFVBQUFQLElBQUksRUFBSTtBQUNsQyxRQUFJakIsS0FBSyxDQUFDYyxPQUFOLENBQWNHLElBQWQsTUFBd0IsQ0FBQyxDQUF6QixJQUE4QnRDLElBQUksQ0FBQzJDLE1BQU0sQ0FBQ0wsSUFBRCxDQUFQLENBQXRDLEVBQXNEO0FBQ3BESSxpQkFBVyxDQUFDSixJQUFELENBQVgsR0FBb0JkLFNBQVMsQ0FBQ2tCLFdBQVcsQ0FBQ0osSUFBRCxDQUFaLEVBQW9CSyxNQUFNLENBQUNMLElBQUQsQ0FBMUIsQ0FBN0I7QUFDRDtBQUNGLEdBSkQ7QUFLRDs7QUFFRCxTQUFTUSxxQkFBVCxDQUFnQ0osV0FBaEMsRUFBNkNDLE1BQTdDLEVBQXFEO0FBQ25ELE1BQUksQ0FBQ0QsV0FBRCxJQUFnQixDQUFDQyxNQUFyQixFQUE2QjtBQUMzQjtBQUNEO0FBQ0QvQyxRQUFNLENBQUNnRCxJQUFQLENBQVlELE1BQVosRUFBb0JFLE9BQXBCLENBQTRCLFVBQUFQLElBQUksRUFBSTtBQUNsQyxRQUFJakIsS0FBSyxDQUFDYyxPQUFOLENBQWNHLElBQWQsTUFBd0IsQ0FBQyxDQUF6QixJQUE4QnRDLElBQUksQ0FBQzJDLE1BQU0sQ0FBQ0wsSUFBRCxDQUFQLENBQXRDLEVBQXNEO0FBQ3BERCxnQkFBVSxDQUFDSyxXQUFXLENBQUNKLElBQUQsQ0FBWixFQUFvQkssTUFBTSxDQUFDTCxJQUFELENBQTFCLENBQVY7QUFDRDtBQUNGLEdBSkQ7QUFLRDs7QUFFRCxTQUFTUyxjQUFULENBQXlCQyxNQUF6QixFQUFpQ0wsTUFBakMsRUFBeUM7QUFDdkMsTUFBSSxPQUFPSyxNQUFQLEtBQWtCLFFBQWxCLElBQThCNUMsYUFBYSxDQUFDdUMsTUFBRCxDQUEvQyxFQUF5RDtBQUN2REYsd0JBQW9CLENBQUNsQixrQkFBa0IsQ0FBQ3lCLE1BQUQsQ0FBbEIsS0FBK0J6QixrQkFBa0IsQ0FBQ3lCLE1BQUQsQ0FBbEIsR0FBNkIsRUFBNUQsQ0FBRCxFQUFrRUwsTUFBbEUsQ0FBcEI7QUFDRCxHQUZELE1BRU8sSUFBSXZDLGFBQWEsQ0FBQzRDLE1BQUQsQ0FBakIsRUFBMkI7QUFDaENQLHdCQUFvQixDQUFDbkIsa0JBQUQsRUFBcUIwQixNQUFyQixDQUFwQjtBQUNEO0FBQ0Y7O0FBRUQsU0FBU0MsaUJBQVQsQ0FBNEJELE1BQTVCLEVBQW9DTCxNQUFwQyxFQUE0QztBQUMxQyxNQUFJLE9BQU9LLE1BQVAsS0FBa0IsUUFBdEIsRUFBZ0M7QUFDOUIsUUFBSTVDLGFBQWEsQ0FBQ3VDLE1BQUQsQ0FBakIsRUFBMkI7QUFDekJHLDJCQUFxQixDQUFDdkIsa0JBQWtCLENBQUN5QixNQUFELENBQW5CLEVBQTZCTCxNQUE3QixDQUFyQjtBQUNELEtBRkQsTUFFTztBQUNMLGFBQU9wQixrQkFBa0IsQ0FBQ3lCLE1BQUQsQ0FBekI7QUFDRDtBQUNGLEdBTkQsTUFNTyxJQUFJNUMsYUFBYSxDQUFDNEMsTUFBRCxDQUFqQixFQUEyQjtBQUNoQ0YseUJBQXFCLENBQUN4QixrQkFBRCxFQUFxQjBCLE1BQXJCLENBQXJCO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTRSxXQUFULENBQXNCWixJQUF0QixFQUE0QjtBQUMxQixTQUFPLFVBQVVhLElBQVYsRUFBZ0I7QUFDckIsV0FBT2IsSUFBSSxDQUFDYSxJQUFELENBQUosSUFBY0EsSUFBckI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU0MsU0FBVCxDQUFvQi9DLEdBQXBCLEVBQXlCO0FBQ3ZCLFNBQU8sQ0FBQyxDQUFDQSxHQUFGLEtBQVUsT0FBT0EsR0FBUCxLQUFlLFFBQWYsSUFBMkIsT0FBT0EsR0FBUCxLQUFlLFVBQXBELEtBQW1FLE9BQU9BLEdBQUcsQ0FBQ2dELElBQVgsS0FBb0IsVUFBOUY7QUFDRDs7QUFFRCxTQUFTQyxLQUFULENBQWdCdEIsS0FBaEIsRUFBdUJtQixJQUF2QixFQUE2QjtBQUMzQixNQUFJSSxPQUFPLEdBQUcsS0FBZDtBQUNBLE9BQUssSUFBSXRCLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdELEtBQUssQ0FBQ0UsTUFBMUIsRUFBa0NELENBQUMsRUFBbkMsRUFBdUM7QUFDckMsUUFBTUssSUFBSSxHQUFHTixLQUFLLENBQUNDLENBQUQsQ0FBbEI7QUFDQSxRQUFJc0IsT0FBSixFQUFhO0FBQ1hBLGFBQU8sR0FBR0MsT0FBTyxDQUFDSCxJQUFSLENBQWFILFdBQVcsQ0FBQ1osSUFBRCxDQUF4QixDQUFWO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsVUFBTVgsR0FBRyxHQUFHVyxJQUFJLENBQUNhLElBQUQsQ0FBaEI7QUFDQSxVQUFJQyxTQUFTLENBQUN6QixHQUFELENBQWIsRUFBb0I7QUFDbEI0QixlQUFPLEdBQUdDLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQjlCLEdBQWhCLENBQVY7QUFDRDtBQUNELFVBQUlBLEdBQUcsS0FBSyxLQUFaLEVBQW1CO0FBQ2pCLGVBQU87QUFDTDBCLGNBREssa0JBQ0csQ0FBRSxDQURMLEVBQVA7O0FBR0Q7QUFDRjtBQUNGO0FBQ0QsU0FBT0UsT0FBTyxJQUFJO0FBQ2hCRixRQURnQixnQkFDVkssUUFEVSxFQUNBO0FBQ2QsYUFBT0EsUUFBUSxDQUFDUCxJQUFELENBQWY7QUFDRCxLQUhlLEVBQWxCOztBQUtEOztBQUVELFNBQVNRLGNBQVQsQ0FBeUJqQixXQUF6QixFQUFvRCxLQUFka0IsT0FBYyx1RUFBSixFQUFJO0FBQ2xELEdBQUMsU0FBRCxFQUFZLE1BQVosRUFBb0IsVUFBcEIsRUFBZ0NmLE9BQWhDLENBQXdDLFVBQUFnQixJQUFJLEVBQUk7QUFDOUMsUUFBSWhDLEtBQUssQ0FBQ0MsT0FBTixDQUFjWSxXQUFXLENBQUNtQixJQUFELENBQXpCLENBQUosRUFBc0M7QUFDcEMsVUFBTUMsV0FBVyxHQUFHRixPQUFPLENBQUNDLElBQUQsQ0FBM0I7QUFDQUQsYUFBTyxDQUFDQyxJQUFELENBQVAsR0FBZ0IsU0FBU0UsbUJBQVQsQ0FBOEJwQyxHQUE5QixFQUFtQztBQUNqRDJCLGFBQUssQ0FBQ1osV0FBVyxDQUFDbUIsSUFBRCxDQUFaLEVBQW9CbEMsR0FBcEIsQ0FBTCxDQUE4QjBCLElBQTlCLENBQW1DLFVBQUMxQixHQUFELEVBQVM7QUFDMUM7QUFDQSxpQkFBTzNCLElBQUksQ0FBQzhELFdBQUQsQ0FBSixJQUFxQkEsV0FBVyxDQUFDbkMsR0FBRCxDQUFoQyxJQUF5Q0EsR0FBaEQ7QUFDRCxTQUhEO0FBSUQsT0FMRDtBQU1EO0FBQ0YsR0FWRDtBQVdBLFNBQU9pQyxPQUFQO0FBQ0Q7O0FBRUQsU0FBU0ksa0JBQVQsQ0FBNkJoQixNQUE3QixFQUFxQ2lCLFdBQXJDLEVBQWtEO0FBQ2hELE1BQU1DLGdCQUFnQixHQUFHLEVBQXpCO0FBQ0EsTUFBSXJDLEtBQUssQ0FBQ0MsT0FBTixDQUFjUixrQkFBa0IsQ0FBQzJDLFdBQWpDLENBQUosRUFBbUQ7QUFDakRDLG9CQUFnQixDQUFDOUIsSUFBakIsT0FBQThCLGdCQUFnQixxQkFBUzVDLGtCQUFrQixDQUFDMkMsV0FBNUIsRUFBaEI7QUFDRDtBQUNELE1BQU12QixXQUFXLEdBQUduQixrQkFBa0IsQ0FBQ3lCLE1BQUQsQ0FBdEM7QUFDQSxNQUFJTixXQUFXLElBQUliLEtBQUssQ0FBQ0MsT0FBTixDQUFjWSxXQUFXLENBQUN1QixXQUExQixDQUFuQixFQUEyRDtBQUN6REMsb0JBQWdCLENBQUM5QixJQUFqQixPQUFBOEIsZ0JBQWdCLHFCQUFTeEIsV0FBVyxDQUFDdUIsV0FBckIsRUFBaEI7QUFDRDtBQUNEQyxrQkFBZ0IsQ0FBQ3JCLE9BQWpCLENBQXlCLFVBQUFQLElBQUksRUFBSTtBQUMvQjJCLGVBQVcsR0FBRzNCLElBQUksQ0FBQzJCLFdBQUQsQ0FBSixJQUFxQkEsV0FBbkM7QUFDRCxHQUZEO0FBR0EsU0FBT0EsV0FBUDtBQUNEOztBQUVELFNBQVNFLHNCQUFULENBQWlDbkIsTUFBakMsRUFBeUM7QUFDdkMsTUFBTU4sV0FBVyxHQUFHOUMsTUFBTSxDQUFDZ0IsTUFBUCxDQUFjLElBQWQsQ0FBcEI7QUFDQWhCLFFBQU0sQ0FBQ2dELElBQVAsQ0FBWXRCLGtCQUFaLEVBQWdDdUIsT0FBaEMsQ0FBd0MsVUFBQVAsSUFBSSxFQUFJO0FBQzlDLFFBQUlBLElBQUksS0FBSyxhQUFiLEVBQTRCO0FBQzFCSSxpQkFBVyxDQUFDSixJQUFELENBQVgsR0FBb0JoQixrQkFBa0IsQ0FBQ2dCLElBQUQsQ0FBbEIsQ0FBeUI4QixLQUF6QixFQUFwQjtBQUNEO0FBQ0YsR0FKRDtBQUtBLE1BQU1DLGlCQUFpQixHQUFHOUMsa0JBQWtCLENBQUN5QixNQUFELENBQTVDO0FBQ0EsTUFBSXFCLGlCQUFKLEVBQXVCO0FBQ3JCekUsVUFBTSxDQUFDZ0QsSUFBUCxDQUFZeUIsaUJBQVosRUFBK0J4QixPQUEvQixDQUF1QyxVQUFBUCxJQUFJLEVBQUk7QUFDN0MsVUFBSUEsSUFBSSxLQUFLLGFBQWIsRUFBNEI7QUFDMUJJLG1CQUFXLENBQUNKLElBQUQsQ0FBWCxHQUFvQixDQUFDSSxXQUFXLENBQUNKLElBQUQsQ0FBWCxJQUFxQixFQUF0QixFQUEwQlYsTUFBMUIsQ0FBaUN5QyxpQkFBaUIsQ0FBQy9CLElBQUQsQ0FBbEQsQ0FBcEI7QUFDRDtBQUNGLEtBSkQ7QUFLRDtBQUNELFNBQU9JLFdBQVA7QUFDRDs7QUFFRCxTQUFTNEIsU0FBVCxDQUFvQnRCLE1BQXBCLEVBQTRCdUIsR0FBNUIsRUFBaUNYLE9BQWpDLEVBQXFELG1DQUFSWSxNQUFRLHVFQUFSQSxNQUFRO0FBQ25ELE1BQU05QixXQUFXLEdBQUd5QixzQkFBc0IsQ0FBQ25CLE1BQUQsQ0FBMUM7QUFDQSxNQUFJTixXQUFXLElBQUk5QyxNQUFNLENBQUNnRCxJQUFQLENBQVlGLFdBQVosRUFBeUJSLE1BQTVDLEVBQW9EO0FBQ2xELFFBQUlMLEtBQUssQ0FBQ0MsT0FBTixDQUFjWSxXQUFXLENBQUMrQixNQUExQixDQUFKLEVBQXVDO0FBQ3JDLFVBQU05QyxHQUFHLEdBQUcyQixLQUFLLENBQUNaLFdBQVcsQ0FBQytCLE1BQWIsRUFBcUJiLE9BQXJCLENBQWpCO0FBQ0EsYUFBT2pDLEdBQUcsQ0FBQzBCLElBQUosQ0FBUyxVQUFDTyxPQUFELEVBQWE7QUFDM0IsZUFBT1csR0FBRyxNQUFILFVBQUlaLGNBQWMsQ0FBQ2pCLFdBQUQsRUFBY2tCLE9BQWQsQ0FBbEIsU0FBNkNZLE1BQTdDLEVBQVA7QUFDRCxPQUZNLENBQVA7QUFHRCxLQUxELE1BS087QUFDTCxhQUFPRCxHQUFHLE1BQUgsVUFBSVosY0FBYyxDQUFDakIsV0FBRCxFQUFja0IsT0FBZCxDQUFsQixTQUE2Q1ksTUFBN0MsRUFBUDtBQUNEO0FBQ0Y7QUFDRCxTQUFPRCxHQUFHLE1BQUgsVUFBSVgsT0FBSixTQUFnQlksTUFBaEIsRUFBUDtBQUNEOztBQUVELElBQU1FLGtCQUFrQixHQUFHO0FBQ3pCVCxhQUR5Qix1QkFDWnRDLEdBRFksRUFDUDtBQUNoQixRQUFJLENBQUN5QixTQUFTLENBQUN6QixHQUFELENBQWQsRUFBcUI7QUFDbkIsYUFBT0EsR0FBUDtBQUNEO0FBQ0QsV0FBT0EsR0FBRyxDQUFDMEIsSUFBSixDQUFTLFVBQUExQixHQUFHLEVBQUk7QUFDckIsYUFBT0EsR0FBRyxDQUFDLENBQUQsQ0FBVjtBQUNELEtBRk0sRUFFSmdELEtBRkksQ0FFRSxVQUFBaEQsR0FBRyxFQUFJO0FBQ2QsYUFBT0EsR0FBRyxDQUFDLENBQUQsQ0FBVjtBQUNELEtBSk0sQ0FBUDtBQUtELEdBVndCLEVBQTNCOzs7QUFhQSxJQUFNaUQsV0FBVztBQUNiLDZKQURKOztBQUdBLElBQU1DLGNBQWMsR0FBRyxrQkFBdkI7O0FBRUEsSUFBTUMsZUFBZSxHQUFHLEtBQXhCOztBQUVBLFNBQVNDLFlBQVQsQ0FBdUJsQixJQUF2QixFQUE2QjtBQUMzQixTQUFPZ0IsY0FBYyxDQUFDRyxJQUFmLENBQW9CbkIsSUFBcEIsQ0FBUDtBQUNEO0FBQ0QsU0FBU29CLFNBQVQsQ0FBb0JwQixJQUFwQixFQUEwQjtBQUN4QixTQUFPZSxXQUFXLENBQUNJLElBQVosQ0FBaUJuQixJQUFqQixDQUFQO0FBQ0Q7O0FBRUQsU0FBU3FCLGFBQVQsQ0FBd0JyQixJQUF4QixFQUE4QjtBQUM1QixTQUFPaUIsZUFBZSxDQUFDRSxJQUFoQixDQUFxQm5CLElBQXJCLENBQVA7QUFDRDs7QUFFRCxTQUFTc0IsYUFBVCxDQUF3QjVCLE9BQXhCLEVBQWlDO0FBQy9CLFNBQU9BLE9BQU8sQ0FBQ0YsSUFBUixDQUFhLFVBQUFGLElBQUksRUFBSTtBQUMxQixXQUFPLENBQUMsSUFBRCxFQUFPQSxJQUFQLENBQVA7QUFDRCxHQUZNO0FBR0p3QixPQUhJLENBR0UsVUFBQVMsR0FBRyxVQUFJLENBQUNBLEdBQUQsQ0FBSixFQUhMLENBQVA7QUFJRDs7QUFFRCxTQUFTQyxhQUFULENBQXdCeEIsSUFBeEIsRUFBOEI7QUFDNUI7QUFDRWtCLGNBQVksQ0FBQ2xCLElBQUQsQ0FBWjtBQUNJb0IsV0FBUyxDQUFDcEIsSUFBRCxDQURiO0FBRUlxQixlQUFhLENBQUNyQixJQUFELENBSG5CO0FBSUU7QUFDQSxXQUFPLEtBQVA7QUFDRDtBQUNELFNBQU8sSUFBUDtBQUNEOztBQUVELFNBQVN5QixTQUFULENBQW9CekIsSUFBcEIsRUFBMEJVLEdBQTFCLEVBQStCO0FBQzdCLE1BQUksQ0FBQ2MsYUFBYSxDQUFDeEIsSUFBRCxDQUFsQixFQUEwQjtBQUN4QixXQUFPVSxHQUFQO0FBQ0Q7QUFDRCxTQUFPLFNBQVNnQixVQUFULEdBQThDLEtBQXpCM0IsT0FBeUIsdUVBQWYsRUFBZSxvQ0FBUlksTUFBUSw2RUFBUkEsTUFBUTtBQUNuRCxRQUFJeEUsSUFBSSxDQUFDNEQsT0FBTyxDQUFDNEIsT0FBVCxDQUFKLElBQXlCeEYsSUFBSSxDQUFDNEQsT0FBTyxDQUFDNkIsSUFBVCxDQUE3QixJQUErQ3pGLElBQUksQ0FBQzRELE9BQU8sQ0FBQzhCLFFBQVQsQ0FBdkQsRUFBMkU7QUFDekUsYUFBTzFCLGtCQUFrQixDQUFDSCxJQUFELEVBQU9TLFNBQVMsTUFBVCxVQUFVVCxJQUFWLEVBQWdCVSxHQUFoQixFQUFxQlgsT0FBckIsU0FBaUNZLE1BQWpDLEVBQVAsQ0FBekI7QUFDRDtBQUNELFdBQU9SLGtCQUFrQixDQUFDSCxJQUFELEVBQU9zQixhQUFhLENBQUMsSUFBSTNCLE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQVVrQyxNQUFWLEVBQXFCO0FBQzdFckIsZUFBUyxNQUFULFVBQVVULElBQVYsRUFBZ0JVLEdBQWhCLEVBQXFCM0UsTUFBTSxDQUFDZ0csTUFBUCxDQUFjLEVBQWQsRUFBa0JoQyxPQUFsQixFQUEyQjtBQUM5QzRCLGVBQU8sRUFBRS9CLE9BRHFDO0FBRTlDZ0MsWUFBSSxFQUFFRSxNQUZ3QyxFQUEzQixDQUFyQjtBQUdPbkIsWUFIUDtBQUlBO0FBQ0EsVUFBSSxDQUFDaEIsT0FBTyxDQUFDM0QsU0FBUixDQUFrQmdHLE9BQXZCLEVBQWdDO0FBQzlCckMsZUFBTyxDQUFDM0QsU0FBUixDQUFrQmdHLE9BQWxCLEdBQTRCLFVBQVVuQyxRQUFWLEVBQW9CO0FBQzlDLGNBQU1ILE9BQU8sR0FBRyxLQUFLdUMsV0FBckI7QUFDQSxpQkFBTyxLQUFLekMsSUFBTDtBQUNMLG9CQUFBMEMsS0FBSyxVQUFJeEMsT0FBTyxDQUFDRSxPQUFSLENBQWdCQyxRQUFRLEVBQXhCLEVBQTRCTCxJQUE1QixDQUFpQyxvQkFBTTBDLEtBQU4sRUFBakMsQ0FBSixFQURBO0FBRUwsb0JBQUFDLE1BQU0sVUFBSXpDLE9BQU8sQ0FBQ0UsT0FBUixDQUFnQkMsUUFBUSxFQUF4QixFQUE0QkwsSUFBNUIsQ0FBaUMsWUFBTTtBQUMvQyxvQkFBTTJDLE1BQU47QUFDRCxhQUZTLENBQUosRUFGRCxDQUFQOztBQU1ELFNBUkQ7QUFTRDtBQUNGLEtBakI2QyxDQUFELENBQXBCLENBQXpCO0FBa0JELEdBdEJEO0FBdUJEOztBQUVELElBQU1DLEdBQUcsR0FBRyxJQUFaO0FBQ0EsSUFBTUMsaUJBQWlCLEdBQUcsR0FBMUI7QUFDQSxJQUFJQyxLQUFLLEdBQUcsS0FBWjtBQUNBLElBQUlDLFdBQVcsR0FBRyxDQUFsQjtBQUNBLElBQUlDLFNBQVMsR0FBRyxDQUFoQjs7QUFFQSxTQUFTQyxnQkFBVCxHQUE2Qjs7Ozs7QUFLdkJDLElBQUUsQ0FBQ0MsaUJBQUgsRUFMdUIsQ0FFekJDLFFBRnlCLHlCQUV6QkEsUUFGeUIsQ0FHekJDLFVBSHlCLHlCQUd6QkEsVUFIeUIsQ0FJekJDLFdBSnlCLHlCQUl6QkEsV0FKeUIsRUFLQzs7QUFFNUJQLGFBQVcsR0FBR08sV0FBZDtBQUNBTixXQUFTLEdBQUdLLFVBQVo7QUFDQVAsT0FBSyxHQUFHTSxRQUFRLEtBQUssS0FBckI7QUFDRDs7QUFFRCxTQUFTRyxNQUFULENBQWlCQyxNQUFqQixFQUF5QkMsY0FBekIsRUFBeUM7QUFDdkMsTUFBSVYsV0FBVyxLQUFLLENBQXBCLEVBQXVCO0FBQ3JCRSxvQkFBZ0I7QUFDakI7O0FBRURPLFFBQU0sR0FBR0UsTUFBTSxDQUFDRixNQUFELENBQWY7QUFDQSxNQUFJQSxNQUFNLEtBQUssQ0FBZixFQUFrQjtBQUNoQixXQUFPLENBQVA7QUFDRDtBQUNELE1BQUlHLE1BQU0sR0FBSUgsTUFBTSxHQUFHWCxpQkFBVixJQUFnQ1ksY0FBYyxJQUFJVixXQUFsRCxDQUFiO0FBQ0EsTUFBSVksTUFBTSxHQUFHLENBQWIsRUFBZ0I7QUFDZEEsVUFBTSxHQUFHLENBQUNBLE1BQVY7QUFDRDtBQUNEQSxRQUFNLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFXRixNQUFNLEdBQUdmLEdBQXBCLENBQVQ7QUFDQSxNQUFJZSxNQUFNLEtBQUssQ0FBZixFQUFrQjtBQUNoQixRQUFJWCxTQUFTLEtBQUssQ0FBZCxJQUFtQixDQUFDRixLQUF4QixFQUErQjtBQUM3QixhQUFPLENBQVA7QUFDRCxLQUZELE1BRU87QUFDTCxhQUFPLEdBQVA7QUFDRDtBQUNGO0FBQ0QsU0FBT1UsTUFBTSxHQUFHLENBQVQsR0FBYSxDQUFDRyxNQUFkLEdBQXVCQSxNQUE5QjtBQUNEOztBQUVELElBQU1HLFlBQVksR0FBRztBQUNuQnpDLG9CQUFrQixFQUFsQkEsa0JBRG1CLEVBQXJCOzs7OztBQU1BLElBQUkwQyxPQUFPLEdBQUcsYUFBYXhILE1BQU0sQ0FBQ3lILE1BQVAsQ0FBYztBQUN2Q1QsUUFBTSxFQUFFQSxNQUQrQjtBQUV2Q08sY0FBWSxFQUFFQSxZQUZ5QjtBQUd2Q3BFLGdCQUFjLEVBQUVBLGNBSHVCO0FBSXZDRSxtQkFBaUIsRUFBRUEsaUJBSm9CLEVBQWQsQ0FBM0I7OztBQU9BLElBQU1xRSxTQUFTLEdBQUcsRUFBbEI7QUFDQSxJQUFNQyxLQUFLLEdBQUcsRUFBZDtBQUNBLElBQU1DLFFBQVEsR0FBRyxFQUFqQjs7QUFFQSxJQUFNQyxTQUFTLEdBQUcsQ0FBQyxTQUFELEVBQVksTUFBWixFQUFvQixRQUFwQixFQUE4QixVQUE5QixDQUFsQjs7QUFFQSxTQUFTQyxlQUFULENBQTBCQyxVQUExQixFQUFzQzNFLE1BQXRDLEVBQThDaUIsV0FBOUMsRUFBMkQ7QUFDekQsU0FBTyxVQUFVdEMsR0FBVixFQUFlO0FBQ3BCLFdBQU9xQixNQUFNLENBQUM0RSxrQkFBa0IsQ0FBQ0QsVUFBRCxFQUFhaEcsR0FBYixFQUFrQnNDLFdBQWxCLENBQW5CLENBQWI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBUzRELFdBQVQsQ0FBc0JGLFVBQXRCLEVBQWtDRyxRQUFsQyxFQUFxRyxLQUF6REMsVUFBeUQsdUVBQTVDLEVBQTRDLEtBQXhDOUQsV0FBd0MsdUVBQTFCLEVBQTBCLEtBQXRCK0QsWUFBc0IsdUVBQVAsS0FBTztBQUNuRyxNQUFJNUgsYUFBYSxDQUFDMEgsUUFBRCxDQUFqQixFQUE2QixDQUFFO0FBQzdCLFFBQU1HLE1BQU0sR0FBR0QsWUFBWSxLQUFLLElBQWpCLEdBQXdCRixRQUF4QixHQUFtQyxFQUFsRCxDQUQyQixDQUMyQjtBQUN0RCxRQUFJOUgsSUFBSSxDQUFDK0gsVUFBRCxDQUFSLEVBQXNCO0FBQ3BCQSxnQkFBVSxHQUFHQSxVQUFVLENBQUNELFFBQUQsRUFBV0csTUFBWCxDQUFWLElBQWdDLEVBQTdDO0FBQ0Q7QUFDRCxTQUFLLElBQUl6SCxHQUFULElBQWdCc0gsUUFBaEIsRUFBMEI7QUFDeEIsVUFBSXZILE1BQU0sQ0FBQ3dILFVBQUQsRUFBYXZILEdBQWIsQ0FBVixFQUE2QjtBQUMzQixZQUFJMEgsU0FBUyxHQUFHSCxVQUFVLENBQUN2SCxHQUFELENBQTFCO0FBQ0EsWUFBSVIsSUFBSSxDQUFDa0ksU0FBRCxDQUFSLEVBQXFCO0FBQ25CQSxtQkFBUyxHQUFHQSxTQUFTLENBQUNKLFFBQVEsQ0FBQ3RILEdBQUQsQ0FBVCxFQUFnQnNILFFBQWhCLEVBQTBCRyxNQUExQixDQUFyQjtBQUNEO0FBQ0QsWUFBSSxDQUFDQyxTQUFMLEVBQWdCLENBQUU7QUFDaEJDLGlCQUFPLENBQUNDLElBQVIsb0JBQXlCVCxVQUF6QixxQ0FBMENuSCxHQUExQztBQUNELFNBRkQsTUFFTyxJQUFJTixLQUFLLENBQUNnSSxTQUFELENBQVQsRUFBc0IsQ0FBRTtBQUM3QkQsZ0JBQU0sQ0FBQ0MsU0FBRCxDQUFOLEdBQW9CSixRQUFRLENBQUN0SCxHQUFELENBQTVCO0FBQ0QsU0FGTSxNQUVBLElBQUlKLGFBQWEsQ0FBQzhILFNBQUQsQ0FBakIsRUFBOEIsQ0FBRTtBQUNyQ0QsZ0JBQU0sQ0FBQ0MsU0FBUyxDQUFDckUsSUFBVixHQUFpQnFFLFNBQVMsQ0FBQ3JFLElBQTNCLEdBQWtDckQsR0FBbkMsQ0FBTixHQUFnRDBILFNBQVMsQ0FBQ25DLEtBQTFEO0FBQ0Q7QUFDRixPQVpELE1BWU8sSUFBSTBCLFNBQVMsQ0FBQ3RGLE9BQVYsQ0FBa0IzQixHQUFsQixNQUEyQixDQUFDLENBQWhDLEVBQW1DO0FBQ3hDeUgsY0FBTSxDQUFDekgsR0FBRCxDQUFOLEdBQWNrSCxlQUFlLENBQUNDLFVBQUQsRUFBYUcsUUFBUSxDQUFDdEgsR0FBRCxDQUFyQixFQUE0QnlELFdBQTVCLENBQTdCO0FBQ0QsT0FGTSxNQUVBO0FBQ0wsWUFBSSxDQUFDK0QsWUFBTCxFQUFtQjtBQUNqQkMsZ0JBQU0sQ0FBQ3pILEdBQUQsQ0FBTixHQUFjc0gsUUFBUSxDQUFDdEgsR0FBRCxDQUF0QjtBQUNEO0FBQ0Y7QUFDRjtBQUNELFdBQU95SCxNQUFQO0FBQ0QsR0EzQkQsTUEyQk8sSUFBSWpJLElBQUksQ0FBQzhILFFBQUQsQ0FBUixFQUFvQjtBQUN6QkEsWUFBUSxHQUFHSixlQUFlLENBQUNDLFVBQUQsRUFBYUcsUUFBYixFQUF1QjdELFdBQXZCLENBQTFCO0FBQ0Q7QUFDRCxTQUFPNkQsUUFBUDtBQUNEOztBQUVELFNBQVNGLGtCQUFULENBQTZCRCxVQUE3QixFQUF5Q2hHLEdBQXpDLEVBQThDc0MsV0FBOUMsRUFBb0YsS0FBekJvRSxlQUF5Qix1RUFBUCxLQUFPO0FBQ2xGLE1BQUlySSxJQUFJLENBQUNzSCxTQUFTLENBQUNyRCxXQUFYLENBQVIsRUFBaUMsQ0FBRTtBQUNqQ3RDLE9BQUcsR0FBRzJGLFNBQVMsQ0FBQ3JELFdBQVYsQ0FBc0IwRCxVQUF0QixFQUFrQ2hHLEdBQWxDLENBQU47QUFDRDtBQUNELFNBQU9rRyxXQUFXLENBQUNGLFVBQUQsRUFBYWhHLEdBQWIsRUFBa0JzQyxXQUFsQixFQUErQixFQUEvQixFQUFtQ29FLGVBQW5DLENBQWxCO0FBQ0Q7O0FBRUQsU0FBU0MsT0FBVCxDQUFrQlgsVUFBbEIsRUFBOEIzRSxNQUE5QixFQUFzQztBQUNwQyxNQUFJekMsTUFBTSxDQUFDK0csU0FBRCxFQUFZSyxVQUFaLENBQVYsRUFBbUM7QUFDakMsUUFBTVksUUFBUSxHQUFHakIsU0FBUyxDQUFDSyxVQUFELENBQTFCO0FBQ0EsUUFBSSxDQUFDWSxRQUFMLEVBQWUsQ0FBRTtBQUNmLGFBQU8sWUFBWTtBQUNqQkosZUFBTyxDQUFDSyxLQUFSLDRDQUE4QmIsVUFBOUI7QUFDRCxPQUZEO0FBR0Q7QUFDRCxXQUFPLFVBQVVjLElBQVYsRUFBZ0JDLElBQWhCLEVBQXNCLENBQUU7QUFDN0IsVUFBSTlFLE9BQU8sR0FBRzJFLFFBQWQ7QUFDQSxVQUFJdkksSUFBSSxDQUFDdUksUUFBRCxDQUFSLEVBQW9CO0FBQ2xCM0UsZUFBTyxHQUFHMkUsUUFBUSxDQUFDRSxJQUFELENBQWxCO0FBQ0Q7O0FBRURBLFVBQUksR0FBR1osV0FBVyxDQUFDRixVQUFELEVBQWFjLElBQWIsRUFBbUI3RSxPQUFPLENBQUMrRSxJQUEzQixFQUFpQy9FLE9BQU8sQ0FBQ0ssV0FBekMsQ0FBbEI7O0FBRUEsVUFBTTBFLElBQUksR0FBRyxDQUFDRixJQUFELENBQWI7QUFDQSxVQUFJLE9BQU9DLElBQVAsS0FBZ0IsV0FBcEIsRUFBaUM7QUFDL0JDLFlBQUksQ0FBQ3ZHLElBQUwsQ0FBVXNHLElBQVY7QUFDRDtBQUNELFVBQU16RSxXQUFXLEdBQUdzQyxFQUFFLENBQUMzQyxPQUFPLENBQUNDLElBQVIsSUFBZ0I4RCxVQUFqQixDQUFGLENBQStCaUIsS0FBL0IsQ0FBcUNyQyxFQUFyQyxFQUF5Q29DLElBQXpDLENBQXBCO0FBQ0EsVUFBSTFELFNBQVMsQ0FBQzBDLFVBQUQsQ0FBYixFQUEyQixDQUFFO0FBQzNCLGVBQU9DLGtCQUFrQixDQUFDRCxVQUFELEVBQWExRCxXQUFiLEVBQTBCTCxPQUFPLENBQUNLLFdBQWxDLEVBQStDYyxZQUFZLENBQUM0QyxVQUFELENBQTNELENBQXpCO0FBQ0Q7QUFDRCxhQUFPMUQsV0FBUDtBQUNELEtBakJEO0FBa0JEO0FBQ0QsU0FBT2pCLE1BQVA7QUFDRDs7QUFFRCxJQUFNNkYsUUFBUSxHQUFHakosTUFBTSxDQUFDZ0IsTUFBUCxDQUFjLElBQWQsQ0FBakI7O0FBRUEsSUFBTWtJLEtBQUssR0FBRztBQUNaLGVBRFk7QUFFWixpQkFGWTtBQUdaLFFBSFk7QUFJWixTQUpZO0FBS1osT0FMWSxDQUFkOzs7QUFRQSxTQUFTQyxhQUFULENBQXdCbEYsSUFBeEIsRUFBOEI7QUFDNUIsU0FBTyxTQUFTbUYsT0FBVDs7O0FBR0osT0FGRHZELElBRUMsUUFGREEsSUFFQyxDQUREQyxRQUNDLFFBRERBLFFBQ0M7QUFDRCxRQUFNL0QsR0FBRyxHQUFHO0FBQ1ZzSCxZQUFNLFlBQUtwRixJQUFMLDRDQUF1QkEsSUFBdkIsa0JBREksRUFBWjs7QUFHQTdELFFBQUksQ0FBQ3lGLElBQUQsQ0FBSixJQUFjQSxJQUFJLENBQUM5RCxHQUFELENBQWxCO0FBQ0EzQixRQUFJLENBQUMwRixRQUFELENBQUosSUFBa0JBLFFBQVEsQ0FBQy9ELEdBQUQsQ0FBMUI7QUFDRCxHQVREO0FBVUQ7O0FBRURtSCxLQUFLLENBQUNqRyxPQUFOLENBQWMsVUFBVWdCLElBQVYsRUFBZ0I7QUFDNUJnRixVQUFRLENBQUNoRixJQUFELENBQVIsR0FBaUJrRixhQUFhLENBQUNsRixJQUFELENBQTlCO0FBQ0QsQ0FGRDs7QUFJQSxJQUFNcUYsVUFBVSxHQUFJLFlBQVk7QUFDOUIsTUFBSSxPQUFPQyxhQUFQLEtBQXlCLFVBQTdCLEVBQXlDO0FBQ3ZDO0FBQ0EsV0FBT0EsYUFBUDtBQUNEO0FBQ0QsTUFBSUMsT0FBSjtBQUNBLFNBQU8sU0FBU0QsYUFBVCxHQUEwQjtBQUMvQixRQUFJLENBQUNDLE9BQUwsRUFBYztBQUNaQSxhQUFPLEdBQUcsSUFBSUMsWUFBSixFQUFWO0FBQ0Q7QUFDRCxXQUFPRCxPQUFQO0FBQ0QsR0FMRDtBQU1ELENBWmtCLEVBQW5COztBQWNBLFNBQVNSLEtBQVQsQ0FBZ0JVLEdBQWhCLEVBQXFCdEcsTUFBckIsRUFBNkIyRixJQUE3QixFQUFtQztBQUNqQyxTQUFPVyxHQUFHLENBQUN0RyxNQUFELENBQUgsQ0FBWTRGLEtBQVosQ0FBa0JVLEdBQWxCLEVBQXVCWCxJQUF2QixDQUFQO0FBQ0Q7O0FBRUQsU0FBU1ksR0FBVCxHQUFnQjtBQUNkLFNBQU9YLEtBQUssQ0FBQ00sVUFBVSxFQUFYLEVBQWUsS0FBZiw2QkFBMEJNLFNBQTFCLEVBQVo7QUFDRDtBQUNELFNBQVNDLElBQVQsR0FBaUI7QUFDZixTQUFPYixLQUFLLENBQUNNLFVBQVUsRUFBWCxFQUFlLE1BQWYsNkJBQTJCTSxTQUEzQixFQUFaO0FBQ0Q7QUFDRCxTQUFTRSxLQUFULEdBQWtCO0FBQ2hCLFNBQU9kLEtBQUssQ0FBQ00sVUFBVSxFQUFYLEVBQWUsT0FBZiw2QkFBNEJNLFNBQTVCLEVBQVo7QUFDRDtBQUNELFNBQVNHLEtBQVQsR0FBa0I7QUFDaEIsU0FBT2YsS0FBSyxDQUFDTSxVQUFVLEVBQVgsRUFBZSxPQUFmLDZCQUE0Qk0sU0FBNUIsRUFBWjtBQUNEOztBQUVELElBQUlJLFFBQVEsR0FBRyxhQUFhaEssTUFBTSxDQUFDeUgsTUFBUCxDQUFjO0FBQ3hDa0MsS0FBRyxFQUFFQSxHQURtQztBQUV4Q0UsTUFBSSxFQUFFQSxJQUZrQztBQUd4Q0MsT0FBSyxFQUFFQSxLQUhpQztBQUl4Q0MsT0FBSyxFQUFFQSxLQUppQyxFQUFkLENBQTVCOzs7QUFPQSxTQUFTRSxTQUFULENBQW9CQyxPQUFwQixFQUE2QjtBQUMzQkEsU0FBTyxDQUFDQyxVQUFSLEdBQXFCLElBQXJCOztBQUVBRCxTQUFPLENBQUNFLFdBQVIsR0FBc0IsVUFBVTdHLElBQVYsRUFBZ0I7QUFDcEM4RyxRQUFJLENBQUNILE9BQUwsQ0FBYUkscUJBQWIsQ0FBbUM7QUFDakNDLFVBQUksRUFBRSxlQUQyQjtBQUVqQ2hILFVBQUksRUFBSkEsSUFGaUMsRUFBbkM7QUFHRzJHLFdBQU8sQ0FBQ00sRUFIWDtBQUlELEdBTEQ7QUFNQSxNQUFJQyxTQUFTLEdBQUcsRUFBaEI7QUFDQVAsU0FBTyxDQUFDUSxTQUFSLEdBQW9CLFVBQVU1RyxRQUFWLEVBQW9CO0FBQ3RDMkcsYUFBUyxDQUFDakksSUFBVixDQUFlc0IsUUFBZjtBQUNELEdBRkQ7QUFHQW9HLFNBQU8sQ0FBQ1MsZUFBUixHQUEwQixVQUFVQyxDQUFWLEVBQWE7QUFDckNILGFBQVMsQ0FBQ3hILE9BQVYsQ0FBa0IsVUFBQWEsUUFBUSxVQUFJQSxRQUFRLENBQUM4RyxDQUFELENBQVosRUFBMUI7QUFDRCxHQUZEOztBQUlBLE1BQUksQ0FBQ1YsT0FBTyxDQUFDVyxnQkFBYixFQUErQjtBQUM3QjtBQUNEO0FBQ0QsTUFBTUMsU0FBUyxHQUFHWixPQUFPLENBQUNhLGFBQTFCO0FBQ0EsTUFBSUMsV0FBVyxHQUFHWCxJQUFJLENBQUNILE9BQUwsQ0FBYWUsY0FBYixDQUE0QmYsT0FBTyxDQUFDVyxnQkFBcEMsQ0FBbEI7QUFDQUcsYUFBVyxHQUFHQSxXQUFXLENBQUNFLE1BQVosTUFBd0JGLFdBQXRDLENBdEIyQixDQXNCdUI7QUFDbEQsTUFBTUcsT0FBTyxHQUFHakIsT0FBTyxDQUFDa0IsSUFBeEI7QUFDQSxNQUFNQyxPQUFPLEdBQUduQixPQUFPLENBQUNvQixJQUF4QjtBQUNBLE1BQU1DLFFBQVEsR0FBR3JCLE9BQU8sQ0FBQ3NCLEtBQXpCOztBQUVBLE1BQU1DLFFBQVEsR0FBRyxTQUFYQSxRQUFXLEdBQVk7QUFDM0JULGVBQVcsQ0FBQ1UsUUFBWixDQUFxQjtBQUNuQkMsVUFBSSxFQUFFYixTQURhLEVBQXJCOztBQUdELEdBSkQ7QUFLQSxNQUFNYyxTQUFTLEdBQUcsU0FBWkEsU0FBWSxHQUFZO0FBQzVCWixlQUFXLENBQUNVLFFBQVosQ0FBcUI7QUFDbkJDLFVBQUksRUFBRSxNQURhLEVBQXJCOztBQUdELEdBSkQ7QUFLQXpCLFNBQU8sQ0FBQ2tCLElBQVIsR0FBZSxZQUFtQjtBQUNoQ0ssWUFBUSxHQUR3QixtQ0FBTjFDLElBQU0seURBQU5BLElBQU07QUFFaEMsV0FBT29DLE9BQU8sQ0FBQ25DLEtBQVIsQ0FBY2tCLE9BQWQsRUFBdUJuQixJQUF2QixDQUFQO0FBQ0QsR0FIRDtBQUlBbUIsU0FBTyxDQUFDb0IsSUFBUixHQUFlLFlBQW1CO0FBQ2hDTSxhQUFTLEdBRHVCLG1DQUFON0MsSUFBTSx5REFBTkEsSUFBTTtBQUVoQyxXQUFPc0MsT0FBTyxDQUFDckMsS0FBUixDQUFja0IsT0FBZCxFQUF1Qm5CLElBQXZCLENBQVA7QUFDRCxHQUhEO0FBSUFtQixTQUFPLENBQUNzQixLQUFSLEdBQWdCLFlBQW1CO0FBQ2pDSSxhQUFTO0FBQ1RuQixhQUFTLEdBQUcsRUFBWixDQUZpQyxtQ0FBTjFCLElBQU0seURBQU5BLElBQU07QUFHakMsV0FBT3dDLFFBQVEsQ0FBQ3ZDLEtBQVQsQ0FBZWtCLE9BQWYsRUFBd0JuQixJQUF4QixDQUFQO0FBQ0QsR0FKRDtBQUtEOztBQUVELFNBQVM4QyxjQUFULENBQXlCckIsRUFBekIsRUFBNkI7QUFDM0IsTUFBTU4sT0FBTyxHQUFHRyxJQUFJLENBQUNILE9BQUwsQ0FBYWUsY0FBYixDQUE0QlQsRUFBNUIsQ0FBaEI7QUFDQSxNQUFJTixPQUFPLElBQUksQ0FBQ0EsT0FBTyxDQUFDQyxVQUF4QixFQUFvQztBQUNsQ0YsYUFBUyxDQUFDQyxPQUFELENBQVQ7QUFDRDtBQUNELFNBQU9BLE9BQVA7QUFDRDs7QUFFRCxTQUFTNEIsbUJBQVQsQ0FBOEJDLFVBQTlCLEVBQTBDO0FBQ3hDO0FBQ0EsTUFBSSxPQUFPQyxJQUFQLEtBQWdCLFdBQXBCLEVBQWlDO0FBQy9CLFdBQU9BLElBQUksQ0FBQ0MsYUFBTCxDQUFtQkYsVUFBbkIsQ0FBUDtBQUNEO0FBQ0Q7QUFDQSxTQUFPRyx1QkFBdUIsQ0FBQ0gsVUFBRCxDQUE5QjtBQUNEOztBQUVELElBQUlwSCxHQUFHLEdBQUcsYUFBYTNFLE1BQU0sQ0FBQ3lILE1BQVAsQ0FBYztBQUNuQ3FFLHFCQUFtQixFQUFFQSxtQkFEYztBQUVuQ0QsZ0JBQWMsRUFBRUEsY0FGbUIsRUFBZCxDQUF2Qjs7O0FBS0EsSUFBTU0sTUFBTSxHQUFHQyxJQUFmO0FBQ0EsSUFBTUMsV0FBVyxHQUFHQyxTQUFwQjs7QUFFQSxJQUFNQyxXQUFXLEdBQUcsSUFBcEI7O0FBRUEsSUFBTUMsU0FBUyxHQUFHMUwsTUFBTSxDQUFDLFVBQUNQLEdBQUQsRUFBUztBQUNoQyxTQUFPYSxRQUFRLENBQUNiLEdBQUcsQ0FBQ2MsT0FBSixDQUFZa0wsV0FBWixFQUF5QixHQUF6QixDQUFELENBQWY7QUFDRCxDQUZ1QixDQUF4Qjs7QUFJQSxTQUFTRSxnQkFBVCxDQUEyQkMsVUFBM0IsRUFBdUM7QUFDckM7QUFDRSxRQUFJLENBQUMvRixFQUFFLENBQUNnRyxPQUFILENBQVcsVUFBWCxDQUFMLEVBQTZCO0FBQzNCO0FBQ0Q7QUFDRjtBQUNELE1BQU1DLGVBQWUsR0FBR0YsVUFBVSxDQUFDRyxZQUFuQztBQUNBSCxZQUFVLENBQUNHLFlBQVgsR0FBMEIsVUFBVUMsS0FBVixFQUEwQixvQ0FBTi9ELElBQU0sNkVBQU5BLElBQU07QUFDbEQsV0FBTzZELGVBQWUsQ0FBQzVELEtBQWhCLENBQXNCMEQsVUFBdEIsR0FBbUNGLFNBQVMsQ0FBQ00sS0FBRCxDQUE1QyxTQUF3RC9ELElBQXhELEVBQVA7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU2dFLFFBQVQsQ0FBbUI5SSxJQUFuQixFQUF5QkQsT0FBekIsRUFBa0M7QUFDaEMsTUFBTWdKLE9BQU8sR0FBR2hKLE9BQU8sQ0FBQ0MsSUFBRCxDQUF2QjtBQUNBLE1BQUksQ0FBQytJLE9BQUwsRUFBYztBQUNaaEosV0FBTyxDQUFDQyxJQUFELENBQVAsR0FBZ0IsWUFBWTtBQUMxQndJLHNCQUFnQixDQUFDLElBQUQsQ0FBaEI7QUFDRCxLQUZEO0FBR0QsR0FKRCxNQUlPO0FBQ0x6SSxXQUFPLENBQUNDLElBQUQsQ0FBUCxHQUFnQixZQUFtQjtBQUNqQ3dJLHNCQUFnQixDQUFDLElBQUQsQ0FBaEIsQ0FEaUMsbUNBQU4xRCxJQUFNLHlEQUFOQSxJQUFNO0FBRWpDLGFBQU9pRSxPQUFPLENBQUNoRSxLQUFSLENBQWMsSUFBZCxFQUFvQkQsSUFBcEIsQ0FBUDtBQUNELEtBSEQ7QUFJRDtBQUNGOztBQUVEcUQsSUFBSSxHQUFHLGdCQUF3QixLQUFkcEksT0FBYyx1RUFBSixFQUFJO0FBQzdCK0ksVUFBUSxDQUFDLFFBQUQsRUFBVy9JLE9BQVgsQ0FBUjtBQUNBLFNBQU9tSSxNQUFNLENBQUNuSSxPQUFELENBQWI7QUFDRCxDQUhEOztBQUtBc0ksU0FBUyxHQUFHLHFCQUF3QixLQUFkdEksT0FBYyx1RUFBSixFQUFJO0FBQ2xDK0ksVUFBUSxDQUFDLFNBQUQsRUFBWS9JLE9BQVosQ0FBUjtBQUNBLFNBQU9xSSxXQUFXLENBQUNySSxPQUFELENBQWxCO0FBQ0QsQ0FIRDs7QUFLQSxJQUFNaUosZ0JBQWdCLEdBQUc7QUFDdkIsbUJBRHVCO0FBRXZCLGVBRnVCO0FBR3ZCLG1CQUh1QjtBQUl2QixjQUp1QjtBQUt2QixVQUx1QjtBQU12QixjQU51QixDQUF6Qjs7O0FBU0EsU0FBU0MsU0FBVCxDQUFvQkMsRUFBcEIsRUFBd0JDLEtBQXhCLEVBQStCO0FBQzdCLE1BQU1WLFVBQVUsR0FBR1MsRUFBRSxDQUFDRSxHQUFILENBQU9GLEVBQUUsQ0FBQ0csTUFBVixDQUFuQjtBQUNBRixPQUFLLENBQUNuSyxPQUFOLENBQWMsVUFBQXNLLElBQUksRUFBSTtBQUNwQixRQUFJNU0sTUFBTSxDQUFDK0wsVUFBRCxFQUFhYSxJQUFiLENBQVYsRUFBOEI7QUFDNUJKLFFBQUUsQ0FBQ0ksSUFBRCxDQUFGLEdBQVdiLFVBQVUsQ0FBQ2EsSUFBRCxDQUFyQjtBQUNEO0FBQ0YsR0FKRDtBQUtEOztBQUVELFNBQVNDLE9BQVQsQ0FBa0I5SyxJQUFsQixFQUF3QitLLFVBQXhCLEVBQW9DO0FBQ2xDLE1BQUksQ0FBQ0EsVUFBTCxFQUFpQjtBQUNmLFdBQU8sSUFBUDtBQUNEOztBQUVELE1BQUloRSxhQUFJekYsT0FBSixJQUFlL0IsS0FBSyxDQUFDQyxPQUFOLENBQWN1SCxhQUFJekYsT0FBSixDQUFZdEIsSUFBWixDQUFkLENBQW5CLEVBQXFEO0FBQ25ELFdBQU8sSUFBUDtBQUNEOztBQUVEK0ssWUFBVSxHQUFHQSxVQUFVLENBQUNDLE9BQVgsSUFBc0JELFVBQW5DOztBQUVBLE1BQUlyTixJQUFJLENBQUNxTixVQUFELENBQVIsRUFBc0I7QUFDcEIsUUFBSXJOLElBQUksQ0FBQ3FOLFVBQVUsQ0FBQ0UsYUFBWCxDQUF5QmpMLElBQXpCLENBQUQsQ0FBUixFQUEwQztBQUN4QyxhQUFPLElBQVA7QUFDRDtBQUNELFFBQUkrSyxVQUFVLENBQUNHLEtBQVg7QUFDRkgsY0FBVSxDQUFDRyxLQUFYLENBQWlCNUosT0FEZjtBQUVGL0IsU0FBSyxDQUFDQyxPQUFOLENBQWN1TCxVQUFVLENBQUNHLEtBQVgsQ0FBaUI1SixPQUFqQixDQUF5QnRCLElBQXpCLENBQWQsQ0FGRixFQUVpRDtBQUMvQyxhQUFPLElBQVA7QUFDRDtBQUNELFdBQU8sS0FBUDtBQUNEOztBQUVELE1BQUl0QyxJQUFJLENBQUNxTixVQUFVLENBQUMvSyxJQUFELENBQVgsQ0FBUixFQUE0QjtBQUMxQixXQUFPLElBQVA7QUFDRDtBQUNELE1BQU1tTCxNQUFNLEdBQUdKLFVBQVUsQ0FBQ0ksTUFBMUI7QUFDQSxNQUFJNUwsS0FBSyxDQUFDQyxPQUFOLENBQWMyTCxNQUFkLENBQUosRUFBMkI7QUFDekIsV0FBTyxDQUFDLENBQUNBLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZLFVBQUFDLEtBQUssVUFBSVAsT0FBTyxDQUFDOUssSUFBRCxFQUFPcUwsS0FBUCxDQUFYLEVBQWpCLENBQVQ7QUFDRDtBQUNGOztBQUVELFNBQVNDLFNBQVQsQ0FBb0JDLFNBQXBCLEVBQStCN0wsS0FBL0IsRUFBc0NxTCxVQUF0QyxFQUFrRDtBQUNoRHJMLE9BQUssQ0FBQ2EsT0FBTixDQUFjLFVBQUFQLElBQUksRUFBSTtBQUNwQixRQUFJOEssT0FBTyxDQUFDOUssSUFBRCxFQUFPK0ssVUFBUCxDQUFYLEVBQStCO0FBQzdCUSxlQUFTLENBQUN2TCxJQUFELENBQVQsR0FBa0IsVUFBVXFHLElBQVYsRUFBZ0I7QUFDaEMsZUFBTyxLQUFLbUYsR0FBTCxJQUFZLEtBQUtBLEdBQUwsQ0FBU0MsV0FBVCxDQUFxQnpMLElBQXJCLEVBQTJCcUcsSUFBM0IsQ0FBbkI7QUFDRCxPQUZEO0FBR0Q7QUFDRixHQU5EO0FBT0Q7O0FBRUQsU0FBU3FGLGdCQUFULENBQTJCM0UsR0FBM0IsRUFBZ0NnRSxVQUFoQyxFQUE0QztBQUMxQ0EsWUFBVSxHQUFHQSxVQUFVLENBQUNDLE9BQVgsSUFBc0JELFVBQW5DO0FBQ0EsTUFBSVksWUFBSjtBQUNBLE1BQUlqTyxJQUFJLENBQUNxTixVQUFELENBQVIsRUFBc0I7QUFDcEJZLGdCQUFZLEdBQUdaLFVBQWY7QUFDQUEsY0FBVSxHQUFHWSxZQUFZLENBQUNWLGFBQTFCO0FBQ0QsR0FIRCxNQUdPO0FBQ0xVLGdCQUFZLEdBQUc1RSxHQUFHLENBQUM2RSxNQUFKLENBQVdiLFVBQVgsQ0FBZjtBQUNEO0FBQ0QsU0FBTyxDQUFDWSxZQUFELEVBQWVaLFVBQWYsQ0FBUDtBQUNEOztBQUVELFNBQVNjLFNBQVQsQ0FBb0JwQixFQUFwQixFQUF3QnFCLFFBQXhCLEVBQWtDO0FBQ2hDLE1BQUl2TSxLQUFLLENBQUNDLE9BQU4sQ0FBY3NNLFFBQWQsS0FBMkJBLFFBQVEsQ0FBQ2xNLE1BQXhDLEVBQWdEO0FBQzlDLFFBQU1tTSxNQUFNLEdBQUd6TyxNQUFNLENBQUNnQixNQUFQLENBQWMsSUFBZCxDQUFmO0FBQ0F3TixZQUFRLENBQUN2TCxPQUFULENBQWlCLFVBQUF5TCxRQUFRLEVBQUk7QUFDM0JELFlBQU0sQ0FBQ0MsUUFBRCxDQUFOLEdBQW1CLElBQW5CO0FBQ0QsS0FGRDtBQUdBdkIsTUFBRSxDQUFDd0IsWUFBSCxHQUFrQnhCLEVBQUUsQ0FBQ3NCLE1BQUgsR0FBWUEsTUFBOUI7QUFDRDtBQUNGOztBQUVELFNBQVNHLFVBQVQsQ0FBcUJDLE1BQXJCLEVBQTZCbkMsVUFBN0IsRUFBeUM7QUFDdkNtQyxRQUFNLEdBQUcsQ0FBQ0EsTUFBTSxJQUFJLEVBQVgsRUFBZUMsS0FBZixDQUFxQixHQUFyQixDQUFUO0FBQ0EsTUFBTUMsR0FBRyxHQUFHRixNQUFNLENBQUN2TSxNQUFuQjs7QUFFQSxNQUFJeU0sR0FBRyxLQUFLLENBQVosRUFBZTtBQUNickMsY0FBVSxDQUFDc0MsT0FBWCxHQUFxQkgsTUFBTSxDQUFDLENBQUQsQ0FBM0I7QUFDRCxHQUZELE1BRU8sSUFBSUUsR0FBRyxLQUFLLENBQVosRUFBZTtBQUNwQnJDLGNBQVUsQ0FBQ3NDLE9BQVgsR0FBcUJILE1BQU0sQ0FBQyxDQUFELENBQTNCO0FBQ0FuQyxjQUFVLENBQUN1QyxRQUFYLEdBQXNCSixNQUFNLENBQUMsQ0FBRCxDQUE1QjtBQUNEO0FBQ0Y7O0FBRUQsU0FBU0ssUUFBVCxDQUFtQnpCLFVBQW5CLEVBQStCMEIsT0FBL0IsRUFBd0M7QUFDdEMsTUFBSTVMLElBQUksR0FBR2tLLFVBQVUsQ0FBQ2xLLElBQVgsSUFBbUIsRUFBOUI7QUFDQSxNQUFNNkwsT0FBTyxHQUFHM0IsVUFBVSxDQUFDMkIsT0FBWCxJQUFzQixFQUF0Qzs7QUFFQSxNQUFJLE9BQU83TCxJQUFQLEtBQWdCLFVBQXBCLEVBQWdDO0FBQzlCLFFBQUk7QUFDRkEsVUFBSSxHQUFHQSxJQUFJLENBQUM3QyxJQUFMLENBQVV5TyxPQUFWLENBQVAsQ0FERSxDQUN5QjtBQUM1QixLQUZELENBRUUsT0FBT3ZFLENBQVAsRUFBVTtBQUNWLFVBQUl5RSwrRUFBQSxDQUFZQyxhQUFoQixFQUErQjtBQUM3Qi9HLGVBQU8sQ0FBQ0MsSUFBUixDQUFhLHdFQUFiLEVBQXVGakYsSUFBdkY7QUFDRDtBQUNGO0FBQ0YsR0FSRCxNQVFPO0FBQ0wsUUFBSTtBQUNGO0FBQ0FBLFVBQUksR0FBR2dNLElBQUksQ0FBQ0MsS0FBTCxDQUFXRCxJQUFJLENBQUNFLFNBQUwsQ0FBZWxNLElBQWYsQ0FBWCxDQUFQO0FBQ0QsS0FIRCxDQUdFLE9BQU9xSCxDQUFQLEVBQVUsQ0FBRTtBQUNmOztBQUVELE1BQUksQ0FBQ3BLLGFBQWEsQ0FBQytDLElBQUQsQ0FBbEIsRUFBMEI7QUFDeEJBLFFBQUksR0FBRyxFQUFQO0FBQ0Q7O0FBRUR2RCxRQUFNLENBQUNnRCxJQUFQLENBQVlvTSxPQUFaLEVBQXFCbk0sT0FBckIsQ0FBNkIsVUFBQThFLFVBQVUsRUFBSTtBQUN6QyxRQUFJb0gsT0FBTyxDQUFDTyxtQkFBUixDQUE0Qm5OLE9BQTVCLENBQW9Dd0YsVUFBcEMsTUFBb0QsQ0FBQyxDQUFyRCxJQUEwRCxDQUFDcEgsTUFBTSxDQUFDNEMsSUFBRCxFQUFPd0UsVUFBUCxDQUFyRSxFQUF5RjtBQUN2RnhFLFVBQUksQ0FBQ3dFLFVBQUQsQ0FBSixHQUFtQnFILE9BQU8sQ0FBQ3JILFVBQUQsQ0FBMUI7QUFDRDtBQUNGLEdBSkQ7O0FBTUEsU0FBT3hFLElBQVA7QUFDRDs7QUFFRCxJQUFNb00sVUFBVSxHQUFHLENBQUNDLE1BQUQsRUFBU3pJLE1BQVQsRUFBaUIwSSxPQUFqQixFQUEwQjdQLE1BQTFCLEVBQWtDaUMsS0FBbEMsRUFBeUMsSUFBekMsQ0FBbkI7O0FBRUEsU0FBUzZOLGNBQVQsQ0FBeUI3TCxJQUF6QixFQUErQjtBQUM3QixTQUFPLFNBQVM4TCxRQUFULENBQW1CQyxNQUFuQixFQUEyQkMsTUFBM0IsRUFBbUM7QUFDeEMsUUFBSSxLQUFLL0IsR0FBVCxFQUFjO0FBQ1osV0FBS0EsR0FBTCxDQUFTakssSUFBVCxJQUFpQitMLE1BQWpCLENBRFksQ0FDYTtBQUMxQjtBQUNGLEdBSkQ7QUFLRDs7QUFFRCxTQUFTRSxhQUFULENBQXdCekMsVUFBeEIsRUFBb0MwQyxZQUFwQyxFQUFrRDtBQUNoRCxNQUFNQyxZQUFZLEdBQUczQyxVQUFVLENBQUMsV0FBRCxDQUEvQjtBQUNBLE1BQU00QyxVQUFVLEdBQUc1QyxVQUFVLENBQUMsU0FBRCxDQUE3QjtBQUNBLE1BQU02QyxTQUFTLEdBQUc3QyxVQUFVLENBQUMsUUFBRCxDQUE1Qjs7QUFFQSxNQUFJOEMsUUFBUSxHQUFHOUMsVUFBVSxDQUFDLE9BQUQsQ0FBekI7O0FBRUEsTUFBSSxDQUFDOEMsUUFBTCxFQUFlO0FBQ2I5QyxjQUFVLENBQUMsT0FBRCxDQUFWLEdBQXNCOEMsUUFBUSxHQUFHLEVBQWpDO0FBQ0Q7O0FBRUQsTUFBTUMsU0FBUyxHQUFHLEVBQWxCO0FBQ0EsTUFBSXZPLEtBQUssQ0FBQ0MsT0FBTixDQUFja08sWUFBZCxDQUFKLEVBQWlDO0FBQy9CQSxnQkFBWSxDQUFDbk4sT0FBYixDQUFxQixVQUFBd04sUUFBUSxFQUFJO0FBQy9CRCxlQUFTLENBQUNoTyxJQUFWLENBQWVpTyxRQUFRLENBQUNwUCxPQUFULENBQWlCLFFBQWpCLEVBQThCLElBQTlCLGVBQWY7QUFDQSxVQUFJb1AsUUFBUSxLQUFLLGtCQUFqQixFQUFxQztBQUNuQyxZQUFJeE8sS0FBSyxDQUFDQyxPQUFOLENBQWNxTyxRQUFkLENBQUosRUFBNkI7QUFDM0JBLGtCQUFRLENBQUMvTixJQUFULENBQWMsTUFBZDtBQUNBK04sa0JBQVEsQ0FBQy9OLElBQVQsQ0FBYyxPQUFkO0FBQ0QsU0FIRCxNQUdPO0FBQ0wrTixrQkFBUSxDQUFDLE1BQUQsQ0FBUixHQUFtQjtBQUNqQmhHLGdCQUFJLEVBQUVxRixNQURXO0FBRWpCbEMsbUJBQU8sRUFBRSxFQUZRLEVBQW5COztBQUlBNkMsa0JBQVEsQ0FBQyxPQUFELENBQVIsR0FBb0I7QUFDbEJoRyxnQkFBSSxFQUFFLENBQUNxRixNQUFELEVBQVN6SSxNQUFULEVBQWlCMEksT0FBakIsRUFBMEI1TixLQUExQixFQUFpQ2pDLE1BQWpDLEVBQXlDMFEsSUFBekMsQ0FEWTtBQUVsQmhELG1CQUFPLEVBQUUsRUFGUyxFQUFwQjs7QUFJRDtBQUNGO0FBQ0YsS0FqQkQ7QUFrQkQ7QUFDRCxNQUFJbE4sYUFBYSxDQUFDNlAsVUFBRCxDQUFiLElBQTZCQSxVQUFVLENBQUNNLEtBQTVDLEVBQW1EO0FBQ2pESCxhQUFTLENBQUNoTyxJQUFWO0FBQ0UyTixnQkFBWSxDQUFDO0FBQ1hTLGdCQUFVLEVBQUVDLGNBQWMsQ0FBQ1IsVUFBVSxDQUFDTSxLQUFaLEVBQW1CLElBQW5CLENBRGYsRUFBRCxDQURkOzs7QUFLRDtBQUNELE1BQUkxTyxLQUFLLENBQUNDLE9BQU4sQ0FBY29PLFNBQWQsQ0FBSixFQUE4QjtBQUM1QkEsYUFBUyxDQUFDck4sT0FBVixDQUFrQixVQUFBNk4sUUFBUSxFQUFJO0FBQzVCLFVBQUl0USxhQUFhLENBQUNzUSxRQUFELENBQWIsSUFBMkJBLFFBQVEsQ0FBQ0gsS0FBeEMsRUFBK0M7QUFDN0NILGlCQUFTLENBQUNoTyxJQUFWO0FBQ0UyTixvQkFBWSxDQUFDO0FBQ1hTLG9CQUFVLEVBQUVDLGNBQWMsQ0FBQ0MsUUFBUSxDQUFDSCxLQUFWLEVBQWlCLElBQWpCLENBRGYsRUFBRCxDQURkOzs7QUFLRDtBQUNGLEtBUkQ7QUFTRDtBQUNELFNBQU9ILFNBQVA7QUFDRDs7QUFFRCxTQUFTTyxhQUFULENBQXdCblEsR0FBeEIsRUFBNkIySixJQUE3QixFQUFtQ3lHLFlBQW5DLEVBQWlEQyxJQUFqRCxFQUF1RDtBQUNyRDtBQUNBLE1BQUloUCxLQUFLLENBQUNDLE9BQU4sQ0FBY3FJLElBQWQsS0FBdUJBLElBQUksQ0FBQ2pJLE1BQUwsS0FBZ0IsQ0FBM0MsRUFBOEM7QUFDNUMsV0FBT2lJLElBQUksQ0FBQyxDQUFELENBQVg7QUFDRDtBQUNELFNBQU9BLElBQVA7QUFDRDs7QUFFRCxTQUFTc0csY0FBVCxDQUF5QkYsS0FBekIsRUFBK0QsS0FBL0JPLFVBQStCLHVFQUFsQixLQUFrQixLQUFYRCxJQUFXLHVFQUFKLEVBQUk7QUFDN0QsTUFBTUwsVUFBVSxHQUFHLEVBQW5CO0FBQ0EsTUFBSSxDQUFDTSxVQUFMLEVBQWlCO0FBQ2ZOLGNBQVUsQ0FBQ08sS0FBWCxHQUFtQjtBQUNqQjVHLFVBQUksRUFBRXFGLE1BRFc7QUFFakJ6SixXQUFLLEVBQUUsRUFGVSxFQUFuQjs7QUFJQXlLLGNBQVUsQ0FBQ3BDLFFBQVgsR0FBc0IsRUFBRTtBQUN0QmpFLFVBQUksRUFBRSxJQURjO0FBRXBCcEUsV0FBSyxFQUFFLEVBRmE7QUFHcEI0SixjQUFRLEVBQUUsa0JBQVVDLE1BQVYsRUFBa0JDLE1BQWxCLEVBQTBCO0FBQ2xDLFlBQU14QixNQUFNLEdBQUd6TyxNQUFNLENBQUNnQixNQUFQLENBQWMsSUFBZCxDQUFmO0FBQ0FnUCxjQUFNLENBQUMvTSxPQUFQLENBQWUsVUFBQXlMLFFBQVEsRUFBSTtBQUN6QkQsZ0JBQU0sQ0FBQ0MsUUFBRCxDQUFOLEdBQW1CLElBQW5CO0FBQ0QsU0FGRDtBQUdBLGFBQUswQyxPQUFMLENBQWE7QUFDWDNDLGdCQUFNLEVBQU5BLE1BRFcsRUFBYjs7QUFHRCxPQVhtQixFQUF0Qjs7QUFhRDtBQUNELE1BQUl4TSxLQUFLLENBQUNDLE9BQU4sQ0FBY3lPLEtBQWQsQ0FBSixFQUEwQixDQUFFO0FBQzFCQSxTQUFLLENBQUMxTixPQUFOLENBQWMsVUFBQXJDLEdBQUcsRUFBSTtBQUNuQmdRLGdCQUFVLENBQUNoUSxHQUFELENBQVYsR0FBa0I7QUFDaEIySixZQUFJLEVBQUUsSUFEVTtBQUVoQndGLGdCQUFRLEVBQUVELGNBQWMsQ0FBQ2xQLEdBQUQsQ0FGUixFQUFsQjs7QUFJRCxLQUxEO0FBTUQsR0FQRCxNQU9PLElBQUlKLGFBQWEsQ0FBQ21RLEtBQUQsQ0FBakIsRUFBMEIsQ0FBRTtBQUNqQzNRLFVBQU0sQ0FBQ2dELElBQVAsQ0FBWTJOLEtBQVosRUFBbUIxTixPQUFuQixDQUEyQixVQUFBckMsR0FBRyxFQUFJO0FBQ2hDLFVBQU15USxJQUFJLEdBQUdWLEtBQUssQ0FBQy9QLEdBQUQsQ0FBbEI7QUFDQSxVQUFJSixhQUFhLENBQUM2USxJQUFELENBQWpCLEVBQXlCLENBQUU7QUFDekIsWUFBSWxMLEtBQUssR0FBR2tMLElBQUksQ0FBQyxTQUFELENBQWhCO0FBQ0EsWUFBSWpSLElBQUksQ0FBQytGLEtBQUQsQ0FBUixFQUFpQjtBQUNmQSxlQUFLLEdBQUdBLEtBQUssRUFBYjtBQUNEOztBQUVEa0wsWUFBSSxDQUFDOUcsSUFBTCxHQUFZd0csYUFBYSxDQUFDblEsR0FBRCxFQUFNeVEsSUFBSSxDQUFDOUcsSUFBWCxDQUF6Qjs7QUFFQXFHLGtCQUFVLENBQUNoUSxHQUFELENBQVYsR0FBa0I7QUFDaEIySixjQUFJLEVBQUVvRixVQUFVLENBQUNwTixPQUFYLENBQW1COE8sSUFBSSxDQUFDOUcsSUFBeEIsTUFBa0MsQ0FBQyxDQUFuQyxHQUF1QzhHLElBQUksQ0FBQzlHLElBQTVDLEdBQW1ELElBRHpDO0FBRWhCcEUsZUFBSyxFQUFMQSxLQUZnQjtBQUdoQjRKLGtCQUFRLEVBQUVELGNBQWMsQ0FBQ2xQLEdBQUQsQ0FIUixFQUFsQjs7QUFLRCxPQWJELE1BYU8sQ0FBRTtBQUNQLFlBQU0ySixJQUFJLEdBQUd3RyxhQUFhLENBQUNuUSxHQUFELEVBQU15USxJQUFOLENBQTFCO0FBQ0FULGtCQUFVLENBQUNoUSxHQUFELENBQVYsR0FBa0I7QUFDaEIySixjQUFJLEVBQUVvRixVQUFVLENBQUNwTixPQUFYLENBQW1CZ0ksSUFBbkIsTUFBNkIsQ0FBQyxDQUE5QixHQUFrQ0EsSUFBbEMsR0FBeUMsSUFEL0I7QUFFaEJ3RixrQkFBUSxFQUFFRCxjQUFjLENBQUNsUCxHQUFELENBRlIsRUFBbEI7O0FBSUQ7QUFDRixLQXRCRDtBQXVCRDtBQUNELFNBQU9nUSxVQUFQO0FBQ0Q7O0FBRUQsU0FBU1UsU0FBVCxDQUFvQnhFLEtBQXBCLEVBQTJCO0FBQ3pCO0FBQ0EsTUFBSTtBQUNGQSxTQUFLLENBQUN5RSxFQUFOLEdBQVdoQyxJQUFJLENBQUNDLEtBQUwsQ0FBV0QsSUFBSSxDQUFDRSxTQUFMLENBQWUzQyxLQUFmLENBQVgsQ0FBWDtBQUNELEdBRkQsQ0FFRSxPQUFPbEMsQ0FBUCxFQUFVLENBQUU7O0FBRWRrQyxPQUFLLENBQUMwRSxlQUFOLEdBQXdCM1EsSUFBeEI7QUFDQWlNLE9BQUssQ0FBQzJFLGNBQU4sR0FBdUI1USxJQUF2Qjs7QUFFQWlNLE9BQUssQ0FBQzRFLE1BQU4sR0FBZTVFLEtBQUssQ0FBQzRFLE1BQU4sSUFBZ0IsRUFBL0I7O0FBRUEsTUFBSSxDQUFDL1EsTUFBTSxDQUFDbU0sS0FBRCxFQUFRLFFBQVIsQ0FBWCxFQUE4QjtBQUM1QkEsU0FBSyxDQUFDNkUsTUFBTixHQUFlLEVBQWY7QUFDRDs7QUFFRCxNQUFJblIsYUFBYSxDQUFDc00sS0FBSyxDQUFDNkUsTUFBUCxDQUFqQixFQUFpQztBQUMvQjdFLFNBQUssQ0FBQzRFLE1BQU4sR0FBZTFSLE1BQU0sQ0FBQ2dHLE1BQVAsQ0FBYyxFQUFkLEVBQWtCOEcsS0FBSyxDQUFDNEUsTUFBeEIsRUFBZ0M1RSxLQUFLLENBQUM2RSxNQUF0QyxDQUFmO0FBQ0Q7O0FBRUQsU0FBTzdFLEtBQVA7QUFDRDs7QUFFRCxTQUFTOEUsYUFBVCxDQUF3QnpFLEVBQXhCLEVBQTRCMEUsY0FBNUIsRUFBNEM7QUFDMUMsTUFBSTFDLE9BQU8sR0FBR2hDLEVBQWQ7QUFDQTBFLGdCQUFjLENBQUM1TyxPQUFmLENBQXVCLFVBQUE2TyxhQUFhLEVBQUk7QUFDdEMsUUFBTUMsUUFBUSxHQUFHRCxhQUFhLENBQUMsQ0FBRCxDQUE5QjtBQUNBLFFBQU0zTCxLQUFLLEdBQUcyTCxhQUFhLENBQUMsQ0FBRCxDQUEzQjtBQUNBLFFBQUlDLFFBQVEsSUFBSSxPQUFPNUwsS0FBUCxLQUFpQixXQUFqQyxFQUE4QyxDQUFFO0FBQzlDLFVBQU02TCxRQUFRLEdBQUdGLGFBQWEsQ0FBQyxDQUFELENBQTlCO0FBQ0EsVUFBTUcsU0FBUyxHQUFHSCxhQUFhLENBQUMsQ0FBRCxDQUEvQjs7QUFFQSxVQUFNSSxJQUFJLEdBQUdILFFBQVEsR0FBRzVFLEVBQUUsQ0FBQ2dGLFdBQUgsQ0FBZUosUUFBZixFQUF5QjVDLE9BQXpCLENBQUgsR0FBdUNBLE9BQTVEOztBQUVBLFVBQUloSSxNQUFNLENBQUNpTCxTQUFQLENBQWlCRixJQUFqQixDQUFKLEVBQTRCO0FBQzFCL0MsZUFBTyxHQUFHaEosS0FBVjtBQUNELE9BRkQsTUFFTyxJQUFJLENBQUM2TCxRQUFMLEVBQWU7QUFDcEI3QyxlQUFPLEdBQUcrQyxJQUFJLENBQUMvTCxLQUFELENBQWQ7QUFDRCxPQUZNLE1BRUE7QUFDTCxZQUFJbEUsS0FBSyxDQUFDQyxPQUFOLENBQWNnUSxJQUFkLENBQUosRUFBeUI7QUFDdkIvQyxpQkFBTyxHQUFHK0MsSUFBSSxDQUFDcEUsSUFBTCxDQUFVLFVBQUF1RSxRQUFRLEVBQUk7QUFDOUIsbUJBQU9sRixFQUFFLENBQUNnRixXQUFILENBQWVILFFBQWYsRUFBeUJLLFFBQXpCLE1BQXVDbE0sS0FBOUM7QUFDRCxXQUZTLENBQVY7QUFHRCxTQUpELE1BSU8sSUFBSTNGLGFBQWEsQ0FBQzBSLElBQUQsQ0FBakIsRUFBeUI7QUFDOUIvQyxpQkFBTyxHQUFHblAsTUFBTSxDQUFDZ0QsSUFBUCxDQUFZa1AsSUFBWixFQUFrQnBFLElBQWxCLENBQXVCLFVBQUF3RSxPQUFPLEVBQUk7QUFDMUMsbUJBQU9uRixFQUFFLENBQUNnRixXQUFILENBQWVILFFBQWYsRUFBeUJFLElBQUksQ0FBQ0ksT0FBRCxDQUE3QixNQUE0Q25NLEtBQW5EO0FBQ0QsV0FGUyxDQUFWO0FBR0QsU0FKTSxNQUlBO0FBQ0xvQyxpQkFBTyxDQUFDSyxLQUFSLENBQWMsaUJBQWQsRUFBaUNzSixJQUFqQztBQUNEO0FBQ0Y7O0FBRUQsVUFBSUQsU0FBSixFQUFlO0FBQ2I5QyxlQUFPLEdBQUdoQyxFQUFFLENBQUNnRixXQUFILENBQWVGLFNBQWYsRUFBMEI5QyxPQUExQixDQUFWO0FBQ0Q7QUFDRjtBQUNGLEdBL0JEO0FBZ0NBLFNBQU9BLE9BQVA7QUFDRDs7QUFFRCxTQUFTb0QsaUJBQVQsQ0FBNEJwRixFQUE1QixFQUFnQ3FGLEtBQWhDLEVBQXVDMUYsS0FBdkMsRUFBOEM7QUFDNUMsTUFBTTJGLFFBQVEsR0FBRyxFQUFqQjs7QUFFQSxNQUFJeFEsS0FBSyxDQUFDQyxPQUFOLENBQWNzUSxLQUFkLEtBQXdCQSxLQUFLLENBQUNsUSxNQUFsQyxFQUEwQztBQUN4Qzs7Ozs7Ozs7Ozs7QUFXQWtRLFNBQUssQ0FBQ3ZQLE9BQU4sQ0FBYyxVQUFDOE8sUUFBRCxFQUFXcFAsS0FBWCxFQUFxQjtBQUNqQyxVQUFJLE9BQU9vUCxRQUFQLEtBQW9CLFFBQXhCLEVBQWtDO0FBQ2hDLFlBQUksQ0FBQ0EsUUFBTCxFQUFlLENBQUU7QUFDZlUsa0JBQVEsQ0FBQyxNQUFNOVAsS0FBUCxDQUFSLEdBQXdCd0ssRUFBeEI7QUFDRCxTQUZELE1BRU87QUFDTCxjQUFJNEUsUUFBUSxLQUFLLFFBQWpCLEVBQTJCLENBQUU7QUFDM0JVLG9CQUFRLENBQUMsTUFBTTlQLEtBQVAsQ0FBUixHQUF3Qm1LLEtBQXhCO0FBQ0QsV0FGRCxNQUVPLElBQUlpRixRQUFRLENBQUN4UCxPQUFULENBQWlCLFNBQWpCLE1BQWdDLENBQXBDLEVBQXVDLENBQUU7QUFDOUNrUSxvQkFBUSxDQUFDLE1BQU05UCxLQUFQLENBQVIsR0FBd0J3SyxFQUFFLENBQUNnRixXQUFILENBQWVKLFFBQVEsQ0FBQzFRLE9BQVQsQ0FBaUIsU0FBakIsRUFBNEIsRUFBNUIsQ0FBZixFQUFnRHlMLEtBQWhELENBQXhCO0FBQ0QsV0FGTSxNQUVBO0FBQ0wyRixvQkFBUSxDQUFDLE1BQU05UCxLQUFQLENBQVIsR0FBd0J3SyxFQUFFLENBQUNnRixXQUFILENBQWVKLFFBQWYsQ0FBeEI7QUFDRDtBQUNGO0FBQ0YsT0FaRCxNQVlPO0FBQ0xVLGdCQUFRLENBQUMsTUFBTTlQLEtBQVAsQ0FBUixHQUF3QmlQLGFBQWEsQ0FBQ3pFLEVBQUQsRUFBSzRFLFFBQUwsQ0FBckM7QUFDRDtBQUNGLEtBaEJEO0FBaUJEOztBQUVELFNBQU9VLFFBQVA7QUFDRDs7QUFFRCxTQUFTQyxhQUFULENBQXdCQyxHQUF4QixFQUE2QjtBQUMzQixNQUFNbFMsR0FBRyxHQUFHLEVBQVo7QUFDQSxPQUFLLElBQUk0QixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHc1EsR0FBRyxDQUFDclEsTUFBeEIsRUFBZ0NELENBQUMsRUFBakMsRUFBcUM7QUFDbkMsUUFBTXVRLE9BQU8sR0FBR0QsR0FBRyxDQUFDdFEsQ0FBRCxDQUFuQjtBQUNBNUIsT0FBRyxDQUFDbVMsT0FBTyxDQUFDLENBQUQsQ0FBUixDQUFILEdBQWtCQSxPQUFPLENBQUMsQ0FBRCxDQUF6QjtBQUNEO0FBQ0QsU0FBT25TLEdBQVA7QUFDRDs7QUFFRCxTQUFTb1MsZ0JBQVQsQ0FBMkIxRixFQUEzQixFQUErQkwsS0FBL0IsRUFBbUYsS0FBN0MvRCxJQUE2Qyx1RUFBdEMsRUFBc0MsS0FBbEN5SixLQUFrQyx1RUFBMUIsRUFBMEIsS0FBdEJNLFFBQXNCLHVEQUFaL0ssVUFBWTtBQUNqRixNQUFJZ0wsZUFBZSxHQUFHLEtBQXRCLENBRGlGLENBQ3BEO0FBQzdCLE1BQUlELFFBQUosRUFBYyxDQUFFO0FBQ2RDLG1CQUFlLEdBQUdqRyxLQUFLLENBQUNrRyxhQUFOO0FBQ2hCbEcsU0FBSyxDQUFDa0csYUFBTixDQUFvQkMsT0FESjtBQUVoQm5HLFNBQUssQ0FBQ2tHLGFBQU4sQ0FBb0JDLE9BQXBCLENBQTRCQyxPQUE1QixLQUF3QyxJQUYxQztBQUdBLFFBQUksQ0FBQ25LLElBQUksQ0FBQ3pHLE1BQVYsRUFBa0IsQ0FBRTtBQUNsQixVQUFJeVEsZUFBSixFQUFxQjtBQUNuQixlQUFPLENBQUNqRyxLQUFELENBQVA7QUFDRDtBQUNELGFBQU9BLEtBQUssQ0FBQzZFLE1BQU4sQ0FBYXdCLFFBQWIsSUFBeUJyRyxLQUFLLENBQUM2RSxNQUF0QztBQUNEO0FBQ0Y7O0FBRUQsTUFBTWMsUUFBUSxHQUFHRixpQkFBaUIsQ0FBQ3BGLEVBQUQsRUFBS3FGLEtBQUwsRUFBWTFGLEtBQVosQ0FBbEM7O0FBRUEsTUFBTXNHLEdBQUcsR0FBRyxFQUFaO0FBQ0FySyxNQUFJLENBQUM5RixPQUFMLENBQWEsVUFBQW9RLEdBQUcsRUFBSTtBQUNsQixRQUFJQSxHQUFHLEtBQUssUUFBWixFQUFzQjtBQUNwQixVQUFJdEwsVUFBVSxLQUFLLGFBQWYsSUFBZ0MsQ0FBQytLLFFBQXJDLEVBQStDLENBQUU7QUFDL0NNLFdBQUcsQ0FBQzVRLElBQUosQ0FBU3NLLEtBQUssQ0FBQzRFLE1BQU4sQ0FBYXZMLEtBQXRCO0FBQ0QsT0FGRCxNQUVPO0FBQ0wsWUFBSTJNLFFBQVEsSUFBSSxDQUFDQyxlQUFqQixFQUFrQztBQUNoQ0ssYUFBRyxDQUFDNVEsSUFBSixDQUFTc0ssS0FBSyxDQUFDNkUsTUFBTixDQUFhd0IsUUFBYixDQUFzQixDQUF0QixDQUFUO0FBQ0QsU0FGRCxNQUVPLENBQUU7QUFDUEMsYUFBRyxDQUFDNVEsSUFBSixDQUFTc0ssS0FBVDtBQUNEO0FBQ0Y7QUFDRixLQVZELE1BVU87QUFDTCxVQUFJN0ssS0FBSyxDQUFDQyxPQUFOLENBQWNtUixHQUFkLEtBQXNCQSxHQUFHLENBQUMsQ0FBRCxDQUFILEtBQVcsR0FBckMsRUFBMEM7QUFDeENELFdBQUcsQ0FBQzVRLElBQUosQ0FBU2tRLGFBQWEsQ0FBQ1csR0FBRCxDQUF0QjtBQUNELE9BRkQsTUFFTyxJQUFJLE9BQU9BLEdBQVAsS0FBZSxRQUFmLElBQTJCMVMsTUFBTSxDQUFDOFIsUUFBRCxFQUFXWSxHQUFYLENBQXJDLEVBQXNEO0FBQzNERCxXQUFHLENBQUM1USxJQUFKLENBQVNpUSxRQUFRLENBQUNZLEdBQUQsQ0FBakI7QUFDRCxPQUZNLE1BRUE7QUFDTEQsV0FBRyxDQUFDNVEsSUFBSixDQUFTNlEsR0FBVDtBQUNEO0FBQ0Y7QUFDRixHQXBCRDs7QUFzQkEsU0FBT0QsR0FBUDtBQUNEOztBQUVELElBQU1FLElBQUksR0FBRyxHQUFiO0FBQ0EsSUFBTUMsTUFBTSxHQUFHLEdBQWY7O0FBRUEsU0FBU0MsZ0JBQVQsQ0FBMkJDLFNBQTNCLEVBQXNDQyxPQUF0QyxFQUErQztBQUM3QyxTQUFRRCxTQUFTLEtBQUtDLE9BQWY7O0FBRUhBLFNBQU8sS0FBSyxjQUFaOztBQUVFRCxXQUFTLEtBQUssT0FBZDtBQUNBQSxXQUFTLEtBQUssS0FIaEIsQ0FGSjs7O0FBUUQ7O0FBRUQsU0FBU0UsV0FBVCxDQUFzQjdHLEtBQXRCLEVBQTZCO0FBQzNCQSxPQUFLLEdBQUd3RSxTQUFTLENBQUN4RSxLQUFELENBQWpCOztBQUVBO0FBQ0EsTUFBTW1HLE9BQU8sR0FBRyxDQUFDbkcsS0FBSyxDQUFDa0csYUFBTixJQUF1QmxHLEtBQUssQ0FBQzRFLE1BQTlCLEVBQXNDdUIsT0FBdEQ7QUFDQSxNQUFJLENBQUNBLE9BQUwsRUFBYztBQUNaLFdBQU8xSyxPQUFPLENBQUNDLElBQVIsOENBQVA7QUFDRDtBQUNELE1BQU1vTCxTQUFTLEdBQUdYLE9BQU8sQ0FBQ1csU0FBUixJQUFxQlgsT0FBTyxDQUFDLFlBQUQsQ0FBOUMsQ0FSMkIsQ0FRbUM7QUFDOUQsTUFBSSxDQUFDVyxTQUFMLEVBQWdCO0FBQ2QsV0FBT3JMLE9BQU8sQ0FBQ0MsSUFBUiw4Q0FBUDtBQUNEOztBQUVEO0FBQ0EsTUFBTWlMLFNBQVMsR0FBRzNHLEtBQUssQ0FBQ3ZDLElBQXhCOztBQUVBLE1BQU02SSxHQUFHLEdBQUcsRUFBWjs7QUFFQVEsV0FBUyxDQUFDM1EsT0FBVixDQUFrQixVQUFBNFEsUUFBUSxFQUFJO0FBQzVCLFFBQUl0SixJQUFJLEdBQUdzSixRQUFRLENBQUMsQ0FBRCxDQUFuQjtBQUNBLFFBQU1DLFdBQVcsR0FBR0QsUUFBUSxDQUFDLENBQUQsQ0FBNUI7O0FBRUEsUUFBTWYsUUFBUSxHQUFHdkksSUFBSSxDQUFDd0osTUFBTCxDQUFZLENBQVosTUFBbUJSLE1BQXBDO0FBQ0FoSixRQUFJLEdBQUd1SSxRQUFRLEdBQUd2SSxJQUFJLENBQUMvRixLQUFMLENBQVcsQ0FBWCxDQUFILEdBQW1CK0YsSUFBbEM7QUFDQSxRQUFNeUosTUFBTSxHQUFHekosSUFBSSxDQUFDd0osTUFBTCxDQUFZLENBQVosTUFBbUJULElBQWxDO0FBQ0EvSSxRQUFJLEdBQUd5SixNQUFNLEdBQUd6SixJQUFJLENBQUMvRixLQUFMLENBQVcsQ0FBWCxDQUFILEdBQW1CK0YsSUFBaEM7O0FBRUEsUUFBSXVKLFdBQVcsSUFBSU4sZ0JBQWdCLENBQUNDLFNBQUQsRUFBWWxKLElBQVosQ0FBbkMsRUFBc0Q7QUFDcER1SixpQkFBVyxDQUFDN1EsT0FBWixDQUFvQixVQUFBZ1IsVUFBVSxFQUFJO0FBQ2hDLFlBQU1sTSxVQUFVLEdBQUdrTSxVQUFVLENBQUMsQ0FBRCxDQUE3QjtBQUNBLFlBQUlsTSxVQUFKLEVBQWdCO0FBQ2QsY0FBSW1NLFVBQVUsR0FBRyxLQUFJLENBQUNoRyxHQUF0QjtBQUNBO0FBQ0VnRyxvQkFBVSxDQUFDQyxRQUFYLENBQW9CQyxPQUFwQjtBQUNBRixvQkFBVSxDQUFDRyxPQURYO0FBRUFILG9CQUFVLENBQUNHLE9BQVgsQ0FBbUJBLE9BSHJCO0FBSUUsV0FBRTtBQUNGSCxzQkFBVSxHQUFHQSxVQUFVLENBQUNHLE9BQVgsQ0FBbUJBLE9BQWhDO0FBQ0Q7QUFDRCxjQUFNQyxPQUFPLEdBQUdKLFVBQVUsQ0FBQ25NLFVBQUQsQ0FBMUI7QUFDQSxjQUFJLENBQUMzSCxJQUFJLENBQUNrVSxPQUFELENBQVQsRUFBb0I7QUFDbEIsa0JBQU0sSUFBSUMsS0FBSixnQkFBa0J4TSxVQUFsQix3QkFBTjtBQUNEO0FBQ0QsY0FBSWlNLE1BQUosRUFBWTtBQUNWLGdCQUFJTSxPQUFPLENBQUNFLElBQVosRUFBa0I7QUFDaEI7QUFDRDtBQUNERixtQkFBTyxDQUFDRSxJQUFSLEdBQWUsSUFBZjtBQUNEO0FBQ0RwQixhQUFHLENBQUM1USxJQUFKLENBQVM4UixPQUFPLENBQUN0TCxLQUFSLENBQWNrTCxVQUFkLEVBQTBCckIsZ0JBQWdCO0FBQ2pELGVBQUksQ0FBQzNFLEdBRDRDO0FBRWpEcEIsZUFGaUQ7QUFHakRtSCxvQkFBVSxDQUFDLENBQUQsQ0FIdUM7QUFJakRBLG9CQUFVLENBQUMsQ0FBRCxDQUp1QztBQUtqRG5CLGtCQUxpRDtBQU1qRC9LLG9CQU5pRCxDQUExQyxDQUFUOztBQVFEO0FBQ0YsT0E5QkQ7QUErQkQ7QUFDRixHQTFDRDs7QUE0Q0E7QUFDRTBMLFdBQVMsS0FBSyxPQUFkO0FBQ0FMLEtBQUcsQ0FBQzlRLE1BQUosS0FBZSxDQURmO0FBRUEsU0FBTzhRLEdBQUcsQ0FBQyxDQUFELENBQVYsS0FBa0IsV0FIcEI7QUFJRTtBQUNBLFdBQU9BLEdBQUcsQ0FBQyxDQUFELENBQVY7QUFDRDtBQUNGOztBQUVELElBQU1oUixLQUFLLEdBQUc7QUFDWixRQURZO0FBRVosUUFGWTtBQUdaLFNBSFk7QUFJWixnQkFKWSxDQUFkOzs7QUFPQSxTQUFTcVMsWUFBVCxDQUF1QnRILEVBQXZCOzs7QUFHRyxLQUZEQyxLQUVDLFNBRkRBLEtBRUMsQ0FERHNILFFBQ0MsU0FEREEsUUFDQztBQUNEakwsZUFBSXhKLFNBQUosQ0FBYzBVLE1BQWQsR0FBdUIsVUFBdkI7O0FBRUFsTCxlQUFJc0UsS0FBSixDQUFVO0FBQ1I2RyxnQkFEUSwwQkFDUTtBQUNkLFVBQUksQ0FBQyxLQUFLVCxRQUFMLENBQWM3RyxNQUFuQixFQUEyQjtBQUN6QjtBQUNEOztBQUVELFdBQUtBLE1BQUwsR0FBYyxLQUFLNkcsUUFBTCxDQUFjN0csTUFBNUI7O0FBRUEsV0FBS0QsR0FBTDtBQUNFOUosWUFBSSxFQUFFLEVBRFI7QUFFRyxXQUFLK0osTUFGUixFQUVpQixLQUFLNkcsUUFBTCxDQUFjekgsVUFGL0I7OztBQUtBLFdBQUttSSxNQUFMLEdBQWMsS0FBS1YsUUFBTCxDQUFjekgsVUFBNUI7O0FBRUEsYUFBTyxLQUFLeUgsUUFBTCxDQUFjN0csTUFBckI7QUFDQSxhQUFPLEtBQUs2RyxRQUFMLENBQWN6SCxVQUFyQjs7QUFFQSxVQUFJLEtBQUtZLE1BQUwsS0FBZ0IsS0FBcEIsRUFBMkI7QUFDekJvSCxnQkFBUSxDQUFDLElBQUQsQ0FBUjtBQUNBeEgsaUJBQVMsQ0FBQyxJQUFELEVBQU9FLEtBQVAsQ0FBVDtBQUNEO0FBQ0YsS0F0Qk8sRUFBVjs7O0FBeUJBLE1BQU0wSCxVQUFVLEdBQUc7QUFDakJDLFlBRGlCLG9CQUNQaE0sSUFETyxFQUNEO0FBQ2QsVUFBSSxLQUFLbUYsR0FBVCxFQUFjLENBQUU7QUFDZDtBQUNEOztBQUVELFdBQUtBLEdBQUwsR0FBV2YsRUFBWDs7QUFFQSxXQUFLZSxHQUFMLENBQVNiLEdBQVQsR0FBZTtBQUNiMkgsV0FBRyxFQUFFLElBRFEsRUFBZjs7O0FBSUEsV0FBSzlHLEdBQUwsQ0FBUzJHLE1BQVQsR0FBa0IsSUFBbEI7O0FBRUEsV0FBSzNHLEdBQUwsQ0FBUytHLFVBQVQsR0FBc0IsSUFBdEI7QUFDQSxXQUFLL0csR0FBTCxDQUFTQyxXQUFULENBQXFCLFNBQXJCLEVBQWdDcEYsSUFBaEM7O0FBRUEsV0FBS21GLEdBQUwsQ0FBU0MsV0FBVCxDQUFxQixVQUFyQixFQUFpQ3BGLElBQWpDO0FBQ0QsS0FsQmdCLEVBQW5COzs7QUFxQkE7QUFDQStMLFlBQVUsQ0FBQ0ksVUFBWCxHQUF3Qi9ILEVBQUUsQ0FBQ2dILFFBQUgsQ0FBWWUsVUFBWixJQUEwQixFQUFsRDs7QUFFQWxILFdBQVMsQ0FBQzhHLFVBQUQsRUFBYTFTLEtBQWIsQ0FBVDs7QUFFQSxTQUFPMFMsVUFBUDtBQUNEOztBQUVELElBQU0xSCxLQUFLLEdBQUcsQ0FBQyxXQUFELEVBQWMsc0JBQWQsRUFBc0MsaUJBQXRDLENBQWQ7O0FBRUEsU0FBUytILGFBQVQsQ0FBd0JoSSxFQUF4QixFQUE0QmlJLE1BQTVCLEVBQW9DO0FBQ2xDLE1BQU1DLFNBQVMsR0FBR2xJLEVBQUUsQ0FBQ2tJLFNBQXJCO0FBQ0E7QUFDQSxNQUFJQyxRQUFRLEdBQUdELFNBQVMsQ0FBQ3ZILElBQVYsQ0FBZSxVQUFBeUgsT0FBTyxVQUFJQSxPQUFPLENBQUNWLE1BQVIsQ0FBZTdGLE9BQWYsS0FBMkJvRyxNQUEvQixFQUF0QixDQUFmO0FBQ0EsTUFBSUUsUUFBSixFQUFjO0FBQ1osV0FBT0EsUUFBUDtBQUNEO0FBQ0Q7QUFDQSxPQUFLLElBQUlqVCxDQUFDLEdBQUdnVCxTQUFTLENBQUMvUyxNQUFWLEdBQW1CLENBQWhDLEVBQW1DRCxDQUFDLElBQUksQ0FBeEMsRUFBMkNBLENBQUMsRUFBNUMsRUFBZ0Q7QUFDOUNpVCxZQUFRLEdBQUdILGFBQWEsQ0FBQ0UsU0FBUyxDQUFDaFQsQ0FBRCxDQUFWLEVBQWUrUyxNQUFmLENBQXhCO0FBQ0EsUUFBSUUsUUFBSixFQUFjO0FBQ1osYUFBT0EsUUFBUDtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFTbkYsWUFBVCxDQUF1Qm5NLE9BQXZCLEVBQWdDO0FBQzlCLFNBQU93UixRQUFRLENBQUN4UixPQUFELENBQWY7QUFDRDs7QUFFRCxTQUFTeVIsTUFBVCxHQUFtQjtBQUNqQixTQUFPLENBQUMsQ0FBQyxLQUFLQyxLQUFkO0FBQ0Q7O0FBRUQsU0FBU0MsWUFBVCxDQUF1QmhFLE1BQXZCLEVBQStCO0FBQzdCLE9BQUs5RSxZQUFMLENBQWtCLEtBQWxCLEVBQXlCOEUsTUFBekI7QUFDRDs7QUFFRCxTQUFTK0MsUUFBVCxDQUFtQnZILEVBQW5CLEVBQXVCO0FBQ3JCLE1BQU1ULFVBQVUsR0FBR1MsRUFBRSxDQUFDMEgsTUFBdEI7QUFDQTdVLFFBQU0sQ0FBQzRWLGNBQVAsQ0FBc0J6SSxFQUF0QixFQUEwQixPQUExQixFQUFtQztBQUNqQzBJLE9BRGlDLGlCQUMxQjtBQUNMLFVBQU1DLEtBQUssR0FBRyxFQUFkO0FBQ0EsVUFBTUMsVUFBVSxHQUFHckosVUFBVSxDQUFDc0osbUJBQVgsQ0FBK0IsVUFBL0IsQ0FBbkI7QUFDQUQsZ0JBQVUsQ0FBQzlTLE9BQVgsQ0FBbUIsVUFBQWdULFNBQVMsRUFBSTtBQUM5QixZQUFNQyxHQUFHLEdBQUdELFNBQVMsQ0FBQ2hELE9BQVYsQ0FBa0JpRCxHQUE5QjtBQUNBSixhQUFLLENBQUNJLEdBQUQsQ0FBTCxHQUFhRCxTQUFTLENBQUMvSCxHQUFWLElBQWlCK0gsU0FBOUI7QUFDRCxPQUhEO0FBSUEsVUFBTUUsYUFBYSxHQUFHekosVUFBVSxDQUFDc0osbUJBQVgsQ0FBK0IsaUJBQS9CLENBQXRCO0FBQ0FHLG1CQUFhLENBQUNsVCxPQUFkLENBQXNCLFVBQUFnVCxTQUFTLEVBQUk7QUFDakMsWUFBTUMsR0FBRyxHQUFHRCxTQUFTLENBQUNoRCxPQUFWLENBQWtCaUQsR0FBOUI7QUFDQSxZQUFJLENBQUNKLEtBQUssQ0FBQ0ksR0FBRCxDQUFWLEVBQWlCO0FBQ2ZKLGVBQUssQ0FBQ0ksR0FBRCxDQUFMLEdBQWEsRUFBYjtBQUNEO0FBQ0RKLGFBQUssQ0FBQ0ksR0FBRCxDQUFMLENBQVcxVCxJQUFYLENBQWdCeVQsU0FBUyxDQUFDL0gsR0FBVixJQUFpQitILFNBQWpDO0FBQ0QsT0FORDtBQU9BLGFBQU9ILEtBQVA7QUFDRCxLQWpCZ0MsRUFBbkM7O0FBbUJEOztBQUVELFNBQVNNLFVBQVQsQ0FBcUJ0SixLQUFyQixFQUE0Qjs7OztBQUl0QkEsT0FBSyxDQUFDNkUsTUFBTixJQUFnQjdFLEtBQUssQ0FBQzNHLEtBSkEsQ0FFeEJpUCxNQUZ3QixTQUV4QkEsTUFGd0IsQ0FHeEIzSCxVQUh3QixTQUd4QkEsVUFId0IsRUFJTzs7QUFFakMsTUFBSTZILFFBQUo7O0FBRUEsTUFBSUYsTUFBSixFQUFZO0FBQ1ZFLFlBQVEsR0FBR0gsYUFBYSxDQUFDLEtBQUtqSCxHQUFOLEVBQVdrSCxNQUFYLENBQXhCO0FBQ0Q7O0FBRUQsTUFBSSxDQUFDRSxRQUFMLEVBQWU7QUFDYkEsWUFBUSxHQUFHLEtBQUtwSCxHQUFoQjtBQUNEOztBQUVEVCxZQUFVLENBQUN2QyxNQUFYLEdBQW9Cb0ssUUFBcEI7QUFDRDs7QUFFRCxTQUFTZSxRQUFULENBQW1CbEosRUFBbkIsRUFBdUI7QUFDckIsU0FBT3NILFlBQVksQ0FBQ3RILEVBQUQsRUFBSztBQUN0QkMsU0FBSyxFQUFMQSxLQURzQjtBQUV0QnNILFlBQVEsRUFBUkEsUUFGc0IsRUFBTCxDQUFuQjs7QUFJRDs7QUFFRCxJQUFNNEIsT0FBTyxHQUFHO0FBQ2QsbUJBRGMsQ0FBaEI7OztBQUlBLFNBQVNDLFVBQVQsQ0FBcUJwSixFQUFyQixFQUF5QjtBQUN2QixNQUFNMkgsVUFBVSxHQUFHdUIsUUFBUSxDQUFDbEosRUFBRCxDQUEzQjs7QUFFQWEsV0FBUyxDQUFDOEcsVUFBRCxFQUFhd0IsT0FBYixDQUFUOztBQUVBLFNBQU94QixVQUFQO0FBQ0Q7O0FBRUQsU0FBUzBCLFNBQVQsQ0FBb0JySixFQUFwQixFQUF3QjtBQUN0QnNKLEtBQUcsQ0FBQ0YsVUFBVSxDQUFDcEosRUFBRCxDQUFYLENBQUg7QUFDQSxTQUFPQSxFQUFQO0FBQ0Q7O0FBRUQsU0FBU3VKLGtCQUFULENBQTZCQyxtQkFBN0I7OztBQUdRLGlGQUFKLEVBQUksQ0FGTmxCLE1BRU0sU0FGTkEsTUFFTSxDQURORSxZQUNNLFNBRE5BLFlBQ007QUFDMkJ2SCxrQkFBZ0IsQ0FBQzNFLFlBQUQsRUFBTWtOLG1CQUFOLENBRDNDLDJEQUNEdEksWUFEQyx5QkFDYVosVUFEYjs7QUFHTixNQUFNbUosZ0JBQWdCLEdBQUc7QUFDdkI1UyxXQUFPLEVBQUU7QUFDUDZTLG1CQUFhLEVBQUUsSUFEUjtBQUVQQyxvQkFBYyxFQUFFLElBRlQsRUFEYzs7QUFLdkJ2VCxRQUFJLEVBQUUyTCxRQUFRLENBQUN6QixVQUFELEVBQWFoRSxhQUFJeEosU0FBakIsQ0FMUztBQU12QnVRLGFBQVMsRUFBRU4sYUFBYSxDQUFDekMsVUFBRCxFQUFhMEMsWUFBYixDQU5EO0FBT3ZCUyxjQUFVLEVBQUVDLGNBQWMsQ0FBQ3BELFVBQVUsQ0FBQ2tELEtBQVosRUFBbUIsS0FBbkIsRUFBMEJsRCxVQUFVLENBQUNzSixNQUFyQyxDQVBIO0FBUXZCQyxhQUFTLEVBQUU7QUFDVEMsY0FEUyxzQkFDRztBQUNWLFlBQU1yRyxVQUFVLEdBQUcsS0FBS0EsVUFBeEI7O0FBRUEsWUFBTTVNLE9BQU8sR0FBRztBQUNkc0osZ0JBQU0sRUFBRW1JLE1BQU0sQ0FBQy9VLElBQVAsQ0FBWSxJQUFaLElBQW9CLE1BQXBCLEdBQTZCLFdBRHZCO0FBRWRnTSxvQkFBVSxFQUFFLElBRkU7QUFHZHdLLG1CQUFTLEVBQUV0RyxVQUhHLEVBQWhCOzs7QUFNQWhDLGtCQUFVLENBQUNnQyxVQUFVLENBQUNPLEtBQVosRUFBbUIsSUFBbkIsQ0FBVjs7QUFFQTtBQUNBd0Usb0JBQVksQ0FBQ2pWLElBQWIsQ0FBa0IsSUFBbEIsRUFBd0I7QUFDdEIwVSxnQkFBTSxFQUFFLEtBQUtuRyxRQURTO0FBRXRCeEIsb0JBQVUsRUFBRXpKLE9BRlUsRUFBeEI7OztBQUtBO0FBQ0EsYUFBS2tLLEdBQUwsR0FBVyxJQUFJRyxZQUFKLENBQWlCckssT0FBakIsQ0FBWDs7QUFFQTtBQUNBdUssaUJBQVMsQ0FBQyxLQUFLTCxHQUFOLEVBQVcwQyxVQUFVLENBQUNwQyxRQUF0QixDQUFUOztBQUVBO0FBQ0EsYUFBS04sR0FBTCxDQUFTaUosTUFBVDtBQUNELE9BMUJRO0FBMkJUQyxXQTNCUyxtQkEyQkE7QUFDUDtBQUNBO0FBQ0EsWUFBSSxLQUFLbEosR0FBVCxFQUFjO0FBQ1osZUFBS0EsR0FBTCxDQUFTK0csVUFBVCxHQUFzQixJQUF0QjtBQUNBLGVBQUsvRyxHQUFMLENBQVNDLFdBQVQsQ0FBcUIsU0FBckI7QUFDQSxlQUFLRCxHQUFMLENBQVNDLFdBQVQsQ0FBcUIsU0FBckI7QUFDRDtBQUNGLE9BbkNRO0FBb0NUa0osY0FwQ1Msc0JBb0NHO0FBQ1YsYUFBS25KLEdBQUwsQ0FBU29KLFFBQVQ7QUFDRCxPQXRDUSxFQVJZOztBQWdEdkJDLGlCQUFhLEVBQUU7QUFDYm5NLFVBRGEsZ0JBQ1ByQyxJQURPLEVBQ0Q7QUFDVixhQUFLbUYsR0FBTCxJQUFZLEtBQUtBLEdBQUwsQ0FBU0MsV0FBVCxDQUFxQixZQUFyQixFQUFtQ3BGLElBQW5DLENBQVo7QUFDRCxPQUhZO0FBSWJ1QyxVQUphLGtCQUlMO0FBQ04sYUFBSzRDLEdBQUwsSUFBWSxLQUFLQSxHQUFMLENBQVNDLFdBQVQsQ0FBcUIsWUFBckIsQ0FBWjtBQUNELE9BTlk7QUFPYnFKLFlBUGEsa0JBT0xDLElBUEssRUFPQztBQUNaLGFBQUt2SixHQUFMLElBQVksS0FBS0EsR0FBTCxDQUFTQyxXQUFULENBQXFCLGNBQXJCLEVBQXFDc0osSUFBckMsQ0FBWjtBQUNELE9BVFksRUFoRFE7O0FBMkR2QnJJLFdBQU8sRUFBRTtBQUNQc0ksU0FBRyxFQUFFdEIsVUFERTtBQUVQdUIsU0FBRyxFQUFFaEUsV0FGRSxFQTNEYyxFQUF6Qjs7OztBQWlFQSxNQUFJOEIsTUFBSixFQUFZO0FBQ1YsV0FBT21CLGdCQUFQO0FBQ0Q7QUFDRCxTQUFPLENBQUNBLGdCQUFELEVBQW1CdkksWUFBbkIsQ0FBUDtBQUNEOztBQUVELFNBQVN1SixjQUFULENBQXlCakIsbUJBQXpCLEVBQThDO0FBQzVDLFNBQU9ELGtCQUFrQixDQUFDQyxtQkFBRCxFQUFzQjtBQUM3Q2xCLFVBQU0sRUFBTkEsTUFENkM7QUFFN0NFLGdCQUFZLEVBQVpBLFlBRjZDLEVBQXRCLENBQXpCOztBQUlEOztBQUVELFNBQVNrQyxnQkFBVCxDQUEyQmxCLG1CQUEzQixFQUFnRDtBQUM5QyxNQUFNQyxnQkFBZ0IsR0FBR2dCLGNBQWMsQ0FBQ2pCLG1CQUFELENBQXZDOztBQUVBQyxrQkFBZ0IsQ0FBQ3hILE9BQWpCLENBQXlCMEksY0FBekIsR0FBMEMsWUFBWTtBQUNwRCxXQUFPek4sSUFBSSxDQUFDSCxPQUFMLENBQWFlLGNBQWIsV0FBK0IsS0FBSzhNLGVBQXBDLEVBQVA7QUFDRCxHQUZEO0FBR0EsU0FBT25CLGdCQUFQO0FBQ0Q7O0FBRUQsSUFBTW9CLE9BQU8sR0FBRztBQUNkLFFBRGM7QUFFZCxRQUZjO0FBR2QsVUFIYyxDQUFoQjs7O0FBTUFBLE9BQU8sQ0FBQ3hWLElBQVIsT0FBQXdWLE9BQU8sRUFBUy9LLGdCQUFULENBQVA7O0FBRUEsU0FBU2dMLGFBQVQsQ0FBd0JDLGNBQXhCOzs7QUFHRyxLQUZEekMsTUFFQyxTQUZEQSxNQUVDLENBRERFLFlBQ0MsU0FEREEsWUFDQztBQUNELE1BQU13QyxXQUFXLEdBQUdOLGdCQUFnQixDQUFDSyxjQUFELENBQXBDOztBQUVBbEssV0FBUyxDQUFDbUssV0FBVyxDQUFDL0ksT0FBYixFQUFzQjRJLE9BQXRCLEVBQStCRSxjQUEvQixDQUFUOztBQUVBQyxhQUFXLENBQUMvSSxPQUFaLENBQW9CZ0osTUFBcEIsR0FBNkIsVUFBVXJQLElBQVYsRUFBZ0I7QUFDM0MsU0FBS21GLEdBQUwsQ0FBU2IsR0FBVCxDQUFhZ0wsS0FBYixHQUFxQnRQLElBQXJCLENBRDJDLENBQ2hCO0FBQzNCLFNBQUttRixHQUFMLENBQVNDLFdBQVQsQ0FBcUIsUUFBckIsRUFBK0JwRixJQUEvQjtBQUNELEdBSEQ7O0FBS0EsU0FBT29QLFdBQVA7QUFDRDs7QUFFRCxTQUFTRyxTQUFULENBQW9CSixjQUFwQixFQUFvQztBQUNsQyxTQUFPRCxhQUFhLENBQUNDLGNBQUQsRUFBaUI7QUFDbkN6QyxVQUFNLEVBQU5BLE1BRG1DO0FBRW5DRSxnQkFBWSxFQUFaQSxZQUZtQyxFQUFqQixDQUFwQjs7QUFJRDs7QUFFRCxJQUFNNEMsT0FBTyxHQUFHO0FBQ2QsYUFEYztBQUVkLDBCQUZjO0FBR2QsbUNBSGM7QUFJZCxxQ0FKYztBQUtkLG1DQUxjLENBQWhCOzs7QUFRQSxTQUFTQyxXQUFULENBQXNCTixjQUF0QixFQUFzQztBQUNwQyxNQUFNQyxXQUFXLEdBQUdHLFNBQVMsQ0FBQ0osY0FBRCxDQUE3Qjs7QUFFQWxLLFdBQVMsQ0FBQ21LLFdBQVcsQ0FBQy9JLE9BQWIsRUFBc0JtSixPQUF0QixDQUFUOztBQUVBLFNBQU9KLFdBQVA7QUFDRDs7QUFFRCxTQUFTTSxVQUFULENBQXFCUCxjQUFyQixFQUFxQztBQUNuQztBQUNFLFdBQU81TCxTQUFTLENBQUNrTSxXQUFXLENBQUNOLGNBQUQsQ0FBWixDQUFoQjtBQUNEO0FBQ0Y7O0FBRUQsU0FBU1EsZUFBVCxDQUEwQmpMLFVBQTFCLEVBQXNDO0FBQ3BDO0FBQ0UsV0FBT25CLFNBQVMsQ0FBQ3VMLGdCQUFnQixDQUFDcEssVUFBRCxDQUFqQixDQUFoQjtBQUNEO0FBQ0Y7O0FBRUQ5RixLQUFLLENBQUMxRSxPQUFOLENBQWMsVUFBQW1HLE9BQU8sRUFBSTtBQUN2QjFCLFdBQVMsQ0FBQzBCLE9BQUQsQ0FBVCxHQUFxQixLQUFyQjtBQUNELENBRkQ7O0FBSUF4QixRQUFRLENBQUMzRSxPQUFULENBQWlCLFVBQUEwVixVQUFVLEVBQUk7QUFDN0IsTUFBTUMsT0FBTyxHQUFHbFIsU0FBUyxDQUFDaVIsVUFBRCxDQUFULElBQXlCalIsU0FBUyxDQUFDaVIsVUFBRCxDQUFULENBQXNCMVUsSUFBL0MsR0FBc0R5RCxTQUFTLENBQUNpUixVQUFELENBQVQsQ0FBc0IxVSxJQUE1RTtBQUNaMFUsWUFESjtBQUVBLE1BQUksQ0FBQ2hTLEVBQUUsQ0FBQ2dHLE9BQUgsQ0FBV2lNLE9BQVgsQ0FBTCxFQUEwQjtBQUN4QmxSLGFBQVMsQ0FBQ2lSLFVBQUQsQ0FBVCxHQUF3QixLQUF4QjtBQUNEO0FBQ0YsQ0FORDs7QUFRQSxJQUFJRSxHQUFHLEdBQUcsRUFBVjs7QUFFQSxJQUFJLE9BQU9DLEtBQVAsS0FBaUIsV0FBakIsSUFBZ0MsZUFBZSxVQUFuRCxFQUErRDtBQUM3REQsS0FBRyxHQUFHLElBQUlDLEtBQUosQ0FBVSxFQUFWLEVBQWM7QUFDbEJqRCxPQURrQixlQUNibkUsTUFEYSxFQUNMek4sSUFESyxFQUNDO0FBQ2pCLFVBQUl1RCxPQUFPLENBQUN2RCxJQUFELENBQVgsRUFBbUI7QUFDakIsZUFBT3VELE9BQU8sQ0FBQ3ZELElBQUQsQ0FBZDtBQUNEO0FBQ0QsVUFBSVUsR0FBRyxDQUFDVixJQUFELENBQVAsRUFBZTtBQUNiLGVBQU95QixTQUFTLENBQUN6QixJQUFELEVBQU9VLEdBQUcsQ0FBQ1YsSUFBRCxDQUFWLENBQWhCO0FBQ0Q7QUFDRCxVQUFJK0YsUUFBUSxDQUFDL0YsSUFBRCxDQUFaLEVBQW9CO0FBQ2xCLGVBQU8rRixRQUFRLENBQUMvRixJQUFELENBQWY7QUFDRDtBQUNELFVBQUksQ0FBQ3RELE1BQU0sQ0FBQ2dHLEVBQUQsRUFBSzFDLElBQUwsQ0FBUCxJQUFxQixDQUFDdEQsTUFBTSxDQUFDK0csU0FBRCxFQUFZekQsSUFBWixDQUFoQyxFQUFtRDtBQUNqRDtBQUNEO0FBQ0QsYUFBT3lCLFNBQVMsQ0FBQ3pCLElBQUQsRUFBT3lFLE9BQU8sQ0FBQ3pFLElBQUQsRUFBTzBDLEVBQUUsQ0FBQzFDLElBQUQsQ0FBVCxDQUFkLENBQWhCO0FBQ0QsS0FmaUIsRUFBZCxDQUFOOztBQWlCRCxDQWxCRCxNQWtCTztBQUNMakUsUUFBTSxDQUFDZ0QsSUFBUCxDQUFZd0UsT0FBWixFQUFxQnZFLE9BQXJCLENBQTZCLFVBQUFnQixJQUFJLEVBQUk7QUFDbkM0VSxPQUFHLENBQUM1VSxJQUFELENBQUgsR0FBWXVELE9BQU8sQ0FBQ3ZELElBQUQsQ0FBbkI7QUFDRCxHQUZEOztBQUlBakUsUUFBTSxDQUFDZ0QsSUFBUCxDQUFZZ0gsUUFBWixFQUFzQi9HLE9BQXRCLENBQThCLFVBQUFnQixJQUFJLEVBQUk7QUFDcEM0VSxPQUFHLENBQUM1VSxJQUFELENBQUgsR0FBWStGLFFBQVEsQ0FBQy9GLElBQUQsQ0FBcEI7QUFDRCxHQUZEOztBQUlBakUsUUFBTSxDQUFDZ0QsSUFBUCxDQUFZMkIsR0FBWixFQUFpQjFCLE9BQWpCLENBQXlCLFVBQUFnQixJQUFJLEVBQUk7QUFDL0I0VSxPQUFHLENBQUM1VSxJQUFELENBQUgsR0FBWXlCLFNBQVMsQ0FBQ3pCLElBQUQsRUFBT1UsR0FBRyxDQUFDVixJQUFELENBQVYsQ0FBckI7QUFDRCxHQUZEOztBQUlBakUsUUFBTSxDQUFDZ0QsSUFBUCxDQUFZMkQsRUFBWixFQUFnQjFELE9BQWhCLENBQXdCLFVBQUFnQixJQUFJLEVBQUk7QUFDOUIsUUFBSXRELE1BQU0sQ0FBQ2dHLEVBQUQsRUFBSzFDLElBQUwsQ0FBTixJQUFvQnRELE1BQU0sQ0FBQytHLFNBQUQsRUFBWXpELElBQVosQ0FBOUIsRUFBaUQ7QUFDL0M0VSxTQUFHLENBQUM1VSxJQUFELENBQUgsR0FBWXlCLFNBQVMsQ0FBQ3pCLElBQUQsRUFBT3lFLE9BQU8sQ0FBQ3pFLElBQUQsRUFBTzBDLEVBQUUsQ0FBQzFDLElBQUQsQ0FBVCxDQUFkLENBQXJCO0FBQ0Q7QUFDRixHQUpEO0FBS0Q7O0FBRUQ7QUFDRSxNQUFJLE9BQU84VSxNQUFQLEtBQWtCLFdBQXRCLEVBQW1DO0FBQ2pDQSxVQUFNLENBQUNGLEdBQVAsR0FBYUEsR0FBYjtBQUNBRSxVQUFNLENBQUNDLFVBQVAsR0FBb0JoUCxRQUFwQjtBQUNEO0FBQ0Y7O0FBRURyRCxFQUFFLENBQUM2UCxTQUFILEdBQWVBLFNBQWY7QUFDQTdQLEVBQUUsQ0FBQzhSLFVBQUgsR0FBZ0JBLFVBQWhCO0FBQ0E5UixFQUFFLENBQUMrUixlQUFILEdBQXFCQSxlQUFyQjs7QUFFQSxJQUFJTyxLQUFLLEdBQUdKLEdBQVosQzs7QUFFZUksSyIsImZpbGUiOiIxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xuXG5jb25zdCBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiBpc0ZuIChmbikge1xuICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nXG59XG5cbmZ1bmN0aW9uIGlzU3RyIChzdHIpIHtcbiAgcmV0dXJuIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnXG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QgKG9iaikge1xuICByZXR1cm4gX3RvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbn1cblxuZnVuY3Rpb24gaGFzT3duIChvYmosIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSlcbn1cblxuZnVuY3Rpb24gbm9vcCAoKSB7fVxuXG4vKipcbiAqIENyZWF0ZSBhIGNhY2hlZCB2ZXJzaW9uIG9mIGEgcHVyZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FjaGVkIChmbikge1xuICBjb25zdCBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBmdW5jdGlvbiBjYWNoZWRGbiAoc3RyKSB7XG4gICAgY29uc3QgaGl0ID0gY2FjaGVbc3RyXTtcbiAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSlcbiAgfVxufVxuXG4vKipcbiAqIENhbWVsaXplIGEgaHlwaGVuLWRlbGltaXRlZCBzdHJpbmcuXG4gKi9cbmNvbnN0IGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XG5jb25zdCBjYW1lbGl6ZSA9IGNhY2hlZCgoc3RyKSA9PiB7XG4gIHJldHVybiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCAoXywgYykgPT4gYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnKVxufSk7XG5cbmNvbnN0IEhPT0tTID0gW1xuICAnaW52b2tlJyxcbiAgJ3N1Y2Nlc3MnLFxuICAnZmFpbCcsXG4gICdjb21wbGV0ZScsXG4gICdyZXR1cm5WYWx1ZSdcbl07XG5cbmNvbnN0IGdsb2JhbEludGVyY2VwdG9ycyA9IHt9O1xuY29uc3Qgc2NvcGVkSW50ZXJjZXB0b3JzID0ge307XG5cbmZ1bmN0aW9uIG1lcmdlSG9vayAocGFyZW50VmFsLCBjaGlsZFZhbCkge1xuICBjb25zdCByZXMgPSBjaGlsZFZhbFxuICAgID8gcGFyZW50VmFsXG4gICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRWYWwpXG4gICAgICAgID8gY2hpbGRWYWwgOiBbY2hpbGRWYWxdXG4gICAgOiBwYXJlbnRWYWw7XG4gIHJldHVybiByZXNcbiAgICA/IGRlZHVwZUhvb2tzKHJlcylcbiAgICA6IHJlc1xufVxuXG5mdW5jdGlvbiBkZWR1cGVIb29rcyAoaG9va3MpIHtcbiAgY29uc3QgcmVzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAocmVzLmluZGV4T2YoaG9va3NbaV0pID09PSAtMSkge1xuICAgICAgcmVzLnB1c2goaG9va3NbaV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIHJlbW92ZUhvb2sgKGhvb2tzLCBob29rKSB7XG4gIGNvbnN0IGluZGV4ID0gaG9va3MuaW5kZXhPZihob29rKTtcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIGhvb2tzLnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2VJbnRlcmNlcHRvckhvb2sgKGludGVyY2VwdG9yLCBvcHRpb24pIHtcbiAgT2JqZWN0LmtleXMob3B0aW9uKS5mb3JFYWNoKGhvb2sgPT4ge1xuICAgIGlmIChIT09LUy5pbmRleE9mKGhvb2spICE9PSAtMSAmJiBpc0ZuKG9wdGlvbltob29rXSkpIHtcbiAgICAgIGludGVyY2VwdG9yW2hvb2tdID0gbWVyZ2VIb29rKGludGVyY2VwdG9yW2hvb2tdLCBvcHRpb25baG9va10pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUludGVyY2VwdG9ySG9vayAoaW50ZXJjZXB0b3IsIG9wdGlvbikge1xuICBpZiAoIWludGVyY2VwdG9yIHx8ICFvcHRpb24pIHtcbiAgICByZXR1cm5cbiAgfVxuICBPYmplY3Qua2V5cyhvcHRpb24pLmZvckVhY2goaG9vayA9PiB7XG4gICAgaWYgKEhPT0tTLmluZGV4T2YoaG9vaykgIT09IC0xICYmIGlzRm4ob3B0aW9uW2hvb2tdKSkge1xuICAgICAgcmVtb3ZlSG9vayhpbnRlcmNlcHRvcltob29rXSwgb3B0aW9uW2hvb2tdKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRJbnRlcmNlcHRvciAobWV0aG9kLCBvcHRpb24pIHtcbiAgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdzdHJpbmcnICYmIGlzUGxhaW5PYmplY3Qob3B0aW9uKSkge1xuICAgIG1lcmdlSW50ZXJjZXB0b3JIb29rKHNjb3BlZEludGVyY2VwdG9yc1ttZXRob2RdIHx8IChzY29wZWRJbnRlcmNlcHRvcnNbbWV0aG9kXSA9IHt9KSwgb3B0aW9uKTtcbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KG1ldGhvZCkpIHtcbiAgICBtZXJnZUludGVyY2VwdG9ySG9vayhnbG9iYWxJbnRlcmNlcHRvcnMsIG1ldGhvZCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlSW50ZXJjZXB0b3IgKG1ldGhvZCwgb3B0aW9uKSB7XG4gIGlmICh0eXBlb2YgbWV0aG9kID09PSAnc3RyaW5nJykge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbikpIHtcbiAgICAgIHJlbW92ZUludGVyY2VwdG9ySG9vayhzY29wZWRJbnRlcmNlcHRvcnNbbWV0aG9kXSwgb3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIHNjb3BlZEludGVyY2VwdG9yc1ttZXRob2RdO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KG1ldGhvZCkpIHtcbiAgICByZW1vdmVJbnRlcmNlcHRvckhvb2soZ2xvYmFsSW50ZXJjZXB0b3JzLCBtZXRob2QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdyYXBwZXJIb29rIChob29rKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZGF0YSkge1xuICAgIHJldHVybiBob29rKGRhdGEpIHx8IGRhdGFcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1Byb21pc2UgKG9iaikge1xuICByZXR1cm4gISFvYmogJiYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG5mdW5jdGlvbiBxdWV1ZSAoaG9va3MsIGRhdGEpIHtcbiAgbGV0IHByb21pc2UgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGhvb2sgPSBob29rc1tpXTtcbiAgICBpZiAocHJvbWlzZSkge1xuICAgICAgcHJvbWlzZSA9IFByb21pc2UudGhlbih3cmFwcGVySG9vayhob29rKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJlcyA9IGhvb2soZGF0YSk7XG4gICAgICBpZiAoaXNQcm9taXNlKHJlcykpIHtcbiAgICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShyZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0aGVuICgpIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHByb21pc2UgfHwge1xuICAgIHRoZW4gKGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZGF0YSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JhcHBlck9wdGlvbnMgKGludGVyY2VwdG9yLCBvcHRpb25zID0ge30pIHtcbiAgWydzdWNjZXNzJywgJ2ZhaWwnLCAnY29tcGxldGUnXS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGludGVyY2VwdG9yW25hbWVdKSkge1xuICAgICAgY29uc3Qgb2xkQ2FsbGJhY2sgPSBvcHRpb25zW25hbWVdO1xuICAgICAgb3B0aW9uc1tuYW1lXSA9IGZ1bmN0aW9uIGNhbGxiYWNrSW50ZXJjZXB0b3IgKHJlcykge1xuICAgICAgICBxdWV1ZShpbnRlcmNlcHRvcltuYW1lXSwgcmVzKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1taXhlZC1vcGVyYXRvcnMgKi9cbiAgICAgICAgICByZXR1cm4gaXNGbihvbGRDYWxsYmFjaykgJiYgb2xkQ2FsbGJhY2socmVzKSB8fCByZXNcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBvcHRpb25zXG59XG5cbmZ1bmN0aW9uIHdyYXBwZXJSZXR1cm5WYWx1ZSAobWV0aG9kLCByZXR1cm5WYWx1ZSkge1xuICBjb25zdCByZXR1cm5WYWx1ZUhvb2tzID0gW107XG4gIGlmIChBcnJheS5pc0FycmF5KGdsb2JhbEludGVyY2VwdG9ycy5yZXR1cm5WYWx1ZSkpIHtcbiAgICByZXR1cm5WYWx1ZUhvb2tzLnB1c2goLi4uZ2xvYmFsSW50ZXJjZXB0b3JzLnJldHVyblZhbHVlKTtcbiAgfVxuICBjb25zdCBpbnRlcmNlcHRvciA9IHNjb3BlZEludGVyY2VwdG9yc1ttZXRob2RdO1xuICBpZiAoaW50ZXJjZXB0b3IgJiYgQXJyYXkuaXNBcnJheShpbnRlcmNlcHRvci5yZXR1cm5WYWx1ZSkpIHtcbiAgICByZXR1cm5WYWx1ZUhvb2tzLnB1c2goLi4uaW50ZXJjZXB0b3IucmV0dXJuVmFsdWUpO1xuICB9XG4gIHJldHVyblZhbHVlSG9va3MuZm9yRWFjaChob29rID0+IHtcbiAgICByZXR1cm5WYWx1ZSA9IGhvb2socmV0dXJuVmFsdWUpIHx8IHJldHVyblZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJldHVyblZhbHVlXG59XG5cbmZ1bmN0aW9uIGdldEFwaUludGVyY2VwdG9ySG9va3MgKG1ldGhvZCkge1xuICBjb25zdCBpbnRlcmNlcHRvciA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIE9iamVjdC5rZXlzKGdsb2JhbEludGVyY2VwdG9ycykuZm9yRWFjaChob29rID0+IHtcbiAgICBpZiAoaG9vayAhPT0gJ3JldHVyblZhbHVlJykge1xuICAgICAgaW50ZXJjZXB0b3JbaG9va10gPSBnbG9iYWxJbnRlcmNlcHRvcnNbaG9va10uc2xpY2UoKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzY29wZWRJbnRlcmNlcHRvciA9IHNjb3BlZEludGVyY2VwdG9yc1ttZXRob2RdO1xuICBpZiAoc2NvcGVkSW50ZXJjZXB0b3IpIHtcbiAgICBPYmplY3Qua2V5cyhzY29wZWRJbnRlcmNlcHRvcikuZm9yRWFjaChob29rID0+IHtcbiAgICAgIGlmIChob29rICE9PSAncmV0dXJuVmFsdWUnKSB7XG4gICAgICAgIGludGVyY2VwdG9yW2hvb2tdID0gKGludGVyY2VwdG9yW2hvb2tdIHx8IFtdKS5jb25jYXQoc2NvcGVkSW50ZXJjZXB0b3JbaG9va10pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBpbnRlcmNlcHRvclxufVxuXG5mdW5jdGlvbiBpbnZva2VBcGkgKG1ldGhvZCwgYXBpLCBvcHRpb25zLCAuLi5wYXJhbXMpIHtcbiAgY29uc3QgaW50ZXJjZXB0b3IgPSBnZXRBcGlJbnRlcmNlcHRvckhvb2tzKG1ldGhvZCk7XG4gIGlmIChpbnRlcmNlcHRvciAmJiBPYmplY3Qua2V5cyhpbnRlcmNlcHRvcikubGVuZ3RoKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW50ZXJjZXB0b3IuaW52b2tlKSkge1xuICAgICAgY29uc3QgcmVzID0gcXVldWUoaW50ZXJjZXB0b3IuaW52b2tlLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiByZXMudGhlbigob3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gYXBpKHdyYXBwZXJPcHRpb25zKGludGVyY2VwdG9yLCBvcHRpb25zKSwgLi4ucGFyYW1zKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFwaSh3cmFwcGVyT3B0aW9ucyhpbnRlcmNlcHRvciwgb3B0aW9ucyksIC4uLnBhcmFtcylcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFwaShvcHRpb25zLCAuLi5wYXJhbXMpXG59XG5cbmNvbnN0IHByb21pc2VJbnRlcmNlcHRvciA9IHtcbiAgcmV0dXJuVmFsdWUgKHJlcykge1xuICAgIGlmICghaXNQcm9taXNlKHJlcykpIHtcbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gICAgcmV0dXJuIHJlcy50aGVuKHJlcyA9PiB7XG4gICAgICByZXR1cm4gcmVzWzFdXG4gICAgfSkuY2F0Y2gocmVzID0+IHtcbiAgICAgIHJldHVybiByZXNbMF1cbiAgICB9KVxuICB9XG59O1xuXG5jb25zdCBTWU5DX0FQSV9SRSA9XG4gICAgL15cXCR8aW50ZXJjZXB0b3JzfEludGVyY2VwdG9yJHxnZXRTdWJOVnVlQnlJZHxyZXF1aXJlTmF0aXZlUGx1Z2lufHVweDJweHxoaWRlS2V5Ym9hcmR8Y2FuSVVzZXxeY3JlYXRlfFN5bmMkfE1hbmFnZXIkfGJhc2U2NFRvQXJyYXlCdWZmZXJ8YXJyYXlCdWZmZXJUb0Jhc2U2NC87XG5cbmNvbnN0IENPTlRFWFRfQVBJX1JFID0gL15jcmVhdGV8TWFuYWdlciQvO1xuXG5jb25zdCBDQUxMQkFDS19BUElfUkUgPSAvXm9uLztcblxuZnVuY3Rpb24gaXNDb250ZXh0QXBpIChuYW1lKSB7XG4gIHJldHVybiBDT05URVhUX0FQSV9SRS50ZXN0KG5hbWUpXG59XG5mdW5jdGlvbiBpc1N5bmNBcGkgKG5hbWUpIHtcbiAgcmV0dXJuIFNZTkNfQVBJX1JFLnRlc3QobmFtZSlcbn1cblxuZnVuY3Rpb24gaXNDYWxsYmFja0FwaSAobmFtZSkge1xuICByZXR1cm4gQ0FMTEJBQ0tfQVBJX1JFLnRlc3QobmFtZSlcbn1cblxuZnVuY3Rpb24gaGFuZGxlUHJvbWlzZSAocHJvbWlzZSkge1xuICByZXR1cm4gcHJvbWlzZS50aGVuKGRhdGEgPT4ge1xuICAgIHJldHVybiBbbnVsbCwgZGF0YV1cbiAgfSlcbiAgICAuY2F0Y2goZXJyID0+IFtlcnJdKVxufVxuXG5mdW5jdGlvbiBzaG91bGRQcm9taXNlIChuYW1lKSB7XG4gIGlmIChcbiAgICBpc0NvbnRleHRBcGkobmFtZSkgfHxcbiAgICAgICAgaXNTeW5jQXBpKG5hbWUpIHx8XG4gICAgICAgIGlzQ2FsbGJhY2tBcGkobmFtZSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gcHJvbWlzaWZ5IChuYW1lLCBhcGkpIHtcbiAgaWYgKCFzaG91bGRQcm9taXNlKG5hbWUpKSB7XG4gICAgcmV0dXJuIGFwaVxuICB9XG4gIHJldHVybiBmdW5jdGlvbiBwcm9taXNlQXBpIChvcHRpb25zID0ge30sIC4uLnBhcmFtcykge1xuICAgIGlmIChpc0ZuKG9wdGlvbnMuc3VjY2VzcykgfHwgaXNGbihvcHRpb25zLmZhaWwpIHx8IGlzRm4ob3B0aW9ucy5jb21wbGV0ZSkpIHtcbiAgICAgIHJldHVybiB3cmFwcGVyUmV0dXJuVmFsdWUobmFtZSwgaW52b2tlQXBpKG5hbWUsIGFwaSwgb3B0aW9ucywgLi4ucGFyYW1zKSlcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBwZXJSZXR1cm5WYWx1ZShuYW1lLCBoYW5kbGVQcm9taXNlKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGludm9rZUFwaShuYW1lLCBhcGksIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgc3VjY2VzczogcmVzb2x2ZSxcbiAgICAgICAgZmFpbDogcmVqZWN0XG4gICAgICB9KSwgLi4ucGFyYW1zKTtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWV4dGVuZC1uYXRpdmUgKi9cbiAgICAgIGlmICghUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseSkge1xuICAgICAgICBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgICAgICAgIHZhbHVlID0+IHByb21pc2UucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IHZhbHVlKSxcbiAgICAgICAgICAgIHJlYXNvbiA9PiBwcm9taXNlLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRocm93IHJlYXNvblxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSkpKVxuICB9XG59XG5cbmNvbnN0IEVQUyA9IDFlLTQ7XG5jb25zdCBCQVNFX0RFVklDRV9XSURUSCA9IDc1MDtcbmxldCBpc0lPUyA9IGZhbHNlO1xubGV0IGRldmljZVdpZHRoID0gMDtcbmxldCBkZXZpY2VEUFIgPSAwO1xuXG5mdW5jdGlvbiBjaGVja0RldmljZVdpZHRoICgpIHtcbiAgY29uc3Qge1xuICAgIHBsYXRmb3JtLFxuICAgIHBpeGVsUmF0aW8sXG4gICAgd2luZG93V2lkdGhcbiAgfSA9IHd4LmdldFN5c3RlbUluZm9TeW5jKCk7IC8vIHVuaT0+d3ggcnVudGltZSDnvJbor5Hnm67moIfmmK8gdW5pIOWvueixoe+8jOWGhemDqOS4jeWFgeiuuOebtOaOpeS9v+eUqCB1bmlcblxuICBkZXZpY2VXaWR0aCA9IHdpbmRvd1dpZHRoO1xuICBkZXZpY2VEUFIgPSBwaXhlbFJhdGlvO1xuICBpc0lPUyA9IHBsYXRmb3JtID09PSAnaW9zJztcbn1cblxuZnVuY3Rpb24gdXB4MnB4IChudW1iZXIsIG5ld0RldmljZVdpZHRoKSB7XG4gIGlmIChkZXZpY2VXaWR0aCA9PT0gMCkge1xuICAgIGNoZWNrRGV2aWNlV2lkdGgoKTtcbiAgfVxuXG4gIG51bWJlciA9IE51bWJlcihudW1iZXIpO1xuICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBsZXQgcmVzdWx0ID0gKG51bWJlciAvIEJBU0VfREVWSUNFX1dJRFRIKSAqIChuZXdEZXZpY2VXaWR0aCB8fCBkZXZpY2VXaWR0aCk7XG4gIGlmIChyZXN1bHQgPCAwKSB7XG4gICAgcmVzdWx0ID0gLXJlc3VsdDtcbiAgfVxuICByZXN1bHQgPSBNYXRoLmZsb29yKHJlc3VsdCArIEVQUyk7XG4gIGlmIChyZXN1bHQgPT09IDApIHtcbiAgICBpZiAoZGV2aWNlRFBSID09PSAxIHx8ICFpc0lPUykge1xuICAgICAgcmV0dXJuIDFcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDAuNVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVtYmVyIDwgMCA/IC1yZXN1bHQgOiByZXN1bHRcbn1cblxuY29uc3QgaW50ZXJjZXB0b3JzID0ge1xuICBwcm9taXNlSW50ZXJjZXB0b3Jcbn07XG5cblxuXG52YXIgYmFzZUFwaSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgdXB4MnB4OiB1cHgycHgsXG4gIGludGVyY2VwdG9yczogaW50ZXJjZXB0b3JzLFxuICBhZGRJbnRlcmNlcHRvcjogYWRkSW50ZXJjZXB0b3IsXG4gIHJlbW92ZUludGVyY2VwdG9yOiByZW1vdmVJbnRlcmNlcHRvclxufSk7XG5cbmNvbnN0IHByb3RvY29scyA9IHt9O1xuY29uc3QgdG9kb3MgPSBbXTtcbmNvbnN0IGNhbklVc2VzID0gW107XG5cbmNvbnN0IENBTExCQUNLUyA9IFsnc3VjY2VzcycsICdmYWlsJywgJ2NhbmNlbCcsICdjb21wbGV0ZSddO1xuXG5mdW5jdGlvbiBwcm9jZXNzQ2FsbGJhY2sgKG1ldGhvZE5hbWUsIG1ldGhvZCwgcmV0dXJuVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXMpIHtcbiAgICByZXR1cm4gbWV0aG9kKHByb2Nlc3NSZXR1cm5WYWx1ZShtZXRob2ROYW1lLCByZXMsIHJldHVyblZhbHVlKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzQXJncyAobWV0aG9kTmFtZSwgZnJvbUFyZ3MsIGFyZ3NPcHRpb24gPSB7fSwgcmV0dXJuVmFsdWUgPSB7fSwga2VlcEZyb21BcmdzID0gZmFsc2UpIHtcbiAgaWYgKGlzUGxhaW5PYmplY3QoZnJvbUFyZ3MpKSB7IC8vIOS4gOiIrCBhcGkg55qE5Y+C5pWw6Kej5p6QXG4gICAgY29uc3QgdG9BcmdzID0ga2VlcEZyb21BcmdzID09PSB0cnVlID8gZnJvbUFyZ3MgOiB7fTsgLy8gcmV0dXJuVmFsdWUg5Li6IGZhbHNlIOaXtu+8jOivtOaYjuaYr+agvOW8j+WMlui/lOWbnuWAvO+8jOebtOaOpeWcqOi/lOWbnuWAvOWvueixoeS4iuS/ruaUuei1i+WAvFxuICAgIGlmIChpc0ZuKGFyZ3NPcHRpb24pKSB7XG4gICAgICBhcmdzT3B0aW9uID0gYXJnc09wdGlvbihmcm9tQXJncywgdG9BcmdzKSB8fCB7fTtcbiAgICB9XG4gICAgZm9yIChsZXQga2V5IGluIGZyb21BcmdzKSB7XG4gICAgICBpZiAoaGFzT3duKGFyZ3NPcHRpb24sIGtleSkpIHtcbiAgICAgICAgbGV0IGtleU9wdGlvbiA9IGFyZ3NPcHRpb25ba2V5XTtcbiAgICAgICAgaWYgKGlzRm4oa2V5T3B0aW9uKSkge1xuICAgICAgICAgIGtleU9wdGlvbiA9IGtleU9wdGlvbihmcm9tQXJnc1trZXldLCBmcm9tQXJncywgdG9BcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWtleU9wdGlvbikgeyAvLyDkuI3mlK/mjIHnmoTlj4LmlbBcbiAgICAgICAgICBjb25zb2xlLndhcm4oYGFwcC1wbHVzICR7bWV0aG9kTmFtZX3mmoLkuI3mlK/mjIEke2tleX1gKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1N0cihrZXlPcHRpb24pKSB7IC8vIOmHjeWGmeWPguaVsCBrZXlcbiAgICAgICAgICB0b0FyZ3Nba2V5T3B0aW9uXSA9IGZyb21BcmdzW2tleV07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChrZXlPcHRpb24pKSB7IC8vIHtuYW1lOm5ld05hbWUsdmFsdWU6dmFsdWV95Y+v6YeN5paw5oyH5a6a5Y+C5pWwIGtleTp2YWx1ZVxuICAgICAgICAgIHRvQXJnc1trZXlPcHRpb24ubmFtZSA/IGtleU9wdGlvbi5uYW1lIDoga2V5XSA9IGtleU9wdGlvbi52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChDQUxMQkFDS1MuaW5kZXhPZihrZXkpICE9PSAtMSkge1xuICAgICAgICB0b0FyZ3Nba2V5XSA9IHByb2Nlc3NDYWxsYmFjayhtZXRob2ROYW1lLCBmcm9tQXJnc1trZXldLCByZXR1cm5WYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWtlZXBGcm9tQXJncykge1xuICAgICAgICAgIHRvQXJnc1trZXldID0gZnJvbUFyZ3Nba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG9BcmdzXG4gIH0gZWxzZSBpZiAoaXNGbihmcm9tQXJncykpIHtcbiAgICBmcm9tQXJncyA9IHByb2Nlc3NDYWxsYmFjayhtZXRob2ROYW1lLCBmcm9tQXJncywgcmV0dXJuVmFsdWUpO1xuICB9XG4gIHJldHVybiBmcm9tQXJnc1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzUmV0dXJuVmFsdWUgKG1ldGhvZE5hbWUsIHJlcywgcmV0dXJuVmFsdWUsIGtlZXBSZXR1cm5WYWx1ZSA9IGZhbHNlKSB7XG4gIGlmIChpc0ZuKHByb3RvY29scy5yZXR1cm5WYWx1ZSkpIHsgLy8g5aSE55CG6YCa55SoIHJldHVyblZhbHVlXG4gICAgcmVzID0gcHJvdG9jb2xzLnJldHVyblZhbHVlKG1ldGhvZE5hbWUsIHJlcyk7XG4gIH1cbiAgcmV0dXJuIHByb2Nlc3NBcmdzKG1ldGhvZE5hbWUsIHJlcywgcmV0dXJuVmFsdWUsIHt9LCBrZWVwUmV0dXJuVmFsdWUpXG59XG5cbmZ1bmN0aW9uIHdyYXBwZXIgKG1ldGhvZE5hbWUsIG1ldGhvZCkge1xuICBpZiAoaGFzT3duKHByb3RvY29scywgbWV0aG9kTmFtZSkpIHtcbiAgICBjb25zdCBwcm90b2NvbCA9IHByb3RvY29sc1ttZXRob2ROYW1lXTtcbiAgICBpZiAoIXByb3RvY29sKSB7IC8vIOaaguS4jeaUr+aMgeeahCBhcGlcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYGFwcC1wbHVzIOaaguS4jeaUr+aMgSR7bWV0aG9kTmFtZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhcmcxLCBhcmcyKSB7IC8vIOebruWJjSBhcGkg5pyA5aSa5Lik5Liq5Y+C5pWwXG4gICAgICBsZXQgb3B0aW9ucyA9IHByb3RvY29sO1xuICAgICAgaWYgKGlzRm4ocHJvdG9jb2wpKSB7XG4gICAgICAgIG9wdGlvbnMgPSBwcm90b2NvbChhcmcxKTtcbiAgICAgIH1cblxuICAgICAgYXJnMSA9IHByb2Nlc3NBcmdzKG1ldGhvZE5hbWUsIGFyZzEsIG9wdGlvbnMuYXJncywgb3B0aW9ucy5yZXR1cm5WYWx1ZSk7XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSBbYXJnMV07XG4gICAgICBpZiAodHlwZW9mIGFyZzIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGFyZ3MucHVzaChhcmcyKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gd3hbb3B0aW9ucy5uYW1lIHx8IG1ldGhvZE5hbWVdLmFwcGx5KHd4LCBhcmdzKTtcbiAgICAgIGlmIChpc1N5bmNBcGkobWV0aG9kTmFtZSkpIHsgLy8g5ZCM5q2lIGFwaVxuICAgICAgICByZXR1cm4gcHJvY2Vzc1JldHVyblZhbHVlKG1ldGhvZE5hbWUsIHJldHVyblZhbHVlLCBvcHRpb25zLnJldHVyblZhbHVlLCBpc0NvbnRleHRBcGkobWV0aG9kTmFtZSkpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0dXJuVmFsdWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1ldGhvZFxufVxuXG5jb25zdCB0b2RvQXBpcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmNvbnN0IFRPRE9TID0gW1xuICAnc3Vic2NyaWJlUHVzaCcsXG4gICd1bnN1YnNjcmliZVB1c2gnLFxuICAnb25QdXNoJyxcbiAgJ29mZlB1c2gnLFxuICAnc2hhcmUnXG5dO1xuXG5mdW5jdGlvbiBjcmVhdGVUb2RvQXBpIChuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b2RvQXBpICh7XG4gICAgZmFpbCxcbiAgICBjb21wbGV0ZVxuICB9KSB7XG4gICAgY29uc3QgcmVzID0ge1xuICAgICAgZXJyTXNnOiBgJHtuYW1lfTpmYWlsOuaaguS4jeaUr+aMgSAke25hbWV9IOaWueazlWBcbiAgICB9O1xuICAgIGlzRm4oZmFpbCkgJiYgZmFpbChyZXMpO1xuICAgIGlzRm4oY29tcGxldGUpICYmIGNvbXBsZXRlKHJlcyk7XG4gIH1cbn1cblxuVE9ET1MuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICB0b2RvQXBpc1tuYW1lXSA9IGNyZWF0ZVRvZG9BcGkobmFtZSk7XG59KTtcblxuY29uc3QgZ2V0RW1pdHRlciA9IChmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgZ2V0VW5pRW1pdHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4gICAgcmV0dXJuIGdldFVuaUVtaXR0ZXJcbiAgfVxuICBsZXQgRW1pdHRlcjtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFVuaUVtaXR0ZXIgKCkge1xuICAgIGlmICghRW1pdHRlcikge1xuICAgICAgRW1pdHRlciA9IG5ldyBWdWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIEVtaXR0ZXJcbiAgfVxufSkoKTtcblxuZnVuY3Rpb24gYXBwbHkgKGN0eCwgbWV0aG9kLCBhcmdzKSB7XG4gIHJldHVybiBjdHhbbWV0aG9kXS5hcHBseShjdHgsIGFyZ3MpXG59XG5cbmZ1bmN0aW9uICRvbiAoKSB7XG4gIHJldHVybiBhcHBseShnZXRFbWl0dGVyKCksICckb24nLCBbLi4uYXJndW1lbnRzXSlcbn1cbmZ1bmN0aW9uICRvZmYgKCkge1xuICByZXR1cm4gYXBwbHkoZ2V0RW1pdHRlcigpLCAnJG9mZicsIFsuLi5hcmd1bWVudHNdKVxufVxuZnVuY3Rpb24gJG9uY2UgKCkge1xuICByZXR1cm4gYXBwbHkoZ2V0RW1pdHRlcigpLCAnJG9uY2UnLCBbLi4uYXJndW1lbnRzXSlcbn1cbmZ1bmN0aW9uICRlbWl0ICgpIHtcbiAgcmV0dXJuIGFwcGx5KGdldEVtaXR0ZXIoKSwgJyRlbWl0JywgWy4uLmFyZ3VtZW50c10pXG59XG5cbnZhciBldmVudEFwaSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgJG9uOiAkb24sXG4gICRvZmY6ICRvZmYsXG4gICRvbmNlOiAkb25jZSxcbiAgJGVtaXQ6ICRlbWl0XG59KTtcblxuZnVuY3Rpb24gd3JhcHBlciQxICh3ZWJ2aWV3KSB7XG4gIHdlYnZpZXcuJHByb2Nlc3NlZCA9IHRydWU7XG5cbiAgd2Vidmlldy5wb3N0TWVzc2FnZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgcGx1cy53ZWJ2aWV3LnBvc3RNZXNzYWdlVG9VbmlOVmlldyh7XG4gICAgICB0eXBlOiAnVW5pQXBwU3ViTlZ1ZScsXG4gICAgICBkYXRhXG4gICAgfSwgd2Vidmlldy5pZCk7XG4gIH07XG4gIGxldCBjYWxsYmFja3MgPSBbXTtcbiAgd2Vidmlldy5vbk1lc3NhZ2UgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gIH07XG4gIHdlYnZpZXcuJGNvbnN1bWVNZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICBjYWxsYmFja3MuZm9yRWFjaChjYWxsYmFjayA9PiBjYWxsYmFjayhlKSk7XG4gIH07XG5cbiAgaWYgKCF3ZWJ2aWV3Ll9fdW5pYXBwX21hc2tfaWQpIHtcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCBtYXNrQ29sb3IgPSB3ZWJ2aWV3Ll9fdW5pYXBwX21hc2s7XG4gIGxldCBtYXNrV2VidmlldyA9IHBsdXMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZCh3ZWJ2aWV3Ll9fdW5pYXBwX21hc2tfaWQpO1xuICBtYXNrV2VidmlldyA9IG1hc2tXZWJ2aWV3LnBhcmVudCgpIHx8IG1hc2tXZWJ2aWV3Oy8vIOWGjeasoeajgOa1i+eItlxuICBjb25zdCBvbGRTaG93ID0gd2Vidmlldy5zaG93O1xuICBjb25zdCBvbGRIaWRlID0gd2Vidmlldy5oaWRlO1xuICBjb25zdCBvbGRDbG9zZSA9IHdlYnZpZXcuY2xvc2U7XG5cbiAgY29uc3Qgc2hvd01hc2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgbWFza1dlYnZpZXcuc2V0U3R5bGUoe1xuICAgICAgbWFzazogbWFza0NvbG9yXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGNsb3NlTWFzayA9IGZ1bmN0aW9uICgpIHtcbiAgICBtYXNrV2Vidmlldy5zZXRTdHlsZSh7XG4gICAgICBtYXNrOiAnbm9uZSdcbiAgICB9KTtcbiAgfTtcbiAgd2Vidmlldy5zaG93ID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICBzaG93TWFzaygpO1xuICAgIHJldHVybiBvbGRTaG93LmFwcGx5KHdlYnZpZXcsIGFyZ3MpXG4gIH07XG4gIHdlYnZpZXcuaGlkZSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgY2xvc2VNYXNrKCk7XG4gICAgcmV0dXJuIG9sZEhpZGUuYXBwbHkod2VidmlldywgYXJncylcbiAgfTtcbiAgd2Vidmlldy5jbG9zZSA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgY2xvc2VNYXNrKCk7XG4gICAgY2FsbGJhY2tzID0gW107XG4gICAgcmV0dXJuIG9sZENsb3NlLmFwcGx5KHdlYnZpZXcsIGFyZ3MpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFN1Yk5WdWVCeUlkIChpZCkge1xuICBjb25zdCB3ZWJ2aWV3ID0gcGx1cy53ZWJ2aWV3LmdldFdlYnZpZXdCeUlkKGlkKTtcbiAgaWYgKHdlYnZpZXcgJiYgIXdlYnZpZXcuJHByb2Nlc3NlZCkge1xuICAgIHdyYXBwZXIkMSh3ZWJ2aWV3KTtcbiAgfVxuICByZXR1cm4gd2Vidmlld1xufVxuXG5mdW5jdGlvbiByZXF1aXJlTmF0aXZlUGx1Z2luIChwbHVnaW5OYW1lKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4gIGlmICh0eXBlb2Ygd2VleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gd2VleC5yZXF1aXJlTW9kdWxlKHBsdWdpbk5hbWUpXG4gIH1cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbiAgcmV0dXJuIF9fcmVxdWlyZU5hdGl2ZVBsdWdpbl9fKHBsdWdpbk5hbWUpXG59XG5cbnZhciBhcGkgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIHJlcXVpcmVOYXRpdmVQbHVnaW46IHJlcXVpcmVOYXRpdmVQbHVnaW4sXG4gIGdldFN1Yk5WdWVCeUlkOiBnZXRTdWJOVnVlQnlJZFxufSk7XG5cbmNvbnN0IE1QUGFnZSA9IFBhZ2U7XG5jb25zdCBNUENvbXBvbmVudCA9IENvbXBvbmVudDtcblxuY29uc3QgY3VzdG9taXplUkUgPSAvOi9nO1xuXG5jb25zdCBjdXN0b21pemUgPSBjYWNoZWQoKHN0cikgPT4ge1xuICByZXR1cm4gY2FtZWxpemUoc3RyLnJlcGxhY2UoY3VzdG9taXplUkUsICctJykpXG59KTtcblxuZnVuY3Rpb24gaW5pdFRyaWdnZXJFdmVudCAobXBJbnN0YW5jZSkge1xuICB7XG4gICAgaWYgKCF3eC5jYW5JVXNlKCduZXh0VGljaycpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cbiAgY29uc3Qgb2xkVHJpZ2dlckV2ZW50ID0gbXBJbnN0YW5jZS50cmlnZ2VyRXZlbnQ7XG4gIG1wSW5zdGFuY2UudHJpZ2dlckV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIG9sZFRyaWdnZXJFdmVudC5hcHBseShtcEluc3RhbmNlLCBbY3VzdG9taXplKGV2ZW50KSwgLi4uYXJnc10pXG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRIb29rIChuYW1lLCBvcHRpb25zKSB7XG4gIGNvbnN0IG9sZEhvb2sgPSBvcHRpb25zW25hbWVdO1xuICBpZiAoIW9sZEhvb2spIHtcbiAgICBvcHRpb25zW25hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgaW5pdFRyaWdnZXJFdmVudCh0aGlzKTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnNbbmFtZV0gPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgaW5pdFRyaWdnZXJFdmVudCh0aGlzKTtcbiAgICAgIHJldHVybiBvbGRIb29rLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgfTtcbiAgfVxufVxuXG5QYWdlID0gZnVuY3Rpb24gKG9wdGlvbnMgPSB7fSkge1xuICBpbml0SG9vaygnb25Mb2FkJywgb3B0aW9ucyk7XG4gIHJldHVybiBNUFBhZ2Uob3B0aW9ucylcbn07XG5cbkNvbXBvbmVudCA9IGZ1bmN0aW9uIChvcHRpb25zID0ge30pIHtcbiAgaW5pdEhvb2soJ2NyZWF0ZWQnLCBvcHRpb25zKTtcbiAgcmV0dXJuIE1QQ29tcG9uZW50KG9wdGlvbnMpXG59O1xuXG5jb25zdCBQQUdFX0VWRU5UX0hPT0tTID0gW1xuICAnb25QdWxsRG93blJlZnJlc2gnLFxuICAnb25SZWFjaEJvdHRvbScsXG4gICdvblNoYXJlQXBwTWVzc2FnZScsXG4gICdvblBhZ2VTY3JvbGwnLFxuICAnb25SZXNpemUnLFxuICAnb25UYWJJdGVtVGFwJ1xuXTtcblxuZnVuY3Rpb24gaW5pdE1vY2tzICh2bSwgbW9ja3MpIHtcbiAgY29uc3QgbXBJbnN0YW5jZSA9IHZtLiRtcFt2bS5tcFR5cGVdO1xuICBtb2Nrcy5mb3JFYWNoKG1vY2sgPT4ge1xuICAgIGlmIChoYXNPd24obXBJbnN0YW5jZSwgbW9jaykpIHtcbiAgICAgIHZtW21vY2tdID0gbXBJbnN0YW5jZVttb2NrXTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoYXNIb29rIChob29rLCB2dWVPcHRpb25zKSB7XG4gIGlmICghdnVlT3B0aW9ucykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoVnVlLm9wdGlvbnMgJiYgQXJyYXkuaXNBcnJheShWdWUub3B0aW9uc1tob29rXSkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgdnVlT3B0aW9ucyA9IHZ1ZU9wdGlvbnMuZGVmYXVsdCB8fCB2dWVPcHRpb25zO1xuXG4gIGlmIChpc0ZuKHZ1ZU9wdGlvbnMpKSB7XG4gICAgaWYgKGlzRm4odnVlT3B0aW9ucy5leHRlbmRPcHRpb25zW2hvb2tdKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgaWYgKHZ1ZU9wdGlvbnMuc3VwZXIgJiZcbiAgICAgIHZ1ZU9wdGlvbnMuc3VwZXIub3B0aW9ucyAmJlxuICAgICAgQXJyYXkuaXNBcnJheSh2dWVPcHRpb25zLnN1cGVyLm9wdGlvbnNbaG9va10pKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChpc0ZuKHZ1ZU9wdGlvbnNbaG9va10pKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBjb25zdCBtaXhpbnMgPSB2dWVPcHRpb25zLm1peGlucztcbiAgaWYgKEFycmF5LmlzQXJyYXkobWl4aW5zKSkge1xuICAgIHJldHVybiAhIW1peGlucy5maW5kKG1peGluID0+IGhhc0hvb2soaG9vaywgbWl4aW4pKVxuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRIb29rcyAobXBPcHRpb25zLCBob29rcywgdnVlT3B0aW9ucykge1xuICBob29rcy5mb3JFYWNoKGhvb2sgPT4ge1xuICAgIGlmIChoYXNIb29rKGhvb2ssIHZ1ZU9wdGlvbnMpKSB7XG4gICAgICBtcE9wdGlvbnNbaG9va10gPSBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4kdm0gJiYgdGhpcy4kdm0uX19jYWxsX2hvb2soaG9vaywgYXJncylcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gaW5pdFZ1ZUNvbXBvbmVudCAoVnVlLCB2dWVPcHRpb25zKSB7XG4gIHZ1ZU9wdGlvbnMgPSB2dWVPcHRpb25zLmRlZmF1bHQgfHwgdnVlT3B0aW9ucztcbiAgbGV0IFZ1ZUNvbXBvbmVudDtcbiAgaWYgKGlzRm4odnVlT3B0aW9ucykpIHtcbiAgICBWdWVDb21wb25lbnQgPSB2dWVPcHRpb25zO1xuICAgIHZ1ZU9wdGlvbnMgPSBWdWVDb21wb25lbnQuZXh0ZW5kT3B0aW9ucztcbiAgfSBlbHNlIHtcbiAgICBWdWVDb21wb25lbnQgPSBWdWUuZXh0ZW5kKHZ1ZU9wdGlvbnMpO1xuICB9XG4gIHJldHVybiBbVnVlQ29tcG9uZW50LCB2dWVPcHRpb25zXVxufVxuXG5mdW5jdGlvbiBpbml0U2xvdHMgKHZtLCB2dWVTbG90cykge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2dWVTbG90cykgJiYgdnVlU2xvdHMubGVuZ3RoKSB7XG4gICAgY29uc3QgJHNsb3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB2dWVTbG90cy5mb3JFYWNoKHNsb3ROYW1lID0+IHtcbiAgICAgICRzbG90c1tzbG90TmFtZV0gPSB0cnVlO1xuICAgIH0pO1xuICAgIHZtLiRzY29wZWRTbG90cyA9IHZtLiRzbG90cyA9ICRzbG90cztcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0VnVlSWRzICh2dWVJZHMsIG1wSW5zdGFuY2UpIHtcbiAgdnVlSWRzID0gKHZ1ZUlkcyB8fCAnJykuc3BsaXQoJywnKTtcbiAgY29uc3QgbGVuID0gdnVlSWRzLmxlbmd0aDtcblxuICBpZiAobGVuID09PSAxKSB7XG4gICAgbXBJbnN0YW5jZS5fJHZ1ZUlkID0gdnVlSWRzWzBdO1xuICB9IGVsc2UgaWYgKGxlbiA9PT0gMikge1xuICAgIG1wSW5zdGFuY2UuXyR2dWVJZCA9IHZ1ZUlkc1swXTtcbiAgICBtcEluc3RhbmNlLl8kdnVlUGlkID0gdnVlSWRzWzFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhICh2dWVPcHRpb25zLCBjb250ZXh0KSB7XG4gIGxldCBkYXRhID0gdnVlT3B0aW9ucy5kYXRhIHx8IHt9O1xuICBjb25zdCBtZXRob2RzID0gdnVlT3B0aW9ucy5tZXRob2RzIHx8IHt9O1xuXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBkYXRhID0gZGF0YS5jYWxsKGNvbnRleHQpOyAvLyDmlK/mjIEgVnVlLnByb3RvdHlwZSDkuIrmjILnmoTmlbDmja5cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuVlVFX0FQUF9ERUJVRykge1xuICAgICAgICBjb25zb2xlLndhcm4oJ+agueaNriBWdWUg55qEIGRhdGEg5Ye95pWw5Yid5aeL5YyW5bCP56iL5bqPIGRhdGEg5aSx6LSl77yM6K+35bC96YeP56Gu5L+dIGRhdGEg5Ye95pWw5Lit5LiN6K6/6ZeuIHZtIOWvueixoe+8jOWQpuWImeWPr+iDveW9seWTjemmluasoeaVsOaNrua4suafk+mAn+W6puOAgicsIGRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgLy8g5a+5IGRhdGEg5qC85byP5YyWXG4gICAgICBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuXG4gIGlmICghaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgIGRhdGEgPSB7fTtcbiAgfVxuXG4gIE9iamVjdC5rZXlzKG1ldGhvZHMpLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgaWYgKGNvbnRleHQuX19saWZlY3ljbGVfaG9va3NfXy5pbmRleE9mKG1ldGhvZE5hbWUpID09PSAtMSAmJiAhaGFzT3duKGRhdGEsIG1ldGhvZE5hbWUpKSB7XG4gICAgICBkYXRhW21ldGhvZE5hbWVdID0gbWV0aG9kc1ttZXRob2ROYW1lXTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhXG59XG5cbmNvbnN0IFBST1BfVFlQRVMgPSBbU3RyaW5nLCBOdW1iZXIsIEJvb2xlYW4sIE9iamVjdCwgQXJyYXksIG51bGxdO1xuXG5mdW5jdGlvbiBjcmVhdGVPYnNlcnZlciAobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24gb2JzZXJ2ZXIgKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgaWYgKHRoaXMuJHZtKSB7XG4gICAgICB0aGlzLiR2bVtuYW1lXSA9IG5ld1ZhbDsgLy8g5Li65LqG6Kem5Y+R5YW25LuW6Z2eIHJlbmRlciB3YXRjaGVyXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRCZWhhdmlvcnMgKHZ1ZU9wdGlvbnMsIGluaXRCZWhhdmlvcikge1xuICBjb25zdCB2dWVCZWhhdmlvcnMgPSB2dWVPcHRpb25zWydiZWhhdmlvcnMnXTtcbiAgY29uc3QgdnVlRXh0ZW5kcyA9IHZ1ZU9wdGlvbnNbJ2V4dGVuZHMnXTtcbiAgY29uc3QgdnVlTWl4aW5zID0gdnVlT3B0aW9uc1snbWl4aW5zJ107XG5cbiAgbGV0IHZ1ZVByb3BzID0gdnVlT3B0aW9uc1sncHJvcHMnXTtcblxuICBpZiAoIXZ1ZVByb3BzKSB7XG4gICAgdnVlT3B0aW9uc1sncHJvcHMnXSA9IHZ1ZVByb3BzID0gW107XG4gIH1cblxuICBjb25zdCBiZWhhdmlvcnMgPSBbXTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodnVlQmVoYXZpb3JzKSkge1xuICAgIHZ1ZUJlaGF2aW9ycy5mb3JFYWNoKGJlaGF2aW9yID0+IHtcbiAgICAgIGJlaGF2aW9ycy5wdXNoKGJlaGF2aW9yLnJlcGxhY2UoJ3VuaTovLycsIGAke1wid3hcIn06Ly9gKSk7XG4gICAgICBpZiAoYmVoYXZpb3IgPT09ICd1bmk6Ly9mb3JtLWZpZWxkJykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2dWVQcm9wcykpIHtcbiAgICAgICAgICB2dWVQcm9wcy5wdXNoKCduYW1lJyk7XG4gICAgICAgICAgdnVlUHJvcHMucHVzaCgndmFsdWUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2dWVQcm9wc1snbmFtZSddID0ge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgZGVmYXVsdDogJydcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZ1ZVByb3BzWyd2YWx1ZSddID0ge1xuICAgICAgICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyLCBCb29sZWFuLCBBcnJheSwgT2JqZWN0LCBEYXRlXSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGlmIChpc1BsYWluT2JqZWN0KHZ1ZUV4dGVuZHMpICYmIHZ1ZUV4dGVuZHMucHJvcHMpIHtcbiAgICBiZWhhdmlvcnMucHVzaChcbiAgICAgIGluaXRCZWhhdmlvcih7XG4gICAgICAgIHByb3BlcnRpZXM6IGluaXRQcm9wZXJ0aWVzKHZ1ZUV4dGVuZHMucHJvcHMsIHRydWUpXG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodnVlTWl4aW5zKSkge1xuICAgIHZ1ZU1peGlucy5mb3JFYWNoKHZ1ZU1peGluID0+IHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZ1ZU1peGluKSAmJiB2dWVNaXhpbi5wcm9wcykge1xuICAgICAgICBiZWhhdmlvcnMucHVzaChcbiAgICAgICAgICBpbml0QmVoYXZpb3Ioe1xuICAgICAgICAgICAgcHJvcGVydGllczogaW5pdFByb3BlcnRpZXModnVlTWl4aW4ucHJvcHMsIHRydWUpXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYmVoYXZpb3JzXG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJvcFR5cGUgKGtleSwgdHlwZSwgZGVmYXVsdFZhbHVlLCBmaWxlKSB7XG4gIC8vIFtTdHJpbmddPT5TdHJpbmdcbiAgaWYgKEFycmF5LmlzQXJyYXkodHlwZSkgJiYgdHlwZS5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gdHlwZVswXVxuICB9XG4gIHJldHVybiB0eXBlXG59XG5cbmZ1bmN0aW9uIGluaXRQcm9wZXJ0aWVzIChwcm9wcywgaXNCZWhhdmlvciA9IGZhbHNlLCBmaWxlID0gJycpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IHt9O1xuICBpZiAoIWlzQmVoYXZpb3IpIHtcbiAgICBwcm9wZXJ0aWVzLnZ1ZUlkID0ge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgdmFsdWU6ICcnXG4gICAgfTtcbiAgICBwcm9wZXJ0aWVzLnZ1ZVNsb3RzID0geyAvLyDlsI/nqIvluo/kuI3og73nm7TmjqXlrprkuYkgJHNsb3RzIOeahCBwcm9wc++8jOaJgOS7pemAmui/hyB2dWVTbG90cyDovazmjaLliLAgJHNsb3RzXG4gICAgICB0eXBlOiBudWxsLFxuICAgICAgdmFsdWU6IFtdLFxuICAgICAgb2JzZXJ2ZXI6IGZ1bmN0aW9uIChuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgICBjb25zdCAkc2xvdHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBuZXdWYWwuZm9yRWFjaChzbG90TmFtZSA9PiB7XG4gICAgICAgICAgJHNsb3RzW3Nsb3ROYW1lXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNldERhdGEoe1xuICAgICAgICAgICRzbG90c1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BzKSkgeyAvLyBbJ3RpdGxlJ11cbiAgICBwcm9wcy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBwcm9wZXJ0aWVzW2tleV0gPSB7XG4gICAgICAgIHR5cGU6IG51bGwsXG4gICAgICAgIG9ic2VydmVyOiBjcmVhdGVPYnNlcnZlcihrZXkpXG4gICAgICB9O1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QocHJvcHMpKSB7IC8vIHt0aXRsZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDonJ30sY29udGVudDpTdHJpbmd9XG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IG9wdHMgPSBwcm9wc1trZXldO1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3Qob3B0cykpIHsgLy8gdGl0bGU6e3R5cGU6U3RyaW5nLGRlZmF1bHQ6Jyd9XG4gICAgICAgIGxldCB2YWx1ZSA9IG9wdHNbJ2RlZmF1bHQnXTtcbiAgICAgICAgaWYgKGlzRm4odmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3B0cy50eXBlID0gcGFyc2VQcm9wVHlwZShrZXksIG9wdHMudHlwZSk7XG5cbiAgICAgICAgcHJvcGVydGllc1trZXldID0ge1xuICAgICAgICAgIHR5cGU6IFBST1BfVFlQRVMuaW5kZXhPZihvcHRzLnR5cGUpICE9PSAtMSA/IG9wdHMudHlwZSA6IG51bGwsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgb2JzZXJ2ZXI6IGNyZWF0ZU9ic2VydmVyKGtleSlcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7IC8vIGNvbnRlbnQ6U3RyaW5nXG4gICAgICAgIGNvbnN0IHR5cGUgPSBwYXJzZVByb3BUeXBlKGtleSwgb3B0cyk7XG4gICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHtcbiAgICAgICAgICB0eXBlOiBQUk9QX1RZUEVTLmluZGV4T2YodHlwZSkgIT09IC0xID8gdHlwZSA6IG51bGwsXG4gICAgICAgICAgb2JzZXJ2ZXI6IGNyZWF0ZU9ic2VydmVyKGtleSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcHJvcGVydGllc1xufVxuXG5mdW5jdGlvbiB3cmFwcGVyJDIgKGV2ZW50KSB7XG4gIC8vIFRPRE8g5Y+I5b6X5YW85a65IG1wdnVlIOeahCBtcCDlr7nosaFcbiAgdHJ5IHtcbiAgICBldmVudC5tcCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXZlbnQpKTtcbiAgfSBjYXRjaCAoZSkge31cblxuICBldmVudC5zdG9wUHJvcGFnYXRpb24gPSBub29wO1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCA9IG5vb3A7XG5cbiAgZXZlbnQudGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IHt9O1xuXG4gIGlmICghaGFzT3duKGV2ZW50LCAnZGV0YWlsJykpIHtcbiAgICBldmVudC5kZXRhaWwgPSB7fTtcbiAgfVxuXG4gIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50LmRldGFpbCkpIHtcbiAgICBldmVudC50YXJnZXQgPSBPYmplY3QuYXNzaWduKHt9LCBldmVudC50YXJnZXQsIGV2ZW50LmRldGFpbCk7XG4gIH1cblxuICByZXR1cm4gZXZlbnRcbn1cblxuZnVuY3Rpb24gZ2V0RXh0cmFWYWx1ZSAodm0sIGRhdGFQYXRoc0FycmF5KSB7XG4gIGxldCBjb250ZXh0ID0gdm07XG4gIGRhdGFQYXRoc0FycmF5LmZvckVhY2goZGF0YVBhdGhBcnJheSA9PiB7XG4gICAgY29uc3QgZGF0YVBhdGggPSBkYXRhUGF0aEFycmF5WzBdO1xuICAgIGNvbnN0IHZhbHVlID0gZGF0YVBhdGhBcnJheVsyXTtcbiAgICBpZiAoZGF0YVBhdGggfHwgdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykgeyAvLyBbJycsJycsaW5kZXgsJ2Rpc2FibGUnXVxuICAgICAgY29uc3QgcHJvcFBhdGggPSBkYXRhUGF0aEFycmF5WzFdO1xuICAgICAgY29uc3QgdmFsdWVQYXRoID0gZGF0YVBhdGhBcnJheVszXTtcblxuICAgICAgY29uc3QgdkZvciA9IGRhdGFQYXRoID8gdm0uX19nZXRfdmFsdWUoZGF0YVBhdGgsIGNvbnRleHQpIDogY29udGV4dDtcblxuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIodkZvcikpIHtcbiAgICAgICAgY29udGV4dCA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmICghcHJvcFBhdGgpIHtcbiAgICAgICAgY29udGV4dCA9IHZGb3JbdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodkZvcikpIHtcbiAgICAgICAgICBjb250ZXh0ID0gdkZvci5maW5kKHZGb3JJdGVtID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2bS5fX2dldF92YWx1ZShwcm9wUGF0aCwgdkZvckl0ZW0pID09PSB2YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodkZvcikpIHtcbiAgICAgICAgICBjb250ZXh0ID0gT2JqZWN0LmtleXModkZvcikuZmluZCh2Rm9yS2V5ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2bS5fX2dldF92YWx1ZShwcm9wUGF0aCwgdkZvclt2Rm9yS2V5XSkgPT09IHZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigndi1mb3Ig5pqC5LiN5pSv5oyB5b6q546v5pWw5o2u77yaJywgdkZvcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlUGF0aCkge1xuICAgICAgICBjb250ZXh0ID0gdm0uX19nZXRfdmFsdWUodmFsdWVQYXRoLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29udGV4dFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzRXZlbnRFeHRyYSAodm0sIGV4dHJhLCBldmVudCkge1xuICBjb25zdCBleHRyYU9iaiA9IHt9O1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGV4dHJhKSAmJiBleHRyYS5sZW5ndGgpIHtcbiAgICAvKipcbiAgICAgKltcbiAgICAgKiAgICBbJ2RhdGEuaXRlbXMnLCAnZGF0YS5pZCcsIGl0ZW0uZGF0YS5pZF0sXG4gICAgICogICAgWydtZXRhcycsICdpZCcsIG1ldGEuaWRdXG4gICAgICpdLFxuICAgICAqW1xuICAgICAqICAgIFsnZGF0YS5pdGVtcycsICdkYXRhLmlkJywgaXRlbS5kYXRhLmlkXSxcbiAgICAgKiAgICBbJ21ldGFzJywgJ2lkJywgbWV0YS5pZF1cbiAgICAgKl0sXG4gICAgICondGVzdCdcbiAgICAgKi9cbiAgICBleHRyYS5mb3JFYWNoKChkYXRhUGF0aCwgaW5kZXgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YVBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghZGF0YVBhdGgpIHsgLy8gbW9kZWwscHJvcC5zeW5jXG4gICAgICAgICAgZXh0cmFPYmpbJyQnICsgaW5kZXhdID0gdm07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGRhdGFQYXRoID09PSAnJGV2ZW50JykgeyAvLyAkZXZlbnRcbiAgICAgICAgICAgIGV4dHJhT2JqWyckJyArIGluZGV4XSA9IGV2ZW50O1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVBhdGguaW5kZXhPZignJGV2ZW50LicpID09PSAwKSB7IC8vICRldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgICAgIGV4dHJhT2JqWyckJyArIGluZGV4XSA9IHZtLl9fZ2V0X3ZhbHVlKGRhdGFQYXRoLnJlcGxhY2UoJyRldmVudC4nLCAnJyksIGV2ZW50KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXh0cmFPYmpbJyQnICsgaW5kZXhdID0gdm0uX19nZXRfdmFsdWUoZGF0YVBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXh0cmFPYmpbJyQnICsgaW5kZXhdID0gZ2V0RXh0cmFWYWx1ZSh2bSwgZGF0YVBhdGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGV4dHJhT2JqXG59XG5cbmZ1bmN0aW9uIGdldE9iakJ5QXJyYXkgKGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyW2ldO1xuICAgIG9ialtlbGVtZW50WzBdXSA9IGVsZW1lbnRbMV07XG4gIH1cbiAgcmV0dXJuIG9ialxufVxuXG5mdW5jdGlvbiBwcm9jZXNzRXZlbnRBcmdzICh2bSwgZXZlbnQsIGFyZ3MgPSBbXSwgZXh0cmEgPSBbXSwgaXNDdXN0b20sIG1ldGhvZE5hbWUpIHtcbiAgbGV0IGlzQ3VzdG9tTVBFdmVudCA9IGZhbHNlOyAvLyB3eGNvbXBvbmVudCDnu4Tku7bvvIzkvKDpgJLljp/lp4sgZXZlbnQg5a+56LGhXG4gIGlmIChpc0N1c3RvbSkgeyAvLyDoh6rlrprkuYnkuovku7ZcbiAgICBpc0N1c3RvbU1QRXZlbnQgPSBldmVudC5jdXJyZW50VGFyZ2V0ICYmXG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQgJiZcbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuZGF0YXNldC5jb21UeXBlID09PSAnd3gnO1xuICAgIGlmICghYXJncy5sZW5ndGgpIHsgLy8g5peg5Y+C5pWw77yM55u05o6l5Lyg5YWlIGV2ZW50IOaIliBkZXRhaWwg5pWw57uEXG4gICAgICBpZiAoaXNDdXN0b21NUEV2ZW50KSB7XG4gICAgICAgIHJldHVybiBbZXZlbnRdXG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnQuZGV0YWlsLl9fYXJnc19fIHx8IGV2ZW50LmRldGFpbFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV4dHJhT2JqID0gcHJvY2Vzc0V2ZW50RXh0cmEodm0sIGV4dHJhLCBldmVudCk7XG5cbiAgY29uc3QgcmV0ID0gW107XG4gIGFyZ3MuZm9yRWFjaChhcmcgPT4ge1xuICAgIGlmIChhcmcgPT09ICckZXZlbnQnKSB7XG4gICAgICBpZiAobWV0aG9kTmFtZSA9PT0gJ19fc2V0X21vZGVsJyAmJiAhaXNDdXN0b20pIHsgLy8gaW5wdXQgdi1tb2RlbCB2YWx1ZVxuICAgICAgICByZXQucHVzaChldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzQ3VzdG9tICYmICFpc0N1c3RvbU1QRXZlbnQpIHtcbiAgICAgICAgICByZXQucHVzaChldmVudC5kZXRhaWwuX19hcmdzX19bMF0pO1xuICAgICAgICB9IGVsc2UgeyAvLyB3eGNvbXBvbmVudCDnu4Tku7bmiJblhoXnva7nu4Tku7ZcbiAgICAgICAgICByZXQucHVzaChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSAmJiBhcmdbMF0gPT09ICdvJykge1xuICAgICAgICByZXQucHVzaChnZXRPYmpCeUFycmF5KGFyZykpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyAmJiBoYXNPd24oZXh0cmFPYmosIGFyZykpIHtcbiAgICAgICAgcmV0LnB1c2goZXh0cmFPYmpbYXJnXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQucHVzaChhcmcpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJldFxufVxuXG5jb25zdCBPTkNFID0gJ34nO1xuY29uc3QgQ1VTVE9NID0gJ14nO1xuXG5mdW5jdGlvbiBpc01hdGNoRXZlbnRUeXBlIChldmVudFR5cGUsIG9wdFR5cGUpIHtcbiAgcmV0dXJuIChldmVudFR5cGUgPT09IG9wdFR5cGUpIHx8XG4gICAgKFxuICAgICAgb3B0VHlwZSA9PT0gJ3JlZ2lvbmNoYW5nZScgJiZcbiAgICAgIChcbiAgICAgICAgZXZlbnRUeXBlID09PSAnYmVnaW4nIHx8XG4gICAgICAgIGV2ZW50VHlwZSA9PT0gJ2VuZCdcbiAgICAgIClcbiAgICApXG59XG5cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50IChldmVudCkge1xuICBldmVudCA9IHdyYXBwZXIkMihldmVudCk7XG5cbiAgLy8gW1sndGFwJyxbWydoYW5kbGUnLFsxLDIsYV1dLFsnaGFuZGxlMScsWzEsMixhXV1dXV1cbiAgY29uc3QgZGF0YXNldCA9IChldmVudC5jdXJyZW50VGFyZ2V0IHx8IGV2ZW50LnRhcmdldCkuZGF0YXNldDtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIGNvbnNvbGUud2Fybihg5LqL5Lu25L+h5oGv5LiN5a2Y5ZyoYClcbiAgfVxuICBjb25zdCBldmVudE9wdHMgPSBkYXRhc2V0LmV2ZW50T3B0cyB8fCBkYXRhc2V0WydldmVudC1vcHRzJ107IC8vIOaUr+S7mOWunSB3ZWItdmlldyDnu4Tku7YgZGF0YXNldCDpnZ7pqbzls7BcbiAgaWYgKCFldmVudE9wdHMpIHtcbiAgICByZXR1cm4gY29uc29sZS53YXJuKGDkuovku7bkv6Hmga/kuI3lrZjlnKhgKVxuICB9XG5cbiAgLy8gW1snaGFuZGxlJyxbMSwyLGFdXSxbJ2hhbmRsZTEnLFsxLDIsYV1dXVxuICBjb25zdCBldmVudFR5cGUgPSBldmVudC50eXBlO1xuXG4gIGNvbnN0IHJldCA9IFtdO1xuXG4gIGV2ZW50T3B0cy5mb3JFYWNoKGV2ZW50T3B0ID0+IHtcbiAgICBsZXQgdHlwZSA9IGV2ZW50T3B0WzBdO1xuICAgIGNvbnN0IGV2ZW50c0FycmF5ID0gZXZlbnRPcHRbMV07XG5cbiAgICBjb25zdCBpc0N1c3RvbSA9IHR5cGUuY2hhckF0KDApID09PSBDVVNUT007XG4gICAgdHlwZSA9IGlzQ3VzdG9tID8gdHlwZS5zbGljZSgxKSA6IHR5cGU7XG4gICAgY29uc3QgaXNPbmNlID0gdHlwZS5jaGFyQXQoMCkgPT09IE9OQ0U7XG4gICAgdHlwZSA9IGlzT25jZSA/IHR5cGUuc2xpY2UoMSkgOiB0eXBlO1xuXG4gICAgaWYgKGV2ZW50c0FycmF5ICYmIGlzTWF0Y2hFdmVudFR5cGUoZXZlbnRUeXBlLCB0eXBlKSkge1xuICAgICAgZXZlbnRzQXJyYXkuZm9yRWFjaChldmVudEFycmF5ID0+IHtcbiAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGV2ZW50QXJyYXlbMF07XG4gICAgICAgIGlmIChtZXRob2ROYW1lKSB7XG4gICAgICAgICAgbGV0IGhhbmRsZXJDdHggPSB0aGlzLiR2bTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBoYW5kbGVyQ3R4LiRvcHRpb25zLmdlbmVyaWMgJiZcbiAgICAgICAgICAgIGhhbmRsZXJDdHguJHBhcmVudCAmJlxuICAgICAgICAgICAgaGFuZGxlckN0eC4kcGFyZW50LiRwYXJlbnRcbiAgICAgICAgICApIHsgLy8gbXAtd2VpeGluLG1wLXRvdXRpYW8g5oq96LGh6IqC54K55qih5oufIHNjb3BlZCBzbG90c1xuICAgICAgICAgICAgaGFuZGxlckN0eCA9IGhhbmRsZXJDdHguJHBhcmVudC4kcGFyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gaGFuZGxlckN0eFttZXRob2ROYW1lXTtcbiAgICAgICAgICBpZiAoIWlzRm4oaGFuZGxlcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgIF92bS4ke21ldGhvZE5hbWV9IGlzIG5vdCBhIGZ1bmN0aW9uYClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzT25jZSkge1xuICAgICAgICAgICAgaWYgKGhhbmRsZXIub25jZSkge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGhhbmRsZXIub25jZSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldC5wdXNoKGhhbmRsZXIuYXBwbHkoaGFuZGxlckN0eCwgcHJvY2Vzc0V2ZW50QXJncyhcbiAgICAgICAgICAgIHRoaXMuJHZtLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBldmVudEFycmF5WzFdLFxuICAgICAgICAgICAgZXZlbnRBcnJheVsyXSxcbiAgICAgICAgICAgIGlzQ3VzdG9tLFxuICAgICAgICAgICAgbWV0aG9kTmFtZVxuICAgICAgICAgICkpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBpZiAoXG4gICAgZXZlbnRUeXBlID09PSAnaW5wdXQnICYmXG4gICAgcmV0Lmxlbmd0aCA9PT0gMSAmJlxuICAgIHR5cGVvZiByZXRbMF0gIT09ICd1bmRlZmluZWQnXG4gICkge1xuICAgIHJldHVybiByZXRbMF1cbiAgfVxufVxuXG5jb25zdCBob29rcyA9IFtcbiAgJ29uU2hvdycsXG4gICdvbkhpZGUnLFxuICAnb25FcnJvcicsXG4gICdvblBhZ2VOb3RGb3VuZCdcbl07XG5cbmZ1bmN0aW9uIHBhcnNlQmFzZUFwcCAodm0sIHtcbiAgbW9ja3MsXG4gIGluaXRSZWZzXG59KSB7XG4gIFZ1ZS5wcm90b3R5cGUubXBIb3N0ID0gXCJhcHAtcGx1c1wiO1xuXG4gIFZ1ZS5taXhpbih7XG4gICAgYmVmb3JlQ3JlYXRlICgpIHtcbiAgICAgIGlmICghdGhpcy4kb3B0aW9ucy5tcFR5cGUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMubXBUeXBlID0gdGhpcy4kb3B0aW9ucy5tcFR5cGU7XG5cbiAgICAgIHRoaXMuJG1wID0ge1xuICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgW3RoaXMubXBUeXBlXTogdGhpcy4kb3B0aW9ucy5tcEluc3RhbmNlXG4gICAgICB9O1xuXG4gICAgICB0aGlzLiRzY29wZSA9IHRoaXMuJG9wdGlvbnMubXBJbnN0YW5jZTtcblxuICAgICAgZGVsZXRlIHRoaXMuJG9wdGlvbnMubXBUeXBlO1xuICAgICAgZGVsZXRlIHRoaXMuJG9wdGlvbnMubXBJbnN0YW5jZTtcblxuICAgICAgaWYgKHRoaXMubXBUeXBlICE9PSAnYXBwJykge1xuICAgICAgICBpbml0UmVmcyh0aGlzKTtcbiAgICAgICAgaW5pdE1vY2tzKHRoaXMsIG1vY2tzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGFwcE9wdGlvbnMgPSB7XG4gICAgb25MYXVuY2ggKGFyZ3MpIHtcbiAgICAgIGlmICh0aGlzLiR2bSkgeyAvLyDlt7Lnu4/liJ3lp4vljJbov4fkuobvvIzkuLvopoHmmK/kuLrkuobnmb7luqbvvIznmb7luqYgb25TaG93IOWcqCBvbkxhdW5jaCDkuYvliY1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuJHZtID0gdm07XG5cbiAgICAgIHRoaXMuJHZtLiRtcCA9IHtcbiAgICAgICAgYXBwOiB0aGlzXG4gICAgICB9O1xuXG4gICAgICB0aGlzLiR2bS4kc2NvcGUgPSB0aGlzO1xuXG4gICAgICB0aGlzLiR2bS5faXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuJHZtLl9fY2FsbF9ob29rKCdtb3VudGVkJywgYXJncyk7XG5cbiAgICAgIHRoaXMuJHZtLl9fY2FsbF9ob29rKCdvbkxhdW5jaCcsIGFyZ3MpO1xuICAgIH1cbiAgfTtcblxuICAvLyDlhbzlrrnml6fniYjmnKwgZ2xvYmFsRGF0YVxuICBhcHBPcHRpb25zLmdsb2JhbERhdGEgPSB2bS4kb3B0aW9ucy5nbG9iYWxEYXRhIHx8IHt9O1xuXG4gIGluaXRIb29rcyhhcHBPcHRpb25zLCBob29rcyk7XG5cbiAgcmV0dXJuIGFwcE9wdGlvbnNcbn1cblxuY29uc3QgbW9ja3MgPSBbJ19fcm91dGVfXycsICdfX3d4RXhwYXJzZXJOb2RlSWRfXycsICdfX3d4V2Vidmlld0lkX18nXTtcblxuZnVuY3Rpb24gZmluZFZtQnlWdWVJZCAodm0sIHZ1ZVBpZCkge1xuICBjb25zdCAkY2hpbGRyZW4gPSB2bS4kY2hpbGRyZW47XG4gIC8vIOS8mOWFiOafpeaJvuebtOWxnlxuICBsZXQgcGFyZW50Vm0gPSAkY2hpbGRyZW4uZmluZChjaGlsZFZtID0+IGNoaWxkVm0uJHNjb3BlLl8kdnVlSWQgPT09IHZ1ZVBpZCk7XG4gIGlmIChwYXJlbnRWbSkge1xuICAgIHJldHVybiBwYXJlbnRWbVxuICB9XG4gIC8vIOWPjeWQkemAkuW9kuafpeaJvlxuICBmb3IgKGxldCBpID0gJGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgcGFyZW50Vm0gPSBmaW5kVm1CeVZ1ZUlkKCRjaGlsZHJlbltpXSwgdnVlUGlkKTtcbiAgICBpZiAocGFyZW50Vm0pIHtcbiAgICAgIHJldHVybiBwYXJlbnRWbVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0QmVoYXZpb3IgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIEJlaGF2aW9yKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGlzUGFnZSAoKSB7XG4gIHJldHVybiAhIXRoaXMucm91dGVcbn1cblxuZnVuY3Rpb24gaW5pdFJlbGF0aW9uIChkZXRhaWwpIHtcbiAgdGhpcy50cmlnZ2VyRXZlbnQoJ19fbCcsIGRldGFpbCk7XG59XG5cbmZ1bmN0aW9uIGluaXRSZWZzICh2bSkge1xuICBjb25zdCBtcEluc3RhbmNlID0gdm0uJHNjb3BlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodm0sICckcmVmcycsIHtcbiAgICBnZXQgKCkge1xuICAgICAgY29uc3QgJHJlZnMgPSB7fTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBtcEluc3RhbmNlLnNlbGVjdEFsbENvbXBvbmVudHMoJy52dWUtcmVmJyk7XG4gICAgICBjb21wb25lbnRzLmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgICAgY29uc3QgcmVmID0gY29tcG9uZW50LmRhdGFzZXQucmVmO1xuICAgICAgICAkcmVmc1tyZWZdID0gY29tcG9uZW50LiR2bSB8fCBjb21wb25lbnQ7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZvckNvbXBvbmVudHMgPSBtcEluc3RhbmNlLnNlbGVjdEFsbENvbXBvbmVudHMoJy52dWUtcmVmLWluLWZvcicpO1xuICAgICAgZm9yQ29tcG9uZW50cy5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHJlZiA9IGNvbXBvbmVudC5kYXRhc2V0LnJlZjtcbiAgICAgICAgaWYgKCEkcmVmc1tyZWZdKSB7XG4gICAgICAgICAgJHJlZnNbcmVmXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgICRyZWZzW3JlZl0ucHVzaChjb21wb25lbnQuJHZtIHx8IGNvbXBvbmVudCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAkcmVmc1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUxpbmsgKGV2ZW50KSB7XG4gIGNvbnN0IHtcbiAgICB2dWVQaWQsXG4gICAgdnVlT3B0aW9uc1xuICB9ID0gZXZlbnQuZGV0YWlsIHx8IGV2ZW50LnZhbHVlOyAvLyBkZXRhaWwg5piv5b6u5L+hLHZhbHVlIOaYr+eZvuW6pihkaXBhdGNoKVxuXG4gIGxldCBwYXJlbnRWbTtcblxuICBpZiAodnVlUGlkKSB7XG4gICAgcGFyZW50Vm0gPSBmaW5kVm1CeVZ1ZUlkKHRoaXMuJHZtLCB2dWVQaWQpO1xuICB9XG5cbiAgaWYgKCFwYXJlbnRWbSkge1xuICAgIHBhcmVudFZtID0gdGhpcy4kdm07XG4gIH1cblxuICB2dWVPcHRpb25zLnBhcmVudCA9IHBhcmVudFZtO1xufVxuXG5mdW5jdGlvbiBwYXJzZUFwcCAodm0pIHtcbiAgcmV0dXJuIHBhcnNlQmFzZUFwcCh2bSwge1xuICAgIG1vY2tzLFxuICAgIGluaXRSZWZzXG4gIH0pXG59XG5cbmNvbnN0IGhvb2tzJDEgPSBbXG4gICdvblVuaU5WaWV3TWVzc2FnZSdcbl07XG5cbmZ1bmN0aW9uIHBhcnNlQXBwJDEgKHZtKSB7XG4gIGNvbnN0IGFwcE9wdGlvbnMgPSBwYXJzZUFwcCh2bSk7XG5cbiAgaW5pdEhvb2tzKGFwcE9wdGlvbnMsIGhvb2tzJDEpO1xuXG4gIHJldHVybiBhcHBPcHRpb25zXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFwcCAodm0pIHtcbiAgQXBwKHBhcnNlQXBwJDEodm0pKTtcbiAgcmV0dXJuIHZtXG59XG5cbmZ1bmN0aW9uIHBhcnNlQmFzZUNvbXBvbmVudCAodnVlQ29tcG9uZW50T3B0aW9ucywge1xuICBpc1BhZ2UsXG4gIGluaXRSZWxhdGlvblxufSA9IHt9KSB7XG4gIGxldCBbVnVlQ29tcG9uZW50LCB2dWVPcHRpb25zXSA9IGluaXRWdWVDb21wb25lbnQoVnVlLCB2dWVDb21wb25lbnRPcHRpb25zKTtcblxuICBjb25zdCBjb21wb25lbnRPcHRpb25zID0ge1xuICAgIG9wdGlvbnM6IHtcbiAgICAgIG11bHRpcGxlU2xvdHM6IHRydWUsXG4gICAgICBhZGRHbG9iYWxDbGFzczogdHJ1ZVxuICAgIH0sXG4gICAgZGF0YTogaW5pdERhdGEodnVlT3B0aW9ucywgVnVlLnByb3RvdHlwZSksXG4gICAgYmVoYXZpb3JzOiBpbml0QmVoYXZpb3JzKHZ1ZU9wdGlvbnMsIGluaXRCZWhhdmlvciksXG4gICAgcHJvcGVydGllczogaW5pdFByb3BlcnRpZXModnVlT3B0aW9ucy5wcm9wcywgZmFsc2UsIHZ1ZU9wdGlvbnMuX19maWxlKSxcbiAgICBsaWZldGltZXM6IHtcbiAgICAgIGF0dGFjaGVkICgpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcztcblxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgIG1wVHlwZTogaXNQYWdlLmNhbGwodGhpcykgPyAncGFnZScgOiAnY29tcG9uZW50JyxcbiAgICAgICAgICBtcEluc3RhbmNlOiB0aGlzLFxuICAgICAgICAgIHByb3BzRGF0YTogcHJvcGVydGllc1xuICAgICAgICB9O1xuXG4gICAgICAgIGluaXRWdWVJZHMocHJvcGVydGllcy52dWVJZCwgdGhpcyk7XG5cbiAgICAgICAgLy8g5aSE55CG54i25a2Q5YWz57O7XG4gICAgICAgIGluaXRSZWxhdGlvbi5jYWxsKHRoaXMsIHtcbiAgICAgICAgICB2dWVQaWQ6IHRoaXMuXyR2dWVQaWQsXG4gICAgICAgICAgdnVlT3B0aW9uczogb3B0aW9uc1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyDliJ3lp4vljJYgdnVlIOWunuS+i1xuICAgICAgICB0aGlzLiR2bSA9IG5ldyBWdWVDb21wb25lbnQob3B0aW9ucyk7XG5cbiAgICAgICAgLy8g5aSE55CGJHNsb3RzLCRzY29wZWRTbG90c++8iOaaguS4jeaUr+aMgeWKqOaAgeWPmOWMliRzbG90c++8iVxuICAgICAgICBpbml0U2xvdHModGhpcy4kdm0sIHByb3BlcnRpZXMudnVlU2xvdHMpO1xuXG4gICAgICAgIC8vIOinpuWPkemmluasoSBzZXREYXRhXG4gICAgICAgIHRoaXMuJHZtLiRtb3VudCgpO1xuICAgICAgfSxcbiAgICAgIHJlYWR5ICgpIHtcbiAgICAgICAgLy8g5b2T57uE5Lu2IHByb3BzIOm7mOiupOWAvOS4uiB0cnVl77yM5Yid5aeL5YyW5pe25Lyg5YWlIGZhbHNlIOS8muWvvOiHtCBjcmVhdGVkLHJlYWR5IOinpuWPkSwg5L2GIGF0dGFjaGVkIOS4jeinpuWPkVxuICAgICAgICAvLyBodHRwczovL2RldmVsb3BlcnMud2VpeGluLnFxLmNvbS9jb21tdW5pdHkvZGV2ZWxvcC9kb2MvMDAwNjZhZTI4NDRjYzBmOGViODgzZTJhNTU3ODAwXG4gICAgICAgIGlmICh0aGlzLiR2bSkge1xuICAgICAgICAgIHRoaXMuJHZtLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuJHZtLl9fY2FsbF9ob29rKCdtb3VudGVkJyk7XG4gICAgICAgICAgdGhpcy4kdm0uX19jYWxsX2hvb2soJ29uUmVhZHknKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRldGFjaGVkICgpIHtcbiAgICAgICAgdGhpcy4kdm0uJGRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhZ2VMaWZldGltZXM6IHtcbiAgICAgIHNob3cgKGFyZ3MpIHtcbiAgICAgICAgdGhpcy4kdm0gJiYgdGhpcy4kdm0uX19jYWxsX2hvb2soJ29uUGFnZVNob3cnLCBhcmdzKTtcbiAgICAgIH0sXG4gICAgICBoaWRlICgpIHtcbiAgICAgICAgdGhpcy4kdm0gJiYgdGhpcy4kdm0uX19jYWxsX2hvb2soJ29uUGFnZUhpZGUnKTtcbiAgICAgIH0sXG4gICAgICByZXNpemUgKHNpemUpIHtcbiAgICAgICAgdGhpcy4kdm0gJiYgdGhpcy4kdm0uX19jYWxsX2hvb2soJ29uUGFnZVJlc2l6ZScsIHNpemUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgX19sOiBoYW5kbGVMaW5rLFxuICAgICAgX19lOiBoYW5kbGVFdmVudFxuICAgIH1cbiAgfTtcblxuICBpZiAoaXNQYWdlKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudE9wdGlvbnNcbiAgfVxuICByZXR1cm4gW2NvbXBvbmVudE9wdGlvbnMsIFZ1ZUNvbXBvbmVudF1cbn1cblxuZnVuY3Rpb24gcGFyc2VDb21wb25lbnQgKHZ1ZUNvbXBvbmVudE9wdGlvbnMpIHtcbiAgcmV0dXJuIHBhcnNlQmFzZUNvbXBvbmVudCh2dWVDb21wb25lbnRPcHRpb25zLCB7XG4gICAgaXNQYWdlLFxuICAgIGluaXRSZWxhdGlvblxuICB9KVxufVxuXG5mdW5jdGlvbiBwYXJzZUNvbXBvbmVudCQxICh2dWVDb21wb25lbnRPcHRpb25zKSB7XG4gIGNvbnN0IGNvbXBvbmVudE9wdGlvbnMgPSBwYXJzZUNvbXBvbmVudCh2dWVDb21wb25lbnRPcHRpb25zKTtcblxuICBjb21wb25lbnRPcHRpb25zLm1ldGhvZHMuJGdldEFwcFdlYnZpZXcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHBsdXMud2Vidmlldy5nZXRXZWJ2aWV3QnlJZChgJHt0aGlzLl9fd3hXZWJ2aWV3SWRfX31gKVxuICB9O1xuICByZXR1cm4gY29tcG9uZW50T3B0aW9uc1xufVxuXG5jb25zdCBob29rcyQyID0gW1xuICAnb25TaG93JyxcbiAgJ29uSGlkZScsXG4gICdvblVubG9hZCdcbl07XG5cbmhvb2tzJDIucHVzaCguLi5QQUdFX0VWRU5UX0hPT0tTKTtcblxuZnVuY3Rpb24gcGFyc2VCYXNlUGFnZSAodnVlUGFnZU9wdGlvbnMsIHtcbiAgaXNQYWdlLFxuICBpbml0UmVsYXRpb25cbn0pIHtcbiAgY29uc3QgcGFnZU9wdGlvbnMgPSBwYXJzZUNvbXBvbmVudCQxKHZ1ZVBhZ2VPcHRpb25zKTtcblxuICBpbml0SG9va3MocGFnZU9wdGlvbnMubWV0aG9kcywgaG9va3MkMiwgdnVlUGFnZU9wdGlvbnMpO1xuXG4gIHBhZ2VPcHRpb25zLm1ldGhvZHMub25Mb2FkID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICB0aGlzLiR2bS4kbXAucXVlcnkgPSBhcmdzOyAvLyDlhbzlrrkgbXB2dWVcbiAgICB0aGlzLiR2bS5fX2NhbGxfaG9vaygnb25Mb2FkJywgYXJncyk7XG4gIH07XG5cbiAgcmV0dXJuIHBhZ2VPcHRpb25zXG59XG5cbmZ1bmN0aW9uIHBhcnNlUGFnZSAodnVlUGFnZU9wdGlvbnMpIHtcbiAgcmV0dXJuIHBhcnNlQmFzZVBhZ2UodnVlUGFnZU9wdGlvbnMsIHtcbiAgICBpc1BhZ2UsXG4gICAgaW5pdFJlbGF0aW9uXG4gIH0pXG59XG5cbmNvbnN0IGhvb2tzJDMgPSBbXG4gICdvbkJhY2tQcmVzcycsXG4gICdvbk5hdmlnYXRpb25CYXJCdXR0b25UYXAnLFxuICAnb25OYXZpZ2F0aW9uQmFyU2VhcmNoSW5wdXRDaGFuZ2VkJyxcbiAgJ29uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Q29uZmlybWVkJyxcbiAgJ29uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Q2xpY2tlZCdcbl07XG5cbmZ1bmN0aW9uIHBhcnNlUGFnZSQxICh2dWVQYWdlT3B0aW9ucykge1xuICBjb25zdCBwYWdlT3B0aW9ucyA9IHBhcnNlUGFnZSh2dWVQYWdlT3B0aW9ucyk7XG5cbiAgaW5pdEhvb2tzKHBhZ2VPcHRpb25zLm1ldGhvZHMsIGhvb2tzJDMpO1xuXG4gIHJldHVybiBwYWdlT3B0aW9uc1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQYWdlICh2dWVQYWdlT3B0aW9ucykge1xuICB7XG4gICAgcmV0dXJuIENvbXBvbmVudChwYXJzZVBhZ2UkMSh2dWVQYWdlT3B0aW9ucykpXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50ICh2dWVPcHRpb25zKSB7XG4gIHtcbiAgICByZXR1cm4gQ29tcG9uZW50KHBhcnNlQ29tcG9uZW50JDEodnVlT3B0aW9ucykpXG4gIH1cbn1cblxudG9kb3MuZm9yRWFjaCh0b2RvQXBpID0+IHtcbiAgcHJvdG9jb2xzW3RvZG9BcGldID0gZmFsc2U7XG59KTtcblxuY2FuSVVzZXMuZm9yRWFjaChjYW5JVXNlQXBpID0+IHtcbiAgY29uc3QgYXBpTmFtZSA9IHByb3RvY29sc1tjYW5JVXNlQXBpXSAmJiBwcm90b2NvbHNbY2FuSVVzZUFwaV0ubmFtZSA/IHByb3RvY29sc1tjYW5JVXNlQXBpXS5uYW1lXG4gICAgOiBjYW5JVXNlQXBpO1xuICBpZiAoIXd4LmNhbklVc2UoYXBpTmFtZSkpIHtcbiAgICBwcm90b2NvbHNbY2FuSVVzZUFwaV0gPSBmYWxzZTtcbiAgfVxufSk7XG5cbmxldCB1bmkgPSB7fTtcblxuaWYgKHR5cGVvZiBQcm94eSAhPT0gJ3VuZGVmaW5lZCcgJiYgXCJhcHAtcGx1c1wiICE9PSAnYXBwLXBsdXMnKSB7XG4gIHVuaSA9IG5ldyBQcm94eSh7fSwge1xuICAgIGdldCAodGFyZ2V0LCBuYW1lKSB7XG4gICAgICBpZiAoYmFzZUFwaVtuYW1lXSkge1xuICAgICAgICByZXR1cm4gYmFzZUFwaVtuYW1lXVxuICAgICAgfVxuICAgICAgaWYgKGFwaVtuYW1lXSkge1xuICAgICAgICByZXR1cm4gcHJvbWlzaWZ5KG5hbWUsIGFwaVtuYW1lXSlcbiAgICAgIH1cbiAgICAgIGlmIChldmVudEFwaVtuYW1lXSkge1xuICAgICAgICByZXR1cm4gZXZlbnRBcGlbbmFtZV1cbiAgICAgIH1cbiAgICAgIGlmICghaGFzT3duKHd4LCBuYW1lKSAmJiAhaGFzT3duKHByb3RvY29scywgbmFtZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvbWlzaWZ5KG5hbWUsIHdyYXBwZXIobmFtZSwgd3hbbmFtZV0pKVxuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBPYmplY3Qua2V5cyhiYXNlQXBpKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgIHVuaVtuYW1lXSA9IGJhc2VBcGlbbmFtZV07XG4gIH0pO1xuXG4gIE9iamVjdC5rZXlzKGV2ZW50QXBpKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgIHVuaVtuYW1lXSA9IGV2ZW50QXBpW25hbWVdO1xuICB9KTtcblxuICBPYmplY3Qua2V5cyhhcGkpLmZvckVhY2gobmFtZSA9PiB7XG4gICAgdW5pW25hbWVdID0gcHJvbWlzaWZ5KG5hbWUsIGFwaVtuYW1lXSk7XG4gIH0pO1xuXG4gIE9iamVjdC5rZXlzKHd4KS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgIGlmIChoYXNPd24od3gsIG5hbWUpIHx8IGhhc093bihwcm90b2NvbHMsIG5hbWUpKSB7XG4gICAgICB1bmlbbmFtZV0gPSBwcm9taXNpZnkobmFtZSwgd3JhcHBlcihuYW1lLCB3eFtuYW1lXSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbntcbiAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZ2xvYmFsLnVuaSA9IHVuaTtcbiAgICBnbG9iYWwuVW5pRW1pdHRlciA9IGV2ZW50QXBpO1xuICB9XG59XG5cbnd4LmNyZWF0ZUFwcCA9IGNyZWF0ZUFwcDtcbnd4LmNyZWF0ZVBhZ2UgPSBjcmVhdGVQYWdlO1xud3guY3JlYXRlQ29tcG9uZW50ID0gY3JlYXRlQ29tcG9uZW50O1xuXG52YXIgdW5pJDEgPSB1bmk7XG5cbmV4cG9ydCBkZWZhdWx0IHVuaSQxO1xuZXhwb3J0IHsgY3JlYXRlQXBwLCBjcmVhdGVDb21wb25lbnQsIGNyZWF0ZVBhZ2UgfTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n"); /***/ }), /* 2 */ /*!***********************************!*\ !*** (webpack)/buildin/global.js ***! \***********************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbbnVsbF0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1QyIsImZpbGUiOiIyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n"); /***/ }), /* 3 */ /*!******************************************************************************************!*\ !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js ***! \******************************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/*!\n * Vue.js v2.6.10\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n/* */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce 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 // $flow-disable-line\n typeof value === 'symbol' ||\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\nfunction isPromise (val) {\n return (\n isDef(val) &&\n typeof val.then === 'function' &&\n typeof val.catch === 'function'\n )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert an 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 an 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 an 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 polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (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\n boundFn._length = fn.length;\n return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n ? nativeBind\n : polyfillBind;\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/* eslint-disable no-unused-vars */\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/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\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 (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime()\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\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\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 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 'serverPrefetch'\n];\n\n/* */\n\n\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\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: \"development\" !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: \"development\" !== '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 // $flow-disable-line\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 * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/* */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\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 = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\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 inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\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) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\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 && !inWeex && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'] && 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 = /*@__PURE__*/(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 (true) {\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 {\n if(vm.$scope && vm.$scope.is){\n return vm.$scope.is\n }\n }\n if (vm.$root === vm) {\n return ''\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)) + \">\") : \"\") +\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 ? '---> ' : 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\nvar uid = 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++;\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 if ( true && !config.async) {\n // subs aren't sorted in scheduler if not running async\n // we need to sort them now to make sure they fire in correct\n // order\n subs.sort(function (a, b) { return a.id - b.id; });\n }\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 only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (target) {\n targetStack.push(target);\n Dep.target = target;\n}\n\nfunction popTarget () {\n targetStack.pop();\n Dep.target = targetStack[targetStack.length - 1];\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.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = 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) {\n var cloned = new VNode(\n vnode.tag,\n vnode.data,\n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(),\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.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned\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\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.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 * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch 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 if (hasProto) {\n protoAugment(value, arrayMethods);\n } else {\n copyAugment(value, arrayMethods, arrayKeys);\n }\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through all properties 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$$1(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 a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment a 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 shouldObserve &&\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$$1 (\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 if ((!getter || setter) && arguments.length === 2) {\n val = obj[key];\n }\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 ( true && customSetter) {\n customSetter();\n }\n // #7981: for accessor properties without setter\n if (getter && !setter) { return }\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 ( true &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n }\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 (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n true && 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$$1(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 ( true &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n }\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 true && 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 (true) {\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\n var keys = hasSymbol\n ? Reflect.ownKeys(from)\n : Object.keys(from);\n\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n // in case the object is already observed...\n if (key === '__ob__') { continue }\n toVal = to[key];\n fromVal = from[key];\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (\n toVal !== fromVal &&\n isPlainObject(toVal) &&\n isPlainObject(fromVal)\n ) {\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, this) : childVal,\n typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n )\n }\n } else {\n return function mergedInstanceDataFn () {\n // instance merge\n var instanceData = typeof childVal === 'function'\n ? childVal.call(vm, vm)\n : childVal;\n var defaultData = typeof parentVal === 'function'\n ? parentVal.call(vm, 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 true && 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(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 var res = childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : Array.isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal;\n return res\n ? dedupeHooks(res)\n : res\n}\n\nfunction dedupeHooks (hooks) {\n var res = [];\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n return res\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 true && 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 (true) {\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 && \"development\" !== '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 validateComponentName(key);\n }\n}\n\nfunction validateComponentName (name) {\n if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n warn(\n 'Invalid component name: \"' + name + '\". Component names ' +\n 'should conform to valid custom element name in html5 specification.'\n );\n }\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + name\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 (true) {\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 (true) {\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 if (!inject) { return }\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 (true) {\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$$1 = dirs[key];\n if (typeof def$$1 === 'function') {\n dirs[key] = { bind: def$$1, update: def$$1 };\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 (true) {\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\n // Apply extends and mixins on the child options,\n // but only if it is a raw options object that isn't\n // the result of another mergeOptions call.\n // Only merged options has the _base property.\n if (!child._base) {\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, 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 }\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 ( true && warnMissing && !res) {\n warn(\n 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n options\n );\n }\n return res\n}\n\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 // boolean casting\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\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 prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n if (\n true\n ) {\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 ( true && 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\n if (!valid) {\n warn(\n getInvalidTypeMessage(name, value, expectedTypes),\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 isSameType (a, b) {\n return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n if (!Array.isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1\n }\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i\n }\n }\n return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n var expectedType = expectedTypes[0];\n var receivedType = toRawType(value);\n var expectedValue = styleValue(value, expectedType);\n var receivedValue = styleValue(value, receivedType);\n // check if we need to specify expected value\n if (expectedTypes.length === 1 &&\n isExplicable(expectedType) &&\n !isBoolean(expectedType, receivedType)) {\n message += \" with value \" + expectedValue;\n }\n message += \", got \" + receivedType + \" \";\n // check if we need to specify received value\n if (isExplicable(receivedType)) {\n message += \"with value \" + receivedValue + \".\";\n }\n return message\n}\n\nfunction styleValue (value, type) {\n if (type === 'String') {\n return (\"\\\"\" + value + \"\\\"\")\n } else if (type === 'Number') {\n return (\"\" + (Number(value)))\n } else {\n return (\"\" + value)\n }\n}\n\nfunction isExplicable (value) {\n var explicitTypes = ['string', 'number', 'boolean'];\n return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n // See: https://github.com/vuejs/vuex/issues/1505\n pushTarget();\n try {\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 } finally {\n popTarget();\n }\n}\n\nfunction invokeWithErrorHandling (\n handler,\n context,\n args,\n vm,\n info\n) {\n var res;\n try {\n res = args ? handler.apply(context, args) : handler.call(context);\n if (res && !res._isVue && isPromise(res) && !res._handled) {\n res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n // issue #9511\n // avoid catch triggering multiple times when nested calls\n res._handled = true;\n }\n } catch (e) {\n handleError(e, vm, info);\n }\n return res\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 // if the user intentionally throws the original error in the handler,\n // do not log it twice\n if (e !== err) {\n logError(e, null, 'config.errorHandler');\n }\n }\n }\n logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n if (true) {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n}\n\n/* */\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 microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n timerFunc = 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 if (!isIE && typeof MutationObserver !== 'undefined' && (\n isNative(MutationObserver) ||\n // PhantomJS and iOS 7.x\n MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n // Use MutationObserver where native Promise is not available,\n // e.g. PhantomJS, iOS7, Android 4.4\n // (#6466 MutationObserver is unreliable in IE11)\n var counter = 1;\n var observer = new MutationObserver(flushCallbacks);\n var textNode = document.createTextNode(String(counter));\n observer.observe(textNode, {\n characterData: true\n });\n timerFunc = function () {\n counter = (counter + 1) % 2;\n textNode.data = String(counter);\n };\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n // Fallback to setImmediate.\n // Techinically it leverages the (macro) task queue,\n // but it is still a better choice than setTimeout.\n timerFunc = function () {\n setImmediate(flushCallbacks);\n };\n} else {\n // Fallback to setTimeout.\n timerFunc = function () {\n setTimeout(flushCallbacks, 0);\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 timerFunc();\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 (true) {\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 warnReservedPrefix = function (target, key) {\n warn(\n \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n 'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n 'prevent conflicts with Vue internals' +\n 'See: https://vuejs.org/v2/api/#data',\n target\n );\n };\n\n var hasProxy =\n typeof Proxy !== 'undefined' && isNative(Proxy);\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) ||\n (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n if (!has && !isAllowed) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { 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 if (key in target.$data) { warnReservedPrefix(target, key); }\n else { 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\n/* */\n\nvar seenObjects = new _Set();\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 */\nfunction traverse (val) {\n _traverse(val, seenObjects);\n seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\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\nvar mark;\nvar measure;\n\nif (true) {\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, vm) {\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 invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n }\n } else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n }\n }\n invoker.fns = fns;\n return invoker\n}\n\nfunction updateListeners (\n on,\n oldOn,\n add,\n remove$$1,\n createOnceHandler,\n vm\n) {\n var name, def$$1, cur, old, event;\n for (name in on) {\n def$$1 = cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n true && 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, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\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\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 (true) {\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. 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.